mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
Merge pull request #331 from 1dot13/ExtraMercs
Increased Team Sizes (ITS)
This commit is contained in:
@@ -162,7 +162,7 @@ void AddNewItemToSelectedMercsInventory( BOOLEAN fCreate );
|
||||
void RenderMercInventoryPanel();
|
||||
void SetDroppableCheckboxesBasedOnMercsInventory();
|
||||
|
||||
extern BOOLEAN InternalAddSoldierToSector( UINT8 ubID, BOOLEAN fCalculateDirection, BOOLEAN fUseAnimation, UINT16 usAnimState, UINT16 usAnimCode );
|
||||
extern BOOLEAN InternalAddSoldierToSector( SoldierID ubID, BOOLEAN fCalculateDirection, BOOLEAN fUseAnimation, UINT16 usAnimState, UINT16 usAnimCode );
|
||||
|
||||
//array which keeps track of which item is in which slot. This is dependant on the selected merc, so
|
||||
//these temp values must be updated when different mercs are selected, and reset when a merc detailed
|
||||
@@ -559,7 +559,7 @@ void AddMercToWorld( INT32 iMapIndex )
|
||||
|
||||
if( IsLocationSittable( iMapIndex, gfRoofPlacement ) )
|
||||
{
|
||||
UINT8 ubID;
|
||||
SoldierID ubID;
|
||||
INT16 sSectorX, sSectorY;
|
||||
SOLDIERINITNODE *pNode;
|
||||
|
||||
@@ -3783,7 +3783,7 @@ void PasteMercPlacement( INT32 iMapIndex )
|
||||
|
||||
if( IsLocationSittable( iMapIndex, gfRoofPlacement ) )
|
||||
{
|
||||
UINT8 ubID;
|
||||
SoldierID ubID;
|
||||
INT16 sSectorX, sSectorY;
|
||||
SOLDIERINITNODE *pNode;
|
||||
|
||||
|
||||
+4
-2
@@ -22,7 +22,9 @@ extern CHAR16 zBuildInformation[256];
|
||||
//
|
||||
// Keeps track of the saved game version. Increment the saved game version whenever
|
||||
// you will invalidate the saved game file
|
||||
#define MERC_PROFILE_INSERTION_DATA 185 // Bigmap support for AddProfileToMap function
|
||||
|
||||
#define INCREASED_TEAMSIZES 186 // Asdow: SOLDIERTYPE ubID changed from UINT8 -> UINT16
|
||||
#define MERC_PROFILE_INSERTION_DATA 185 // Bigmap support for AddProfileToMap function
|
||||
#define GROWTH_MODIFIERS 184
|
||||
#define REBELCOMMAND 183
|
||||
#define DRAGSTRUCTURE 182 // Flugente: we can drag structures behind us
|
||||
@@ -105,7 +107,7 @@ extern CHAR16 zBuildInformation[256];
|
||||
#define AP100_SAVEGAME_DATATYPE_CHANGE 105 // Before this, we didn't have the 100AP structure changes
|
||||
#define NIV_SAVEGAME_DATATYPE_CHANGE 102 // Before this, we used the old structure system
|
||||
|
||||
#define SAVE_GAME_VERSION MERC_PROFILE_INSERTION_DATA
|
||||
#define SAVE_GAME_VERSION INCREASED_TEAMSIZES
|
||||
|
||||
//#define RUSSIANGOLD
|
||||
#ifdef __cplusplus
|
||||
|
||||
+100
-257
@@ -233,7 +233,7 @@ typedef struct
|
||||
BOOLEAN fHavePurchasedItemsFromTony;
|
||||
|
||||
//The selected soldier in tactical
|
||||
UINT16 usSelectedSoldier;
|
||||
SoldierID usSelectedSoldier;
|
||||
|
||||
// The x and y scroll position
|
||||
INT16 sRenderCenterX;
|
||||
@@ -297,15 +297,15 @@ typedef struct
|
||||
|
||||
|
||||
|
||||
BOOLEAN fSkyriderEmptyHelpGiven;
|
||||
BOOLEAN fEnterMapDueToContract;
|
||||
BOOLEAN fSkyriderEmptyHelpGiven;
|
||||
BOOLEAN fEnterMapDueToContract;
|
||||
UINT8 ubHelicopterHitsTaken;
|
||||
UINT8 ubQuitType;
|
||||
BOOLEAN fSkyriderSaidCongratsOnTakingSAM;
|
||||
INT16 sContractRehireSoldierID;
|
||||
BOOLEAN fSkyriderSaidCongratsOnTakingSAM;
|
||||
SoldierID sContractRehireSoldierID;
|
||||
|
||||
|
||||
GAME_OPTIONS GameOptions;
|
||||
GAME_OPTIONS GameOptions;
|
||||
|
||||
UINT32 uiSeedNumber;
|
||||
|
||||
@@ -314,7 +314,7 @@ typedef struct
|
||||
|
||||
INT16 sCurInterfacePanel;
|
||||
|
||||
UINT8 ubSMCurrentMercID;
|
||||
SoldierID ubSMCurrentMercID;
|
||||
|
||||
BOOLEAN fFirstTimeInMapScreen;
|
||||
|
||||
@@ -322,9 +322,9 @@ typedef struct
|
||||
|
||||
BOOLEAN fDisableMapInterfaceDueToBattle;
|
||||
|
||||
INT32 sBoxerGridNo[ NUM_BOXERS ];
|
||||
UINT8 ubBoxerID[ NUM_BOXERS ];
|
||||
BOOLEAN fBoxerFought[ NUM_BOXERS ];
|
||||
INT32 sBoxerGridNo[ NUM_BOXERS ];
|
||||
SoldierID ubBoxerID[ NUM_BOXERS ];
|
||||
BOOLEAN fBoxerFought[ NUM_BOXERS ];
|
||||
|
||||
BOOLEAN fHelicopterDestroyed; //if the chopper is destroyed
|
||||
BOOLEAN fShowMapScreenHelpText; //If true, displays help in mapscreen
|
||||
@@ -342,8 +342,8 @@ typedef struct
|
||||
|
||||
BOOLEAN ubPlayerProgressSkyriderLastCommentedOn;
|
||||
|
||||
BOOLEAN gfMeanwhileTryingToStart;
|
||||
BOOLEAN gfInMeanwhile;
|
||||
BOOLEAN gfMeanwhileTryingToStart;
|
||||
BOOLEAN gfInMeanwhile;
|
||||
|
||||
// list of dead guys for squads...in id values->-1 means no one home
|
||||
INT16 sDeadMercs[ NUMBER_OF_SQUADS ][ NUMBER_OF_SOLDIERS_PER_SQUAD ];
|
||||
@@ -413,7 +413,7 @@ typedef struct
|
||||
|
||||
UINT32 uiMeanWhileFlags;
|
||||
|
||||
INT8 bSelectedInfoChar;
|
||||
INT16 bSelectedInfoChar;
|
||||
INT8 bHospitalPriceModifier;
|
||||
INT8 bUnused2[ 2 ];
|
||||
|
||||
@@ -551,8 +551,8 @@ BOOLEAN SetMercsInsertionGridNo( );
|
||||
BOOLEAN LoadOppListInfoFromSavedGame( HWFILE hFile );
|
||||
BOOLEAN SaveOppListInfoToSavedGame( HWFILE hFile );
|
||||
|
||||
BOOLEAN LoadMercPathToSoldierStruct( HWFILE hFilem, UINT8 ubID );
|
||||
BOOLEAN SaveMercPathFromSoldierStruct( HWFILE hFilem, UINT8 ubID );
|
||||
BOOLEAN LoadMercPathToSoldierStruct( HWFILE hFilem, UINT16 ubID );
|
||||
BOOLEAN SaveMercPathFromSoldierStruct( HWFILE hFilem, UINT16 ubID );
|
||||
|
||||
BOOLEAN LoadGeneralInfo( HWFILE hFile );
|
||||
BOOLEAN SaveGeneralInfo( HWFILE hFile );
|
||||
@@ -1074,7 +1074,7 @@ BOOLEAN ITEM_CURSOR_SAVE_INFO::Load(HWFILE hFile)
|
||||
if ( guiCurrentSaveGameVersion >= NIV_SAVEGAME_DATATYPE_CHANGE )
|
||||
{
|
||||
//3 bytes of info, screw being neat
|
||||
if ( !FileRead( hFile, this, 3, &uiNumBytesRead ) )
|
||||
if ( !FileRead( hFile, this, SIZEOF_ITEM_CURSOR_SAVE_INFO_POD, &uiNumBytesRead ) )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
@@ -1103,7 +1103,7 @@ BOOLEAN ITEM_CURSOR_SAVE_INFO::Save(HWFILE hFile)
|
||||
{
|
||||
UINT32 uiNumBytesWritten;
|
||||
//3 bytes of info, screw being neat
|
||||
if ( !FileWrite( hFile, this, 3, &uiNumBytesWritten ) )
|
||||
if ( !FileWrite( hFile, this, SIZEOF_ITEM_CURSOR_SAVE_INFO_POD, &uiNumBytesWritten ) )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
@@ -1947,7 +1947,7 @@ use of this function should allow changes to be made to various structures withi
|
||||
INT32 ReadFieldByField(HWFILE hFile, PTR pDest, UINT32 uiFieldSize, UINT32 uiElementSize, UINT32 uiCurByteCount)
|
||||
{
|
||||
UINT32 uiNumBytesRead;
|
||||
char padding[10];
|
||||
char padding[10];
|
||||
UINT32 uiBytesRead = uiCurByteCount; // used to track our new byte count
|
||||
UINT32 sampleBytesRead = uiBytesRead; // used to determine how much padding is needed
|
||||
|
||||
@@ -1980,8 +1980,10 @@ BOOLEAN SOLDIERTYPE::Load(HWFILE hFile)
|
||||
//the soldier type info has changed at version 102
|
||||
//CHRISL: To accomodate future changes to this structure, we'll load each value field by field
|
||||
numBytesRead = 0;
|
||||
FileRead( hFile, this, (offsetof(SOLDIERTYPE, ubBodyType)+sizeof(ubBodyType)), &uiNumBytesRead );
|
||||
numBytesRead += uiNumBytesRead;
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubID, sizeof(ubID), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->name, sizeof(name), sizeof(CHAR16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubBodyType, sizeof(ubBodyType), sizeof(UINT8), numBytesRead);
|
||||
|
||||
if(guiCurrentSaveGameVersion >= AP100_SAVEGAME_DATATYPE_CHANGE)
|
||||
{ //CHRISL: It was changed at version 104 to allow for 16bit action points for the 100AP system
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bActionPoints, sizeof(bActionPoints), sizeof(INT16), numBytesRead);
|
||||
@@ -2009,7 +2011,7 @@ BOOLEAN SOLDIERTYPE::Load(HWFILE hFile)
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubWaitActionToDo, sizeof(ubWaitActionToDo), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubInsertionDirection, sizeof(ubInsertionDirection), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bGunType, sizeof(bGunType), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubOppNum, sizeof(ubOppNum), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubOppNum, sizeof(ubOppNum), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bLastRenderVisibleValue, sizeof(bLastRenderVisibleValue), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubAttackingHand, sizeof(ubAttackingHand), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->sWeightCarriedAtTurnStart, sizeof(sWeightCarriedAtTurnStart), sizeof(INT16), numBytesRead);
|
||||
@@ -2053,8 +2055,8 @@ BOOLEAN SOLDIERTYPE::Load(HWFILE hFile)
|
||||
numBytesRead = ReadFieldByField(hFile, &this->usAnimState, sizeof(usAnimState), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->uiAIDelay, sizeof(uiAIDelay), sizeof(UINT32), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->sReloadDelay, sizeof(sReloadDelay), sizeof(INT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubAttackerID, sizeof(ubAttackerID), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubPreviousAttackerID, sizeof(ubPreviousAttackerID), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubAttackerID, sizeof(ubAttackerID), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubPreviousAttackerID, sizeof(ubPreviousAttackerID), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->sInsertionGridNo, sizeof(sInsertionGridNo), sizeof(INT32), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->AnimCache, sizeof(AnimCache), 1, numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bSide, sizeof(bSide), sizeof(UINT8), numBytesRead);
|
||||
@@ -2134,7 +2136,7 @@ BOOLEAN SOLDIERTYPE::Load(HWFILE hFile)
|
||||
numBytesRead = ReadFieldByField(hFile, &this->pCurrentShade, sizeof(pCurrentShade), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubFadeLevel, sizeof(ubFadeLevel), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubServiceCount, sizeof(ubServiceCount), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubServicePartner, sizeof(ubServicePartner), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubServicePartner, sizeof(ubServicePartner), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->pThrowParams, sizeof(pThrowParams), 4, numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bReverse, sizeof(bReverse), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->pLevelNode, sizeof(pLevelNode), 4, numBytesRead);
|
||||
@@ -2232,7 +2234,7 @@ BOOLEAN SOLDIERTYPE::Load(HWFILE hFile)
|
||||
numBytesRead = ReadFieldByField(hFile, &this->iTotalLengthOfInsuranceContract, sizeof(iTotalLengthOfInsuranceContract), sizeof(INT32), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubSoldierClass, sizeof(ubSoldierClass), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubAPsLostToSuppression, sizeof(ubAPsLostToSuppression), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubSuppressorID, sizeof(ubSuppressorID), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubSuppressorID, sizeof(ubSuppressorID), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubDesiredSquadAssignment, sizeof(ubDesiredSquadAssignment), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubNumTraversalsAllowedToMerge, sizeof(ubNumTraversalsAllowedToMerge), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->usPendingAnimation2, sizeof(usPendingAnimation2), sizeof(UINT16), numBytesRead);
|
||||
@@ -2244,7 +2246,7 @@ BOOLEAN SOLDIERTYPE::Load(HWFILE hFile)
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bBlockedByAnotherMercDirection, sizeof(bBlockedByAnotherMercDirection), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->usAttackingWeapon, sizeof(usAttackingWeapon), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bWeaponMode, sizeof(bWeaponMode), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubTargetID, sizeof(ubTargetID), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubTargetID, sizeof(ubTargetID), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bAIScheduleProgress, sizeof(bAIScheduleProgress), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->sOffWorldGridNo, sizeof(sOffWorldGridNo), sizeof(INT32), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->pAniTile, sizeof(pAniTile), 1, numBytesRead);
|
||||
@@ -2265,8 +2267,8 @@ BOOLEAN SOLDIERTYPE::Load(HWFILE hFile)
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bOldBattleSnd, sizeof(bOldBattleSnd), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->iBurstSoundID, sizeof(iBurstSoundID), sizeof(INT32), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bSlotItemTakenFrom, sizeof(bSlotItemTakenFrom), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubAutoBandagingMedic, sizeof(ubAutoBandagingMedic), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubRobotRemoteHolderID, sizeof(ubRobotRemoteHolderID), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubAutoBandagingMedic, sizeof(ubAutoBandagingMedic), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubRobotRemoteHolderID, sizeof(ubRobotRemoteHolderID), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->uiTimeOfLastContractUpdate, sizeof(uiTimeOfLastContractUpdate), sizeof(UINT32), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bTypeOfLastContract, sizeof(bTypeOfLastContract), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bTurnsCollapsed, sizeof(bTurnsCollapsed), sizeof(INT8), numBytesRead);
|
||||
@@ -2285,7 +2287,7 @@ BOOLEAN SOLDIERTYPE::Load(HWFILE hFile)
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bRegenBoostersUsedToday, sizeof(bRegenBoostersUsedToday), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bNumPelletsHitBy, sizeof(bNumPelletsHitBy), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->sSkillCheckGridNo, sizeof(sSkillCheckGridNo), sizeof(INT32), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubLastEnemyCycledID, sizeof(ubLastEnemyCycledID), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubLastEnemyCycledID, sizeof(ubLastEnemyCycledID), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubPrevSectorID, sizeof(ubPrevSectorID), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubNumTilesMovesSinceLastForget, sizeof(ubNumTilesMovesSinceLastForget), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bTurningIncrement, sizeof(bTurningIncrement), sizeof(INT8), numBytesRead);
|
||||
@@ -2293,7 +2295,7 @@ BOOLEAN SOLDIERTYPE::Load(HWFILE hFile)
|
||||
numBytesRead = ReadFieldByField(hFile, &this->usValueGoneUp, sizeof(usValueGoneUp), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubNumLocateCycles, sizeof(ubNumLocateCycles), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubDelayedMovementFlags, sizeof(ubDelayedMovementFlags), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubCTGTTargetID, sizeof(ubCTGTTargetID), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubCTGTTargetID, sizeof(ubCTGTTargetID), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->uiMercChecksum, sizeof(uiMercChecksum), sizeof(UINT32), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bCurrentCivQuote, sizeof(bCurrentCivQuote), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bCurrentCivQuoteDelta, sizeof(bCurrentCivQuoteDelta), sizeof(INT8), numBytesRead);
|
||||
@@ -2311,7 +2313,7 @@ BOOLEAN SOLDIERTYPE::Load(HWFILE hFile)
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubDoorOpeningNoise, sizeof(ubDoorOpeningNoise), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->pGroup, sizeof(pGroup), 1, numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubLeaveHistoryCode, sizeof(ubLeaveHistoryCode), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bOverrideMoveSpeed, sizeof(bOverrideMoveSpeed), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bOverrideMoveSpeed, sizeof(bOverrideMoveSpeed), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->uiTimeSoldierWillArrive, sizeof(uiTimeSoldierWillArrive), sizeof(UINT32), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bVehicleUnderRepairID, sizeof(bVehicleUnderRepairID), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->iTimeCanSignElsewhere, sizeof(iTimeCanSignElsewhere), sizeof(INT32), numBytesRead);
|
||||
@@ -2324,7 +2326,7 @@ BOOLEAN SOLDIERTYPE::Load(HWFILE hFile)
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubLastDamageReason, sizeof(ubLastDamageReason), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->sLastTwoLocations, sizeof(sLastTwoLocations), sizeof(INT32), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->uiTimeSinceLastBleedGrunt, sizeof(uiTimeSinceLastBleedGrunt), sizeof(INT32), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubNextToPreviousAttackerID, sizeof(ubNextToPreviousAttackerID), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubNextToPreviousAttackerID, sizeof(ubNextToPreviousAttackerID), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bDoAutofire, sizeof(bDoAutofire), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->numFlanks, sizeof(numFlanks), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->lastFlankSpot, sizeof(lastFlankSpot), sizeof(INT32), numBytesRead);
|
||||
@@ -2351,9 +2353,7 @@ BOOLEAN SOLDIERTYPE::Load(HWFILE hFile)
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bScopeMode, sizeof(bScopeMode), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubMilitiaAssists, sizeof(ubMilitiaAssists), sizeof(UINT8), numBytesRead );
|
||||
numBytesRead = ReadFieldByField(hFile, &this->sNonNPCTraderID, sizeof(sNonNPCTraderID), sizeof(INT8), numBytesRead );
|
||||
//numBytesRead = ReadFieldByField(hFile, &this->bUnusedINT8_3, sizeof(bUnusedINT8_3), sizeof(INT8), numBytesRead );
|
||||
numBytesRead = ReadFieldByField(hFile, &this->usDragPersonID, sizeof(usDragPersonID), sizeof(UINT8), numBytesRead );
|
||||
//numBytesRead = ReadFieldByField(hFile, &this->bUnusedINT16_4, sizeof(bUnusedINT16_4), sizeof(INT16), numBytesRead );
|
||||
numBytesRead = ReadFieldByField(hFile, &this->usDragPersonID, sizeof(usDragPersonID), sizeof(UINT16), numBytesRead );
|
||||
numBytesRead = ReadFieldByField(hFile, &this->sDragCorpseID, sizeof(sDragCorpseID), sizeof(INT16), numBytesRead );
|
||||
|
||||
if ( guiCurrentSaveGameVersion < DRAGPERSONS )
|
||||
@@ -2472,10 +2472,10 @@ BOOLEAN SOLDIERTYPE::Load(HWFILE hFile)
|
||||
|
||||
if ( guiCurrentSaveGameVersion >= DISEASE_SYSTEM )
|
||||
{
|
||||
numBytesRead = ReadFieldByField( hFile, &this->sDiseasePoints, sizeof(sDiseasePoints), sizeof(INT32), numBytesRead );
|
||||
numBytesRead = ReadFieldByField( hFile, &this->sDiseasePoints, sizeof(sDiseasePoints), sizeof(INT16), numBytesRead );
|
||||
numBytesRead = ReadFieldByField( hFile, &this->sDiseaseFlag, sizeof(sDiseaseFlag), sizeof(UINT8), numBytesRead );
|
||||
numBytesRead = ReadFieldByField( hFile, &this->ubFiller, sizeof( ubFiller ), sizeof( UINT8 ), numBytesRead );
|
||||
numBytesRead = ReadFieldByField( hFile, &this->ubHoursRemainingOnMiniEvent, sizeof( ubHoursRemainingOnMiniEvent), sizeof( UINT8 ), numBytesRead );
|
||||
numBytesRead = ReadFieldByField( hFile, &this->ubHoursRemainingOnMiniEvent, sizeof( ubHoursRemainingOnMiniEvent), sizeof( UINT16 ), numBytesRead );
|
||||
numBytesRead = ReadFieldByField( hFile, &this->usGLDelayMode, sizeof( usGLDelayMode ), sizeof( UINT8 ), numBytesRead );
|
||||
numBytesRead = ReadFieldByField( hFile, &this->usBarrelMode, sizeof( usBarrelMode ), sizeof( UINT8 ), numBytesRead );
|
||||
numBytesRead = ReadFieldByField( hFile, &this->usBarrelCounter, sizeof( usBarrelCounter ), sizeof( UINT8 ), numBytesRead );
|
||||
@@ -2607,140 +2607,6 @@ BOOLEAN SOLDIERTYPE::Load(HWFILE hFile)
|
||||
buffer++;
|
||||
}
|
||||
|
||||
/*if ( guiCurrentSaveGameVersion >= FOOD_CHANGES )
|
||||
{
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bFoodLevel, sizeof(bFoodLevel), sizeof(INT32), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bDrinkLevel, sizeof(bDrinkLevel), sizeof(INT32), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->usStarveDamageHealth, sizeof(usStarveDamageHealth), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->usStarveDamageStrength, sizeof(usStarveDamageStrength), sizeof(UINT8), numBytesRead);
|
||||
|
||||
if ( guiCurrentSaveGameVersion >= MULTITURN_ACTIONS )
|
||||
{
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bOverTurnAPS, sizeof(bOverTurnAPS), sizeof(INT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->sMTActionGridNo, sizeof(sMTActionGridNo), sizeof(INT32), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->usMultiTurnAction, sizeof(usMultiTurnAction), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bAIIndex, sizeof(bAIIndex), sizeof(UINT16), numBytesRead);
|
||||
|
||||
if ( guiCurrentSaveGameVersion >= SOLDIER_PROFILES )
|
||||
{
|
||||
numBytesRead = ReadFieldByField(hFile, &this->usSoldierProfile, sizeof(usSoldierProfile), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->usItemMoveSectorID, sizeof(usItemMoveSectorID), sizeof(UINT8), numBytesRead);
|
||||
|
||||
if ( guiCurrentSaveGameVersion >= SOLDIER_PROFILES )
|
||||
{
|
||||
numBytesRead = ReadFieldByField(hFile, &this->usSkillCounter, sizeof(usSkillCounter), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->usSkillCooldown, sizeof(usSkillCooldown), sizeof(UINT32), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->usAISkillUse, sizeof(usAISkillUse), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubFiller, sizeof(ubFiller), sizeof(UINT8), numBytesRead);
|
||||
}
|
||||
else
|
||||
{
|
||||
for(UINT8 i = 0; i < SOLDIER_COUNTER_MAX; ++i)
|
||||
this->usSkillCounter[i] = 0;
|
||||
|
||||
for(UINT8 i = 0; i < SOLDIER_COOLDOWN_MAX; ++i)
|
||||
this->usSkillCooldown[i] = 0;
|
||||
|
||||
this->usAISkillUse = 0;
|
||||
|
||||
// as we added new variables, fillersize was reduced, here we account for that. We have to also read the existing fillers that now do not exist anymore
|
||||
const UINT8 tmp = sizeof(usSkillCounter) + sizeof(usSkillCooldown) + sizeof(usAISkillUse);
|
||||
UINT8 blarg[tmp];
|
||||
numBytesRead = ReadFieldByField(hFile, &blarg, tmp, sizeof(UINT8), numBytesRead);
|
||||
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubFiller, sizeof(ubFiller), sizeof(UINT8), numBytesRead);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
this->usSoldierProfile = 0;
|
||||
this->usItemMoveSectorID = 0;
|
||||
|
||||
// as we added new variables, fillersize was reduced, here we account for that. We have to also read the existing fillers that now do not exist anymore
|
||||
const UINT8 tmp = sizeof(usSoldierProfile) + sizeof(usItemMoveSectorID);
|
||||
UINT8 blarg[tmp];
|
||||
numBytesRead = ReadFieldByField(hFile, &blarg, tmp, sizeof(UINT8), numBytesRead);
|
||||
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubFiller, sizeof(ubFiller), sizeof(UINT8), numBytesRead);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
this->bOverTurnAPS = 0;
|
||||
this->sMTActionGridNo = NOWHERE;
|
||||
this->usMultiTurnAction = 0;
|
||||
this->bAIIndex = 0;
|
||||
this->usSoldierProfile = 0;
|
||||
this->usItemMoveSectorID = 0;
|
||||
|
||||
// as we added new variables, fillersize was reduced, here we account for that. We have to also read the existing fillers that now do not exist anymore
|
||||
// +1 for padding
|
||||
const UINT8 tmp = sizeof(bOverTurnAPS) + sizeof(this->sMTActionGridNo) + sizeof(usMultiTurnAction) + sizeof(bAIIndex) + 1 + sizeof(usSoldierProfile) + sizeof(usItemMoveSectorID);
|
||||
UINT8 blarg[tmp];
|
||||
numBytesRead = ReadFieldByField(hFile, &blarg, tmp, sizeof(UINT8), numBytesRead);
|
||||
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubFiller, sizeof(ubFiller), sizeof(UINT8), numBytesRead);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//CHRISL: We have to make sure we add a buffer to account for the lack of ubInterruptCounter and that buffer needs to be a full DWORD in size
|
||||
for(int i = 0; i < sizeof(bFoodLevel); ++i)
|
||||
buffer++;
|
||||
while((buffer%4) > 0)
|
||||
buffer++;
|
||||
|
||||
for(int i = 0; i < sizeof(bDrinkLevel); ++i)
|
||||
buffer++;
|
||||
while((buffer%4) > 0)
|
||||
buffer++;
|
||||
|
||||
for(int i = 0; i < sizeof(usStarveDamageHealth); ++i)
|
||||
buffer++;
|
||||
while((buffer%4) > 0)
|
||||
buffer++;
|
||||
|
||||
for(int i = 0; i < sizeof(usStarveDamageStrength); ++i)
|
||||
buffer++;
|
||||
while((buffer%4) > 0)
|
||||
buffer++;
|
||||
|
||||
for(int i = 0; i < sizeof(bOverTurnAPS); ++i)
|
||||
buffer++;
|
||||
while((buffer%4) > 0)
|
||||
buffer++;
|
||||
|
||||
for(int i = 0; i < sizeof(sMTActionGridNo); ++i)
|
||||
buffer++;
|
||||
while((buffer%4) > 0)
|
||||
buffer++;
|
||||
|
||||
for(int i = 0; i < sizeof(usMultiTurnAction); ++i)
|
||||
buffer++;
|
||||
while((buffer%4) > 0)
|
||||
buffer++;
|
||||
|
||||
for(int i = 0; i < sizeof(bAIIndex); ++i)
|
||||
buffer++;
|
||||
while((buffer%4) > 0)
|
||||
buffer++;
|
||||
|
||||
for(int i = 0; i < sizeof(usSoldierProfile); ++i)
|
||||
buffer++;
|
||||
while((buffer%4) > 0)
|
||||
buffer++;
|
||||
|
||||
for(int i = 0; i < sizeof(usItemMoveSectorID); ++i)
|
||||
buffer++;
|
||||
while((buffer%4) > 0)
|
||||
buffer++;
|
||||
|
||||
for(int i = 0; i < sizeof(ubFiller); ++i)
|
||||
buffer++;
|
||||
while((buffer%4) > 0)
|
||||
buffer++;
|
||||
}*/
|
||||
|
||||
#ifdef JA2UB
|
||||
numBytesRead = ReadFieldByField(hFile, &this->fIgnoreGetupFromCollapseCheck, sizeof(fIgnoreGetupFromCollapseCheck), sizeof(BOOLEAN), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->GetupFromJA25StartCounter, sizeof(GetupFromJA25StartCounter), sizeof(TIMECOUNTER), numBytesRead);
|
||||
@@ -2748,38 +2614,9 @@ BOOLEAN SOLDIERTYPE::Load(HWFILE hFile)
|
||||
numBytesRead = ReadFieldByField(hFile, &this->ubPercentDamageInflictedByTeam, sizeof(ubPercentDamageInflictedByTeam), sizeof(UINT8), numBytesRead);
|
||||
#endif
|
||||
numBytesRead += buffer;
|
||||
if(numBytesRead != SIZEOF_SOLDIERTYPE_POD)
|
||||
const UINT32 PODsize = SIZEOF_SOLDIERTYPE_POD;
|
||||
if(numBytesRead != PODsize)
|
||||
return(FALSE);
|
||||
/* //CHRISL: It was further changed at version 104 to allow for 16bit action points for the 100AP system
|
||||
//first, load the POD
|
||||
if ( guiCurrentSaveGameVersion >= AP100_SAVEGAME_DATATYPE_CHANGE )
|
||||
{
|
||||
if ( !FileRead( hFile, this, SIZEOF_SOLDIERTYPE_POD, &uiNumBytesRead ) )
|
||||
{
|
||||
return(FALSE);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
numBytesRead = 0;
|
||||
FileRead( hFile, this, (offsetof(SOLDIERTYPE, ubBodyType)+sizeof(ubBodyType)), &uiNumBytesRead );
|
||||
numBytesRead += uiNumBytesRead;
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bActionPoints, 1, 1, numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bInitialActionPoints, 1, 1, numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bOldLife, sizeof(bOldLife), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bVisible, sizeof(bVisible), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bActive, sizeof(bActive), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bTeam, sizeof(bTeam), sizeof(INT8), numBytesRead);
|
||||
//CHRISL: in the old structure, there are 3 padding bytes at this point in the file. We need to account for
|
||||
// them before continuing. We also want to include them in our numBytesRead since they cover the changes
|
||||
// caused by increasing two elements by 1byte each. This includes shifting one byte of padding
|
||||
FileRead( hFile, padding, 3, &uiNumBytesRead );
|
||||
numBytesRead += uiNumBytesRead;
|
||||
FileRead( hFile, &this->pTempObject, (SIZEOF_SOLDIERTYPE_POD-numBytesRead), &uiNumBytesRead );
|
||||
numBytesRead += uiNumBytesRead;
|
||||
if(numBytesRead != SIZEOF_SOLDIERTYPE_POD)
|
||||
return(FALSE);
|
||||
}*/
|
||||
|
||||
//load the OO inventory
|
||||
if ( !this->inv.Load(hFile) )
|
||||
@@ -2817,7 +2654,7 @@ BOOLEAN SOLDIERTYPE::Load(HWFILE hFile)
|
||||
numBytesRead = ReadFieldByField(hFile, &this->aiData.sNoiseGridno, sizeof(aiData.sNoiseGridno), sizeof(INT32), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->aiData.ubNoiseVolume, sizeof(aiData.ubNoiseVolume), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->aiData.bLastAttackHit, sizeof(aiData.bLastAttackHit), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->aiData.ubXRayedBy, sizeof(aiData.ubXRayedBy), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->aiData.ubXRayedBy, sizeof(aiData.ubXRayedBy), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->aiData.dHeightAdjustment, sizeof(aiData.dHeightAdjustment), sizeof(FLOAT), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->aiData.bMorale, sizeof(aiData.bMorale), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->aiData.bTeamMoraleMod, sizeof(aiData.bTeamMoraleMod), sizeof(INT8), numBytesRead);
|
||||
@@ -2840,7 +2677,7 @@ BOOLEAN SOLDIERTYPE::Load(HWFILE hFile)
|
||||
numBytesRead = ReadFieldByField(hFile, &this->aiData.bMoved, sizeof(aiData.bMoved), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->aiData.bHunting, sizeof(aiData.bHunting), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->aiData.ubLastCall, sizeof(aiData.ubLastCall), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->aiData.ubCaller, sizeof(aiData.ubCaller), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->aiData.ubCaller, sizeof(aiData.ubCaller), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->aiData.sCallerGridNo, sizeof(aiData.sCallerGridNo), sizeof(INT32), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->aiData.bCallPriority, sizeof(aiData.bCallPriority), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->aiData.bCallActedUpon, sizeof(aiData.bCallActedUpon), sizeof(INT8), numBytesRead);
|
||||
@@ -3072,9 +2909,14 @@ BOOLEAN WORLDITEM::Load(INT8** hBuffer, float dMajorMapVersion, UINT8 ubMinorMap
|
||||
LOADDATA(&oldWorldItem, *hBuffer, _OLD_SIZEOF_WORLDITEM_POD);
|
||||
*this = oldWorldItem;
|
||||
}
|
||||
else if (dMajorMapVersion < 8.0)
|
||||
{
|
||||
LOADDATA(this, *hBuffer, _SIZEOF_WORLDITEM_INT8_ID_POD);
|
||||
}
|
||||
else
|
||||
{
|
||||
LOADDATA(this, *hBuffer, SIZEOF_WORLDITEM_POD);
|
||||
|
||||
}
|
||||
// Load the OO OBJECTTYPE
|
||||
this->object.Load(hBuffer, dMajorMapVersion, ubMinorMapVersion);
|
||||
}
|
||||
@@ -6645,7 +6487,7 @@ BOOLEAN LoadSavedGame( int ubSavedGameID )
|
||||
if( gTacticalStatus.ubAttackBusyCount > 1 )
|
||||
{
|
||||
//Lock the ui
|
||||
SetUIBusy( (UINT8)gusSelectedSoldier );
|
||||
SetUIBusy( gusSelectedSoldier );
|
||||
}
|
||||
// OJW - 20090403 - Fix Tactical Interface is still locked after quick-load
|
||||
else
|
||||
@@ -6890,9 +6732,9 @@ BOOLEAN LoadSavedGame( int ubSavedGameID )
|
||||
|
||||
// player team character fixes
|
||||
SOLDIERTYPE *pTeamSoldier;
|
||||
for (INT8 bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++)
|
||||
for (SoldierID bLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++bLoop)
|
||||
{
|
||||
pTeamSoldier=MercPtrs[bLoop];
|
||||
pTeamSoldier = bLoop;
|
||||
|
||||
// silversurfer: added additional check to only remove the flags when there is no boxing activity going on at the moment.
|
||||
// WANNE: This should fix the bug if any merc are still under PC control. This could happen after boxing in SAN MONA.
|
||||
@@ -7085,12 +6927,12 @@ BOOLEAN SaveSoldierStructure( HWFILE hFile )
|
||||
|
||||
BOOLEAN LoadSoldierStructure( HWFILE hFile )
|
||||
{
|
||||
UINT16 cnt;
|
||||
UINT32 uiNumBytesRead=0;
|
||||
UINT8 ubId;
|
||||
UINT16 cnt;
|
||||
UINT32 uiNumBytesRead=0;
|
||||
SoldierID ubId;
|
||||
UINT8 ubOne = 1;
|
||||
UINT8 ubActive = 1;
|
||||
UINT32 uiPercentage;
|
||||
UINT32 uiPercentage;
|
||||
SOLDIERTYPE SavedSoldierInfo;
|
||||
|
||||
//Loop through all the soldier and delete them all
|
||||
@@ -7820,13 +7662,13 @@ BOOLEAN LoadTacticalStatusFromSavedGame( HWFILE hFile )
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.Team, sizeof(gTacticalStatus.Team), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.ubCurrentTeam, sizeof(gTacticalStatus.ubCurrentTeam), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.sSlideTarget, sizeof(gTacticalStatus.sSlideTarget), sizeof(INT32), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.sSlideReason, sizeof(gTacticalStatus.sSlideReason), sizeof(INT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.sSlideReason_UNUSED, sizeof(gTacticalStatus.sSlideReason_UNUSED), sizeof(INT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.uiTimeSinceMercAIStart, sizeof(gTacticalStatus.uiTimeSinceMercAIStart), sizeof(UINT32), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.fPanicFlags, sizeof(gTacticalStatus.fPanicFlags), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.sPanicTriggerGridNoUnused, sizeof(gTacticalStatus.sPanicTriggerGridNoUnused), sizeof(INT32), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.sHandGrid, sizeof(gTacticalStatus.sHandGrid), sizeof(INT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.ubSpottersCalledForBy, sizeof(gTacticalStatus.ubSpottersCalledForBy), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.ubTheChosenOne, sizeof(gTacticalStatus.ubTheChosenOne), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.ubSpottersCalledForBy, sizeof(gTacticalStatus.ubSpottersCalledForBy), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.ubTheChosenOne, sizeof(gTacticalStatus.ubTheChosenOne), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.uiTimeOfLastInput, sizeof(gTacticalStatus.uiTimeOfLastInput), sizeof(UINT32), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.uiTimeSinceDemoOn, sizeof(gTacticalStatus.uiTimeSinceDemoOn), sizeof(UINT32), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.uiCountdownToRestart, sizeof(gTacticalStatus.uiCountdownToRestart), sizeof(UINT32), numBytesRead);
|
||||
@@ -7845,13 +7687,13 @@ BOOLEAN LoadTacticalStatusFromSavedGame( HWFILE hFile )
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.bRealtimeSpeed, sizeof(gTacticalStatus.bRealtimeSpeed), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.ubEnemyIntention, sizeof(gTacticalStatus.ubEnemyIntention), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.ubEnemyIntendedRetreatDirection, sizeof(gTacticalStatus.ubEnemyIntendedRetreatDirection), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.ubEnemySightingOnTheirTurnEnemyID, sizeof(gTacticalStatus.ubEnemySightingOnTheirTurnEnemyID), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.ubEnemySightingOnTheirTurnPlayerID, sizeof(gTacticalStatus.ubEnemySightingOnTheirTurnPlayerID), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.ubEnemySightingOnTheirTurnEnemyID, sizeof(gTacticalStatus.ubEnemySightingOnTheirTurnEnemyID), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.ubEnemySightingOnTheirTurnPlayerID, sizeof(gTacticalStatus.ubEnemySightingOnTheirTurnPlayerID), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.fEnemySightingOnTheirTurn, sizeof(gTacticalStatus.fEnemySightingOnTheirTurn), sizeof(BOOLEAN), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.fAutoBandageMode, sizeof(gTacticalStatus.fAutoBandageMode), sizeof(BOOLEAN), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.ubAttackBusyCount, sizeof(gTacticalStatus.ubAttackBusyCount), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.bNumEnemiesFoughtInBattleUnused, sizeof(gTacticalStatus.bNumEnemiesFoughtInBattleUnused), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.ubEngagedInConvFromActionMercID, sizeof(gTacticalStatus.ubEngagedInConvFromActionMercID), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.ubEngagedInConvFromActionMercID, sizeof(gTacticalStatus.ubEngagedInConvFromActionMercID), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.usTactialTurnLimitCounter, sizeof(gTacticalStatus.usTactialTurnLimitCounter), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.fInTopMessage, sizeof(gTacticalStatus.fInTopMessage), sizeof(BOOLEAN), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.ubTopMessageType, sizeof(gTacticalStatus.ubTopMessageType), sizeof(UINT8), numBytesRead);
|
||||
@@ -7869,7 +7711,7 @@ BOOLEAN LoadTacticalStatusFromSavedGame( HWFILE hFile )
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.fSaidCreatureFlavourQuote, sizeof(gTacticalStatus.fSaidCreatureFlavourQuote), sizeof(BOOLEAN), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.fHaveSeenCreature, sizeof(gTacticalStatus.fHaveSeenCreature), sizeof(BOOLEAN), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.fKilledEnemyOnAttack, sizeof(gTacticalStatus.fKilledEnemyOnAttack), sizeof(BOOLEAN), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.ubEnemyKilledOnAttack, sizeof(gTacticalStatus.ubEnemyKilledOnAttack), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.ubEnemyKilledOnAttack, sizeof(gTacticalStatus.ubEnemyKilledOnAttack), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.bEnemyKilledOnAttackLevel, sizeof(gTacticalStatus.bEnemyKilledOnAttackLevel), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.ubEnemyKilledOnAttackLocation, sizeof(gTacticalStatus.ubEnemyKilledOnAttackLocation), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.fItemsSeenOnAttack, sizeof(gTacticalStatus.fItemsSeenOnAttack), sizeof(BOOLEAN), numBytesRead);
|
||||
@@ -7883,7 +7725,7 @@ BOOLEAN LoadTacticalStatusFromSavedGame( HWFILE hFile )
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.fCantGetThrough, sizeof(gTacticalStatus.fCantGetThrough), sizeof(BOOLEAN), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.sCantGetThroughGridNo, sizeof(gTacticalStatus.sCantGetThroughGridNo), sizeof(INT32), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.sCantGetThroughSoldierGridNo, sizeof(gTacticalStatus.sCantGetThroughSoldierGridNo), sizeof(INT32), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.ubCantGetThroughID, sizeof(gTacticalStatus.ubCantGetThroughID), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.ubCantGetThroughID, sizeof(gTacticalStatus.ubCantGetThroughID), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.fDidGameJustStart, sizeof(gTacticalStatus.fDidGameJustStart), sizeof(BOOLEAN), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.fStatChangeCheatOn, sizeof(gTacticalStatus.fStatChangeCheatOn), sizeof(BOOLEAN), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.ubLastRequesterTargetID, sizeof(gTacticalStatus.ubLastRequesterTargetID), sizeof(UINT8), numBytesRead);
|
||||
@@ -7897,25 +7739,24 @@ BOOLEAN LoadTacticalStatusFromSavedGame( HWFILE hFile )
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.fHasAGameBeenStarted, sizeof(gTacticalStatus.fHasAGameBeenStarted), sizeof(BOOLEAN), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.bConsNumTurnsWeHaventSeenButEnemyDoes, sizeof(gTacticalStatus.bConsNumTurnsWeHaventSeenButEnemyDoes), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.fSomeoneHit, sizeof(gTacticalStatus.fSomeoneHit), sizeof(BOOLEAN), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.ubPaddingSmall, sizeof(gTacticalStatus.ubPaddingSmall), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.uiTimeSinceLastOpplistDecay, sizeof(gTacticalStatus.uiTimeSinceLastOpplistDecay), sizeof(UINT32), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.bMercArrivingQuoteBeingUsed, sizeof(gTacticalStatus.bMercArrivingQuoteBeingUsed), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.ubEnemyKilledOnAttackKiller, sizeof(gTacticalStatus.ubEnemyKilledOnAttackKiller), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.ubEnemyKilledOnAttackKiller, sizeof(gTacticalStatus.ubEnemyKilledOnAttackKiller), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.fCountingDownForGuideDescription, sizeof(gTacticalStatus.fCountingDownForGuideDescription), sizeof(BOOLEAN), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.bGuideDescriptionCountDown, sizeof(gTacticalStatus.bGuideDescriptionCountDown), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.ubGuideDescriptionToUse, sizeof(gTacticalStatus.ubGuideDescriptionToUse), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.bGuideDescriptionSectorX, sizeof(gTacticalStatus.bGuideDescriptionSectorX), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.bGuideDescriptionSectorY, sizeof(gTacticalStatus.bGuideDescriptionSectorY), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.fEnemyFlags, sizeof(gTacticalStatus.fEnemyFlags), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus. fAutoBandagePending, sizeof(gTacticalStatus. fAutoBandagePending), sizeof(BOOLEAN), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus. fHasEnteredCombatModeSinceEntering, sizeof(gTacticalStatus. fHasEnteredCombatModeSinceEntering), sizeof(BOOLEAN), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus. fDontAddNewCrows, sizeof(gTacticalStatus. fDontAddNewCrows), sizeof(BOOLEAN), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.fAutoBandagePending, sizeof(gTacticalStatus. fAutoBandagePending), sizeof(BOOLEAN), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.fHasEnteredCombatModeSinceEntering, sizeof(gTacticalStatus. fHasEnteredCombatModeSinceEntering), sizeof(BOOLEAN), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.fDontAddNewCrows, sizeof(gTacticalStatus. fDontAddNewCrows), sizeof(BOOLEAN), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.ubMorePadding, sizeof(gTacticalStatus.ubMorePadding), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.sCreatureTenseQuoteDelay, sizeof(gTacticalStatus.sCreatureTenseQuoteDelay), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.uiCreatureTenseQuoteLastUpdate, sizeof(gTacticalStatus.uiCreatureTenseQuoteLastUpdate), sizeof(UINT32), numBytesRead);
|
||||
if ( guiCurrentSaveGameVersion >= BUGFIX_NPC_DATA_FOR_BIG_MAPS )
|
||||
{
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.ubLastRequesterSurgeryTargetID, sizeof(gTacticalStatus.ubLastRequesterSurgeryTargetID), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.ubLastRequesterSurgeryTargetID, sizeof(gTacticalStatus.ubLastRequesterSurgeryTargetID), sizeof(UINT16), numBytesRead);
|
||||
if ( guiCurrentSaveGameVersion >= IMPROVED_INTERRUPT_SYSTEM )
|
||||
{
|
||||
numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.ubInterruptPending, sizeof(gTacticalStatus.ubInterruptPending), sizeof(UINT8), numBytesRead);
|
||||
@@ -8361,7 +8202,7 @@ void CreateSavedGameFileNameFromNumber( UINT8 ubSaveGameID, STR pzNewFileName )
|
||||
|
||||
|
||||
|
||||
BOOLEAN SaveMercPathFromSoldierStruct( HWFILE hFile, UINT8 ubID )
|
||||
BOOLEAN SaveMercPathFromSoldierStruct( HWFILE hFile, UINT16 ubID )
|
||||
{
|
||||
UINT32 uiNumOfNodes=0;
|
||||
PathStPtr pTempPath = Menptr[ ubID ].pMercPath;
|
||||
@@ -8402,7 +8243,7 @@ BOOLEAN SaveMercPathFromSoldierStruct( HWFILE hFile, UINT8 ubID )
|
||||
|
||||
|
||||
|
||||
BOOLEAN LoadMercPathToSoldierStruct( HWFILE hFile, UINT8 ubID )
|
||||
BOOLEAN LoadMercPathToSoldierStruct( HWFILE hFile, UINT16 ubID )
|
||||
{
|
||||
UINT32 uiNumOfNodes=0;
|
||||
PathStPtr pTempPath = NULL;
|
||||
@@ -8665,7 +8506,7 @@ BOOLEAN SaveGeneralInfo( HWFILE hFile )
|
||||
if( pContractReHireSoldier != NULL )
|
||||
sGeneralInfo.sContractRehireSoldierID = pContractReHireSoldier->ubID;
|
||||
else
|
||||
sGeneralInfo.sContractRehireSoldierID = -1;
|
||||
sGeneralInfo.sContractRehireSoldierID = NOBODY;
|
||||
|
||||
memcpy( &sGeneralInfo.GameOptions, &gGameOptions, sizeof( GAME_OPTIONS ) );
|
||||
#ifndef BMP_RANDOM//dnl ch55 111009
|
||||
@@ -8685,7 +8526,7 @@ BOOLEAN SaveGeneralInfo( HWFILE hFile )
|
||||
if( gpSMCurrentMerc )
|
||||
sGeneralInfo.ubSMCurrentMercID = gpSMCurrentMerc->ubID;
|
||||
else
|
||||
sGeneralInfo.ubSMCurrentMercID = 255;
|
||||
sGeneralInfo.ubSMCurrentMercID = NOBODY;
|
||||
|
||||
//Save the fact that it is the first time in mapscreen
|
||||
sGeneralInfo.fFirstTimeInMapScreen = fFirstTimeInMapScreen;
|
||||
@@ -8696,7 +8537,7 @@ BOOLEAN SaveGeneralInfo( HWFILE hFile )
|
||||
|
||||
// Save boxing info
|
||||
memcpy( &sGeneralInfo.sBoxerGridNo, &gsBoxerGridNo, NUM_BOXERS * sizeof( INT32 ) );
|
||||
memcpy( &sGeneralInfo.ubBoxerID, &gubBoxerID, NUM_BOXERS * sizeof( INT8 ) );
|
||||
memcpy( &sGeneralInfo.ubBoxerID, &gubBoxerID, NUM_BOXERS * sizeof( UINT16 ) );
|
||||
memcpy( &sGeneralInfo.fBoxerFought, &gfBoxerFought, NUM_BOXERS * sizeof( BOOLEAN ) );
|
||||
|
||||
//Save the helicopter status
|
||||
@@ -8944,17 +8785,17 @@ BOOLEAN LoadGeneralInfo( HWFILE hFile )
|
||||
numBytesRead = ReadFieldByField(hFile, &sGeneralInfo.ubHelicopterHitsTaken, sizeof(sGeneralInfo.ubHelicopterHitsTaken), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &sGeneralInfo.ubQuitType, sizeof(sGeneralInfo.ubQuitType), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &sGeneralInfo.fSkyriderSaidCongratsOnTakingSAM, sizeof(sGeneralInfo.fSkyriderSaidCongratsOnTakingSAM), sizeof(BOOLEAN), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &sGeneralInfo.sContractRehireSoldierID, sizeof(sGeneralInfo.sContractRehireSoldierID), sizeof(INT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &sGeneralInfo.sContractRehireSoldierID, sizeof(sGeneralInfo.sContractRehireSoldierID), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &sGeneralInfo.GameOptions, sizeof(sGeneralInfo.GameOptions), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &sGeneralInfo.uiSeedNumber, sizeof(sGeneralInfo.uiSeedNumber), sizeof(UINT32), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &sGeneralInfo.uiBaseJA2Clock, sizeof(sGeneralInfo.uiBaseJA2Clock), sizeof(UINT32), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &sGeneralInfo.sCurInterfacePanel, sizeof(sGeneralInfo.sCurInterfacePanel), sizeof(INT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &sGeneralInfo.ubSMCurrentMercID, sizeof(sGeneralInfo.ubSMCurrentMercID), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &sGeneralInfo.ubSMCurrentMercID, sizeof(sGeneralInfo.ubSMCurrentMercID), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &sGeneralInfo.fFirstTimeInMapScreen, sizeof(sGeneralInfo.fFirstTimeInMapScreen), sizeof(BOOLEAN), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &sGeneralInfo.fDisableDueToBattleRoster, sizeof(sGeneralInfo.fDisableDueToBattleRoster), sizeof(BOOLEAN), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &sGeneralInfo.fDisableMapInterfaceDueToBattle, sizeof(sGeneralInfo.fDisableMapInterfaceDueToBattle), sizeof(BOOLEAN), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &sGeneralInfo.sBoxerGridNo, sizeof(sGeneralInfo.sBoxerGridNo), sizeof(INT32), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &sGeneralInfo.ubBoxerID, sizeof(sGeneralInfo.ubBoxerID), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &sGeneralInfo.ubBoxerID, sizeof(sGeneralInfo.ubBoxerID), sizeof(UINT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &sGeneralInfo.fBoxerFought, sizeof(sGeneralInfo.fBoxerFought), sizeof(BOOLEAN), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &sGeneralInfo.fHelicopterDestroyed, sizeof(sGeneralInfo.fHelicopterDestroyed), sizeof(BOOLEAN), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &sGeneralInfo.fShowMapScreenHelpText, sizeof(sGeneralInfo.fShowMapScreenHelpText), sizeof(BOOLEAN), numBytesRead);
|
||||
@@ -9032,7 +8873,7 @@ BOOLEAN LoadGeneralInfo( HWFILE hFile )
|
||||
numBytesRead = ReadFieldByField(hFile, &sGeneralInfo.fExplosionQueueActive, sizeof(sGeneralInfo.fExplosionQueueActive), sizeof(BOOLEAN), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &sGeneralInfo.ubUnused, sizeof(sGeneralInfo.ubUnused), sizeof(UINT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &sGeneralInfo.uiMeanWhileFlags, sizeof(sGeneralInfo.uiMeanWhileFlags), sizeof(UINT32), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &sGeneralInfo.bSelectedInfoChar, sizeof(sGeneralInfo.bSelectedInfoChar), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &sGeneralInfo.bSelectedInfoChar, sizeof(sGeneralInfo.bSelectedInfoChar), sizeof(INT16), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &sGeneralInfo.bHospitalPriceModifier, sizeof(sGeneralInfo.bHospitalPriceModifier), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &sGeneralInfo.bUnused2, sizeof(sGeneralInfo.bUnused2), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &sGeneralInfo.iHospitalTempBalance, sizeof(sGeneralInfo.iHospitalTempBalance), sizeof(INT32), numBytesRead);
|
||||
@@ -9205,10 +9046,10 @@ BOOLEAN LoadGeneralInfo( HWFILE hFile )
|
||||
ubQuitType = sGeneralInfo.ubQuitType;
|
||||
|
||||
//if the soldier id is valid
|
||||
if( sGeneralInfo.sContractRehireSoldierID == -1 )
|
||||
if( sGeneralInfo.sContractRehireSoldierID == NOBODY )
|
||||
pContractReHireSoldier = NULL;
|
||||
else
|
||||
pContractReHireSoldier = &Menptr[ sGeneralInfo.sContractRehireSoldierID ];
|
||||
pContractReHireSoldier = sGeneralInfo.sContractRehireSoldierID;
|
||||
|
||||
memcpy( &gGameOptions, &sGeneralInfo.GameOptions, sizeof( GAME_OPTIONS ) );
|
||||
#ifndef BMP_RANDOM//dnl ch55 111009
|
||||
@@ -9225,10 +9066,10 @@ BOOLEAN LoadGeneralInfo( HWFILE hFile )
|
||||
|
||||
|
||||
// Restore the selected merc
|
||||
if( sGeneralInfo.ubSMCurrentMercID == 255 )
|
||||
if( sGeneralInfo.ubSMCurrentMercID == NOBODY)
|
||||
gpSMCurrentMerc = NULL;
|
||||
else
|
||||
gpSMCurrentMerc = &Menptr[ sGeneralInfo.ubSMCurrentMercID ];
|
||||
gpSMCurrentMerc = sGeneralInfo.ubSMCurrentMercID;
|
||||
|
||||
//Set the interface panel to the team panel
|
||||
ShutdownCurrentPanel( );
|
||||
@@ -9256,7 +9097,7 @@ BOOLEAN LoadGeneralInfo( HWFILE hFile )
|
||||
fDisableMapInterfaceDueToBattle = sGeneralInfo.fDisableMapInterfaceDueToBattle;
|
||||
|
||||
memcpy( &gsBoxerGridNo, &sGeneralInfo.sBoxerGridNo, NUM_BOXERS * sizeof( INT32 ) );
|
||||
memcpy( &gubBoxerID, &sGeneralInfo.ubBoxerID, NUM_BOXERS * sizeof( UINT8 ) );
|
||||
memcpy( &gubBoxerID, &sGeneralInfo.ubBoxerID, NUM_BOXERS * sizeof( UINT16 ) );
|
||||
memcpy( &gfBoxerFought, &sGeneralInfo.fBoxerFought, NUM_BOXERS * sizeof( BOOLEAN ) );
|
||||
|
||||
//Load the helicopter status
|
||||
@@ -9437,20 +9278,20 @@ BOOLEAN LoadGeneralInfo( HWFILE hFile )
|
||||
gCamoFace[i].gSnowCamoface = FALSE;
|
||||
}
|
||||
|
||||
SOLDIERTYPE * pSoldier;
|
||||
UINT16 bMercID = gTacticalStatus.Team[gbPlayerNum].bFirstID;
|
||||
UINT16 bLastTeamID = gTacticalStatus.Team[gbPlayerNum].bLastID;
|
||||
for ( pSoldier = MercPtrs[ bMercID ]; bMercID <= bLastTeamID; ++bMercID,pSoldier++)
|
||||
SoldierID Soldier = gTacticalStatus.Team[gbPlayerNum].bFirstID;
|
||||
SoldierID bLastTeamID = gTacticalStatus.Team[gbPlayerNum].bLastID;
|
||||
for ( ; Soldier <= bLastTeamID; ++Soldier)
|
||||
{
|
||||
if ( pSoldier )
|
||||
if ( Soldier )
|
||||
{
|
||||
gCamoFace[pSoldier->ubProfile].gCamoface = ( pSoldier->bCamo > 0 );
|
||||
gCamoFace[pSoldier->ubProfile].gUrbanCamoface = ( pSoldier->urbanCamo > 0 );
|
||||
gCamoFace[pSoldier->ubProfile].gDesertCamoface = ( pSoldier->desertCamo > 0 );
|
||||
gCamoFace[pSoldier->ubProfile].gSnowCamoface = ( pSoldier->snowCamo > 0 );
|
||||
UINT8 profile = Soldier->ubProfile;
|
||||
gCamoFace[profile].gCamoface = ( Soldier->bCamo > 0 );
|
||||
gCamoFace[profile].gUrbanCamoface = ( Soldier->urbanCamo > 0 );
|
||||
gCamoFace[profile].gDesertCamoface = ( Soldier->desertCamo > 0 );
|
||||
gCamoFace[profile].gSnowCamoface = ( Soldier->snowCamo > 0 );
|
||||
|
||||
DeleteSoldierFace( pSoldier );
|
||||
pSoldier->iFaceIndex = InitSoldierFace( pSoldier );
|
||||
DeleteSoldierFace( Soldier );
|
||||
Soldier->iFaceIndex = InitSoldierFace( Soldier );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -9671,18 +9512,19 @@ void GetBestPossibleSectorXYZValues( INT16 *psSectorX, INT16 *psSectorY, INT8 *p
|
||||
}
|
||||
else
|
||||
{
|
||||
INT16 sSoldierCnt;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
INT16 bLastTeamID;
|
||||
BOOLEAN fFoundAMerc=FALSE;
|
||||
SoldierID sSoldierCnt;
|
||||
SoldierID bLastTeamID;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
BOOLEAN fFoundAMerc = FALSE;
|
||||
|
||||
// Set locator to first merc
|
||||
sSoldierCnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
bLastTeamID = gTacticalStatus.Team[ gbPlayerNum ].bLastID;
|
||||
|
||||
//loop through all the mercs on the players team to find the one that is not moving
|
||||
for ( pSoldier = MercPtrs[ sSoldierCnt ]; sSoldierCnt <= bLastTeamID; sSoldierCnt++,pSoldier++)
|
||||
for ( ; sSoldierCnt <= bLastTeamID; ++sSoldierCnt )
|
||||
{
|
||||
pSoldier = sSoldierCnt;
|
||||
// test for !NULL (if initilization fails and MercPtrs contains 'NULL's)
|
||||
if( pSoldier && pSoldier->bActive )
|
||||
{
|
||||
@@ -9706,8 +9548,9 @@ void GetBestPossibleSectorXYZValues( INT16 *psSectorX, INT16 *psSectorY, INT8 *p
|
||||
bLastTeamID = gTacticalStatus.Team[ gbPlayerNum ].bLastID;
|
||||
|
||||
//loop through all the mercs and find one that is moving
|
||||
for ( pSoldier = MercPtrs[ sSoldierCnt ]; sSoldierCnt <= bLastTeamID; sSoldierCnt++,pSoldier++)
|
||||
for ( ; sSoldierCnt <= bLastTeamID; ++sSoldierCnt )
|
||||
{
|
||||
pSoldier = sSoldierCnt;
|
||||
if( pSoldier && pSoldier->bActive )
|
||||
{
|
||||
//we found an alive, merc that is not moving
|
||||
|
||||
+20
-33
@@ -38,45 +38,32 @@ class SOLDIERTYPE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UINT32 uiSavedGameVersion;
|
||||
CHAR8 zGameVersionNumber[ GAME_VERSION_LENGTH ];
|
||||
|
||||
CHAR16 sSavedGameDesc[ SIZE_OF_SAVE_GAME_DESC ];
|
||||
|
||||
UINT32 uiFlags;
|
||||
|
||||
UINT32 uiSavedGameVersion;
|
||||
CHAR8 zGameVersionNumber[ GAME_VERSION_LENGTH ];
|
||||
CHAR16 sSavedGameDesc[ SIZE_OF_SAVE_GAME_DESC ];
|
||||
UINT32 uiFlags;
|
||||
#ifdef CRIPPLED_VERSION
|
||||
UINT8 ubCrippleFiller[20];
|
||||
UINT8 ubCrippleFiller[20];
|
||||
#endif
|
||||
|
||||
|
||||
//The following will be used to quickly access info to display in the save/load screen
|
||||
UINT32 uiDay;
|
||||
UINT8 ubHour;
|
||||
UINT8 ubMin;
|
||||
INT16 sSectorX;
|
||||
INT16 sSectorY;
|
||||
INT8 bSectorZ;
|
||||
UINT8 ubNumOfMercsOnPlayersTeam;
|
||||
INT32 iCurrentBalance;
|
||||
|
||||
UINT32 uiCurrentScreen;
|
||||
|
||||
BOOLEAN fAlternateSector;
|
||||
|
||||
BOOLEAN fWorldLoaded;
|
||||
|
||||
UINT8 ubLoadScreenID; //The load screen that should be used when loading the saved game
|
||||
|
||||
GAME_OPTIONS sInitialGameOptions; //need these in the header so we can get the info from it on the save load screen.
|
||||
|
||||
UINT32 uiRandom;
|
||||
|
||||
UINT8 ubFiller[500]; // WANNE: Decrease this filler by 1, for each new UINT8 variable!
|
||||
UINT32 uiDay;
|
||||
UINT8 ubHour;
|
||||
UINT8 ubMin;
|
||||
INT16 sSectorX;
|
||||
INT16 sSectorY;
|
||||
INT8 bSectorZ;
|
||||
UINT16 ubNumOfMercsOnPlayersTeam;
|
||||
INT32 iCurrentBalance;
|
||||
UINT32 uiCurrentScreen;
|
||||
BOOLEAN fAlternateSector;
|
||||
BOOLEAN fWorldLoaded;
|
||||
UINT8 ubLoadScreenID; //The load screen that should be used when loading the saved game
|
||||
GAME_OPTIONS sInitialGameOptions; //need these in the header so we can get the info from it on the save load screen.
|
||||
UINT32 uiRandom;
|
||||
UINT8 ubFiller[494]; // WANNE: Decrease this filler by 1, for each new UINT8 variable!
|
||||
|
||||
} SAVED_GAME_HEADER;
|
||||
|
||||
|
||||
extern UINT32 guiScreenToGotoAfterLoadingSavedGame;
|
||||
extern UINT32 guiCurrentSaveGameVersion;
|
||||
|
||||
|
||||
@@ -104,7 +104,7 @@ UINT32 AniEditScreenHandle(void)
|
||||
fToggle2 = FALSE;
|
||||
ubCurLoadedState = 0;
|
||||
|
||||
pSoldier = MercPtrs[ gusSelectedSoldier ];
|
||||
pSoldier = gusSelectedSoldier;
|
||||
|
||||
gTacticalStatus.uiFlags |= LOADING_SAVED_GAME;
|
||||
|
||||
|
||||
+3
-1
@@ -31,7 +31,9 @@
|
||||
// -----------------------------
|
||||
|
||||
// Map Editor version - you should use the MapEditor configuration instead of messing with these defines (ChrisL)
|
||||
//#define JA2BETAVERSION
|
||||
#ifndef JA2BETAVERSION
|
||||
#define JA2BETAVERSION
|
||||
#endif
|
||||
//#define JA2EDITOR
|
||||
// Normal test version
|
||||
//#define JA2TESTVERSION
|
||||
|
||||
+28
-36
@@ -108,10 +108,10 @@ INT32 giCounterPeriodOverlay = 0;
|
||||
BOOLEAN gfExitToNewSector = FALSE;
|
||||
//UINT8 gubNewSectorExitDirection;
|
||||
|
||||
BOOLEAN gfGameScreenLocateToSoldier = FALSE;
|
||||
BOOLEAN gfEnteringMapScreen = FALSE;
|
||||
UINT32 uiOldMouseCursor;
|
||||
UINT8 gubPreferredInitialSelectedGuy = NOBODY;
|
||||
BOOLEAN gfGameScreenLocateToSoldier = FALSE;
|
||||
BOOLEAN gfEnteringMapScreen = FALSE;
|
||||
UINT32 uiOldMouseCursor;
|
||||
SoldierID gubPreferredInitialSelectedGuy = NOBODY;
|
||||
|
||||
BOOLEAN gfTacticalIsModal = FALSE;
|
||||
MOUSE_REGION gTacticalDisableRegion;
|
||||
@@ -261,17 +261,17 @@ void EnterTacticalScreen( )
|
||||
if ( gusSelectedSoldier != NOBODY )
|
||||
{
|
||||
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("EnterTacticalScreen: check our guy"));
|
||||
if ( !OK_CONTROLLABLE_MERC( MercPtrs[ gusSelectedSoldier ] ) )
|
||||
if ( !OK_CONTROLLABLE_MERC( gusSelectedSoldier ) )
|
||||
{
|
||||
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("EnterTacticalScreen: SelectNextAvailSoldier, merc not controllable"));
|
||||
SelectNextAvailSoldier( MercPtrs[ gusSelectedSoldier ] );
|
||||
SelectNextAvailSoldier( gusSelectedSoldier );
|
||||
}
|
||||
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("EnterTacticalScreen: who is selected? %d", gusSelectedSoldier));
|
||||
// ATE: If the current guy is sleeping, change....
|
||||
if ( gusSelectedSoldier != NOBODY && MercPtrs[ gusSelectedSoldier ]->flags.fMercAsleep )
|
||||
if ( gusSelectedSoldier != NOBODY && gusSelectedSoldier->flags.fMercAsleep )
|
||||
{
|
||||
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("EnterTacticalScreen: SelectNextAvailSoldier, merc asleep"));
|
||||
SelectNextAvailSoldier( MercPtrs[ gusSelectedSoldier ] );
|
||||
SelectNextAvailSoldier( gusSelectedSoldier );
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -580,9 +580,9 @@ UINT32 MainGameScreenHandle(void)
|
||||
{
|
||||
if ( gTacticalStatus.ubCurrentTeam != gbPlayerNum )
|
||||
{
|
||||
MercPtrs[ gTacticalStatus.ubEnemySightingOnTheirTurnEnemyID ]->AdjustNoAPToFinishMove( FALSE );
|
||||
gTacticalStatus.ubEnemySightingOnTheirTurnEnemyID->AdjustNoAPToFinishMove( FALSE );
|
||||
}
|
||||
MercPtrs[ gTacticalStatus.ubEnemySightingOnTheirTurnEnemyID ]->flags.fPauseAllAnimation = FALSE;
|
||||
gTacticalStatus.ubEnemySightingOnTheirTurnEnemyID->flags.fPauseAllAnimation = FALSE;
|
||||
|
||||
gTacticalStatus.fEnemySightingOnTheirTurn = FALSE;
|
||||
}
|
||||
@@ -684,7 +684,7 @@ UINT32 MainGameScreenHandle(void)
|
||||
// Select a guy if he hasn;'
|
||||
if( !gfTacticalPlacementGUIActive )
|
||||
{
|
||||
if ( gusSelectedSoldier != NOBODY && OK_INTERRUPT_MERC( MercPtrs[ gusSelectedSoldier ] ) )
|
||||
if ( gusSelectedSoldier != NOBODY && OK_INTERRUPT_MERC( gusSelectedSoldier ) )
|
||||
{
|
||||
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("maingamescreenhandle: selectsoldier"));
|
||||
SelectSoldier( gusSelectedSoldier, FALSE, TRUE );
|
||||
@@ -735,11 +735,11 @@ UINT32 MainGameScreenHandle(void)
|
||||
|
||||
if ( !ARE_IN_FADE_IN( ) )
|
||||
{
|
||||
HandleAutoBandagePending( );
|
||||
HandleAutoBandagePending( );
|
||||
|
||||
#ifdef JA2UB
|
||||
HandleThePlayerBeNotifiedOfSomeoneElseInSector();
|
||||
#endif
|
||||
#ifdef JA2UB
|
||||
HandleThePlayerBeNotifiedOfSomeoneElseInSector();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -933,7 +933,7 @@ UINT32 MainGameScreenHandle(void)
|
||||
if ( gusSelectedSoldier != NOBODY )
|
||||
{
|
||||
if( !gGameSettings.fOptions[ TOPTION_MUTE_CONFIRMATIONS ] )
|
||||
MercPtrs[ gusSelectedSoldier ]->DoMercBattleSound( BATTLE_SOUND_ATTN1 );
|
||||
gusSelectedSoldier->DoMercBattleSound( BATTLE_SOUND_ATTN1 );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1030,15 +1030,12 @@ void DisableFPSOverlay( BOOLEAN fEnable )
|
||||
|
||||
void TacticalScreenLocateToSoldier( )
|
||||
{
|
||||
INT32 cnt;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
INT16 bLastTeamID;
|
||||
BOOLEAN fPreferedGuyUsed = FALSE;
|
||||
BOOLEAN fPreferedGuyUsed = FALSE;
|
||||
|
||||
if ( gubPreferredInitialSelectedGuy != NOBODY )
|
||||
{
|
||||
// ATE: Put condition here...
|
||||
if ( OK_CONTROLLABLE_MERC( MercPtrs[ gubPreferredInitialSelectedGuy ] ) && OK_INTERRUPT_MERC( MercPtrs[ gubPreferredInitialSelectedGuy ] ) )
|
||||
if ( OK_CONTROLLABLE_MERC( gubPreferredInitialSelectedGuy ) && OK_INTERRUPT_MERC( gubPreferredInitialSelectedGuy ) )
|
||||
{
|
||||
LocateSoldier( gubPreferredInitialSelectedGuy, 10 );
|
||||
SelectSoldier( gubPreferredInitialSelectedGuy, FALSE, TRUE );
|
||||
@@ -1050,14 +1047,14 @@ void TacticalScreenLocateToSoldier( )
|
||||
if ( !fPreferedGuyUsed )
|
||||
{
|
||||
// Set locator to first merc
|
||||
cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
bLastTeamID = gTacticalStatus.Team[ gbPlayerNum ].bLastID;
|
||||
for ( pSoldier = MercPtrs[ cnt ]; cnt <= bLastTeamID; cnt++,pSoldier++)
|
||||
SoldierID Soldier = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
SoldierID bLastTeamID = gTacticalStatus.Team[ gbPlayerNum ].bLastID;
|
||||
for ( ; Soldier <= bLastTeamID; ++Soldier)
|
||||
{
|
||||
if ( OK_CONTROLLABLE_MERC( pSoldier ) && OK_INTERRUPT_MERC( pSoldier ) )
|
||||
if ( OK_CONTROLLABLE_MERC( Soldier ) && OK_INTERRUPT_MERC( Soldier ) )
|
||||
{
|
||||
LocateSoldier( pSoldier->ubID, 10 );
|
||||
SelectSoldier( pSoldier->ubID, FALSE, TRUE );
|
||||
LocateSoldier( Soldier, 10 );
|
||||
SelectSoldier( Soldier, FALSE, TRUE );
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1075,22 +1072,17 @@ void EnterMapScreen( )
|
||||
|
||||
void UpdateTeamPanelAssignments( )
|
||||
{
|
||||
INT32 cnt;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
INT16 bLastTeamID;
|
||||
|
||||
// Remove all players
|
||||
RemoveAllPlayersFromSlot( );
|
||||
|
||||
// Set locator to first merc
|
||||
cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
bLastTeamID = gTacticalStatus.Team[ gbPlayerNum ].bLastID;
|
||||
for ( pSoldier = MercPtrs[ cnt ]; cnt <= bLastTeamID; cnt++,pSoldier++)
|
||||
SoldierID Soldier = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
SoldierID bLastTeamID = gTacticalStatus.Team[ gbPlayerNum ].bLastID;
|
||||
for ( ; Soldier <= bLastTeamID; ++Soldier)
|
||||
{
|
||||
// Setup team interface
|
||||
CheckForAndAddMercToTeamPanel( pSoldier );
|
||||
CheckForAndAddMercToTeamPanel( Soldier );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
+6
-6
@@ -1,8 +1,8 @@
|
||||
#ifndef _GAMESCREEN_H
|
||||
#define _GAMESCREEN_H
|
||||
|
||||
|
||||
#include "Fade Screen.h"
|
||||
#include "Overhead Types.h"
|
||||
#include "fade screen.h"
|
||||
|
||||
#define ARE_IN_FADE_IN( ) ( gfFadeIn || gfFadeInitialized )
|
||||
|
||||
@@ -14,9 +14,9 @@ void FadeOutGameScreen( );
|
||||
typedef void (*MODAL_HOOK)( void );
|
||||
|
||||
|
||||
extern BOOLEAN gfGameScreenLocateToSoldier;
|
||||
extern BOOLEAN gfEnteringMapScreen;
|
||||
extern UINT8 gubPreferredInitialSelectedGuy;
|
||||
extern BOOLEAN gfGameScreenLocateToSoldier;
|
||||
extern BOOLEAN gfEnteringMapScreen;
|
||||
extern SoldierID gubPreferredInitialSelectedGuy;
|
||||
|
||||
|
||||
void EnterMapScreen( );
|
||||
@@ -41,4 +41,4 @@ void InitHelicopterEntranceByMercs( void );
|
||||
|
||||
void InternalLeaveTacticalScreen( UINT32 uiNewScreen );
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
+14
-30
@@ -514,31 +514,25 @@ UINT32 PalEditScreenShutdown(void)
|
||||
|
||||
void PalEditRenderHook( )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier;
|
||||
|
||||
if ( gusSelectedSoldier != NOBODY )
|
||||
if ( gusSelectedSoldier < NOBODY && gusSelectedSoldier->bActive)
|
||||
{
|
||||
// Set to current
|
||||
GetSoldier( &pSoldier, gusSelectedSoldier );
|
||||
|
||||
DisplayPaletteRep( pSoldier->HeadPal, 50, 10, FRAME_BUFFER );
|
||||
DisplayPaletteRep( pSoldier->PantsPal, 50, 50, FRAME_BUFFER );
|
||||
DisplayPaletteRep( pSoldier->VestPal, 50, 90, FRAME_BUFFER );
|
||||
DisplayPaletteRep( pSoldier->SkinPal, 50, 130, FRAME_BUFFER );
|
||||
|
||||
DisplayPaletteRep( gusSelectedSoldier->HeadPal, 50, 10, FRAME_BUFFER );
|
||||
DisplayPaletteRep( gusSelectedSoldier->PantsPal, 50, 50, FRAME_BUFFER );
|
||||
DisplayPaletteRep( gusSelectedSoldier->VestPal, 50, 90, FRAME_BUFFER );
|
||||
DisplayPaletteRep( gusSelectedSoldier->SkinPal, 50, 130, FRAME_BUFFER );
|
||||
}
|
||||
}
|
||||
|
||||
BOOLEAN PalEditKeyboardHook( InputAtom *pInputEvent )
|
||||
{
|
||||
UINT8 ubType;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
UINT8 ubPaletteRep;
|
||||
UINT32 cnt;
|
||||
UINT8 ubStartRep = 0;
|
||||
UINT8 ubEndRep = 0;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
UINT32 cnt;
|
||||
UINT8 ubType;
|
||||
UINT8 ubPaletteRep;
|
||||
UINT8 ubStartRep = 0;
|
||||
UINT8 ubEndRep = 0;
|
||||
|
||||
if ( gusSelectedSoldier == NOBODY )
|
||||
if ( gusSelectedSoldier >= NOBODY || gusSelectedSoldier->bActive == FALSE )
|
||||
{
|
||||
return( FALSE );
|
||||
}
|
||||
@@ -549,11 +543,10 @@ BOOLEAN PalEditKeyboardHook( InputAtom *pInputEvent )
|
||||
return( TRUE );
|
||||
}
|
||||
|
||||
pSoldier = gusSelectedSoldier;
|
||||
|
||||
if ((pInputEvent->usEvent == KEY_DOWN )&& ( pInputEvent->usParam == 'h' ))
|
||||
{
|
||||
// Get Soldier
|
||||
GetSoldier( &pSoldier, gusSelectedSoldier );
|
||||
|
||||
// Get index of current
|
||||
CHECKF( GetPaletteRepIndexFromID( pSoldier->HeadPal, &ubPaletteRep ) );
|
||||
ubType = gpPalRep[ ubPaletteRep ].ubType;
|
||||
@@ -582,9 +575,6 @@ BOOLEAN PalEditKeyboardHook( InputAtom *pInputEvent )
|
||||
|
||||
if ((pInputEvent->usEvent == KEY_DOWN )&& ( pInputEvent->usParam == 'v' ))
|
||||
{
|
||||
// Get Soldier
|
||||
GetSoldier( &pSoldier, gusSelectedSoldier );
|
||||
|
||||
// Get index of current
|
||||
CHECKF( GetPaletteRepIndexFromID( pSoldier->VestPal, &ubPaletteRep ) );
|
||||
ubType = gpPalRep[ ubPaletteRep ].ubType;
|
||||
@@ -612,9 +602,6 @@ BOOLEAN PalEditKeyboardHook( InputAtom *pInputEvent )
|
||||
|
||||
if ((pInputEvent->usEvent == KEY_DOWN )&& ( pInputEvent->usParam == 'p' ))
|
||||
{
|
||||
// Get Soldier
|
||||
GetSoldier( &pSoldier, gusSelectedSoldier );
|
||||
|
||||
// Get index of current
|
||||
CHECKF( GetPaletteRepIndexFromID( pSoldier->PantsPal, &ubPaletteRep ) );
|
||||
ubType = gpPalRep[ ubPaletteRep ].ubType;
|
||||
@@ -642,9 +629,6 @@ BOOLEAN PalEditKeyboardHook( InputAtom *pInputEvent )
|
||||
|
||||
if ((pInputEvent->usEvent == KEY_DOWN )&& ( pInputEvent->usParam == 's' ))
|
||||
{
|
||||
// Get Soldier
|
||||
GetSoldier( &pSoldier, gusSelectedSoldier );
|
||||
|
||||
// Get index of current
|
||||
CHECKF( GetPaletteRepIndexFromID( pSoldier->SkinPal, &ubPaletteRep ) );
|
||||
ubType = gpPalRep[ ubPaletteRep ].ubType;
|
||||
|
||||
+3
-3
@@ -81,9 +81,9 @@ void RandomStats ();
|
||||
void RandomAddEnemy( UINT8 SectorX, UINT8 SectorY, UINT8 Level )
|
||||
{
|
||||
UNDERGROUND_SECTORINFO *pSector;
|
||||
UINT8 ubNumAdmins = 0;
|
||||
UINT8 ubNumTroops = 0;
|
||||
UINT8 ubNumElites = 0;
|
||||
UINT16 ubNumAdmins = 0;
|
||||
UINT16 ubNumTroops = 0;
|
||||
UINT16 ubNumElites = 0;
|
||||
|
||||
if ( Level != 0 )
|
||||
{
|
||||
|
||||
@@ -2422,9 +2422,9 @@ INT8 AimMemberHireMerc()
|
||||
MERC_HIRE_STRUCT HireMercStruct;
|
||||
// UINT8 ubCurrentSoldier = AimMercArray[gbCurrentIndex];
|
||||
UINT8 ubCurrentSoldier = gAimAvailability[AimMercArray[gbCurrentIndex]].ProfilId;
|
||||
INT8 bReturnCode;
|
||||
INT16 sSoldierID=0;
|
||||
INT8 bTypeOfContract=0;
|
||||
INT8 bReturnCode;
|
||||
SoldierID sSoldierID = NOBODY;
|
||||
INT8 bTypeOfContract=0;
|
||||
|
||||
|
||||
if( LaptopSaveInfo.iCurrentBalance < giContractAmount )
|
||||
@@ -2500,9 +2500,10 @@ INT8 AimMemberHireMerc()
|
||||
|
||||
//Set the type of contract the merc is on
|
||||
sSoldierID = GetSoldierIDFromMercID( ubCurrentSoldier );
|
||||
if( sSoldierID == -1 )
|
||||
if( sSoldierID == NOBODY )
|
||||
return( FALSE );
|
||||
Menptr[ sSoldierID ].bTypeOfLastContract = bTypeOfContract;
|
||||
|
||||
sSoldierID->bTypeOfLastContract = bTypeOfContract;
|
||||
|
||||
|
||||
//add an entry in the finacial page for the hiring of the merc
|
||||
|
||||
@@ -3720,26 +3720,27 @@ void OutOfStockMessageBoxCallBack( UINT8 bExitValue )
|
||||
UINT8 CheckPlayersInventoryForGunMatchingGivenAmmoID( INT16 sItemID )
|
||||
{
|
||||
UINT8 ubItemCount=0;
|
||||
UINT8 ubMercCount;
|
||||
UINT8 ubPocketCount;
|
||||
|
||||
UINT8 ubFirstID = gTacticalStatus.Team[ OUR_TEAM ].bFirstID;
|
||||
UINT8 ubLastID = gTacticalStatus.Team[ OUR_TEAM ].bLastID;
|
||||
SoldierID id;
|
||||
SoldierID ubFirstID = gTacticalStatus.Team[ OUR_TEAM ].bFirstID;
|
||||
SoldierID ubLastID = gTacticalStatus.Team[ OUR_TEAM ].bLastID;
|
||||
|
||||
//loop through all the mercs on the team
|
||||
for( ubMercCount = ubFirstID; ubMercCount <= ubLastID; ++ubMercCount )
|
||||
for( id = ubFirstID; id <= ubLastID; ++id )
|
||||
{
|
||||
if( Menptr[ ubMercCount ].bActive )
|
||||
SOLDIERTYPE *pSoldier = id;
|
||||
if( pSoldier->bActive )
|
||||
{
|
||||
//loop through all the pockets on the merc
|
||||
UINT8 invsize = Menptr[ ubMercCount ].inv.size();
|
||||
UINT8 invsize = pSoldier->inv.size();
|
||||
for( ubPocketCount=0; ubPocketCount<invsize; ++ubPocketCount)
|
||||
{
|
||||
//if there is a weapon here
|
||||
if( Item[ Menptr[ ubMercCount ].inv[ ubPocketCount ].usItem ].usItemClass == IC_GUN )
|
||||
if( Item[ pSoldier->inv[ ubPocketCount ].usItem ].usItemClass == IC_GUN )
|
||||
{
|
||||
//if the weapon uses the same kind of ammo as the one passed in, return true
|
||||
if( Weapon[ Menptr[ ubMercCount ].inv[ ubPocketCount ].usItem ].ubCalibre == Magazine[ Item[ sItemID ].ubClassIndex ].ubCalibre )
|
||||
if( Weapon[ pSoldier->inv[ ubPocketCount ].usItem ].ubCalibre == Magazine[ Item[ sItemID ].ubClassIndex ].ubCalibre )
|
||||
{
|
||||
++ubItemCount;
|
||||
}
|
||||
|
||||
+4
-4
@@ -269,7 +269,7 @@ void IMPGearDisplay( )
|
||||
gIMPGearGun1 = currentWeapon;
|
||||
|
||||
std::vector<std::pair<INT16, STR16> > entries;
|
||||
entries.push_back(std::make_pair(0, pLongAssignmentStrings[40])); //Reusing AssignmentString for "Empty" text
|
||||
entries.push_back(std::make_pair(0, pLongAssignmentStrings[60])); //Reusing AssignmentString for "Empty" text
|
||||
|
||||
if (Item[gIMPGearGun1].usItemClass & IC_GUN)
|
||||
{
|
||||
@@ -321,7 +321,7 @@ void IMPGearDisplay( )
|
||||
|
||||
|
||||
std::vector<std::pair<INT16, STR16> > entries;
|
||||
entries.push_back(std::make_pair(0, pLongAssignmentStrings[40])); //Reusing AssignmentString for "Empty" text
|
||||
entries.push_back(std::make_pair(0, pLongAssignmentStrings[60])); //Reusing AssignmentString for "Empty" text
|
||||
|
||||
|
||||
if (Item[gIMPGearGun2].usItemClass & IC_GUN)
|
||||
@@ -372,7 +372,7 @@ void IMPGearDisplay( )
|
||||
gIMPGearGun3 = currentWeapon;
|
||||
|
||||
std::vector<std::pair<INT16, STR16> > entries;
|
||||
entries.push_back(std::make_pair(0, pLongAssignmentStrings[40])); //Reusing AssignmentString for "Empty" text
|
||||
entries.push_back(std::make_pair(0, pLongAssignmentStrings[60])); //Reusing AssignmentString for "Empty" text
|
||||
|
||||
if (Item[gIMPGearGun3].usItemClass & IC_GUN)
|
||||
{
|
||||
@@ -1272,7 +1272,7 @@ void DistributePossibleItemsToVectors(void)
|
||||
// it is always possible to not select something
|
||||
for (int i = 0; i < NUM_INV_SLOTS; ++i)
|
||||
{
|
||||
gIMPPossibleItems[i].push_back(std::make_pair(0, pLongAssignmentStrings[40])); //Reusing AssignmentString for "Empty" text
|
||||
gIMPPossibleItems[i].push_back(std::make_pair(0, pLongAssignmentStrings[60])); //Reusing AssignmentString for "Empty" text
|
||||
SetChoiceForPocket(i, 0, 1); // Initialize all selections to empty at first
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -25,8 +25,8 @@ class SOLDIERTYPE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
BOOLEAN fActive;
|
||||
UINT8 ubSoldierID;
|
||||
BOOLEAN fActive;
|
||||
SoldierID ubSoldierID;
|
||||
UINT8 ubMercID;
|
||||
INT32 iPayOutPrice;
|
||||
} LIFE_INSURANCE_PAYOUT;
|
||||
|
||||
@@ -163,11 +163,11 @@ BOOLEAN DisplayOrderGrid( UINT8 ubGridNumber, UINT8 ubMercID );
|
||||
INT8 GetNumberOfHireMercsStartingFromID( UINT8 ubStartMercID );
|
||||
//INT32 CalculateInsuranceCost( SOLDIERTYPE *pSoldier, BOOLEAN fHaveInsurance );
|
||||
void InsuranceContractUserTextFieldCallBack( UINT8 ubID, BOOLEAN fEntering );
|
||||
INT8 CountInsurableMercs();
|
||||
UINT16 CountInsurableMercs();
|
||||
void DisableInsuranceContractNextPreviousbuttons();
|
||||
void CreateDestroyInsuranceContractFormButtons( BOOLEAN fCreate);
|
||||
void HandleAcceptButton( UINT8 ubSoldierID, UINT8 ubFormID );
|
||||
FLOAT DiffFromNormRatio( INT16 sThisValue, INT16 sNormalValue );
|
||||
void HandleAcceptButton( SoldierID ubSoldierID, UINT8 ubFormID );
|
||||
FLOAT DiffFromNormRatio( INT16 sThisValue, INT16 sNormalValue );
|
||||
void InsContractNoMercsPopupCallBack( UINT8 bExitValue );
|
||||
void BuildInsuranceArray();
|
||||
BOOLEAN MercIsInsurable( SOLDIERTYPE *pSoldier );
|
||||
@@ -177,8 +177,8 @@ UINT32 GetTimeRemainingOnSoldiersContract( SOLDIERTYPE *pSoldier );
|
||||
UINT32 GetTimeRemainingOnSoldiersInsuranceContract( SOLDIERTYPE *pSoldier );
|
||||
void EnableDisableIndividualInsuranceContractButton( UINT8 ubMercIDForMercInForm1, UINT32 *puiAcceptButton );
|
||||
BOOLEAN CanSoldierExtendInsuranceContract( SOLDIERTYPE *pSoldier );
|
||||
INT32 CalculateSoldiersInsuranceContractLength( SOLDIERTYPE *pSoldier );
|
||||
INT32 CalcStartDayOfInsurance( SOLDIERTYPE *pSoldier );
|
||||
INT32 CalculateSoldiersInsuranceContractLength( SOLDIERTYPE *pSoldier );
|
||||
INT32 CalcStartDayOfInsurance( SOLDIERTYPE *pSoldier );
|
||||
|
||||
BOOLEAN AreAnyAimMercsOnTeam( );
|
||||
//ppp
|
||||
@@ -394,12 +394,14 @@ void RenderInsuranceContract()
|
||||
{
|
||||
sMercID = gubInsuranceMercArray[ sNextMercID ];
|
||||
|
||||
pSoldier = &Menptr[ GetSoldierIDFromMercID( (UINT8) sMercID ) ];
|
||||
|
||||
if( ( sMercID != -1 ) && MercIsInsurable( pSoldier ) )
|
||||
SoldierID ID = GetSoldierIDFromMercID( sMercID );
|
||||
if ( ID != NOBODY )
|
||||
{
|
||||
DisplayOrderGrid( ubCount, (UINT8)sMercID );
|
||||
ubCount++;
|
||||
if( ( sMercID != -1 ) && MercIsInsurable( ID ) )
|
||||
{
|
||||
DisplayOrderGrid( ubCount, (UINT8)sMercID );
|
||||
ubCount++;
|
||||
}
|
||||
}
|
||||
|
||||
sNextMercID++;
|
||||
@@ -499,18 +501,22 @@ void BtnInsContractNextButtonCallBack(GUI_BUTTON *btn,INT32 reason)
|
||||
|
||||
BOOLEAN DisplayOrderGrid( UINT8 ubGridNumber, UINT8 ubMercID )
|
||||
{
|
||||
VOBJECT_DESC VObjectDesc;
|
||||
HVOBJECT hPixHandle;
|
||||
UINT16 usPosX, usPosY;
|
||||
UINT32 uiInsMercFaceImage;
|
||||
INT32 iCostOfContract=0;
|
||||
char sTemp[100];
|
||||
CHAR16 sText[800];
|
||||
BOOLEAN fDisplayMercContractStateTextColorInRed = FALSE;
|
||||
|
||||
SOLDIERTYPE *pSoldier = &Menptr[ GetSoldierIDFromMercID( ubMercID ) ];
|
||||
VOBJECT_DESC VObjectDesc;
|
||||
HVOBJECT hPixHandle;
|
||||
UINT16 usPosX, usPosY;
|
||||
UINT32 uiInsMercFaceImage;
|
||||
INT32 iCostOfContract=0;
|
||||
char sTemp[100];
|
||||
CHAR16 sText[800];
|
||||
BOOLEAN fDisplayMercContractStateTextColorInRed = FALSE;
|
||||
SoldierID usID = GetSoldierIDFromMercID( ubMercID );
|
||||
|
||||
if ( usID == NOBODY )
|
||||
{
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
SOLDIERTYPE *pSoldier = usID;
|
||||
usPosX=usPosY=0;
|
||||
|
||||
switch( ubGridNumber )
|
||||
@@ -747,8 +753,8 @@ void BtnInsuranceAcceptClearForm1ButtonCallback(GUI_BUTTON *btn,INT32 reason)
|
||||
{
|
||||
if (btn->uiFlags & BUTTON_CLICKED_ON)
|
||||
{
|
||||
UINT8 ubButton = (UINT8) MSYS_GetBtnUserData( btn, 0 );
|
||||
UINT8 ubSoldierID = (UINT8) GetSoldierIDFromMercID( gubMercIDForMercInForm1 );
|
||||
UINT8 ubButton = (UINT8) MSYS_GetBtnUserData( btn, 0 );
|
||||
SoldierID ubSoldierID = GetSoldierIDFromMercID( gubMercIDForMercInForm1 );
|
||||
|
||||
btn->uiFlags &= (~BUTTON_CLICKED_ON );
|
||||
|
||||
@@ -759,7 +765,7 @@ void BtnInsuranceAcceptClearForm1ButtonCallback(GUI_BUTTON *btn,INT32 reason)
|
||||
HandleAcceptButton( ubSoldierID, 1 );
|
||||
|
||||
//specify the length of the insurance contract
|
||||
Menptr[ ubSoldierID ].iTotalLengthOfInsuranceContract = gsForm1InsuranceLengthNumber;
|
||||
ubSoldierID->iTotalLengthOfInsuranceContract = gsForm1InsuranceLengthNumber;
|
||||
|
||||
//reset the insurance length
|
||||
gsForm1InsuranceLengthNumber = 0;
|
||||
@@ -791,8 +797,8 @@ void BtnInsuranceAcceptClearForm2ButtonCallback(GUI_BUTTON *btn,INT32 reason)
|
||||
{
|
||||
if (btn->uiFlags & BUTTON_CLICKED_ON)
|
||||
{
|
||||
UINT8 ubButton = (UINT8) MSYS_GetBtnUserData( btn, 0 );
|
||||
UINT8 ubSoldierID = (UINT8) GetSoldierIDFromMercID( gubMercIDForMercInForm2 );
|
||||
UINT8 ubButton = (UINT8) MSYS_GetBtnUserData( btn, 0 );
|
||||
SoldierID ubSoldierID = GetSoldierIDFromMercID( gubMercIDForMercInForm2 );
|
||||
|
||||
btn->uiFlags &= (~BUTTON_CLICKED_ON );
|
||||
|
||||
@@ -803,7 +809,7 @@ void BtnInsuranceAcceptClearForm2ButtonCallback(GUI_BUTTON *btn,INT32 reason)
|
||||
HandleAcceptButton( ubSoldierID, 2 );
|
||||
|
||||
//specify the length of the insurance contract
|
||||
Menptr[ ubSoldierID ].iTotalLengthOfInsuranceContract = gsForm2InsuranceLengthNumber;
|
||||
ubSoldierID->iTotalLengthOfInsuranceContract = gsForm2InsuranceLengthNumber;
|
||||
|
||||
//reset the insurance length
|
||||
gsForm2InsuranceLengthNumber = 0;
|
||||
@@ -836,8 +842,8 @@ void BtnInsuranceAcceptClearForm3ButtonCallback(GUI_BUTTON *btn,INT32 reason)
|
||||
{
|
||||
if (btn->uiFlags & BUTTON_CLICKED_ON)
|
||||
{
|
||||
UINT8 ubButton = (UINT8) MSYS_GetBtnUserData( btn, 0 );
|
||||
UINT8 ubSoldierID = (UINT8) GetSoldierIDFromMercID( gubMercIDForMercInForm3 );
|
||||
UINT8 ubButton = (UINT8) MSYS_GetBtnUserData( btn, 0 );
|
||||
SoldierID ubSoldierID = GetSoldierIDFromMercID( gubMercIDForMercInForm3 );
|
||||
|
||||
btn->uiFlags &= (~BUTTON_CLICKED_ON );
|
||||
|
||||
@@ -848,7 +854,7 @@ void BtnInsuranceAcceptClearForm3ButtonCallback(GUI_BUTTON *btn,INT32 reason)
|
||||
HandleAcceptButton( ubSoldierID, 3 );
|
||||
|
||||
//specify the length of the insurance contract
|
||||
Menptr[ ubSoldierID ].iTotalLengthOfInsuranceContract = gsForm3InsuranceLengthNumber;
|
||||
ubSoldierID->iTotalLengthOfInsuranceContract = gsForm3InsuranceLengthNumber;
|
||||
|
||||
//reset the insurance length
|
||||
gsForm3InsuranceLengthNumber = 0;
|
||||
@@ -937,20 +943,17 @@ void SelectInsuranceContractRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason
|
||||
}
|
||||
}
|
||||
|
||||
INT8 CountInsurableMercs()
|
||||
UINT16 CountInsurableMercs()
|
||||
{
|
||||
INT16 cnt;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
INT16 bLastTeamID;
|
||||
INT8 bCount=0;
|
||||
UINT16 bCount = 0;
|
||||
|
||||
// Set locator to first merc
|
||||
cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
bLastTeamID = gTacticalStatus.Team[ gbPlayerNum ].bLastID;
|
||||
SoldierID Soldier = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
SoldierID bLastTeamID = gTacticalStatus.Team[ gbPlayerNum ].bLastID;
|
||||
|
||||
for ( pSoldier = MercPtrs[ cnt ]; cnt <= bLastTeamID; cnt++,pSoldier++)
|
||||
for ( ; Soldier <= bLastTeamID; ++Soldier)
|
||||
{
|
||||
if (MercIsInsurable(pSoldier))
|
||||
if (MercIsInsurable(Soldier))
|
||||
{
|
||||
bCount++;
|
||||
}
|
||||
@@ -1067,12 +1070,12 @@ void CreateDestroyInsuranceContractFormButtons( BOOLEAN fCreate)
|
||||
|
||||
|
||||
|
||||
void HandleAcceptButton( UINT8 ubSoldierID, UINT8 ubFormID )
|
||||
void HandleAcceptButton( SoldierID ubSoldierID, UINT8 ubFormID )
|
||||
{
|
||||
//passed in either 1,2,3 should be 0,1,2
|
||||
ubFormID--;
|
||||
|
||||
PurchaseOrExtendInsuranceForSoldier( &Menptr[ ubSoldierID ], CalculateSoldiersInsuranceContractLength( &Menptr[ ubSoldierID ] ) );
|
||||
PurchaseOrExtendInsuranceForSoldier( ubSoldierID, CalculateSoldiersInsuranceContractLength( ubSoldierID ) );
|
||||
|
||||
RenderInsuranceContract();
|
||||
}
|
||||
@@ -1088,33 +1091,29 @@ void HandleAcceptButton( UINT8 ubSoldierID, UINT8 ubFormID )
|
||||
// determines if a merc will run out of their insurance contract
|
||||
void DailyUpdateOfInsuredMercs()
|
||||
{
|
||||
INT16 cnt;
|
||||
INT16 bLastTeamID;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
SoldierID Soldier = gTacticalStatus.Team[gbPlayerNum].bFirstID;
|
||||
SoldierID bLastTeamID = gTacticalStatus.Team[gbPlayerNum].bLastID;
|
||||
|
||||
cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
bLastTeamID = gTacticalStatus.Team[ gbPlayerNum ].bLastID;
|
||||
|
||||
for ( pSoldier = MercPtrs[ cnt ]; cnt <= bLastTeamID; cnt++,pSoldier++)
|
||||
for ( ; Soldier <= bLastTeamID; ++Soldier)
|
||||
{
|
||||
//if the soldier is in the team array
|
||||
if( pSoldier->bActive )
|
||||
if( Soldier->bActive )
|
||||
{
|
||||
//if the merc has life insurance
|
||||
if( pSoldier->usLifeInsurance )
|
||||
if( Soldier->usLifeInsurance )
|
||||
{
|
||||
//if the merc wasn't just hired
|
||||
if( (INT16)GetWorldDay() != pSoldier->iStartOfInsuranceContract )
|
||||
if( (INT16)GetWorldDay() != Soldier->iStartOfInsuranceContract )
|
||||
{
|
||||
//if the contract has run out of time
|
||||
if( GetTimeRemainingOnSoldiersInsuranceContract( pSoldier ) <= 0 )
|
||||
if( GetTimeRemainingOnSoldiersInsuranceContract( Soldier ) <= 0 )
|
||||
{
|
||||
//if the soldier isn't dead
|
||||
if( !IsMercDead( pSoldier->ubProfile ) )
|
||||
if( !IsMercDead( Soldier->ubProfile ) )
|
||||
{
|
||||
pSoldier->usLifeInsurance = 0;
|
||||
pSoldier->iTotalLengthOfInsuranceContract = 0;
|
||||
pSoldier->iStartOfInsuranceContract = 0;
|
||||
Soldier->usLifeInsurance = 0;
|
||||
Soldier->iTotalLengthOfInsuranceContract = 0;
|
||||
Soldier->iStartOfInsuranceContract = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1139,7 +1138,7 @@ INT32 CalculateInsuranceContractCost( INT32 iLength, UINT8 ubMercID )
|
||||
SOLDIERTYPE *pSoldier;
|
||||
|
||||
|
||||
pSoldier = &Menptr[ GetSoldierIDFromMercID( ubMercID ) ];
|
||||
pSoldier = GetSoldierIDFromMercID( ubMercID );
|
||||
|
||||
|
||||
// only mercs with at least 2 days to go on their employment contract are insurable
|
||||
@@ -1248,20 +1247,16 @@ void InsContractNoMercsPopupCallBack( UINT8 bExitValue )
|
||||
|
||||
void BuildInsuranceArray()
|
||||
{
|
||||
INT16 cnt;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
INT16 bLastTeamID;
|
||||
|
||||
cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
bLastTeamID = gTacticalStatus.Team[ gbPlayerNum ].bLastID;
|
||||
SoldierID Soldier = gTacticalStatus.Team[gbPlayerNum].bFirstID;
|
||||
SoldierID bLastTeamID = gTacticalStatus.Team[gbPlayerNum].bLastID;
|
||||
gsMaxPlayersOnTeam = 0;
|
||||
|
||||
// store profile #s of all insurable mercs in an array
|
||||
for ( pSoldier = MercPtrs[ cnt ]; cnt <= bLastTeamID; cnt++,pSoldier++)
|
||||
for ( ; Soldier <= bLastTeamID; ++Soldier)
|
||||
{
|
||||
if( MercIsInsurable(pSoldier) )
|
||||
if( MercIsInsurable(Soldier) )
|
||||
{
|
||||
gubInsuranceMercArray[ gsMaxPlayersOnTeam ] = pSoldier->ubProfile;
|
||||
gubInsuranceMercArray[ gsMaxPlayersOnTeam ] = Soldier->ubProfile;
|
||||
gsMaxPlayersOnTeam++;
|
||||
}
|
||||
}
|
||||
@@ -1355,7 +1350,7 @@ BOOLEAN AddLifeInsurancePayout( SOLDIERTYPE *pSoldier )
|
||||
}
|
||||
|
||||
|
||||
void StartInsuranceInvestigation( UINT8 ubPayoutID )
|
||||
void StartInsuranceInvestigation( UINT16 ubPayoutID )
|
||||
{
|
||||
UINT8 ubDays;
|
||||
|
||||
@@ -1408,7 +1403,7 @@ void StartInsuranceInvestigation( UINT8 ubPayoutID )
|
||||
}
|
||||
|
||||
|
||||
void EndInsuranceInvestigation( UINT8 ubPayoutID )
|
||||
void EndInsuranceInvestigation( UINT16 ubPayoutID )
|
||||
{
|
||||
// send an email telling player the investigation is over
|
||||
if ( gMercProfiles[ LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].ubMercID ].ubSuspiciousDeath == VERY_SUSPICIOUS_DEATH )
|
||||
@@ -1455,14 +1450,14 @@ void EndInsuranceInvestigation( UINT8 ubPayoutID )
|
||||
|
||||
|
||||
//void InsuranceContractPayLifeInsuranceForDeadMerc( LIFE_INSURANCE_PAYOUT *pPayoutStruct )
|
||||
void InsuranceContractPayLifeInsuranceForDeadMerc( UINT8 ubPayoutID )
|
||||
void InsuranceContractPayLifeInsuranceForDeadMerc( UINT16 ubPayoutID )
|
||||
{
|
||||
//if the mercs id number is the same what is in the soldier array
|
||||
if( LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].ubSoldierID == Menptr[ LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].ubSoldierID ].ubID )
|
||||
if( LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].ubSoldierID == LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].ubSoldierID->ubID )
|
||||
{
|
||||
// and if the soldier is still active ( player hasn't removed carcass yet ), reset insurance flag
|
||||
if( Menptr[ LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].ubSoldierID ].bActive )
|
||||
Menptr[ LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].ubSoldierID ].usLifeInsurance = 0;
|
||||
if( LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].ubSoldierID->bActive )
|
||||
LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].ubSoldierID->usLifeInsurance = 0;
|
||||
}
|
||||
|
||||
//add transaction to players account
|
||||
@@ -1552,14 +1547,12 @@ void EnableDisableInsuranceContractAcceptButtons()
|
||||
|
||||
void EnableDisableIndividualInsuranceContractButton( UINT8 ubMercIDForMercInForm, UINT32 *puiAcceptButton )
|
||||
{
|
||||
INT16 sSoldierID = 0;
|
||||
|
||||
sSoldierID = GetSoldierIDFromMercID( ubMercIDForMercInForm );
|
||||
if( sSoldierID == - 1)
|
||||
SoldierID sSoldierID = GetSoldierIDFromMercID( ubMercIDForMercInForm );
|
||||
if( sSoldierID == NOBODY)
|
||||
return;
|
||||
|
||||
// if the soldiers contract can be extended, enable the button
|
||||
if( CanSoldierExtendInsuranceContract( &Menptr[ sSoldierID ] ) )
|
||||
if( CanSoldierExtendInsuranceContract( sSoldierID ) )
|
||||
EnableButton( *puiAcceptButton );
|
||||
|
||||
// else the soldier cant extend their insurance contract, disable the button
|
||||
@@ -1783,14 +1776,13 @@ INT32 CalcStartDayOfInsurance( SOLDIERTYPE *pSoldier )
|
||||
|
||||
BOOLEAN AreAnyAimMercsOnTeam( )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier = NULL;
|
||||
SoldierID Soldier = gTacticalStatus.Team[gbPlayerNum].bFirstID;
|
||||
SoldierID bLastTeamID = gTacticalStatus.Team[gbPlayerNum].bLastID;
|
||||
|
||||
for( int cnt = 0; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt )
|
||||
for( ; Soldier <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++Soldier)
|
||||
{
|
||||
pSoldier = MercPtrs[cnt];
|
||||
|
||||
//check to see if any of the mercs are AIM mercs
|
||||
if( pSoldier->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC )
|
||||
if( Soldier->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC )
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -18,9 +18,9 @@ void DailyUpdateOfInsuredMercs();
|
||||
//void InsuranceContractPayLifeInsuranceForDeadMerc( LIFE_INSURANCE_PAYOUT *pPayoutStruct );
|
||||
|
||||
BOOLEAN AddLifeInsurancePayout( SOLDIERTYPE *pSoldier );
|
||||
void InsuranceContractPayLifeInsuranceForDeadMerc( UINT8 ubPayoutID );
|
||||
void StartInsuranceInvestigation( UINT8 ubPayoutID );
|
||||
void EndInsuranceInvestigation( UINT8 ubPayoutID );
|
||||
void InsuranceContractPayLifeInsuranceForDeadMerc( UINT16 ubPayoutID );
|
||||
void StartInsuranceInvestigation( UINT16 ubPayoutID );
|
||||
void EndInsuranceInvestigation( UINT16 ubPayoutID );
|
||||
|
||||
INT32 CalculateInsuranceContractCost( INT32 iLength, UINT8 ubMercID );
|
||||
|
||||
@@ -28,4 +28,4 @@ void InsuranceContractEndGameShutDown();
|
||||
|
||||
void PurchaseOrExtendInsuranceForSoldier( SOLDIERTYPE *pSoldier, UINT32 uiInsuranceLength );
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
+3
-3
@@ -6243,7 +6243,7 @@ void PrintNumberOnTeam( void )
|
||||
{
|
||||
CHAR16 pString[ 32 ];
|
||||
SOLDIERTYPE *pSoldier, *pTeamSoldier;
|
||||
INT32 cnt=0;
|
||||
SoldierID cnt = 0;
|
||||
INT32 iCounter=0;
|
||||
UINT16 usPosX, usPosY, usFontHeight, usStrLength;
|
||||
|
||||
@@ -6256,9 +6256,9 @@ void PrintNumberOnTeam( void )
|
||||
// grab number on team
|
||||
pSoldier = MercPtrs[0];
|
||||
|
||||
for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID; cnt++, pTeamSoldier++)
|
||||
for ( ; cnt <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID; ++cnt )
|
||||
{
|
||||
pTeamSoldier = MercPtrs[ cnt ];
|
||||
pTeamSoldier = cnt;
|
||||
|
||||
if( ( pTeamSoldier->bActive)&&( !( pTeamSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) ) )
|
||||
{
|
||||
|
||||
+31
-36
@@ -340,13 +340,12 @@ BOOLEAN EnterMercCompareAnalyze()
|
||||
// We fill two dropdowns with all mercs on our team
|
||||
std::vector<std::pair<INT16, STR16> > mercvector;
|
||||
|
||||
SOLDIERTYPE* pSoldier = NULL;
|
||||
UINT16 id = gTacticalStatus.Team[gbPlayerNum].bFirstID;
|
||||
UINT16 lastid = gTacticalStatus.Team[gbPlayerNum].bLastID;
|
||||
for ( pSoldier = MercPtrs[id]; id <= lastid; ++id, pSoldier++ )
|
||||
SoldierID id = gTacticalStatus.Team[gbPlayerNum].bFirstID;
|
||||
SoldierID lastid = gTacticalStatus.Team[gbPlayerNum].bLastID;
|
||||
for ( ; id <= lastid; ++id)
|
||||
{
|
||||
if ( pSoldier->bActive && pSoldier->ubProfile != NO_PROFILE )
|
||||
mercvector.push_back( std::make_pair( pSoldier->ubProfile, gMercProfiles[pSoldier->ubProfile].zNickname ) );
|
||||
if ( id->bActive && id->ubProfile != NO_PROFILE )
|
||||
mercvector.push_back( std::make_pair( id->ubProfile, gMercProfiles[id->ubProfile].zNickname ) );
|
||||
}
|
||||
|
||||
DropDownTemplate<DROPDOWNNR_MERCCOMPARE1>::getInstance( ).SetEntries( mercvector );
|
||||
@@ -433,12 +432,12 @@ void RenderMercCompareAnalyze()
|
||||
|
||||
BOOLEAN DisplayMercData( UINT8 usProfileA, UINT8 usProfileB )
|
||||
{
|
||||
VOBJECT_DESC VObjectDesc;
|
||||
HVOBJECT hPixHandle;
|
||||
VOBJECT_DESC VObjectDesc;
|
||||
HVOBJECT hPixHandle;
|
||||
UINT16 usPosX, usPosY, usPosY2;
|
||||
UINT32 uiInsMercFaceImage;
|
||||
INT32 iCostOfContract = 0;
|
||||
char sTemp[100];
|
||||
char sTemp[100];
|
||||
CHAR16 sText[800];
|
||||
BOOLEAN fDisplayMercContractStateTextColorInRed = FALSE;
|
||||
|
||||
@@ -452,14 +451,14 @@ BOOLEAN DisplayMercData( UINT8 usProfileA, UINT8 usProfileB )
|
||||
if ( !pProfileA || !pProfileB )
|
||||
return FALSE;
|
||||
|
||||
INT16 idA = GetSoldierIDFromMercID( usProfileA );
|
||||
INT16 idB = GetSoldierIDFromMercID( usProfileB );
|
||||
SoldierID idA = GetSoldierIDFromMercID( usProfileA );
|
||||
SoldierID idB = GetSoldierIDFromMercID( usProfileB );
|
||||
|
||||
if ( idA < 0 || idB < 0 )
|
||||
if ( idA == NOBODY || idB == NOBODY )
|
||||
return FALSE;
|
||||
|
||||
SOLDIERTYPE* pSoldierA = MercPtrs[idA];
|
||||
SOLDIERTYPE* pSoldierB = MercPtrs[idB];
|
||||
SOLDIERTYPE* pSoldierA = idA;
|
||||
SOLDIERTYPE* pSoldierB = idB;
|
||||
|
||||
if ( !pSoldierA || !pSoldierB )
|
||||
return FALSE;
|
||||
@@ -976,17 +975,16 @@ BOOLEAN EnterMercCompareMatrix( )
|
||||
// create a map of all current squads with at least 2 members
|
||||
std::map<INT16, INT16> squadmap;
|
||||
|
||||
SOLDIERTYPE* pSoldier = NULL;
|
||||
UINT16 id = gTacticalStatus.Team[gbPlayerNum].bFirstID;
|
||||
UINT16 lastid = gTacticalStatus.Team[gbPlayerNum].bLastID;
|
||||
for ( pSoldier = MercPtrs[id]; id <= lastid; ++id, pSoldier++ )
|
||||
SoldierID id = gTacticalStatus.Team[gbPlayerNum].bFirstID;
|
||||
SoldierID lastid = gTacticalStatus.Team[gbPlayerNum].bLastID;
|
||||
for ( ; id <= lastid; ++id )
|
||||
{
|
||||
if ( pSoldier->bActive && pSoldier->ubProfile != NO_PROFILE && pSoldier->bAssignment < ON_DUTY )
|
||||
if ( id->bActive && id->ubProfile != NO_PROFILE && id->bAssignment < ON_DUTY )
|
||||
{
|
||||
if ( squadmap.find( pSoldier->bAssignment ) == squadmap.end() )
|
||||
squadmap[pSoldier->bAssignment] = 1;
|
||||
if ( squadmap.find( id->bAssignment ) == squadmap.end() )
|
||||
squadmap[id->bAssignment] = 1;
|
||||
else
|
||||
++squadmap[pSoldier->bAssignment];
|
||||
++squadmap[id->bAssignment];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1079,15 +1077,14 @@ void RenderMercCompareMatrix( )
|
||||
|
||||
// display a table with all squadmembers
|
||||
std::vector<UINT8> squadvector;
|
||||
SOLDIERTYPE* pSoldier = NULL;
|
||||
UINT16 id = gTacticalStatus.Team[gbPlayerNum].bFirstID;
|
||||
UINT16 lastid = gTacticalStatus.Team[gbPlayerNum].bLastID;
|
||||
for ( pSoldier = MercPtrs[id]; id <= lastid; ++id, pSoldier++ )
|
||||
SoldierID id = gTacticalStatus.Team[gbPlayerNum].bFirstID;
|
||||
SoldierID lastid = gTacticalStatus.Team[gbPlayerNum].bLastID;
|
||||
for ( ; id <= lastid; ++id )
|
||||
{
|
||||
if ( pSoldier->bActive && pSoldier->ubProfile != NO_PROFILE && pSoldier->bAssignment == gSquadToShow )
|
||||
if ( id->bActive && id->ubProfile != NO_PROFILE && id->bAssignment == gSquadToShow )
|
||||
{
|
||||
// remember squamember
|
||||
squadvector.push_back( pSoldier->ubProfile );
|
||||
squadvector.push_back( id->ubProfile );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1117,13 +1114,12 @@ void RenderMercCompareMatrix( )
|
||||
|
||||
for ( std::vector<UINT8>::iterator it = squadvector.begin(); it != itend; ++it )
|
||||
{
|
||||
INT16 idA = GetSoldierIDFromMercID( (*it) );
|
||||
SoldierID idA = GetSoldierIDFromMercID( (*it) );
|
||||
|
||||
if ( idA < 0 )
|
||||
if ( idA == NOBODY )
|
||||
continue;
|
||||
|
||||
SOLDIERTYPE* pSoldierA = MercPtrs[idA];
|
||||
|
||||
SOLDIERTYPE* pSoldierA = idA;
|
||||
if ( !pSoldierA )
|
||||
continue;
|
||||
|
||||
@@ -1140,9 +1136,9 @@ void RenderMercCompareMatrix( )
|
||||
|
||||
for ( std::vector<UINT8>::iterator it2 = squadvector.begin( ); it2 != itend; ++it2 )
|
||||
{
|
||||
INT16 idB = GetSoldierIDFromMercID( (*it2) );
|
||||
SoldierID idB = GetSoldierIDFromMercID( (*it2) );
|
||||
|
||||
if ( idB < 0 )
|
||||
if ( idB == NOBODY )
|
||||
continue;
|
||||
|
||||
if ( idA == idB )
|
||||
@@ -1151,8 +1147,7 @@ void RenderMercCompareMatrix( )
|
||||
continue;
|
||||
}
|
||||
|
||||
SOLDIERTYPE* pSoldierB = MercPtrs[idB];
|
||||
|
||||
SOLDIERTYPE* pSoldierB = idB;
|
||||
if ( !pSoldierB )
|
||||
continue;
|
||||
|
||||
|
||||
+3
-2
@@ -980,7 +980,8 @@ void BtnFileBoxButtonCallback(GUI_BUTTON *btn,INT32 reason)
|
||||
void DailyUpdateOfMercSite( UINT16 usDate)
|
||||
{
|
||||
SOLDIERTYPE *pSoldier;
|
||||
INT16 sSoldierID, i;
|
||||
SoldierID sSoldierID;
|
||||
INT16 i;
|
||||
UINT8 ubMercID;
|
||||
INT32 iNumDays;
|
||||
|
||||
@@ -1006,7 +1007,7 @@ void DailyUpdateOfMercSite( UINT16 usDate)
|
||||
// continue;
|
||||
|
||||
sSoldierID = GetSoldierIDFromMercID( ubMercID );
|
||||
pSoldier = MercPtrs[ sSoldierID ];
|
||||
pSoldier = sSoldierID;
|
||||
|
||||
//if the merc is dead, dont advance the contract length
|
||||
if( !IsMercDead( pSoldier->ubProfile ) )
|
||||
|
||||
+518
-546
File diff suppressed because it is too large
Load Diff
@@ -39,7 +39,7 @@ namespace AI
|
||||
if(i.event_type_ == AIInputData::auditive_event)
|
||||
return os<<"sound: "<<i.noise_maker_<<" made a sound at "<<i.grid_no_<<", lvl "<<i.level_<<" vol "<<i.volume_<<" type "<<i.type_;
|
||||
if(i.event_type_ == AIInputData::visual_event)
|
||||
return os<<"visual: "<<(int)i.opponent_->ubID<<" was seen at "<<i.grid_no_<<", lvl "<<i.level_<<" caller1 "<<i.caller1_<<" caller2 "<<i.caller2_;
|
||||
return os<<"visual: "<<i.opponent_->ubID.i<<" was seen at "<<i.grid_no_<<", lvl "<<i.level_<<" caller1 "<<i.caller1_<<" caller2 "<<i.caller2_;
|
||||
return os;
|
||||
}
|
||||
|
||||
|
||||
+143
-146
@@ -382,22 +382,22 @@ typedef struct
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UINT8 ubProfileID;
|
||||
UINT16 ubProfileID;
|
||||
|
||||
} send_dismiss_struct;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UINT8 usSoldierID;
|
||||
FLOAT dNewXPos;
|
||||
FLOAT dNewYPos;
|
||||
SoldierID usSoldierID;
|
||||
FLOAT dNewXPos;
|
||||
FLOAT dNewYPos;
|
||||
|
||||
} gui_pos;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UINT8 usSoldierID;
|
||||
INT16 usNewDirection;
|
||||
SoldierID usSoldierID;
|
||||
INT16 usNewDirection;
|
||||
|
||||
} gui_dir;
|
||||
|
||||
@@ -425,12 +425,12 @@ typedef struct
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UINT8 ubID;
|
||||
SoldierID ubID;
|
||||
INT8 bTeam;
|
||||
UINT8 gubOutOfTurnPersons;
|
||||
UINT8 gubOutOfTurnOrder[MAXMERCS];
|
||||
UINT16 gubOutOfTurnPersons;
|
||||
UINT16 gubOutOfTurnOrder[MAXMERCS];
|
||||
BOOLEAN fMarkInterruptOccurred;
|
||||
UINT8 Interrupted;
|
||||
SoldierID Interrupted;
|
||||
} INT_STRUCT;
|
||||
|
||||
typedef struct
|
||||
@@ -470,7 +470,7 @@ typedef struct
|
||||
float dForceY;
|
||||
float dForceZ;
|
||||
UINT32 sTargetGridNo;
|
||||
UINT8 ubID;
|
||||
SoldierID ubID;
|
||||
UINT8 ubActionCode;
|
||||
UINT32 uiActionData;
|
||||
UINT16 usItem;
|
||||
@@ -486,7 +486,7 @@ typedef struct
|
||||
float dZ;
|
||||
INT32 sGridNo;
|
||||
bool bWasDud;
|
||||
UINT8 ubOwnerID;
|
||||
SoldierID ubOwnerID;
|
||||
INT32 RealObjectID; // the local ID on the initiating client
|
||||
UINT32 uiPreRandomIndex; // send out our current pre-random index
|
||||
} grenade_result;
|
||||
@@ -494,7 +494,7 @@ typedef struct
|
||||
typedef struct
|
||||
{
|
||||
UINT32 sGridNo;
|
||||
UINT8 ubID;
|
||||
SoldierID ubID;
|
||||
UINT16 usItem;
|
||||
UINT8 ubItemStatus;
|
||||
UINT32 uiWorldIndex; // the local World Index of this bomb on its creators client
|
||||
@@ -506,7 +506,7 @@ typedef struct
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UINT8 ubID;
|
||||
SoldierID ubID;
|
||||
UINT32 uiWorldItemIndex;
|
||||
UINT8 ubMPTeamIndex;
|
||||
UINT32 uiPreRandomIndex; // send out our current pre-random index
|
||||
@@ -516,7 +516,7 @@ typedef struct
|
||||
{
|
||||
UINT32 uiWorldItemIndex;
|
||||
UINT8 ubMPTeamIndex;
|
||||
UINT8 ubID;
|
||||
SoldierID ubID;
|
||||
UINT32 sGridNo;
|
||||
UINT32 uiPreRandomIndex; // send out our current pre-random index
|
||||
} disarm_struct;
|
||||
@@ -526,7 +526,7 @@ typedef struct
|
||||
INT32 sGridNo;
|
||||
UINT8 ubRadius;
|
||||
UINT16 usItem;
|
||||
UINT8 ubOwner;
|
||||
SoldierID ubOwner;
|
||||
BOOLEAN fSubsequent;
|
||||
INT8 bLevel;
|
||||
INT32 iSmokeEffectID;
|
||||
@@ -535,18 +535,18 @@ typedef struct
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UINT8 ubDamageFunc; // 1 - gas damage , 2 - explosive damage
|
||||
UINT8 ubSoldierID;
|
||||
UINT16 usExplosiveClassID;
|
||||
INT16 sSubsequent;
|
||||
BOOL fRecompileMovementCosts;
|
||||
INT16 sWoundAmt;
|
||||
INT16 sBreathAmt;
|
||||
UINT8 ubAttackerID;
|
||||
UINT16 usItem;
|
||||
INT32 sBombGridNo;
|
||||
UINT32 uiDist;
|
||||
UINT32 uiPreRandomIndex;
|
||||
UINT8 ubDamageFunc; // 1 - gas damage , 2 - explosive damage
|
||||
SoldierID ubSoldierID;
|
||||
UINT16 usExplosiveClassID;
|
||||
INT16 sSubsequent;
|
||||
BOOL fRecompileMovementCosts;
|
||||
INT16 sWoundAmt;
|
||||
INT16 sBreathAmt;
|
||||
SoldierID ubAttackerID;
|
||||
UINT16 usItem;
|
||||
INT32 sBombGridNo;
|
||||
UINT32 uiDist;
|
||||
UINT32 uiPreRandomIndex;
|
||||
} explosiondamage_struct;
|
||||
|
||||
bullets_table bTable[11][50];
|
||||
@@ -566,7 +566,7 @@ int client_progress[4];
|
||||
int TEAM;
|
||||
|
||||
UINT8 netbTeam;
|
||||
UINT8 ubID_prefix;
|
||||
UINT16 ubID_prefix;
|
||||
|
||||
bool is_connected=false;
|
||||
bool is_connecting=false;
|
||||
@@ -802,7 +802,7 @@ void recievePATH(RPCParameters *rpcParameters)
|
||||
|
||||
EV_S_SENDPATHTONETWORK* SNetPath = (EV_S_SENDPATHTONETWORK*)rpcParameters->input;
|
||||
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[ SNetPath->usSoldierID ];
|
||||
SOLDIERTYPE *pSoldier = SNetPath->usSoldierID;
|
||||
|
||||
|
||||
memcpy(pSoldier->pathing.usPathingData, SNetPath->usPathData,sizeof(UINT16)*30);
|
||||
@@ -863,7 +863,7 @@ void recieveSTANCE(RPCParameters *rpcParameters)
|
||||
|
||||
EV_S_CHANGESTANCE* SChangeStance = (EV_S_CHANGESTANCE*)rpcParameters->input;
|
||||
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[ SChangeStance->usSoldierID ];
|
||||
SOLDIERTYPE *pSoldier = SChangeStance->usSoldierID;
|
||||
|
||||
pSoldier->ChangeSoldierStance( SChangeStance->ubNewStance );
|
||||
|
||||
@@ -906,7 +906,7 @@ void recieveDIR(RPCParameters *rpcParameters)
|
||||
EV_S_SETDESIREDDIRECTION* SSetDesiredDirection = (EV_S_SETDESIREDDIRECTION*)rpcParameters->input;
|
||||
|
||||
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[ SSetDesiredDirection->usSoldierID ];
|
||||
SOLDIERTYPE *pSoldier = SSetDesiredDirection->usSoldierID;
|
||||
|
||||
pSoldier->EVENT_SetSoldierDesiredDirection( SSetDesiredDirection->usDesiredDirection );
|
||||
|
||||
@@ -945,7 +945,7 @@ void recieveFIRE(RPCParameters *rpcParameters)
|
||||
EV_S_BEGINFIREWEAPON* SBeginFireWeapon = (EV_S_BEGINFIREWEAPON*)rpcParameters->input;
|
||||
//ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"SendBeginFireWeaponEvent" );
|
||||
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[ SBeginFireWeapon->usSoldierID ];
|
||||
SOLDIERTYPE *pSoldier = SBeginFireWeapon->usSoldierID;
|
||||
|
||||
pSoldier->sTargetGridNo = SBeginFireWeapon->sTargetGridNo;
|
||||
pSoldier->bTargetLevel = SBeginFireWeapon->bTargetLevel;
|
||||
@@ -967,7 +967,7 @@ void send_hit( EV_S_WEAPONHIT *SWeaponHit )
|
||||
|
||||
memcpy( &weaphit_struct , SWeaponHit, sizeof( EV_S_WEAPONHIT ));
|
||||
|
||||
UINT16 usSoldierID=weaphit_struct.usSoldierID;
|
||||
SoldierID usSoldierID = weaphit_struct.usSoldierID;
|
||||
|
||||
if(SWeaponHit->usSoldierID < 20)weaphit_struct.usSoldierID = weaphit_struct.usSoldierID+ubID_prefix;
|
||||
if(SWeaponHit->ubAttackerID < 20)weaphit_struct.ubAttackerID = weaphit_struct.ubAttackerID+ubID_prefix;
|
||||
@@ -981,9 +981,9 @@ void recieveHIT(RPCParameters *rpcParameters)
|
||||
|
||||
EV_S_WEAPONHIT* SWeaponHit = (EV_S_WEAPONHIT*)rpcParameters->input;
|
||||
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[ SWeaponHit->usSoldierID ];
|
||||
UINT16 usSoldierID;
|
||||
UINT8 ubAttackerID;
|
||||
SOLDIERTYPE *pSoldier = SWeaponHit->usSoldierID;
|
||||
SoldierID usSoldierID;
|
||||
SoldierID ubAttackerID;
|
||||
|
||||
if((SWeaponHit->usSoldierID >= ubID_prefix) && (SWeaponHit->usSoldierID < (ubID_prefix+6))) // within our netbTeam range...
|
||||
usSoldierID = (SWeaponHit->usSoldierID - ubID_prefix);
|
||||
@@ -1010,7 +1010,7 @@ void recieveHIT(RPCParameters *rpcParameters)
|
||||
}
|
||||
|
||||
|
||||
void send_dismiss(UINT8 ubCurrentSoldierID)
|
||||
void send_dismiss(UINT16 ubCurrentSoldierID)
|
||||
{
|
||||
send_dismiss_struct sDismissMerc;
|
||||
|
||||
@@ -1019,7 +1019,7 @@ void send_dismiss(UINT8 ubCurrentSoldierID)
|
||||
client->RPC("sendDISMISS",(const char*)&sDismissMerc, (int)sizeof(send_dismiss_struct)*8, HIGH_PRIORITY, RELIABLE, 0, UNASSIGNED_SYSTEM_ADDRESS, true, 0, UNASSIGNED_NETWORK_ID,0);
|
||||
}
|
||||
|
||||
void send_hire( UINT8 iNewIndex, UINT8 ubCurrentSoldier, INT16 iTotalContractLength, BOOLEAN fCopyProfileItemsOver)
|
||||
void send_hire( SoldierID iNewIndex, UINT8 ubCurrentSoldier, INT16 iTotalContractLength, BOOLEAN fCopyProfileItemsOver)
|
||||
{
|
||||
send_hire_struct sHireMerc;
|
||||
|
||||
@@ -1028,7 +1028,7 @@ void send_hire( UINT8 iNewIndex, UINT8 ubCurrentSoldier, INT16 iTotalContractLen
|
||||
sHireMerc.fCopyProfileItemsOver=fCopyProfileItemsOver;
|
||||
sHireMerc.bTeam=netbTeam;
|
||||
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[ iNewIndex ];
|
||||
SOLDIERTYPE *pSoldier = iNewIndex;
|
||||
|
||||
UINT8 sectorEdge = cStartingSectorEdge;
|
||||
|
||||
@@ -1082,8 +1082,7 @@ void recieveHIRE(RPCParameters *rpcParameters)
|
||||
send_hire_struct* sHireMerc = (send_hire_struct*)rpcParameters->input;
|
||||
|
||||
SOLDIERTYPE *pSoldier;
|
||||
UINT8 iNewIndex;
|
||||
UINT8 ubCount=0;
|
||||
SoldierID iNewIndex;
|
||||
|
||||
SOLDIERCREATE_STRUCT MercCreateStruct;
|
||||
BOOLEAN fReturn = FALSE;
|
||||
@@ -1098,7 +1097,7 @@ void recieveHIRE(RPCParameters *rpcParameters)
|
||||
|
||||
TacticalCreateSoldier( &MercCreateStruct, &iNewIndex ) ;
|
||||
|
||||
pSoldier = &Menptr[iNewIndex];
|
||||
pSoldier = iNewIndex;
|
||||
pSoldier->flags.uiStatusFlags |= SOLDIER_PC;
|
||||
gMercProfiles[ pSoldier->ubProfile ].ubMiscFlags |= PROFILE_MISC_FLAG_RECRUITED;
|
||||
|
||||
@@ -1158,7 +1157,7 @@ void send_gui_pos(SOLDIERTYPE *pSoldier, FLOAT dNewXPos, FLOAT dNewYPos)
|
||||
{
|
||||
gui_pos gnPOS;
|
||||
|
||||
gnPOS.usSoldierID = (pSoldier->ubID)+ubID_prefix;
|
||||
gnPOS.usSoldierID = pSoldier->ubID + ubID_prefix;
|
||||
|
||||
gnPOS.dNewXPos = dNewXPos;
|
||||
gnPOS.dNewYPos = dNewYPos;
|
||||
@@ -1170,7 +1169,7 @@ void recieveguiPOS(RPCParameters *rpcParameters)
|
||||
{
|
||||
gui_pos* gnPOS = (gui_pos*)rpcParameters->input;
|
||||
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[ gnPOS->usSoldierID ];
|
||||
SOLDIERTYPE *pSoldier = gnPOS->usSoldierID;
|
||||
|
||||
INT32 sNewGridNo;
|
||||
|
||||
@@ -1196,7 +1195,7 @@ void recieveguiDIR(RPCParameters *rpcParameters)
|
||||
{
|
||||
gui_dir* gnDIR = (gui_dir*)rpcParameters->input;
|
||||
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[ gnDIR->usSoldierID ];
|
||||
SOLDIERTYPE *pSoldier = gnDIR->usSoldierID;
|
||||
|
||||
pSoldier->EVENT_SetSoldierDirection( gnDIR->usNewDirection );
|
||||
}
|
||||
@@ -1276,7 +1275,7 @@ UINT8 numenemyLAN( UINT8 ubSectorX, UINT8 ubSectorY )
|
||||
return ubNumEnemies;
|
||||
}
|
||||
|
||||
void send_AI( SOLDIERCREATE_STRUCT *pCreateStruct, UINT8 *pubID )
|
||||
void send_AI( SOLDIERCREATE_STRUCT *pCreateStruct )
|
||||
{
|
||||
AI_STRUCT send_inv;
|
||||
send_inv.standard_data = *pCreateStruct;
|
||||
@@ -1291,7 +1290,7 @@ void send_AI( SOLDIERCREATE_STRUCT *pCreateStruct, UINT8 *pubID )
|
||||
|
||||
void recieveAI (RPCParameters *rpcParameters)
|
||||
{
|
||||
UINT8 iNewIndex;
|
||||
SoldierID iNewIndex;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
AI_STRUCT* send_inv = (AI_STRUCT*)rpcParameters->input;
|
||||
|
||||
@@ -1355,7 +1354,7 @@ void recieveAI (RPCParameters *rpcParameters)
|
||||
new_standard_data.fPlayerPlan=1;
|
||||
|
||||
TacticalCreateSoldier( &new_standard_data, &iNewIndex );
|
||||
pSoldier = &Menptr[iNewIndex];
|
||||
pSoldier = iNewIndex;
|
||||
pSoldier->flags.uiStatusFlags |= SOLDIER_PC;
|
||||
|
||||
AddSoldierToSector( iNewIndex );
|
||||
@@ -1900,7 +1899,7 @@ void recieveSTOP (RPCParameters *rpcParameters)
|
||||
{
|
||||
EV_S_STOP_MERC* SStopMerc =(EV_S_STOP_MERC*)rpcParameters->input;
|
||||
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[ SStopMerc->usSoldierID ];
|
||||
SOLDIERTYPE *pSoldier = SStopMerc->usSoldierID;
|
||||
|
||||
pSoldier->EVENT_InternalSetSoldierPosition( SStopMerc->sXPos, SStopMerc->sYPos,FALSE, FALSE, FALSE );
|
||||
pSoldier->EVENT_SetSoldierDirection( SStopMerc->ubDirection );
|
||||
@@ -1914,10 +1913,10 @@ void send_interrupt (SOLDIERTYPE *pSoldier)
|
||||
|
||||
INT.ubID = pSoldier->ubID;
|
||||
INT.bTeam = pSoldier->bTeam;
|
||||
memcpy(INT.gubOutOfTurnOrder, gubOutOfTurnOrder, sizeof(UINT8) * MAXMERCS);
|
||||
memcpy(INT.gubOutOfTurnOrder, gubOutOfTurnOrder, sizeof(UINT16) * MAXMERCS);
|
||||
INT.gubOutOfTurnPersons = gubOutOfTurnPersons;
|
||||
|
||||
INT.Interrupted=gusSelectedSoldier+ubID_prefix;
|
||||
INT.Interrupted = gusSelectedSoldier + ubID_prefix;
|
||||
|
||||
if(INT.bTeam==0)
|
||||
{
|
||||
@@ -1945,7 +1944,7 @@ void send_interrupt (SOLDIERTYPE *pSoldier)
|
||||
if (cGameType == MP_TYPE_COOP)
|
||||
{
|
||||
INT_STRUCT* INT = (INT_STRUCT*)rpcParameters->input;
|
||||
SOLDIERTYPE* pOpponent = MercPtrs[ INT->Interrupted];
|
||||
SOLDIERTYPE* pOpponent = INT->Interrupted;
|
||||
|
||||
if( INT->bTeam == netbTeam || is_server)//its for us or we are server and its for AI which we control
|
||||
{
|
||||
@@ -1970,7 +1969,7 @@ void send_interrupt (SOLDIERTYPE *pSoldier)
|
||||
INT->gubOutOfTurnOrder[i]=INT->gubOutOfTurnOrder[i]-ubID_prefix;
|
||||
}
|
||||
}
|
||||
memcpy(gubOutOfTurnOrder,INT->gubOutOfTurnOrder, sizeof(UINT8) * MAXMERCS);
|
||||
memcpy(gubOutOfTurnOrder,INT->gubOutOfTurnOrder, sizeof(UINT16) * MAXMERCS);
|
||||
gubOutOfTurnPersons = INT->gubOutOfTurnPersons;
|
||||
|
||||
if(INT->bTeam==netbTeam)//for us
|
||||
@@ -1979,7 +1978,7 @@ void send_interrupt (SOLDIERTYPE *pSoldier)
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Recieved interrupt between %s and %s.", TeamNameStrings[pOpponent->bTeam], TeamNameStrings[INT->bTeam] );
|
||||
|
||||
//start interrupt turn //real interrupt code
|
||||
SOLDIERTYPE* pSoldier = MercPtrs[ INT->ubID ];
|
||||
SOLDIERTYPE* pSoldier = INT->ubID;
|
||||
ManSeesMan(pSoldier,pOpponent,pOpponent->sGridNo,pOpponent->pathing.bLevel,2,1);
|
||||
StartInterrupt();
|
||||
}
|
||||
@@ -1995,7 +1994,7 @@ void send_interrupt (SOLDIERTYPE *pSoldier)
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Interrupt of %s awarded to you.", TeamNameStrings[pOpponent->bTeam] );//was MPClientMessage[37], can be reconnected if text updated and translated
|
||||
|
||||
SOLDIERTYPE* pSoldier = MercPtrs[ INT->ubID ];
|
||||
SOLDIERTYPE* pSoldier = INT->ubID;
|
||||
ManSeesMan(pSoldier,pOpponent,pOpponent->sGridNo,pOpponent->pathing.bLevel,2,1);
|
||||
StartInterrupt();
|
||||
}
|
||||
@@ -2004,7 +2003,7 @@ void send_interrupt (SOLDIERTYPE *pSoldier)
|
||||
else
|
||||
{
|
||||
INT_STRUCT* INT = (INT_STRUCT*)rpcParameters->input;
|
||||
SOLDIERTYPE* pOpponent = MercPtrs[ INT->Interrupted];
|
||||
SOLDIERTYPE* pOpponent = INT->Interrupted;
|
||||
|
||||
if(INT->bTeam==netbTeam)//for us
|
||||
{
|
||||
@@ -2018,7 +2017,7 @@ void send_interrupt (SOLDIERTYPE *pSoldier)
|
||||
INT->gubOutOfTurnOrder[i]=INT->gubOutOfTurnOrder[i]-ubID_prefix;
|
||||
}
|
||||
}
|
||||
memcpy(gubOutOfTurnOrder,INT->gubOutOfTurnOrder, sizeof(UINT8) * MAXMERCS);
|
||||
memcpy(gubOutOfTurnOrder,INT->gubOutOfTurnOrder, sizeof(UINT16) * MAXMERCS);
|
||||
gubOutOfTurnPersons = INT->gubOutOfTurnPersons;
|
||||
|
||||
AddTopMessage( PLAYER_INTERRUPT_MESSAGE, TeamTurnString[ INT->bTeam ] );
|
||||
@@ -2029,7 +2028,7 @@ void send_interrupt (SOLDIERTYPE *pSoldier)
|
||||
if( INT->bTeam != 0)//not for our team - hayden
|
||||
{
|
||||
//stop moving merc who was interrupted and init UI bar
|
||||
SOLDIERTYPE* pMerc = MercPtrs[ INT->ubID ];
|
||||
SOLDIERTYPE* pMerc = INT->ubID;
|
||||
pMerc->HaultSoldierFromSighting(TRUE);
|
||||
FreezeInterfaceForEnemyTurn();
|
||||
InitEnemyUIBar( 0, 0 );
|
||||
@@ -2050,7 +2049,7 @@ void send_interrupt (SOLDIERTYPE *pSoldier)
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Interrupt of %s awarded to you.", TeamNameStrings[pOpponent->bTeam] );//was MPClientMessage[37], can be reconnected if text updated and translated
|
||||
|
||||
SOLDIERTYPE* pSoldier = MercPtrs[ INT->ubID ];
|
||||
SOLDIERTYPE* pSoldier = INT->ubID;
|
||||
ManSeesMan(pSoldier,pOpponent,pOpponent->sGridNo,pOpponent->pathing.bLevel,2,1);
|
||||
StartInterrupt();
|
||||
}
|
||||
@@ -2134,7 +2133,7 @@ void end_interrupt ( BOOLEAN fMarkInterruptOccurred )
|
||||
INT_STRUCT INT;
|
||||
INT.ubID = pSoldier->ubID;
|
||||
INT.bTeam = pSoldier->bTeam;
|
||||
memcpy(INT.gubOutOfTurnOrder, gubOutOfTurnOrder, sizeof(UINT8) * MAXMERCS);
|
||||
memcpy(INT.gubOutOfTurnOrder, gubOutOfTurnOrder, sizeof(UINT16) * MAXMERCS);
|
||||
INT.gubOutOfTurnPersons = gubOutOfTurnPersons;
|
||||
INT.fMarkInterruptOccurred=fMarkInterruptOccurred;
|
||||
if(is_server)Sawarded=false;
|
||||
@@ -2175,7 +2174,7 @@ void resume_turn(RPCParameters *rpcParameters)
|
||||
}
|
||||
}
|
||||
|
||||
memcpy(gubOutOfTurnOrder,INT->gubOutOfTurnOrder, sizeof(UINT8) * MAXMERCS);
|
||||
memcpy(gubOutOfTurnOrder,INT->gubOutOfTurnOrder, sizeof(UINT16) * MAXMERCS);
|
||||
gubOutOfTurnPersons = INT->gubOutOfTurnPersons;
|
||||
EndInterrupt( INT->fMarkInterruptOccurred );
|
||||
}
|
||||
@@ -2921,11 +2920,11 @@ void recieveMAPCHANGE( RPCParameters *rpcParameters )
|
||||
}
|
||||
|
||||
// 20091002 - OJW - Explosives
|
||||
void send_grenade (OBJECTTYPE *pGameObj, float dLifeLength, float xPos, float yPos, float zPos, float xForce, float yForce, float zForce, UINT32 sTargetGridNo, UINT8 ubOwner, UINT8 ubActionCode, UINT32 uiActionData, INT32 iRealObjectID , bool bIsThrownGrenade)
|
||||
void send_grenade (OBJECTTYPE *pGameObj, float dLifeLength, float xPos, float yPos, float zPos, float xForce, float yForce, float zForce, UINT32 sTargetGridNo, SoldierID ubOwner, UINT8 ubActionCode, UINT32 uiActionData, INT32 iRealObjectID, bool bIsThrownGrenade)
|
||||
{
|
||||
ubOwner = MPEncodeSoldierID(ubOwner); // translate our soldier to the "network" version
|
||||
|
||||
SOLDIERTYPE* pSoldier = MercPtrs[ubOwner];
|
||||
SOLDIERTYPE* pSoldier = ubOwner;
|
||||
if (pSoldier != NULL)
|
||||
{
|
||||
if ((pSoldier->bTeam == 1 && is_server) || IsOurSoldier(pSoldier))
|
||||
@@ -2943,14 +2942,13 @@ void send_grenade (OBJECTTYPE *pGameObj, float dLifeLength, float xPos, float yP
|
||||
gren.ubID = ubOwner;
|
||||
gren.usItem = pGameObj->usItem;
|
||||
gren.sTargetGridNo = sTargetGridNo;
|
||||
gren.ubID = ubOwner;
|
||||
gren.RealObjectID = iRealObjectID;
|
||||
gren.IsThrownGrenade = bIsThrownGrenade;
|
||||
gren.uiPreRandomIndex = guiPreRandomIndex;
|
||||
|
||||
#ifdef JA2BETAVERSION
|
||||
CHAR tmpMPDbgString[512];
|
||||
sprintf(tmpMPDbgString,"MP - send_grenade ( usItem : %i , sGridNo : %i , ubSoldierID : %i , uiPreRandomIndex : %i )\n",gren.usItem, gren.sTargetGridNo , gren.ubID , guiPreRandomIndex );
|
||||
sprintf(tmpMPDbgString,"MP - send_grenade ( usItem : %i , sGridNo : %i , ubSoldierID : %i , uiPreRandomIndex : %i )\n",gren.usItem, gren.sTargetGridNo , gren.ubID.i , guiPreRandomIndex );
|
||||
MPDebugMsg(tmpMPDbgString);
|
||||
gfMPDebugOutputRandoms = true;
|
||||
#endif
|
||||
@@ -2966,7 +2964,7 @@ void recieveGRENADE (RPCParameters *rpcParameters)
|
||||
|
||||
gren->ubID = MPDecodeSoldierID(gren->ubID);
|
||||
|
||||
SOLDIERTYPE* pThrower = MercPtrs[ gren->ubID ];
|
||||
SOLDIERTYPE* pThrower = gren->ubID;
|
||||
if (pThrower != NULL)
|
||||
{
|
||||
guiPreRandomIndex = gren->uiPreRandomIndex;
|
||||
@@ -2976,7 +2974,7 @@ void recieveGRENADE (RPCParameters *rpcParameters)
|
||||
{
|
||||
#ifdef JA2BETAVERSION
|
||||
CHAR tmpMPDbgString[512];
|
||||
sprintf(tmpMPDbgString,"MP - recieveGRENADE ( usItem : %i , sGridNo : %i , ubSoldierID : %i , uiPreRandomIndex : %i )\n",gren->usItem, gren->sTargetGridNo , gren->ubID , guiPreRandomIndex );
|
||||
sprintf(tmpMPDbgString,"MP - recieveGRENADE ( usItem : %i , sGridNo : %i , ubSoldierID : %i , uiPreRandomIndex : %i )\n",gren->usItem, gren->sTargetGridNo , gren->ubID.i , guiPreRandomIndex );
|
||||
MPDebugMsg(tmpMPDbgString);
|
||||
gfMPDebugOutputRandoms = true;
|
||||
#endif
|
||||
@@ -2986,7 +2984,7 @@ void recieveGRENADE (RPCParameters *rpcParameters)
|
||||
CreateItem( gren->usItem, 99, newObj );
|
||||
OBJECTTYPE::CopyToOrCreateAt(&pThrower->pTempObject, newObj);
|
||||
// this will create a grenade and launch it
|
||||
INT32 i = CreatePhysicalObject( pThrower->pTempObject , gren->dLifeSpan , gren->dX , gren->dY , gren->dZ , gren->dForceX , gren->dForceY , gren->dForceZ , pThrower->ubID , gren->ubActionCode , gren->uiActionData, false);
|
||||
INT32 i = CreatePhysicalObject( pThrower->pTempObject, gren->dLifeSpan, gren->dX, gren->dY, gren->dZ, gren->dForceX, gren->dForceY, gren->dForceZ, pThrower->ubID, gren->ubActionCode, gren->uiActionData, false);
|
||||
// save extra state info so we can check and feed it result later
|
||||
ObjectSlots[ i ].mpRealObjectID = gren->RealObjectID;
|
||||
ObjectSlots[ i ].mpTeam = pThrower->bTeam;
|
||||
@@ -3023,7 +3021,7 @@ void recieveGRENADE (RPCParameters *rpcParameters)
|
||||
{
|
||||
#ifdef JA2BETAVERSION
|
||||
char tmpMsg[128];
|
||||
sprintf(tmpMsg,"ERROR! - Invalid Soldier pointer from ubID %i in recieveGRENADE()",gren->ubID);
|
||||
sprintf(tmpMsg,"ERROR! - Invalid Soldier pointer from ubID %i in recieveGRENADE()", gren->ubID.i);
|
||||
//ScreenMsg(FONT_RED,MSG_MPSYSTEM,tmpMsg);
|
||||
MPDebugMsg(tmpMsg);
|
||||
#endif
|
||||
@@ -3031,11 +3029,11 @@ void recieveGRENADE (RPCParameters *rpcParameters)
|
||||
}
|
||||
|
||||
// we send a grenade result out to the clients as it may have been a fizzer
|
||||
void send_grenade_result (float xPos, float yPos, float zPos, INT32 sGridNo, UINT8 ubOwnerID, INT32 iRealObjectID, bool bIsDud)
|
||||
void send_grenade_result (float xPos, float yPos, float zPos, INT32 sGridNo, SoldierID ubOwnerID, INT32 iRealObjectID, bool bIsDud)
|
||||
{
|
||||
ubOwnerID = MPEncodeSoldierID(ubOwnerID); // translate our soldier to the "network" version
|
||||
|
||||
SOLDIERTYPE* pSoldier = MercPtrs[ubOwnerID];
|
||||
SOLDIERTYPE* pSoldier = ubOwnerID;
|
||||
if (pSoldier != NULL)
|
||||
{
|
||||
if ((pSoldier->bTeam == 1 && is_server) || IsOurSoldier(pSoldier))
|
||||
@@ -3052,7 +3050,7 @@ void send_grenade_result (float xPos, float yPos, float zPos, INT32 sGridNo, UIN
|
||||
|
||||
#ifdef JA2BETAVERSION
|
||||
CHAR tmpMPDbgString[512];
|
||||
sprintf(tmpMPDbgString,"MP - send_grenade_result ( RealObjectID : %i , sGridNo : %i , ubSoldierID : %i , uiPreRandomIndex : %i )\n",gres.RealObjectID, gres.sGridNo , gres.ubOwnerID , guiPreRandomIndex );
|
||||
sprintf( tmpMPDbgString, "MP - send_grenade_result ( RealObjectID : %i , sGridNo : %i , ubSoldierID : %i , uiPreRandomIndex : %i )\n", gres.RealObjectID, gres.sGridNo, gres.ubOwnerID.i, guiPreRandomIndex );
|
||||
MPDebugMsg(tmpMPDbgString);
|
||||
gfMPDebugOutputRandoms = true;
|
||||
#endif
|
||||
@@ -3068,7 +3066,7 @@ void recieveGRENADERESULT (RPCParameters *rpcParameters)
|
||||
|
||||
gres->ubOwnerID = MPDecodeSoldierID(gres->ubOwnerID);
|
||||
|
||||
SOLDIERTYPE* pThrower = MercPtrs[ gres->ubOwnerID ];
|
||||
SOLDIERTYPE* pThrower = gres->ubOwnerID;
|
||||
if (pThrower != NULL)
|
||||
{
|
||||
// grenade wasnt thrown by one of our guys, so we should do it on the client
|
||||
@@ -3076,7 +3074,7 @@ void recieveGRENADERESULT (RPCParameters *rpcParameters)
|
||||
{
|
||||
#ifdef JA2BETAVERSION
|
||||
CHAR tmpMPDbgString[512];
|
||||
sprintf(tmpMPDbgString,"MP - recieveGRENADERESULT ( RealObjectID : %i , sGridNo : %i , ubSoldierID : %i , uiPreRandomIndex : %i )\n",gres->RealObjectID, gres->sGridNo , gres->ubOwnerID , gres->uiPreRandomIndex );
|
||||
sprintf( tmpMPDbgString, "MP - recieveGRENADERESULT ( RealObjectID : %i , sGridNo : %i , ubSoldierID : %i , uiPreRandomIndex : %i )\n", gres->RealObjectID, gres->sGridNo, gres->ubOwnerID.i, gres->uiPreRandomIndex );
|
||||
MPDebugMsg(tmpMPDbgString);
|
||||
gfMPDebugOutputRandoms = true;
|
||||
#endif
|
||||
@@ -3122,14 +3120,14 @@ void recieveGRENADERESULT (RPCParameters *rpcParameters)
|
||||
{
|
||||
#ifdef JA2BETAVERSION
|
||||
char tmpMsg[128];
|
||||
sprintf(tmpMsg,"ERROR! - Invalid Soldier pointer from ubID %i in recieveGRENADERESULT()",gres->ubOwnerID);
|
||||
sprintf(tmpMsg,"ERROR! - Invalid Soldier pointer from ubID %i in recieveGRENADERESULT()", gres->ubOwnerID.i);
|
||||
//ScreenMsg(FONT_RED,MSG_MPSYSTEM,tmpMsg);
|
||||
MPDebugMsg(tmpMsg);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
void send_plant_explosive (UINT8 ubID,UINT16 usItem,UINT8 ubItemStatus,UINT16 usFlags, UINT32 sGridNo,UINT8 ubLevel, UINT32 uiWorldItemIndex)
|
||||
void send_plant_explosive (SoldierID ubID,UINT16 usItem,UINT8 ubItemStatus,UINT16 usFlags, UINT32 sGridNo,UINT8 ubLevel, UINT32 uiWorldItemIndex)
|
||||
{
|
||||
explosive_obj exp;
|
||||
|
||||
@@ -3148,7 +3146,7 @@ void send_plant_explosive (UINT8 ubID,UINT16 usItem,UINT8 ubItemStatus,UINT16 us
|
||||
|
||||
#ifdef JA2BETAVERSION
|
||||
CHAR tmpMPDbgString[512];
|
||||
sprintf(tmpMPDbgString,"MP - send_plant_explosive ( usItem : %i , sGridNo : %i , ubSoldierID : %i , uiPreRandomIndex : %i , uiWorldItemIndex : %i )\n",exp.usItem, exp.sGridNo , exp.ubID , guiPreRandomIndex , uiWorldItemIndex );
|
||||
sprintf(tmpMPDbgString,"MP - send_plant_explosive ( usItem : %i , sGridNo : %i , ubSoldierID : %i , uiPreRandomIndex : %i , uiWorldItemIndex : %i )\n",exp.usItem, exp.sGridNo , exp.ubID.i , guiPreRandomIndex , uiWorldItemIndex );
|
||||
MPDebugMsg(tmpMPDbgString);
|
||||
#endif
|
||||
|
||||
@@ -3161,7 +3159,7 @@ void recievePLANTEXPLOSIVE (RPCParameters *rpcParameters)
|
||||
|
||||
exp->ubID = MPDecodeSoldierID( exp->ubID );
|
||||
|
||||
SOLDIERTYPE* pSoldier = MercPtrs[ exp->ubID ];
|
||||
SOLDIERTYPE* pSoldier = exp->ubID;
|
||||
if (pSoldier != NULL)
|
||||
{
|
||||
// explosive wasnt planted on our client, so we should do it on the client
|
||||
@@ -3169,7 +3167,7 @@ void recievePLANTEXPLOSIVE (RPCParameters *rpcParameters)
|
||||
{
|
||||
#ifdef JA2BETAVERSION
|
||||
CHAR tmpMPDbgString[512];
|
||||
sprintf(tmpMPDbgString,"MP - recievePLANTEXPLOSIVE ( usItem : %i , sGridNo : %i , ubSoldierID : %i , uiPreRandomIndex : %i )\n",exp->usItem, exp->sGridNo , exp->ubID , guiPreRandomIndex );
|
||||
sprintf( tmpMPDbgString, "MP - recievePLANTEXPLOSIVE ( usItem : %i , sGridNo : %i , ubSoldierID : %i , uiPreRandomIndex : %i )\n", exp->usItem, exp->sGridNo, exp->ubID.i, guiPreRandomIndex );
|
||||
MPDebugMsg(tmpMPDbgString);
|
||||
#endif
|
||||
|
||||
@@ -3177,7 +3175,7 @@ void recievePLANTEXPLOSIVE (RPCParameters *rpcParameters)
|
||||
OBJECTTYPE* newObj = new OBJECTTYPE();
|
||||
CreateItem( exp->usItem, exp->ubItemStatus, newObj );
|
||||
INT32 iNewItemIndex;
|
||||
OBJECTTYPE* pObj = AddItemToPoolAndGetIndex( exp->sGridNo, newObj, VISIBLE, exp->ubLevel, exp->usFlags,0, exp->ubID ,&iNewItemIndex);
|
||||
OBJECTTYPE* pObj = AddItemToPoolAndGetIndex( exp->sGridNo, newObj, VISIBLE, exp->ubLevel, exp->usFlags,0, exp->ubID,&iNewItemIndex);
|
||||
// need to save Item Type metadata agaist the world item
|
||||
(*pObj)[0]->data.misc.ubBombOwner = exp->ubID + 2; // this is a hack the designers put into the game, storing the side as well (which isnt relevant in MP, but still have to do it)
|
||||
(*pObj)[0]->data.misc.usBombItem = exp->usItem;
|
||||
@@ -3223,18 +3221,18 @@ void recievePLANTEXPLOSIVE (RPCParameters *rpcParameters)
|
||||
{
|
||||
#ifdef JA2BETAVERSION
|
||||
char tmpMsg[128];
|
||||
sprintf(tmpMsg,"ERROR! - Invalid Soldier pointer from ubID %i in recievePLANTEXPLOSIVE()",exp->ubID);
|
||||
sprintf(tmpMsg,"ERROR! - Invalid Soldier pointer from ubID %i in recievePLANTEXPLOSIVE()",exp->ubID.i);
|
||||
//ScreenMsg(FONT_RED,MSG_MPSYSTEM,tmpMsg);
|
||||
MPDebugMsg(tmpMsg);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
void send_detonate_explosive (UINT32 uiWorldIndex, UINT8 ubID)
|
||||
void send_detonate_explosive (UINT32 uiWorldIndex, SoldierID ubID)
|
||||
{
|
||||
ubID = MPEncodeSoldierID(ubID);
|
||||
|
||||
SOLDIERTYPE* pSoldier = MercPtrs[ubID];
|
||||
SOLDIERTYPE* pSoldier = ubID;
|
||||
if (pSoldier != NULL)
|
||||
{
|
||||
// explosive detonated on this client, notify the other clients
|
||||
@@ -3298,7 +3296,7 @@ void recieveDETONATEEXPLOSIVE (RPCParameters *rpcParameters)
|
||||
|
||||
det->ubID = MPDecodeSoldierID(det->ubID);
|
||||
|
||||
SOLDIERTYPE* pSoldier = MercPtrs[det->ubID];
|
||||
SOLDIERTYPE* pSoldier = det->ubID;
|
||||
if (pSoldier != NULL)
|
||||
{
|
||||
// if explosive detonation didnt originate from this client then its need to be performed here
|
||||
@@ -3306,7 +3304,7 @@ void recieveDETONATEEXPLOSIVE (RPCParameters *rpcParameters)
|
||||
{
|
||||
#ifdef JA2BETAVERSION
|
||||
CHAR tmpMPDbgString[512];
|
||||
sprintf(tmpMPDbgString,"MP - recieveDETONATEEXPLOSIVE ( MPTeam : %i , uiWorldIndex : %i , uiPreRandomIndex : %i , ubID : %i )\n",det->ubMPTeamIndex, det->uiWorldItemIndex , det->uiPreRandomIndex , det->ubID );
|
||||
sprintf(tmpMPDbgString,"MP - recieveDETONATEEXPLOSIVE ( MPTeam : %i , uiWorldIndex : %i , uiPreRandomIndex : %i , ubID : %i )\n",det->ubMPTeamIndex, det->uiWorldItemIndex , det->uiPreRandomIndex , det->ubID.i );
|
||||
MPDebugMsg(tmpMPDbgString);
|
||||
gfMPDebugOutputRandoms = true;
|
||||
#endif
|
||||
@@ -3344,11 +3342,11 @@ void recieveDETONATEEXPLOSIVE (RPCParameters *rpcParameters)
|
||||
}
|
||||
}
|
||||
|
||||
void send_disarm_explosive(UINT32 sGridNo, UINT32 uiWorldItem, UINT8 ubID)
|
||||
void send_disarm_explosive(UINT32 sGridNo, UINT32 uiWorldItem, SoldierID ubID)
|
||||
{
|
||||
ubID = MPEncodeSoldierID(ubID);
|
||||
|
||||
SOLDIERTYPE* pSoldier = MercPtrs[ubID];
|
||||
SOLDIERTYPE* pSoldier = ubID;
|
||||
if (pSoldier != NULL)
|
||||
{
|
||||
// explosive disarmed on this client, notify the other clients
|
||||
@@ -3411,7 +3409,7 @@ void recieveDISARMEXPLOSIVE (RPCParameters *rpcParameters)
|
||||
|
||||
disarm->ubID = MPDecodeSoldierID(disarm->ubID);
|
||||
|
||||
SOLDIERTYPE* pSoldier = MercPtrs[disarm->ubID];
|
||||
SOLDIERTYPE* pSoldier = disarm->ubID;
|
||||
if (pSoldier != NULL)
|
||||
{
|
||||
// if explosive disarm didnt originate from this client then its need to be performed here
|
||||
@@ -3419,7 +3417,7 @@ void recieveDISARMEXPLOSIVE (RPCParameters *rpcParameters)
|
||||
{
|
||||
#ifdef JA2BETAVERSION
|
||||
CHAR tmpMPDbgString[512];
|
||||
sprintf(tmpMPDbgString,"MP - recieveDISARMEXPLOSIVE ( MPTeam : %i , uiWorldItemIndex : %i , uiPreRandomIndex : %i , ubID : %i , sGridNo : %i )\n",disarm->ubMPTeamIndex, disarm->uiWorldItemIndex , disarm->uiPreRandomIndex , disarm->ubID , disarm->sGridNo );
|
||||
sprintf(tmpMPDbgString,"MP - recieveDISARMEXPLOSIVE ( MPTeam : %i , uiWorldItemIndex : %i , uiPreRandomIndex : %i , ubID : %i , sGridNo : %i )\n",disarm->ubMPTeamIndex, disarm->uiWorldItemIndex , disarm->uiPreRandomIndex , disarm->ubID.i, disarm->sGridNo );
|
||||
MPDebugMsg(tmpMPDbgString);
|
||||
gfMPDebugOutputRandoms = true;
|
||||
#endif
|
||||
@@ -3440,7 +3438,7 @@ void recieveDISARMEXPLOSIVE (RPCParameters *rpcParameters)
|
||||
// print out a screen message if it was our bomb
|
||||
if (disarm->ubMPTeamIndex == netbTeam)
|
||||
{
|
||||
SOLDIERTYPE * pBombOwner = MercPtrs[gWorldItems[ gWorldBombs[ uiCount ].iItemIndex ].soldierID];
|
||||
SOLDIERTYPE * pBombOwner = gWorldItems[ gWorldBombs[ uiCount ].iItemIndex ].soldierID;
|
||||
if (pBombOwner != NULL)
|
||||
{
|
||||
ScreenMsg( FONT_LTBLUE , MSG_MPSYSTEM , MPClientMessage[71], pBombOwner->name, pSoldier->name);
|
||||
@@ -3467,7 +3465,7 @@ void recieveDISARMEXPLOSIVE (RPCParameters *rpcParameters)
|
||||
}
|
||||
}
|
||||
|
||||
void send_spreadeffect ( INT32 sGridNo, UINT8 ubRadius, UINT16 usItem, UINT8 ubOwner, BOOLEAN fSubsequent, INT8 bLevel, INT32 iSmokeEffectID )
|
||||
void send_spreadeffect ( INT32 sGridNo, UINT8 ubRadius, UINT16 usItem, SoldierID ubOwner, BOOLEAN fSubsequent, INT8 bLevel, INT32 iSmokeEffectID )
|
||||
{
|
||||
spreadeffect_struct sef;
|
||||
|
||||
@@ -3482,7 +3480,7 @@ void send_spreadeffect ( INT32 sGridNo, UINT8 ubRadius, UINT16 usItem, UINT8 ubO
|
||||
|
||||
#ifdef JA2BETAVERSION
|
||||
CHAR tmpMPDbgString[512];
|
||||
sprintf(tmpMPDbgString,"MP - send_spreadeffect ( sGridNo : %i , ubRadius : %i , usItem : %i , ubOwner : %i , fSubsequent : %i , bLevel : %i , iSmokeEffectID : %i , uiPreRandomIndex : %i )\n",sef.sGridNo, sef.ubRadius ,sef.usItem, sef.ubOwner, sef.fSubsequent, sef.bLevel, sef.iSmokeEffectID, sef.uiPreRandomIndex );
|
||||
sprintf(tmpMPDbgString,"MP - send_spreadeffect ( sGridNo : %i , ubRadius : %i , usItem : %i , ubOwner : %i , fSubsequent : %i , bLevel : %i , iSmokeEffectID : %i , uiPreRandomIndex : %i )\n",sef.sGridNo, sef.ubRadius ,sef.usItem, sef.ubOwner.i, sef.fSubsequent, sef.bLevel, sef.iSmokeEffectID, sef.uiPreRandomIndex );
|
||||
MPDebugMsg(tmpMPDbgString);
|
||||
#endif
|
||||
|
||||
@@ -3495,7 +3493,7 @@ void recieveSPREADEFFECT (RPCParameters *rpcParameters)
|
||||
|
||||
sef->ubOwner = MPDecodeSoldierID(sef->ubOwner);
|
||||
|
||||
SOLDIERTYPE* pSoldier = MercPtrs[sef->ubOwner];
|
||||
SOLDIERTYPE* pSoldier = sef->ubOwner;
|
||||
if (pSoldier != NULL)
|
||||
{
|
||||
|
||||
@@ -3504,7 +3502,7 @@ void recieveSPREADEFFECT (RPCParameters *rpcParameters)
|
||||
{
|
||||
#ifdef JA2BETAVERSION
|
||||
CHAR tmpMPDbgString[512];
|
||||
sprintf(tmpMPDbgString,"MP - recieveSPREADEFFECT ( sGridNo : %i , ubRadius : %i , usItem : %i , ubOwner : %i , fSubsequent : %i , bLevel : %i , iSmokeEffectID : %i , uiPreRandomIndex : %i )\n",sef->sGridNo, sef->ubRadius ,sef->usItem, sef->ubOwner, sef->fSubsequent, sef->bLevel, sef->iSmokeEffectID, sef->uiPreRandomIndex );
|
||||
sprintf(tmpMPDbgString,"MP - recieveSPREADEFFECT ( sGridNo : %i , ubRadius : %i , usItem : %i , ubOwner : %i , fSubsequent : %i , bLevel : %i , iSmokeEffectID : %i , uiPreRandomIndex : %i )\n",sef->sGridNo, sef->ubRadius ,sef->usItem, sef->ubOwner.i, sef->fSubsequent, sef->bLevel, sef->iSmokeEffectID, sef->uiPreRandomIndex );
|
||||
MPDebugMsg(tmpMPDbgString);
|
||||
#endif
|
||||
|
||||
@@ -3520,7 +3518,7 @@ void recieveSPREADEFFECT (RPCParameters *rpcParameters)
|
||||
if ( gSmokeEffectData[ uiCount ].fAllocated == TRUE && gSmokeEffectData[ uiCount ].iMPTeamIndex == pSoldier->bTeam && gSmokeEffectData[ uiCount ].iMPSmokeEffectID == sef->iSmokeEffectID)
|
||||
{
|
||||
bFound = true;
|
||||
SpreadEffect( sef->sGridNo , sef->ubRadius , sef->usItem , sef->ubOwner , sef->fSubsequent , sef->bLevel , uiCount , TRUE);
|
||||
SpreadEffect( sef->sGridNo, sef->ubRadius, sef->usItem, sef->ubOwner, sef->fSubsequent, sef->bLevel, uiCount, TRUE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -3537,7 +3535,7 @@ void recieveSPREADEFFECT (RPCParameters *rpcParameters)
|
||||
}
|
||||
else
|
||||
{
|
||||
SpreadEffect( sef->sGridNo , sef->ubRadius , sef->usItem , sef->ubOwner , sef->fSubsequent , sef->bLevel , sef->iSmokeEffectID , TRUE);
|
||||
SpreadEffect( sef->sGridNo, sef->ubRadius, sef->usItem, sef->ubOwner, sef->fSubsequent, sef->bLevel, sef->iSmokeEffectID, TRUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3545,14 +3543,14 @@ void recieveSPREADEFFECT (RPCParameters *rpcParameters)
|
||||
{
|
||||
#ifdef JA2BETAVERSION
|
||||
char tmpMsg2[128];
|
||||
sprintf(tmpMsg2,"ERROR! - Invalid Soldier pointer from ubID %i in recieveSPREADEFFECT()",sef->ubOwner);
|
||||
sprintf(tmpMsg2,"ERROR! - Invalid Soldier pointer from ubID %i in recieveSPREADEFFECT()",sef->ubOwner.i );
|
||||
//ScreenMsg(FONT_RED,MSG_MPSYSTEM,tmpMsg);
|
||||
MPDebugMsg(tmpMsg2);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
void send_newsmokeeffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT8 ubOwner, INT32 iSmokeEffectID)
|
||||
void send_newsmokeeffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, SoldierID ubOwner, INT32 iSmokeEffectID)
|
||||
{
|
||||
// i'm reusing this struct, the parameters are essentially the same
|
||||
spreadeffect_struct sef;
|
||||
@@ -3566,7 +3564,7 @@ void send_newsmokeeffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT8 ubOwne
|
||||
|
||||
#ifdef JA2BETAVERSION
|
||||
CHAR tmpMPDbgString[512];
|
||||
sprintf(tmpMPDbgString,"MP - send_newsmokeeffect ( sGridNo : %i , usItem : %i , ubOwner : %i , bLevel : %i , iSmokeEffectID : %i , uiPreRandomIndex : %i )\n",sef.sGridNo, sef.usItem, sef.ubOwner, sef.bLevel, sef.iSmokeEffectID, sef.uiPreRandomIndex );
|
||||
sprintf(tmpMPDbgString,"MP - send_newsmokeeffect ( sGridNo : %i , usItem : %i , ubOwner : %i , bLevel : %i , iSmokeEffectID : %i , uiPreRandomIndex : %i )\n",sef.sGridNo, sef.usItem, sef.ubOwner.i, sef.bLevel, sef.iSmokeEffectID, sef.uiPreRandomIndex );
|
||||
MPDebugMsg(tmpMPDbgString);
|
||||
#endif
|
||||
|
||||
@@ -3580,7 +3578,7 @@ void recieveNEWSMOKEEFFECT (RPCParameters *rpcParameters)
|
||||
// translate any of our soldier ids back to the correct local copy
|
||||
sef->ubOwner = MPDecodeSoldierID(sef->ubOwner);
|
||||
|
||||
SOLDIERTYPE* pSoldier = MercPtrs[sef->ubOwner];
|
||||
SOLDIERTYPE* pSoldier = sef->ubOwner;
|
||||
if (pSoldier != NULL)
|
||||
{
|
||||
// new smoke effect didnt originate from us
|
||||
@@ -3588,14 +3586,14 @@ void recieveNEWSMOKEEFFECT (RPCParameters *rpcParameters)
|
||||
{
|
||||
#ifdef JA2BETAVERSION
|
||||
CHAR tmpMPDbgString[512];
|
||||
sprintf(tmpMPDbgString,"MP - recieveNEWSMOKEEFFECT ( sGridNo : %i , usItem : %i , ubOwner : %i , bLevel : %i , iSmokeEffectID : %i , uiPreRandomIndex : %i )\n",sef->sGridNo, sef->usItem, sef->ubOwner, sef->bLevel, sef->iSmokeEffectID, sef->uiPreRandomIndex );
|
||||
sprintf(tmpMPDbgString,"MP - recieveNEWSMOKEEFFECT ( sGridNo : %i , usItem : %i , ubOwner : %i , bLevel : %i , iSmokeEffectID : %i , uiPreRandomIndex : %i )\n",sef->sGridNo, sef->usItem, sef->ubOwner.i, sef->bLevel, sef->iSmokeEffectID, sef->uiPreRandomIndex );
|
||||
MPDebugMsg(tmpMPDbgString);
|
||||
#endif
|
||||
|
||||
guiPreRandomIndex = sef->uiPreRandomIndex;
|
||||
|
||||
// start new smoke effect
|
||||
INT32 iNewSmokeIndex = NewSmokeEffect( sef->sGridNo , sef->usItem , sef->bLevel , sef->ubOwner , TRUE );
|
||||
INT32 iNewSmokeIndex = NewSmokeEffect( sef->sGridNo, sef->usItem, sef->bLevel, sef->ubOwner, TRUE );
|
||||
|
||||
// attach remote id to local smoke effect
|
||||
gSmokeEffectData[iNewSmokeIndex].iMPTeamIndex = pSoldier->bTeam;
|
||||
@@ -3606,14 +3604,14 @@ void recieveNEWSMOKEEFFECT (RPCParameters *rpcParameters)
|
||||
{
|
||||
#ifdef JA2BETAVERSION
|
||||
char tmpMsg[128];
|
||||
sprintf(tmpMsg,"ERROR! - Invalid Soldier pointer from ubID %i in recieveNEWSMOKEEFFECT()",sef->ubOwner);
|
||||
sprintf(tmpMsg,"ERROR! - Invalid Soldier pointer from ubID %i in recieveNEWSMOKEEFFECT()",sef->ubOwner.i );
|
||||
//ScreenMsg(FONT_RED,MSG_MPSYSTEM,tmpMsg);
|
||||
MPDebugMsg(tmpMsg);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
void send_gasdamage( SOLDIERTYPE * pSoldier, UINT16 usExplosiveClassID, INT16 sSubsequent, BOOLEAN fRecompileMovementCosts, INT16 sWoundAmt, INT16 sBreathAmt, UINT8 ubOwner )
|
||||
void send_gasdamage( SOLDIERTYPE * pSoldier, UINT16 usExplosiveClassID, INT16 sSubsequent, BOOLEAN fRecompileMovementCosts, INT16 sWoundAmt, INT16 sBreathAmt, SoldierID ubOwner )
|
||||
{
|
||||
explosiondamage_struct exp;
|
||||
exp.ubDamageFunc = 1;
|
||||
@@ -3628,14 +3626,14 @@ void send_gasdamage( SOLDIERTYPE * pSoldier, UINT16 usExplosiveClassID, INT16 sS
|
||||
|
||||
#ifdef JA2BETAVERSION
|
||||
CHAR tmpMPDbgString[512];
|
||||
sprintf(tmpMPDbgString,"MP - send_gasdamage ( ubSoldierID : %i , usExplosiveClassID : %i , sSubsequent : %i , recompileMoveCosts : %i , sWoundAmt : %i , sBreathAmt : %i , ubOwner : %i )\n", exp.ubSoldierID , usExplosiveClassID , sSubsequent , fRecompileMovementCosts , sWoundAmt , sBreathAmt , exp.ubAttackerID );
|
||||
sprintf(tmpMPDbgString, "MP - send_gasdamage ( ubSoldierID : %i , usExplosiveClassID : %i , sSubsequent : %i , recompileMoveCosts : %i , sWoundAmt : %i , sBreathAmt : %i , ubOwner : %i )\n", exp.ubSoldierID.i, usExplosiveClassID , sSubsequent , fRecompileMovementCosts , sWoundAmt , sBreathAmt , exp.ubAttackerID.i );
|
||||
MPDebugMsg(tmpMPDbgString);
|
||||
#endif
|
||||
|
||||
client->RPC("sendEXPLOSIONDAMAGE",(const char*)&exp, (int)sizeof(explosiondamage_struct)*8, HIGH_PRIORITY, RELIABLE, 0, UNASSIGNED_SYSTEM_ADDRESS, true, 0, UNASSIGNED_NETWORK_ID,0);
|
||||
}
|
||||
|
||||
void send_explosivedamage( UINT8 ubPerson, UINT8 ubOwner, INT32 sBombGridNo, INT16 sWoundAmt, INT16 sBreathAmt, UINT32 uiDist, UINT16 usItem, INT16 sSubsequent )
|
||||
void send_explosivedamage( SoldierID ubPerson, SoldierID ubOwner, INT32 sBombGridNo, INT16 sWoundAmt, INT16 sBreathAmt, UINT32 uiDist, UINT16 usItem, INT16 sSubsequent )
|
||||
{
|
||||
explosiondamage_struct exp;
|
||||
exp.ubDamageFunc = 2;
|
||||
@@ -3651,7 +3649,7 @@ void send_explosivedamage( UINT8 ubPerson, UINT8 ubOwner, INT32 sBombGridNo, INT
|
||||
|
||||
#ifdef JA2BETAVERSION
|
||||
CHAR tmpMPDbgString[512];
|
||||
sprintf(tmpMPDbgString,"MP - send_explosivedamage ( ubPerson : %i , ubOwner : %i , sBombGridNo : %i , sWoundAmt : %i , sBreathAmt : %i , uiDist : %i , usItem : %i , sSubs : %i )\n",ubPerson, ubOwner , sBombGridNo , sWoundAmt , sBreathAmt , uiDist , usItem , sSubsequent );
|
||||
sprintf(tmpMPDbgString, "MP - send_explosivedamage ( ubPerson : %i , ubOwner : %i , sBombGridNo : %i , sWoundAmt : %i , sBreathAmt : %i , uiDist : %i , usItem : %i , sSubs : %i )\n", ubPerson.i, ubOwner.i, sBombGridNo , sWoundAmt , sBreathAmt , uiDist , usItem , sSubsequent );
|
||||
MPDebugMsg(tmpMPDbgString);
|
||||
#endif
|
||||
|
||||
@@ -3666,7 +3664,7 @@ void recieveEXPLOSIONDAMAGE (RPCParameters *rpcParameters)
|
||||
exp->ubAttackerID = MPDecodeSoldierID(exp->ubAttackerID);
|
||||
|
||||
|
||||
SOLDIERTYPE* pSoldier = MercPtrs[exp->ubSoldierID];
|
||||
SOLDIERTYPE* pSoldier = exp->ubSoldierID;
|
||||
if (pSoldier != NULL)
|
||||
{
|
||||
|
||||
@@ -3675,7 +3673,7 @@ void recieveEXPLOSIONDAMAGE (RPCParameters *rpcParameters)
|
||||
{
|
||||
#ifdef JA2BETAVERSION
|
||||
CHAR tmpMPDbgString[512];
|
||||
sprintf(tmpMPDbgString,"MP - recieveEXPLOSIONDAMAGE ( ubDamageFunc : %i , ubSoldierID : %i , ubAttackerID : %i , usItem : %i , usExplosiveClassID : %i , sWoundAmt : %i , sBreathAmt : %i , uiDist : %i , sSubs : %i , sBombGridNo : %i , uiPreRandomIndex : %i )\n", exp->ubDamageFunc , exp->ubSoldierID , exp->ubAttackerID , exp->usItem , exp->usExplosiveClassID , exp->sWoundAmt , exp->sBreathAmt , exp->uiDist , exp->sSubsequent , exp->sBombGridNo , exp->uiPreRandomIndex );
|
||||
sprintf(tmpMPDbgString, "MP - recieveEXPLOSIONDAMAGE ( ubDamageFunc : %i , ubSoldierID : %i , ubAttackerID : %i , usItem : %i , usExplosiveClassID : %i , sWoundAmt : %i , sBreathAmt : %i , uiDist : %i , sSubs : %i , sBombGridNo : %i , uiPreRandomIndex : %i )\n", exp->ubDamageFunc , exp->ubSoldierID.i, exp->ubAttackerID.i, exp->usItem , exp->usExplosiveClassID , exp->sWoundAmt , exp->sBreathAmt , exp->uiDist , exp->sSubsequent , exp->sBombGridNo , exp->uiPreRandomIndex );
|
||||
MPDebugMsg(tmpMPDbgString);
|
||||
#endif
|
||||
|
||||
@@ -3692,7 +3690,7 @@ void recieveEXPLOSIONDAMAGE (RPCParameters *rpcParameters)
|
||||
}
|
||||
else if (exp->ubDamageFunc == 2)
|
||||
{
|
||||
DamageSoldierFromBlast( exp->ubSoldierID , exp->ubAttackerID , exp->sBombGridNo , exp->sWoundAmt , exp->sBreathAmt , exp->uiDist , exp->usItem , exp->sSubsequent , TRUE);
|
||||
DamageSoldierFromBlast( exp->ubSoldierID, exp->ubAttackerID, exp->sBombGridNo, exp->sWoundAmt, exp->sBreathAmt, exp->uiDist, exp->usItem, exp->sSubsequent, TRUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3700,7 +3698,7 @@ void recieveEXPLOSIONDAMAGE (RPCParameters *rpcParameters)
|
||||
{
|
||||
#ifdef JA2BETAVERSION
|
||||
char tmpMsg[128];
|
||||
sprintf(tmpMsg,"ERROR! - Invalid Soldier pointer from ubID %i in recieveEXPLOSIONDAMAGE()",exp->ubAttackerID);
|
||||
sprintf(tmpMsg, "ERROR! - Invalid Soldier pointer from ubID %i in recieveEXPLOSIONDAMAGE()", exp->ubAttackerID.i );
|
||||
//ScreenMsg(FONT_RED,MSG_MPSYSTEM,tmpMsg);
|
||||
MPDebugMsg(tmpMsg);
|
||||
#endif
|
||||
@@ -3734,7 +3732,7 @@ void recieveBULLET(RPCParameters *rpcParameters)
|
||||
INT8 bTeam = OUR_TEAM;
|
||||
if ( netb->net_bullet.ubFirerID != NOBODY )
|
||||
{
|
||||
pFirer = MercPtrs[ netb->net_bullet.ubFirerID ];
|
||||
pFirer = netb->net_bullet.ubFirerID;
|
||||
bTeam=pFirer->bTeam;
|
||||
}
|
||||
|
||||
@@ -3794,7 +3792,7 @@ void recieveSTATE(RPCParameters *rpcParameters)
|
||||
{
|
||||
EV_S_CHANGESTATE* new_state = (EV_S_CHANGESTATE*)rpcParameters->input;
|
||||
|
||||
SOLDIERTYPE * pSoldier=MercPtrs[ new_state->usSoldierID ];
|
||||
SOLDIERTYPE * pSoldier = new_state->usSoldierID;
|
||||
|
||||
if(pSoldier->bActive)
|
||||
{
|
||||
@@ -3838,22 +3836,22 @@ void recieveSTATE(RPCParameters *rpcParameters)
|
||||
void send_death( SOLDIERTYPE *pSoldier )
|
||||
{
|
||||
death_struct nDeath;
|
||||
nDeath.soldier_id=pSoldier->ubID;
|
||||
nDeath.attacker_id=pSoldier->ubAttackerID;
|
||||
nDeath.soldier_id = pSoldier->ubID;
|
||||
nDeath.attacker_id = pSoldier->ubAttackerID;
|
||||
|
||||
// Translate soldier id for other clients if the soldier was one of ours
|
||||
if(pSoldier->ubID<20)nDeath.soldier_id=nDeath.soldier_id+ubID_prefix;
|
||||
|
||||
// if soldier died from bleeding
|
||||
if(pSoldier->ubAttackerID==NULL || pSoldier->ubAttackerID == NOBODY)
|
||||
if(pSoldier->ubAttackerID >= NOBODY)
|
||||
{
|
||||
if (pSoldier->ubPreviousAttackerID != NOBODY && pSoldier->ubPreviousAttackerID != NULL)
|
||||
if (pSoldier->ubPreviousAttackerID < NOBODY)
|
||||
nDeath.attacker_id = pSoldier->ubPreviousAttackerID;
|
||||
else if (pSoldier->ubNextToPreviousAttackerID != NOBODY && pSoldier->ubNextToPreviousAttackerID != NULL)
|
||||
else if (pSoldier->ubNextToPreviousAttackerID < NOBODY)
|
||||
nDeath.attacker_id = pSoldier->ubNextToPreviousAttackerID;
|
||||
}
|
||||
|
||||
SOLDIERTYPE * pAttacker=MercPtrs[ nDeath.attacker_id ];
|
||||
SOLDIERTYPE * pAttacker = nDeath.attacker_id;
|
||||
INT8 pA_bTeam=CLIENT_NUM;
|
||||
CHAR16 pA_name[ 10 ];
|
||||
INT8 pS_bTeam=CLIENT_NUM;
|
||||
@@ -3864,16 +3862,16 @@ void send_death( SOLDIERTYPE *pSoldier )
|
||||
if(pAttacker)
|
||||
{
|
||||
// if attacker was one of our own mercs, use the last hostile attacker as the killer if there is one
|
||||
if (pAttacker->bTeam == pSoldier->bTeam && pSoldier->ubPreviousAttackerID != NULL && pSoldier->ubPreviousAttackerID != NOBODY)
|
||||
if (pAttacker->bTeam == pSoldier->bTeam && pSoldier->ubPreviousAttackerID < NOBODY)
|
||||
{
|
||||
pAttacker=MercPtrs[ pSoldier->ubPreviousAttackerID ];
|
||||
pAttacker = pSoldier->ubPreviousAttackerID;
|
||||
// check if the new attacker was also a friendly...
|
||||
if (pAttacker->bTeam == pSoldier->bTeam && pSoldier->ubNextToPreviousAttackerID != NULL && pSoldier->ubNextToPreviousAttackerID != NOBODY)
|
||||
pAttacker=MercPtrs[ pSoldier->ubNextToPreviousAttackerID ];
|
||||
if (pAttacker->bTeam == pSoldier->bTeam && pSoldier->ubNextToPreviousAttackerID < NOBODY)
|
||||
pAttacker = pSoldier->ubNextToPreviousAttackerID;
|
||||
// if its still a friendly, use the original attacker id...for posterity
|
||||
// guy must snore too loudly if all his mates wanna kill him :)
|
||||
if (pAttacker->bTeam == pSoldier->bTeam && pSoldier->ubAttackerID != NULL && pSoldier->ubAttackerID != NOBODY)
|
||||
pAttacker = MercPtrs[ pSoldier->ubAttackerID ];
|
||||
if (pAttacker->bTeam == pSoldier->bTeam && pSoldier->ubAttackerID != NOBODY)
|
||||
pAttacker = pSoldier->ubAttackerID;
|
||||
|
||||
nDeath.attacker_id = pAttacker->ubID;
|
||||
}
|
||||
@@ -3952,15 +3950,15 @@ void send_death( SOLDIERTYPE *pSoldier )
|
||||
void recieveDEATH (RPCParameters *rpcParameters)
|
||||
{
|
||||
death_struct* nDeath = (death_struct*)rpcParameters->input;
|
||||
SOLDIERTYPE * pSoldier=MercPtrs[ nDeath->soldier_id ];
|
||||
SOLDIERTYPE * pSoldier = nDeath->soldier_id;
|
||||
|
||||
UINT16 ubAttackerID;
|
||||
SoldierID ubAttackerID;
|
||||
if((nDeath->attacker_id >= ubID_prefix) && (nDeath->attacker_id < (ubID_prefix+6)))
|
||||
ubAttackerID = (nDeath->attacker_id - ubID_prefix);
|
||||
else
|
||||
ubAttackerID = nDeath->attacker_id;
|
||||
|
||||
SOLDIERTYPE * pAttacker=MercPtrs[ ubAttackerID ];
|
||||
SOLDIERTYPE * pAttacker = ubAttackerID;
|
||||
INT8 pA_bTeam;
|
||||
CHAR16 pA_name[ 10 ];
|
||||
INT8 pS_bTeam;
|
||||
@@ -4071,7 +4069,7 @@ void send_miss(EV_S_MISS * SMiss)
|
||||
void recievehitSTRUCT (RPCParameters *rpcParameters)
|
||||
{
|
||||
EV_S_STRUCTUREHIT* struct_hit = (EV_S_STRUCTUREHIT*)rpcParameters->input;
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[ struct_hit->ubAttackerID ];
|
||||
SOLDIERTYPE *pSoldier = struct_hit->ubAttackerID;
|
||||
INT8 bTeam=pSoldier->bTeam;
|
||||
INT32 iBullet = bTable[bTeam][struct_hit->iBullet].local_id;
|
||||
|
||||
@@ -4094,7 +4092,7 @@ void recieveMISS (RPCParameters *rpcParameters)
|
||||
{
|
||||
EV_S_MISS* shot_miss = (EV_S_MISS*)rpcParameters->input;
|
||||
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[ shot_miss->ubAttackerID ];
|
||||
SOLDIERTYPE *pSoldier = shot_miss->ubAttackerID;
|
||||
INT8 bTeam=pSoldier->bTeam;
|
||||
INT32 iBullet = bTable[bTeam][shot_miss->iBullet].local_id;
|
||||
|
||||
@@ -4104,7 +4102,6 @@ void recieveMISS (RPCParameters *rpcParameters)
|
||||
BOOLEAN check_status (void)// any 'enemies' and clients left to fight ??
|
||||
{
|
||||
SOLDIERTYPE *pSoldier;
|
||||
int cnt;
|
||||
int soldiers= 0 ;
|
||||
int numActiveSides = 0;
|
||||
|
||||
@@ -4114,9 +4111,9 @@ BOOLEAN check_status (void)// any 'enemies' and clients left to fight ??
|
||||
{
|
||||
soldiers=0;
|
||||
|
||||
for(cnt = gTacticalStatus.Team[ x ].bFirstID;cnt <= gTacticalStatus.Team[ x ].bLastID; cnt++)
|
||||
for( SoldierID cnt = gTacticalStatus.Team[ x ].bFirstID;cnt <= gTacticalStatus.Team[ x ].bLastID; ++cnt)
|
||||
{
|
||||
pSoldier = MercPtrs[ cnt ];
|
||||
pSoldier = cnt;
|
||||
if(pSoldier->stats.bLife >= OKLIFE && pSoldier->bActive && pSoldier->bInSector)
|
||||
{
|
||||
soldiers++;
|
||||
@@ -4199,7 +4196,7 @@ BOOLEAN check_status (void)// any 'enemies' and clients left to fight ??
|
||||
void UpdateSoldierToNetwork ( SOLDIERTYPE *pSoldier )
|
||||
{
|
||||
//this send stats to other clients at intervals
|
||||
UINT8 id = pSoldier->ubID;
|
||||
SoldierID id = pSoldier->ubID;
|
||||
UINT32 time = GetJA2Clock();
|
||||
|
||||
if(id < 20 || (is_server && id <120))
|
||||
@@ -4244,7 +4241,7 @@ void UpdateSoldierFromNetwork (RPCParameters *rpcParameters)
|
||||
{
|
||||
EV_S_UPDATENETWORKSOLDIER* SUpdateNetworkSoldier = (EV_S_UPDATENETWORKSOLDIER*)rpcParameters->input;
|
||||
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[ SUpdateNetworkSoldier->usSoldierID ];
|
||||
SOLDIERTYPE *pSoldier = SUpdateNetworkSoldier->usSoldierID;
|
||||
pSoldier->bBreath=SUpdateNetworkSoldier->bBreath;
|
||||
pSoldier->stats.bLife=SUpdateNetworkSoldier->bLife;
|
||||
|
||||
@@ -4333,14 +4330,14 @@ void null_team (RPCParameters *rpcParameters)
|
||||
{
|
||||
kickR* kick = (kickR*)rpcParameters->input;
|
||||
ScreenMsg( FONT_LTGREEN, MSG_INTERFACE, MPClientMessage[29],(kick->ubResult-5),client_names[kick->ubResult-6] );
|
||||
int fID = gTacticalStatus.Team[ kick->ubResult ].bFirstID;
|
||||
int lID = gTacticalStatus.Team[ kick->ubResult ].bLastID;
|
||||
SoldierID fID = gTacticalStatus.Team[ kick->ubResult ].bFirstID;
|
||||
SoldierID lID = gTacticalStatus.Team[ kick->ubResult ].bLastID;
|
||||
|
||||
if(kick->ubResult==netbTeam)
|
||||
fID=0,lID=19;
|
||||
|
||||
int cnt;
|
||||
for ( cnt=fID ; cnt <= lID; cnt++ )
|
||||
SoldierID cnt;
|
||||
for ( cnt=fID ; cnt <= lID; ++cnt )
|
||||
{
|
||||
TacticalRemoveSoldier( cnt );
|
||||
}
|
||||
@@ -4425,7 +4422,7 @@ void recieve_fireweapon (RPCParameters *rpcParameters)
|
||||
{
|
||||
EV_S_FIREWEAPON* SFireWeapon = (EV_S_FIREWEAPON*)rpcParameters->input;
|
||||
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[ SFireWeapon->usSoldierID ];
|
||||
SOLDIERTYPE *pSoldier = SFireWeapon->usSoldierID;
|
||||
|
||||
pSoldier->sTargetGridNo = SFireWeapon->sTargetGridNo;
|
||||
pSoldier->bTargetLevel = SFireWeapon->bTargetLevel;
|
||||
@@ -4450,7 +4447,7 @@ void recieve_door (RPCParameters *rpcParameters)
|
||||
{
|
||||
doors* sDoor = (doors*)rpcParameters->input;
|
||||
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[ sDoor->ubID ];
|
||||
SOLDIERTYPE *pSoldier = sDoor->ubID;
|
||||
BOOLEAN fNoAnimations = FALSE;
|
||||
|
||||
if ( !AllMercsLookForDoor( sDoor->sGridNo, FALSE ) )//check for los
|
||||
@@ -4511,7 +4508,7 @@ void recieveDISCONNECT(RPCParameters* rpcParameters)
|
||||
// kill the dead clients mercs out of the game
|
||||
|
||||
UINT8 iNetbTeam = (cl_num)+5;
|
||||
UINT8 iubID_prefix = gTacticalStatus.Team[ iNetbTeam ].bFirstID;//over here now
|
||||
UINT16 iubID_prefix = gTacticalStatus.Team[ iNetbTeam ].bFirstID;//over here now
|
||||
|
||||
// kill any alive soldiers for the disconnected team
|
||||
SOLDIERTYPE *pTeamSoldier;
|
||||
@@ -4726,14 +4723,14 @@ void recieve_heal (RPCParameters *rpcParameters)
|
||||
{
|
||||
heal* data = (heal*)rpcParameters->input;
|
||||
|
||||
UINT16 healed;
|
||||
SoldierID healed;
|
||||
|
||||
if((data->ubID >= ubID_prefix) && (data->ubID < (ubID_prefix+6)))
|
||||
healed = (data->ubID - ubID_prefix);
|
||||
else
|
||||
healed = data->ubID;
|
||||
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[ healed ];
|
||||
SOLDIERTYPE *pSoldier = healed;
|
||||
pSoldier->bBleeding=data->bBleeding;
|
||||
pSoldier->stats.bLife=data->bLife;
|
||||
|
||||
@@ -4759,7 +4756,7 @@ void awardINT (RPCParameters *rpcParameters)
|
||||
{
|
||||
AIint* data= (AIint*)rpcParameters->input;
|
||||
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[ data->ubID ];
|
||||
SOLDIERTYPE *pSoldier = data->ubID;
|
||||
|
||||
StartInterrupt();
|
||||
|
||||
|
||||
+17
-17
@@ -37,7 +37,7 @@ extern UINT8 cGameType;
|
||||
extern bool allowlaptop;
|
||||
|
||||
extern UINT8 netbTeam;
|
||||
extern UINT8 ubID_prefix;
|
||||
extern UINT16 ubID_prefix;
|
||||
extern FLOAT cDamageMultiplier;
|
||||
|
||||
//OJW - 20081218
|
||||
@@ -97,34 +97,34 @@ void send_dir ( SOLDIERTYPE *pSoldier, UINT16 usDesiredDirection );
|
||||
void send_fire( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo );
|
||||
void send_hit( EV_S_WEAPONHIT *SWeaponHit );
|
||||
void send_bullet( BULLET * pBullet, UINT16 usHandItem);
|
||||
void send_hire( UINT8 iNewIndex, UINT8 ubCurrentSoldier, INT16 iTotalContractLength, BOOLEAN fCopyProfileItemsOver);
|
||||
void send_dismiss( UINT8 ubCurrentSoldier);
|
||||
void send_hire( SoldierID iNewIndex, UINT8 ubCurrentSoldier, INT16 iTotalContractLength, BOOLEAN fCopyProfileItemsOver);
|
||||
void send_dismiss( UINT16 ubCurrentSoldierID);
|
||||
|
||||
void send_gui_pos(SOLDIERTYPE *pSoldier, FLOAT dNewXPos, FLOAT dNewYPos);
|
||||
void send_gui_dir(SOLDIERTYPE *pSoldier, UINT16 usNewDirection);
|
||||
|
||||
void send_EndTurn( UINT8 ubNextTeam );
|
||||
|
||||
void send_AI( SOLDIERCREATE_STRUCT *pCreateStruct, UINT8 *pubID );
|
||||
void send_AI( SOLDIERCREATE_STRUCT *pCreateStruct );
|
||||
|
||||
void send_stop (EV_S_STOP_MERC *SStopMerc);
|
||||
|
||||
void send_interrupt(SOLDIERTYPE *pSoldier);
|
||||
|
||||
// OJW - 20091002 - explosives
|
||||
void send_grenade (OBJECTTYPE *pGameObj, float dLifeLength, float xPos, float yPos, float zPos, float xForce, float yForce, float zForce, UINT32 sTargetGridNo, UINT8 ubOwner, UINT8 ubActionCode, UINT32 uiActionData, INT32 iRealObjectID , bool bIsThrownGrenade);
|
||||
void send_grenade_result (float xPos, float yPos, float zPos, INT32 sGridNo, UINT8 ubOwnerID, INT32 iRealObjectID, bool bIsDud);
|
||||
void send_plant_explosive (UINT8 ubID,UINT16 usItem,UINT8 ubItemStatus,UINT16 usFlags, UINT32 sGridNo,UINT8 ubLevel, UINT32 uiWorldIndex);
|
||||
void send_detonate_explosive (UINT32 uiWorldIndex, UINT8 ubID);
|
||||
void send_spreadeffect ( INT32 sGridNo, UINT8 ubRadius, UINT16 usItem, UINT8 ubOwner, BOOLEAN fSubsequent, INT8 bLevel, INT32 iSmokeEffectID );
|
||||
void send_newsmokeeffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT8 ubOwner, INT32 iSmokeEffectID);
|
||||
void send_gasdamage( SOLDIERTYPE * pSoldier, UINT16 usExplosiveClassID , INT16 sSubsequent, BOOLEAN fRecompileMovementCosts, INT16 sWoundAmt, INT16 sBreathAmt, UINT8 ubOwner );
|
||||
void send_explosivedamage( UINT8 ubPerson, UINT8 ubOwner, INT32 sBombGridNo, INT16 sWoundAmt, INT16 sBreathAmt, UINT32 uiDist, UINT16 usItem, INT16 sSubsequent );
|
||||
void send_disarm_explosive(UINT32 sGridNo, UINT32 uiWorldIndex, UINT8 ubID);
|
||||
void send_grenade (OBJECTTYPE *pGameObj, float dLifeLength, float xPos, float yPos, float zPos, float xForce, float yForce, float zForce, UINT32 sTargetGridNo, SoldierID ubOwner, UINT8 ubActionCode, UINT32 uiActionData, INT32 iRealObjectID, bool bIsThrownGrenade);
|
||||
void send_grenade_result (float xPos, float yPos, float zPos, INT32 sGridNo, SoldierID ubOwnerID, INT32 iRealObjectID, bool bIsDud);
|
||||
void send_plant_explosive ( SoldierID ubID,UINT16 usItem,UINT8 ubItemStatus,UINT16 usFlags, UINT32 sGridNo,UINT8 ubLevel, UINT32 uiWorldIndex);
|
||||
void send_detonate_explosive (UINT32 uiWorldIndex, SoldierID ubID);
|
||||
void send_spreadeffect ( INT32 sGridNo, UINT8 ubRadius, UINT16 usItem, SoldierID ubOwner, BOOLEAN fSubsequent, INT8 bLevel, INT32 iSmokeEffectID );
|
||||
void send_newsmokeeffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, SoldierID ubOwner, INT32 iSmokeEffectID);
|
||||
void send_gasdamage( SOLDIERTYPE * pSoldier, UINT16 usExplosiveClassID, INT16 sSubsequent, BOOLEAN fRecompileMovementCosts, INT16 sWoundAmt, INT16 sBreathAmt, SoldierID ubOwner );
|
||||
void send_explosivedamage( SoldierID ubPerson, SoldierID ubOwner, INT32 sBombGridNo, INT16 sWoundAmt, INT16 sBreathAmt, UINT32 uiDist, UINT16 usItem, INT16 sSubsequent );
|
||||
void send_disarm_explosive(UINT32 sGridNo, UINT32 uiWorldIndex, SoldierID ubID);
|
||||
|
||||
void OpenChatMsgBox(void);
|
||||
|
||||
INT8 FireBullet( UINT8 ubFirer, BULLET * pBullet, BOOLEAN fFake );
|
||||
INT8 FireBullet( SoldierID ubFirer, BULLET * pBullet, BOOLEAN fFake );
|
||||
|
||||
void reapplySETTINGS();
|
||||
|
||||
@@ -212,7 +212,7 @@ extern BOOLEAN fClientReceivedAllFiles;
|
||||
// sick of confusing myself :)
|
||||
|
||||
// this one should be called before passing an ID off the client
|
||||
inline UINT8 MPEncodeSoldierID( UINT8 ubID )
|
||||
inline SoldierID MPEncodeSoldierID( SoldierID ubID )
|
||||
{
|
||||
if ( ubID < 20 )
|
||||
return ubID + ubID_prefix; // soldier is ours
|
||||
@@ -221,7 +221,7 @@ inline UINT8 MPEncodeSoldierID( UINT8 ubID )
|
||||
}
|
||||
|
||||
// this one can be called anywhere, even if the ID was not "encoded"
|
||||
inline UINT8 MPDecodeSoldierID( UINT8 ubID )
|
||||
inline SoldierID MPDecodeSoldierID( SoldierID ubID )
|
||||
{
|
||||
if ( ubID >= ubID_prefix && ubID < (ubID_prefix + 7) )
|
||||
return ubID - ubID_prefix; // soldier is ours
|
||||
@@ -234,7 +234,7 @@ inline bool IsOurSoldier (SOLDIERTYPE* pSoldier)
|
||||
return pSoldier->bTeam == netbTeam || pSoldier->bTeam == 0;
|
||||
}
|
||||
|
||||
inline bool IsOurSoldier (UINT8 ubID)
|
||||
inline bool IsOurSoldier (UINT16 ubID)
|
||||
{
|
||||
return (ubID >= ubID_prefix && ubID < (ubID_prefix + 7)) || ubID < 20;
|
||||
}
|
||||
|
||||
@@ -5,29 +5,29 @@ extern int readyteamreg[10];
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UINT16 soldier_id;
|
||||
UINT16 attacker_id;
|
||||
SoldierID soldier_id;
|
||||
SoldierID attacker_id;
|
||||
UINT8 attacker_team;
|
||||
UINT8 soldier_team;
|
||||
}death_struct;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UINT16 ubID;
|
||||
SoldierID ubID;
|
||||
INT32 sGridNo;
|
||||
BOOLEAN fNoAnimations;
|
||||
}doors;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UINT16 ubID;
|
||||
SoldierID ubID;
|
||||
INT8 bLife;
|
||||
INT8 bBleeding;
|
||||
}heal;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UINT16 ubID;
|
||||
SoldierID ubID;
|
||||
INT8 bteam;
|
||||
}AIint;
|
||||
|
||||
@@ -62,7 +62,7 @@ void startCombat(UINT8 ubStartingTeam);
|
||||
void intAI (SOLDIERTYPE *pSoldier );
|
||||
void teamwiped (void);
|
||||
BOOLEAN check_status (void);
|
||||
extern UINT8 NumEnemyInSector( );
|
||||
extern INT8 NumActiveAndConsciousTeamMembers( UINT8 ubTeam );
|
||||
extern UINT16 NumEnemyInSector( );
|
||||
extern UINT16 NumActiveAndConsciousTeamMembers( UINT8 ubTeam );
|
||||
void send_heal (SOLDIERTYPE *pSoldier );
|
||||
void requestAIint(SOLDIERTYPE *pSoldier );
|
||||
void requestAIint(SOLDIERTYPE *pSoldier );
|
||||
|
||||
+8
-11
@@ -227,7 +227,7 @@ void sendHIT(RPCParameters *rpcParameters)
|
||||
{
|
||||
EV_S_WEAPONHIT* hit = (EV_S_WEAPONHIT*)rpcParameters->input;
|
||||
|
||||
int team = MercPtrs[ hit->ubAttackerID ]->bTeam;
|
||||
int team = hit->ubAttackerID->bTeam;
|
||||
|
||||
// AI
|
||||
if (team == 1)
|
||||
@@ -365,7 +365,7 @@ void sendDEATH(RPCParameters *rpcParameters)
|
||||
_itow(iCLnum,clnum,10);
|
||||
ScreenMsg( FONT_LTBLUE, MSG_MPSYSTEM, L"DEBUG: Soldier Killed : Attacking team %s , Soldier Team %s, Sender %s",ateam,steam,clnum);
|
||||
char logmsg[100];
|
||||
sprintf(logmsg, "MP DEBUG: Soldier Killed #%i : Attacking team %i , Soldier Team %i, Sender %i\n",nDeath->soldier_id,nDeath->attacker_team,nDeath->soldier_team,iCLnum);
|
||||
sprintf( logmsg, "MP DEBUG: Soldier Killed #%i : Attacking team %i , Soldier Team %i, Sender %i\n", nDeath->soldier_id.i, nDeath->attacker_team, nDeath->soldier_team, iCLnum );
|
||||
MPDebugMsg( logmsg );
|
||||
#endif
|
||||
}
|
||||
@@ -373,10 +373,9 @@ void sendhitSTRUCT(RPCParameters *rpcParameters)
|
||||
{
|
||||
EV_S_STRUCTUREHIT* miss = (EV_S_STRUCTUREHIT*)rpcParameters->input;
|
||||
|
||||
SOLDIERTYPE* pAttacker = MercPtrs[ miss->ubAttackerID ];
|
||||
if (pAttacker != NULL)
|
||||
if ( miss->ubAttackerID != NOBODY)
|
||||
{
|
||||
int team = MercPtrs[ miss->ubAttackerID ]->bTeam;
|
||||
int team = miss->ubAttackerID->bTeam;
|
||||
|
||||
// AI
|
||||
if (team == 1)
|
||||
@@ -398,10 +397,9 @@ void sendhitWINDOW(RPCParameters *rpcParameters)
|
||||
EV_S_WINDOWHIT* miss = (EV_S_WINDOWHIT*)rpcParameters->input;
|
||||
|
||||
|
||||
SOLDIERTYPE* pAttacker = MercPtrs[ miss->ubAttackerID ];
|
||||
if (pAttacker != NULL)
|
||||
if ( miss->ubAttackerID != NOBODY)
|
||||
{
|
||||
int team = MercPtrs[ miss->ubAttackerID ]->bTeam;
|
||||
int team = miss->ubAttackerID->bTeam;
|
||||
|
||||
// AI
|
||||
if (team == 1)
|
||||
@@ -422,10 +420,9 @@ void sendMISS(RPCParameters *rpcParameters)
|
||||
{
|
||||
EV_S_MISS* miss = (EV_S_MISS*)rpcParameters->input;
|
||||
|
||||
SOLDIERTYPE* pAttacker = MercPtrs[ miss->ubAttackerID ];
|
||||
if (pAttacker != NULL)
|
||||
if ( miss->ubAttackerID != NOBODY)
|
||||
{
|
||||
int team = MercPtrs[ miss->ubAttackerID ]->bTeam;
|
||||
int team = miss->ubAttackerID->bTeam;
|
||||
|
||||
// AI
|
||||
if (team == 1)
|
||||
|
||||
@@ -157,7 +157,7 @@ void ViewCreaturesCallback( GUI_BUTTON *btn, INT32 reason );
|
||||
void ExtractAndUpdatePopulations();
|
||||
void PrintEnemyPopTable();
|
||||
void PrintEnemiesKilledTable();
|
||||
UINT8 ChooseEnemyIconColor( UINT8 ubAdmins, UINT8 ubTroops, UINT8 ubElites, UINT8 ubTanks, UINT8 ubJeeps );
|
||||
UINT8 ChooseEnemyIconColor( UINT16 ubAdmins, UINT16 ubTroops, UINT16 ubElites, UINT16 ubTanks, UINT16 ubJeeps );
|
||||
void BlitGroupIcon( UINT8 ubIconType, UINT8 ubIconColor, UINT32 uiX, UINT32 uiY, HVOBJECT hVObject );
|
||||
void PrintDetailedEnemiesInSectorInfo( INT32 iScreenX, INT32 iScreenY, UINT8 ubSectorX, UINT8 ubSectorY );
|
||||
|
||||
@@ -536,7 +536,7 @@ void RenderMovingGroupsAndMercs()
|
||||
GROUP *pGroup;
|
||||
HVOBJECT hVObject;
|
||||
INT32 x, y;
|
||||
UINT8 ubNumTroops, ubNumAdmins, ubNumElites, ubNumTanks, ubNumJeeps;
|
||||
UINT16 ubNumTroops, ubNumAdmins, ubNumElites, ubNumTanks, ubNumJeeps;
|
||||
float ratio;
|
||||
INT32 minX, maxX, minY, maxY;
|
||||
UINT8 ubIconType;
|
||||
@@ -648,8 +648,8 @@ void RenderMovingGroupsAndMercs()
|
||||
void RenderInfoInSector()
|
||||
{
|
||||
UINT8 ubSectorX, ubSectorY;
|
||||
UINT8 ubMercs=0, ubActive=0, ubUnconcious=0, ubCollapsed=0;
|
||||
INT32 i, xp, yp;
|
||||
UINT16 ubMercs=0, ubActive=0, ubUnconcious=0, ubCollapsed=0;
|
||||
INT32 xp, yp;
|
||||
|
||||
if( gfViewEnemies && !gbViewLevel )
|
||||
{
|
||||
@@ -694,11 +694,10 @@ void RenderInfoInSector()
|
||||
|
||||
|
||||
//Count the number of mercs and their states (even for underground sectors)
|
||||
for( i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; i++ )
|
||||
for( SoldierID id = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; id <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++id )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier;
|
||||
SOLDIERTYPE *pSoldier = id;
|
||||
|
||||
pSoldier = MercPtrs[ i ];
|
||||
if( pSoldier->bActive && pSoldier->sSectorX == ubSectorX && pSoldier->sSectorY == ubSectorY && pSoldier->bSectorZ == gbViewLevel )
|
||||
{
|
||||
if( pSoldier->stats.bLife )
|
||||
@@ -722,7 +721,7 @@ void RenderInfoInSector()
|
||||
{
|
||||
SECTORINFO *pSector;
|
||||
GROUP *pGroup;
|
||||
UINT8 ubNumAdmins = 0, ubNumTroops = 0, ubNumElites = 0, ubNumTanks = 0, ubNumJeeps = 0, ubAdminsInBattle = 0, ubTroopsInBattle = 0, ubElitesInBattle = 0, ubTanksInBattle = 0, ubJeepsInBattle = 0,ubNumGroups = 0;
|
||||
UINT16 ubNumAdmins = 0, ubNumTroops = 0, ubNumElites = 0, ubNumTanks = 0, ubNumJeeps = 0, ubAdminsInBattle = 0, ubTroopsInBattle = 0, ubElitesInBattle = 0, ubTanksInBattle = 0, ubJeepsInBattle = 0,ubNumGroups = 0;
|
||||
|
||||
pSector = &SectorInfo[ SECTOR( ubSectorX, ubSectorY ) ];
|
||||
|
||||
@@ -1832,7 +1831,7 @@ void PrintEnemiesKilledTable()
|
||||
|
||||
|
||||
|
||||
UINT8 ChooseEnemyIconColor( UINT8 ubAdmins, UINT8 ubTroops, UINT8 ubElites, UINT8 ubTanks, UINT8 ubJeeps )
|
||||
UINT8 ChooseEnemyIconColor( UINT16 ubAdmins, UINT16 ubTroops, UINT16 ubElites, UINT16 ubTanks, UINT16 ubJeeps )
|
||||
{
|
||||
UINT8 ubIconColor;
|
||||
|
||||
|
||||
+3
-3
@@ -1091,7 +1091,7 @@ void EnemyHeliSAMCheck( INT16 id )
|
||||
// also check whether this sector is not enemy-controlled - we can't have the AI shooting at its own helis
|
||||
if ( pSAMStrategicMap && !pSAMStrategicMap->fEnemyControlled )
|
||||
{
|
||||
UINT16 ubBestSAMOperatorID = NOBODY;
|
||||
SoldierID ubBestSAMOperatorID = NOBODY;
|
||||
FLOAT samcth = GetBestSAMOperatorCTH_Player( gpSamSectorX[i], gpSamSectorY[i], 0, &ubBestSAMOperatorID );
|
||||
|
||||
// cth is reduced if SAM is damaged, even if it can still operate
|
||||
@@ -1142,9 +1142,9 @@ void EnemyHeliSAMCheck( INT16 id )
|
||||
if ( ubBestSAMOperatorID != NOBODY )
|
||||
{
|
||||
if ( fHit )
|
||||
StatChange( MercPtrs[ubBestSAMOperatorID], EXPERAMT, fDestroyed ? 30 : 10, TRUE );
|
||||
StatChange( ubBestSAMOperatorID, EXPERAMT, fDestroyed ? 30 : 10, TRUE );
|
||||
|
||||
StatChange( MercPtrs[ubBestSAMOperatorID], MECHANAMT, 5, TRUE );
|
||||
StatChange( ubBestSAMOperatorID, MECHANAMT, 5, TRUE );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+376
-300
File diff suppressed because it is too large
Load Diff
+22
-2
@@ -56,6 +56,26 @@ enum
|
||||
SQUAD_18,
|
||||
SQUAD_19,
|
||||
SQUAD_20,
|
||||
SQUAD_21,
|
||||
SQUAD_22,
|
||||
SQUAD_23,
|
||||
SQUAD_24,
|
||||
SQUAD_25,
|
||||
SQUAD_26,
|
||||
SQUAD_27,
|
||||
SQUAD_28,
|
||||
SQUAD_29,
|
||||
SQUAD_30,
|
||||
SQUAD_31,
|
||||
SQUAD_32,
|
||||
SQUAD_33,
|
||||
SQUAD_34,
|
||||
SQUAD_35,
|
||||
SQUAD_36,
|
||||
SQUAD_37,
|
||||
SQUAD_38,
|
||||
SQUAD_39,
|
||||
SQUAD_40,
|
||||
ON_DUTY,
|
||||
DOCTOR,
|
||||
PATIENT,
|
||||
@@ -321,7 +341,7 @@ UINT32 CalculatePrisonGuardValue(SOLDIERTYPE *pSoldier );
|
||||
UINT32 CalculateSnitchInterrogationValue(SOLDIERTYPE *pSoldier, UINT16 *pusMaxPts );
|
||||
|
||||
// Flugente: Determine the best cth with SAMs in a sector, and which merc has that cth if present
|
||||
FLOAT GetBestSAMOperatorCTH_Player( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ, UINT16 *pubID );
|
||||
FLOAT GetBestSAMOperatorCTH_Player( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ, SoldierID *pubID );
|
||||
|
||||
INT16 GetTrainWorkerPts(SOLDIERTYPE *pSoldier);
|
||||
|
||||
@@ -595,4 +615,4 @@ UINT8 CalcSoldierNeedForSleep( SOLDIERTYPE *pSoldier );
|
||||
// Flugente: administration assignment
|
||||
FLOAT GetAdministrationPercentage( INT16 sX, INT16 sY );
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
+49
-43
@@ -163,13 +163,13 @@ typedef struct AUTORESOLVE_STRUCT
|
||||
|
||||
UINT8 ubEnemyLeadership;
|
||||
UINT8 ubPlayerLeadership;
|
||||
UINT8 ubMercs, ubCivs, ubEnemies;
|
||||
UINT8 ubAdmins, ubTroops, ubElites, ubTanks, ubJeeps, ubRobots;
|
||||
UINT8 ubYMCreatures, ubYFCreatures, ubAMCreatures, ubAFCreatures;
|
||||
UINT8 ubBloodcats;
|
||||
UINT8 ubZombies;
|
||||
UINT8 ubBandits;
|
||||
UINT8 ubAliveMercs, ubAliveCivs, ubAliveEnemies;
|
||||
UINT16 ubMercs, ubCivs, ubEnemies;
|
||||
UINT16 ubAdmins, ubTroops, ubElites, ubTanks, ubJeeps, ubRobots;
|
||||
UINT16 ubYMCreatures, ubYFCreatures, ubAMCreatures, ubAFCreatures;
|
||||
UINT16 ubBloodcats;
|
||||
UINT16 ubZombies;
|
||||
UINT16 ubBandits;
|
||||
UINT16 ubAliveMercs, ubAliveCivs, ubAliveEnemies;
|
||||
UINT8 ubMercCols, ubMercRows;
|
||||
UINT8 ubEnemyCols, ubEnemyRows;
|
||||
UINT8 ubCivCols, ubCivRows;
|
||||
@@ -410,10 +410,10 @@ void EliminateAllEnemies( UINT8 ubSectorX, UINT8 ubSectorY )
|
||||
GROUP *pGroup, *pDeleteGroup;
|
||||
SECTORINFO *pSector;
|
||||
INT32 i;
|
||||
UINT8 ubNumEnemies[ NUM_ENEMY_RANKS ];
|
||||
UINT8 ubNumTanks = 0;
|
||||
UINT8 ubNumJeeps = 0;
|
||||
UINT8 ubNumRobots = 0;
|
||||
UINT16 ubNumEnemies[NUM_ENEMY_RANKS]{};
|
||||
UINT16 ubNumTanks = 0;
|
||||
UINT16 ubNumJeeps = 0;
|
||||
UINT16 ubNumRobots = 0;
|
||||
UINT8 ubRankIndex;
|
||||
|
||||
//Clear any possible battle locator
|
||||
@@ -460,7 +460,6 @@ void EliminateAllEnemies( UINT8 ubSectorX, UINT8 ubSectorY )
|
||||
pSector->ubNumJeeps = 0;
|
||||
pSector->ubNumRobots = 0;
|
||||
pSector->ubNumCreatures = 0;
|
||||
pSector->bLastKnownEnemies = 0;
|
||||
//Remove the mobile forces here, but only if battle is over.
|
||||
while( pGroup )
|
||||
{
|
||||
@@ -755,9 +754,9 @@ void AssociateEnemiesWithStrategicGroups()
|
||||
{
|
||||
SECTORINFO *pSector;
|
||||
GROUP *pGroup;
|
||||
UINT8 ubNumAdmins, ubNumTroops, ubNumElites, ubNumTanks, ubNumJeeps, ubNumRobots; //how many soldiers of the type do we still have to assign to a group?
|
||||
UINT8 ubISNumAdmins, ubISNumTroops, ubISNumElites, ubISNumTanks, ubISNumJeeps, ubISNumRobots;
|
||||
UINT8 ubNumElitesInGroup, ubNumTroopsInGroup, ubNumAdminsInGroup, ubNumTanksInGroup, ubNumJeepsInGroup, ubNumRobotsInGroup;
|
||||
UINT16 ubNumAdmins, ubNumTroops, ubNumElites, ubNumTanks, ubNumJeeps, ubNumRobots; //how many soldiers of the type do we still have to assign to a group?
|
||||
UINT16 ubISNumAdmins, ubISNumTroops, ubISNumElites, ubISNumTanks, ubISNumJeeps, ubISNumRobots;
|
||||
UINT16 ubNumElitesInGroup, ubNumTroopsInGroup, ubNumAdminsInGroup, ubNumTanksInGroup, ubNumJeepsInGroup, ubNumRobotsInGroup;
|
||||
INT32 i;
|
||||
UINT8 pSectors[4];
|
||||
UINT8 ubDirAmount;
|
||||
@@ -1839,7 +1838,6 @@ void RenderAutoResolve()
|
||||
HandleMoraleEvent( NULL, MORALE_BATTLE_WON, gpAR->ubSectorX, gpAR->ubSectorY, 0 );
|
||||
if( ProcessLoyalty() )HandleGlobalLoyaltyEvent( GLOBAL_LOYALTY_BATTLE_WON, gpAR->ubSectorX, gpAR->ubSectorY, 0 );
|
||||
|
||||
SectorInfo[ SECTOR( gpAR->ubSectorX, gpAR->ubSectorY ) ].bLastKnownEnemies = 0;
|
||||
SetThisSectorAsPlayerControlled( gpAR->ubSectorX, gpAR->ubSectorY, 0, TRUE );
|
||||
#ifdef NEWMUSIC
|
||||
GlobalSoundID = MusicSoundValues[ SECTOR( gpAR->ubSectorX, gpAR->ubSectorY ) ].SoundTacticalVictory[0];
|
||||
@@ -1854,29 +1852,35 @@ void RenderAutoResolve()
|
||||
|
||||
case BATTLE_SURRENDERED:
|
||||
case BATTLE_CAPTURED:
|
||||
for( i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; i++ )
|
||||
{
|
||||
SoldierID id = gTacticalStatus.Team[OUR_TEAM].bFirstID;
|
||||
const SoldierID lastid = gTacticalStatus.Team[OUR_TEAM].bLastID;
|
||||
for ( ; id <= lastid; ++id )
|
||||
{
|
||||
if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->stats.bLife && !(MercPtrs[ i ]->flags.uiStatusFlags & SOLDIER_VEHICLE) && !AM_A_ROBOT( MercPtrs[ i ] ) )
|
||||
SOLDIERTYPE *pSoldier = id;
|
||||
|
||||
if ( pSoldier->bActive && pSoldier->stats.bLife && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) && !AM_A_ROBOT( pSoldier ) )
|
||||
{ //Merc is active and alive, and not a vehicle or robot
|
||||
if ( PlayerMercInvolvedInThisCombat( MercPtrs[ i ] ) )
|
||||
if ( PlayerMercInvolvedInThisCombat( pSoldier ) )
|
||||
{
|
||||
// This morale event is PER INDIVIDUAL SOLDIER
|
||||
HandleMoraleEvent( MercPtrs[ i ], MORALE_MERC_CAPTURED, gpAR->ubSectorX, gpAR->ubSectorY, 0 );
|
||||
HandleMoraleEvent( pSoldier, MORALE_MERC_CAPTURED, gpAR->ubSectorX, gpAR->ubSectorY, 0 );
|
||||
}
|
||||
}
|
||||
}
|
||||
HandleMoraleEvent( NULL, MORALE_HEARD_BATTLE_LOST, gpAR->ubSectorX, gpAR->ubSectorY, 0 );
|
||||
if( ProcessLoyalty() )HandleGlobalLoyaltyEvent( GLOBAL_LOYALTY_BATTLE_LOST, gpAR->ubSectorX, gpAR->ubSectorY, 0 );
|
||||
#ifdef NEWMUSIC
|
||||
GlobalSoundID = MusicSoundValues[ SECTOR( gpAR->ubSectorX, gpAR->ubSectorY ) ].SoundTacticalDeath[0];
|
||||
if ( MusicSoundValues[ SECTOR( gpAR->ubSectorX, gpAR->ubSectorY ) ].SoundTacticalDeath[0] != -1 )
|
||||
SetMusicModeID( MUSIC_TACTICAL_DEATH, MusicSoundValues[ SECTOR( gpAR->ubSectorX, gpAR->ubSectorY ) ].SoundTacticalDeath[0] );
|
||||
if ( ProcessLoyalty() )HandleGlobalLoyaltyEvent( GLOBAL_LOYALTY_BATTLE_LOST, gpAR->ubSectorX, gpAR->ubSectorY, 0 );
|
||||
#ifdef NEWMUSIC
|
||||
GlobalSoundID = MusicSoundValues[SECTOR( gpAR->ubSectorX, gpAR->ubSectorY )].SoundTacticalDeath[0];
|
||||
if ( MusicSoundValues[SECTOR( gpAR->ubSectorX, gpAR->ubSectorY )].SoundTacticalDeath[0] != -1 )
|
||||
SetMusicModeID( MUSIC_TACTICAL_DEATH, MusicSoundValues[SECTOR( gpAR->ubSectorX, gpAR->ubSectorY )].SoundTacticalDeath[0] );
|
||||
else
|
||||
#endif
|
||||
SetMusicMode( MUSIC_TACTICAL_DEATH );
|
||||
#endif
|
||||
SetMusicMode( MUSIC_TACTICAL_DEATH );
|
||||
|
||||
gsEnemyGainedControlOfSectorID = (INT16)SECTOR( gpAR->ubSectorX, gpAR->ubSectorY );
|
||||
break;
|
||||
}
|
||||
case BATTLE_DEFEAT:
|
||||
HandleMoraleEvent( NULL, MORALE_HEARD_BATTLE_LOST, gpAR->ubSectorX, gpAR->ubSectorY, 0 );
|
||||
|
||||
@@ -2048,7 +2052,7 @@ static void ARCreateMilitia( UINT8 mclass, INT32 i, INT16 sX, INT16 sY)
|
||||
swprintf( gpCivs[i].pSoldier->name, gpStrategicString[ STR_AR_MILITIA_NAME ] );
|
||||
}
|
||||
|
||||
static void ARCreateMilitiaSquad( UINT8 *cnt, UINT8 ubEliteMilitia, UINT8 ubRegMilitia, UINT8 ubGreenMilitia, INT16 sX, INT16 sY)
|
||||
static void ARCreateMilitiaSquad( UINT16 *cnt, UINT16 ubEliteMilitia, UINT16 ubRegMilitia, UINT16 ubGreenMilitia, INT16 sX, INT16 sY)
|
||||
{
|
||||
while( *cnt < gpAR->ubCivs && (ubEliteMilitia || ubRegMilitia || ubGreenMilitia) )
|
||||
{
|
||||
@@ -2077,10 +2081,10 @@ void CreateAutoResolveInterface()
|
||||
VOBJECT_DESC VObjectDesc;
|
||||
INT32 i, index;
|
||||
HVOBJECT hVObject;
|
||||
UINT8 ubGreenMilitia, ubRegMilitia, ubEliteMilitia;
|
||||
UINT16 ubGreenMilitia, ubRegMilitia, ubEliteMilitia;
|
||||
UINT16 pMoveDir[4][3];
|
||||
UINT8 uiDirNumber = 0;
|
||||
UINT8 cnt;
|
||||
UINT16 cnt;
|
||||
|
||||
//Setup new autoresolve blanket interface.
|
||||
MSYS_DefineRegion( &gpAR->AutoResolveRegion, 0 + xResOffset, 0, SCREEN_WIDTH, SCREEN_HEIGHT, MSYS_PRIORITY_HIGH-1, 0,
|
||||
@@ -2200,7 +2204,7 @@ void CreateAutoResolveInterface()
|
||||
ubGreenMilitia = MilitiaInSectorOfRank( gpAR->ubSectorX, gpAR->ubSectorY, GREEN_MILITIA );
|
||||
|
||||
// see if we get any bonus militia from nearby towns
|
||||
UINT8 bonusGreenMilitia = 0, bonusRegularMilitia = 0, bonusEliteMilitia = 0;
|
||||
UINT16 bonusGreenMilitia = 0, bonusRegularMilitia = 0, bonusEliteMilitia = 0;
|
||||
RebelCommand::GetBonusMilitia(gpAR->ubSectorX, gpAR->ubSectorY, bonusGreenMilitia, bonusRegularMilitia, bonusEliteMilitia, FALSE); // no need to create a group for autoresolve as we're just increasing local militia pop
|
||||
ubEliteMilitia += bonusEliteMilitia;
|
||||
ubRegMilitia += bonusRegularMilitia;
|
||||
@@ -2837,7 +2841,7 @@ void RetreatButtonCallback( GUI_BUTTON *btn, INT32 reason )
|
||||
if( gpAR->pRobotCell )
|
||||
{
|
||||
//if robot is retreating, set the retreat time to be the same as the robot's controller.
|
||||
UINT8 ubRobotControllerID;
|
||||
SoldierID ubRobotControllerID;
|
||||
|
||||
ubRobotControllerID = gpAR->pRobotCell->pSoldier->ubRobotRemoteHolderID;
|
||||
|
||||
@@ -3011,9 +3015,7 @@ void MercCellMouseClickCallback( MOUSE_REGION *reg, INT32 reason )
|
||||
|
||||
if( gpAR->pRobotCell )
|
||||
{ //if controller is retreating, make the robot retreat too.
|
||||
UINT8 ubRobotControllerID;
|
||||
|
||||
ubRobotControllerID = gpAR->pRobotCell->pSoldier->ubRobotRemoteHolderID;
|
||||
SoldierID ubRobotControllerID = gpAR->pRobotCell->pSoldier->ubRobotRemoteHolderID;
|
||||
|
||||
if( ubRobotControllerID == NOBODY )
|
||||
{
|
||||
@@ -3067,7 +3069,7 @@ void CalculateAutoResolveInfo()
|
||||
&gpAR->ubAMCreatures, &gpAR->ubAFCreatures );
|
||||
}
|
||||
|
||||
gpAR->ubEnemies = (UINT8)min( gpAR->ubYMCreatures + gpAR->ubYFCreatures + gpAR->ubAMCreatures + gpAR->ubAFCreatures, MAX_AR_TEAM_SIZE );
|
||||
gpAR->ubEnemies = min( gpAR->ubYMCreatures + gpAR->ubYFCreatures + gpAR->ubAMCreatures + gpAR->ubAFCreatures, MAX_AR_TEAM_SIZE );
|
||||
}
|
||||
else if ( GetEnemyEncounterCode() == BLOODCAT_ATTACK_CODE ||
|
||||
GetEnemyEncounterCode() == ZOMBIE_ATTACK_CODE ||
|
||||
@@ -3087,7 +3089,7 @@ void CalculateAutoResolveInfo()
|
||||
gpAR->ubBandits = gubNumCreaturesAttackingTown;
|
||||
}
|
||||
|
||||
gpAR->ubEnemies = (UINT8)min( gubNumCreaturesAttackingTown, MAX_AR_TEAM_SIZE );
|
||||
gpAR->ubEnemies = min( gubNumCreaturesAttackingTown, MAX_AR_TEAM_SIZE );
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -3096,7 +3098,7 @@ void CalculateAutoResolveInfo()
|
||||
GetNumberOfEnemiesInFiveSectors( gpAR->ubSectorX, gpAR->ubSectorY,
|
||||
&gpAR->ubAdmins, &gpAR->ubTroops, &gpAR->ubElites, &gpAR->ubRobots, &gpAR->ubTanks, &gpAR->ubJeeps );
|
||||
|
||||
gpAR->ubEnemies = (UINT8)min( gpAR->ubAdmins + gpAR->ubTroops + gpAR->ubElites + gpAR->ubTanks + gpAR->ubJeeps + gpAR->ubRobots, MAX_AR_TEAM_SIZE );
|
||||
gpAR->ubEnemies = min( gpAR->ubAdmins + gpAR->ubTroops + gpAR->ubElites + gpAR->ubTanks + gpAR->ubJeeps + gpAR->ubRobots, MAX_AR_TEAM_SIZE );
|
||||
}
|
||||
|
||||
gfTransferTacticalOppositionToAutoResolve = FALSE;
|
||||
@@ -3735,7 +3737,7 @@ UINT8 GetUnusedMercProfileID()
|
||||
BOOLEAN fUnique = FALSE;
|
||||
while( !fUnique )
|
||||
{
|
||||
ubRandom = (UINT8)PreRandom( 40 );
|
||||
ubRandom = (UINT8)PreRandom(CODE_MAXIMUM_NUMBER_OF_PLAYER_MERCS);
|
||||
for( i = 0; i < 19; i++ )
|
||||
{
|
||||
fUnique = TRUE;
|
||||
@@ -3753,7 +3755,7 @@ void CreateTempPlayerMerc()
|
||||
{
|
||||
SOLDIERCREATE_STRUCT MercCreateStruct;
|
||||
static INT32 iSoldierCount=0;
|
||||
UINT8 ubID;
|
||||
SoldierID ubID;
|
||||
|
||||
//Init the merc create structure with basic information
|
||||
MercCreateStruct.bTeam = SOLDIER_CREATE_AUTO_TEAM;
|
||||
@@ -5961,12 +5963,16 @@ void CheckForSoldiersWhoRetreatedIntoMilitiaHeldSectors()
|
||||
(!gTacticalStatus.fEnemyInSector))
|
||||
{
|
||||
unsigned mercCnt = 0;
|
||||
for( int i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++i )
|
||||
SoldierID id = gTacticalStatus.Team[OUR_TEAM].bFirstID;
|
||||
const SoldierID lastid = gTacticalStatus.Team[OUR_TEAM].bLastID;
|
||||
for ( ; id <= lastid; ++id )
|
||||
{
|
||||
if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->stats.bLife && !(MercPtrs[ i ]->flags.uiStatusFlags & SOLDIER_VEHICLE) && !AM_A_ROBOT( MercPtrs[ i ] ) )
|
||||
SOLDIERTYPE *pSoldier = id;
|
||||
|
||||
if( pSoldier->bActive && pSoldier->stats.bLife && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) && !AM_A_ROBOT( pSoldier ) )
|
||||
{
|
||||
//Merc is active and alive, and not a vehicle or robot
|
||||
if ((MercPtrs[ i ]->sSectorX == sX) &&(MercPtrs[ i ]->sSectorY == sY) && (MercPtrs[ i ]->bSectorZ == 0))
|
||||
if ( (pSoldier->sSectorX == sX) && (pSoldier->sSectorY == sY) && (pSoldier->bSectorZ == 0) )
|
||||
{
|
||||
++mercCnt;
|
||||
}
|
||||
|
||||
+27
-30
@@ -487,21 +487,18 @@ typedef struct SECTORINFO
|
||||
//This value determines how quickly it is investigated by the enemy.
|
||||
UINT8 ubGarrisonID; //IF the sector has an ID for this (non 255), then the queen values this sector and it
|
||||
//indexes the garrison group.
|
||||
INT8 ubPendingReinforcements; //when the enemy owns this sector, this value will keep track of HIGH priority reinforcements -- not regular.
|
||||
INT8 ubPendingReinforcements; //when the enemy owns this sector, this value will keep track of HIGH priority reinforcements -- not regular.
|
||||
BOOLEAN fMilitiaTrainingPaid;
|
||||
UINT8 ubMilitiaTrainingPercentDone;
|
||||
UINT8 ubMilitiaTrainingHundredths;
|
||||
//enemy military presence
|
||||
BOOLEAN fPlayer[ 4 ]; //whether the player THINKS the sector is unde his control or not. array is for sublevels
|
||||
//enemy only info
|
||||
UINT8 ubNumTroops; //the actual number of troops here.
|
||||
UINT8 ubNumElites; //the actual number of elites here.
|
||||
UINT8 ubNumAdmins; //the actual number of admins here.
|
||||
UINT8 ubNumCreatures; //only set when immediately before ground attack made!
|
||||
UINT8 ubTroopsInBattle, ubElitesInBattle, ubAdminsInBattle, ubCreaturesInBattle;
|
||||
|
||||
INT8 bLastKnownEnemies; // -1 means never been there, no idea, otherwise it's what we'd observed most recently
|
||||
// while this is being maintained (partially, surely buggy), nothing uses it anymore. ARM
|
||||
UINT16 ubNumTroops; //the actual number of troops here.
|
||||
UINT16 ubNumElites; //the actual number of elites here.
|
||||
UINT16 ubNumAdmins; //the actual number of admins here.
|
||||
UINT16 ubNumCreatures; //only set when immediately before ground attack made!
|
||||
UINT16 ubTroopsInBattle, ubElitesInBattle, ubAdminsInBattle, ubCreaturesInBattle;
|
||||
|
||||
UINT32 ubDayOfLastCreatureAttack;
|
||||
UINT32 uiFacilitiesFlags; // the flags for various facilities
|
||||
@@ -511,15 +508,15 @@ typedef struct SECTORINFO
|
||||
//throught the sector without entering it.
|
||||
INT8 bNameId;
|
||||
INT8 bUSUSED;
|
||||
INT8 bBloodCats;
|
||||
INT8 bBloodCatPlacements;
|
||||
INT16 bBloodCats;
|
||||
INT16 bBloodCatPlacements;
|
||||
INT8 UNUSEDbSAMCondition;
|
||||
|
||||
UINT8 ubTravelRating; //Represents how travelled a sector is. Typically, the higher the travel rating,
|
||||
//the more people go near it. A travel rating of 0 means there are never people
|
||||
//around. This value is used for determining how often items would "vanish" from
|
||||
//a sector (nice theory, except it isn't being used that way. Stealing is only in towns. ARM)
|
||||
UINT8 ubNumberOfCivsAtLevel[ MAX_MILITIA_LEVELS ]; // town militia per experience class, 0/1/2 is GREEN/REGULAR/ELITE
|
||||
UINT16 ubNumberOfCivsAtLevel[ MAX_MILITIA_LEVELS ]; // town militia per experience class, 0/1/2 is GREEN/REGULAR/ELITE
|
||||
// HEADROCK HAM 3.6: Adding separate training percentage for MOBILES.
|
||||
UINT8 usFiller3;
|
||||
UINT8 usFiller1;
|
||||
@@ -551,8 +548,8 @@ typedef struct SECTORINFO
|
||||
|
||||
UINT32 uiTimeAIArtillerywasOrdered; // Flugente: updated every time an artillery strike is ordered from the militia
|
||||
|
||||
UINT8 ubNumTanks;
|
||||
UINT8 ubTanksInBattle;
|
||||
UINT16 ubNumTanks;
|
||||
UINT16 ubTanksInBattle;
|
||||
|
||||
// Flugente: disease
|
||||
UINT16 usNumCorpses; // number of corpses in this sector
|
||||
@@ -565,8 +562,8 @@ typedef struct SECTORINFO
|
||||
FLOAT dFortification_UnappliedProgress; // progress done via assignment work. As we cannot update unloaded sectors, update happens once sector is loaded
|
||||
|
||||
// Flugente: enemy jeeps
|
||||
UINT8 ubNumJeeps;
|
||||
UINT8 ubJeepsInBattle;
|
||||
UINT16 ubNumJeeps;
|
||||
UINT16 ubJeepsInBattle;
|
||||
|
||||
UINT8 usWorkers;
|
||||
UINT8 ubWorkerTrainingHundredths;
|
||||
@@ -583,8 +580,8 @@ typedef struct SECTORINFO
|
||||
UINT8 ubNumElites_Turncoat;
|
||||
UINT8 usExplorationProgress;
|
||||
|
||||
UINT8 ubNumRobots;
|
||||
UINT8 ubRobotsInBattle;
|
||||
UINT16 ubNumRobots;
|
||||
UINT16 ubRobotsInBattle;
|
||||
INT8 bPadding[ 6 ];
|
||||
|
||||
}SECTORINFO;
|
||||
@@ -600,18 +597,18 @@ typedef struct UNDERGROUND_SECTORINFO
|
||||
{
|
||||
UINT32 uiFlags;
|
||||
UINT8 ubSectorX, ubSectorY, ubSectorZ;
|
||||
UINT8 ubNumElites, ubNumTroops, ubNumAdmins, ubNumCreatures;
|
||||
UINT16 ubNumElites, ubNumTroops, ubNumAdmins, ubNumCreatures;
|
||||
UINT8 fVisited;
|
||||
INT8 ubTravelRating; //Represents how travelled a sector is. Typically, the higher the travel rating,
|
||||
INT8 ubTravelRating; //Represents how travelled a sector is. Typically, the higher the travel rating,
|
||||
//the more people go near it. A travel rating of 0 means there are never people
|
||||
//around. This value is used for determining how often items would "vanish" from
|
||||
//a sector.
|
||||
UINT32 uiTimeCurrentSectorWasLastLoaded; //Specifies the last time the player was in the sector
|
||||
struct UNDERGROUND_SECTORINFO *next;
|
||||
|
||||
UINT8 ubNumBloodcats; // Bloodcat population
|
||||
UINT16 ubNumBloodcats; // Bloodcat population
|
||||
UINT8 ubCreatureHabitat; //determines how creatures live in this sector (see creature spreading.c)
|
||||
UINT8 ubElitesInBattle, ubTroopsInBattle, ubAdminsInBattle, ubCreaturesInBattle;
|
||||
UINT16 ubElitesInBattle, ubTroopsInBattle, ubAdminsInBattle, ubCreaturesInBattle;
|
||||
|
||||
// adding these (should not change struct layout due to padding)
|
||||
UINT8 ubMusicMode, ubUnsed;
|
||||
@@ -622,20 +619,20 @@ typedef struct UNDERGROUND_SECTORINFO
|
||||
BOOLEAN fCampaignSector;
|
||||
#endif
|
||||
|
||||
UINT8 uiNumberOfPrisonersOfWar[PRISONER_MAX];
|
||||
UINT16 uiNumberOfPrisonersOfWar[PRISONER_MAX];
|
||||
|
||||
UINT8 ubNumTanks;
|
||||
UINT8 ubTanksInBattle;
|
||||
UINT16 ubNumTanks;
|
||||
UINT16 ubTanksInBattle;
|
||||
|
||||
// Flugente: fortification
|
||||
FLOAT dFortification_MaxPossible; // the amount of fortification that can still be done in this sector, given the current layout plans. Is updated every time we unload a sector
|
||||
FLOAT dFortification_UnappliedProgress; // progress done via assignment work. As we cannot update unloaded sectors, update happens once sector is loaded
|
||||
|
||||
UINT8 ubNumJeeps;
|
||||
UINT8 ubJeepsInBattle;
|
||||
UINT16 ubNumJeeps;
|
||||
UINT16 ubJeepsInBattle;
|
||||
UINT8 usExplorationProgress;
|
||||
UINT8 ubNumRobots;
|
||||
UINT8 ubRobotsInBattle;
|
||||
UINT16 ubNumRobots;
|
||||
UINT16 ubRobotsInBattle;
|
||||
|
||||
INT8 bPadding[10];
|
||||
//no padding left!
|
||||
@@ -656,4 +653,4 @@ enum CreateMusic
|
||||
CM_ALWAYS,
|
||||
};
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -139,11 +139,11 @@ INT32 giDestroyedLairID = 0;
|
||||
//prebattle interface, autoresolve, etc.
|
||||
INT16 gsCreatureInsertionCode = 0;
|
||||
INT32 gsCreatureInsertionGridNo = 0;
|
||||
UINT8 gubNumCreaturesAttackingTown = 0;
|
||||
UINT8 gubYoungMalesAttackingTown = 0;
|
||||
UINT8 gubYoungFemalesAttackingTown = 0;
|
||||
UINT8 gubAdultMalesAttackingTown = 0;
|
||||
UINT8 gubAdultFemalesAttackingTown = 0;
|
||||
UINT16 gubNumCreaturesAttackingTown = 0;
|
||||
UINT16 gubYoungMalesAttackingTown = 0;
|
||||
UINT16 gubYoungFemalesAttackingTown = 0;
|
||||
UINT16 gubAdultMalesAttackingTown = 0;
|
||||
UINT16 gubAdultFemalesAttackingTown = 0;
|
||||
UINT8 gubCreatureBattleCode = CREATURE_BATTLE_CODE_NONE;
|
||||
UINT8 gubSectorIDOfCreatureAttack = 0;
|
||||
|
||||
@@ -1634,8 +1634,8 @@ BOOLEAN MineClearOfMonsters( UINT8 ubMineIndex )
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void DetermineCreatureTownComposition( UINT8 ubNumCreatures, UINT8 *pubNumYoungMales, UINT8 *pubNumYoungFemales,
|
||||
UINT8 *pubNumAdultMales, UINT8 *pubNumAdultFemales )
|
||||
void DetermineCreatureTownComposition( UINT16 ubNumCreatures, UINT16 *pubNumYoungMales, UINT16 *pubNumYoungFemales,
|
||||
UINT16 *pubNumAdultMales, UINT16 *pubNumAdultFemales )
|
||||
{
|
||||
INT32 i, iRandom;
|
||||
UINT8 ubYoungMalePercentage = 10;
|
||||
@@ -1667,8 +1667,8 @@ void DetermineCreatureTownComposition( UINT8 ubNumCreatures, UINT8 *pubNumYoungM
|
||||
}
|
||||
}
|
||||
|
||||
void DetermineCreatureTownCompositionBasedOnTacticalInformation( UINT8 *pubNumCreatures, UINT8 *pubNumYoungMales, UINT8 *pubNumYoungFemales,
|
||||
UINT8 *pubNumAdultMales, UINT8 *pubNumAdultFemales )
|
||||
void DetermineCreatureTownCompositionBasedOnTacticalInformation( UINT16 *pubNumCreatures, UINT16 *pubNumYoungMales, UINT16 *pubNumYoungFemales,
|
||||
UINT16 *pubNumAdultMales, UINT16 *pubNumAdultFemales )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier;
|
||||
|
||||
@@ -1676,9 +1676,9 @@ void DetermineCreatureTownCompositionBasedOnTacticalInformation( UINT8 *pubNumCr
|
||||
*pubNumCreatures = 0;
|
||||
pSector->ubNumCreatures = 0;
|
||||
pSector->ubCreaturesInBattle = 0;
|
||||
for( INT32 i = gTacticalStatus.Team[ CREATURE_TEAM ].bFirstID; i <= gTacticalStatus.Team[ CREATURE_TEAM ].bLastID; ++i )
|
||||
for( SoldierID i = gTacticalStatus.Team[ CREATURE_TEAM ].bFirstID; i <= gTacticalStatus.Team[ CREATURE_TEAM ].bLastID; ++i )
|
||||
{
|
||||
pSoldier = MercPtrs[ i ];
|
||||
pSoldier = i;
|
||||
if( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife )
|
||||
{
|
||||
switch( pSoldier->ubBodyType )
|
||||
@@ -1704,7 +1704,7 @@ void DetermineCreatureTownCompositionBasedOnTacticalInformation( UINT8 *pubNumCr
|
||||
}
|
||||
}
|
||||
|
||||
void DetermineOtherCreatureTownCompositionBasedOnTacticalInformation( UINT8* pubNumCreatures, UINT8* pubNumBloodcats, UINT8* pubNumZombies, UINT8* pubNumBandits )
|
||||
void DetermineOtherCreatureTownCompositionBasedOnTacticalInformation( UINT16* pubNumCreatures, UINT16* pubNumBloodcats, UINT16* pubNumZombies, UINT16* pubNumBandits )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier;
|
||||
|
||||
@@ -1712,9 +1712,9 @@ void DetermineOtherCreatureTownCompositionBasedOnTacticalInformation( UINT8* pub
|
||||
*pubNumCreatures = 0;
|
||||
pSector->ubNumCreatures = 0;
|
||||
pSector->ubCreaturesInBattle = 0;
|
||||
for ( INT32 i = gTacticalStatus.Team[CREATURE_TEAM].bFirstID; i <= gTacticalStatus.Team[CREATURE_TEAM].bLastID; ++i )
|
||||
for ( SoldierID i = gTacticalStatus.Team[CREATURE_TEAM].bFirstID; i <= gTacticalStatus.Team[CREATURE_TEAM].bLastID; ++i )
|
||||
{
|
||||
pSoldier = MercPtrs[i];
|
||||
pSoldier = i;
|
||||
if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife )
|
||||
{
|
||||
if ( pSoldier->IsZombie() )
|
||||
@@ -1750,13 +1750,13 @@ BOOLEAN PrepareCreaturesForBattle()
|
||||
UINT8 ubAdultMalePercentage;
|
||||
UINT8 ubAdultFemalePercentage;
|
||||
UINT8 ubCreatureHabitat;
|
||||
UINT8 ubNumLarvae = 0;
|
||||
UINT8 ubNumInfants = 0;
|
||||
UINT8 ubNumYoungMales = 0;
|
||||
UINT8 ubNumYoungFemales = 0;
|
||||
UINT8 ubNumAdultMales = 0;
|
||||
UINT8 ubNumAdultFemales = 0;
|
||||
UINT8 ubNumCreatures;
|
||||
UINT16 ubNumLarvae = 0;
|
||||
UINT16 ubNumInfants = 0;
|
||||
UINT16 ubNumYoungMales = 0;
|
||||
UINT16 ubNumYoungFemales = 0;
|
||||
UINT16 ubNumAdultMales = 0;
|
||||
UINT16 ubNumAdultFemales = 0;
|
||||
UINT16 ubNumCreatures;
|
||||
|
||||
if( !gubCreatureBattleCode )
|
||||
{
|
||||
@@ -2243,7 +2243,6 @@ BOOLEAN PlayerGroupIsInACreatureInfestedMine()
|
||||
{
|
||||
CREATURE_DIRECTIVE *curr;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
INT32 i;
|
||||
INT16 sSectorX, sSectorY;
|
||||
INT8 bSectorZ;
|
||||
|
||||
@@ -2261,9 +2260,9 @@ BOOLEAN PlayerGroupIsInACreatureInfestedMine()
|
||||
bSectorZ = (INT8)curr->pLevel->ubSectorZ;
|
||||
//Loop through all the creature directives (mine sectors that are infectible) and
|
||||
//see if players are there.
|
||||
for( i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; i++ )
|
||||
for( SoldierID i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++i )
|
||||
{
|
||||
pSoldier = MercPtrs[ i ];
|
||||
pSoldier = i;
|
||||
if( pSoldier->bActive && pSoldier->stats.bLife &&
|
||||
pSoldier->sSectorX == sSectorX &&
|
||||
pSoldier->sSectorY == sSectorY &&
|
||||
@@ -2422,4 +2421,4 @@ void ResetCreatureAttackVariables()
|
||||
gubAdultFemalesAttackingTown = 0;
|
||||
gubCreatureBattleCode = CREATURE_BATTLE_CODE_NONE;
|
||||
gubSectorIDOfCreatureAttack = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,11 +30,11 @@ BOOLEAN GetWarpOutOfMineCodes( INT16 *psSectorX, INT16 *psSectorY, INT8 *pbSecto
|
||||
|
||||
extern INT16 gsCreatureInsertionCode;
|
||||
extern INT32 gsCreatureInsertionGridNo;
|
||||
extern UINT8 gubNumCreaturesAttackingTown;
|
||||
extern UINT8 gubYoungMalesAttackingTown;
|
||||
extern UINT8 gubYoungFemalesAttackingTown;
|
||||
extern UINT8 gubAdultMalesAttackingTown;
|
||||
extern UINT8 gubAdultFemalesAttackingTown;
|
||||
extern UINT16 gubNumCreaturesAttackingTown;
|
||||
extern UINT16 gubYoungMalesAttackingTown;
|
||||
extern UINT16 gubYoungFemalesAttackingTown;
|
||||
extern UINT16 gubAdultMalesAttackingTown;
|
||||
extern UINT16 gubAdultFemalesAttackingTown;
|
||||
extern UINT8 gubSectorIDOfCreatureAttack;
|
||||
enum{
|
||||
CREATURE_BATTLE_CODE_NONE,
|
||||
@@ -53,15 +53,15 @@ enum {
|
||||
};
|
||||
extern UINT8 guCreatureAttackType;
|
||||
|
||||
void DetermineCreatureTownComposition( UINT8 ubNumCreatures,
|
||||
UINT8 *pubNumYoungMales, UINT8 *pubNumYoungFemales,
|
||||
UINT8 *pubNumAdultMales, UINT8 *pubNumAdultFemales );
|
||||
void DetermineCreatureTownComposition( UINT16 ubNumCreatures,
|
||||
UINT16 *pubNumYoungMales, UINT16 *pubNumYoungFemales,
|
||||
UINT16 *pubNumAdultMales, UINT16 *pubNumAdultFemales );
|
||||
|
||||
void DetermineCreatureTownCompositionBasedOnTacticalInformation( UINT8 *pubNumCreatures,
|
||||
UINT8 *pubNumYoungMales, UINT8 *pubNumYoungFemales,
|
||||
UINT8 *pubNumAdultMales, UINT8 *pubNumAdultFemales );
|
||||
void DetermineCreatureTownCompositionBasedOnTacticalInformation( UINT16 *pubNumCreatures,
|
||||
UINT16 *pubNumYoungMales, UINT16 *pubNumYoungFemales,
|
||||
UINT16 *pubNumAdultMales, UINT16 *pubNumAdultFemales );
|
||||
|
||||
void DetermineOtherCreatureTownCompositionBasedOnTacticalInformation( UINT8* pubNumCreatures, UINT8* pubNumBloodcats, UINT8* pubNumZombies, UINT8* pubNumBandits );
|
||||
void DetermineOtherCreatureTownCompositionBasedOnTacticalInformation( UINT16* pubNumCreatures, UINT16* pubNumBloodcats, UINT16* pubNumZombies, UINT16* pubNumBandits );
|
||||
|
||||
|
||||
BOOLEAN PlayerGroupIsInACreatureInfestedMine();
|
||||
@@ -114,4 +114,4 @@ extern CREATURECOMPOSITION gCreatureComposition[ MAX_NUMBER_OF_CREATURE_COMPOSIT
|
||||
// Flugente: reset code for creature attacks
|
||||
void ResetCreatureAttackVariables();
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -357,7 +357,7 @@ void UpdateStrategicDetectionLevel( )
|
||||
// Run through list of player-characters
|
||||
while(gCharactersList[ubCounter].fValid)
|
||||
{
|
||||
pSoldier = MercPtrs[ gCharactersList[ ubCounter ].usSolID ];
|
||||
pSoldier = gCharactersList[ ubCounter ].usSolID;
|
||||
|
||||
// Is character truly valid?
|
||||
if( !( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) &&
|
||||
@@ -499,7 +499,7 @@ void UpdateSkyriderCostModifier()
|
||||
|
||||
while(gCharactersList[ubCounter].fValid)
|
||||
{
|
||||
pSoldier = MercPtrs[ gCharactersList[ ubCounter ].usSolID ];
|
||||
pSoldier = gCharactersList[ ubCounter ].usSolID;
|
||||
|
||||
// Is character truly valid?
|
||||
if( !( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) &&
|
||||
@@ -562,7 +562,7 @@ void UpdateFacilityUsageCosts( )
|
||||
|
||||
while(gCharactersList[ubCounter].fValid)
|
||||
{
|
||||
pSoldier = MercPtrs[ gCharactersList[ ubCounter ].usSolID ];
|
||||
pSoldier = gCharactersList[ ubCounter ].usSolID;
|
||||
|
||||
// Is character truly valid?
|
||||
if( !( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) &&
|
||||
@@ -704,7 +704,7 @@ INT32 MineIncomeModifierFromFacility( UINT8 ubMine )
|
||||
UINT8 ubCounter = 0;
|
||||
while (gCharactersList[ubCounter].fValid)
|
||||
{
|
||||
pSoldier = MercPtrs[ gCharactersList[ ubCounter ].usSolID ];
|
||||
pSoldier = gCharactersList[ ubCounter ].usSolID;
|
||||
|
||||
// Is character truly valid?
|
||||
if( !( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) &&
|
||||
@@ -1112,7 +1112,7 @@ void HandleHourlyRisks()
|
||||
|
||||
while (gCharactersList[iCounter].fValid)
|
||||
{
|
||||
pSoldier = MercPtrs[ gCharactersList[ iCounter ].usSolID ];
|
||||
pSoldier = gCharactersList[ iCounter ].usSolID;
|
||||
|
||||
// Is character truly valid?
|
||||
if( !( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) &&
|
||||
@@ -1994,7 +1994,7 @@ INT32 GetTotalFacilityHourlyCosts( BOOLEAN fPositive )
|
||||
// Run through list of player-characters
|
||||
while(gCharactersList[ubCounter].fValid)
|
||||
{
|
||||
pSoldier = MercPtrs[ gCharactersList[ ubCounter ].usSolID ];
|
||||
pSoldier = gCharactersList[ ubCounter ].usSolID;
|
||||
|
||||
// Is character truly valid?
|
||||
if( !( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) &&
|
||||
|
||||
@@ -225,7 +225,7 @@ BOOLEAN ExecuteStrategicEvent( STRATEGICEVENT *pEvent )
|
||||
//If a merc gets hired and they dont show up immediately, the merc gets added to the queue and shows up
|
||||
// uiTimeTillMercArrives minutes later
|
||||
case EVENT_DELAYED_HIRING_OF_MERC:
|
||||
MercArrivesCallback( (UINT8) pEvent->uiParam );
|
||||
MercArrivesCallback( (UINT16) pEvent->uiParam );
|
||||
break;
|
||||
//handles the life insurance contract for a merc from AIM.
|
||||
case EVENT_HANDLE_INSURED_MERCS:
|
||||
@@ -233,7 +233,7 @@ BOOLEAN ExecuteStrategicEvent( STRATEGICEVENT *pEvent )
|
||||
break;
|
||||
//handles when a merc is killed an there is a life insurance payout
|
||||
case EVENT_PAY_LIFE_INSURANCE_FOR_DEAD_MERC:
|
||||
InsuranceContractPayLifeInsuranceForDeadMerc( (UINT8) pEvent->uiParam );
|
||||
InsuranceContractPayLifeInsuranceForDeadMerc( (UINT16) pEvent->uiParam );
|
||||
break;
|
||||
//gets called every day at midnight.
|
||||
case EVENT_MERC_DAILY_UPDATE:
|
||||
@@ -251,14 +251,17 @@ BOOLEAN ExecuteStrategicEvent( STRATEGICEVENT *pEvent )
|
||||
break;
|
||||
//When a merc is supposed to leave
|
||||
case EVENT_MERC_CONTRACT_OVER:
|
||||
MercsContractIsFinished( (UINT8) pEvent->uiParam );
|
||||
MercsContractIsFinished( pEvent->uiParam );
|
||||
break;
|
||||
case EVENT_ADDSOLDIER_TO_UPDATE_BOX:
|
||||
{
|
||||
// if the grunt is currently active, add to update box
|
||||
if( Menptr[ pEvent->uiParam ].bActive )
|
||||
SoldierID usID = pEvent->uiParam;
|
||||
if ( usID != NOBODY && usID->bActive )
|
||||
{
|
||||
AddSoldierToWaitingListQueue( &( Menptr[ pEvent->uiParam ] ) );
|
||||
AddSoldierToWaitingListQueue( usID );
|
||||
}
|
||||
}
|
||||
break;
|
||||
case EVENT_SET_MENU_REASON:
|
||||
AddReasonToWaitingListQueue( (UINT8) pEvent->uiParam );
|
||||
@@ -392,10 +395,10 @@ BOOLEAN ExecuteStrategicEvent( STRATEGICEVENT *pEvent )
|
||||
HandleEnricoEmail();
|
||||
break;
|
||||
case EVENT_INSURANCE_INVESTIGATION_STARTED:
|
||||
StartInsuranceInvestigation( (UINT8) pEvent->uiParam );
|
||||
StartInsuranceInvestigation( (UINT16) pEvent->uiParam );
|
||||
break;
|
||||
case EVENT_INSURANCE_INVESTIGATION_OVER:
|
||||
EndInsuranceInvestigation( (UINT8) pEvent->uiParam );
|
||||
EndInsuranceInvestigation( (UINT16) pEvent->uiParam );
|
||||
break;
|
||||
case EVENT_TEMPERATURE_UPDATE:
|
||||
UpdateTemperature( (UINT8) pEvent->uiParam );
|
||||
@@ -429,7 +432,7 @@ BOOLEAN ExecuteStrategicEvent( STRATEGICEVENT *pEvent )
|
||||
BeginContractRenewalSequence( );
|
||||
break;
|
||||
case EVENT_RPC_WHINE_ABOUT_PAY:
|
||||
RPCWhineAboutNoPay( (UINT8) pEvent->uiParam );
|
||||
RPCWhineAboutNoPay( pEvent->uiParam );
|
||||
break;
|
||||
|
||||
case EVENT_HAVENT_MADE_IMP_CHARACTER_EMAIL:
|
||||
|
||||
+5
-10
@@ -842,19 +842,14 @@ fFirstTimeInMapScreen = TRUE;
|
||||
|
||||
BOOLEAN AnyMercsHired( )
|
||||
{
|
||||
INT32 cnt;
|
||||
SOLDIERTYPE *pTeamSoldier;
|
||||
INT16 bLastTeamID;
|
||||
|
||||
// Find first guy availible in team
|
||||
cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
|
||||
bLastTeamID = gTacticalStatus.Team[ gbPlayerNum ].bLastID;
|
||||
// Find first guy available in team
|
||||
SoldierID id = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
SoldierID bLastTeamID = gTacticalStatus.Team[ gbPlayerNum ].bLastID;
|
||||
|
||||
// look for all mercs on the same team,
|
||||
for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= bLastTeamID; cnt++,pTeamSoldier++)
|
||||
for ( ; id <= bLastTeamID; ++id)
|
||||
{
|
||||
if ( pTeamSoldier->bActive )
|
||||
if ( id->bActive )
|
||||
{
|
||||
return( TRUE );
|
||||
}
|
||||
|
||||
+24
-24
@@ -366,18 +366,18 @@ UINT16 LarryItems[ NUM_LARRY_ITEMS ][ 3 ] =
|
||||
|
||||
void HourlyLarryUpdate()
|
||||
{
|
||||
SOLDIERTYPE * pSoldier = NULL;
|
||||
SOLDIERTYPE * pOtherSoldier = NULL;
|
||||
INT8 bSlot = NO_SLOT, bBoozeSlot;
|
||||
UINT16 usTemptation = 0;
|
||||
UINT16 usCashAmount;
|
||||
BOOLEAN fBar = FALSE;
|
||||
OBJECTTYPE* pObj = NULL;
|
||||
BOOLEAN fTookDrugs = FALSE;
|
||||
SOLDIERTYPE *pSoldier = NULL;
|
||||
SOLDIERTYPE *pOtherSoldier = NULL;
|
||||
INT8 bSlot = NO_SLOT, bBoozeSlot;
|
||||
UINT16 usTemptation = 0;
|
||||
UINT16 usCashAmount;
|
||||
BOOLEAN fBar = FALSE;
|
||||
OBJECTTYPE* pObj = NULL;
|
||||
BOOLEAN fTookDrugs = FALSE;
|
||||
|
||||
for( UINT32 cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; cnt <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++cnt )
|
||||
for( SoldierID id = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; id <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++id )
|
||||
{
|
||||
pSoldier = MercPtrs[ cnt ];
|
||||
pSoldier = id;
|
||||
|
||||
if ( pSoldier && pSoldier->bActive && !pSoldier->flags.fMercAsleep && ( pSoldier->ubProfile == LARRY_NORMAL || pSoldier->ubProfile == LARRY_DRUNK || pSoldier->HasBackgroundFlag( BACKGROUND_DRUGUSE ) ) )
|
||||
{
|
||||
@@ -489,9 +489,9 @@ void HourlyLarryUpdate()
|
||||
{
|
||||
// anv: snitches stop mercs from getting wasted
|
||||
BOOLEAN fSnitchStoppedBehaviour = FALSE;
|
||||
for( INT32 cnt2 = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; cnt2 <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++cnt2 )
|
||||
for( SoldierID id2 = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; id2 <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++id2 )
|
||||
{
|
||||
pOtherSoldier = MercPtrs[ cnt2 ];
|
||||
pOtherSoldier = id2;
|
||||
// note - snitches stop others, but can get wasted themselves (if they have drug use specifically set in background...)
|
||||
if( pOtherSoldier && !pOtherSoldier->flags.fBetweenSectors && pOtherSoldier->bActive && !pOtherSoldier->flags.fMercAsleep && pSoldier->ubProfile != pOtherSoldier->ubProfile )
|
||||
{
|
||||
@@ -617,12 +617,12 @@ void HourlyLarryUpdate()
|
||||
// Flugente: mercs that are smokers occasionally consume smokes if they have some in their inventory
|
||||
void HourlySmokerUpdate( )
|
||||
{
|
||||
SOLDIERTYPE * pSoldier = NULL;
|
||||
OBJECTTYPE* pObj = NULL;
|
||||
SOLDIERTYPE *pSoldier = NULL;
|
||||
OBJECTTYPE *pObj = NULL;
|
||||
|
||||
for ( UINT32 cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; cnt <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++cnt )
|
||||
for ( SoldierID id = gTacticalStatus.Team[OUR_TEAM].bFirstID; id <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++id )
|
||||
{
|
||||
pSoldier = MercPtrs[cnt];
|
||||
pSoldier = id;
|
||||
|
||||
if ( pSoldier && pSoldier->bActive && !pSoldier->flags.fMercAsleep )
|
||||
{
|
||||
@@ -652,9 +652,9 @@ void HourlyDisabilityUpdate( )
|
||||
SOLDIERTYPE* pSoldier = NULL;
|
||||
SOLDIERTYPE* pOtherSoldier = NULL;
|
||||
|
||||
for ( UINT32 cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; cnt <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++cnt )
|
||||
for ( SoldierID id = gTacticalStatus.Team[OUR_TEAM].bFirstID; id <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++id )
|
||||
{
|
||||
pSoldier = MercPtrs[cnt];
|
||||
pSoldier = id;
|
||||
|
||||
if ( pSoldier && pSoldier->bActive )
|
||||
{
|
||||
@@ -669,9 +669,9 @@ void HourlyDisabilityUpdate( )
|
||||
{
|
||||
// anv: snitches stop mercs from getting wasted
|
||||
BOOLEAN fSnitchStoppedBehaviour = FALSE;
|
||||
for ( INT32 cnt2 = gTacticalStatus.Team[OUR_TEAM].bFirstID; cnt2 <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++cnt2 )
|
||||
for ( SoldierID id2 = gTacticalStatus.Team[OUR_TEAM].bFirstID; id2 <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++id2 )
|
||||
{
|
||||
pOtherSoldier = MercPtrs[cnt2];
|
||||
pOtherSoldier = id2;
|
||||
|
||||
// note - snitches stop others, but can get wasted themselves (if they have drug use specifically set in background...)
|
||||
if ( pOtherSoldier && !pOtherSoldier->flags.fBetweenSectors && pOtherSoldier->bActive && !pOtherSoldier->flags.fMercAsleep && pSoldier->ubProfile != pOtherSoldier->ubProfile )
|
||||
@@ -765,9 +765,9 @@ void HourlyStealUpdate()
|
||||
SOLDIERTYPE * pSoldier = NULL;
|
||||
SOLDIERTYPE * pOtherSoldier = NULL;
|
||||
|
||||
for( INT32 cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; cnt <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++cnt )
|
||||
for( SoldierID cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; cnt <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++cnt )
|
||||
{
|
||||
pSoldier = MercPtrs[ cnt ];
|
||||
pSoldier = cnt;
|
||||
|
||||
// merc must be alive, not travelling and awake. If he is in the currently loaded sector, we may not be in tactical (we would see an item suddenly disappearing) and not in combat
|
||||
if ( pSoldier
|
||||
@@ -799,9 +799,9 @@ void HourlyStealUpdate()
|
||||
|
||||
// anv: snitches prevent scrounging in the same sector
|
||||
BOOLEAN fSnitchStoppedBehaviour = FALSE;
|
||||
for ( UINT32 cnt2 = gTacticalStatus.Team[OUR_TEAM].bFirstID; cnt2 <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++cnt2 )
|
||||
for ( SoldierID cnt2 = gTacticalStatus.Team[OUR_TEAM].bFirstID; cnt2 <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++cnt2 )
|
||||
{
|
||||
pOtherSoldier = MercPtrs[cnt2];
|
||||
pOtherSoldier = cnt2;
|
||||
|
||||
// note - snitches stop others, but can scrounge themselves (if they have scrounging specifically set in background...)
|
||||
if ( pOtherSoldier
|
||||
|
||||
+420
-826
File diff suppressed because it is too large
Load Diff
@@ -33,7 +33,7 @@ extern UINT16 PROFILLUA_sSectorX;
|
||||
extern UINT16 PROFILLUA_sSectorY;
|
||||
extern UINT8 PROFILLUA_bSectorZ;
|
||||
extern UINT8 PROFILLUA_Level;
|
||||
extern UINT8 PROFILLUA_ubID;
|
||||
extern UINT16 PROFILLUA_ubID;
|
||||
extern UINT32 PROFILLUA_sGridNo;
|
||||
extern UINT8 PROFILLUA_ubDirectiono;
|
||||
extern UINT8 PROFILLUA_bTeam;
|
||||
@@ -42,7 +42,7 @@ extern UINT8 PROFILLUA2_ubProfile;
|
||||
extern UINT16 PROFILLUA2_sSectorX;
|
||||
extern UINT16 PROFILLUA2_sSectorY;
|
||||
extern UINT8 PROFILLUA2_bSectorZ;
|
||||
extern UINT8 PROFILLUA2_ubID;
|
||||
extern UINT16 PROFILLUA2_ubID;
|
||||
extern UINT32 PROFILLUA2_sGridNo;
|
||||
|
||||
extern BOOLEAN LetHandleLoyaltyChangeForNPCAction(UINT8 ubNPCProfileId , UINT8 Init);
|
||||
@@ -60,8 +60,9 @@ extern BOOLEAN LuaHandleQuestCodeOnSector( INT16 sSectorX, INT16 sSectorY, INT8
|
||||
//extern BOOLEAN LuaHandleQuestCodeOnSectorEntry( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ, UINT8 Init);
|
||||
|
||||
void LuaHandleSectorLiberation( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ, BOOLEAN fFirstTime );
|
||||
void LuaHandleInteractiveActionResult( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ,
|
||||
INT32 sGridNo, UINT8 bLevel, UINT8 ubId,
|
||||
void LuaHandleInteractiveActionResult( INT16 sSectorX, INT16 sSectorY,
|
||||
INT8 bSectorZ,
|
||||
INT32 sGridNo, UINT8 bLevel, SoldierID ubId,
|
||||
UINT16 usActionType, INT32 sLuaactionid, INT32 difficulty, UINT16 skill );
|
||||
void LuaRecruitRPCAdditionalHandling( UINT8 usProfile );
|
||||
void LuaHandleSectorTacticalEntry( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ, BOOLEAN fHasEverBeenPlayerControlled );
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
#define HELICOPTER_RETURN_REASON_DAMAGE 2
|
||||
|
||||
extern FACETYPE *gpCurrentTalkingFace;
|
||||
extern UINT8 gubCurrentTalkingID;
|
||||
extern UINT16 gubCurrentTalkingID;
|
||||
|
||||
// current temp path for dest char
|
||||
extern PathStPtr pTempHelicopterPath;
|
||||
|
||||
@@ -201,7 +201,7 @@ INT32 iCurrentInventoryPoolPage = 0;
|
||||
INT32 iLastInventoryPoolPage = 0;
|
||||
|
||||
INT32 sObjectSourceGridNo = -1;//shadooow: I don't see much of a sense in this, we have gpItemPointerSoldier and we can use gpItemPointerSoldier->sGridNo to do this, this is actually unused
|
||||
INT8 sObjectSourseSoldierID = -1;
|
||||
SoldierID sObjectSourseSoldierID = NOBODY;
|
||||
|
||||
// number of unseen items in sector
|
||||
UINT32 uiNumberOfUnSeenItems = 0;
|
||||
@@ -683,9 +683,9 @@ BOOLEAN RenderItemInPoolSlot( INT32 iCurrentSlot, INT32 iFirstSlotOnPage )
|
||||
// if the item is not reachable, or if the selected merc is not in the current sector
|
||||
//
|
||||
if( !( pInventoryPoolList[ iCurrentSlot + iFirstSlotOnPage ].usFlags & WORLD_ITEM_REACHABLE ) ||
|
||||
!(( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].sSectorX == sSelMapX ) &&
|
||||
( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].sSectorY == sSelMapY ) &&
|
||||
( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].bSectorZ == iCurrentMapSectorZ )
|
||||
!(( gCharactersList[ bSelectedInfoChar ].usSolID->sSectorX == sSelMapX ) &&
|
||||
( gCharactersList[ bSelectedInfoChar ].usSolID->sSectorY == sSelMapY ) &&
|
||||
( gCharactersList[ bSelectedInfoChar ].usSolID->bSectorZ == iCurrentMapSectorZ )
|
||||
) )
|
||||
{
|
||||
//Shade the item, but only if it is an active item!
|
||||
@@ -1180,7 +1180,6 @@ void CreateMapInventoryPoolSlots( )
|
||||
INT16 sXA = 0, sYA = 0;
|
||||
INT16 sULX = 0, sULY = 0;
|
||||
INT16 sBRX = 0, sBRY = 0;
|
||||
extern MOUSE_REGION gMapViewRegion;
|
||||
//Moa: removed MapInventoryPoolMask, instead we disable map mouseregion and enable again when deleting stash regions
|
||||
MSYS_DisableRegion( &gMapViewRegion );
|
||||
//MSYS_DefineRegion( &MapInventoryPoolMask,
|
||||
@@ -1217,7 +1216,6 @@ void CreateMapInventoryPoolSlots( )
|
||||
void DestroyMapInventoryPoolSlots( void )
|
||||
{
|
||||
INT32 iCounter = 0;
|
||||
extern MOUSE_REGION gMapViewRegion;
|
||||
|
||||
for( iCounter = 0; iCounter < MAP_INVENTORY_POOL_SLOT_COUNT; iCounter++ )
|
||||
{
|
||||
@@ -1351,7 +1349,6 @@ void MapInvenPoolSlots(MOUSE_REGION * pRegion, INT32 iReason )
|
||||
UINT16 usOldItemIndex, usNewItemIndex;
|
||||
INT32 iOldNumberOfObjects = 0;
|
||||
INT16 sDistanceFromObject = 0;
|
||||
SOLDIERTYPE *pSoldier = NULL;
|
||||
CHAR16 sString[ 128 ];
|
||||
extern OBJECTTYPE *gpItemDescObject;
|
||||
|
||||
@@ -1370,11 +1367,16 @@ void MapInvenPoolSlots(MOUSE_REGION * pRegion, INT32 iReason )
|
||||
{
|
||||
//CHRISL: Make it possible to right click and pull up stack popup and/or item description boxes
|
||||
WORLDITEM * twItem = &(pInventoryPoolList[ ( iCurrentInventoryPoolPage * MAP_INVENTORY_POOL_SLOT_COUNT ) + iCounter ]);
|
||||
bool fValidPointer = false;
|
||||
bool fValidPointer = false;
|
||||
|
||||
//CHRISL: Try to update InSector value so we don't have to "activate" a sector
|
||||
if(MercPtrs[gCharactersList[bSelectedInfoChar].usSolID]->sSectorX == sSelMapX && MercPtrs[gCharactersList[bSelectedInfoChar].usSolID]->sSectorY == sSelMapY && MercPtrs[gCharactersList[bSelectedInfoChar].usSolID]->bSectorZ == iCurrentMapSectorZ && !MercPtrs[gCharactersList[bSelectedInfoChar].usSolID]->flags.fBetweenSectors)
|
||||
SOLDIERTYPE* pSelectedSoldier = gCharactersList[bSelectedInfoChar].usSolID;
|
||||
const auto x = pSelectedSoldier->sSectorX;
|
||||
const auto y = pSelectedSoldier->sSectorY;
|
||||
const auto z = pSelectedSoldier->bSectorZ;
|
||||
if(x == sSelMapX && y == sSelMapY && z == iCurrentMapSectorZ && !pSelectedSoldier->flags.fBetweenSectors)
|
||||
{
|
||||
MercPtrs[gCharactersList[bSelectedInfoChar].usSolID]->bInSector=TRUE;
|
||||
pSelectedSoldier->bInSector = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1388,7 +1390,7 @@ void MapInvenPoolSlots(MOUSE_REGION * pRegion, INT32 iReason )
|
||||
}
|
||||
if ( !InSectorStackPopup( ) && !InItemStackPopup( ) /*&& !InItemDescriptionBox( ) */ && !InKeyRingPopup( ) && twItem->object.exists() == true && (bSelectedInfoChar != -1 && gCharactersList[bSelectedInfoChar].fValid) )
|
||||
{
|
||||
if(OK_CONTROL_MERC( MercPtrs[gCharactersList[bSelectedInfoChar].usSolID] ))
|
||||
if(OK_CONTROL_MERC( pSelectedSoldier ))
|
||||
{
|
||||
//CHRISL: The old setup had a flaw I didn't consider. if, for some reason, the ItemSlotLimit = 0
|
||||
// nothing might happen. Now we setup a flag to determine if our cursor is value for the item we're
|
||||
@@ -1474,7 +1476,7 @@ void MapInvenPoolSlots(MOUSE_REGION * pRegion, INT32 iReason )
|
||||
}
|
||||
|
||||
// HEADROCK HAM 5: Sector Inventory Item Desc Box no longer accessible during combat.
|
||||
if( !CanPlayerUseSectorInventory( &(Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ]) ) )
|
||||
if( !CanPlayerUseSectorInventory(pSelectedSoldier) )
|
||||
{
|
||||
DoScreenIndependantMessageBox( New113HAMMessage[ 22 ], MSG_BOX_FLAG_OK, NULL );
|
||||
return;
|
||||
@@ -1484,23 +1486,23 @@ void MapInvenPoolSlots(MOUSE_REGION * pRegion, INT32 iReason )
|
||||
if ( _KeyDown(SHIFT) && gpItemPointer == NULL && Item[twItem->object.usItem].usItemClass == IC_GUN && (twItem->object)[0]->data.gun.ubGunShotsLeft && !ItemIsSingleShotRocketLauncher(twItem->object.usItem))
|
||||
{
|
||||
EmptyWeaponMagazine( &twItem->object, &gItemPointer );
|
||||
InternalMAPBeginItemPointer( MercPtrs[gCharactersList[bSelectedInfoChar].usSolID] );
|
||||
InternalMAPBeginItemPointer( pSelectedSoldier );
|
||||
}
|
||||
else
|
||||
MAPInternalInitItemDescriptionBox( &twItem->object, 0, MercPtrs[gCharactersList[bSelectedInfoChar].usSolID] );
|
||||
MAPInternalInitItemDescriptionBox( &twItem->object, 0, pSelectedSoldier );
|
||||
}
|
||||
}
|
||||
else if(fValidPointer)
|
||||
{
|
||||
// Sector Inventory Stack Popup no longer accessible during combat.
|
||||
if( !CanPlayerUseSectorInventory( &(Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ]) ) )
|
||||
if( !CanPlayerUseSectorInventory(pSelectedSoldier) )
|
||||
{
|
||||
DoScreenIndependantMessageBox( New113HAMMessage[ 22 ], MSG_BOX_FLAG_OK, NULL );
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
InitSectorStackPopup( MercPtrs[gCharactersList[bSelectedInfoChar].usSolID], twItem, iCounter, xResOffset, yResOffset - 10, 261, ( SCREEN_HEIGHT - PLAYER_INFO_Y ) );
|
||||
InitSectorStackPopup( pSelectedSoldier, twItem, iCounter, xResOffset, yResOffset - 10, 261, ( SCREEN_HEIGHT - PLAYER_INFO_Y ) );
|
||||
fTeamPanelDirty=TRUE;
|
||||
fInterfacePanelDirty = DIRTYLEVEL2;
|
||||
}
|
||||
@@ -1597,11 +1599,13 @@ void MapInvenPoolSlots(MOUSE_REGION * pRegion, INT32 iReason )
|
||||
|
||||
//if( fShowInventoryFlag )
|
||||
{
|
||||
SOLDIERTYPE* pSelectedSoldier = gCharactersList[bSelectedInfoChar].usSolID;
|
||||
|
||||
// not in sector?
|
||||
if( ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].sSectorX != sSelMapX ) ||
|
||||
( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].sSectorY != sSelMapY ) ||
|
||||
( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].bSectorZ != iCurrentMapSectorZ ) ||
|
||||
( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].flags.fBetweenSectors ) )
|
||||
if( ( pSelectedSoldier->sSectorX != sSelMapX ) ||
|
||||
( pSelectedSoldier->sSectorY != sSelMapY ) ||
|
||||
( pSelectedSoldier->bSectorZ != iCurrentMapSectorZ ) ||
|
||||
( pSelectedSoldier->flags.fBetweenSectors ) )
|
||||
{
|
||||
if ( gpItemPointer == NULL )
|
||||
{
|
||||
@@ -1633,13 +1637,13 @@ void MapInvenPoolSlots(MOUSE_REGION * pRegion, INT32 iReason )
|
||||
}
|
||||
else
|
||||
{
|
||||
swprintf( sString, pMapInventoryErrorString[ 2 ], Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].name );
|
||||
swprintf( sString, pMapInventoryErrorString[ 2 ], pSelectedSoldier->name );
|
||||
DoMapMessageBox( MSG_BOX_BASIC_STYLE, sString, MAP_SCREEN, MSG_BOX_FLAG_OK, NULL );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
swprintf( sString, pMapInventoryErrorString[ 5 ], Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].name );
|
||||
swprintf( sString, pMapInventoryErrorString[ 5 ], pSelectedSoldier->name );
|
||||
DoMapMessageBox( MSG_BOX_BASIC_STYLE, sString, MAP_SCREEN, MSG_BOX_FLAG_OK, NULL );
|
||||
}
|
||||
return;
|
||||
@@ -1650,6 +1654,7 @@ void MapInvenPoolSlots(MOUSE_REGION * pRegion, INT32 iReason )
|
||||
// If we do not have an item in hand, start moving it
|
||||
if ( gpItemPointer == NULL )
|
||||
{
|
||||
SOLDIERTYPE* pSelectedSoldier = gCharactersList[bSelectedInfoChar].usSolID;
|
||||
|
||||
|
||||
// Return if empty
|
||||
@@ -1658,7 +1663,7 @@ void MapInvenPoolSlots(MOUSE_REGION * pRegion, INT32 iReason )
|
||||
|
||||
// if in battle inform player they will have to do this in tactical
|
||||
// if( ( ( gTacticalStatus.fEnemyInSector ) ||( ( sSelMapX == gWorldSectorX ) && ( sSelMapY == gWorldSectorY ) && ( iCurrentMapSectorZ == gbWorldSectorZ ) && ( gTacticalStatus.uiFlags & INCOMBAT ) ) ) )
|
||||
if( !CanPlayerUseSectorInventory( &Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ] ) )
|
||||
if( !CanPlayerUseSectorInventory(pSelectedSoldier) )
|
||||
{
|
||||
DoMapMessageBox( MSG_BOX_BASIC_STYLE, pMapInventoryErrorString[ 3 ], MAP_SCREEN, MSG_BOX_FLAG_OK, NULL );
|
||||
return;
|
||||
@@ -1673,14 +1678,13 @@ void MapInvenPoolSlots(MOUSE_REGION * pRegion, INT32 iReason )
|
||||
if( ( sSelMapX == gWorldSectorX )&&( gWorldSectorY == sSelMapY ) &&(gbWorldSectorZ == iCurrentMapSectorZ ) )
|
||||
{
|
||||
// notify
|
||||
pSoldier = &( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ] );
|
||||
|
||||
sDistanceFromObject = PythSpacesAway( sObjectSourceGridNo, pSoldier->sGridNo);
|
||||
sDistanceFromObject = PythSpacesAway( sObjectSourceGridNo, pSelectedSoldier->sGridNo);
|
||||
|
||||
/* if( sDistanceFromObject > MAX_DISTANCE_TO_PICKUP_ITEM )
|
||||
{
|
||||
// see for the loaded sector if the merc is cloase enough?
|
||||
swprintf( sString, pMapInventoryErrorString[ 0 ], Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].name );
|
||||
swprintf( sString, pMapInventoryErrorString[ 0 ], pSelectedSoldier->name );
|
||||
DoMapMessageBox( MSG_BOX_BASIC_STYLE, sString, MAP_SCREEN, MSG_BOX_FLAG_OK, NULL );
|
||||
return;
|
||||
}
|
||||
@@ -1718,10 +1722,11 @@ void MapInvenPoolSlots(MOUSE_REGION * pRegion, INT32 iReason )
|
||||
}
|
||||
else
|
||||
{//we have an item on cursor
|
||||
SOLDIERTYPE* pSelectedSoldier = gCharactersList[bSelectedInfoChar].usSolID;
|
||||
|
||||
// if in battle inform player they will have to do this in tactical
|
||||
// if( ( gTacticalStatus.fEnemyInSector ) ||( ( sSelMapX == gWorldSectorX ) && ( sSelMapY == gWorldSectorY ) && ( iCurrentMapSectorZ == gbWorldSectorZ ) && ( gTacticalStatus.uiFlags & INCOMBAT ) ) )
|
||||
if( !CanPlayerUseSectorInventory( &Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ] ) )
|
||||
if( !CanPlayerUseSectorInventory(pSelectedSoldier) )
|
||||
{
|
||||
DoMapMessageBox( MSG_BOX_BASIC_STYLE, pMapInventoryErrorString[ 4 ], MAP_SCREEN, MSG_BOX_FLAG_OK, NULL );
|
||||
return;
|
||||
@@ -1795,7 +1800,7 @@ void MapInvenPoolSlots(MOUSE_REGION * pRegion, INT32 iReason )
|
||||
/*
|
||||
if ( fShowInventoryFlag && bSelectedInfoChar >= 0 )
|
||||
{
|
||||
ReevaluateItemHatches( MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ], FALSE );
|
||||
ReevaluateItemHatches( gCharactersList[ bSelectedInfoChar ].usSolID, FALSE );
|
||||
}
|
||||
*/
|
||||
}
|
||||
@@ -2471,7 +2476,7 @@ void BeginInventoryPoolPtr( OBJECTTYPE *pInventorySlot )
|
||||
|
||||
if ( _KeyDown ( CTRL ))//MM: Pass item to selected merc. Delete if none selected.
|
||||
{
|
||||
SOLDIERTYPE *pSoldier = &Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ];
|
||||
SOLDIERTYPE *pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID;
|
||||
bool placedAllObjects = false;
|
||||
|
||||
if(pSoldier->exists() == true)
|
||||
@@ -2575,7 +2580,7 @@ void BeginInventoryPoolPtr( OBJECTTYPE *pInventorySlot )
|
||||
|
||||
if ( fShowInventoryFlag && bSelectedInfoChar >= 0 )
|
||||
{
|
||||
ReevaluateItemHatches( MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ], FALSE );
|
||||
ReevaluateItemHatches( gCharactersList[ bSelectedInfoChar ].usSolID, FALSE );
|
||||
fTeamPanelDirty = TRUE;
|
||||
}
|
||||
}
|
||||
@@ -2643,7 +2648,7 @@ void BeginInventoryPoolPtr( OBJECTTYPE *pInventorySlot )
|
||||
|
||||
if ( fShowInventoryFlag && bSelectedInfoChar >= 0 )
|
||||
{
|
||||
ReevaluateItemHatches( MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ], FALSE );
|
||||
ReevaluateItemHatches( gCharactersList[ bSelectedInfoChar ].usSolID, FALSE );
|
||||
fTeamPanelDirty = TRUE;
|
||||
}
|
||||
}
|
||||
@@ -2660,7 +2665,7 @@ BOOLEAN PlaceObjectInInventoryStash( OBJECTTYPE *pInventorySlot, OBJECTTYPE *pIt
|
||||
// anv: swap ownerships too
|
||||
if( pInventoryPoolList[ iSrcSlot ].soldierID == sObjectSourseSoldierID )
|
||||
{
|
||||
pInventoryPoolList[ iSrcSlot ].soldierID = (-1);
|
||||
pInventoryPoolList[ iSrcSlot ].soldierID = NOBODY;
|
||||
}
|
||||
pInventoryPoolList[ iDestSlot ].soldierID = sObjectSourseSoldierID;
|
||||
}
|
||||
@@ -2674,10 +2679,10 @@ BOOLEAN PlaceObjectInInventoryStash( OBJECTTYPE *pInventorySlot, OBJECTTYPE *pIt
|
||||
// anv: disable soldier's ownership, as otherwise stacked backpacks would share it
|
||||
if( iDestSlot != (-1) && iSrcSlot != (-1) )
|
||||
{
|
||||
pInventoryPoolList[ iDestSlot ].soldierID = (-1);
|
||||
pInventoryPoolList[ iSrcSlot ].soldierID = (-1);
|
||||
pInventoryPoolList[ iDestSlot ].soldierID = NOBODY;
|
||||
pInventoryPoolList[ iSrcSlot ].soldierID = NOBODY;
|
||||
iCurrentlyPickedUpItem = iDestSlot;
|
||||
sObjectSourseSoldierID = (-1);
|
||||
sObjectSourseSoldierID = NOBODY;
|
||||
}
|
||||
// stacking
|
||||
pInventorySlot->AddObjectsToStack(*pItemPtr);
|
||||
@@ -2689,9 +2694,9 @@ BOOLEAN PlaceObjectInInventoryStash( OBJECTTYPE *pInventorySlot, OBJECTTYPE *pIt
|
||||
// anv: swap ownerships too
|
||||
if( pInventoryPoolList[ iSrcSlot ].soldierID == sObjectSourseSoldierID )
|
||||
{
|
||||
pInventoryPoolList[ iSrcSlot ].soldierID = (-1);
|
||||
pInventoryPoolList[ iSrcSlot ].soldierID = NOBODY;
|
||||
}
|
||||
INT32 iTempSoldierID = pInventoryPoolList[ iDestSlot ].soldierID;
|
||||
SoldierID iTempSoldierID = pInventoryPoolList[ iDestSlot ].soldierID;
|
||||
pInventoryPoolList[ iDestSlot ].soldierID = sObjectSourseSoldierID;
|
||||
sObjectSourseSoldierID = iTempSoldierID;
|
||||
iCurrentlyPickedUpItem = iDestSlot;
|
||||
@@ -3015,7 +3020,7 @@ void TemplateNameInputCallBack(UINT8 ubResult)
|
||||
{
|
||||
if (ubResult == MSG_BOX_RETURN_OK && wcscmp(gszMsgBoxInputString, L"") > 0)
|
||||
{
|
||||
SOLDIERTYPE* pSoldier = &Menptr[gCharactersList[bSelectedInfoChar].usSolID];
|
||||
SOLDIERTYPE* pSoldier = gCharactersList[bSelectedInfoChar].usSolID;
|
||||
if (pSoldier)
|
||||
{
|
||||
WriteEquipmentTemplate(pSoldier, gszMsgBoxInputString);
|
||||
@@ -3047,7 +3052,7 @@ void MapInventoryWriteEquipmentTemplate(GUI_BUTTON *btn, INT32 reason)
|
||||
{
|
||||
if ( btn->uiFlags & (BUTTON_CLICKED_ON) )
|
||||
{
|
||||
SOLDIERTYPE* pSoldier = &Menptr[gCharactersList[bSelectedInfoChar].usSolID];
|
||||
SOLDIERTYPE* pSoldier = gCharactersList[bSelectedInfoChar].usSolID;
|
||||
if ( pSoldier )
|
||||
{
|
||||
DoMessageBox( MSG_BOX_BASIC_SMALL_BUTTONS, szGearTemplateText[0], guiCurrentScreen, MSG_BOX_FLAG_INPUTBOX, TemplateNameInputCallBack, NULL );
|
||||
@@ -3072,7 +3077,7 @@ void MapInventoryReadEquipmentTemplate(GUI_BUTTON *btn, INT32 reason)
|
||||
{
|
||||
if ( btn->uiFlags & (BUTTON_CLICKED_ON) )
|
||||
{
|
||||
SOLDIERTYPE* pSoldier = &Menptr[gCharactersList[bSelectedInfoChar].usSolID];
|
||||
SOLDIERTYPE* pSoldier = gCharactersList[bSelectedInfoChar].usSolID;
|
||||
if ( pSoldier &&
|
||||
pSoldier->sSectorX == sSelMapX && pSoldier->sSectorY == sSelMapY && pSoldier->bSectorZ == iCurrentMapSectorZ &&
|
||||
!pSoldier->flags.fBetweenSectors )
|
||||
@@ -3525,11 +3530,12 @@ void HandleButtonStatesWhileMapInventoryActive( void )
|
||||
}
|
||||
|
||||
// Selected Merc is in sector? Or is in combat?
|
||||
if(MercPtrs[gCharactersList[bSelectedInfoChar].usSolID]->sSectorX != sSelMapX ||
|
||||
MercPtrs[gCharactersList[bSelectedInfoChar].usSolID]->sSectorY != sSelMapY ||
|
||||
MercPtrs[gCharactersList[bSelectedInfoChar].usSolID]->bSectorZ != iCurrentMapSectorZ ||
|
||||
MercPtrs[gCharactersList[bSelectedInfoChar].usSolID]->flags.fBetweenSectors ||
|
||||
!CanPlayerUseSectorInventory( &(Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ]) ) )
|
||||
SOLDIERTYPE* pSoldier = gCharactersList[bSelectedInfoChar].usSolID;
|
||||
if( pSoldier->sSectorX != sSelMapX ||
|
||||
pSoldier->sSectorY != sSelMapY ||
|
||||
pSoldier->bSectorZ != iCurrentMapSectorZ ||
|
||||
pSoldier->flags.fBetweenSectors ||
|
||||
!CanPlayerUseSectorInventory( pSoldier ) )
|
||||
{
|
||||
DisableButton( guiMapInvenSortButton[ 0 ] );
|
||||
DisableButton( guiMapInvenSortButton[ 1 ] );
|
||||
@@ -3640,7 +3646,7 @@ void HandleMouseInCompatableItemForMapSectorInventory( INT32 iCurrentSlot )
|
||||
if( fShowInventoryFlag )
|
||||
{
|
||||
//Soldier inventory is shown, highlight those items
|
||||
pSoldier = &Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ];
|
||||
pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID;
|
||||
if( pSoldier )
|
||||
{
|
||||
if( HandleCompatibleAmmoUIForMapScreen( pSoldier, iCurrentSlot + ( iCurrentInventoryPoolPage * MAP_INVENTORY_POOL_SLOT_COUNT ), TRUE, FALSE ) )
|
||||
@@ -4815,7 +4821,7 @@ void SortSectorInventoryAmmo(bool useBoxes)
|
||||
OBJECTTYPE newCrate;
|
||||
int loopCount = 0;
|
||||
|
||||
SOLDIERTYPE * pSoldier = &(Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ]);
|
||||
SOLDIERTYPE * pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID;
|
||||
|
||||
AssertMsg( pSoldier != NULL, "Sector Inventory: Attempting ammo sort without valid selected soldier?" );
|
||||
|
||||
@@ -4957,7 +4963,7 @@ void SortSectorInventoryEjectAmmo()
|
||||
{
|
||||
OBJECTTYPE gTempObject;
|
||||
|
||||
SOLDIERTYPE * pSoldier = &(Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ]);
|
||||
SOLDIERTYPE * pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID;
|
||||
|
||||
for ( UINT32 uiLoop = 0; uiLoop < pInventoryPoolList.size(); uiLoop++ ) //for all items in sector
|
||||
{
|
||||
@@ -5006,7 +5012,7 @@ void SortSectorInventoryEmptyLBE() {
|
||||
// current item
|
||||
WORLDITEM * pInventoryItem = NULL;
|
||||
|
||||
SOLDIERTYPE * pSoldier = &(Menptr[gCharactersList[bSelectedInfoChar].usSolID]);
|
||||
SOLDIERTYPE * pSoldier = gCharactersList[bSelectedInfoChar].usSolID;
|
||||
|
||||
for (UINT32 uiLoop = 0; uiLoop < pInventoryPoolList.size(); uiLoop++) //for all items in sector
|
||||
{
|
||||
@@ -5081,7 +5087,7 @@ void SortSectorInventorySeparateAttachments()
|
||||
WORLDITEM * pInventoryItem = NULL;
|
||||
|
||||
|
||||
SOLDIERTYPE * pSoldier = &(Menptr[gCharactersList[bSelectedInfoChar].usSolID]);
|
||||
SOLDIERTYPE * pSoldier = gCharactersList[bSelectedInfoChar].usSolID;
|
||||
|
||||
for (UINT32 uiLoop = 0; uiLoop < pInventoryPoolList.size(); uiLoop++) //for all items in sector
|
||||
{
|
||||
@@ -5154,12 +5160,12 @@ void SortSectorInventoryStackAndMerge(bool ammoOnly )
|
||||
{
|
||||
OBJECTTYPE * StackObject;
|
||||
|
||||
SOLDIERTYPE * pSoldier = &(Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ]);
|
||||
SOLDIERTYPE * pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID;
|
||||
|
||||
for ( UINT32 uiLoop = 0; uiLoop < pInventoryPoolList.size(); uiLoop++ )
|
||||
{
|
||||
// anv: disable soldier's ownership, as otherwise stacked backpacks would share it
|
||||
pInventoryPoolList[ uiLoop ].soldierID = (-1);
|
||||
pInventoryPoolList[ uiLoop ].soldierID = NOBODY;
|
||||
}
|
||||
|
||||
// Run through sector inventory.
|
||||
|
||||
@@ -476,10 +476,10 @@ UINT32 guiMAPCURSORS;
|
||||
UINT32 guiMapPathingArrows;
|
||||
|
||||
// assignment selection character
|
||||
INT8 bSelectedAssignChar=-1;
|
||||
INT16 bSelectedAssignChar=-1;
|
||||
|
||||
// current contract char
|
||||
INT8 bSelectedContractChar = -1;
|
||||
INT16 bSelectedContractChar = -1;
|
||||
|
||||
|
||||
// has the temp path for character or helicopter been already drawn?
|
||||
@@ -523,7 +523,7 @@ void ShowTownText( void );
|
||||
void DrawTownLabels(STR16 pString, STR16 pStringA,UINT16 usFirstX, UINT16 usFirstY);
|
||||
void ShowTeamAndVehicles(INT32 fShowFlags);
|
||||
BOOLEAN ShadeMapElem( INT16 sMapX, INT16 sMapY, INT32 iColor );
|
||||
BOOLEAN ShadeMapElements(const INT32(&colorMap)[16][16]);
|
||||
BOOLEAN ShadeMapElements(const INT32(&colorMap)[MAXIMUM_VALID_Y_COORDINATE][MAXIMUM_VALID_X_COORDINATE]);
|
||||
void AdjustXForLeftMapEdge(STR16 wString, INT16 *psX, INT32 iFont);
|
||||
void BlitTownGridMarkers( void );
|
||||
void BlitMineGridMarkers( void );
|
||||
@@ -602,11 +602,11 @@ BOOLEAN SaveHiddenTownToSaveGameFile( HWFILE hFile );
|
||||
// Flugente: added getter/setter so that we can easily check when a new char is set
|
||||
// we also set a marker determining when we should update the squads data, so that we only check that when required
|
||||
// destination plotting character
|
||||
INT8 bSelectedDestChar = -1;
|
||||
INT16 bSelectedDestChar = -1;
|
||||
bool gSquadEncumbranceCheckNecessary = true;
|
||||
|
||||
INT8 GetSelectedDestChar() { return bSelectedDestChar; }
|
||||
void SetSelectedDestChar( INT8 aVal )
|
||||
INT16 GetSelectedDestChar() { return bSelectedDestChar; }
|
||||
void SetSelectedDestChar( INT16 aVal )
|
||||
{
|
||||
bSelectedDestChar = aVal;
|
||||
gSquadEncumbranceCheckNecessary = true;
|
||||
@@ -1299,7 +1299,7 @@ INT32 ShowOnDutyTeam( INT16 sMapX, INT16 sMapY )
|
||||
// run through list
|
||||
while(gCharactersList[ubCounter].fValid)
|
||||
{
|
||||
pSoldier = MercPtrs[ gCharactersList[ ubCounter ].usSolID ];
|
||||
pSoldier = gCharactersList[ ubCounter ].usSolID;
|
||||
|
||||
if( !( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) &&
|
||||
( pSoldier->sSectorX == sMapX) &&
|
||||
@@ -1351,7 +1351,7 @@ INT32 ShowAssignedTeam(INT16 sMapX, INT16 sMapY, INT32 iCount)
|
||||
|
||||
while(gCharactersList[ubCounter].fValid)
|
||||
{
|
||||
pSoldier = MercPtrs[ gCharactersList[ ubCounter ].usSolID ];
|
||||
pSoldier = gCharactersList[ ubCounter ].usSolID;
|
||||
|
||||
// given number of on duty members, find number of assigned chars
|
||||
// start at beginning of list, look for people who are in sector and assigned
|
||||
@@ -6232,14 +6232,14 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Map Screen4");
|
||||
usSector = SECTOR( sSectorX, sSectorY );
|
||||
|
||||
// distribute here
|
||||
SectorInfo[usSector].ubNumberOfCivsAtLevel[ GREEN_MILITIA ] = ( UINT8 )( iNumberOfGreens / iNumberUnderControl );
|
||||
SectorInfo[usSector].ubNumberOfCivsAtLevel[ REGULAR_MILITIA ] = ( UINT8 )( iNumberOfRegulars / iNumberUnderControl );
|
||||
SectorInfo[usSector].ubNumberOfCivsAtLevel[ ELITE_MILITIA ] = ( UINT8 )( iNumberOfElites / iNumberUnderControl );
|
||||
SectorInfo[usSector].ubNumberOfCivsAtLevel[ GREEN_MILITIA ] = ( UINT16 )( iNumberOfGreens / iNumberUnderControl );
|
||||
SectorInfo[usSector].ubNumberOfCivsAtLevel[ REGULAR_MILITIA ] = ( UINT16 )( iNumberOfRegulars / iNumberUnderControl );
|
||||
SectorInfo[usSector].ubNumberOfCivsAtLevel[ ELITE_MILITIA ] = ( UINT16 )( iNumberOfElites / iNumberUnderControl );
|
||||
|
||||
// Flugente: indivdual militia
|
||||
DropIndividualMilitia( usSector, GREEN_MILITIA, (UINT8)(iNumberOfGreens / iNumberUnderControl) );
|
||||
DropIndividualMilitia( usSector, REGULAR_MILITIA, (UINT8)(iNumberOfRegulars / iNumberUnderControl) );
|
||||
DropIndividualMilitia( usSector, ELITE_MILITIA, (UINT8)(iNumberOfElites / iNumberUnderControl) );
|
||||
DropIndividualMilitia( usSector, GREEN_MILITIA, (UINT16)(iNumberOfGreens / iNumberUnderControl) );
|
||||
DropIndividualMilitia( usSector, REGULAR_MILITIA, (UINT16)(iNumberOfRegulars / iNumberUnderControl) );
|
||||
DropIndividualMilitia( usSector, ELITE_MILITIA, (UINT16)(iNumberOfElites / iNumberUnderControl) );
|
||||
|
||||
// Flugente: as we do not move the group militia, we have to make sure we don't accidentally overfill a sector
|
||||
sTotalSoFar = NumNonPlayerTeamMembersInSector( sSectorX, sSectorY, MILITIA_TEAM );
|
||||
@@ -6949,19 +6949,15 @@ UINT32 WhatPlayerKnowsAboutEnemiesInSector( INT16 sSectorX, INT16 sSectorY )
|
||||
|
||||
BOOLEAN CanMercsScoutThisSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ )
|
||||
{
|
||||
INT32 iFirstId = 0, iLastId = 0;
|
||||
INT32 iCounter = 0;
|
||||
SOLDIERTYPE *pSoldier = NULL;
|
||||
|
||||
|
||||
// to speed it up a little?
|
||||
iFirstId = gTacticalStatus.Team[ OUR_TEAM ].bFirstID;
|
||||
iLastId = gTacticalStatus.Team[ OUR_TEAM ].bLastID;
|
||||
|
||||
for( iCounter = iFirstId; iCounter <= iLastId; iCounter++ )
|
||||
SoldierID id = gTacticalStatus.Team[ OUR_TEAM ].bFirstID;
|
||||
const SoldierID iLastId = gTacticalStatus.Team[ OUR_TEAM ].bLastID;
|
||||
for( ; id <= iLastId; ++id )
|
||||
{
|
||||
// get the soldier
|
||||
pSoldier = &Menptr[ iCounter ];
|
||||
pSoldier = id;
|
||||
|
||||
// is the soldier active
|
||||
if( pSoldier->bActive == FALSE )
|
||||
@@ -7127,7 +7123,7 @@ UINT8 NumActiveCharactersInSector( INT16 sSectorX, INT16 sSectorY, INT16 bSector
|
||||
{
|
||||
if( gCharactersList[ iCounter ].fValid )
|
||||
{
|
||||
pSoldier = &( Menptr[ gCharactersList[ iCounter ].usSolID ] );
|
||||
pSoldier = gCharactersList[ iCounter ].usSolID;
|
||||
|
||||
if( pSoldier->bActive && ( pSoldier->stats.bLife > 0 ) &&
|
||||
( pSoldier->bAssignment != ASSIGNMENT_POW ) && ( pSoldier->bAssignment != IN_TRANSIT ) )
|
||||
@@ -8091,7 +8087,7 @@ void MilitiaGroupBoxButtonCallback( GUI_BUTTON *btn, INT32 reason )
|
||||
UINT8 militiatype = id / 2;
|
||||
|
||||
// for now, always alter by 1
|
||||
UINT8 howmany = 1;
|
||||
UINT16 howmany = 1;
|
||||
|
||||
// either add or remove a militia from currently selected group
|
||||
if ( id % 2 )
|
||||
|
||||
@@ -372,19 +372,19 @@ extern BOOLEAN fDrawTempHeliPath;
|
||||
extern BOOLEAN fDrawTempMilitiaPath;
|
||||
|
||||
// selected destination char
|
||||
INT8 GetSelectedDestChar();
|
||||
void SetSelectedDestChar( INT8 aVal );
|
||||
INT16 GetSelectedDestChar();
|
||||
void SetSelectedDestChar( INT16 aVal );
|
||||
|
||||
extern bool gSquadEncumbranceCheckNecessary;
|
||||
|
||||
// current assignment character
|
||||
extern INT8 bSelectedAssignChar;
|
||||
extern INT16 bSelectedAssignChar;
|
||||
|
||||
// the info character
|
||||
extern INT8 bSelectedInfoChar;
|
||||
extern INT16 bSelectedInfoChar;
|
||||
|
||||
// the contract char
|
||||
extern INT8 bSelectedContractChar;
|
||||
extern INT16 bSelectedContractChar;
|
||||
|
||||
// map arrows graphical index value
|
||||
extern UINT32 guiMAPCURSORS;
|
||||
|
||||
@@ -180,11 +180,12 @@ void CreateDestroyTownInfoBox( void )
|
||||
// set highlight color
|
||||
SetBoxHighLight(ghTownMineBox, FONT_WHITE);
|
||||
|
||||
SetBoxSecondColumnForeground( ghTownMineBox, FONT_WHITE );
|
||||
SetBoxSecondColumnBackground( ghTownMineBox, FONT_BLACK );
|
||||
SetBoxSecondColumnHighLight( ghTownMineBox, FONT_WHITE );
|
||||
SetBoxSecondColumnShade( ghTownMineBox, FONT_BLACK );
|
||||
SetBoxSecondColumnFont( ghTownMineBox, BLOCKFONT2 );
|
||||
const auto column = 1;
|
||||
SetBoxColumnForeground( ghTownMineBox, FONT_WHITE, column );
|
||||
SetBoxColumnBackground( ghTownMineBox, FONT_BLACK, column );
|
||||
SetBoxColumnHighLight( ghTownMineBox, FONT_WHITE, column );
|
||||
SetBoxColumnShade( ghTownMineBox, FONT_BLACK, column );
|
||||
SetBoxColumnFont( ghTownMineBox, BLOCKFONT2, column );
|
||||
SetBoxSecondColumnMinimumOffset( ghTownMineBox, 20 );
|
||||
|
||||
// unhighlighted color
|
||||
|
||||
+558
-167
File diff suppressed because it is too large
Load Diff
@@ -24,8 +24,8 @@ typedef struct FASTHELPREGION {
|
||||
// Flugente: externalised squad names
|
||||
extern std::vector<std::wstring> gSquadNameVector;
|
||||
|
||||
extern UINT8 FIRSTmercTOdisplay ;
|
||||
extern UINT8 maxNumberOfMercVisibleInStrategyList;
|
||||
extern UINT16 FIRSTmercTOdisplay ;
|
||||
extern UINT16 maxNumberOfMercVisibleInStrategyList;
|
||||
|
||||
// String Lengths Defines
|
||||
#define MAX_NAME_LENGTH 10
|
||||
@@ -322,7 +322,7 @@ extern BOOLEAN fLockOutMapScreenInterface;
|
||||
// The character data structure
|
||||
typedef struct {
|
||||
|
||||
UINT16 usSolID;// soldier ID in MenPtrs
|
||||
SoldierID usSolID;// soldier ID in MenPtrs
|
||||
BOOLEAN fValid;// is the current soldier a valid soldier
|
||||
|
||||
} MapScreenCharacterSt;
|
||||
@@ -437,24 +437,24 @@ extern BOOLEAN fResetContractGlow;
|
||||
void InitalizeVehicleAndCharacterList( void );
|
||||
|
||||
// set this entry to as selected
|
||||
void SetEntryInSelectedCharacterList( INT8 bEntry );
|
||||
void SetEntryInSelectedCharacterList( INT16 bEntry );
|
||||
// set this entry to as unselected
|
||||
void ResetEntryForSelectedList( INT8 bEntry );
|
||||
void ResetEntryForSelectedList( INT16 bEntry );
|
||||
|
||||
// reset selected list
|
||||
void ResetSelectedListForMapScreen( );
|
||||
|
||||
// build a selected list from a to b, inclusive
|
||||
void BuildSelectedListFromAToB( INT8 bA, INT8 bB );
|
||||
void BuildSelectedListFromAToB( INT16 bA, INT16 bB );
|
||||
|
||||
// isa this entry int he selected character list set?
|
||||
BOOLEAN IsEntryInSelectedListSet( INT8 bEntry );
|
||||
BOOLEAN IsEntryInSelectedListSet( INT16 bEntry );
|
||||
|
||||
// is there more than one person selected?
|
||||
BOOLEAN MultipleCharacterListEntriesSelected( void );
|
||||
|
||||
// toggle this entry on or off
|
||||
void ToggleEntryInSelectedList( INT8 bEntry );
|
||||
void ToggleEntryInSelectedList( INT16 bEntry );
|
||||
|
||||
// reset assignments for mercs on selected list who have this assignment
|
||||
// HEADROCK HAM 3.6: Argument was unused... adding my own.
|
||||
@@ -513,11 +513,11 @@ void DeselectSelectedListMercsWhoCantMoveWithThisGuy( SOLDIERTYPE *pSoldier );
|
||||
void GetMoraleString( SOLDIERTYPE *pSoldier, STR16 sString );
|
||||
|
||||
// handle leaving of equipment in sector
|
||||
void HandleLeavingOfEquipmentInCurrentSector( UINT32 uiMercId );
|
||||
void HandleLeavingOfEquipmentInCurrentSector( SoldierID uiMercId );
|
||||
|
||||
// set up a linked list of items being dropped and post an event to later drop them
|
||||
void HandleMercLeavingEquipmentInDrassen( UINT32 uiMercId );
|
||||
void HandleMercLeavingEquipmentInOmerta( UINT32 uiMercId );
|
||||
void HandleMercLeavingEquipmentInDrassen( SoldierID uiMercId );
|
||||
void HandleMercLeavingEquipmentInOmerta( SoldierID uiMercId );
|
||||
|
||||
// actually drop the stored list of items
|
||||
void HandleEquipmentLeftInOmerta( UINT32 uiSlotIndex );
|
||||
@@ -537,7 +537,7 @@ void FreeLeaveListSlot( UINT32 uiSlotIndex );
|
||||
INT32 FindFreeSlotInLeaveList( void );
|
||||
|
||||
// set up drop list
|
||||
INT32 SetUpDropItemListForMerc( UINT32 uiMercId );
|
||||
INT32 SetUpDropItemListForMerc( SoldierID uiMercId );
|
||||
// store owner's profile id for the items added to this leave slot index
|
||||
void SetUpMercAboutToLeaveEquipment( UINT32 ubProfileId, UINT32 uiSlotIndex );
|
||||
|
||||
@@ -745,4 +745,4 @@ extern BOOLEAN CanCharacterMoveInStrategic( SOLDIERTYPE *pSoldier, INT8 *pbError
|
||||
extern BOOLEAN MapscreenCanPassItemToCharNum( INT32 iNewCharSlot );
|
||||
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -418,7 +418,7 @@ void CheckForMeanwhileOKStart( )
|
||||
SOLDIERTYPE *pSoldier;
|
||||
BOOLEAN fFoundSoldierToInterrogate = FALSE;
|
||||
UINT32 uiCount = 0;
|
||||
for (pSoldier = MercPtrs[gCharactersList[uiCount].usSolID]; gCharactersList[uiCount].fValid; uiCount++, pSoldier++)
|
||||
for (pSoldier = gCharactersList[uiCount].usSolID; gCharactersList[uiCount].fValid; uiCount++, pSoldier++)
|
||||
{
|
||||
if (pSoldier->sSectorX == gModSettings.ubMeanwhileInterrogatePOWSectorX && pSoldier->sSectorY == gModSettings.ubMeanwhileInterrogatePOWSectorY &&
|
||||
pSoldier->bSectorZ == 0 && pSoldier->bAssignment == ASSIGNMENT_POW && pSoldier->stats.bLife > 0 && gMercProfiles[pSoldier->ubProfile].bMercStatus != MERC_FIRED_AS_A_POW)
|
||||
|
||||
+16
-19
@@ -282,9 +282,9 @@ void EndCurrentContractRenewal( )
|
||||
}
|
||||
}
|
||||
|
||||
void HandleMercIsWillingToRenew( UINT8 ubID )
|
||||
void HandleMercIsWillingToRenew( SoldierID ubID )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[ ubID ];
|
||||
SOLDIERTYPE *pSoldier = ubID;
|
||||
|
||||
// We wish to lock interface
|
||||
SpecialCharacterDialogueEvent( DIALOGUE_SPECIAL_EVENT_LOCK_INTERFACE,1,MAP_SCREEN,0,0,0 );
|
||||
@@ -302,9 +302,9 @@ void HandleMercIsWillingToRenew( UINT8 ubID )
|
||||
}
|
||||
|
||||
|
||||
void HandleMercIsNotWillingToRenew( UINT8 ubID )
|
||||
void HandleMercIsNotWillingToRenew( SoldierID ubID )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[ ubID ];
|
||||
SOLDIERTYPE *pSoldier = ubID;
|
||||
|
||||
// We wish to lock interface
|
||||
SpecialCharacterDialogueEvent( DIALOGUE_SPECIAL_EVENT_LOCK_INTERFACE,1,MAP_SCREEN,0,0,0 );
|
||||
@@ -742,16 +742,12 @@ BOOLEAN WillMercRenew( SOLDIERTYPE *pSoldier, BOOLEAN fSayQuote )
|
||||
|
||||
void HandleBuddiesReactionToFiringMerc(SOLDIERTYPE *pFiredSoldier, INT8 bMoraleEvent )
|
||||
{
|
||||
INT8 bMercID;
|
||||
INT8 bLastTeamID;
|
||||
SOLDIERTYPE * pSoldier;
|
||||
|
||||
|
||||
bMercID = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
bLastTeamID = gTacticalStatus.Team[ gbPlayerNum ].bLastID;
|
||||
SoldierID bMercID = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
SoldierID bLastTeamID = gTacticalStatus.Team[ gbPlayerNum ].bLastID;
|
||||
// loop through all mercs to find buddies
|
||||
for ( pSoldier = MercPtrs[ bMercID ]; bMercID <= bLastTeamID; bMercID++,pSoldier++)
|
||||
for ( ; bMercID <= bLastTeamID; ++bMercID)
|
||||
{
|
||||
SOLDIERTYPE *pSoldier = bMercID;
|
||||
//if the merc is active, in Arulco, not POW and is a buddy
|
||||
if ( WhichBuddy(pSoldier->ubProfile,pFiredSoldier->ubProfile) != (-1) &&
|
||||
pSoldier->bActive && pSoldier->ubProfile != NO_PROFILE &&
|
||||
@@ -1416,9 +1412,9 @@ void FindOutIfAnyMercAboutToLeaveIsGonnaRenew( void )
|
||||
SOLDIERTYPE *pSoldier = NULL, *pSoldierWhoWillQuit = NULL;
|
||||
INT32 iCounter= 0, iNumberOnTeam = 0;
|
||||
// WDS - make number of mercenaries, etc. be configurable
|
||||
UINT8 ubPotentialMercs[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ] = { 0 };
|
||||
UINT8 ubNumMercs = 0;
|
||||
UINT8 ubChosenMerc;
|
||||
SoldierID ubPotentialMercs[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ] = { 0 };
|
||||
UINT16 ubNumMercs = 0;
|
||||
UINT16 ubChosenMerc;
|
||||
|
||||
gfFirstMercSayQuote = FALSE;
|
||||
|
||||
@@ -1498,16 +1494,17 @@ void FindOutIfAnyMercAboutToLeaveIsGonnaRenew( void )
|
||||
// OK, pick one....
|
||||
if ( ubNumMercs > 0 )
|
||||
{
|
||||
ubChosenMerc = (UINT8)Random( ubNumMercs );
|
||||
ubChosenMerc = (UINT16)Random( ubNumMercs );
|
||||
SOLDIERTYPE *pChosenSoldier = ubPotentialMercs[ubChosenMerc];
|
||||
|
||||
SpecialCharacterDialogueEvent( DIALOGUE_SPECIAL_EVENT_LOCK_INTERFACE,1 ,MAP_SCREEN ,0 ,0 ,0 );
|
||||
HandleImportantMercQuote( MercPtrs[ ubPotentialMercs[ ubChosenMerc ] ], QUOTE_CONTRACTS_OVER );
|
||||
HandleImportantMercQuote( pChosenSoldier, QUOTE_CONTRACTS_OVER );
|
||||
SpecialCharacterDialogueEvent( DIALOGUE_SPECIAL_EVENT_LOCK_INTERFACE,0 ,MAP_SCREEN ,0 ,0 ,0 );
|
||||
|
||||
AddReasonToWaitingListQueue( CONTRACT_EXPIRE_WARNING_REASON );
|
||||
TacticalCharacterDialogueWithSpecialEvent( MercPtrs[ ubPotentialMercs[ ubChosenMerc ] ], 0, DIALOGUE_SPECIAL_EVENT_SHOW_UPDATE_MENU, 0,0 );
|
||||
TacticalCharacterDialogueWithSpecialEvent( pChosenSoldier, 0, DIALOGUE_SPECIAL_EVENT_SHOW_UPDATE_MENU, 0,0 );
|
||||
|
||||
MercPtrs[ ubPotentialMercs[ ubChosenMerc ] ]->ubContractRenewalQuoteCode = SOLDIER_CONTRACT_RENEW_QUOTE_89_USED;
|
||||
pChosenSoldier->ubContractRenewalQuoteCode = SOLDIER_CONTRACT_RENEW_QUOTE_89_USED;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,8 +68,8 @@ void FindOutIfAnyMercAboutToLeaveIsGonnaRenew( void );
|
||||
void BeginContractRenewalSequence( );
|
||||
void HandleContractRenewalSequence( );
|
||||
void EndCurrentContractRenewal( );
|
||||
void HandleMercIsWillingToRenew( UINT8 ubID );
|
||||
void HandleMercIsNotWillingToRenew( UINT8 ubID );
|
||||
void HandleMercIsWillingToRenew( SoldierID ubID );
|
||||
void HandleMercIsNotWillingToRenew( SoldierID ubID );
|
||||
|
||||
BOOLEAN ContractIsExpiring( SOLDIERTYPE *pSoldier );
|
||||
UINT32 GetHourWhenContractDone( SOLDIERTYPE *pSoldier );
|
||||
|
||||
@@ -282,11 +282,12 @@ void UpdateMilitia( MILITIA aMilitia )
|
||||
|
||||
SOLDIERTYPE* GetUsedSoldierToIndividualMilitia( UINT32 aMilitiaId )
|
||||
{
|
||||
for ( UINT32 cnt = gTacticalStatus.Team[MILITIA_TEAM].bFirstID; cnt <= gTacticalStatus.Team[MILITIA_TEAM].bLastID; ++cnt )
|
||||
for ( SoldierID cnt = gTacticalStatus.Team[MILITIA_TEAM].bFirstID; cnt <= gTacticalStatus.Team[MILITIA_TEAM].bLastID; ++cnt )
|
||||
{
|
||||
if ( MercPtrs[cnt] && MercPtrs[cnt]->bActive && MercPtrs[cnt]->usIndividualMilitiaID == aMilitiaId )
|
||||
SOLDIERTYPE *pSoldier = cnt;
|
||||
if ( pSoldier && pSoldier->bActive && pSoldier->usIndividualMilitiaID == aMilitiaId )
|
||||
{
|
||||
return MercPtrs[cnt];
|
||||
return pSoldier;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -299,11 +300,11 @@ void ApplyTacticalLifeRatioToMilitia()
|
||||
if ( !gGameExternalOptions.fIndividualMilitia )
|
||||
return;
|
||||
|
||||
SOLDIERTYPE* pSoldier;
|
||||
UINT32 cnt = gTacticalStatus.Team[MILITIA_TEAM].bFirstID;
|
||||
INT32 lastid = gTacticalStatus.Team[MILITIA_TEAM].bLastID;
|
||||
for ( pSoldier = MercPtrs[cnt]; cnt < lastid; ++cnt, ++pSoldier )
|
||||
SoldierID cnt = gTacticalStatus.Team[MILITIA_TEAM].bFirstID;
|
||||
SoldierID lastid = gTacticalStatus.Team[MILITIA_TEAM].bLastID;
|
||||
for ( ; cnt < lastid; ++cnt )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier = cnt;
|
||||
MILITIA militia;
|
||||
if ( pSoldier && pSoldier->bActive && pSoldier->stats.bLifeMax && GetMilitia( pSoldier->usIndividualMilitiaID, &militia ) )
|
||||
{
|
||||
@@ -325,11 +326,11 @@ void ApplyMilitiaHealthRatioToTactical()
|
||||
if ( !gGameExternalOptions.fIndividualMilitia || !gGameExternalOptions.fIndividualMilitia_ManageHealth )
|
||||
return;
|
||||
|
||||
SOLDIERTYPE* pSoldier;
|
||||
UINT32 cnt = gTacticalStatus.Team[MILITIA_TEAM].bFirstID;
|
||||
INT32 lastid = gTacticalStatus.Team[MILITIA_TEAM].bLastID;
|
||||
for ( pSoldier = MercPtrs[cnt]; cnt < lastid; ++cnt, ++pSoldier )
|
||||
SoldierID cnt = gTacticalStatus.Team[MILITIA_TEAM].bFirstID;
|
||||
SoldierID lastid = gTacticalStatus.Team[MILITIA_TEAM].bLastID;
|
||||
for ( ; cnt < lastid; ++cnt )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier = cnt;
|
||||
MILITIA militia;
|
||||
if ( pSoldier && pSoldier->bActive && pSoldier->stats.bLifeMax && GetMilitia( pSoldier->usIndividualMilitiaID, &militia ) )
|
||||
{
|
||||
@@ -695,12 +696,12 @@ UINT32 GetIdOfUnusedIndividualMilitia( UINT8 aSoldierClass, UINT8 aSector )
|
||||
// fitting data found - now we have to make sure this one isn't already in use
|
||||
BOOLEAN found = FALSE;
|
||||
|
||||
SOLDIERTYPE* pSoldier;
|
||||
|
||||
INT32 cnt = gTacticalStatus.Team[MILITIA_TEAM].bFirstID;
|
||||
INT32 lastid = gTacticalStatus.Team[MILITIA_TEAM].bLastID;
|
||||
for ( pSoldier = MercPtrs[cnt]; cnt < lastid; ++cnt, ++pSoldier )
|
||||
SoldierID cnt = gTacticalStatus.Team[MILITIA_TEAM].bFirstID;
|
||||
SoldierID lastid = gTacticalStatus.Team[MILITIA_TEAM].bLastID;
|
||||
for ( ; cnt < lastid; ++cnt )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier = cnt;
|
||||
|
||||
if ( pSoldier && pSoldier->bActive && ( *it ).id == pSoldier->usIndividualMilitiaID && IsLegalMilitiaId( pSoldier->usIndividualMilitiaID ) )
|
||||
{
|
||||
found = TRUE;
|
||||
@@ -852,10 +853,11 @@ FLOAT PromoteIndividualMilitiaInSector( UINT8 aSector, FLOAT aPointsToAdd )
|
||||
{
|
||||
BOOLEAN changesnecessary = FALSE;
|
||||
|
||||
SOLDIERTYPE* pSoldier = NULL;
|
||||
int cnt = gTacticalStatus.Team[MILITIA_TEAM].bFirstID;
|
||||
for ( pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[MILITIA_TEAM].bLastID; ++cnt, ++pSoldier )
|
||||
SoldierID cnt = gTacticalStatus.Team[MILITIA_TEAM].bFirstID;
|
||||
SoldierID lastid = gTacticalStatus.Team[MILITIA_TEAM].bLastID;
|
||||
for ( ; cnt < lastid; ++cnt )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier = cnt;
|
||||
MILITIA militia;
|
||||
|
||||
if ( pSoldier && GetMilitia( pSoldier->usIndividualMilitiaID, &militia ) )
|
||||
@@ -1004,7 +1006,7 @@ void HandlePossibleMilitiaPromotion( SOLDIERTYPE* pSoldier, BOOLEAN aAutoResolve
|
||||
pSoldier->ubMilitiaAssists = 0;
|
||||
}
|
||||
|
||||
void MoveIndividualMilitiaProfiles( UINT8 aSourceSector, UINT8 aTargetSector, UINT8 usGreens, UINT8 usRegulars, UINT8 usElites )
|
||||
void MoveIndividualMilitiaProfiles( UINT8 aSourceSector, UINT8 aTargetSector, UINT16 usGreens, UINT16 usRegulars, UINT16 usElites )
|
||||
{
|
||||
if ( !usGreens && !usRegulars && !usElites )
|
||||
return;
|
||||
@@ -1042,7 +1044,7 @@ void MoveIndividualMilitiaProfiles( UINT8 aSourceSector, UINT8 aTargetSector, UI
|
||||
|
||||
|
||||
// militia are disbanded - we have to take note of that
|
||||
void DisbandIndividualMilitia( UINT8 aSector, UINT8 usGreens, UINT8 usRegulars, UINT8 usElites )
|
||||
void DisbandIndividualMilitia( UINT8 aSector, UINT16 usGreens, UINT16 usRegulars, UINT16 usElites )
|
||||
{
|
||||
std::vector<MILITIA>::iterator itend = gIndividualMilitiaVector.end( );
|
||||
for ( std::vector<MILITIA>::iterator it = gIndividualMilitiaVector.begin( ); it != itend; ++it )
|
||||
|
||||
@@ -179,10 +179,10 @@ FLOAT PromoteIndividualMilitiaInSector( UINT8 aSector, FLOAT aPointsToAdd );
|
||||
// handle possible militia promotion and individual militia update
|
||||
void HandlePossibleMilitiaPromotion( SOLDIERTYPE* pSoldier, BOOLEAN aAutoResolve );
|
||||
|
||||
void MoveIndividualMilitiaProfiles( UINT8 aSourceSector, UINT8 aTargetSector, UINT8 usGreens, UINT8 usRegulars, UINT8 usElites );
|
||||
void MoveIndividualMilitiaProfiles( UINT8 aSourceSector, UINT8 aTargetSector, UINT16 usGreens, UINT16 usRegulars, UINT16 usElites );
|
||||
|
||||
// militia are disbanded - we have to take note of that
|
||||
void DisbandIndividualMilitia( UINT8 aSector, UINT8 usGreens, UINT8 usRegulars, UINT8 usElites );
|
||||
void DisbandIndividualMilitia( UINT8 aSector, UINT16 usGreens, UINT16 usRegulars, UINT16 usElites );
|
||||
|
||||
void PromoteIndividualMilitia( UINT8 aSector, UINT8 aSoldierClass );
|
||||
|
||||
@@ -195,4 +195,4 @@ UINT32 GetDailyUpkeep_IndividualMilitia( UINT32& arNumGreen, UINT32& arNumRegula
|
||||
void PickIndividualMilitia( UINT8 aSector, UINT8 ubType, UINT16 aNumber );
|
||||
void DropIndividualMilitia( UINT8 aSector, UINT8 ubType, UINT16 aNumber );
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
+37
-37
@@ -70,7 +70,7 @@
|
||||
#define DIR_SOUTH 2
|
||||
#define DIR_WEST 3
|
||||
|
||||
UINT8 gpAttackDirs[5][4]; // 0. Green Militia 1. Regular Militia 2. Elite Militia 3. Insertion code
|
||||
UINT16 gpAttackDirs[5][4]; // 0. Green Militia 1. Regular Militia 2. Elite Militia 3. Insertion code
|
||||
UINT8 guiDirNumber = 0;
|
||||
BOOLEAN gfMSBattle = FALSE;
|
||||
|
||||
@@ -140,12 +140,12 @@ void MoveMilitiaSquad(INT16 sMapX, INT16 sMapY, INT16 sTMapX, INT16 sTMapY, BOOL
|
||||
SECTORINFO *pSectorInfo = &( SectorInfo[ SECTOR( sMapX, sMapY ) ] );
|
||||
SECTORINFO *pTSectorInfo = &( SectorInfo[ SECTOR( sTMapX, sTMapY ) ] );
|
||||
|
||||
UINT8 bGreensSourceTeam = 0, bGreensDestTeam = 0;
|
||||
UINT8 bRegularsSourceTeam = 0, bRegularsDestTeam = 0;
|
||||
UINT8 bElitesSourceTeam = 0, bElitesDestTeam = 0;
|
||||
UINT8 bTotalGreens = 0, bTotalRegulars = 0, bTotalElites = 0;
|
||||
UINT16 bGreensSourceTeam = 0, bGreensDestTeam = 0;
|
||||
UINT16 bRegularsSourceTeam = 0, bRegularsDestTeam = 0;
|
||||
UINT16 bElitesSourceTeam = 0, bElitesDestTeam = 0;
|
||||
UINT16 bTotalGreens = 0, bTotalRegulars = 0, bTotalElites = 0;
|
||||
UINT8 bTotalGreensPercent = 0, bTotalRegularsPercent = 0, bTotalElitesPercent = 0;
|
||||
INT8 bNewSourceGroupSize = 0, bNewDestGroupSize = 0, bGroupSizeRatio = 0;
|
||||
INT16 bNewSourceGroupSize = 0, bNewDestGroupSize = 0, bGroupSizeRatio = 0;
|
||||
UINT8 ubChanceToSpreadOut;
|
||||
|
||||
//////////////////////////////////////////////////////////
|
||||
@@ -165,8 +165,8 @@ void MoveMilitiaSquad(INT16 sMapX, INT16 sMapY, INT16 sTMapX, INT16 sTMapY, BOOL
|
||||
{
|
||||
// Wilderness->Wilderness movement. Calculate Spread Out chance based on threats.
|
||||
|
||||
UINT8 ubNumEnemiesNearOrigin = NumEnemiesInFiveSectors( sMapX, sMapY );
|
||||
UINT8 ubNumEnemiesNearTarget = NumEnemiesInFiveSectors( sTMapX, sTMapY );
|
||||
UINT16 ubNumEnemiesNearOrigin = NumEnemiesInFiveSectors( sMapX, sMapY );
|
||||
UINT16 ubNumEnemiesNearTarget = NumEnemiesInFiveSectors( sTMapX, sTMapY );
|
||||
|
||||
if (ubNumEnemiesNearOrigin == 0 &&
|
||||
ubNumEnemiesNearTarget > 0 )
|
||||
@@ -264,9 +264,9 @@ void MoveMilitiaSquad(INT16 sMapX, INT16 sMapY, INT16 sTMapX, INT16 sTMapY, BOOL
|
||||
|
||||
// Flugente: mobiles take along their gear
|
||||
// move only gear for those who come new into a sector
|
||||
UINT8 elites = max(0, bElitesDestTeam - pTSectorInfo->ubNumberOfCivsAtLevel[ ELITE_MILITIA ]);
|
||||
UINT8 regulars = max(0, bRegularsDestTeam - pTSectorInfo->ubNumberOfCivsAtLevel[ REGULAR_MILITIA ]);
|
||||
UINT8 greens = max(0, bGreensDestTeam - pTSectorInfo->ubNumberOfCivsAtLevel[ GREEN_MILITIA ]);
|
||||
UINT16 elites = max(0, bElitesDestTeam - pTSectorInfo->ubNumberOfCivsAtLevel[ ELITE_MILITIA ]);
|
||||
UINT16 regulars = max(0, bRegularsDestTeam - pTSectorInfo->ubNumberOfCivsAtLevel[ REGULAR_MILITIA ]);
|
||||
UINT16 greens = max(0, bGreensDestTeam - pTSectorInfo->ubNumberOfCivsAtLevel[ GREEN_MILITIA ]);
|
||||
|
||||
MoveMilitiaEquipment(sMapX, sMapY, sTMapX, sTMapY, elites, regulars, greens);
|
||||
|
||||
@@ -306,9 +306,9 @@ void MoveMilitiaSquad(INT16 sMapX, INT16 sMapY, INT16 sTMapX, INT16 sTMapY, BOOL
|
||||
|
||||
// Flugente: mobiles take along their gear
|
||||
// move only gear for those who come new into a sector
|
||||
UINT8 elites = max(0, bElitesDestTeam - pTSectorInfo->ubNumberOfCivsAtLevel[ ELITE_MILITIA ]);
|
||||
UINT8 regulars = max(0, bRegularsDestTeam - pTSectorInfo->ubNumberOfCivsAtLevel[ REGULAR_MILITIA ]);
|
||||
UINT8 greens = max(0, bGreensDestTeam - pTSectorInfo->ubNumberOfCivsAtLevel[ GREEN_MILITIA ]);
|
||||
UINT16 elites = max(0, bElitesDestTeam - pTSectorInfo->ubNumberOfCivsAtLevel[ ELITE_MILITIA ]);
|
||||
UINT16 regulars = max(0, bRegularsDestTeam - pTSectorInfo->ubNumberOfCivsAtLevel[ REGULAR_MILITIA ]);
|
||||
UINT16 greens = max(0, bGreensDestTeam - pTSectorInfo->ubNumberOfCivsAtLevel[ GREEN_MILITIA ]);
|
||||
|
||||
MoveMilitiaEquipment(sMapX, sMapY, sTMapX, sTMapY, elites, regulars, greens);
|
||||
|
||||
@@ -336,7 +336,7 @@ void MoveMilitiaSquad(INT16 sMapX, INT16 sMapY, INT16 sTMapX, INT16 sTMapY, BOOL
|
||||
{
|
||||
// Source team moves En-Masse to target sector.
|
||||
|
||||
bNewDestGroupSize = __min( (NumNonPlayerTeamMembersInSector( sTMapX, sTMapY, MILITIA_TEAM ) + NumNonPlayerTeamMembersInSector( sMapX, sMapY, MILITIA_TEAM )), (UINT8)gGameExternalOptions.iMaxMilitiaPerSector );
|
||||
bNewDestGroupSize = __min( (NumNonPlayerTeamMembersInSector( sTMapX, sTMapY, MILITIA_TEAM ) + NumNonPlayerTeamMembersInSector( sMapX, sMapY, MILITIA_TEAM )), (UINT16)gGameExternalOptions.iMaxMilitiaPerSector );
|
||||
bNewSourceGroupSize = __max( 0, (NumNonPlayerTeamMembersInSector( sTMapX, sTMapY, MILITIA_TEAM ) + NumNonPlayerTeamMembersInSector( sMapX, sMapY, MILITIA_TEAM )) - gGameExternalOptions.iMaxMilitiaPerSector );
|
||||
|
||||
// If there are still going to be two teams after the transfer
|
||||
@@ -396,9 +396,9 @@ void MoveMilitiaSquad(INT16 sMapX, INT16 sMapY, INT16 sTMapX, INT16 sTMapY, BOOL
|
||||
|
||||
// Flugente: mobiles take along their gear
|
||||
// move only gear for those who come new into a sector
|
||||
UINT8 elites = max(0, bElitesDestTeam - pTSectorInfo->ubNumberOfCivsAtLevel[ ELITE_MILITIA ]);
|
||||
UINT8 regulars = max(0, bRegularsDestTeam - pTSectorInfo->ubNumberOfCivsAtLevel[ REGULAR_MILITIA ]);
|
||||
UINT8 greens = max(0, bGreensDestTeam - pTSectorInfo->ubNumberOfCivsAtLevel[ GREEN_MILITIA ]);
|
||||
UINT16 elites = max(0, bElitesDestTeam - pTSectorInfo->ubNumberOfCivsAtLevel[ ELITE_MILITIA ]);
|
||||
UINT16 regulars = max(0, bRegularsDestTeam - pTSectorInfo->ubNumberOfCivsAtLevel[ REGULAR_MILITIA ]);
|
||||
UINT16 greens = max(0, bGreensDestTeam - pTSectorInfo->ubNumberOfCivsAtLevel[ GREEN_MILITIA ]);
|
||||
|
||||
MoveMilitiaEquipment(sMapX, sMapY, sTMapX, sTMapY, elites, regulars, greens);
|
||||
|
||||
@@ -432,9 +432,9 @@ void MoveMilitiaSquad(INT16 sMapX, INT16 sMapY, INT16 sTMapX, INT16 sTMapY, BOOL
|
||||
// Flugente: update individual militia data
|
||||
ApplyTacticalLifeRatioToMilitia( );
|
||||
|
||||
UINT8 greens = pSectorInfo->ubNumberOfCivsAtLevel[GREEN_MILITIA];
|
||||
UINT8 regulars = pSectorInfo->ubNumberOfCivsAtLevel[REGULAR_MILITIA];
|
||||
UINT8 elites = pSectorInfo->ubNumberOfCivsAtLevel[ELITE_MILITIA];
|
||||
UINT16 greens = pSectorInfo->ubNumberOfCivsAtLevel[GREEN_MILITIA];
|
||||
UINT16 regulars = pSectorInfo->ubNumberOfCivsAtLevel[REGULAR_MILITIA];
|
||||
UINT16 elites = pSectorInfo->ubNumberOfCivsAtLevel[ELITE_MILITIA];
|
||||
|
||||
StrategicRemoveMilitiaFromSector( sMapX, sMapY, GREEN_MILITIA, greens );
|
||||
StrategicRemoveMilitiaFromSector( sMapX, sMapY, REGULAR_MILITIA, regulars );
|
||||
@@ -549,7 +549,7 @@ UINT16 CountDirectionEnemyRating( INT16 sMapX, INT16 sMapY, UINT8 uiDir )
|
||||
for( sLMY = MINIMUM_VALID_Y_COORDINATE; sLMY <= MAXIMUM_VALID_Y_COORDINATE ; ++sLMY )
|
||||
{
|
||||
// SECTORINFO *pSectorInfo = &( SectorInfo[ uiSector ] );
|
||||
UINT8 uiSumOfEnemyTroops = NumNonPlayerTeamMembersInSector( sLMX, sLMY, ENEMY_TEAM );
|
||||
UINT16 uiSumOfEnemyTroops = NumNonPlayerTeamMembersInSector( sLMX, sLMY, ENEMY_TEAM );
|
||||
//pSectorInfo->ubNumAdmins + pSectorInfo->ubNumTroops + pSectorInfo->ubNumElites;
|
||||
|
||||
// there's an enemy
|
||||
@@ -605,21 +605,21 @@ UINT16 CountDirectionRating( INT16 sMapX, INT16 sMapY, UINT8 uiDir )
|
||||
return iRes;
|
||||
}
|
||||
|
||||
UINT8 ubMaxSquadSize = gGameExternalOptions.iMaxMilitiaPerSector;
|
||||
UINT16 ubMaxSquadSize = gGameExternalOptions.iMaxMilitiaPerSector;
|
||||
|
||||
UINT8 ubSourceGreens = SectorInfo[SECTOR(sMapX, sMapY)].ubNumberOfCivsAtLevel[ GREEN_MILITIA ];
|
||||
UINT8 ubSourceRegulars = SectorInfo[SECTOR(sMapX, sMapY)].ubNumberOfCivsAtLevel[ REGULAR_MILITIA ];
|
||||
UINT8 ubSourceElites = SectorInfo[SECTOR(sMapX, sMapY)].ubNumberOfCivsAtLevel[ ELITE_MILITIA ];
|
||||
UINT8 ubTargetGreens = SectorInfo[SECTOR(sDMapX, sDMapY)].ubNumberOfCivsAtLevel[ GREEN_MILITIA ];
|
||||
UINT8 ubTargetRegulars = SectorInfo[SECTOR(sDMapX, sDMapY)].ubNumberOfCivsAtLevel[ REGULAR_MILITIA ];
|
||||
UINT8 ubTargetElites = SectorInfo[SECTOR(sDMapX, sDMapY)].ubNumberOfCivsAtLevel[ ELITE_MILITIA ];
|
||||
UINT16 ubSourceGreens = SectorInfo[SECTOR(sMapX, sMapY)].ubNumberOfCivsAtLevel[ GREEN_MILITIA ];
|
||||
UINT16 ubSourceRegulars = SectorInfo[SECTOR(sMapX, sMapY)].ubNumberOfCivsAtLevel[ REGULAR_MILITIA ];
|
||||
UINT16 ubSourceElites = SectorInfo[SECTOR(sMapX, sMapY)].ubNumberOfCivsAtLevel[ ELITE_MILITIA ];
|
||||
UINT16 ubTargetGreens = SectorInfo[SECTOR(sDMapX, sDMapY)].ubNumberOfCivsAtLevel[ GREEN_MILITIA ];
|
||||
UINT16 ubTargetRegulars = SectorInfo[SECTOR(sDMapX, sDMapY)].ubNumberOfCivsAtLevel[ REGULAR_MILITIA ];
|
||||
UINT16 ubTargetElites = SectorInfo[SECTOR(sDMapX, sDMapY)].ubNumberOfCivsAtLevel[ ELITE_MILITIA ];
|
||||
|
||||
UINT8 ubSourceMilitia = ubSourceGreens + ubSourceRegulars + ubSourceElites;
|
||||
UINT8 ubTargetMilitia = ubTargetGreens + ubTargetRegulars + ubTargetElites;
|
||||
UINT16 ubSourceMilitia = ubSourceGreens + ubSourceRegulars + ubSourceElites;
|
||||
UINT16 ubTargetMilitia = ubTargetGreens + ubTargetRegulars + ubTargetElites;
|
||||
|
||||
UINT16 usSourceEnemiesInFiveSectors = NumEnemiesInFiveSectors( sMapX, sMapY );
|
||||
UINT16 usTargetEnemiesInFiveSectors = NumEnemiesInFiveSectors( sDMapX, sDMapY );
|
||||
UINT8 ubTargetEnemies = NumNonPlayerTeamMembersInSector( sDMapX, sDMapY, ENEMY_TEAM );
|
||||
UINT16 ubTargetEnemies = NumNonPlayerTeamMembersInSector( sDMapX, sDMapY, ENEMY_TEAM );
|
||||
|
||||
UINT16 usSourceMilitiaInFiveSectors = CountAllMilitiaInFiveSectors( sMapX, sMapY );
|
||||
UINT16 usTargetMilitiaInFiveSectors = CountAllMilitiaInFiveSectors( sDMapX, sDMapY );
|
||||
@@ -1112,7 +1112,7 @@ void DoMilitiaHelpFromAdjacentSectors( INT16 sMapX, INT16 sMapY )
|
||||
UINT16 pMoveDir[4][3];
|
||||
UINT8 uiDirNumber = 0;
|
||||
UINT8 x;
|
||||
UINT8 uiNumGreen = 0, uiNumReg = 0, uiNumElite = 0;
|
||||
UINT16 uiNumGreen = 0, uiNumReg = 0, uiNumElite = 0;
|
||||
SECTORINFO *pSectorInfo = &( SectorInfo[ SECTOR( sMapX, sMapY ) ] );
|
||||
BOOLEAN fMoreTroopsLeft[4] = {FALSE,FALSE,FALSE,FALSE};
|
||||
BOOLEAN fFirstLoop = TRUE;
|
||||
@@ -1175,7 +1175,7 @@ void DoMilitiaHelpFromAdjacentSectors( INT16 sMapX, INT16 sMapY )
|
||||
// Flugente: order sNumber reinforcements from src sector to target sector
|
||||
BOOLEAN CallMilitiaReinforcements( INT16 sTargetMapX, INT16 sTargetMapY, INT16 sSrcMapX, INT16 sSrcMapY, UINT16 sNumber )
|
||||
{
|
||||
UINT8 uiNumGreen = 0, uiNumReg = 0, uiNumElite = 0;
|
||||
UINT16 uiNumGreen = 0, uiNumReg = 0, uiNumElite = 0;
|
||||
SECTORINFO *pSectorInfo = &( SectorInfo[ SECTOR( sTargetMapX, sTargetMapY ) ] );
|
||||
|
||||
guiDirNumber = 0;
|
||||
@@ -1236,9 +1236,9 @@ BOOLEAN CallMilitiaReinforcements( INT16 sTargetMapX, INT16 sTargetMapY, INT16 s
|
||||
{
|
||||
++sMilitiaMoved;
|
||||
|
||||
UINT8 militia_green = MilitiaInSectorOfRank( sTargetMapX, sTargetMapY, GREEN_MILITIA );
|
||||
UINT8 militia_troop = MilitiaInSectorOfRank( sTargetMapX, sTargetMapY, REGULAR_MILITIA );
|
||||
UINT8 militia_elite = MilitiaInSectorOfRank( sTargetMapX, sTargetMapY, ELITE_MILITIA );
|
||||
UINT16 militia_green = MilitiaInSectorOfRank( sTargetMapX, sTargetMapY, GREEN_MILITIA );
|
||||
UINT16 militia_troop = MilitiaInSectorOfRank( sTargetMapX, sTargetMapY, REGULAR_MILITIA );
|
||||
UINT16 militia_elite = MilitiaInSectorOfRank( sTargetMapX, sTargetMapY, ELITE_MILITIA );
|
||||
|
||||
gpAttackDirs[guiDirNumber][0] += militia_green - uiNumGreen;
|
||||
gpAttackDirs[guiDirNumber][1] += militia_troop - uiNumReg;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
//#define MAXIMUM_MILITIA_SQUAD_SIZE 30
|
||||
|
||||
extern UINT8 gpAttackDirs[5][4];
|
||||
extern UINT16 gpAttackDirs[5][4];
|
||||
extern UINT8 guiDirNumber;
|
||||
|
||||
// Flugente: militia in this sector is ordered to move according to flags that were applied to it prior
|
||||
@@ -50,4 +50,4 @@ void DissolveAllMilitiaGroupsInSector( INT16 sMapX, INT16 sMapY );
|
||||
|
||||
BOOLEAN MilitiaGroupEntersCurrentSector( UINT8 usGroupId, INT16 sMapX, INT16 sMapY );
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -1089,9 +1089,9 @@ namespace MiniEventHelpers
|
||||
INT16 x = 0;
|
||||
INT16 y = 0;
|
||||
INT8 z = 0;
|
||||
for (UINT32 i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i)
|
||||
for (SoldierID i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i)
|
||||
{
|
||||
const SOLDIERTYPE* merc = MercPtrs[i];
|
||||
const SOLDIERTYPE* merc = i;
|
||||
if (merc && merc->ubProfile == profileId)
|
||||
{
|
||||
x = merc->sSectorX;
|
||||
@@ -1519,9 +1519,9 @@ void MiniEventsLua(UINT32 eventId)
|
||||
gAllMercs.clear();
|
||||
|
||||
// get all mercs eligible to get a mini event
|
||||
for (UINT32 cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; cnt <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++cnt)
|
||||
for (SoldierID cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; cnt <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++cnt)
|
||||
{
|
||||
SOLDIERTYPE* pSoldier = MercPtrs[ cnt ];
|
||||
SOLDIERTYPE* pSoldier = cnt;
|
||||
|
||||
if (pSoldier && pSoldier->bActive
|
||||
&& pSoldier->stats.bLife > 0
|
||||
@@ -1542,9 +1542,9 @@ void MiniEventsLua(UINT32 eventId)
|
||||
|
||||
// second param: a table containing basic info about all of the player's mercs ({ nickname = profileid })
|
||||
f.TableOpen();
|
||||
for (UINT32 i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i)
|
||||
for (SoldierID i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i)
|
||||
{
|
||||
const SOLDIERTYPE* merc = MercPtrs[i];
|
||||
const SOLDIERTYPE* merc = i;
|
||||
if (merc && merc->bActive && merc->bAssignment != IN_TRANSIT && !(merc->flags.uiStatusFlags & SOLDIER_VEHICLE) && !(AM_A_ROBOT(merc)))
|
||||
{
|
||||
std::wstring ws(gMercProfiles[merc->ubProfile].zNickname);
|
||||
@@ -1561,9 +1561,9 @@ void MiniEventsLua(UINT32 eventId)
|
||||
LuaFunction f = LuaFunction(gLS, "BeginRandomEvent");
|
||||
// first param: a table containing basic info about all of the player's mercs ({ nickname = profileid })
|
||||
f.TableOpen();
|
||||
for (UINT32 i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i)
|
||||
for ( SoldierID i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i)
|
||||
{
|
||||
const SOLDIERTYPE* merc = MercPtrs[i];
|
||||
const SOLDIERTYPE* merc = i;
|
||||
if (merc && merc->bActive && merc->bAssignment != IN_TRANSIT && !(merc->flags.uiStatusFlags & SOLDIER_VEHICLE) && !(AM_A_ROBOT(merc)))
|
||||
{
|
||||
std::wstring ws(gMercProfiles[merc->ubProfile].zNickname);
|
||||
|
||||
@@ -543,7 +543,7 @@ BOOLEAN SetThisSectorAsEnemyControlled( INT16 sMapX, INT16 sMapY, INT8 bMapZ, BO
|
||||
{
|
||||
// Enemies can steal items left lying about, each one can carry out up to X kg (defined in RemoveRandomItemsInSector).
|
||||
// Don't care underground sectors here -- we are in overground code branch.
|
||||
UINT8 ubNumAdmins, ubNumTroops, ubNumElites, ubNumRobots, ubNumTanks, ubNumJeeps;
|
||||
UINT16 ubNumAdmins, ubNumTroops, ubNumElites, ubNumRobots, ubNumTanks, ubNumJeeps;
|
||||
GetNumberOfStationaryEnemiesInSector( sMapX, sMapY, &ubNumAdmins, &ubNumTroops, &ubNumElites, &ubNumRobots, &ubNumTanks, &ubNumJeeps );
|
||||
RemoveRandomItemsInSector( sMapX, sMapY, bMapZ, (UINT32)ubNumAdmins + ubNumTroops + ubNumElites );
|
||||
}
|
||||
|
||||
@@ -296,11 +296,10 @@ FLOAT gAmbushRadiusModifier = 1.0f;
|
||||
void InitPreBattleInterface( GROUP *pBattleGroup, BOOLEAN fPersistantPBI )
|
||||
{
|
||||
VOBJECT_DESC VObjectDesc;
|
||||
INT32 i;
|
||||
UINT8 ubGroupID = 0;
|
||||
UINT8 ubNumStationaryEnemies = 0;
|
||||
UINT8 ubNumMobileEnemies = 0;
|
||||
UINT8 ubNumMercs;
|
||||
UINT16 ubNumStationaryEnemies = 0;
|
||||
UINT16 ubNumMobileEnemies = 0;
|
||||
UINT16 ubNumMercs;
|
||||
BOOLEAN fUsePluralVersion = FALSE;
|
||||
INT8 bBestExpLevel = 0;
|
||||
BOOLEAN fRetreatAnOption = TRUE;
|
||||
@@ -407,8 +406,6 @@ void InitPreBattleInterface( GROUP *pBattleGroup, BOOLEAN fPersistantPBI )
|
||||
gubPBSectorY = gpBattleGroup->ubSectorY;
|
||||
gubPBSectorZ = gpBattleGroup->ubSectorZ;
|
||||
|
||||
// get number of enemies thought to be here
|
||||
SectorInfo[SECTOR( gubPBSectorX, gubPBSectorY )].bLastKnownEnemies = NumNonPlayerTeamMembersInSector( gubPBSectorX, gubPBSectorY, ENEMY_TEAM );
|
||||
fMapPanelDirty = TRUE;
|
||||
}
|
||||
else if( gfPersistantPBI )
|
||||
@@ -602,11 +599,12 @@ void InitPreBattleInterface( GROUP *pBattleGroup, BOOLEAN fPersistantPBI )
|
||||
//Count the number of players involved or not involved in this battle
|
||||
guiNumUninvolved = 0;
|
||||
guiNumInvolved = 0;
|
||||
for( i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++i )
|
||||
for( SoldierID i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++i )
|
||||
{
|
||||
if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->stats.bLife && !(MercPtrs[ i ]->flags.uiStatusFlags & SOLDIER_VEHICLE) )
|
||||
SOLDIERTYPE *pSoldier = i;
|
||||
if( pSoldier->bActive && pSoldier->stats.bLife && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) )
|
||||
{
|
||||
if ( PlayerMercInvolvedInThisCombat( MercPtrs[ i ] ) )
|
||||
if ( PlayerMercInvolvedInThisCombat( pSoldier ) )
|
||||
{
|
||||
// involved
|
||||
if( !ubGroupID )
|
||||
@@ -615,13 +613,13 @@ void InitPreBattleInterface( GROUP *pBattleGroup, BOOLEAN fPersistantPBI )
|
||||
//can detect it by comparing the first value with future values. If we do, then
|
||||
//we set a flag which determines whether to use the singular help text or plural version
|
||||
//for the retreat button.
|
||||
ubGroupID = MercPtrs[ i ]->ubGroupID;
|
||||
ubGroupID = pSoldier->ubGroupID;
|
||||
if( !gpBattleGroup )
|
||||
gpBattleGroup = GetGroup( ubGroupID );
|
||||
//if( bBestExpLevel > MercPtrs[ i ]->stats.bExpLevel ) // SANDRO - WTF!! This is a bug!
|
||||
if( bBestExpLevel < MercPtrs[ i ]->stats.bExpLevel ) // SANDRO - WTF!! This is a bug!
|
||||
bBestExpLevel = MercPtrs[ i ]->stats.bExpLevel;
|
||||
if( MercPtrs[ i ]->ubPrevSectorID == 255 )
|
||||
//if( bBestExpLevel > pSoldier->stats.bExpLevel ) // SANDRO - WTF!! This is a bug!
|
||||
if( bBestExpLevel < pSoldier->stats.bExpLevel ) // SANDRO - WTF!! This is a bug!
|
||||
bBestExpLevel = pSoldier->stats.bExpLevel;
|
||||
if( pSoldier->ubPrevSectorID == 255 )
|
||||
{ //Not able to retreat (calculate it for group)
|
||||
GROUP *pTempGroup;
|
||||
pTempGroup = GetGroup( ubGroupID );
|
||||
@@ -629,7 +627,7 @@ void InitPreBattleInterface( GROUP *pBattleGroup, BOOLEAN fPersistantPBI )
|
||||
CalculateGroupRetreatSector( pTempGroup );
|
||||
}
|
||||
}
|
||||
else if( ubGroupID != MercPtrs[ i ]->ubGroupID )
|
||||
else if( ubGroupID != pSoldier->ubGroupID )
|
||||
{
|
||||
fUsePluralVersion = TRUE;
|
||||
}
|
||||
@@ -637,23 +635,23 @@ void InitPreBattleInterface( GROUP *pBattleGroup, BOOLEAN fPersistantPBI )
|
||||
++guiNumInvolved;
|
||||
|
||||
// SANDRO - added check if we have a scout in group, needed later
|
||||
if( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( MercPtrs[ i ], SCOUTING_NT ) && gSkillTraitValues.fSCPreventsTheEnemyToAmbushMercs )
|
||||
if( gGameOptions.fNewTraitSystem && HAS_SKILL_TRAIT( pSoldier, SCOUTING_NT ) && gSkillTraitValues.fSCPreventsTheEnemyToAmbushMercs )
|
||||
{
|
||||
fScoutPresent = TRUE;
|
||||
}
|
||||
|
||||
if ( MercPtrs[i]->usSoldierFlagMask & SOLDIER_AIRDROP )
|
||||
if ( pSoldier->usSoldierFlagMask & SOLDIER_AIRDROP )
|
||||
{
|
||||
fAirDrop = TRUE;
|
||||
}
|
||||
|
||||
UINT16 deploymentleadership = EffectiveLeadership( MercPtrs[i] );
|
||||
FLOAT ambushradiusmodifier = 10 * EffectiveExpLevel( MercPtrs[i] ) + MercPtrs[i]->GetBackgroundValue( BG_AMBUSH_RADIUS );
|
||||
UINT16 deploymentleadership = EffectiveLeadership( pSoldier );
|
||||
FLOAT ambushradiusmodifier = 10 * EffectiveExpLevel( pSoldier ) + pSoldier->GetBackgroundValue( BG_AMBUSH_RADIUS );
|
||||
if ( gGameOptions.fNewTraitSystem )
|
||||
{
|
||||
deploymentleadership += 50 * NUM_SKILL_TRAITS( MercPtrs[i], SQUADLEADER_NT );
|
||||
deploymentleadership += 50 * NUM_SKILL_TRAITS( pSoldier, SQUADLEADER_NT );
|
||||
|
||||
ambushradiusmodifier += 50 * NUM_SKILL_TRAITS( MercPtrs[i], SCOUTING_NT );
|
||||
ambushradiusmodifier += 50 * NUM_SKILL_TRAITS( pSoldier, SCOUTING_NT );
|
||||
}
|
||||
// bonus with old traits, so that the check can be won
|
||||
else
|
||||
@@ -666,7 +664,7 @@ void InitPreBattleInterface( GROUP *pBattleGroup, BOOLEAN fPersistantPBI )
|
||||
gAmbushRadiusModifier = max( gAmbushRadiusModifier, ambushradiusmodifier / 100 );
|
||||
|
||||
// Flugente: if a merc is inserted from concealed state, retreat is forbidden, as at least this merc will have to extract manually
|
||||
if ( MercPtrs[i]->usSoldierFlagMask2 & SOLDIER_CONCEALINSERTION )
|
||||
if ( pSoldier->usSoldierFlagMask2 & SOLDIER_CONCEALINSERTION )
|
||||
fRetreatAnOption = FALSE;
|
||||
}
|
||||
else
|
||||
@@ -890,16 +888,17 @@ void InitPreBattleInterface( GROUP *pBattleGroup, BOOLEAN fPersistantPBI )
|
||||
// SANDRO - merc records - ambush experienced
|
||||
if ( GetEnemyEncounterCode() == ENEMY_AMBUSH_CODE || GetEnemyEncounterCode() == BLOODCAT_AMBUSH_CODE || GetEnemyEncounterCode() == ENEMY_AMBUSH_DEPLOYMENT_CODE || fAmbushPrevented )
|
||||
{
|
||||
for( i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++i )
|
||||
for( SoldierID i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++i )
|
||||
{
|
||||
if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->stats.bLife && !(MercPtrs[ i ]->flags.uiStatusFlags & SOLDIER_VEHICLE) )
|
||||
SOLDIERTYPE *pSoldier = i;
|
||||
if( pSoldier->bActive && pSoldier->stats.bLife && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) )
|
||||
{
|
||||
if ( PlayerMercInvolvedInThisCombat( MercPtrs[ i ] ) && MercPtrs[ i ]->ubProfile != NO_PROFILE )
|
||||
if ( PlayerMercInvolvedInThisCombat( pSoldier ) && pSoldier->ubProfile != NO_PROFILE )
|
||||
{
|
||||
if ( GetEnemyEncounterCode() == ENEMY_AMBUSH_CODE || GetEnemyEncounterCode() == BLOODCAT_AMBUSH_CODE || GetEnemyEncounterCode() == ENEMY_AMBUSH_DEPLOYMENT_CODE )
|
||||
gMercProfiles[ MercPtrs[ i ]->ubProfile ].records.usAmbushesExperienced++;
|
||||
else if ( fAmbushPrevented && HAS_SKILL_TRAIT( MercPtrs[ i ], SCOUTING_NT ) ) // Scouts actually get this as number of prevented ambushes
|
||||
gMercProfiles[ MercPtrs[ i ]->ubProfile ].records.usAmbushesExperienced++;
|
||||
gMercProfiles[ pSoldier->ubProfile ].records.usAmbushesExperienced++;
|
||||
else if ( fAmbushPrevented && HAS_SKILL_TRAIT( pSoldier, SCOUTING_NT ) ) // Scouts actually get this as number of prevented ambushes
|
||||
gMercProfiles[ pSoldier->ubProfile ].records.usAmbushesExperienced++;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1547,14 +1546,12 @@ void RenderPreBattleInterface()
|
||||
{
|
||||
// don't know how many
|
||||
swprintf( str, L"?" );
|
||||
SectorInfo[ SECTOR( gubPBSectorX, gubPBSectorY ) ].bLastKnownEnemies = -2;
|
||||
}
|
||||
else
|
||||
{
|
||||
// know exactly how many
|
||||
i = NumNonPlayerTeamMembersInSector( gubPBSectorX, gubPBSectorY, ENEMY_TEAM );
|
||||
swprintf( str, L"%d", i );
|
||||
SectorInfo[ SECTOR( gubPBSectorX, gubPBSectorY ) ].bLastKnownEnemies = (INT8)i;
|
||||
}
|
||||
x = 57 + (27 - StringPixLength( str, FONT14ARIAL )) / 2;
|
||||
y = 36;
|
||||
@@ -1579,22 +1576,23 @@ void RenderPreBattleInterface()
|
||||
// | NAME | ASSIGN | COND | HP | BP |
|
||||
line = 0;
|
||||
y = TOP_Y + TOP_Y_TEXT_BUFFER - bListOffset;
|
||||
for( i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; i++)
|
||||
for( SoldierID id = gTacticalStatus.Team[OUR_TEAM].bFirstID; id <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++id)
|
||||
{
|
||||
if( MercPtrs[i]->bActive && MercPtrs[i]->stats.bLife && !(MercPtrs[i]->flags.uiStatusFlags & SOLDIER_VEHICLE) )
|
||||
SOLDIERTYPE *pSoldier = id;
|
||||
if( pSoldier->bActive && pSoldier->stats.bLife && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) )
|
||||
{
|
||||
if( PlayerMercInvolvedInThisCombat( MercPtrs[ i ] ) )
|
||||
if( PlayerMercInvolvedInThisCombat( pSoldier ) )
|
||||
{
|
||||
//NAME
|
||||
wcscpy( str, MercPtrs[ i ]->name );
|
||||
wcscpy( str, pSoldier->name );
|
||||
x = 17 + (52 - StringPixLength(str, BLOCKFONT2)) / 2;
|
||||
mprintf( x + xOffset, y + yOffset, str );
|
||||
//ASSIGN
|
||||
GetMapscreenMercAssignmentString( MercPtrs[ i ], str );
|
||||
GetMapscreenMercAssignmentString( pSoldier, str );
|
||||
x = 72 + (54 - StringPixLength(str, BLOCKFONT2)) / 2;
|
||||
mprintf( x + xOffset, y + yOffset, str );
|
||||
//COND
|
||||
GetSoldierConditionInfo( MercPtrs[ i ], str, &ubHPPercent, &ubBPPercent );
|
||||
GetSoldierConditionInfo( pSoldier, str, &ubHPPercent, &ubBPPercent );
|
||||
x = 129 + (58 - StringPixLength(str, BLOCKFONT2)) / 2;
|
||||
mprintf( x + xOffset, y + yOffset, str );
|
||||
//HP
|
||||
@@ -1624,33 +1622,34 @@ void RenderPreBattleInterface()
|
||||
{
|
||||
pGroup = gpGroupList;
|
||||
y = TOP_Y + TOP_Y_TEXT_BUFFER + ubUninvolvedStartY + UNINVOLVED_RELEVANT_HEIGHT - bListOffset;
|
||||
for( i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; i++ )
|
||||
for( SoldierID id = gTacticalStatus.Team[OUR_TEAM].bFirstID; id <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++id )
|
||||
{
|
||||
if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->stats.bLife && !(MercPtrs[ i ]->flags.uiStatusFlags & SOLDIER_VEHICLE) )
|
||||
SOLDIERTYPE *pSoldier = id;
|
||||
if( pSoldier->bActive && pSoldier->stats.bLife && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) )
|
||||
{
|
||||
if( !PlayerMercInvolvedInThisCombat(MercPtrs[ i ]) )
|
||||
if( !PlayerMercInvolvedInThisCombat(pSoldier) )
|
||||
{
|
||||
//NAME
|
||||
wcscpy( str, MercPtrs[ i ]->name );
|
||||
wcscpy( str, pSoldier->name );
|
||||
x = 17 + (52 - StringPixLength(str, BLOCKFONT2)) / 2;
|
||||
mprintf( x + xOffset, y + yOffset, str );
|
||||
//ASSIGN
|
||||
GetMapscreenMercAssignmentString( MercPtrs[ i ], str );
|
||||
GetMapscreenMercAssignmentString( pSoldier, str );
|
||||
x = 72 + (54 - StringPixLength(str, BLOCKFONT2)) / 2;
|
||||
mprintf( x + xOffset, y + yOffset, str );
|
||||
//LOC
|
||||
GetMapscreenMercLocationString( MercPtrs[ i ], str );
|
||||
GetMapscreenMercLocationString( pSoldier, str );
|
||||
x = 128 + (33 - StringPixLength(str, BLOCKFONT2)) / 2;
|
||||
mprintf( x + xOffset, y + yOffset, str );
|
||||
//DEST
|
||||
GetMapscreenMercDestinationString( MercPtrs[ i ], str );
|
||||
GetMapscreenMercDestinationString( pSoldier, str );
|
||||
if (wcslen(str) > 0)
|
||||
{
|
||||
x = 164 + (41 - StringPixLength(str, BLOCKFONT2)) / 2;
|
||||
mprintf( x + xOffset, y + yOffset, str );
|
||||
}
|
||||
//DEP
|
||||
GetMapscreenMercDepartureString( MercPtrs[ i ], str, &ubJunk );
|
||||
GetMapscreenMercDepartureString( pSoldier, str, &ubJunk );
|
||||
x = 208 + (34 - StringPixLength(str, BLOCKFONT2)) / 2;
|
||||
mprintf(x + xOffset, y + yOffset, str);
|
||||
|
||||
@@ -1816,12 +1815,13 @@ void RetreatMercsCallback( GUI_BUTTON *btn, INT32 reason )
|
||||
{
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
// SANDRO - merc records - times retreated counter
|
||||
for( UINT8 i = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; i <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; i++ )
|
||||
for( SoldierID i = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; i <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++i )
|
||||
{
|
||||
if ( MercPtrs[i]->bActive && MercPtrs[i]->stats.bLife >= OKLIFE )
|
||||
SOLDIERTYPE *pSoldier = i;
|
||||
if ( pSoldier->bActive && pSoldier->stats.bLife >= OKLIFE )
|
||||
{
|
||||
if ( PlayerMercInvolvedInThisCombat( MercPtrs[i] ) && MercPtrs[i]->ubProfile != NO_PROFILE )
|
||||
gMercProfiles[ MercPtrs[i]->ubProfile ].records.usBattlesRetreated++;
|
||||
if ( PlayerMercInvolvedInThisCombat( pSoldier ) && pSoldier->ubProfile != NO_PROFILE )
|
||||
gMercProfiles[ pSoldier->ubProfile ].records.usBattlesRetreated++;
|
||||
}
|
||||
}
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -2387,9 +2387,9 @@ void RetreatAllInvolvedMilitiaGroups()
|
||||
return;
|
||||
|
||||
// as group size will be cut to MAX_STRATEGIC_ENEMY_GROUP_SIZE, see how many troops are allowed and reduce sector count accordingly
|
||||
UINT8 greens = pSector->ubNumberOfCivsAtLevel[0];
|
||||
UINT8 regulars = pSector->ubNumberOfCivsAtLevel[1];
|
||||
UINT8 elites = pSector->ubNumberOfCivsAtLevel[2];
|
||||
UINT16 greens = pSector->ubNumberOfCivsAtLevel[0];
|
||||
UINT16 regulars = pSector->ubNumberOfCivsAtLevel[1];
|
||||
UINT16 elites = pSector->ubNumberOfCivsAtLevel[2];
|
||||
|
||||
pGroup = CreateNewMilitiaGroupDepartingFromSector( SECTOR( sBattleSectorX, sBattleSectorY ), greens, regulars, elites );
|
||||
|
||||
@@ -2557,20 +2557,19 @@ BOOLEAN CurrentBattleSectorIs( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ )
|
||||
|
||||
void CheckForRobotAndIfItsControlled( void )
|
||||
{
|
||||
INT32 i;
|
||||
|
||||
// search for the robot on player's team
|
||||
for( i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; i++ )
|
||||
for( SoldierID i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++i )
|
||||
{
|
||||
if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->stats.bLife && AM_A_ROBOT( MercPtrs[ i ] ))
|
||||
SOLDIERTYPE *pSoldier = i;
|
||||
if( pSoldier->bActive && pSoldier->stats.bLife && AM_A_ROBOT( pSoldier ))
|
||||
{
|
||||
// check whether it has a valid controller with it. This sets its ubRobotRemoteHolderID field.
|
||||
MercPtrs[ i ]->UpdateRobotControllerGivenRobot( );
|
||||
pSoldier->UpdateRobotControllerGivenRobot( );
|
||||
|
||||
// if he has a controller, set controllers
|
||||
if ( MercPtrs[ i ]->ubRobotRemoteHolderID != NOBODY )
|
||||
if ( pSoldier->ubRobotRemoteHolderID != NOBODY )
|
||||
{
|
||||
MercPtrs[ MercPtrs[ i ]->ubRobotRemoteHolderID ]->UpdateRobotControllerGivenController( );
|
||||
pSoldier->ubRobotRemoteHolderID->UpdateRobotControllerGivenController( );
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
+80
-179
@@ -103,13 +103,13 @@ void ValidateEnemiesHaveWeapons()
|
||||
{
|
||||
#ifdef JA2BETAVERSION
|
||||
SGPRect CenteringRect= {0 + xResOffset, 0, SCREEN_WIDTH - xResOffset, SCREEN_HEIGHT };
|
||||
INT32 i, iErrorDialog;
|
||||
INT32 iErrorDialog;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
INT32 iNumInvalid = 0;
|
||||
|
||||
for( i = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; i <= gTacticalStatus.Team[ ENEMY_TEAM ].bLastID; ++i )
|
||||
for( SoldierID i = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; i <= gTacticalStatus.Team[ ENEMY_TEAM ].bLastID; ++i )
|
||||
{
|
||||
pSoldier = MercPtrs[ i ];
|
||||
pSoldier = i;
|
||||
if( !pSoldier->bActive || !pSoldier->bInSector )
|
||||
{
|
||||
continue;
|
||||
@@ -141,9 +141,9 @@ void ValidateEnemiesHaveWeapons()
|
||||
}
|
||||
|
||||
//Counts enemies and crepitus, but not bloodcats.
|
||||
UINT8 NumHostilesInSector( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ )
|
||||
UINT16 NumHostilesInSector( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ )
|
||||
{
|
||||
UINT8 ubNumHostiles = 0;
|
||||
UINT16 ubNumHostiles = 0;
|
||||
|
||||
AssertGE( sSectorX, MINIMUM_VALID_X_COORDINATE);
|
||||
AssertLE( sSectorX, MAXIMUM_VALID_X_COORDINATE );
|
||||
@@ -158,7 +158,7 @@ UINT8 NumHostilesInSector( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ )
|
||||
pSector = FindUnderGroundSector( sSectorX, sSectorY, (UINT8)sSectorZ );
|
||||
if( pSector )
|
||||
{
|
||||
ubNumHostiles = (UINT8)(pSector->ubNumAdmins + pSector->ubNumTroops + pSector->ubNumElites + pSector->ubNumCreatures + pSector->ubNumRobots + pSector->ubNumJeeps + pSector->ubNumTanks);
|
||||
ubNumHostiles = (pSector->ubNumAdmins + pSector->ubNumTroops + pSector->ubNumElites + pSector->ubNumCreatures + pSector->ubNumRobots + pSector->ubNumJeeps + pSector->ubNumTanks);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -168,7 +168,7 @@ UINT8 NumHostilesInSector( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ )
|
||||
|
||||
//Count stationary hostiles
|
||||
pSector = &SectorInfo[ SECTOR( sSectorX, sSectorY ) ];
|
||||
ubNumHostiles = (UINT8)(pSector->ubNumAdmins + pSector->ubNumTroops + pSector->ubNumElites + pSector->ubNumCreatures + pSector->ubNumRobots + pSector->ubNumJeeps + pSector->ubNumTanks);
|
||||
ubNumHostiles = (pSector->ubNumAdmins + pSector->ubNumTroops + pSector->ubNumElites + pSector->ubNumCreatures + pSector->ubNumRobots + pSector->ubNumJeeps + pSector->ubNumTanks);
|
||||
|
||||
//Count mobile enemies
|
||||
pGroup = gpGroupList;
|
||||
@@ -185,9 +185,9 @@ UINT8 NumHostilesInSector( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ )
|
||||
return ubNumHostiles;
|
||||
}
|
||||
|
||||
UINT8 NumEnemiesInAnySector( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ )
|
||||
UINT16 NumEnemiesInAnySector( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ )
|
||||
{
|
||||
UINT8 ubNumEnemies = 0;
|
||||
UINT16 ubNumEnemies = 0;
|
||||
|
||||
AssertGE( sSectorX, MINIMUM_VALID_X_COORDINATE);
|
||||
AssertLE( sSectorX, MAXIMUM_VALID_X_COORDINATE );
|
||||
@@ -202,7 +202,7 @@ UINT8 NumEnemiesInAnySector( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ )
|
||||
pSector = FindUnderGroundSector( sSectorX, sSectorY, (UINT8)sSectorZ );
|
||||
if( pSector )
|
||||
{
|
||||
ubNumEnemies = (UINT8)(pSector->ubNumAdmins + pSector->ubNumTroops + pSector->ubNumElites + pSector->ubNumRobots + pSector->ubNumJeeps + pSector->ubNumTanks);
|
||||
ubNumEnemies = (pSector->ubNumAdmins + pSector->ubNumTroops + pSector->ubNumElites + pSector->ubNumRobots + pSector->ubNumJeeps + pSector->ubNumTanks);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -212,7 +212,7 @@ UINT8 NumEnemiesInAnySector( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ )
|
||||
|
||||
//Count stationary enemies
|
||||
pSector = &SectorInfo[ SECTOR( sSectorX, sSectorY ) ];
|
||||
ubNumEnemies = (UINT8)(pSector->ubNumAdmins + pSector->ubNumTroops + pSector->ubNumElites + pSector->ubNumRobots + pSector->ubNumJeeps + pSector->ubNumTanks);
|
||||
ubNumEnemies = (pSector->ubNumAdmins + pSector->ubNumTroops + pSector->ubNumElites + pSector->ubNumRobots + pSector->ubNumJeeps + pSector->ubNumTanks);
|
||||
|
||||
//Count mobile enemies
|
||||
pGroup = gpGroupList;
|
||||
@@ -230,11 +230,11 @@ UINT8 NumEnemiesInAnySector( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ )
|
||||
}
|
||||
|
||||
// returns how many members of a team are in a sector - not intended for OUR_TEAM!
|
||||
UINT8 NumNonPlayerTeamMembersInSector( INT16 sSectorX, INT16 sSectorY, UINT8 ubTeam )
|
||||
UINT16 NumNonPlayerTeamMembersInSector( INT16 sSectorX, INT16 sSectorY, UINT8 ubTeam )
|
||||
{
|
||||
SECTORINFO *pSector;
|
||||
GROUP *pGroup;
|
||||
UINT8 ubNumTroops;
|
||||
UINT16 ubNumTroops = 0;
|
||||
|
||||
// HEADROCK: This is a TEMPORARY fix to avoid the assertion error. Not sure this is the best solution,
|
||||
// probably isn't. But I need this bit to work.
|
||||
@@ -255,14 +255,14 @@ UINT8 NumNonPlayerTeamMembersInSector( INT16 sSectorX, INT16 sSectorY, UINT8 ubT
|
||||
|
||||
if ( ubTeam == ENEMY_TEAM )
|
||||
{
|
||||
ubNumTroops = (UINT8)(pSector->ubNumAdmins + pSector->ubNumTroops + pSector->ubNumElites + pSector->ubNumRobots + pSector->ubNumJeeps + pSector->ubNumTanks);
|
||||
ubNumTroops = (pSector->ubNumAdmins + pSector->ubNumTroops + pSector->ubNumElites + pSector->ubNumRobots + pSector->ubNumJeeps + pSector->ubNumTanks);
|
||||
|
||||
if ( is_networked )
|
||||
ubNumTroops += numenemyLAN((UINT8)sSectorX,(UINT8)sSectorY ); //hayden
|
||||
}
|
||||
else if ( ubTeam == MILITIA_TEAM )
|
||||
{
|
||||
ubNumTroops = (UINT8)(pSector->ubNumberOfCivsAtLevel[0] + pSector->ubNumberOfCivsAtLevel[1] + pSector->ubNumberOfCivsAtLevel[2]);
|
||||
ubNumTroops = (pSector->ubNumberOfCivsAtLevel[0] + pSector->ubNumberOfCivsAtLevel[1] + pSector->ubNumberOfCivsAtLevel[2]);
|
||||
}
|
||||
else if ( ubTeam == CREATURE_TEAM )
|
||||
{
|
||||
@@ -287,11 +287,12 @@ UINT16 NumPlayerTeamMembersInSector( INT16 sSectorX, INT16 sSectorY, INT8 sSecto
|
||||
{
|
||||
UINT16 teammemberspresent = 0;
|
||||
|
||||
SOLDIERTYPE* pTeamSoldier = NULL;
|
||||
UINT16 bMercID = gTacticalStatus.Team[gbPlayerNum].bFirstID;
|
||||
UINT16 bLastTeamID = gTacticalStatus.Team[gbPlayerNum].bLastID;
|
||||
for ( pTeamSoldier = MercPtrs[bMercID]; bMercID <= bLastTeamID; ++bMercID, pTeamSoldier++ )
|
||||
SOLDIERTYPE *pTeamSoldier = NULL;
|
||||
SoldierID bMercID = gTacticalStatus.Team[gbPlayerNum].bFirstID;
|
||||
SoldierID bLastTeamID = gTacticalStatus.Team[gbPlayerNum].bLastID;
|
||||
for ( ; bMercID <= bLastTeamID; ++bMercID )
|
||||
{
|
||||
pTeamSoldier = bMercID;
|
||||
// we test several conditions before we allow adding an opinion
|
||||
// other merc must be active, have a profile, be someone else and not be in transit or dead
|
||||
if ( pTeamSoldier->bActive && !pTeamSoldier->flags.fBetweenSectors && pTeamSoldier->stats.bLife > 0 && !(pTeamSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) &&
|
||||
@@ -309,7 +310,7 @@ UINT16 NumEnemyArmedVehiclesInSector( INT16 sSectorX, INT16 sSectorY, UINT8 usTe
|
||||
{
|
||||
SECTORINFO *pSector;
|
||||
GROUP *pGroup;
|
||||
UINT16 ubNum;
|
||||
UINT16 ubNum = 0;
|
||||
|
||||
// HEADROCK: This is a TEMPORARY fix to avoid the assertion error. Not sure this is the best solution,
|
||||
// probably isn't. But I need this bit to work.
|
||||
@@ -344,7 +345,7 @@ UINT16 NumEnemyArmedVehiclesInSector( INT16 sSectorX, INT16 sSectorY, UINT8 usTe
|
||||
return ubNum;
|
||||
}
|
||||
|
||||
UINT8 NumStationaryEnemiesInSector( INT16 sSectorX, INT16 sSectorY )
|
||||
UINT16 NumStationaryEnemiesInSector( INT16 sSectorX, INT16 sSectorY )
|
||||
{
|
||||
SECTORINFO *pSector;
|
||||
|
||||
@@ -368,14 +369,14 @@ UINT8 NumStationaryEnemiesInSector( INT16 sSectorX, INT16 sSectorY )
|
||||
return( 0 );
|
||||
}
|
||||
|
||||
return (UINT8)(pSector->ubNumAdmins + pSector->ubNumTroops + pSector->ubNumElites + pSector->ubNumTanks + pSector->ubNumJeeps + pSector->ubNumRobots);
|
||||
return (pSector->ubNumAdmins + pSector->ubNumTroops + pSector->ubNumElites + pSector->ubNumTanks + pSector->ubNumJeeps + pSector->ubNumRobots);
|
||||
}
|
||||
|
||||
UINT8 NumMobileEnemiesInSector( INT16 sSectorX, INT16 sSectorY )
|
||||
UINT16 NumMobileEnemiesInSector( INT16 sSectorX, INT16 sSectorY )
|
||||
{
|
||||
GROUP *pGroup;
|
||||
SECTORINFO *pSector;
|
||||
UINT8 ubNumTroops;
|
||||
UINT16 ubNumTroops;
|
||||
AssertGE( sSectorX, MINIMUM_VALID_X_COORDINATE);
|
||||
AssertLE( sSectorX, MAXIMUM_VALID_X_COORDINATE );
|
||||
AssertGE( sSectorY, MINIMUM_VALID_Y_COORDINATE);
|
||||
@@ -396,13 +397,13 @@ UINT8 NumMobileEnemiesInSector( INT16 sSectorX, INT16 sSectorY )
|
||||
if( pSector->ubGarrisonID == ROADBLOCK )
|
||||
{
|
||||
//consider these troops as mobile troops even though they are in a garrison
|
||||
ubNumTroops += (UINT8)(pSector->ubNumAdmins + pSector->ubNumTroops + pSector->ubNumElites + pSector->ubNumRobots + pSector->ubNumJeeps + pSector->ubNumTanks);
|
||||
ubNumTroops += (pSector->ubNumAdmins + pSector->ubNumTroops + pSector->ubNumElites + pSector->ubNumRobots + pSector->ubNumJeeps + pSector->ubNumTanks);
|
||||
}
|
||||
|
||||
return ubNumTroops;
|
||||
}
|
||||
|
||||
void GetNumberOfMobileEnemiesInSector( INT16 sSectorX, INT16 sSectorY, UINT8 *pubNumAdmins, UINT8 *pubNumTroops, UINT8 *pubNumElites, UINT8 *pubNumRobots, UINT8 *pubNumTanks, UINT8 *pubNumJeeps )
|
||||
void GetNumberOfMobileEnemiesInSector( INT16 sSectorX, INT16 sSectorY, UINT16 *pubNumAdmins, UINT16 *pubNumTroops, UINT16 *pubNumElites, UINT16 *pubNumRobots, UINT16 *pubNumTanks, UINT16 *pubNumJeeps )
|
||||
{
|
||||
GROUP *pGroup;
|
||||
SECTORINFO *pSector;
|
||||
@@ -441,7 +442,7 @@ void GetNumberOfMobileEnemiesInSector( INT16 sSectorX, INT16 sSectorY, UINT8 *pu
|
||||
}
|
||||
}
|
||||
|
||||
void GetNumberOfMobileEnemiesInSectorWithoutRoadBlock( INT16 sSectorX, INT16 sSectorY, UINT8 usTeam, UINT8 *pubNumAdmins, UINT8 *pubNumTroops, UINT8 *pubNumElites, UINT8 *pubNumRobots, UINT8 *pubNumTanks, UINT8 *pubNumJeeps )
|
||||
void GetNumberOfMobileEnemiesInSectorWithoutRoadBlock( INT16 sSectorX, INT16 sSectorY, UINT16 usTeam, UINT16 *pubNumAdmins, UINT16 *pubNumTroops, UINT16 *pubNumElites, UINT16 *pubNumRobots, UINT16 *pubNumTanks, UINT16 *pubNumJeeps )
|
||||
{
|
||||
GROUP *pGroup;
|
||||
AssertGE( sSectorX, MINIMUM_VALID_X_COORDINATE);
|
||||
@@ -468,7 +469,7 @@ void GetNumberOfMobileEnemiesInSectorWithoutRoadBlock( INT16 sSectorX, INT16 sSe
|
||||
}
|
||||
|
||||
|
||||
void GetNumberOfStationaryEnemiesInSector( INT16 sSectorX, INT16 sSectorY, UINT8 *pubNumAdmins, UINT8 *pubNumTroops, UINT8 *pubNumElites, UINT8 *pubNumRobots, UINT8 *pubNumTanks, UINT8 *pubNumJeeps )
|
||||
void GetNumberOfStationaryEnemiesInSector( INT16 sSectorX, INT16 sSectorY, UINT16 *pubNumAdmins, UINT16 *pubNumTroops, UINT16 *pubNumElites, UINT16 *pubNumRobots, UINT16 *pubNumTanks, UINT16 *pubNumJeeps )
|
||||
{
|
||||
SECTORINFO *pSector;
|
||||
AssertGE( sSectorX, MINIMUM_VALID_X_COORDINATE);
|
||||
@@ -486,9 +487,9 @@ void GetNumberOfStationaryEnemiesInSector( INT16 sSectorX, INT16 sSectorY, UINT8
|
||||
*pubNumJeeps = pSector->ubNumJeeps;
|
||||
}
|
||||
|
||||
void GetNumberOfEnemiesInSector( INT16 sSectorX, INT16 sSectorY, UINT8 *pubNumAdmins, UINT8 *pubNumTroops, UINT8 *pubNumElites, UINT8 *pubNumRobots, UINT8 *pubNumTanks, UINT8 *pubNumJeeps )
|
||||
void GetNumberOfEnemiesInSector( INT16 sSectorX, INT16 sSectorY, UINT16 *pubNumAdmins, UINT16 *pubNumTroops, UINT16 *pubNumElites, UINT16 *pubNumRobots, UINT16 *pubNumTanks, UINT16 *pubNumJeeps )
|
||||
{
|
||||
UINT8 ubNumAdmins, ubNumTroops, ubNumElites, ubNumRobots, ubNumTanks, ubNumJeeps;
|
||||
UINT16 ubNumAdmins, ubNumTroops, ubNumElites, ubNumRobots, ubNumTanks, ubNumJeeps;
|
||||
|
||||
GetNumberOfStationaryEnemiesInSector( sSectorX, sSectorY, pubNumAdmins, pubNumTroops, pubNumElites, pubNumRobots, pubNumTanks, pubNumJeeps );
|
||||
|
||||
@@ -505,7 +506,6 @@ void GetNumberOfEnemiesInSector( INT16 sSectorX, INT16 sSectorY, UINT8 *pubNumAd
|
||||
void EndTacticalBattleForEnemy()
|
||||
{
|
||||
GROUP *pGroup;
|
||||
INT32 i;
|
||||
|
||||
//Clear enemies in battle for all stationary groups in the sector.
|
||||
if( gbWorldSectorZ > 0 )
|
||||
@@ -558,14 +558,16 @@ void EndTacticalBattleForEnemy()
|
||||
|
||||
//Check to see if any of our mercs have abandoned the militia during a battle. This is cause for a rather
|
||||
//severe loyalty blow.
|
||||
for( i = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID; i <= gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; ++i )
|
||||
for( SoldierID i = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID; i <= gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; ++i )
|
||||
{
|
||||
if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->bInSector && MercPtrs[ i ]->stats.bLife >= OKLIFE )
|
||||
SOLDIERTYPE *pSoldier = i;
|
||||
if( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife >= OKLIFE )
|
||||
{ //found one live militia, so look for any enemies/creatures.
|
||||
// NOTE: this is relying on ENEMY_TEAM being immediately followed by CREATURE_TEAM
|
||||
for( i = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; i <= gTacticalStatus.Team[ CREATURE_TEAM ].bLastID; ++i )
|
||||
for( SoldierID j = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; j <= gTacticalStatus.Team[ CREATURE_TEAM ].bLastID; ++j )
|
||||
{
|
||||
if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->bInSector && MercPtrs[ i ]->stats.bLife >= OKLIFE )
|
||||
SOLDIERTYPE *pEnemy = j;
|
||||
if( pEnemy->bActive && pEnemy->bInSector && pEnemy->stats.bLife >= OKLIFE )
|
||||
{ //confirmed at least one enemy here, so do the loyalty penalty.
|
||||
HandleGlobalLoyaltyEvent( GLOBAL_LOYALTY_ABANDON_MILITIA, gWorldSectorX, gWorldSectorY, 0 );
|
||||
break;
|
||||
@@ -576,27 +578,26 @@ void EndTacticalBattleForEnemy()
|
||||
}
|
||||
}
|
||||
|
||||
UINT8 NumFreeSlots( UINT8 ubTeam )
|
||||
UINT16 NumFreeSlots( UINT8 ubTeam )
|
||||
{
|
||||
UINT8 ubNumFreeSlots = 0;
|
||||
UINT16 ubNumFreeSlots = 0;
|
||||
|
||||
//Count the number of free enemy slots. It is possible to have multiple groups exceed the maximum.
|
||||
for ( INT32 i = gTacticalStatus.Team[ubTeam].bFirstID; i <= gTacticalStatus.Team[ubTeam].bLastID; ++i )
|
||||
for ( SoldierID i = gTacticalStatus.Team[ubTeam].bFirstID; i <= gTacticalStatus.Team[ubTeam].bLastID; ++i )
|
||||
{
|
||||
if ( !Menptr[i].bActive )
|
||||
if ( !i->bActive )
|
||||
++ubNumFreeSlots;
|
||||
}
|
||||
|
||||
// the militia team size can be restricted by the ini
|
||||
if ( ubTeam == MILITIA_TEAM )
|
||||
{
|
||||
ubNumFreeSlots = (UINT8)max( 0, (INT8)ubNumFreeSlots - (INT8)(gGameExternalOptions.ubGameMaximumNumberOfRebels - gGameExternalOptions.iMaxMilitiaPerSector) );
|
||||
ubNumFreeSlots = (UINT16)max( 0, (INT16)ubNumFreeSlots - (INT16)(gGameExternalOptions.ubGameMaximumNumberOfRebels - gGameExternalOptions.iMaxMilitiaPerSector) );
|
||||
}
|
||||
|
||||
return ubNumFreeSlots;
|
||||
}
|
||||
|
||||
|
||||
//Called when entering a sector so the campaign AI can automatically insert the
|
||||
//correct number of troops of each type based on the current number in the sector
|
||||
//in global focus (gWorldSectorX/Y)
|
||||
@@ -1191,7 +1192,6 @@ BOOLEAN PrepareEnemyForUndergroundBattle()
|
||||
//The queen AI layer must process the event by subtracting forces, etc.
|
||||
void ProcessQueenCmdImplicationsOfDeath( SOLDIERTYPE *pSoldier )
|
||||
{
|
||||
INT32 iNumEnemiesInSector;
|
||||
SECTORINFO *pSector;
|
||||
INT32 iMaxEnemyGroupSize = gGameExternalOptions.iMaxEnemyGroupSize;
|
||||
DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"QueenCommand");
|
||||
@@ -1738,22 +1738,6 @@ void ProcessQueenCmdImplicationsOfDeath( SOLDIERTYPE *pSoldier )
|
||||
}
|
||||
}
|
||||
}
|
||||
if( !pSoldier->bSectorZ )
|
||||
{
|
||||
pSector = &SectorInfo[ SECTOR( pSoldier->sSectorX, pSoldier->sSectorY ) ];
|
||||
iNumEnemiesInSector = NumNonPlayerTeamMembersInSector( pSoldier->sSectorX, pSoldier->sSectorY, ENEMY_TEAM );
|
||||
if( iNumEnemiesInSector )
|
||||
{
|
||||
if( pSector->bLastKnownEnemies >= 0 )
|
||||
{
|
||||
pSector->bLastKnownEnemies = (INT8)iNumEnemiesInSector;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
pSector->bLastKnownEnemies = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Well, not so rarely with mobile reinforcements!
|
||||
@@ -1772,8 +1756,8 @@ void AddPossiblePendingEnemiesToBattle()
|
||||
BOOLEAN fMagicallyAppeared=FALSE;
|
||||
#endif
|
||||
|
||||
UINT8 ubSlots, ubNumAvailable;
|
||||
UINT8 ubNumRobots, ubNumElites, ubNumTroops, ubNumAdmins, ubNumTanks, ubNumJeeps;
|
||||
UINT16 ubSlots, ubNumAvailable;
|
||||
UINT16 ubNumRobots, ubNumElites, ubNumTroops, ubNumAdmins, ubNumTanks, ubNumJeeps;
|
||||
UINT8 ubNumGroupsInSector;
|
||||
UINT8 ubGroupIndex;
|
||||
GROUP *pGroup;
|
||||
@@ -2001,7 +1985,7 @@ void AddPossiblePendingEnemiesToBattle()
|
||||
pGroup = pGroupInSectorList[ ubGroupIndex];
|
||||
|
||||
// Flugente fix: check for underflow...
|
||||
UINT8 currentgroupsize = pGroup->pEnemyGroup->ubElitesInBattle + pGroup->pEnemyGroup->ubTroopsInBattle + pGroup->pEnemyGroup->ubAdminsInBattle
|
||||
UINT16 currentgroupsize = pGroup->pEnemyGroup->ubElitesInBattle + pGroup->pEnemyGroup->ubTroopsInBattle + pGroup->pEnemyGroup->ubAdminsInBattle
|
||||
+ pGroup->pEnemyGroup->ubRobotsInBattle + pGroup->pEnemyGroup->ubTanksInBattle + pGroup->pEnemyGroup->ubJeepsInBattle;
|
||||
if ( currentgroupsize > pGroup->ubGroupSize )
|
||||
ubNumAvailable = 0;
|
||||
@@ -2122,14 +2106,14 @@ void AddPossiblePendingEnemiesToBattle()
|
||||
|
||||
void NotifyPlayersOfNewEnemies()
|
||||
{
|
||||
INT32 iSoldiers, iChosenSoldier, i;
|
||||
INT32 iSoldiers, iChosenSoldier;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
BOOLEAN fIgnoreBreath = FALSE;
|
||||
|
||||
iSoldiers = 0;
|
||||
for( i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; i++ )
|
||||
for( SoldierID i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++i )
|
||||
{ //find a merc that is aware.
|
||||
pSoldier = MercPtrs[ i ];
|
||||
pSoldier = i;
|
||||
if( pSoldier->bInSector && pSoldier->bActive && pSoldier->stats.bLife >= OKLIFE && pSoldier->bBreath >= OKBREATH )
|
||||
{
|
||||
iSoldiers++;
|
||||
@@ -2139,9 +2123,9 @@ void NotifyPlayersOfNewEnemies()
|
||||
{ // look for an out of breath merc.
|
||||
fIgnoreBreath = TRUE;
|
||||
|
||||
for( i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; i++ )
|
||||
for( SoldierID i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++i )
|
||||
{ //find a merc that is aware.
|
||||
pSoldier = MercPtrs[ i ];
|
||||
pSoldier = i;
|
||||
if( pSoldier->bInSector && pSoldier->bActive && pSoldier->stats.bLife >= OKLIFE )
|
||||
{
|
||||
iSoldiers++;
|
||||
@@ -2151,9 +2135,9 @@ void NotifyPlayersOfNewEnemies()
|
||||
if( iSoldiers )
|
||||
{
|
||||
iChosenSoldier = Random( iSoldiers );
|
||||
for( i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; i++ )
|
||||
for( SoldierID i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++i )
|
||||
{ //find a merc that is aware.
|
||||
pSoldier = MercPtrs[ i ];
|
||||
pSoldier = i;
|
||||
if( pSoldier->bInSector && pSoldier->bActive && pSoldier->stats.bLife >= OKLIFE &&
|
||||
( ( pSoldier->bBreath >= OKBREATH ) || fIgnoreBreath ) )
|
||||
{
|
||||
@@ -2176,12 +2160,12 @@ void NotifyPlayersOfNewEnemies()
|
||||
}
|
||||
}
|
||||
|
||||
void AddEnemiesToBattle( GROUP *pGroup, UINT8 ubStrategicInsertionCode, UINT8 ubNumAdmins, UINT8 ubNumTroops, UINT8 ubNumElites, UINT8 ubNumRobots, UINT8 ubNumTanks, UINT8 ubNumJeeps, BOOLEAN fMagicallyAppeared )
|
||||
void AddEnemiesToBattle( GROUP *pGroup, UINT8 ubStrategicInsertionCode, UINT16 ubNumAdmins, UINT16 ubNumTroops, UINT16 ubNumElites, UINT16 ubNumRobots, UINT16 ubNumTanks, UINT16 ubNumJeeps, BOOLEAN fMagicallyAppeared )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier;
|
||||
MAPEDGEPOINTINFO MapEdgepointInfo;
|
||||
UINT8 ubCurrSlot;
|
||||
UINT8 ubTotalSoldiers;
|
||||
UINT16 ubCurrSlot;
|
||||
UINT16 ubTotalSoldiers;
|
||||
UINT8 bDesiredDirection=0;
|
||||
|
||||
// while transport groups can't normally reinforce, this covers the case where a transport group enters a sector (via normal movement)
|
||||
@@ -2323,7 +2307,7 @@ void AddEnemiesToBattle( GROUP *pGroup, UINT8 ubStrategicInsertionCode, UINT8 ub
|
||||
}
|
||||
UpdateMercInSector( pSoldier, gWorldSectorX, gWorldSectorY, 0 );
|
||||
}
|
||||
else if( ubNumTroops && (UINT8)Random( ubTotalSoldiers ) < (UINT8)(ubNumElites + ubNumTroops) )
|
||||
else if( ubNumTroops && Random( ubTotalSoldiers ) < (ubNumElites + ubNumTroops) )
|
||||
{
|
||||
ubNumTroops--;
|
||||
ubTotalSoldiers--;
|
||||
@@ -2346,7 +2330,7 @@ void AddEnemiesToBattle( GROUP *pGroup, UINT8 ubStrategicInsertionCode, UINT8 ub
|
||||
}
|
||||
UpdateMercInSector( pSoldier, gWorldSectorX, gWorldSectorY, 0 );
|
||||
}
|
||||
else if( ubNumAdmins && (UINT8)Random( ubTotalSoldiers ) < (UINT8)(ubNumElites + ubNumTroops + ubNumAdmins) )
|
||||
else if( ubNumAdmins && Random( ubTotalSoldiers ) < (ubNumElites + ubNumTroops + ubNumAdmins) )
|
||||
{
|
||||
ubNumAdmins--;
|
||||
ubTotalSoldiers--;
|
||||
@@ -2369,7 +2353,7 @@ void AddEnemiesToBattle( GROUP *pGroup, UINT8 ubStrategicInsertionCode, UINT8 ub
|
||||
}
|
||||
UpdateMercInSector( pSoldier, gWorldSectorX, gWorldSectorY, 0 );
|
||||
}
|
||||
else if( ubNumRobots && (UINT8)Random( ubTotalSoldiers ) < (UINT8)(ubNumElites + ubNumTroops + ubNumAdmins + ubNumRobots) )
|
||||
else if( ubNumRobots && Random( ubTotalSoldiers ) < (ubNumElites + ubNumTroops + ubNumAdmins + ubNumRobots) )
|
||||
{
|
||||
ubNumRobots--;
|
||||
ubTotalSoldiers--;
|
||||
@@ -2392,7 +2376,7 @@ void AddEnemiesToBattle( GROUP *pGroup, UINT8 ubStrategicInsertionCode, UINT8 ub
|
||||
}
|
||||
UpdateMercInSector( pSoldier, gWorldSectorX, gWorldSectorY, 0 );
|
||||
}
|
||||
else if( ubNumTanks && (UINT8)Random( ubTotalSoldiers ) < (UINT8)(ubNumElites + ubNumTroops + ubNumAdmins + ubNumRobots + ubNumTanks) && ubNumberOfVehicles < 9 )
|
||||
else if( ubNumTanks && Random( ubTotalSoldiers ) < (ubNumElites + ubNumTroops + ubNumAdmins + ubNumRobots + ubNumTanks) && ubNumberOfVehicles < 9 )
|
||||
{
|
||||
ubNumTanks--;
|
||||
ubTotalSoldiers--;
|
||||
@@ -2415,7 +2399,7 @@ void AddEnemiesToBattle( GROUP *pGroup, UINT8 ubStrategicInsertionCode, UINT8 ub
|
||||
}
|
||||
UpdateMercInSector( pSoldier, gWorldSectorX, gWorldSectorY, 0 );
|
||||
}
|
||||
else if ( ubNumJeeps && (UINT8)Random( ubTotalSoldiers ) < (UINT8)(ubNumElites + ubNumTroops + ubNumAdmins + ubNumRobots + ubNumTanks + ubNumJeeps) && ubNumberOfVehicles < 9 )
|
||||
else if ( ubNumJeeps && Random( ubTotalSoldiers ) < (ubNumElites + ubNumTroops + ubNumAdmins + ubNumRobots + ubNumTanks + ubNumJeeps) && ubNumberOfVehicles < 9 )
|
||||
{
|
||||
ubNumJeeps--;
|
||||
ubTotalSoldiers--;
|
||||
@@ -2463,12 +2447,12 @@ void AddEnemiesToBattle( GROUP *pGroup, UINT8 ubStrategicInsertionCode, UINT8 ub
|
||||
#endif
|
||||
}
|
||||
|
||||
void AddMilitiaToBattle( GROUP *pGroup, UINT8 ubStrategicInsertionCode, UINT8 ubNumGreens, UINT8 ubNumRegulars, UINT8 ubNumElites, BOOLEAN fMagicallyAppeared )
|
||||
void AddMilitiaToBattle( GROUP *pGroup, UINT8 ubStrategicInsertionCode, UINT16 ubNumGreens, UINT16 ubNumRegulars, UINT16 ubNumElites, BOOLEAN fMagicallyAppeared )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier;
|
||||
MAPEDGEPOINTINFO MapEdgepointInfo;
|
||||
UINT8 ubCurrSlot;
|
||||
UINT8 ubTotalSoldiers;
|
||||
UINT16 ubCurrSlot;
|
||||
UINT16 ubTotalSoldiers;
|
||||
UINT8 bDesiredDirection = 0;
|
||||
|
||||
switch ( ubStrategicInsertionCode )
|
||||
@@ -2558,7 +2542,7 @@ void AddMilitiaToBattle( GROUP *pGroup, UINT8 ubStrategicInsertionCode, UINT8 ub
|
||||
}
|
||||
UpdateMercInSector( pSoldier, gWorldSectorX, gWorldSectorY, 0 );
|
||||
}
|
||||
else if ( ubNumRegulars && (UINT8)Random( ubTotalSoldiers ) < (UINT8)(ubNumElites + ubNumRegulars) )
|
||||
else if ( ubNumRegulars && Random( ubTotalSoldiers ) < (ubNumElites + ubNumRegulars) )
|
||||
{
|
||||
ubNumRegulars--;
|
||||
ubTotalSoldiers--;
|
||||
@@ -2581,7 +2565,7 @@ void AddMilitiaToBattle( GROUP *pGroup, UINT8 ubStrategicInsertionCode, UINT8 ub
|
||||
}
|
||||
UpdateMercInSector( pSoldier, gWorldSectorX, gWorldSectorY, 0 );
|
||||
}
|
||||
else if ( ubNumGreens && (UINT8)Random( ubTotalSoldiers ) < (UINT8)(ubNumElites + ubNumRegulars + ubNumGreens) )
|
||||
else if ( ubNumGreens && Random( ubTotalSoldiers ) < (ubNumElites + ubNumRegulars + ubNumGreens) )
|
||||
{
|
||||
ubNumGreens--;
|
||||
ubTotalSoldiers--;
|
||||
@@ -2964,89 +2948,6 @@ void EnemyCapturesPlayerSoldier( SOLDIERTYPE *pSoldier )
|
||||
}
|
||||
|
||||
|
||||
void HandleEnemyStatusInCurrentMapBeforeLoadingNewMap()
|
||||
{
|
||||
INT32 i;
|
||||
BOOLEAN fMadeCorpse;
|
||||
INT8 bKilledEnemies = 0, bKilledCreatures = 0, bKilledRebels = 0, bKilledCivilians = 0;
|
||||
return;
|
||||
//If any of the soldiers are dying, kill them now.
|
||||
for( i = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; i <= gTacticalStatus.Team[ ENEMY_TEAM ].bLastID; i++ )
|
||||
{
|
||||
if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->stats.bLife < OKLIFE && MercPtrs[ i ]->stats.bLife )
|
||||
{
|
||||
MercPtrs[ i ]->stats.bLife = 0;
|
||||
MercPtrs[ i ]->iHealableInjury = 0; // added just for sure - SANDRO
|
||||
HandleSoldierDeath( MercPtrs[ i ], &fMadeCorpse );
|
||||
bKilledEnemies++;
|
||||
}
|
||||
}
|
||||
//Do the same for the creatures.
|
||||
for( i = gTacticalStatus.Team[ CREATURE_TEAM ].bFirstID; i <= gTacticalStatus.Team[ CREATURE_TEAM ].bLastID; i++ )
|
||||
{
|
||||
if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->stats.bLife < OKLIFE && MercPtrs[ i ]->stats.bLife )
|
||||
{
|
||||
MercPtrs[ i ]->stats.bLife = 0;
|
||||
HandleSoldierDeath( MercPtrs[ i ], &fMadeCorpse );
|
||||
bKilledCreatures++;
|
||||
}
|
||||
}
|
||||
//Militia
|
||||
for( i = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID; i <= gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; i++ )
|
||||
{
|
||||
if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->stats.bLife < OKLIFE && MercPtrs[ i ]->stats.bLife )
|
||||
{
|
||||
MercPtrs[ i ]->stats.bLife = 0;
|
||||
MercPtrs[ i ]->iHealableInjury = 0; // added just for sure - SANDRO
|
||||
HandleSoldierDeath( MercPtrs[ i ], &fMadeCorpse );
|
||||
bKilledRebels++;
|
||||
}
|
||||
}
|
||||
//Civilians
|
||||
for( i = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; i <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; i++ )
|
||||
{
|
||||
if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->stats.bLife < OKLIFE && MercPtrs[ i ]->stats.bLife )
|
||||
{
|
||||
MercPtrs[ i ]->stats.bLife = 0;
|
||||
MercPtrs[ i ]->iHealableInjury = 0; // added just for sure - SANDRO
|
||||
HandleSoldierDeath( MercPtrs[ i ], &fMadeCorpse );
|
||||
bKilledCivilians++;
|
||||
}
|
||||
}
|
||||
|
||||
// TEST MESSAGES ONLY!
|
||||
if( bKilledCivilians )
|
||||
ScreenMsg( FONT_BLUE, MSG_TESTVERSION, L"%d civilians died after you left the sector.", bKilledCivilians );
|
||||
if( bKilledRebels )
|
||||
ScreenMsg( FONT_BLUE, MSG_TESTVERSION, L"%d militia died after you left the sector.", bKilledRebels );
|
||||
if( bKilledEnemies )
|
||||
ScreenMsg( FONT_BLUE, MSG_TESTVERSION, L"%d enemies died after you left the sector.", bKilledEnemies );
|
||||
if( bKilledCreatures )
|
||||
ScreenMsg( FONT_BLUE, MSG_TESTVERSION, L"%d creatures died after you left the sector.", bKilledCreatures );
|
||||
|
||||
if( !gbWorldSectorZ )
|
||||
{
|
||||
SECTORINFO *pSector;
|
||||
pSector = &SectorInfo[ SECTOR(gWorldSectorX, gWorldSectorY) ];
|
||||
pSector->ubAdminsInBattle = 0;
|
||||
pSector->ubTroopsInBattle = 0;
|
||||
pSector->ubElitesInBattle = 0;
|
||||
pSector->ubCreaturesInBattle = 0;
|
||||
//RecalculateSectorWeight(
|
||||
}
|
||||
else if( gbWorldSectorZ > 0 )
|
||||
{
|
||||
UNDERGROUND_SECTORINFO *pSector;
|
||||
pSector = FindUnderGroundSector( gWorldSectorX, gWorldSectorY, gbWorldSectorZ );
|
||||
if( !pSector )
|
||||
return;
|
||||
pSector->ubAdminsInBattle = 0;
|
||||
pSector->ubTroopsInBattle = 0;
|
||||
pSector->ubElitesInBattle = 0;
|
||||
pSector->ubCreaturesInBattle = 0;
|
||||
}
|
||||
}
|
||||
|
||||
BOOLEAN PlayerSectorDefended( UINT8 ubSectorID )
|
||||
{
|
||||
if ( NumNonPlayerTeamMembersInSector( SECTORX( ubSectorID ), SECTORY( ubSectorID ), MILITIA_TEAM ) )
|
||||
@@ -3068,13 +2969,13 @@ BOOLEAN PlayerSectorDefended( UINT8 ubSectorID )
|
||||
BOOLEAN OnlyHostileCivsInSector()
|
||||
{
|
||||
SOLDIERTYPE *pSoldier;
|
||||
INT32 i;
|
||||
SoldierID i;
|
||||
BOOLEAN fHostileCivs = FALSE;
|
||||
|
||||
//Look for any hostile civs.
|
||||
for( i = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; i <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; i++ )
|
||||
for( i = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; i <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ++i )
|
||||
{
|
||||
pSoldier = MercPtrs[ i ];
|
||||
pSoldier = i;
|
||||
if( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife )
|
||||
{
|
||||
if( !pSoldier->aiData.bNeutral )
|
||||
@@ -3089,9 +2990,9 @@ BOOLEAN OnlyHostileCivsInSector()
|
||||
return FALSE;
|
||||
}
|
||||
//Look for anybody else hostile. If found, return FALSE immediately.
|
||||
for( i = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; i <= gTacticalStatus.Team[ ENEMY_TEAM ].bLastID; i++ )
|
||||
for( i = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; i <= gTacticalStatus.Team[ ENEMY_TEAM ].bLastID; ++i )
|
||||
{
|
||||
pSoldier = MercPtrs[ i ];
|
||||
pSoldier = i;
|
||||
if( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife )
|
||||
{
|
||||
if( !pSoldier->aiData.bNeutral )
|
||||
@@ -3100,9 +3001,9 @@ BOOLEAN OnlyHostileCivsInSector()
|
||||
}
|
||||
}
|
||||
}
|
||||
for( i = gTacticalStatus.Team[ CREATURE_TEAM ].bFirstID; i <= gTacticalStatus.Team[ CREATURE_TEAM ].bLastID; i++ )
|
||||
for( i = gTacticalStatus.Team[ CREATURE_TEAM ].bFirstID; i <= gTacticalStatus.Team[ CREATURE_TEAM ].bLastID; ++i )
|
||||
{
|
||||
pSoldier = MercPtrs[ i ];
|
||||
pSoldier = i;
|
||||
if( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife )
|
||||
{
|
||||
if( !pSoldier->aiData.bNeutral )
|
||||
@@ -3111,9 +3012,9 @@ BOOLEAN OnlyHostileCivsInSector()
|
||||
}
|
||||
}
|
||||
}
|
||||
for( i = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID; i <= gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; i++ )
|
||||
for( i = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID; i <= gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; ++i )
|
||||
{
|
||||
pSoldier = MercPtrs[ i ];
|
||||
pSoldier = i;
|
||||
if( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife )
|
||||
{
|
||||
if( !pSoldier->aiData.bNeutral )
|
||||
@@ -3176,8 +3077,8 @@ void HandleBloodCatDeaths( SECTORINFO *pSector )
|
||||
//if ALL the bloodcats are killed
|
||||
if( pSector->bBloodCats == 0 )
|
||||
{
|
||||
UINT8 bId1=-1;
|
||||
UINT8 bId2=-1;
|
||||
SoldierID bId1 = NOBODY;
|
||||
SoldierID bId2 = NOBODY;
|
||||
UINT8 bNum=0;
|
||||
|
||||
SetFactTrue( FACT_PLAYER_KILLED_ALL_BETTYS_BLOODCATS );
|
||||
@@ -3192,13 +3093,13 @@ void HandleBloodCatDeaths( SECTORINFO *pSector )
|
||||
if( bNum != 0 )
|
||||
{
|
||||
//must make sure TEX doesnt say the quote
|
||||
if( bId1 != NOBODY && Menptr[ bId1 ].ubProfile != TEX_UB )
|
||||
if( bId1 != NOBODY && bId1->ubProfile != TEX_UB )
|
||||
{
|
||||
TacticalCharacterDialogue( &Menptr[ bId1 ], QUOTE_UB_HANDLE_BLOODCATDEATHS );
|
||||
TacticalCharacterDialogue( bId1, QUOTE_UB_HANDLE_BLOODCATDEATHS );
|
||||
}
|
||||
else if( bId2 != NOBODY && Menptr[ bId2 ].ubProfile != TEX_UB )
|
||||
else if( bId2 != NOBODY && bId2->ubProfile != TEX_UB )
|
||||
{
|
||||
TacticalCharacterDialogue( &Menptr[ bId2 ], QUOTE_UB_HANDLE_BLOODCATDEATHS );
|
||||
TacticalCharacterDialogue( bId2, QUOTE_UB_HANDLE_BLOODCATDEATHS );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+12
-13
@@ -12,26 +12,26 @@
|
||||
extern BOOLEAN gfPendingNonPlayerTeam[PLAYER_PLAN];
|
||||
|
||||
|
||||
UINT8 NumFreeSlots( UINT8 ubTeam );
|
||||
UINT16 NumFreeSlots( UINT8 ubTeam );
|
||||
|
||||
//Counts enemies and crepitus, but not bloodcats.
|
||||
UINT8 NumHostilesInSector( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ );
|
||||
UINT16 NumHostilesInSector( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ );
|
||||
|
||||
UINT8 NumEnemiesInAnySector( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ );
|
||||
UINT16 NumEnemiesInAnySector( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ );
|
||||
|
||||
// returns how many members of a team are in a sector - not intended for OUR_TEAM!
|
||||
UINT8 NumNonPlayerTeamMembersInSector( INT16 sSectorX, INT16 sSectorY, UINT8 ubTeam );
|
||||
UINT16 NumNonPlayerTeamMembersInSector( INT16 sSectorX, INT16 sSectorY, UINT8 ubTeam );
|
||||
|
||||
// returns how many members of a team are in a sector - only intended for OUR_TEAM! POWs not included
|
||||
UINT16 NumPlayerTeamMembersInSector( INT16 sSectorX, INT16 sSectorY, INT8 sSectorZ );
|
||||
|
||||
UINT16 NumEnemyArmedVehiclesInSector( INT16 sSectorX, INT16 sSectorY, UINT8 usTeam );
|
||||
UINT8 NumStationaryEnemiesInSector( INT16 sSectorX, INT16 sSectorY );
|
||||
UINT8 NumMobileEnemiesInSector( INT16 sSectorX, INT16 sSectorY );
|
||||
void GetNumberOfMobileEnemiesInSector( INT16 sSectorX, INT16 sSectorY, UINT8 *pubNumAdmins, UINT8 *pubNumTroops, UINT8 *pubNumElites, UINT8 *pubNumRobots, UINT8 *pubNumTanks, UINT8 *pubNumJeeps );
|
||||
void GetNumberOfMobileEnemiesInSectorWithoutRoadBlock( INT16 sSectorX, INT16 sSectorY, UINT8 usTeam, UINT8 *pubNumAdmins, UINT8 *pubNumTroops, UINT8 *pubNumElites, UINT8 *pubNumRobots, UINT8 *pubNumTanks, UINT8 *pubNumJeeps );
|
||||
void GetNumberOfStationaryEnemiesInSector( INT16 sSectorX, INT16 sSectorY, UINT8 *pubNumAdmins, UINT8 *pubNumTroops, UINT8 *pubNumElites, UINT8 *pubNumRobots, UINT8 *pubNumTanks, UINT8 *pubNumJeeps );
|
||||
void GetNumberOfEnemiesInSector( INT16 sSectorX, INT16 sSectorY, UINT8 *pubNumAdmins, UINT8 *pubNumTroops, UINT8 *pubNumElites, UINT8 *pubNumRobots, UINT8 *pubNumTanks, UINT8 *pubNumJeeps );
|
||||
UINT16 NumStationaryEnemiesInSector( INT16 sSectorX, INT16 sSectorY );
|
||||
UINT16 NumMobileEnemiesInSector( INT16 sSectorX, INT16 sSectorY );
|
||||
void GetNumberOfMobileEnemiesInSector( INT16 sSectorX, INT16 sSectorY, UINT16 *pubNumAdmins, UINT16 *pubNumTroops, UINT16 *pubNumElites, UINT16 *pubNumRobots, UINT16 *pubNumTanks, UINT16 *pubNumJeeps );
|
||||
void GetNumberOfMobileEnemiesInSectorWithoutRoadBlock( INT16 sSectorX, INT16 sSectorY, UINT16 usTeam, UINT16 *pubNumAdmins, UINT16 *pubNumTroops, UINT16 *pubNumElites, UINT16 *pubNumRobots, UINT16 *pubNumTanks, UINT16 *pubNumJeeps );
|
||||
void GetNumberOfStationaryEnemiesInSector( INT16 sSectorX, INT16 sSectorY, UINT16 *pubNumAdmins, UINT16 *pubNumTroops, UINT16 *pubNumElites, UINT16 *pubNumRobots, UINT16 *pubNumTanks, UINT16 *pubNumJeeps );
|
||||
void GetNumberOfEnemiesInSector( INT16 sSectorX, INT16 sSectorY, UINT16 *pubNumAdmins, UINT16 *pubNumTroops, UINT16 *pubNumElites, UINT16 *pubNumRobots, UINT16 *pubNumTanks, UINT16 *pubNumJeeps );
|
||||
|
||||
//Called when entering a sector so the campaign AI can automatically insert the
|
||||
//correct number of troops of each type based on the current number in the sector
|
||||
@@ -39,14 +39,13 @@ void GetNumberOfEnemiesInSector( INT16 sSectorX, INT16 sSectorY, UINT8 *pubNumAd
|
||||
BOOLEAN PrepareEnemyForSectorBattle();
|
||||
BOOLEAN PrepareEnemyForUndergroundBattle();
|
||||
|
||||
void AddEnemiesToBattle( GROUP *pGroup, UINT8 ubStrategicInsertionCode, UINT8 ubNumAdmins, UINT8 ubNumTroops, UINT8 ubNumElites, UINT8 ubNumRobots, UINT8 ubNumTanks, UINT8 abNumJeeps, BOOLEAN fMagicallyAppeared );
|
||||
void AddMilitiaToBattle( GROUP *pGroup, UINT8 ubStrategicInsertionCode, UINT8 ubNumGreens, UINT8 ubNumRegulars, UINT8 ubNumElites, BOOLEAN fMagicallyAppeared );
|
||||
void AddEnemiesToBattle( GROUP *pGroup, UINT8 ubStrategicInsertionCode, UINT16 ubNumAdmins, UINT16 ubNumTroops, UINT16 ubNumElites, UINT16 ubNumRobots, UINT16 ubNumTanks, UINT16 abNumJeeps, BOOLEAN fMagicallyAppeared );
|
||||
void AddMilitiaToBattle( GROUP *pGroup, UINT8 ubStrategicInsertionCode, UINT16 ubNumGreens, UINT16 ubNumRegulars, UINT16 ubNumElites, BOOLEAN fMagicallyAppeared );
|
||||
void AddPossiblePendingEnemiesToBattle();
|
||||
void EndTacticalBattleForEnemy();
|
||||
|
||||
void ProcessQueenCmdImplicationsOfDeath( SOLDIERTYPE *pSoldier );
|
||||
|
||||
void HandleEnemyStatusInCurrentMapBeforeLoadingNewMap();
|
||||
BOOLEAN SaveUnderGroundSectorInfoToSaveGame( HWFILE hFile );
|
||||
BOOLEAN LoadUnderGroundSectorInfoFromSavedGame( HWFILE hFile );
|
||||
|
||||
|
||||
@@ -665,19 +665,19 @@ void ChangeFactState( INT32 iNumber );
|
||||
void DisplayCurrentGridNo();
|
||||
void EnableQDSButtons();
|
||||
|
||||
BOOLEAN DoQDSMessageBox( UINT8 ubStyle, STR16 zString, UINT32 uiExitScreen, UINT8 ubFlags, MSGBOX_CALLBACK ReturnCallback );
|
||||
BOOLEAN DoQDSMessageBox( UINT8 ubStyle, STR16 zString, UINT32 uiExitScreen, UINT8 ubFlags, MSGBOX_CALLBACK ReturnCallback );
|
||||
void IncrementActiveDropDownBox( INT16 sIncrementValue );
|
||||
INT16 IsMercInTheSector( UINT16 usMercID );
|
||||
SoldierID IsMercInTheSector( UINT8 ubMercProfileID );
|
||||
void RefreshAllNPCInventory();
|
||||
void SetQDSMercProfile();
|
||||
void HandleQDSTalkingMerc();
|
||||
void DisplayQDSCurrentlyQuoteNum( );
|
||||
void SetTalkingMercPauseState( BOOLEAN fState );
|
||||
UINT8 WhichPanelShouldTalkingMercUse( );
|
||||
UINT8 WhichPanelShouldTalkingMercUse( );
|
||||
void EndMercTalking();
|
||||
void EnableFactMouseRegions();
|
||||
void DisableFactMouseRegions();
|
||||
INT32 GetMaxNumberOfQuotesToPlay( );
|
||||
INT32 GetMaxNumberOfQuotesToPlay( );
|
||||
void GetDebugLocationString( UINT16 usProfileID, STR16 pzText );
|
||||
|
||||
//ppp
|
||||
@@ -2993,9 +2993,9 @@ void DestroyQuestDebugTextInputBoxes()
|
||||
|
||||
void AddNPCToGridNo( INT32 iGridNo )
|
||||
{
|
||||
SOLDIERCREATE_STRUCT MercCreateStruct;
|
||||
INT16 sSectorX, sSectorY;
|
||||
UINT8 ubID;
|
||||
SOLDIERCREATE_STRUCT MercCreateStruct;
|
||||
INT16 sSectorX, sSectorY;
|
||||
SoldierID ubID;
|
||||
|
||||
GetCurrentWorldSector( &sSectorX, &sSectorY );
|
||||
MercCreateStruct.bTeam = CIV_TEAM;
|
||||
@@ -3270,7 +3270,7 @@ void BtnQuestDebugAllOrSectorNPCToggleCallback( GUI_BUTTON *btn, INT32 reason )
|
||||
DisableButton( guiQuestDebugStartMercTalkingButtonButton );
|
||||
}
|
||||
|
||||
if( IsMercInTheSector( gNpcListBox.sCurSelectedItem ) == -1 )
|
||||
if( IsMercInTheSector( gNpcListBox.sCurSelectedItem ) == NOBODY )
|
||||
DisableButton( guiQuestDebugViewNPCInvButton );
|
||||
|
||||
EnableQDSButtons();
|
||||
@@ -3567,7 +3567,7 @@ void EnableQDSButtons()
|
||||
|
||||
if( gfUseLocalNPCs )
|
||||
{
|
||||
if( IsMercInTheSector( gubCurrentNpcInSector[ gNpcListBox.sCurSelectedItem ] ) != -1 )
|
||||
if( IsMercInTheSector( gubCurrentNpcInSector[ gNpcListBox.sCurSelectedItem ] ) != NOBODY )
|
||||
{
|
||||
EnableButton( guiQuestDebugViewNPCInvButton );
|
||||
EnableButton( guiQuestDebugNPCRefreshButtonButton );
|
||||
@@ -3664,23 +3664,20 @@ void IncrementActiveDropDownBox( INT16 sIncrementValue )
|
||||
}
|
||||
|
||||
|
||||
INT16 IsMercInTheSector( UINT16 usMercID )
|
||||
SoldierID IsMercInTheSector( UINT8 ubMercProfileID )
|
||||
{
|
||||
if( usMercID == -1 )
|
||||
return( FALSE );
|
||||
|
||||
UINT8 cnt;
|
||||
UINT16 cnt;
|
||||
for ( cnt=0; cnt < TOTAL_SOLDIERS; cnt++ )
|
||||
{
|
||||
//if the merc is active
|
||||
if( Menptr[ cnt ].ubProfile == usMercID )
|
||||
if( Menptr[ cnt ].ubProfile == ubMercProfileID )
|
||||
{
|
||||
if( Menptr[ cnt ].bActive )
|
||||
return( Menptr[ cnt ].ubID );
|
||||
}
|
||||
}
|
||||
|
||||
return( -1 );
|
||||
return( NOBODY );
|
||||
}
|
||||
|
||||
|
||||
|
||||
+20
-20
@@ -181,7 +181,7 @@ BOOLEAN CheckNPCWithin( UINT8 ubFirstNPC, UINT8 ubSecondNPC, UINT8 ubMaxDistance
|
||||
return( PythSpacesAway( pFirstNPC->sGridNo, pSecondNPC->sGridNo ) <= ubMaxDistance );
|
||||
}
|
||||
|
||||
BOOLEAN CheckGuyVisible( UINT8 ubNPC, UINT8 ubGuy )
|
||||
BOOLEAN CheckGuyVisible( UINT16 ubNPC, UINT16 ubGuy )
|
||||
{
|
||||
// NB ONLY WORKS IF ON DIFFERENT TEAMS
|
||||
SOLDIERTYPE * pNPC, * pGuy;
|
||||
@@ -299,12 +299,12 @@ UINT32 NumWoundedMercsNearby( UINT8 ubProfileID )
|
||||
return( bNumber );
|
||||
}
|
||||
|
||||
INT8 NumMercsNear( UINT8 ubProfileID, UINT8 ubMaxDist )
|
||||
UINT16 NumMercsNear( UINT8 ubProfileID, UINT8 ubMaxDist )
|
||||
{
|
||||
INT8 bNumber = 0;
|
||||
UINT32 uiLoop;
|
||||
SOLDIERTYPE * pNPC;
|
||||
SOLDIERTYPE * pSoldier;
|
||||
UINT16 bNumber = 0;
|
||||
UINT32 uiLoop;
|
||||
SOLDIERTYPE *pNPC;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
INT32 sGridNo;
|
||||
|
||||
pNPC = FindSoldierByProfileID( ubProfileID, FALSE );
|
||||
@@ -394,7 +394,7 @@ BOOLEAN PCInSameRoom( UINT8 ubProfileID )
|
||||
//DBrot: More Rooms
|
||||
//UINT8 ubRoom;
|
||||
UINT16 usRoom;
|
||||
INT8 bLoop;
|
||||
SoldierID bLoop;
|
||||
SOLDIERTYPE * pSoldier;
|
||||
|
||||
pNPC = FindSoldierByProfileID( ubProfileID, FALSE );
|
||||
@@ -404,9 +404,9 @@ BOOLEAN PCInSameRoom( UINT8 ubProfileID )
|
||||
}
|
||||
usRoom = gusWorldRoomInfo[ pNPC->sGridNo ];
|
||||
|
||||
for ( bLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; bLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; bLoop++ )
|
||||
for ( bLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; bLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++bLoop )
|
||||
{
|
||||
pSoldier = MercPtrs[ bLoop ];
|
||||
pSoldier = bLoop;
|
||||
if ( pSoldier && pSoldier->bActive && pSoldier->bInSector )
|
||||
{
|
||||
if ( gusWorldRoomInfo[ pSoldier->sGridNo ] == usRoom )
|
||||
@@ -536,12 +536,11 @@ BOOLEAN FemalePresent( UINT8 ubProfileID )
|
||||
|
||||
BOOLEAN CheckPlayerHasHead( void )
|
||||
{
|
||||
INT8 bLoop;
|
||||
SOLDIERTYPE * pSoldier;
|
||||
SOLDIERTYPE * pSoldier;
|
||||
|
||||
for ( bLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; bLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; bLoop++ )
|
||||
for ( SoldierID bLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; bLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++bLoop )
|
||||
{
|
||||
pSoldier = MercPtrs[ bLoop ];
|
||||
pSoldier = bLoop;
|
||||
|
||||
if ( pSoldier->bActive && pSoldier->stats.bLife > 0 )
|
||||
{
|
||||
@@ -1714,18 +1713,19 @@ void GiveQuestRewardPoint( INT16 sQuestSectorX, INT16 sQuestsSectorY, INT8 bExpR
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTBLUE, MSG_TESTVERSION, L"QUEST COMPLETED - Adding to merc records and awarding experiences (%d).", (bExpReward * gGameExternalOptions.usAwardSpecialExpForQuests) );
|
||||
|
||||
for ( UINT8 i = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; i <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; i++ )
|
||||
for ( SoldierID id = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; id <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++id )
|
||||
{
|
||||
if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->stats.bLife >= CONSCIOUSNESS && !(MercPtrs[ i ]->flags.uiStatusFlags & SOLDIER_VEHICLE) && MercPtrs[ i ]->ubProfile != NO_PROFILE &&
|
||||
MercPtrs[ i ]->sSectorX == sQuestSectorX && MercPtrs[ i ]->sSectorY == sQuestsSectorY && !MercPtrs[ i ]->flags.fBetweenSectors && MercPtrs[ i ]->bTeam == gbPlayerNum &&
|
||||
MercPtrs[ i ]->bAssignment != IN_TRANSIT && MercPtrs[ i ]->bAssignment != ASSIGNMENT_DEAD && gMercProfiles[ MercPtrs[ i ]->ubProfile ].ubBodyType != 21 ) // != ROBOTNOWEAPON )
|
||||
SOLDIERTYPE *pSoldier = id;
|
||||
if( pSoldier->bActive && pSoldier->stats.bLife >= CONSCIOUSNESS && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) && pSoldier->ubProfile != NO_PROFILE &&
|
||||
pSoldier->sSectorX == sQuestSectorX && pSoldier->sSectorY == sQuestsSectorY && !pSoldier->flags.fBetweenSectors && pSoldier->bTeam == gbPlayerNum &&
|
||||
pSoldier->bAssignment != IN_TRANSIT && pSoldier->bAssignment != ASSIGNMENT_DEAD && gMercProfiles[ pSoldier->ubProfile ].ubBodyType != 21 ) // != ROBOTNOWEAPON )
|
||||
{
|
||||
if ( MercPtrs[ i ]->ubProfile != bException )
|
||||
if ( pSoldier->ubProfile != bException )
|
||||
{
|
||||
gMercProfiles[ MercPtrs[ i ]->ubProfile ].records.ubQuestsHandled++;
|
||||
gMercProfiles[ pSoldier->ubProfile ].records.ubQuestsHandled++;
|
||||
|
||||
if ( bExpReward > 0 && gGameExternalOptions.usAwardSpecialExpForQuests > 0 )
|
||||
StatChange( MercPtrs[ i ], EXPERAMT, (bExpReward * gGameExternalOptions.usAwardSpecialExpForQuests), FALSE );
|
||||
StatChange( pSoldier, EXPERAMT, (bExpReward * gGameExternalOptions.usAwardSpecialExpForQuests), FALSE );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -728,12 +728,12 @@ extern BOOLEAN CheckNPCWounded( UINT8 ubProfileID, BOOLEAN fByPlayerOnly );
|
||||
extern BOOLEAN CheckNPCInOkayHealth( UINT8 ubProfileID );
|
||||
extern BOOLEAN CheckNPCBleeding( UINT8 ubProfileID );
|
||||
extern BOOLEAN CheckNPCWithin( UINT8 ubFirstNPC, UINT8 ubSecondNPC, UINT8 ubMaxDistance );
|
||||
extern BOOLEAN CheckGuyVisible( UINT8 ubNPC, UINT8 ubGuy );
|
||||
extern BOOLEAN CheckGuyVisible( UINT16 ubNPC, UINT16 ubGuy );
|
||||
extern BOOLEAN CheckNPCAt( UINT8 ubNPC, INT32 sGridNo );
|
||||
extern BOOLEAN CheckNPCIsEnemy( UINT8 ubProfileID );
|
||||
extern BOOLEAN CheckIfMercIsNearNPC( SOLDIERTYPE *pMerc, UINT8 ubProfileId );
|
||||
extern UINT32 NumWoundedMercsNearby( UINT8 ubProfileID );
|
||||
extern INT8 NumMercsNear( UINT8 ubProfileID, UINT8 ubMaxDist );
|
||||
extern UINT16 NumMercsNear( UINT8 ubProfileID, UINT8 ubMaxDist );
|
||||
extern BOOLEAN CheckNPCIsEPC( UINT8 ubProfileID );
|
||||
//DBrot: More Rooms
|
||||
//extern BOOLEAN NPCInRoom( UINT8 ubProfileID, UINT8 ubRoomID );
|
||||
|
||||
+15
-15
@@ -2167,9 +2167,9 @@ BOOLEAN SetupMissionAgentBox(UINT16 x, UINT16 y, INT8 index)
|
||||
|
||||
// temp/fixme
|
||||
std::vector<SOLDIERTYPE*> mercs;
|
||||
for (UINT8 i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i)
|
||||
for ( SoldierID i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i)
|
||||
{
|
||||
SOLDIERTYPE* pSoldier = MercPtrs[i];
|
||||
SOLDIERTYPE* pSoldier = i;
|
||||
|
||||
if (pSoldier && pSoldier->bActive
|
||||
&& !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE)
|
||||
@@ -2812,9 +2812,9 @@ void PrepareMission(INT8 index)
|
||||
|
||||
// confirmation popup
|
||||
std::vector<SOLDIERTYPE*> mercs;
|
||||
for (UINT8 i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i)
|
||||
for ( SoldierID i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i)
|
||||
{
|
||||
SOLDIERTYPE* pSoldier = MercPtrs[i];
|
||||
SOLDIERTYPE* pSoldier = i;
|
||||
|
||||
if (pSoldier && pSoldier->bActive
|
||||
&& !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE)
|
||||
@@ -2977,9 +2977,9 @@ void PrepareMission(INT8 index)
|
||||
|
||||
if (!evt.sentGenericRebelAgent)
|
||||
{
|
||||
for (UINT8 i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i)
|
||||
for ( SoldierID i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i)
|
||||
{
|
||||
SOLDIERTYPE* pSoldier = MercPtrs[i];
|
||||
SOLDIERTYPE* pSoldier = i;
|
||||
if (pSoldier->ubProfile == evt.mercProfileId)
|
||||
{
|
||||
TakeSoldierOutOfVehicle(pSoldier);
|
||||
@@ -3171,7 +3171,7 @@ INT32 GetMiningPolicyBonus(INT16 townId)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void GetBonusMilitia(INT16 sx, INT16 sy, UINT8& green, UINT8& regular, UINT8& elite, BOOLEAN createGroup)
|
||||
void GetBonusMilitia(INT16 sx, INT16 sy, UINT16& green, UINT16& regular, UINT16& elite, BOOLEAN createGroup)
|
||||
{
|
||||
if (!gGameExternalOptions.fRebelCommandEnabled)
|
||||
return;
|
||||
@@ -4882,9 +4882,9 @@ void HandleStrategicEvent(const UINT32 eventParam)
|
||||
|
||||
// make sure the merc's still on our team
|
||||
BOOLEAN foundMerc = FALSE;
|
||||
for (UINT8 i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i)
|
||||
for ( SoldierID i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i)
|
||||
{
|
||||
const SOLDIERTYPE* pSoldier = MercPtrs[i];
|
||||
const SOLDIERTYPE* pSoldier = i;
|
||||
|
||||
if (pSoldier->ubProfile == evt1.mercProfileId && pSoldier->bActive)
|
||||
{
|
||||
@@ -4953,9 +4953,9 @@ void HandleStrategicEvent(const UINT32 eventParam)
|
||||
|
||||
if (!evt1.sentGenericRebelAgent)
|
||||
{
|
||||
for (UINT8 i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i)
|
||||
for ( SoldierID i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i)
|
||||
{
|
||||
SOLDIERTYPE* pSoldier = MercPtrs[i];
|
||||
SOLDIERTYPE* pSoldier = i;
|
||||
if (pSoldier->ubProfile == evt1.mercProfileId)
|
||||
{
|
||||
if (mission == RCAM_FORGE_TRANSPORT_ORDERS)
|
||||
@@ -4980,9 +4980,9 @@ void HandleStrategicEvent(const UINT32 eventParam)
|
||||
{
|
||||
if (!evt1.sentGenericRebelAgent && foundMerc)
|
||||
{
|
||||
for (UINT8 i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i)
|
||||
for ( SoldierID i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i)
|
||||
{
|
||||
SOLDIERTYPE* pSoldier = MercPtrs[i];
|
||||
SOLDIERTYPE* pSoldier = i;
|
||||
if (pSoldier->ubProfile == evt1.mercProfileId)
|
||||
{
|
||||
// mission failed! we tried, give some pity exp
|
||||
@@ -5002,9 +5002,9 @@ void HandleStrategicEvent(const UINT32 eventParam)
|
||||
|
||||
if (!evt1.sentGenericRebelAgent && foundMerc)
|
||||
{
|
||||
for (UINT8 i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i)
|
||||
for ( SoldierID i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i)
|
||||
{
|
||||
SOLDIERTYPE* pSoldier = MercPtrs[i];
|
||||
SOLDIERTYPE* pSoldier = i;
|
||||
if (pSoldier->ubProfile == evt1.mercProfileId)
|
||||
{
|
||||
// merc ready for reassignment
|
||||
|
||||
@@ -188,7 +188,7 @@ void ApplyMilitiaBonuses(SOLDIERTYPE* pMilitia);
|
||||
UINT8 GetApproximateEnemyLocationResolutionIndex();
|
||||
FLOAT GetAssignmentBonus(INT16 x, INT16 y);
|
||||
INT32 GetMiningPolicyBonus(INT16 townId);
|
||||
void GetBonusMilitia(INT16 x, INT16 y, UINT8& green, UINT8& regular, UINT8& elite, BOOLEAN createGroup);
|
||||
void GetBonusMilitia(INT16 x, INT16 y, UINT16& green, UINT16& regular, UINT16& elite, BOOLEAN createGroup);
|
||||
INT16 GetFortificationsBonus(UINT8 sector);
|
||||
FLOAT GetHarriersSpeedPenalty(UINT8 sector);
|
||||
FLOAT GetLoyaltyGainModifier();
|
||||
|
||||
@@ -29,9 +29,9 @@
|
||||
UINT8 gubReinforcementMinEnemyStaticGroupSize = 12;
|
||||
UINT32 guiMilitiaReinforceTurn = 0, guiMilitiaArrived = 0;//dnl ch68 090913
|
||||
|
||||
void GetNumberOfEnemiesInFiveSectors( INT16 sSectorX, INT16 sSectorY, UINT8 *pubNumAdmins, UINT8 *pubNumTroops, UINT8 *pubNumElites, UINT8 *pubNumRobots, UINT8 *pubNumTanks, UINT8 *pubNumJeeps )
|
||||
void GetNumberOfEnemiesInFiveSectors( INT16 sSectorX, INT16 sSectorY, UINT16 *pubNumAdmins, UINT16 *pubNumTroops, UINT16 *pubNumElites, UINT16 *pubNumRobots, UINT16 *pubNumTanks, UINT16 *pubNumJeeps )
|
||||
{
|
||||
UINT8 ubNumAdmins, ubNumTroops, ubNumElites, ubNumRobots, ubNumTanks, ubNumJeeps;
|
||||
UINT16 ubNumAdmins, ubNumTroops, ubNumElites, ubNumRobots, ubNumTanks, ubNumJeeps;
|
||||
UINT16 pusMoveDir[4][3]; //first column in this matrix is number of sector, except for 4th row
|
||||
UINT8 ubDirNumber, ubIndex;
|
||||
|
||||
@@ -156,9 +156,9 @@ void ActivateTurncoatsForAutoResolve( INT16 sSectorX, INT16 sSectorY )
|
||||
}
|
||||
}
|
||||
|
||||
UINT8 NumEnemiesInFiveSectors( INT16 sMapX, INT16 sMapY )
|
||||
UINT16 NumEnemiesInFiveSectors( INT16 sMapX, INT16 sMapY )
|
||||
{
|
||||
UINT8 ubNumAdmins, ubNumTroops, ubNumElites, ubNumRobots, ubNumTanks, ubNumJeeps;
|
||||
UINT16 ubNumAdmins, ubNumTroops, ubNumElites, ubNumRobots, ubNumTanks, ubNumJeeps;
|
||||
|
||||
GetNumberOfEnemiesInFiveSectors( sMapX, sMapY, &ubNumAdmins, &ubNumTroops, &ubNumElites, &ubNumRobots, &ubNumTanks, &ubNumJeeps );
|
||||
|
||||
|
||||
@@ -2,16 +2,16 @@
|
||||
#define __REINFORCEMENT_H__
|
||||
|
||||
//For Autoresolve (mostly)
|
||||
void GetNumberOfEnemiesInFiveSectors( INT16 sSectorX, INT16 sSectorY, UINT8 *pubNumAdmins, UINT8 *pubNumTroops, UINT8 *pubNumElites, UINT8 *pubNumRobots, UINT8 *pubNumTanks, UINT8 *pubNumJeeps );
|
||||
void GetNumberOfEnemiesInFiveSectors( INT16 sSectorX, INT16 sSectorY, UINT16 *pubNumAdmins, UINT16 *pubNumTroops, UINT16 *pubNumElites, UINT16 *pubNumRobots, UINT16 *pubNumTanks, UINT16 *pubNumJeeps );
|
||||
void ActivateTurncoatsForAutoResolve( INT16 sSectorX, INT16 sSectorY );
|
||||
BOOLEAN IsGroupInARightSectorToReinforce( GROUP *pGroup, INT16 sSectorX, INT16 sSectorY );
|
||||
UINT8 GetAdjacentSectors( UINT8 pSectors[4], INT16 sSectorX, INT16 sSectorY );
|
||||
UINT16 CountAllMilitiaInFiveSectors(INT16 sMapX, INT16 sMapY);
|
||||
UINT8 NumEnemiesInFiveSectors( INT16 sMapX, INT16 sMapY );
|
||||
UINT16 NumEnemiesInFiveSectors( INT16 sMapX, INT16 sMapY );
|
||||
|
||||
//For Tactical
|
||||
UINT8 DoReinforcementAsPendingNonPlayer( INT16 sMapX, INT16 sMapY, UINT8 usTeam );
|
||||
void AddPossiblePendingMilitiaToBattle();
|
||||
GROUP* GetNonPlayerGroupInSectorForReinforcement( INT16 sMapX, INT16 sMapY, UINT8 usTeam );
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
+16
-16
@@ -190,7 +190,7 @@ void ProcessTacticalSchedule( UINT8 ubScheduleID )
|
||||
}
|
||||
|
||||
//Validate the existance of the soldier.
|
||||
pSoldier = MercPtrs[ pSchedule->ubSoldierID ];
|
||||
pSoldier = pSchedule->ubSoldierID;
|
||||
if ( pSoldier->stats.bLife < OKLIFE )
|
||||
{
|
||||
// dead or dying!
|
||||
@@ -331,7 +331,7 @@ void PrepareSchedulesForEditorEntry()
|
||||
prev->next = curr->next;
|
||||
else
|
||||
gpScheduleList = gpScheduleList->next;
|
||||
MercPtrs[ curr->ubSoldierID ]->ubScheduleID = 0;
|
||||
curr->ubSoldierID->ubScheduleID = 0;
|
||||
temp = curr;
|
||||
curr = curr->next;
|
||||
MemFree( temp );
|
||||
@@ -483,7 +483,7 @@ SCHEDULENODE& SCHEDULENODE::operator=(const _OLD_SCHEDULENODE& src)
|
||||
TranslateArrayFields(usData2, src.usData2, OLD_MAX_SCHEDULE_ACTIONS, INT16_INT32);
|
||||
TranslateArrayFields(ubAction, src.ubAction, OLD_MAX_SCHEDULE_ACTIONS, UINT8_UINT8);
|
||||
ubScheduleID = src.ubScheduleID;
|
||||
ubSoldierID = src.ubSoldierID;
|
||||
ubSoldierID = static_cast<UINT16>( src.ubSoldierID );
|
||||
usFlags = src.usFlags;
|
||||
}
|
||||
return(*this);
|
||||
@@ -653,11 +653,11 @@ BOOLEAN SortSchedule( SCHEDULENODE *pSchedule )
|
||||
|
||||
BOOLEAN BumpAnyExistingMerc( INT32 sGridNo )
|
||||
{
|
||||
UINT8 ubID;
|
||||
SOLDIERTYPE * pSoldier; // NB this is the person already in the location,
|
||||
INT32 sNewGridNo;
|
||||
UINT8 ubDir;
|
||||
INT16 sCellX, sCellY;
|
||||
SoldierID ubID;
|
||||
SOLDIERTYPE *pSoldier; // NB this is the person already in the location,
|
||||
INT32 sNewGridNo;
|
||||
UINT8 ubDir;
|
||||
INT16 sCellX, sCellY;
|
||||
|
||||
// this is for autoprocessing schedules...
|
||||
// there could be someone in the destination location, in which case
|
||||
@@ -675,7 +675,7 @@ BOOLEAN BumpAnyExistingMerc( INT32 sGridNo )
|
||||
return( TRUE );
|
||||
}
|
||||
|
||||
pSoldier = MercPtrs[ ubID ];
|
||||
pSoldier = ubID;
|
||||
|
||||
// what if the existing merc is prone?
|
||||
sNewGridNo = FindGridNoFromSweetSpotWithStructDataFromSoldier( pSoldier, STANDING, 5, &ubDir, 1, pSoldier );
|
||||
@@ -707,7 +707,7 @@ void AutoProcessSchedule( SCHEDULENODE *pSchedule, INT32 index )
|
||||
return;
|
||||
}
|
||||
|
||||
pSoldier = MercPtrs[ pSchedule->ubSoldierID ];
|
||||
pSoldier = pSchedule->ubSoldierID;
|
||||
|
||||
if (pSoldier->ubID == 0)
|
||||
{
|
||||
@@ -1381,16 +1381,16 @@ void ReplaceSleepSpot( SCHEDULENODE * pSchedule, UINT16 usNewSpot )
|
||||
|
||||
void SecureSleepSpot( SOLDIERTYPE * pSoldier, UINT32 usSleepSpot )
|
||||
{
|
||||
SOLDIERTYPE * pSoldier2;
|
||||
UINT32 usSleepSpot2;
|
||||
UINT32 uiLoop;
|
||||
SCHEDULENODE * pSchedule;
|
||||
UINT8 ubDirection;
|
||||
SOLDIERTYPE *pSoldier2;
|
||||
UINT32 usSleepSpot2;
|
||||
UINT16 uiLoop;
|
||||
SCHEDULENODE *pSchedule;
|
||||
UINT8 ubDirection;
|
||||
|
||||
// start after this soldier's ID so we don't duplicate work done in previous passes
|
||||
for ( uiLoop = pSoldier->ubID + 1; uiLoop <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; uiLoop++ )
|
||||
{
|
||||
pSoldier2 = MercPtrs[ uiLoop ];
|
||||
pSoldier2 = MercPtrs[uiLoop];
|
||||
if ( pSoldier2->bActive && pSoldier2->bInSector && pSoldier2->ubScheduleID != 0 )
|
||||
{
|
||||
pSchedule = GetSchedule( pSoldier2->ubScheduleID );
|
||||
|
||||
@@ -63,7 +63,7 @@ public:
|
||||
UINT32 usData2[MAX_SCHEDULE_ACTIONS]; // Secondary information, not used by most actions
|
||||
UINT8 ubAction[MAX_SCHEDULE_ACTIONS];
|
||||
UINT8 ubScheduleID;
|
||||
UINT8 ubSoldierID;
|
||||
SoldierID ubSoldierID;
|
||||
UINT16 usFlags;
|
||||
public:
|
||||
SCHEDULENODE& operator=(const _OLD_SCHEDULENODE& src);
|
||||
|
||||
+50
-52
@@ -470,9 +470,9 @@ BOOLEAN SendReinforcementsForPatrol( INT32 iPatrolID, GROUP **pOptionalGroup );
|
||||
|
||||
void ClearPreviousAIGroupAssignment( GROUP *pGroup );
|
||||
|
||||
void CalcNumTroopsBasedOnComposition( UINT8 *pubNumTroops, UINT8 *pubNumElites, UINT8 ubTotal, INT32 iCompositionID );
|
||||
void CalcNumTroopsBasedOnComposition( UINT16 *pubNumTroops, UINT16 *pubNumElites, UINT16 ubTotal, INT32 iCompositionID );
|
||||
void ConvertGroupTroopsToComposition( GROUP *pGroup, INT32 iCompositionID );
|
||||
void RemoveSoldiersFromGarrisonBasedOnComposition( INT32 iGarrisonID, UINT8 ubSize );
|
||||
void RemoveSoldiersFromGarrisonBasedOnComposition( INT32 iGarrisonID, UINT16 ubSize );
|
||||
|
||||
//If there are any enemy groups that will be moving through this sector due, they will have to repath which
|
||||
//will cause them to avoid the sector. Returns the number of redirected groups.
|
||||
@@ -912,7 +912,6 @@ void RemovePlayersFromAllMismatchGroups( SOLDIERTYPE *pSoldier )
|
||||
#ifdef JA2BETAVERSION
|
||||
void ValidatePlayersAreInOneGroupOnly()
|
||||
{
|
||||
INT32 i;
|
||||
INT32 iGroups;
|
||||
INT32 iMismatches;
|
||||
INT32 iNumErrors;
|
||||
@@ -923,10 +922,10 @@ void ValidatePlayersAreInOneGroupOnly()
|
||||
UINT8 ubGroupID;
|
||||
//Go through each merc slot in the player team
|
||||
iNumErrors = 0;
|
||||
for( i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; i++ )
|
||||
for( SoldierID i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++i )
|
||||
{ //check to see if the merc has a group ID
|
||||
|
||||
pSoldier = MercPtrs[ i ];
|
||||
pSoldier = i;
|
||||
|
||||
if( !pSoldier || !pSoldier->bActive || !pSoldier->stats.bLife || !pSoldier->ubGroupID )
|
||||
{ //non-existant, dead, or in no group (don't care, skip to next merc)
|
||||
@@ -1151,8 +1150,8 @@ void InitStrategicAI()
|
||||
INT32 iStartPop, iDesiredPop, iPriority;
|
||||
SECTORINFO *pSector = NULL;
|
||||
GROUP *pGroup;
|
||||
UINT8 ubNumTroops;
|
||||
UINT8 ubNumRobots, ubNumTanks, ubNumJeeps;
|
||||
UINT16 ubNumTroops;
|
||||
UINT16 ubNumRobots, ubNumTanks, ubNumJeeps;
|
||||
INT32 iPercentElitesBonus;
|
||||
INT32 iMaxEnemyGroupSize = gGameExternalOptions.iMaxEnemyGroupSize;
|
||||
DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Strategic3");
|
||||
@@ -1538,9 +1537,9 @@ void InitStrategicAI()
|
||||
//based on the difficulty settings in the above patrol table.
|
||||
//if( gPatrolGroup[ i ].ubUNUSEDStartIfDifficulty <= gGameOptions.ubDifficultyLevel )
|
||||
{
|
||||
UINT8 troopCount = (UINT8)(gPatrolGroup[ i ].bSize + Random( 3 ) - 1);
|
||||
troopCount = (UINT8)max( gubMinEnemyGroupSize, min( iMaxEnemyGroupSize, troopCount) );
|
||||
UINT8 ubNumElites;
|
||||
UINT16 troopCount = (UINT16)(gPatrolGroup[ i ].bSize + Random( 3 ) - 1);
|
||||
troopCount = (UINT16)max( gubMinEnemyGroupSize, min( iMaxEnemyGroupSize, troopCount) );
|
||||
UINT16 ubNumElites;
|
||||
InitializeGroup(GROUP_TYPE_PATROL, troopCount, ubNumTroops, ubNumElites, ubNumRobots, ubNumJeeps, ubNumTanks, Random(10) < gGameOptions.ubDifficultyLevel && i != 3 && i != 4);
|
||||
|
||||
//Note on adding patrol groups...
|
||||
@@ -2273,12 +2272,12 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Strategic5");
|
||||
if( gGarrisonGroup[ i ].ubSectorID != SECTOR( gModSettings.ubSAISpawnSectorX, gModSettings.ubSAISpawnSectorY ) )
|
||||
{
|
||||
EliminateSurplusTroopsForGarrison( pGroup, pSector );
|
||||
pSector->ubNumAdmins = (UINT8)(pSector->ubNumAdmins + pGroup->pEnemyGroup->ubNumAdmins);
|
||||
pSector->ubNumTroops = (UINT8)(pSector->ubNumTroops + pGroup->pEnemyGroup->ubNumTroops);
|
||||
pSector->ubNumElites = (UINT8)(pSector->ubNumElites + pGroup->pEnemyGroup->ubNumElites);
|
||||
pSector->ubNumRobots = (UINT8)(pSector->ubNumRobots + pGroup->pEnemyGroup->ubNumRobots);
|
||||
pSector->ubNumTanks = (UINT8)(pSector->ubNumTanks + pGroup->pEnemyGroup->ubNumTanks);
|
||||
pSector->ubNumJeeps = (UINT8)(pSector->ubNumJeeps + pGroup->pEnemyGroup->ubNumJeeps);
|
||||
pSector->ubNumAdmins = (pSector->ubNumAdmins + pGroup->pEnemyGroup->ubNumAdmins);
|
||||
pSector->ubNumTroops = (pSector->ubNumTroops + pGroup->pEnemyGroup->ubNumTroops);
|
||||
pSector->ubNumElites = (pSector->ubNumElites + pGroup->pEnemyGroup->ubNumElites);
|
||||
pSector->ubNumRobots = (pSector->ubNumRobots + pGroup->pEnemyGroup->ubNumRobots);
|
||||
pSector->ubNumTanks = (pSector->ubNumTanks + pGroup->pEnemyGroup->ubNumTanks);
|
||||
pSector->ubNumJeeps = (pSector->ubNumJeeps + pGroup->pEnemyGroup->ubNumJeeps);
|
||||
|
||||
#ifdef JA2BETAVERSION
|
||||
LogStrategicEvent( "%d reinforcements have arrived to garrison sector %c%d",
|
||||
@@ -2361,7 +2360,7 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Strategic5");
|
||||
pPatrolGroup->pEnemyGroup->ubNumRobots += pGroup->pEnemyGroup->ubNumRobots;
|
||||
pPatrolGroup->pEnemyGroup->ubNumTanks += pGroup->pEnemyGroup->ubNumTanks;
|
||||
pPatrolGroup->pEnemyGroup->ubNumJeeps += pGroup->pEnemyGroup->ubNumJeeps;
|
||||
pPatrolGroup->ubGroupSize += (UINT8)(pGroup->pEnemyGroup->ubNumTroops + pGroup->pEnemyGroup->ubNumElites + pGroup->pEnemyGroup->ubNumAdmins
|
||||
pPatrolGroup->ubGroupSize += (pGroup->pEnemyGroup->ubNumTroops + pGroup->pEnemyGroup->ubNumElites + pGroup->pEnemyGroup->ubNumAdmins
|
||||
+ pGroup->pEnemyGroup->ubNumRobots + pGroup->pEnemyGroup->ubNumTanks + pGroup->pEnemyGroup->ubNumJeeps);
|
||||
#ifdef JA2BETAVERSION
|
||||
LogStrategicEvent( "%d reinforcements have joined patrol group at sector %c%d (new size: %d)",
|
||||
@@ -2714,7 +2713,7 @@ void CheckEnemyControlledSector( UINT8 ubSectorID )
|
||||
{
|
||||
if( pGroup->pEnemyGroup->ubPendingReinforcements > 4 )
|
||||
{
|
||||
UINT8 ubNum = (UINT8)(3 + Random( 3 ));
|
||||
UINT16 ubNum = (UINT16)(3 + Random( 3 ));
|
||||
pGroup->pEnemyGroup->ubNumTroops += ubNum;
|
||||
pGroup->ubGroupSize += ubNum;
|
||||
pGroup->pEnemyGroup->ubPendingReinforcements -= ubNum;
|
||||
@@ -3080,7 +3079,7 @@ BOOLEAN SendReinforcementsForGarrison( INT32 iDstGarrisonID, UINT16 usDefencePoi
|
||||
GROUP *pGroup;
|
||||
UINT8 ubSrcSectorX, ubSrcSectorY, ubDstSectorX, ubDstSectorY;
|
||||
UINT8 ubNumExtraReinforcements;
|
||||
UINT8 ubGroupSize;
|
||||
UINT16 ubGroupSize;
|
||||
BOOLEAN fLimitMaxTroopsAllowable = FALSE;
|
||||
|
||||
Ensure_RepairedGarrisonGroup( &gGarrisonGroup, &giGarrisonArraySize ); /* added NULL fix, 2007-03-03, Sgt. Kolja */
|
||||
@@ -3207,7 +3206,7 @@ BOOLEAN SendReinforcementsForGarrison( INT32 iDstGarrisonID, UINT16 usDefencePoi
|
||||
pGroup->ubMoveType = ONE_WAY;
|
||||
gGarrisonGroup[ iDstGarrisonID ].ubPendingGroupID = pGroup->ubGroupID;
|
||||
|
||||
ubGroupSize = (UINT8)(pGroup->pEnemyGroup->ubNumTroops + pGroup->pEnemyGroup->ubNumElites + pGroup->pEnemyGroup->ubNumAdmins + pGroup->pEnemyGroup->ubNumRobots + pGroup->pEnemyGroup->ubNumTanks + pGroup->pEnemyGroup->ubNumJeeps);
|
||||
ubGroupSize = (UINT16)(pGroup->pEnemyGroup->ubNumTroops + pGroup->pEnemyGroup->ubNumElites + pGroup->pEnemyGroup->ubNumAdmins + pGroup->pEnemyGroup->ubNumRobots + pGroup->pEnemyGroup->ubNumTanks + pGroup->pEnemyGroup->ubNumJeeps);
|
||||
|
||||
if( ubNumExtraReinforcements )
|
||||
{
|
||||
@@ -3297,7 +3296,7 @@ BOOLEAN SendReinforcementsForGarrison( INT32 iDstGarrisonID, UINT16 usDefencePoi
|
||||
pGroup->ubOriginalSector = (UINT8)SECTOR( ubDstSectorX, ubDstSectorY );
|
||||
pGroup->ubMoveType = ONE_WAY;
|
||||
gGarrisonGroup[ iDstGarrisonID ].ubPendingGroupID = pGroup->ubGroupID;
|
||||
ubGroupSize = (UINT8)(pGroup->pEnemyGroup->ubNumTroops + pGroup->pEnemyGroup->ubNumElites + pGroup->pEnemyGroup->ubNumAdmins + pGroup->pEnemyGroup->ubNumRobots + pGroup->pEnemyGroup->ubNumTanks + pGroup->pEnemyGroup->ubNumJeeps);
|
||||
ubGroupSize = (UINT16)(pGroup->pEnemyGroup->ubNumTroops + pGroup->pEnemyGroup->ubNumElites + pGroup->pEnemyGroup->ubNumAdmins + pGroup->pEnemyGroup->ubNumRobots + pGroup->pEnemyGroup->ubNumTanks + pGroup->pEnemyGroup->ubNumJeeps);
|
||||
|
||||
if( ubNumExtraReinforcements )
|
||||
{
|
||||
@@ -4143,13 +4142,12 @@ BOOLEAN LoadStrategicAI( HWFILE hFile )
|
||||
}
|
||||
else
|
||||
{ //We are in the basement sector, relocate queen to proper position.
|
||||
INT32 i;
|
||||
for( i = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; i <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; i++ )
|
||||
for( SoldierID i = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; i <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ++i )
|
||||
{
|
||||
if( MercPtrs[ i ]->ubProfile == QUEEN )
|
||||
if( i->ubProfile == QUEEN )
|
||||
{ //Found queen, relocate her to 16866
|
||||
BumpAnyExistingMerc( 16866 );
|
||||
TeleportSoldier( MercPtrs[ i ], 16866, TRUE );
|
||||
TeleportSoldier( i, 16866, TRUE );
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -4546,15 +4544,15 @@ void ExecuteStrategicAIAction( UINT16 usActionCode, INT16 sSectorX, INT16 sSecto
|
||||
UINT8 stagesector0, stagesector1, stagesector2, stagesector3;
|
||||
UINT8 assaultsector0, assaultsector1, assaultsector2, assaultsector3;
|
||||
unsigned ubNumSoldiers;
|
||||
UINT8 ubNumRobots = 0;
|
||||
UINT8 ubNumTanks = 0;
|
||||
UINT8 ubNumJeeps = 0;
|
||||
UINT16 ubNumRobots = 0;
|
||||
UINT16 ubNumTanks = 0;
|
||||
UINT16 ubNumJeeps = 0;
|
||||
UINT32 totalusedsoldiers = 0;
|
||||
UINT8 grouptroops[4] = {0,0,0,0};
|
||||
UINT8 groupelites[4] = {0,0,0,0};
|
||||
UINT8 grouprobots[4] = {0,0,0,0};
|
||||
UINT8 grouptanks[4] = {0,0,0,0};
|
||||
UINT8 groupjeeps[4] = {0, 0, 0, 0};
|
||||
UINT16 grouptroops[4] = {0,0,0,0};
|
||||
UINT16 groupelites[4] = {0,0,0,0};
|
||||
UINT16 grouprobots[4] = {0,0,0,0};
|
||||
UINT16 grouptanks[4] = {0,0,0,0};
|
||||
UINT16 groupjeeps[4] = {0, 0, 0, 0};
|
||||
|
||||
UINT32 difficultyMod;
|
||||
switch (gGameOptions.ubDifficultyLevel)
|
||||
@@ -5247,12 +5245,12 @@ void ExecuteStrategicAIAction( UINT16 usActionCode, INT16 sSectorX, INT16 sSecto
|
||||
soldiersThisSquad = (unsigned)gGameExternalOptions.iMaxEnemyGroupSize;
|
||||
}
|
||||
ubNumSoldiers -= soldiersThisSquad;
|
||||
UINT8 adminsThisSquad = 0;
|
||||
UINT8 troopsThisSquad = 0;
|
||||
UINT8 elitesThisSquad = 0;
|
||||
UINT8 robotsThisSquad = 0;
|
||||
UINT8 tanksThisSquad = 0;
|
||||
UINT8 jeepsThisSquad = 0;
|
||||
UINT16 adminsThisSquad = 0;
|
||||
UINT16 troopsThisSquad = 0;
|
||||
UINT16 elitesThisSquad = 0;
|
||||
UINT16 robotsThisSquad = 0;
|
||||
UINT16 tanksThisSquad = 0;
|
||||
UINT16 jeepsThisSquad = 0;
|
||||
// this is an attack group, but set it to patrol since we'll set the admin/regular/elite composition by hand here
|
||||
InitializeGroup(GROUP_TYPE_PATROL, soldiersThisSquad, troopsThisSquad, elitesThisSquad, robotsThisSquad, jeepsThisSquad, tanksThisSquad, Random(10 * 100) < difficultyMod * direness);
|
||||
if (direness < 25) {
|
||||
@@ -5295,7 +5293,7 @@ void ExecuteStrategicAIAction( UINT16 usActionCode, INT16 sSectorX, INT16 sSecto
|
||||
// Note: 1st optional parm is a count of troops to send
|
||||
// 2nd optional parm is the composition of troops
|
||||
if (option1 > 0 && option1 < 256) {
|
||||
ubNumSoldiers = (UINT8)(option1);
|
||||
ubNumSoldiers = option1;
|
||||
} else {
|
||||
// Something is goofy, just send a default sized squad
|
||||
ubNumSoldiers = gubMinEnemyGroupSize;
|
||||
@@ -5387,7 +5385,7 @@ void ExecuteStrategicAIAction( UINT16 usActionCode, INT16 sSectorX, INT16 sSecto
|
||||
if ( !gfUnlimitedTroops )
|
||||
giReinforcementPool -= ubNumSoldiers;
|
||||
|
||||
UINT8 ubNumTroops, ubNumElites;
|
||||
UINT16 ubNumTroops, ubNumElites;
|
||||
// set the type to patrol as we're manually tuning the group composition here (100% elites + ASD upgrades)
|
||||
InitializeGroup(GROUP_TYPE_PATROL, ubNumSoldiers, ubNumTroops, ubNumElites, ubNumRobots, ubNumJeeps, ubNumTanks, Random(10*100) < difficultyMod * HighestPlayerProgressPercentage());
|
||||
|
||||
@@ -6774,7 +6772,7 @@ void ClearPreviousAIGroupAssignment( GROUP *pGroup )
|
||||
}
|
||||
}
|
||||
|
||||
void CalcNumTroopsBasedOnComposition( UINT8 *pubNumTroops, UINT8 *pubNumElites, UINT8 ubTotal, INT32 iCompositionID )
|
||||
void CalcNumTroopsBasedOnComposition( UINT16 *pubNumTroops, UINT16 *pubNumElites, UINT16 ubTotal, INT32 iCompositionID )
|
||||
{
|
||||
*pubNumTroops = gArmyComp[ iCompositionID ].bTroopPercentage * ubTotal / 100;
|
||||
*pubNumElites = gArmyComp[ iCompositionID ].bElitePercentage * ubTotal / 100;
|
||||
@@ -6818,19 +6816,19 @@ void ConvertGroupTroopsToComposition( GROUP *pGroup, INT32 iCompositionID )
|
||||
ValidateLargeGroup( pGroup );
|
||||
}
|
||||
|
||||
void RemoveSoldiersFromGarrisonBasedOnComposition( INT32 iGarrisonID, UINT8 ubSize )
|
||||
void RemoveSoldiersFromGarrisonBasedOnComposition( INT32 iGarrisonID, UINT16 ubSize )
|
||||
{
|
||||
SECTORINFO *pSector;
|
||||
INT32 iCompositionID;
|
||||
UINT8 ubNumTroops, ubNumElites;
|
||||
UINT16 ubNumTroops, ubNumElites;
|
||||
|
||||
//debug stuff
|
||||
UINT8 ubOrigSectorAdmins;
|
||||
UINT8 ubOrigSectorTroops;
|
||||
UINT8 ubOrigSectorElites;
|
||||
UINT8 ubOrigNumElites;
|
||||
UINT8 ubOrigNumTroops;
|
||||
UINT8 ubOrigSize;
|
||||
UINT16 ubOrigSectorAdmins;
|
||||
UINT16 ubOrigSectorTroops;
|
||||
UINT16 ubOrigSectorElites;
|
||||
UINT16 ubOrigNumElites;
|
||||
UINT16 ubOrigNumTroops;
|
||||
UINT16 ubOrigSize;
|
||||
|
||||
Ensure_RepairedGarrisonGroup( &gGarrisonGroup, &giGarrisonArraySize ); /* added NULL fix, 2007-03-03, Sgt. Kolja */
|
||||
iCompositionID = gGarrisonGroup[ iGarrisonID ].ubComposition;
|
||||
@@ -7107,12 +7105,12 @@ void ASDInitializePatrolGroup(GROUP *pGroup)
|
||||
}
|
||||
}
|
||||
|
||||
void InitializeGroup( const GROUP_TYPE groupType, const UINT8 groupSize, ENEMYGROUP& enemyGroup, const BOOLEAN asdUpgrade )
|
||||
void InitializeGroup( const GROUP_TYPE groupType, const UINT16 groupSize, ENEMYGROUP& enemyGroup, const BOOLEAN asdUpgrade )
|
||||
{
|
||||
InitializeGroup( groupType, groupSize, enemyGroup.ubNumTroops, enemyGroup.ubNumElites, enemyGroup.ubNumRobots, enemyGroup.ubNumJeeps, enemyGroup.ubNumTanks, asdUpgrade );
|
||||
}
|
||||
|
||||
void InitializeGroup( const GROUP_TYPE groupType, const UINT8 groupSize, UINT8 &troopCount, UINT8 &eliteCount, UINT8 &robotCount, UINT8 &jeepCount, UINT8 &tankCount, const BOOLEAN asdUpgrade )
|
||||
void InitializeGroup( const GROUP_TYPE groupType, const UINT16 groupSize, UINT16 &troopCount, UINT16 &eliteCount, UINT16 &robotCount, UINT16 &jeepCount, UINT16 &tankCount, const BOOLEAN asdUpgrade )
|
||||
{
|
||||
troopCount = groupSize;
|
||||
eliteCount = 0;
|
||||
|
||||
@@ -84,8 +84,8 @@ enum GROUP_TYPE
|
||||
};
|
||||
|
||||
void ASDInitializePatrolGroup(GROUP *pGroup);
|
||||
void InitializeGroup(const GROUP_TYPE groupType, const UINT8 groupSize, ENEMYGROUP& enemyGroup, const BOOLEAN asdUpgrade);
|
||||
void InitializeGroup(const GROUP_TYPE groupType, const UINT8 groupSize, UINT8 &troopCount, UINT8 &eliteCount, UINT8 &robotCount, UINT8 &jeepCount, UINT8 &tankCount, const BOOLEAN asdUpgrade);
|
||||
void InitializeGroup(const GROUP_TYPE groupType, const UINT16 groupSize, ENEMYGROUP& enemyGroup, const BOOLEAN asdUpgrade);
|
||||
void InitializeGroup(const GROUP_TYPE groupType, const UINT16 groupSize, UINT16 &troopCount, UINT16 &eliteCount, UINT16 &robotCount, UINT16 &jeepCount, UINT16 &tankCount, const BOOLEAN asdUpgrade);
|
||||
|
||||
extern BOOLEAN gfDisplayStrategicAILogs;
|
||||
extern BOOLEAN gfFirstBattleMeanwhileScenePending;
|
||||
@@ -181,4 +181,4 @@ typedef struct GARRISON_GROUP
|
||||
#define REGULAR_MILITIA_POINTS_MODIFIER 2
|
||||
#define ELITE_MILITIA_POINTS_MODIFIER 3
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -51,7 +51,7 @@ UINT32 guiPabloExtraDaysBribed = 0;
|
||||
|
||||
UINT8 gubCambriaMedicalObjects;
|
||||
|
||||
extern INT8 NumMercsNear( UINT8 ubProfileID, UINT8 ubMaxDist );
|
||||
extern UINT16 NumMercsNear( UINT8 ubProfileID, UINT8 ubMaxDist );
|
||||
|
||||
extern SECTOR_EXT_DATA SectorExternalData[256][4];
|
||||
|
||||
|
||||
@@ -85,7 +85,7 @@ void StrategicHandlePlayerTeamMercDeath( SOLDIERTYPE *pSoldier )
|
||||
//add to the history log the fact that the merc died and the circumstances
|
||||
if( pSoldier->ubAttackerID != NOBODY )
|
||||
{
|
||||
pKiller = MercPtrs[ pSoldier->ubAttackerID ];
|
||||
pKiller = pSoldier->ubAttackerID;
|
||||
}
|
||||
|
||||
// CJC Nov 11, 2002
|
||||
@@ -141,7 +141,7 @@ void StrategicHandlePlayerTeamMercDeath( SOLDIERTYPE *pSoldier )
|
||||
gMercProfiles[ pSoldier->ubProfile ].ubSuspiciousDeath = VERY_SUSPICIOUS_DEATH;
|
||||
}
|
||||
// if killed by someone on our team, or while there weren't any opponents around
|
||||
else if (Menptr[ pSoldier->ubAttackerID ].bTeam == OUR_TEAM || !gTacticalStatus.fEnemyInSector )
|
||||
else if (pSoldier->ubAttackerID->bTeam == OUR_TEAM || !gTacticalStatus.fEnemyInSector )
|
||||
{
|
||||
// cause insurance company to suspect fraud and investigate this claim
|
||||
gMercProfiles[ pSoldier->ubProfile ].ubSuspiciousDeath = SUSPICIOUS_DEATH;
|
||||
@@ -184,8 +184,8 @@ void StrategicHandlePlayerTeamMercDeath( SOLDIERTYPE *pSoldier )
|
||||
// MercDailyUpdate() gets called every day at midnight. If something is to happen to a merc that day, add an event for it.
|
||||
void MercDailyUpdate()
|
||||
{
|
||||
INT32 cnt;
|
||||
INT8 bLastTeamID;
|
||||
SoldierID id;
|
||||
SoldierID lastid;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
//SOLDIERTYPE *pQuitList[ 21 ];
|
||||
MERCPROFILESTRUCT *pProfile;
|
||||
@@ -217,12 +217,13 @@ void MercDailyUpdate()
|
||||
AddSameDayStrategicEvent( EVENT_BEGIN_CONTRACT_RENEWAL_SEQUENCE, MERC_ARRIVE_TIME_SLOT_2, 0 );
|
||||
AddSameDayStrategicEvent( EVENT_BEGIN_CONTRACT_RENEWAL_SEQUENCE, MERC_ARRIVE_TIME_SLOT_3, 0 );
|
||||
|
||||
cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
bLastTeamID = gTacticalStatus.Team[ gbPlayerNum ].bLastID;
|
||||
id = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
lastid = gTacticalStatus.Team[ gbPlayerNum ].bLastID;
|
||||
|
||||
//loop though all the mercs
|
||||
for ( pSoldier = MercPtrs[ cnt ]; cnt <= bLastTeamID; ++cnt,++pSoldier)
|
||||
for ( ; id <= lastid; ++id)
|
||||
{
|
||||
pSoldier = id;
|
||||
//if the merc is active
|
||||
if ( ( pSoldier->bActive )&&( pSoldier->bAssignment != ASSIGNMENT_POW ) && ( pSoldier->bAssignment != IN_TRANSIT ) )
|
||||
{
|
||||
@@ -374,11 +375,10 @@ void MercDailyUpdate()
|
||||
}
|
||||
}
|
||||
|
||||
//r eset the counter
|
||||
cnt = 0;
|
||||
|
||||
for ( pSoldier = MercPtrs[ cnt ]; cnt <= bLastTeamID; cnt++,pSoldier++)
|
||||
//reset the counter
|
||||
for ( id = 0; id <= lastid; ++id )
|
||||
{
|
||||
pSoldier = id;
|
||||
//if the merc is active
|
||||
if ( ( pSoldier->bActive )&&( pSoldier->bAssignment != ASSIGNMENT_POW ) && ( pSoldier->bAssignment != IN_TRANSIT ) )
|
||||
{
|
||||
@@ -402,7 +402,7 @@ void MercDailyUpdate()
|
||||
// WANNE: Only send mails from the original 1.13 merc, and not from the wildfire merc,
|
||||
// otherwise we get wrong mails cause of hardcoded Email.edt structure!!!!!
|
||||
UINT16 numOriginalProfiles = 255;
|
||||
for( cnt = 0; cnt < numOriginalProfiles; ++cnt)
|
||||
for( UINT16 cnt = 0; cnt < numOriginalProfiles; ++cnt)
|
||||
{
|
||||
pProfile = &(gMercProfiles[ cnt ]);
|
||||
|
||||
@@ -721,11 +721,9 @@ void HandleMercsAboutToLeave( SOLDIERTYPE *pMercList )
|
||||
|
||||
// ATE: This function deals with MERC MERC and NPC's leaving because of not getting paid...
|
||||
// NOT AIM renewals....
|
||||
void MercsContractIsFinished( UINT8 ubID )
|
||||
void MercsContractIsFinished( SoldierID ubID )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier;
|
||||
|
||||
pSoldier = &Menptr[ ubID ];
|
||||
SOLDIERTYPE *pSoldier = ubID;
|
||||
|
||||
//if the soldier was removed before getting into this function, return
|
||||
if( !pSoldier->bActive )
|
||||
@@ -775,11 +773,9 @@ void MercsContractIsFinished( UINT8 ubID )
|
||||
}
|
||||
|
||||
// ATE: Called for RPCs who should now complain about no pay...
|
||||
void RPCWhineAboutNoPay( UINT8 ubID )
|
||||
void RPCWhineAboutNoPay( SoldierID ubID )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier;
|
||||
|
||||
pSoldier = &Menptr[ ubID ];
|
||||
SOLDIERTYPE *pSoldier = ubID;
|
||||
|
||||
//if the soldier was removed before getting into this function, return
|
||||
if( !pSoldier->bActive )
|
||||
@@ -904,24 +900,22 @@ void MercComplainAboutEquipment( UINT8 ubProfile )
|
||||
|
||||
void UpdateBuddyAndHatedCounters( void )
|
||||
{
|
||||
INT8 bMercID;
|
||||
INT32 iLoop;
|
||||
INT8 bOtherID;
|
||||
INT8 bLastTeamID;
|
||||
UINT8 ubOtherProfileID;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
SOLDIERTYPE *pOtherSoldier;
|
||||
MERCPROFILESTRUCT *pProfile;
|
||||
BOOLEAN fSameGroupOnly;
|
||||
|
||||
BOOLEAN fUpdatedTimeTillNextHatedComplaint = FALSE;
|
||||
SoldierID bMercID, bOtherID, bLastTeamID;
|
||||
INT32 iLoop;
|
||||
UINT8 ubOtherProfileID;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
SOLDIERTYPE *pOtherSoldier;
|
||||
MERCPROFILESTRUCT *pProfile;
|
||||
BOOLEAN fSameGroupOnly;
|
||||
BOOLEAN fUpdatedTimeTillNextHatedComplaint = FALSE;
|
||||
|
||||
bMercID = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
bLastTeamID = gTacticalStatus.Team[ gbPlayerNum ].bLastID;
|
||||
|
||||
//loop though all the mercs
|
||||
for ( pSoldier = MercPtrs[ bMercID ]; bMercID <= bLastTeamID; bMercID++,pSoldier++)
|
||||
for ( ; bMercID <= bLastTeamID; ++bMercID )
|
||||
{
|
||||
pSoldier = bMercID;
|
||||
fSameGroupOnly = FALSE;
|
||||
|
||||
//if the merc is active and on a combat assignment
|
||||
@@ -938,9 +932,9 @@ void UpdateBuddyAndHatedCounters( void )
|
||||
fUpdatedTimeTillNextHatedComplaint = FALSE;
|
||||
|
||||
bOtherID = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
|
||||
for ( pOtherSoldier = MercPtrs[ bOtherID ]; bOtherID <= bLastTeamID; bOtherID++, pOtherSoldier++)
|
||||
for ( ; bOtherID <= bLastTeamID; ++bOtherID )
|
||||
{
|
||||
pOtherSoldier = bOtherID;
|
||||
// is this guy in the same sector and on active duty (or in the same moving group)
|
||||
|
||||
if (bOtherID != bMercID && pOtherSoldier->bActive && pOtherSoldier->bAssignment < ON_DUTY )
|
||||
@@ -1255,15 +1249,16 @@ void UpdateBuddyAndHatedCounters( void )
|
||||
|
||||
void HourlyCamouflageUpdate( void )
|
||||
{
|
||||
INT8 bMercID, bLastTeamID;
|
||||
SoldierID bMercID, bLastTeamID;
|
||||
SOLDIERTYPE * pSoldier;
|
||||
BOOLEAN camoWoreOff = FALSE;
|
||||
bMercID = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
bLastTeamID = gTacticalStatus.Team[ gbPlayerNum ].bLastID;
|
||||
|
||||
// loop through all mercs
|
||||
for ( pSoldier = MercPtrs[ bMercID ]; bMercID <= bLastTeamID; bMercID++,pSoldier++)
|
||||
for ( ; bMercID <= bLastTeamID; ++bMercID )
|
||||
{
|
||||
pSoldier = bMercID;
|
||||
if ( pSoldier->bActive )
|
||||
{
|
||||
// SANDRO - new Ranger trait reduces camo degrading, which replaces camouflage trait
|
||||
|
||||
@@ -3,11 +3,12 @@
|
||||
|
||||
//forward declarations of common classes to eliminate includes
|
||||
class SOLDIERTYPE;
|
||||
struct SoldierID;
|
||||
|
||||
void StrategicHandlePlayerTeamMercDeath( SOLDIERTYPE *pSoldier );
|
||||
void MercDailyUpdate();
|
||||
void MercsContractIsFinished( UINT8 ubID );
|
||||
void RPCWhineAboutNoPay( UINT8 ubID );
|
||||
void MercsContractIsFinished( SoldierID ubID );
|
||||
void RPCWhineAboutNoPay( SoldierID ubID );
|
||||
void MercComplainAboutEquipment( UINT8 ubProfileID );
|
||||
BOOLEAN SoldierHasWorseEquipmentThanUsedTo( SOLDIERTYPE *pSoldier );
|
||||
void UpdateBuddyAndHatedCounters( void );
|
||||
|
||||
@@ -132,7 +132,7 @@ UINT8 gubMonsterMineInfestation[]={
|
||||
// the static NPC dialogue faces
|
||||
//extern UINT32 uiExternalStaticNPCFaces[];
|
||||
extern FACETYPE *gpCurrentTalkingFace;
|
||||
extern UINT8 gubCurrentTalkingID;
|
||||
extern UINT16 gubCurrentTalkingID;
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -806,7 +806,7 @@ GROUP* CreateNewEnemyGroupDepartingFromSector( UINT32 uiSector, UINT8 ubNumAdmin
|
||||
return NULL;
|
||||
}
|
||||
|
||||
GROUP* CreateNewMilitiaGroupDepartingFromSector( UINT32 uiSector, UINT8& arusNumAdmins, UINT8& arusNumTroops, UINT8& arusNumElites )
|
||||
GROUP* CreateNewMilitiaGroupDepartingFromSector( UINT32 uiSector, UINT16& arusNumAdmins, UINT16& arusNumTroops, UINT16& arusNumElites )
|
||||
{
|
||||
GROUP *pNew;
|
||||
AssertMsg( uiSector >= 0 && uiSector <= 255, String( "CreateNewMilitiaGroupDepartingFromSector with out of range value of %d", uiSector ) );
|
||||
@@ -846,7 +846,7 @@ GROUP* CreateNewMilitiaGroupDepartingFromSector( UINT32 uiSector, UINT8& arusNum
|
||||
pNew->pEnemyGroup->ubNumAdmins = arusNumAdmins;
|
||||
pNew->pEnemyGroup->ubNumTroops = arusNumTroops;
|
||||
pNew->pEnemyGroup->ubNumElites = arusNumElites;
|
||||
pNew->ubGroupSize = (UINT8)(arusNumAdmins + arusNumTroops + arusNumElites);
|
||||
pNew->ubGroupSize = arusNumAdmins + arusNumTroops + arusNumElites;
|
||||
pNew->ubTransportationMask = FOOT;
|
||||
pNew->fVehicle = FALSE;
|
||||
pNew->ubCreatedSectorID = pNew->ubOriginalSector;
|
||||
@@ -1120,7 +1120,7 @@ void PrepareForPreBattleInterface( GROUP *pPlayerDialogGroup, GROUP *pInitiating
|
||||
gfCantRetreatInPBI = TRUE;
|
||||
}
|
||||
|
||||
ubChosenMerc = (UINT8)Random( ubNumMercs );
|
||||
ubChosenMerc = (UINT16)Random( ubNumMercs );
|
||||
|
||||
pSoldier = MercPtrs[ ubMercsInGroup[ ubChosenMerc ] ];
|
||||
gpTacticalTraversalChosenSoldier = pSoldier;
|
||||
@@ -1149,7 +1149,7 @@ void PrepareForPreBattleInterface( GROUP *pPlayerDialogGroup, GROUP *pInitiating
|
||||
gfCantRetreatInPBI = TRUE;
|
||||
}
|
||||
|
||||
ubChosenMerc = (UINT8)Random( ubNumMercs );
|
||||
ubChosenMerc = (UINT16)Random( ubNumMercs );
|
||||
|
||||
pSoldier = MercPtrs[ ubMercsInGroup[ ubChosenMerc ] ];
|
||||
|
||||
@@ -1946,11 +1946,6 @@ void GroupArrivedAtSector( UINT8 ubGroupID, BOOLEAN fCheckForBattle, BOOLEAN fNe
|
||||
|
||||
if ( pGroup->usGroupTeam == OUR_TEAM )
|
||||
{
|
||||
if( pGroup->ubSectorZ == 0 )
|
||||
{
|
||||
SectorInfo[SECTOR( pGroup->ubSectorX, pGroup->ubSectorY )].bLastKnownEnemies = NumNonPlayerTeamMembersInSector( pGroup->ubSectorX, pGroup->ubSectorY, ENEMY_TEAM );
|
||||
}
|
||||
|
||||
// Flugente: do not award experience gain if we never left
|
||||
if (!fNeverLeft)
|
||||
{
|
||||
@@ -3770,8 +3765,6 @@ INT32 GetTravelTimeForFootTeam( UINT8 ubSector, UINT8 ubDirection )
|
||||
void HandleArrivalOfReinforcements( GROUP *pGroup )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier;
|
||||
SECTORINFO *pSector;
|
||||
INT32 iNumEnemiesInSector;
|
||||
INT32 cnt;
|
||||
|
||||
if ( pGroup->usGroupTeam == OUR_TEAM )
|
||||
@@ -3835,22 +3828,6 @@ void HandleArrivalOfReinforcements( GROUP *pGroup )
|
||||
gfPendingNonPlayerTeam[MILITIA_TEAM] = TRUE;
|
||||
AddPossiblePendingMilitiaToBattle( );
|
||||
}
|
||||
|
||||
//Update the known number of enemies in the sector.
|
||||
pSector = &SectorInfo[ SECTOR( pGroup->ubSectorX, pGroup->ubSectorY ) ];
|
||||
iNumEnemiesInSector = NumNonPlayerTeamMembersInSector( pGroup->ubSectorX, pGroup->ubSectorY, ENEMY_TEAM );
|
||||
if( iNumEnemiesInSector )
|
||||
{
|
||||
if( pSector->bLastKnownEnemies >= 0 )
|
||||
{
|
||||
pSector->bLastKnownEnemies = (INT8)iNumEnemiesInSector;
|
||||
}
|
||||
//if we don't know how many enemies there are, then we can't update this value.
|
||||
}
|
||||
else
|
||||
{
|
||||
pSector->bLastKnownEnemies = 0;
|
||||
}
|
||||
}
|
||||
|
||||
BOOLEAN PlayersBetweenTheseSectors( INT16 sSource, INT16 sDest, INT32 *iCountEnter, INT32 *iCountExit, BOOLEAN *fAboutToArriveEnter )
|
||||
@@ -4334,12 +4311,12 @@ BOOLEAN LoadPlayerGroupList( HWFILE hFile, GROUP **pGroup )
|
||||
{
|
||||
PLAYERGROUP *pTemp=NULL;
|
||||
PLAYERGROUP *pHead=NULL;
|
||||
UINT32 uiNumberOfNodes=0;
|
||||
UINT32 uiProfileID=0;
|
||||
UINT32 uiNumBytesRead;
|
||||
UINT32 cnt=0;
|
||||
INT16 sTempID;
|
||||
GROUP *pTempGroup = *pGroup;
|
||||
UINT32 uiNumberOfNodes=0;
|
||||
UINT32 uiProfileID=0;
|
||||
UINT32 uiNumBytesRead;
|
||||
UINT32 cnt=0;
|
||||
SoldierID sTempID;
|
||||
GROUP *pTempGroup = *pGroup;
|
||||
|
||||
// pTemp = pGroup;
|
||||
|
||||
@@ -4374,10 +4351,10 @@ BOOLEAN LoadPlayerGroupList( HWFILE hFile, GROUP **pGroup )
|
||||
sTempID = GetSoldierIDFromMercID( pTemp->ubProfileID );
|
||||
|
||||
//Should never happen
|
||||
Assert( sTempID != -1 );
|
||||
pTemp->ubID = (UINT8) sTempID;
|
||||
Assert( sTempID != NOBODY );
|
||||
pTemp->ubID = sTempID;
|
||||
|
||||
pTemp->pSoldier = &Menptr[ pTemp->ubID ];
|
||||
pTemp->pSoldier = pTemp->ubID;
|
||||
|
||||
pTemp->next = NULL;
|
||||
|
||||
@@ -5480,15 +5457,16 @@ BOOLEAN TestForBloodcatAmbush( GROUP *pGroup )
|
||||
// merc recoeds - get a point to scouts
|
||||
if ( fBloodCatAmbushPrevented )
|
||||
{
|
||||
for( UINT16 i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; i++ )
|
||||
for( SoldierID i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++i )
|
||||
{
|
||||
if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->stats.bLife && !(MercPtrs[ i ]->flags.uiStatusFlags & SOLDIER_VEHICLE) )
|
||||
SOLDIERTYPE *pSoldier = i;
|
||||
if( pSoldier->bActive && pSoldier->stats.bLife && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) )
|
||||
{
|
||||
if ( MercPtrs[ i ]->sSectorX == pGroup->ubSectorX && MercPtrs[ i ]->sSectorY == pGroup->ubSectorY && MercPtrs[ i ]->bAssignment != ASSIGNMENT_POW && MercPtrs[ i ]->bAssignment != ASSIGNMENT_MINIEVENT && MercPtrs[i]->bAssignment != ASSIGNMENT_REBELCOMMAND && MercPtrs[ i ]->stats.bLife >= OKLIFE )
|
||||
if ( pSoldier->sSectorX == pGroup->ubSectorX && pSoldier->sSectorY == pGroup->ubSectorY && pSoldier->bAssignment != ASSIGNMENT_POW && pSoldier->bAssignment != ASSIGNMENT_MINIEVENT && pSoldier->bAssignment != ASSIGNMENT_REBELCOMMAND && pSoldier->stats.bLife >= OKLIFE )
|
||||
{
|
||||
if( HAS_SKILL_TRAIT( MercPtrs[ i ], SCOUTING_NT ) && MercPtrs[ i ]->ubProfile != NO_PROFILE )
|
||||
if( HAS_SKILL_TRAIT( pSoldier, SCOUTING_NT ) && pSoldier->ubProfile != NO_PROFILE )
|
||||
{
|
||||
gMercProfiles[ MercPtrs[ i ]->ubProfile ].records.usAmbushesExperienced++;
|
||||
gMercProfiles[ pSoldier->ubProfile ].records.usAmbushesExperienced++;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5962,18 +5940,17 @@ BOOLEAN ValidateGroups( GROUP *pGroup )
|
||||
BOOLEAN ScoutIsPresentInSquad( INT16 ubSectorNumX, INT16 ubSectorNumY )
|
||||
{
|
||||
BOOLEAN fScoutPresent = FALSE;
|
||||
INT32 i;
|
||||
|
||||
// sevenfm: scout should not be sleeping, in vehicle or on assignment
|
||||
for( i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; i++ )
|
||||
for( SoldierID i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++i )
|
||||
{
|
||||
if( MercPtrs[ i ]->bActive &&
|
||||
MercPtrs[ i ]->stats.bLife >= OKLIFE &&
|
||||
MercPtrs[ i ]->sSectorX == ubSectorNumX &&
|
||||
MercPtrs[ i ]->sSectorY == ubSectorNumY &&
|
||||
MercPtrs[ i ]->bAssignment < ON_DUTY &&
|
||||
!MercPtrs[ i ]->flags.fMercAsleep &&
|
||||
HAS_SKILL_TRAIT( MercPtrs[ i ], SCOUTING_NT ) )
|
||||
SOLDIERTYPE *pSoldier = i;
|
||||
if( pSoldier->bActive &&
|
||||
pSoldier->stats.bLife >= OKLIFE &&
|
||||
pSoldier->sSectorX == ubSectorNumX &&
|
||||
pSoldier->sSectorY == ubSectorNumY &&
|
||||
pSoldier->bAssignment < ON_DUTY &&
|
||||
!pSoldier->flags.fMercAsleep &&
|
||||
HAS_SKILL_TRAIT( pSoldier, SCOUTING_NT ) )
|
||||
{
|
||||
fScoutPresent = TRUE;
|
||||
}
|
||||
@@ -6004,13 +5981,14 @@ BOOLEAN ConcealedMercInSector( INT16 ubSectorNumX, INT16 ubSectorNumY, BOOLEAN a
|
||||
if ( !gGameOptions.fNewTraitSystem )
|
||||
return FALSE;
|
||||
|
||||
for ( int i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i )
|
||||
for ( SoldierID i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i )
|
||||
{
|
||||
if ( MercPtrs[i]->bActive && MercPtrs[i]->stats.bLife >= OKLIFE && SPY_LOCATION( MercPtrs[i]->bAssignment ) )
|
||||
SOLDIERTYPE *pSoldier = i;
|
||||
if ( pSoldier->bActive && pSoldier->stats.bLife >= OKLIFE && SPY_LOCATION( pSoldier->bAssignment ) )
|
||||
{
|
||||
if ( MercPtrs[i]->sSectorX == ubSectorNumX && MercPtrs[i]->sSectorY == ubSectorNumY && MercPtrs[i]->bSectorZ == 10 )
|
||||
if ( pSoldier->sSectorX == ubSectorNumX && pSoldier->sSectorY == ubSectorNumY && pSoldier->bSectorZ == 10 )
|
||||
{
|
||||
if ( !aScoutsOnly || HAS_SKILL_TRAIT( MercPtrs[i], SCOUTING_NT ) )
|
||||
if ( !aScoutsOnly || HAS_SKILL_TRAIT( pSoldier, SCOUTING_NT ) )
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -52,38 +52,38 @@ typedef struct WAYPOINT
|
||||
|
||||
typedef struct PLAYERGROUP
|
||||
{
|
||||
UINT8 ubProfileID; //SAVE THIS VALUE ONLY. The others are temp (for quick access)
|
||||
UINT8 ubID; //index in the Menptr array
|
||||
UINT8 ubProfileID; //SAVE THIS VALUE ONLY. The others are temp (for quick access)
|
||||
SoldierID ubID; //index in the Menptr array
|
||||
SOLDIERTYPE *pSoldier; //direct access to the soldier pointer
|
||||
UINT8 bFlags; //flags referring to individual player soldiers
|
||||
UINT8 bFlags; //flags referring to individual player soldiers
|
||||
struct PLAYERGROUP *next; //next player in list
|
||||
}PLAYERGROUP;
|
||||
|
||||
|
||||
typedef struct ENEMYGROUP
|
||||
{
|
||||
UINT8 ubNumTroops; //number of regular troops in the group
|
||||
UINT8 ubNumElites; //number of elite troops in the group
|
||||
UINT8 ubNumAdmins; //number of administrators in the group
|
||||
UINT16 ubNumTroops; //number of regular troops in the group
|
||||
UINT16 ubNumElites; //number of elite troops in the group
|
||||
UINT16 ubNumAdmins; //number of administrators in the group
|
||||
UINT8 ubLeaderProfileID; //could be Mike, maybe the warden... someone new, but likely nobody.
|
||||
UINT8 ubPendingReinforcements;//This group is waiting for reinforcements before attacking or attempting to fortify newly aquired sector.
|
||||
UINT8 ubAdminsInBattle; //number of administrators in currently in battle.
|
||||
UINT16 ubPendingReinforcements;//This group is waiting for reinforcements before attacking or attempting to fortify newly aquired sector.
|
||||
UINT16 ubAdminsInBattle; //number of administrators in currently in battle.
|
||||
UINT8 ubIntention; //the type of group this is: patrol, assault, spies, etc.
|
||||
UINT8 ubTroopsInBattle; //number of soldiers currently in battle.
|
||||
UINT8 ubElitesInBattle; //number of elite soldiers currently in battle.
|
||||
UINT16 ubTroopsInBattle; //number of soldiers currently in battle.
|
||||
UINT16 ubElitesInBattle; //number of elite soldiers currently in battle.
|
||||
// WDS - New AI
|
||||
UINT8 ubNumTanks;
|
||||
UINT8 ubTanksInBattle;
|
||||
UINT8 ubNumJeeps;
|
||||
UINT8 ubJeepsInBattle;
|
||||
UINT16 ubNumTanks;
|
||||
UINT16 ubTanksInBattle;
|
||||
UINT16 ubNumJeeps;
|
||||
UINT16 ubJeepsInBattle;
|
||||
|
||||
// Flugente: number of turncoats
|
||||
UINT8 ubNumAdmins_Turncoat;
|
||||
UINT8 ubNumTroops_Turncoat;
|
||||
UINT8 ubNumElites_Turncoat;
|
||||
|
||||
UINT8 ubNumRobots; //number of enemy robots in the group
|
||||
UINT8 ubRobotsInBattle; //number of enemy robots currently in battle.
|
||||
UINT16 ubNumRobots; //number of enemy robots in the group
|
||||
UINT16 ubRobotsInBattle; //number of enemy robots currently in battle.
|
||||
|
||||
INT8 bPadding[11];
|
||||
}ENEMYGROUP;
|
||||
@@ -120,7 +120,7 @@ typedef struct GROUP
|
||||
BOOLEAN fVehicle; //vehicle controlled group?
|
||||
BOOLEAN fPersistant; //This flag when set prevents the group from being automatically deleted when it becomes empty.
|
||||
UINT8 ubGroupID; //the unique ID of the group (used for hooking into events and SOLDIERTYPE)
|
||||
UINT8 ubGroupSize; //total number of individuals in the group.
|
||||
UINT16 ubGroupSize; //total number of individuals in the group.
|
||||
UINT8 ubSectorX, ubSectorY; //last/curr sector occupied
|
||||
UINT8 ubSectorZ;
|
||||
UINT8 ubNextX, ubNextY; //next sector destination
|
||||
@@ -204,7 +204,7 @@ BOOLEAN SetGroupPatrolParameters( UINT8 ubGroupID, UINT8 ubRestAtFL, UINT8 ubRes
|
||||
//............................................................
|
||||
GROUP* CreateNewEnemyGroupDepartingFromSector( UINT32 uiSector, UINT8 ubNumAdmins, UINT8 ubNumTroops, UINT8 ubNumElites, UINT8 ubNumRobots, UINT8 ubNumTanks, UINT8 ubNumJeeps );
|
||||
|
||||
GROUP* CreateNewMilitiaGroupDepartingFromSector( UINT32 uiSector, UINT8& arusNumAdmins, UINT8& arusNumTroops, UINT8& arusNumElites );
|
||||
GROUP* CreateNewMilitiaGroupDepartingFromSector( UINT32 uiSector, UINT16& arusNumAdmins, UINT16& arusNumTroops, UINT16& arusNumElites );
|
||||
|
||||
#ifdef JA2UB
|
||||
GROUP* CreateNewEnemyGroupDepartingFromSectorUsingZLevel( UINT32 uiSector, UINT8 ubSectorZ, UINT8 ubNumAdmins, UINT8 ubNumTroops, UINT8 ubNumElites, UINT8 ubNumTanks );
|
||||
|
||||
@@ -680,7 +680,6 @@ void HandleMurderOfCivilian( SOLDIERTYPE *pSoldier, BOOLEAN fIntentional )
|
||||
INT8 bTownId = 0;
|
||||
INT32 iLoyaltyChange = 0;
|
||||
INT8 bSeenState = 0;
|
||||
INT32 iCounter = 0;
|
||||
SOLDIERTYPE *pCivSoldier = NULL;
|
||||
UINT32 uiChanceFalseAccusal = 0;
|
||||
INT8 bKillerTeam = 0;
|
||||
@@ -741,13 +740,13 @@ void HandleMurderOfCivilian( SOLDIERTYPE *pSoldier, BOOLEAN fIntentional )
|
||||
}
|
||||
*/
|
||||
// set killer team
|
||||
bKillerTeam = Menptr[ pSoldier->ubAttackerID ].bTeam;
|
||||
bKillerTeam = pSoldier->ubAttackerID->bTeam;
|
||||
|
||||
|
||||
// if the player did the killing
|
||||
if( bKillerTeam == OUR_TEAM )
|
||||
{
|
||||
SOLDIERTYPE *pKiller = MercPtrs[ pSoldier->ubAttackerID ];
|
||||
SOLDIERTYPE *pKiller = pSoldier->ubAttackerID;
|
||||
|
||||
// apply morale penalty for killing a civilian!
|
||||
HandleMoraleEvent( pKiller, MORALE_KILLED_CIVILIAN, pKiller->sSectorX, pKiller->sSectorY, pKiller->bSectorZ );
|
||||
@@ -790,10 +789,10 @@ void HandleMurderOfCivilian( SOLDIERTYPE *pSoldier, BOOLEAN fIntentional )
|
||||
// check if LOS between any civ, killer and killed
|
||||
// if so, then do not adjust
|
||||
|
||||
for( iCounter = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; iCounter <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; iCounter++ )
|
||||
for( SoldierID iCounter = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; iCounter <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ++iCounter )
|
||||
{
|
||||
// set current civ soldier
|
||||
pCivSoldier = MercPtrs[ iCounter ];
|
||||
pCivSoldier = iCounter;
|
||||
|
||||
if ( pCivSoldier == pSoldier )
|
||||
{
|
||||
@@ -801,7 +800,7 @@ void HandleMurderOfCivilian( SOLDIERTYPE *pSoldier, BOOLEAN fIntentional )
|
||||
}
|
||||
|
||||
// killer seen by civ?
|
||||
if ( SoldierToSoldierLineOfSightTest( pCivSoldier, MercPtrs[ pSoldier->ubAttackerID ], TRUE, gGameExternalOptions.ubStraightSightRange ) != 0 )
|
||||
if ( SoldierToSoldierLineOfSightTest( pCivSoldier, pSoldier->ubAttackerID, TRUE, gGameExternalOptions.ubStraightSightRange ) != 0 )
|
||||
{
|
||||
bSeenState |= 1;
|
||||
}
|
||||
@@ -909,7 +908,7 @@ void HandleMurderOfCivilian( SOLDIERTYPE *pSoldier, BOOLEAN fIntentional )
|
||||
|
||||
case CREATURE_TEAM:
|
||||
// killed by a monster - make sure it was one
|
||||
if( ( Menptr[ pSoldier->ubAttackerID ].ubBodyType >= ADULTFEMALEMONSTER ) && ( Menptr[ pSoldier->ubAttackerID ].ubBodyType <= QUEENMONSTER ) )
|
||||
if( ( pSoldier->ubAttackerID->ubBodyType >= ADULTFEMALEMONSTER ) && ( pSoldier->ubAttackerID->ubBodyType <= QUEENMONSTER ) )
|
||||
{
|
||||
// increase for the extreme horror of being killed by a monster
|
||||
iLoyaltyChange *= MULTIPLIER_FOR_MURDER_BY_MONSTER;
|
||||
@@ -2130,13 +2129,12 @@ BOOLEAN DidFirstBattleTakePlaceInThisTown( INT8 bTownId )
|
||||
|
||||
UINT32 PlayerStrength( void )
|
||||
{
|
||||
UINT8 ubLoop;
|
||||
SOLDIERTYPE * pSoldier;
|
||||
UINT32 uiStrength, uiTotal = 0;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
UINT32 uiStrength, uiTotal = 0;
|
||||
|
||||
for ( ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++ )
|
||||
for ( SoldierID ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++ubLoop )
|
||||
{
|
||||
pSoldier = MercPtrs[ ubLoop ];
|
||||
pSoldier = ubLoop;
|
||||
if ( pSoldier->bActive )
|
||||
{
|
||||
if ( pSoldier->bInSector || (pSoldier->flags.fBetweenSectors && SECTORX( pSoldier->ubPrevSectorID ) == gWorldSectorX && SECTORY( pSoldier->ubPrevSectorID ) == gWorldSectorY && (pSoldier->bSectorZ == gbWorldSectorZ)) )
|
||||
@@ -2152,13 +2150,12 @@ UINT32 PlayerStrength( void )
|
||||
|
||||
UINT32 EnemyStrength( void )
|
||||
{
|
||||
UINT8 ubLoop;
|
||||
SOLDIERTYPE * pSoldier;
|
||||
UINT32 uiStrength, uiTotal = 0;
|
||||
SOLDIERTYPE * pSoldier;
|
||||
UINT32 uiStrength, uiTotal = 0;
|
||||
|
||||
for ( ubLoop = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; ubLoop <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ubLoop++ )
|
||||
for ( SoldierID ubLoop = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; ubLoop <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ++ubLoop )
|
||||
{
|
||||
pSoldier = MercPtrs[ ubLoop ];
|
||||
pSoldier = ubLoop;
|
||||
if ( pSoldier->bActive && pSoldier->bInSector && !pSoldier->aiData.bNeutral )
|
||||
{
|
||||
// count this person's strength (condition), calculated as life reduced up to half according to maxbreath
|
||||
|
||||
@@ -52,10 +52,10 @@ extern ARMY_GUN_CHOICE_TYPE gExtendedArmyGunChoices[SOLDIER_GUN_CHOICE_SELECTION
|
||||
extern ARMY_GUN_CHOICE_TYPE gArmyItemChoices[SOLDIER_GUN_CHOICE_SELECTIONS][MAX_ITEM_TYPES];
|
||||
extern BOOLEAN gfTownUsesLoyalty[MAX_TOWNS];
|
||||
|
||||
std::map<UINT8, std::map<int, UINT8>> transportGroupIdToSoldierMap;
|
||||
std::map<UINT8, std::map<int, UINT16>> transportGroupIdToSoldierMap;
|
||||
std::map<UINT8, TransportGroupSectorInfo> transportGroupSectorInfo;
|
||||
|
||||
void PopulateTransportGroup(UINT8& admins, UINT8& troops, UINT8& elites, UINT8& jeeps, UINT8& tanks, UINT8& robots, UINT8 progress, int difficulty, BOOLEAN trySpecialCase);
|
||||
void PopulateTransportGroup(UINT16& admins, UINT16& troops, UINT16& elites, UINT16& jeeps, UINT16& tanks, UINT16& robots, UINT8 progress, int difficulty, BOOLEAN trySpecialCase);
|
||||
|
||||
BOOLEAN DeployTransportGroup()
|
||||
{
|
||||
@@ -128,7 +128,7 @@ BOOLEAN DeployTransportGroup()
|
||||
|
||||
TRANSPORT_GROUP_DEBUG(L"DeployTransportGroup sending group to sectorId: %d (%d/%d)", ubSectorID, SECTORX(ubSectorID), SECTORY(ubSectorID));
|
||||
|
||||
UINT8 admins, troops, elites, robots, jeeps, tanks;
|
||||
UINT16 admins, troops, elites, robots, jeeps, tanks;
|
||||
const UINT8 progress = min(125, HighestPlayerProgressPercentage() + recentLossCount * 5);
|
||||
PopulateTransportGroup(admins, troops, elites, jeeps, tanks, robots, progress, difficulty, mineSectorIds.size() == 1);
|
||||
|
||||
@@ -152,7 +152,7 @@ BOOLEAN DeployTransportGroup()
|
||||
|
||||
BOOLEAN ForceDeployTransportGroup(UINT8 sectorId)
|
||||
{
|
||||
UINT8 admins, troops, elites, robots, jeeps, tanks;
|
||||
UINT16 admins, troops, elites, robots, jeeps, tanks;
|
||||
const INT8 recentLossCount = min(5, GetAllStrategicEventsOfType(EVENT_TRANSPORT_GROUP_DEFEATED).size());
|
||||
const UINT8 progress = min(125, HighestPlayerProgressPercentage() + recentLossCount * 5);
|
||||
const UINT8 difficulty = gGameOptions.ubDifficultyLevel;
|
||||
@@ -222,29 +222,31 @@ void FillMapColoursForTransportGroups(INT32(&colorMap)[MAXIMUM_VALID_Y_COORDINAT
|
||||
// build map of detection sectors + ranges
|
||||
std::map<std::pair<INT16,INT16>, INT8> detectionMap;
|
||||
std::map<UINT8, MonitoredSectorState> monitoredTowns;
|
||||
for( INT16 i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; i++ )
|
||||
for( SoldierID i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++i )
|
||||
{
|
||||
if( MercPtrs[ i ]->bActive &&
|
||||
MercPtrs[ i ]->stats.bLife >= OKLIFE &&
|
||||
(MercPtrs[ i ]->bAssignment < ON_DUTY || MercPtrs[ i ]->bAssignment == GATHERINTEL) &&
|
||||
!MercPtrs[ i ]->flags.fMercAsleep)
|
||||
SOLDIERTYPE *pSoldier = i;
|
||||
|
||||
if( pSoldier->bActive &&
|
||||
pSoldier->stats.bLife >= OKLIFE &&
|
||||
(pSoldier->bAssignment < ON_DUTY || pSoldier->bAssignment == GATHERINTEL) &&
|
||||
!pSoldier->flags.fMercAsleep)
|
||||
{
|
||||
if (gGameOptions.fNewTraitSystem)
|
||||
{
|
||||
if (HAS_SKILL_TRAIT(MercPtrs[i], SCOUTING_NT))
|
||||
if (HAS_SKILL_TRAIT(pSoldier, SCOUTING_NT))
|
||||
{
|
||||
detectionMap[std::pair<INT16,INT16>(MercPtrs[i]->sSectorX, MercPtrs[i]->sSectorY)] = DETECTION_RANGE_SCOUT;
|
||||
detectionMap[std::pair<INT16,INT16>(pSoldier->sSectorX, pSoldier->sSectorY)] = DETECTION_RANGE_SCOUT;
|
||||
}
|
||||
else if (HAS_SKILL_TRAIT(MercPtrs[i], RADIO_OPERATOR_NT) && MercPtrs[i]->CanUseRadio(FALSE))
|
||||
else if (HAS_SKILL_TRAIT(pSoldier, RADIO_OPERATOR_NT) && pSoldier->CanUseRadio(FALSE))
|
||||
{
|
||||
detectionMap[std::pair<INT16,INT16>(MercPtrs[i]->sSectorX, MercPtrs[i]->sSectorY)] = DETECTION_RANGE_RADIO;
|
||||
detectionMap[std::pair<INT16,INT16>(pSoldier->sSectorX, pSoldier->sSectorY)] = DETECTION_RANGE_RADIO;
|
||||
}
|
||||
else if (HAS_SKILL_TRAIT(MercPtrs[i], COVERT_NT))
|
||||
else if (HAS_SKILL_TRAIT(pSoldier, COVERT_NT))
|
||||
{
|
||||
if (MercPtrs[i]->bAssignment == GATHERINTEL)
|
||||
if (pSoldier->bAssignment == GATHERINTEL)
|
||||
{
|
||||
detectionMap[std::pair<INT16,INT16>(MercPtrs[i]->sSectorX, MercPtrs[i]->sSectorY)] = DETECTION_RANGE_COVERT;
|
||||
monitoredTowns[GetTownIdForSector(MercPtrs[i]->sSectorX, MercPtrs[i]->sSectorY)] = MonitoredSectorState::Monitored;
|
||||
detectionMap[std::pair<INT16,INT16>(pSoldier->sSectorX, pSoldier->sSectorY)] = DETECTION_RANGE_COVERT;
|
||||
monitoredTowns[GetTownIdForSector(pSoldier->sSectorX, pSoldier->sSectorY)] = MonitoredSectorState::Monitored;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -446,8 +448,8 @@ void UpdateTransportGroupInventory()
|
||||
if (gGameExternalOptions.fStrategicTransportGroupsEnabled == FALSE)
|
||||
return;
|
||||
|
||||
const int firstSlot = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID;
|
||||
const int lastSlot = gTacticalStatus.Team[ ENEMY_TEAM ].bLastID;
|
||||
const SoldierID firstSlot = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID;
|
||||
const SoldierID lastSlot = gTacticalStatus.Team[ ENEMY_TEAM ].bLastID;
|
||||
const UINT8 progress = CurrentPlayerProgressPercentage();
|
||||
|
||||
enum ItemTypes
|
||||
@@ -479,13 +481,14 @@ void UpdateTransportGroupInventory()
|
||||
{
|
||||
// let's be nice to the player and only drop ammo for guns their mercs have in inventory
|
||||
std::set<UINT8> playerCalibres;
|
||||
for (INT16 i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; i++)
|
||||
for ( SoldierID i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i)
|
||||
{
|
||||
if (MercPtrs[i]->bActive && !(MercPtrs[i]->flags.uiStatusFlags & SOLDIER_VEHICLE))
|
||||
SOLDIERTYPE *pSoldier = i;
|
||||
if (pSoldier->bActive && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE))
|
||||
{
|
||||
for (int j = 0 ; j < MercPtrs[i]->inv.size(); ++j)
|
||||
for (int j = 0 ; j < pSoldier->inv.size(); ++j)
|
||||
{
|
||||
OBJECTTYPE& obj = MercPtrs[i]->inv[j];
|
||||
OBJECTTYPE& obj = pSoldier->inv[j];
|
||||
if (obj.exists()
|
||||
&& Item[obj.usItem].usItemClass == IC_GUN)
|
||||
{
|
||||
@@ -599,11 +602,11 @@ void UpdateTransportGroupInventory()
|
||||
|
||||
// cache the initial jeep count of every group we find
|
||||
std::map<UINT8, int> cachedGroupJeepCount;
|
||||
for (int slot = firstSlot; (slot <= lastSlot); ++slot)
|
||||
for ( SoldierID slot = firstSlot; (slot <= lastSlot); ++slot)
|
||||
{
|
||||
SOLDIERTYPE* pSoldier = &Menptr[slot];
|
||||
SOLDIERTYPE* pSoldier = slot;
|
||||
|
||||
const std::map<UINT8, std::map<int, UINT8>>::iterator groupIter = transportGroupIdToSoldierMap.find(pSoldier->ubGroupID);
|
||||
const std::map<UINT8, std::map<int, UINT16>>::iterator groupIter = transportGroupIdToSoldierMap.find(pSoldier->ubGroupID);
|
||||
if (groupIter != transportGroupIdToSoldierMap.end())
|
||||
{
|
||||
// let's find out if this group is coming home or still outgoing to its target destination
|
||||
@@ -620,7 +623,7 @@ void UpdateTransportGroupInventory()
|
||||
}
|
||||
|
||||
// found a matching transport groupid
|
||||
std::map<int, UINT8>::iterator soldierClassIter = groupIter->second.find(SOLDIER_CLASS_JEEP);
|
||||
std::map<int, UINT16>::iterator soldierClassIter = groupIter->second.find(SOLDIER_CLASS_JEEP);
|
||||
if (cachedGroupJeepCount.find(groupIter->first) == cachedGroupJeepCount.end())
|
||||
{
|
||||
cachedGroupJeepCount[groupIter->first] = soldierClassIter == groupIter->second.end() ? 0 : groupIter->second[SOLDIER_CLASS_JEEP];
|
||||
@@ -874,7 +877,7 @@ void UpdateTransportGroupInventory()
|
||||
}
|
||||
}
|
||||
|
||||
void AddToTransportGroupMap(UINT8 groupId, int soldierClass, UINT8 amount)
|
||||
void AddToTransportGroupMap(UINT8 groupId, int soldierClass, UINT16 amount)
|
||||
{
|
||||
if (gGameExternalOptions.fStrategicTransportGroupsEnabled == FALSE)
|
||||
{
|
||||
@@ -913,7 +916,7 @@ void NotifyTransportGroupDefeated()
|
||||
AddStrategicEvent(EVENT_TRANSPORT_GROUP_DEFEATED, GetWorldTotalMin() + 60 * hoursToRememberDefeat, 0);
|
||||
}
|
||||
|
||||
void PopulateTransportGroup(UINT8& admins, UINT8& troops, UINT8& elites, UINT8& jeeps, UINT8& tanks, UINT8& robots, UINT8 progress, int difficulty, BOOLEAN trySpecialCase)
|
||||
void PopulateTransportGroup(UINT16& admins, UINT16& troops, UINT16& elites, UINT16& jeeps, UINT16& tanks, UINT16& robots, UINT8 progress, int difficulty, BOOLEAN trySpecialCase)
|
||||
{
|
||||
admins = troops = elites = robots = jeeps = tanks = 0;
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ void UpdateTransportGroupInventory();
|
||||
|
||||
const std::map<UINT8, TransportGroupSectorInfo> GetTransportGroupSectorInfo();
|
||||
|
||||
void AddToTransportGroupMap(UINT8 groupId, int soldierClass, UINT8 amount);
|
||||
void AddToTransportGroupMap(UINT8 groupId, int soldierClass, UINT16 amount);
|
||||
void ClearTransportGroupMap();
|
||||
|
||||
void NotifyTransportGroupDefeated();
|
||||
|
||||
+27
-27
@@ -54,7 +54,7 @@ BOOLEAN gfAreWePromotingRegular = FALSE;
|
||||
|
||||
|
||||
//the completed list of sector soldiers for training militia
|
||||
INT32 giListOfMercsInSectorsCompletedMilitiaTraining[ SIZE_OF_MILITIA_COMPLETED_TRAINING_LIST ];
|
||||
SoldierID giListOfMercsInSectorsCompletedMilitiaTraining[ SIZE_OF_MILITIA_COMPLETED_TRAINING_LIST ];
|
||||
SOLDIERTYPE *pMilitiaTrainerSoldier = NULL;
|
||||
|
||||
// note that these sector values are STRATEGIC INDEXES, not 0-255!
|
||||
@@ -471,7 +471,7 @@ INT8 MilitiaRankToSoldierClass(UINT8 ubRank)
|
||||
return(bSoldierClass);
|
||||
}
|
||||
|
||||
void StrategicAddMilitiaToSector(INT16 sMapX, INT16 sMapY, UINT8 ubRank, UINT8 ubHowMany)
|
||||
void StrategicAddMilitiaToSector(INT16 sMapX, INT16 sMapY, UINT8 ubRank, UINT16 ubHowMany)
|
||||
{
|
||||
SECTORINFO *pSectorInfo = &( SectorInfo[ SECTOR( sMapX, sMapY ) ] );
|
||||
|
||||
@@ -486,15 +486,15 @@ void StrategicAddMilitiaToSector(INT16 sMapX, INT16 sMapY, UINT8 ubRank, UINT8 u
|
||||
fMapPanelDirty = TRUE;
|
||||
}
|
||||
|
||||
void StrategicPromoteMilitiaInSector(INT16 sMapX, INT16 sMapY, UINT8 ubCurrentRank, UINT8 ubHowMany)
|
||||
void StrategicPromoteMilitiaInSector(INT16 sMapX, INT16 sMapY, UINT8 ubCurrentRank, UINT16 ubHowMany)
|
||||
{
|
||||
SECTORINFO *pSectorInfo = &( SectorInfo[ SECTOR( sMapX, sMapY ) ] );
|
||||
|
||||
// damn well better have that many around to promote!
|
||||
//Assert(pSectorInfo->ubNumberOfCivsAtLevel[ ubCurrentRank ] >= ubHowMany);
|
||||
|
||||
UINT8 stationary = MilitiaInSectorOfRankStationary( sMapX, sMapY, ubCurrentRank );
|
||||
UINT8 ingroups = MilitiaInSectorOfRankInGroups( sMapX, sMapY, ubCurrentRank );
|
||||
UINT16 stationary = MilitiaInSectorOfRankStationary( sMapX, sMapY, ubCurrentRank );
|
||||
UINT16 ingroups = MilitiaInSectorOfRankInGroups( sMapX, sMapY, ubCurrentRank );
|
||||
|
||||
//KM : July 21, 1999 patch fix
|
||||
if ( ubCurrentRank >= ELITE_MILITIA || stationary + ingroups < ubHowMany )
|
||||
@@ -503,8 +503,8 @@ void StrategicPromoteMilitiaInSector(INT16 sMapX, INT16 sMapY, UINT8 ubCurrentRa
|
||||
}
|
||||
|
||||
// determine how many static and - if necessary - group-based militia we have to remove
|
||||
UINT8 reducestatic = min( stationary, ubHowMany );
|
||||
UINT8 reducegroups = min( ingroups, ubHowMany - reducestatic );
|
||||
UINT16 reducestatic = min( stationary, ubHowMany );
|
||||
UINT16 reducegroups = min( ingroups, ubHowMany - reducestatic );
|
||||
|
||||
pSectorInfo->ubNumberOfCivsAtLevel[ubCurrentRank] -= reducestatic;
|
||||
pSectorInfo->ubNumberOfCivsAtLevel[ubCurrentRank + 1] += reducestatic;
|
||||
@@ -541,7 +541,7 @@ void StrategicPromoteMilitiaInSector(INT16 sMapX, INT16 sMapY, UINT8 ubCurrentRa
|
||||
fMapPanelDirty = TRUE;
|
||||
}
|
||||
|
||||
void StrategicRemoveMilitiaFromSector(INT16 sMapX, INT16 sMapY, UINT8 ubRank, UINT8 ubHowMany)
|
||||
void StrategicRemoveMilitiaFromSector(INT16 sMapX, INT16 sMapY, UINT8 ubRank, UINT16 ubHowMany)
|
||||
{
|
||||
SECTORINFO *pSectorInfo = &( SectorInfo[ SECTOR( sMapX, sMapY ) ] );
|
||||
|
||||
@@ -549,8 +549,8 @@ void StrategicRemoveMilitiaFromSector(INT16 sMapX, INT16 sMapY, UINT8 ubRank, UI
|
||||
// damn well better have that many around to remove!
|
||||
//Assert(pSectorInfo->ubNumberOfCivsAtLevel[ ubRank ] >= ubHowMany);
|
||||
|
||||
UINT8 stationary = MilitiaInSectorOfRankStationary( sMapX, sMapY, ubRank );
|
||||
UINT8 ingroups = MilitiaInSectorOfRankInGroups( sMapX, sMapY, ubRank );
|
||||
UINT16 stationary = MilitiaInSectorOfRankStationary( sMapX, sMapY, ubRank );
|
||||
UINT16 ingroups = MilitiaInSectorOfRankInGroups( sMapX, sMapY, ubRank );
|
||||
|
||||
//KM : July 21, 1999 patch fix
|
||||
if ( stationary + ingroups < ubHowMany )
|
||||
@@ -559,8 +559,8 @@ void StrategicRemoveMilitiaFromSector(INT16 sMapX, INT16 sMapY, UINT8 ubRank, UI
|
||||
}
|
||||
|
||||
// determine how many static and - if necessary - group-based militia we have to remove
|
||||
UINT8 reducestatic = min( stationary, ubHowMany );
|
||||
UINT8 reducegroups = min( ingroups, ubHowMany - reducestatic );
|
||||
UINT16 reducestatic = min( stationary, ubHowMany );
|
||||
UINT16 reducegroups = min( ingroups, ubHowMany - reducestatic );
|
||||
|
||||
pSectorInfo->ubNumberOfCivsAtLevel[ubRank] -= reducestatic;
|
||||
|
||||
@@ -571,21 +571,21 @@ void StrategicRemoveMilitiaFromSector(INT16 sMapX, INT16 sMapY, UINT8 ubRank, UI
|
||||
{
|
||||
if ( ubRank == GREEN_MILITIA )
|
||||
{
|
||||
UINT8 reduced = min( reducegroups, pGroup->pEnemyGroup->ubNumAdmins );
|
||||
UINT16 reduced = min( reducegroups, pGroup->pEnemyGroup->ubNumAdmins );
|
||||
pGroup->pEnemyGroup->ubNumAdmins -= reduced;
|
||||
pGroup->ubGroupSize -= reduced;
|
||||
reducegroups -= reduced;
|
||||
}
|
||||
else if ( ubRank == REGULAR_MILITIA )
|
||||
{
|
||||
UINT8 reduced = min( reducegroups, pGroup->pEnemyGroup->ubNumTroops );
|
||||
UINT16 reduced = min( reducegroups, pGroup->pEnemyGroup->ubNumTroops );
|
||||
pGroup->pEnemyGroup->ubNumTroops -= reduced;
|
||||
pGroup->ubGroupSize -= reduced;
|
||||
reducegroups -= reduced;
|
||||
}
|
||||
else if ( ubRank == ELITE_MILITIA )
|
||||
{
|
||||
UINT8 reduced = min( reducegroups, pGroup->pEnemyGroup->ubNumElites );
|
||||
UINT16 reduced = min( reducegroups, pGroup->pEnemyGroup->ubNumElites );
|
||||
pGroup->pEnemyGroup->ubNumElites -= reduced;
|
||||
pGroup->ubGroupSize -= reduced;
|
||||
reducegroups -= reduced;
|
||||
@@ -705,12 +705,12 @@ void HandleMilitiaDefections(INT16 sMapX, INT16 sMapY)
|
||||
}
|
||||
}
|
||||
|
||||
UINT8 MilitiaInSectorOfRank(INT16 sMapX, INT16 sMapY, UINT8 ubRank)
|
||||
UINT16 MilitiaInSectorOfRank(INT16 sMapX, INT16 sMapY, UINT8 ubRank)
|
||||
{
|
||||
return MilitiaInSectorOfRankStationary( sMapX, sMapY, ubRank ) + MilitiaInSectorOfRankInGroups( sMapX, sMapY, ubRank );
|
||||
}
|
||||
|
||||
UINT8 MilitiaInSectorOfRankStationary( INT16 sMapX, INT16 sMapY, UINT8 ubRank )
|
||||
UINT16 MilitiaInSectorOfRankStationary( INT16 sMapX, INT16 sMapY, UINT8 ubRank )
|
||||
{
|
||||
if ( ubRank < MAX_MILITIA_LEVELS )
|
||||
return SectorInfo[SECTOR( sMapX, sMapY )].ubNumberOfCivsAtLevel[ubRank];
|
||||
@@ -718,9 +718,9 @@ UINT8 MilitiaInSectorOfRankStationary( INT16 sMapX, INT16 sMapY, UINT8 ubRank )
|
||||
return 0;
|
||||
}
|
||||
|
||||
UINT8 MilitiaInSectorOfRankInGroups( INT16 sMapX, INT16 sMapY, UINT8 ubRank )
|
||||
UINT16 MilitiaInSectorOfRankInGroups( INT16 sMapX, INT16 sMapY, UINT8 ubRank )
|
||||
{
|
||||
UINT8 count = 0;
|
||||
UINT16 count = 0;
|
||||
|
||||
GROUP *pGroup = gpGroupList;
|
||||
while ( pGroup )
|
||||
@@ -1379,7 +1379,7 @@ void HandleCompletionOfTownTrainingByGroupWithTrainer( SOLDIERTYPE *pTrainer, UI
|
||||
continue;
|
||||
}
|
||||
|
||||
pSoldier = &Menptr[ gCharactersList[ iCounter ].usSolID ];
|
||||
pSoldier = gCharactersList[ iCounter ].usSolID;
|
||||
|
||||
// valid soldier?
|
||||
if( pSoldier->bActive == FALSE )
|
||||
@@ -1421,10 +1421,10 @@ void AddSectorForSoldierToListOfSectorsThatCompletedMilitiaTraining( SOLDIERTYPE
|
||||
// get the sector value
|
||||
sSector = pSoldier->sSectorX + pSoldier->sSectorY * MAP_WORLD_X;
|
||||
|
||||
while( giListOfMercsInSectorsCompletedMilitiaTraining[ iCounter ] != -1 )
|
||||
while( giListOfMercsInSectorsCompletedMilitiaTraining[ iCounter ] != NOBODY )
|
||||
{
|
||||
// get the current soldier
|
||||
pCurrentSoldier = &Menptr[ giListOfMercsInSectorsCompletedMilitiaTraining[ iCounter ] ];
|
||||
pCurrentSoldier = giListOfMercsInSectorsCompletedMilitiaTraining[ iCounter ];
|
||||
|
||||
// get the current sector value
|
||||
sCurrentSector = CALCULATE_STRATEGIC_INDEX( pCurrentSoldier->sSectorX, pCurrentSoldier->sSectorY );
|
||||
@@ -1455,7 +1455,7 @@ void ClearSectorListForCompletedTrainingOfMilitia( void )
|
||||
|
||||
for( iCounter = 0; iCounter < SIZE_OF_MILITIA_COMPLETED_TRAINING_LIST; iCounter++ )
|
||||
{
|
||||
giListOfMercsInSectorsCompletedMilitiaTraining[ iCounter ] = -1;
|
||||
giListOfMercsInSectorsCompletedMilitiaTraining[ iCounter ] = NOBODY;
|
||||
}
|
||||
|
||||
return;
|
||||
@@ -1469,10 +1469,10 @@ void HandleContinueOfTownTraining( void )
|
||||
BOOLEAN fContinueEventPosted = FALSE;
|
||||
|
||||
|
||||
while( giListOfMercsInSectorsCompletedMilitiaTraining[ iCounter ] != -1 )
|
||||
while( giListOfMercsInSectorsCompletedMilitiaTraining[ iCounter ] != NOBODY )
|
||||
{
|
||||
// get the soldier
|
||||
pSoldier = &Menptr[ giListOfMercsInSectorsCompletedMilitiaTraining[ iCounter ] ];
|
||||
pSoldier = giListOfMercsInSectorsCompletedMilitiaTraining[ iCounter ];
|
||||
|
||||
if( pSoldier->bActive )
|
||||
{
|
||||
@@ -1532,7 +1532,7 @@ void BuildListOfUnpaidTrainableSectors( UINT8 ubMilitiaType )
|
||||
// selected?
|
||||
if( ( fSelectedListOfMercsForMapScreen[ iCounter ] == TRUE ) || ( iCounter == bSelectedAssignChar ) )
|
||||
{
|
||||
pSoldier = &Menptr[ gCharactersList[ iCounter ].usSolID ];
|
||||
pSoldier = gCharactersList[ iCounter ].usSolID;
|
||||
|
||||
// HEADROCK HAM 3.6: Two different conditions depending on the type of militia being trained.
|
||||
if( ubMilitiaType == TOWN_MILITIA )
|
||||
@@ -1552,7 +1552,7 @@ void BuildListOfUnpaidTrainableSectors( UINT8 ubMilitiaType )
|
||||
else
|
||||
{
|
||||
// handle for tactical
|
||||
pSoldier = &Menptr[ gusUIFullTargetID ];
|
||||
pSoldier = gusUIFullTargetID;
|
||||
iCounter = 0;
|
||||
|
||||
if (ubMilitiaType == TOWN_MILITIA)
|
||||
|
||||
@@ -30,9 +30,9 @@ INT8 SoldierClassToMilitiaRank(UINT8 ubSoldierClass);
|
||||
INT8 MilitiaRankToSoldierClass(UINT8 ubRank);
|
||||
|
||||
// these add, promote, and remove militias of a certain rank
|
||||
void StrategicAddMilitiaToSector(INT16 sMapX, INT16 sMapY, UINT8 ubRank, UINT8 ubHowMany);
|
||||
void StrategicPromoteMilitiaInSector(INT16 sMapX, INT16 sMapY, UINT8 ubCurrentRank, UINT8 ubHowMany);
|
||||
void StrategicRemoveMilitiaFromSector(INT16 sMapX, INT16 sMapY, UINT8 ubRank, UINT8 ubHowMany);
|
||||
void StrategicAddMilitiaToSector(INT16 sMapX, INT16 sMapY, UINT8 ubRank, UINT16 ubHowMany);
|
||||
void StrategicPromoteMilitiaInSector(INT16 sMapX, INT16 sMapY, UINT8 ubCurrentRank, UINT16 ubHowMany);
|
||||
void StrategicRemoveMilitiaFromSector(INT16 sMapX, INT16 sMapY, UINT8 ubRank, UINT16 ubHowMany);
|
||||
|
||||
void StrategicRemoveAllStaticMilitiaFromSector( INT16 sMapX, INT16 sMapY, UINT8 ubRank );
|
||||
|
||||
@@ -49,9 +49,9 @@ UINT8 FindBestMilitiaTrainingLeadershipInSector ( INT16 sMapX, INT16 sMapY, INT8
|
||||
// call this if the player attacks his own militia
|
||||
void HandleMilitiaDefections(INT16 sMapX, INT16 sMapY);
|
||||
|
||||
UINT8 MilitiaInSectorOfRank(INT16 sMapX, INT16 sMapY, UINT8 ubRank);
|
||||
UINT8 MilitiaInSectorOfRankStationary( INT16 sMapX, INT16 sMapY, UINT8 ubRank );
|
||||
UINT8 MilitiaInSectorOfRankInGroups( INT16 sMapX, INT16 sMapY, UINT8 ubRank );
|
||||
UINT16 MilitiaInSectorOfRank(INT16 sMapX, INT16 sMapY, UINT8 ubRank);
|
||||
UINT16 MilitiaInSectorOfRankStationary( INT16 sMapX, INT16 sMapY, UINT8 ubRank );
|
||||
UINT16 MilitiaInSectorOfRankInGroups( INT16 sMapX, INT16 sMapY, UINT8 ubRank );
|
||||
|
||||
// Returns TRUE if sector is under player control, has no enemies in it, and isn't currently in combat mode
|
||||
BOOLEAN SectorOursAndPeaceful( INT16 sMapX, INT16 sMapY, INT8 bMapZ );
|
||||
@@ -135,4 +135,4 @@ FLOAT GetIntel();
|
||||
void AddRaidPersonnel( INT32 aBloodcats, INT32 aZombie, INT32 aBandits );
|
||||
void GetRaidPersonnel( INT32& arBloodcats, INT32& arZombie, INT32& arBandits );
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -19,7 +19,7 @@ extern "C" {
|
||||
#include "connect.h"
|
||||
|
||||
// externals
|
||||
UNDERGROUND_SECTORINFO* NewUndergroundNode( UINT8 ubSectorX, UINT8 ubSectorY, UINT8 ubSectorZ );
|
||||
extern UNDERGROUND_SECTORINFO* NewUndergroundNode( UINT8 ubSectorX, UINT8 ubSectorY, UINT8 ubSectorZ );
|
||||
extern BOOLEAN gfGettingNameFromSaveLoadScreen;
|
||||
|
||||
// helper functions
|
||||
@@ -49,6 +49,21 @@ bool LuaTable::getValue<UINT8>(const char * index, UINT8& value)
|
||||
return false;
|
||||
}
|
||||
|
||||
template <>
|
||||
bool LuaTable::getValue<UINT16>(const char* index, UINT16& value)
|
||||
{
|
||||
int dummy;
|
||||
|
||||
bool b = getValue(index, dummy);
|
||||
if (b)
|
||||
{
|
||||
value = static_cast<UINT16>(dummy);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Calls into Lua script to let build underground sector list.
|
||||
BOOLEAN LuaUnderground::InitializeSectorList()
|
||||
{
|
||||
|
||||
+359
-275
File diff suppressed because it is too large
Load Diff
+10
-6
@@ -123,6 +123,8 @@ struct UILayout_CharList
|
||||
int widthTimeRemaining;
|
||||
};
|
||||
|
||||
extern MOUSE_REGION gMapViewRegion;
|
||||
|
||||
extern BOOLEAN fCharacterInfoPanelDirty;
|
||||
extern BOOLEAN fTeamPanelDirty;
|
||||
extern BOOLEAN fMapPanelDirty;
|
||||
@@ -134,8 +136,10 @@ extern BOOLEAN gfInChangeArrivalSectorMode;
|
||||
|
||||
extern BOOLEAN gfSkyriderEmptyHelpGiven;
|
||||
|
||||
extern std::vector<SOLDIERTYPE*> gSelectedSoldiers;
|
||||
|
||||
BOOLEAN SetInfoChar(UINT8 ubSolId);
|
||||
|
||||
BOOLEAN SetInfoChar(SoldierID ubID);
|
||||
void EndMapScreen( BOOLEAN fDuringFade );
|
||||
void ReBuildCharactersList( void );
|
||||
|
||||
@@ -148,11 +152,11 @@ void ChangeSelectedMapSector( INT16 sMapX, INT16 sMapY, INT8 bMapZ );
|
||||
|
||||
BOOLEAN CanToggleSelectedCharInventory( void );
|
||||
|
||||
BOOLEAN CanExtendContractForCharSlot( INT8 bCharNumber );
|
||||
BOOLEAN CanExtendContractForCharSlot( INT16 bCharNumber );
|
||||
|
||||
void TellPlayerWhyHeCantCompressTime( void );
|
||||
|
||||
void ChangeSelectedInfoChar( INT8 bCharNumber, BOOLEAN fResetSelectedList );
|
||||
void ChangeSelectedInfoChar( INT16 bCharNumber, BOOLEAN fResetSelectedList );
|
||||
|
||||
void MAPEndItemPointer();
|
||||
|
||||
@@ -166,10 +170,10 @@ void CancelChangeArrivalSectorMode( void );
|
||||
|
||||
void ExplainWhySkyriderCantFly( void );
|
||||
|
||||
BOOLEAN CanChangeSleepStatusForCharSlot( INT8 bCharNumber );
|
||||
BOOLEAN CanChangeSleepStatusForCharSlot( INT16 bCharNumber );
|
||||
BOOLEAN CanChangeSleepStatusForSoldier( SOLDIERTYPE *pSoldier );
|
||||
|
||||
BOOLEAN MapCharacterHasAccessibleInventory( INT8 bCharNumber );
|
||||
BOOLEAN MapCharacterHasAccessibleInventory( INT16 bCharNumber );
|
||||
|
||||
// CHRISL: New functions to handle initialization of inventory coordinates
|
||||
BOOLEAN InitializeInvPanelCoordsOld( );
|
||||
@@ -228,4 +232,4 @@ void RetreatBandageCallback( UINT8 ubResult );
|
||||
|
||||
bool isWidescreenUI(void);
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -101,16 +101,16 @@ BOOLEAN HandleStrategicDeath( SOLDIERTYPE *pSoldier )
|
||||
|
||||
void HandleSoldierDeadComments( SOLDIERTYPE *pSoldier )
|
||||
{
|
||||
INT32 cnt = 0;
|
||||
SOLDIERTYPE *pTeamSoldier;
|
||||
INT8 bBuddyIndex;
|
||||
|
||||
// IF IT'S THE SELECTED GUY, MAKE ANOTHER SELECTED!
|
||||
cnt = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID;
|
||||
SoldierID cnt = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID;
|
||||
|
||||
// see if this was the friend of a living merc
|
||||
for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID; cnt++,pTeamSoldier++)
|
||||
for ( ; cnt <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID; ++cnt )
|
||||
{
|
||||
pTeamSoldier = cnt;
|
||||
if ( pTeamSoldier->stats.bLife >= OKLIFE && pTeamSoldier->bActive )
|
||||
{
|
||||
bBuddyIndex = WhichBuddy( pTeamSoldier->ubProfile, pSoldier->ubProfile );
|
||||
|
||||
+81
-75
@@ -184,8 +184,8 @@ BOOLEAN fUsingEdgePointsForStrategicEntry = FALSE;
|
||||
BOOLEAN gfInvalidTraversal = FALSE;
|
||||
BOOLEAN gfLoneEPCAttemptingTraversal = FALSE;
|
||||
BOOLEAN gfRobotWithoutControllerAttemptingTraversal = FALSE;
|
||||
BOOLEAN gubLoneMercAttemptingToAbandonEPCs = 0;
|
||||
INT8 gbPotentiallyAbandonedEPCSlotID = -1;
|
||||
BOOLEAN gubLoneMercAttemptingToAbandonEPCs = 0;
|
||||
SoldierID gbPotentiallyAbandonedEPCSlotID = NOBODY;
|
||||
|
||||
INT8 gbGreenToElitePromotions = 0;
|
||||
INT8 gbGreenToRegPromotions = 0;
|
||||
@@ -1976,7 +1976,7 @@ void GetCurrentWorldSector( INT16 *psMapX, INT16 *psMapY )
|
||||
}
|
||||
|
||||
//not in overhead.h!
|
||||
extern UINT8 NumEnemyInSector( );
|
||||
extern UINT16 NumEnemyInSector( );
|
||||
|
||||
void HandleRPCDescriptionOfSector( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ )
|
||||
{
|
||||
@@ -2140,10 +2140,12 @@ BOOLEAN SetCurrentWorldSector( INT16 sMapX, INT16 sMapY, INT8 bMapZ )
|
||||
// GridNo = NOWHERE, which causes this assertion to fail
|
||||
//CHRISL: There's also an issue with vehicles. Soldiers in any vehicle are considered to be in sGridNo = NOWHERE
|
||||
// This will result in an assertion error, so let's skip the assertion if the merc is assigned to a vehicle
|
||||
if (!(MercPtrs[i]->flags.uiStatusFlags & SOLDIER_DEAD) && MercPtrs[i]->bAssignment != VEHICLE && !SPY_LOCATION(MercPtrs[i]->bAssignment) && MercPtrs[i]->bAssignment != ASSIGNMENT_POW)
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[i];
|
||||
|
||||
if (!(pSoldier->flags.uiStatusFlags & SOLDIER_DEAD) && pSoldier->bAssignment != VEHICLE && !SPY_LOCATION(pSoldier->bAssignment) && pSoldier->bAssignment != ASSIGNMENT_POW)
|
||||
{
|
||||
//Assert( !MercPtrs[i]->bActive || !MercPtrs[i]->bInSector || MercPtrs[i]->sGridNo != NOWHERE || MercPtrs[i]->bVehicleID == iHelicopterVehicleId );
|
||||
Assert( !MercPtrs[i]->bActive || !MercPtrs[i]->bInSector || !TileIsOutOfBounds( MercPtrs[i]->sGridNo ) || MercPtrs[i]->bVehicleID == iHelicopterVehicleId );
|
||||
//Assert( !pSoldier->bActive || !pSoldier->bInSector || pSoldier->sGridNo != NOWHERE || pSoldier->bVehicleID == iHelicopterVehicleId );
|
||||
Assert( !pSoldier->bActive || !pSoldier->bInSector || !TileIsOutOfBounds( pSoldier->sGridNo ) || pSoldier->bVehicleID == iHelicopterVehicleId );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2190,10 +2192,11 @@ BOOLEAN SetCurrentWorldSector( INT16 sMapX, INT16 sMapY, INT8 bMapZ )
|
||||
// GridNo = NOWHERE, which causes this assertion to fail
|
||||
//CHRISL: There's also an issue with vehicles. Soldiers in any vehicle are considered to be in sGridNo = NOWHERE
|
||||
// This will result in an assertion error, so let's skip the assertion if the merc is assigned to a vehicle
|
||||
if (!(MercPtrs[i]->flags.uiStatusFlags & SOLDIER_DEAD) && MercPtrs[i]->bAssignment != VEHICLE && MercPtrs[i]->bAssignment != ASSIGNMENT_POW)
|
||||
SOLDIERTYPE *pSoldier = MercPtrs[i];
|
||||
if (!(pSoldier->flags.uiStatusFlags & SOLDIER_DEAD) && pSoldier->bAssignment != VEHICLE && pSoldier->bAssignment != ASSIGNMENT_POW)
|
||||
{
|
||||
//Assert( !MercPtrs[i]->bActive || !MercPtrs[i]->bInSector || MercPtrs[i]->sGridNo != NOWHERE || MercPtrs[i]->bVehicleID == iHelicopterVehicleId );
|
||||
Assert( !MercPtrs[i]->bActive || !MercPtrs[i]->bInSector || !TileIsOutOfBounds( MercPtrs[i]->sGridNo ) || MercPtrs[i]->bVehicleID == iHelicopterVehicleId );
|
||||
//Assert( !pSoldier->bActive || !pSoldier->bInSector || pSoldier->sGridNo != NOWHERE || pSoldier->bVehicleID == iHelicopterVehicleId );
|
||||
Assert( !pSoldier->bActive || !pSoldier->bInSector || !TileIsOutOfBounds( pSoldier->sGridNo ) || pSoldier->bVehicleID == iHelicopterVehicleId );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2426,15 +2429,15 @@ BOOLEAN MapExists( UINT8 * szFilename )
|
||||
|
||||
void RemoveMercsInSector( )
|
||||
{
|
||||
INT32 cnt;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
|
||||
// IF IT'S THE SELECTED GUY, MAKE ANOTHER SELECTED!
|
||||
cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID;
|
||||
SoldierID cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID;
|
||||
|
||||
// ATE: only for OUR guys.. the rest is taken care of in TrashWorld() when a new sector is added...
|
||||
for ( pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; cnt++, pSoldier++ )
|
||||
for ( ; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++cnt )
|
||||
{
|
||||
pSoldier = cnt;
|
||||
if ( pSoldier->bActive )
|
||||
{
|
||||
pSoldier->RemoveSoldierFromGridNo( );
|
||||
@@ -2695,7 +2698,6 @@ void HandleQuestCodeOnSectorEntry( INT16 sNewSectorX, INT16 sNewSectorY, INT8 bN
|
||||
//UINT8 ubRandomMiner[RANDOM_HEAD_MINERS] = { 106, 156, 157, 158 };
|
||||
//UINT8 ubMiner, ubMinersPlaced, ubMine;
|
||||
UINT8 ubThisMine;
|
||||
UINT8 cnt;
|
||||
SOLDIERTYPE * pSoldier;
|
||||
|
||||
// are we in a mine sector, on the surface?
|
||||
@@ -2780,13 +2782,13 @@ void HandleQuestCodeOnSectorEntry( INT16 sNewSectorX, INT16 sNewSectorY, INT8 bN
|
||||
|
||||
// Check to see if any player merc has the Chalice; if so,
|
||||
// note it as stolen
|
||||
cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID;
|
||||
SoldierID cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID;
|
||||
|
||||
for ( pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++cnt, pSoldier++ )
|
||||
for ( ; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++cnt )
|
||||
{
|
||||
if ( pSoldier->bActive )
|
||||
if ( cnt->bActive )
|
||||
{
|
||||
if ( FindObj( pSoldier, CHALICE ) != ITEM_NOT_FOUND )
|
||||
if ( FindObj( cnt, CHALICE ) != ITEM_NOT_FOUND )
|
||||
{
|
||||
SetFactTrue( FACT_CHALICE_STOLEN );
|
||||
}
|
||||
@@ -2948,7 +2950,6 @@ extern void SetLastTimePlayerWasInSector( );
|
||||
// @calls SetLastTimePlayerWasInSector
|
||||
BOOLEAN EnterSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ )
|
||||
{
|
||||
INT32 i;
|
||||
UNDERGROUND_SECTORINFO *pNode = NULL;
|
||||
CHAR8 bFilename[50];
|
||||
|
||||
@@ -2965,11 +2966,12 @@ BOOLEAN EnterSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ )
|
||||
//@@@Evaluate
|
||||
if ( gfWorldLoaded )
|
||||
{
|
||||
for ( i = gTacticalStatus.Team[CIV_TEAM].bFirstID; i <= gTacticalStatus.Team[CIV_TEAM].bLastID; i++ )
|
||||
for ( SoldierID i = gTacticalStatus.Team[CIV_TEAM].bFirstID; i <= gTacticalStatus.Team[CIV_TEAM].bLastID; ++i )
|
||||
{
|
||||
if ( MercPtrs[i]->bActive && MercPtrs[i]->bInSector )
|
||||
SOLDIERTYPE *pSoldier = i;
|
||||
if ( pSoldier->bActive && pSoldier->bInSector )
|
||||
{
|
||||
SetupProfileInsertionDataForSoldier( MercPtrs[i] );
|
||||
SetupProfileInsertionDataForSoldier( pSoldier );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3095,7 +3097,6 @@ BOOLEAN EnterSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ )
|
||||
|
||||
void UpdateMercsInSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ )
|
||||
{
|
||||
INT32 cnt;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
BOOLEAN fPOWSquadSet = FALSE;
|
||||
UINT8 ubPOWSquad = 0;
|
||||
@@ -3125,8 +3126,9 @@ void UpdateMercsInSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ )
|
||||
|
||||
//if( !(gTacticalStatus.uiFlags & LOADING_SAVED_GAME ) )
|
||||
{
|
||||
for ( cnt = 0, pSoldier = MercPtrs[cnt]; cnt < MAX_NUM_SOLDIERS; ++cnt, ++pSoldier )
|
||||
for ( SoldierID cnt = 0; cnt < MAX_NUM_SOLDIERS; ++cnt )
|
||||
{
|
||||
pSoldier = cnt;
|
||||
if ( gfRestoringEnemySoldiersFromTempFile &&
|
||||
cnt >= gTacticalStatus.Team[ENEMY_TEAM].bFirstID &&
|
||||
cnt <= gTacticalStatus.Team[CREATURE_TEAM].bLastID )
|
||||
@@ -3950,7 +3952,6 @@ UINT8 GetStrategicInsertionDataFromAdjacentMoveDirection( UINT8 ubTacticalDirect
|
||||
|
||||
void JumpIntoAdjacentSector( UINT8 ubTacticalDirection, UINT8 ubJumpCode, INT32 sAdditionalData )//dnl ch56 151009
|
||||
{
|
||||
INT32 cnt;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
SOLDIERTYPE *pValidSoldier = NULL;
|
||||
GROUP *pGroup;
|
||||
@@ -3962,17 +3963,18 @@ void JumpIntoAdjacentSector( UINT8 ubTacticalDirection, UINT8 ubJumpCode, INT32
|
||||
|
||||
// Set initial selected
|
||||
// ATE: moved this towards top...
|
||||
gubPreferredInitialSelectedGuy = (UINT8)gusSelectedSoldier;
|
||||
gubPreferredInitialSelectedGuy = gusSelectedSoldier;
|
||||
|
||||
if ( ubJumpCode == JUMP_ALL_LOAD_NEW || ubJumpCode == JUMP_ALL_NO_LOAD )
|
||||
{
|
||||
// TODO: Check flags to see if we can jump!
|
||||
// Move controllable mercs!
|
||||
cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID;
|
||||
SoldierID cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID;
|
||||
|
||||
// look for all mercs on the same team,
|
||||
for ( pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; cnt++, pSoldier++ )
|
||||
for ( ; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++cnt )
|
||||
{
|
||||
pSoldier = cnt;
|
||||
// If we are controllable
|
||||
if ( OK_CONTROLLABLE_MERC( pSoldier ) && pSoldier->bAssignment == CurrentSquad( ) )
|
||||
{
|
||||
@@ -3993,7 +3995,7 @@ void JumpIntoAdjacentSector( UINT8 ubTacticalDirection, UINT8 ubJumpCode, INT32
|
||||
// This guy should always be 1 ) selected and 2 ) close enough to exit sector to leave
|
||||
if ( gusSelectedSoldier != NOBODY )
|
||||
{
|
||||
pValidSoldier = MercPtrs[gusSelectedSoldier];
|
||||
pValidSoldier = gusSelectedSoldier;
|
||||
ubDirection = GetInsertionDataFromAdjacentMoveDirection( ubTacticalDirection, sAdditionalData );
|
||||
}
|
||||
|
||||
@@ -4210,12 +4212,13 @@ void JumpIntoAdjacentSector( UINT8 ubTacticalDirection, UINT8 ubJumpCode, INT32
|
||||
void JumpIntoEscapedSector(UINT8 ubTacticalDirection)
|
||||
{
|
||||
// Remove any incapacitated mercs from current squads and assign them to new squad
|
||||
UINT32 i = gTacticalStatus.Team[gbPlayerNum].bFirstID;
|
||||
UINT32 const lastID = gTacticalStatus.Team[gbPlayerNum].bLastID;
|
||||
SoldierID id = gTacticalStatus.Team[gbPlayerNum].bFirstID;
|
||||
SoldierID const lastID = gTacticalStatus.Team[gbPlayerNum].bLastID;
|
||||
INT8 currentSquad = -1;
|
||||
|
||||
for (SOLDIERTYPE* pSoldier = MercPtrs[i]; i <= lastID; ++i, ++pSoldier)
|
||||
for ( ; id <= lastID; ++id )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier = id;
|
||||
// Are we not active in sector
|
||||
if (!pSoldier->bActive || !pSoldier->bInSector || pSoldier->stats.bLife >= OKLIFE)
|
||||
{
|
||||
@@ -4829,7 +4832,6 @@ BOOLEAN SoldierOKForSectorExit( SOLDIERTYPE * pSoldier, INT8 bExitDirection, INT
|
||||
//ATE: Returns FALSE if NOBODY is close enough, 1 if ONLY selected guy is and 2 if all on squad are...
|
||||
BOOLEAN OKForSectorExit( INT8 bExitDirection, INT32 usAdditionalData, UINT32 *puiTraverseTimeInMinutes )//dnl ch56 151009
|
||||
{
|
||||
INT32 cnt;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
BOOLEAN fAtLeastOneMercControllable = FALSE;
|
||||
BOOLEAN fOnlySelectedGuy = FALSE;
|
||||
@@ -4839,13 +4841,13 @@ BOOLEAN OKForSectorExit( INT8 bExitDirection, INT32 usAdditionalData, UINT32 *pu
|
||||
UINT8 ubNumMercs = 0, ubNumEPCs = 0;
|
||||
UINT8 ubPlayerControllableMercsInSquad = 0;
|
||||
|
||||
if ( gusSelectedSoldier == NOBODY )
|
||||
if ( gusSelectedSoldier >= NOBODY )
|
||||
{ //must have a selected soldier to be allowed to tactically traverse.
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// anv: vehicles can't use inner exit grids
|
||||
if ( bExitDirection == (-1) && MercPtrs[gusSelectedSoldier]->bAssignment == VEHICLE )
|
||||
if ( bExitDirection == (-1) && gusSelectedSoldier->bAssignment == VEHICLE )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
@@ -4869,14 +4871,15 @@ BOOLEAN OKForSectorExit( INT8 bExitDirection, INT32 usAdditionalData, UINT32 *pu
|
||||
gfInvalidTraversal = FALSE;
|
||||
gfLoneEPCAttemptingTraversal = FALSE;
|
||||
gubLoneMercAttemptingToAbandonEPCs = 0;
|
||||
gbPotentiallyAbandonedEPCSlotID = -1;
|
||||
gbPotentiallyAbandonedEPCSlotID = NOBODY;
|
||||
|
||||
// Look through all mercs and check if they are within range of east end....
|
||||
cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID;
|
||||
SoldierID cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID;
|
||||
|
||||
// look for all mercs on the same team,
|
||||
for ( pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++cnt, ++pSoldier )
|
||||
for ( ; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++cnt )
|
||||
{
|
||||
pSoldier = cnt;
|
||||
// If we are controllable
|
||||
if ( OK_CONTROLLABLE_MERC( pSoldier ) && (pSoldier->bAssignment == CurrentSquad( ) ||
|
||||
(pSoldier->bAssignment == VEHICLE && pSoldier->iVehicleId != iHelicopterVehicleId && GetSoldierStructureForVehicle( pSoldier->iVehicleId )->bAssignment == CurrentSquad( ))) )
|
||||
@@ -4894,7 +4897,7 @@ BOOLEAN OKForSectorExit( INT8 bExitDirection, INT32 usAdditionalData, UINT32 *pu
|
||||
{
|
||||
ubNumEPCs++;
|
||||
//Also record the EPC's slot ID incase we later build a string using the EPC's name.
|
||||
gbPotentiallyAbandonedEPCSlotID = (INT8)cnt;
|
||||
gbPotentiallyAbandonedEPCSlotID = cnt;
|
||||
if ( AM_A_ROBOT( pSoldier ) && !pSoldier->CanRobotBeControlled( ) )
|
||||
{
|
||||
gfRobotWithoutControllerAttemptingTraversal = TRUE;
|
||||
@@ -4959,12 +4962,12 @@ BOOLEAN OKForSectorExit( INT8 bExitDirection, INT32 usAdditionalData, UINT32 *pu
|
||||
// If we are here, at least one guy is controllable in this sector, at least he can go!
|
||||
if ( fAtLeastOneMercControllable )
|
||||
{
|
||||
ubPlayerControllableMercsInSquad = (UINT8)NumberOfPlayerControllableMercsInSquad( MercPtrs[gusSelectedSoldier]->bAssignment );
|
||||
ubPlayerControllableMercsInSquad = (UINT8)NumberOfPlayerControllableMercsInSquad( gusSelectedSoldier->bAssignment );
|
||||
if ( fAtLeastOneMercControllable <= ubPlayerControllableMercsInSquad )
|
||||
{ //if the selected merc is an EPC and we can only leave with that merc, then prevent it
|
||||
//as EPCs aren't allowed to leave by themselves. Instead of restricting this in the
|
||||
//exiting sector gui, we restrict it by explaining it with a message box.
|
||||
if ( AM_AN_EPC( MercPtrs[gusSelectedSoldier] ) )
|
||||
if ( AM_AN_EPC( gusSelectedSoldier ) )
|
||||
{
|
||||
if ( AM_A_ROBOT( pSoldier ) && !pSoldier->CanRobotBeControlled( ) )
|
||||
{
|
||||
@@ -5153,7 +5156,7 @@ void SetSamHackStatus( INT16 sSectorX, INT16 sSectorY, INT8 sStatus )
|
||||
|
||||
BOOLEAN CanGoToTacticalInSector( INT16 sX, INT16 sY, UINT8 ubZ )
|
||||
{
|
||||
INT32 cnt;
|
||||
SoldierID cnt;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
|
||||
// if not a valid sector
|
||||
@@ -5166,8 +5169,9 @@ BOOLEAN CanGoToTacticalInSector( INT16 sX, INT16 sY, UINT8 ubZ )
|
||||
cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
|
||||
// look for all living, fighting mercs on player's team. Robot and EPCs qualify!
|
||||
for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++, pSoldier++)
|
||||
for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt )
|
||||
{
|
||||
pSoldier = cnt;
|
||||
// ARM: now allows loading of sector with all mercs below OKLIFE as long as they're alive
|
||||
if( ( pSoldier->bActive && pSoldier->stats.bLife ) && !( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) &&
|
||||
( pSoldier->bAssignment != IN_TRANSIT ) && ( pSoldier->bAssignment != ASSIGNMENT_POW ) && ( pSoldier->bAssignment != ASSIGNMENT_MINIEVENT ) && ( pSoldier->bAssignment != ASSIGNMENT_REBELCOMMAND ) &&
|
||||
@@ -6426,8 +6430,6 @@ BOOLEAN IsSectorRoad( INT16 sSectorX, INT16 sSectorY )
|
||||
|
||||
BOOLEAN HandleDefiniteUnloadingOfWorld( UINT8 ubUnloadCode )
|
||||
{
|
||||
INT32 i;
|
||||
|
||||
// clear tactical queue
|
||||
ClearEventQueue( );
|
||||
|
||||
@@ -6489,11 +6491,12 @@ BOOLEAN HandleDefiniteUnloadingOfWorld( UINT8 ubUnloadCode )
|
||||
|
||||
//Setup the tactical existance of the current soldier.
|
||||
//@@@Evaluate
|
||||
for ( i = gTacticalStatus.Team[CIV_TEAM].bFirstID; i <= gTacticalStatus.Team[CIV_TEAM].bLastID; i++ )
|
||||
for ( SoldierID i = gTacticalStatus.Team[CIV_TEAM].bFirstID; i <= gTacticalStatus.Team[CIV_TEAM].bLastID; ++i )
|
||||
{
|
||||
if ( MercPtrs[i]->bActive && MercPtrs[i]->bInSector )
|
||||
SOLDIERTYPE *pSoldier = i;
|
||||
if ( pSoldier->bActive && pSoldier->bInSector )
|
||||
{
|
||||
SetupProfileInsertionDataForSoldier( MercPtrs[i] );
|
||||
SetupProfileInsertionDataForSoldier( pSoldier );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6509,21 +6512,23 @@ BOOLEAN HandlePotentialBringUpAutoresolveToFinishBattle( int pSectorX, int pSect
|
||||
{
|
||||
//We don't have mercs in the sector. Now, we check to see if there are BOTH enemies and militia. If both
|
||||
//co-exist in the sector, then make them fight for control of the sector via autoresolve.
|
||||
for ( int i = gTacticalStatus.Team[ENEMY_TEAM].bFirstID; i <= gTacticalStatus.Team[CREATURE_TEAM].bLastID; i++ )
|
||||
for ( SoldierID i = gTacticalStatus.Team[ENEMY_TEAM].bFirstID; i <= gTacticalStatus.Team[CREATURE_TEAM].bLastID; ++i )
|
||||
{
|
||||
if ( MercPtrs[i]->bActive && MercPtrs[i]->stats.bLife )
|
||||
SOLDIERTYPE *pEnemy = i;
|
||||
if ( pEnemy->bActive && pEnemy->stats.bLife )
|
||||
{
|
||||
if ( MercPtrs[i]->sSectorX == pSectorX &&
|
||||
MercPtrs[i]->sSectorY == pSectorY &&
|
||||
MercPtrs[i]->bSectorZ == pSectorZ )
|
||||
if ( pEnemy->sSectorX == pSectorX &&
|
||||
pEnemy->sSectorY == pSectorY &&
|
||||
pEnemy->bSectorZ == pSectorZ )
|
||||
{ //We have enemies, now look for militia!
|
||||
for ( i = gTacticalStatus.Team[MILITIA_TEAM].bFirstID; i <= gTacticalStatus.Team[MILITIA_TEAM].bLastID; i++ )
|
||||
for ( SoldierID j = gTacticalStatus.Team[MILITIA_TEAM].bFirstID; j <= gTacticalStatus.Team[MILITIA_TEAM].bLastID; ++j )
|
||||
{
|
||||
if ( MercPtrs[i]->bActive && MercPtrs[i]->stats.bLife && MercPtrs[i]->bSide == OUR_TEAM )
|
||||
SOLDIERTYPE *pMilitia = j;
|
||||
if ( pMilitia->bActive && pMilitia->stats.bLife && pMilitia->bSide == OUR_TEAM )
|
||||
{
|
||||
if ( MercPtrs[i]->sSectorX == pSectorX &&
|
||||
MercPtrs[i]->sSectorY == pSectorY &&
|
||||
MercPtrs[i]->bSectorZ == pSectorZ )
|
||||
if ( pMilitia->sSectorX == pSectorX &&
|
||||
pMilitia->sSectorY == pSectorY &&
|
||||
pMilitia->bSectorZ == pSectorZ )
|
||||
{ //We have militia and enemies and no mercs! Let's finish this battle in autoresolve.
|
||||
gfEnteringMapScreen = TRUE;
|
||||
gfEnteringMapScreenToEnterPreBattleInterface = TRUE;
|
||||
@@ -6560,7 +6565,6 @@ BOOLEAN HandlePotentialBringUpAutoresolveToFinishBattle( int pSectorX, int pSect
|
||||
|
||||
BOOLEAN CheckAndHandleUnloadingOfCurrentWorld( )
|
||||
{
|
||||
INT32 i;
|
||||
INT16 sBattleSectorX, sBattleSectorY, sBattleSectorZ;
|
||||
|
||||
//Don't bother checking this if we don't have a world loaded.
|
||||
@@ -6585,16 +6589,17 @@ BOOLEAN CheckAndHandleUnloadingOfCurrentWorld( )
|
||||
{ //The user has decided to let the game autoresolve the current battle.
|
||||
if ( gWorldSectorX == sBattleSectorX && gWorldSectorY == sBattleSectorY && gbWorldSectorZ == sBattleSectorZ )
|
||||
{
|
||||
for ( i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; i++ )
|
||||
for ( SoldierID i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i )
|
||||
{ //If we have a live and valid soldier
|
||||
if ( MercPtrs[i]->bActive && MercPtrs[i]->stats.bLife && !MercPtrs[i]->flags.fBetweenSectors && !(MercPtrs[i]->flags.uiStatusFlags & SOLDIER_VEHICLE) && !AM_A_ROBOT( MercPtrs[i] ) && !AM_AN_EPC( MercPtrs[i] ) )
|
||||
SOLDIERTYPE *pSoldier = i;
|
||||
if ( pSoldier->bActive && pSoldier->stats.bLife && !pSoldier->flags.fBetweenSectors && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) && !AM_A_ROBOT( pSoldier ) && !AM_AN_EPC( pSoldier ) )
|
||||
{
|
||||
if ( MercPtrs[i]->sSectorX == gWorldSectorX &&
|
||||
MercPtrs[i]->sSectorY == gWorldSectorY &&
|
||||
MercPtrs[i]->bSectorZ == gbWorldSectorZ )
|
||||
if ( pSoldier->sSectorX == gWorldSectorX &&
|
||||
pSoldier->sSectorY == gWorldSectorY &&
|
||||
pSoldier->bSectorZ == gbWorldSectorZ )
|
||||
{
|
||||
MercPtrs[i]->RemoveSoldierFromGridNo( );
|
||||
InitSoldierOppList( MercPtrs[i] );
|
||||
pSoldier->RemoveSoldierFromGridNo( );
|
||||
InitSoldierOppList( pSoldier );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6602,13 +6607,14 @@ BOOLEAN CheckAndHandleUnloadingOfCurrentWorld( )
|
||||
}
|
||||
else
|
||||
{ //Check and see if we have any live mercs in the sector.
|
||||
for ( i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; i++ )
|
||||
for ( SoldierID i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i )
|
||||
{ //If we have a live and valid soldier
|
||||
if ( MercPtrs[i]->bActive && MercPtrs[i]->stats.bLife && !MercPtrs[i]->flags.fBetweenSectors && MercPtrs[i]->bInSector && !(MercPtrs[i]->flags.uiStatusFlags & SOLDIER_VEHICLE) && !AM_A_ROBOT( MercPtrs[i] ) && !AM_AN_EPC( MercPtrs[i] ) )
|
||||
SOLDIERTYPE *pSoldier = i;
|
||||
if ( pSoldier->bActive && pSoldier->stats.bLife && !pSoldier->flags.fBetweenSectors && pSoldier->bInSector && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) && !AM_A_ROBOT( pSoldier ) && !AM_AN_EPC( pSoldier ) )
|
||||
{
|
||||
if ( MercPtrs[i]->sSectorX == gWorldSectorX &&
|
||||
MercPtrs[i]->sSectorY == gWorldSectorY &&
|
||||
MercPtrs[i]->bSectorZ == gbWorldSectorZ )
|
||||
if ( pSoldier->sSectorX == gWorldSectorX &&
|
||||
pSoldier->sSectorY == gWorldSectorY &&
|
||||
pSoldier->bSectorZ == gbWorldSectorZ )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
@@ -7530,16 +7536,15 @@ void HandleMovingTheEnemiesToBeNearPlayerWhenEnteringComplexMap( )
|
||||
//if the player made a 'noise' going through the gate at the end of the tunnel sector
|
||||
if ( gJa25SaveStruct.uiJa25GeneralFlags & JA_GF__DID_PLAYER_MAKE_SOUND_GOING_THROUGH_TUNNEL_GATE )
|
||||
{
|
||||
UINT8 cnt;
|
||||
|
||||
//
|
||||
//Move some of the enemies to be 'near' them player when the enter the room
|
||||
//
|
||||
|
||||
// Loop through the list and move some of the enemies
|
||||
cnt = gTacticalStatus.Team[ENEMY_TEAM].bFirstID;
|
||||
for ( pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[ENEMY_TEAM].bLastID; cnt++, pSoldier++ )
|
||||
SoldierID cnt = gTacticalStatus.Team[ENEMY_TEAM].bFirstID;
|
||||
for ( ; cnt <= gTacticalStatus.Team[ENEMY_TEAM].bLastID; ++cnt)
|
||||
{
|
||||
pSoldier = cnt;
|
||||
//if the soldier is active,
|
||||
if ( pSoldier->bActive )
|
||||
{
|
||||
@@ -7570,8 +7575,9 @@ void HandleMovingTheEnemiesToBeNearPlayerWhenEnteringComplexMap( )
|
||||
while ( ubNumEnemiesMoved < 3 )
|
||||
{
|
||||
cnt = gTacticalStatus.Team[ENEMY_TEAM].bFirstID;
|
||||
for ( pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[ENEMY_TEAM].bLastID; cnt++, pSoldier++ )
|
||||
for ( ; cnt <= gTacticalStatus.Team[ENEMY_TEAM].bLastID; ++cnt )
|
||||
{
|
||||
pSoldier = cnt;
|
||||
//if the soldier is active,
|
||||
if ( pSoldier->bActive && pSoldier->sGridNo != 15705 && pSoldier->sGridNo != 15712 && pSoldier->sGridNo != 15233 )
|
||||
{
|
||||
|
||||
@@ -210,11 +210,11 @@ BOOLEAN EscapeDirectionIsValid( INT8 * pbDirection );
|
||||
bool IsEscapeDirectionValid(WorldDirections pbDirection);
|
||||
//Used for determining the type of error message that comes up when you can't traverse to
|
||||
//an adjacent sector. THESE VALUES DO NOT NEED TO BE SAVED!
|
||||
extern BOOLEAN gfInvalidTraversal;
|
||||
extern BOOLEAN gfLoneEPCAttemptingTraversal;
|
||||
extern BOOLEAN gfRobotWithoutControllerAttemptingTraversal;
|
||||
extern UINT8 gubLoneMercAttemptingToAbandonEPCs;
|
||||
extern INT8 gbPotentiallyAbandonedEPCSlotID;
|
||||
extern BOOLEAN gfInvalidTraversal;
|
||||
extern BOOLEAN gfLoneEPCAttemptingTraversal;
|
||||
extern BOOLEAN gfRobotWithoutControllerAttemptingTraversal;
|
||||
extern UINT8 gubLoneMercAttemptingToAbandonEPCs;
|
||||
extern SoldierID gbPotentiallyAbandonedEPCSlotID;
|
||||
|
||||
extern INT8 gbGreenToElitePromotions;
|
||||
extern INT8 gbGreenToRegPromotions;
|
||||
|
||||
+40
-38
@@ -79,7 +79,7 @@ typedef struct
|
||||
{
|
||||
BOOLEAN fInAirRaid;
|
||||
BOOLEAN fAirRaidScheduled;
|
||||
UINT8 ubAirRaidMode;
|
||||
UINT8 ubAirRaidMode;
|
||||
UINT32 uiSoundSample;
|
||||
UINT32 uiRaidLastUpdate;
|
||||
BOOLEAN fFadingRaidIn;
|
||||
@@ -87,32 +87,32 @@ typedef struct
|
||||
INT8 bNumDives;
|
||||
INT8 bMaxDives;
|
||||
BOOLEAN fFadingRaidOut;
|
||||
INT16 sDiveX;
|
||||
INT16 sDiveY;
|
||||
INT16 sDiveTargetLocation;
|
||||
UINT8 ubDiveDirection;
|
||||
INT16 sNumGridNosMoved;
|
||||
INT32 iNumTurnsSinceLastDive;
|
||||
INT32 iNumTurnsSinceDiveStarted;
|
||||
INT32 iNumGridNosMovedThisTurn;
|
||||
INT16 sDiveX;
|
||||
INT16 sDiveY;
|
||||
INT16 sDiveTargetLocation;
|
||||
UINT8 ubDiveDirection;
|
||||
INT16 sNumGridNosMoved;
|
||||
INT32 iNumTurnsSinceLastDive;
|
||||
INT32 iNumTurnsSinceDiveStarted;
|
||||
INT32 iNumGridNosMovedThisTurn;
|
||||
BOOLEAN fAirRaidHasHadTurn;
|
||||
UINT8 ubBeginTeamTurn;
|
||||
UINT8 ubBeginTeamTurn;
|
||||
BOOLEAN fHaveTBBatton;
|
||||
AIR_RAID_DEFINITION AirRaidDef;
|
||||
INT16 sRaidSoldierID;
|
||||
SoldierID sRaidSoldierID;
|
||||
|
||||
INT16 sNotLocatedYet;
|
||||
INT32 iNumFrames;
|
||||
INT16 sNotLocatedYet;
|
||||
INT32 iNumFrames;
|
||||
|
||||
INT8 bLevel;
|
||||
INT8 bTeam;
|
||||
INT8 bSide;
|
||||
UINT8 ubAttackerID;
|
||||
SoldierID ubAttackerID;
|
||||
UINT16 usAttackingWeapon;
|
||||
FLOAT dXPos;
|
||||
FLOAT dYPos;
|
||||
INT16 sX;
|
||||
INT16 sY;
|
||||
FLOAT dXPos;
|
||||
FLOAT dYPos;
|
||||
INT16 sX;
|
||||
INT16 sY;
|
||||
INT32 sGridNo;
|
||||
|
||||
|
||||
@@ -187,7 +187,6 @@ void ScheduleAirRaid( AIR_RAID_DEFINITION *pAirRaidDef )
|
||||
|
||||
BOOLEAN BeginAirRaid( )
|
||||
{
|
||||
INT32 cnt=0;
|
||||
BOOLEAN fOK = FALSE;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
gfQuoteSaid = FALSE;
|
||||
@@ -215,9 +214,10 @@ BOOLEAN BeginAirRaid( )
|
||||
// Do we have any guys in here...
|
||||
|
||||
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("BeginAirRaid: check for mercs: first id = %d, last id = %d ",gTacticalStatus.Team[ gbPlayerNum ].bFirstID, gTacticalStatus.Team[ gbPlayerNum ].bLastID));
|
||||
cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
for ( cnt = 0, pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++, pSoldier++)
|
||||
SoldierID cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt )
|
||||
{
|
||||
pSoldier = cnt;
|
||||
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("BeginAirRaid: soldier id = %d, active = %d",pSoldier->ubID,pSoldier->bActive));
|
||||
if ( pSoldier->bActive )
|
||||
{
|
||||
@@ -305,27 +305,27 @@ BOOLEAN BeginAirRaid( )
|
||||
|
||||
INT32 PickLocationNearAnyMercInSector( )
|
||||
{
|
||||
UINT8 ubMercsInSector[ 20 ] = { 0 };
|
||||
UINT8 ubNumMercs = 0;
|
||||
UINT8 ubChosenMerc;
|
||||
UINT16 ubMercsInSector[ 20 ] = { 0 };
|
||||
UINT16 ubNumMercs = 0;
|
||||
UINT16 ubChosenMerc;
|
||||
SOLDIERTYPE *pTeamSoldier;
|
||||
INT32 cnt=0;
|
||||
|
||||
// Loop through all our guys and randomly say one from someone in our sector
|
||||
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,"PickLocationNearAnyMercInSector");
|
||||
|
||||
// set up soldier ptr as first element in mercptrs list
|
||||
cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
SoldierID cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
|
||||
// run through list
|
||||
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("PickLocationNearAnyMercInSector: total guys = %d", gTacticalStatus.Team[ gbPlayerNum ].bLastID));
|
||||
for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++,pTeamSoldier++ )
|
||||
for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt )
|
||||
{
|
||||
pTeamSoldier = cnt;
|
||||
// Add guy if he's a candidate...
|
||||
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("PickLocationNearAnyMercInSector: looping %d",cnt));
|
||||
if ( OK_INSECTOR_MERC( pTeamSoldier ) )
|
||||
{
|
||||
ubMercsInSector[ ubNumMercs ] = (UINT8)cnt;
|
||||
ubMercsInSector[ ubNumMercs ] = (UINT16)cnt;
|
||||
ubNumMercs++;
|
||||
}
|
||||
}
|
||||
@@ -334,7 +334,7 @@ INT32 PickLocationNearAnyMercInSector( )
|
||||
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("PickLocationNearAnyMercInSector: number of guys %d",ubNumMercs));
|
||||
if ( ubNumMercs > 0 )
|
||||
{
|
||||
ubChosenMerc = (UINT8)Random( ubNumMercs );
|
||||
ubChosenMerc = (UINT16)Random( ubNumMercs );
|
||||
|
||||
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("PickLocationNearAnyMercInSector: chosen guy = %d",ubChosenMerc));
|
||||
return( MercPtrs[ ubMercsInSector[ ubChosenMerc ] ]->sGridNo );
|
||||
@@ -1057,9 +1057,10 @@ void HandleAirRaid( )
|
||||
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("HandleAirRaid: check for mercs: first id = %d, last id = %d ",gTacticalStatus.Team[ gbPlayerNum ].bFirstID, gTacticalStatus.Team[ gbPlayerNum ].bLastID));
|
||||
SOLDIERTYPE * pSoldier;
|
||||
BOOLEAN fOK = FALSE;
|
||||
int cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
for ( cnt = 0, pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++, pSoldier++)
|
||||
SoldierID cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt )
|
||||
{
|
||||
pSoldier = cnt;
|
||||
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("HandleAirRaid: soldier id = %d, active = %d",pSoldier->ubID,pSoldier->bActive));
|
||||
if ( pSoldier->bActive )
|
||||
{
|
||||
@@ -1349,7 +1350,7 @@ BOOLEAN SaveAirRaidInfoToSaveGameFile( HWFILE hFile )
|
||||
//// sAirRaidSaveStruct.sRaidSoldierID = gpRaidSoldier->ubID;
|
||||
// }
|
||||
// else
|
||||
sAirRaidSaveStruct.sRaidSoldierID = -1;
|
||||
sAirRaidSaveStruct.sRaidSoldierID = NOBODY;
|
||||
|
||||
|
||||
memcpy( &sAirRaidSaveStruct.AirRaidDef, &gAirRaidDef, sizeof( AIR_RAID_DEFINITION ) );
|
||||
@@ -1407,9 +1408,9 @@ BOOLEAN LoadAirRaidInfoFromSaveGameFile( HWFILE hFile )
|
||||
giNumFrames = sAirRaidSaveStruct.iNumFrames;
|
||||
|
||||
|
||||
if( sAirRaidSaveStruct.sRaidSoldierID != -1 )
|
||||
if( sAirRaidSaveStruct.sRaidSoldierID != NOBODY )
|
||||
{
|
||||
gpRaidSoldier = &Menptr[ sAirRaidSaveStruct.sRaidSoldierID ];
|
||||
gpRaidSoldier = sAirRaidSaveStruct.sRaidSoldierID;
|
||||
|
||||
gpRaidSoldier->pathing.bLevel = sAirRaidSaveStruct.bLevel;
|
||||
gpRaidSoldier->bTeam = sAirRaidSaveStruct.bTeam;
|
||||
@@ -1447,12 +1448,12 @@ void EndAirRaid( )
|
||||
if ( !gTacticalStatus.Team[ ENEMY_TEAM ].bTeamActive && !gTacticalStatus.Team[ CREATURE_TEAM ].bTeamActive )
|
||||
{
|
||||
SOLDIERTYPE * pTeamSoldier;
|
||||
INT32 cnt;
|
||||
|
||||
// Loop through all militia and restore them to peaceful status
|
||||
cnt = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID;
|
||||
for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; cnt++,pTeamSoldier++)
|
||||
SoldierID cnt = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID;
|
||||
for ( ; cnt <= gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; ++cnt )
|
||||
{
|
||||
pTeamSoldier = cnt;
|
||||
if ( pTeamSoldier->bActive && pTeamSoldier->bInSector )
|
||||
{
|
||||
pTeamSoldier->aiData.bAlertStatus = STATUS_GREEN;
|
||||
@@ -1462,8 +1463,9 @@ void EndAirRaid( )
|
||||
|
||||
cnt = gTacticalStatus.Team[ CIV_TEAM ].bFirstID;
|
||||
// Loop through all civs and restore them to peaceful status
|
||||
for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; cnt++,pTeamSoldier++)
|
||||
for ( ; cnt <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ++cnt )
|
||||
{
|
||||
pTeamSoldier = cnt;
|
||||
if ( pTeamSoldier->bActive && pTeamSoldier->bInSector )
|
||||
{
|
||||
pTeamSoldier->aiData.bAlertStatus = STATUS_GREEN;
|
||||
|
||||
@@ -20,16 +20,16 @@ void DetermineOptimumAnimationCacheSize( )
|
||||
guiCacheSize = MIN_CACHE_SIZE;
|
||||
}
|
||||
|
||||
BOOLEAN InitAnimationCache( UINT16 usSoldierID, AnimationSurfaceCacheType *pAnimCache )
|
||||
BOOLEAN InitAnimationCache( SoldierID usSoldierID, AnimationSurfaceCacheType *pAnimCache )
|
||||
{
|
||||
UINT32 cnt;
|
||||
|
||||
// Allocate entries
|
||||
AnimDebugMsg( String( "*** Initializing anim cache surface for soldier %d", usSoldierID ) );
|
||||
AnimDebugMsg( String( "*** Initializing anim cache surface for soldier %d", usSoldierID.i ) );
|
||||
pAnimCache->usCachedSurfaces = (UINT16 *) MemAlloc( sizeof( UINT16 ) * guiCacheSize );
|
||||
CHECKF( pAnimCache->usCachedSurfaces!= NULL );
|
||||
|
||||
AnimDebugMsg( String( "*** Initializing anim cache hit counter for soldier %d", usSoldierID ) );
|
||||
AnimDebugMsg( String( "*** Initializing anim cache hit counter for soldier %d", usSoldierID.i ) );
|
||||
pAnimCache->sCacheHits = (INT16 *) MemAlloc( sizeof( UINT16) * guiCacheSize );
|
||||
CHECKF( pAnimCache->sCacheHits!= NULL );
|
||||
|
||||
@@ -41,13 +41,13 @@ BOOLEAN InitAnimationCache( UINT16 usSoldierID, AnimationSurfaceCacheType *pAnim
|
||||
}
|
||||
pAnimCache->ubCacheSize = 0;
|
||||
|
||||
// Zero surface databse history for this soldeir
|
||||
// Zero surface database history for this soldier
|
||||
ClearAnimationSurfacesUsageHistory( usSoldierID );
|
||||
|
||||
return( TRUE );
|
||||
}
|
||||
|
||||
void DeleteAnimationCache( UINT16 usSoldierID, AnimationSurfaceCacheType *pAnimCache )
|
||||
void DeleteAnimationCache( SoldierID usSoldierID, AnimationSurfaceCacheType *pAnimCache )
|
||||
{
|
||||
// Allocate entries
|
||||
if ( pAnimCache->usCachedSurfaces!= NULL )
|
||||
@@ -64,7 +64,7 @@ void DeleteAnimationCache( UINT16 usSoldierID, AnimationSurfaceCacheType *pAnimC
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN GetCachedAnimationSurface( UINT16 usSoldierID, AnimationSurfaceCacheType *pAnimCache, UINT16 usSurfaceIndex, UINT16 usCurrentAnimation )
|
||||
BOOLEAN GetCachedAnimationSurface( SoldierID usSoldierID, AnimationSurfaceCacheType *pAnimCache, UINT16 usSurfaceIndex, UINT16 usCurrentAnimation )
|
||||
{
|
||||
UINT8 cnt;
|
||||
UINT8 ubLowestIndex = 0;
|
||||
@@ -89,7 +89,7 @@ BOOLEAN GetCachedAnimationSurface( UINT16 usSoldierID, AnimationSurfaceCacheType
|
||||
AnimDebugMsg( String( "Anim Cache: Determining Bump Candidate ( Soldier %d )", usSoldierID ) );
|
||||
|
||||
// Determine exisiting surface used by merc
|
||||
usCurrentAnimSurface = DetermineSoldierAnimationSurface( MercPtrs[ usSoldierID ], usCurrentAnimation );
|
||||
usCurrentAnimSurface = DetermineSoldierAnimationSurface( usSoldierID, usCurrentAnimation );
|
||||
// If the surface we are going to bump is our existing animation, reject it as a candidate
|
||||
|
||||
// If we get here, we need to remove an animation, pick the best one
|
||||
@@ -142,11 +142,11 @@ BOOLEAN GetCachedAnimationSurface( UINT16 usSoldierID, AnimationSurfaceCacheType
|
||||
}
|
||||
|
||||
return( TRUE );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void UnLoadCachedAnimationSurfaces( UINT16 usSoldierID, AnimationSurfaceCacheType *pAnimCache )
|
||||
void UnLoadCachedAnimationSurfaces( SoldierID usSoldierID, AnimationSurfaceCacheType *pAnimCache )
|
||||
{
|
||||
UINT8 cnt;
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#ifndef __ANIMATION_CACHE_H
|
||||
#define __ANIMATION_CACHE_H
|
||||
|
||||
#include "types.h"
|
||||
#include "Overhead Types.h"
|
||||
|
||||
#define MAX_CACHE_SIZE 20
|
||||
//#define MIN_CACHE_SIZE 2
|
||||
@@ -18,12 +18,12 @@ typedef struct
|
||||
|
||||
extern UINT32 guiCacheSize;
|
||||
|
||||
BOOLEAN GetCachedAnimationSurface( UINT16 usSoldierID, AnimationSurfaceCacheType *pAnimCache, UINT16 usSurfaceIndex, UINT16 usCurrentAnimation );
|
||||
BOOLEAN InitAnimationCache( UINT16 usSoldierID, AnimationSurfaceCacheType *pAnimCache );
|
||||
void DeleteAnimationCache( UINT16 usSoldierID, AnimationSurfaceCacheType *pAnimCache );
|
||||
BOOLEAN GetCachedAnimationSurface( SoldierID usSoldierID, AnimationSurfaceCacheType *pAnimCache, UINT16 usSurfaceIndex, UINT16 usCurrentAnimation );
|
||||
BOOLEAN InitAnimationCache( SoldierID usSoldierID, AnimationSurfaceCacheType *pAnimCache );
|
||||
void DeleteAnimationCache( SoldierID usSoldierID, AnimationSurfaceCacheType *pAnimCache );
|
||||
void DetermineOptimumAnimationCacheSize( );
|
||||
void UnLoadCachedAnimationSurfaces( UINT16 usSoldierID, AnimationSurfaceCacheType *pAnimCache );
|
||||
void UnLoadCachedAnimationSurfaces( SoldierID usSoldierID, AnimationSurfaceCacheType *pAnimCache );
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
+11
-11
@@ -913,7 +913,7 @@ BOOLEAN DeInitAnimationSystem( )
|
||||
|
||||
|
||||
|
||||
STRUCTURE_FILE_REF *InternalGetAnimationStructureRef( UINT8 usSoldierID, UINT16 usSurfaceIndex, UINT16 usAnimState, BOOLEAN fUseAbsolute )
|
||||
STRUCTURE_FILE_REF *InternalGetAnimationStructureRef( SoldierID usSoldierID, UINT16 usSurfaceIndex, UINT16 usAnimState, BOOLEAN fUseAbsolute )
|
||||
{
|
||||
INT8 bStructDataType;
|
||||
|
||||
@@ -935,26 +935,26 @@ STRUCTURE_FILE_REF *InternalGetAnimationStructureRef( UINT8 usSoldierID, UINT16
|
||||
if ( ( usAnimState == FALLFORWARD_FROMHIT_STAND || usAnimState == GENERIC_HIT_STAND ||
|
||||
usAnimState == FALLFORWARD_FROMHIT_CROUCH || usAnimState == STANDING_BURST_HIT ) && !fUseAbsolute )
|
||||
{
|
||||
return( gAnimStructureDatabase[ MercPtrs[ usSoldierID ]->ubBodyType ][ S_STRUCT ].pStructureFileRef );
|
||||
return( gAnimStructureDatabase[ usSoldierID->ubBodyType ][ S_STRUCT ].pStructureFileRef );
|
||||
}
|
||||
|
||||
return( gAnimStructureDatabase[ MercPtrs[ usSoldierID ]->ubBodyType ][ bStructDataType ].pStructureFileRef );
|
||||
return( gAnimStructureDatabase[ usSoldierID->ubBodyType ][ bStructDataType ].pStructureFileRef );
|
||||
}
|
||||
|
||||
|
||||
STRUCTURE_FILE_REF *GetAnimationStructureRef( UINT8 usSoldierID, UINT16 usSurfaceIndex, UINT16 usAnimState )
|
||||
STRUCTURE_FILE_REF *GetAnimationStructureRef( SoldierID usSoldierID, UINT16 usSurfaceIndex, UINT16 usAnimState )
|
||||
{
|
||||
return( InternalGetAnimationStructureRef( usSoldierID, usSurfaceIndex, usAnimState, FALSE ) );
|
||||
}
|
||||
|
||||
|
||||
STRUCTURE_FILE_REF *GetDefaultStructureRef( UINT8 usSoldierID )
|
||||
STRUCTURE_FILE_REF *GetDefaultStructureRef( SoldierID usSoldierID )
|
||||
{
|
||||
return( gAnimStructureDatabase[ MercPtrs[ usSoldierID ]->ubBodyType ][ DEFAULT_STRUCT ].pStructureFileRef );
|
||||
return( gAnimStructureDatabase[ usSoldierID->ubBodyType ][ DEFAULT_STRUCT ].pStructureFileRef );
|
||||
}
|
||||
|
||||
// Surface mamagement functions
|
||||
BOOLEAN LoadAnimationSurface( UINT16 usSoldierID, UINT16 usSurfaceIndex, UINT16 usAnimState )
|
||||
// Surface management functions
|
||||
BOOLEAN LoadAnimationSurface( SoldierID usSoldierID, UINT16 usSurfaceIndex, UINT16 usAnimState )
|
||||
{
|
||||
AuxObjectData *pAuxData;
|
||||
|
||||
@@ -1022,7 +1022,7 @@ BOOLEAN LoadAnimationSurface( UINT16 usSoldierID, UINT16 usSurfaceIndex, UINT16
|
||||
}
|
||||
|
||||
// get structure data if any
|
||||
pStructureFileRef = InternalGetAnimationStructureRef( (UINT8)usSoldierID, usSurfaceIndex, usAnimState, TRUE );
|
||||
pStructureFileRef = InternalGetAnimationStructureRef( usSoldierID, usSurfaceIndex, usAnimState, TRUE );
|
||||
|
||||
if ( pStructureFileRef != NULL )
|
||||
{
|
||||
@@ -1075,7 +1075,7 @@ BOOLEAN LoadAnimationSurface( UINT16 usSoldierID, UINT16 usSurfaceIndex, UINT16
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN UnLoadAnimationSurface( UINT16 usSoldierID, UINT16 usSurfaceIndex )
|
||||
BOOLEAN UnLoadAnimationSurface( SoldierID usSoldierID, UINT16 usSurfaceIndex )
|
||||
{
|
||||
// Decrement usage flag, only if this soldier has it currently tagged
|
||||
if ( gbAnimUsageHistory[ usSurfaceIndex ][ usSoldierID ] > 0 )
|
||||
@@ -1120,7 +1120,7 @@ BOOLEAN UnLoadAnimationSurface( UINT16 usSoldierID, UINT16 usSurfaceIndex )
|
||||
|
||||
}
|
||||
|
||||
void ClearAnimationSurfacesUsageHistory( UINT16 usSoldierID )
|
||||
void ClearAnimationSurfacesUsageHistory( SoldierID usSoldierID )
|
||||
{
|
||||
UINT32 cnt;
|
||||
|
||||
|
||||
@@ -688,16 +688,16 @@ extern AnimationStructureType gAnimStructureDatabase[ TOTALBODYTYPES ][ NUM_STRU
|
||||
// Functions
|
||||
BOOLEAN InitAnimationSystem( );
|
||||
BOOLEAN DeInitAnimationSystem( );
|
||||
BOOLEAN LoadAnimationSurface( UINT16 usSoldierID, UINT16 usSurfaceIndex, UINT16 usAnimState );
|
||||
BOOLEAN UnLoadAnimationSurface( UINT16 usSoldierID, UINT16 usSurfaceIndex );
|
||||
void ClearAnimationSurfacesUsageHistory( UINT16 usSoldierID );
|
||||
BOOLEAN LoadAnimationSurface( SoldierID usSoldierID, UINT16 usSurfaceIndex, UINT16 usAnimState );
|
||||
BOOLEAN UnLoadAnimationSurface( SoldierID usSoldierID, UINT16 usSurfaceIndex );
|
||||
void ClearAnimationSurfacesUsageHistory( SoldierID usSoldierID );
|
||||
|
||||
|
||||
void DeleteAnimationProfiles( );
|
||||
BOOLEAN LoadAnimationProfiles( );
|
||||
|
||||
STRUCTURE_FILE_REF *GetAnimationStructureRef( UINT8 usSoldierID, UINT16 usSurfaceIndex, UINT16 usAnimState );
|
||||
STRUCTURE_FILE_REF *GetDefaultStructureRef( UINT8 usSoldierID );
|
||||
STRUCTURE_FILE_REF *GetAnimationStructureRef( SoldierID usSoldierID, UINT16 usSurfaceIndex, UINT16 usAnimState );
|
||||
STRUCTURE_FILE_REF *GetDefaultStructureRef( SoldierID usSoldierID );
|
||||
|
||||
// Profile data
|
||||
extern ANIM_PROF *gpAnimProfiles;
|
||||
|
||||
@@ -1699,7 +1699,7 @@ void RemoveRandomItemFromArmsDealerInventory( UINT8 ubArmsDealer, UINT16 usItemI
|
||||
}
|
||||
|
||||
|
||||
BOOLEAN AddDeadArmsDealerItemsToWorld( UINT8 usProfileID, UINT8 aMercID )
|
||||
BOOLEAN AddDeadArmsDealerItemsToWorld( UINT8 usProfileID, SoldierID aMercID )
|
||||
{
|
||||
//Get Dealer ID from from merc Id
|
||||
INT8 bArmsDealer = GetArmsDealerIDFromMercID( usProfileID );
|
||||
@@ -1710,7 +1710,7 @@ BOOLEAN AddDeadArmsDealerItemsToWorld( UINT8 usProfileID, UINT8 aMercID )
|
||||
// not if this isn't a proper profile
|
||||
if ( usProfileID == NO_PROFILE )
|
||||
{
|
||||
pSoldier = MercPtrs[aMercID];
|
||||
pSoldier = aMercID;
|
||||
|
||||
if ( pSoldier && pSoldier->sNonNPCTraderID > 0 )
|
||||
bArmsDealer = pSoldier->sNonNPCTraderID;
|
||||
|
||||
@@ -366,7 +366,7 @@ UINT32 GetTimeToFixItemBeingRepaired( UINT8 ubArmsDealer, UINT16 usItemIndex, UI
|
||||
BOOLEAN CanDealerTransactItem( UINT8 ubArmsDealer, UINT16 usItemIndex, BOOLEAN fPurchaseFromPlayer );
|
||||
BOOLEAN CanDealerRepairItem( UINT8 ubArmsDealer, UINT16 usItemIndex );
|
||||
|
||||
BOOLEAN AddDeadArmsDealerItemsToWorld( UINT8 usProfileID, UINT8 aMercID );
|
||||
BOOLEAN AddDeadArmsDealerItemsToWorld( UINT8 usProfileID, SoldierID aMercID );
|
||||
|
||||
void MakeObjectOutOfDealerItems( DEALER_SPECIAL_ITEM *pSpclItemInfo, OBJECTTYPE *pObject );
|
||||
void CreateObjectForDealer( int usItem, int status, int numObjects, OBJECTTYPE *pObject );
|
||||
@@ -393,4 +393,4 @@ extern void GuaranteeAtLeastXItemsOfIndex( UINT8 ubArmsDealer, UINT16 usItemInd
|
||||
extern void GuaranteeAtMostNumOfItemsForItem( UINT8 ubArmsDealer, INT16 sItemIndex, UINT8 ubAtMostNumItems );
|
||||
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
+73
-81
@@ -85,14 +85,12 @@ BOOLEAN RemoveFacesForAutoBandage( void );
|
||||
|
||||
extern BOOLEAN CanCharacterAutoBandageTeammate( SOLDIERTYPE *pSoldier );
|
||||
extern BOOLEAN CanCharacterBeAutoBandagedByTeammate( SOLDIERTYPE *pSoldier );
|
||||
extern UINT8 NumEnemyInSector( );
|
||||
extern UINT16 NumEnemyInSector( );
|
||||
|
||||
void BeginAutoBandage( )
|
||||
{
|
||||
INT32 cnt;
|
||||
BOOLEAN fFoundAGuy = FALSE;
|
||||
SOLDIERTYPE * pSoldier;
|
||||
BOOLEAN fFoundAMedKit = FALSE;
|
||||
BOOLEAN fFoundAGuy = FALSE;
|
||||
BOOLEAN fFoundAMedKit = FALSE;
|
||||
|
||||
// If we are in combat, we con't...
|
||||
if ( (gTacticalStatus.uiFlags & INCOMBAT) || (NumEnemyInSector() != 0) )
|
||||
@@ -101,21 +99,21 @@ void BeginAutoBandage( )
|
||||
return;
|
||||
}
|
||||
|
||||
cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
SoldierID soldier = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
// check for anyone needing bandages
|
||||
for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt, ++pSoldier )
|
||||
for ( ; soldier <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++soldier )
|
||||
{
|
||||
// if the soldier isn't active or in sector, we have problems..leave
|
||||
if ( !(pSoldier->bActive) || !(pSoldier->bInSector) || ( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) || (pSoldier->bAssignment == VEHICLE ) )
|
||||
if ( !(soldier->bActive) || !(soldier->bInSector) || ( soldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) || (soldier->bAssignment == VEHICLE ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// can this character be helped out by a teammate?
|
||||
if ( CanCharacterBeAutoBandagedByTeammate( pSoldier ) )
|
||||
if ( CanCharacterBeAutoBandagedByTeammate( soldier ) )
|
||||
fFoundAGuy = TRUE;
|
||||
|
||||
if ( FindObjClass( pSoldier, IC_MEDKIT ) != NO_SLOT )
|
||||
if ( FindObjClass( soldier, IC_MEDKIT ) != NO_SLOT )
|
||||
fFoundAMedKit = TRUE;
|
||||
|
||||
if ( fFoundAGuy && fFoundAMedKit )
|
||||
@@ -155,9 +153,6 @@ void BeginAutoBandage( )
|
||||
|
||||
void HandleAutoBandagePending( )
|
||||
{
|
||||
INT32 cnt;
|
||||
SOLDIERTYPE *pSoldier = NULL;
|
||||
|
||||
// OK, if we have a pending autobandage....
|
||||
// check some conditions
|
||||
if ( gTacticalStatus.fAutoBandagePending )
|
||||
@@ -176,15 +171,15 @@ void HandleAutoBandagePending( )
|
||||
}
|
||||
|
||||
// Do any guys have pending actions...?
|
||||
cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID;
|
||||
for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++cnt, ++pSoldier)
|
||||
SoldierID soldier = gTacticalStatus.Team[ OUR_TEAM ].bFirstID;
|
||||
for ( ; soldier <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++soldier)
|
||||
{
|
||||
// Are we in sector?
|
||||
if ( pSoldier->bActive )
|
||||
if ( soldier->bActive )
|
||||
{
|
||||
if ( pSoldier->sSectorX == gWorldSectorX && pSoldier->sSectorY == gWorldSectorY && pSoldier->bSectorZ == gbWorldSectorZ && !pSoldier->flags.fBetweenSectors )
|
||||
if ( soldier->sSectorX == gWorldSectorX && soldier->sSectorY == gWorldSectorY && soldier->bSectorZ == gbWorldSectorZ && !soldier->flags.fBetweenSectors )
|
||||
{
|
||||
if ( pSoldier->aiData.ubPendingAction != NO_PENDING_ACTION )
|
||||
if ( soldier->aiData.ubPendingAction != NO_PENDING_ACTION )
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -246,14 +241,14 @@ BOOLEAN HandleAutoBandage( )
|
||||
ShadowVideoSurfaceRect( FRAME_BUFFER, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT );
|
||||
InvalidateScreen( );
|
||||
RefreshScreen( NULL );
|
||||
INT32 cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID;
|
||||
SOLDIERTYPE *pSoldier = NULL;
|
||||
for (pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++cnt, ++pSoldier)
|
||||
|
||||
SoldierID soldier = gTacticalStatus.Team[OUR_TEAM].bFirstID;
|
||||
for ( ; soldier <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++soldier)
|
||||
{
|
||||
if(pSoldier->bActive && pSoldier->bInSector && pSoldier->aiData.bAction != 0)
|
||||
if(soldier->bActive && soldier->bInSector && soldier->aiData.bAction != 0)
|
||||
{
|
||||
//shadooow: this fixes autobandaging sometimes hang indefinitely
|
||||
pSoldier->aiData.bAction = 0;
|
||||
soldier->aiData.bAction = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -310,15 +305,13 @@ BOOLEAN HandleAutoBandage( )
|
||||
|
||||
BOOLEAN CreateAutoBandageString( void )
|
||||
{
|
||||
INT32 cnt;
|
||||
// WDS - make number of mercenaries, etc. be configurable
|
||||
UINT8 ubDoctor[CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS], ubDoctors = 0;
|
||||
UINT16 ubDoctor[CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS], ubDoctors = 0;
|
||||
UINT32 uiDoctorNameStringLength = 1; // for end-of-string character
|
||||
STR16 sTemp;
|
||||
SOLDIERTYPE * pSoldier;
|
||||
|
||||
cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID;
|
||||
for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++cnt, ++pSoldier)
|
||||
SoldierID pSoldier = gTacticalStatus.Team[ OUR_TEAM ].bFirstID;
|
||||
for ( ; pSoldier <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++pSoldier )
|
||||
{
|
||||
if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife >= OKLIFE && !(pSoldier->bCollapsed) && pSoldier->stats.bMedical > 0 && FindObjClass( pSoldier, IC_MEDKIT ) != NO_SLOT)
|
||||
{
|
||||
@@ -364,7 +357,7 @@ BOOLEAN CreateAutoBandageString( void )
|
||||
return( FALSE );
|
||||
}
|
||||
wcscpy( sTemp, L"" );
|
||||
for (cnt = 0; cnt < ubDoctors - 1; ++cnt)
|
||||
for (UINT16 cnt = 0; cnt < ubDoctors - 1; ++cnt)
|
||||
{
|
||||
wcscat( sTemp, MercPtrs[ubDoctor[cnt]]->name );
|
||||
if (ubDoctors > 2)
|
||||
@@ -394,10 +387,7 @@ void SetAutoBandageComplete( void )
|
||||
|
||||
void AutoBandage( BOOLEAN fStart )
|
||||
{
|
||||
SGPRect aRect;
|
||||
UINT8 ubLoop;
|
||||
INT32 cnt;
|
||||
SOLDIERTYPE * pSoldier;
|
||||
SGPRect aRect;
|
||||
|
||||
if ( fStart )
|
||||
{
|
||||
@@ -417,8 +407,8 @@ void AutoBandage( BOOLEAN fStart )
|
||||
// Compress time...
|
||||
//SetGameTimeCompressionLevel( TIME_COMPRESS_5MINS );
|
||||
|
||||
cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID;
|
||||
for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++cnt, ++pSoldier)
|
||||
SoldierID pSoldier = gTacticalStatus.Team[ OUR_TEAM ].bFirstID;
|
||||
for ( ; pSoldier <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++pSoldier)
|
||||
{
|
||||
if ( pSoldier->bActive )
|
||||
{
|
||||
@@ -456,11 +446,11 @@ void AutoBandage( BOOLEAN fStart )
|
||||
gTacticalStatus.uiFlags &= ( ~OUR_MERCS_AUTO_MOVE );
|
||||
|
||||
// make sure anyone under AI control has their action cancelled
|
||||
cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID;
|
||||
for ( pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++cnt, ++pSoldier )
|
||||
SoldierID pSoldier = gTacticalStatus.Team[ OUR_TEAM ].bFirstID;
|
||||
for ( ; pSoldier <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++pSoldier )
|
||||
{
|
||||
// 0verhaul: Make sure the merc is also in the sector before making him stand up!
|
||||
if (pSoldier && pSoldier->bActive && pSoldier->bInSector)
|
||||
if (pSoldier->bActive && pSoldier->bInSector)
|
||||
{
|
||||
ActionDone( pSoldier );
|
||||
if ( pSoldier->bSlotItemTakenFrom != NO_SLOT )
|
||||
@@ -480,11 +470,10 @@ void AutoBandage( BOOLEAN fStart )
|
||||
}
|
||||
}
|
||||
|
||||
ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
for ( ; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++ubLoop)
|
||||
pSoldier = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
for ( ; pSoldier <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++pSoldier )
|
||||
{
|
||||
pSoldier = MercPtrs[ubLoop];
|
||||
if (pSoldier && pSoldier->bActive && pSoldier->bInSector)
|
||||
if ( pSoldier->bActive && pSoldier->bInSector)
|
||||
{
|
||||
ActionDone(pSoldier);
|
||||
|
||||
@@ -553,7 +542,6 @@ void BeginAutoBandageCallBack( UINT8 bExitValue )
|
||||
|
||||
void SetUpAutoBandageUpdatePanel( void )
|
||||
{
|
||||
|
||||
INT32 iNumberDoctoring = 0;
|
||||
INT32 iNumberPatienting = 0;
|
||||
INT32 iNumberOnTeam = 0;
|
||||
@@ -574,24 +562,21 @@ void SetUpAutoBandageUpdatePanel( void )
|
||||
// grab number of potential grunts on players team
|
||||
iNumberOnTeam = gTacticalStatus.Team[ gbPlayerNum ].bLastID;
|
||||
|
||||
// run through mercs on squad...if they can doctor, add to list
|
||||
// run through mercs on squad...if they can be a doctor or patient, add to list
|
||||
for( iCounterA = 0; iCounterA < iNumberOnTeam; iCounterA++ )
|
||||
{
|
||||
if( CanCharacterAutoBandageTeammate( &Menptr[ iCounterA ] ) )
|
||||
SOLDIERTYPE *pSoldier = &Menptr[iCounterA];
|
||||
|
||||
if( CanCharacterAutoBandageTeammate( pSoldier ))
|
||||
{
|
||||
// add to list, up the count
|
||||
iDoctorList[ iNumberDoctoring ] = iCounterA;
|
||||
iNumberDoctoring++;
|
||||
}
|
||||
}
|
||||
|
||||
// run through mercs on squad, if they can patient, add to list
|
||||
for( iCounterA = 0; iCounterA < iNumberOnTeam; iCounterA++ )
|
||||
{
|
||||
if( CanCharacterBeAutoBandagedByTeammate( &Menptr[ iCounterA ] ) )
|
||||
if ( CanCharacterBeAutoBandagedByTeammate( pSoldier ) )
|
||||
{
|
||||
// add to list, up the count
|
||||
iPatientList[ iNumberPatienting ] = iCounterA;
|
||||
iPatientList[iNumberPatienting] = iCounterA;
|
||||
iNumberPatienting++;
|
||||
}
|
||||
}
|
||||
@@ -1028,7 +1013,7 @@ BOOLEAN AddFacesToAutoBandageBox( void )
|
||||
INT32 iCounter = 0;
|
||||
INT32 iNumberOfDoctors = 0;
|
||||
VOBJECT_DESC VObjectDesc;
|
||||
|
||||
const MERCPROFILESTRUCT *profile;
|
||||
|
||||
// WDS - make number of mercenaries, etc. be configurable
|
||||
// reset
|
||||
@@ -1044,21 +1029,24 @@ BOOLEAN AddFacesToAutoBandageBox( void )
|
||||
// find a free slot
|
||||
if( iDoctorList[ iCounter ] != -1 )
|
||||
{
|
||||
if( gMercProfiles[ ( Menptr[ iDoctorList[ iCounter ] ] ).ubProfile ].ubFaceIndex < 100 )
|
||||
profile = &gMercProfiles[(Menptr[iDoctorList[iCounter]]).ubProfile];
|
||||
const UINT8 face = profile->ubFaceIndex;
|
||||
|
||||
if( face < 100 )
|
||||
{
|
||||
// grab filename of face
|
||||
if ((iDoctorList[ iCounter ] != -1) && gMercProfiles[( Menptr[iDoctorList[iCounter]] ).ubProfile].Type == PROFILETYPE_IMP )
|
||||
sprintf( VObjectDesc.ImageFile, "IMPFaces\\65Face\\%02d.sti", gMercProfiles[ ( Menptr[ iDoctorList[ iCounter ] ] ).ubProfile ].ubFaceIndex );
|
||||
if ( profile->Type == PROFILETYPE_IMP )
|
||||
sprintf( VObjectDesc.ImageFile, "IMPFaces\\65Face\\%02d.sti", face );
|
||||
else
|
||||
sprintf( VObjectDesc.ImageFile, "Faces\\65Face\\%02d.sti", gMercProfiles[ ( Menptr[ iDoctorList[ iCounter ] ] ).ubProfile ].ubFaceIndex );
|
||||
sprintf( VObjectDesc.ImageFile, "Faces\\65Face\\%02d.sti", face );
|
||||
}
|
||||
else
|
||||
{
|
||||
// grab filename of face
|
||||
if ((iDoctorList[ iCounter ] != -1) && gMercProfiles[( Menptr[iDoctorList[iCounter]] ).ubProfile].Type == PROFILETYPE_IMP )
|
||||
sprintf( VObjectDesc.ImageFile, "IMPFaces\\65Face\\%03d.sti", gMercProfiles[ ( Menptr[ iDoctorList[ iCounter ] ] ).ubProfile ].ubFaceIndex );
|
||||
if ( profile->Type == PROFILETYPE_IMP )
|
||||
sprintf( VObjectDesc.ImageFile, "IMPFaces\\65Face\\%03d.sti", face );
|
||||
else
|
||||
sprintf( VObjectDesc.ImageFile, "Faces\\65Face\\%03d.sti", gMercProfiles[ ( Menptr[ iDoctorList[ iCounter ] ] ).ubProfile ].ubFaceIndex );
|
||||
sprintf( VObjectDesc.ImageFile, "Faces\\65Face\\%03d.sti", face );
|
||||
}
|
||||
|
||||
// load the face
|
||||
@@ -1077,21 +1065,24 @@ BOOLEAN AddFacesToAutoBandageBox( void )
|
||||
// find a free slot
|
||||
if( iPatientList[ iCounter ] != -1 )
|
||||
{
|
||||
if( gMercProfiles[ ( Menptr[ iPatientList[ iCounter ] ] ).ubProfile ].ubFaceIndex < 100 )
|
||||
profile = &gMercProfiles[(Menptr[iPatientList[iCounter]]).ubProfile];
|
||||
const UINT8 face = profile->ubFaceIndex;
|
||||
|
||||
if( face < 100 )
|
||||
{
|
||||
// grab filename of face
|
||||
if ((iPatientList[ iCounter ] != -1) && gMercProfiles[( Menptr[iPatientList[iCounter]] ).ubProfile].Type == PROFILETYPE_IMP )
|
||||
sprintf( VObjectDesc.ImageFile, "IMPFaces\\65Face\\%02d.sti", gMercProfiles[ ( Menptr[ iPatientList[ iCounter ] ] ).ubProfile ].ubFaceIndex );
|
||||
if ( profile->Type == PROFILETYPE_IMP )
|
||||
sprintf( VObjectDesc.ImageFile, "IMPFaces\\65Face\\%02d.sti", face );
|
||||
else
|
||||
sprintf( VObjectDesc.ImageFile, "Faces\\65Face\\%02d.sti", gMercProfiles[ ( Menptr[ iPatientList[ iCounter ] ] ).ubProfile ].ubFaceIndex );
|
||||
sprintf( VObjectDesc.ImageFile, "Faces\\65Face\\%02d.sti", face );
|
||||
}
|
||||
else
|
||||
{
|
||||
// grab filename of face
|
||||
if ( (iPatientList[ iCounter ] != -1) && gMercProfiles[( Menptr[iPatientList[iCounter]] ).ubProfile].Type == PROFILETYPE_IMP )
|
||||
sprintf( VObjectDesc.ImageFile, "IMPFaces\\65Face\\%03d.sti", gMercProfiles[ ( Menptr[ iPatientList[ iCounter ] ] ).ubProfile ].ubFaceIndex );
|
||||
if ( profile->Type == PROFILETYPE_IMP )
|
||||
sprintf( VObjectDesc.ImageFile, "IMPFaces\\65Face\\%03d.sti", face );
|
||||
else
|
||||
sprintf( VObjectDesc.ImageFile, "Faces\\65Face\\%03d.sti", gMercProfiles[ ( Menptr[ iPatientList[ iCounter ] ] ).ubProfile ].ubFaceIndex );
|
||||
sprintf( VObjectDesc.ImageFile, "Faces\\65Face\\%03d.sti", face );
|
||||
}
|
||||
|
||||
// load the face
|
||||
@@ -1233,15 +1224,15 @@ BOOLEAN RetreatBandagingPending()
|
||||
}
|
||||
|
||||
// return the ID of best doctor that has a medkit and is travelling with pPatient
|
||||
UINT16 GetBestRetreatingMercDoctor( SOLDIERTYPE* pPatient )
|
||||
SoldierID GetBestRetreatingMercDoctor( SOLDIERTYPE* pPatient )
|
||||
{
|
||||
// if this is a travelling, bleeding merc, can somebody who travels with him bandage him/her?
|
||||
if ( pPatient && pPatient->bActive && pPatient->flags.fBetweenSectors && pPatient->bBleeding )
|
||||
{
|
||||
UINT16 cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID;
|
||||
SOLDIERTYPE* pSoldier = NULL;
|
||||
for ( pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++cnt, ++pSoldier )
|
||||
SoldierID ID = gTacticalStatus.Team[OUR_TEAM].bFirstID;
|
||||
for ( ; ID <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++ID )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier = ID;
|
||||
// this requires mercs to travel and thus NOT be in a sector
|
||||
// also we need to be in a specific sector
|
||||
if ( pSoldier->bActive && pSoldier->flags.fBetweenSectors && pSoldier->sSectorX == pPatient->sSectorX && pSoldier->sSectorY == pPatient->sSectorY )
|
||||
@@ -1249,7 +1240,7 @@ UINT16 GetBestRetreatingMercDoctor( SOLDIERTYPE* pPatient )
|
||||
// find the best conscious doctor that has a medkit
|
||||
if ( pSoldier->stats.bLife >= OKLIFE && pSoldier->stats.bMedical > 0 && FindObjClass( pSoldier, IC_MEDKIT ) != NO_SLOT )
|
||||
{
|
||||
return cnt;
|
||||
return ID;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1278,12 +1269,12 @@ void HandleRetreatBandaging()
|
||||
BOOLEAN needhelpinsector = FALSE;
|
||||
INT16 sX = -1;
|
||||
INT16 sY = -1;
|
||||
UINT16 possiblepatient = NOBODY;
|
||||
SoldierID possiblepatient = NOBODY;
|
||||
|
||||
UINT16 cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID;
|
||||
SOLDIERTYPE* pSoldier = NULL;
|
||||
for ( pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++cnt, ++pSoldier )
|
||||
SoldierID ID = gTacticalStatus.Team[OUR_TEAM].bFirstID;
|
||||
for ( ; ID <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++ID )
|
||||
{
|
||||
SOLDIERTYPE* pSoldier = ID;
|
||||
// this requires mercs to travel and thus NOT be in a sector
|
||||
// are we bleeding?
|
||||
if ( pSoldier->bActive && pSoldier->flags.fBetweenSectors && pSoldier->bBleeding )
|
||||
@@ -1327,7 +1318,7 @@ void HandleRetreatBandaging()
|
||||
needhelpinsector = TRUE;
|
||||
sX = pSoldier->sSectorX;
|
||||
sY = pSoldier->sSectorY;
|
||||
possiblepatient = cnt;
|
||||
possiblepatient = ID;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1336,16 +1327,17 @@ void HandleRetreatBandaging()
|
||||
if ( needhelpinsector && possiblepatient != NOBODY)
|
||||
{
|
||||
// find the best doctor here
|
||||
UINT16 bestdoctorid = GetBestRetreatingMercDoctor( MercPtrs[possiblepatient] );
|
||||
SoldierID bestdoctorid = GetBestRetreatingMercDoctor( MercPtrs[possiblepatient] );
|
||||
|
||||
if ( bestdoctorid != NOBODY )
|
||||
{
|
||||
// have the doctor treat people
|
||||
SOLDIERTYPE* pDoctor = MercPtrs[bestdoctorid];
|
||||
SOLDIERTYPE* pDoctor = bestdoctorid;
|
||||
|
||||
cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID;
|
||||
for ( pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++cnt, ++pSoldier )
|
||||
SoldierID ID = gTacticalStatus.Team[OUR_TEAM].bFirstID;
|
||||
for ( ; ID <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++ID)
|
||||
{
|
||||
SOLDIERTYPE *pSoldier = ID;
|
||||
// this requires mercs to travel and thus NOT be in a sector
|
||||
// also we need to be in a specific sector
|
||||
// treat bleeding people only
|
||||
|
||||
@@ -21,8 +21,8 @@ void SetRetreatBandaging( BOOLEAN aVal );
|
||||
BOOLEAN RetreatBandagingPending( );
|
||||
|
||||
// return the ID of best doctor that has a medkit and is travelling with pPatient
|
||||
UINT16 GetBestRetreatingMercDoctor( SOLDIERTYPE* pPatient );
|
||||
SoldierID GetBestRetreatingMercDoctor( SOLDIERTYPE* pPatient );
|
||||
|
||||
void HandleRetreatBandaging( );
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
+23
-26
@@ -23,13 +23,13 @@
|
||||
#include "message.h"
|
||||
#include "GameSettings.h" // added by SANDRO
|
||||
|
||||
INT32 gsBoxerGridNo[ NUM_BOXERS ] = { 11393, 11233, 11073 };
|
||||
UINT8 gubBoxerID[ NUM_BOXERS ] = { NOBODY, NOBODY, NOBODY };
|
||||
BOOLEAN gfBoxerFought[ NUM_BOXERS ] = { FALSE, FALSE, FALSE };
|
||||
BOOLEAN gfLastBoxingMatchWonByPlayer = FALSE;
|
||||
UINT8 gubBoxingMatchesWon = 0;
|
||||
UINT8 gubBoxersRests = 0;
|
||||
BOOLEAN gfBoxersResting = FALSE;
|
||||
INT32 gsBoxerGridNo[ NUM_BOXERS ] = { 11393, 11233, 11073 };
|
||||
SoldierID gubBoxerID[ NUM_BOXERS ] = { NOBODY, NOBODY, NOBODY };
|
||||
BOOLEAN gfBoxerFought[ NUM_BOXERS ] = { FALSE, FALSE, FALSE };
|
||||
BOOLEAN gfLastBoxingMatchWonByPlayer = FALSE;
|
||||
UINT8 gubBoxingMatchesWon = 0;
|
||||
UINT8 gubBoxersRests = 0;
|
||||
BOOLEAN gfBoxersResting = FALSE;
|
||||
|
||||
extern void RecalculateOppCntsDueToBecomingNeutral( SOLDIERTYPE * pSoldier );
|
||||
|
||||
@@ -326,8 +326,8 @@ void CountPeopleInBoxingRingAndDoActions( void )
|
||||
|
||||
BOOLEAN CheckOnBoxers( void )
|
||||
{
|
||||
UINT32 uiLoop;
|
||||
UINT8 ubID;
|
||||
UINT32 uiLoop;
|
||||
SoldierID ubID;
|
||||
|
||||
// repick boxer IDs every time
|
||||
if ( gubBoxerID[0] == NOBODY )
|
||||
@@ -337,15 +337,15 @@ BOOLEAN CheckOnBoxers( void )
|
||||
{
|
||||
ubID = WhoIsThere2( gsBoxerGridNo[ uiLoop ], 0 );
|
||||
|
||||
// WANNE: Safty check!
|
||||
// WANNE: Safety check!
|
||||
if (ubID < TOTAL_SOLDIERS)
|
||||
{
|
||||
if ( FindObjClass( MercPtrs[ ubID ], IC_WEAPON ) == NO_SLOT &&
|
||||
IS_MERC_BODY_TYPE( MercPtrs[ ubID ] ) )
|
||||
if ( FindObjClass( ubID, IC_WEAPON ) == NO_SLOT &&
|
||||
IS_MERC_BODY_TYPE( ubID ) )
|
||||
{
|
||||
// no weapon and not a civilian so this guy is a boxer
|
||||
gubBoxerID[ uiLoop ] = ubID;
|
||||
DebugQuestInfo(String("CheckOnBoxers: set gubBoxerID[%d] %d", ubID, gubBoxerID[uiLoop]));
|
||||
DebugQuestInfo(String("CheckOnBoxers: set gubBoxerID[%d] to %d", uiLoop, ubID.i));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -375,8 +375,8 @@ BOOLEAN BoxerExists( void )
|
||||
|
||||
BOOLEAN PickABoxer( void )
|
||||
{
|
||||
UINT32 uiLoop;
|
||||
SOLDIERTYPE* pBoxer;
|
||||
UINT32 uiLoop;
|
||||
SOLDIERTYPE *pBoxer;
|
||||
|
||||
for( uiLoop = 0; uiLoop < NUM_BOXERS; ++uiLoop )
|
||||
{
|
||||
@@ -385,11 +385,11 @@ BOOLEAN PickABoxer( void )
|
||||
if ( gfBoxerFought[ uiLoop ] )
|
||||
{
|
||||
// pathetic attempt to prevent multiple AI boxers
|
||||
MercPtrs[ gubBoxerID[ uiLoop ] ]->DeleteBoxingFlag();
|
||||
gubBoxerID[ uiLoop ]->DeleteBoxingFlag();
|
||||
}
|
||||
else
|
||||
{
|
||||
pBoxer = MercPtrs[ gubBoxerID[ uiLoop ] ];
|
||||
pBoxer = gubBoxerID[ uiLoop ];
|
||||
// pick this boxer!
|
||||
if ( pBoxer->bActive && pBoxer->bInSector && pBoxer->stats.bLife >= OKLIFE )
|
||||
{
|
||||
@@ -446,7 +446,7 @@ BOOLEAN BoxerAvailable( void )
|
||||
{
|
||||
if ( gubBoxerID[ ubLoop ] != NOBODY && !gfBoxerFought[ ubLoop ] )
|
||||
{
|
||||
if( MercPtrs[ gubBoxerID[ ubLoop ] ]->bActive && MercPtrs[ gubBoxerID[ ubLoop ] ]->bInSector && MercPtrs[ gubBoxerID[ ubLoop ] ]->stats.bLife >= OKLIFE )
|
||||
if( gubBoxerID[ ubLoop ]->bActive && gubBoxerID[ ubLoop ]->bInSector && gubBoxerID[ ubLoop ]->stats.bLife >= OKLIFE )
|
||||
return( TRUE );
|
||||
}
|
||||
}
|
||||
@@ -458,13 +458,13 @@ BOOLEAN BoxerAvailable( void )
|
||||
// SEQUEL FIGHT. Maybe we could check Kingpin's location instead!
|
||||
UINT8 BoxersAvailable( void )
|
||||
{
|
||||
UINT8 ubCount = 0;
|
||||
UINT8 ubCount = 0;
|
||||
|
||||
for (UINT8 ubLoop = 0; ubLoop < NUM_BOXERS; ++ubLoop)
|
||||
{
|
||||
if ( gubBoxerID[ ubLoop ] != NOBODY && !gfBoxerFought[ ubLoop ] )
|
||||
{
|
||||
if( MercPtrs[ gubBoxerID[ ubLoop ] ]->bActive && MercPtrs[ gubBoxerID[ ubLoop ] ]->bInSector && MercPtrs[ gubBoxerID[ ubLoop ] ]->stats.bLife >= OKLIFE )
|
||||
if( gubBoxerID[ ubLoop ]->bActive && gubBoxerID[ ubLoop ]->bInSector && gubBoxerID[ ubLoop ]->stats.bLife >= OKLIFE )
|
||||
++ubCount;
|
||||
}
|
||||
}
|
||||
@@ -478,9 +478,7 @@ BOOLEAN AnotherFightPossible( void )
|
||||
// a player has at least OKLIFE + 5 life
|
||||
|
||||
// and at least one fight HAS occurred
|
||||
UINT8 ubLoop;
|
||||
SOLDIERTYPE * pSoldier;
|
||||
UINT8 ubAvailable;
|
||||
UINT8 ubAvailable;
|
||||
|
||||
ubAvailable = BoxersAvailable();
|
||||
|
||||
@@ -490,9 +488,8 @@ BOOLEAN AnotherFightPossible( void )
|
||||
}
|
||||
|
||||
// Loop through all mercs on player team
|
||||
ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
pSoldier = MercPtrs[ ubLoop ];
|
||||
for ( ; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++ubLoop, pSoldier++ )
|
||||
SoldierID pSoldier = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
|
||||
for ( ; pSoldier <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++pSoldier )
|
||||
{
|
||||
if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife > (OKLIFE + 5) && !pSoldier->bCollapsed )
|
||||
{
|
||||
|
||||
+9
-9
@@ -19,14 +19,14 @@ enum DisqualificationReasons
|
||||
BAD_ATTACK
|
||||
} ;
|
||||
|
||||
extern INT32 gsBoxerGridNo[ NUM_BOXERS ];
|
||||
extern UINT8 gubBoxerID[ NUM_BOXERS ];
|
||||
extern BOOLEAN gfBoxerFought[ NUM_BOXERS ];
|
||||
extern INT8 gbBoxingState;
|
||||
extern BOOLEAN gfLastBoxingMatchWonByPlayer;
|
||||
extern UINT8 gubBoxingMatchesWon;
|
||||
extern UINT8 gubBoxersRests;
|
||||
extern BOOLEAN gfBoxersResting;
|
||||
extern INT32 gsBoxerGridNo[ NUM_BOXERS ];
|
||||
extern SoldierID gubBoxerID[ NUM_BOXERS ];
|
||||
extern BOOLEAN gfBoxerFought[ NUM_BOXERS ];
|
||||
extern INT8 gbBoxingState;
|
||||
extern BOOLEAN gfLastBoxingMatchWonByPlayer;
|
||||
extern UINT8 gubBoxingMatchesWon;
|
||||
extern UINT8 gubBoxersRests;
|
||||
extern BOOLEAN gfBoxersResting;
|
||||
|
||||
extern void BoxingPlayerDisqualified( SOLDIERTYPE * pOffender, INT8 bReason );
|
||||
extern BOOLEAN PickABoxer( void );
|
||||
@@ -43,4 +43,4 @@ extern BOOLEAN BoxerExists( void );
|
||||
extern UINT8 CountPeopleInBoxingRing( void );
|
||||
extern void ClearAllBoxerFlags( void );
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
+33
-33
@@ -30,49 +30,49 @@ typedef struct
|
||||
LEVELNODE* pNodes[BULLET_TRACER_MAX_LENGTH];
|
||||
//afp-end
|
||||
INT32 iBullet;
|
||||
UINT8 ubFirerID;
|
||||
UINT8 ubTargetID;
|
||||
INT8 bStartCubesAboveLevelZ;
|
||||
INT8 bEndCubesAboveLevelZ;
|
||||
INT32 sGridNo;
|
||||
SoldierID ubFirerID;
|
||||
SoldierID ubTargetID;
|
||||
INT8 bStartCubesAboveLevelZ;
|
||||
INT8 bEndCubesAboveLevelZ;
|
||||
INT32 sGridNo;
|
||||
INT16 sUnused;
|
||||
UINT16 usLastStructureHit;
|
||||
FIXEDPT qCurrX;
|
||||
FIXEDPT qCurrY;
|
||||
FIXEDPT qCurrZ;
|
||||
FIXEDPT qIncrX;
|
||||
FIXEDPT qIncrY;
|
||||
FIXEDPT qIncrZ;
|
||||
DOUBLE ddHorizAngle;
|
||||
UINT16 usLastStructureHit;
|
||||
FIXEDPT qCurrX;
|
||||
FIXEDPT qCurrY;
|
||||
FIXEDPT qCurrZ;
|
||||
FIXEDPT qIncrX;
|
||||
FIXEDPT qIncrY;
|
||||
FIXEDPT qIncrZ;
|
||||
DOUBLE ddHorizAngle;
|
||||
INT32 iCurrTileX;
|
||||
INT32 iCurrTileY;
|
||||
INT8 bLOSIndexX;
|
||||
INT8 bLOSIndexY;
|
||||
BOOLEAN fCheckForRoof;
|
||||
INT8 bLOSIndexX;
|
||||
INT8 bLOSIndexY;
|
||||
BOOLEAN fCheckForRoof;
|
||||
INT32 iCurrCubesZ;
|
||||
INT32 iLoop;
|
||||
BOOLEAN fAllocated;
|
||||
BOOLEAN fToDelete;
|
||||
BOOLEAN fLocated;
|
||||
BOOLEAN fReal;
|
||||
BOOLEAN fAimed;
|
||||
UINT32 uiLastUpdate;
|
||||
BOOLEAN fAllocated;
|
||||
BOOLEAN fToDelete;
|
||||
BOOLEAN fLocated;
|
||||
BOOLEAN fReal;
|
||||
BOOLEAN fAimed;
|
||||
UINT32 uiLastUpdate;
|
||||
UINT8 ubTilesPerUpdate;
|
||||
UINT16 usClockTicksPerUpdate;
|
||||
SOLDIERTYPE *pFirer; // Flugente: WARNING! We cannot assume this will be valid. Check wether ubFirerID is NOBODY first
|
||||
INT32 sOrigGridNo; // HEADROCK HAM 5.1: Original tile does not necessarily have to be the pFirer's tile
|
||||
INT32 sTargetGridNo;
|
||||
UINT16 usClockTicksPerUpdate;
|
||||
SOLDIERTYPE *pFirer; // Flugente: WARNING! We cannot assume this will be valid. Check wether ubFirerID is NOBODY first
|
||||
INT32 sOrigGridNo; // HEADROCK HAM 5.1: Original tile does not necessarily have to be the pFirer's tile
|
||||
INT32 sTargetGridNo;
|
||||
INT16 sHitBy;
|
||||
INT32 iImpact;
|
||||
INT32 iImpactReduction;
|
||||
INT32 iRange;
|
||||
INT32 iDistanceLimit;
|
||||
UINT16 usFlags;
|
||||
ANITILE *pAniTile;
|
||||
ANITILE *pShadowAniTile;
|
||||
UINT16 usFlags;
|
||||
ANITILE *pAniTile;
|
||||
ANITILE *pShadowAniTile;
|
||||
UINT16 ubItemStatus;
|
||||
UINT16 fromItem;
|
||||
INT32 flash;
|
||||
UINT16 fromItem;
|
||||
INT32 flash;
|
||||
// HEADROCK HAM B2.5: Experimental bullet tracer info. If the new tracer system is activated, this flag tells
|
||||
// the bullet animation functions to create a lightpath for this bullet. This means now all bullets in a tracer
|
||||
// magazine will cause a lightshow (that's the intended result).
|
||||
@@ -83,7 +83,7 @@ typedef struct
|
||||
|
||||
extern UINT32 guiNumBullets;
|
||||
|
||||
INT32 CreateBullet( UINT8 ubFirer, BOOLEAN fFake, UINT16 usFlags,UINT16 fromItem );
|
||||
INT32 CreateBullet( SoldierID ubFirerID, BOOLEAN fFake, UINT16 usFlags,UINT16 fromItem );
|
||||
void RemoveBullet( INT32 iBullet );
|
||||
void StopBullet( INT32 iBullet );
|
||||
void UpdateBullets( );
|
||||
@@ -107,4 +107,4 @@ BOOLEAN SaveBulletStructureToSaveGameFile( HWFILE hFile );
|
||||
BOOLEAN LoadBulletStructureFromSavedGameFile( HWFILE hFile );
|
||||
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -1836,13 +1836,9 @@ void TestDumpStatChanges(void)
|
||||
|
||||
void AwardExperienceBonusToActiveSquad( UINT8 ubExpBonusType )
|
||||
{
|
||||
UINT16 usXPs = 0;
|
||||
UINT8 ubGuynum;
|
||||
SOLDIERTYPE *pSoldier;
|
||||
|
||||
|
||||
Assert ( ubExpBonusType < NUM_EXP_BONUS_TYPES );
|
||||
|
||||
UINT16 usXPs = 0;
|
||||
switch ( ubExpBonusType )
|
||||
{
|
||||
case EXP_BONUS_MINIMUM: usXPs = 25; break;
|
||||
@@ -1853,9 +1849,9 @@ void AwardExperienceBonusToActiveSquad( UINT8 ubExpBonusType )
|
||||
}
|
||||
|
||||
// to do: find guys in sector on the currently active squad, those that are conscious get this amount in XPs
|
||||
for ( ubGuynum = gTacticalStatus.Team[ gbPlayerNum ].bFirstID, pSoldier = MercPtrs[ ubGuynum ];
|
||||
ubGuynum <= gTacticalStatus.Team[ gbPlayerNum ].bLastID;
|
||||
ubGuynum++, pSoldier++ )
|
||||
for ( SoldierID pSoldier = gTacticalStatus.Team[ gbPlayerNum ].bFirstID ;
|
||||
pSoldier <= gTacticalStatus.Team[ gbPlayerNum ].bLastID;
|
||||
++pSoldier)
|
||||
{
|
||||
if ( pSoldier->bActive && pSoldier->bInSector && IsMercOnCurrentSquad( pSoldier ) && ( pSoldier->stats.bLife >= CONSCIOUSNESS ) &&
|
||||
!( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) && !AM_A_ROBOT( pSoldier ) )
|
||||
|
||||
@@ -1093,9 +1093,8 @@ BOOLEAN LoadCivQuotesFromLoadGameFile( HWFILE hFile )
|
||||
return( TRUE );
|
||||
}
|
||||
//--------------------------------------------------------------
|
||||
|
||||
// anv: start enemy taunt with probabilty depending on taunt settings
|
||||
void PossiblyStartEnemyTaunt( SOLDIERTYPE *pCiv, TAUNTTYPE iTauntType, UINT32 uiTargetID )
|
||||
void PossiblyStartEnemyTaunt( SOLDIERTYPE *pCiv, TAUNTTYPE iTauntType, SoldierID uiTargetID )
|
||||
{
|
||||
SOLDIERTYPE *pTarget = NULL;
|
||||
if( uiTargetID != NOBODY )
|
||||
@@ -2309,7 +2308,7 @@ BOOLEAN PlayVoiceTaunt(SOLDIERTYPE *pCiv, TAUNTTYPE iTauntType, SOLDIERTYPE *pTa
|
||||
if ((OutFile = fopen("VoiceTauntLog.txt", "a+t")) != NULL)
|
||||
{
|
||||
fprintf(OutFile, "Soldier [%d] TauntType %d %s\n",
|
||||
pCiv->ubID,
|
||||
pCiv->ubID.i,
|
||||
iTauntType,
|
||||
filename);
|
||||
fclose(OutFile);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user