mirror of
https://github.com/1dot13/source.git
synced 2026-09-09 14:46:05 +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
|
// SNIPER RIFLE - CHANCE FOR SNIPER TRAIT
|
||||||
else if ( Item[pCreateStruct->Inv[HANDPOS].usItem].usItemClass == IC_GUN &&
|
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
|
// setup the chances
|
||||||
if ( ubSolClass == SOLDIER_CLASS_ELITE || ubSolClass == SOLDIER_CLASS_ELITE_MILITIA )
|
if ( ubSolClass == SOLDIER_CLASS_ELITE || ubSolClass == SOLDIER_CLASS_ELITE_MILITIA )
|
||||||
@@ -5495,7 +5496,7 @@ BOOLEAN AssignTraitsToSoldier( SOLDIERTYPE *pSoldier, SOLDIERCREATE_STRUCT *pCre
|
|||||||
}
|
}
|
||||||
|
|
||||||
// THROWING TRAIT
|
// THROWING TRAIT
|
||||||
if ( (foundThrowing) && (!ATraitAssigned || !BTraitAssigned || !CTraitAssigned) )
|
if ( (foundThrowing || foundGrenades) && (!ATraitAssigned || !BTraitAssigned || !CTraitAssigned) )
|
||||||
{
|
{
|
||||||
// setup basic chances based on soldier type
|
// setup basic chances based on soldier type
|
||||||
if ( ubSolClass == SOLDIER_CLASS_ELITE || ubSolClass == SOLDIER_CLASS_ELITE_MILITIA )
|
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
|
// MELEE / KNIFING TRAIT
|
||||||
if ( (foundKnife || (foundMelee && gGameOptions.fNewTraitSystem)) && (!ATraitAssigned || !BTraitAssigned || !CTraitAssigned) )
|
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
|
// Flugente: enemy roles: allow medics
|
||||||
if ( gGameExternalOptions.fEnemyRoles && gGameExternalOptions.fEnemyMedics && gGameOptions.fNewTraitSystem && (!ATraitAssigned || !BTraitAssigned) && !RebelCommand::NeutraliseRole(pSoldier))
|
if ( gGameExternalOptions.fEnemyRoles && gGameExternalOptions.fEnemyMedics && gGameOptions.fNewTraitSystem && (!ATraitAssigned || !BTraitAssigned) && !RebelCommand::NeutraliseRole(pSoldier))
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user