diff --git a/Source/FreeCS-CE.prj b/Source/FreeCS-CE.prj index 56868f07..87fbbaa4 100755 --- a/Source/FreeCS-CE.prj +++ b/Source/FreeCS-CE.prj @@ -1,5 +1,5 @@ - + @@ -25,7 +25,7 @@ - + @@ -60,7 +60,7 @@ - + @@ -71,7 +71,7 @@ - + @@ -113,11 +113,37 @@ - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Globals.h b/Source/Globals.h index bceb11ce..81c3e691 100755 --- a/Source/Globals.h +++ b/Source/Globals.h @@ -286,6 +286,7 @@ enum { #define FL_CROUCHING 16384 #define FL_SEMI_TOGGLED 32768 #define FL_FROZEN 131072 +#define FL_REMOVEME 262144 float clamp(float d, float imin, float imax) { float t; diff --git a/Source/Menu/Defs.h b/Source/Menu/Defs.h index c1af117c..3d7d0b67 100755 --- a/Source/Menu/Defs.h +++ b/Source/Menu/Defs.h @@ -174,8 +174,4 @@ typedef struct { } fcsMenu; void Menu_SetClipArea( vector vPosition, vector vRegion ); -void Menu_ResetClipArea( void ); - -float Math_Lerp( float fA, float fB, float fPercent ) { - return ( fA * ( 1 - fPercent ) ) + ( fB * fPercent ); -} \ No newline at end of file +void Menu_ResetClipArea( void ); \ No newline at end of file diff --git a/Source/Server/FuncDoor.c b/Source/Server/FuncDoor.c index e76a1f01..288152d8 100755 --- a/Source/Server/FuncDoor.c +++ b/Source/Server/FuncDoor.c @@ -206,7 +206,7 @@ void FuncDoor_Touch( void ) { return; } - if ( other.classname == "player" ) { + if ( other.movetype == MOVETYPE_WALK ) { FuncDoor_Trigger(); } } @@ -237,48 +237,48 @@ func_door Spawn function of a moving door entity ==================== */ - void func_door( void ) { + static void func_door_respawn( void ) { + self.solid = SOLID_BSP; + self.movetype = MOVETYPE_PUSH; + setorigin( self, self.origin ); + setmodel( self, self.model ); + + self.blocked = FuncDoor_Blocked; + self.vUse = FuncDoor_Trigger; + + if ( self.wait == -1 ) { + self.spawnflags = self.spawnflags | SF_MOV_TOGGLE; + } + + if ( !self.speed ) { + self.speed = 100; + } + + if ( !self.dmg ) { + self.dmg = 2; + } + + if ( self.spawnflags & SF_MOV_USE ) { + self.iUsable = TRUE; + } else { + self.touch = FuncDoor_Touch; + } + + self.state = STATE_LOWERED; + self.pos1 = self.origin; + self.pos2 = ( self.pos1 + self.movedir * ( fabs( self.movedir * self.size ) - self.lip ) ); + + if ( self.spawnflags & SF_MOV_OPEN ) { + setorigin( self, self.pos2 ); + self.pos2 = self.pos1; + self.pos1 = self.origin; + } + } + FuncDoor_PrecacheSounds(); Entities_SetMovementDirection(); - - self.solid = SOLID_BSP; - - self.movetype = MOVETYPE_PUSH; - setorigin( self, self.origin ); - setmodel( self, self.model ); - - self.blocked = FuncDoor_Blocked; - self.vUse = FuncDoor_Trigger; - - if ( self.wait == -1 ) { - self.spawnflags = self.spawnflags | SF_MOV_TOGGLE; - } - - if ( !self.speed ) { - self.speed = 100; - } - - if ( !self.dmg ) { - self.dmg = 2; - } - - if ( self.spawnflags & SF_MOV_USE ) { - self.iUsable = TRUE; - } else { - self.touch = FuncDoor_Touch; - } - - - self.pos1 = self.origin; - self.pos2 = ( self.pos1 + self.movedir * ( fabs( self.movedir * self.size ) - self.lip ) ); - - if ( self.spawnflags & SF_MOV_OPEN ) { - setorigin( self, self.pos2 ); - self.pos2 = self.pos1; - self.pos1 = self.origin; - } - - self.state = STATE_LOWERED; + func_door_respawn(); + Entities_InitRespawnable( func_door_respawn ); Entities_RenderSetup(); } diff --git a/Source/Server/FuncDoorRotating.c b/Source/Server/FuncDoorRotating.c index 48ccfa88..20a45f1d 100755 --- a/Source/Server/FuncDoorRotating.c +++ b/Source/Server/FuncDoorRotating.c @@ -177,7 +177,7 @@ void FuncDoorRotate_Touch( void ) { return; } - if ( other.classname == "player" ) { + if ( other.movetype == MOVETYPE_WALK ) { eActivator = other; FuncDoorRotate_Trigger(); } @@ -211,57 +211,59 @@ BrushRotate ================= */ void func_door_rotating( void ) { + static void func_door_rotating_respawn( void ) { + self.solid = SOLID_BSP; + self.movetype = MOVETYPE_PUSH; + setorigin( self, self.origin ); + setmodel( self, self.model ); + + self.blocked = FuncDoorRotate_Blocked; + self.vUse = FuncDoorRotate_Trigger; + + if ( self.spawnflags & SF_ROT_USE ) { + self.iUsable = TRUE; + } else { + self.touch = FuncDoorRotate_Touch; + } + + if ( !self.speed ) { + self.speed = 100; + } + + if ( self.wait == 0 ) { + self.wait = 4; + } + + self.state = STATE_LOWERED; + self.pos1 = self.angles; + + // Only do Y + if ( self.spawnflags & SF_ROT_XAXIS ) { + self.pos2_y = self.pos1_y + self.distance; + + } + + // Only do X + if ( self.spawnflags & SF_ROT_YAXIS ) { + self.pos2_x = self.pos1_x + self.distance; + + } + + // only do Y by default + if ( !( self.spawnflags & SF_ROT_YAXIS ) && !( self.spawnflags & SF_ROT_XAXIS ) ) { + self.pos2_y = self.pos1_y + self.distance; + } + + if ( self.spawnflags & SF_ROT_OPEN ) { + vector vTemp = self.pos2; + self.pos2 = self.pos1; + self.pos1 = vTemp; + self.angles = self.pos1; + } + } FuncDoor_PrecacheSounds(); Entities_SetMovementDirection(); - self.solid = SOLID_BSP; - self.movetype = MOVETYPE_PUSH; - setorigin( self, self.origin ); - setmodel( self, self.model ); - - self.blocked = FuncDoorRotate_Blocked; - self.vUse = FuncDoorRotate_Trigger; - - if ( self.spawnflags & SF_ROT_USE ) { - self.iUsable = TRUE; - } else { - self.touch = FuncDoorRotate_Touch; - } - - if ( !self.speed ) { - self.speed = 100; - } - - if ( self.wait == 0 ) { - self.wait = 4; - } - - self.pos1 = self.angles; - - // Only do Y - if ( self.spawnflags & SF_ROT_XAXIS ) { - self.pos2_y = self.pos1_y + self.distance; - - } - - // Only do X - if ( self.spawnflags & SF_ROT_YAXIS ) { - self.pos2_x = self.pos1_x + self.distance; - - } - - // only do Y by default - if ( !( self.spawnflags & SF_ROT_YAXIS ) && !( self.spawnflags & SF_ROT_XAXIS ) ) { - self.pos2_y = self.pos1_y + self.distance; - } - - if ( self.spawnflags & SF_ROT_OPEN ) { - vector vTemp = self.pos2; - self.pos2 = self.pos1; - self.pos1 = vTemp; - self.angles = self.pos1; - } - - self.state = STATE_LOWERED; - + func_door_rotating_respawn(); + Entities_InitRespawnable( func_door_rotating_respawn ); Entities_RenderSetup(); } diff --git a/Source/Server/TraceAttack.c b/Source/Server/TraceAttack.c index d6feba63..4b51f44f 100755 --- a/Source/Server/TraceAttack.c +++ b/Source/Server/TraceAttack.c @@ -36,7 +36,7 @@ void TraceAttack_FireSingle( vector vPos, vector vAngle ) { TraceAttack_FireSingle( vPos, vAngle ); iTotalPenetrations++; } - traceline( vPos, vPos + ( vAngle * 2048 ), MOVE_HITMODEL, self); + traceline( vPos, vPos + ( vAngle * 8192 ), MOVE_HITMODEL, self); if (trace_fraction != 1.0) { if ( trace_ent.takedamage == DAMAGE_YES ) { diff --git a/Source/Server/Triggers.c b/Source/Server/Triggers.c index 6b507448..b4a70991 100755 --- a/Source/Server/Triggers.c +++ b/Source/Server/Triggers.c @@ -165,21 +165,48 @@ void trigger_hurt( void ) { self.fAttackFinished = self.ltime + 0.5; } + static void trigger_hurt_respawn( void ) { + self.angles = '0 0 0'; + self.solid = SOLID_TRIGGER; - self.angles = '0 0 0'; - self.solid = SOLID_TRIGGER; - - setmodel( self, self.model ); - self.model = 0; - - if ( self.spawnflags & SF_HURT_OFF ) { - self.solid = SOLID_NOT; + setmodel( self, self.model ); + self.model = 0; + + if ( self.spawnflags & SF_HURT_OFF ) { + self.solid = SOLID_NOT; + } + + self.vUse = trigger_hurt_use; + self.touch = trigger_hurt_touch; } - self.vUse = trigger_hurt_use; - self.touch = trigger_hurt_touch; + trigger_hurt_respawn(); + Entities_InitRespawnable( trigger_hurt_respawn ); } +/* +================= +trigger_relay + +This entity acts as a relay between an event and its target. +Its main advantage is that it can send a specific trigger state +to its target (only turn it on, or only turn it off, as opposed +to the toggling experienced with typical triggering). + +Attributes: +Name (targetname) +Target (target) +Delay before trigger (delay) +Trigger State (triggerstate) - Off (0), On (1), or Toggle (2) + +Flags: +Remove On fire (1) +================= +*/ +void trigger_relay( void ) { + +} + /* ================= multi_manager diff --git a/Source/Shared/WeaponBase.c b/Source/Shared/WeaponBase.c index bb3bd3ae..dfb17b26 100755 --- a/Source/Shared/WeaponBase.c +++ b/Source/Shared/WeaponBase.c @@ -91,7 +91,16 @@ void OpenCSGunBase_Draw( void ) { } void OpenCSGunBase_AccuracyCalc( void ) { - self.fAccuracy = ( self.iShotMultiplier / wptTable[ self.weapon ].fAccuracyDivisor ); + + if ( wptTable[ self.weapon ].fAccuracyDivisor == -1 ) { + if ( self.viewzoom < 1.0f ) { + self.fAccuracy = 0.0f; + } else { + self.fAccuracy = 0.05f; + } + } else { + self.fAccuracy = ( self.iShotMultiplier / wptTable[ self.weapon ].fAccuracyDivisor ); + } } // Returns whether or not to play an animation diff --git a/freecs/default.cfg b/freecs/default.cfg index ba90a01a..299b0a26 100755 --- a/freecs/default.cfg +++ b/freecs/default.cfg @@ -32,7 +32,6 @@ bind SHIFT +speed bind b buy bind m chooseteam bind ESC togglemenu -bind v noclip // Movement Variables seta sv_maxspeed 240 diff --git a/freecs/menu.dat b/freecs/menu.dat index 9afa65d0..7c448289 100755 Binary files a/freecs/menu.dat and b/freecs/menu.dat differ diff --git a/freecs/progs.dat b/freecs/progs.dat index fe081e94..ea56b78a 100644 Binary files a/freecs/progs.dat and b/freecs/progs.dat differ