diff --git a/Source/Client/Defs.h b/Source/Client/Defs.h index 21f8fd92..e6751d7a 100755 --- a/Source/Client/Defs.h +++ b/Source/Client/Defs.h @@ -90,6 +90,7 @@ void View_PlayAnimation( int iSequence ); // This actually belongs in Builtins.h since its an undocumented global vector pmove_vel; .float weapon; +.float maxframe; void Animation_ShootWeapon( void ); void Animation_ReloadWeapon( void ) diff --git a/Source/Client/Event.c b/Source/Client/Event.c index 48137e88..a3d8623c 100755 --- a/Source/Client/Event.c +++ b/Source/Client/Event.c @@ -467,6 +467,14 @@ void CSQC_Parse_Event( void ) { vNormal_z = readcoord(); Effect_Impact( iType, vOrigin, vNormal ); + } else if ( fHeader == EV_EXPLOSION ) { + vector vExploPos; + + vExploPos_x = readcoord(); + vExploPos_y = readcoord(); + vExploPos_z = readcoord(); + + Effect_CreateExplosion( vExploPos ); } } diff --git a/Source/Client/HUDWeaponSelect.c b/Source/Client/HUDWeaponSelect.c index 1bf7a7bd..b3fb11f6 100755 --- a/Source/Client/HUDWeaponSelect.c +++ b/Source/Client/HUDWeaponSelect.c @@ -196,10 +196,10 @@ float HUD_DrawWeaponSelect_PreviousItem( float fSlot ) { return SLOT_GRENADE; } } - if ( getstatf( STAT_SLOT_PRIMARY ) ) { - return SLOT_PRIMARY; + if ( getstatf( STAT_SLOT_MELEE ) ) { + return SLOT_MELEE; } else { - return HUD_DrawWeaponSelect_NextItem( SLOT_PRIMARY ); + return HUD_DrawWeaponSelect_PreviousItem( SLOT_MELEE ); } } } diff --git a/Source/Client/Init.c b/Source/Client/Init.c index f8fb6fa8..2ae7aec0 100755 --- a/Source/Client/Init.c +++ b/Source/Client/Init.c @@ -28,6 +28,7 @@ Comparable to worldspawn in SSQC in that it's mostly used for precaches void CSQC_Init(float apilevel, string enginename, float engineversion) { precache_model( HUD_NUMFILE ); + precache_model( "sprites/fexplo.spr" ); precache_model( "sprites/muzzleflash1.spr" ); precache_model( "sprites/radar640.spr" ); precache_model( "sprites/640hud1.spr" ); diff --git a/Source/FreeCS-CE.prj b/Source/FreeCS-CE.prj index 57ae08bb..6d43f66e 100755 --- a/Source/FreeCS-CE.prj +++ b/Source/FreeCS-CE.prj @@ -114,14 +114,19 @@ - - - - - - - - - + + + + + + + + + + + + + + diff --git a/Source/Globals.h b/Source/Globals.h index 1f016ef8..d66c2f2e 100755 --- a/Source/Globals.h +++ b/Source/Globals.h @@ -220,6 +220,7 @@ enum { EV_WEAPON_SECONDARYATTACK, EV_WEAPON_RELOAD, EV_IMPACT, + EV_EXPLOSION, EV_MODELGIB, EV_CAMERATRIGGER, EV_RADIOMSG, diff --git a/Source/Server/Damage.c b/Source/Server/Damage.c index aa963305..57db5e31 100755 --- a/Source/Server/Damage.c +++ b/Source/Server/Damage.c @@ -175,8 +175,8 @@ void Damage_Radius( vector vOrigin, entity eAttacker, float fDamage, float fRadi fDiff = ( fRadius - fDiff ) / fRadius; fDamage = fDamage * fDiff; - - if ( fDiff > 0 ) { + + if ( fDamage > 0 ) { Damage_Apply( eDChain, eAttacker, fDamage, eDChain.origin ); } } diff --git a/Source/Server/Defs.h b/Source/Server/Defs.h index 0619af62..21070f9b 100755 --- a/Source/Server/Defs.h +++ b/Source/Server/Defs.h @@ -159,6 +159,8 @@ void Animation_PlayerTop( float fFrame ); void Animation_PlayerTopTemp( float fFrame, float fTime ); void Footsteps_Update( void ); +void Effect_CreateExplosion( vector vPos ); + // WIP string __fullspawndata; hashtable hashMaterials; diff --git a/Source/Shared/Effects.c b/Source/Shared/Effects.c index 8d3b7a1e..69c43f22 100755 --- a/Source/Shared/Effects.c +++ b/Source/Shared/Effects.c @@ -17,11 +17,43 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +void Effect_CreateExplosion( vector vPos ) { +#ifdef SSQC + vPos_z += 48; + WriteByte( MSG_MULTICAST, SVC_CGAMEPACKET ); + WriteByte( MSG_MULTICAST, EV_EXPLOSION ); + WriteCoord( MSG_MULTICAST, vPos_x ); + WriteCoord( MSG_MULTICAST, vPos_y ); + WriteCoord( MSG_MULTICAST, vPos_z ); + msg_entity = self; + multicast( vPos, MULTICAST_PVS ); +#else + print( "Explosion\n" ); + static void Effect_CreateExplosion_Animate( void ) { + if ( self.frame >= self.maxframe ) { + remove( self ); + } else { + self.frame += 1; + } + self.nextthink = time + 0.05f; + } + + entity eExplosion = spawn(); + setorigin( eExplosion, vPos ); + setmodel( eExplosion, "sprites/fexplo.spr" ); + + eExplosion.think = Effect_CreateExplosion_Animate; + eExplosion.nextthink = time + 0.05f; + eExplosion.effects = EF_ADDITIVE; + eExplosion.drawmask = MASK_ENGINE; + eExplosion.maxframe = modelframecount( eExplosion.modelindex ); +#endif +} + #ifdef CSQC .float framerate; -.float maxframe; void Effect_AnimatedSprite( vector vPos, float fIndex, float fFPS, float fScale, float fAlpha, float fEffects ) { - static void Effect_AnimatedSprite_Animate( void ) { if( self.frame >= self.maxframe ) { self.frame = 0; diff --git a/Source/Shared/WeaponFlashbang.c b/Source/Shared/WeaponFlashbang.c index 5d2f7d91..32e1e2ee 100755 --- a/Source/Shared/WeaponFlashbang.c +++ b/Source/Shared/WeaponFlashbang.c @@ -95,6 +95,11 @@ void WeaponFLASHBANG_PrimaryFire( void ) { #ifdef SSQC void WeaponFLASHBANG_Throw( void ) { static void WeaponFLASHBANG_Explode( void ) { + if ( random() < 0.5 ) { + sound( self, CHAN_WEAPON, "weapons/flashbang-1.wav", 1, ATTN_NORM ); + } else { + sound( self, CHAN_WEAPON, "weapons/flashbang-2.wav", 1, ATTN_NORM ); + } remove( self ); } static void Weapon_FLASHBANG_Touch( void ) { diff --git a/Source/Shared/WeaponHEGrenade.c b/Source/Shared/WeaponHEGrenade.c index 2dfff548..d6e613d9 100755 --- a/Source/Shared/WeaponHEGrenade.c +++ b/Source/Shared/WeaponHEGrenade.c @@ -95,13 +95,16 @@ void WeaponHEGRENADE_PrimaryFire( void ) { #ifdef SSQC void WeaponHEGRENADE_Throw( void ) { static void WeaponHEGRENADE_Explode( void ) { + Effect_CreateExplosion( self.origin ); + Damage_Radius( self.origin, self, 100, 512 ); + sound( self, CHAN_WEAPON, sprintf( "weapons/explode%d.wav", floor( random() * 3 ) + 3 ), 1, ATTN_NORM ); remove( self ); } static void Weapon_HEGRENADE_Touch( void ) { if ( other.classname == "func_breakable" ) { Damage_Apply( other, self, 10, self.origin ); } - sound( self, CHAN_WEAPON, sprintf( "weapons/grenade_hit%d.wav", floor( random() * 3 ) + 1 ), 1, ATTN_NORM ); + sound( self, CHAN_WEAPON, "weapons/he_bounce-1.wav", 1, ATTN_NORM ); } makevectors( self.v_angle ); diff --git a/freecs/csprogs.dat b/freecs/csprogs.dat index ddaeaa70..95e928e5 100644 Binary files a/freecs/csprogs.dat and b/freecs/csprogs.dat differ diff --git a/freecs/csprogs.en_US.po b/freecs/csprogs.en.po old mode 100644 new mode 100755 similarity index 100% rename from freecs/csprogs.en_US.po rename to freecs/csprogs.en.po diff --git a/freecs/default.cfg b/freecs/default.cfg index 0228f4ca..b8fd4783 100755 --- a/freecs/default.cfg +++ b/freecs/default.cfg @@ -67,3 +67,6 @@ seta r_fb_models 0 seta con_logcenterprint 0 seta v_contentblend 0 seta com_nogamedirnativecode 0 + +seta r_shadow_realtime_world_shadows "0" +seta r_shadow_realtime_dlight_shadows "0" diff --git a/freecs/progs.dat b/freecs/progs.dat index 520998a8..6a4c2b88 100644 Binary files a/freecs/progs.dat and b/freecs/progs.dat differ