Fixes (by Buggler)

- Fixed allow exception to Dr Q. skill trait code not fully functional
- Swapped Dr Q. skill trait xml order so that when exception disabled, he will still have his night ops minor skill due to code execution order
- Externalized allow_exception ID number for modding

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@5791 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Wanne
2013-01-15 20:04:41 +00:00
parent c49f59f66e
commit 56e08dbeae
4 changed files with 30 additions and 17 deletions
+3 -2
View File
@@ -1925,8 +1925,9 @@ void LoadSkillTraitsExternalSettings()
gSkillTraitValues.ubMaxNumberOfTraits = iniReader.ReadInteger("Generic Traits Settings","MAX_NUMBER_OF_TRAITS", 3, 2, 30);
gSkillTraitValues.ubNumberOfMajorTraitsAllowed = iniReader.ReadInteger("Generic Traits Settings","NUMBER_OF_MAJOR_TRAITS_ALLOWED", 2, 2, 20);
// Allow an exception in number of traits for Dr.Q?
gSkillTraitValues.fAllowDrQTraitsException = iniReader.ReadBoolean("Generic Traits Settings","ALLOW_EXCEPTION_FOR_DR_Q", TRUE);
// Allow an exception in number of traits for Special Merc?
gSkillTraitValues.fAllowSpecialMercTraitsException = iniReader.ReadBoolean("Generic Traits Settings","ALLOW_EXCEPTION_FOR_SPECIAL_MERC", TRUE);
gSkillTraitValues.ubSpecialMercID = iniReader.ReadInteger("Generic Traits Settings","SPECIAL_MERC_ID", 33, 0, 254);
// Allow traits prerequisities for attributes?
gSkillTraitValues.fAllowAttributePrereq = iniReader.ReadBoolean("Generic Traits Settings","SET_MINIMUM_ATTRIBUTES_FOR_TRAITS", TRUE);
+2 -1
View File
@@ -1211,7 +1211,8 @@ typedef struct
UINT8 ubMaxNumberOfTraits;
UINT8 ubNumberOfMajorTraitsAllowed;
BOOLEAN fAllowDrQTraitsException;
BOOLEAN fAllowSpecialMercTraitsException;
UINT8 ubSpecialMercID;
BOOLEAN fAllowAttributePrereq;
+14 -12
View File
@@ -17838,16 +17838,17 @@ BOOLEAN HAS_SKILL_TRAIT( SOLDIERTYPE * pSoldier, UINT8 uiSkillTraitNumber )
INT8 bNumMajorTraitsCounted = 0;
INT8 bMaxTraits = gSkillTraitValues.ubMaxNumberOfTraits;
INT8 bMaxMajorTraits = gSkillTraitValues.ubNumberOfMajorTraitsAllowed;
// special case for Dr.Q - he's allowed to have 3 major traits and one minor for total by default
if ( pSoldier->ubProfile == 33 && gSkillTraitValues.fAllowDrQTraitsException )
{
bMaxTraits++;
bMaxMajorTraits++;
}
// check old/new traits
if (gGameOptions.fNewTraitSystem)
{
// exception for special merc
if ( gSkillTraitValues.fAllowSpecialMercTraitsException && pSoldier->ubProfile == gSkillTraitValues.ubSpecialMercID)
{
bMaxTraits++;
bMaxMajorTraits++;
}
for ( INT8 bCnt = 0; bCnt < min(30,bMaxTraits); bCnt++ )
{
if ( TwoStagedTrait( uiSkillTraitNumber ) )
@@ -17894,16 +17895,17 @@ INT8 NUM_SKILL_TRAITS( SOLDIERTYPE * pSoldier, UINT8 uiSkillTraitNumber )
INT8 bNumMajorTraitsCounted = 0;
INT8 bMaxTraits = gSkillTraitValues.ubMaxNumberOfTraits;
INT8 bMaxMajorTraits = gSkillTraitValues.ubNumberOfMajorTraitsAllowed;
// special case for Dr.Q - he's allowed to have 3 major traits and one minor for total by default
if ( pSoldier->ubProfile == 33 && gSkillTraitValues.fAllowDrQTraitsException )
{
bMaxTraits++;
bMaxMajorTraits++;
}
// check old/new traits
if (gGameOptions.fNewTraitSystem)
{
// exception for special merc
if ( gSkillTraitValues.fAllowSpecialMercTraitsException && pSoldier->ubProfile == gSkillTraitValues.ubSpecialMercID)
{
bMaxTraits++;
bMaxMajorTraits++;
}
for ( INT8 bCnt = 0; bCnt < min(30,bMaxTraits); bCnt++ )
{
if ( TwoStagedTrait( uiSkillTraitNumber ) )
+11 -2
View File
@@ -2657,11 +2657,20 @@ INT8 ProfileHasSkillTrait( INT32 ubProfileID, INT8 bSkillTrait )
{
INT8 bNumTraits = 0;
INT8 bNumMajorTraitsCounted = 0;
INT8 bMaxTraits = gSkillTraitValues.ubMaxNumberOfTraits;
INT8 bMaxMajorTraits = gSkillTraitValues.ubNumberOfMajorTraitsAllowed;
// check old/new traits
if (gGameOptions.fNewTraitSystem)
{
for ( INT8 bCnt = 0; bCnt < gSkillTraitValues.ubMaxNumberOfTraits; bCnt++ )
// exception for special merc
if ( gSkillTraitValues.fAllowSpecialMercTraitsException && ubProfileID == gSkillTraitValues.ubSpecialMercID)
{
bMaxTraits++;
bMaxMajorTraits++;
}
for ( INT8 bCnt = 0; bCnt < bMaxTraits; bCnt++ )
{
if ( TwoStagedTrait(bSkillTrait) )
{
@@ -2675,7 +2684,7 @@ INT8 ProfileHasSkillTrait( INT32 ubProfileID, INT8 bSkillTrait )
bNumMajorTraitsCounted++;
}
// if we exceeded the allowed number of major traits, ignore the rest of them
if ( bNumMajorTraitsCounted >= gSkillTraitValues.ubNumberOfMajorTraitsAllowed )
if ( bNumMajorTraitsCounted >= bMaxMajorTraits )
{
break;
}