mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
New ammo properties:
- <dDamageModifierLife> alters the life damage a bullet deals. Default 1.0, valied values from 0.0 to 100.0 - <dDamageModifierBreath> alters the breath damage a bullet deals. Default 1.0, valied values from 0.0 to 100.0 git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@7803 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+5
-1
@@ -3012,6 +3012,10 @@ BOOLEAN BulletHitMerc( BULLET * pBullet, STRUCTURE * pStructure, BOOLEAN fIntend
|
||||
}
|
||||
}
|
||||
|
||||
// Flugente: ammotype can alter the damage dealt
|
||||
INT16 sBreathLoss = (INT16)((iImpact * APBPConstants[BP_GET_WOUNDED] * (pTarget->bBreathMax * 100 - pTarget->sBreathRed)) / 10000);
|
||||
sBreathLoss *= AmmoTypes[ubAmmoType].dDamageModifierBreath;
|
||||
|
||||
// Send event for getting hit
|
||||
memset( &(SWeaponHit), 0, sizeof( SWeaponHit ) );
|
||||
SWeaponHit.usSoldierID = pTarget->ubID;
|
||||
@@ -3020,7 +3024,7 @@ BOOLEAN BulletHitMerc( BULLET * pBullet, STRUCTURE * pStructure, BOOLEAN fIntend
|
||||
SWeaponHit.usWeaponIndex = usAttackingWeapon;
|
||||
SWeaponHit.sDamage = (INT16) iDamage;
|
||||
// breath loss is based on original impact of bullet
|
||||
SWeaponHit.sBreathLoss = (INT16) ( (iImpact * APBPConstants[BP_GET_WOUNDED] * (pTarget->bBreathMax * 100 - pTarget->sBreathRed)) / 10000 );
|
||||
SWeaponHit.sBreathLoss = sBreathLoss;
|
||||
// HEADROCK HAM 5.1: Bullet data contains the correct original GridNo
|
||||
SWeaponHit.usDirection = GetDirectionFromGridNo( pBullet->sOrigGridNo, pTarget );
|
||||
SWeaponHit.sXPos = (INT16)pTarget->dXPos;
|
||||
|
||||
@@ -9604,6 +9604,9 @@ INT32 BulletImpact( SOLDIERTYPE *pFirer, BULLET *pBullet, SOLDIERTYPE * pTarget,
|
||||
pTarget->iLastArmourProtection += iTotalArmourProtection;
|
||||
}
|
||||
|
||||
// Flugente: ammotype can alter the damage dealt
|
||||
iImpact *= AmmoTypes[ubAmmoType].dDamageModifierLife;
|
||||
|
||||
// calc minimum damage
|
||||
if ( AmmoTypes[ubAmmoType].zeroMinimumDamage )
|
||||
{
|
||||
|
||||
@@ -269,6 +269,10 @@ typedef struct
|
||||
|
||||
// Flugente: item flag for various properties. Way easier than 32 boolean flags
|
||||
UINT32 ammoflag;
|
||||
|
||||
// Flugente: modifiers for life and breath damage, 1.0 being the unmodified value
|
||||
FLOAT dDamageModifierLife;
|
||||
FLOAT dDamageModifierBreath;
|
||||
|
||||
} AMMOTYPE;
|
||||
|
||||
|
||||
@@ -82,7 +82,9 @@ ammotypeStartElementHandle(void *userData, const XML_Char *name, const XML_Char
|
||||
strcmp(name, "temperatureModificator") == 0 ||
|
||||
strcmp(name, "PoisonPercentage") == 0 ||
|
||||
strcmp(name, "dirtModificator") == 0 ||
|
||||
strcmp(name, "ammoflag") == 0 ))
|
||||
strcmp(name, "ammoflag" ) == 0 ||
|
||||
strcmp(name, "dDamageModifierLife" ) == 0 ||
|
||||
strcmp(name, "dDamageModifierBreath") == 0 ))
|
||||
{
|
||||
pData->curElement = ELEMENT_PROPERTY;
|
||||
|
||||
@@ -304,6 +306,22 @@ ammotypeEndElementHandle(void *userData, const XML_Char *name)
|
||||
pData->curElement = ELEMENT;
|
||||
pData->curAmmoType.ammoflag = (UINT32) strtoul(pData->szCharData, NULL, 0);
|
||||
}
|
||||
else if ( strcmp( name, "dDamageModifierLife" ) == 0 )
|
||||
{
|
||||
pData->curElement = ELEMENT;
|
||||
pData->curAmmoType.dDamageModifierLife = (FLOAT)atof( pData->szCharData );
|
||||
|
||||
// reasonable values only
|
||||
pData->curAmmoType.dDamageModifierLife = min( 100.0f, max( 0.0f, pData->curAmmoType.dDamageModifierLife ) );
|
||||
}
|
||||
else if ( strcmp( name, "dDamageModifierBreath" ) == 0 )
|
||||
{
|
||||
pData->curElement = ELEMENT;
|
||||
pData->curAmmoType.dDamageModifierBreath = (FLOAT)atof( pData->szCharData );
|
||||
|
||||
// reasonable values only
|
||||
pData->curAmmoType.dDamageModifierBreath = min( 100.0f, max( 0.0f, pData->curAmmoType.dDamageModifierBreath ) );
|
||||
}
|
||||
|
||||
pData->maxReadDepth--;
|
||||
}
|
||||
@@ -427,8 +445,10 @@ BOOLEAN WriteAmmoTypeStats()
|
||||
FilePrintf(hFile,"\t\t<tracerEffect>%d</tracerEffect>\r\n", AmmoTypes[cnt].tracerEffect );
|
||||
FilePrintf(hFile,"\t\t<temperatureModificator>%4.2f</temperatureModificator>\r\n", AmmoTypes[cnt].temperatureModificator );
|
||||
FilePrintf(hFile,"\t\t<PoisonPercentage>%d</PoisonPercentage>\r\n", AmmoTypes[cnt].poisonPercentage );
|
||||
FilePrintf(hFile,"\t\t<dirtModificator>%4.2f</dirtModificator>\r\n", AmmoTypes[cnt].dirtModificator );
|
||||
FilePrintf(hFile,"\t\t<dirtModificator>%4.2f</dirtModificator>\r\n", AmmoTypes[cnt].dirtModificator );
|
||||
FilePrintf(hFile,"\t\t<ammoflag>%d</ammoflag>\r\n", AmmoTypes[cnt].ammoflag );
|
||||
FilePrintf(hFile,"\t\t<dDamageModifierLife>%4.2f</dDamageModifierLife>\r\n", AmmoTypes[cnt].dDamageModifierLife );
|
||||
FilePrintf(hFile,"\t\t<dDamageModifierBreath>%4.2f</dDamageModifierBreath>\r\n", AmmoTypes[cnt].dDamageModifierBreath );
|
||||
|
||||
FilePrintf(hFile,"\t</AMMOTYPE>\r\n");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user