]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
New entity property: "teleportable" -- also use it to enable CTF flags to teleport
authorSamual <samual@xonotic.org>
Mon, 2 Apr 2012 17:50:58 +0000 (13:50 -0400)
committerSamual <samual@xonotic.org>
Mon, 2 Apr 2012 17:50:58 +0000 (13:50 -0400)
qcsrc/server/attic/monsters/m_monsters.qc
qcsrc/server/cl_client.qc
qcsrc/server/cl_player.qc
qcsrc/server/defs.qh
qcsrc/server/mutators/gamemode_ctf.qc
qcsrc/server/t_teleporters.qc
qcsrc/server/tturrets/units/unit_ewheel.qc
qcsrc/server/tturrets/units/unit_walker.qc
qcsrc/server/vehicles/vehicles.qc

index 3e160d97b543e89e84fe01a53084dced6aa4139b..b450f761e31af442b2c084763e97fd44ae5faf84 100644 (file)
@@ -259,6 +259,7 @@ void() walkmonster_start_go =
 // spread think times so they don't all happen at same time
        self.nextthink = self.nextthink + random()*0.5 + 0.1;
        self.iscreature = TRUE;
+       self.teleportable = TELEPORT_NORMAL;
        self.damagedbycontents = TRUE;
 
        force_retouch = 2; // mainly to detect teleports
@@ -353,6 +354,7 @@ void() flymonster_start_go =
                }
        }
        self.iscreature = TRUE;
+       self.teleportable = TELEPORT_NORMAL;
        self.damagedbycontents = TRUE;
 
        force_retouch = 2; // mainly to detect teleports
@@ -442,6 +444,7 @@ void() swimmonster_start_go =
                }
        }
        self.iscreature = TRUE;
+       self.teleportable = TELEPORT_NORMAL;
        self.damagedbycontents = TRUE;
 
        force_retouch = 2; // mainly to detect teleports
index 10e4c13790b64de425d699b19cb55ebe78d1ad43..7b06576ddf9227cd4723e3157b1358f972719aa0 100644 (file)
@@ -445,6 +445,7 @@ void PutObserverInServer (void)
        
        self.classname = "observer";
        self.iscreature = FALSE;
+       self.teleportable = TELEPORT_SIMPLE;
        self.damagedbycontents = FALSE;
        self.health = -666;
        self.takedamage = DAMAGE_NO;
@@ -693,6 +694,7 @@ void PutClientInServer (void)
                self.classname = "player";
                self.wasplayer = TRUE;
                self.iscreature = TRUE;
+               self.teleportable = TELEPORT_NORMAL;
                self.damagedbycontents = TRUE;
                self.movetype = MOVETYPE_WALK;
                self.solid = SOLID_SLIDEBOX;
index 80f818e1fe3a9e144fe27b4f0dfc578323934445..258d1874b49f2f381ad1d3b42c36b9e9a9166453 100644 (file)
@@ -151,6 +151,7 @@ void CopyBody(float keepvelocity)
        self.lip = oldself.lip;
        self.colormap = oldself.colormap;
        self.iscreature = oldself.iscreature;
+       self.teleportable = oldself.teleportable;
        self.damagedbycontents = oldself.damagedbycontents;
        self.angles = oldself.angles;
        self.avelocity = oldself.avelocity;
