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:
Flugente
2015-03-31 19:16:54 +00:00
parent c241c0ea7b
commit a572703bf9
4 changed files with 34 additions and 3 deletions
+5 -1
View File
@@ -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;
+3
View File
@@ -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 )
{
+4
View File
@@ -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;
+22 -2
View File
@@ -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");
}