mirror of
https://github.com/1dot13/source.git
synced 2026-07-29 13:52:17 +02:00
- Fix: Mike and Iggy could spawn as tanks
- Tanks always get 100 HP - replaced a few hardcoded values with enums git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@7960 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+34
-48
@@ -591,13 +591,12 @@ SOLDIERTYPE* TacticalCreateSoldier( SOLDIERCREATE_STRUCT *pCreateStruct, UINT8 *
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if(is_client && !is_server && (tbTeam >0 && tbTeam < 5) && tfPP==0)
|
||||
if ( is_client && !is_server && (tbTeam > OUR_TEAM && tbTeam < PLAYER_PLAN) && tfPP == 0 )
|
||||
{
|
||||
return NULL; // pure client to not spawn AI unless from server, Hayden.
|
||||
//gTacticalStatus.Team[ tbTeam ].bTeamActive=0;
|
||||
return NULL; // pure client to not spawn AI unless from server, Hayden.
|
||||
//gTacticalStatus.Team[ tbTeam ].bTeamActive=0;
|
||||
}
|
||||
//if(is_server && tbTeam>0 && tbTeam<5)
|
||||
if(is_server && tbTeam>0 && tbTeam<5)
|
||||
if ( is_server && tbTeam > OUR_TEAM && tbTeam < PLAYER_PLAN )
|
||||
{
|
||||
send_AI(pCreateStruct,pubID);
|
||||
}
|
||||
@@ -606,7 +605,7 @@ SOLDIERTYPE* TacticalCreateSoldier( SOLDIERCREATE_STRUCT *pCreateStruct, UINT8 *
|
||||
pCreateStruct->fPlayerPlan = 0;
|
||||
}
|
||||
|
||||
if(is_networked && (pCreateStruct->bBodyType==23 || pCreateStruct->bBodyType==24))
|
||||
if ( is_networked && (pCreateStruct->bBodyType == TANK_NW || pCreateStruct->bBodyType == TANK_NE) )
|
||||
{
|
||||
ScreenMsg( FONT_YELLOW, MSG_MPSYSTEM, L"skipping tank");
|
||||
return NULL;
|
||||
@@ -780,7 +779,6 @@ SOLDIERTYPE* TacticalCreateSoldier( SOLDIERCREATE_STRUCT *pCreateStruct, UINT8 *
|
||||
*pubID = Soldier.ubID;
|
||||
}
|
||||
|
||||
|
||||
// LOAD MERC's FACE!
|
||||
if ( pCreateStruct->ubProfile != NO_PROFILE && Soldier.bTeam == OUR_TEAM )
|
||||
{
|
||||
@@ -1173,13 +1171,13 @@ SOLDIERTYPE* TacticalCreateSoldier( SOLDIERCREATE_STRUCT *pCreateStruct, UINT8 *
|
||||
Soldier.iFaceIndex = -1;
|
||||
Soldier.iFaceIndex = InitSoldierFace( &Soldier );
|
||||
|
||||
// ATE: Reset soldier's light value to -1....
|
||||
Soldier.iLight = -1;
|
||||
// ATE: Reset soldier's light value to -1....
|
||||
Soldier.iLight = -1;
|
||||
|
||||
if ( Soldier.ubBodyType == HUMVEE || Soldier.ubBodyType == ICECREAMTRUCK )
|
||||
{
|
||||
Soldier.aiData.bNeutral = TRUE;
|
||||
}
|
||||
if ( Soldier.ubBodyType == HUMVEE || Soldier.ubBodyType == ICECREAMTRUCK )
|
||||
{
|
||||
Soldier.aiData.bNeutral = TRUE;
|
||||
}
|
||||
|
||||
// Copy into merc struct
|
||||
*MercPtrs[ Soldier.ubID ] = Soldier;
|
||||
@@ -1194,8 +1192,7 @@ SOLDIERTYPE* TacticalCreateSoldier( SOLDIERCREATE_STRUCT *pCreateStruct, UINT8 *
|
||||
// Menptr[ Soldier.ubID ].usAnimState = Soldier.usAnimState;
|
||||
// Menptr[ Soldier.ubID ].usAniFrame = Soldier.usAniFrame;
|
||||
}
|
||||
|
||||
|
||||
|
||||
if( guiCurrentScreen != AUTORESOLVE_SCREEN )
|
||||
{
|
||||
if( pCreateStruct->fOnRoof && FlatRoofAboveGridNo( pCreateStruct->sInsertionGridNo ) )
|
||||
@@ -1222,18 +1219,20 @@ SOLDIERTYPE* TacticalCreateSoldier( SOLDIERCREATE_STRUCT *pCreateStruct, UINT8 *
|
||||
return MercPtrs[ Soldier.ubID ];
|
||||
}
|
||||
else
|
||||
{ //We are creating a dynamically allocated soldier for autoresolve.
|
||||
SOLDIERTYPE *pSoldier;
|
||||
UINT8 ubSectorID;
|
||||
ubSectorID = GetAutoResolveSectorID();
|
||||
pSoldier = new SOLDIERTYPE(Soldier); //(SOLDIERTYPE*)MemAlloc( SIZEOF_SOLDIERTYPE );
|
||||
{
|
||||
//We are creating a dynamically allocated soldier for autoresolve.
|
||||
SOLDIERTYPE* pSoldier = new SOLDIERTYPE( Soldier ); //(SOLDIERTYPE*)MemAlloc( SIZEOF_SOLDIERTYPE );
|
||||
|
||||
if( !pSoldier )
|
||||
return NULL;
|
||||
|
||||
UINT8 ubSectorID = GetAutoResolveSectorID( );
|
||||
pSoldier->ubID = NUM_PROFILES;
|
||||
pSoldier->sSectorX = (INT16)SECTORX( ubSectorID );
|
||||
pSoldier->sSectorY = (INT16)SECTORY( ubSectorID );
|
||||
pSoldier->bSectorZ = 0;
|
||||
*pubID = NUM_PROFILES;
|
||||
|
||||
return pSoldier;
|
||||
}
|
||||
}
|
||||
@@ -1283,7 +1282,7 @@ BOOLEAN TacticalCopySoldierFromProfile( SOLDIERTYPE *pSoldier, SOLDIERCREATE_STR
|
||||
// pSoldier->bAssignment=ON_DUTY;
|
||||
|
||||
pSoldier->bOldAssignment = NO_ASSIGNMENT;
|
||||
for ( INT8 bCnt = 0; bCnt < 30; bCnt++ )
|
||||
for ( INT8 bCnt = 0; bCnt < 30; ++bCnt )
|
||||
{
|
||||
pSoldier->stats.ubSkillTraits[ bCnt ] = pProfile->bSkillTraits[ bCnt ];
|
||||
}
|
||||
@@ -2050,8 +2049,7 @@ BOOLEAN InternalTacticalRemoveSoldier( UINT16 usSoldierIndex, BOOLEAN fRemoveVeh
|
||||
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ATE: If this guy is our global selected dude, take selection off...
|
||||
if ( gfUIFullTargetFound && gusUIFullTargetID == usSoldierIndex )
|
||||
{
|
||||
@@ -2092,7 +2090,6 @@ BOOLEAN TacticalRemoveSoldierPointer( SOLDIERTYPE *pSoldier, BOOLEAN fRemoveVehi
|
||||
|
||||
if( guiCurrentScreen != AUTORESOLVE_SCREEN )
|
||||
{
|
||||
|
||||
// remove character from squad list.. if they are on one
|
||||
RemoveCharacterFromSquads( pSoldier );
|
||||
|
||||
@@ -2159,11 +2156,9 @@ INT8 CalcDifficultyModifier( UINT8 ubSoldierClass )
|
||||
return( 50 );
|
||||
}
|
||||
|
||||
|
||||
// THESE 3 DIFFICULTY FACTORS MUST ALWAYS ADD UP TO 100% EXACTLY!!!
|
||||
Assert( ( DIFF_FACTOR_PLAYER_PROGRESS + DIFF_FACTOR_PALACE_DISTANCE + DIFF_FACTOR_GAME_DIFFICULTY ) == 100 );
|
||||
|
||||
|
||||
|
||||
// adjust for game difficulty level
|
||||
switch( gGameOptions.ubDifficultyLevel )
|
||||
{
|
||||
@@ -2202,8 +2197,7 @@ INT8 CalcDifficultyModifier( UINT8 ubSoldierClass )
|
||||
bDiffModifier += ( DIFF_FACTOR_GAME_DIFFICULTY / 2 );
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// the progress returned ranges from 0 to 100
|
||||
ubProgress = HighestPlayerProgressPercentage();
|
||||
|
||||
@@ -2220,17 +2214,14 @@ INT8 CalcDifficultyModifier( UINT8 ubSoldierClass )
|
||||
// -5
|
||||
bDiffModifier += DIFF_MODIFIER_NO_INCOME;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// adjust for progress level (0 to +50)
|
||||
ubProgressModifier = ( ubProgress * DIFF_FACTOR_PLAYER_PROGRESS ) / 100;
|
||||
bDiffModifier += ubProgressModifier;
|
||||
|
||||
|
||||
// adjust for map location
|
||||
bDiffModifier += GetLocationModifier( ubSoldierClass );
|
||||
|
||||
|
||||
|
||||
// should be no way to go over 100, although it's possible to go below 0 when just starting on easy
|
||||
// Assert( bDiffModifier <= 100 );
|
||||
|
||||
@@ -2260,8 +2251,7 @@ void CreateDetailedPlacementGivenBasicPlacementInfo( SOLDIERCREATE_STRUCT *pp, B
|
||||
INT8 bStatsModifier;
|
||||
UINT8 ubStatsLevel;
|
||||
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("CreateDetailedPlacementGivenBasicPlacementInfo"));
|
||||
|
||||
|
||||
|
||||
if( !pp || !bp )
|
||||
return;
|
||||
pp->fStatic = FALSE;
|
||||
@@ -2491,7 +2481,6 @@ void CreateDetailedPlacementGivenBasicPlacementInfo( SOLDIERCREATE_STRUCT *pp, B
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("CreateDetailedPlacementGivenBasicPlacementInfo: set exp. level"));
|
||||
pp->bExpLevel = max( gGameOptions.ubDifficultyLevel, pp->bExpLevel ); //minimum exp. level of 1 -- madd->= dif level
|
||||
|
||||
@@ -2929,7 +2918,6 @@ void ForceSoldierProfileID( SOLDIERTYPE *pSoldier, UINT8 ubProfileID )
|
||||
SOLDIERCREATE_STRUCT CreateStruct;
|
||||
CreateStruct.ubProfile = ubProfileID;
|
||||
|
||||
|
||||
TacticalCopySoldierFromProfile( pSoldier, &CreateStruct );
|
||||
|
||||
// Delete face and re-create
|
||||
@@ -2943,7 +2931,6 @@ void ForceSoldierProfileID( SOLDIERTYPE *pSoldier, UINT8 ubProfileID )
|
||||
|
||||
// Re-Create palettes
|
||||
pSoldier->CreateSoldierPalettes( );
|
||||
|
||||
}
|
||||
|
||||
//dnl ch56 141009
|
||||
@@ -3115,7 +3102,9 @@ SOLDIERTYPE* TacticalCreateEnemyTank()
|
||||
if( guiCurrentScreen == AUTORESOLVE_SCREEN && !gfPersistantPBI )
|
||||
{
|
||||
pSoldier = ReserveTacticalSoldierForAutoresolve( SOLDIER_CLASS_TANK );
|
||||
if( pSoldier ) return pSoldier;
|
||||
|
||||
if( pSoldier )
|
||||
return pSoldier;
|
||||
}
|
||||
|
||||
memset( &bp, 0, sizeof( BASIC_SOLDIERCREATE_STRUCT ) );
|
||||
@@ -3127,20 +3116,17 @@ SOLDIERTYPE* TacticalCreateEnemyTank()
|
||||
bp.bBodyType = TANK_NW;
|
||||
bp.ubSoldierClass = SOLDIER_CLASS_TANK;
|
||||
CreateDetailedPlacementGivenBasicPlacementInfo( &pp, &bp );
|
||||
|
||||
//SPECIAL! Certain events in the game can cause profiled NPCs to become enemies. The two cases are
|
||||
//adding Mike and Iggy. We will only add one NPC in any given combat and the conditions for setting
|
||||
//the associated facts are done elsewhere. There is also another place where NPCs can get added, which
|
||||
//is in AddPlacementToWorld() used for inserting defensive enemies.
|
||||
//NOTE: We don't want to add Mike or Iggy if this is being called from autoresolve!
|
||||
OkayToUpgradeEliteToSpecialProfiledEnemy( &pp );
|
||||
|
||||
|
||||
pSoldier = TacticalCreateSoldier( &pp, &ubID );
|
||||
if ( pSoldier )
|
||||
{
|
||||
// send soldier to centre of map, roughly
|
||||
pSoldier->aiData.sNoiseGridno = (CENTRAL_GRIDNO + ( Random( CENTRAL_RADIUS * 2 + 1 ) - CENTRAL_RADIUS ) + ( Random( CENTRAL_RADIUS * 2 + 1 ) - CENTRAL_RADIUS ) * WORLD_COLS);
|
||||
pSoldier->aiData.ubNoiseVolume = MAX_MISC_NOISE_DURATION;
|
||||
|
||||
// Flugente: why would a vehicle's armour depend on game progress? Always give them 100 HP
|
||||
pSoldier->stats.bLifeMax = 100;
|
||||
pSoldier->stats.bLife = pSoldier->stats.bLifeMax;
|
||||
}
|
||||
|
||||
return( pSoldier );
|
||||
|
||||
Reference in New Issue
Block a user