From a31aee64fd727b9e6f58dbf8084f837b40dd69a3 Mon Sep 17 00:00:00 2001 From: Mario Date: Fri, 30 Jan 2015 20:06:25 +1100 Subject: [PATCH] Move swamps across (as with all physics related stuff, currently does not work) --- qcsrc/client/Main.qc | 1 + qcsrc/common/constants.qh | 1 + qcsrc/common/physics.qc | 5 +- qcsrc/common/triggers/trigger/include.qc | 1 + qcsrc/common/triggers/trigger/include.qh | 1 + .../triggers/trigger/swamp.qc} | 107 ++++++++++++++---- qcsrc/common/triggers/trigger/swamp.qh | 10 ++ qcsrc/server/defs.qh | 4 - qcsrc/server/progs.src | 2 - 9 files changed, 103 insertions(+), 29 deletions(-) rename qcsrc/{server/t_swamp.qc => common/triggers/trigger/swamp.qc} (50%) create mode 100644 qcsrc/common/triggers/trigger/swamp.qh diff --git a/qcsrc/client/Main.qc b/qcsrc/client/Main.qc index 10c7dd1d0..56c0eb8c9 100644 --- a/qcsrc/client/Main.qc +++ b/qcsrc/client/Main.qc @@ -835,6 +835,7 @@ void CSQC_Ent_Update(float bIsNewEntity) case ENT_CLIENT_DOOR_TRIGGER: ent_door_trigger(); break; case ENT_CLIENT_PLAT: ent_plat(); break; case ENT_CLIENT_PLAT_TRIGGER: ent_plat_trigger(); break; + case ENT_CLIENT_SWAMP: ent_swamp(); break; default: //error(strcat(_("unknown entity type in CSQC_Ent_Update: %d\n"), self.enttype)); diff --git a/qcsrc/common/constants.qh b/qcsrc/common/constants.qh index a3a8093a7..f296e81f4 100644 --- a/qcsrc/common/constants.qh +++ b/qcsrc/common/constants.qh @@ -108,6 +108,7 @@ const float ENT_CLIENT_DOOR = 65; const float ENT_CLIENT_DOOR_TRIGGER = 66; const float ENT_CLIENT_PLAT = 67; const float ENT_CLIENT_PLAT_TRIGGER = 68; +const float ENT_CLIENT_SWAMP = 69; const float ENT_CLIENT_HEALING_ORB = 80; diff --git a/qcsrc/common/physics.qc b/qcsrc/common/physics.qc index 5351570cc..26e14e4de 100644 --- a/qcsrc/common/physics.qc +++ b/qcsrc/common/physics.qc @@ -1839,11 +1839,8 @@ void PM_Main() maxspeed_mod = 1; -#ifdef SVQC - if (self.in_swamp) { + if (self.in_swamp) maxspeed_mod *= self.swamp_slowdown; //cvar("g_balance_swamp_moverate"); - } -#endif // conveyors: first fix velocity if (self.conveyor.state) diff --git a/qcsrc/common/triggers/trigger/include.qc b/qcsrc/common/triggers/trigger/include.qc index 36e1883e8..0de1d26d6 100644 --- a/qcsrc/common/triggers/trigger/include.qc +++ b/qcsrc/common/triggers/trigger/include.qc @@ -15,3 +15,4 @@ #include "relay.qc" #include "relay_activators.qc" #include "relay_teamcheck.qc" +#include "swamp.qc" diff --git a/qcsrc/common/triggers/trigger/include.qh b/qcsrc/common/triggers/trigger/include.qh index 46b50b4fb..dd841de14 100644 --- a/qcsrc/common/triggers/trigger/include.qh +++ b/qcsrc/common/triggers/trigger/include.qh @@ -1,2 +1,3 @@ #include "multi.qh" #include "jumppads.qh" +#include "swamp.qh" diff --git a/qcsrc/server/t_swamp.qc b/qcsrc/common/triggers/trigger/swamp.qc similarity index 50% rename from qcsrc/server/t_swamp.qc rename to qcsrc/common/triggers/trigger/swamp.qc index e481dc634..a13aa6742 100644 --- a/qcsrc/server/t_swamp.qc +++ b/qcsrc/common/triggers/trigger/swamp.qc @@ -1,16 +1,6 @@ -/* -* t_swamp.c -* Adds spawnfunc_trigger_swamp and suppoart routines for xonotic 1.2.1+ -* Author tZork (Jakob MG) -* jakob@games43.se -* 2005 11 29 -*/ - -.float swamp_interval; //Hurt players in swamp with this interval -.float swamp_slowdown; //Players in swamp get slowd down by this mutch 0-1 is slowdown 1-~ is speedup (!?) -.entity swampslug; - +#ifdef SVQC void spawnfunc_trigger_swamp(void); +#endif void swamp_touch(void); void swampslug_think(); @@ -24,10 +14,6 @@ void swampslug_think(); * swamps curses (dmg/slowdown) * * I do it this way becuz there is no "untouch" event. -* -* --NOTE-- -* THE ACCTUAL slowdown is done in cl_physics.c on line 57-60 -* --NOTE-- */ void swampslug_think(void) { @@ -35,7 +21,8 @@ void swampslug_think(void) self.health = self.health - 1; //Slug dead? then remove curses. - if(self.health <= 0) { + if(self.health <= 0) + { self.owner.in_swamp = 0; remove(self); //centerprint(self.owner,"Killing slug...\n"); @@ -45,7 +32,9 @@ void swampslug_think(void) // Slug still alive, so we are still in the swamp // Or we have exited it very recently. // Do the damage and renew the timer. +#ifdef SVQC Damage (self.owner, self, self, self.dmg, DEATH_SWAMP, other.origin, '0 0 0'); +#endif self.nextthink = time + self.swamp_interval; } @@ -54,13 +43,14 @@ void swamp_touch(void) { // If whatever thats touching the swamp is not a player // or if its a dead player, just dont care abt it. - if(!IS_PLAYER(other) || other.deadflag != DEAD_NO) + if(!IS_PLAYER(other) || PHYS_DEAD(other)) return; EXACTTRIGGER_TOUCH; // Chech if player alredy got a swampslug. - if(other.in_swamp != 1) { + if(other.in_swamp != 1) + { // If not attach one. //centerprint(other,"Entering swamp!\n"); other.swampslug = spawn(); @@ -81,6 +71,43 @@ void swamp_touch(void) other.swampslug.health = 2; } +#ifdef SVQC +float swamp_send(entity to, float sf) +{ + WriteByte(MSG_ENTITY, ENT_CLIENT_LADDER); + + WriteByte(MSG_ENTITY, self.warpzone_isboxy); + WriteByte(MSG_ENTITY, self.scale); + WriteByte(MSG_ENTITY, self.dmg); // can probably get away with using a single byte here + WriteByte(MSG_ENTITY, self.swamp_slowdown); + WriteByte(MSG_ENTITY, self.swamp_interval); + WriteCoord(MSG_ENTITY, self.origin_x); + WriteCoord(MSG_ENTITY, self.origin_y); + WriteCoord(MSG_ENTITY, self.origin_z); + + WriteCoord(MSG_ENTITY, self.mins_x); + WriteCoord(MSG_ENTITY, self.mins_y); + WriteCoord(MSG_ENTITY, self.mins_z); + WriteCoord(MSG_ENTITY, self.maxs_x); + WriteCoord(MSG_ENTITY, self.maxs_y); + WriteCoord(MSG_ENTITY, self.maxs_z); + + WriteCoord(MSG_ENTITY, self.movedir_x); + WriteCoord(MSG_ENTITY, self.movedir_y); + WriteCoord(MSG_ENTITY, self.movedir_z); + + WriteAngle(MSG_ENTITY, self.angles_x); + WriteAngle(MSG_ENTITY, self.angles_y); + WriteAngle(MSG_ENTITY, self.angles_z); + + return TRUE; +} + +void swamp_link() +{ + Net_LinkEntity(self, FALSE, 0, func_ladder_send); +} + /*QUAKED spawnfunc_trigger_swamp (.5 .5 .5) ? Players gettin into the swamp will get slowd down and damaged @@ -98,4 +125,46 @@ void spawnfunc_trigger_swamp(void) self.swamp_interval = 1; if(self.swamp_slowdown <= 0) self.swamp_slowdown = 0.5; + + swamp_link(); +} + +#elif defined(CSQC) + +void ent_swamp() +{ + self.warpzone_isboxy = ReadByte(); + self.scale = ReadByte(); + self.dmg = ReadByte(); + self.swamp_slowdown = ReadByte(); + self.swamp_interval = ReadByte(); + + self.origin_x = ReadCoord(); + self.origin_y = ReadCoord(); + self.origin_z = ReadCoord(); + setorigin(self, self.origin); + + self.mins_x = ReadCoord(); + self.mins_y = ReadCoord(); + self.mins_z = ReadCoord(); + self.maxs_x = ReadCoord(); + self.maxs_y = ReadCoord(); + self.maxs_z = ReadCoord(); + setsize(self, self.mins, self.maxs); + + self.movedir_x = ReadCoord(); + self.movedir_y = ReadCoord(); + self.movedir_z = ReadCoord(); + + self.angles_x = ReadAngle(); + self.angles_y = ReadAngle(); + self.angles_z = ReadAngle(); + + self.classname = "trigger_swamp"; + self.solid = SOLID_TRIGGER; + self.draw = trigger_draw_generic; + self.trigger_touch = swamp_touch; + self.drawmask = MASK_NORMAL; + self.move_time = time; } +#endif diff --git a/qcsrc/common/triggers/trigger/swamp.qh b/qcsrc/common/triggers/trigger/swamp.qh new file mode 100644 index 000000000..c58ac5f62 --- /dev/null +++ b/qcsrc/common/triggers/trigger/swamp.qh @@ -0,0 +1,10 @@ +.float swamp_interval; //Hurt players in swamp with this interval +.float swamp_slowdown; //Players in swamp get slowd down by this mutch 0-1 is slowdown 1-~ is speedup (!?) +.entity swampslug; + +.float in_swamp; // bool +.entity swampslug; // Uses this to release from swamp ("untouch" fix) + +#ifdef CSQC +void ent_swamp(); +#endif diff --git a/qcsrc/server/defs.qh b/qcsrc/server/defs.qh index 752bc99cd..c4b5574d3 100644 --- a/qcsrc/server/defs.qh +++ b/qcsrc/server/defs.qh @@ -179,10 +179,6 @@ float alreadychangedlevel; .float version; -//swamp -.float in_swamp; // bool -.entity swampslug; // Uses this to release from swamp ("untouch" fix) - // footstep interval .float nextstep; diff --git a/qcsrc/server/progs.src b/qcsrc/server/progs.src index 0750ad3e6..5aa07a33d 100644 --- a/qcsrc/server/progs.src +++ b/qcsrc/server/progs.src @@ -180,8 +180,6 @@ antilag.qc //nexball.qc g_hook.qc -t_swamp.qc - campaign.qc ../common/campaign_file.qc ../common/campaign_setup.qc -- 2.39.2