mirror of
https://github.com/1dot13/source.git
synced 2026-08-19 14:20:30 +02:00
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:
@@ -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];
|
||||
|
||||
|
||||
@@ -68,6 +68,8 @@ INT16 EffectiveWisdom( SOLDIERTYPE * pSoldier)
|
||||
|
||||
iEffWisdom = EffectStatForBeingDrunk( pSoldier, iEffWisdom );
|
||||
|
||||
iEffWisdom = (iEffWisdom * (100 + pSoldier->GetBackgroundValue(BG_WISDOM))) / 100;
|
||||
|
||||
return( (INT16) iEffWisdom );
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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))) );
|
||||
}
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
@@ -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--;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user