mirror of
https://github.com/1dot13/source.git
synced 2026-07-29 13:52:17 +02:00
Adjust soldier create traits due to demolitions change
Since demolitions no longer affects grenades damage and range grenades check should be moved to throwing. Keep demolitions trait at lower prior because it can still be helpful to detect mines
This commit is contained in:
+43
-42
@@ -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))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user