mirror of
https://github.com/1dot13/source.git
synced 2026-09-09 14:46:05 +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
|
// Send event for getting hit
|
||||||
memset( &(SWeaponHit), 0, sizeof( SWeaponHit ) );
|
memset( &(SWeaponHit), 0, sizeof( SWeaponHit ) );
|
||||||
SWeaponHit.usSoldierID = pTarget->ubID;
|
SWeaponHit.usSoldierID = pTarget->ubID;
|
||||||
@@ -3020,7 +3024,7 @@ BOOLEAN BulletHitMerc( BULLET * pBullet, STRUCTURE * pStructure, BOOLEAN fIntend
|
|||||||
SWeaponHit.usWeaponIndex = usAttackingWeapon;
|
SWeaponHit.usWeaponIndex = usAttackingWeapon;
|
||||||
SWeaponHit.sDamage = (INT16) iDamage;
|
SWeaponHit.sDamage = (INT16) iDamage;
|
||||||
// breath loss is based on original impact of bullet
|
// 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
|
// HEADROCK HAM 5.1: Bullet data contains the correct original GridNo
|
||||||
SWeaponHit.usDirection = GetDirectionFromGridNo( pBullet->sOrigGridNo, pTarget );
|
SWeaponHit.usDirection = GetDirectionFromGridNo( pBullet->sOrigGridNo, pTarget );
|
||||||
SWeaponHit.sXPos = (INT16)pTarget->dXPos;
|
SWeaponHit.sXPos = (INT16)pTarget->dXPos;
|
||||||
|
|||||||
@@ -9604,6 +9604,9 @@ INT32 BulletImpact( SOLDIERTYPE *pFirer, BULLET *pBullet, SOLDIERTYPE * pTarget,
|
|||||||
pTarget->iLastArmourProtection += iTotalArmourProtection;
|
pTarget->iLastArmourProtection += iTotalArmourProtection;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Flugente: ammotype can alter the damage dealt
|
||||||
|
iImpact *= AmmoTypes[ubAmmoType].dDamageModifierLife;
|
||||||
|
|
||||||
// calc minimum damage
|
// calc minimum damage
|
||||||
if ( AmmoTypes[ubAmmoType].zeroMinimumDamage )
|
if ( AmmoTypes[ubAmmoType].zeroMinimumDamage )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -270,6 +270,10 @@ typedef struct
|
|||||||
// Flugente: item flag for various properties. Way easier than 32 boolean flags
|
// Flugente: item flag for various properties. Way easier than 32 boolean flags
|
||||||
UINT32 ammoflag;
|
UINT32 ammoflag;
|
||||||
|
|
||||||
|
// Flugente: modifiers for life and breath damage, 1.0 being the unmodified value
|
||||||
|
FLOAT dDamageModifierLife;
|
||||||
|
FLOAT dDamageModifierBreath;
|
||||||
|
|
||||||
} AMMOTYPE;
|
} AMMOTYPE;
|
||||||
|
|
||||||
enum
|
enum
|
||||||
|
|||||||
@@ -82,7 +82,9 @@ ammotypeStartElementHandle(void *userData, const XML_Char *name, const XML_Char
|
|||||||
strcmp(name, "temperatureModificator") == 0 ||
|
strcmp(name, "temperatureModificator") == 0 ||
|
||||||
strcmp(name, "PoisonPercentage") == 0 ||
|
strcmp(name, "PoisonPercentage") == 0 ||
|
||||||
strcmp(name, "dirtModificator") == 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;
|
pData->curElement = ELEMENT_PROPERTY;
|
||||||
|
|
||||||
@@ -304,6 +306,22 @@ ammotypeEndElementHandle(void *userData, const XML_Char *name)
|
|||||||
pData->curElement = ELEMENT;
|
pData->curElement = ELEMENT;
|
||||||
pData->curAmmoType.ammoflag = (UINT32) strtoul(pData->szCharData, NULL, 0);
|
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--;
|
pData->maxReadDepth--;
|
||||||
}
|
}
|
||||||
@@ -427,8 +445,10 @@ BOOLEAN WriteAmmoTypeStats()
|
|||||||
FilePrintf(hFile,"\t\t<tracerEffect>%d</tracerEffect>\r\n", AmmoTypes[cnt].tracerEffect );
|
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<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<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<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");
|
FilePrintf(hFile,"\t</AMMOTYPE>\r\n");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user