mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
unified code for enemy/militia gear selection
git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8334 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+95
-245
@@ -247,7 +247,7 @@ void GenerateRandomEquipment( SOLDIERCREATE_STRUCT *pp, INT8 bSoldierClass, INT8
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if ( ARMED_VEHICLE( pp ) )
|
||||
{
|
||||
EquipArmouredVehicle( pp, TANK( pp ) );
|
||||
@@ -332,15 +332,22 @@ void GenerateRandomEquipment( SOLDIERCREATE_STRUCT *pp, INT8 bSoldierClass, INT8
|
||||
// SANDRO - I've split the item choosing below, so the item choices for militia can be
|
||||
// handled differently than for enemies.
|
||||
case SOLDIER_CLASS_ADMINISTRATOR:
|
||||
//if ( gGameOptions.fSlowProgressForEnemyItemsChoice )
|
||||
// bRating = bEquipmentModifier - ( bSoldierClass == SOLDIER_CLASS_ADMINISTRATOR );
|
||||
//else
|
||||
case SOLDIER_CLASS_GREEN_MILITIA:
|
||||
bRating = BAD_ADMINISTRATOR_EQUIPMENT_RATING + bEquipmentModifier;
|
||||
|
||||
// Equipment quality modifier
|
||||
if ( gGameExternalOptions.sEnemyAdminEquipmentQualityModifier != 0 )
|
||||
bRating += gGameExternalOptions.sEnemyAdminEquipmentQualityModifier;
|
||||
|
||||
if ( bSoldierClass == SOLDIER_CLASS_ADMINISTRATOR )
|
||||
{
|
||||
if ( gGameExternalOptions.sEnemyAdminEquipmentQualityModifier != 0 )
|
||||
bRating += gGameExternalOptions.sEnemyAdminEquipmentQualityModifier;
|
||||
}
|
||||
else if ( bSoldierClass == SOLDIER_CLASS_GREEN_MILITIA )
|
||||
{
|
||||
// SANDRO - Militia equipment quality bonus
|
||||
if ( gGameExternalOptions.bGreenMilitiaEquipmentQualityModifier != 0 )
|
||||
bRating += gGameExternalOptions.bGreenMilitiaEquipmentQualityModifier;
|
||||
}
|
||||
|
||||
bRating = (INT8)max( MIN_EQUIPMENT_CLASS, min( MAX_EQUIPMENT_CLASS, bRating ) );
|
||||
|
||||
bWeaponClass = bRating;
|
||||
@@ -353,9 +360,17 @@ void GenerateRandomEquipment( SOLDIERCREATE_STRUCT *pp, INT8 bSoldierClass, INT8
|
||||
bHelmetClass = bRating;
|
||||
// no leggings
|
||||
|
||||
if( Chance( 30 ) )
|
||||
bKnifeClass = bRating;
|
||||
|
||||
if ( bSoldierClass == SOLDIER_CLASS_ADMINISTRATOR )
|
||||
{
|
||||
if ( Chance( 30 ) )
|
||||
bKnifeClass = bRating;
|
||||
}
|
||||
else if ( bSoldierClass == SOLDIER_CLASS_GREEN_MILITIA )
|
||||
{
|
||||
if ( Chance( 15 ) )
|
||||
bKnifeClass = bRating;
|
||||
}
|
||||
|
||||
bAmmoClips = (INT8)(3 + Random( 2 ));
|
||||
|
||||
if( bRating >= GOOD_ADMINISTRATOR_EQUIPMENT_RATING )
|
||||
@@ -373,53 +388,6 @@ void GenerateRandomEquipment( SOLDIERCREATE_STRUCT *pp, INT8 bSoldierClass, INT8
|
||||
bGrenades = 1, bGrenadeClass = bRating;
|
||||
}
|
||||
|
||||
if( ( bRating > MIN_EQUIPMENT_CLASS ) && bRating < MAX_EQUIPMENT_CLASS )
|
||||
{ //Randomly decide if there is to be an upgrade of guns vs armour (one goes up, the other down)
|
||||
switch( Random( 5 ) )
|
||||
{
|
||||
case 0: bWeaponClass++, bVestClass--; break; //better gun, worse armour
|
||||
case 1: bWeaponClass--, bVestClass++; break; //worse gun, better armour
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SOLDIER_CLASS_GREEN_MILITIA:
|
||||
|
||||
bRating = BAD_ADMINISTRATOR_EQUIPMENT_RATING + bEquipmentModifier;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
// SANDRO - Militia equipment quality bonus
|
||||
if ( gGameExternalOptions.bGreenMilitiaEquipmentQualityModifier != 0 )
|
||||
bRating += gGameExternalOptions.bGreenMilitiaEquipmentQualityModifier;
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
bRating = (INT8)max( MIN_EQUIPMENT_CLASS, min( MAX_EQUIPMENT_CLASS, bRating ) );
|
||||
|
||||
bWeaponClass = bRating;
|
||||
//Headrocktest, remove for release
|
||||
//bLBEClass = bRating;
|
||||
|
||||
//Note: in some cases the class of armour and/or helmet won't be high enough to make
|
||||
// the lowest level.
|
||||
bVestClass = bRating;
|
||||
bHelmetClass = bRating;
|
||||
|
||||
if( Chance( 15 ) )
|
||||
bKnifeClass = bRating;
|
||||
|
||||
bAmmoClips = (INT8)(3 + Random( 2 ));
|
||||
|
||||
if( bRating >= GOOD_ADMINISTRATOR_EQUIPMENT_RATING )
|
||||
{
|
||||
bAmmoClips++;
|
||||
|
||||
bMiscClass = bRating;
|
||||
}
|
||||
|
||||
if( bRating >= GREAT_ADMINISTRATOR_EQUIPMENT_RATING )
|
||||
{
|
||||
bGrenades = 1, bGrenadeClass = bRating;
|
||||
}
|
||||
|
||||
if( ( bRating > MIN_EQUIPMENT_CLASS ) && bRating < MAX_EQUIPMENT_CLASS )
|
||||
{ //Randomly decide if there is to be an upgrade of guns vs armour (one goes up, the other down)
|
||||
switch( Random( 5 ) )
|
||||
@@ -431,16 +399,26 @@ void GenerateRandomEquipment( SOLDIERCREATE_STRUCT *pp, INT8 bSoldierClass, INT8
|
||||
break;
|
||||
|
||||
case SOLDIER_CLASS_ARMY:
|
||||
case SOLDIER_CLASS_REG_MILITIA:
|
||||
//army guys tend to have a broad range of equipment
|
||||
//if ( gGameOptions.fSlowProgressForEnemyItemsChoice )
|
||||
// bRating = bEquipmentModifier - ( bSoldierClass == SOLDIER_CLASS_ARMY );
|
||||
//else
|
||||
bRating = BAD_ARMY_EQUIPMENT_RATING + bEquipmentModifier;
|
||||
bRating = BAD_ARMY_EQUIPMENT_RATING + bEquipmentModifier;
|
||||
|
||||
// Equipment quality modifier
|
||||
if ( gGameExternalOptions.sEnemyRegularEquipmentQualityModifier != 0 )
|
||||
bRating += gGameExternalOptions.sEnemyRegularEquipmentQualityModifier;
|
||||
|
||||
if ( bSoldierClass == SOLDIER_CLASS_ARMY )
|
||||
{
|
||||
if ( gGameExternalOptions.sEnemyRegularEquipmentQualityModifier != 0 )
|
||||
bRating += gGameExternalOptions.sEnemyRegularEquipmentQualityModifier;
|
||||
}
|
||||
else if ( bSoldierClass == SOLDIER_CLASS_REG_MILITIA )
|
||||
{
|
||||
// SANDRO - Militia equipment quality bonus
|
||||
if ( gGameExternalOptions.bRegularMilitiaEquipmentQualityModifier != 0 )
|
||||
bRating += gGameExternalOptions.bRegularMilitiaEquipmentQualityModifier;
|
||||
}
|
||||
|
||||
bRating = (INT8)max( MIN_EQUIPMENT_CLASS, min( MAX_EQUIPMENT_CLASS, bRating ) );
|
||||
|
||||
bWeaponClass = bRating;
|
||||
@@ -484,9 +462,17 @@ void GenerateRandomEquipment( SOLDIERCREATE_STRUCT *pp, INT8 bSoldierClass, INT8
|
||||
bBombClass = bRating;
|
||||
}
|
||||
}
|
||||
|
||||
if( Chance( 35 ) )
|
||||
bKnifeClass = bRating;
|
||||
|
||||
if ( bSoldierClass == SOLDIER_CLASS_ARMY )
|
||||
{
|
||||
if ( Chance( 35 ) )
|
||||
bKnifeClass = bRating;
|
||||
}
|
||||
else if ( bSoldierClass == SOLDIER_CLASS_REG_MILITIA )
|
||||
{
|
||||
if ( Chance( 20 ) )
|
||||
bKnifeClass = bRating;
|
||||
}
|
||||
|
||||
// Headrock: Chance for soldier to carry better LBE
|
||||
//if( Chance( 50 ) )
|
||||
@@ -541,7 +527,7 @@ void GenerateRandomEquipment( SOLDIERCREATE_STRUCT *pp, INT8 bSoldierClass, INT8
|
||||
|
||||
case 6:
|
||||
// one per team maximum!
|
||||
if ( (pp->bExpLevel >= 5) && (guiMortarsRolledByTeam < zDiffSetting[gGameOptions.ubDifficultyLevel].usMaxMortarsPerTeam) )
|
||||
if ( bSoldierClass != SOLDIER_CLASS_REG_MILITIA && ( pp->bExpLevel >= 5 ) && (guiMortarsRolledByTeam < zDiffSetting[gGameOptions.ubDifficultyLevel].usMaxMortarsPerTeam) )
|
||||
{
|
||||
//mortar
|
||||
fMortar = TRUE;
|
||||
@@ -555,121 +541,27 @@ void GenerateRandomEquipment( SOLDIERCREATE_STRUCT *pp, INT8 bSoldierClass, INT8
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SOLDIER_CLASS_REG_MILITIA:
|
||||
|
||||
bRating = BAD_ARMY_EQUIPMENT_RATING + bEquipmentModifier;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
// SANDRO - Militia equipment quality bonus
|
||||
if ( gGameExternalOptions.bRegularMilitiaEquipmentQualityModifier != 0 )
|
||||
bRating += gGameExternalOptions.bRegularMilitiaEquipmentQualityModifier;
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
bRating = (INT8)max( MIN_EQUIPMENT_CLASS, min( MAX_EQUIPMENT_CLASS, bRating ) );
|
||||
|
||||
bWeaponClass = bRating;
|
||||
bVestClass = bRating;
|
||||
bHelmetClass = bRating;
|
||||
bGrenadeClass = bRating;
|
||||
//WarmSteel - attachments don't need to be as high a class, controversional and might be better to externalize?
|
||||
bAttachClass = bRating*3/8;
|
||||
|
||||
|
||||
if( ( bRating >= GOOD_ARMY_EQUIPMENT_RATING ) && Chance(33) )
|
||||
{
|
||||
fAttachment = TRUE;
|
||||
bAttachClass = bRating*5/8;
|
||||
}
|
||||
|
||||
bAmmoClips = (INT8)(3 + Random( 2 ));
|
||||
|
||||
if( bRating >= AVERAGE_ARMY_EQUIPMENT_RATING )
|
||||
{
|
||||
bGrenades = (INT8)Random( 2 );
|
||||
bKitClass = bRating;
|
||||
bMiscClass = bRating;
|
||||
}
|
||||
|
||||
if( bRating >= GOOD_ARMY_EQUIPMENT_RATING )
|
||||
{
|
||||
bGrenades++;
|
||||
}
|
||||
|
||||
if( bRating >= GREAT_ARMY_EQUIPMENT_RATING )
|
||||
{
|
||||
bGrenades++;
|
||||
|
||||
bLeggingClass = bRating;
|
||||
|
||||
if ( Chance( 25 ) )
|
||||
{
|
||||
bBombClass = bRating;
|
||||
}
|
||||
}
|
||||
|
||||
if( Chance( 20 ) )
|
||||
bKnifeClass = bRating;
|
||||
|
||||
if( ( bRating > MIN_EQUIPMENT_CLASS ) && bRating < MAX_EQUIPMENT_CLASS )
|
||||
{
|
||||
switch( Random( 7 ) )
|
||||
{
|
||||
case 3: bWeaponClass++, bVestClass--; break; //better gun, worse armour
|
||||
case 4: bWeaponClass--, bVestClass++; break; //worse gun, better armour
|
||||
case 5: bVestClass++, bHelmetClass--; break; //better armour, worse helmet
|
||||
case 6: bVestClass--, bHelmetClass++; break; //worse armour, better helmet
|
||||
}
|
||||
}
|
||||
|
||||
// if well-enough equipped, 1/5 chance of something really special
|
||||
if( ( bRating >= GREAT_ARMY_EQUIPMENT_RATING ) && ( Random( 100 ) < 20 ) )
|
||||
{
|
||||
//give this man a special weapon! No mortars if underground, however
|
||||
ubMaxSpecialWeaponRoll = ( !IsAutoResolveActive() && ( gbWorldSectorZ != 0 ) ) ? 6 : 7;
|
||||
switch ( Random ( ubMaxSpecialWeaponRoll ) )
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
if ( pp->bExpLevel >= 3 )
|
||||
{
|
||||
//grenade launcher
|
||||
fGrenadeLauncher = TRUE;
|
||||
bGrenades = 3 + (INT8)(Random( 3 )); //3-5
|
||||
}
|
||||
break;
|
||||
|
||||
case 3:
|
||||
case 4:
|
||||
if ( pp->bExpLevel >= 4 )
|
||||
{
|
||||
// LAW rocket launcher
|
||||
fLAW = TRUE;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
if ( pp->bExpLevel >= 5 )
|
||||
{
|
||||
// RPG rocket launcher
|
||||
fRPG = TRUE;
|
||||
bGrenades = 2 + (INT8)(Random( 3 )); //2-4
|
||||
bGrenadeClass = RPG_GRENADE_CLASS;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SOLDIER_CLASS_ELITE:
|
||||
case SOLDIER_CLASS_ELITE_MILITIA:
|
||||
//if ( gGameOptions.fSlowProgressForEnemyItemsChoice )
|
||||
// bRating = bEquipmentModifier - ( bSoldierClass == SOLDIER_CLASS_ELITE );
|
||||
//else
|
||||
bRating = BAD_ELITE_EQUIPMENT_RATING + bEquipmentModifier;
|
||||
bRating = BAD_ELITE_EQUIPMENT_RATING + bEquipmentModifier;
|
||||
|
||||
// Equipment quality modifier
|
||||
if ( gGameExternalOptions.sEnemyEliteEquipmentQualityModifier != 0 )
|
||||
bRating += gGameExternalOptions.sEnemyEliteEquipmentQualityModifier;
|
||||
|
||||
if ( bSoldierClass == SOLDIER_CLASS_ELITE )
|
||||
{
|
||||
if ( gGameExternalOptions.sEnemyEliteEquipmentQualityModifier != 0 )
|
||||
bRating += gGameExternalOptions.sEnemyEliteEquipmentQualityModifier;
|
||||
}
|
||||
else if ( bSoldierClass == SOLDIER_CLASS_ELITE_MILITIA )
|
||||
{
|
||||
// SANDRO - Militia equipment quality bonus
|
||||
if ( gGameExternalOptions.bVeteranMilitiaEquipmentQualityModifier != 0 )
|
||||
bRating += gGameExternalOptions.bVeteranMilitiaEquipmentQualityModifier;
|
||||
}
|
||||
|
||||
bRating = (INT8)max( MIN_EQUIPMENT_CLASS, min( MAX_EQUIPMENT_CLASS, bRating ) );
|
||||
|
||||
bWeaponClass = bRating;
|
||||
@@ -698,9 +590,17 @@ void GenerateRandomEquipment( SOLDIERCREATE_STRUCT *pp, INT8 bSoldierClass, INT8
|
||||
bAttachClass = bRating;
|
||||
}
|
||||
|
||||
if( Chance( 35 ) )
|
||||
bKnifeClass = bRating;
|
||||
|
||||
if ( bSoldierClass == SOLDIER_CLASS_ELITE )
|
||||
{
|
||||
if ( Chance( 35 ) )
|
||||
bKnifeClass = bRating;
|
||||
}
|
||||
else if ( bSoldierClass == SOLDIER_CLASS_ELITE_MILITIA )
|
||||
{
|
||||
if ( Chance( 25 ) )
|
||||
bKnifeClass = bRating;
|
||||
}
|
||||
|
||||
if( ( bRating > MIN_EQUIPMENT_CLASS ) && bRating < MAX_EQUIPMENT_CLASS )
|
||||
{
|
||||
UINT32 uiRange = ((UsingNewInventorySystem() == false)) ? Random(11) : Random(12);
|
||||
@@ -717,13 +617,15 @@ void GenerateRandomEquipment( SOLDIERCREATE_STRUCT *pp, INT8 bSoldierClass, INT8
|
||||
}
|
||||
}
|
||||
|
||||
// if well-enough equipped, 1/3 chance of something really special
|
||||
if( ( bRating >= GOOD_ELITE_EQUIPMENT_RATING ) && ( Random( 100 ) < 33 ) )
|
||||
if ( bSoldierClass == SOLDIER_CLASS_ELITE )
|
||||
{
|
||||
//give this man a special weapon! No mortars if underground, however
|
||||
ubMaxSpecialWeaponRoll = ( !IsAutoResolveActive() && ( gbWorldSectorZ != 0 ) ) ? 6 : 7;
|
||||
switch ( Random ( ubMaxSpecialWeaponRoll ) )
|
||||
// if well-enough equipped, 1/3 chance of something really special
|
||||
if ( (bRating >= GOOD_ELITE_EQUIPMENT_RATING) && (Random( 100 ) < 33) )
|
||||
{
|
||||
//give this man a special weapon! No mortars if underground, however
|
||||
ubMaxSpecialWeaponRoll = (!IsAutoResolveActive( ) && (gbWorldSectorZ != 0)) ? 6 : 7;
|
||||
switch ( Random( ubMaxSpecialWeaponRoll ) )
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
@@ -755,70 +657,18 @@ void GenerateRandomEquipment( SOLDIERCREATE_STRUCT *pp, INT8 bSoldierClass, INT8
|
||||
bGrenadeClass = MORTAR_GRENADE_CLASS;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SOLDIER_CLASS_ELITE_MILITIA:
|
||||
|
||||
bRating = BAD_ELITE_EQUIPMENT_RATING + bEquipmentModifier;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
// SANDRO - Militia equipment quality bonus
|
||||
if ( gGameExternalOptions.bVeteranMilitiaEquipmentQualityModifier != 0 )
|
||||
bRating += gGameExternalOptions.bVeteranMilitiaEquipmentQualityModifier;
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
bRating = (INT8)max( MIN_EQUIPMENT_CLASS, min( MAX_EQUIPMENT_CLASS, bRating ) );
|
||||
|
||||
bWeaponClass = bRating;
|
||||
bHelmetClass = bRating;
|
||||
bVestClass = bRating;
|
||||
bLeggingClass = bRating;
|
||||
bAttachClass = bRating*7/8;
|
||||
bGrenadeClass = bRating;
|
||||
bKitClass = bRating;
|
||||
bMiscClass = bRating;
|
||||
|
||||
if ( Chance( 25 ) )
|
||||
else if ( bSoldierClass == SOLDIER_CLASS_ELITE_MILITIA )
|
||||
{
|
||||
bBombClass = bRating;
|
||||
}
|
||||
|
||||
bAmmoClips = (INT8)(3 + Random( 2 ));
|
||||
bGrenades = (INT8)(2 + Random( 3 ));
|
||||
|
||||
if( ( bRating >= AVERAGE_ELITE_EQUIPMENT_RATING ) && Chance(75) )
|
||||
{
|
||||
fAttachment = TRUE;
|
||||
bAttachClass = bRating;
|
||||
}
|
||||
|
||||
if( Chance( 25 ) )
|
||||
bKnifeClass = bRating;
|
||||
|
||||
if( ( bRating > MIN_EQUIPMENT_CLASS ) && bRating < MAX_EQUIPMENT_CLASS )
|
||||
{
|
||||
UINT32 uiRange = ((UsingNewInventorySystem() == false)) ? Random(10) : Random(11);
|
||||
switch( uiRange )
|
||||
{
|
||||
case 4: bWeaponClass++, bVestClass--; break;
|
||||
case 5: bWeaponClass--, bVestClass--; break;
|
||||
case 6: bVestClass++, bHelmetClass--; break;
|
||||
case 7: bGrenades += 2; break;
|
||||
case 8: bHelmetClass++; break;
|
||||
case 9: bVestClass++; break;
|
||||
case 10: bWeaponClass++; break;
|
||||
//case 11: bLBEClass++; break;
|
||||
}
|
||||
}
|
||||
|
||||
// if well-enough equipped, 1/3 chance of something really special
|
||||
if( ( bRating >= GOOD_ELITE_EQUIPMENT_RATING ) && ( Random( 100 ) < 60 ) )
|
||||
{
|
||||
//give this man a special weapon! No mortars if underground, however
|
||||
ubMaxSpecialWeaponRoll = ( !IsAutoResolveActive() && ( gbWorldSectorZ != 0 ) ) ? 4 : 5;
|
||||
switch ( Random ( ubMaxSpecialWeaponRoll ) )
|
||||
// if well-enough equipped, 1/3 chance of something really special
|
||||
if ( (bRating >= GOOD_ELITE_EQUIPMENT_RATING) && (Random( 100 ) < 60) )
|
||||
{
|
||||
//give this man a special weapon! No mortars if underground, however
|
||||
ubMaxSpecialWeaponRoll = (!IsAutoResolveActive( ) && (gbWorldSectorZ != 0)) ? 4 : 5;
|
||||
switch ( Random( ubMaxSpecialWeaponRoll ) )
|
||||
{
|
||||
case 0:
|
||||
//grenade launcher
|
||||
fGrenadeLauncher = TRUE;
|
||||
@@ -841,7 +691,7 @@ void GenerateRandomEquipment( SOLDIERCREATE_STRUCT *pp, INT8 bSoldierClass, INT8
|
||||
{
|
||||
//mortar
|
||||
fMortar = TRUE;
|
||||
guiMortarsRolledByTeam++;
|
||||
++guiMortarsRolledByTeam;
|
||||
|
||||
// the grenades will actually represent mortar shells in this case
|
||||
bGrenades = 3 + (INT8)(Random( 5 )); //3-7
|
||||
@@ -855,12 +705,12 @@ void GenerateRandomEquipment( SOLDIERCREATE_STRUCT *pp, INT8 bSoldierClass, INT8
|
||||
bGrenadeClass = RPG_GRENADE_CLASS;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SOLDIER_CLASS_ZOMBIE:
|
||||
// zombies get no items at all...
|
||||
case SOLDIER_CLASS_ZOMBIE: // zombies get no items at all...
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user