index 56e70430334e05a180ddfa89533a5fa188333ae4..3bf8743412202b94832855fa2658dda4991b5ec3 100644 (file)
@@ -198,6 +198,7 @@ void setanim(entity e, vector anim, float looping, float override, float restart
 .float damagedbycontents;
 .float damagedbytriggers;
 .float pushable;
+.float teleportable;
 .vector oldvelocity;
 
 .float pauseregen_finished;
index e63a84fe54b4984b6dc495a4d340cfcceb8d9b82..95be2622f751b97b007cf74523559da0de820a3c 100644 (file)
@@ -837,6 +837,7 @@ void ctf_FlagSetup(float teamnumber, entity flag) // called when spawning a flag
        flag.health = flag.max_flag_health;
        flag.event_damage = ctf_FlagDamage;
        flag.pushable = TRUE;
+       flag.teleportable = TELEPORT_NORMAL;
        flag.damagedbytriggers = autocvar_g_ctf_flag_return_when_unreachable;
        flag.damagedbycontents = autocvar_g_ctf_flag_return_when_unreachable;
        flag.velocity = '0 0 0';
index 1705d8f8ea705edc6f71d4c5490bb32cd5d40c76..788edeabf00b0fec0e4b83a96827835c4fab6647 100644 (file)
@@ -75,6 +75,11 @@ void spawn_tdeath(vector v0, entity e, vector v)
 #define TELEPORT_FLAGS_WARPZONE   0
 #define TELEPORT_FLAGS_PORTAL     (TELEPORT_FLAG_SOUND | TELEPORT_FLAG_PARTICLES | TELEPORT_FLAG_TDEATH | TELEPORT_FLAG_FORCE_TDEATH)
 #define TELEPORT_FLAGS_TELEPORTER (TELEPORT_FLAG_SOUND | TELEPORT_FLAG_PARTICLES | TELEPORT_FLAG_TDEATH)
+
+// types for .teleportable entity setting
+#define TELEPORT_NORMAL 1 // play sounds/effects etc
+#define TELEPORT_SIMPLE 2 // only do teleport, nothing special
+
 void TeleportPlayer(entity teleporter, entity player, vector to, vector to_angles, vector to_velocity, vector telefragmin, vector telefragmax, float tflags)
 {
        entity telefragger;
@@ -87,7 +92,7 @@ void TeleportPlayer(entity teleporter, entity player, vector to, vector to_angle
 
        makevectors (to_angles);
 
-       if(player.classname == "player") // don't play sounds or show particles for anything that isn't a player, maybe change later to block only observers
+       if(player.teleportable == TELEPORT_NORMAL) // don't play sounds or show particles for anything that isn't a player, maybe change later to block only observers
        {
                if(self.pushltime < time) // only show one teleport effect per teleporter per 0.2 seconds, for better fps
                {
@@ -195,20 +200,17 @@ void Teleport_Touch (void)
        if (self.active != ACTIVE_ACTIVE)
                return;
        
-       if not(other.iscreature)
-               return;
-
-       // for gameplay: vehicles can't teleport
-       if (other.vehicle_flags & VHF_ISVEHICLE)
+       if not(other.teleportable)
                return;
     
-    if(other.vehicle)
-        return;
-        
-    if(other.turrcaps_flags & TFL_TURRCAPS_ISTURRET)
-        return;
+       if(other.vehicle)
+       if(!other.vehicle.teleportable)
+               return;
+                       
+       if(other.turrcaps_flags & TFL_TURRCAPS_ISTURRET)
+               return;
         
-       if (other.deadflag != DEAD_NO)
+       if(other.deadflag != DEAD_NO)
                return;
 
        if(self.team)
index 6b8f8e7d4cbadaa337953dee17dc4f5cacaa7349..8cb52ea77c51bd13445792bee4d2b59900c2d6f6 100644 (file)
@@ -252,6 +252,7 @@ void turret_ewheel_dinit()
     self.target_select_flags   = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
     self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
     self.iscreature = TRUE;
+    self.teleportable = TELEPORT_NORMAL;
     self.damagedbycontents = TRUE;
     self.movetype   = MOVETYPE_WALK;
     self.solid      = SOLID_SLIDEBOX;
index 646fccccb2b8ab7e57751e40e6f26c76e9fdcbc8..98381276c85ac61830413dbb6225196d9fe45247 100644 (file)
@@ -592,6 +592,7 @@ void turret_walker_dinit()
     self.target_select_flags   = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
     self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
     self.iscreature = TRUE;
+    self.teleportable = TELEPORT_NORMAL;
     self.damagedbycontents = TRUE;
     self.movetype   = MOVETYPE_WALK;
     self.solid      = SOLID_SLIDEBOX;
index f35602a6851d4833126a1d22deee4972e1f3c65d..963f1875c1913d5ee9bceeecee2b76be7acfeeac 100644 (file)
@@ -338,6 +338,7 @@ void vehicles_spawn()
     self.touch              = vehicles_touch;
     self.event_damage       = vehicles_damage;
     self.iscreature         = TRUE;
+    self.teleportable       = FALSE; // no teleporting for vehicles, too buggy
     self.damagedbycontents     = TRUE;
     self.movetype           = MOVETYPE_WALK;
     self.solid              = SOLID_SLIDEBOX;
@@ -980,6 +981,7 @@ float vehicle_initialize(string  net_name,
     self.takedamage         = DAMAGE_AIM;
     self.bot_attack         = TRUE;
     self.iscreature         = TRUE;
+    self.teleportable       = FALSE; // no teleporting for vehicles, too buggy
     self.damagedbycontents     = TRUE;
     self.hud                = vhud;