diff --git a/src/gs-entbase/server/func_breakable.qc b/src/gs-entbase/server/func_breakable.qc index 13c0d38e..558ab2a2 100644 --- a/src/gs-entbase/server/func_breakable.qc +++ b/src/gs-entbase/server/func_breakable.qc @@ -126,6 +126,8 @@ class func_breakable:NSSurfacePropEntity int m_pressType; int m_pressDamage;*/ + bool m_iCanTouch; + void(void) func_breakable; /* overrides */ @@ -138,7 +140,7 @@ class func_breakable:NSSurfacePropEntity virtual void(string, string) Restore; virtual void(void) Explode; - virtual void(void) PlayerTouch; + virtual void(entity) Touch; /*virtual void(void) PressureDeath;*/ }; @@ -253,38 +255,41 @@ func_breakable::Trigger(entity act, int state) } void -func_breakable::PlayerTouch(void) +func_breakable::Touch(entity eToucher) { static void TriggerWrap(void) { /* TODO: 'this' should be the person who touched the ent instead */ Trigger(this, TRIG_TOGGLE); } - if (other.classname == classname) { + if (m_iCanTouch == false) + return; + + if (eToucher.classname == classname) { return; } - if (other.solid == SOLID_CORPSE) { - if (vlen(other.velocity) > 100) { + if (eToucher.solid == SOLID_CORPSE) { + if (vlen(eToucher.velocity) > 100) { Trigger(this, TRIG_ON); } } if (HasSpawnFlags(SF_TOUCH)) { - int fDamage = (float)(vlen(other.velocity) * 0.01f); + int fDamage = (float)(vlen(eToucher.velocity) * 0.01f); if (fDamage >= health) { - touch = __NULL__; - Damage_Apply(this, other, fDamage, 0, DMG_CRUSH); + m_iCanTouch = false; + Damage_Apply(this, eToucher, fDamage, 0, DMG_CRUSH); if ((GetSurfaceData(SURFDATA_MATERIAL) == GSMATERIAL_GLASS) || (GetSurfaceData(SURFDATA_MATERIAL) == GSMATERIAL_COMPUTER)) { - Damage_Apply(other, this, fDamage / 4, 0, DMG_CRUSH); + Damage_Apply(eToucher, this, fDamage / 4, 0, DMG_CRUSH); } } } - if (HasSpawnFlags(SF_PRESSURE) && (other.absmin[2] >= maxs[2] - 2)) { - touch = __NULL__; + if (HasSpawnFlags(SF_PRESSURE) && (eToucher.absmin[2] >= maxs[2] - 2)) { + m_iCanTouch = false; think = TriggerWrap; if (m_flDelay == 0) { @@ -304,8 +309,8 @@ func_breakable::Respawn(void) SetModel(GetSpawnModel()); SetOrigin(GetSpawnOrigin()); ClearAngles(); - touch = PlayerTouch; think = __NULL__; + m_iCanTouch = true; if (HasSpawnFlags(SF_TRIGGER)) { takedamage = DAMAGE_NO; diff --git a/src/gs-entbase/server/func_button.qc b/src/gs-entbase/server/func_button.qc index 71978ff8..ce3ef70a 100644 --- a/src/gs-entbase/server/func_button.qc +++ b/src/gs-entbase/server/func_button.qc @@ -93,6 +93,8 @@ class func_button:NSSurfacePropEntity string m_strSndPressed; string m_strSndUnpressed; + bool m_iCanTouch; + /* input/output */ string m_strOnPressed; string m_strOnDamaged; @@ -206,6 +208,7 @@ func_button::Arrived(void) SetOrigin(m_vecDest); velocity = [0,0,0]; nextthink = 0; + m_iCanTouch = true; UseOutput(this, m_strOnIn); m_iState = STATE_RAISED; @@ -227,6 +230,7 @@ func_button::Returned(void) SetOrigin(m_vecDest); velocity = [0,0,0]; nextthink = 0; + m_iCanTouch = true; m_iState = STATE_LOWERED; SetFrame(FRAME_OFF); @@ -235,7 +239,7 @@ func_button::Returned(void) void func_button::MoveBack(void) { - touch = __NULL__; + m_iCanTouch = false; m_iState = STATE_DOWN; m_iValue = 0; @@ -256,7 +260,7 @@ func_button::MoveAway(void) if (m_iState == STATE_UP) { return; } - touch = __NULL__; + m_iCanTouch = false; if (m_iState == STATE_RAISED) { nextthink = (ltime + m_flWait); @@ -324,6 +328,9 @@ func_button::Touch(entity eToucher) return; } + if (m_iCanTouch == false) + return; + if (eToucher.movetype == MOVETYPE_WALK) { Trigger(eToucher, TRIG_TOGGLE); } diff --git a/src/gs-entbase/server/func_conveyor.qc b/src/gs-entbase/server/func_conveyor.qc index 0ee964c9..5ea55626 100644 --- a/src/gs-entbase/server/func_conveyor.qc +++ b/src/gs-entbase/server/func_conveyor.qc @@ -40,7 +40,7 @@ class func_conveyor:NSRenderableEntity virtual void(string,string) Restore; virtual void(void) Respawn; virtual void(entity, int) Trigger; - virtual void(void) touch; + virtual void(entity) Touch; virtual void(void) SetMovementDirection; virtual void(entity, string, string) Input; virtual void(string, string) SpawnKey; @@ -83,12 +83,12 @@ func_conveyor::SetMovementDirection(void) } void -func_conveyor::touch(void) +func_conveyor::Touch(entity eToucher) { if (HasSpawnFlags(SF_CONVEYOR_VISUAL)) return; - other.basevelocity = m_vecMoveDir * (m_flSpeed * -0.2); + eToucher.basevelocity = m_vecMoveDir * (m_flSpeed * -0.2); } void diff --git a/src/gs-entbase/server/func_plat.qc b/src/gs-entbase/server/func_plat.qc index e937075d..65c0244d 100644 --- a/src/gs-entbase/server/func_plat.qc +++ b/src/gs-entbase/server/func_plat.qc @@ -55,7 +55,7 @@ class func_plat:NSRenderableEntity virtual void(vector, void(void)) Move; virtual void(void) MoveToggle; virtual void(void) Respawn; - virtual void(void) touch; + virtual void(entity) Touch; virtual void(string, string) SpawnKey; }; @@ -151,9 +151,9 @@ func_plat::Trigger(entity act, int state) } void -func_plat::touch(void) +func_plat::Touch(entity eToucher) { - if (other.movetype != MOVETYPE_WALK) { + if (eToucher.movetype != MOVETYPE_WALK) { return; } diff --git a/src/gs-entbase/server/func_rot_button.qc b/src/gs-entbase/server/func_rot_button.qc index 848677b9..602e89c9 100644 --- a/src/gs-entbase/server/func_rot_button.qc +++ b/src/gs-entbase/server/func_rot_button.qc @@ -76,7 +76,7 @@ class func_rot_button:NSRenderableEntity virtual void(float) Save; virtual void(string, string) Restore; virtual void(string, string) SpawnKey; - virtual void(void) touch; + virtual void(entity) Touch; virtual void(void) Respawn; virtual void(void) Death; @@ -175,8 +175,10 @@ func_rot_button::OnPlayerUse(void) } void -func_rot_button::touch(void) +func_rot_button::Touch(entity eToucher) { + eActivator = eToucher; + if (HasSpawnFlags(FNCROTBUT_TOUCHABLE)) TurnToggle(); } diff --git a/src/gs-entbase/server/func_rotating.qc b/src/gs-entbase/server/func_rotating.qc index bbc4b560..436aa502 100644 --- a/src/gs-entbase/server/func_rotating.qc +++ b/src/gs-entbase/server/func_rotating.qc @@ -81,7 +81,7 @@ class func_rotating:NSRenderableEntity virtual void(void) Rotate; virtual void(entity) Blocked; - virtual void(void) BlockedTouch; + virtual void(entity) Touch; virtual void(void) SetMovementDirection; }; @@ -169,9 +169,11 @@ func_rotating::Blocked(entity eBlocker) } void -func_rotating::BlockedTouch(void) +func_rotating::Touch(entity eToucher) { - Blocked(other); + if (HasSpawnFlags(FR_FANPAIN)) { + Blocked(eToucher); + } } void @@ -199,10 +201,6 @@ func_rotating::Respawn(void) think = Rotate; nextthink = ltime + 1.5f; } - - if (HasSpawnFlags(FR_FANPAIN)) { - touch = BlockedTouch; - } } void diff --git a/src/gs-entbase/server/scripted_sequence.qc b/src/gs-entbase/server/scripted_sequence.qc index d4a309e7..80e0e81e 100644 --- a/src/gs-entbase/server/scripted_sequence.qc +++ b/src/gs-entbase/server/scripted_sequence.qc @@ -113,7 +113,7 @@ class scripted_sequence:NSPointTrigger virtual void(entity) RunOnEntity; virtual void(void) InitIdle; - virtual void(void) touch; + virtual void(entity) Touch; }; void @@ -316,20 +316,20 @@ scripted_sequence::InitIdle(void) } void -scripted_sequence::touch(void) +scripted_sequence::Touch(entity eToucher) { NSMonster f; - if (other.classname != m_strMonster) + if (eToucher.classname != m_strMonster) return; - f = (NSMonster)other; + f = (NSMonster)eToucher; /* we already ARE on a sequence. */ if (f.m_iSequenceState != SEQUENCESTATE_NONE) return; - RunOnEntity(other); + RunOnEntity(eToucher); } void diff --git a/src/gs-entbase/server/target_cdaudio.qc b/src/gs-entbase/server/target_cdaudio.qc index f941fe4e..9ba78fb6 100644 --- a/src/gs-entbase/server/target_cdaudio.qc +++ b/src/gs-entbase/server/target_cdaudio.qc @@ -38,7 +38,7 @@ class target_cdaudio:NSPointTrigger void(void) target_cdaudio; - virtual void(void) touch; + virtual void(entity) Touch; virtual void(void) Respawn; virtual void(string, string) SpawnKey; }; @@ -67,9 +67,9 @@ target_cdaudio::Restore(string strKey, string strValue) } void -target_cdaudio::touch(void) +target_cdaudio::Touch(entity eToucher) { - if (!(other.flags & FL_CLIENT)) { + if (!(eToucher.flags & FL_CLIENT)) { return; } diff --git a/src/gs-entbase/server/trigger_autosave.qc b/src/gs-entbase/server/trigger_autosave.qc index 555b11a2..d5ea207b 100644 --- a/src/gs-entbase/server/trigger_autosave.qc +++ b/src/gs-entbase/server/trigger_autosave.qc @@ -31,7 +31,7 @@ class trigger_autosave:NSBrushTrigger void(void) trigger_autosave; - virtual void(void) touch; + virtual void(entity) Touch; virtual void(void) Respawn; }; @@ -55,7 +55,7 @@ trigger_autosave::Restore(string strKey, string strValue) } void -trigger_autosave::touch(void) +trigger_autosave::Touch(entity eToucher) { if (GetMaster() == FALSE) return; @@ -70,14 +70,15 @@ trigger_autosave::touch(void) msg_entity = this; multicast(origin, MULTICAST_ALL); - dprint(sprintf("^2trigger_autosave::^3touch^7: %s called autosave\n", - other.netname)); + dprint(sprintf("^2trigger_autosave::^3Touch^7: %s called autosave\n", + eToucher.netname)); + + localcmd("save autosave\n"); - //readcmd("save autosave\n"); Hide(); SetSolid(SOLID_NOT); - UseTargets(other, TRIG_TOGGLE, m_flDelay); + UseTargets(eToucher, TRIG_TOGGLE, m_flDelay); } void diff --git a/src/gs-entbase/server/trigger_cdaudio.qc b/src/gs-entbase/server/trigger_cdaudio.qc index 647d277f..e10a5cd1 100644 --- a/src/gs-entbase/server/trigger_cdaudio.qc +++ b/src/gs-entbase/server/trigger_cdaudio.qc @@ -35,7 +35,7 @@ class trigger_cdaudio:NSBrushTrigger virtual void(string, string) Restore; virtual void(entity, int) Trigger; virtual void(void) Respawn; - virtual void(void) touch; + virtual void(entity) Touch; virtual void(string, string) SpawnKey; }; @@ -78,9 +78,9 @@ trigger_cdaudio::Trigger(entity act, int unused) } void -trigger_cdaudio::touch(void) +trigger_cdaudio::Touch(entity eToucher) { - Trigger(other, TRIG_TOGGLE); + Trigger(eToucher, TRIG_TOGGLE); } void diff --git a/src/gs-entbase/server/trigger_changelevel.qc b/src/gs-entbase/server/trigger_changelevel.qc index 775b865f..4a509922 100644 --- a/src/gs-entbase/server/trigger_changelevel.qc +++ b/src/gs-entbase/server/trigger_changelevel.qc @@ -89,7 +89,7 @@ class trigger_changelevel:NSBrushTrigger virtual void(string, string) SpawnKey; virtual void(void) Change; - virtual void(void) TouchTrigger; + virtual void(entity) Touch; virtual int(entity, entity) IsInside; }; @@ -212,22 +212,21 @@ trigger_changelevel::Trigger(entity act, int unused) } void -trigger_changelevel::TouchTrigger(void) +trigger_changelevel::Touch(entity eToucher) { - if (!(other.flags & FL_CLIENT)) + if (HasSpawnFlags(LC_USEONLY)) return; - Trigger(other, TRIG_TOGGLE); + if (!(eToucher.flags & FL_CLIENT)) + return; + + Trigger(eToucher, TRIG_TOGGLE); } void trigger_changelevel::Respawn(void) { InitBrushTrigger(); - - if (!HasSpawnFlags(LC_USEONLY)) { - touch = TouchTrigger; - } } void diff --git a/src/gs-entbase/server/trigger_counter.qc b/src/gs-entbase/server/trigger_counter.qc index 0e6c4bed..b5e2bcc3 100644 --- a/src/gs-entbase/server/trigger_counter.qc +++ b/src/gs-entbase/server/trigger_counter.qc @@ -45,7 +45,7 @@ class trigger_counter:NSBrushTrigger virtual void(float) Save; virtual void(string, string) Restore; - virtual void(void) touch; + virtual void(entity) Touch; virtual void(entity,int) Trigger; virtual void(void) Respawn; virtual void(string, string) SpawnKey; @@ -75,9 +75,9 @@ trigger_counter::Restore(string strKey, string strValue) } void -trigger_counter::touch(void) +trigger_counter::Touch(entity eToucher) { - Trigger(other, TRIG_TOGGLE); + Trigger(eToucher, TRIG_TOGGLE); } void diff --git a/src/gs-entbase/server/trigger_push.qc b/src/gs-entbase/server/trigger_push.qc index 43e1293b..e3baff0d 100644 --- a/src/gs-entbase/server/trigger_push.qc +++ b/src/gs-entbase/server/trigger_push.qc @@ -45,7 +45,7 @@ class trigger_push:NSBrushTrigger virtual void(float) Save; virtual void(string, string) Restore; - virtual void(void) touch; + virtual void(entity) Touch; virtual void(void) Respawn; virtual void(entity, int) Trigger; virtual void(void) SetMovementDirection; @@ -104,11 +104,11 @@ trigger_push::Trigger(entity act, int state) } void -trigger_push::touch(void) +trigger_push::Touch(entity eToucher) { - eActivator = other; + eActivator = eToucher; - switch(other.movetype) { + switch(eToucher.movetype) { case MOVETYPE_NONE: case MOVETYPE_PUSH: case MOVETYPE_NOCLIP: @@ -117,21 +117,21 @@ trigger_push::touch(void) } /* trigger_push is not supposed to work underwater */ - if (other.waterlevel > 1) + if (eToucher.waterlevel > 1) return; - if (other.solid != SOLID_NOT && other.solid != SOLID_BSP) { + if (eToucher.solid != SOLID_NOT && eToucher.solid != SOLID_BSP) { vector vecPush; vecPush = (m_flSpeed * m_vecMoveDir); if (HasSpawnFlags(TP_ONCE)) { - other.velocity += vecPush; - if (other.velocity[2] > 0) { - other.flags &= ~FL_ONGROUND; + eToucher.velocity += vecPush; + if (eToucher.velocity[2] > 0) { + eToucher.flags &= ~FL_ONGROUND; } Hide(); } else { - other.basevelocity += vecPush; + eToucher.basevelocity += vecPush; } } } diff --git a/src/gs-entbase/server/trigger_teleport.qc b/src/gs-entbase/server/trigger_teleport.qc index 2c6f42bc..d03ed836 100644 --- a/src/gs-entbase/server/trigger_teleport.qc +++ b/src/gs-entbase/server/trigger_teleport.qc @@ -36,32 +36,32 @@ class trigger_teleport:NSBrushTrigger { void(void) trigger_teleport; - virtual void(void) touch; + virtual void(entity) Touch; virtual void(void) Respawn; }; void -trigger_teleport::touch(void) +trigger_teleport::Touch(entity eToucher) { if (GetMaster() == FALSE) return; - if (HasSpawnFlags(TRIGTELE_NOCLIENTS) && other.flags & FL_CLIENT) + if (HasSpawnFlags(TRIGTELE_NOCLIENTS) && eToucher.flags & FL_CLIENT) return; - if (!HasSpawnFlags(TRIGTELE_MONSTERS) && other.flags & FL_MONSTER) + if (!HasSpawnFlags(TRIGTELE_MONSTERS) && eToucher.flags & FL_MONSTER) return; - if (other.movetype != MOVETYPE_NONE) { - eActivator = other; + if (eToucher.movetype != MOVETYPE_NONE) { + eActivator = eToucher; entity eTarget = find(world, ::targetname, target); if (eTarget) { vector endpos = eTarget.origin + [0,0,16]; - setorigin(other, endpos); - dprint(sprintf("^2trigger_teleport::^3touch^7: Teleported '%s' to `%v`\n", - other.netname, endpos)); + setorigin(eToucher, endpos); + dprint(sprintf("^2trigger_teleport::^3Touch^7: Teleported '%s' to `%v`\n", + eToucher.netname, endpos)); } else { - print(sprintf("^2trigger_teleport::^3touch^7: Failed to teleport '%s'\n", - other.netname)); + print(sprintf("^2trigger_teleport::^3Touch^7: Failed to teleport '%s'\n", + eToucher.netname)); } } } diff --git a/src/gs-entbase/shared/NSRenderableEntity.qc b/src/gs-entbase/shared/NSRenderableEntity.qc index 75963335..db692f23 100644 --- a/src/gs-entbase/shared/NSRenderableEntity.qc +++ b/src/gs-entbase/shared/NSRenderableEntity.qc @@ -393,16 +393,16 @@ NSRenderableEntity::RenderFXPass(void) switch (m_iRenderFX) { case RFX_SLOWPULSE: - alpha = sin(cltime * 0.5); + alpha = sin(cltime * 0.5) + (M_PI * 0.5); break; case RFX_FASTPULSE: - alpha = sin(cltime * 2.0); + alpha = sin(cltime * 2.0) + (M_PI * 0.5); break; case RFX_SLOWWIDEPULSE: - alpha = sin(cltime * 0.5); + alpha = (sin(cltime * 2.0)); break; case RFX_FASTWIDEPULSE: - alpha = sin(cltime * 2.0); + alpha = sin(cltime * 2.0) + (M_PI * 0.5); break; case RFX_SLOWFADEAWAY: alpha -= clframetime * 0.25; diff --git a/src/gs-entbase/shared/func_friction.qc b/src/gs-entbase/shared/func_friction.qc index c036b8df..387f57d4 100644 --- a/src/gs-entbase/shared/func_friction.qc +++ b/src/gs-entbase/shared/func_friction.qc @@ -36,7 +36,7 @@ class func_friction:NSEntity void(void) func_friction; - virtual void(void) touch; + virtual void(entity) Touch; virtual void(void) Respawn; virtual void(string, string) SpawnKey; @@ -46,9 +46,9 @@ class func_friction:NSEntity }; void -func_friction::touch(void) +func_friction::Touch(entity eToucher) { - other.friction = m_flFriction; + eToucher.friction = m_flFriction; } void diff --git a/src/gs-entbase/shared/spraylogo.qc b/src/gs-entbase/shared/spraylogo.qc index 23915dc3..a60bdfc0 100644 --- a/src/gs-entbase/shared/spraylogo.qc +++ b/src/gs-entbase/shared/spraylogo.qc @@ -99,6 +99,7 @@ class CSpraylogo virtual float(void) predraw; }; +#ifdef WASTES const string g_spray_mat = \ "{\n" \ "cull disable\n" \ @@ -109,6 +110,18 @@ const string g_spray_mat = \ "rgbGen vertex\n" \ "}\n" \ "}"; +#else +const string g_spray_mat = \ + "{\n" \ + "cull disable\n" \ + "polygonOffset\n" \ + "{\n" \ + "map $rt:%s\n" \ + "blendfunc blend\n" \ + "rgbGen vertex\n" \ + "}\n" \ + "}"; +#endif float CSpraylogo::predraw(void) diff --git a/src/gs-entbase/shared/trigger_gravity.qc b/src/gs-entbase/shared/trigger_gravity.qc index 2094ef6d..193fddbd 100644 --- a/src/gs-entbase/shared/trigger_gravity.qc +++ b/src/gs-entbase/shared/trigger_gravity.qc @@ -38,7 +38,7 @@ class trigger_gravity:NSBrushTrigger void(void) trigger_gravity; - virtual void(void) touch; + virtual void(entity) Touch; virtual void(string, string) SpawnKey; virtual void(void) Respawn; @@ -48,9 +48,9 @@ class trigger_gravity:NSBrushTrigger }; void -trigger_gravity::touch(void) +trigger_gravity::Touch(entity eToucher) { - other.gravity = m_flGravity; + eToucher.gravity = m_flGravity; } void