Background additions:

- <no_male> and <no_female> prohibit specific backgrounds to show up on IMP generation
- <cth_vs_creatures> modifies gun CTH when aiming at creatures
- added wisdom stat modifier
- Fix: maximum cth can never exceed 100

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@6359 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Flugente
2013-09-04 21:13:40 +00:00
parent 5ca8da319c
commit 251d96ccb6
15 changed files with 101 additions and 14 deletions
+3 -1
View File
@@ -129,6 +129,7 @@ enum {
BG_MECHANICAL,
BG_EXPLOSIVE_ASSIGN,
BG_MEDICAL,
BG_WISDOM,
// ap modifiers for non-sector related tasks
BG_HEIGHT,
@@ -181,6 +182,7 @@ enum {
// various
BG_BONUS_BREACHINGCHARGE,
BG_PERC_CTH_CREATURE,
BG_MAX,
};
@@ -196,7 +198,7 @@ typedef struct
INT16 value[BG_MAX]; // property values
} BACKGROUND_VALUES;
#define NUM_BACKGROUND 100
#define NUM_BACKGROUND 200
extern BACKGROUND_VALUES zBackground[NUM_BACKGROUND];
+2
View File
@@ -68,6 +68,8 @@ INT16 EffectiveWisdom( SOLDIERTYPE * pSoldier)
iEffWisdom = EffectStatForBeingDrunk( pSoldier, iEffWisdom );
iEffWisdom = (iEffWisdom * (100 + pSoldier->GetBackgroundValue(BG_WISDOM))) / 100;
return( (INT16) iEffWisdom );
}
+6 -3
View File
@@ -401,10 +401,13 @@ enum
#define BACKGROUND_TRAPLEVEL 0x0000000000000010 //16 // trap level +1
#define BACKGROUND_CORRUPTIONSPREAD 0x0000000000000020 //32 // spreads corruption to others - not used in trunk!
//#define BACKGROUND_XENOPHOBIC 0x0000000000000040 //64 // arrogant towards others without this background
//#define BACKGROUND_CAPITULATION 0x0000000000000080 //128 // if present, the team's surrender strength is higher
#define BACKGROUND_NO_MALE 0x0000000000000040 //64 // background cannot be selected by males (IMP creation)
#define BACKGROUND_NO_FEMALE 0x0000000000000080 //128 // background cannot be selected by females (IMP creation)
#define BACKGROUND_FLAG_MAX 6 // number of flagged backgrounds - keep this updated, or properties will get lost!
#define BACKGROUND_FLAG_MAX 8 // number of flagged backgrounds - keep this updated, or properties will get lost!
// some properties are hidden (forbid background in MP creation)
#define BACKGROUND_HIDDEN_FLAGS (BACKGROUND_NO_MALE|BACKGROUND_NO_FEMALE)
// Flugente: types of multi-turn actions
enum
+18 -9
View File
@@ -5181,14 +5181,15 @@ if (gGameExternalOptions.fUseNewCTHCalculation)
// apply bonus from traits
// Flugente: moved trait modifiers into a member function
if(gGameOptions.fNewTraitSystem)
{
UINT8 targetprofile = NOBODY;
if ( pTarget && pTarget->ubProfile != NOBODY )
targetprofile = pTarget->ubProfile;
UINT8 targetprofile = NOBODY;
if ( pTarget && pTarget->ubProfile != NOBODY )
targetprofile = pTarget->ubProfile;
fAimModifier += pSoldier->GetTraitCTHModifier( usInHand, ubAimTime, targetprofile );
}
fAimModifier += pSoldier->GetTraitCTHModifier( usInHand, ubAimTime, targetprofile );
// Flugente: backgrounds
if ( pTarget && pTarget->bTeam == CREATURE_TEAM )
fAimModifier += pSoldier->GetBackgroundValue(BG_PERC_CTH_CREATURE);
// get aimbonus from target
fAimModifier += CalcNewChanceToHitAimTargetBonus(pSoldier, pTarget, sGridNo, iRange, ubAimPos, fCantSeeTarget);
@@ -5357,6 +5358,10 @@ else
iTraitModifier = pSoldier->GetTraitCTHModifier( usInHand, ubAimTime, targetprofile );
// Flugente: backgrounds
if ( pTarget && pTarget->bTeam == CREATURE_TEAM )
iTraitModifier += pSoldier->GetBackgroundValue(BG_PERC_CTH_CREATURE);
// SHOOTING AT SAME TARGET AGAIN
if (sGridNo == pSoldier->sLastTarget )
iBaseModifier += (FLOAT)gGameCTHConstants.BASE_SAME_TARGET;
@@ -6088,7 +6093,7 @@ else
// Impose global limits.
// Flugente: backgrounds
iChance = min(iChance, gGameExternalOptions.ubMaximumCTH + (UINT8)(pSoldier->GetBackgroundValue(BG_PERC_CTH_MAX)) );
iChance = min(iChance, min(100, gGameExternalOptions.ubMaximumCTH + (UINT8)(pSoldier->GetBackgroundValue(BG_PERC_CTH_MAX))) );
iChance = __max(iChance, gGameExternalOptions.ubMinimumCTH);
return (iChance);
@@ -6920,6 +6925,10 @@ UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime,
targetprofile = pTarget->ubProfile;
iChance += pSoldier->GetTraitCTHModifier( usInHand, ubAimTime, targetprofile );
// Flugente: backgrounds
if ( pTarget && pTarget->bTeam == CREATURE_TEAM )
iChance += pSoldier->GetBackgroundValue(BG_PERC_CTH_CREATURE);
/////////////////////////////////////////////////////////////////////////////////////
@@ -7452,7 +7461,7 @@ UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime,
// iChance = MAXCHANCETOHIT;
// Flugente: backgrounds
iChance = min(iChance, gGameExternalOptions.ubMaximumCTH + (UINT8)(pSoldier->GetBackgroundValue(BG_PERC_CTH_MAX)) );
iChance = min(iChance, min(100, gGameExternalOptions.ubMaximumCTH + (UINT8)(pSoldier->GetBackgroundValue(BG_PERC_CTH_MAX))) );
}
/////////////////////////////////////////////////////////////////////////////////////
+25 -1
View File
@@ -80,6 +80,7 @@ backgroundStartElementHandle(void *userData, const XML_Char *name, const XML_Cha
strcmp(name, "dexterity") == 0 ||
strcmp(name, "mechanical") == 0 ||
strcmp(name, "medical") == 0 ||
strcmp(name, "wisdom") == 0 ||
strcmp(name, "explosives") == 0 ||
strcmp(name, "leadership") == 0 ||
strcmp(name, "marksmanship") == 0 ||
@@ -116,12 +117,15 @@ backgroundStartElementHandle(void *userData, const XML_Char *name, const XML_Cha
strcmp(name, "approach_threaten") == 0 ||
strcmp(name, "approach_recruit") == 0 ||
strcmp(name, "breachingcharge") == 0 ||
strcmp(name, "cth_vs_creatures") == 0 ||
strcmp(name, "druguse") == 0 ||
strcmp(name, "xenophobic") == 0 ||
strcmp(name, "corruptionspread") == 0 ||
strcmp(name, "level_underground") == 0 ||
strcmp(name, "scrounging") == 0 ||
strcmp(name, "traplevel") == 0 ))
strcmp(name, "traplevel") == 0 ||
strcmp(name, "no_male") == 0 ||
strcmp(name, "no_female") == 0 ))
{
pData->curElement = ELEMENT_PROPERTY;
@@ -294,6 +298,11 @@ backgroundEndElementHandle(void *userData, const XML_Char *name)
pData->curElement = ELEMENT;
pData->curBackground.value[BG_MEDICAL] = min(XML_BACKGROUND_STAT_MAX, max(-XML_BACKGROUND_STAT_MAX, (INT8) atol(pData->szCharData) ));
}
else if(strcmp(name, "wisdom") == 0)
{
pData->curElement = ELEMENT;
pData->curBackground.value[BG_WISDOM] = min(XML_BACKGROUND_STAT_MAX, max(-XML_BACKGROUND_STAT_MAX, (INT8) atol(pData->szCharData) ));
}
else if(strcmp(name, "explosives") == 0)
{
pData->curElement = ELEMENT;
@@ -474,6 +483,11 @@ backgroundEndElementHandle(void *userData, const XML_Char *name)
pData->curElement = ELEMENT;
pData->curBackground.value[BG_BONUS_BREACHINGCHARGE] = min(100, max(-100, (INT16) atol(pData->szCharData) ));
}
else if(strcmp(name, "cth_vs_creatures") == 0)
{
pData->curElement = ELEMENT;
pData->curBackground.value[BG_PERC_CTH_CREATURE] = min(20, max(-20, (INT16) atol(pData->szCharData) ));
}
else if(strcmp(name, "druguse") == 0)
{
pData->curElement = ELEMENT;
@@ -504,6 +518,16 @@ backgroundEndElementHandle(void *userData, const XML_Char *name)
pData->curElement = ELEMENT;
pData->curBackground.uiFlags |= (UINT16) atol(pData->szCharData) ? BACKGROUND_TRAPLEVEL : 0;
}
else if(strcmp(name, "no_male") == 0)
{
pData->curElement = ELEMENT;
pData->curBackground.uiFlags |= (UINT16) atol(pData->szCharData) ? BACKGROUND_NO_MALE : 0;
}
else if(strcmp(name, "no_female") == 0)
{
pData->curElement = ELEMENT;
pData->curBackground.uiFlags |= (UINT16) atol(pData->szCharData) ? BACKGROUND_NO_FEMALE : 0;
}
pData->maxReadDepth--;
}