From 45659c18a3312cb99407bdda7228160ac6c4ccaa Mon Sep 17 00:00:00 2001 From: Flugente Date: Fri, 24 May 2013 15:10:27 +0000 Subject: [PATCH] made sure that faulty xmls don't lead to three major traits git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@6094 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Tactical/Soldier Create.cpp | 20 +++++++++++++------- Tactical/Soldier Create.h | 2 +- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/Tactical/Soldier Create.cpp b/Tactical/Soldier Create.cpp index ff1151bee..7456d7176 100644 --- a/Tactical/Soldier Create.cpp +++ b/Tactical/Soldier Create.cpp @@ -1423,7 +1423,7 @@ INT32 ChooseHairColor( SOLDIERTYPE *pSoldier, INT32 skin ) return hair; } -void GeneratePaletteForSoldier( SOLDIERTYPE *pSoldier, UINT8 ubSoldierClass ) +void GeneratePaletteForSoldier( SOLDIERTYPE *pSoldier, UINT8 ubSoldierClass, UINT8 ubTeam ) { INT32 skin, hair; BOOLEAN fMercClothingScheme; @@ -1441,7 +1441,7 @@ void GeneratePaletteForSoldier( SOLDIERTYPE *pSoldier, UINT8 ubSoldierClass ) if ( pSoldier->usSoldierProfile ) { - INT8 type = pSoldier->GetSoldierProfileType(pSoldier->bTeam); + INT8 type = pSoldier->GetSoldierProfileType(ubTeam); if ( type > -1 && zSoldierProfile[type][pSoldier->usSoldierProfile].uiSkin ) skin = zSoldierProfile[type][pSoldier->usSoldierProfile].uiSkin - 1; @@ -1884,7 +1884,7 @@ BOOLEAN TacticalCopySoldierFromCreateStruct( SOLDIERTYPE *pSoldier, SOLDIERCREAT } //Generate colors for soldier based on the body type. - GeneratePaletteForSoldier( pSoldier, pCreateStruct->ubSoldierClass ); + GeneratePaletteForSoldier( pSoldier, pCreateStruct->ubSoldierClass, pCreateStruct->bTeam ); // Copy item info over pSoldier->inv = pCreateStruct->Inv; @@ -2667,7 +2667,7 @@ void UpdateSoldierWithStaticDetailedInformation( SOLDIERTYPE *s, SOLDIERCREATE_S case SOLDIER_CLASS_ADMINISTRATOR: case SOLDIER_CLASS_ARMY: case SOLDIER_CLASS_ELITE: - GeneratePaletteForSoldier( s, spp->ubSoldierClass ); + GeneratePaletteForSoldier( s, spp->ubSoldierClass, spp->bTeam ); break; } @@ -4069,7 +4069,7 @@ BOOLEAN AssignTraitsToSoldier( SOLDIERTYPE *pSoldier, SOLDIERCREATE_STRUCT *pCre ubSolClass = pSoldier->ubSoldierClass; // Flugente: soldier profiles - if any traits are in the xml, use them, but fill up empty slots afterwards - if ( pSoldier->usSoldierProfile ) + if ( gGameOptions.fNewTraitSystem && pSoldier->usSoldierProfile ) { INT8 type = pSoldier->GetSoldierProfileType(pCreateStruct->bTeam); @@ -4089,8 +4089,14 @@ BOOLEAN AssignTraitsToSoldier( SOLDIERTYPE *pSoldier, SOLDIERCREATE_STRUCT *pCre if ( zSoldierProfile[type][pSoldier->usSoldierProfile].uiTrait[2] > 0 ) { - pSoldier->stats.ubSkillTraits[2] = zSoldierProfile[type][pSoldier->usSoldierProfile].uiTrait[2]; - CTraitAssigned = TRUE; + // we have to make sure that not all 3 traits are major traits - if that happens, we ignore the third one + if ( TwoStagedTrait(pSoldier->stats.ubSkillTraits[0]) && TwoStagedTrait(pSoldier->stats.ubSkillTraits[1]) && TwoStagedTrait(zSoldierProfile[type][pSoldier->usSoldierProfile].uiTrait[2]) ) + ; + else + { + pSoldier->stats.ubSkillTraits[2] = zSoldierProfile[type][pSoldier->usSoldierProfile].uiTrait[2]; + CTraitAssigned = TRUE; + } } } } diff --git a/Tactical/Soldier Create.h b/Tactical/Soldier Create.h index 0719d9d17..c69325bfa 100644 --- a/Tactical/Soldier Create.h +++ b/Tactical/Soldier Create.h @@ -497,7 +497,7 @@ void ModifySoldierAttributesWithNewRelativeLevel( SOLDIERTYPE *s, INT8 bLevel ); // Force the soldier to be a different ID void ForceSoldierProfileID( SOLDIERTYPE *pSoldier, UINT8 ubProfileID ); -void GeneratePaletteForSoldier( SOLDIERTYPE *pSoldier, UINT8 ubSoldierClass ); +void GeneratePaletteForSoldier( SOLDIERTYPE *pSoldier, UINT8 ubSoldierClass, UINT8 ubTeam ); void QuickCreateProfileMerc( INT8 bTeam, UINT8 ubProfileID );