diff --git a/Source/Server/Damage.c b/Source/Server/Damage.c old mode 100755 new mode 100644 index 57db5e31..be2e3d4e --- a/Source/Server/Damage.c +++ b/Source/Server/Damage.c @@ -114,7 +114,34 @@ void Damage_Apply( entity eTarget, entity eAttacker, int iDamage, vector vHitPos dprint( sprintf( "[DEBUG] Hit Bodypart: %s\n", Damage_GetHitLocation( trace_surface_id ) ) ); // Apply the damage finally - eTarget.health = eTarget.health - iDamage; + if ( eTarget.armor ) { + float fRatio = 0.5; + + if ( eAttacker != world ) { + fRatio = wptTable[ eAttacker.weapon ].fWeaponArmorRatio; + } + + // Simple implementation of how kevlar damage is calculated + float fNewDmg = iDamage * fRatio; + float fNewArmor = ( iDamage - fNewDmg ) / 2; + + if ( fNewArmor > eTarget.armor ) { + fNewArmor = eTarget.armor; + fNewArmor *= (1/0.5); + fNewDmg = iDamage - fNewArmor; + eTarget.armor = 0; + } else { + int oldValue = eTarget.armor; + if ( fNewArmor < 0 ) { + fNewArmor = 1; + } + eTarget.armor = ( oldValue - fNewArmor ); + } + eTarget.health -= fNewDmg; + } else { + // No armor + eTarget.health -= iDamage; + } // Special monetary punishment for hostage murderers if ( eTarget.classname == "hostage_entity" ) { @@ -169,7 +196,6 @@ void Damage_Radius( vector vOrigin, entity eAttacker, float fDamage, float fRadi entity eDChain = findradius( vOrigin, fRadius ); while( eDChain ) { - if ( eDChain.takedamage == DAMAGE_YES ) { float fDiff = vlen( vOrigin - eDChain.origin ); @@ -180,7 +206,6 @@ void Damage_Radius( vector vOrigin, entity eAttacker, float fDamage, float fRadi Damage_Apply( eDChain, eAttacker, fDamage, eDChain.origin ); } } - eDChain = eDChain.chain; } } diff --git a/freecs/csprogs.dat b/freecs/csprogs.dat index 81d501a6..fadcf334 100644 Binary files a/freecs/csprogs.dat and b/freecs/csprogs.dat differ diff --git a/freecs/default.cfg b/freecs/default.cfg old mode 100755 new mode 100644 index 299b0a26..a375d7d9 --- a/freecs/default.cfg +++ b/freecs/default.cfg @@ -72,4 +72,5 @@ seta r_shadow_realtime_dlight_shadows "0" seta r_imageexensions "tga bmp pcx" seta vid_conautoscale "1" seta scr_conalpha "1" -seta con_notifylines "0" \ No newline at end of file +seta con_notifylines "0" +seta maxplayers 8 \ No newline at end of file diff --git a/freecs/progs.dat b/freecs/progs.dat index f618e4b0..40a9e30c 100644 Binary files a/freecs/progs.dat and b/freecs/progs.dat differ