Inside3D tutorials.

Inside3D
 • Front Page
 • Articles
 • Downloads
 • Forums
 • Hosting
 • Help Wanted
 • Interviews
 • Reviews
 • Staff

 
Allied Sites
 - AI Cafe
 - Bot Epidemic
 - Dark Places
 - Flat Earth
 - FrikBot
 - Ghoulish Art
 - Kilbert3D
 - Quake Info Pool
 - QSG: Quake Standards
 - Rusted Fork
 - Stroggs Gone Mad
 - More...
 
Quake
 - Getting Started
 - QuakeC Specs v1.0
 - QuakeC Tutorials
 - Quake Mod Index
 
Quake II
 - Getting Started
 - dll Sourcecode
 - Coding Tutorials
 
.dll Central
 - Getting Started
 - Learning
 - dll Primer
 - dll in C
 - dll in Delphi
 - Compilers
 
Jedi Knight
 - Getting Started
 - COG Specs
 - Sound Specs
 - Tutorials
 
Level Editing
 - Tutorials/Tips
 
 
Telefragged!!!
Created By: Ursader
eMail: ursader@flash.net
Difficulty Scale: Easy


Step 1
This is a quite easy patch, which makes bullets, rockets, grenades, etc, teleport. (Good if you are chasing an enemy thru a teleporter)

Step 2
Open up TRIGGERS.QC, and find teleport_touch:
void() teleport_touch =
{
local entity	t;
local vector	org;

/*
This is added:
*/
        if (other.teleport_time > time) return;  // Can't teleport before time is up

        if ( (other.classname != "missile") && (other.classname != "grenade") &&
             (other.classname != "player") && (other.classname != "spike") &&
             (other.classname != "gib") && (other.classname != "weapon_supershotgun") &&    
             (other.classname != "weapon_grenadelauncher") && (other.classname != "weapon_supernailgun") &&
             (other.classname != "weapon_nailgun") && (other.classname != "weapon_lightning") &&
             (other.classname != "weapon_rocketlauncher") && (other.classname != "") )
                return;
/*
^-- Keeps things that spawn near the teleporter from teleporting..
This is a BAD thing to have happen :(
If you use this in a TC or something, just add any new classnames you make up
there..
*/

/* That parts done */

	if (self.targetname)
	{
		if (self.nextthink < time)
		{
			return;		// not fired yet
		}
	}

// When you find this, comment it out.  Allows things other than "player"
// to pass through...

/*
        if (self.spawnflags & PLAYER_ONLY)
        {
                if (other.classname != "player")
                        return;
        }

*/
// only teleport living creatures
// if (other.health <= 0 || other.solid != SOLID_SLIDEBOX)
//                return;
// Allowing teleporting of non-living objects!
        if ((other.health <= 0) && (other.solid == SOLID_NOT))
                return;
        if (other.classname == "trigger_teleport")
                return;
// Done..
	SUB_UseTargets ();

// put a tfog where the player was
        if (other.classname == "player")
                spawn_tfog (other.origin);

	t = find (world, targetname, self.target);
	if (!t)
		objerror ("couldn't find target");
		
// spawn a tfog flash in front of the destination
	makevectors (t.mangle);
	org = t.origin + 32 * v_forward;

/*
Lets not allow telefragging with nails/rockets/grenades :)
*/
        if (other.classname == "player")
        {
                spawn_tfog (org);
                spawn_tdeath(t.origin, other);
        } 
/* Done.. */

// move the player and lock him down for a little while
	if (!other.health)
	{
		other.origin = t.origin;
/*
For right speed and angle of teleported things..
*/
//    other.velocity = (v_forward * other.velocity_x) + (v_forward * other.velocity_y);
//    other.velocity = v_forward * 600;
if (other.velocity_y < 0) other.velocity_y = other.velocity_y * -1;
                other.fixangle = 1;             // turn this way immediately
                other.teleport_time = time + 0.7;
                other.angles = t.mangle;
/* Yadda, Yadda.. */
		return;
	}
	setorigin (other, t.origin);
	other.angles = t.mangle;

	if (other.classname == "player")
	{
		other.fixangle = 1;		// turn this way immediately
		other.teleport_time = time + 0.7;

		if (other.flags & FL_ONGROUND)
			other.flags = other.flags - FL_ONGROUND;
		other.velocity = v_forward * 300;
	}
	other.flags = other.flags - other.flags & FL_ONGROUND;
};


Step 3
Now that was quite a bit, eh? You can just copy\paste the whole part above, and re-place it with the one in triggers.qc. Makes it easier. Ok now, Find trigger_teleport. This part will let you always teleport something.. For instance: If you didn't add this little tid-bit of code, there would have to be a certain spot on the teleporter that would allow shooting.. This allows it everywhere..
void() trigger_teleport =
{
	local vector o;

	InitTrigger ();
        self.flags = self.flags | FL_ITEM;     // Make big.. BIG!! :) (add this)
	self.touch = teleport_touch;

	// find the destination
	if (!self.target)
		objerror ("no target");
	self.use = teleport_use;

	if (!(self.spawnflags & SILENT))
	{
		precache_sound ("ambience/hum1.wav");
		o = (self.mins + self.maxs)*0.5;
		ambientsound (o, "ambience/hum1.wav",0.5 , ATTN_STATIC);
	}
};
Step 4
Now, that wasn't too hard, was it?? Compile, and load it up the usual way. Fire a grenade or something thru a teleporter, then run thru it.. Just to look at how it's working.






The Inside3D content and design is copyrighted by the Inside3D team, and may not be re-produced or copied without proper consent. All rights reserved. Any work credited to any author not part of InsideQC is copyrighted by that author. If you have any feedback, suggestions or flames please send it in to the author. Inside3D is hosted by telefragged and the design was originated by project-9.