diff --git a/Tactical/Soldier Create.cpp b/Tactical/Soldier Create.cpp index 3048ca298..0001bdf27 100644 --- a/Tactical/Soldier Create.cpp +++ b/Tactical/Soldier Create.cpp @@ -4897,7 +4897,8 @@ BOOLEAN AssignTraitsToSoldier( SOLDIERTYPE *pSoldier, SOLDIERCREATE_STRUCT *pCre } // SNIPER RIFLE - CHANCE FOR SNIPER TRAIT else if ( Item[pCreateStruct->Inv[HANDPOS].usItem].usItemClass == IC_GUN && - Weapon[pCreateStruct->Inv[HANDPOS].usItem].ubWeaponType == GUN_SN_RIFLE ) + ( Weapon[pCreateStruct->Inv[HANDPOS].usItem].ubWeaponType == GUN_SN_RIFLE || + Weapon[pCreateStruct->Inv[HANDPOS].usItem].ubWeaponType == GUN_RIFLE )) { // setup the chances if ( ubSolClass == SOLDIER_CLASS_ELITE || ubSolClass == SOLDIER_CLASS_ELITE_MILITIA ) @@ -5495,7 +5496,7 @@ BOOLEAN AssignTraitsToSoldier( SOLDIERTYPE *pSoldier, SOLDIERCREATE_STRUCT *pCre } // THROWING TRAIT - if ( (foundThrowing) && (!ATraitAssigned || !BTraitAssigned || !CTraitAssigned) ) + if ( (foundThrowing || foundGrenades) && (!ATraitAssigned || !BTraitAssigned || !CTraitAssigned) ) { // setup basic chances based on soldier type if ( ubSolClass == SOLDIER_CLASS_ELITE || ubSolClass == SOLDIER_CLASS_ELITE_MILITIA ) @@ -5557,46 +5558,6 @@ BOOLEAN AssignTraitsToSoldier( SOLDIERTYPE *pSoldier, SOLDIERCREATE_STRUCT *pCre } } - // DEMOLITIONS TRAIT - if ( (foundGrenades) && (gGameOptions.fNewTraitSystem) && (!ATraitAssigned || !BTraitAssigned || !CTraitAssigned) ) - { - // setup basic chances based on soldier type - if ( ubSolClass == SOLDIER_CLASS_ELITE || ubSolClass == SOLDIER_CLASS_ELITE_MILITIA ) - iChance = 20 + ubProgress / 3; // 20-53% chance - else if ( ubSolClass == SOLDIER_CLASS_ARMY || ubSolClass == SOLDIER_CLASS_REG_MILITIA ) - iChance = 10 + ubProgress / 3; // 10-43% chance - else if ( ubSolClass == SOLDIER_CLASS_ADMINISTRATOR || ubSolClass == SOLDIER_CLASS_GREEN_MILITIA || ubSolClass == SOLDIER_CLASS_BANDIT ) - iChance = ubProgress / 3; // 0-33% chance - - // modify the chance by preset ini setting - if ( gGameExternalOptions.bAssignedTraitsRarity != 0 ) - { - iChance += ((iChance * gGameExternalOptions.bAssignedTraitsRarity) / 100); - } - - // assign the trait based on the chance - if ( Chance( iChance ) ) - { - if ( !ATraitAssigned ) - { - pSoldier->stats.ubSkillTraits[0] = DEMOLITIONS_NT; - ATraitAssigned = TRUE; - } - else if ( !BTraitAssigned ) - { - pSoldier->stats.ubSkillTraits[1] = DEMOLITIONS_NT; - BTraitAssigned = TRUE; - } - // allow third only to elites - else if ( !CTraitAssigned && gGameOptions.fNewTraitSystem && (ubSolClass == SOLDIER_CLASS_ELITE || ubSolClass == SOLDIER_CLASS_ELITE_MILITIA) ) - { - pSoldier->stats.ubSkillTraits[2] = DEMOLITIONS_NT; - CTraitAssigned = TRUE; - return(TRUE); - } - } - } - // MELEE / KNIFING TRAIT if ( (foundKnife || (foundMelee && gGameOptions.fNewTraitSystem)) && (!ATraitAssigned || !BTraitAssigned || !CTraitAssigned) ) { @@ -5853,6 +5814,46 @@ BOOLEAN AssignTraitsToSoldier( SOLDIERTYPE *pSoldier, SOLDIERCREATE_STRUCT *pCre } } + // DEMOLITIONS TRAIT + if ( gGameOptions.fNewTraitSystem && (!ATraitAssigned || !BTraitAssigned || !CTraitAssigned) ) + { + // setup basic chances based on soldier type + if ( ubSolClass == SOLDIER_CLASS_ELITE || ubSolClass == SOLDIER_CLASS_ELITE_MILITIA ) + iChance = 20 + ubProgress / 3; // 20-53% chance + else if ( ubSolClass == SOLDIER_CLASS_ARMY || ubSolClass == SOLDIER_CLASS_REG_MILITIA ) + iChance = 10 + ubProgress / 3; // 10-43% chance + else if ( ubSolClass == SOLDIER_CLASS_ADMINISTRATOR || ubSolClass == SOLDIER_CLASS_GREEN_MILITIA || ubSolClass == SOLDIER_CLASS_BANDIT ) + iChance = ubProgress / 3; // 0-33% chance + + // modify the chance by preset ini setting + if ( gGameExternalOptions.bAssignedTraitsRarity != 0 ) + { + iChance += ((iChance * gGameExternalOptions.bAssignedTraitsRarity) / 100); + } + + // assign the trait based on the chance + if ( Chance( iChance ) ) + { + if ( !ATraitAssigned ) + { + pSoldier->stats.ubSkillTraits[0] = DEMOLITIONS_NT; + ATraitAssigned = TRUE; + } + else if ( !BTraitAssigned ) + { + pSoldier->stats.ubSkillTraits[1] = DEMOLITIONS_NT; + BTraitAssigned = TRUE; + } + // allow third only to elites + else if ( !CTraitAssigned && gGameOptions.fNewTraitSystem && (ubSolClass == SOLDIER_CLASS_ELITE || ubSolClass == SOLDIER_CLASS_ELITE_MILITIA) ) + { + pSoldier->stats.ubSkillTraits[2] = DEMOLITIONS_NT; + CTraitAssigned = TRUE; + return(TRUE); + } + } + } + // Flugente: enemy roles: allow medics if ( gGameExternalOptions.fEnemyRoles && gGameExternalOptions.fEnemyMedics && gGameOptions.fNewTraitSystem && (!ATraitAssigned || !BTraitAssigned) && !RebelCommand::NeutraliseRole(pSoldier)) {