From 1f0a8f46e81cd27e2259b00a2758d61672ed61dc Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 10 Oct 2022 10:08:44 +0300 Subject: [PATCH 001/192] Import changes from the local SVN working copy --- Editor/EditorMercs.cpp | 6 +- GameVersion.h | 3 +- Laptop/BobbyRGuns.cpp | 6 +- Laptop/LaptopSave.h | 2 +- Laptop/insurance Contract.cpp | 20 +- Laptop/insurance Contract.h | 2 +- Multiplayer/client.cpp | 85 +++--- Multiplayer/connect.h | 30 +- Multiplayer/fresh_header.h | 4 +- SaveLoadGame.cpp | 275 ++++-------------- SaveLoadGame.h | 5 +- Strategic/AI Viewer.cpp | 2 +- Strategic/Assignments.cpp | 19 +- Strategic/Auto Resolve.cpp | 8 +- Strategic/Game Event Hook.cpp | 4 +- Strategic/LuaInitNPCs.cpp | 126 ++++---- Strategic/LuaInitNPCs.h | 9 +- Strategic/Map Screen Helicopter.cpp | 2 +- .../Map Screen Interface Map Inventory.cpp | 2 +- Strategic/Map Screen Interface Map.cpp | 10 +- Strategic/Map Screen Interface Map.h | 10 +- Strategic/Map Screen Interface.cpp | 134 +++++---- Strategic/Map Screen Interface.h | 4 +- Strategic/Merc Contract.cpp | 18 +- Strategic/Merc Contract.h | 4 +- Strategic/PreBattle Interface.cpp | 2 +- Strategic/Queen Command.cpp | 4 +- Strategic/Quest Debug System.cpp | 11 +- Strategic/Quests.cpp | 20 +- Strategic/Quests.h | 4 +- Strategic/Scheduling.cpp | 2 +- Strategic/Scheduling.h | 2 +- Strategic/Strategic Event Handler.cpp | 2 +- Strategic/Strategic Merc Handler.cpp | 27 +- Strategic/Strategic Merc Handler.h | 4 +- Strategic/Strategic Mines.cpp | 2 +- Strategic/Strategic Movement.cpp | 2 +- Strategic/Strategic Movement.h | 2 +- Strategic/Strategic Town Loyalty.cpp | 12 +- Strategic/Strategic_VS2019.vcxproj | 20 +- Strategic/Strategic_VS2019.vcxproj.user | 4 + Strategic/mapscreen.cpp | 72 ++--- Strategic/mapscreen.h | 6 +- Strategic/strategicmap.cpp | 6 +- Tactical/Air Raid.cpp | 12 +- Tactical/Animation Data.cpp | 6 +- Tactical/Animation Data.h | 4 +- Tactical/Arms Dealer Init.cpp | 2 +- Tactical/Arms Dealer Init.h | 2 +- Tactical/Auto Bandage.cpp | 6 +- Tactical/Boxing.cpp | 10 +- Tactical/Boxing.h | 2 +- Tactical/Bullets.h | 6 +- Tactical/Campaign.cpp | 2 +- Tactical/Civ Quotes.cpp | 3 +- Tactical/Dialogue Control.cpp | 50 ++-- Tactical/DynamicDialogue.cpp | 5 +- Tactical/DynamicDialogue.h | 2 +- Tactical/End Game.cpp | 6 +- Tactical/Faces.cpp | 18 +- Tactical/Food.cpp | 14 +- Tactical/Handle Doors.cpp | 4 +- Tactical/Handle Items.cpp | 50 ++-- Tactical/Handle Items.h | 8 +- Tactical/Handle UI Plan.cpp | 6 +- Tactical/Handle UI.cpp | 49 ++-- Tactical/Handle UI.h | 16 +- Tactical/Interface Control.cpp | 2 +- Tactical/Interface Dialogue.cpp | 22 +- Tactical/Interface Items.cpp | 22 +- Tactical/Interface Items.h | 3 +- Tactical/Interface Panels.cpp | 78 ++--- Tactical/Interface Panels.h | 20 +- Tactical/Interface Utils.cpp | 2 +- Tactical/Interface.cpp | 34 +-- Tactical/Interface.h | 10 +- Tactical/Item Types.cpp | 2 +- Tactical/Item Types.h | 4 +- Tactical/Items.cpp | 10 +- Tactical/Items.h | 2 +- Tactical/LOS.cpp | 12 +- Tactical/LOS.h | 4 +- Tactical/Merc Entering.cpp | 8 +- Tactical/Merc Hiring.cpp | 16 +- Tactical/Merc Hiring.h | 4 +- Tactical/Militia Control.cpp | 19 +- Tactical/Morale.cpp | 9 +- Tactical/Overhead Types.h | 25 +- Tactical/Overhead.cpp | 247 ++++++++-------- Tactical/Overhead.h | 45 ++- Tactical/PATHAI.cpp | 2 +- Tactical/Real Time Input.cpp | 8 +- Tactical/Rotting Corpses.cpp | 8 +- Tactical/ShopKeeper Interface.cpp | 18 +- Tactical/ShopKeeper Interface.h | 2 +- Tactical/SkillMenu.cpp | 4 +- Tactical/Soldier Add.cpp | 14 +- Tactical/Soldier Add.h | 6 +- Tactical/Soldier Ani.cpp | 37 ++- Tactical/Soldier Control.cpp | 82 +++--- Tactical/Soldier Control.h | 43 ++- Tactical/Soldier Create.cpp | 59 ++-- Tactical/Soldier Create.h | 2 +- Tactical/Soldier Find.cpp | 12 +- Tactical/Soldier Find.h | 2 +- Tactical/Soldier Init List.cpp | 40 +-- Tactical/Soldier Init List.h | 2 +- Tactical/Soldier Profile.cpp | 6 +- Tactical/Soldier Tile.cpp | 6 +- Tactical/Squads.cpp | 4 +- Tactical/Strategic Exit GUI.cpp | 8 +- Tactical/Structure Wrap.cpp | 8 +- Tactical/Structure Wrap.h | 4 +- Tactical/Tactical Save.cpp | 6 +- Tactical/Tactical Turns.cpp | 12 +- Tactical/TeamTurns.cpp | 75 ++--- Tactical/TeamTurns.h | 10 +- Tactical/Turn Based Input.cpp | 173 ++++++----- Tactical/UI Cursors.cpp | 22 +- Tactical/UI Cursors.h | 4 +- Tactical/Vehicles.cpp | 50 ++-- Tactical/Vehicles.h | 6 +- Tactical/Weapons.cpp | 28 +- Tactical/Weapons.h | 8 +- Tactical/World Items.cpp | 2 +- Tactical/World Items.h | 20 +- Tactical/bullets.cpp | 2 +- Tactical/faces.h | 16 +- Tactical/fov.cpp | 2 - Tactical/merc entering.h | 4 +- Tactical/opplist.cpp | 136 ++++----- Tactical/opplist.h | 20 +- TacticalAI/AIInternals.h | 6 +- TacticalAI/AIList.cpp | 32 +- TacticalAI/AIList.h | 10 +- TacticalAI/AIMain.cpp | 12 +- TacticalAI/AIUtils.cpp | 96 +++--- TacticalAI/Attacks.cpp | 20 +- TacticalAI/CreatureDecideAction.cpp | 2 +- TacticalAI/DecideAction.cpp | 24 +- TacticalAI/FindLocations.cpp | 9 +- TacticalAI/Medical.cpp | 39 +-- TacticalAI/NPC.cpp | 27 +- TacticalAI/PanicButtons.cpp | 2 +- TacticalAI/ZombieDecideAction.cpp | 4 +- TacticalAI/ai.h | 56 ++-- TileEngine/Explosion Control.cpp | 83 +++--- TileEngine/Explosion Control.h | 30 +- TileEngine/LightEffects.cpp | 4 +- TileEngine/LightEffects.h | 6 +- TileEngine/SmokeEffects.cpp | 6 +- TileEngine/SmokeEffects.h | 4 +- TileEngine/overhead map.cpp | 4 +- TileEngine/physics.cpp | 2 +- TileEngine/physics.h | 4 +- TileEngine/pits.cpp | 4 +- TileEngine/pits.h | 2 +- TileEngine/structure.cpp | 2 +- TileEngine/structure.h | 2 +- TileEngine/worlddef.h | 4 +- TileEngine/worldman.cpp | 8 +- TileEngine/worldman.h | 2 +- Utils/Event Pump.h | 14 +- Utils/PopUpBox.cpp | 151 +++++++--- Utils/PopUpBox.h | 5 + builddefines.h | 4 +- gamescreen.cpp | 6 +- gamescreen.h | 2 +- lua/lua_VS2019.vcxproj | 20 +- lua/lua_VS2019.vcxproj.user | 4 + 170 files changed, 1798 insertions(+), 1764 deletions(-) create mode 100644 Strategic/Strategic_VS2019.vcxproj.user create mode 100644 lua/lua_VS2019.vcxproj.user diff --git a/Editor/EditorMercs.cpp b/Editor/EditorMercs.cpp index 478cd4e9..cef61a4f 100644 --- a/Editor/EditorMercs.cpp +++ b/Editor/EditorMercs.cpp @@ -168,7 +168,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( UINT16 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 @@ -565,7 +565,7 @@ void AddMercToWorld( INT32 iMapIndex ) if( IsLocationSittable( iMapIndex, gfRoofPlacement ) ) { - UINT8 ubID; + UINT16 ubID; INT16 sSectorX, sSectorY; SOLDIERINITNODE *pNode; @@ -3789,7 +3789,7 @@ void PasteMercPlacement( INT32 iMapIndex ) if( IsLocationSittable( iMapIndex, gfRoofPlacement ) ) { - UINT8 ubID; + UINT16 ubID; INT16 sSectorX, sSectorY; SOLDIERINITNODE *pNode; diff --git a/GameVersion.h b/GameVersion.h index 05d965f9..2c39f131 100644 --- a/GameVersion.h +++ b/GameVersion.h @@ -22,6 +22,7 @@ extern CHAR16 zRevisionNumber[16]; // Keeps track of the saved game version. Increment the saved game version whenever // you will invalidate the saved game file +#define INCREASED_TEAMSIZES 184 // Asdow: SOLDIERTYPE ubID changed from UINT8 -> UINT16 #define REBELCOMMAND 183 #define DRAGSTRUCTURE 182 // Flugente: we can drag structures behind us #define DISABILITYFLAGMASK 181 // Flugente: disabilities get a flagmask @@ -103,7 +104,7 @@ extern CHAR16 zRevisionNumber[16]; #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 REBELCOMMAND +#define SAVE_GAME_VERSION INCREASED_TEAMSIZES //#define RUSSIANGOLD #ifdef __cplusplus diff --git a/Laptop/BobbyRGuns.cpp b/Laptop/BobbyRGuns.cpp index 823f35ce..8b4edef6 100644 --- a/Laptop/BobbyRGuns.cpp +++ b/Laptop/BobbyRGuns.cpp @@ -3700,11 +3700,11 @@ void OutOfStockMessageBoxCallBack( UINT8 bExitValue ) UINT8 CheckPlayersInventoryForGunMatchingGivenAmmoID( INT16 sItemID ) { UINT8 ubItemCount=0; - UINT8 ubMercCount; + UINT16 ubMercCount; UINT8 ubPocketCount; - UINT8 ubFirstID = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; - UINT8 ubLastID = gTacticalStatus.Team[ OUR_TEAM ].bLastID; + UINT16 ubFirstID = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; + UINT16 ubLastID = gTacticalStatus.Team[ OUR_TEAM ].bLastID; //loop through all the mercs on the team for( ubMercCount = ubFirstID; ubMercCount <= ubLastID; ++ubMercCount ) diff --git a/Laptop/LaptopSave.h b/Laptop/LaptopSave.h index ba269c5d..4f555b96 100644 --- a/Laptop/LaptopSave.h +++ b/Laptop/LaptopSave.h @@ -26,7 +26,7 @@ class SOLDIERTYPE; typedef struct { BOOLEAN fActive; - UINT8 ubSoldierID; + UINT16 ubSoldierID; UINT8 ubMercID; INT32 iPayOutPrice; } LIFE_INSURANCE_PAYOUT; diff --git a/Laptop/insurance Contract.cpp b/Laptop/insurance Contract.cpp index 6c6b5ec0..b40eaacf 100644 --- a/Laptop/insurance Contract.cpp +++ b/Laptop/insurance Contract.cpp @@ -170,7 +170,7 @@ void InsuranceContractUserTextFieldCallBack( UINT8 ubID, BOOLEAN fEntering ); INT8 CountInsurableMercs(); void DisableInsuranceContractNextPreviousbuttons(); void CreateDestroyInsuranceContractFormButtons( BOOLEAN fCreate); -void HandleAcceptButton( UINT8 ubSoldierID, UINT8 ubFormID ); +void HandleAcceptButton( UINT16 ubSoldierID, UINT8 ubFormID ); FLOAT DiffFromNormRatio( INT16 sThisValue, INT16 sNormalValue ); void InsContractNoMercsPopupCallBack( UINT8 bExitValue ); void BuildInsuranceArray(); @@ -752,7 +752,7 @@ 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 ); + INT16 ubSoldierID = GetSoldierIDFromMercID( gubMercIDForMercInForm1 ); btn->uiFlags &= (~BUTTON_CLICKED_ON ); @@ -796,7 +796,7 @@ 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 ); + INT16 ubSoldierID = GetSoldierIDFromMercID( gubMercIDForMercInForm2 ); btn->uiFlags &= (~BUTTON_CLICKED_ON ); @@ -841,7 +841,7 @@ 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 ); + INT16 ubSoldierID = GetSoldierIDFromMercID( gubMercIDForMercInForm3 ); btn->uiFlags &= (~BUTTON_CLICKED_ON ); @@ -943,10 +943,10 @@ void SelectInsuranceContractRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason INT8 CountInsurableMercs() { - INT16 cnt; - SOLDIERTYPE *pSoldier; - INT16 bLastTeamID; - INT8 bCount=0; + UINT16 cnt; + SOLDIERTYPE *pSoldier; + UINT16 bLastTeamID; + INT8 bCount=0; // Set locator to first merc cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; @@ -1071,7 +1071,7 @@ void CreateDestroyInsuranceContractFormButtons( BOOLEAN fCreate) -void HandleAcceptButton( UINT8 ubSoldierID, UINT8 ubFormID ) +void HandleAcceptButton( UINT16 ubSoldierID, UINT8 ubFormID ) { //passed in either 1,2,3 should be 0,1,2 ubFormID--; @@ -1459,7 +1459,7 @@ 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 ) diff --git a/Laptop/insurance Contract.h b/Laptop/insurance Contract.h index c7dcf460..1be525a9 100644 --- a/Laptop/insurance Contract.h +++ b/Laptop/insurance Contract.h @@ -18,7 +18,7 @@ void DailyUpdateOfInsuredMercs(); //void InsuranceContractPayLifeInsuranceForDeadMerc( LIFE_INSURANCE_PAYOUT *pPayoutStruct ); BOOLEAN AddLifeInsurancePayout( SOLDIERTYPE *pSoldier ); -void InsuranceContractPayLifeInsuranceForDeadMerc( UINT8 ubPayoutID ); +void InsuranceContractPayLifeInsuranceForDeadMerc( UINT16 ubPayoutID ); void StartInsuranceInvestigation( UINT8 ubPayoutID ); void EndInsuranceInvestigation( UINT8 ubPayoutID ); diff --git a/Multiplayer/client.cpp b/Multiplayer/client.cpp index d09db645..eaf8e54c 100644 --- a/Multiplayer/client.cpp +++ b/Multiplayer/client.cpp @@ -387,13 +387,13 @@ typedef struct typedef struct { - UINT8 ubProfileID; + UINT16 ubProfileID; } send_dismiss_struct; typedef struct { - UINT8 usSoldierID; + UINT16 usSoldierID; FLOAT dNewXPos; FLOAT dNewYPos; @@ -401,7 +401,7 @@ typedef struct typedef struct { - UINT8 usSoldierID; + UINT16 usSoldierID; INT16 usNewDirection; } gui_dir; @@ -430,12 +430,12 @@ typedef struct typedef struct { - UINT8 ubID; + UINT16 ubID; INT8 bTeam; - UINT8 gubOutOfTurnPersons; - UINT8 gubOutOfTurnOrder[MAXMERCS]; + UINT16 gubOutOfTurnPersons; + UINT16 gubOutOfTurnOrder[MAXMERCS]; BOOLEAN fMarkInterruptOccurred; - UINT8 Interrupted; + UINT16 Interrupted; } INT_STRUCT; typedef struct @@ -475,7 +475,7 @@ typedef struct float dForceY; float dForceZ; UINT32 sTargetGridNo; - UINT8 ubID; + UINT16 ubID; UINT8 ubActionCode; UINT32 uiActionData; UINT16 usItem; @@ -491,7 +491,7 @@ typedef struct float dZ; INT32 sGridNo; bool bWasDud; - UINT8 ubOwnerID; + UINT16 ubOwnerID; INT32 RealObjectID; // the local ID on the initiating client UINT32 uiPreRandomIndex; // send out our current pre-random index } grenade_result; @@ -499,7 +499,7 @@ typedef struct typedef struct { UINT32 sGridNo; - UINT8 ubID; + UINT16 ubID; UINT16 usItem; UINT8 ubItemStatus; UINT32 uiWorldIndex; // the local World Index of this bomb on its creators client @@ -511,7 +511,7 @@ typedef struct typedef struct { - UINT8 ubID; + UINT16 ubID; UINT32 uiWorldItemIndex; UINT8 ubMPTeamIndex; UINT32 uiPreRandomIndex; // send out our current pre-random index @@ -521,7 +521,7 @@ typedef struct { UINT32 uiWorldItemIndex; UINT8 ubMPTeamIndex; - UINT8 ubID; + UINT16 ubID; UINT32 sGridNo; UINT32 uiPreRandomIndex; // send out our current pre-random index } disarm_struct; @@ -531,7 +531,7 @@ typedef struct INT32 sGridNo; UINT8 ubRadius; UINT16 usItem; - UINT8 ubOwner; + UINT16 ubOwner; BOOLEAN fSubsequent; INT8 bLevel; INT32 iSmokeEffectID; @@ -541,13 +541,13 @@ typedef struct typedef struct { UINT8 ubDamageFunc; // 1 - gas damage , 2 - explosive damage - UINT8 ubSoldierID; + UINT16 ubSoldierID; UINT16 usExplosiveClassID; INT16 sSubsequent; BOOL fRecompileMovementCosts; INT16 sWoundAmt; INT16 sBreathAmt; - UINT8 ubAttackerID; + UINT16 ubAttackerID; UINT16 usItem; INT32 sBombGridNo; UINT32 uiDist; @@ -571,7 +571,7 @@ int client_progress[4]; int TEAM; UINT8 netbTeam; -UINT8 ubID_prefix; +UINT16 ubID_prefix; bool is_connected=false; bool is_connecting=false; @@ -990,7 +990,7 @@ void recieveHIT(RPCParameters *rpcParameters) SOLDIERTYPE *pSoldier = MercPtrs[ SWeaponHit->usSoldierID ]; UINT16 usSoldierID; - UINT8 ubAttackerID; + UINT16 ubAttackerID; if((SWeaponHit->usSoldierID >= ubID_prefix) && (SWeaponHit->usSoldierID < (ubID_prefix+6))) // within our netbTeam range... usSoldierID = (SWeaponHit->usSoldierID - ubID_prefix); @@ -1017,7 +1017,7 @@ void recieveHIT(RPCParameters *rpcParameters) } -void send_dismiss(UINT8 ubCurrentSoldierID) +void send_dismiss(UINT16 ubCurrentSoldierID) { send_dismiss_struct sDismissMerc; @@ -1089,8 +1089,7 @@ void recieveHIRE(RPCParameters *rpcParameters) send_hire_struct* sHireMerc = (send_hire_struct*)rpcParameters->input; SOLDIERTYPE *pSoldier; - UINT8 iNewIndex; - UINT8 ubCount=0; + UINT16 iNewIndex; SOLDIERCREATE_STRUCT MercCreateStruct; BOOLEAN fReturn = FALSE; @@ -1283,7 +1282,7 @@ UINT8 numenemyLAN( UINT8 ubSectorX, UINT8 ubSectorY ) return ubNumEnemies; } -void send_AI( SOLDIERCREATE_STRUCT *pCreateStruct, UINT8 *pubID ) +void send_AI( SOLDIERCREATE_STRUCT *pCreateStruct, UINT16 * pubID ) { AI_STRUCT send_inv; send_inv.standard_data = *pCreateStruct; @@ -1298,7 +1297,7 @@ void send_AI( SOLDIERCREATE_STRUCT *pCreateStruct, UINT8 *pubID ) void recieveAI (RPCParameters *rpcParameters) { - UINT8 iNewIndex; + UINT16 iNewIndex; SOLDIERTYPE *pSoldier; AI_STRUCT* send_inv = (AI_STRUCT*)rpcParameters->input; @@ -1921,7 +1920,7 @@ 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; @@ -1977,7 +1976,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 @@ -2025,7 +2024,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 ] ); @@ -2141,7 +2140,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; @@ -2182,7 +2181,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 ); } @@ -2928,7 +2927,7 @@ 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, UINT16 ubOwner, UINT8 ubActionCode, UINT32 uiActionData, INT32 iRealObjectID, bool bIsThrownGrenade) { ubOwner = MPEncodeSoldierID(ubOwner); // translate our soldier to the "network" version @@ -2993,7 +2992,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; @@ -3136,7 +3135,7 @@ void recieveGRENADERESULT (RPCParameters *rpcParameters) } } -void send_plant_explosive (UINT8 ubID,UINT16 usItem,UINT8 ubItemStatus,UINT16 usFlags, UINT32 sGridNo,UINT8 ubLevel, UINT32 uiWorldItemIndex) +void send_plant_explosive (UINT16 ubID,UINT16 usItem,UINT8 ubItemStatus,UINT16 usFlags, UINT32 sGridNo,UINT8 ubLevel, UINT32 uiWorldItemIndex) { explosive_obj exp; @@ -3184,7 +3183,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; @@ -3237,7 +3236,7 @@ void recievePLANTEXPLOSIVE (RPCParameters *rpcParameters) } } -void send_detonate_explosive (UINT32 uiWorldIndex, UINT8 ubID) +void send_detonate_explosive (UINT32 uiWorldIndex, UINT16 ubID) { ubID = MPEncodeSoldierID(ubID); @@ -3351,7 +3350,7 @@ void recieveDETONATEEXPLOSIVE (RPCParameters *rpcParameters) } } -void send_disarm_explosive(UINT32 sGridNo, UINT32 uiWorldItem, UINT8 ubID) +void send_disarm_explosive(UINT32 sGridNo, UINT32 uiWorldItem, UINT16 ubID) { ubID = MPEncodeSoldierID(ubID); @@ -3474,7 +3473,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, UINT16 ubOwner, BOOLEAN fSubsequent, INT8 bLevel, INT32 iSmokeEffectID ) { spreadeffect_struct sef; @@ -3527,7 +3526,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; } } @@ -3544,7 +3543,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); } } } @@ -3559,7 +3558,7 @@ void recieveSPREADEFFECT (RPCParameters *rpcParameters) } } -void send_newsmokeeffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT8 ubOwner, INT32 iSmokeEffectID) +void send_newsmokeeffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT16 ubOwner, INT32 iSmokeEffectID) { // i'm reusing this struct, the parameters are essentially the same spreadeffect_struct sef; @@ -3602,7 +3601,7 @@ void recieveNEWSMOKEEFFECT (RPCParameters *rpcParameters) 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; @@ -3620,7 +3619,7 @@ void recieveNEWSMOKEEFFECT (RPCParameters *rpcParameters) } } -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, UINT16 ubOwner ) { explosiondamage_struct exp; exp.ubDamageFunc = 1; @@ -3642,7 +3641,7 @@ void send_gasdamage( SOLDIERTYPE * pSoldier, UINT16 usExplosiveClassID, INT16 sS 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( UINT16 ubPerson, UINT16 ubOwner, INT32 sBombGridNo, INT16 sWoundAmt, INT16 sBreathAmt, UINT32 uiDist, UINT16 usItem, INT16 sSubsequent ) { explosiondamage_struct exp; exp.ubDamageFunc = 2; @@ -3699,7 +3698,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); } } } @@ -4206,7 +4205,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; + UINT16 id = pSoldier->ubID; UINT32 time = GetJA2Clock(); if(id < 20 || (is_server && id <120)) @@ -4519,7 +4518,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; diff --git a/Multiplayer/connect.h b/Multiplayer/connect.h index d1d94f10..5984c5fa 100644 --- a/Multiplayer/connect.h +++ b/Multiplayer/connect.h @@ -36,7 +36,7 @@ extern UINT8 cGameType; extern bool allowlaptop; extern UINT8 netbTeam; -extern UINT8 ubID_prefix; +extern UINT16 ubID_prefix; extern FLOAT cDamageMultiplier; //OJW - 20081218 @@ -97,33 +97,33 @@ 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_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, UINT16 * pubID ); 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 (OBJECTTYPE *pGameObj, float dLifeLength, float xPos, float yPos, float zPos, float xForce, float yForce, float zForce, UINT32 sTargetGridNo, UINT16 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_plant_explosive (UINT16 ubID,UINT16 usItem,UINT8 ubItemStatus,UINT16 usFlags, UINT32 sGridNo,UINT8 ubLevel, UINT32 uiWorldIndex); +void send_detonate_explosive (UINT32 uiWorldIndex, UINT16 ubID); +void send_spreadeffect ( INT32 sGridNo, UINT8 ubRadius, UINT16 usItem, UINT16 ubOwner, BOOLEAN fSubsequent, INT8 bLevel, INT32 iSmokeEffectID ); +void send_newsmokeeffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT16 ubOwner, INT32 iSmokeEffectID); +void send_gasdamage( SOLDIERTYPE * pSoldier, UINT16 usExplosiveClassID, INT16 sSubsequent, BOOLEAN fRecompileMovementCosts, INT16 sWoundAmt, INT16 sBreathAmt, UINT16 ubOwner ); +void send_explosivedamage( UINT16 ubPerson, UINT16 ubOwner, INT32 sBombGridNo, INT16 sWoundAmt, INT16 sBreathAmt, UINT32 uiDist, UINT16 usItem, INT16 sSubsequent ); +void send_disarm_explosive(UINT32 sGridNo, UINT32 uiWorldIndex, UINT16 ubID); void OpenChatMsgBox(void); -INT8 FireBullet( UINT8 ubFirer, BULLET * pBullet, BOOLEAN fFake ); +INT8 FireBullet( UINT16 ubFirer, BULLET * pBullet, BOOLEAN fFake ); void reapplySETTINGS(); @@ -211,7 +211,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 UINT16 MPEncodeSoldierID( UINT16 ubID ) { if ( ubID < 20 ) return ubID + ubID_prefix; // soldier is ours @@ -220,7 +220,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 UINT16 MPDecodeSoldierID( UINT16 ubID ) { if ( ubID >= ubID_prefix && ubID < (ubID_prefix + 7) ) return ubID - ubID_prefix; // soldier is ours @@ -233,7 +233,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; } diff --git a/Multiplayer/fresh_header.h b/Multiplayer/fresh_header.h index 58afdf26..46f90ec4 100644 --- a/Multiplayer/fresh_header.h +++ b/Multiplayer/fresh_header.h @@ -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 ); \ No newline at end of file diff --git a/SaveLoadGame.cpp b/SaveLoadGame.cpp index 6811ac80..dabf4588 100644 --- a/SaveLoadGame.cpp +++ b/SaveLoadGame.cpp @@ -322,7 +322,7 @@ typedef struct INT16 sCurInterfacePanel; - UINT8 ubSMCurrentMercID; + UINT16 ubSMCurrentMercID; BOOLEAN fFirstTimeInMapScreen; @@ -559,8 +559,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 ); @@ -1082,7 +1082,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; } @@ -1111,7 +1111,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; } @@ -1859,8 +1859,20 @@ 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; + if (guiCurrentSaveGameVersion >= INCREASED_TEAMSIZES) + { + numBytesRead = ReadFieldByField(hFile, &this->ubID, sizeof(ubID), sizeof(UINT16), numBytesRead); + } + else + { + numBytesRead = ReadFieldByField(hFile, &this->ubID, sizeof(ubID), sizeof(UINT8), numBytesRead); + // Read and discard bReserved1 so numBytesRead matches the struct size later + UINT8 bReserved1 = 0; + numBytesRead = ReadFieldByField(hFile, &bReserved1, sizeof(bReserved1), sizeof(UINT8), 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); @@ -1888,7 +1900,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); @@ -1932,8 +1944,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); @@ -2013,7 +2025,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); @@ -2111,7 +2123,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); @@ -2123,7 +2135,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); @@ -2144,8 +2156,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); @@ -2164,7 +2176,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); @@ -2172,7 +2184,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); @@ -2203,7 +2215,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); @@ -2230,9 +2242,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 ) @@ -2351,10 +2361,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 ); @@ -2486,140 +2496,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); @@ -2627,38 +2503,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) ) @@ -2696,7 +2543,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); @@ -2719,7 +2566,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); @@ -2951,9 +2798,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); } @@ -6675,7 +6527,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 @@ -6920,7 +6772,7 @@ BOOLEAN LoadSavedGame( int ubSavedGameID ) // player team character fixes SOLDIERTYPE *pTeamSoldier; - for (INT8 bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++) + for (UINT16 bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++) { pTeamSoldier=MercPtrs[bLoop]; @@ -7130,7 +6982,7 @@ BOOLEAN LoadSoldierStructure( HWFILE hFile ) { UINT16 cnt; UINT32 uiNumBytesRead=0; - UINT8 ubId; + UINT16 ubId; UINT8 ubOne = 1; UINT8 ubActive = 1; UINT32 uiPercentage; @@ -7868,8 +7720,8 @@ BOOLEAN LoadTacticalStatusFromSavedGame( HWFILE hFile ) 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); @@ -7888,13 +7740,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); @@ -7912,7 +7764,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); @@ -7926,7 +7778,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); @@ -7940,7 +7792,6 @@ 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); @@ -7958,7 +7809,7 @@ BOOLEAN LoadTacticalStatusFromSavedGame( HWFILE hFile ) 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); @@ -8404,7 +8255,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; @@ -8445,7 +8296,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; @@ -8728,7 +8579,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; @@ -8992,7 +8843,7 @@ BOOLEAN LoadGeneralInfo( HWFILE hFile ) 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); @@ -9268,7 +9119,7 @@ BOOLEAN LoadGeneralInfo( HWFILE hFile ) // Restore the selected merc - if( sGeneralInfo.ubSMCurrentMercID == 255 ) + if( sGeneralInfo.ubSMCurrentMercID == NOBODY) gpSMCurrentMerc = NULL; else gpSMCurrentMerc = &Menptr[ sGeneralInfo.ubSMCurrentMercID ]; @@ -9729,10 +9580,10 @@ void GetBestPossibleSectorXYZValues( INT16 *psSectorX, INT16 *psSectorY, INT8 *p } else { - INT16 sSoldierCnt; - SOLDIERTYPE *pSoldier; - INT16 bLastTeamID; - BOOLEAN fFoundAMerc=FALSE; + UINT16 sSoldierCnt; + SOLDIERTYPE *pSoldier; + UINT16 bLastTeamID; + BOOLEAN fFoundAMerc=FALSE; // Set locator to first merc sSoldierCnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; diff --git a/SaveLoadGame.h b/SaveLoadGame.h index a1f9664a..b0fb5906 100644 --- a/SaveLoadGame.h +++ b/SaveLoadGame.h @@ -57,7 +57,7 @@ typedef struct INT16 sSectorX; INT16 sSectorY; INT8 bSectorZ; - UINT8 ubNumOfMercsOnPlayersTeam; + UINT16 ubNumOfMercsOnPlayersTeam; INT32 iCurrentBalance; UINT32 uiCurrentScreen; @@ -72,11 +72,10 @@ typedef struct UINT32 uiRandom; - UINT8 ubFiller[500]; // WANNE: Decrease this filler by 1, for each new UINT8 variable! + UINT8 ubFiller[494]; // WANNE: Decrease this filler by 1, for each new UINT8 variable! } SAVED_GAME_HEADER; - extern UINT32 guiScreenToGotoAfterLoadingSavedGame; extern UINT32 guiCurrentSaveGameVersion; diff --git a/Strategic/AI Viewer.cpp b/Strategic/AI Viewer.cpp index 03ca0d07..bfbf2db7 100644 --- a/Strategic/AI Viewer.cpp +++ b/Strategic/AI Viewer.cpp @@ -653,7 +653,7 @@ void RenderMovingGroupsAndMercs() void RenderInfoInSector() { UINT8 ubSectorX, ubSectorY; - UINT8 ubMercs=0, ubActive=0, ubUnconcious=0, ubCollapsed=0; + UINT16 ubMercs=0, ubActive=0, ubUnconcious=0, ubCollapsed=0; INT32 i, xp, yp; if( gfViewEnemies && !gbViewLevel ) diff --git a/Strategic/Assignments.cpp b/Strategic/Assignments.cpp index 0e6398d6..da5fb2bb 100644 --- a/Strategic/Assignments.cpp +++ b/Strategic/Assignments.cpp @@ -1225,7 +1225,7 @@ BOOLEAN IsAnythingAroundForSoldierToClean( SOLDIERTYPE * pSoldier ) } // now the other merc's stuff - for(UINT8 teamIndex = gTacticalStatus.Team[gbPlayerNum].bFirstID; teamIndex <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++teamIndex) + for(UINT16 teamIndex = gTacticalStatus.Team[gbPlayerNum].bFirstID; teamIndex <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++teamIndex) { // Ignore self, mercs in other sectors, etc. if (CanCharacterRepairAnotherSoldiersStuff(pSoldier, MercPtrs[teamIndex])) @@ -1289,7 +1289,6 @@ BOOLEAN DoesCharacterHaveAnyItemsToRepair( SOLDIERTYPE *pSoldier, INT8 bHighestP { INT8 bPocket; UINT8 ubItemsInPocket, ubObjectInPocketCounter; - INT8 bLoop; OBJECTTYPE * pObj; UINT8 ubPassType; @@ -1340,7 +1339,7 @@ BOOLEAN DoesCharacterHaveAnyItemsToRepair( SOLDIERTYPE *pSoldier, INT8 bHighestP if ( bHighestPass != - 1 ) { // now look for items to repair on other mercs - for( bLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; bLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++bLoop ) + for( UINT16 bLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; bLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++bLoop ) { SOLDIERTYPE* pOtherSoldier = MercPtrs[ bLoop ]; @@ -2052,7 +2051,7 @@ INT8 CountMilitiaTrainersInSoldiersSector( SOLDIERTYPE * pSoldier, UINT8 ubMilit AssertNotNIL(pSoldier); - for ( UINT8 bLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; bLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++bLoop ) + for ( UINT16 bLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; bLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++bLoop ) { SOLDIERTYPE* pOtherSoldier = MercPtrs[ bLoop ]; if ( pSoldier != pOtherSoldier && pOtherSoldier->bActive && pOtherSoldier->stats.bLife >= OKLIFE && pOtherSoldier->sSectorX == pSoldier->sSectorX && pOtherSoldier->sSectorY == pSoldier->sSectorY && pSoldier->bSectorZ == pOtherSoldier->bSectorZ ) @@ -5477,7 +5476,7 @@ void HandleRepairBySoldier( SOLDIERTYPE *pSoldier ) // first our own stuff CollectCleanableItems(pSoldier, pSoldier, itemsToClean); // then other mercs' stuff - for(UINT8 teamIndex = gTacticalStatus.Team[gbPlayerNum].bFirstID; teamIndex <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++teamIndex) + for(UINT16 teamIndex = gTacticalStatus.Team[gbPlayerNum].bFirstID; teamIndex <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++teamIndex) { // Ignore self, mercs in other sectors, etc. if (CanCharacterRepairAnotherSoldiersStuff(pSoldier, MercPtrs[teamIndex])) @@ -5522,7 +5521,7 @@ void HandleRepairBySoldier( SOLDIERTYPE *pSoldier ) // silversurfer: Looks strange? It's not. This function now needs the guy that does the repairs and the one that owns the stuff. CollectRepairableItems(pSoldier, pSoldier, itemsToFix); - for(UINT8 teamIndex = gTacticalStatus.Team[gbPlayerNum].bFirstID; teamIndex <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++teamIndex) + for(UINT16 teamIndex = gTacticalStatus.Team[gbPlayerNum].bFirstID; teamIndex <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++teamIndex) { // Ignore self, mercs in other sectors, etc. if (CanCharacterRepairAnotherSoldiersStuff(pSoldier, MercPtrs[teamIndex])) @@ -9501,7 +9500,7 @@ void HandleHealingByNaturalCauses( SOLDIERTYPE *pSoldier ) if ( gGameOptions.fNewTraitSystem ) { SOLDIERTYPE * pMedic = NULL; - UINT8 cnt; + UINT16 cnt; UINT16 bRegenerationBonus = 0; cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; @@ -13814,7 +13813,7 @@ void AssignmentMenuBtnCallback( MOUSE_REGION * pRegion, INT32 iReason ) { SOLDIERTYPE * pMedic = NULL; SOLDIERTYPE * pBestMedic = NULL; - UINT8 cnt; + UINT16 cnt; INT8 bSlot; // Find the best doctor @@ -14096,7 +14095,7 @@ void AssignmentMenuBtnCallback( MOUSE_REGION * pRegion, INT32 iReason ) { SOLDIERTYPE * pMedic = NULL; SOLDIERTYPE * pBestMedic = NULL; - UINT8 cnt; + UINT16 cnt; INT8 bSlot; // Find the best doctor @@ -19505,7 +19504,7 @@ void ResumeOldAssignment( SOLDIERTYPE *pSoldier ) void RepairItemsOnOthers( SOLDIERTYPE *pSoldier, UINT8 *pubRepairPtsLeft ) { UINT8 ubPassType; - INT8 bLoop; + UINT16 bLoop; SOLDIERTYPE * pOtherSoldier; SOLDIERTYPE * pBestOtherSoldier; INT8 bPriority, bBestPriority = -1; diff --git a/Strategic/Auto Resolve.cpp b/Strategic/Auto Resolve.cpp index 2e4da9ed..91349039 100644 --- a/Strategic/Auto Resolve.cpp +++ b/Strategic/Auto Resolve.cpp @@ -2853,7 +2853,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; + UINT16 ubRobotControllerID; ubRobotControllerID = gpAR->pRobotCell->pSoldier->ubRobotRemoteHolderID; @@ -3027,7 +3027,7 @@ void MercCellMouseClickCallback( MOUSE_REGION *reg, INT32 reason ) if( gpAR->pRobotCell ) { //if controller is retreating, make the robot retreat too. - UINT8 ubRobotControllerID; + UINT16 ubRobotControllerID; ubRobotControllerID = gpAR->pRobotCell->pSoldier->ubRobotRemoteHolderID; @@ -3751,7 +3751,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; @@ -3769,7 +3769,7 @@ void CreateTempPlayerMerc() { SOLDIERCREATE_STRUCT MercCreateStruct; static INT32 iSoldierCount=0; - UINT8 ubID; + UINT16 ubID; //Init the merc create structure with basic information MercCreateStruct.bTeam = SOLDIER_CREATE_AUTO_TEAM; diff --git a/Strategic/Game Event Hook.cpp b/Strategic/Game Event Hook.cpp index e951f765..7942c2b5 100644 --- a/Strategic/Game Event Hook.cpp +++ b/Strategic/Game Event Hook.cpp @@ -240,7 +240,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: @@ -248,7 +248,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: diff --git a/Strategic/LuaInitNPCs.cpp b/Strategic/LuaInitNPCs.cpp index d91243ba..23b1282b 100644 --- a/Strategic/LuaInitNPCs.cpp +++ b/Strategic/LuaInitNPCs.cpp @@ -908,7 +908,7 @@ UINT16 PROFILLUA_sSectorX; UINT16 PROFILLUA_sSectorY; UINT8 PROFILLUA_bSectorZ; UINT8 PROFILLUA_Level; -UINT8 PROFILLUA_ubID; +UINT16 PROFILLUA_ubID; UINT32 PROFILLUA_sGridNo; UINT8 PROFILLUA_ubDirectiono; UINT8 PROFILLUA_bTeam; @@ -918,7 +918,7 @@ UINT16 PROFILLUA2_sSectorX; UINT16 PROFILLUA2_sSectorY; UINT8 PROFILLUA2_bSectorZ; UINT32 PROFILLUA2_sGridNo; -UINT8 PROFILLUA2_ubID; +UINT16 PROFILLUA2_ubID; LUA_GLOBAL gLuaGlobal[1000]; @@ -2354,7 +2354,7 @@ static int l_WhoIsThere2 (lua_State *L) { UINT32 sGridNo = lua_tointeger(L,1); INT8 bLevel = lua_tointeger(L,2); - UINT8 Val = WhoIsThere2( sGridNo, bLevel ); + UINT16 Val = WhoIsThere2( sGridNo, bLevel ); lua_pushinteger(L, Val); } @@ -2698,8 +2698,9 @@ void LuaHandleSectorLiberation( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ, B LuaFunction( _LS.L, "HandleSectorLiberation" ).Param( sSectorX ).Param( sSectorY ).Param( bSectorZ ).Param( fFirstTime ).Call( 4 ); } -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, UINT16 ubId, UINT16 usActionType, INT32 sLuaactionid, INT32 difficulty, UINT16 skill ) { const char* filename = "scripts\\Overhead.lua"; @@ -2918,7 +2919,7 @@ BOOLEAN LuaIDScripts(UINT8 Init, UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 u SOLDIERTYPE * FindSoldierByProfileID_( UINT8 ubProfileID ) { - UINT8 ubLoop, ubLoopLimit; + UINT16 ubLoop, ubLoopLimit; SOLDIERTYPE * pSoldier; ubLoopLimit = MAX_NUM_SOLDIERS; @@ -2935,7 +2936,7 @@ SOLDIERTYPE * FindSoldierByProfileID_( UINT8 ubProfileID ) SOLDIERTYPE * FindSoldierByProfileID2( UINT8 ubProfileID, BOOLEAN fPlayerMercsOnly ) { - UINT8 cnt2, ubLoopLimit; + UINT16 cnt2, ubLoopLimit; SOLDIERTYPE * pSoldier; ubLoopLimit = gTacticalStatus.Team[CIV_TEAM].bLastID; @@ -4730,7 +4731,7 @@ static int l_NumMercsNear(lua_State *L) { UINT8 ubProfileID = lua_tointeger(L,1); UINT8 ubMaxDist = lua_tointeger(L,2); - UINT8 ID2 = NumMercsNear( ubProfileID, ubMaxDist ); + UINT16 ID2 = NumMercsNear( ubProfileID, ubMaxDist ); lua_pushinteger(L, ID2); } @@ -5799,7 +5800,7 @@ static int l_SetOffPanicBombs (lua_State *L) { if ( lua_gettop(L) >= 2 ) { - UINT8 ubID = lua_tointeger(L,1); + UINT16 ubID = lua_tointeger(L,1); INT8 bPanicTrigger = lua_tointeger(L,2); SetOffPanicBombs( ubID, bPanicTrigger ); } @@ -5852,7 +5853,7 @@ static int l_MakeNoise(lua_State *L) if ( lua_gettop(L) >= 6 ) { - UINT8 ubNoiseMaker = lua_tointeger(L,1); + UINT16 ubNoiseMaker = lua_tointeger(L,1); INT32 sGridNo = lua_tointeger(L,2); INT8 bLevel = lua_tointeger(L,3); UINT8 ubTerrType = lua_tointeger(L,4); @@ -5995,7 +5996,7 @@ return 0; static int l_ActionInProgress(lua_State *L) { - UINT8 cnt2; + UINT16 cnt2; SOLDIERTYPE * pSoldier; if (lua_gettop(L) >= 2) @@ -6357,7 +6358,7 @@ static int l_ActivateSwitchInGridNo(lua_State *L) { if (lua_gettop(L) >= 2) { - UINT8 ubID = lua_tointeger(L, 1); + UINT16 ubID = lua_tointeger(L, 1); INT32 sGridNo = lua_tointeger(L, 2); if (!TileIsOutOfBounds(sGridNo) && ubID < TOTAL_SOLDIERS) @@ -7128,7 +7129,7 @@ static int l_ACTION_ITEM_SEX (lua_State *L) if ( ! (gTacticalStatus.uiFlags & INCOMBAT) ) { - UINT8 ubID; + UINT16 ubID; OBJECTTYPE DoorCloser; INT16 sTeleportSpot; INT16 sDoorSpot; @@ -7579,7 +7580,7 @@ static int l_EVENT_InitNewSoldierAnim (lua_State *L) { if ( lua_gettop(L) >= 3 ) { - UINT8 ubTargetNPC = lua_tointeger(L,1); + UINT16 ubTargetNPC = lua_tointeger(L,1); //if (i == 2 ) BodyType = lua_tointeger(L,i); UINT32 ANIM = lua_tointeger(L,2); INT32 cnt = lua_tointeger(L,3); @@ -7636,13 +7637,13 @@ static int l_SetEnterCombatMode (lua_State *L) if ( lua_gettop(L) >= 2 ) { UINT16 group = lua_tointeger(L,1); - UINT8 ubID = lua_tointeger(L,2); + UINT16 ubID = lua_tointeger(L,2); if ( ubID == NOBODY ) return 0; SOLDIERTYPE* pGoon = NULL; - for ( UINT8 ubLoop = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; ubLoop <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ubLoop++ ) + for ( UINT16 ubLoop = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; ubLoop <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ubLoop++ ) { pGoon = MercPtrs[ ubLoop ]; if ( pGoon->ubCivilianGroup == group && pGoon->bActive && pGoon->bInSector && pGoon->stats.bLife >= OKLIFE && pGoon->aiData.bOppList[ ubID ] == SEEN_CURRENTLY ) @@ -7675,7 +7676,7 @@ static int l_MakeMercPtrsHostile (lua_State *L) { if ( lua_gettop(L) >= 1 ) { - UINT8 ubID = lua_tointeger(L,1); + UINT16 ubID = lua_tointeger(L,1); MakeCivHostile(MercPtrs[ ubID ]); } @@ -7734,7 +7735,7 @@ static int l_EVENT_SoldierGotHit (lua_State *L) DeleteTalkingMenu(); if ( pTarget2->stats.bLife >= 0 ) { - pTarget2->EVENT_SoldierGotHit( 1, 100, 10, pTarget2->ubDirection, 320, NOBODY , FIRE_WEAPON_NO_SPECIAL, AIM_SHOT_TORSO, 0, NOWHERE ); + pTarget2->EVENT_SoldierGotHit( 1, 100, 10, pTarget2->ubDirection, 320, NOBODY, FIRE_WEAPON_NO_SPECIAL, AIM_SHOT_TORSO, 0, NOWHERE ); } } } @@ -8067,7 +8068,7 @@ static int l_ChangeMercPtrsTeam (lua_State *L) { if ( lua_gettop(L) >= 2 ) { - UINT8 UID = lua_tointeger(L,1); + UINT16 UID = lua_tointeger(L,1); INT8 Side = lua_tointeger(L,2); if ( MercPtrs[UID] && MercPtrs[ UID ]->bInSector && MercPtrs[ UID ]->bActive ) @@ -8878,46 +8879,33 @@ static int l_GetDirection (lua_State *L) static int l_ubID (lua_State *L) { - UINT8 n = lua_gettop(L); - int i = 0; - UINT8 ubTargetNPC = 0; - SOLDIERTYPE *pSoldier; - - UINT32 ubID = 0; - - for (i= 1; i<=n; i++ ) + if (lua_gettop(L) >= 1) { - if (i == 1 ) - ubTargetNPC = lua_tointeger(L,i); + UINT8 ubTargetNPC = 0; + SOLDIERTYPE *pSoldier; + + ubTargetNPC = lua_tointeger(L, 1); + pSoldier = FindSoldierByProfileID(ubTargetNPC, FALSE); + if (pSoldier) + lua_pushinteger(L, pSoldier->ubID); + else + lua_pushinteger(L, -1); } - - pSoldier = FindSoldierByProfileID( ubTargetNPC, FALSE); - if ( pSoldier ) - ubID = pSoldier->ubID; - else - ubID = -1; - - lua_pushinteger(L, ubID); - return 1; } //------------ static int l_GetFirstID (lua_State *L) { - UINT8 n = lua_gettop(L); - int i; - UINT8 team = 0; - UINT32 id; - - for (i= 1; i<=n; i++ ) + if (lua_gettop(L) >= 1) { - if (i == 1 ) team = lua_tointeger(L,i); + UINT8 team = 0; + UINT32 id; + + team = lua_tointeger(L, 1); + id = gTacticalStatus.Team[team].bFirstID; + + lua_pushinteger(L, id); } - - id = gTacticalStatus.Team[ team ].bFirstID; - - lua_pushinteger(L, id); - return 1; } @@ -9190,7 +9178,7 @@ static int l_WearGasMaskIfAvailable(lua_State *L) { if ( lua_gettop( L ) >= 1 ) { - UINT8 ubID = lua_tointeger( L, 1 ); + UINT16 ubID = lua_tointeger( L, 1 ); if ( MercPtrs[ubID] && MercPtrs[ubID]->bInSector && MercPtrs[ubID]->bActive ) { @@ -9205,7 +9193,7 @@ static int l_SetNewSituationMercPtsr(lua_State *L) { UINT8 n = lua_gettop(L); int i = 0; - UINT8 ubID = 0; + UINT16 ubID = 0; BOOLEAN Bool = FALSE; SOLDIERTYPE * pSoldier; @@ -9573,7 +9561,7 @@ static int l_SetOffBombsInGridNo (lua_State *L) { UINT8 n = lua_gettop(L); int i = 0; - UINT8 ubID = 0; + UINT16 ubID = 0; INT32 sGridNo = 0; BOOLEAN fAllBombs = FALSE; INT8 bLevel = 0; @@ -9613,7 +9601,7 @@ static int l_AnimMercPtsrSoldierGotHit (lua_State *L) { if ( MercPtrs[ ubID ]->stats.bLife >= 0 ) { - MercPtrs[ ubID ]->EVENT_SoldierGotHit( 1, 100, 10, MercPtrs[ ubID ]->ubDirection, 320, NOBODY , FIRE_WEAPON_NO_SPECIAL, AIM_SHOT_TORSO, 0, NOWHERE ); + MercPtrs[ ubID ]->EVENT_SoldierGotHit( 1, 100, 10, MercPtrs[ ubID ]->ubDirection, 320, NOBODY, FIRE_WEAPON_NO_SPECIAL, AIM_SHOT_TORSO, 0, NOWHERE ); } } @@ -9738,7 +9726,8 @@ static int l_FindSoldierByProfileID (lua_State *L) { UINT8 n = lua_gettop(L); int i = 0; - UINT8 ubTargetNPC = 0,ubLoop = 0,ubLoopLimit = 0; + UINT8 ubTargetNPC = 0; + UINT16 ubLoop = 0, ubLoopLimit = 0; SOLDIERTYPE *pSoldier; UINT8 id = -1; @@ -9767,7 +9756,8 @@ static int l_FindSoldierByProfileIDBool (lua_State *L) { UINT8 n = lua_gettop(L); int i = 0; - UINT8 ubTargetNPC = 0,ubLoop = 0,ubLoopLimit = 0; + UINT8 ubTargetNPC = 0; + UINT16 ubLoop = 0, ubLoopLimit = 0; SOLDIERTYPE *pSoldier; UINT8 id = -1; BOOLEAN ProfBool = FALSE; @@ -11445,7 +11435,7 @@ static int l_SetMoneyInSoldierProfile(lua_State *L) static int l_AddToShouldBecomeHostileOrSayQuoteList(lua_State *L) { - UINT8 ubID = 0; + UINT16 ubID = 0; UINT8 n = lua_gettop(L); int i = 0; @@ -12381,7 +12371,7 @@ return 0; static int l_SetMercPtsrSectorZ(lua_State *L) { - UINT8 ubID = 0; + UINT16 ubID = 0; BOOLEAN Bool = FALSE; SOLDIERTYPE * pSoldier; INT8 SectorZ; @@ -12413,7 +12403,7 @@ static int l_SetMercPtsrSectorZ(lua_State *L) static int l_SetMercPtsrSectorX(lua_State *L) { - UINT8 ubID = 0; + UINT16 ubID = 0; BOOLEAN Bool = FALSE; SOLDIERTYPE * pSoldier; INT16 SectorX; @@ -12446,7 +12436,7 @@ static int l_SetMercPtsrSectorX(lua_State *L) static int l_SetMercPtsrSectorY(lua_State *L) { - UINT8 ubID = 0; + UINT16 ubID = 0; BOOLEAN Bool = FALSE; SOLDIERTYPE * pSoldier; INT16 SectorY; @@ -12479,7 +12469,7 @@ static int l_SetMercPtsrSectorY(lua_State *L) static int l_SetMercPtsrubGroupID(lua_State *L) { - UINT8 ubID = 0; + UINT16 ubID = 0; BOOLEAN Bool = FALSE; SOLDIERTYPE * pSoldier; INT8 GroupID; @@ -12512,7 +12502,7 @@ static int l_SetMercPtsrubGroupID(lua_State *L) static int l_CheckMercPtsrSectorY(lua_State *L) { - UINT8 ubID = 0; + UINT16 ubID = 0; BOOLEAN Bool = FALSE; SOLDIERTYPE * pSoldier; INT16 SectorY; @@ -12550,7 +12540,7 @@ static int l_CheckMercPtsrSectorY(lua_State *L) static int l_CheckMercPtsrSectorX(lua_State *L) { - UINT8 ubID = 0; + UINT16 ubID = 0; BOOLEAN Bool = FALSE; SOLDIERTYPE * pSoldier; INT16 SectorX; @@ -12588,7 +12578,7 @@ static int l_CheckMercPtsrSectorX(lua_State *L) static int l_CheckMercPtsrSectorZ(lua_State *L) { - UINT8 ubID = 0; + UINT16 ubID = 0; BOOLEAN Bool = FALSE; SOLDIERTYPE * pSoldier; INT16 SectorZ; @@ -12626,7 +12616,7 @@ static int l_CheckMercPtsrSectorZ(lua_State *L) static int l_CheckMercPtsrubGroupID(lua_State *L) { - UINT8 ubID = 0; + UINT16 ubID = 0; BOOLEAN Bool = FALSE; SOLDIERTYPE * pSoldier; UINT8 GroupID; @@ -13269,7 +13259,7 @@ static int l_DoInteractiveActionDefaultResult( lua_State *L ) if ( lua_gettop( L ) >= 3 ) { INT32 sGridNo = lua_tointeger( L, 1 ); - UINT8 ubID = lua_tointeger( L, 2 ); + UINT16 ubID = lua_tointeger( L, 2 ); BOOLEAN success = lua_tointeger( L, 3 ); DoInteractiveActionDefaultResult( sGridNo, ubID, success ); @@ -13282,7 +13272,7 @@ static int l_GiveExp( lua_State *L ) { if ( lua_gettop( L ) >= 3 ) { - UINT8 ubID = lua_tointeger( L, 1 ); + UINT16 ubID = lua_tointeger( L, 1 ); UINT8 ubStat = lua_tointeger( L, 2 ); UINT16 usNumChances = lua_tointeger( L, 3 ); @@ -13375,7 +13365,7 @@ static int l_SoldierSpendMoney( lua_State *L ) { if ( lua_gettop( L ) >= 2 ) { - UINT8 usId = lua_tointeger( L, 1 ); + UINT16 usId = lua_tointeger( L, 1 ); UINT32 amount = lua_tointeger( L, 2 ); lua_pushinteger( L, SpendMoney( MercPtrs[usId], amount ) ); diff --git a/Strategic/LuaInitNPCs.h b/Strategic/LuaInitNPCs.h index cd663ede..043c0fa1 100644 --- a/Strategic/LuaInitNPCs.h +++ b/Strategic/LuaInitNPCs.h @@ -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, UINT16 ubId, UINT16 usActionType, INT32 sLuaactionid, INT32 difficulty, UINT16 skill ); void LuaRecruitRPCAdditionalHandling( UINT8 usProfile ); void LuaHandleSectorTacticalEntry( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ, BOOLEAN fHasEverBeenPlayerControlled ); diff --git a/Strategic/Map Screen Helicopter.cpp b/Strategic/Map Screen Helicopter.cpp index 59033941..a48f9a32 100644 --- a/Strategic/Map Screen Helicopter.cpp +++ b/Strategic/Map Screen Helicopter.cpp @@ -76,7 +76,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; diff --git a/Strategic/Map Screen Interface Map Inventory.cpp b/Strategic/Map Screen Interface Map Inventory.cpp index dafeaf18..faea4fbc 100644 --- a/Strategic/Map Screen Interface Map Inventory.cpp +++ b/Strategic/Map Screen Interface Map Inventory.cpp @@ -205,7 +205,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; +INT16 sObjectSourseSoldierID = -1; // number of unseen items in sector UINT32 uiNumberOfUnSeenItems = 0; diff --git a/Strategic/Map Screen Interface Map.cpp b/Strategic/Map Screen Interface Map.cpp index 0f0619fa..e0645860 100644 --- a/Strategic/Map Screen Interface Map.cpp +++ b/Strategic/Map Screen Interface Map.cpp @@ -478,10 +478,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? @@ -604,11 +604,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; diff --git a/Strategic/Map Screen Interface Map.h b/Strategic/Map Screen Interface Map.h index 2077ae18..f80ac677 100644 --- a/Strategic/Map Screen Interface Map.h +++ b/Strategic/Map Screen Interface Map.h @@ -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; diff --git a/Strategic/Map Screen Interface.cpp b/Strategic/Map Screen Interface.cpp index 40974757..4b90b9e5 100644 --- a/Strategic/Map Screen Interface.cpp +++ b/Strategic/Map Screen Interface.cpp @@ -70,8 +70,8 @@ extern UILayout_CharPanelIconRegion UI_CHAR_Icon; extern UILayout_CharList UI_CHARLIST; // marke strogg more mercs -extern UINT8 FIRSTmercTOdisplay = 0 ; -extern UINT8 maxNumberOfMercVisibleInStrategyList = 0; // WANNE: Max merc displayed in the list depends on the resolution +extern UINT16 FIRSTmercTOdisplay = 0 ; +extern UINT16 maxNumberOfMercVisibleInStrategyList = 0; // WANNE: Max merc displayed in the list depends on the resolution // inventory pool position on screen #define MAP_INVEN_POOL_X 300 @@ -227,7 +227,7 @@ extern UINT32 guiSAVEBUFFER; extern BOOLEAN fShowInventoryFlag; extern FACETYPE *gpCurrentTalkingFace; -extern UINT8 gubCurrentTalkingID; +extern UINT16 gubCurrentTalkingID; extern BOOLEAN fMapScreenBottomDirty; extern MOUSE_REGION gMPanelRegion; @@ -1355,7 +1355,7 @@ void HandleDisplayOfSelectedMercArrows( void ) { INT16 sYPosition = 0; HVOBJECT hHandle; - UINT8 ubCount = 0; + UINT16 ubCount = 0; UINT16 selectedCharArrowX = UI_CHARLIST.Region.x + 1; @@ -2119,8 +2119,8 @@ void FindAndSetThisContractSoldier( SOLDIERTYPE *pSoldier ) { if( gCharactersList[ iCounter].usSolID == pSoldier->ubID ) { - ChangeSelectedInfoChar( ( INT8 )iCounter, TRUE ); - bSelectedContractChar = ( INT8 )iCounter; + ChangeSelectedInfoChar( ( INT16 )iCounter, TRUE ); + bSelectedContractChar = ( INT16 )iCounter; fShowContractMenu = TRUE; // create @@ -2373,9 +2373,9 @@ void RandomMercInGroupSaysQuote( GROUP *pGroup, UINT16 usQuoteNum ) { PLAYERGROUP *pPlayer; SOLDIERTYPE *pSoldier; - UINT8 ubMercsInGroup[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ]; - UINT8 ubNumMercs = 0; - UINT8 ubChosenMerc; + UINT16 ubMercsInGroup[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ]; + UINT16 ubNumMercs = 0; + UINT16 ubChosenMerc; // if traversing tactically, don't do this, unless time compression was required for some reason (don't go to sector) @@ -2406,7 +2406,7 @@ void RandomMercInGroupSaysQuote( GROUP *pGroup, UINT16 usQuoteNum ) // At least say quote.... if ( ubNumMercs > 0 ) { - ubChosenMerc = (UINT8)Random( ubNumMercs ); + ubChosenMerc = (UINT16)Random( ubNumMercs ); pSoldier = MercPtrs[ ubMercsInGroup[ ubChosenMerc ] ]; TacticalCharacterDialogue( pSoldier, usQuoteNum ); @@ -2454,7 +2454,7 @@ BOOLEAN ValidSelectableCharForNextOrPrev( INT32 iNewCharSlot ) if ( fShowInventoryFlag || fHoldingItem ) { // the new guy must have accessible inventory - if ( !MapCharacterHasAccessibleInventory( ( INT8 ) iNewCharSlot ) ) + if ( !MapCharacterHasAccessibleInventory( ( INT16 ) iNewCharSlot ) ) { return( FALSE ); } @@ -3761,60 +3761,67 @@ void CreatePopUpBoxForMovementBox( void ) // create the pop up box and mouse regions for movement list - // create basic box - CreatePopUpBox(&ghMoveBox, AssignmentDimensions, MovePosition, (POPUP_BOX_FLAG_CLIP_TEXT|POPUP_BOX_FLAG_RESIZE )); + // create basic box + CreatePopUpBox(&ghMoveBox, AssignmentDimensions, MovePosition, ( POPUP_BOX_FLAG_CLIP_TEXT|POPUP_BOX_FLAG_RESIZE )); - // which buffer will box render to - SetBoxBuffer(ghMoveBox, FRAME_BUFFER); + // which buffer will box render to + SetBoxBuffer(ghMoveBox, FRAME_BUFFER); - // border type? - SetBorderType(ghMoveBox,guiPOPUPBORDERS); + // border type? + SetBorderType(ghMoveBox,guiPOPUPBORDERS); - // background texture - SetBackGroundSurface(ghMoveBox, guiPOPUPTEX); + // background texture + SetBackGroundSurface(ghMoveBox, guiPOPUPTEX); - // margin sizes - SetMargins( ghMoveBox, 6, 6, 4, 4 ); + // margin sizes + SetMargins( ghMoveBox, 6, 6, 4, 4 ); - // space between lines - SetLineSpace(ghMoveBox, 2); + // space between lines + SetLineSpace(ghMoveBox, 2); - // set current box to this one - SetCurrentBox( ghMoveBox ); + // set current box to this one + SetCurrentBox( ghMoveBox ); - // add strings - AddStringsToMoveBox( ); + // add strings + AddStringsToMoveBox( ); - // set font type - SetBoxFont(ghMoveBox, MAP_SCREEN_FONT); + // set font type + SetBoxFont(ghMoveBox, MAP_SCREEN_FONT); - // set highlight color - SetBoxHighLight(ghMoveBox, FONT_WHITE); + // set highlight color + SetBoxHighLight(ghMoveBox, FONT_WHITE); - // unhighlighted color - SetBoxForeground(ghMoveBox, FONT_LTGREEN); + // unhighlighted color + SetBoxForeground(ghMoveBox, FONT_LTGREEN); - // make the header line WHITE - SetBoxLineForeground( ghMoveBox, 0, FONT_WHITE ); + // make the header line WHITE + SetBoxLineForeground( ghMoveBox, 0, FONT_WHITE ); - // make the done and cancel lines YELLOW - SetBoxLineForeground( ghMoveBox, GetNumberOfLinesOfTextInBox( ghMoveBox ) - 1, FONT_YELLOW ); + // make the done and cancel lines YELLOW + SetBoxLineForeground( ghMoveBox, GetNumberOfLinesOfTextInBox( ghMoveBox ) - 1, FONT_YELLOW ); if ( IsAnythingSelectedForMoving() ) { SetBoxLineForeground( ghMoveBox, GetNumberOfLinesOfTextInBox( ghMoveBox ) - 2, FONT_YELLOW ); } - // background color - SetBoxBackground(ghMoveBox, FONT_BLACK); + // background color + SetBoxBackground(ghMoveBox, FONT_BLACK); - // shaded color..for darkened text - SetBoxShade( ghMoveBox, FONT_BLACK ); + // shaded color..for darkened text + SetBoxShade( ghMoveBox, FONT_BLACK ); + SetBoxSecondColumnForeground(ghMoveBox, FONT_LTGREEN); + SetBoxSecondColumnBackground(ghMoveBox, FONT_BLACK); + SetBoxSecondColumnHighLight(ghMoveBox, FONT_WHITE); + SetBoxSecondColumnShade(ghMoveBox, FONT_BLACK); + SetBoxSecondColumnFont(ghMoveBox, MAP_SCREEN_FONT); + SetBoxSecondColumnMinimumOffset(ghMoveBox, 1); + SetBoxSecondColumnOffsetAdjustment(ghMoveBox, -50); - // resize box to text - ResizeBoxToText( ghMoveBox ); + // resize box to text + ResizeBoxToText( ghMoveBox ); GetBoxPosition( ghMoveBox, &Position); GetBoxSize( ghMoveBox, &Dimensions ); @@ -3841,7 +3848,9 @@ void AddStringsToMoveBox( void ) CHAR16 sString[ 128 ], sStringB[ 128 ]; UINT32 hStringHandle; BOOLEAN fFirstOne = TRUE; - + const INT32 firstColumnMaxEntries = 4 * gGameOptions.ubSquadSize; + INT32 entries = 0; + bool isFirstColumnFull = false; // set the current box SetCurrentBox( ghMoveBox ); @@ -3854,16 +3863,19 @@ void AddStringsToMoveBox( void ) GetShortSectorString( sSelMapX, sSelMapY, sStringB ); swprintf( sString, L"%s %s", pMovementMenuStrings[ 0 ], sStringB ); AddMonoString(&hStringHandle, sString ); + AddSecondColumnMonoString(&hStringHandle, L""); // blank line AddMonoString(&hStringHandle, L"" ); + AddSecondColumnMonoString(&hStringHandle, L""); // add Select all line if (giNumberOfSquadsInSectorMoving > 1) { swprintf(sString, L"%s", pMovementMenuStrings[4]); AddMonoString(&hStringHandle, sString); + AddSecondColumnMonoString(&hStringHandle, L""); } @@ -3885,7 +3897,15 @@ void AddStringsToMoveBox( void ) else swprintf( sString, L"%s", pSquadMenuStrings[iSquadMovingList[ iCount ] ] ); } - AddMonoString(&hStringHandle, sString ); + if (!isFirstColumnFull) + { + AddMonoString(&hStringHandle, sString); + } + else + { + AddMonoStringToSecondColumn(&hStringHandle, sString ); + } + entries += 1; // now add all the grunts in it for( iCountB = 0; iCountB < giNumberOfSoldiersInSectorMoving; iCountB++ ) @@ -3901,9 +3921,23 @@ void AddStringsToMoveBox( void ) { swprintf( sString, L" %s", pSoldierMovingList[ iCountB ]->name ); } - AddMonoString(&hStringHandle, sString ); + + if (!isFirstColumnFull) + { + AddMonoString(&hStringHandle, sString); + } + else + { + AddMonoStringToSecondColumn(&hStringHandle, sString); + } + entries += 1; } } + + if (entries > firstColumnMaxEntries) + { + isFirstColumnFull = true; + } } @@ -4202,7 +4236,7 @@ void ClearMouseRegionsForMoveBox( void ) INT32 iCounter = 0; // run through list of mouse regions - for( iCounter = 0; iCounter < ( INT32 )GetNumberOfLinesOfTextInBox( ghMoveBox ); iCounter++ ) + for( iCounter = 0; iCounter < ( INT32 )(GetNumberOfLinesOfTextInBox( ghMoveBox ) + GetNumberOfSecondaryLinesOfTextInBox(ghMoveBox)); iCounter++) { // remove this region MSYS_RemoveRegion( &gMoveMenuRegion[ iCounter ] ); @@ -4647,11 +4681,11 @@ void HandleSettingTheSelectedListOfMercs( void ) // yes, then set them as the destination plotting character for movement arrow purposes fFirstOne = FALSE; - SetSelectedDestChar(( INT8 )iCounter ); + SetSelectedDestChar(( INT16 )iCounter ); // make DEST column glow giDestHighLine = iCounter; - ChangeSelectedInfoChar( ( INT8 ) iCounter, TRUE ); + ChangeSelectedInfoChar( ( INT16 ) iCounter, TRUE ); } // add this guy to the selected list of grunts @@ -6185,7 +6219,7 @@ BOOLEAN CanCharacterMoveInStrategic( SOLDIERTYPE *pSoldier, INT8 *pbErrorNumber ( !pSoldier->flags.fBetweenSectors ) && gMercProfiles[ ELDIN ].bMercStatus != MERC_IS_DEAD ) { //DBrot: More Rooms - UINT8 /*ubRoom,*/ cnt; + UINT16 /*ubRoom,*/ cnt; UINT16 usRoom; SOLDIERTYPE * pSoldier2; diff --git a/Strategic/Map Screen Interface.h b/Strategic/Map Screen Interface.h index 4e0ad4ed..69c19e3a 100644 --- a/Strategic/Map Screen Interface.h +++ b/Strategic/Map Screen Interface.h @@ -24,8 +24,8 @@ typedef struct FASTHELPREGION { // Flugente: externalised squad names extern std::vector gSquadNameVector; -extern UINT8 FIRSTmercTOdisplay ; -extern UINT8 maxNumberOfMercVisibleInStrategyList; +extern UINT16 FIRSTmercTOdisplay ; +extern UINT16 maxNumberOfMercVisibleInStrategyList; // String Lengths Defines #define MAX_NAME_LENGTH 10 diff --git a/Strategic/Merc Contract.cpp b/Strategic/Merc Contract.cpp index 18e812c3..69b1f419 100644 --- a/Strategic/Merc Contract.cpp +++ b/Strategic/Merc Contract.cpp @@ -286,7 +286,7 @@ void EndCurrentContractRenewal( ) } } -void HandleMercIsWillingToRenew( UINT8 ubID ) +void HandleMercIsWillingToRenew( UINT16 ubID ) { SOLDIERTYPE *pSoldier = MercPtrs[ ubID ]; @@ -306,7 +306,7 @@ void HandleMercIsWillingToRenew( UINT8 ubID ) } -void HandleMercIsNotWillingToRenew( UINT8 ubID ) +void HandleMercIsNotWillingToRenew( UINT16 ubID ) { SOLDIERTYPE *pSoldier = MercPtrs[ ubID ]; @@ -746,9 +746,9 @@ BOOLEAN WillMercRenew( SOLDIERTYPE *pSoldier, BOOLEAN fSayQuote ) void HandleBuddiesReactionToFiringMerc(SOLDIERTYPE *pFiredSoldier, INT8 bMoraleEvent ) { - INT8 bMercID; - INT8 bLastTeamID; - SOLDIERTYPE * pSoldier; + UINT16 bMercID; + UINT16 bLastTeamID; + SOLDIERTYPE * pSoldier; bMercID = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; @@ -1456,9 +1456,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; + UINT16 ubPotentialMercs[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ] = { 0 }; + UINT16 ubNumMercs = 0; + UINT16 ubChosenMerc; gfFirstMercSayQuote = FALSE; @@ -1538,7 +1538,7 @@ void FindOutIfAnyMercAboutToLeaveIsGonnaRenew( void ) // OK, pick one.... if ( ubNumMercs > 0 ) { - ubChosenMerc = (UINT8)Random( ubNumMercs ); + ubChosenMerc = (UINT16)Random( ubNumMercs ); SpecialCharacterDialogueEvent( DIALOGUE_SPECIAL_EVENT_LOCK_INTERFACE,1 ,MAP_SCREEN ,0 ,0 ,0 ); HandleImportantMercQuote( MercPtrs[ ubPotentialMercs[ ubChosenMerc ] ], QUOTE_CONTRACTS_OVER ); diff --git a/Strategic/Merc Contract.h b/Strategic/Merc Contract.h index 88a0fbfb..abfc0ec5 100644 --- a/Strategic/Merc Contract.h +++ b/Strategic/Merc Contract.h @@ -68,8 +68,8 @@ void FindOutIfAnyMercAboutToLeaveIsGonnaRenew( void ); void BeginContractRenewalSequence( ); void HandleContractRenewalSequence( ); void EndCurrentContractRenewal( ); -void HandleMercIsWillingToRenew( UINT8 ubID ); -void HandleMercIsNotWillingToRenew( UINT8 ubID ); +void HandleMercIsWillingToRenew( UINT16 ubID ); +void HandleMercIsNotWillingToRenew( UINT16 ubID ); BOOLEAN ContractIsExpiring( SOLDIERTYPE *pSoldier ); UINT32 GetHourWhenContractDone( SOLDIERTYPE *pSoldier ); diff --git a/Strategic/PreBattle Interface.cpp b/Strategic/PreBattle Interface.cpp index f285cd2e..a3bacc9b 100644 --- a/Strategic/PreBattle Interface.cpp +++ b/Strategic/PreBattle Interface.cpp @@ -1728,7 +1728,7 @@ 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( UINT16 i = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; i <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; i++ ) { if ( MercPtrs[i]->bActive && MercPtrs[i]->stats.bLife >= OKLIFE ) { diff --git a/Strategic/Queen Command.cpp b/Strategic/Queen Command.cpp index eb32fe44..0ecf8901 100644 --- a/Strategic/Queen Command.cpp +++ b/Strategic/Queen Command.cpp @@ -600,7 +600,7 @@ UINT8 NumFreeSlots( UINT8 ubTeam ) return ubNumFreeSlots; } - +#pragma optimize("",off) //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) @@ -1152,7 +1152,7 @@ BOOLEAN PrepareEnemyForUndergroundBattle() Assert( FALSE ); return FALSE; } - +#pragma optimize("",on) //The queen AI layer must process the event by subtracting forces, etc. void ProcessQueenCmdImplicationsOfDeath( SOLDIERTYPE *pSoldier ) { diff --git a/Strategic/Quest Debug System.cpp b/Strategic/Quest Debug System.cpp index 7a92c874..d4daf16c 100644 --- a/Strategic/Quest Debug System.cpp +++ b/Strategic/Quest Debug System.cpp @@ -2997,9 +2997,9 @@ void DestroyQuestDebugTextInputBoxes() void AddNPCToGridNo( INT32 iGridNo ) { - SOLDIERCREATE_STRUCT MercCreateStruct; - INT16 sSectorX, sSectorY; - UINT8 ubID; + SOLDIERCREATE_STRUCT MercCreateStruct; + INT16 sSectorX, sSectorY; + UINT16 ubID; GetCurrentWorldSector( &sSectorX, &sSectorY ); MercCreateStruct.bTeam = CIV_TEAM; @@ -3670,10 +3670,7 @@ void IncrementActiveDropDownBox( INT16 sIncrementValue ) INT16 IsMercInTheSector( UINT16 usMercID ) { - if( usMercID == -1 ) - return( FALSE ); - - UINT8 cnt; + UINT16 cnt; for ( cnt=0; cnt < TOTAL_SOLDIERS; cnt++ ) { //if the merc is active diff --git a/Strategic/Quests.cpp b/Strategic/Quests.cpp index d8fea66d..0f947a77 100644 --- a/Strategic/Quests.cpp +++ b/Strategic/Quests.cpp @@ -186,7 +186,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; @@ -304,12 +304,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 ); @@ -399,7 +399,7 @@ BOOLEAN PCInSameRoom( UINT8 ubProfileID ) //DBrot: More Rooms //UINT8 ubRoom; UINT16 usRoom; - INT8 bLoop; + UINT16 bLoop; SOLDIERTYPE * pSoldier; pNPC = FindSoldierByProfileID( ubProfileID, FALSE ); @@ -541,8 +541,8 @@ BOOLEAN FemalePresent( UINT8 ubProfileID ) BOOLEAN CheckPlayerHasHead( void ) { - INT8 bLoop; - SOLDIERTYPE * pSoldier; + UINT16 bLoop; + SOLDIERTYPE * pSoldier; for ( bLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; bLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; bLoop++ ) { @@ -1725,7 +1725,7 @@ 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 ( UINT16 i = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; i <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; i++ ) { 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 && diff --git a/Strategic/Quests.h b/Strategic/Quests.h index f3a6b017..9ceab069 100644 --- a/Strategic/Quests.h +++ b/Strategic/Quests.h @@ -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 ); diff --git a/Strategic/Scheduling.cpp b/Strategic/Scheduling.cpp index f3843865..a3f36349 100644 --- a/Strategic/Scheduling.cpp +++ b/Strategic/Scheduling.cpp @@ -657,7 +657,7 @@ BOOLEAN SortSchedule( SCHEDULENODE *pSchedule ) BOOLEAN BumpAnyExistingMerc( INT32 sGridNo ) { - UINT8 ubID; + UINT16 ubID; SOLDIERTYPE * pSoldier; // NB this is the person already in the location, INT32 sNewGridNo; UINT8 ubDir; diff --git a/Strategic/Scheduling.h b/Strategic/Scheduling.h index aa80f5fb..084223fa 100644 --- a/Strategic/Scheduling.h +++ b/Strategic/Scheduling.h @@ -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; + UINT16 ubSoldierID; UINT16 usFlags; public: SCHEDULENODE& operator=(const _OLD_SCHEDULENODE& src); diff --git a/Strategic/Strategic Event Handler.cpp b/Strategic/Strategic Event Handler.cpp index a1207084..266f159a 100644 --- a/Strategic/Strategic Event Handler.cpp +++ b/Strategic/Strategic Event Handler.cpp @@ -55,7 +55,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]; diff --git a/Strategic/Strategic Merc Handler.cpp b/Strategic/Strategic Merc Handler.cpp index 6e131a77..e3541cf5 100644 --- a/Strategic/Strategic Merc Handler.cpp +++ b/Strategic/Strategic Merc Handler.cpp @@ -189,7 +189,7 @@ void StrategicHandlePlayerTeamMercDeath( SOLDIERTYPE *pSoldier ) void MercDailyUpdate() { INT32 cnt; - INT8 bLastTeamID; + UINT16 bLastTeamID; SOLDIERTYPE *pSoldier; //SOLDIERTYPE *pQuitList[ 21 ]; MERCPROFILESTRUCT *pProfile; @@ -725,7 +725,7 @@ 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( UINT16 ubID ) { SOLDIERTYPE *pSoldier; @@ -779,7 +779,7 @@ void MercsContractIsFinished( UINT8 ubID ) } // ATE: Called for RPCs who should now complain about no pay... -void RPCWhineAboutNoPay( UINT8 ubID ) +void RPCWhineAboutNoPay( UINT16 ubID ) { SOLDIERTYPE *pSoldier; @@ -908,17 +908,14 @@ 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; + UINT16 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; @@ -1259,7 +1256,7 @@ void UpdateBuddyAndHatedCounters( void ) void HourlyCamouflageUpdate( void ) { - INT8 bMercID, bLastTeamID; + UINT16 bMercID, bLastTeamID; SOLDIERTYPE * pSoldier; BOOLEAN camoWoreOff = FALSE; bMercID = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; diff --git a/Strategic/Strategic Merc Handler.h b/Strategic/Strategic Merc Handler.h index 838a24ab..2ea34e9f 100644 --- a/Strategic/Strategic Merc Handler.h +++ b/Strategic/Strategic Merc Handler.h @@ -6,8 +6,8 @@ class SOLDIERTYPE; void StrategicHandlePlayerTeamMercDeath( SOLDIERTYPE *pSoldier ); void MercDailyUpdate(); -void MercsContractIsFinished( UINT8 ubID ); -void RPCWhineAboutNoPay( UINT8 ubID ); +void MercsContractIsFinished( UINT16 ubID ); +void RPCWhineAboutNoPay( UINT16 ubID ); void MercComplainAboutEquipment( UINT8 ubProfileID ); BOOLEAN SoldierHasWorseEquipmentThanUsedTo( SOLDIERTYPE *pSoldier ); void UpdateBuddyAndHatedCounters( void ); diff --git a/Strategic/Strategic Mines.cpp b/Strategic/Strategic Mines.cpp index 19816871..1e9f0f72 100644 --- a/Strategic/Strategic Mines.cpp +++ b/Strategic/Strategic Mines.cpp @@ -136,7 +136,7 @@ UINT8 gubMonsterMineInfestation[]={ // the static NPC dialogue faces //extern UINT32 uiExternalStaticNPCFaces[]; extern FACETYPE *gpCurrentTalkingFace; -extern UINT8 gubCurrentTalkingID; +extern UINT16 gubCurrentTalkingID; diff --git a/Strategic/Strategic Movement.cpp b/Strategic/Strategic Movement.cpp index 67d0e69d..64693fc9 100644 --- a/Strategic/Strategic Movement.cpp +++ b/Strategic/Strategic Movement.cpp @@ -4366,7 +4366,7 @@ BOOLEAN LoadPlayerGroupList( HWFILE hFile, GROUP **pGroup ) //Should never happen Assert( sTempID != -1 ); - pTemp->ubID = (UINT8) sTempID; + pTemp->ubID = (UINT16) sTempID; pTemp->pSoldier = &Menptr[ pTemp->ubID ]; diff --git a/Strategic/Strategic Movement.h b/Strategic/Strategic Movement.h index d8bdfacd..58f95ade 100644 --- a/Strategic/Strategic Movement.h +++ b/Strategic/Strategic Movement.h @@ -52,7 +52,7 @@ 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 + UINT16 ubID; //index in the Menptr array SOLDIERTYPE *pSoldier; //direct access to the soldier pointer UINT8 bFlags; //flags referring to individual player soldiers struct PLAYERGROUP *next; //next player in list diff --git a/Strategic/Strategic Town Loyalty.cpp b/Strategic/Strategic Town Loyalty.cpp index 8fb982ad..802952d2 100644 --- a/Strategic/Strategic Town Loyalty.cpp +++ b/Strategic/Strategic Town Loyalty.cpp @@ -2133,9 +2133,9 @@ BOOLEAN DidFirstBattleTakePlaceInThisTown( INT8 bTownId ) UINT32 PlayerStrength( void ) { - UINT8 ubLoop; - SOLDIERTYPE * pSoldier; - UINT32 uiStrength, uiTotal = 0; + UINT16 ubLoop; + SOLDIERTYPE * pSoldier; + UINT32 uiStrength, uiTotal = 0; for ( ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++ ) { @@ -2155,9 +2155,9 @@ UINT32 PlayerStrength( void ) UINT32 EnemyStrength( void ) { - UINT8 ubLoop; - SOLDIERTYPE * pSoldier; - UINT32 uiStrength, uiTotal = 0; + UINT16 ubLoop; + SOLDIERTYPE * pSoldier; + UINT32 uiStrength, uiTotal = 0; for ( ubLoop = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; ubLoop <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ubLoop++ ) { diff --git a/Strategic/Strategic_VS2019.vcxproj b/Strategic/Strategic_VS2019.vcxproj index 4337e3f2..c87d17eb 100644 --- a/Strategic/Strategic_VS2019.vcxproj +++ b/Strategic/Strategic_VS2019.vcxproj @@ -175,67 +175,67 @@ StaticLibrary true NotSet - v142 + v143 StaticLibrary true NotSet - v142 + v143 StaticLibrary true NotSet - v142 + v143 StaticLibrary true NotSet - v142 + v143 StaticLibrary false false NotSet - v142 + v143 StaticLibrary false false NotSet - v142 + v143 StaticLibrary false false NotSet - v142 + v143 StaticLibrary false false NotSet - v142 + v143 StaticLibrary false false NotSet - v142 + v143 StaticLibrary false false NotSet - v142 + v143 diff --git a/Strategic/Strategic_VS2019.vcxproj.user b/Strategic/Strategic_VS2019.vcxproj.user new file mode 100644 index 00000000..88a55094 --- /dev/null +++ b/Strategic/Strategic_VS2019.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Strategic/mapscreen.cpp b/Strategic/mapscreen.cpp index e9798e15..878484be 100644 --- a/Strategic/mapscreen.cpp +++ b/Strategic/mapscreen.cpp @@ -502,7 +502,7 @@ BOOLEAN gfMapPanelWasRedrawn = FALSE; UINT8 gubMAP_HandInvDispText[ NUM_INV_SLOTS ]; // currently selected character's list index -INT8 bSelectedInfoChar = -1; +INT16 bSelectedInfoChar = -1; // map sort button images INT32 giMapSortButtonImage[ MAX_SORT_METHODS ] = { -1, -1, -1, -1, -1, -1 }; @@ -926,7 +926,6 @@ INT32 GetIndexForthis( SOLDIERTYPE *pSoldier ); void CheckForAndRenderNewMailOverlay(); -BOOLEAN MapCharacterHasAccessibleInventory( INT8 bCharNumber ); void CheckForInventoryModeCancellation(); void ChangeMapScreenMaskCursor( UINT16 usCursor ); @@ -1905,16 +1904,14 @@ BOOLEAN InitializeInvPanelCoordsRobot() } // the tries to select a mapscreen character by his soldier ID -BOOLEAN SetInfoChar( UINT8 ubID ) +BOOLEAN SetInfoChar( UINT16 ubID ) { - INT8 bCounter; - - for ( bCounter = 0; bCounter < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS; bCounter++) + for (INT16 bCounter = 0; bCounter < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS; bCounter++) { // skip invalid characters if ( gCharactersList[ bCounter ].fValid == TRUE ) { - if ( gCharactersList[ bCounter ].usSolID == (UINT16)ubID ) + if ( gCharactersList[ bCounter ].usSolID == ubID ) { ChangeSelectedInfoChar( bCounter, TRUE ); return( TRUE ); @@ -3985,7 +3982,7 @@ void AddCharacter( SOLDIERTYPE *pCharacter ) } // copy over soldier id value - gCharactersList[usCount].usSolID = ( UINT16 )pCharacter->ubID; + gCharactersList[usCount].usSolID = pCharacter->ubID; // valid character gCharactersList[usCount].fValid = TRUE; @@ -5338,9 +5335,19 @@ UINT32 MapScreenHandle(void) CreateMouseRegionForPauseOfClock( INTERFACE_CLOCK_X, INTERFACE_CLOCK_Y ); // WANNE: The number of merc we can display in the list, depends on the resolution - if (iResolution >= _640x480 && iResolution < _800x600) + if (isWidescreenUI()) { - maxNumberOfMercVisibleInStrategyList = 22; + if (giMAXIMUM_NUMBER_OF_PLAYER_SLOTS <= 57) + maxNumberOfMercVisibleInStrategyList = giMAXIMUM_NUMBER_OF_PLAYER_SLOTS; + else + maxNumberOfMercVisibleInStrategyList = 57; + } + else if (iResolution >= _1024x768) + { + if (giMAXIMUM_NUMBER_OF_PLAYER_SLOTS <= 51) + maxNumberOfMercVisibleInStrategyList = giMAXIMUM_NUMBER_OF_PLAYER_SLOTS; + else + maxNumberOfMercVisibleInStrategyList = 51; } else if (iResolution < _1024x768) { @@ -5348,10 +5355,7 @@ UINT32 MapScreenHandle(void) } else { - if (giMAXIMUM_NUMBER_OF_PLAYER_SLOTS <= 51) - maxNumberOfMercVisibleInStrategyList = giMAXIMUM_NUMBER_OF_PLAYER_SLOTS; - else - maxNumberOfMercVisibleInStrategyList = 51; + maxNumberOfMercVisibleInStrategyList = 22; } // create mouse regions @@ -7629,9 +7633,9 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) { if( gCharactersList[ giHighLine ].fValid == TRUE ) { - bSelectedAssignChar = ( INT8 )giHighLine; + bSelectedAssignChar = ( INT16 )giHighLine; RebuildAssignmentsBox( ); - ChangeSelectedInfoChar( ( INT8 ) giHighLine, FALSE ); + ChangeSelectedInfoChar( ( INT16 ) giHighLine, FALSE ); fShowAssignmentMenu = TRUE; } } @@ -7639,7 +7643,7 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) { if( gCharactersList[ bSelectedInfoChar ].fValid == TRUE ) { - bSelectedAssignChar = ( INT8 )bSelectedInfoChar; + bSelectedAssignChar = bSelectedInfoChar; RebuildAssignmentsBox( ); fShowAssignmentMenu = TRUE; } @@ -11482,7 +11486,7 @@ void TeamListAssignmentRegionBtnCallBack(MOUSE_REGION *pRegion, INT32 iReason ) return; } - bSelectedAssignChar = ( INT8 ) iValue + FIRSTmercTOdisplay; + bSelectedAssignChar = ( INT16 ) iValue + FIRSTmercTOdisplay; RebuildAssignmentsBox( ); // reset dest character @@ -11740,7 +11744,7 @@ void TeamListDestinationRegionBtnCallBack(MOUSE_REGION *pRegion, INT32 iReason ) // select this character as the one plotting strategic movement - SetSelectedDestChar( (INT8)iValue + FIRSTmercTOdisplay ); + SetSelectedDestChar( (INT16)iValue + FIRSTmercTOdisplay ); // remember the current paths for all selected characters so we can restore them if need be RememberPreviousPathForAllSelectedChars(); @@ -12793,7 +12797,7 @@ void ReBuildCharactersList( void ) void HandleChangeOfInfoChar( void ) { - static INT8 bOldInfoChar = -1; + static INT16 bOldInfoChar = -1; if( bSelectedInfoChar != bOldInfoChar ) { @@ -12849,7 +12853,7 @@ void TestMessageSystem( void ) void EnableDisableTeamListRegionsAndHelpText( void ) { // check if valid character here, if so, then do nothing..other wise set help text timer to a gazillion - INT8 bCharNum; + INT16 bCharNum; for( bCharNum = 0; bCharNum < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS; bCharNum++ ) @@ -13004,10 +13008,10 @@ void UpdatePausedStatesDueToTimeCompression( void ) BOOLEAN ContinueDialogue(SOLDIERTYPE *pSoldier, BOOLEAN fDone ) { // continue this grunts dialogue, restore when done - static INT8 bOldSelectedInfoChar = -1; + static INT16 bOldSelectedInfoChar = -1; static BOOLEAN fTalkingingGuy = FALSE; - INT8 bCounter = 0; + UINT16 bCounter = 0; @@ -13665,9 +13669,9 @@ void UpdateStatusOfMapSortButtons( void ) -INT8 GetLastValidCharacterInTeamPanelList( void ) +INT16 GetLastValidCharacterInTeamPanelList( void ) { - INT8 iCounter = 0, iValue = 0; + INT16 iCounter = 0, iValue = 0; // run through the list and find the last valid guy in the list for( iCounter = 0; iCounter < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS; iCounter++ ) @@ -14543,7 +14547,7 @@ void SortListOfMercsInTeamPanel( BOOLEAN fRetainSelectedMercs, BOOLEAN fReverse INT32 iCounter = 0, iCounterA = 0; INT16 sEndSectorA, sEndSectorB; INT32 iExpiryTime, iExpiryTimeA; - UINT8 uiID, uiIDA; + UINT16 uiID, uiIDA; SOLDIERTYPE *pSelectedSoldier[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ]; SOLDIERTYPE *pCurrentSoldier = NULL; SOLDIERTYPE *pPreviousSelectedInfoChar = NULL; @@ -15093,7 +15097,7 @@ BOOLEAN CanToggleSelectedCharInventory( void ) -BOOLEAN MapCharacterHasAccessibleInventory( INT8 bCharNumber ) +BOOLEAN MapCharacterHasAccessibleInventory( INT16 bCharNumber ) { SOLDIERTYPE *pSoldier = NULL; @@ -15606,7 +15610,7 @@ INT32 GetContractExpiryTime( SOLDIERTYPE *pSoldier ) -void ChangeSelectedInfoChar( INT8 bCharNumber, BOOLEAN fResetSelectedList ) +void ChangeSelectedInfoChar( INT16 bCharNumber, BOOLEAN fResetSelectedList ) { Assert( ( bCharNumber >= -1 ) && ( bCharNumber < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS ) ); @@ -16177,10 +16181,10 @@ void RandomAwakeSelectedMercConfirmsStrategicMove( void ) SOLDIERTYPE *pSoldier = NULL; INT32 iCounter; // WDS - make number of mercenaries, etc. be configurable - UINT8 ubSelectedMercID[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ]; - UINT8 ubSelectedMercIndex[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ]; - UINT8 ubNumMercs = 0; - UINT8 ubChosenMerc; + UINT16 ubSelectedMercID[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ]; + UINT16 ubSelectedMercIndex[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ]; + UINT16 ubNumMercs = 0; + UINT16 ubChosenMerc; for( iCounter = 0; iCounter < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS; iCounter++ ) @@ -16193,7 +16197,7 @@ void RandomAwakeSelectedMercConfirmsStrategicMove( void ) !AM_A_ROBOT( pSoldier ) && !AM_AN_EPC( pSoldier ) && !pSoldier->flags.fMercAsleep ) { ubSelectedMercID[ ubNumMercs ] = pSoldier->ubID; - ubSelectedMercIndex[ ubNumMercs ] = (UINT8)iCounter; + ubSelectedMercIndex[ ubNumMercs ] = (UINT16)iCounter; ubNumMercs++; } @@ -16202,7 +16206,7 @@ void RandomAwakeSelectedMercConfirmsStrategicMove( void ) if ( ubNumMercs > 0 ) { - ubChosenMerc = (UINT8)Random( ubNumMercs ); + ubChosenMerc = (UINT16)Random( ubNumMercs ); // select that merc so that when he speaks we're showing his portrait and not someone else ChangeSelectedInfoChar( ubSelectedMercIndex[ ubChosenMerc ], FALSE ); diff --git a/Strategic/mapscreen.h b/Strategic/mapscreen.h index 16188e05..47ae7936 100644 --- a/Strategic/mapscreen.h +++ b/Strategic/mapscreen.h @@ -135,7 +135,7 @@ extern BOOLEAN gfInChangeArrivalSectorMode; extern BOOLEAN gfSkyriderEmptyHelpGiven; -BOOLEAN SetInfoChar(UINT8 ubSolId); +BOOLEAN SetInfoChar(UINT16 ubID); void EndMapScreen( BOOLEAN fDuringFade ); void ReBuildCharactersList( void ); @@ -152,7 +152,7 @@ BOOLEAN CanExtendContractForCharSlot( INT8 bCharNumber ); void TellPlayerWhyHeCantCompressTime( void ); -void ChangeSelectedInfoChar( INT8 bCharNumber, BOOLEAN fResetSelectedList ); +void ChangeSelectedInfoChar( INT16 bCharNumber, BOOLEAN fResetSelectedList ); void MAPEndItemPointer(); @@ -169,7 +169,7 @@ void ExplainWhySkyriderCantFly( void ); BOOLEAN CanChangeSleepStatusForCharSlot( INT8 bCharNumber ); BOOLEAN CanChangeSleepStatusForSoldier( SOLDIERTYPE *pSoldier ); -BOOLEAN MapCharacterHasAccessibleInventory( INT8 bCharNumber ); +BOOLEAN MapCharacterHasAccessibleInventory( INT16 bCharNumber ); // CHRISL: New functions to handle initialization of inventory coordinates BOOLEAN InitializeInvPanelCoordsOld( ); diff --git a/Strategic/strategicmap.cpp b/Strategic/strategicmap.cpp index 03a881c7..47083f91 100644 --- a/Strategic/strategicmap.cpp +++ b/Strategic/strategicmap.cpp @@ -2058,7 +2058,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 ) { @@ -2777,7 +2777,7 @@ 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; + UINT16 cnt; SOLDIERTYPE * pSoldier; // are we in a mine sector, on the surface? @@ -4063,7 +4063,7 @@ 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 ) { diff --git a/Tactical/Air Raid.cpp b/Tactical/Air Raid.cpp index 7fae23ba..9ecf6bb1 100644 --- a/Tactical/Air Raid.cpp +++ b/Tactical/Air Raid.cpp @@ -310,9 +310,9 @@ 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; @@ -330,7 +330,7 @@ INT32 PickLocationNearAnyMercInSector( ) 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++; } } @@ -339,7 +339,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 ); @@ -1007,7 +1007,7 @@ void DoBombing( ) } // Drop bombs... - InternalIgniteExplosion( NOBODY, CenterX( sBombGridNo ), CenterY( sBombGridNo ), 0, sBombGridNo, usItem, fLocate , (UINT8)IsRoofPresentAtGridNo( sBombGridNo ) ); + InternalIgniteExplosion( NOBODY, CenterX( sBombGridNo ), CenterY( sBombGridNo ), 0, sBombGridNo, usItem, fLocate, (UINT8)IsRoofPresentAtGridNo( sBombGridNo ) ); } diff --git a/Tactical/Animation Data.cpp b/Tactical/Animation Data.cpp index 89222898..63cd8310 100644 --- a/Tactical/Animation Data.cpp +++ b/Tactical/Animation Data.cpp @@ -917,7 +917,7 @@ BOOLEAN DeInitAnimationSystem( ) -STRUCTURE_FILE_REF *InternalGetAnimationStructureRef( UINT8 usSoldierID, UINT16 usSurfaceIndex, UINT16 usAnimState, BOOLEAN fUseAbsolute ) +STRUCTURE_FILE_REF *InternalGetAnimationStructureRef( UINT16 usSoldierID, UINT16 usSurfaceIndex, UINT16 usAnimState, BOOLEAN fUseAbsolute ) { INT8 bStructDataType; @@ -946,13 +946,13 @@ STRUCTURE_FILE_REF *InternalGetAnimationStructureRef( UINT8 usSoldierID, UINT16 } -STRUCTURE_FILE_REF *GetAnimationStructureRef( UINT8 usSoldierID, UINT16 usSurfaceIndex, UINT16 usAnimState ) +STRUCTURE_FILE_REF *GetAnimationStructureRef( UINT16 usSoldierID, UINT16 usSurfaceIndex, UINT16 usAnimState ) { return( InternalGetAnimationStructureRef( usSoldierID, usSurfaceIndex, usAnimState, FALSE ) ); } -STRUCTURE_FILE_REF *GetDefaultStructureRef( UINT8 usSoldierID ) +STRUCTURE_FILE_REF *GetDefaultStructureRef( UINT16 usSoldierID ) { return( gAnimStructureDatabase[ MercPtrs[ usSoldierID ]->ubBodyType ][ DEFAULT_STRUCT ].pStructureFileRef ); } diff --git a/Tactical/Animation Data.h b/Tactical/Animation Data.h index f194748c..9d6dc7e7 100644 --- a/Tactical/Animation Data.h +++ b/Tactical/Animation Data.h @@ -696,8 +696,8 @@ void ClearAnimationSurfacesUsageHistory( UINT16 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( UINT16 usSoldierID, UINT16 usSurfaceIndex, UINT16 usAnimState ); +STRUCTURE_FILE_REF *GetDefaultStructureRef( UINT16 usSoldierID ); // Profile data extern ANIM_PROF *gpAnimProfiles; diff --git a/Tactical/Arms Dealer Init.cpp b/Tactical/Arms Dealer Init.cpp index 4cc5d083..7c5dd899 100644 --- a/Tactical/Arms Dealer Init.cpp +++ b/Tactical/Arms Dealer Init.cpp @@ -1818,7 +1818,7 @@ void RemoveRandomItemFromArmsDealerInventory( UINT8 ubArmsDealer, UINT16 usItemI } -BOOLEAN AddDeadArmsDealerItemsToWorld( UINT8 usProfileID, UINT8 aMercID ) +BOOLEAN AddDeadArmsDealerItemsToWorld( UINT8 usProfileID, UINT16 aMercID ) { //Get Dealer ID from from merc Id INT8 bArmsDealer = GetArmsDealerIDFromMercID( usProfileID ); diff --git a/Tactical/Arms Dealer Init.h b/Tactical/Arms Dealer Init.h index cccc3af2..1212f9c7 100644 --- a/Tactical/Arms Dealer Init.h +++ b/Tactical/Arms Dealer Init.h @@ -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, UINT16 aMercID ); void MakeObjectOutOfDealerItems( DEALER_SPECIAL_ITEM *pSpclItemInfo, OBJECTTYPE *pObject ); void CreateObjectForDealer( int usItem, int status, int numObjects, OBJECTTYPE *pObject ); diff --git a/Tactical/Auto Bandage.cpp b/Tactical/Auto Bandage.cpp index b254fb02..bd5e2309 100644 --- a/Tactical/Auto Bandage.cpp +++ b/Tactical/Auto Bandage.cpp @@ -89,7 +89,7 @@ BOOLEAN RemoveFacesForAutoBandage( void ); extern BOOLEAN CanCharacterAutoBandageTeammate( SOLDIERTYPE *pSoldier ); extern BOOLEAN CanCharacterBeAutoBandagedByTeammate( SOLDIERTYPE *pSoldier ); -extern UINT8 NumEnemyInSector( ); +extern UINT16 NumEnemyInSector( ); void BeginAutoBandage( ) { @@ -316,7 +316,7 @@ 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; @@ -399,7 +399,7 @@ void SetAutoBandageComplete( void ) void AutoBandage( BOOLEAN fStart ) { SGPRect aRect; - UINT8 ubLoop; + UINT16 ubLoop; INT32 cnt; SOLDIERTYPE * pSoldier; diff --git a/Tactical/Boxing.cpp b/Tactical/Boxing.cpp index 6ff8f35d..3c79b2d5 100644 --- a/Tactical/Boxing.cpp +++ b/Tactical/Boxing.cpp @@ -28,7 +28,7 @@ #endif INT32 gsBoxerGridNo[ NUM_BOXERS ] = { 11393, 11233, 11073 }; -UINT8 gubBoxerID[ NUM_BOXERS ] = { NOBODY, NOBODY, NOBODY }; +UINT16 gubBoxerID[ NUM_BOXERS ] = { NOBODY, NOBODY, NOBODY }; BOOLEAN gfBoxerFought[ NUM_BOXERS ] = { FALSE, FALSE, FALSE }; BOOLEAN gfLastBoxingMatchWonByPlayer = FALSE; UINT8 gubBoxingMatchesWon = 0; @@ -331,7 +331,7 @@ void CountPeopleInBoxingRingAndDoActions( void ) BOOLEAN CheckOnBoxers( void ) { UINT32 uiLoop; - UINT8 ubID; + UINT16 ubID; // repick boxer IDs every time if ( gubBoxerID[0] == NOBODY ) @@ -482,9 +482,9 @@ BOOLEAN AnotherFightPossible( void ) // a player has at least OKLIFE + 5 life // and at least one fight HAS occurred - UINT8 ubLoop; - SOLDIERTYPE * pSoldier; - UINT8 ubAvailable; + UINT16 ubLoop; + SOLDIERTYPE * pSoldier; + UINT8 ubAvailable; ubAvailable = BoxersAvailable(); diff --git a/Tactical/Boxing.h b/Tactical/Boxing.h index 89787494..4d4abf6e 100644 --- a/Tactical/Boxing.h +++ b/Tactical/Boxing.h @@ -20,7 +20,7 @@ enum DisqualificationReasons } ; extern INT32 gsBoxerGridNo[ NUM_BOXERS ]; -extern UINT8 gubBoxerID[ NUM_BOXERS ]; +extern UINT16 gubBoxerID[ NUM_BOXERS ]; extern BOOLEAN gfBoxerFought[ NUM_BOXERS ]; extern INT8 gbBoxingState; extern BOOLEAN gfLastBoxingMatchWonByPlayer; diff --git a/Tactical/Bullets.h b/Tactical/Bullets.h index db087445..2cd3e602 100644 --- a/Tactical/Bullets.h +++ b/Tactical/Bullets.h @@ -30,8 +30,8 @@ typedef struct LEVELNODE* pNodes[BULLET_TRACER_MAX_LENGTH]; //afp-end INT32 iBullet; - UINT8 ubFirerID; - UINT8 ubTargetID; + UINT16 ubFirerID; + UINT16 ubTargetID; INT8 bStartCubesAboveLevelZ; INT8 bEndCubesAboveLevelZ; INT32 sGridNo; @@ -83,7 +83,7 @@ typedef struct extern UINT32 guiNumBullets; -INT32 CreateBullet( UINT8 ubFirer, BOOLEAN fFake, UINT16 usFlags,UINT16 fromItem ); +INT32 CreateBullet( UINT16 ubFirerID, BOOLEAN fFake, UINT16 usFlags,UINT16 fromItem ); void RemoveBullet( INT32 iBullet ); void StopBullet( INT32 iBullet ); void UpdateBullets( ); diff --git a/Tactical/Campaign.cpp b/Tactical/Campaign.cpp index 770ebc64..a31dbd56 100644 --- a/Tactical/Campaign.cpp +++ b/Tactical/Campaign.cpp @@ -1837,7 +1837,7 @@ void TestDumpStatChanges(void) void AwardExperienceBonusToActiveSquad( UINT8 ubExpBonusType ) { UINT16 usXPs = 0; - UINT8 ubGuynum; + UINT16 ubGuynum; SOLDIERTYPE *pSoldier; diff --git a/Tactical/Civ Quotes.cpp b/Tactical/Civ Quotes.cpp index 11318873..38b3d2af 100644 --- a/Tactical/Civ Quotes.cpp +++ b/Tactical/Civ Quotes.cpp @@ -1127,7 +1127,7 @@ BOOLEAN LoadCivQuotesFromLoadGameFile( HWFILE hFile ) return( TRUE ); } //-------------------------------------------------------------- - +#pragma optimize("", off) // anv: start enemy taunt with probabilty depending on taunt settings void PossiblyStartEnemyTaunt( SOLDIERTYPE *pCiv, TAUNTTYPE iTauntType, UINT32 uiTargetID ) { @@ -1342,6 +1342,7 @@ void PossiblyStartEnemyTaunt( SOLDIERTYPE *pCiv, TAUNTTYPE iTauntType, UINT32 ui StartEnemyTaunt( pCiv, iTauntType, pTarget ); } +#pragma optimize("", on) // SANDRO - soldier taunts void StartEnemyTaunt( SOLDIERTYPE *pCiv, TAUNTTYPE iTauntType, SOLDIERTYPE *pTarget ) diff --git a/Tactical/Dialogue Control.cpp b/Tactical/Dialogue Control.cpp index 2d2efb52..e9c5576f 100644 --- a/Tactical/Dialogue Control.cpp +++ b/Tactical/Dialogue Control.cpp @@ -176,7 +176,7 @@ UINT8 gubNumStopTimeQuotes = 2; #define INITIAL_Q_SIZE 10 HQUEUE ghDialogueQ = NULL; FACETYPE *gpCurrentTalkingFace = NULL; -UINT8 gubCurrentTalkingID = NO_PROFILE; +UINT16 gubCurrentTalkingID = NO_PROFILE; INT8 gbUIHandlerID; INT32 giNPCReferenceCount = 0; @@ -763,7 +763,7 @@ void HandleDialogue( ) { SOLDIERTYPE * pMike; INT32 sPlayerGridNo; - UINT8 ubPlayerID; + UINT16 ubPlayerID; pMike = FindSoldierByProfileID( MIKE, FALSE ); if ( pMike ) @@ -949,11 +949,11 @@ void HandleDialogue( ) } else if ( QItem->uiSpecialEventFlag & DIALOGUE_SPECIAL_EVENT_CONTRACT_WANTS_TO_RENEW ) { - HandleMercIsWillingToRenew( (UINT8)QItem->uiSpecialEventData ); + HandleMercIsWillingToRenew( (UINT16)QItem->uiSpecialEventData ); } else if ( QItem->uiSpecialEventFlag & DIALOGUE_SPECIAL_EVENT_CONTRACT_NOGO_TO_RENEW ) { - HandleMercIsNotWillingToRenew( (UINT8)QItem->uiSpecialEventData ); + HandleMercIsNotWillingToRenew( (UINT16)QItem->uiSpecialEventData ); } else { @@ -2061,7 +2061,7 @@ BOOLEAN SpecialCharacterDialogueEventWithExtraParam( UINT32 uiSpecialEventFlag, } extern INT8 gbSelectedArmsDealerID; -extern UINT8 gusIDOfCivTrader; +extern UINT16 gusIDOfCivTrader; BOOLEAN ExecuteCharacterDialogue( UINT8 ubCharacterNum, UINT16 usQuoteNum, INT32 iFaceIndex, UINT8 bUIHandlerID, BOOLEAN fFromSoldier ) { @@ -3176,8 +3176,8 @@ void HandleDialogueEnd( FACETYPE *pFace ) SOLDIERTYPE *pSoldier = FindSoldierByProfileID( gTacticalStatus.ubLastQuoteProfileNUm, FALSE ); if ( pSoldier ) { - UINT8 ubSeenEnemies[ MAX_NUM_SOLDIERS ]; - UINT8 ubSeenEnemiesCnt = 0; + UINT16 ubSeenEnemies[ MAX_NUM_SOLDIERS ]; + UINT16 ubSeenEnemiesCnt = 0; switch( gTacticalStatus.ubLastQuoteSaid ) { case QUOTE_CLOSE_CALL: @@ -3188,7 +3188,7 @@ void HandleDialogueEnd( FACETYPE *pFace ) break; default: // select random enemy, who we see, who sees us and isn't deaf - for(UINT8 cnt = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; cnt <= gTacticalStatus.Team[ ENEMY_TEAM ].bLastID ; cnt++ ) + for(UINT16 cnt = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; cnt <= gTacticalStatus.Team[ ENEMY_TEAM ].bLastID ; cnt++ ) { if( MercPtrs[cnt] != NULL && MercPtrs[cnt]->aiData.bOppList[pSoldier->ubID] == SEEN_CURRENTLY && MercPtrs[pSoldier->ubID]->aiData.bOppList[cnt] == SEEN_CURRENTLY && !( MercPtrs[cnt]->bDeafenedCounter > 0 ) ) @@ -3359,9 +3359,9 @@ void RenderSubtitleBoxOverlay( VIDEO_OVERLAY *pBlitter ) void SayQuoteFromAnyBodyInSector( UINT16 usQuoteNum ) { // WDS - make number of mercenaries, etc. be configurable - std::vector ubMercsInSector (CODE_MAXIMUM_NUMBER_OF_PLAYER_MERCS, 0); - UINT8 ubNumMercs = 0; - UINT8 ubChosenMerc; + std::vector ubMercsInSector (CODE_MAXIMUM_NUMBER_OF_PLAYER_MERCS, 0); + UINT16 ubNumMercs = 0; + UINT16 ubChosenMerc; SOLDIERTYPE *pTeamSoldier; INT32 cnt; @@ -3395,7 +3395,7 @@ void SayQuoteFromAnyBodyInSector( UINT16 usQuoteNum ) #endif } - ubMercsInSector[ ubNumMercs ] = (UINT8)cnt; + ubMercsInSector[ ubNumMercs ] = (UINT16)cnt; ubNumMercs++; } } @@ -3403,7 +3403,7 @@ void SayQuoteFromAnyBodyInSector( UINT16 usQuoteNum ) // If we are > 0 if ( ubNumMercs > 0 ) { - ubChosenMerc = (UINT8)Random( ubNumMercs ); + ubChosenMerc = (UINT16)Random( ubNumMercs ); // If we are air raid, AND red exists somewhere... if ( usQuoteNum == QUOTE_AIR_RAID ) @@ -3412,7 +3412,7 @@ void SayQuoteFromAnyBodyInSector( UINT16 usQuoteNum ) { if ( ubMercsInSector[ cnt ] == 11 ) { - ubChosenMerc = (UINT8)cnt; + ubChosenMerc = (UINT16)cnt; break; } } @@ -3447,7 +3447,7 @@ void SayQuoteFromAnyBodyInThisSector( INT16 sSectorX, INT16 sSectorY, INT8 bSect // Add guy if he's a candidate... if( pTeamSoldier->sSectorX == sSectorX && pTeamSoldier->sSectorY == sSectorY && pTeamSoldier->bSectorZ == bSectorZ && !AM_AN_EPC( pTeamSoldier ) && !( pTeamSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) && !(AM_A_ROBOT( pTeamSoldier )) && !pTeamSoldier->flags.fMercAsleep ) { - ubMercsInSector[ ubNumMercs ] = (UINT8)cnt; + ubMercsInSector[ ubNumMercs ] = (UINT16)cnt; ++ubNumMercs; } } @@ -3481,9 +3481,9 @@ void SayQuoteFromAnyBodyInThisSector( INT16 sSectorX, INT16 sSectorY, INT8 bSect void SayQuoteFromNearbyMercInSector( INT32 sGridNo, INT8 bDistance, UINT16 usQuoteNum ) { // WDS - make number of mercenaries, etc. be configurable - std::vector ubMercsInSector (CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS, 0 ); - UINT8 ubNumMercs = 0; - UINT8 ubChosenMerc; + std::vector ubMercsInSector (CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS, 0 ); + UINT16 ubNumMercs = 0; + UINT16 ubChosenMerc; SOLDIERTYPE *pTeamSoldier; INT32 cnt; @@ -3503,7 +3503,7 @@ void SayQuoteFromNearbyMercInSector( INT32 sGridNo, INT8 bDistance, UINT16 usQuo { continue; } - ubMercsInSector[ ubNumMercs ] = (UINT8)cnt; + ubMercsInSector[ ubNumMercs ] = (UINT16)cnt; ubNumMercs++; } } @@ -3511,7 +3511,7 @@ void SayQuoteFromNearbyMercInSector( INT32 sGridNo, INT8 bDistance, UINT16 usQuo // If we are > 0 if ( ubNumMercs > 0 ) { - ubChosenMerc = (UINT8)Random( ubNumMercs ); + ubChosenMerc = (UINT16)Random( ubNumMercs ); if (usQuoteNum == 66) { @@ -3526,9 +3526,9 @@ void SayQuoteFromNearbyMercInSector( INT32 sGridNo, INT8 bDistance, UINT16 usQuo void SayQuote58FromNearbyMercInSector( INT32 sGridNo, INT8 bDistance, UINT16 usQuoteNum, INT8 bSex ) { // WDS - make number of mercenaries, etc. be configurable - std::vector ubMercsInSector (CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS, 0); - UINT8 ubNumMercs = 0; - UINT8 ubChosenMerc; + std::vector ubMercsInSector (CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS, 0); + UINT16 ubNumMercs = 0; + UINT16 ubChosenMerc; SOLDIERTYPE *pTeamSoldier; INT32 cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID; @@ -3553,7 +3553,7 @@ void SayQuote58FromNearbyMercInSector( INT32 sGridNo, INT8 bDistance, UINT16 usQ continue; } - ubMercsInSector[ ubNumMercs ] = (UINT8)cnt; + ubMercsInSector[ ubNumMercs ] = (UINT16)cnt; ++ubNumMercs; } } @@ -3561,7 +3561,7 @@ void SayQuote58FromNearbyMercInSector( INT32 sGridNo, INT8 bDistance, UINT16 usQ // If we are > 0 if ( ubNumMercs > 0 ) { - ubChosenMerc = (UINT8)Random( ubNumMercs ); + ubChosenMerc = (UINT16)Random( ubNumMercs ); TacticalCharacterDialogue( MercPtrs[ ubMercsInSector[ ubChosenMerc ] ], usQuoteNum ); } } diff --git a/Tactical/DynamicDialogue.cpp b/Tactical/DynamicDialogue.cpp index 68b69b1d..dd363506 100644 --- a/Tactical/DynamicDialogue.cpp +++ b/Tactical/DynamicDialogue.cpp @@ -1105,7 +1105,7 @@ void SetfDynamicOpinionSpeechInProgress( BOOLEAN aVal ) } -void AddOpinionEvent( UINT8 usProfileA, UINT8 usProfileB, UINT8 usEvent, BOOLEAN fStartDialogue ) +void AddOpinionEvent( UINT16 usProfileA, UINT16 usProfileB, UINT8 usEvent, BOOLEAN fStartDialogue ) { if ( usProfileA == NO_PROFILE || usProfileB == NO_PROFILE ) return; @@ -1669,10 +1669,9 @@ void RolloverDynamicOpinions( UINT8 usProfileA ) // check wether other people are friends with someone else we hate. All persons must be in Arulco void CheckForFriendsofHated( SOLDIERTYPE* pSoldier ) { - INT8 bMercID, bOtherID, bThirdID; + UINT16 bMercID, bOtherID, bThirdID, bLastTeamID; INT8 bOpinion = -1; INT8 bSecondOpinion = -1; - INT8 bLastTeamID; SOLDIERTYPE* pOtherSoldier; SOLDIERTYPE* pThirdSoldier; diff --git a/Tactical/DynamicDialogue.h b/Tactical/DynamicDialogue.h index 2eca4b6b..262fde2b 100644 --- a/Tactical/DynamicDialogue.h +++ b/Tactical/DynamicDialogue.h @@ -452,7 +452,7 @@ BOOLEAN LoadDynamicDialogue( HWFILE hwFile ); // modify usProfileA's opinion of usProfileB because of usEvent -void AddOpinionEvent( UINT8 usProfileA, UINT8 usProfileB, UINT8 usEvent, BOOLEAN fStartDialogue = TRUE ); +void AddOpinionEvent( UINT16 usProfileA, UINT16 usProfileB, UINT8 usEvent, BOOLEAN fStartDialogue = TRUE ); // get usProfileA's opinion of usProfileB on one of the last 4 days INT8 GetDynamicOpinionDay( UINT8 usProfileA, UINT8 usProfileB, UINT8 usDay ); diff --git a/Tactical/End Game.cpp b/Tactical/End Game.cpp index 93e5da86..cc95371f 100644 --- a/Tactical/End Game.cpp +++ b/Tactical/End Game.cpp @@ -182,7 +182,7 @@ void HandleDeidrannaDeath( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, INT8 bLev { SOLDIERTYPE *pTeamSoldier; INT32 cnt; - UINT8 ubKillerSoldierID = NOBODY; + UINT16 ubKillerSoldierID = NOBODY; // Start victory music here... SetMusicMode( MUSIC_TACTICAL_VICTORY ); @@ -673,7 +673,7 @@ void BeginHandleQueenBitchDeath( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, INT { // gTacticalStatus.ubAttackBusyCount++; DebugAttackBusy( "Killing off a queen ally.\n"); - pTeamSoldier->EVENT_SoldierGotHit( 0, 10000, 0, pTeamSoldier->ubDirection, 320, NOBODY , FIRE_WEAPON_NO_SPECIAL, pTeamSoldier->bAimShotLocation, 0, NOWHERE ); + pTeamSoldier->EVENT_SoldierGotHit( 0, 10000, 0, pTeamSoldier->ubDirection, 320, NOBODY, FIRE_WEAPON_NO_SPECIAL, pTeamSoldier->bAimShotLocation, 0, NOWHERE ); } } } @@ -685,7 +685,7 @@ void HandleQueenBitchDeath( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, INT8 bLe { SOLDIERTYPE *pTeamSoldier; INT32 cnt; - UINT8 ubKillerSoldierID = NOBODY; + UINT16 ubKillerSoldierID = NOBODY; // Start victory music here... SetMusicMode( MUSIC_TACTICAL_VICTORY ); diff --git a/Tactical/Faces.cpp b/Tactical/Faces.cpp index f1c8c658..28f01135 100644 --- a/Tactical/Faces.cpp +++ b/Tactical/Faces.cpp @@ -50,8 +50,6 @@ #endif // Defines -#define NUM_FACE_SLOTS 50 - #define END_FACE_OVERLAY_DELAY 2000 @@ -135,7 +133,7 @@ INT32 InitSoldierFace( SOLDIERTYPE *pSoldier ) } -INT32 InitFace( UINT8 usMercProfileID, UINT8 ubSoldierID, UINT32 uiInitFlags ) +INT32 InitFace( UINT8 usMercProfileID, UINT16 ubSoldierID, UINT32 uiInitFlags ) { UINT32 uiBlinkFrequency; UINT32 uiExpressionFrequency; @@ -162,7 +160,7 @@ INT32 InitFace( UINT8 usMercProfileID, UINT8 ubSoldierID, UINT32 uiInitFlags ) } -INT32 InternalInitFace( UINT8 usMercProfileID, UINT8 ubSoldierID, UINT32 uiInitFlags, INT32 iFaceFileID, UINT32 uiBlinkFrequency, UINT32 uiExpressionFrequency ) +INT32 InternalInitFace( UINT8 usMercProfileID, UINT16 ubSoldierID, UINT32 uiInitFlags, INT32 iFaceFileID, UINT32 uiBlinkFrequency, UINT32 uiExpressionFrequency ) { FACETYPE *pFace; VOBJECT_DESC VObjectDesc; @@ -557,7 +555,7 @@ void DeleteFace( INT32 iFaceIndex ) } -void SetAutoFaceActiveFromSoldier( UINT32 uiDisplayBuffer, UINT32 uiRestoreBuffer, UINT8 ubSoldierID , UINT16 usFaceX, UINT16 usFaceY ) +void SetAutoFaceActiveFromSoldier( UINT32 uiDisplayBuffer, UINT32 uiRestoreBuffer, UINT16 ubSoldierID, UINT16 usFaceX, UINT16 usFaceY ) { if( ubSoldierID == NOBODY ) { @@ -761,7 +759,7 @@ void InternalSetAutoFaceActive( UINT32 uiDisplayBuffer, UINT32 uiRestoreBuffer, } -void SetAutoFaceInActiveFromSoldier( UINT8 ubSoldierID ) +void SetAutoFaceInActiveFromSoldier( UINT16 ubSoldierID ) { // Check for valid soldier CHECKV( ubSoldierID != NOBODY ); @@ -1349,7 +1347,7 @@ void SetFaceShade( SOLDIERTYPE *pSoldier, FACETYPE *pFace, BOOLEAN fExternBlit ) } } -BOOLEAN RenderAutoFaceFromSoldier( UINT8 ubSoldierID ) +BOOLEAN RenderAutoFaceFromSoldier( UINT16 ubSoldierID ) { // Check for valid soldier CHECKF( ubSoldierID != NOBODY ); @@ -2107,10 +2105,10 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE // Flugente: are we supplying ammo to someone else? if (gGameExternalOptions.ubExternalFeeding > 0) { - UINT8 ubID1 = 0; + UINT16 ubID1 = 0; UINT16 ubGunSlot1 = 0; UINT16 ubFaceSlot1 = 0; - UINT8 ubID2 = 0; + UINT16 ubID2 = 0; UINT16 ubGunSlot2 = 0; UINT16 ubFaceSlot2 = 0; if (MercPtrs[pFace->ubSoldierID]->IsFeedingExternal(&ubID1, &ubGunSlot1, &ubFaceSlot1, &ubID2, &ubGunSlot2, &ubFaceSlot2)) @@ -2640,7 +2638,7 @@ BOOLEAN RenderAutoFace( INT32 iFaceIndex ) } -BOOLEAN ExternRenderFaceFromSoldier( UINT32 uiBuffer, UINT8 ubSoldierID, INT16 sX, INT16 sY ) +BOOLEAN ExternRenderFaceFromSoldier( UINT32 uiBuffer, UINT16 ubSoldierID, INT16 sX, INT16 sY ) { // Check for valid soldier CHECKF( ubSoldierID != NOBODY ); diff --git a/Tactical/Food.cpp b/Tactical/Food.cpp index 07172191..7f7a995e 100644 --- a/Tactical/Food.cpp +++ b/Tactical/Food.cpp @@ -105,7 +105,7 @@ BOOLEAN DoesSoldierRefuseToEat( SOLDIERTYPE *pSoldier, OBJECTTYPE *pObj ) if ( UsingFoodSystem() ) { // static variables to remember the last food someone was forced to eat - static UINT8 lasteater = 0; + static UINT16 lasteater = 0; static UINT16 lastitem = 0; UINT32 foodtype = Item[pObj->usItem].foodtype; @@ -765,8 +765,8 @@ void EatFromInventory( SOLDIERTYPE *pSoldier, BOOLEAN fcanteensonly ) void HourlyFoodUpdate( void ) { - INT8 bMercID, bLastTeamID; - SOLDIERTYPE * pSoldier = NULL; + UINT16 bMercID, bLastTeamID; + SOLDIERTYPE * pSoldier = NULL; bMercID = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; bLastTeamID = gTacticalStatus.Team[ gbPlayerNum ].bLastID; @@ -831,8 +831,8 @@ void SectorFillCanteens( void ) addtemperature = FOOD_WATER_POISONOUS_TEMPERATURE; // first step: fill all canteens in inventories - INT8 bMercID, bLastTeamID; - SOLDIERTYPE * pSoldier = NULL; + UINT16 bMercID, bLastTeamID; + SOLDIERTYPE * pSoldier = NULL; bMercID = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; bLastTeamID = gTacticalStatus.Team[ gbPlayerNum ].bLastID; @@ -905,8 +905,8 @@ void SectorFillCanteens( void ) INT32 drumsize = Food[Item[pWaterDrum->usItem].foodtype].bDrinkPoints; // first step: fill all canteens in inventories - INT8 bMercID, bLastTeamID; - SOLDIERTYPE * pSoldier = NULL; + UINT16 bMercID, bLastTeamID; + SOLDIERTYPE * pSoldier = NULL; bMercID = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; bLastTeamID = gTacticalStatus.Team[ gbPlayerNum ].bLastID; diff --git a/Tactical/Handle Doors.cpp b/Tactical/Handle Doors.cpp index 2c0b4fc8..34e7f81c 100644 --- a/Tactical/Handle Doors.cpp +++ b/Tactical/Handle Doors.cpp @@ -443,10 +443,8 @@ void ProcessImplicationsOfPCMessingWithDoor( SOLDIERTYPE * pSoldier ) // if player is hacking at a door in the brothel and a kingpin guy can see him if ( (InARoom( pSoldier->sGridNo, &usRoom ) && IN_BROTHEL( usRoom )) || (gWorldSectorX == 5 && gWorldSectorY == MAP_ROW_D && gbWorldSectorZ == 0 && (pSoldier->sGridNo == gModSettings.iBrothelDoor1 || pSoldier->sGridNo == gModSettings.iBrothelDoor2 || pSoldier->sGridNo == gModSettings.iBrothelDoor3 ) ) )//11010,11177,11176 { - UINT8 ubLoop; - // see if a kingpin goon can see us - for ( ubLoop = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; ubLoop <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ubLoop++ ) + for (UINT16 ubLoop = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; ubLoop <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ubLoop++ ) { pGoon = MercPtrs[ ubLoop ]; if ( pGoon->ubCivilianGroup == KINGPIN_CIV_GROUP && pGoon->bActive && pGoon->bInSector && pGoon->stats.bLife >= OKLIFE && pGoon->aiData.bOppList[ pSoldier->ubID ] == SEEN_CURRENTLY ) diff --git a/Tactical/Handle Items.cpp b/Tactical/Handle Items.cpp index 7f2ee470..2cf29c80 100644 --- a/Tactical/Handle Items.cpp +++ b/Tactical/Handle Items.cpp @@ -1023,7 +1023,7 @@ INT32 HandleItem( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel, UINT16 usHa if ( Item[usHandItem].toolkit ) { - UINT8 ubMercID; + UINT16 ubMercID; BOOLEAN fVehicle = FALSE; INT32 sVehicleGridNo=-1; @@ -1096,7 +1096,7 @@ INT32 HandleItem( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel, UINT16 usHa if ( Item[usHandItem].gascan ) { - UINT8 ubMercID; + UINT16 ubMercID; INT32 sVehicleGridNo=-1; // For repair, check if we are over a vehicle, then get gridnot to edge of that vehicle! @@ -1390,7 +1390,7 @@ INT32 HandleItem( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel, UINT16 usHa } } - UINT8 ubPerson = WhoIsThere2(usMapPos, pSoldier->pathing.bLevel); + UINT16 ubPerson = WhoIsThere2(usMapPos, pSoldier->pathing.bLevel); // Flugente: apply misc items to other soldiers // sevenfm: check that target soldier is visible @@ -2133,7 +2133,7 @@ void SoldierHandleDropItem( SOLDIERTYPE *pSoldier ) } } - AddItemToPool( pSoldier->sGridNo, pSoldier->pTempObject, 1, pSoldier->pathing.bLevel, 0 , -1 ); + AddItemToPool( pSoldier->sGridNo, pSoldier->pTempObject, 1, pSoldier->pathing.bLevel, 0, -1 ); NotifySoldiersToLookforItems( ); OBJECTTYPE::DeleteMe( &pSoldier->pTempObject ); @@ -2376,7 +2376,7 @@ void HandleAutoPlaceFail( SOLDIERTYPE *pSoldier, INT32 iItemIndex, INT32 sGridNo else { // Add back to world... - AddItemToPool( sGridNo, &(gWorldItems[ iItemIndex ].object ), 1 , pSoldier->pathing.bLevel, 0, -1 ); + AddItemToPool( sGridNo, &(gWorldItems[ iItemIndex ].object ), 1, pSoldier->pathing.bLevel, 0, -1 ); // If we are a merc, say DAMN quote.... if ( pSoldier->bTeam == gbPlayerNum ) @@ -2944,17 +2944,17 @@ void RemoveItemGraphicFromWorld( INVTYPE *pItem, INT32 sGridNo, UINT8 ubLevel, L } // INVENTORY POOL STUFF -OBJECTTYPE* AddItemToPool( INT32 sGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT8 soldierID ) +OBJECTTYPE* AddItemToPool( INT32 sGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT16 soldierID) { return InternalAddItemToPool( &sGridNo, pObject, bVisible, ubLevel, usFlags, bRenderZHeightAboveLevel, soldierID, NULL ); } -OBJECTTYPE * AddItemToPoolAndGetIndex( INT32 sGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT8 soldierID, INT32 * piItemIndex ) +OBJECTTYPE * AddItemToPoolAndGetIndex( INT32 sGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT16 soldierID, INT32 * piItemIndex ) { return( InternalAddItemToPool( &sGridNo, pObject, bVisible, ubLevel, usFlags, bRenderZHeightAboveLevel, soldierID, piItemIndex ) ); } -OBJECTTYPE* InternalAddItemToPool( INT32 *psGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT8 soldierID, INT32 * piItemIndex ) +OBJECTTYPE* InternalAddItemToPool( INT32 *psGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT16 soldierID, INT32 * piItemIndex ) { ITEM_POOL *pItemPool; ITEM_POOL *pItemPoolTemp; @@ -4816,7 +4816,7 @@ BOOLEAN VerifyGiveItem( SOLDIERTYPE *pSoldier, SOLDIERTYPE **ppTargetSoldier ) INT32 sGridNo; UINT8 ubDirection; - UINT8 ubTargetMercID; + UINT16 ubTargetMercID; // DO SOME CHECKS IF WE CAN DO ANIMATION..... @@ -4825,7 +4825,7 @@ BOOLEAN VerifyGiveItem( SOLDIERTYPE *pSoldier, SOLDIERTYPE **ppTargetSoldier ) sGridNo = pSoldier->aiData.sPendingActionData2; ubDirection = pSoldier->aiData.bPendingActionData3; - ubTargetMercID = (UINT8)pSoldier->aiData.uiPendingActionData4; + ubTargetMercID = (UINT16)pSoldier->aiData.uiPendingActionData4; usSoldierIndex = WhoIsThere2( sGridNo, pSoldier->pathing.bLevel ); @@ -4851,7 +4851,7 @@ BOOLEAN VerifyGiveItem( SOLDIERTYPE *pSoldier, SOLDIERTYPE **ppTargetSoldier ) { if ( pSoldier->pTempObject != NULL ) { - AddItemToPool( pSoldier->sGridNo, pSoldier->pTempObject, 1, pSoldier->pathing.bLevel, 0 , -1 ); + AddItemToPool( pSoldier->sGridNo, pSoldier->pTempObject, 1, pSoldier->pathing.bLevel, 0, -1 ); // Place it on the ground! ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, TacticalStr[ ITEM_HAS_BEEN_PLACED_ON_GROUND_STR ], ShortItemNames[ pSoldier->pTempObject->usItem ] ); @@ -4881,7 +4881,7 @@ void SoldierGiveItemFromAnimation( SOLDIERTYPE *pSoldier ) INT32 sGridNo; UINT8 ubDirection; - UINT8 ubTargetMercID; + UINT16 ubTargetMercID; UINT16 usItemNum; BOOLEAN fToTargetPlayer = FALSE; @@ -4910,7 +4910,7 @@ void SoldierGiveItemFromAnimation( SOLDIERTYPE *pSoldier ) sGridNo = pSoldier->aiData.sPendingActionData2; ubDirection = pSoldier->aiData.bPendingActionData3; - ubTargetMercID = (UINT8)pSoldier->aiData.uiPendingActionData4; + ubTargetMercID = (UINT16)pSoldier->aiData.uiPendingActionData4; // ATE: Deduct APs! DeductPoints( pSoldier, GetBasicAPsToPickupItem( pSoldier ), 0 ); // SANDRO @@ -5004,7 +5004,7 @@ void SoldierGiveItemFromAnimation( SOLDIERTYPE *pSoldier ) DirtyMercPanelInterface( pSoldier, DIRTYLEVEL2 ); } - AddItemToPool( pSoldier->sGridNo, &gTempObject, 1, pSoldier->pathing.bLevel, 0 , -1 ); + AddItemToPool( pSoldier->sGridNo, &gTempObject, 1, pSoldier->pathing.bLevel, 0, -1 ); // We could not place it! // Drop it on the ground? @@ -5081,7 +5081,7 @@ INT32 AdjustGridNoForItemPlacement( SOLDIERTYPE *pSoldier, INT32 sGridNo ) BOOLEAN fStructFound = FALSE; UINT8 ubDirection; INT32 sAdjustedGridNo; - UINT8 ubTargetID; + UINT16 ubTargetID; sActionGridNo = sGridNo; @@ -6169,7 +6169,7 @@ void BoobyTrapMessageBoxCallBack( UINT8 ubExitValue ) { // OJW - 20091029 - disarm explosives if (is_networked && is_client) - send_disarm_explosive( gsBoobyTrapGridNo , gpBoobyTrapItemPool->iItemIndex , gpBoobyTrapSoldier->ubID ); + send_disarm_explosive( gsBoobyTrapGridNo, gpBoobyTrapItemPool->iItemIndex, gpBoobyTrapSoldier->ubID ); // remove it from the ground RemoveItemFromPool( gsBoobyTrapGridNo, gpBoobyTrapItemPool->iItemIndex, gbBoobyTrapLevel ); } @@ -6191,7 +6191,7 @@ void BoobyTrapMessageBoxCallBack( UINT8 ubExitValue ) // OJW - 20091029 - disarm explosives if (is_networked && is_client) - send_disarm_explosive( gsBoobyTrapGridNo , gpBoobyTrapItemPool->iItemIndex , gpBoobyTrapSoldier->ubID ); + send_disarm_explosive( gsBoobyTrapGridNo, gpBoobyTrapItemPool->iItemIndex, gpBoobyTrapSoldier->ubID ); RemoveItemFromPool( gsBoobyTrapGridNo, gpBoobyTrapItemPool->iItemIndex, gbBoobyTrapLevel ); } @@ -6208,7 +6208,7 @@ void BoobyTrapMessageBoxCallBack( UINT8 ubExitValue ) } // OJW - 20091029 - disarm explosives if (is_networked && is_client) - send_disarm_explosive( gsBoobyTrapGridNo , gpBoobyTrapItemPool->iItemIndex , gpBoobyTrapSoldier->ubID ); + send_disarm_explosive( gsBoobyTrapGridNo, gpBoobyTrapItemPool->iItemIndex, gpBoobyTrapSoldier->ubID ); // remove it from the ground RemoveItemFromPool( gsBoobyTrapGridNo, gpBoobyTrapItemPool->iItemIndex, gbBoobyTrapLevel ); @@ -6363,7 +6363,7 @@ void SwitchMessageBoxCallBack( UINT8 ubExitValue ) // Message that switch is activated... ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, gzLateLocalizedString[ 60 ] ); - SetOffBombsByFrequency( gpTempSoldier->ubID, bTempFrequency ); + SetOffBombsByFrequency( gpTempSoldier->ubID, bTempFrequency ); } } @@ -6733,11 +6733,11 @@ void TestPotentialOwner( SOLDIERTYPE * pSoldier ) void CheckForPickedOwnership( void ) { - ITEM_POOL * pItemPool; - UINT8 ubProfile; - UINT8 ubCivGroup; - SOLDIERTYPE * pSoldier; - UINT8 ubLoop; + ITEM_POOL * pItemPool; + UINT8 ubProfile; + UINT8 ubCivGroup; + SOLDIERTYPE * pSoldier; + UINT16 ubLoop; // LOOP THROUGH LIST TO FIND NODE WE WANT GetItemPool( gsTempGridNo, &pItemPool, gpTempSoldier->pathing.bLevel ); @@ -9403,7 +9403,7 @@ void DoInteractiveAction( INT32 sGridNo, SOLDIERTYPE *pSoldier ) // handle the default result of an interactive action // This is called either if no lua action id is set, or by lua if this should happen as a supplement to whatever lua does -void DoInteractiveActionDefaultResult( INT32 sGridNo, UINT8 ubID, BOOLEAN aSuccess ) +void DoInteractiveActionDefaultResult( INT32 sGridNo, UINT16 ubID, BOOLEAN aSuccess ) { SOLDIERTYPE* pSoldier = NULL; if ( ubID != NOBODY ) diff --git a/Tactical/Handle Items.h b/Tactical/Handle Items.h index b9b20865..ecbb189b 100644 --- a/Tactical/Handle Items.h +++ b/Tactical/Handle Items.h @@ -194,9 +194,9 @@ void AllSoldiersLookforItems( BOOLEAN RevealRoofsAndItems ); void SoldierGetItemFromWorld( SOLDIERTYPE *pSoldier, INT32 iItemIndex, INT32 sGridNo, INT8 bZLevel, BOOLEAN *pfSelectionList ); -OBJECTTYPE* AddItemToPool( INT32 sGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT8 soldierID = -1 ); -OBJECTTYPE* AddItemToPoolAndGetIndex( INT32 sGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT8 soldierID, INT32 * piItemIndex ); -OBJECTTYPE* InternalAddItemToPool( INT32 *psGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT8 soldierID, INT32 * piItemIndex ); +OBJECTTYPE* AddItemToPool(INT32 sGridNo, OBJECTTYPE* pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT16 soldierID = -1); +OBJECTTYPE* AddItemToPoolAndGetIndex( INT32 sGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT16 soldierID, INT32 * piItemIndex ); +OBJECTTYPE* InternalAddItemToPool( INT32 *psGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT16 soldierID, INT32 * piItemIndex ); INT32 AdjustGridNoForItemPlacement( SOLDIERTYPE *pSoldier, INT32 sGridNo ); BOOLEAN GetItemPool( INT32 usMapPos, ITEM_POOL **ppItemPool, UINT8 ubLevel ); @@ -328,7 +328,7 @@ extern ITEM_POOL *gpItemPool;//dnl ch26 210909 // Flugente: interactive actions void DoInteractiveAction( INT32 sGridNo, SOLDIERTYPE *pSoldier ); -void DoInteractiveActionDefaultResult( INT32 sGridNo, UINT8 ubID, BOOLEAN aSuccess ); +void DoInteractiveActionDefaultResult( INT32 sGridNo, UINT16 ubID, BOOLEAN aSuccess ); BOOLEAN SpendMoney( SOLDIERTYPE *pSoldier, UINT32 aAmount ); // character spends money - either from inventory or the account // Flugente: intel diff --git a/Tactical/Handle UI Plan.cpp b/Tactical/Handle UI Plan.cpp index 8c93f84f..11afac49 100644 --- a/Tactical/Handle UI Plan.cpp +++ b/Tactical/Handle UI Plan.cpp @@ -46,7 +46,7 @@ BOOLEAN AddUIPlan( INT32 sGridNo, UINT8 ubPlanID ) INT8 bDirection; INT32 iLoop; SOLDIERCREATE_STRUCT MercCreateStruct; - UINT8 ubNewIndex; + UINT16 ubNewIndex; // Depeding on stance and direction facing, add guy! @@ -122,7 +122,7 @@ BOOLEAN AddUIPlan( INT32 sGridNo, UINT8 ubPlanID ) pPlanSoldier->ChangeSoldierState( pPlanSoldier->usUIMovementMode, 0, FALSE ); // Change selected soldier - gusSelectedSoldier = (UINT16)pPlanSoldier->ubID; + gusSelectedSoldier = pPlanSoldier->ubID; // Change global planned mode to this guy! gpUIPlannedSoldier = pPlanSoldier; @@ -165,7 +165,7 @@ BOOLEAN AddUIPlan( INT32 sGridNo, UINT8 ubPlanID ) if ( TacticalCreateSoldier( &MercCreateStruct, &ubNewIndex ) ) { // Get pointer to soldier - GetSoldier( &pPlanSoldier, (UINT16)ubNewIndex ); + GetSoldier( &pPlanSoldier, ubNewIndex ); pPlanSoldier->sPlannedTargetX = -1; pPlanSoldier->sPlannedTargetY = -1; diff --git a/Tactical/Handle UI.cpp b/Tactical/Handle UI.cpp index bd72fab8..287496cf 100644 --- a/Tactical/Handle UI.cpp +++ b/Tactical/Handle UI.cpp @@ -294,7 +294,7 @@ BOOLEAN gfResetUIMovementOptimization = FALSE; BOOLEAN gfResetUIItemCursorOptimization = FALSE; BOOLEAN gfBeginVehicleCursor = FALSE; INT32 gsOutOfRangeGridNo = NOWHERE; -UINT8 gubOutOfRangeMerc = NOBODY; +UINT16 gubOutOfRangeMerc = NOBODY; BOOLEAN gfOKForExchangeCursor = FALSE; UINT32 guiUIInterfaceSwapCursorsTime = 0; INT32 gsJumpOverGridNo = 0; @@ -441,7 +441,7 @@ BOOLEAN gfUIDoNotHighlightSelMerc = FALSE; BOOLEAN gfUIHandleSelection = FALSE; BOOLEAN gfUIHandleSelectionAboveGuy = FALSE; BOOLEAN gfUIInDeadlock = FALSE; -UINT8 gUIDeadlockedSoldier = NOBODY; +UINT16 gUIDeadlockedSoldier = NOBODY; BOOLEAN gfUIHandleShowMoveGrid = FALSE; INT32 gsUIHandleShowMoveGridLocation = NOWHERE ; BOOLEAN gfUIOverItemPool = FALSE; @@ -449,7 +449,7 @@ INT32 gfUIOverItemPoolGridNo = 0; INT16 gsCurrentActionPoints = 1; BOOLEAN gfUIHandlePhysicsTrajectory = FALSE; BOOLEAN gfUIMouseOnValidCatcher = FALSE; -UINT8 gubUIValidCatcherID = 0; +UINT16 gubUIValidCatcherID = 0; @@ -577,7 +577,7 @@ UINT32 HandleTacticalUI( void ) gfUIInterfaceSetBusy = FALSE; //UNLOCK UI - UnSetUIBusy( (UINT8)gusSelectedSoldier ); + UnSetUIBusy( gusSelectedSoldier ); // Decrease global busy counter... gTacticalStatus.ubAttackBusyCount = 0; @@ -1500,7 +1500,7 @@ UINT32 UIHandleTestHit( UI_EVENT *pUIEvent ) // gTacticalStatus.ubAttackBusyCount++; DebugAttackBusy( "Testing a hit.\n" ); - pSoldier->EVENT_SoldierGotHit( 1, bDamage, 10, pSoldier->ubDirection, 320, NOBODY , FIRE_WEAPON_NO_SPECIAL, pSoldier->bAimShotLocation, 0, NOWHERE ); + pSoldier->EVENT_SoldierGotHit( 1, bDamage, 10, pSoldier->ubDirection, 320, NOBODY, FIRE_WEAPON_NO_SPECIAL, pSoldier->bAimShotLocation, 0, NOWHERE ); // callahan update end - put everything as it was } return( GAME_SCREEN ); @@ -1716,7 +1716,7 @@ UINT32 UIHandleMOnTerrain( UI_EVENT *pUIEvent ) // THIS IS JUST A CRUDE TEST FOR NOW if ( pSoldier->stats.bLife < OKLIFE ) { - UINT8 ubID; + UINT16 ubID; // Show reg. cursor // GO INTO IDLE MODE // guiPendingOverrideEvent = I_CHANGE_TO_IDLE; @@ -1725,7 +1725,7 @@ UINT32 UIHandleMOnTerrain( UI_EVENT *pUIEvent ) if ( ubID != NOBODY ) { - SelectSoldier( (INT16)ubID, FALSE, FALSE ); + SelectSoldier( ubID, FALSE, FALSE ); } else { @@ -1963,13 +1963,13 @@ UINT32 UIHandleAOnTerrain( UI_EVENT *pUIEvent ) // Set gsOutOfRangeGridNo = MercPtrs[ gusUIFullTargetID ]->sGridNo; - gubOutOfRangeMerc = (UINT8)gusSelectedSoldier; + gubOutOfRangeMerc = gusSelectedSoldier; } } } } - guiNewUICursor = GetProperItemCursor( (UINT8)gusSelectedSoldier, pSoldier->inv[ HANDPOS ].usItem, usMapPos, FALSE ); + guiNewUICursor = GetProperItemCursor( gusSelectedSoldier, pSoldier->inv[ HANDPOS ].usItem, usMapPos, FALSE ); // Show UI ON GUY UIHandleOnMerc( FALSE ); @@ -2123,7 +2123,7 @@ UINT32 UIHandleCMoveMerc( UI_EVENT *pUIEvent ) STRUCTURE *pStructure; UINT8 ubDirection = 0xff; BOOLEAN fAllMove; - INT8 bLoop; + UINT16 bLoop; LEVELNODE *pIntTile; INT32 sIntTileGridNo; BOOLEAN fOldFastMove; @@ -2745,7 +2745,7 @@ UINT32 UIHandleCAOnTerrain( UI_EVENT *pUIEvent ) if ( GetSoldier( &pSoldier, gusSelectedSoldier ) ) { - guiNewUICursor = GetProperItemCursor( (UINT8)gusSelectedSoldier, pSoldier->inv[ HANDPOS ].usItem, usMapPos, TRUE ); + guiNewUICursor = GetProperItemCursor( gusSelectedSoldier, pSoldier->inv[ HANDPOS ].usItem, usMapPos, TRUE ); UIHandleOnMerc( FALSE ); } @@ -3465,7 +3465,7 @@ BOOLEAN SelectedMercCanAffordMove( ) return( FALSE ); } -void GetMercClimbDirection( UINT8 ubSoldierID, BOOLEAN *pfGoDown, BOOLEAN *pfGoUp ) +void GetMercClimbDirection( UINT16 ubSoldierID, BOOLEAN *pfGoDown, BOOLEAN *pfGoUp ) { INT8 bNewDirection; SOLDIERTYPE *pSoldier; @@ -3839,7 +3839,7 @@ UINT32 UIHandleIETOnTerrain( UI_EVENT *pUIEvent ) } -void UIHandleSoldierStanceChange( UINT8 ubSoldierID, INT8 bNewStance ) +void UIHandleSoldierStanceChange( UINT16 ubSoldierID, INT8 bNewStance ) { SOLDIERTYPE *pSoldier = MercPtrs[ ubSoldierID ]; @@ -4259,7 +4259,7 @@ INT8 DrawUIMovementPath( SOLDIERTYPE *pSoldier, INT32 usMapPos, UINT32 uiFlags ) LEVELNODE *pIntTile; INT8 bReturnCode = 0; BOOLEAN fPlot; - UINT8 ubMercID; + UINT16 ubMercID; if ( (gTacticalStatus.uiFlags & INCOMBAT ) && ( gTacticalStatus.uiFlags & TURNBASED ) || _KeyDown( SHIFT ) ) { @@ -5588,7 +5588,7 @@ UINT32 UIHandleLCLook( UI_EVENT *pUIEvent ) UINT32 UIHandleTOnTerrain( UI_EVENT *pUIEvent ) { SOLDIERTYPE *pSoldier; - UINT8 ubTargID; + UINT16 ubTargID; UINT32 uiRange; INT32 usMapPos; BOOLEAN fValidTalkableGuy = FALSE; @@ -5619,7 +5619,7 @@ UINT32 UIHandleTOnTerrain( UI_EVENT *pUIEvent ) //CHECK FOR VALID TALKABLE GUY HERE - fValidTalkableGuy = IsValidTalkableNPCFromMouse( &ubTargID, FALSE, TRUE , FALSE ); + fValidTalkableGuy = IsValidTalkableNPCFromMouse( &ubTargID, FALSE, TRUE, FALSE ); // USe cursor based on distance // Get distance away @@ -6374,20 +6374,20 @@ UINT32 UIHandleLAEndLockOurTurn( UI_EVENT *pUIEvent ) -BOOLEAN IsValidTalkableNPCFromMouse( UINT8 *pubSoldierID , BOOLEAN fGive, BOOLEAN fAllowMercs, BOOLEAN fCheckCollapsed ) +BOOLEAN IsValidTalkableNPCFromMouse( UINT16 * pubSoldierID, BOOLEAN fGive, BOOLEAN fAllowMercs, BOOLEAN fCheckCollapsed ) { // Check if there is a guy here to talk to! if ( gfUIFullTargetFound ) { - *pubSoldierID = (UINT8)gusUIFullTargetID; - return( IsValidTalkableNPC( (UINT8)gusUIFullTargetID, fGive, fAllowMercs, fCheckCollapsed ) ); + *pubSoldierID = gusUIFullTargetID; + return( IsValidTalkableNPC( gusUIFullTargetID, fGive, fAllowMercs, fCheckCollapsed ) ); } return( FALSE ); } -BOOLEAN IsValidTalkableNPC( UINT8 ubSoldierID, BOOLEAN fGive , BOOLEAN fAllowMercs, BOOLEAN fCheckCollapsed ) +BOOLEAN IsValidTalkableNPC( UINT16 ubSoldierID, BOOLEAN fGive, BOOLEAN fAllowMercs, BOOLEAN fCheckCollapsed ) { SOLDIERTYPE *pSoldier = MercPtrs[ ubSoldierID ]; BOOLEAN fValidGuy = FALSE; @@ -6509,7 +6509,7 @@ BOOLEAN HandleTalkInit( ) if ( gfUIFullTargetFound ) { // Is he a valid NPC? - if ( IsValidTalkableNPC( (UINT8)gusUIFullTargetID, FALSE, TRUE , FALSE ) ) + if ( IsValidTalkableNPC( gusUIFullTargetID, FALSE, TRUE, FALSE ) ) { GetSoldier( &pTSoldier, gusUIFullTargetID ); @@ -6716,7 +6716,7 @@ BOOLEAN HandleTalkInit( ) -void SetUIBusy( UINT8 ubID ) +void SetUIBusy( UINT16 ubID ) { if ( (gTacticalStatus.uiFlags & INCOMBAT ) && ( gTacticalStatus.uiFlags & TURNBASED ) && ( gTacticalStatus.ubCurrentTeam == gbPlayerNum ) ) { @@ -6728,7 +6728,7 @@ void SetUIBusy( UINT8 ubID ) } } -void UnSetUIBusy( UINT8 ubID ) +void UnSetUIBusy( UINT16 ubID ) { if ( gfUserTurnRegionActive && (gTacticalStatus.uiFlags & INCOMBAT ) && ( gTacticalStatus.uiFlags & TURNBASED ) && ( gTacticalStatus.ubCurrentTeam == gbPlayerNum ) ) { @@ -7274,7 +7274,8 @@ BOOLEAN IsValidJumpLocation( SOLDIERTYPE *pSoldier, INT32 sGridNo, BOOLEAN fChec INT32 sFourGrids[4], sDistance=0, sSpot, sInBetween, sInBetween2, iDoorGridNo; static const UINT8 sDirs[4] = { NORTH, EAST, SOUTH, WEST }; //INT32 cnt; - UINT8 ubGuyThere, ubMovementCost, ubDirection; + UINT16 ubGuyThere; + UINT8 ubMovementCost, ubDirection; INT8 bTileHeight = 0; // SANDRO: commented out to allow jumping even in cases we could get to the destination normally diff --git a/Tactical/Handle UI.h b/Tactical/Handle UI.h index 5937d911..14b15f1e 100644 --- a/Tactical/Handle UI.h +++ b/Tactical/Handle UI.h @@ -200,10 +200,10 @@ extern BOOLEAN gfUIHandleSelectionAboveGuy; extern INT32 gsSelectedGridNo; extern INT16 gsSelectedGuy; extern BOOLEAN gfUIInDeadlock; -extern UINT8 gUIDeadlockedSoldier; +extern UINT16 gUIDeadlockedSoldier; extern BOOLEAN gfUIMouseOnValidCatcher; -extern UINT8 gubUIValidCatcherID; +extern UINT16 gubUIValidCatcherID; extern BOOLEAN gUIUseReverse; @@ -320,13 +320,13 @@ void AdjustSoldierCreationStartValues( ); BOOLEAN SelectedMercCanAffordAttack( ); BOOLEAN SelectedMercCanAffordMove( ); -void GetMercClimbDirection( UINT8 ubSoldierID, BOOLEAN *pfGoDown, BOOLEAN *pfGoUp ); +void GetMercClimbDirection( UINT16 ubSoldierID, BOOLEAN *pfGoDown, BOOLEAN *pfGoUp ); void ToggleHandCursorMode( UINT32 *puiNewEvent ); void ToggleTalkCursorMode( UINT32 *puiNewEvent ); void ToggleLookCursorMode( UINT32 *puiNewEvent ); -void UIHandleSoldierStanceChange( UINT8 ubSoldierID, INT8 bNewStance ); +void UIHandleSoldierStanceChange( UINT16 ubSoldierID, INT8 bNewStance ); void GetCursorMovementFlags( UINT32 *puiCursorFlags ); BOOLEAN HandleUIMovementCursor( SOLDIERTYPE *pSoldier, UINT32 uiCursorFlags, INT32 usMapPos, UINT32 uiFlags ); @@ -334,15 +334,15 @@ BOOLEAN UIMouseOnValidAttackLocation( SOLDIERTYPE *pSoldier ); BOOLEAN UIOkForItemPickup( SOLDIERTYPE *pSoldier, INT32 sGridNo ); -BOOLEAN IsValidTalkableNPCFromMouse( UINT8 *pubSoldierID, BOOLEAN fGive, BOOLEAN fAllowMercs, BOOLEAN fCheckCollapsed ); -BOOLEAN IsValidTalkableNPC( UINT8 ubSoldierID, BOOLEAN fGive, BOOLEAN fAllowMercs, BOOLEAN fCheckCollapsed ); +BOOLEAN IsValidTalkableNPCFromMouse( UINT16 * pubSoldierID, BOOLEAN fGive, BOOLEAN fAllowMercs, BOOLEAN fCheckCollapsed ); +BOOLEAN IsValidTalkableNPC( UINT16 ubSoldierID, BOOLEAN fGive, BOOLEAN fAllowMercs, BOOLEAN fCheckCollapsed ); BOOLEAN HandleTalkInit( ); BOOLEAN HandleCheckForExitArrowsInput( BOOLEAN fAdjustForConfirm ); -void SetUIBusy( UINT8 ubID ); -void UnSetUIBusy( UINT8 ubID ); +void SetUIBusy( UINT16 ubID ); +void UnSetUIBusy( UINT16 ubID ); UINT32 UIHandleLUIEndLock( UI_EVENT *pUIEvent ); diff --git a/Tactical/Interface Control.cpp b/Tactical/Interface Control.cpp index 0960bd08..e1c93628 100644 --- a/Tactical/Interface Control.cpp +++ b/Tactical/Interface Control.cpp @@ -921,7 +921,7 @@ void RenderTopmostTacticalInterface( ) } else { - DrawSelectedUIAboveGuy((UINT16)pSoldier->ubID); + DrawSelectedUIAboveGuy(pSoldier->ubID); } DrawCounters( pSoldier ); diff --git a/Tactical/Interface Dialogue.cpp b/Tactical/Interface Dialogue.cpp index 9644aab3..7e9ef7d6 100644 --- a/Tactical/Interface Dialogue.cpp +++ b/Tactical/Interface Dialogue.cpp @@ -187,7 +187,7 @@ BOOLEAN InternalInitiateConversation( SOLDIERTYPE *pDestSoldier, SOLDIERTYPE *pS extern void EndGameMessageBoxCallBack( UINT8 ubExitValue ); extern INT32 FindNearestOpenableNonDoor( INT32 sStartGridNo ); extern void RecalculateOppCntsDueToBecomingNeutral( SOLDIERTYPE * pSoldier ); -extern UINT8 NumCapableEnemyInSector( ); +extern UINT16 NumCapableEnemyInSector( ); #ifdef JA2UB //JA25 UB @@ -1042,7 +1042,7 @@ void TalkPanelClickCallback( MOUSE_REGION * pRegion, INT32 iReason ) // open inv panel... gfSwitchPanel = TRUE; gbNewPanel = SM_PANEL; - gubNewPanelParam = (UINT8)gpSrcSoldier->ubID; + gubNewPanelParam = gpSrcSoldier->ubID; // Wait! gpDestSoldier->aiData.bNextAction = AI_ACTION_WAIT; @@ -1560,7 +1560,7 @@ void HandleNPCTriggerNPC( UINT8 ubTargetNPC, UINT8 ubTargetRecord, BOOLEAN fShow guiWaitingForTriggerTime = GetJA2Clock( ); // Setup locator! - ShowRadioLocator( (UINT8)pSoldier->ubID, SHOW_LOCATOR_FAST ); + ShowRadioLocator( pSoldier->ubID, SHOW_LOCATOR_FAST ); // If he's visible, locate... if ( pSoldier->bVisible != -1 ) @@ -1589,7 +1589,7 @@ void HandleNPCTrigger( ) { SOLDIERTYPE *pSoldier; INT32 sPlayerGridNo; - UINT8 ubPlayerID; + UINT16 ubPlayerID; pSoldier = FindSoldierByProfileID( gubTargetNPC, FALSE ); if (!pSoldier) @@ -2481,7 +2481,7 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum if (pSoldier) { DeleteTalkingMenu(); - pSoldier->EVENT_SoldierGotHit( 1, 100, 10, pSoldier->ubDirection, 320, NOBODY , FIRE_WEAPON_NO_SPECIAL, AIM_SHOT_TORSO, 0, NOWHERE ); + pSoldier->EVENT_SoldierGotHit( 1, 100, 10, pSoldier->ubDirection, 320, NOBODY, FIRE_WEAPON_NO_SPECIAL, AIM_SHOT_TORSO, 0, NOWHERE ); } break; @@ -2826,7 +2826,7 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum bItemIn = FindObj( pSoldier, DEED ); if (bItemIn != NO_SLOT) { - AddItemToPool( 12541, &(pSoldier->inv[bItemIn]), -1 , 0, 0, 0 ); + AddItemToPool( 12541, &(pSoldier->inv[bItemIn]), -1, 0, 0, 0 ); DeleteObj( &(pSoldier->inv[ bItemIn ]) ); RemoveObjectFromSoldierProfile( ubTargetNPC, DEED ); } @@ -3225,7 +3225,7 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum if ( pSoldier ) { INT32 sNearestPC; - UINT8 ubID; + UINT16 ubID; INT8 bMoneySlot; INT8 bEmptySlot; @@ -3358,7 +3358,7 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum pSoldier = FindSoldierByProfileID( ubTargetNPC, FALSE ); if (pSoldier) { - UINT8 ubTargetID; + UINT16 ubTargetID; SOLDIERTYPE *pTarget; // Target a different merc.... @@ -3478,7 +3478,7 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum pSoldier = FindSoldierByProfileID( ubTargetNPC, FALSE ); if (pSoldier) { - UINT8 ubTargetID; + UINT16 ubTargetID; SOLDIERTYPE *pTarget; INT32 cnt; BOOLEAN fGoodTarget = FALSE; @@ -3901,7 +3901,7 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum if ( !gfInTalkPanel ) { INT32 sNearestPC; - UINT8 ubID; + UINT16 ubID; pSoldier = FindSoldierByProfileID( ubTargetNPC, FALSE ); if ( pSoldier ) @@ -4850,7 +4850,7 @@ void DialogueMessageBoxCallBack( UINT8 ubExitValue ) { // He tried to lie..... // Find the best conscious merc with a chance.... - UINT8 cnt; + UINT16 cnt; SOLDIERTYPE * pLier = NULL; SOLDIERTYPE * pSoldier; diff --git a/Tactical/Interface Items.cpp b/Tactical/Interface Items.cpp index 9ea7ae75..53d6ebb2 100644 --- a/Tactical/Interface Items.cpp +++ b/Tactical/Interface Items.cpp @@ -238,7 +238,7 @@ extern MOUSE_REGION gMPanelRegion; extern BOOLEAN fMapInventoryItem; extern BOOLEAN gfAddingMoneyToMercFromPlayersAccount; extern SOLDIERTYPE *gpSMCurrentMerc; -extern UINT8 gubSelectSMPanelToMerc; +extern UINT16 gubSelectSMPanelToMerc; extern MOUSE_REGION gSM_SELMERCMoneyRegion; extern UINT32 guiMapInvSecondHandBlockout; @@ -8829,7 +8829,7 @@ void DrawItemTileCursor( ) { INT32 usMapPos; UINT16 usIndex; - UINT8 ubSoldierID; + UINT16 ubSoldierID; INT16 sAPCost; BOOLEAN fRecalc; UINT32 uiCursorFlags; @@ -8935,7 +8935,7 @@ void DrawItemTileCursor( ) { // OK, on a valid pass gfUIMouseOnValidCatcher = 4; - gubUIValidCatcherID = (UINT8)gusUIFullTargetID; + gubUIValidCatcherID = gusUIFullTargetID; } else { @@ -8944,7 +8944,7 @@ void DrawItemTileCursor( ) { // OK, set global that this buddy can see catch... gfUIMouseOnValidCatcher = TRUE; - gubUIValidCatcherID = (UINT8)gusUIFullTargetID; + gubUIValidCatcherID = gusUIFullTargetID; } } } @@ -8978,7 +8978,7 @@ void DrawItemTileCursor( ) // OK, set global that this buddy can see catch... gfUIMouseOnValidCatcher = 2; - gubUIValidCatcherID = (UINT8)gusUIFullTargetID; + gubUIValidCatcherID = gusUIFullTargetID; // If this is a robot, change to say 'reload' if ( MercPtrs[ gusUIFullTargetID ]->flags.uiStatusFlags & SOLDIER_ROBOT ) @@ -9175,7 +9175,7 @@ BOOLEAN HandleItemPointerClick( INT32 usMapPos ) UINT8 ubDirection; - UINT8 ubSoldierID; + UINT16 ubSoldierID; UINT16 usItem; INT16 sAPCost; SOLDIERTYPE *pSoldier=NULL; @@ -9411,7 +9411,7 @@ BOOLEAN HandleItemPointerClick( INT32 usMapPos ) case ANIM_CROUCH: case ANIM_PRONE: - AddItemToPool( usMapPos, gpItemPointer, 1, gpItemPointerSoldier->pathing.bLevel, 0 , -1 ); + AddItemToPool( usMapPos, gpItemPointer, 1, gpItemPointerSoldier->pathing.bLevel, 0, -1 ); NotifySoldiersToLookforItems( ); break; } @@ -10960,7 +10960,7 @@ BOOLEAN InitializeItemPickupMenu( SOLDIERTYPE *pSoldier, INT32 sGridNo, ITEM_POO // Change to INV panel if not there already... gfSwitchPanel = TRUE; gbNewPanel = SM_PANEL; - gubNewPanelParam = (UINT8)pSoldier->ubID; + gubNewPanelParam = pSoldier->ubID; //Determine total # cnt = 0; @@ -12761,7 +12761,7 @@ void CancelItemPointer( ) if ( !AutoPlaceObject( gpItemPointerSoldier, gpItemPointer, FALSE ) ) { // Alright, place of the friggen ground! - AddItemToPool( gpItemPointerSoldier->sGridNo, gpItemPointer, 1, gpItemPointerSoldier->pathing.bLevel, 0 , -1 ); + AddItemToPool( gpItemPointerSoldier->sGridNo, gpItemPointer, 1, gpItemPointerSoldier->pathing.bLevel, 0, -1 ); NotifySoldiersToLookforItems( ); } } @@ -12769,7 +12769,7 @@ void CancelItemPointer( ) else { // We drop it here..... - AddItemToPool( gpItemPointerSoldier->sGridNo, gpItemPointer, 1, gpItemPointerSoldier->pathing.bLevel, 0 , -1 ); + AddItemToPool( gpItemPointerSoldier->sGridNo, gpItemPointer, 1, gpItemPointerSoldier->pathing.bLevel, 0, -1 ); NotifySoldiersToLookforItems( ); } EndItemPointer( ); @@ -12920,7 +12920,7 @@ BOOLEAN InitializeStealItemPickupMenu( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pOppo // Change to INV panel if not there already... gfSwitchPanel = TRUE; gbNewPanel = SM_PANEL; - gubNewPanelParam = (UINT8)pSoldier->ubID; + gubNewPanelParam = pSoldier->ubID; gItemPickupMenu.ubTotalItems = ubCount; diff --git a/Tactical/Interface Items.h b/Tactical/Interface Items.h index 607890ff..e08f44e3 100644 --- a/Tactical/Interface Items.h +++ b/Tactical/Interface Items.h @@ -166,11 +166,12 @@ public: BOOLEAN Save(HWFILE hFile); BOOLEAN Load(HWFILE hFile); - UINT8 ubSoldierID; + UINT16 ubSoldierID; UINT8 ubInvSlot; BOOLEAN fCursorActive; OBJECTTYPE ItemPointerInfo; }; +#define SIZEOF_ITEM_CURSOR_SAVE_INFO_POD offsetof( ITEM_CURSOR_SAVE_INFO, ItemPointerInfo ) // HEADROCK HAM 5: Enums for big-item display attachment asterisks. enum diff --git a/Tactical/Interface Panels.cpp b/Tactical/Interface Panels.cpp index 8f859f37..ddc3ada5 100644 --- a/Tactical/Interface Panels.cpp +++ b/Tactical/Interface Panels.cpp @@ -394,7 +394,7 @@ INT32 giSMZipperButton = -1; BOOLEAN gfSwitchPanel = FALSE; UINT8 gbNewPanel = SM_PANEL; -UINT8 gubNewPanelParam = 0; +UINT16 gubNewPanelParam = 0; BOOLEAN gfUIStanceDifferent = FALSE; BOOLEAN gfAllDisabled = FALSE; @@ -405,7 +405,7 @@ BOOLEAN gfAddingMoneyToMercFromPlayersAccount = FALSE; BOOLEAN gfCheckForMouseOverItem = FALSE; UINT32 guiMouseOverItemTime = 0; INT8 gbCheckForMouseOverItemPos = 0; -UINT8 gubSelectSMPanelToMerc = NOBODY; +UINT16 gubSelectSMPanelToMerc = NOBODY; BOOLEAN gfReEvaluateDisabledINVPanelButtons = FALSE; UINT32 guiBrownBackgroundForTeamPanel; @@ -573,7 +573,7 @@ void UpdateSelectedSoldier( UINT16 usSoldierID, BOOLEAN fSelect ); void CheckForFacePanelStartAnims( SOLDIERTYPE *pSoldier, INT16 sPanelX, INT16 sPanelY ); void HandleSoldierFaceFlash( SOLDIERTYPE *pSoldier, INT16 sFaceX, INT16 sFaceY ); -BOOLEAN PlayerExistsInSlot( UINT8 ubID ); +BOOLEAN PlayerExistsInSlot( UINT16 ubID ); void UpdateStatColor( UINT32 uiTimer, BOOLEAN fIncrease, BOOLEAN fDamaged, BOOLEAN fAugmented ); // SANDRO - added argument // Flugente - me too extern void UpdateItemHatches(); @@ -597,7 +597,7 @@ void CheckForDisabledForGiveItem( ) INT8 bDestLevel; INT32 cnt; SOLDIERTYPE *pSoldier; - UINT8 ubSrcSoldier; + UINT16 ubSrcSoldier; // CHRISL: If Merc hasn't been set, default to first merc if(gpSMCurrentMerc==NULL) @@ -638,7 +638,7 @@ void CheckForDisabledForGiveItem( ) } else { - ubSrcSoldier = (UINT8)gusSelectedSoldier; + ubSrcSoldier = gusSelectedSoldier; if ( gpItemPointer != NULL ) { @@ -690,7 +690,7 @@ void CheckForDisabledForGiveItem( ) } } -void SetSMPanelCurrentMerc( UINT8 ubNewID ) +void SetSMPanelCurrentMerc( UINT16 ubNewID ) { gubSelectSMPanelToMerc = NOBODY; @@ -3729,7 +3729,7 @@ void SMInvClickCallback( MOUSE_REGION * pRegion, INT32 iReason ) } else // item in cursor { - UINT8 ubSrcID, ubDestID; + UINT16 ubSrcID, ubDestID; BOOLEAN fOKToGo = FALSE; BOOLEAN fDeductPoints = FALSE; @@ -4217,7 +4217,7 @@ BOOLEAN ChangeDropPackStatus(SOLDIERTYPE *pSoldier, BOOLEAN newStatus) } } MoveItemToLBEItem( pSoldier, BPACKPOCKPOS ); - AddItemToPoolAndGetIndex(pSoldier->sGridNo, &pSoldier->inv[BPACKPOCKPOS], 1, pSoldier->pathing.bLevel, 0 , -1, pSoldier->ubID, &worldKey ); + AddItemToPoolAndGetIndex(pSoldier->sGridNo, &pSoldier->inv[BPACKPOCKPOS], 1, pSoldier->pathing.bLevel, 0, -1, pSoldier->ubID, &worldKey ); // Item successfully added to world if(worldKey != ITEM_NOT_FOUND) { @@ -4829,7 +4829,7 @@ void BtnPrevMercCallback(GUI_BUTTON *btn,INT32 reason) sID = FindPrevActiveAndAliveMerc( gpSMCurrentMerc, TRUE, TRUE ); - gubSelectSMPanelToMerc = (UINT8)sID; + gubSelectSMPanelToMerc = (UINT16)sID; if ( !gfInItemPickupMenu ) { @@ -4878,7 +4878,7 @@ void BtnNextMercCallback(GUI_BUTTON *btn,INT32 reason) sID = FindNextActiveAndAliveMerc( gpSMCurrentMerc, TRUE, TRUE ); // Give him the panel! - gubSelectSMPanelToMerc = (UINT8)sID; + gubSelectSMPanelToMerc = (UINT16)sID; if ( !gfInItemPickupMenu ) { @@ -5893,7 +5893,7 @@ void BtnSquadCallback(GUI_BUTTON *btn,INT32 reason) } -void SetTEAMPanelCurrentMerc( UINT8 ubNewID ) +void SetTEAMPanelCurrentMerc( UINT16 ubNewID ) { // Ignore ther ID given! // ALWYAS USE CURRENT MERC! @@ -6026,10 +6026,10 @@ void HandleMouseOverTeamFaceForContMove( BOOLEAN fOn ) void MercFacePanelMoveCallback( MOUSE_REGION * pRegion, INT32 iReason ) { - UINT8 ubID, ubSoldierID; + UINT16 ubID, ubSoldierID; SOLDIERTYPE *pSoldier; - ubID = (UINT8) MSYS_GetRegionUserData( pRegion, 0 ); + ubID = (UINT16) MSYS_GetRegionUserData( pRegion, 0 ); // If our flags are set to do this, gofoit! if ( (guiTacticalInterfaceFlags & INTERFACE_MAPSCREEN ) ) @@ -6072,9 +6072,9 @@ void MercFacePanelMoveCallback( MOUSE_REGION * pRegion, INT32 iReason ) void EnemyIndicatorClickCallback( MOUSE_REGION * pRegion, INT32 iReason ) { - UINT8 ubID, ubSoldierID; + UINT16 ubID, ubSoldierID; - ubID = (UINT8) MSYS_GetRegionUserData( pRegion, 0 ); + ubID = (UINT16) MSYS_GetRegionUserData( pRegion, 0 ); if ( ubID == NOBODY ) { @@ -6127,9 +6127,9 @@ void EnemyIndicatorClickCallback( MOUSE_REGION * pRegion, INT32 iReason ) void MercFacePanelCallback( MOUSE_REGION * pRegion, INT32 iReason ) { - UINT8 ubID, ubSoldierID; + UINT16 ubID, ubSoldierID; - ubID = (UINT8) MSYS_GetRegionUserData( pRegion, 0 ); + ubID = (UINT16) MSYS_GetRegionUserData( pRegion, 0 ); // If our flags are set to do this, gofoit! if ( (guiTacticalInterfaceFlags & INTERFACE_MAPSCREEN ) ) @@ -6248,7 +6248,7 @@ void MercFacePanelCallback( MOUSE_REGION * pRegion, INT32 iReason ) { gfSwitchPanel = TRUE; gbNewPanel = SM_PANEL; - gubNewPanelParam = (UINT8)ubSoldierID; + gubNewPanelParam = ubSoldierID; // silversurfer: This needs to be reset to TRUE because inventory view only allows radar screen to be displayed and not the squad list. fRenderRadarScreen = TRUE; } @@ -6259,7 +6259,7 @@ void MercFacePanelCallback( MOUSE_REGION * pRegion, INT32 iReason ) extern void InternalSelectSoldier( UINT16 usSoldierID, BOOLEAN fAcknowledge, BOOLEAN fForceReselect, BOOLEAN fFromUI ); -void HandleLocateSelectMerc( UINT8 ubID, INT8 bFlag ) +void HandleLocateSelectMerc( UINT16 ubID, INT8 bFlag ) { BOOLEAN fSelect = FALSE; @@ -6386,7 +6386,7 @@ void HandleLocateSelectMerc( UINT8 ubID, INT8 bFlag ) -void ShowRadioLocator( UINT8 ubID, UINT8 ubLocatorSpeed ) +void ShowRadioLocator( UINT16 ubID, UINT8 ubLocatorSpeed ) { RESETTIMECOUNTER( MercPtrs[ ubID ]->timeCounters.FlashSelCounter, FLASH_SELECTOR_DELAY ); @@ -6413,7 +6413,7 @@ void ShowRadioLocator( UINT8 ubID, UINT8 ubLocatorSpeed ) } } -void EndRadioLocator( UINT8 ubID ) +void EndRadioLocator( UINT16 ubID ) { MercPtrs[ ubID ]->flags.fFlashLocator = FALSE; MercPtrs[ ubID ]->flags.fShowLocator = FALSE; @@ -6681,9 +6681,9 @@ void RenderSoldierTeamInv( SOLDIERTYPE *pSoldier, INT16 sX, INT16 sY, UINT8 ubPa void TMFirstHandInvCallback( MOUSE_REGION * pRegion, INT32 iReason ) { - UINT8 ubID, ubSoldierID; + UINT16 ubID, ubSoldierID; - ubID = (UINT8) MSYS_GetRegionUserData( pRegion, 0 ); + ubID = (UINT16) MSYS_GetRegionUserData( pRegion, 0 ); // If our flags are set to do this, gofoit! if ( (guiTacticalInterfaceFlags & INTERFACE_MAPSCREEN ) ) @@ -6731,10 +6731,10 @@ void TMFirstHandInvCallback( MOUSE_REGION * pRegion, INT32 iReason ) void TMClickFirstHandInvCallback( MOUSE_REGION * pRegion, INT32 iReason ) { - UINT8 ubID, ubSoldierID; + UINT16 ubID, ubSoldierID; UINT16 usOldHandItem; - ubID = (UINT8) MSYS_GetRegionUserData( pRegion, 0 ); + ubID = (UINT16) MSYS_GetRegionUserData( pRegion, 0 ); if ( ubID == NOBODY ) @@ -6777,10 +6777,10 @@ void TMClickFirstHandInvCallback( MOUSE_REGION * pRegion, INT32 iReason ) void TMClickSecondHandInvCallback( MOUSE_REGION * pRegion, INT32 iReason ) { - UINT8 ubID, ubSoldierID; + UINT16 ubID, ubSoldierID; UINT16 usOldHandItem; - ubID = (UINT8) MSYS_GetRegionUserData( pRegion, 0 ); + ubID = (UINT16) MSYS_GetRegionUserData( pRegion, 0 ); if ( ubID == NOBODY ) return; @@ -6822,7 +6822,7 @@ void TMClickSecondHandInvCallback( MOUSE_REGION * pRegion, INT32 iReason ) } -BOOLEAN PlayerExistsInSlot( UINT8 ubID ) +BOOLEAN PlayerExistsInSlot( UINT16 ubID ) { INT32 cnt; @@ -6841,7 +6841,7 @@ BOOLEAN PlayerExistsInSlot( UINT8 ubID ) } -INT8 GetTeamSlotFromPlayerID( UINT8 ubID ) +INT8 GetTeamSlotFromPlayerID( UINT16 ubID ) { INT8 cnt; @@ -6860,7 +6860,7 @@ INT8 GetTeamSlotFromPlayerID( UINT8 ubID ) } -BOOLEAN RemovePlayerFromTeamSlotGivenMercID( UINT8 ubMercID ) +BOOLEAN RemovePlayerFromTeamSlotGivenMercID( UINT16 ubMercID ) { INT32 cnt; @@ -6880,7 +6880,7 @@ BOOLEAN RemovePlayerFromTeamSlotGivenMercID( UINT8 ubMercID ) } -void AddPlayerToInterfaceTeamSlot( UINT8 ubID ) +void AddPlayerToInterfaceTeamSlot( UINT16 ubID ) { INT32 cnt; @@ -6964,7 +6964,7 @@ BOOLEAN InitTEAMSlots( ) } -BOOLEAN GetPlayerIDFromInterfaceTeamSlot( UINT8 ubPanelSlot, UINT8 *pubID ) +BOOLEAN GetPlayerIDFromInterfaceTeamSlot( UINT8 ubPanelSlot, UINT16 * pubID ) { if ( ubPanelSlot >= gGameOptions.ubSquadSize ) { @@ -7141,7 +7141,7 @@ void CleanUpStack( OBJECTTYPE * pObj, OBJECTTYPE * pCursorObj ) } } -UINT8 FindNextMercInTeamPanel( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLife, BOOLEAN fOnlyRegularMercs ) +UINT16 FindNextMercInTeamPanel( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLife, BOOLEAN fOnlyRegularMercs ) { INT32 cnt; INT32 bFirstID; @@ -7174,14 +7174,14 @@ UINT8 FindNextMercInTeamPanel( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLife { if ( pTeamSoldier->stats.bLife > 0 && pTeamSoldier->bActive && pTeamSoldier->bInSector && pTeamSoldier->bTeam == gbPlayerNum && pTeamSoldier->bAssignment < ON_DUTY && OK_INTERRUPT_MERC( pTeamSoldier ) && pSoldier->bAssignment == pTeamSoldier->bAssignment ) { - return( (UINT8)gTeamPanel[ cnt ].ubID ); + return( gTeamPanel[ cnt ].ubID ); } } else { if ( OK_CONTROLLABLE_MERC( pTeamSoldier) && OK_INTERRUPT_MERC( pTeamSoldier ) && pSoldier->bAssignment == pTeamSoldier->bAssignment ) { - return( (UINT8)gTeamPanel[ cnt ].ubID ); + return( gTeamPanel[ cnt ].ubID ); } } } @@ -7234,14 +7234,14 @@ UINT8 FindNextMercInTeamPanel( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLife { if ( pTeamSoldier->stats.bLife > 0 && pTeamSoldier->bActive && pTeamSoldier->bInSector && pTeamSoldier->bTeam == gbPlayerNum && pTeamSoldier->bAssignment < ON_DUTY && OK_INTERRUPT_MERC( pTeamSoldier ) && pSoldier->bAssignment == pTeamSoldier->bAssignment ) { - return( (UINT8)gTeamPanel[ cnt ].ubID ); + return( gTeamPanel[ cnt ].ubID ); } } else { if ( OK_CONTROLLABLE_MERC( pTeamSoldier) && OK_INTERRUPT_MERC( pTeamSoldier ) && pSoldier->bAssignment == pTeamSoldier->bAssignment ) { - return( (UINT8)gTeamPanel[ cnt ].ubID ); + return( gTeamPanel[ cnt ].ubID ); } } } @@ -7462,7 +7462,7 @@ void KeyRingSlotInvClickCallback( MOUSE_REGION * pRegion, INT32 iReason ) } else { - UINT8 ubSrcID, ubDestID; + UINT16 ubSrcID, ubDestID; BOOLEAN fOKToGo = FALSE; BOOLEAN fDeductPoints = FALSE; @@ -7473,7 +7473,7 @@ void KeyRingSlotInvClickCallback( MOUSE_REGION * pRegion, INT32 iReason ) } // ATE: OK, get source, dest guy if different... check for and then charge appropriate APs - ubSrcID = ( UINT8 )gCharactersList[ bSelectedInfoChar ].usSolID; + ubSrcID = gCharactersList[ bSelectedInfoChar ].usSolID; if ( gpItemPointerSoldier ) { ubDestID = gpItemPointerSoldier->ubID; diff --git a/Tactical/Interface Panels.h b/Tactical/Interface Panels.h index 923eb108..0e1bd050 100644 --- a/Tactical/Interface Panels.h +++ b/Tactical/Interface Panels.h @@ -77,18 +77,18 @@ void UpdateTEAMPanel( ); */ BOOLEAN InitializeTEAMPanelCoords( ); -void SetSMPanelCurrentMerc( UINT8 ubNewID ); -void SetTEAMPanelCurrentMerc( UINT8 ubNewID ); +void SetSMPanelCurrentMerc( UINT16 ubNewID ); +void SetTEAMPanelCurrentMerc( UINT16 ubNewID ); UINT16 GetSMPanelCurrentMerc( ); void UpdateSMPanel( ); BOOLEAN InitTEAMSlots( ); -void AddPlayerToInterfaceTeamSlot( UINT8 ubID ); +void AddPlayerToInterfaceTeamSlot( UINT16 ubID ); BOOLEAN RemovePlayerFromInterfaceTeamSlot( UINT8 ubID ); -BOOLEAN GetPlayerIDFromInterfaceTeamSlot( UINT8 ubPanelSlot, UINT8 *pubID ); +BOOLEAN GetPlayerIDFromInterfaceTeamSlot( UINT8 ubPanelSlot, UINT16 * pubID ); void RemoveAllPlayersFromSlot( ); -BOOLEAN PlayerExistsInSlot( UINT8 ubID ); -BOOLEAN RemovePlayerFromTeamSlotGivenMercID( UINT8 ubMercID ); +BOOLEAN PlayerExistsInSlot( UINT16 ubID ); +BOOLEAN RemovePlayerFromTeamSlotGivenMercID( UINT16 ubMercID ); void CheckForAndAddMercToTeamPanel( SOLDIERTYPE *pSoldier ); void CleanUpStack( OBJECTTYPE * pObj, OBJECTTYPE * pCursorObj ); @@ -107,8 +107,8 @@ extern INT8 gbNewItem[ NUM_INV_SLOTS ]; extern INT8 gbNewItemCycle[ NUM_INV_SLOTS ]; extern UINT8 gubNewItemMerc; -void ShowRadioLocator( UINT8 ubID, UINT8 ubLocatorSpeed ); -void EndRadioLocator( UINT8 ubID ); +void ShowRadioLocator( UINT16 ubID, UINT8 ubLocatorSpeed ); +void EndRadioLocator( UINT16 ubID ); extern MOUSE_REGION gSMPanelRegion; @@ -118,7 +118,7 @@ extern BOOLEAN gfDisableTacticalPanelButtons; typedef struct { - UINT8 ubID; + UINT16 ubID; BOOLEAN fOccupied; } TEAM_PANEL_SLOTS_TYPE; @@ -149,7 +149,7 @@ void GoToMapScreenFromTactical( void ); void FinishAnySkullPanelAnimations( ); -UINT8 FindNextMercInTeamPanel( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLife, BOOLEAN fOnlyRegularMercs ); +UINT16 FindNextMercInTeamPanel( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLife, BOOLEAN fOnlyRegularMercs ); // CHRISL: New callback functions for backpack buttons BOOLEAN ChangeDropPackStatus(SOLDIERTYPE *pSoldier, BOOLEAN newStatus); diff --git a/Tactical/Interface Utils.cpp b/Tactical/Interface Utils.cpp index 46d043aa..2031ba35 100644 --- a/Tactical/Interface Utils.cpp +++ b/Tactical/Interface Utils.cpp @@ -498,7 +498,7 @@ void RenderSoldierFace( SOLDIERTYPE *pSoldier, INT16 sFaceX, INT16 sFaceY, BOOLE } else { - SetAutoFaceActiveFromSoldier( FRAME_BUFFER, guiSAVEBUFFER, pSoldier->ubID , sFaceX, sFaceY ); + SetAutoFaceActiveFromSoldier( FRAME_BUFFER, guiSAVEBUFFER, pSoldier->ubID, sFaceX, sFaceY ); // SetAutoFaceActiveFromSoldier( FRAME_BUFFER, FACE_AUTO_RESTORE_BUFFER, pSoldier->ubID , sFaceX, sFaceY ); } } diff --git a/Tactical/Interface.cpp b/Tactical/Interface.cpp index bf953ebe..5bd9d75e 100644 --- a/Tactical/Interface.cpp +++ b/Tactical/Interface.cpp @@ -126,8 +126,8 @@ extern BOOLEAN gfCannotGetThrough; // will use it when showing red laser dot extern void SoldierTooltip(SOLDIERTYPE*); BOOLEAN gfProgBarActive = FALSE; -UINT8 gubProgNumEnemies = 0; -UINT8 gubProgCurEnemy = 0; +UINT16 gubProgNumEnemies = 0; +UINT16 gubProgCurEnemy = 0; UINT32 guiPORTRAITICONS; @@ -192,7 +192,7 @@ BOOLEAN gfPanelAllocated = FALSE; extern MOUSE_REGION gDisableRegion; extern MOUSE_REGION gUserTurnRegion; extern BOOLEAN gfUserTurnRegionActive; -extern UINT8 gubSelectSMPanelToMerc; +extern UINT16 gubSelectSMPanelToMerc; extern BOOLEAN gfIgnoreOnSelectedGuy; enum @@ -670,7 +670,7 @@ void ShutdownCurrentPanel( ) -void SetCurrentTacticalPanelCurrentMerc( UINT8 ubID ) +void SetCurrentTacticalPanelCurrentMerc( UINT16 ubID ) { SOLDIERTYPE *pSoldier; @@ -696,7 +696,7 @@ void SetCurrentTacticalPanelCurrentMerc( UINT8 ubID ) break; case TEAM_PANEL: - SetTEAMPanelCurrentMerc( (UINT8)gusSelectedSoldier ); + SetTEAMPanelCurrentMerc( gusSelectedSoldier ); break; } @@ -734,7 +734,7 @@ void SetCurrentInterfacePanel( UINT8 ubNewPanel ) void ToggleTacticalPanels( ) { gfSwitchPanel = TRUE; - gubNewPanelParam = (UINT8)gusSelectedSoldier; + gubNewPanelParam = gusSelectedSoldier; if ( gsCurInterfacePanel == SM_PANEL ) { @@ -764,7 +764,7 @@ void RemoveCurrentTacticalPanelButtons( ) } -BOOLEAN IsMercPortraitVisible( UINT8 ubSoldierID ) +BOOLEAN IsMercPortraitVisible( UINT16 ubSoldierID ) { if ( gsCurInterfacePanel == TEAM_PANEL ) { @@ -4244,7 +4244,7 @@ void BtnDoorMenuCallback(GUI_BUTTON *btn,INT32 reason) if ( EnoughPoints( gOpenDoorMenu.pSoldier, GetAPsToOpenDoor( gOpenDoorMenu.pSoldier ), APBPConstants[BP_OPEN_DOOR], FALSE ) ) { // Set UI - SetUIBusy( (UINT8)gOpenDoorMenu.pSoldier->ubID ); + SetUIBusy( gOpenDoorMenu.pSoldier->ubID ); if ( gOpenDoorMenu.fClosingDoor ) { @@ -4269,7 +4269,7 @@ void BtnDoorMenuCallback(GUI_BUTTON *btn,INT32 reason) if ( EnoughPoints( gOpenDoorMenu.pSoldier, APBPConstants[AP_BOOT_DOOR], APBPConstants[BP_BOOT_DOOR], FALSE ) ) { // Set UI - SetUIBusy( (UINT8)gOpenDoorMenu.pSoldier->ubID ); + SetUIBusy( gOpenDoorMenu.pSoldier->ubID ); InteractWithClosedDoor( gOpenDoorMenu.pSoldier, HANDLE_DOOR_FORCE ); } @@ -4286,7 +4286,7 @@ void BtnDoorMenuCallback(GUI_BUTTON *btn,INT32 reason) if ( EnoughPoints( gOpenDoorMenu.pSoldier, APBPConstants[AP_UNLOCK_DOOR], APBPConstants[BP_UNLOCK_DOOR], FALSE ) ) { // Set UI - SetUIBusy( (UINT8)gOpenDoorMenu.pSoldier->ubID ); + SetUIBusy( gOpenDoorMenu.pSoldier->ubID ); InteractWithClosedDoor( gOpenDoorMenu.pSoldier, HANDLE_DOOR_UNLOCK ); } @@ -4303,7 +4303,7 @@ void BtnDoorMenuCallback(GUI_BUTTON *btn,INT32 reason) if ( EnoughPoints( gOpenDoorMenu.pSoldier, GetAPsToPicklock( gOpenDoorMenu.pSoldier ), APBPConstants[BP_PICKLOCK], FALSE ) ) // SANDRO { // Set UI - SetUIBusy( (UINT8)gOpenDoorMenu.pSoldier->ubID ); + SetUIBusy( gOpenDoorMenu.pSoldier->ubID ); InteractWithClosedDoor( gOpenDoorMenu.pSoldier, HANDLE_DOOR_LOCKPICK ); } @@ -4320,7 +4320,7 @@ void BtnDoorMenuCallback(GUI_BUTTON *btn,INT32 reason) if ( EnoughPoints( gOpenDoorMenu.pSoldier, APBPConstants[AP_EXAMINE_DOOR], APBPConstants[BP_EXAMINE_DOOR], FALSE ) ) { // Set UI - SetUIBusy( (UINT8)gOpenDoorMenu.pSoldier->ubID ); + SetUIBusy( gOpenDoorMenu.pSoldier->ubID ); InteractWithClosedDoor( gOpenDoorMenu.pSoldier, HANDLE_DOOR_EXAMINE ); } @@ -4361,7 +4361,7 @@ void BtnDoorMenuCallback(GUI_BUTTON *btn,INT32 reason) if ( EnoughPoints( gOpenDoorMenu.pSoldier, GetAPsToBombDoor( gOpenDoorMenu.pSoldier ), APBPConstants[BP_EXPLODE_DOOR], FALSE ) ) // SANDRO { // Set UI - SetUIBusy( (UINT8)gOpenDoorMenu.pSoldier->ubID ); + SetUIBusy( gOpenDoorMenu.pSoldier->ubID ); InteractWithClosedDoor( gOpenDoorMenu.pSoldier, HANDLE_DOOR_EXPLODE ); } @@ -4379,7 +4379,7 @@ void BtnDoorMenuCallback(GUI_BUTTON *btn,INT32 reason) if ( EnoughPoints( gOpenDoorMenu.pSoldier, GetAPsToUntrapDoor( gOpenDoorMenu.pSoldier ), APBPConstants[BP_UNTRAP_DOOR], FALSE ) ) // SANDRO { // Set UI - SetUIBusy( (UINT8)gOpenDoorMenu.pSoldier->ubID ); + SetUIBusy( gOpenDoorMenu.pSoldier->ubID ); InteractWithClosedDoor( gOpenDoorMenu.pSoldier, HANDLE_DOOR_UNTRAP ); } @@ -4420,7 +4420,7 @@ void BtnDoorMenuCallback(GUI_BUTTON *btn,INT32 reason) if ( EnoughPoints( gOpenDoorMenu.pSoldier, APBPConstants[AP_USE_CROWBAR], APBPConstants[BP_USE_CROWBAR], FALSE ) ) { // Set UI - SetUIBusy( (UINT8)gOpenDoorMenu.pSoldier->ubID ); + SetUIBusy( gOpenDoorMenu.pSoldier->ubID ); InteractWithClosedDoor( gOpenDoorMenu.pSoldier, HANDLE_DOOR_CROWBAR ); } @@ -5178,7 +5178,7 @@ void PauseRT( BOOLEAN fPause ) } -void InitEnemyUIBar( UINT8 ubNumEnemies, UINT8 ubDoneEnemies ) +void InitEnemyUIBar( UINT16 ubNumEnemies, UINT16 ubDoneEnemies ) { // OK, set value gubProgNumEnemies = ubNumEnemies + ubDoneEnemies; @@ -5218,7 +5218,7 @@ void InitPlayerUIBar( BOOLEAN fInterrupt ) { SOLDIERTYPE *pTeamSoldier; INT32 cnt = 0; - INT8 bNumOK = 0, bNumNotOK = 0; + INT16 bNumOK = 0, bNumNotOK = 0; if ( !gGameOptions.fTurnTimeLimit ) { diff --git a/Tactical/Interface.h b/Tactical/Interface.h index e531076b..adbd2f21 100644 --- a/Tactical/Interface.h +++ b/Tactical/Interface.h @@ -366,7 +366,7 @@ enum extern BOOLEAN gfSwitchPanel; extern BOOLEAN gfUIStanceDifferent; extern UINT8 gbNewPanel; -extern UINT8 gubNewPanelParam; +extern UINT16 gubNewPanelParam; extern INT16 gsCurInterfacePanel; extern UINT32 guiRENDERBUFFER; @@ -458,9 +458,9 @@ BOOLEAN DrawCTHIndicator(); void CreateCurrentTacticalPanelButtons( ); void RemoveCurrentTacticalPanelButtons( ); -void SetCurrentTacticalPanelCurrentMerc( UINT8 ubID ); +void SetCurrentTacticalPanelCurrentMerc( UINT16 ubID ); void SetCurrentInterfacePanel( UINT8 ubNewPanel ); -BOOLEAN IsMercPortraitVisible( UINT8 ubSoldierID ); +BOOLEAN IsMercPortraitVisible( UINT16 ubSoldierID ); BOOLEAN InitializeCurrentPanel( ); void ShutdownCurrentPanel( ); @@ -475,7 +475,7 @@ void HandleUpDownArrowBackgrounds( ); void EndDeadlockMsg( ); -void HandleLocateSelectMerc( UINT8 ubID, INT8 bFlag ); +void HandleLocateSelectMerc( UINT16 ubID, INT8 bFlag ); void DirtyMercPanelInterface( SOLDIERTYPE *pSoldier, UINT8 ubDirtyLevel ); @@ -515,7 +515,7 @@ void EndTopMessage( ); void PauseRT( BOOLEAN fPause ); -void InitEnemyUIBar( UINT8 ubNumEnemies, UINT8 ubDoneEnemies ); +void InitEnemyUIBar( UINT16 ubNumEnemies, UINT16 ubDoneEnemies ); STR16 GetSoldierHealthString( SOLDIERTYPE *pSoldier ); diff --git a/Tactical/Item Types.cpp b/Tactical/Item Types.cpp index 55bd75b2..2c213d9e 100644 --- a/Tactical/Item Types.cpp +++ b/Tactical/Item Types.cpp @@ -125,7 +125,7 @@ bool IsSlotASmallPocket(int slot) return false; } -void CreateLBE (OBJECTTYPE* pObj, UINT8 ubID, int numSubPockets) +void CreateLBE (OBJECTTYPE* pObj, UINT16 ubID, int numSubPockets) { int uniqueID; LBENODE* pLBE = NULL; diff --git a/Tactical/Item Types.h b/Tactical/Item Types.h index 3e91212c..fac26280 100644 --- a/Tactical/Item Types.h +++ b/Tactical/Item Types.h @@ -259,7 +259,7 @@ public: #define SIZEOF_LBENODE_POD (offsetof(LBENODE, endOfPOD)) bool checkLBEArrayIntegrity(bool verbose=false); // BOB: checks all worldItems for missing LBE info -void CreateLBE(OBJECTTYPE* pObj, UINT8 ubID, int numSubPockets); +void CreateLBE(OBJECTTYPE* pObj, UINT16 ubID, int numSubPockets); bool DestroyLBEIfEmpty(OBJECTTYPE* pObj, int stackIndex = 0); void DestroyLBE(OBJECTTYPE* pObj, int stackIndex = 0); void GetLBESlots(UINT32 LBEType, std::vector& LBESlots); @@ -415,7 +415,7 @@ namespace ObjectDataStructs { INT8 bDelay; // >=0 values used only INT8 bFrequency; // >=0 values used only }; - UINT8 ubBombOwner; // side which placed the bomb + UINT16 ubBombOwner; // side which placed the bomb UINT8 bActionValue; // this is used by the ACTION_ITEM fake item union { diff --git a/Tactical/Items.cpp b/Tactical/Items.cpp index 8ddaaf69..01e07f7a 100644 --- a/Tactical/Items.cpp +++ b/Tactical/Items.cpp @@ -9397,7 +9397,7 @@ void CheckEquipmentForFragileItemDamage( SOLDIERTYPE *pSoldier, INT32 iDamage ) } -BOOLEAN DamageItemOnGround( OBJECTTYPE * pObject, INT32 sGridNo, INT8 bLevel, INT32 iDamage, UINT8 ubOwner ) +BOOLEAN DamageItemOnGround( OBJECTTYPE * pObject, INT32 sGridNo, INT8 bLevel, INT32 iDamage, UINT16 ubOwner ) { #ifdef JA2BETAVERSION CHAR tmpMPDbgString[512]; @@ -15411,10 +15411,10 @@ BOOLEAN ObjectIsExternalFeeder(SOLDIERTYPE* pSoldier, OBJECTTYPE * pObject) if ( !pSoldier || !pObject) return( FALSE ); - UINT8 usSoldierFeedingTarget1 = 0; + UINT16 usSoldierFeedingTarget1 = 0; UINT16 usGunSlot1 = 0; UINT16 usAmmoSlot1 = 0; - UINT8 usSoldierFeedingTarget2 = 0; + UINT16 usSoldierFeedingTarget2 = 0; UINT16 usGunSlot2 = 0; UINT16 usAmmoSlot2 = 0; if ( pSoldier->IsFeedingExternal(&usSoldierFeedingTarget1, &usGunSlot1, &usAmmoSlot1, &usSoldierFeedingTarget2, &usGunSlot2, &usAmmoSlot2) ) @@ -15469,10 +15469,10 @@ OBJECTTYPE* GetExternalFeedingObject(SOLDIERTYPE* pSoldier, OBJECTTYPE * pObject continue; // we check if that guy is feeding someone, and that someone is really us - UINT8 usTeamSoldierFeedingTarget1 = 0; + UINT16 usTeamSoldierFeedingTarget1 = 0; UINT16 usGunSlot1 = 0; UINT16 usAmmoSlot1 = 0; - UINT8 usTeamSoldierFeedingTarget2 = 0; + UINT16 usTeamSoldierFeedingTarget2 = 0; UINT16 usGunSlot2 = 0; UINT16 usAmmoSlot2 = 0; if ( pTeamSoldier->IsFeedingExternal(&usTeamSoldierFeedingTarget1, &usGunSlot1, &usAmmoSlot1, &usTeamSoldierFeedingTarget2, &usGunSlot2, &usAmmoSlot2) ) diff --git a/Tactical/Items.h b/Tactical/Items.h index d0e2649b..f25b10e4 100644 --- a/Tactical/Items.h +++ b/Tactical/Items.h @@ -227,7 +227,7 @@ UINT16 StandardGunListReplacement( UINT16 usGun ); UINT16 FindReplacementMagazine( UINT8 ubCalibre, UINT16 ubMagSize, UINT8 ubAmmoType); UINT16 FindReplacementMagazineIfNecessary( UINT16 usOldGun, UINT16 usOldAmmo, UINT16 usNewGun ); -BOOLEAN DamageItemOnGround( OBJECTTYPE * pObject, INT32 sGridNo, INT8 bLevel, INT32 iDamage, UINT8 ubOwner ); +BOOLEAN DamageItemOnGround( OBJECTTYPE * pObject, INT32 sGridNo, INT8 bLevel, INT32 iDamage, UINT16 ubOwner ); BOOLEAN CompatibleFaceItem( UINT16 usItem1, UINT16 usItem2 ); diff --git a/Tactical/LOS.cpp b/Tactical/LOS.cpp index 36f866b6..25318a2a 100644 --- a/Tactical/LOS.cpp +++ b/Tactical/LOS.cpp @@ -2433,7 +2433,7 @@ INT32 SoldierTo3DLocationLineOfSightTest( SOLDIERTYPE * pStartSoldier, INT32 sGr { FLOAT dStartZPos, dEndZPos; INT16 sXPos, sYPos; - UINT8 ubTargetID; + UINT16 ubTargetID; BOOLEAN fOk; CHECKF( pStartSoldier ); @@ -4385,7 +4385,7 @@ UINT8 SoldierToSoldierBodyPartChanceToGetThrough( SOLDIERTYPE * pStartSoldier, S return( ChanceToGetThrough( pStartSoldier, (FLOAT) CenterX( pEndSoldier->sGridNo ), (FLOAT) CenterY( pEndSoldier->sGridNo ), dEndZPos ) ); } -UINT8 SoldierToLocationChanceToGetThrough( SOLDIERTYPE * pStartSoldier, INT32 sGridNo, INT8 bLevel, INT8 bCubeLevel, UINT8 ubTargetID ) +UINT8 SoldierToLocationChanceToGetThrough( SOLDIERTYPE * pStartSoldier, INT32 sGridNo, INT8 bLevel, INT8 bCubeLevel, UINT16 ubTargetID ) { FLOAT dEndZPos; INT16 sXPos; @@ -4637,7 +4637,7 @@ void CalculateFiringIncrementsSimple( DOUBLE ddHorizAngle, DOUBLE ddVerticAngle, pBullet->qIncrZ = FloatToFixed( (FLOAT) ( sin( ddVerticAngle ) / sin( (PI/2) - ddVerticAngle ) * HEIGHTUNITS_PER_CELL ) );//dnl ch60 010913 } -INT8 FireBullet( UINT8 ubFirer, BULLET * pBullet, BOOLEAN fFake ) +INT8 FireBullet( UINT16 ubFirer, BULLET * pBullet, BOOLEAN fFake ) { //DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("FireBullet")); @@ -5782,7 +5782,7 @@ INT8 FireBulletGivenTarget( SOLDIERTYPE * pFirer, FLOAT dEndX, FLOAT dEndY, FLOA // Note that this function does not make provisions for Fake Firing. There is no need for it, and it would needlessly // complicate things anyway. // Also note we receive start coordinates from the bomb itself, because there's nowhere else to get them. -INT8 FireFragmentGivenTarget( UINT8 ubOwner, FLOAT dStartX, FLOAT dStartY, FLOAT dStartZ, FLOAT dEndX, FLOAT dEndY, FLOAT dEndZ, UINT16 usExplosiveItem ) +INT8 FireFragmentGivenTarget( UINT16 ubOwner, FLOAT dStartX, FLOAT dStartY, FLOAT dStartZ, FLOAT dEndX, FLOAT dEndY, FLOAT dEndZ, UINT16 usExplosiveItem ) { // Artificial... dStartZ++; @@ -7023,7 +7023,7 @@ void MoveBullet( INT32 iBullet ) FIXEDPT qLastZ; SOLDIERTYPE * pTarget; - UINT8 ubTargetID; + UINT16 ubTargetID; BOOLEAN fIntended; BOOLEAN fStopped; INT8 bOldLOSIndexX; @@ -9930,7 +9930,7 @@ UINT32 CalcCounterForceAccuracy(SOLDIERTYPE *pShooter, OBJECTTYPE *pWeapon, UINT // If we can't see the target, but buddies can see it, CF-Accuracy drops by 50% // If we can't see the target and neither can buddies, CF-Accuracy drops by 75% - UINT8 ubTargetID = WhoIsThere2( pShooter->sTargetGridNo, pShooter->bTargetLevel ); // Target ubID + UINT16 ubTargetID = WhoIsThere2( pShooter->sTargetGridNo, pShooter->bTargetLevel ); // Target ubID INT16 sDistVis = pShooter->GetMaxDistanceVisible(pShooter->sTargetGridNo, pShooter->bTargetLevel, CALC_FROM_ALL_DIRS ) * CELL_X_SIZE; gbForceWeaponNotReady = true; INT16 sDistVisNoScope = pShooter->GetMaxDistanceVisible(pShooter->sTargetGridNo, pShooter->bTargetLevel, CALC_FROM_ALL_DIRS ) * CELL_X_SIZE; diff --git a/Tactical/LOS.h b/Tactical/LOS.h index 64c3fc80..01bd9679 100644 --- a/Tactical/LOS.h +++ b/Tactical/LOS.h @@ -69,7 +69,7 @@ INT8 FireBulletGivenTarget( SOLDIERTYPE * pFirer, FLOAT dEndX, FLOAT dEndY, FLOA // HEADROCK HAM 4: Changed the name of one argument to avoid confusion with the new CTH system. INT8 FireBulletGivenTargetNCTH( SOLDIERTYPE * pFirer, FLOAT dEndX, FLOAT dEndY, FLOAT dEndZ, UINT16 usHandItem, INT16 sApertureRatio, BOOLEAN fBuckshot, BOOLEAN fFake ); // HEADROCK HAM 5: Function for fragments ejected from an explosion. -INT8 FireFragmentGivenTarget( UINT8 ubOwner, FLOAT dStartX, FLOAT dStartY, FLOAT dStartZ, FLOAT dEndX, FLOAT dEndY, FLOAT dEndZ, UINT16 usExplosiveItem ); +INT8 FireFragmentGivenTarget( UINT16 ubOwner, FLOAT dStartX, FLOAT dStartY, FLOAT dStartZ, FLOAT dEndX, FLOAT dEndY, FLOAT dEndZ, UINT16 usExplosiveItem ); // Flugente: fire a shot from a gun that has no user (used for traps with attached guns) INT8 FireBulletGivenTargetTrapOnly( SOLDIERTYPE* pThrower, OBJECTTYPE* pObj, INT32 gridno, FLOAT dStartZ, FLOAT dEndX, FLOAT dEndY, FLOAT dEndZ, INT16 sHitBy); @@ -152,7 +152,7 @@ UINT8 SoldierToSoldierChanceToGetThrough( SOLDIERTYPE * pStartSoldier, SOLDIERTY UINT8 SoldierToSoldierBodyPartChanceToGetThrough( SOLDIERTYPE * pStartSoldier, SOLDIERTYPE * pEndSoldier, UINT8 ubAimLocation ); UINT8 AISoldierToSoldierChanceToGetThrough( SOLDIERTYPE * pStartSoldier, SOLDIERTYPE * pEndSoldier ); UINT8 AISoldierToLocationChanceToGetThrough( SOLDIERTYPE * pStartSoldier, INT32 sGridNo, INT8 bLevel, INT8 bCubeLevel ); -UINT8 SoldierToLocationChanceToGetThrough( SOLDIERTYPE * pStartSoldier, INT32 sGridNo, INT8 bLevel, INT8 bCubeLevel, UINT8 ubTargetID ); +UINT8 SoldierToLocationChanceToGetThrough( SOLDIERTYPE * pStartSoldier, INT32 sGridNo, INT8 bLevel, INT8 bCubeLevel, UINT16 ubTargetID ); INT32 SoldierToLocationWindowTest( SOLDIERTYPE * pStartSoldier, INT32 sEndGridNo ); // sevenfm: AI LOS functions INT32 LOS_Raised(SOLDIERTYPE * pStartSoldier, SOLDIERTYPE * pEndSoldier, int iTileSightLimit = CALC_FROM_ALL_DIRS, UINT8 ubAimLocation = LOS_POS); diff --git a/Tactical/Merc Entering.cpp b/Tactical/Merc Entering.cpp index 6a425878..aaffbf2f 100644 --- a/Tactical/Merc Entering.cpp +++ b/Tactical/Merc Entering.cpp @@ -359,7 +359,7 @@ UINT8 ubHeliScripts[ NUM_HELI_STATES ][ MAX_HELI_SCRIPT ] = BOOLEAN gfHandleHeli = FALSE; -UINT8 gusHeliSeats[ MAX_MERC_IN_HELI ]; +UINT16 gusHeliSeats[ MAX_MERC_IN_HELI ]; INT8 gbNumHeliSeatsOccupied = 0; BOOLEAN gfFirstGuyDown = FALSE; @@ -396,7 +396,7 @@ void ResetHeliSeats( ) gbNumHeliSeatsOccupied = 0; } -void AddMercToHeli( UINT8 ubID ) +void AddMercToHeli( UINT16 ubID ) { if ( gbNumHeliSeatsOccupied < MAX_MERC_IN_HELI ) { @@ -1028,7 +1028,7 @@ void HandleFirstHeliDropOfGame( ) CharacterDialogueWithSpecialEvent( 0, 0, 0, DIALOGUE_TACTICAL_UI , FALSE , FALSE , DIALOGUE_SPECIAL_EVENT_ENABLE_AI ,0, 0 ); } -UINT8 SpawnAirDropElite( INT32 sGridNo ) +UINT16 SpawnAirDropElite( INT32 sGridNo ) { SOLDIERTYPE *pSoldier; @@ -1079,7 +1079,7 @@ void InitiateEnemyAirDropSoldiers( INT32 sGridNo ) for ( int i = 0; i < 6; ++i ) { - UINT8 id = SpawnAirDropElite( gMapInformation.sSouthGridNo + i ); + UINT16 id = SpawnAirDropElite( gMapInformation.sSouthGridNo + i ); if ( id == NOBODY ) return; diff --git a/Tactical/Merc Hiring.cpp b/Tactical/Merc Hiring.cpp index 62cded8b..c61e1ae1 100644 --- a/Tactical/Merc Hiring.cpp +++ b/Tactical/Merc Hiring.cpp @@ -131,7 +131,7 @@ UINT16 GetInitialHeliRandomTime(); INT8 HireMerc( MERC_HIRE_STRUCT *pHireMerc) { SOLDIERTYPE *pSoldier; - UINT8 iNewIndex; + UINT16 iNewIndex; UINT8 ubCurrentSoldier = pHireMerc->ubProfileID; MERCPROFILESTRUCT *pMerc; SOLDIERCREATE_STRUCT MercCreateStruct; @@ -429,7 +429,7 @@ INT8 HireMerc( MERC_HIRE_STRUCT *pHireMerc) } -void MercArrivesCallback( UINT8 ubSoldierID ) +void MercArrivesCallback( UINT16 ubSoldierID ) { MERCPROFILESTRUCT *pMerc; SOLDIERTYPE *pSoldier; @@ -502,7 +502,7 @@ void MercArrivesCallback( UINT8 ubSoldierID ) { bool force_helidrop = true; SOLDIERTYPE *pTeamSoldier; - for (UINT8 cnt = 0; cnt < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS; cnt++) + for (UINT16 cnt = 0; cnt < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS; cnt++) { if (gCharactersList[cnt].fValid) { @@ -671,12 +671,12 @@ BOOLEAN IsTheSoldierAliveAndConcious( SOLDIERTYPE *pSoldier ) return(FALSE); } -UINT8 NumberOfMercsOnPlayerTeam() +UINT16 NumberOfMercsOnPlayerTeam() { - INT8 cnt; + UINT16 cnt; SOLDIERTYPE *pSoldier; - INT16 bLastTeamID; - UINT8 ubCount=0; + UINT16 bLastTeamID; + UINT16 ubCount=0; // Set locator to first merc cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; @@ -702,7 +702,7 @@ UINT8 NumberOfMercsOnPlayerTeam() void HandleMercArrivesQuotes( SOLDIERTYPE *pSoldier ) { - UINT8 cnt, usLastTeamID; + UINT16 cnt, usLastTeamID; INT8 bHated; SOLDIERTYPE *pTeamSoldier; #ifdef JA2UB diff --git a/Tactical/Merc Hiring.h b/Tactical/Merc Hiring.h index 78dcf93b..d083788d 100644 --- a/Tactical/Merc Hiring.h +++ b/Tactical/Merc Hiring.h @@ -46,10 +46,10 @@ extern INT16 gsMercArriveSectorY; INT8 HireMerc( MERC_HIRE_STRUCT *pHireMerc); -void MercArrivesCallback( UINT8 ubSoldierID ); +void MercArrivesCallback( UINT16 ubSoldierID ); BOOLEAN IsMercHireable( UINT8 ubMercID ); BOOLEAN IsMercDead( UINT8 ubMercID ); -UINT8 NumberOfMercsOnPlayerTeam(); +UINT16 NumberOfMercsOnPlayerTeam(); BOOLEAN IsTheSoldierAliveAndConcious( SOLDIERTYPE *pSoldier ); void HandleMercArrivesQuotes( SOLDIERTYPE *pSoldier ); void UpdateAnyInTransitMercsWithGlobalArrivalSector( ); diff --git a/Tactical/Militia Control.cpp b/Tactical/Militia Control.cpp index 76331c01..f03aa926 100644 --- a/Tactical/Militia Control.cpp +++ b/Tactical/Militia Control.cpp @@ -347,7 +347,7 @@ void PrepareMilitiaForTactical( BOOLEAN fPrepareAll) void HandleMilitiaPromotions( void ) { - UINT8 cnt; + UINT16 cnt; SOLDIERTYPE* pTeamSoldier; gbGreenToElitePromotions = 0; @@ -1442,7 +1442,7 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason ) case( MILCON_MENU_ALL_ATTACK ): if (fAllowSectorOrder) { - UINT8 cnt; + UINT16 cnt; SOLDIERTYPE *pTeamSoldier; cnt = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID; @@ -1479,7 +1479,7 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason ) case( MILCON_MENU_ALL_HOLD ): if (fAllowSectorOrder) { - UINT8 cnt; + UINT16 cnt; SOLDIERTYPE *pTeamSoldier; cnt = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID; @@ -1515,7 +1515,7 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason ) case( MILCON_MENU_ALL_RETREAT ): if (fAllowSectorOrder) { - UINT8 cnt; + UINT16 cnt; INT16 sActionGridNo; SOLDIERTYPE *pTeamSoldier; @@ -1578,7 +1578,8 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason ) case( MILCON_MENU_ALL_COMETOME ): if (fAllowSectorOrder) { - UINT8 cnt, ubDirection; + UINT16 cnt; + UINT8 ubDirection; INT32 sActionGridNo, sGridNo, sAdjustedGridNo; SOLDIERTYPE *pTeamSoldier; @@ -1634,7 +1635,7 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason ) case( MILCON_MENU_ALL_SPREAD ): if (fAllowSectorOrder) { - UINT8 cnt; + UINT16 cnt; INT32 sActionGridNo; SOLDIERTYPE *pTeamSoldier; @@ -1687,7 +1688,7 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason ) case( MILCON_MENU_ALL_GETDOWN ): if (fAllowSectorOrder) { - UINT8 cnt; + UINT16 cnt; SOLDIERTYPE *pTeamSoldier; cnt = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID; @@ -1725,7 +1726,7 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason ) case( MILCON_MENU_ALL_CROUCH ): if (fAllowSectorOrder) { - UINT8 cnt; + UINT16 cnt; SOLDIERTYPE *pTeamSoldier; cnt = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID; @@ -1763,7 +1764,7 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason ) case( MILCON_MENU_ALL_TAKE_COVER ): if (fAllowSectorOrder) { - UINT8 cnt; + UINT16 cnt; INT16 sActionGridNo; INT32 iDummy; SOLDIERTYPE *pTeamSoldier; diff --git a/Tactical/Morale.cpp b/Tactical/Morale.cpp index 131f9b4d..2a41793f 100644 --- a/Tactical/Morale.cpp +++ b/Tactical/Morale.cpp @@ -257,7 +257,7 @@ void DecayStrategicMorale( SOLDIERTYPE * pSoldier ) void DecayTacticalMoraleModifiers( void ) { SOLDIERTYPE * pSoldier; - UINT8 ubLoop, ubLoop2; + UINT16 ubLoop, ubLoop2; BOOLEAN fHandleNervous; ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; @@ -364,7 +364,7 @@ void DecayTacticalMoraleModifiers( void ) void DecayStrategicMoraleModifiers( void ) { SOLDIERTYPE * pSoldier; - UINT8 ubLoop; + UINT16 ubLoop; ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; for ( pSoldier = MercPtrs[ ubLoop ]; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++, pSoldier++ ) @@ -730,7 +730,7 @@ void HandleMoraleEventForSoldier( SOLDIERTYPE * pSoldier, INT8 bMoraleEvent ) void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, INT16 sMapY, INT8 bMapZ ) { - UINT8 ubLoop; + UINT16 ubLoop; SOLDIERTYPE * pTeamSoldier; MERCPROFILESTRUCT * pProfile; @@ -1144,14 +1144,13 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I void HourlyMoraleUpdate( void ) { - INT8 bMercID, bOtherID; + UINT16 bMercID, bOtherID, bLastTeamID; INT8 bActualTeamOpinion; INT8 bTeamMoraleModChange, bTeamMoraleModDiff; INT8 bOpinion=-1; INT32 iTotalOpinions; INT8 bNumTeamMembers; INT8 bHighestTeamLeadership = 0; - INT8 bLastTeamID; SOLDIERTYPE * pSoldier; SOLDIERTYPE * pOtherSoldier; MERCPROFILESTRUCT * pProfile; diff --git a/Tactical/Overhead Types.h b/Tactical/Overhead Types.h index a7e4326d..f321b9bb 100644 --- a/Tactical/Overhead Types.h +++ b/Tactical/Overhead Types.h @@ -276,31 +276,32 @@ const int startingZ = 0; // ENUMERATION OF SOLDIER POSIITONS IN GLOBAL SOLDIER LIST // WDS - make number of mercenaries, etc. be configurable -#define CODE_MAXIMUM_NUMBER_OF_PLAYER_MERCS 32 -extern UINT8 giMAXIMUM_NUMBER_OF_PLAYER_MERCS; +#define CODE_MAXIMUM_NUMBER_OF_PLAYER_MERCS 254 +extern UINT16 giMAXIMUM_NUMBER_OF_PLAYER_MERCS; #define CODE_MAXIMUM_NUMBER_OF_PLAYER_VEHICLES 6 -extern UINT8 giMAXIMUM_NUMBER_OF_PLAYER_VEHICLES; +extern UINT16 giMAXIMUM_NUMBER_OF_PLAYER_VEHICLES; #define CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS CODE_MAXIMUM_NUMBER_OF_PLAYER_MERCS+CODE_MAXIMUM_NUMBER_OF_PLAYER_VEHICLES -extern UINT8 giMAXIMUM_NUMBER_OF_PLAYER_SLOTS; -#define CODE_MAXIMUM_NUMBER_OF_ENEMIES 64 -extern UINT8 giMAXIMUM_NUMBER_OF_ENEMIES; +extern UINT16 giMAXIMUM_NUMBER_OF_PLAYER_SLOTS; +#define CODE_MAXIMUM_NUMBER_OF_ENEMIES 256 +extern UINT16 giMAXIMUM_NUMBER_OF_ENEMIES; #define CODE_MAXIMUM_NUMBER_OF_CREATURES 40 -extern UINT8 giMAXIMUM_NUMBER_OF_CREATURES; +extern UINT16 giMAXIMUM_NUMBER_OF_CREATURES; #define CODE_MAXIMUM_NUMBER_OF_REBELS 64 -extern UINT8 giMAXIMUM_NUMBER_OF_REBELS; +extern UINT16 giMAXIMUM_NUMBER_OF_REBELS; #define CODE_MAXIMUM_NUMBER_OF_CIVS 40 -extern UINT8 giMAXIMUM_NUMBER_OF_CIVS; +extern UINT16 giMAXIMUM_NUMBER_OF_CIVS; // The following should be the largest from the above set of constants. // Note: Is there any way to compute this via the preprocessor? -#define LARGEST_NUMBER_IN_ANY_GROUP 64 +#define LARGEST_NUMBER_IN_ANY_GROUP 260 #define MAX_NUM_SOLDIERS (CODE_MAXIMUM_NUMBER_OF_PLAYER_MERCS+CODE_MAXIMUM_NUMBER_OF_PLAYER_VEHICLES+CODE_MAXIMUM_NUMBER_OF_ENEMIES+CODE_MAXIMUM_NUMBER_OF_CREATURES+CODE_MAXIMUM_NUMBER_OF_REBELS+CODE_MAXIMUM_NUMBER_OF_CIVS) #define NUM_PLANNING_MERCS 8 -#define TOTAL_SOLDIERS ( NUM_PLANNING_MERCS + MAX_NUM_SOLDIERS ) +//#define TOTAL_SOLDIERS ( NUM_PLANNING_MERCS + MAX_NUM_SOLDIERS ) +#define TOTAL_SOLDIERS (MAX_NUM_SOLDIERS ) // If there are more than (one less the size of the field used to store IDs (currently a char)) then fail -#if TOTAL_SOLDIERS > 254 +#if TOTAL_SOLDIERS > 2048 #error Too many! #endif #if CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS > LARGEST_NUMBER_IN_ANY_GROUP diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index ef446769..8dca851e 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -143,19 +143,19 @@ #include "GameInitOptionsScreen.h" // OJW - 20090419 -UINT8 giMAXIMUM_NUMBER_OF_PLAYER_MERCS = CODE_MAXIMUM_NUMBER_OF_PLAYER_MERCS; -UINT8 giMAXIMUM_NUMBER_OF_PLAYER_VEHICLES = CODE_MAXIMUM_NUMBER_OF_PLAYER_VEHICLES; -UINT8 giMAXIMUM_NUMBER_OF_PLAYER_SLOTS = CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS; -UINT8 giMAXIMUM_NUMBER_OF_ENEMIES = CODE_MAXIMUM_NUMBER_OF_ENEMIES; -UINT8 giMAXIMUM_NUMBER_OF_CREATURES = CODE_MAXIMUM_NUMBER_OF_CREATURES; -UINT8 giMAXIMUM_NUMBER_OF_REBELS = CODE_MAXIMUM_NUMBER_OF_REBELS; -UINT8 giMAXIMUM_NUMBER_OF_CIVS = CODE_MAXIMUM_NUMBER_OF_CIVS; +UINT16 giMAXIMUM_NUMBER_OF_PLAYER_MERCS = CODE_MAXIMUM_NUMBER_OF_PLAYER_MERCS; +UINT16 giMAXIMUM_NUMBER_OF_PLAYER_VEHICLES = CODE_MAXIMUM_NUMBER_OF_PLAYER_VEHICLES; +UINT16 giMAXIMUM_NUMBER_OF_PLAYER_SLOTS = CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS; +UINT16 giMAXIMUM_NUMBER_OF_ENEMIES = CODE_MAXIMUM_NUMBER_OF_ENEMIES; +UINT16 giMAXIMUM_NUMBER_OF_CREATURES = CODE_MAXIMUM_NUMBER_OF_CREATURES; +UINT16 giMAXIMUM_NUMBER_OF_REBELS = CODE_MAXIMUM_NUMBER_OF_REBELS; +UINT16 giMAXIMUM_NUMBER_OF_CIVS = CODE_MAXIMUM_NUMBER_OF_CIVS; //forward declarations of common classes to eliminate includes class OBJECTTYPE; class SOLDIERTYPE; - +extern void HandleTBPickUpBackpacks(BOOLEAN fAll); extern void HandleBestSightingPositionInRealtime(); extern INT32 GetCurrentBalance( void ); @@ -372,7 +372,7 @@ CHAR8 gzDirectionStr[][ 30 ] = }; // TEMP VALUES FOR TEAM DEFAULT POSITIONS -UINT8 bDefaultTeamRangesMP[ MAXTEAMS ][ 2 ] = +UINT16 bDefaultTeamRangesMP[ MAXTEAMS ][ 2 ] = { 0, 19, //20 US @@ -388,7 +388,7 @@ UINT8 bDefaultTeamRangesMP[ MAXTEAMS ][ 2 ] = MAX_NUM_SOLDIERS, TOTAL_SOLDIERS - 1 // PLANNING SOLDIERS }; -UINT8 bDefaultTeamRanges[ MAXTEAMS_SP ][ 2 ] = +UINT16 bDefaultTeamRanges[ MAXTEAMS_SP ][ 2 ] = { 0, CODE_MAXIMUM_NUMBER_OF_PLAYER_MERCS+CODE_MAXIMUM_NUMBER_OF_PLAYER_VEHICLES-1, @@ -420,16 +420,16 @@ COLORVAL bDefaultTeamColors[ MAXTEAMS ] = }; // UTILITY FUNCTIONS -INT8 NumActiveAndConsciousTeamMembers( UINT8 ubTeam ); -UINT8 NumEnemyInSector( ); -UINT8 NumEnemyInSectorExceptCreatures(); -UINT8 NumCapableEnemyInSector( ); +UINT16 NumActiveAndConsciousTeamMembers( UINT8 ubTeam ); +UINT16 NumEnemyInSector( ); +UINT16 NumEnemyInSectorExceptCreatures(); +UINT16 NumCapableEnemyInSector( ); BOOLEAN KillIncompacitatedEnemyInSector( ); BOOLEAN CheckForLosingEndOfBattle( ); void EndBattleWithUnconsciousGuysCallback( UINT8 bExitValue ); -UINT8 NumEnemyInSectorNotDeadOrDying( ); -UINT8 NumBloodcatsInSectorNotDeadOrDying( ); +UINT16 NumEnemyInSectorNotDeadOrDying( ); +UINT16 NumBloodcatsInSectorNotDeadOrDying( ); UINT8 gubWaitingForAllMercsToExitCode = 0; UINT8 gusNumMercsUntilWaitingOver = 0; @@ -659,7 +659,7 @@ void ShutdownTacticalEngine( ) BOOLEAN InitOverhead( ) { UINT32 cnt; - UINT8 cnt2; + UINT16 cnt2; // Set pointers list for( cnt = 0; cnt < TOTAL_SOLDIERS; cnt++ ) @@ -1331,7 +1331,7 @@ BOOLEAN ExecuteOverhead( ) } // OK, if we are the selected soldier, refresh some UI stuff - if ( pSoldier->ubID == (UINT8)gusSelectedSoldier ) + if ( pSoldier->ubID == gusSelectedSoldier ) { gfUIRefreshArrows = TRUE; } @@ -3378,7 +3378,7 @@ void InternalSelectSoldier( UINT16 usSoldierID, BOOLEAN fAcknowledge, BOOLEAN fF UpdateForContOverPortrait( pOldSoldier, FALSE ); } - gusSelectedSoldier = (UINT16)usSoldierID; + gusSelectedSoldier = usSoldierID; // find which squad this guy is, then set selected squad to this guy if( pSoldier->bAssignment == VEHICLE ) @@ -3405,7 +3405,7 @@ void InternalSelectSoldier( UINT16 usSoldierID, BOOLEAN fAcknowledge, BOOLEAN fF //pSoldier->SetCheckSoldierLightFlag( ); // Set interface to reflect new selection! - SetCurrentTacticalPanelCurrentMerc( (UINT8)usSoldierID ); + SetCurrentTacticalPanelCurrentMerc( usSoldierID ); // PLay ATTN SOUND if ( fAcknowledge ) @@ -3513,11 +3513,11 @@ void LocateSoldier( UINT16 usID, BOOLEAN fSetLocator) { if ( fSetLocator == SETLOCATOR || fSetLocator == 10 ) { - ShowRadioLocator((UINT8)usID, SHOW_LOCATOR_NORMAL ); + ShowRadioLocator(usID, SHOW_LOCATOR_NORMAL ); } else { - ShowRadioLocator((UINT8)usID, SHOW_LOCATOR_FAST ); + ShowRadioLocator(usID, SHOW_LOCATOR_FAST ); } } } @@ -3569,7 +3569,7 @@ void SlideTo(INT32 sGridNo, UINT16 usSoldierID , UINT16 usReasonID, BOOLEAN fSet // Locate even if on screen if (fSetLocator) - ShowRadioLocator((UINT8) usSoldierID, SHOW_LOCATOR_NORMAL ); + ShowRadioLocator( usSoldierID, SHOW_LOCATOR_NORMAL ); // FIRST CHECK IF WE ARE ON SCREEN if ( GridNoOnScreen( MercPtrs[ usSoldierID ]->sGridNo ) ) @@ -4167,7 +4167,7 @@ void HandleNPCTeamMemberDeath( SOLDIERTYPE *pSoldierOld ) // killing crows/cows is not worth any experience! if ( ( pSoldierOld->ubBodyType != CROW ) && ( pSoldierOld->ubBodyType != COW ) ) //&& pSoldierOld->ubLastDamageReason != TAKE_DAMAGE_BLOODLOSS ) // SANDRO - why not give exp for bleeding out? { - UINT8 ubAssister = NOBODY; + UINT16 ubAssister = NOBODY; // if it was a kill by a player's merc if (pSoldierOld->ubAttackerID != NOBODY && MercPtrs[ pSoldierOld->ubAttackerID ]->bTeam == gbPlayerNum ) @@ -4267,7 +4267,7 @@ void HandleNPCTeamMemberDeath( SOLDIERTYPE *pSoldierOld ) CheckForEndOfBattle( FALSE ); } -UINT8 LastActiveTeamMember( UINT8 ubTeam ) +UINT16 LastActiveTeamMember( UINT16 ubTeam ) { INT32 cnt; SOLDIERTYPE *pSoldier; @@ -4279,7 +4279,7 @@ UINT8 LastActiveTeamMember( UINT8 ubTeam ) { if ( pSoldier->bActive ) { - return( (INT8)cnt ); + return( (UINT16)cnt ); } } @@ -4542,9 +4542,9 @@ void MakeCivHostile(SOLDIERTYPE *pSoldier) UINT8 CivilianGroupMembersChangeSidesWithinProximity( SOLDIERTYPE * pAttacked ) { - SOLDIERTYPE * pSoldier; - UINT8 ubFirstProfile = NO_PROFILE; - UINT8 cnt; + SOLDIERTYPE * pSoldier; + UINT8 ubFirstProfile = NO_PROFILE; + UINT16 cnt; if ( pAttacked->ubCivilianGroup == NON_CIV_GROUP ) { @@ -4584,11 +4584,11 @@ UINT8 CivilianGroupMembersChangeSidesWithinProximity( SOLDIERTYPE * pAttacked ) SOLDIERTYPE * CivilianGroupMemberChangesSides( SOLDIERTYPE * pAttacked ) { - SOLDIERTYPE * pNew; - SOLDIERTYPE * pNewAttacked = pAttacked; - SOLDIERTYPE * pSoldier; - UINT8 cnt; - UINT8 ubFirstProfile = NO_PROFILE; + SOLDIERTYPE * pNew; + SOLDIERTYPE * pNewAttacked = pAttacked; + SOLDIERTYPE * pSoldier; + UINT16 cnt; + UINT8 ubFirstProfile = NO_PROFILE; if ( pAttacked->ubCivilianGroup == NON_CIV_GROUP ) { @@ -4778,11 +4778,11 @@ gTacticalStatus.fCivGroupHostile[ ubLoop ] = CIV_GROUP_HOSTILE; } */ -INT8 NumActiveAndConsciousTeamMembers( UINT8 ubTeam ) +UINT16 NumActiveAndConsciousTeamMembers( UINT8 ubTeam ) { INT32 cnt; SOLDIERTYPE *pSoldier; - UINT8 ubCount = 0; + UINT16 ubCount = 0; cnt = gTacticalStatus.Team[ ubTeam ].bFirstID; @@ -4799,10 +4799,10 @@ INT8 NumActiveAndConsciousTeamMembers( UINT8 ubTeam ) } -UINT8 FindNextActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLife, BOOLEAN fOnlyRegularMercs ) +UINT16 FindNextActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLife, BOOLEAN fOnlyRegularMercs ) { - UINT8 bLastTeamID; - INT32 cnt; + UINT16 bLastTeamID; + UINT16 cnt; SOLDIERTYPE *pTeamSoldier; cnt = pSoldier->ubID + 1; @@ -4823,14 +4823,14 @@ UINT8 FindNextActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKL { if ( pTeamSoldier->stats.bLife > 0 && pTeamSoldier->bActive && pTeamSoldier->bInSector && pTeamSoldier->bTeam == gbPlayerNum && ( pTeamSoldier->bAssignment < ON_DUTY || pTeamSoldier->bAssignment == VEHICLE ) && OK_INTERRUPT_MERC( pTeamSoldier ) && pSoldier->bAssignment == pTeamSoldier->bAssignment ) { - return( (UINT8)cnt ); + return( cnt ); } } else { if ( OK_CONTROLLABLE_MERC( pTeamSoldier) && OK_INTERRUPT_MERC( pTeamSoldier ) && pSoldier->bAssignment == pTeamSoldier->bAssignment ) { - return( (UINT8)cnt ); + return( cnt ); } } } @@ -4854,14 +4854,14 @@ UINT8 FindNextActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKL { if ( pTeamSoldier->stats.bLife > 0 && pTeamSoldier->bActive && pTeamSoldier->bInSector && pTeamSoldier->bTeam == gbPlayerNum && ( pTeamSoldier->bAssignment < ON_DUTY || pTeamSoldier->bAssignment == VEHICLE ) && OK_INTERRUPT_MERC( pTeamSoldier ) && pSoldier->bAssignment == pTeamSoldier->bAssignment ) { - return( (UINT8)cnt ); + return( cnt ); } } else { if ( OK_CONTROLLABLE_MERC( pTeamSoldier) && OK_INTERRUPT_MERC( pTeamSoldier ) && pSoldier->bAssignment == pTeamSoldier->bAssignment ) { - return( (UINT8)cnt ); + return( cnt ); } } } @@ -4913,9 +4913,9 @@ SOLDIERTYPE *FindNextActiveSquad( SOLDIERTYPE *pSoldier ) } -UINT8 FindPrevActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLife, BOOLEAN fOnlyRegularMercs ) +UINT16 FindPrevActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLife, BOOLEAN fOnlyRegularMercs ) { - UINT8 bLastTeamID; + UINT16 bLastTeamID; INT32 cnt; SOLDIERTYPE *pTeamSoldier; @@ -4939,14 +4939,14 @@ UINT8 FindPrevActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKL // Check for bLife > 0 if ( pTeamSoldier->stats.bLife > 0 && pTeamSoldier->bActive && pTeamSoldier->bInSector && pTeamSoldier->bTeam == gbPlayerNum && ( pTeamSoldier->bAssignment < ON_DUTY || pTeamSoldier->bAssignment == VEHICLE ) && OK_INTERRUPT_MERC( pTeamSoldier ) && pSoldier->bAssignment == pTeamSoldier->bAssignment ) { - return( (UINT8)cnt ); + return( (UINT16)cnt ); } } else { if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && OK_INTERRUPT_MERC( pTeamSoldier ) && pSoldier->bAssignment == pTeamSoldier->bAssignment ) { - return( (UINT8)cnt ); + return( (UINT16)cnt ); } } } @@ -4969,14 +4969,14 @@ UINT8 FindPrevActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKL { if ( pTeamSoldier->stats.bLife > 0 && pTeamSoldier->bActive && pTeamSoldier->bInSector && pTeamSoldier->bTeam == gbPlayerNum && ( pTeamSoldier->bAssignment < ON_DUTY || pTeamSoldier->bAssignment == VEHICLE ) && OK_INTERRUPT_MERC( pTeamSoldier ) && pSoldier->bAssignment == pTeamSoldier->bAssignment ) { - return( (UINT8)cnt ); + return( (UINT16)cnt ); } } else { if ( OK_CONTROLLABLE_MERC( pTeamSoldier) && OK_INTERRUPT_MERC( pTeamSoldier ) && pSoldier->bAssignment == pTeamSoldier->bAssignment ) { - return( (UINT8)cnt ); + return( (UINT16)cnt ); } } } @@ -4990,8 +4990,8 @@ UINT8 FindPrevActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKL BOOLEAN CheckForPlayerTeamInMissionExit( ) { INT32 cnt; - SOLDIERTYPE *pSoldier; - UINT8 bGuysIn = 0; + SOLDIERTYPE *pSoldier; + UINT16 bGuysIn = 0; // End the turn of player charactors cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; @@ -5087,10 +5087,10 @@ extern BOOLEAN InternalOkayToAddStructureToWorld( INT32 sBaseGridNo, INT8 bLevel // NB if making changes don't forget to update NewOKDestinationAndDirection BOOLEAN NewOKDestination( SOLDIERTYPE * pCurrSoldier, INT32 sGridNo, BOOLEAN fPeopleToo, INT8 bLevel ) { - UINT8 bPerson; - STRUCTURE * pStructure; - INT16 sDesiredLevel; - BOOLEAN fOKCheckStruct; + UINT16 bPerson; + STRUCTURE *pStructure; + INT16 sDesiredLevel; + BOOLEAN fOKCheckStruct; // sevenfm: allow civilians and NPCs with profile to go off screen if (!GridNoOnVisibleWorldTile(sGridNo) && (pCurrSoldier->bTeam != CIV_TEAM || pCurrSoldier->ubProfile == NO_PROFILE)) @@ -5228,10 +5228,10 @@ BOOLEAN NewOKDestination( SOLDIERTYPE * pCurrSoldier, INT32 sGridNo, BOOLEAN fPe // NB if making changes don't forget to update NewOKDestination INT16 NewOKDestinationAndDirection( SOLDIERTYPE * pCurrSoldier, INT32 sGridNo, INT8 bDirection, BOOLEAN fPeopleToo, INT8 bLevel ) { - UINT8 bPerson; - STRUCTURE * pStructure; - INT16 sDesiredLevel; - BOOLEAN fOKCheckStruct; + UINT16 bPerson; + STRUCTURE *pStructure; + INT16 sDesiredLevel; + BOOLEAN fOKCheckStruct; if (fPeopleToo && ( bPerson = WhoIsThere2( sGridNo, bLevel ) ) != NOBODY ) { @@ -5439,7 +5439,7 @@ BOOLEAN IsLocationSittableExcludingPeople( INT32 iMapIndex, BOOLEAN fOnRoof ) BOOLEAN TeamMemberNear(INT8 bTeam, INT32 sGridNo, INT32 iRange) { - UINT8 bLoop; + UINT16 bLoop; SOLDIERTYPE * pSoldier; for (bLoop=gTacticalStatus.Team[bTeam].bFirstID, pSoldier=MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[bTeam].bLastID; ++bLoop, pSoldier++) @@ -5832,14 +5832,14 @@ INT32 FindNextToAdjacentGridEx( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 *pub //INT32 cnt; INT32 sClosest = -1, sSpot, sSpot2; INT32 sCloseGridNo = NOWHERE; - UINT32 uiMercFlags; - UINT16 usSoldierIndex; - UINT8 ubDir; - STRUCTURE *pDoor; - UINT8 ubWallOrientation; - BOOLEAN fCheckGivenGridNo = TRUE; - UINT8 ubTestDirection; - UINT8 ubWhoIsThere; + UINT32 uiMercFlags; + UINT16 usSoldierIndex; + UINT8 ubDir; + STRUCTURE *pDoor; + UINT8 ubWallOrientation; + BOOLEAN fCheckGivenGridNo = TRUE; + UINT8 ubTestDirection; + UINT16 ubWhoIsThere; // CHECK IF WE WANT TO FORCE GRIDNO TO PERSON if ( psAdjustedGridNo != NULL ) @@ -6145,7 +6145,7 @@ INT32 FindNextToAdjacentGridEx( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 *pub INT32 FindAdjacentPunchTarget( SOLDIERTYPE * pSoldier, SOLDIERTYPE * pTargetSoldier, INT32 * psAdjustedTargetGridNo, UINT8 * pubDirection ) { INT32 sSpot; - UINT8 ubGuyThere; + UINT16 ubGuyThere; for ( UINT8 cnt = 0; cnt < NUM_WORLD_DIRECTIONS; ++cnt ) { @@ -6883,9 +6883,9 @@ void SayBattleSoundFromAnyBodyInSector( INT32 iBattleSnd ) { // WDS - make number of mercenaries, etc. be configurable // UINT8 ubMercsInSector[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ] = { 0 }; - std::vector ubMercsInSector (CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS, 0); - UINT8 ubNumMercs = 0; - UINT8 ubChosenMerc; + std::vector ubMercsInSector (CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS, 0); + UINT16 ubNumMercs = 0; + UINT16 ubChosenMerc; SOLDIERTYPE *pTeamSoldier; INT32 cnt; @@ -6900,7 +6900,7 @@ void SayBattleSoundFromAnyBodyInSector( INT32 iBattleSnd ) // Add guy if he's a candidate... if ( OK_INSECTOR_MERC( pTeamSoldier ) && !AM_AN_EPC( pTeamSoldier ) && !( pTeamSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) && !(AM_A_ROBOT( pTeamSoldier )) && !pTeamSoldier->flags.fMercAsleep ) { - ubMercsInSector[ ubNumMercs ] = (UINT8)cnt; + ubMercsInSector[ ubNumMercs ] = (UINT16)cnt; ubNumMercs++; } } @@ -6908,7 +6908,7 @@ void SayBattleSoundFromAnyBodyInSector( INT32 iBattleSnd ) // If we are > 0 if ( ubNumMercs > 0 ) { - ubChosenMerc = (UINT8)Random( ubNumMercs ); + ubChosenMerc = (UINT16)Random( ubNumMercs ); MercPtrs[ ubChosenMerc ]->DoMercBattleSound( (UINT8)iBattleSnd ); } @@ -7402,10 +7402,6 @@ void UpdateWoundedFromSectorInfo( INT16 sMapX, INT16 sMapY, INT8 bMapZ ) { SOLDIERTYPE *pSoldier; INT32 cnt = 0; - UINT8 ubNumPrisoners = 0; - UINT8 ubNumPrisonerAdmin = 0; - UINT8 ubNumPrisonerTroop = 0; - UINT8 ubNumPrisonerElite = 0; // Check if the battle is won! // Loop through all mercs and make go @@ -7543,7 +7539,7 @@ BOOLEAN CheckForEndOfBattle( BOOLEAN fAnEnemyRetreated ) if (fBattleLost) { // sevenfm: count alive/dead/not covert mercs in sector/retreating from sector - UINT8 ubLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; + UINT16 ubLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; BOOLEAN fFoundNotCovertMerc = FALSE; BOOLEAN fFoundAliveMerc = FALSE; BOOLEAN fFoundDeadMerc = FALSE; @@ -7592,7 +7588,7 @@ BOOLEAN CheckForEndOfBattle( BOOLEAN fAnEnemyRetreated ) memset(&(gTacticalStatus.bNumFoughtInBattle), 0, MAXTEAMS); // If here, the battle has been lost! - UnSetUIBusy((UINT8)gusSelectedSoldier); + UnSetUIBusy(gusSelectedSoldier); if (gTacticalStatus.uiFlags & INCOMBAT) { @@ -7725,7 +7721,7 @@ BOOLEAN CheckForEndOfBattle( BOOLEAN fAnEnemyRetreated ) // battle for us EndAllAITurns( ); - UnSetUIBusy( (UINT8)gusSelectedSoldier ); + UnSetUIBusy( gusSelectedSoldier ); // ATE: // If we ended battle in any team other than the player's @@ -8011,7 +8007,10 @@ BOOLEAN CheckForEndOfBattle( BOOLEAN fAnEnemyRetreated ) // Flugente: in any case, reset creature attack variables ResetCreatureAttackVariables(); - // sevenfm: switch off radio + // sevenfm: pick up dropped backpacks + HandleTBPickUpBackpacks(TRUE); + + // sevenfm: switch off radio //SwitchOffAllRadio(); // If we are the server, we escape this function at the top if we think the game should still be running @@ -8154,7 +8153,7 @@ void CycleVisibleEnemies( SOLDIERTYPE *pSrcSoldier ) // If we are > ok start, this is the one! if ( cnt > pSrcSoldier->ubLastEnemyCycledID ) { - pSrcSoldier->ubLastEnemyCycledID = (UINT8)cnt; + pSrcSoldier->ubLastEnemyCycledID = (UINT16)cnt; //ATE: Change to Slide To... SlideTo( 0, pSoldier->ubID, 0, SETANDREMOVEPREVIOUSLOCATOR ); @@ -8182,7 +8181,7 @@ void CycleVisibleEnemies( SOLDIERTYPE *pSrcSoldier ) // If we are > ok start, this is the one! if ( cnt > pSrcSoldier->ubLastEnemyCycledID ) { - pSrcSoldier->ubLastEnemyCycledID = (UINT8)cnt; + pSrcSoldier->ubLastEnemyCycledID = (UINT16)cnt; //ATE: Change to Slide To... SlideTo( 0, pSoldier->ubID, 0, SETANDREMOVEPREVIOUSLOCATOR ); @@ -8217,7 +8216,7 @@ void CycleVisibleEnemiesBackward( SOLDIERTYPE *pSrcSoldier ) // If we are > ok start, this is the one! if ( cnt < pSrcSoldier->ubLastEnemyCycledID ) { - pSrcSoldier->ubLastEnemyCycledID = (UINT8)cnt; + pSrcSoldier->ubLastEnemyCycledID = (UINT16)cnt; //ATE: Change to Slide To... SlideTo( 0, pSoldier->ubID, 0, SETANDREMOVEPREVIOUSLOCATOR ); @@ -8246,7 +8245,7 @@ void CycleVisibleEnemiesBackward( SOLDIERTYPE *pSrcSoldier ) // If we are > ok start, this is the one! if ( cnt < pSrcSoldier->ubLastEnemyCycledID ) { - pSrcSoldier->ubLastEnemyCycledID = (UINT8)cnt; + pSrcSoldier->ubLastEnemyCycledID = (UINT16)cnt; //ATE: Change to Slide To... SlideTo( 0, pSoldier->ubID, 0, SETANDREMOVEPREVIOUSLOCATOR ); @@ -8289,11 +8288,11 @@ BOOLEAN PlayerTeamFull( ) return( TRUE ); } -UINT8 NumPCsInSector( ) +UINT16 NumPCsInSector( ) { SOLDIERTYPE *pTeamSoldier; UINT32 cnt = 0; - UINT8 ubNumPlayers = 0; + UINT16 ubNumPlayers = 0; // Check if the battle is won! // Loop through all mercs and make go @@ -8314,11 +8313,11 @@ UINT8 NumPCsInSector( ) } -UINT8 NumEnemyInSector( ) +UINT16 NumEnemyInSector( ) { SOLDIERTYPE *pTeamSoldier; INT32 cnt = 0; - UINT8 ubNumEnemies = 0; + UINT16 ubNumEnemies = 0; // Check if the battle is won! // Loop through all mercs and make go @@ -8338,11 +8337,11 @@ UINT8 NumEnemyInSector( ) } -UINT8 NumZombiesInSector( ) +UINT16 NumZombiesInSector( ) { SOLDIERTYPE *pTeamSoldier; - INT32 cnt = 0; - UINT8 ubNumZombies = 0; + INT32 cnt = 0; + UINT16 ubNumZombies = 0; for ( pTeamSoldier = Menptr, cnt = 0; cnt < TOTAL_SOLDIERS; ++pTeamSoldier, ++cnt ) { @@ -8358,11 +8357,11 @@ UINT8 NumZombiesInSector( ) return( ubNumZombies ); } -UINT8 NumEnemyInSectorExceptCreatures() +UINT16 NumEnemyInSectorExceptCreatures() { SOLDIERTYPE *pTeamSoldier; - INT32 cnt = 0; - UINT8 ubNumEnemies = 0; + INT32 cnt = 0; + UINT16 ubNumEnemies = 0; // Check if the battle is won! // Loop through all mercs and make go @@ -8383,11 +8382,11 @@ UINT8 NumEnemyInSectorExceptCreatures() } -UINT8 NumEnemyInSectorNotDeadOrDying( ) +UINT16 NumEnemyInSectorNotDeadOrDying( ) { SOLDIERTYPE *pTeamSoldier; - INT32 cnt = 0; - UINT8 ubNumEnemies = 0; + INT32 cnt = 0; + UINT16 ubNumEnemies = 0; // Check if the battle is won! // Loop through all mercs and make go @@ -8418,11 +8417,11 @@ UINT8 NumEnemyInSectorNotDeadOrDying( ) } -UINT8 NumBloodcatsInSectorNotDeadOrDying( ) +UINT16 NumBloodcatsInSectorNotDeadOrDying( ) { SOLDIERTYPE *pTeamSoldier; - INT32 cnt = 0; - UINT8 ubNumEnemies = 0; + INT32 cnt = 0; + UINT16 ubNumEnemies = 0; // Check if the battle is won! // Loop through all mercs and make go @@ -8457,11 +8456,11 @@ UINT8 NumBloodcatsInSectorNotDeadOrDying( ) } -UINT8 NumCapableEnemyInSector( ) +UINT16 NumCapableEnemyInSector( ) { SOLDIERTYPE *pTeamSoldier; - INT32 cnt = 0; - UINT8 ubNumEnemies = 0; + INT32 cnt = 0; + UINT16 ubNumEnemies = 0; // Check if the battle is won! // Loop through all mercs and make go @@ -8505,7 +8504,7 @@ BOOLEAN CheckForLosingEndOfBattle( ) { SOLDIERTYPE *pTeamSoldier; INT32 cnt = 0; - INT8 bNumDead = 0, bNumNotOK = 0, bNumInBattle = 0, bNumNotOKRealMercs = 0; + UINT16 bNumDead = 0, bNumNotOK = 0, bNumInBattle = 0, bNumNotOKRealMercs = 0; BOOLEAN fMadeCorpse; BOOLEAN fDoCapture = FALSE; BOOLEAN fOnlyEPCsLeft = TRUE; @@ -8864,9 +8863,9 @@ INT8 CalcSuppressionTolerance( SOLDIERTYPE * pSoldier ) return( bTolerance ); } -extern void IncrementWatchedLoc(UINT8 ubID, INT32 sGridNo, INT8 bLevel); +extern void IncrementWatchedLoc(UINT16 ubID, INT32 sGridNo, INT8 bLevel); -void HandleSuppressionFire( UINT8 ubTargetedMerc, UINT8 ubCausedAttacker ) +void HandleSuppressionFire( UINT16 ubTargetedMerc, UINT16 ubCausedAttacker ) { /////////////////////////////////////////////////////////////////////////////// // @@ -9245,7 +9244,7 @@ void HandleSuppressionFire( UINT8 ubTargetedMerc, UINT8 ubCausedAttacker ) // "Soldier is pinned down!" ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, New113HAMMessage[1], pSoldier->GetName() ); // HEADROCK HAM 3.2: Added a radio locator! - ShowRadioLocator( (UINT8)pSoldier->ubID, SHOW_LOCATOR_NORMAL ); + ShowRadioLocator( pSoldier->ubID, SHOW_LOCATOR_NORMAL ); } } } @@ -9653,7 +9652,7 @@ SOLDIERTYPE *InternalReduceAttackBusyCount( ) SOLDIERTYPE * pTarget; BOOLEAN fEnterCombat = FALSE; UINT32 cnt; - UINT8 ubID; + UINT16 ubID; #if 0 // 0verhaul: None of this is necessary anymore with the new attack busy system @@ -9997,7 +9996,7 @@ SOLDIERTYPE *InternalReduceAttackBusyCount( ) if ( gTacticalStatus.uiFlags & CHECK_SIGHT_AT_END_OF_ATTACK ) { - UINT8 ubLoop; + UINT16 ubLoop; SOLDIERTYPE * pSightSoldier; AllTeamsLookForAll( FALSE ); @@ -10317,7 +10316,7 @@ void RemoveManFromTeam( INT8 bTeam ) void RemoveSoldierFromTacticalSector( SOLDIERTYPE *pSoldier, BOOLEAN fAdjustSelected ) { - UINT8 ubID; + UINT16 ubID; SOLDIERTYPE *pNewSoldier; // reset merc's opplist @@ -10661,9 +10660,9 @@ void HandleCreatureTenseQuote( ) { // WDS - make number of mercenaries, etc. be configurable // UINT8 ubMercsInSector[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ] = { 0 }; - std::vector ubMercsInSector (CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS, 0); - UINT8 ubNumMercs = 0; - UINT8 ubChosenMerc; + std::vector ubMercsInSector (CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS, 0); + UINT16 ubNumMercs = 0; + UINT16 ubChosenMerc; SOLDIERTYPE *pTeamSoldier; INT32 cnt; INT32 uiTime; @@ -10691,7 +10690,7 @@ void HandleCreatureTenseQuote( ) // Add guy if he's a candidate... if ( OK_INSECTOR_MERC( pTeamSoldier ) && !AM_AN_EPC( pTeamSoldier ) && !( pTeamSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) && !(AM_A_ROBOT( pTeamSoldier )) && !pTeamSoldier->flags.fMercAsleep ) { - ubMercsInSector[ ubNumMercs ] = (UINT8)cnt; + ubMercsInSector[ ubNumMercs ] = (UINT16)cnt; ubNumMercs++; } } @@ -10699,7 +10698,7 @@ void HandleCreatureTenseQuote( ) // If we are > 0 if ( ubNumMercs > 0 ) { - ubChosenMerc = (UINT8)Random( ubNumMercs ); + ubChosenMerc = (UINT16)Random( ubNumMercs ); DoCreatureTensionQuote ( MercPtrs[ ubMercsInSector[ ubChosenMerc ] ] ); } @@ -10812,7 +10811,7 @@ INT8 CheckStatusNearbyFriendlies( SOLDIERTYPE *pSoldier ) INT8 bLevelDifference = 0; // Run through each friendly. - for ( UINT8 iCounter = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID ; iCounter <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID ; iCounter ++ ) + for ( UINT16 iCounter = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID ; iCounter <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID ; iCounter ++ ) { pLeader = MercPtrs[ iCounter ]; // Make sure that character is alive, not too shocked, and conscious, and of higher experience level @@ -10904,7 +10903,7 @@ INT8 CheckStatusNearbyFriendliesSimple(SOLDIERTYPE *pSoldier) } // Run through each friendly. - for (UINT8 ubFriend = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID ; ubFriend <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID ; ubFriend ++) + for (UINT16 ubFriend = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID ; ubFriend <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID ; ubFriend ++) { pFriend = MercPtrs[ ubFriend ]; @@ -11047,7 +11046,7 @@ void HandleDisplayingOfPlayerLostDialogue( ) } #endif -static UINT8 prisonerdialoguetargetID = NOBODY; +static UINT16 prisonerdialoguetargetID = NOBODY; void TurnCoatAttemptMessageBoxCallBack( UINT8 ubExitValue ) { @@ -11605,7 +11604,7 @@ void TeamRestock(UINT8 bTeam) } // are we allowed to steal access this guy's inventory? -BOOLEAN AllowedToStealFromTeamMate( UINT8 ubID, UINT8 ubTargetID ) +BOOLEAN AllowedToStealFromTeamMate( UINT16 ubID, UINT16 ubTargetID ) { if ( gGameExternalOptions.fAccessOtherMercInventories && ubID != ubTargetID && MercPtrs[ubID]->bTeam == MercPtrs[ubTargetID]->bTeam && !AM_AN_EPC(MercPtrs[ubTargetID]) && !IsVehicle(MercPtrs[ubTargetID]) ) return TRUE; @@ -11764,11 +11763,11 @@ INT8 CalcEffectiveShockLevel( SOLDIERTYPE * pSoldier ) } // Flugente: count number of enemy officers -UINT8 HighestEnemyOfficersInSector( UINT8& aType ) +UINT16 HighestEnemyOfficersInSector( UINT8& aType ) { SOLDIERTYPE* pSoldier; INT32 cnt = 0; - UINT8 num = 0; + UINT16 num = 0; UINT8 type = OFFICER_NONE; for ( cnt = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID, pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[ ENEMY_TEAM ].bLastID; pSoldier++, ++cnt ) @@ -11794,7 +11793,7 @@ UINT16 NumSoldiersWithFlagInSector( UINT8 aTeam, UINT32 aFlag ) { SOLDIERTYPE* pSoldier; INT32 cnt = 0; - UINT8 num = 0; + UINT16 num = 0; for ( cnt = gTacticalStatus.Team[aTeam].bFirstID, pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[aTeam].bLastID; pSoldier++, ++cnt ) { diff --git a/Tactical/Overhead.h b/Tactical/Overhead.h index 47d93653..96f92eaa 100644 --- a/Tactical/Overhead.h +++ b/Tactical/Overhead.h @@ -23,12 +23,12 @@ enum // TACTICAL ENGINE STATUS FLAGS typedef struct { - UINT8 bFirstID; - UINT8 bLastID; + UINT16 bFirstID; + UINT16 bLastID; COLORVAL RadarColor; INT8 bSide; - INT8 bMenInSector; - UINT8 ubLastMercToRadio; + INT16 bMenInSector; + UINT16 ubLastMercToRadio; INT8 bTeamActive; INT8 bAwareOfOpposition; INT8 bHuman; @@ -69,8 +69,8 @@ struct TacticalStatusType INT8 fPanicFlags; INT32 sPanicTriggerGridNoUnused; INT16 sHandGrid; - UINT8 ubSpottersCalledForBy; - UINT8 ubTheChosenOne; + UINT16 ubSpottersCalledForBy; + UINT16 ubTheChosenOne; UINT32 uiTimeOfLastInput; UINT32 uiTimeSinceDemoOn; UINT32 uiCountdownToRestart; @@ -89,13 +89,13 @@ struct TacticalStatusType INT8 bRealtimeSpeed; UINT8 ubEnemyIntention; UINT8 ubEnemyIntendedRetreatDirection; - UINT8 ubEnemySightingOnTheirTurnEnemyID; - UINT8 ubEnemySightingOnTheirTurnPlayerID; + UINT16 ubEnemySightingOnTheirTurnEnemyID; + UINT16 ubEnemySightingOnTheirTurnPlayerID; BOOLEAN fEnemySightingOnTheirTurn; BOOLEAN fAutoBandageMode; UINT8 ubAttackBusyCount; INT8 bNumEnemiesFoughtInBattleUnused; - UINT8 ubEngagedInConvFromActionMercID; + UINT16 ubEngagedInConvFromActionMercID; UINT16 usTactialTurnLimitCounter; BOOLEAN fInTopMessage; UINT8 ubTopMessageType; @@ -114,7 +114,7 @@ struct TacticalStatusType BOOLEAN fSaidCreatureFlavourQuote; BOOLEAN fHaveSeenCreature; BOOLEAN fKilledEnemyOnAttack; - UINT8 ubEnemyKilledOnAttack; + UINT16 ubEnemyKilledOnAttack; INT8 bEnemyKilledOnAttackLevel; UINT16 ubEnemyKilledOnAttackLocation; BOOLEAN fItemsSeenOnAttack; @@ -128,7 +128,7 @@ struct TacticalStatusType BOOLEAN fCantGetThrough; INT32 sCantGetThroughGridNo; INT32 sCantGetThroughSoldierGridNo; - UINT8 ubCantGetThroughID; + UINT16 ubCantGetThroughID; BOOLEAN fDidGameJustStart; BOOLEAN fStatChangeCheatOn; UINT8 ubLastRequesterTargetID; @@ -142,10 +142,9 @@ struct TacticalStatusType BOOLEAN fHasAGameBeenStarted; INT8 bConsNumTurnsWeHaventSeenButEnemyDoes; BOOLEAN fSomeoneHit; - UINT8 ubPaddingSmall; UINT32 uiTimeSinceLastOpplistDecay; INT8 bMercArrivingQuoteBeingUsed; - UINT8 ubEnemyKilledOnAttackKiller; + UINT16 ubEnemyKilledOnAttackKiller; BOOLEAN fCountingDownForGuideDescription; INT8 bGuideDescriptionCountDown; UINT8 ubGuideDescriptionToUse; @@ -159,7 +158,7 @@ struct TacticalStatusType UINT16 sCreatureTenseQuoteDelay; UINT32 uiCreatureTenseQuoteLastUpdate; // SANDRO - added these - UINT8 ubLastRequesterSurgeryTargetID; + UINT16 ubLastRequesterSurgeryTargetID; UINT8 ubInterruptPending; // sevenfm: Ctrl+D disable interrupts BOOLEAN ubDisablePlayerInterrupts; @@ -240,11 +239,11 @@ void SlideToLocation( UINT16 usReasonID, INT32 sDestGridNo ); void RebuildAllSoldierShadeTables( ); void HandlePlayerTeamMemberDeath( SOLDIERTYPE *pSoldier ); -UINT8 LastActiveTeamMember( UINT8 ubTeam ); +UINT16 LastActiveTeamMember( UINT16 ubTeam ); BOOLEAN SoldierOnVisibleWorldTile( SOLDIERTYPE *pSoldier ); -UINT8 FindNextActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLife, BOOLEAN fOnlyRegularMercs ); -UINT8 FindPrevActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLife, BOOLEAN fOnlyRegularMercs ); +UINT16 FindNextActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLife, BOOLEAN fOnlyRegularMercs ); +UINT16 FindPrevActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLife, BOOLEAN fOnlyRegularMercs ); BOOLEAN CheckForPlayerTeamInMissionExit( ); void HandleNPCTeamMemberDeath( SOLDIERTYPE *pSoldier ); @@ -261,7 +260,7 @@ INT32 FindNextToAdjacentGridEx( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 *pub void SelectNextAvailSoldier( SOLDIERTYPE *pSoldier ); BOOLEAN TeamMemberNear(INT8 bTeam, INT32 sGridNo, INT32 iRange); -BOOLEAN IsValidTargetMerc( UINT8 ubSoldierID ); +BOOLEAN IsValidTargetMerc( UINT16 ubSoldierID ); // FUNCTIONS FOR MANIPULATING MERC SLOTS - A LIST OF ALL ACTIVE MERCS INT32 GetFreeMercSlot( ); @@ -323,7 +322,7 @@ BOOLEAN HostileBloodcatsPresent( ); BOOLEAN HostileZombiesPresent( ); BOOLEAN HostileCreaturesPresent(); -UINT8 NumPCsInSector( ); +UINT16 NumPCsInSector( ); void SetSoldierNonNeutral( SOLDIERTYPE * pSoldier ); void SetSoldierNeutral( SOLDIERTYPE * pSoldier ); @@ -351,10 +350,10 @@ extern BOOLEAN gogglewarning; // will a sam site under the players control shoot down an airraid? BOOLEAN WillAirRaidBeStopped( INT16 sSectorX, INT16 sSectorY ); // HEADROCK HAM 3.5: Externalized for First Arrival enemy check -extern UINT8 NumEnemyInSector(); +extern UINT16 NumEnemyInSector(); // Flugente -extern UINT8 NumZombiesInSector(); +extern UINT16 NumZombiesInSector(); // Flugente: offer the enemy the chance to surrender void HandleSurrenderOffer( SOLDIERTYPE* pSoldier ); @@ -371,7 +370,7 @@ void TeamDropAll(UINT8 bTeam, BOOLEAN fForce = FALSE); void TeamRestock(UINT8 bTeam); // are we allowed to steal access this guy's inventory? -BOOLEAN AllowedToStealFromTeamMate( UINT8 aAccessorID, UINT8 aTargetID ); +BOOLEAN AllowedToStealFromTeamMate( UINT16 ubID, UINT16 ubTargetID ); // Flugente: is an soldier profile already used? BOOLEAN IsProfileInUse(UINT8 usTeam, INT8 aType, UINT16 aNr); @@ -402,7 +401,7 @@ enum { }; // Flugente: return number of enemy officers and highest rank found -UINT8 HighestEnemyOfficersInSector(UINT8& aType); +UINT16 HighestEnemyOfficersInSector(UINT8& aType); // count all soldiers in the current sector that have a specific flag set UINT16 NumSoldiersWithFlagInSector(UINT8 aTeam, UINT32 aFlag); diff --git a/Tactical/PATHAI.cpp b/Tactical/PATHAI.cpp index 829fee54..1409f396 100644 --- a/Tactical/PATHAI.cpp +++ b/Tactical/PATHAI.cpp @@ -2517,7 +2517,7 @@ b=GetJA2Clock();//return s->sGridNo+6; INT8 bLoopState = LOOPING_CLOCKWISE; //BOOLEAN fLoopForwards = FALSE; BOOLEAN fCheckedBehind = FALSE; - UINT8 ubMerc; + UINT16 ubMerc; INT32 iDestX,iDestY, iLocX, iLocY, dx, dy; INT32 newLoc,curLoc; //INT32 curY; diff --git a/Tactical/Real Time Input.cpp b/Tactical/Real Time Input.cpp index c4747611..d0684864 100644 --- a/Tactical/Real Time Input.cpp +++ b/Tactical/Real Time Input.cpp @@ -1545,7 +1545,7 @@ void GetRTMousePositionInput( UINT32 *puiNewEvent ) { if( gfUIFullTargetFound ) { - if ( IsValidTalkableNPC( (UINT8)gusUIFullTargetID, FALSE, FALSE, FALSE ) && !_KeyDown( SHIFT ) && !AM_AN_EPC( pSoldier ) && MercPtrs[ gusUIFullTargetID ]->bTeam != ENEMY_TEAM && !ValidQuickExchangePosition( ) ) + if ( IsValidTalkableNPC( gusUIFullTargetID, FALSE, FALSE, FALSE ) && !_KeyDown( SHIFT ) && !AM_AN_EPC( pSoldier ) && MercPtrs[ gusUIFullTargetID ]->bTeam != ENEMY_TEAM && !ValidQuickExchangePosition( ) ) { uiMoveTargetSoldierId = gusUIFullTargetID; *puiNewEvent = T_CHANGE_TO_TALKING; @@ -1588,7 +1588,7 @@ void GetRTMousePositionInput( UINT32 *puiNewEvent ) if ( gfUIFullTargetFound ) //if ( gfUIFullTargetFound ) { - if ( IsValidTargetMerc( (UINT8)gusUIFullTargetID ) ) + if ( IsValidTargetMerc( gusUIFullTargetID ) ) { guiUITargetSoldierId = gusUIFullTargetID; @@ -2077,7 +2077,7 @@ void HandleAltMouseRTX2Button(UINT32 *puiNewEvent) // sevenfm: original mouse commands functionality void HandleMouseRTWheel( void ) { - UINT8 bID; + UINT16 bID; // nothing in hand and either not in SM panel, or the matching button is enabled if we are in SM panel if ( !( gTacticalStatus.uiFlags & ENGAGED_IN_CONV ) && ( ( gsCurInterfacePanel != SM_PANEL ) || ( ButtonList[ iSMPanelButtons[ NEXTMERC_BUTTON ] ]->uiFlags & BUTTON_ENABLED ) ) ) @@ -2205,7 +2205,7 @@ void HandleMouseRTX2Button( UINT32 *puiNewEvent ) // For each guy on squad... { SOLDIERTYPE *pTeamSoldier; - INT8 bLoop; + INT16 bLoop; BOOLEAN fStealthOn = FALSE; // Check if at least one guy is on stealth.... diff --git a/Tactical/Rotting Corpses.cpp b/Tactical/Rotting Corpses.cpp index 26f476ec..bc3348dd 100644 --- a/Tactical/Rotting Corpses.cpp +++ b/Tactical/Rotting Corpses.cpp @@ -1165,7 +1165,7 @@ void AddCrowToCorpse( ROTTING_CORPSE *pCorpse ) { SOLDIERCREATE_STRUCT MercCreateStruct; INT8 ubBodyType = CROW; - UINT8 iNewIndex; + UINT16 iNewIndex; INT32 sGridNo; UINT8 ubDirection; SOLDIERTYPE *pSoldier; @@ -2970,13 +2970,13 @@ void CreateZombiefromCorpse( ROTTING_CORPSE * pCorpse, UINT16 usAnimState ) MercCreateStruct.fVisible = TRUE; - INT8 iNewIndex; - if ( TacticalCreateSoldier( &MercCreateStruct, (UINT8 *)&iNewIndex ) ) + UINT16 iNewIndex; + if ( TacticalCreateSoldier( &MercCreateStruct, &iNewIndex ) ) { /* certain values have to be set afterwards - the alternative would be to edit each and every function that gets called from TacticalCreateSoldier() subsequently and * make an exception for zombies every time... */ - SOLDIERTYPE* pNewSoldier = MercPtrs[ (UINT8)iNewIndex ]; + SOLDIERTYPE* pNewSoldier = MercPtrs[ iNewIndex ]; pNewSoldier->bActionPoints = 60; pNewSoldier->bInitialActionPoints = 60; diff --git a/Tactical/ShopKeeper Interface.cpp b/Tactical/ShopKeeper Interface.cpp index cc7bc8bb..58c12d0e 100644 --- a/Tactical/ShopKeeper Interface.cpp +++ b/Tactical/ShopKeeper Interface.cpp @@ -299,7 +299,7 @@ INT32 giSKIMessageBox=-1; INT8 gbSelectedArmsDealerID = -1; //Contains the enum value for the currently selected arms dealer // Flugente: while we're trading, store the ID of non-NPC dealers -UINT8 gusIDOfCivTrader = NOBODY; +UINT16 gusIDOfCivTrader = NOBODY; //the quote that is in progress, in certain circumstances, we don't want queuing of related but different quotes INT32 giShopKeepDialogueEventinProgress = - 1; @@ -360,7 +360,7 @@ BOOLEAN gfDoneBusinessThisSession = FALSE; // this is used within SKI exclusively, to handle small faces UINT8 gubArrayOfEmployedMercs[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ]; UINT32 guiSmallSoldiersFace[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ]; -UINT8 gubNumberMercsInArray; +UINT16 gubNumberMercsInArray; //The subutitled text for what the merc is saying CHAR16 gsShopKeeperTalkingText[ SKI_SUBTITLE_TEXT_SIZE ]; @@ -392,7 +392,7 @@ extern OBJECTTYPE *gpItemDescObject; extern OBJECTTYPE *gpItemDescPrevObject; extern OBJECTTYPE *gpItemDescPrevObject; extern void HandleShortCutExitState( void ); -extern UINT8 gubSelectSMPanelToMerc; +extern UINT16 gubSelectSMPanelToMerc; extern INT32 giItemDescAmmoButton; extern BOOLEAN BltVSurfaceUsingDD( HVSURFACE hDestVSurface, HVSURFACE hSrcVSurface, UINT32 fBltFlags, INT32 iDestX, INT32 iDestY, RECT *SrcRect ); @@ -875,8 +875,8 @@ BOOLEAN EnterShopKeeperInterface() //Reinitialize the team panel to be the SM panel SetCurrentInterfacePanel( SM_PANEL ); - SetCurrentTacticalPanelCurrentMerc( (UINT8)gusSelectedSoldier ); - SetSMPanelCurrentMerc( (UINT8)gusSelectedSoldier ); + SetCurrentTacticalPanelCurrentMerc( gusSelectedSoldier ); + SetSMPanelCurrentMerc( gusSelectedSoldier ); // load the Main trade screen background image VObjectDesc.fCreateFlags=VOBJECT_CREATE_FROMFILE; @@ -1132,7 +1132,7 @@ BOOLEAN ExitShopKeeperInterface() UnloadButtonImage( guiSKI_InvPageDownButtonImage ); //loop through the area and delete small faces - for (UINT8 ubCnt=0; ubCnt gTemplateVector; extern void ReadEquipmentTable( SOLDIERTYPE* pSoldier, std::string name ); -extern INT8 bSelectedInfoChar; +extern INT16 bSelectedInfoChar; // sevenfm: need this for correct calculation of traits menu position extern INT16 gsInterfaceLevel; @@ -395,7 +395,7 @@ SkillSelection::Functions( UINT32 aVal ) if ( pSoldier == NULL ) return; - UINT8 ubID = WhoIsThere2(sTraitsMenuTargetGridNo, 0 ); + UINT16 ubID = WhoIsThere2(sTraitsMenuTargetGridNo, 0 ); BOOLEAN result = pSoldier->UseSkill(aVal, sTraitsMenuTargetGridNo, ubID); diff --git a/Tactical/Soldier Add.cpp b/Tactical/Soldier Add.cpp index ebc29b83..7d13ceef 100644 --- a/Tactical/Soldier Add.cpp +++ b/Tactical/Soldier Add.cpp @@ -1136,8 +1136,7 @@ INT32 FindRandomGridNoBetweenCircles( INT32 sCenterGridNo, UINT8 uInnerRadius, U return(sGridNo); } - -BOOLEAN InternalAddSoldierToSector( UINT8 ubID, BOOLEAN fCalculateDirection, BOOLEAN fUseAnimation, UINT16 usAnimState, UINT16 usAnimCode ) +BOOLEAN InternalAddSoldierToSector(UINT16 ubID, BOOLEAN fCalculateDirection, BOOLEAN fUseAnimation, UINT16 usAnimState, UINT16 usAnimCode ) { UINT8 ubDirection = 0; UINT8 ubCalculatedDirection = 0; @@ -1334,20 +1333,19 @@ BOOLEAN InternalAddSoldierToSector( UINT8 ubID, BOOLEAN fCalculateDirection, BOO return( FALSE ); } - -BOOLEAN AddSoldierToSector( UINT8 ubID ) +BOOLEAN AddSoldierToSector( UINT16 ubID ) { DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("AddSoldierToSector")); return( InternalAddSoldierToSector( ubID, TRUE, FALSE, 0 , 0) ); } -BOOLEAN AddSoldierToSectorNoCalculateDirection( UINT8 ubID ) +BOOLEAN AddSoldierToSectorNoCalculateDirection( UINT16 ubID ) { DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("AddSoldierToSectorNoCalculateDirection")); return( InternalAddSoldierToSector( ubID, FALSE, FALSE, 0, 0 ) ); } -BOOLEAN AddSoldierToSectorNoCalculateDirectionUseAnimation( UINT8 ubID, UINT16 usAnimState, UINT16 usAnimCode ) +BOOLEAN AddSoldierToSectorNoCalculateDirectionUseAnimation( UINT16 ubID, UINT16 usAnimState, UINT16 usAnimCode ) { DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("AddSoldierToSectorNoCalculateDirectionUseAnimation")); return( InternalAddSoldierToSector( ubID, FALSE, TRUE, usAnimState, usAnimCode ) ); @@ -1777,8 +1775,8 @@ void AddSoldierToSectorGridNo( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubDir BOOLEAN IsMercOnTeam(UINT8 ubMercID, BOOLEAN aAlreadyInCountry, BOOLEAN aAlive) { UINT16 cnt; - UINT8 ubLastTeamID; - SOLDIERTYPE *pTeamSoldier; + UINT16 ubLastTeamID; + SOLDIERTYPE *pTeamSoldier; cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; ubLastTeamID = gTacticalStatus.Team[ OUR_TEAM ].bLastID; diff --git a/Tactical/Soldier Add.h b/Tactical/Soldier Add.h index bb96f44e..4d4ba01b 100644 --- a/Tactical/Soldier Add.h +++ b/Tactical/Soldier Add.h @@ -30,11 +30,11 @@ INT32 FindRandomGridNoBetweenCircles( INT32 sCenterGridNo, UINT8 uInnerRadius, U // Adds a soldier ( already created in mercptrs[] array )! // Finds a good placement based on data in the loaded sector and if they are enemy's or not, etc... -BOOLEAN AddSoldierToSector( UINT8 ubID ); +BOOLEAN AddSoldierToSector( UINT16 ubID ); -BOOLEAN AddSoldierToSectorNoCalculateDirection( UINT8 ubID ); +BOOLEAN AddSoldierToSectorNoCalculateDirection( UINT16 ubID ); -BOOLEAN AddSoldierToSectorNoCalculateDirectionUseAnimation( UINT8 ubID, UINT16 usAnimState, UINT16 usAnimCode ); +BOOLEAN AddSoldierToSectorNoCalculateDirectionUseAnimation( UINT16 ubID, UINT16 usAnimState, UINT16 usAnimCode ); // IsMercOnTeam() checks to see if the passed in Merc Profile ID is currently on the player's team BOOLEAN IsMercOnTeam( UINT8 ubMercID, BOOLEAN aAlreadyInCountry, BOOLEAN aAlive ); diff --git a/Tactical/Soldier Ani.cpp b/Tactical/Soldier Ani.cpp index 431f08b9..f5774ae6 100644 --- a/Tactical/Soldier Ani.cpp +++ b/Tactical/Soldier Ani.cpp @@ -107,10 +107,10 @@ BOOLEAN HandleUnjamAnimation( SOLDIERTYPE *pSoldier ); extern void HandleSystemNewAISituation( SOLDIERTYPE *pSoldier, BOOLEAN fResetABC ); extern void PlaySoldierFootstepSound( SOLDIERTYPE *pSoldier ); -extern UINT8 NumCapableEnemyInSector( ); +extern UINT16 NumCapableEnemyInSector( ); extern BOOLEAN gfKillingGuysForLosingBattle; -extern UINT8 gubInterruptProvoker; +extern UINT16 gubInterruptProvoker; extern UINT16 PickSoldierReadyAnimation( SOLDIERTYPE *pSoldier, BOOLEAN fEndReady, BOOLEAN fHipStance ); @@ -1167,7 +1167,7 @@ BOOLEAN AdjustToNextAnimationFrame( SOLDIERTYPE *pSoldier ) { if (pSoldier->bTeam == 0 || (pSoldier->bTeam == 1 && is_server)) { - send_grenade( pSoldier->pTempObject , pSoldier->pThrowParams->dLifeSpan, pSoldier->pThrowParams->dX, pSoldier->pThrowParams->dY, pSoldier->pThrowParams->dZ, pSoldier->pThrowParams->dForceX, pSoldier->pThrowParams->dForceY, pSoldier->pThrowParams->dForceZ, pSoldier->sTargetGridNo, pSoldier->ubID, pSoldier->pThrowParams->ubActionCode, pSoldier->pThrowParams->uiActionData, iRealObjectID , true); + send_grenade( pSoldier->pTempObject, pSoldier->pThrowParams->dLifeSpan, pSoldier->pThrowParams->dX, pSoldier->pThrowParams->dY, pSoldier->pThrowParams->dZ, pSoldier->pThrowParams->dForceX, pSoldier->pThrowParams->dForceY, pSoldier->pThrowParams->dForceZ, pSoldier->sTargetGridNo, pSoldier->ubID, pSoldier->pThrowParams->ubActionCode, pSoldier->pThrowParams->uiActionData, iRealObjectID, true); } } @@ -1789,7 +1789,7 @@ BOOLEAN AdjustToNextAnimationFrame( SOLDIERTYPE *pSoldier ) pSoldier->uiTimeOfLastRandomAction = 0; // Don't play these generally if this is the guy selected by player, as this one is "awaiting orders" - if (pSoldier->ubID != (UINT8)gusSelectedSoldier || Random( 10 ) == 0 ) + if (pSoldier->ubID != gusSelectedSoldier || Random( 10 ) == 0 ) { // Don't do any in water! // Also don't play if we are in the middle of something @@ -3130,7 +3130,7 @@ BOOLEAN AdjustToNextAnimationFrame( SOLDIERTYPE *pSoldier ) // Reload robot.... { - UINT8 ubPerson; + UINT16 ubPerson; SOLDIERTYPE *pRobot; // Get pointer... @@ -3307,7 +3307,7 @@ BOOLEAN AdjustToNextAnimationFrame( SOLDIERTYPE *pSoldier ) // REFUELING A VEHICLE // THE GAS_CAN IS IN THE MERCS MAIN HAND AT THIS TIME { - UINT8 ubPerson; + UINT16 ubPerson; SOLDIERTYPE *pVehicle; // Get pointer to vehicle... @@ -3559,13 +3559,13 @@ BOOLEAN ShouldMercSayHappyWithGunQuote( SOLDIERTYPE *pSoldier ) void SayBuddyWitnessedQuoteFromKill( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, INT8 bLevel ) { // WDS - make number of mercenaries, etc. be configurable - std::vector ubMercsInSector (CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS, 0); + std::vector ubMercsInSector (CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS, 0); // UINT8 ubMercsInSector[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ] = { 0 }; std::vector bBuddyIndex (CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS, -1); // INT8 bBuddyIndex[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ] = { -1 }; INT8 bTempBuddyIndex; - UINT8 ubNumMercs = 0; - UINT8 ubChosenMerc; + UINT16 ubNumMercs = 0; + UINT16 ubChosenMerc; SOLDIERTYPE *pTeamSoldier; INT32 cnt; UINT16 usQuoteNum; @@ -3651,7 +3651,7 @@ void SayBuddyWitnessedQuoteFromKill( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, } // OK, a good candidate... - ubMercsInSector[ ubNumMercs ] = (UINT8)cnt; + ubMercsInSector[ ubNumMercs ] = (UINT16)cnt; bBuddyIndex[ ubNumMercs ] = bTempBuddyIndex; ++ubNumMercs; } @@ -3661,7 +3661,7 @@ void SayBuddyWitnessedQuoteFromKill( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, // If we are > 0 if ( ubNumMercs > 0 ) { - ubChosenMerc = (UINT8)Random( ubNumMercs ); + ubChosenMerc = (UINT16)Random( ubNumMercs ); switch( bBuddyIndex[ ubChosenMerc ] ) { @@ -3751,10 +3751,9 @@ void HandleKilledQuote( SOLDIERTYPE *pKilledSoldier, SOLDIERTYPE *pKillerSoldier SOLDIERTYPE *pTeamSoldier; INT32 cnt; // WDS - make number of mercenaries, etc. be configurable - std::vector ubMercsInSector (CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS, 0); -// UINT8 ubMercsInSector[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ] = { 0 }; - UINT8 ubNumMercs = 0; - UINT8 ubChosenMerc; + std::vector ubMercsInSector (CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS, 0); + UINT16 ubNumMercs = 0; + UINT16 ubChosenMerc; BOOLEAN fDoSomeoneElse = FALSE; gfLastMercTalkedAboutKillingID = pKilledSoldier->ubID; @@ -3822,7 +3821,7 @@ void HandleKilledQuote( SOLDIERTYPE *pKilledSoldier, SOLDIERTYPE *pKillerSoldier // Can we see location? if ( SoldierTo3DLocationLineOfSightTest( pTeamSoldier, sGridNo, bLevel, 3, TRUE, CALC_FROM_ALL_DIRS ) ) { - ubMercsInSector[ ubNumMercs ] = (UINT8)cnt; + ubMercsInSector[ ubNumMercs ] = (UINT16)cnt; ubNumMercs++; } } @@ -3832,7 +3831,7 @@ void HandleKilledQuote( SOLDIERTYPE *pKilledSoldier, SOLDIERTYPE *pKillerSoldier // Did we find anybody? if ( ubNumMercs > 0 ) { - ubChosenMerc = (UINT8)Random( ubNumMercs ); + ubChosenMerc = (UINT16)Random( ubNumMercs ); // We have a random chance of not saying our we killed a guy quote if ( Random( 100 ) < 50 ) @@ -4000,8 +3999,8 @@ BOOLEAN HandleSoldierDeath( SOLDIERTYPE *pSoldier , BOOLEAN *pfMadeCorpse ) { ////////////////////////////////////////////////////////////// // SANDRO - some changes here - UINT8 ubAttacker = pSoldier->ubAttackerID; - UINT8 ubAssister = pSoldier->ubPreviousAttackerID; + UINT16 ubAttacker = pSoldier->ubAttackerID; + UINT16 ubAssister = pSoldier->ubPreviousAttackerID; // If attacker is nobody, and we died, then set the last attacker(if exists) as our killer if ( ubAttacker == NOBODY ) { diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index e3fe1d3a..9a6ff96d 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -157,7 +157,7 @@ extern BOOLEAN gfShiftBombPlant; #include "connect.h" extern void TeleportSelectedSoldier( void ); -extern BOOLEAN AddSoldierToSectorNoCalculateDirectionUseAnimation( UINT8 ubID, UINT16 usAnimState, UINT16 usAnimCode ); +extern BOOLEAN AddSoldierToSectorNoCalculateDirectionUseAnimation( UINT16 ubID, UINT16 usAnimState, UINT16 usAnimCode ); // Flugente: external sector data extern SECTOR_EXT_DATA SectorExternalData[256][4]; @@ -695,7 +695,7 @@ SOLDIERTYPE& SOLDIERTYPE::operator=(const OLDSOLDIERTYPE_101& src) this->sLastTwoLocations[1] = src.sLastTwoLocations[1]; this->ubID = src.ubID; - this->bReserved1 = src.bReserved1; + //this->bReserved1 = src.bReserved1; this->ubBodyType = src.ubBodyType; this->bActionPoints = src.bActionPoints; @@ -1730,7 +1730,7 @@ void AdjustForFastTurnAnimation( SOLDIERTYPE *pSoldier ); UINT16 SelectFireAnimation( SOLDIERTYPE *pSoldier, UINT8 ubHeight ); void SelectFallAnimation( SOLDIERTYPE *pSoldier ); BOOLEAN FullStructAlone( INT32 sGridNo, UINT8 ubRadius ); -void SoldierGotHitGunFire( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, UINT8 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation ); +void SoldierGotHitGunFire( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, UINT16 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation ); void SoldierGotHitBlade( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, UINT8 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation ); void SoldierGotHitPunch( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, UINT8 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation ); void SoldierGotHitExplosion( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, UINT8 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation ); @@ -5870,9 +5870,9 @@ UINT16 PickSoldierReadyAnimation( SOLDIERTYPE *pSoldier, BOOLEAN fEndReady, BOOL // extern SOLDIERTYPE * FreeUpAttackerGivenTarget( UINT8 ubID, UINT8 ubTargetID ); // extern SOLDIERTYPE * ReduceAttackBusyGivenTarget( UINT8 ubID, UINT8 ubTargetID ); - +#pragma optimize("", off) // ATE: THIS FUNCTION IS USED FOR ALL SOLDIER TAKE DAMAGE FUNCTIONS! -void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT16 sBreathLoss, UINT16 bDirection, UINT16 sRange, UINT8 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation, INT16 sSubsequent, INT32 sLocationGrid ) +void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT16 sBreathLoss, UINT16 bDirection, UINT16 sRange, UINT16 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation, INT16 sSubsequent, INT32 sLocationGrid ) { UINT8 ubCombinedLoss, ubVolume, ubReason; // SOLDIERTYPE * pNewSoldier; @@ -6603,12 +6603,18 @@ void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT1 if ( Item[usWeaponIndex].usItemClass & IC_GUN ) { PossiblyStartEnemyTaunt( this, TAUNT_GOT_HIT_GUNFIRE, ubAttackerID ); - PossiblyStartEnemyTaunt( MercPtrs[ubAttackerID], TAUNT_HIT_GUNFIRE, this->ubID ); + if (ubAttackerID != NOBODY) + { + PossiblyStartEnemyTaunt(MercPtrs[ubAttackerID], TAUNT_HIT_GUNFIRE, this->ubID); + } } else { PossiblyStartEnemyTaunt( this, TAUNT_GOT_HIT_THROWING_KNIFE, ubAttackerID ); - PossiblyStartEnemyTaunt( MercPtrs[ubAttackerID], TAUNT_HIT_THROWING_KNIFE, this->ubID ); + if (ubAttackerID != NOBODY) + { + PossiblyStartEnemyTaunt(MercPtrs[ubAttackerID], TAUNT_HIT_THROWING_KNIFE, this->ubID); + } } } if ( Item[usWeaponIndex].usItemClass & IC_BLADE ) @@ -6637,7 +6643,7 @@ void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT1 // anv: taunts are called from UseHandToHand() } } - +#pragma optimize("", on) UINT8 CalcScreamVolume( SOLDIERTYPE * pSoldier, UINT8 ubCombinedLoss ) { // NB explosions are so loud they should drown out screams @@ -6719,7 +6725,7 @@ void DoGenericHit( SOLDIERTYPE *pSoldier, UINT8 ubSpecial, INT16 bDirection ) } -void SoldierGotHitGunFire( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, UINT8 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation ) +void SoldierGotHitGunFire( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, UINT16 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation ) { INT32 usNewGridNo; BOOLEAN fBlownAway = FALSE; @@ -9740,7 +9746,7 @@ void SOLDIERTYPE::BeginSoldierClimbUpRoof(void) } INT8 bNewDirection; - UINT8 ubWhoIsThere; + UINT16 ubWhoIsThere; if (FindHeigherLevel(this, this->sGridNo, this->ubDirection, &bNewDirection) && (this->pathing.bLevel == 0)) { @@ -9914,7 +9920,7 @@ void SOLDIERTYPE::BeginSoldierClimbWindow( void ) void SOLDIERTYPE::BeginSoldierClimbWall( void ) { INT8 bNewDirection; - UINT8 ubWhoIsThere; + UINT16 ubWhoIsThere; if ( FindWallJumpDirection( this, this->sGridNo, this->ubDirection, &bNewDirection ) && (this->pathing.bLevel == 0) ) { @@ -9951,7 +9957,7 @@ void SOLDIERTYPE::BeginSoldierClimbWall( void ) void SOLDIERTYPE::BeginSoldierClimbWallUp( void ) { INT8 bNewDirection; - UINT8 ubWhoIsThere; + UINT16 ubWhoIsThere; if ( FindLowerLevelWall( this, this->sGridNo, this->ubDirection, &bNewDirection ) && (this->pathing.bLevel > 0) ) { @@ -10249,7 +10255,7 @@ void HandleTakeDamageDeath( SOLDIERTYPE *pSoldier, UINT8 bOldLife, UINT8 ubReaso } -UINT8 SOLDIERTYPE::SoldierTakeDamage( INT8 bHeight, INT16 sLifeDeduct, INT16 sBreathLoss, UINT8 ubReason, UINT8 ubAttacker, INT32 sSourceGrid, INT16 sSubsequent, BOOLEAN fShowDamage ) +UINT8 SOLDIERTYPE::SoldierTakeDamage( INT8 bHeight, INT16 sLifeDeduct, INT16 sBreathLoss, UINT8 ubReason, UINT16 ubAttacker, INT32 sSourceGrid, INT16 sSubsequent, BOOLEAN fShowDamage ) { #ifdef JA2BETAVERSION if ( is_networked ) { @@ -11573,7 +11579,7 @@ BOOLEAN SOLDIERTYPE::CheckSoldierHitRoof( void ) void SOLDIERTYPE::BeginSoldierClimbDownRoof(void) { INT8 bNewDirection; - UINT8 ubWhoIsThere; + UINT16 ubWhoIsThere; if (FindLowerLevel(this, this->sGridNo, this->ubDirection, &bNewDirection) && (this->pathing.bLevel > 0)) { @@ -12835,7 +12841,7 @@ void SOLDIERTYPE::EVENT_SoldierBeginBladeAttack( INT32 sGridNo, UINT8 ubDirectio if ( this->flags.uiStatusFlags & SOLDIER_MONSTER ) { // Is there an unconscious guy at gridno...... - UINT8 ubTargetID = WhoIsThere2( sGridNo, this->bTargetLevel ); + UINT16 ubTargetID = WhoIsThere2( sGridNo, this->bTargetLevel ); if ( ubTargetID != NOBODY && ((MercPtrs[ubTargetID]->stats.bLife < OKLIFE && MercPtrs[ubTargetID]->stats.bLife > 0) || (MercPtrs[ubTargetID]->bBreath < OKBREATH && MercPtrs[ubTargetID]->bCollapsed)) ) { @@ -13573,7 +13579,7 @@ void SOLDIERTYPE::EVENT_SoldierBeginFirstAid( INT32 sGridNo, UINT8 ubDirection ) this->sTargetGridNo = sGridNo; // SET PARTNER ID - this->ubServicePartner = (UINT8)usSoldierIndex; + this->ubServicePartner = usSoldierIndex; // SET PARTNER'S COUNT REFERENCE pTSoldier->ubServiceCount++; @@ -15104,7 +15110,7 @@ BOOLEAN SOLDIERTYPE::IsWeaponMounted( void ) if ( !IsLocationSittable( nextGridNoinSight, 0 ) ) { // resting our gun on people is allowed sometimes - UINT usPersonID = WhoIsThere2( nextGridNoinSight, this->pathing.bLevel ); + UINT16 usPersonID = WhoIsThere2( nextGridNoinSight, this->pathing.bLevel ); if ( usPersonID == NOBODY ) applybipod = TRUE; else @@ -15178,7 +15184,7 @@ BOOLEAN SOLDIERTYPE::IsWeaponMounted( void ) if ( !IsLocationSittable( nextGridNoinSight, 0 ) ) { // resting our gun on people is allowed sometimes - UINT usPersonID = WhoIsThere2( nextGridNoinSight, this->pathing.bLevel ); + UINT16 usPersonID = WhoIsThere2( nextGridNoinSight, this->pathing.bLevel ); if ( usPersonID == NOBODY ) applybipod = TRUE; else @@ -15480,7 +15486,7 @@ void SOLDIERTYPE::InventoryExplosion( void ) } // Flugente: do we currently provide ammo (pAmmoSlot) for someone else's (pubId) gun (pGunSlot)? -BOOLEAN SOLDIERTYPE::IsFeedingExternal( UINT8* pubId1, UINT16* pGunSlot1, UINT16* pAmmoSlot1, UINT8* pubId2, UINT16* pGunSlot2, UINT16* pAmmoSlot2 ) +BOOLEAN SOLDIERTYPE::IsFeedingExternal( UINT16 * pubId1, UINT16* pGunSlot1, UINT16* pAmmoSlot1, UINT16 * pubId2, UINT16* pGunSlot2, UINT16* pAmmoSlot2 ) { // make sure we have to check this... if ( gGameExternalOptions.ubExternalFeeding == 0 ) @@ -16166,7 +16172,7 @@ BOOLEAN SOLDIERTYPE::EquipmentTooGood( BOOLEAN fCloselook ) // are we in covert mode? we need to have the correct flag set, and not wear anything suspicious, or behave in a suspicious way -BOOLEAN SOLDIERTYPE::SeemsLegit( UINT8 ubObserverID ) +BOOLEAN SOLDIERTYPE::SeemsLegit( UINT16 ubObserverID ) { SOLDIERTYPE* pSoldier = MercPtrs[ubObserverID]; @@ -16454,7 +16460,7 @@ BOOLEAN SOLDIERTYPE::SeemsLegit( UINT8 ubObserverID ) } // do we recognize someone else as a combatant? -BOOLEAN SOLDIERTYPE::RecognizeAsCombatant( UINT8 ubTargetID ) +BOOLEAN SOLDIERTYPE::RecognizeAsCombatant( UINT16 ubTargetID ) { // this will only work with the new trait system if ( !gGameOptions.fNewTraitSystem ) @@ -16550,7 +16556,7 @@ void SOLDIERTYPE::LooseDisguise( void ) // rehandle sight for everybody SOLDIERTYPE* pSoldier; - UINT8 iLoop = gTacticalStatus.Team[OUR_TEAM].bFirstID; + UINT16 iLoop = gTacticalStatus.Team[OUR_TEAM].bFirstID; for ( pSoldier = MercPtrs[iLoop]; iLoop <= gTacticalStatus.Team[CIV_TEAM].bLastID; ++iLoop, ++pSoldier ) { if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife > 0 ) @@ -16793,7 +16799,7 @@ BOOLEAN SOLDIERTYPE::FreePrisoner( ) // we can only free people we are facing INT32 nextGridNoinSight = NewGridNo( this->sGridNo, DirectionInc( this->ubDirection ) ); - UINT8 target = WhoIsThere2( nextGridNoinSight, this->pathing.bLevel ); + UINT16 target = WhoIsThere2( nextGridNoinSight, this->pathing.bLevel ); // is there somebody? if ( target != NOBODY ) @@ -19050,7 +19056,7 @@ BOOLEAN SOLDIERTYPE::OrderArtilleryStrike( UINT32 usSectorNr, INT32 sTargetGridN // as of 2013-09-25, I say it is no longer necessary to fire a signal shell first. The player can fire a signal shell (by mortar or hand) manually to mark one or more targets if he wants // if he does not do so, active vox operators will be targetted. Who knows, the vox operator might be doing a heroic last stand for all we know... - UINT8 radiooperatorID = 0; + UINT16 radiooperatorID = 0; //BOOLEAN signalshellfired = FALSE; UINT8 mortaritemcnt = 0; UINT16 mortararray[5]; @@ -19585,7 +19591,7 @@ BOOLEAN SOLDIERTYPE::AIDoctorFriend( ) // we can only free people we are facing INT32 nextGridNoinSight = NewGridNo( this->sGridNo, DirectionInc( this->ubDirection ) ); - UINT8 target = WhoIsThere2( nextGridNoinSight, this->pathing.bLevel ); + UINT16 target = WhoIsThere2( nextGridNoinSight, this->pathing.bLevel ); // is there somebody? if ( target != NOBODY ) @@ -22573,7 +22579,7 @@ void SOLDIERTYPE::EVENT_SoldierBeginCutFence( INT32 sGridNo, UINT8 ubDirection ) void SOLDIERTYPE::EVENT_SoldierBeginRepair( INT32 sGridNo, UINT8 ubDirection ) { INT8 bRepairItem; - UINT8 ubID; + UINT16 ubID; // Make sure we have a structure here.... bRepairItem = IsRepairableStructAtGridNo( sGridNo, &ubID ); @@ -22618,7 +22624,7 @@ void SOLDIERTYPE::EVENT_SoldierBeginRepair( INT32 sGridNo, UINT8 ubDirection ) void SOLDIERTYPE::EVENT_SoldierBeginRefuel( INT32 sGridNo, UINT8 ubDirection ) { INT8 bRefuelItem; - UINT8 ubID; + UINT16 ubID; // Make sure we have a structure here.... bRefuelItem = IsRefuelableStructAtGridNo( sGridNo, &ubID ); @@ -22792,7 +22798,7 @@ void SOLDIERTYPE::EVENT_SoldierHandcuffPerson( INT32 sGridNo, UINT8 ubDirection if ( !gGameExternalOptions.fAllowPrisonerSystem ) return; - UINT8 ubPerson = WhoIsThere2( sGridNo, this->pathing.bLevel ); + UINT16 ubPerson = WhoIsThere2( sGridNo, this->pathing.bLevel ); if ( ubPerson != NOBODY && MercPtrs[ubPerson]->CanBeCaptured( ) ) { @@ -22935,7 +22941,7 @@ void SOLDIERTYPE::EVENT_SoldierHandcuffPerson( INT32 sGridNo, UINT8 ubDirection void SOLDIERTYPE::EVENT_SoldierApplyItemToPerson( INT32 sGridNo, UINT8 ubDirection ) { - UINT8 ubPerson = WhoIsThere2( sGridNo, this->pathing.bLevel ); + UINT16 ubPerson = WhoIsThere2( sGridNo, this->pathing.bLevel ); if ( ubPerson != NOBODY ) { @@ -23071,7 +23077,7 @@ void SOLDIERTYPE::EVENT_SoldierApplyItemToPerson( INT32 sGridNo, UINT8 ubDirecti void SOLDIERTYPE::EVENT_SoldierTakeBloodFromPerson( INT32 sGridNo, UINT8 ubDirection ) { - UINT8 ubPerson = WhoIsThere2( sGridNo, this->pathing.bLevel ); + UINT16 ubPerson = WhoIsThere2( sGridNo, this->pathing.bLevel ); if ( ubPerson != NOBODY && ubPerson != this->ubID ) { @@ -23142,7 +23148,7 @@ void SOLDIERTYPE::EVENT_SoldierTakeBloodFromPerson( INT32 sGridNo, UINT8 ubDirec void SOLDIERTYPE::EVENT_SoldierApplySplintToPerson( INT32 sGridNo, UINT8 ubDirection ) { - UINT8 ubPerson = WhoIsThere2( sGridNo, this->pathing.bLevel ); + UINT16 ubPerson = WhoIsThere2( sGridNo, this->pathing.bLevel ); if ( ubPerson != NOBODY && ubPerson != this->ubID ) { @@ -23211,7 +23217,7 @@ void SOLDIERTYPE::EVENT_SoldierInteractiveAction( INT32 sGridNo, UINT16 usAction void SOLDIERTYPE::EVENT_SoldierBeginReloadRobot( INT32 sGridNo, UINT8 ubDirection, UINT8 ubMercSlot ) { - UINT8 ubPerson; + UINT16 ubPerson; // Make sure we have a robot here.... ubPerson = WhoIsThere2( sGridNo, this->pathing.bLevel ); @@ -23442,7 +23448,7 @@ void AbandonBoxingDueToSurrenderCallback(UINT8 ubExitValue) } SOLDIERTYPE *pTMilitiaSoldier;//global pointer -BOOLEAN SOLDIERTYPE::PlayerSoldierStartTalking( UINT8 ubTargetID, BOOLEAN fValidate ) +BOOLEAN SOLDIERTYPE::PlayerSoldierStartTalking( UINT16 ubTargetID, BOOLEAN fValidate ) { INT16 sFacingDir, sXPos, sYPos, sAPCost; SOLDIERTYPE *pTSoldier; @@ -23460,7 +23466,7 @@ BOOLEAN SOLDIERTYPE::PlayerSoldierStartTalking( UINT8 ubTargetID, BOOLEAN fValid { // OK, since we locked this guy from moving // we should be close enough, so talk ( unless he is now dead ) - if ( !IsValidTalkableNPC( (UINT8)ubTargetID, FALSE, FALSE, FALSE ) ) + if ( !IsValidTalkableNPC( ubTargetID, FALSE, FALSE, FALSE ) ) { return(FALSE); } @@ -24386,7 +24392,7 @@ void SetSoldierPersonalLightLevel( SOLDIERTYPE *pSoldier ) void BeginSoldierClimbWallUp( SOLDIERTYPE *pSoldier ) { INT8 bNewDirection; - UINT8 ubWhoIsThere; + UINT16 ubWhoIsThere; if ( FindLowerLevelWall( pSoldier, pSoldier->sGridNo, pSoldier->ubDirection, &bNewDirection ) && (pSoldier->pathing.bLevel > 0) ) { @@ -24724,7 +24730,7 @@ INT8 NUM_SKILL_TRAITS( SOLDIERTYPE * pSoldier, UINT8 uiSkillTraitNumber ) UINT8 GetSquadleadersCountInVicinity( SOLDIERTYPE * pSoldier, BOOLEAN fWithHigherLevel, BOOLEAN fDontCheckDistance ) { - UINT8 cnt = 0; + UINT16 cnt = 0; UINT8 ubNumberSL = 0; // loop through all soldiers around @@ -25091,7 +25097,7 @@ BOOLEAN ResolvePendingInterrupt( SOLDIERTYPE * pSoldier, UINT8 ubInterruptType ) ///////////////////////////// SOLDIERTYPE *pInterrupter; UINT8 ubInterruptersFound = 0; - UINT8 ubaInterruptersList[64]; + UINT16 ubaInterruptersList[64]; UINT16 uCnt = 0, uiReactionTime; INT16 iInjuryPenalty; @@ -25609,7 +25615,7 @@ UINT16 GridNoSpotterCTHBonus( SOLDIERTYPE* pSniper, INT32 sGridNo, INT8 bTeam ) { BOOLEAN targetseen = FALSE; - UINT usID = WhoIsThere2( sGridNo, pSniper->bTargetLevel ); + UINT16 usID = WhoIsThere2( sGridNo, pSniper->bTargetLevel ); // is someone is at the sGridNo, check wether the spotter can see any part of him check wether head can be seen) if ( usID != NOBODY && SoldierToSoldierLineOfSightTest( pSoldier, MercPtrs[usID], 0, NO_DISTANCE_LIMIT, AIM_SHOT_HEAD ) > 0 ) diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index eff711d0..024f635b 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -809,7 +809,7 @@ public: INT32 sNoiseGridno; UINT8 ubNoiseVolume; INT8 bLastAttackHit; - UINT8 ubXRayedBy; + UINT16 ubXRayedBy; FLOAT dHeightAdjustment; INT8 bMorale; INT8 bTeamMoraleMod; @@ -829,7 +829,7 @@ public: INT8 bMoved; INT8 bHunting; UINT8 ubLastCall; - UINT8 ubCaller; + UINT16 ubCaller; INT32 sCallerGridNo; UINT8 bCallPriority; INT8 bCallActedUpon; @@ -1096,8 +1096,7 @@ public: // properly until it is all fixed and the files updated. public: // ID - UINT8 ubID; - UINT8 bReserved1; + UINT16 ubID; CHAR16 name[ 10 ]; INT16 GetMaxDistanceVisible(INT32 sGridNo = -1, INT8 bLevel = -1, int calcAsType = -1); @@ -1128,7 +1127,7 @@ public: UINT8 ubWaitActionToDo; INT8 ubInsertionDirection; INT8 bGunType; - UINT8 ubOppNum; + UINT16 ubOppNum; INT8 bLastRenderVisibleValue; UINT8 ubAttackingHand; INT16 sWeightCarriedAtTurnStart; @@ -1185,8 +1184,8 @@ public: UINT32 uiAIDelay; INT16 sReloadDelay; - UINT8 ubAttackerID; - UINT8 ubPreviousAttackerID; + UINT16 ubAttackerID; + UINT16 ubPreviousAttackerID; INT32 sInsertionGridNo; @@ -1255,7 +1254,7 @@ public: UINT16 *pCurrentShade; UINT8 ubFadeLevel; UINT8 ubServiceCount; - UINT8 ubServicePartner; + UINT16 ubServicePartner; THROW_PARAMS *pThrowParams; INT8 bReverse; LEVELNODE *pLevelNode; @@ -1391,7 +1390,7 @@ public: UINT8 ubSoldierClass; //admin, elite, troop (creature types?) Nav: 2 seems to mean elite, 3 troop so admin is 1 UINT8 ubAPsLostToSuppression; - UINT8 ubSuppressorID; + UINT16 ubSuppressorID; //Squad merging vars UINT8 ubDesiredSquadAssignment; @@ -1410,7 +1409,7 @@ public: INT8 bBlockedByAnotherMercDirection; UINT16 usAttackingWeapon; INT8 bWeaponMode; - UINT8 ubTargetID; + UINT16 ubTargetID; INT8 bAIScheduleProgress; INT32 sOffWorldGridNo; struct TAG_anitile *pAniTile; @@ -1431,8 +1430,8 @@ public: INT8 bOldBattleSnd; INT32 iBurstSoundID; INT8 bSlotItemTakenFrom; - UINT8 ubAutoBandagingMedic; - UINT8 ubRobotRemoteHolderID; + UINT16 ubAutoBandagingMedic; + UINT16 ubRobotRemoteHolderID; UINT32 uiTimeOfLastContractUpdate; INT8 bTypeOfLastContract; INT8 bTurnsCollapsed; @@ -1457,7 +1456,7 @@ public: INT8 bRegenBoostersUsedToday; // Flugente: not used anymore! INT8 bNumPelletsHitBy; INT32 sSkillCheckGridNo; - UINT8 ubLastEnemyCycledID; + UINT16 ubLastEnemyCycledID; UINT8 ubPrevSectorID; UINT8 ubNumTilesMovesSinceLastForget; @@ -1468,7 +1467,7 @@ public: UINT8 ubNumLocateCycles; UINT8 ubDelayedMovementFlags; - UINT8 ubCTGTTargetID; + UINT16 ubCTGTTargetID; UINT32 uiMercChecksum; @@ -1508,7 +1507,7 @@ public: UINT8 ubLastDamageReason; INT32 sLastTwoLocations[2]; INT32 uiTimeSinceLastBleedGrunt; - UINT8 ubNextToPreviousAttackerID; + UINT16 ubNextToPreviousAttackerID; UINT8 bDoAutofire; INT8 numFlanks; INT32 lastFlankSpot; @@ -1539,7 +1538,7 @@ public: UINT8 ubMilitiaAssists; // Flugente: stores militia assists INT8 sNonNPCTraderID; // Flugente: we can set up non-NPC soldiers to be merchants, we store their dealer id here (value > 0 means arms dealer entry x) //INT8 bUnusedINT8_3; - UINT8 usDragPersonID; // Flugente: id of person we are dragging + UINT16 usDragPersonID; // Flugente: id of person we are dragging //INT16 bUnusedINT16_4; INT16 sDragCorpseID; // Flugente: id of corpse we are dragging @@ -1676,7 +1675,7 @@ public: void EVENT_SetSoldierDirection( UINT16 usNewDirection ); void EVENT_SetSoldierDesiredDirection( UINT16 usNewDirection ); void EVENT_FireSoldierWeapon( INT32 sTargetGridNo ); - void EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 ubDamage, INT16 sBreathLoss, UINT16 bDirection , UINT16 sRange, UINT8 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation, INT16 sSubsequent, INT32 sLocationGridNo ); + void EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 ubDamage, INT16 sBreathLoss, UINT16 bDirection, UINT16 sRange, UINT16 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation, INT16 sSubsequent, INT32 sLocationGridNo ); void EVENT_SoldierBeginBladeAttack( INT32 sGridNo, UINT8 ubDirection ); void EVENT_SoldierBeginPunchAttack( INT32 sGridNo, UINT8 ubDirection ); void EVENT_SoldierBeginFirstAid( INT32 sGridNo, UINT8 ubDirection ); @@ -1717,7 +1716,7 @@ public: void ChangeSoldierStance( UINT8 ubDesiredStance ); void StopSoldier( void ); void ReviveSoldier( void ); - UINT8 SoldierTakeDamage( INT8 bHeight, INT16 sLifeDeduct, INT16 sBreathDeduct, UINT8 ubReason, UINT8 ubAttacker, INT32 sSourceGrid, INT16 sSubsequent, BOOLEAN fShowDamage ); + UINT8 SoldierTakeDamage( INT8 bHeight, INT16 sLifeDeduct, INT16 sBreathDeduct, UINT8 ubReason, UINT16 ubAttacker, INT32 sSourceGrid, INT16 sSubsequent, BOOLEAN fShowDamage ); // Palette functions for soldiers @@ -1810,7 +1809,7 @@ public: BOOLEAN CheckSoldierHitRoof( void ); BOOLEAN CheckForBreathCollapse( void ); - BOOLEAN PlayerSoldierStartTalking( UINT8 ubTargetID, BOOLEAN fValidate ); + BOOLEAN PlayerSoldierStartTalking( UINT16 ubTargetID, BOOLEAN fValidate ); BOOLEAN InternalIsValidStance( INT8 bDirection, INT8 bNewStance ); BOOLEAN IsValidSecondHandShot( void ); BOOLEAN IsValidSecondHandBurst( void ); @@ -1841,7 +1840,7 @@ public: void InventoryExplosion( void ); // Flugente: do we currently provide ammo (pAmmoSlot) for someone else's (pubId) gun (pGunSlot)? - BOOLEAN IsFeedingExternal(UINT8* pubId1, UINT16* pGunSlot1, UINT16* pAmmoSlot1, UINT8* pubId2, UINT16* pGunSlot2, UINT16* pAmmoSlot2); + BOOLEAN IsFeedingExternal(UINT16 * pubId1, UINT16* pGunSlot1, UINT16* pAmmoSlot1, UINT16 * pubId2, UINT16* pGunSlot2, UINT16* pAmmoSlot2); // Flugente: return first found object with a specific flag from our inventory OBJECTTYPE* GetObjectWithFlag( UINT64 aFlag ); @@ -1861,10 +1860,10 @@ public: BOOLEAN EquipmentTooGood( BOOLEAN fCloselook ); // does soldier ubObserverID recognize us as his enemy? - BOOLEAN SeemsLegit( UINT8 ubObserverID ); + BOOLEAN SeemsLegit( UINT16 ubObserverID ); // do we recognize someone else as a combatant? - BOOLEAN RecognizeAsCombatant(UINT8 ubTargetID); + BOOLEAN RecognizeAsCombatant(UINT16 ubTargetID); // loose covert property void LooseDisguise( void ); diff --git a/Tactical/Soldier Create.cpp b/Tactical/Soldier Create.cpp index 192b82a0..eb87056f 100644 --- a/Tactical/Soldier Create.cpp +++ b/Tactical/Soldier Create.cpp @@ -576,15 +576,15 @@ void DecideToAssignSniperOrders( SOLDIERCREATE_STRUCT * pp ) // This causes an issue if someone enters a sector from an adjacent sector - they should be affected by their point of origin, not the current sector // For this reason, we add a little helper variable that stores such a sector. INT16 gsStrategicDiseaseOriginSector = -1; - -SOLDIERTYPE* TacticalCreateSoldier( SOLDIERCREATE_STRUCT *pCreateStruct, UINT8 *pubID ) +#pragma optimize("", off) +SOLDIERTYPE* TacticalCreateSoldier( SOLDIERCREATE_STRUCT *pCreateStruct, UINT16 * pubID ) { - SOLDIERTYPE Soldier; - INT32 cnt; - SOLDIERTYPE *pTeamSoldier; - BOOLEAN fGuyAvail = FALSE; - UINT8 bLastTeamID; - UINT8 ubVehicleID = 0; + SOLDIERTYPE Soldier; + INT32 cnt; + SOLDIERTYPE *pTeamSoldier; + BOOLEAN fGuyAvail = FALSE; + UINT16 bLastTeamID; + UINT8 ubVehicleID = 0; *pubID = NOBODY; DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("TacticalCreateSoldier")); @@ -800,7 +800,7 @@ SOLDIERTYPE* TacticalCreateSoldier( SOLDIERCREATE_STRUCT *pCreateStruct, UINT8 * } // OK, set ID - Soldier.ubID = (UINT8)cnt; + Soldier.ubID = (UINT16)cnt; *pubID = Soldier.ubID; } @@ -1273,6 +1273,7 @@ SOLDIERTYPE* TacticalCreateSoldier( SOLDIERCREATE_STRUCT *pCreateStruct, UINT8 * return pSoldier; } } +#pragma optimize("", on) BOOLEAN TacticalCopySoldierFromProfile( SOLDIERTYPE *pSoldier, SOLDIERCREATE_STRUCT *pCreateStruct ) { @@ -1843,9 +1844,9 @@ BOOLEAN TacticalCopySoldierFromCreateStruct( SOLDIERTYPE *pSoldier, SOLDIERCREAT { if ( HAS_SKILL_TRAIT( pSoldier, SQUADLEADER_NT) ) { - UINT8 numenemies = NumEnemyInSector(); + UINT16 numenemies = NumEnemyInSector(); UINT8 officertype = OFFICER_NONE; - UINT8 numofficers = HighestEnemyOfficersInSector( officertype ); + UINT16 numofficers = HighestEnemyOfficersInSector( officertype ); // this guy becomes an officer if there are enough soldiers around, and we aren't already at max of officers if ( numenemies > gGameExternalOptions.usEnemyOfficersPerTeamSize * numofficers && numofficers < gGameExternalOptions.usEnemyOfficersMax && !RebelCommand::NeutraliseRole(pSoldier) ) @@ -3083,7 +3084,7 @@ SOLDIERTYPE* TacticalCreateAdministrator() { BASIC_SOLDIERCREATE_STRUCT bp; SOLDIERCREATE_STRUCT pp; - UINT8 ubID; + UINT16 ubID; SOLDIERTYPE * pSoldier; if( guiCurrentScreen == AUTORESOLVE_SCREEN && !gfPersistantPBI ) @@ -3116,7 +3117,7 @@ SOLDIERTYPE* TacticalCreateArmyTroop() { BASIC_SOLDIERCREATE_STRUCT bp; SOLDIERCREATE_STRUCT pp; - UINT8 ubID; + UINT16 ubID; SOLDIERTYPE * pSoldier; if( guiCurrentScreen == AUTORESOLVE_SCREEN && !gfPersistantPBI ) @@ -3150,7 +3151,7 @@ SOLDIERTYPE* TacticalCreateEliteEnemy() { BASIC_SOLDIERCREATE_STRUCT bp; SOLDIERCREATE_STRUCT pp; - UINT8 ubID; + UINT16 ubID; SOLDIERTYPE * pSoldier; if( guiCurrentScreen == AUTORESOLVE_SCREEN && !gfPersistantPBI ) @@ -3192,7 +3193,7 @@ SOLDIERTYPE* TacticalCreateEnemyTank() { BASIC_SOLDIERCREATE_STRUCT bp; SOLDIERCREATE_STRUCT pp; - UINT8 ubID; + UINT16 ubID; SOLDIERTYPE * pSoldier; if( guiCurrentScreen == AUTORESOLVE_SCREEN && !gfPersistantPBI ) @@ -3232,7 +3233,7 @@ SOLDIERTYPE* TacticalCreateEnemyJeep( ) { BASIC_SOLDIERCREATE_STRUCT bp; SOLDIERCREATE_STRUCT pp; - UINT8 ubID; + UINT16 ubID; SOLDIERTYPE * pSoldier; if ( guiCurrentScreen == AUTORESOLVE_SCREEN && !gfPersistantPBI ) @@ -3273,7 +3274,7 @@ SOLDIERTYPE* TacticalCreateEnemyRobot() { BASIC_SOLDIERCREATE_STRUCT bp; SOLDIERCREATE_STRUCT pp; - UINT8 ubID; + UINT16 ubID; SOLDIERTYPE * pSoldier; if ( guiCurrentScreen == AUTORESOLVE_SCREEN && !gfPersistantPBI ) @@ -3314,7 +3315,7 @@ SOLDIERTYPE* TacticalCreateZombie() { BASIC_SOLDIERCREATE_STRUCT bp; SOLDIERCREATE_STRUCT pp; - UINT8 ubID; + UINT16 ubID; SOLDIERTYPE * pSoldier; if( guiCurrentScreen == AUTORESOLVE_SCREEN && !gfPersistantPBI ) @@ -3388,7 +3389,7 @@ SOLDIERTYPE* TacticalCreateMilitia( UINT8 ubMilitiaClass, INT16 sX, INT16 sY ) { BASIC_SOLDIERCREATE_STRUCT bp; SOLDIERCREATE_STRUCT pp; - UINT8 ubID; + UINT16 ubID; SOLDIERTYPE * pSoldier; if (gpBattleGroup && @@ -3429,7 +3430,7 @@ SOLDIERTYPE* TacticalCreateCreature( INT8 bCreatureBodyType ) { BASIC_SOLDIERCREATE_STRUCT bp; SOLDIERCREATE_STRUCT pp; - UINT8 ubID; + UINT16 ubID; SOLDIERTYPE * pSoldier; if( guiCurrentScreen == AUTORESOLVE_SCREEN && !gfPersistantPBI ) @@ -3455,7 +3456,7 @@ SOLDIERTYPE* TacticalCreateArmedCivilian( UINT8 usSoldierClass ) { BASIC_SOLDIERCREATE_STRUCT bp; SOLDIERCREATE_STRUCT pp; - UINT8 ubID; + UINT16 ubID; SOLDIERTYPE * pSoldier = NULL; // this needs the covert ops trait, and thus the new trait system @@ -3504,7 +3505,7 @@ SOLDIERTYPE* TacticalCreateCivilian( INT32 sGridNo, UINT8 usCivilianGroup, INT8 if ( guiCurrentScreen == AUTORESOLVE_SCREEN ) return NULL; - UINT8 ubID = NOBODY; + UINT16 ubID = NOBODY; SOLDIERTYPE* pSoldier = NULL; SOLDIERCREATE_STRUCT MercCreateStruct; @@ -3603,7 +3604,7 @@ SOLDIERTYPE* TacticalCreateEnemyAssassin(UINT8 disguisetype) { BASIC_SOLDIERCREATE_STRUCT bp; SOLDIERCREATE_STRUCT pp; - UINT8 ubID; + UINT16 ubID; SOLDIERTYPE * pSoldier; // this needs the covert ops trait, and thus the new trait system @@ -3668,7 +3669,7 @@ SOLDIERTYPE* TacticalCreateBandit() { BASIC_SOLDIERCREATE_STRUCT bp; SOLDIERCREATE_STRUCT pp; - UINT8 ubID; + UINT16 ubID; SOLDIERTYPE * pSoldier; if ( guiCurrentScreen == AUTORESOLVE_SCREEN && !gfPersistantPBI ) @@ -3859,7 +3860,7 @@ void CreatePrisonerOfWar() } SOLDIERCREATE_STRUCT MercCreateStruct; - UINT8 ubID; + UINT16 ubID; static INT8 bPowBodyType = REGMALE; @@ -3941,7 +3942,7 @@ void CreateDownedPilot( ) while ( TileIsOutOfBounds( sGridNo ) || FindStructure( sGridNo, STRUCTURE_BLOCKSMOVES ) || TERRAIN_IS_WATER( gpWorldLevelData[sGridNo].ubTerrainID ) || GridNoNearPlayerMercs( sGridNo, 25 ) ); SOLDIERCREATE_STRUCT MercCreateStruct; - UINT8 ubID; + UINT16 ubID; MercCreateStruct.initialize( ); MercCreateStruct.bTeam = CIV_TEAM; @@ -4101,9 +4102,9 @@ void RandomizeRelativeLevel( INT8 *pbRelLevel, UINT8 ubSoldierClass ) void QuickCreateProfileMerc( INT8 bTeam, UINT8 ubProfileID ) { // Create guy # X - SOLDIERCREATE_STRUCT MercCreateStruct; - INT16 sWorldX, sWorldY, sSectorX, sSectorY, sGridX, sGridY; - UINT8 ubID; + SOLDIERCREATE_STRUCT MercCreateStruct; + INT16 sWorldX, sWorldY, sSectorX, sSectorY, sGridX, sGridY; + UINT16 ubID; INT32 usMapPos; if ( GetMouseXY( &sGridX, &sGridY ) ) diff --git a/Tactical/Soldier Create.h b/Tactical/Soldier Create.h index d98f9c01..d8791d30 100644 --- a/Tactical/Soldier Create.h +++ b/Tactical/Soldier Create.h @@ -460,7 +460,7 @@ void RandomizeNewSoldierStats( SOLDIERCREATE_STRUCT *pCreateStruct ); //Kris: //Modified return type from BOOLEAN to SOLDIERTYPE* -SOLDIERTYPE* TacticalCreateSoldier( SOLDIERCREATE_STRUCT *pCreateStruct, UINT8 *pubID ); +SOLDIERTYPE* TacticalCreateSoldier( SOLDIERCREATE_STRUCT *pCreateStruct, UINT16 * pubID ); //Randomly generated enemies used by strategic AI. SOLDIERTYPE* TacticalCreateAdministrator(); diff --git a/Tactical/Soldier Find.cpp b/Tactical/Soldier Find.cpp index 3d3a699e..0e688cfa 100644 --- a/Tactical/Soldier Find.cpp +++ b/Tactical/Soldier Find.cpp @@ -70,7 +70,7 @@ UINT32 gScrollSlideInertiaDirection[ NUM_WORLD_DIRECTIONS ] = typedef struct { INT8 bNum; - UINT8 ubIDs[ MAX_STACKED_MERCS ]; + UINT16 ubIDs[ MAX_STACKED_MERCS ]; INT8 bCur; BOOLEAN fUseGridNo; INT32 sUseGridNoGridNo; @@ -204,7 +204,7 @@ BOOLEAN FindSoldier( INT32 sGridNo, UINT16 *pusSoldierIndex, UINT32 *pMercFlags, INT16 sXMapPos, sYMapPos, sScreenX, sScreenY; INT16 sMaxScreenMercY, sHeighestMercScreenY = -32000; BOOLEAN fDoFull; - UINT8 ubBestMerc = NOBODY; + UINT16 ubBestMerc = NOBODY; UINT16 usAnimSurface; INT32 iMercScreenX, iMercScreenY; BOOLEAN fInScreenRect = FALSE; @@ -525,7 +525,7 @@ BOOLEAN CycleSoldierFindStack( INT32 usMapPos ) SOLDIERTYPE * SimpleFindSoldier( INT32 sGridNo, INT8 bLevel ) { - UINT8 ubID; + UINT16 ubID; ubID = WhoIsThere2( sGridNo, bLevel ); if ( ubID == NOBODY ) @@ -538,7 +538,7 @@ SOLDIERTYPE * SimpleFindSoldier( INT32 sGridNo, INT8 bLevel ) } } -BOOLEAN IsValidTargetMerc( UINT8 ubSoldierID ) +BOOLEAN IsValidTargetMerc( UINT16 ubSoldierID ) { SOLDIERTYPE *pSoldier = MercPtrs[ ubSoldierID ]; @@ -1008,7 +1008,7 @@ BOOLEAN FindRelativeSoldierPosition( SOLDIERTYPE *pSoldier, UINT16 *usFlags, INT } // VERY quickly finds a soldier at gridno , ( that is visible ) -UINT8 QuickFindSoldier( INT32 sGridNo ) +UINT16 QuickFindSoldier( INT32 sGridNo ) { UINT32 cnt; SOLDIERTYPE *pSoldier = NULL; @@ -1022,7 +1022,7 @@ UINT8 QuickFindSoldier( INT32 sGridNo ) { if ( pSoldier->sGridNo == sGridNo && pSoldier->bVisible != -1 ) { - return( (UINT8)cnt ); + return( (UINT16)cnt ); } } diff --git a/Tactical/Soldier Find.h b/Tactical/Soldier Find.h index de256761..6616dfb4 100644 --- a/Tactical/Soldier Find.h +++ b/Tactical/Soldier Find.h @@ -48,7 +48,7 @@ void GetSoldierTRUEScreenPos( SOLDIERTYPE *pSoldier, INT16 *psScreenX, INT16 *ps BOOLEAN IsPointInSoldierBoundingBox( SOLDIERTYPE *pSoldier, INT16 sX, INT16 sY ); BOOLEAN FindRelativeSoldierPosition( SOLDIERTYPE *pSoldier, UINT16 *usFlags, INT16 sX, INT16 sY ); -UINT8 QuickFindSoldier( INT32 sGridNo ); +UINT16 QuickFindSoldier( INT32 sGridNo ); void GetGridNoScreenPos( INT32 sGridNo, UINT8 ubLevel, INT16 *psScreenX, INT16 *psScreenY ); diff --git a/Tactical/Soldier Init List.cpp b/Tactical/Soldier Init List.cpp index ad719347..847629c3 100644 --- a/Tactical/Soldier Init List.cpp +++ b/Tactical/Soldier Init List.cpp @@ -581,13 +581,13 @@ void SortSoldierInitList() } extern FLOAT gAmbushRadiusModifier; - +#pragma optimize("",off) BOOLEAN AddPlacementToWorld( SOLDIERINITNODE *curr, GROUP *pGroup = NULL ) { UINT8 ubProfile; SOLDIERCREATE_STRUCT tempDetailedPlacement; SOLDIERTYPE *pSoldier; - UINT8 ubID; + UINT16 ubID; DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("AddPlacementToWorld")); // First check if this guy has a profile and if so check his location such that it matches! @@ -859,7 +859,7 @@ BOOLEAN AddPlacementToWorld( SOLDIERINITNODE *curr, GROUP *pGroup = NULL ) if(is_server) ScreenMsg( FONT_YELLOW, MSG_MPSYSTEM, L"report this MP error (AddPlacementToWorld-FAIL!)"); return FALSE; } - +#pragma optimize("",on) void AddPlacementToWorldByProfileID( UINT8 ubProfile ) { SOLDIERINITNODE * curr; @@ -1050,7 +1050,7 @@ UINT8 AddSoldierInitListTeamToWorld( INT8 bTeam, UINT8 ubMaxNum ) return ubNumAdded; } - +#pragma optimize("",off) void AddSoldierInitListEnemyDefenceSoldiers( UINT8 ubTotalAdmin, UINT8 ubTotalTroops, UINT8 ubTotalElite, UINT8 ubTotalRobots, UINT8 ubTotalTanks, UINT8 ubTotalJeeps ) { SOLDIERINITNODE *mark; @@ -1605,7 +1605,7 @@ void AddSoldierInitListEnemyDefenceSoldiers( UINT8 ubTotalAdmin, UINT8 ubTotalTr curr = curr->next; } } - +#pragma optimize("",on) //If we are adding militia to our map, then we do a few things differently. //First of all, they exist exclusively to the enemy troops, so if the militia exists in the //sector, then they get to use the enemy placements. However, we remove any orders from @@ -2377,8 +2377,8 @@ BOOLEAN SaveSoldierInitListLinks( HWFILE hfile ) { return FALSE; } - FileWrite( hfile, &curr->ubSoldierID, 1, &uiNumBytesWritten ); - if( uiNumBytesWritten != 1 ) + FileWrite( hfile, &curr->ubSoldierID, 2, &uiNumBytesWritten ); + if( uiNumBytesWritten != 2 ) { return FALSE; } @@ -2391,7 +2391,8 @@ BOOLEAN LoadSoldierInitListLinks( HWFILE hfile ) { UINT32 uiNumBytesRead; SOLDIERINITNODE *curr; - UINT8 ubSlots, ubSoldierID, ubNodeID; + UINT8 ubSlots, ubNodeID; + UINT16 ubSoldierID; FileRead( hfile, &ubSlots, 1, &uiNumBytesRead ); if( uiNumBytesRead != 1 ) @@ -2664,7 +2665,7 @@ void AddProfilesUsingProfileInsertionData() if( !pSoldier ) { //Create a new soldier, as this one doesn't exist SOLDIERCREATE_STRUCT MercCreateStruct; - UINT8 ubID; + UINT16 ubID; //Set up the create struct so that we can properly create the profile soldier. MercCreateStruct.initialize(); @@ -2802,7 +2803,8 @@ BOOLEAN NewWayOfLoadingEnemySoldierInitListLinks( HWFILE hfile ) { UINT32 uiNumBytesRead; SOLDIERINITNODE *curr; - UINT8 ubSlots, ubSoldierID, ubNodeID; + UINT8 ubSlots, ubNodeID; + UINT16 ubSoldierID; FileRead( hfile, &ubSlots, 1, &uiNumBytesRead ); if( uiNumBytesRead != 1 ) @@ -2816,8 +2818,8 @@ BOOLEAN NewWayOfLoadingEnemySoldierInitListLinks( HWFILE hfile ) { return FALSE; } - FileRead( hfile, &ubSoldierID, 1, &uiNumBytesRead ); - if( uiNumBytesRead != 1 ) + FileRead( hfile, &ubSoldierID, 2, &uiNumBytesRead ); + if( uiNumBytesRead != 2 ) { return FALSE; } @@ -2848,7 +2850,8 @@ BOOLEAN NewWayOfLoadingCivilianInitListLinks( HWFILE hfile ) { UINT32 uiNumBytesRead; SOLDIERINITNODE *curr; - UINT8 ubSlots, ubSoldierID, ubNodeID; + UINT8 ubSlots, ubNodeID; + UINT16 ubSoldierID; FileRead( hfile, &ubSlots, 1, &uiNumBytesRead ); if( uiNumBytesRead != 1 ) @@ -2862,8 +2865,8 @@ BOOLEAN NewWayOfLoadingCivilianInitListLinks( HWFILE hfile ) { return FALSE; } - FileRead( hfile, &ubSoldierID, 1, &uiNumBytesRead ); - if( uiNumBytesRead != 1 ) + FileRead( hfile, &ubSoldierID, 2, &uiNumBytesRead ); + if( uiNumBytesRead != 2 ) { return FALSE; } @@ -2894,7 +2897,8 @@ BOOLEAN LookAtButDontProcessEnemySoldierInitListLinks( HWFILE hfile ) { UINT32 uiNumBytesRead; SOLDIERINITNODE *curr; - UINT8 ubSlots, ubSoldierID, ubNodeID; + UINT8 ubSlots, ubNodeID; + UINT16 ubSoldierID; FileRead( hfile, &ubSlots, 1, &uiNumBytesRead ); if( uiNumBytesRead != 1 ) @@ -2908,8 +2912,8 @@ BOOLEAN LookAtButDontProcessEnemySoldierInitListLinks( HWFILE hfile ) { return FALSE; } - FileRead( hfile, &ubSoldierID, 1, &uiNumBytesRead ); - if( uiNumBytesRead != 1 ) + FileRead( hfile, &ubSoldierID, 2, &uiNumBytesRead ); + if( uiNumBytesRead != 2 ) { return FALSE; } diff --git a/Tactical/Soldier Init List.h b/Tactical/Soldier Init List.h index ac47d25d..ed1002a2 100644 --- a/Tactical/Soldier Init List.h +++ b/Tactical/Soldier Init List.h @@ -7,7 +7,7 @@ typedef struct SOLDIERINITNODE { UINT8 ubNodeID; - UINT8 ubSoldierID; + UINT16 ubSoldierID; BASIC_SOLDIERCREATE_STRUCT *pBasicPlacement; SOLDIERCREATE_STRUCT *pDetailedPlacement; SOLDIERTYPE *pSoldier; diff --git a/Tactical/Soldier Profile.cpp b/Tactical/Soldier Profile.cpp index f9fbce1a..b18b23fb 100644 --- a/Tactical/Soldier Profile.cpp +++ b/Tactical/Soldier Profile.cpp @@ -1502,7 +1502,7 @@ INT16 CalcMedicalDeposit( MERCPROFILESTRUCT * pProfile ) SOLDIERTYPE * FindSoldierByProfileID( UINT8 ubProfileID, BOOLEAN fPlayerMercsOnly ) { - UINT8 ubLoop, ubLoopLimit; + UINT16 ubLoop, ubLoopLimit; SOLDIERTYPE * pSoldier; // sevenfm: fix for last soldier in player team @@ -1531,13 +1531,13 @@ SOLDIERTYPE * FindSoldierByProfileID( UINT8 ubProfileID, BOOLEAN fPlayerMercsOnl SOLDIERTYPE *ChangeSoldierTeam( SOLDIERTYPE *pSoldier, UINT8 ubTeam ) { - UINT8 ubID; + UINT16 ubID; SOLDIERTYPE *pNewSoldier = NULL; SOLDIERCREATE_STRUCT MercCreateStruct; UINT32 cnt; INT32 sOldGridNo; - UINT8 ubOldID; + UINT16 ubOldID; UINT32 uiOldUniqueId; UINT32 uiSlot; diff --git a/Tactical/Soldier Tile.cpp b/Tactical/Soldier Tile.cpp index 6a9f16d8..ec7e0da2 100644 --- a/Tactical/Soldier Tile.cpp +++ b/Tactical/Soldier Tile.cpp @@ -101,7 +101,7 @@ void OutputDebugInfoForTurnBasedNextTileWaiting( SOLDIERTYPE * pSoldier ) void SetDelayedTileWaiting( SOLDIERTYPE *pSoldier, INT32 sCauseGridNo, INT8 bValue ) { - UINT8 ubPerson; + UINT16 ubPerson; // Cancel AI Action // CancelAIAction( pSoldier, TRUE ); @@ -210,7 +210,7 @@ void UnMarkMovementReserved( SOLDIERTYPE *pSoldier ) INT8 TileIsClear( SOLDIERTYPE *pSoldier, INT8 bDirection, INT32 sGridNo, INT8 bLevel ) { - UINT8 ubPerson; + UINT16 ubPerson; INT32 sTempDestGridNo; INT32 sNewGridNo; BOOLEAN fSwapInDoor = FALSE; @@ -519,7 +519,7 @@ BOOLEAN HandleNextTileWaiting( SOLDIERTYPE *pSoldier ) INT32 sCost; INT32 sNewGridNo, sCheckGridNo; UINT8 ubDirection, bCauseDirection; - UINT8 ubPerson; + UINT16 ubPerson; UINT8 fFlags = 0; diff --git a/Tactical/Squads.cpp b/Tactical/Squads.cpp index dc6176c9..9c3c5734 100644 --- a/Tactical/Squads.cpp +++ b/Tactical/Squads.cpp @@ -1000,7 +1000,7 @@ void RebuildCurrentSquad( void ) void ExamineCurrentSquadLights( void ) { // rebuilds current squad to reset faces in tactical - UINT8 ubLoop; + UINT16 ubLoop; // OK, we should add lights for any guy currently bInSector who is not bad OKLIFE... ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; @@ -1331,7 +1331,7 @@ void RebuildSquad( INT8 bSquadValue ) void UpdateCurrentlySelectedMerc( SOLDIERTYPE *pSoldier, INT8 bSquadValue ) { - UINT8 ubID; + UINT16 ubID; // if this squad is the current one and and the psoldier is the currently selected soldier, get rid of 'em if( bSquadValue != iCurrentTacticalSquad ) diff --git a/Tactical/Strategic Exit GUI.cpp b/Tactical/Strategic Exit GUI.cpp index b56531d0..4f101117 100644 --- a/Tactical/Strategic Exit GUI.cpp +++ b/Tactical/Strategic Exit GUI.cpp @@ -85,7 +85,7 @@ typedef struct UINT8 ubLeaveSectorCode; UINT8 ubDirection; UINT8 ubNumPeopleOnSquad; - INT8 bSingleMoveWillIsolateEPC; //if not -1, then that means the slot number is an EPC + INT16 bSingleMoveWillIsolateEPC; //if not -1, then that means the slot number is an EPC INT8 bHandled; BOOLEAN fRender; BOOLEAN fGotoSector; @@ -266,8 +266,8 @@ BOOLEAN InternalInitSectorExitMenu( UINT8 ubDirection, INT32 sAdditionalData )// { //check to see if we have one selected merc and one or more EPCs. //If so, don't allow the selected merc to leave by himself. //Assuming that the matching squad assignment is in the same sector. - UINT8 ubNumMercs = 1; //selected soldier is a merc - UINT8 ubNumEPCs = 0; + UINT16 ubNumMercs = 1; //selected soldier is a merc + UINT16 ubNumEPCs = 0; for( i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; i++ ) { if( i == gusSelectedSoldier ) @@ -282,7 +282,7 @@ BOOLEAN InternalInitSectorExitMenu( UINT8 ubDirection, INT32 sAdditionalData )// //record the slot of the epc. If there are more than one EPCs, then //it doesn't matter. This is used in building the text message explaining //why the selected merc can't leave. This is how we extract the EPC's name. - gExitDialog.bSingleMoveWillIsolateEPC = (INT8)i; + gExitDialog.bSingleMoveWillIsolateEPC = (INT16)i; } else { //We have more than one merc, so we will allow the selected merc to leave alone if diff --git a/Tactical/Structure Wrap.cpp b/Tactical/Structure Wrap.cpp index cbf36b96..2123504f 100644 --- a/Tactical/Structure Wrap.cpp +++ b/Tactical/Structure Wrap.cpp @@ -522,9 +522,9 @@ BOOLEAN IsCuttableWireFenceAtGridNo( INT32 sGridNo ) } -BOOLEAN IsRepairableStructAtGridNo( INT32 sGridNo, UINT8 *pubID ) +BOOLEAN IsRepairableStructAtGridNo( INT32 sGridNo, UINT16 * pubID ) { - UINT8 ubMerc; + UINT16 ubMerc; // OK, first look for a vehicle.... ubMerc = WhoIsThere2( sGridNo, 0 ); @@ -558,9 +558,9 @@ BOOLEAN IsRepairableStructAtGridNo( INT32 sGridNo, UINT8 *pubID ) } -BOOLEAN IsRefuelableStructAtGridNo( INT32 sGridNo, UINT8 *pubID ) +BOOLEAN IsRefuelableStructAtGridNo( INT32 sGridNo, UINT16 * pubID ) { - UINT8 ubMerc; + UINT16 ubMerc; // OK, first look for a vehicle.... ubMerc = WhoIsThere2( sGridNo, 0 ); diff --git a/Tactical/Structure Wrap.h b/Tactical/Structure Wrap.h index 0679e26c..5187f3b1 100644 --- a/Tactical/Structure Wrap.h +++ b/Tactical/Structure Wrap.h @@ -36,8 +36,8 @@ BOOLEAN CutWireFence( INT32 sGridNo ); BOOLEAN IsCuttableWireFenceAtGridNo( INT32 sGridNo ); BOOLEAN IsCutWireFenceAtGridNo( INT32 sGridNo ); -BOOLEAN IsRepairableStructAtGridNo( INT32 sGridNo, UINT8 *pubID ); -BOOLEAN IsRefuelableStructAtGridNo( INT32 sGridNo, UINT8 *pubID ); +BOOLEAN IsRepairableStructAtGridNo( INT32 sGridNo, UINT16 * pubID ); +BOOLEAN IsRefuelableStructAtGridNo( INT32 sGridNo, UINT16 * pubID ); BOOLEAN IsFortificationPossibleAtGridNo( INT32 sGridNo ); // added by Flugente UINT16 InteractiveActionPossibleAtGridNo( INT32 sGridNo, UINT8 usLevel, UINT16& arusStructIndex ); // added by Flugente diff --git a/Tactical/Tactical Save.cpp b/Tactical/Tactical Save.cpp index a4fcf717..5c70a612 100644 --- a/Tactical/Tactical Save.cpp +++ b/Tactical/Tactical Save.cpp @@ -2161,8 +2161,8 @@ BOOLEAN DoesTempFileExistsForMap( UINT32 uiType, INT16 sMapX, INT16 sMapY, INT8 INT16 GetSoldierIDFromAnyMercID(UINT8 ubMercID) { UINT16 cnt; - UINT8 ubLastTeamID; - SOLDIERTYPE *pTeamSoldier; + UINT16 ubLastTeamID; + SOLDIERTYPE *pTeamSoldier; cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; @@ -2582,7 +2582,7 @@ BOOLEAN SetSectorFlag( INT16 sMapX, INT16 sMapY, UINT8 bMapZ, UINT32 uiFlagToSet UpdateLastDayOfPlayerActivity( (UINT16) GetWorldDay() ); } - for ( UINT8 i = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; i <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; i++ ) + for ( UINT16 i = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; i <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; i++ ) { if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->stats.bLife && !(MercPtrs[ i ]->flags.uiStatusFlags & SOLDIER_VEHICLE) && MercPtrs[ i ]->ubProfile != NO_PROFILE && MercPtrs[ i ]->sSectorX == sMapX && MercPtrs[ i ]->sSectorY == sMapY && MercPtrs[ i ]->bSectorZ == bMapZ && !MercPtrs[ i ]->flags.fBetweenSectors && diff --git a/Tactical/Tactical Turns.cpp b/Tactical/Tactical Turns.cpp index 42fd6adf..9ae4a7d2 100644 --- a/Tactical/Tactical Turns.cpp +++ b/Tactical/Tactical Turns.cpp @@ -35,7 +35,7 @@ extern void DecayPublicOpplist( INT8 bTeam ); //not in overhead.h! -extern UINT8 NumEnemyInSector(); +extern UINT16 NumEnemyInSector(); #ifdef JA2UB @@ -45,10 +45,10 @@ extern UINT8 NumEnemyInSector(); void HandleRPCDescription( ) { // WDS - make number of mercenaries, etc. be configurable - std::vector ubMercsInSector (CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS, 0); + std::vector ubMercsInSector (CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS, 0); // UINT8 ubMercsInSector[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ] = { 0 }; - UINT8 ubNumMercs = 0; - UINT8 ubChosenMerc = 0; + UINT16 ubNumMercs = 0; + UINT16 ubChosenMerc = 0; SOLDIERTYPE *pTeamSoldier; INT32 cnt2; BOOLEAN fSAMSite = FALSE; @@ -120,7 +120,7 @@ void HandleRPCDescription( ) pTeamSoldier->ubProfile == CARLOS || pTeamSoldier->ubProfile == DIMITRI ) { - ubMercsInSector[ubNumMercs] = (UINT8)cnt2; + ubMercsInSector[ubNumMercs] = (UINT16)cnt2; ++ubNumMercs; } } @@ -130,7 +130,7 @@ void HandleRPCDescription( ) // If we are > 0 if ( ubNumMercs > 0 ) { - ubChosenMerc = (UINT8)Random( ubNumMercs ); + ubChosenMerc = (UINT16)Random( ubNumMercs ); TacticalCharacterDialogueWithSpecialEvent( MercPtrs[ubMercsInSector[ubChosenMerc]], gTacticalStatus.ubGuideDescriptionToUse, DIALOGUE_SPECIAL_EVENT_USE_ALTERNATE_FILES, 0, 0 ); } diff --git a/Tactical/TeamTurns.cpp b/Tactical/TeamTurns.cpp index d299f2cc..b9d6c0d8 100644 --- a/Tactical/TeamTurns.cpp +++ b/Tactical/TeamTurns.cpp @@ -95,15 +95,15 @@ void RecalculateSoldiersAniSpeed() extern void DecayPublicOpplist(INT8 bTeam); extern void VerifyAndDecayOpplist(SOLDIERTYPE *pSoldier); void EndInterrupt( BOOLEAN fMarkInterruptOccurred ); -void DeleteFromIntList( UINT8 ubIndex, BOOLEAN fCommunicate); +void DeleteFromIntList( UINT16 ubIndex, BOOLEAN fCommunicate); #define END_OF_INTERRUPTS 255 -UINT8 gubOutOfTurnOrder[MAXMERCS] = { END_OF_INTERRUPTS, 0 }; -UINT8 gubOutOfTurnPersons = 0; +UINT16 gubOutOfTurnOrder[MAXMERCS] = { END_OF_INTERRUPTS, 0 }; +UINT16 gubOutOfTurnPersons = 0; #define LATEST_INTERRUPT_GUY (gubOutOfTurnOrder[gubOutOfTurnPersons]) -#define REMOVE_LATEST_INTERRUPT_GUY() (DeleteFromIntList( (UINT8) (gubOutOfTurnPersons), TRUE )) +#define REMOVE_LATEST_INTERRUPT_GUY() (DeleteFromIntList( (gubOutOfTurnPersons), TRUE )) #define INTERRUPTS_OVER (gubOutOfTurnPersons == 1) INT16 InterruptOnlyGuynum = NOBODY; @@ -116,7 +116,7 @@ extern UINT8 gubSightFlags; typedef struct { - UINT8 ubOutOfTurnPersons; + UINT16 ubOutOfTurnPersons; INT16 InterruptOnlyGuynum; INT16 sWhoThrewRock; @@ -510,7 +510,7 @@ void BeginTeamTurn( UINT8 ubTeam ) { DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"BeginTeamTurn"); INT32 cnt; - UINT8 ubID; + UINT16 ubID; SOLDIERTYPE *pSoldier; //rain @@ -792,7 +792,7 @@ void DisplayHiddenTurnbased( SOLDIERTYPE * pActingSoldier ) BOOLEAN EveryoneInInterruptListOnSameTeam( void ) { DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"EveryoneInInterruptListOnSameTeam"); - UINT8 ubLoop; + UINT16 ubLoop; UINT8 ubTeam = 255; for (ubLoop = 1; ubLoop <= gubOutOfTurnPersons; ubLoop++) @@ -814,11 +814,11 @@ BOOLEAN EveryoneInInterruptListOnSameTeam( void ) void StartInterrupt( void ) { - UINT8 ubFirstInterrupter; + UINT16 ubFirstInterrupter; INT8 bTeam; SOLDIERTYPE * pSoldier; SOLDIERTYPE * pTempSoldier; - UINT8 ubInterrupter; + UINT16 ubInterrupter; INT32 cnt; DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"StartInterrupt"); @@ -1120,12 +1120,12 @@ void StartInterrupt( void ) void EndInterrupt( BOOLEAN fMarkInterruptOccurred ) { - UINT8 ubInterruptedSoldier; - SOLDIERTYPE * pSoldier; - SOLDIERTYPE * pTempSoldier; - INT32 cnt; - BOOLEAN fFound; - INT16 ubMinAPsToAttack; + UINT16 ubInterruptedSoldier; + SOLDIERTYPE * pSoldier; + SOLDIERTYPE * pTempSoldier; + INT32 cnt; + BOOLEAN fFound; + INT16 ubMinAPsToAttack; DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"EndInterrupt"); @@ -1172,7 +1172,7 @@ void EndInterrupt( BOOLEAN fMarkInterruptOccurred ) } else { - UINT8 nubFirstInterrupter; + UINT16 nubFirstInterrupter; INT8 nbTeam; SOLDIERTYPE * npSoldier; @@ -1499,7 +1499,7 @@ void EndInterrupt( BOOLEAN fMarkInterruptOccurred ) } -BOOLEAN StandardInterruptConditionsMet( SOLDIERTYPE * pSoldier, UINT8 ubOpponentID, INT8 bOldOppList) +BOOLEAN StandardInterruptConditionsMet( SOLDIERTYPE * pSoldier, UINT16 ubOpponentID, INT8 bOldOppList) { DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"StandardInterruptConditionsMet"); // UINT8 ubAniType; @@ -1801,7 +1801,7 @@ BOOLEAN StandardInterruptConditionsMet( SOLDIERTYPE * pSoldier, UINT8 ubOpponent } -INT8 CalcInterruptDuelPts( SOLDIERTYPE * pSoldier, UINT8 ubOpponentID, BOOLEAN fUseWatchSpots ) +INT8 CalcInterruptDuelPts( SOLDIERTYPE * pSoldier, UINT16 ubOpponentID, BOOLEAN fUseWatchSpots ) { INT32 iPoints; INT8 bLightLevel; @@ -2080,11 +2080,11 @@ BOOLEAN InterruptDuel( SOLDIERTYPE * pSoldier, SOLDIERTYPE * pOpponent) } -void DeleteFromIntList( UINT8 ubIndex, BOOLEAN fCommunicate) +void DeleteFromIntList( UINT16 ubIndex, BOOLEAN fCommunicate) { DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"DeleteFromIntList"); - UINT8 ubLoop; - UINT8 ubID; + UINT16 ubLoop; + UINT16 ubID; if ( ubIndex > gubOutOfTurnPersons) { @@ -2122,10 +2122,10 @@ void DeleteFromIntList( UINT8 ubIndex, BOOLEAN fCommunicate) */ } -void AddToIntList( UINT8 ubID, BOOLEAN fGainControl, BOOLEAN fCommunicate ) +void AddToIntList( UINT16 ubID, BOOLEAN fGainControl, BOOLEAN fCommunicate ) { DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"AddToIntList"); - UINT8 ubLoop; + UINT16 ubLoop; // ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%d added to int list", ubID ); DebugMsg( TOPIC_JA2INTERRUPT, DBG_LEVEL_3, String("INTERRUPT: adding ID %d who %s", ubID, fGainControl ? "gains control" : "loses control" ) ); @@ -2186,11 +2186,11 @@ void AddToIntList( UINT8 ubID, BOOLEAN fGainControl, BOOLEAN fCommunicate ) void VerifyOutOfTurnOrderArray() { DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"VerifyOutOfTurnOrderArray"); - UINT8 ubTeamHighest[ MAXTEAMS ] = { 0 }; + UINT16 ubTeamHighest[ MAXTEAMS ] = { 0 }; UINT8 ubTeamsInList; - UINT8 ubNextInArrayOnTeam, ubNextIndex; + UINT16 ubNextInArrayOnTeam, ubNextIndex; UINT8 ubTeam; - UINT8 ubLoop, ubLoop2; + UINT16 ubLoop, ubLoop2; BOOLEAN fFoundLoop = FALSE; for (ubLoop = 1; ubLoop <= gubOutOfTurnPersons; ubLoop++) @@ -2308,9 +2308,9 @@ void DoneAddingToIntList( SOLDIERTYPE * pSoldier, BOOLEAN fChange, UINT8 ubInter { StartInterrupt(); } - else + else { - UINT8 nubFirstInterrupter; + UINT16 nubFirstInterrupter; INT8 nbTeam; SOLDIERTYPE * npSoldier; @@ -2384,13 +2384,14 @@ void DoneAddingToIntList( SOLDIERTYPE * pSoldier, BOOLEAN fChange, UINT8 ubInter void ResolveInterruptsVs( SOLDIERTYPE * pSoldier, UINT8 ubInterruptType) { DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,String("ResolveInterruptsVs: Soldier ID = %d, APs = %d (interrupt type = %d)",pSoldier->ubID,pSoldier->bActionPoints, ubInterruptType)); - UINT8 ubTeam, ubOpp; - UINT8 ubIntCnt; - UINT8 ubIntList[MAXMERCS]; + UINT8 ubTeam; + UINT16 ubOpp; + UINT16 ubIntCnt; + UINT16 ubIntList[MAXMERCS]; UINT8 ubIntDiff[MAXMERCS]; UINT8 ubSmallestDiff; - UINT8 ubSlot, ubSmallestSlot; - UINT8 ubLoop; + UINT16 ubSlot, ubSmallestSlot; + UINT16 ubLoop; BOOLEAN fIntOccurs; SOLDIERTYPE * pOpponent; BOOLEAN fControlChanged = FALSE; @@ -2594,8 +2595,8 @@ BOOLEAN SaveTeamTurnsToTheSaveGameFile( HWFILE hFile ) TEAM_TURN_SAVE_STRUCT TeamTurnStruct; //Save the gubTurn Order Array - FileWrite( hFile, gubOutOfTurnOrder, sizeof( UINT8 ) * MAXMERCS, &uiNumBytesWritten ); - if( uiNumBytesWritten != sizeof( UINT8 ) * MAXMERCS ) + FileWrite( hFile, gubOutOfTurnOrder, sizeof( UINT16 ) * MAXMERCS, &uiNumBytesWritten ); + if( uiNumBytesWritten != sizeof( UINT16 ) * MAXMERCS ) { return( FALSE ); } @@ -2627,8 +2628,8 @@ BOOLEAN LoadTeamTurnsFromTheSavedGameFile( HWFILE hFile ) TEAM_TURN_SAVE_STRUCT TeamTurnStruct; //Load the gubTurn Order Array - FileRead( hFile, gubOutOfTurnOrder, sizeof( UINT8 ) * MAXMERCS, &uiNumBytesRead ); - if( uiNumBytesRead != sizeof( UINT8 ) * MAXMERCS ) + FileRead( hFile, gubOutOfTurnOrder, sizeof( UINT16 ) * MAXMERCS, &uiNumBytesRead ); + if( uiNumBytesRead != sizeof( UINT16 ) * MAXMERCS ) { return( FALSE ); } diff --git a/Tactical/TeamTurns.h b/Tactical/TeamTurns.h index 1d14dbcf..a53c0489 100644 --- a/Tactical/TeamTurns.h +++ b/Tactical/TeamTurns.h @@ -3,19 +3,19 @@ #include "Soldier Control.h" -extern UINT8 gubOutOfTurnPersons; -extern UINT8 gubOutOfTurnOrder[MAXMERCS] ; +extern UINT16 gubOutOfTurnPersons; +extern UINT16 gubOutOfTurnOrder[MAXMERCS] ; extern BOOLEAN gfHiddenInterrupt; extern BOOLEAN gfHiddenTurnbased; #define INTERRUPT_QUEUED (gubOutOfTurnPersons > 0) -extern BOOLEAN StandardInterruptConditionsMet( SOLDIERTYPE * pSoldier, UINT8 ubOpponentID, INT8 bOldOppList); -extern INT8 CalcInterruptDuelPts( SOLDIERTYPE * pSoldier, UINT8 ubOpponentID, BOOLEAN fUseWatchSpots ); +extern BOOLEAN StandardInterruptConditionsMet( SOLDIERTYPE * pSoldier, UINT16 ubOpponentID, INT8 bOldOppList); +extern INT8 CalcInterruptDuelPts( SOLDIERTYPE * pSoldier, UINT16 ubOpponentID, BOOLEAN fUseWatchSpots ); extern void EndAITurn( void ); extern void DisplayHiddenInterrupt( SOLDIERTYPE * pSoldier ); extern BOOLEAN InterruptDuel( SOLDIERTYPE * pSoldier, SOLDIERTYPE * pOpponent); -extern void AddToIntList( UINT8 ubID, BOOLEAN fGainControl, BOOLEAN fCommunicate ); +extern void AddToIntList( UINT16 ubID, BOOLEAN fGainControl, BOOLEAN fCommunicate ); extern void DoneAddingToIntList( SOLDIERTYPE * pSoldier, BOOLEAN fChange, UINT8 ubInterruptType); void FreezeInterfaceForEnemyTurn( void ); diff --git a/Tactical/Turn Based Input.cpp b/Tactical/Turn Based Input.cpp index 603f7b1e..3c963248 100644 --- a/Tactical/Turn Based Input.cpp +++ b/Tactical/Turn Based Input.cpp @@ -295,7 +295,7 @@ void ItemCreationCallBack( UINT8 ubResult ); void CheatCreateItem(); // silversurfer: added for merc portrait swapping in tactical void SwapMercPortraits ( SOLDIERTYPE *pSoldier, INT8 bDirection ); -extern INT8 GetTeamSlotFromPlayerID( UINT8 ubID ); +extern INT8 GetTeamSlotFromPlayerID( UINT16 ubID ); extern FACETYPE *gpCurrentTalkingFace; // Flugente: toggle display of enemy role indicators @@ -1263,7 +1263,7 @@ void GetTBMousePositionInput( UINT32 *puiNewEvent ) if ( MercPtrs[ gusUIFullTargetID ]->bTeam != ENEMY_TEAM ) { uiMoveTargetSoldierId = gusUIFullTargetID; - if ( IsValidTalkableNPC( (UINT8)gusUIFullTargetID, FALSE, FALSE, FALSE ) && !_KeyDown( SHIFT ) && !AM_AN_EPC( pSoldier ) && !ValidQuickExchangePosition( ) ) + if ( IsValidTalkableNPC( gusUIFullTargetID, FALSE, FALSE, FALSE ) && !_KeyDown( SHIFT ) && !AM_AN_EPC( pSoldier ) && !ValidQuickExchangePosition( ) ) { *puiNewEvent = T_CHANGE_TO_TALKING; return; @@ -1286,7 +1286,7 @@ void GetTBMousePositionInput( UINT32 *puiNewEvent ) if ( gfUIFullTargetFound ) //if ( gfUIFullTargetFound ) { - if ( IsValidTargetMerc( (UINT8)gusUIFullTargetID ) ) + if ( IsValidTargetMerc( gusUIFullTargetID ) ) { guiUITargetSoldierId = gusUIFullTargetID; @@ -2444,7 +2444,7 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) { if ( gusSelectedSoldier != NOBODY ) { //Select next merc - UINT8 bID; + UINT16 bID; bID = FindNextMercInTeamPanel( MercPtrs[ gusSelectedSoldier ], FALSE, FALSE ); @@ -4159,7 +4159,7 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) // swap sungoggles and nightgoggles / put on gas masks case 'N': SOLDIERTYPE *pTeamSoldier; - INT8 bLoop; + UINT16 bLoop; // emergency command: everybody in this sector puts on gasmasks if ( fAlt ) @@ -5443,7 +5443,7 @@ void SetScopeMode( INT32 usMapPos ) ManLooksForOtherTeams( MercPtrs[ gusSelectedSoldier ] ); } } - +#pragma optimize("", off) void ObliterateSector() { INT32 cnt; @@ -5455,8 +5455,8 @@ void ObliterateSector() #ifdef JA2BETAVERSION ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_TESTVERSION, L"Obliterating Sector!" ); #endif - - for ( pTSoldier = MercPtrs[ cnt ]; cnt < MAX_NUM_SOLDIERS; pTSoldier++, cnt++ ) + const INT32 end = MAX_NUM_SOLDIERS; + for ( pTSoldier = MercPtrs[ cnt ]; cnt < end; pTSoldier++, cnt++ ) { if ( pTSoldier->bActive && !pTSoldier->aiData.bNeutral && (pTSoldier->bSide != gbPlayerNum ) ) { @@ -5473,10 +5473,11 @@ void ObliterateSector() // CreateAnimationTile( &AniParams ); //PlayJA2Sample( EXPLOSION_1, RATE_11025, MIDVOLUME, 1, MIDDLEPAN ); - pTSoldier->EVENT_SoldierGotHit( 1, 400, 0, pTSoldier->ubDirection, 320, NOBODY , FIRE_WEAPON_NO_SPECIAL, pTSoldier->bAimShotLocation, 0, NOWHERE ); + pTSoldier->EVENT_SoldierGotHit( 1, 400, 0, pTSoldier->ubDirection, 320, NOBODY, FIRE_WEAPON_NO_SPECIAL, pTSoldier->bAimShotLocation, 0, NOWHERE ); } } } +#pragma optimize("", on) void RandomizeMercProfile() { @@ -5501,8 +5502,6 @@ void CreateNextCivType() // Get Grid Corrdinates of mouse if ( GetMouseMapPos( &usMapPos ) ) { - INT8 iNewIndex; - MercCreateStruct.ubProfile = NO_PROFILE; MercCreateStruct.sSectorX = gWorldSectorX; MercCreateStruct.sSectorY = gWorldSectorY; @@ -5521,7 +5520,8 @@ void CreateNextCivType() MercCreateStruct.sInsertionGridNo = usMapPos; RandomizeNewSoldierStats( &MercCreateStruct ); - if ( TacticalCreateSoldier( &MercCreateStruct, (UINT8 *)&iNewIndex ) ) + UINT16 iNewIndex; + if ( TacticalCreateSoldier( &MercCreateStruct, &iNewIndex ) ) { AddSoldierToSector( iNewIndex ); @@ -5557,8 +5557,6 @@ void CreateCow() // Get Grid Corrdinates of mouse if ( GetMouseMapPos( &usMapPos ) ) { - INT8 iNewIndex; - MercCreateStruct.ubProfile = NO_PROFILE; MercCreateStruct.sSectorX = gWorldSectorX; MercCreateStruct.sSectorY = gWorldSectorY; @@ -5569,7 +5567,8 @@ void CreateCow() MercCreateStruct.sInsertionGridNo = usMapPos; RandomizeNewSoldierStats( &MercCreateStruct ); - if ( TacticalCreateSoldier( &MercCreateStruct, (UINT8 *)&iNewIndex ) ) + UINT16 iNewIndex; + if ( TacticalCreateSoldier( &MercCreateStruct, &iNewIndex ) ) { AddSoldierToSector( iNewIndex ); @@ -5587,8 +5586,6 @@ void CreateBloodCat() // Get Grid Corrdinates of mouse if ( GetMouseMapPos( &usMapPos ) ) { - INT8 iNewIndex; - MercCreateStruct.ubProfile = NO_PROFILE; MercCreateStruct.sSectorX = gWorldSectorX; MercCreateStruct.sSectorY = gWorldSectorY; @@ -5599,7 +5596,8 @@ void CreateBloodCat() MercCreateStruct.sInsertionGridNo = usMapPos; RandomizeNewSoldierStats( &MercCreateStruct ); - if ( TacticalCreateSoldier( &MercCreateStruct, (UINT8 *)&iNewIndex ) ) + UINT16 iNewIndex; + if ( TacticalCreateSoldier( &MercCreateStruct, &iNewIndex ) ) { AddSoldierToSector( iNewIndex ); @@ -5617,8 +5615,6 @@ void CreatePlayerControlledCow() // Get Grid Corrdinates of mouse if ( GetMouseMapPos( &usMapPos ) ) { - INT8 iNewIndex; - MercCreateStruct.ubProfile = 12; MercCreateStruct.sSectorX = gWorldSectorX; MercCreateStruct.sSectorY = gWorldSectorY; @@ -5630,7 +5626,8 @@ void CreatePlayerControlledCow() RandomizeNewSoldierStats( &MercCreateStruct ); - if ( TacticalCreateSoldier( &MercCreateStruct, (UINT8 *)&iNewIndex ) ) + UINT16 iNewIndex; + if ( TacticalCreateSoldier( &MercCreateStruct, &iNewIndex ) ) { AddSoldierToSector( iNewIndex ); @@ -5694,7 +5691,7 @@ void CreatePlayerControlledMonster() if ( GetMouseMapPos( &usMapPos ) ) { SOLDIERCREATE_STRUCT MercCreateStruct; - INT8 iNewIndex; + UINT16 iNewIndex; MercCreateStruct.ubProfile = NO_PROFILE; MercCreateStruct.sSectorX = gWorldSectorX; @@ -5711,7 +5708,7 @@ void CreatePlayerControlledMonster() MercCreateStruct.sInsertionGridNo = usMapPos; RandomizeNewSoldierStats( &MercCreateStruct ); - if ( TacticalCreateSoldier( &MercCreateStruct, (UINT8 *)&iNewIndex ) ) + if ( TacticalCreateSoldier( &MercCreateStruct, &iNewIndex ) ) { AddSoldierToSector( iNewIndex ); } @@ -6309,7 +6306,7 @@ void ChangeCurrentSquad( INT32 iSquad ) void HandleSelectMercSlot( UINT8 ubPanelSlot, INT8 bCode ) { - UINT8 ubID; + UINT16 ubID; if ( GetPlayerIDFromInterfaceTeamSlot( ubPanelSlot, &ubID ) ) { @@ -6363,7 +6360,7 @@ void TestMeanWhile( INT32 iID ) void EscapeUILock( ) { //UNLOCK UI - UnSetUIBusy( (UINT8)gusSelectedSoldier ); + UnSetUIBusy( gusSelectedSoldier ); // Decrease global busy counter... gTacticalStatus.ubAttackBusyCount = 0; @@ -6455,7 +6452,7 @@ void HandleStanceChangeFromUIKeys( UINT8 ubAnimHeight ) { if( gusSelectedSoldier != NOBODY ) { - pSoldier = MercPtrs[ (UINT8)gusSelectedSoldier ]; + pSoldier = MercPtrs[ gusSelectedSoldier ]; // silversurfer: If we decide to stand up or press "s" again while we are standing we should reset movement to walk mode. // If we want to run we have to press "r" which is handled elsewhere. if ( ubAnimHeight == ANIM_STAND ) @@ -7321,8 +7318,8 @@ void SwapMercPortraits ( SOLDIERTYPE *pSoldier, INT8 bDirection ) if ( gpCurrentTalkingFace != NULL ) return; - UINT8 ubSourceMerc = (UINT8)gusSelectedSoldier; - UINT8 ubTargetMerc; + UINT16 ubSourceMerc = gusSelectedSoldier; + UINT16 ubTargetMerc; INT32 iSourceFace; INT32 iTargetFace; UINT8 ubGroupID = pSoldier->ubGroupID; @@ -7553,7 +7550,7 @@ void HandleAltMouseTBX2Button(UINT32 *puiNewEvent) // sevenfm: these functions keep original mouse code functionality void HandleMouseTBWheel( void ) { - UINT8 bID; + UINT16 bID; if ( !( gTacticalStatus.uiFlags & ENGAGED_IN_CONV ) && ( ( gsCurInterfacePanel != SM_PANEL ) || ( ButtonList[ iSMPanelButtons[ NEXTMERC_BUTTON ] ]->uiFlags & BUTTON_ENABLED ) ) ) @@ -7787,41 +7784,41 @@ void HandleTBJumpThroughWindow( void ){ } void HandleTBToggleStealthAll( void ) { - // Toggle squad's stealth mode..... - // For each guy on squad... - SOLDIERTYPE *pTeamSoldier; - INT8 bLoop; - BOOLEAN fStealthOn = FALSE; + // Toggle squad's stealth mode..... + // For each guy on squad... + SOLDIERTYPE *pTeamSoldier; + UINT16 bLoop; + BOOLEAN fStealthOn = FALSE; - // Check if at least one guy is on stealth.... - for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID, pTeamSoldier=MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++, pTeamSoldier++) - { - if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad( ) ) - { - if ( pTeamSoldier->bStealthMode ) - fStealthOn = TRUE; - } - } + // Check if at least one guy is on stealth.... + for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID, pTeamSoldier=MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++, pTeamSoldier++) + { + if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad( ) ) + { + if ( pTeamSoldier->bStealthMode ) + fStealthOn = TRUE; + } + } - fStealthOn = !fStealthOn; + fStealthOn = !fStealthOn; - for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID, pTeamSoldier=MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++, pTeamSoldier++) - { - if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad( ) && !AM_A_ROBOT( pTeamSoldier ) ) - { - if ( gpSMCurrentMerc != NULL && bLoop == gpSMCurrentMerc->ubID ) - gfUIStanceDifferent = TRUE; - pTeamSoldier->bStealthMode = fStealthOn; - } - } + for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID, pTeamSoldier=MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++, pTeamSoldier++) + { + if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad( ) && !AM_A_ROBOT( pTeamSoldier ) ) + { + if ( gpSMCurrentMerc != NULL && bLoop == gpSMCurrentMerc->ubID ) + gfUIStanceDifferent = TRUE; + pTeamSoldier->bStealthMode = fStealthOn; + } + } - fInterfacePanelDirty = DIRTYLEVEL2; + fInterfacePanelDirty = DIRTYLEVEL2; - // OK, display message - if ( fStealthOn ) - ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, pMessageStrings[ MSG_SQUAD_ON_STEALTHMODE ] ); - else - ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, pMessageStrings[ MSG_SQUAD_OFF_STEALTHMODE ] ); + // OK, display message + if ( fStealthOn ) + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, pMessageStrings[ MSG_SQUAD_ON_STEALTHMODE ] ); + else + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, pMessageStrings[ MSG_SQUAD_OFF_STEALTHMODE ] ); } void HandleTBToggleFireMode( void ) { @@ -7956,7 +7953,7 @@ void HandleTBSwapSidearm( void ) void HandleTBSwapGoogles( void ) { SOLDIERTYPE *pTeamSoldier; - INT8 bLoop; + UINT16 bLoop; for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID, pTeamSoldier=MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++, pTeamSoldier++) { @@ -8056,7 +8053,7 @@ void HandleTBReloadAll( void ) if (! ( gTacticalStatus.fEnemyInSector ) ) { SOLDIERTYPE *pTeamSoldier; - UINT8 bLoop; + UINT16 bLoop; UINT16 bullets; OBJECTTYPE *pGun, *pAmmo, *pAmmoMags; @@ -8259,7 +8256,7 @@ void HandleTBReloadAll( void ) else { SOLDIERTYPE *pTeamSoldier; - UINT8 bLoop; + UINT16 bLoop; OBJECTTYPE *pGun, *pAmmo; for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID, pTeamSoldier=MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++bLoop, pTeamSoldier++) @@ -8359,7 +8356,7 @@ void HandleTBGotoLowerStance( void ) } void HandleTBLocateNextMerc( void ) { - UINT8 bID; + UINT16 bID; if ( gusSelectedSoldier != NOBODY ) { //Select next merc bID = FindNextMercInTeamPanel( MercPtrs[ gusSelectedSoldier ], FALSE, FALSE ); @@ -8370,7 +8367,7 @@ void HandleTBLocateNextMerc( void ) } void HandleTBLocatePrevMerc( void ) { - UINT8 bID; + UINT16 bID; if ( gusSelectedSoldier != NOBODY ) { bID = FindPrevActiveAndAliveMerc( MercPtrs[ gusSelectedSoldier ], TRUE, TRUE ); @@ -8419,7 +8416,7 @@ void HandleTBDropBackpacks( void ) { //SOLDIERTYPE *pSoldier = MercPtrs[ gusSelectedSoldier ]; SOLDIERTYPE *pTeamSoldier; - UINT8 ubLoop; + UINT16 ubLoop; INT16 sAPCost = APBPConstants[AP_BACK_PACK]; INT32 iBPCost = APBPConstants[BP_BACK_PACK]; @@ -8457,7 +8454,7 @@ void HandleTBPickUpBackpacks( void ) { //SOLDIERTYPE *pSoldier = MercPtrs[ gusSelectedSoldier ]; SOLDIERTYPE *pTeamSoldier; - UINT8 ubLoop; + UINT16 ubLoop; INT16 sAPCost = APBPConstants[AP_BACK_PACK]; INT32 iBPCost = APBPConstants[BP_BACK_PACK]; @@ -8504,7 +8501,7 @@ void HandleTBSoldierRun( void ) && pSoldier->usUIMovementMode != WALKING_DUAL_RDY && pSoldier->usUIMovementMode != WALKING_ALTERNATIVE_RDY ) { - UIHandleSoldierStanceChange( (UINT8)pSoldier->ubID, ANIM_STAND ); + UIHandleSoldierStanceChange( pSoldier->ubID, ANIM_STAND ); pSoldier->flags.fUIMovementFast = 1; } else @@ -9674,3 +9671,45 @@ BOOLEAN CheckAutoBandage(void) return FALSE; } + +void HandleTBPickUpBackpacks(BOOLEAN fAll) +{ + if (UsingNewInventorySystem() && (fAll || gusSelectedSoldier != NOBODY)) + { + SOLDIERTYPE* pSoldier = NULL; + SOLDIERTYPE* pTeamSoldier; + UINT16 ubLoop; + + if (gusSelectedSoldier != NOBODY) + { + pSoldier = MercPtrs[gusSelectedSoldier]; + } + + INT16 sAPCost = APBPConstants[AP_BACK_PACK]; + INT32 iBPCost = APBPConstants[BP_BACK_PACK]; + + for (ubLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; ubLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ubLoop++) + { + pTeamSoldier = MercPtrs[ubLoop]; + + if (pTeamSoldier && + OK_CONTROLLABLE_MERC(pTeamSoldier) && + OK_INTERRUPT_MERC(pTeamSoldier) && + !AM_A_ROBOT(pTeamSoldier) && + //!pTeamSoldier->IsBoxer() && + EnoughPoints(pTeamSoldier, sAPCost, iBPCost, FALSE) && + (fAll || pTeamSoldier->bAssignment == pSoldier->bAssignment) && + !pTeamSoldier->inv[BPACKPOCKPOS].exists() && + pTeamSoldier->flags.DropPackFlag) + { + if (ChangeDropPackStatus(pTeamSoldier, FALSE)) + { + ScreenMsg(FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, NewInvMessage[11], pTeamSoldier->GetName()); + } + } + } + + fCharacterInfoPanelDirty = TRUE; + fInterfacePanelDirty = DIRTYLEVEL2; + } +} diff --git a/Tactical/UI Cursors.cpp b/Tactical/UI Cursors.cpp index 3e035934..d6f1dd6b 100644 --- a/Tactical/UI Cursors.cpp +++ b/Tactical/UI Cursors.cpp @@ -138,7 +138,7 @@ BOOLEAN GetMouseRecalcAndShowAPFlags( UINT32 *puiCursorFlags, BOOLEAN *pfShowAPs // FUNCTIONS FOR CURSOR DETERMINATION! -UINT8 GetProperItemCursor( UINT8 ubSoldierID, UINT16 ubItemIndex, INT32 usMapPos, BOOLEAN fActivated ) +UINT8 GetProperItemCursor( UINT16 ubSoldierID, UINT16 ubItemIndex, INT32 usMapPos, BOOLEAN fActivated ) { SOLDIERTYPE *pSoldier; UINT32 uiCursorFlags; @@ -222,7 +222,7 @@ UINT8 GetProperItemCursor( UINT8 ubSoldierID, UINT16 ubItemIndex, INT32 usMapPos if ( fRecalc && gfUIFullTargetFound ) { // ATE: Check for ammo - if ( IsValidTargetMerc( (UINT8)gusUIFullTargetID ) && EnoughAmmo( pSoldier, FALSE, HANDPOS ) && + if ( IsValidTargetMerc( gusUIFullTargetID ) && EnoughAmmo( pSoldier, FALSE, HANDPOS ) && (!pSoldier->IsValidSecondHandShotForReloadingPurposes( ) || EnoughAmmo( pSoldier, FALSE, SECONDHANDPOS) ) ) { // IF it's an ememy, goto confirm action mode @@ -393,7 +393,7 @@ UINT8 HandleActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT32 usMapPos, BOOLEA // Determine where we are shooting / aiming //if ( fRecalc ) { - DetermineCursorBodyLocation( (UINT8)gusSelectedSoldier, TRUE, TRUE ); + DetermineCursorBodyLocation( gusSelectedSoldier, TRUE, TRUE ); } UINT8 ubMaxBullets = 1; INT8 bMaxAim; @@ -1238,7 +1238,7 @@ UINT8 HandleNonActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT32 usMapPos , BO if (( ( gTacticalStatus.uiFlags & REALTIME ) || !( gTacticalStatus.uiFlags & INCOMBAT ) ) ) { //DetermineCursorBodyLocation( (UINT8)gusSelectedSoldier, FALSE, fRecalc ); - DetermineCursorBodyLocation( (UINT8)gusSelectedSoldier, fShowAPs, fRecalc ); + DetermineCursorBodyLocation( gusSelectedSoldier, fShowAPs, fRecalc ); if ( pSoldier->flags.fReloading || pSoldier->flags.fPauseAim ) { @@ -1273,7 +1273,7 @@ UINT8 HandleNonActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT32 usMapPos , BO if ( gTacticalStatus.uiFlags & TURNBASED && (gTacticalStatus.uiFlags & INCOMBAT ) ) { - DetermineCursorBodyLocation( (UINT8)gusSelectedSoldier, fShowAPs, fRecalc ); + DetermineCursorBodyLocation( gusSelectedSoldier, fShowAPs, fRecalc ); gsCurrentActionPoints = CalcTotalAPsToAttack( pSoldier, usMapPos, TRUE, (INT8)(pSoldier->aiData.bShownAimTime ) ); @@ -1387,7 +1387,7 @@ UINT8 HandleNonActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT32 usMapPos , BO } -void DetermineCursorBodyLocation( UINT8 ubSoldierID, BOOLEAN fDisplay, BOOLEAN fRecalc ) +void DetermineCursorBodyLocation( UINT16 ubSoldierID, BOOLEAN fDisplay, BOOLEAN fRecalc ) { INT32 usMapPos; SOLDIERTYPE *pTargetSoldier = NULL, *pSoldier; @@ -2230,7 +2230,7 @@ UINT8 HandleBloodbagCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, BOOLEAN fActiv if ( HasItemFlag( ( &( pSoldier->inv[HANDPOS] ) )->usItem, EMPTY_BLOOD_BAG ) ) { // is there a person here? - UINT8 usSoldierIndex = WhoIsThere2( sGridNo, pSoldier->pathing.bLevel ); + UINT16 usSoldierIndex = WhoIsThere2( sGridNo, pSoldier->pathing.bLevel ); if ( usSoldierIndex != NOBODY ) { if ( usSoldierIndex != pSoldier->ubID && MercPtrs[usSoldierIndex]->IsValidBloodDonor() ) @@ -2265,7 +2265,7 @@ UINT8 HandleSplintCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, BOOLEAN fActivat } // is there a person here? - UINT8 usSoldierIndex = WhoIsThere2( sGridNo, pSoldier->pathing.bLevel ); + UINT16 usSoldierIndex = WhoIsThere2( sGridNo, pSoldier->pathing.bLevel ); if ( usSoldierIndex != NOBODY ) { if ( usSoldierIndex != pSoldier->ubID && MercPtrs[usSoldierIndex]->CanReceiveSplint() ) @@ -2351,7 +2351,7 @@ UINT8 HandleHandcuffCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT32 uiCurso if ( HasItemFlag( (&(pSoldier->inv[HANDPOS]))->usItem, HANDCUFFS ) ) { // is there a person here? - UINT8 usSoldierIndex = WhoIsThere2( sGridNo, pSoldier->pathing.bLevel ); + UINT16 usSoldierIndex = WhoIsThere2( sGridNo, pSoldier->pathing.bLevel ); if (usSoldierIndex != NOBODY && MercPtrs[usSoldierIndex] && MercPtrs[usSoldierIndex]->bVisible >= 0 && MercPtrs[usSoldierIndex]->CanBeCaptured()) { return( HANDCUFF_GREY_UICURSOR ); @@ -2373,7 +2373,7 @@ UINT8 HandleApplyItemCursor(SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT32 uiCurso if (ItemCanBeAppliedToOthers((&(pSoldier->inv[HANDPOS]))->usItem)) { // is there a person here? - UINT8 ubPerson = WhoIsThere2(sGridNo, pSoldier->pathing.bLevel); + UINT16 ubPerson = WhoIsThere2(sGridNo, pSoldier->pathing.bLevel); if (ubPerson != NOBODY && MercPtrs[ubPerson] && MercPtrs[ubPerson]->bVisible >= 0) { return(APPLYITEM_GREY_UICURSOR); @@ -2989,7 +2989,7 @@ UINT8 GetActionModeCursor( SOLDIERTYPE *pSoldier ) if ( GetMouseMapPos( &usMapPos ) ) { // is there a person here? - UINT8 ubPerson = WhoIsThere2(usMapPos, pSoldier->pathing.bLevel); + UINT16 ubPerson = WhoIsThere2(usMapPos, pSoldier->pathing.bLevel); if (ubPerson != NOBODY && MercPtrs[ubPerson] && MercPtrs[ubPerson]->bVisible >= 0) { ubCursor = APPLYITEMCURS; diff --git a/Tactical/UI Cursors.h b/Tactical/UI Cursors.h index c74a1804..b20e97f3 100644 --- a/Tactical/UI Cursors.h +++ b/Tactical/UI Cursors.h @@ -9,8 +9,8 @@ #define REFINE_KNIFE_2 (gGameExternalOptions.fEnhancedCloseCombatSystem ? gSkillTraitValues.ubModifierForAPsAddedOnAimedBladedAttackes*2 : 6) -UINT8 GetProperItemCursor( UINT8 ubSoldierID, UINT16 ubItemIndex, INT32 usMapPos, BOOLEAN fActivated ); -void DetermineCursorBodyLocation( UINT8 ubSoldierID, BOOLEAN fDisplay, BOOLEAN fRecalc ); +UINT8 GetProperItemCursor( UINT16 ubSoldierID, UINT16 ubItemIndex, INT32 usMapPos, BOOLEAN fActivated ); +void DetermineCursorBodyLocation( UINT16 ubSoldierID, BOOLEAN fDisplay, BOOLEAN fRecalc ); void HandleLeftClickCursor( SOLDIERTYPE *pSoldier ); void HandleRightClickAdjustCursor( SOLDIERTYPE *pSoldier, INT32 usMapPos ); diff --git a/Tactical/Vehicles.cpp b/Tactical/Vehicles.cpp index d16281c3..c3542022 100644 --- a/Tactical/Vehicles.cpp +++ b/Tactical/Vehicles.cpp @@ -53,7 +53,7 @@ VEHICLETYPE *pVehicleList = NULL; // number of vehicle slots on the list UINT8 ubNumberOfVehicles = 0; -// the sqaud mvt groups +// the squad mvt groups extern INT8 SquadMovementGroups[ ]; @@ -180,7 +180,7 @@ INT16 sVehicleInternalOrigArmorValues[ NUMBER_OF_TYPES_OF_VEHICLES ][ NUMBER_OF_ // set the driver of the vehicle -void SetDriver( INT32 iID, UINT8 ubID ); +void SetDriver( INT32 iID, UINT16 ubID ); //void RemoveSoldierFromVehicleBetweenSectors( pSoldier, iId ); @@ -669,7 +669,7 @@ BOOLEAN AddSoldierToVehicle( SOLDIERTYPE *pSoldier, INT32 iId, UINT8 ubSeatIndex // anv: are we taking driver's seat if( gNewVehicle[ pVehicleList[ iId ].ubVehicleType ].VehicleSeats[ubFinalSeatIndex].fDriver ) { - SetDriver( iId , pSoldier->ubID ); + SetDriver( iId, pSoldier->ubID ); } else { @@ -1577,7 +1577,7 @@ SOLDIERTYPE *GetDriver( INT32 iID ) } -void SetDriver( INT32 iID, UINT8 ubID ) +void SetDriver( INT32 iID, UINT16 ubID ) { // anv: first make sure previous driver won't be driver anymore if( pVehicleList[ iID ].ubDriver != NOBODY && MercPtrs[ pVehicleList[ iID ].ubDriver ]->iVehicleId == iID ) @@ -1986,7 +1986,7 @@ void AddPassangersToTeamPanel( INT32 iId ) } -void VehicleTakeDamage( UINT8 ubID, UINT8 ubReason, INT16 sDamage, INT32 sGridNo, UINT8 ubAttackerID ) +void VehicleTakeDamage( UINT8 ubID, UINT8 ubReason, INT16 sDamage, INT32 sGridNo, UINT16 ubAttackerID ) { if ( ubReason != TAKE_DAMAGE_GAS_FIRE && ubReason != TAKE_DAMAGE_GAS_NOTFIRE ) { @@ -2015,7 +2015,7 @@ void VehicleTakeDamage( UINT8 ubID, UINT8 ubReason, INT16 sDamage, INT32 sGridNo } -void HandleCriticalHitForVehicleInLocation( UINT8 ubID, INT16 sDmg, INT32 sGridNo, UINT8 ubAttackerID ) +void HandleCriticalHitForVehicleInLocation( UINT8 ubID, INT16 sDmg, INT32 sGridNo, UINT16 ubAttackerID ) { // check state the armor was s'posed to be in vs. the current state..the difference / orig state is % chance // that a critical hit will occur @@ -2317,7 +2317,7 @@ BOOLEAN SaveVehicleInformationToSaveGameFile( HWFILE hFile ) //loop through the passengers for( ubPassengerCnt=0; ubPassengerCnt<10; ubPassengerCnt++) { - TempVehicle.pPassengers[ ubPassengerCnt ] = ( SOLDIERTYPE * )NO_PROFILE; + TempVehicle.pPassengers[ ubPassengerCnt ] = ( SOLDIERTYPE * )NO_PROFILE; //if there is a passenger here if( pVehicleList[cnt].pPassengers[ ubPassengerCnt ] ) @@ -2428,28 +2428,28 @@ BOOLEAN LoadVehicleInformationFromSavedGameFile( HWFILE hFile, UINT32 uiSavedGam //loop through all the passengers for(ubPassengerCnt=0; ubPassengerCnt<10; ubPassengerCnt++) { - if ( uiSavedGameVersion < 86 ) - { - if( pVehicleList[cnt].pPassengers[ubPassengerCnt] != 0 ) + if ( uiSavedGameVersion < 86 ) { - // ! The id of the soldier was saved in the passenger pointer. The passenger pointer is converted back - // ! to a UINT8 so we can get the REAL pointer to the soldier. - pVehicleList[cnt].pPassengers[ubPassengerCnt] = FindSoldierByProfileID( (UINT8)(pVehicleList[cnt].pPassengers[ ubPassengerCnt ]), FALSE ); + if( pVehicleList[cnt].pPassengers[ubPassengerCnt] != 0 ) + { + // ! The id of the soldier was saved in the passenger pointer. The passenger pointer is converted back + // ! to a UINT8 so we can get the REAL pointer to the soldier. + pVehicleList[cnt].pPassengers[ubPassengerCnt] = FindSoldierByProfileID( (UINT8)(pVehicleList[cnt].pPassengers[ ubPassengerCnt ]), FALSE ); } - } - else - { - if( pVehicleList[cnt].pPassengers[ubPassengerCnt] != ( SOLDIERTYPE * )NO_PROFILE ) + } + else { - // ! The id of the soldier was saved in the passenger pointer. The passenger pointer is converted back - // ! to a UINT8 so we can get the REAL pointer to the soldier. - pVehicleList[cnt].pPassengers[ubPassengerCnt] = FindSoldierByProfileID( (UINT8)(pVehicleList[cnt].pPassengers[ ubPassengerCnt ]), FALSE ); + if( pVehicleList[cnt].pPassengers[ubPassengerCnt] != ( SOLDIERTYPE * )NO_PROFILE ) + { + // ! The id of the soldier was saved in the passenger pointer. The passenger pointer is converted back + // ! to a UINT8 so we can get the REAL pointer to the soldier. + pVehicleList[cnt].pPassengers[ubPassengerCnt] = FindSoldierByProfileID( (UINT8)(pVehicleList[cnt].pPassengers[ ubPassengerCnt ]), FALSE ); } - else - { - pVehicleList[cnt].pPassengers[ubPassengerCnt] = NULL; - } - } + else + { + pVehicleList[cnt].pPassengers[ubPassengerCnt] = NULL; + } + } } diff --git a/Tactical/Vehicles.h b/Tactical/Vehicles.h index 571fa98e..ceef6143 100644 --- a/Tactical/Vehicles.h +++ b/Tactical/Vehicles.h @@ -289,7 +289,7 @@ typedef struct BOOLEAN fBetweenSectors; // between sectors? INT32 sGridNo; // location in tactical SOLDIERTYPE *pPassengers[ MAXPASSENGERS ]; - UINT8 ubDriver; + UINT16 ubDriver; INT16 sInternalHitLocations[ NUMBER_OF_EXTERNAL_HIT_LOCATIONS_ON_VEHICLE ]; INT16 sArmourType; INT16 sExternalArmorLocationsStatus[ NUMBER_OF_EXTERNAL_HIT_LOCATIONS_ON_VEHICLE ]; @@ -404,7 +404,7 @@ BOOLEAN SwapVehicleSeat( SOLDIERTYPE *pVehicle, SOLDIERTYPE *pSoldier, UINT8 ubS void AddPassangersToTeamPanel( INT32 iId ); -void VehicleTakeDamage( UINT8 ubID, UINT8 ubReason, INT16 sDamage, INT32 sGridNo , UINT8 ubAttackerID ); +void VehicleTakeDamage( UINT8 ubID, UINT8 ubReason, INT16 sDamage, INT32 sGridNo , UINT16 ubAttackerID ); // the soldiertype containing this tactical incarnation of this vehicle SOLDIERTYPE * GetSoldierStructureForVehicle( INT32 iId ); @@ -415,7 +415,7 @@ void AdjustVehicleAPs( SOLDIERTYPE *pSoldier, INT16 *pubPoints ); //INT16 GetOrigInternalArmorValueForVehicleInLocation( UINT8 ubID, UINT8 ubLocation ); // handle crit hit to vehicle in this location -void HandleCriticalHitForVehicleInLocation( UINT8 ubID, INT16 sDmg, INT32 sGridNo, UINT8 ubAttackerID ); +void HandleCriticalHitForVehicleInLocation( UINT8 ubID, INT16 sDmg, INT32 sGridNo, UINT16 ubAttackerID ); // ste up armor values for this vehicle void SetUpArmorForVehicle( UINT8 ubID ); diff --git a/Tactical/Weapons.cpp b/Tactical/Weapons.cpp index 59dac718..06ced271 100644 --- a/Tactical/Weapons.cpp +++ b/Tactical/Weapons.cpp @@ -2443,7 +2443,7 @@ BOOLEAN UseGunNCTH( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo ) //CHAR8 zBurstString[512]; UINT8 ubDirection; INT32 sNewGridNo; - UINT8 ubMerc; + UINT16 ubMerc; BOOLEAN fGonnaHit = FALSE; FLOAT dExpGain = 0; UINT32 uiDepreciateTest; @@ -3227,7 +3227,7 @@ BOOLEAN UseGun( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo ) // CHAR8 zBurstString[512]; UINT8 ubDirection; INT32 sNewGridNo; - UINT8 ubMerc; + UINT16 ubMerc; BOOLEAN fGonnaHit = FALSE; UINT16 usExpGain = 0; UINT32 uiDepreciateTest; @@ -4933,7 +4933,7 @@ BOOLEAN UseThrown( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo ) { UINT32 uiHitChance; INT8 bLoop; - UINT8 ubTargetID; + UINT16 ubTargetID; SOLDIERTYPE * pTargetSoldier; //INT16 sAPCost = 0;//dnl ch72 180913 @@ -5277,7 +5277,7 @@ BOOLEAN UseLauncher( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo ) { if (pSoldier->bTeam == 0 || (pSoldier->bTeam == 1 && is_server)) { - send_grenade( pSoldier->pTempObject , pSoldier->pThrowParams->dLifeSpan, pSoldier->pThrowParams->dX, pSoldier->pThrowParams->dY, pSoldier->pThrowParams->dZ, pSoldier->pThrowParams->dForceX, pSoldier->pThrowParams->dForceY, pSoldier->pThrowParams->dForceZ, sTargetGridNo, pSoldier->ubID, pSoldier->pThrowParams->ubActionCode, pSoldier->pThrowParams->uiActionData, iID , false); + send_grenade( pSoldier->pTempObject, pSoldier->pThrowParams->dLifeSpan, pSoldier->pThrowParams->dX, pSoldier->pThrowParams->dY, pSoldier->pThrowParams->dZ, pSoldier->pThrowParams->dForceX, pSoldier->pThrowParams->dForceY, pSoldier->pThrowParams->dForceZ, sTargetGridNo, pSoldier->ubID, pSoldier->pThrowParams->ubActionCode, pSoldier->pThrowParams->uiActionData, iID, false); } } @@ -5304,7 +5304,7 @@ BOOLEAN UseLauncher( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo ) return( TRUE ); } -BOOLEAN DoSpecialEffectAmmoMiss( UINT8 ubAttackerID, UINT16 usWeaponIndex, INT32 sGridNo, INT16 sXPos, INT16 sYPos, INT16 sZPos, BOOLEAN fSoundOnly, BOOLEAN fFreeupAttacker, INT32 iBullet ) +BOOLEAN DoSpecialEffectAmmoMiss( UINT16 ubAttackerID, UINT16 usWeaponIndex, INT32 sGridNo, INT16 sXPos, INT16 sYPos, INT16 sZPos, BOOLEAN fSoundOnly, BOOLEAN fFreeupAttacker, INT32 iBullet ) { ANITILE_PARAMS AniParams; UINT8 ubAmmoType = 0; @@ -5467,7 +5467,7 @@ BOOLEAN DoSpecialEffectAmmoMiss( UINT8 ubAttackerID, UINT16 usWeaponIndex, INT32 } -void WeaponHit( UINT16 usSoldierID, UINT16 usWeaponIndex, INT16 sDamage, INT16 sBreathLoss, UINT16 usDirection, INT16 sXPos, INT16 sYPos, INT16 sZPos, INT16 sRange , UINT8 ubAttackerID, BOOLEAN fHit, UINT8 ubSpecial, UINT8 ubHitLocation ) +void WeaponHit( UINT16 usSoldierID, UINT16 usWeaponIndex, INT16 sDamage, INT16 sBreathLoss, UINT16 usDirection, INT16 sXPos, INT16 sYPos, INT16 sZPos, INT16 sRange, UINT16 ubAttackerID, BOOLEAN fHit, UINT8 ubSpecial, UINT8 ubHitLocation ) { SOLDIERTYPE* pTargetSoldier = NULL; SOLDIERTYPE* pSoldier = NULL; @@ -5543,7 +5543,7 @@ void WeaponHit( UINT16 usSoldierID, UINT16 usWeaponIndex, INT16 sDamage, INT16 s else if ( AmmoTypes[ubAmmoType].explosionSize > 1) { // re-routed the Highexplosive value to define exposion type - IgniteExplosion( ubAttackerID, sXPos, sYPos, 0, GETWORLDINDEXFROMWORLDCOORDS( sYPos, sXPos ), AmmoTypes[ubAmmoType].highExplosive , pTargetSoldier->pathing.bLevel ); + IgniteExplosion( ubAttackerID, sXPos, sYPos, 0, GETWORLDINDEXFROMWORLDCOORDS( sYPos, sXPos ), AmmoTypes[ubAmmoType].highExplosive, pTargetSoldier->pathing.bLevel ); // pSoldier->inv[pSoldier->ubAttackingHand ][0]->data.gun.usGunAmmoItem = NONE; } } @@ -5578,7 +5578,7 @@ void WeaponHit( UINT16 usSoldierID, UINT16 usWeaponIndex, INT16 sDamage, INT16 s } -void StructureHit( INT32 iBullet, UINT16 usWeaponIndex, INT16 bWeaponStatus, UINT8 ubAttackerID, UINT16 sXPos, INT16 sYPos, INT16 sZPos, UINT16 usStructureID, INT32 iImpact, BOOLEAN fStopped ) +void StructureHit( INT32 iBullet, UINT16 usWeaponIndex, INT16 bWeaponStatus, UINT16 ubAttackerID, UINT16 sXPos, INT16 sYPos, INT16 sZPos, UINT16 usStructureID, INT32 iImpact, BOOLEAN fStopped ) { BOOLEAN fDoMissForGun = FALSE; ANITILE *pNode; @@ -6237,7 +6237,7 @@ BOOLEAN InRange( SOLDIERTYPE *pSoldier, INT32 sGridNo ) return( FALSE ); } - +#pragma optimize("", off) UINT32 CalcNewChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime, UINT8 ubAimPos ) { @@ -6258,7 +6258,7 @@ UINT32 CalcNewChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTi UINT16 usInHand; OBJECTTYPE * pInHand; INT16 sDistVis, sDistVisNoScope; - UINT8 ubTargetID; + UINT16 ubTargetID; bool fCantSeeTarget = false; FLOAT scopeRangeMod = 0.0f; @@ -6589,6 +6589,7 @@ UINT32 CalcNewChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTi return ((INT32)fFinalChance); } +#pragma optimize("", on) UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime, UINT8 ubAimPos ) @@ -6616,7 +6617,8 @@ UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime, UINT16 usInHand, usShockPenalty, MIN_RANGE_FOR_FULL_COWER, MAX_TARGET_COWERING_PENALTY; UINT16 iBulletsLeft, iTracersFired = 0, iBulletsPerTracer, iBulletsSinceLastTracer=0, iRoundsFiredPreviously; INT8 bBandaged, maxClickBonus = 10, AIM_PENALTY_PER_TARGET_SHOCK; - UINT8 ubTargetID, bLightLevel, ubCoweringDivisor, ubAutoPenaltySinceLastTracer=0; + UINT16 ubTargetID; + UINT8 bLightLevel, ubCoweringDivisor, ubAutoPenaltySinceLastTracer = 0; FLOAT maxBonus, aimTimeBonus, scopeRangeMod = 0.0f, iAimBonus; bool fCantSeeTarget = false, fCoverObscured = false; @@ -9036,7 +9038,7 @@ INT32 HTHImpact( SOLDIERTYPE * pSoldier, SOLDIERTYPE * pTarget, INT32 iHitBy, BO return( iImpact ); } -void ShotMiss( UINT8 ubAttackerID, INT32 iBullet ) +void ShotMiss( UINT16 ubAttackerID, INT32 iBullet ) { BOOLEAN fDoMissForGun = FALSE; SOLDIERTYPE* pAttacker = NULL; @@ -12118,7 +12120,7 @@ FLOAT CalcNewChanceToHitAimTraitBonus(SOLDIERTYPE *pSoldier, FLOAT fAimCap, FLOA extern BOOLEAN IsRoofPresentAtGridNo( INT32 sGridNo ); // Flugente: fire item from A to B (intended for mortarshells and launchable grenades) -BOOLEAN ArtilleryStrike( UINT16 usItem, UINT8 ubOwnerID, UINT32 usStartingGridNo, UINT32 usTargetMapPos ) +BOOLEAN ArtilleryStrike( UINT16 usItem, UINT16 ubOwnerID, UINT32 usStartingGridNo, UINT32 usTargetMapPos ) { FLOAT dForce, dDegrees; INT16 sDestX, sDestY, sSrcX, sSrcY; diff --git a/Tactical/Weapons.h b/Tactical/Weapons.h index 45c9f266..657b34cf 100644 --- a/Tactical/Weapons.h +++ b/Tactical/Weapons.h @@ -454,12 +454,12 @@ extern INT8 ArmourVersusExplosivesPercent( SOLDIERTYPE * pSoldier ); // Flugente: fire resistance INT16 ArmourVersusFirePercent( SOLDIERTYPE * pSoldier ); extern BOOLEAN FireWeapon( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo ); -extern void WeaponHit( UINT16 usSoldierID, UINT16 usWeaponIndex, INT16 sDamage, INT16 sBreathLoss, UINT16 usDirection, INT16 sXPos, INT16 sYPos, INT16 sZPos, INT16 sRange , UINT8 ubAttackerID, BOOLEAN fHit, UINT8 ubSpecial, UINT8 ubHitLocation ); -extern void StructureHit( INT32 iBullet, UINT16 usWeaponIndex, INT16 bWeaponStatus, UINT8 ubAttackerID, UINT16 sXPos, INT16 sYPos, INT16 sZPos, UINT16 usStructureID, INT32 iImpact, BOOLEAN fStopped ); +extern void WeaponHit( UINT16 usSoldierID, UINT16 usWeaponIndex, INT16 sDamage, INT16 sBreathLoss, UINT16 usDirection, INT16 sXPos, INT16 sYPos, INT16 sZPos, INT16 sRange, UINT16 ubAttackerID, BOOLEAN fHit, UINT8 ubSpecial, UINT8 ubHitLocation ); +extern void StructureHit( INT32 iBullet, UINT16 usWeaponIndex, INT16 bWeaponStatus, UINT16 ubAttackerID, UINT16 sXPos, INT16 sYPos, INT16 sZPos, UINT16 usStructureID, INT32 iImpact, BOOLEAN fStopped ); extern void WindowHit( INT32 sGridNo, UINT16 usStructureID, BOOLEAN fBlowWindowSouth, BOOLEAN fLargeForce ); // HEADROCK HAM 5.1: Moved to Bullets.h extern BOOLEAN InRange( SOLDIERTYPE *pSoldier, INT32 sGridNo ); -extern void ShotMiss( UINT8 ubAttackerID, INT32 iBullet ); +extern void ShotMiss( UINT16 ubAttackerID, INT32 iBullet ); extern UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime, UINT8 ubAimPos ); extern UINT32 CalcNewChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime, UINT8 ubAimPos ); extern UINT32 AICalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime, UINT8 ubAimPos, INT8 bTargetLevel, UINT16 usAnimState);//dnl ch59 180813 @@ -536,7 +536,7 @@ FLOAT GetOverheatJamThreshold( OBJECTTYPE *pObj ); FLOAT GetOverheatDamageThresholdModifier( OBJECTTYPE *pObj ); FLOAT GetOverheatDamageThreshold( OBJECTTYPE *pObj ); -BOOLEAN ArtilleryStrike( UINT16 usItem, UINT8 ubOwnerID, UINT32 usStartingGridNo, UINT32 usTargetMapPos ); +BOOLEAN ArtilleryStrike( UINT16 usItem, UINT16 ubOwnerID, UINT32 usStartingGridNo, UINT32 usTargetMapPos ); // Flugente: functions for using several barrels at once UINT8 GetNextBarrelMode( UINT16 usItem, UINT8 aBarrelMode ); diff --git a/Tactical/World Items.cpp b/Tactical/World Items.cpp index 8feac68c..0b0e1a50 100644 --- a/Tactical/World Items.cpp +++ b/Tactical/World Items.cpp @@ -609,7 +609,7 @@ void ResizeWorldItems(void)//dnl ch75 271013 #endif } -INT32 AddItemToWorld( INT32 sGridNo, OBJECTTYPE *pObject, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT8 bVisible, INT8 soldierID ) +INT32 AddItemToWorld( INT32 sGridNo, OBJECTTYPE *pObject, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT8 bVisible, INT16 soldierID ) { UINT32 iItemIndex; INT32 iReturn; diff --git a/Tactical/World Items.h b/Tactical/World Items.h index 524b67b8..04a07697 100644 --- a/Tactical/World Items.h +++ b/Tactical/World Items.h @@ -72,7 +72,7 @@ public: //Because this value is zero in the saved maps, we can't change it to 100, hence the reversal method. //This check is only performed the first time a map is loaded. Later, it is entirely skipped. UINT8 ubNonExistChance; - INT8 soldierID; + INT16 soldierID; char endOfPod; OBJECTTYPE object; }; @@ -100,13 +100,29 @@ public: OBJECTTYPE object; }; // _OLD_WORLDITEM +class _WORLDITEM_INT8_ID +{ +public: + BOOLEAN fExists; + INT32 sGridNo; + UINT8 ubLevel; + UINT16 usFlags; + INT8 bRenderZHeightAboveLevel; + INT8 bVisible; + UINT8 ubNonExistChance; + INT8 soldierID; + char endOfPod; + OBJECTTYPE object; +}; + #define SIZEOF_WORLDITEM_POD (offsetof(WORLDITEM, endOfPod)) #define _OLD_SIZEOF_WORLDITEM_POD (offsetof(_OLD_WORLDITEM, endOfPod)) +#define _SIZEOF_WORLDITEM_INT8_ID_POD (offsetof(_WORLDITEM_INT8_ID, endOfPod)) extern std::vector gWorldItems;//dnl ch75 261013 extern UINT32 guiNumWorldItems; -INT32 AddItemToWorld( INT32 sGridNo, OBJECTTYPE *pObject, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT8 bVisible, INT8 soldierID ); +INT32 AddItemToWorld( INT32 sGridNo, OBJECTTYPE *pObject, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT8 bVisible, INT16 soldierID ); void RemoveItemFromWorld( INT32 iItemIndex ); INT32 FindWorldItem( UINT16 usItem ); diff --git a/Tactical/bullets.cpp b/Tactical/bullets.cpp index e9b8fda9..d04ee742 100644 --- a/Tactical/bullets.cpp +++ b/Tactical/bullets.cpp @@ -76,7 +76,7 @@ void RecountBullets(void) } -INT32 CreateBullet( UINT8 ubFirerID, BOOLEAN fFake, UINT16 usFlags,UINT16 fromItem ) +INT32 CreateBullet( UINT16 ubFirerID, BOOLEAN fFake, UINT16 usFlags,UINT16 fromItem ) { INT32 iBulletIndex; BULLET *pBullet; diff --git a/Tactical/faces.h b/Tactical/faces.h index 3e374974..4ecc2b6c 100644 --- a/Tactical/faces.h +++ b/Tactical/faces.h @@ -9,7 +9,7 @@ #include "soldier profile type.h" // Defines -#define NUM_FACE_SLOTS 50 +#define NUM_FACE_SLOTS NUM_PROFILES struct audio_gap { @@ -123,7 +123,7 @@ typedef struct UINT32 uiSoundID; // Sound ID if one being played - UINT8 ubSoldierID; // SoldierID if one specified + UINT16 ubSoldierID; // SoldierID if one specified UINT8 ubCharacterNum; // Profile ID num UINT16 usFaceX; // X location to render face @@ -200,14 +200,14 @@ extern FACETYPE gFacesData[ NUM_FACE_SLOTS ]; // FACE HANDLING // // Faces are done like this: Call -INT32 InitFace( UINT8 usMercProfileID, UINT8 ubSoldierID, UINT32 uiInitFlags ); +INT32 InitFace( UINT8 usMercProfileID, UINT16 ubSoldierID, UINT32 uiInitFlags ); // The first parameter is the profile ID and the second is the soldier ID ( which for most cases // will be NOBODY if the face is not created from a SOLDIERTYPE ) // This function allocates a slot in the table for the face, loads it's STI file, sets some // values for X,Y locations of eyes from the profile. Does not mkae the face visible or anything like that // INternal init face, called if you don;t want to give a profile ID ( send NO_PROFILE ) for ID -INT32 InternalInitFace( UINT8 usMercProfileID, UINT8 ubSoldierID, UINT32 uiInitFlags, INT32 iFaceFileID, UINT32 uiBlinkFrequency, UINT32 uiExpressionFrequency ); +INT32 InternalInitFace( UINT8 usMercProfileID, UINT16 ubSoldierID, UINT32 uiInitFlags, INT32 iFaceFileID, UINT32 uiBlinkFrequency, UINT32 uiExpressionFrequency ); // Removes the face from the internal table, deletes any memory allocated if any. @@ -279,10 +279,10 @@ void HandleTalkingAutoFaces( ); // Same Functions but taking soldier ID first to get profile ID INT32 InitSoldierFace( SOLDIERTYPE *pSoldier ); void DeleteSoldierFace( SOLDIERTYPE *pSoldier ); -void SetAutoFaceActiveFromSoldier( UINT32 uiDisplayBuffer, UINT32 uiRestoreBuffer, UINT8 ubSoldierID , UINT16 usFaceX, UINT16 usFaceY ); -void SetAutoFaceInActiveFromSoldier( UINT8 ubSoldierID ); -BOOLEAN RenderAutoFaceFromSoldier( UINT8 ubSoldierID ); -BOOLEAN ExternRenderFaceFromSoldier( UINT32 uiBuffer, UINT8 ubSoldierID, INT16 sX, INT16 sY ); +void SetAutoFaceActiveFromSoldier( UINT32 uiDisplayBuffer, UINT32 uiRestoreBuffer, UINT16 ubSoldierID, UINT16 usFaceX, UINT16 usFaceY ); +void SetAutoFaceInActiveFromSoldier( UINT16 ubSoldierID ); +BOOLEAN RenderAutoFaceFromSoldier( UINT16 ubSoldierID ); +BOOLEAN ExternRenderFaceFromSoldier( UINT32 uiBuffer, UINT16 ubSoldierID, INT16 sX, INT16 sY ); diff --git a/Tactical/fov.cpp b/Tactical/fov.cpp index 12a99df7..79812c23 100644 --- a/Tactical/fov.cpp +++ b/Tactical/fov.cpp @@ -299,7 +299,6 @@ void RevealRoofsAndItems(SOLDIERTYPE *pSoldier, UINT32 itemsToo, BOOLEAN fShowLo INT8 itemVisible = FALSE; INT8 Blocking,twoMoreTiles,markerDir; INT8 nextDir=0; - UINT8 who; //,itemIndex; // for each square checked UINT8 dir,range,Path2; //DBrot: More Rooms //UINT8 ubRoomNo; @@ -359,7 +358,6 @@ void RevealRoofsAndItems(SOLDIERTYPE *pSoldier, UINT32 itemsToo, BOOLEAN fShowLo MercLooksForDoors( pSoldier, TRUE ); - who = pSoldier->ubID; dir = pSoldier->ubDirection; //NumMessage("good old reveal",dir); diff --git a/Tactical/merc entering.h b/Tactical/merc entering.h index 8043d1b1..30b80744 100644 --- a/Tactical/merc entering.h +++ b/Tactical/merc entering.h @@ -4,7 +4,7 @@ extern BOOLEAN gfIngagedInDrop; void ResetHeliSeats( ); -void AddMercToHeli( UINT8 ubID ); +void AddMercToHeli( UINT16 ubID ); // Flugente: we might want to set the helicopter dropoff point without starting it at the same time void SetHelicopterDroppoint( INT32 sGridNo ); @@ -14,7 +14,7 @@ void StartHelicopterRun(); void HandleHeliDrop( BOOLEAN fPlayer = TRUE ); -UINT8 SpawnAirDropElite( INT32 sGridNo ); +UINT16 SpawnAirDropElite( INT32 sGridNo ); void InitiateEnemyAirDropSoldiers( INT32 sGridNo ); void HandleEnemyAirdrop( ); diff --git a/Tactical/opplist.cpp b/Tactical/opplist.cpp index 8f6db0d0..85a5a752 100644 --- a/Tactical/opplist.cpp +++ b/Tactical/opplist.cpp @@ -74,16 +74,16 @@ extern void SetSoldierAniSpeed( SOLDIERTYPE *pSoldier ); // HEADROCK HAM 3.6: Moved to header //void MakeBloodcatsHostile( void ); -void OurNoise( UINT8 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubVolume, UINT8 ubNoiseType, STR16 zNoiseMessage ); -void TheirNoise(UINT8 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubVolume, UINT8 ubNoiseType, STR16 zNoiseMessage = NULL ); -void ProcessNoise(UINT8 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubBaseVolume, UINT8 ubNoiseType, STR16 zNoiseMessage = NULL ); +void OurNoise( UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubVolume, UINT8 ubNoiseType, STR16 zNoiseMessage ); +void TheirNoise(UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubVolume, UINT8 ubNoiseType, STR16 zNoiseMessage = NULL ); +void ProcessNoise(UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubBaseVolume, UINT8 ubNoiseType, STR16 zNoiseMessage = NULL ); UINT8 CalcEffVolume(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel, UINT8 ubNoiseType, UINT8 ubBaseVolume, UINT8 ubTerrType1, UINT8 ubTerrType2); -void HearNoise(SOLDIERTYPE *pSoldier, UINT8 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubVolume, UINT8 ubNoiseType, UINT8 *ubSeen); -void TellPlayerAboutNoise(SOLDIERTYPE *pSoldier, UINT8 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubVolume, UINT8 ubNoiseType, UINT8 ubNoiseDir, STR16 zNoiseMessage = NULL ); +void HearNoise(SOLDIERTYPE *pSoldier, UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubVolume, UINT8 ubNoiseType, UINT8 *ubSeen); +void TellPlayerAboutNoise(SOLDIERTYPE *pSoldier, UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubVolume, UINT8 ubNoiseType, UINT8 ubNoiseDir, STR16 zNoiseMessage = NULL ); void OurTeamSeesSomeone( SOLDIERTYPE * pSoldier, INT8 bNumReRevealed, INT8 bNumNewEnemies ); -void IncrementWatchedLoc( UINT8 ubID, INT32 sGridNo, INT8 bLevel ); -void SetWatchedLocAsUsed( UINT8 ubID, INT32 sGridNo, INT8 bLevel ); +void IncrementWatchedLoc( UINT16 ubID, INT32 sGridNo, INT8 bLevel ); +void SetWatchedLocAsUsed( UINT16 ubID, INT32 sGridNo, INT8 bLevel ); void DecayWatchedLocs( INT8 bTeam ); void HandleManNoLongerSeen( SOLDIERTYPE * pSoldier, SOLDIERTYPE * pOpponent, INT8 * pPersOL, INT8 * pbPublOL ); @@ -91,7 +91,7 @@ void HandleManNoLongerSeen( SOLDIERTYPE * pSoldier, SOLDIERTYPE * pOpponent, INT // The_Bob - real time sneaking code 01/06/09 extern void CancelItemPointer(void); extern BOOLEAN NobodyAlerted(void); -extern void ShowRadioLocator( UINT8 ubID, UINT8 ubLocatorSpeed ); +extern void ShowRadioLocator( UINT16 ubID, UINT8 ubLocatorSpeed ); //#define TESTOPPLIST // for ManSeesMan() @@ -120,7 +120,7 @@ BOOLEAN gfMikeShouldSayHi = FALSE; BOOLEAN gfMorrisShouldSayHi = FALSE; #endif -UINT8 gubBestToMakeSighting[BEST_SIGHTING_ARRAY_SIZE]; +UINT16 gubBestToMakeSighting[BEST_SIGHTING_ARRAY_SIZE]; UINT8 gubBestToMakeSightingSize = 0; //BOOLEAN gfHumanSawSomeoneInRealtime; @@ -128,11 +128,11 @@ BOOLEAN gfDelayResolvingBestSightingDueToDoor = FALSE; #define SHOULD_BECOME_HOSTILE_SIZE 32 -UINT8 gubShouldBecomeHostileOrSayQuote[ SHOULD_BECOME_HOSTILE_SIZE ]; +UINT16 gubShouldBecomeHostileOrSayQuote[ SHOULD_BECOME_HOSTILE_SIZE ]; UINT8 gubNumShouldBecomeHostileOrSayQuote; // NB this ID is set for someone opening a door -UINT8 gubInterruptProvoker = NOBODY; +UINT16 gubInterruptProvoker = NOBODY; INT8 gbPublicOpplist[MAXTEAMS][TOTAL_SOLDIERS]; INT8 gbSeenOpponents[TOTAL_SOLDIERS][TOTAL_SOLDIERS]; @@ -360,7 +360,7 @@ INT16 AdjustMaxSightRangeForEnvEffects( SOLDIERTYPE *pSoldier, INT8 bLightLevel, void SwapBestSightingPositions( INT8 bPos1, INT8 bPos2 ) { - UINT8 ubTemp; + UINT16 ubTemp; ubTemp = gubBestToMakeSighting[ bPos1 ]; gubBestToMakeSighting[ bPos1 ] = gubBestToMakeSighting[ bPos2 ]; @@ -483,7 +483,7 @@ void HandleBestSightingPositionInRealtime( void ) // This function is called for handling interrupts when opening a door in non-combat or // just sighting in non-combat, deciding who gets the first turn - UINT8 ubLoop; + UINT16 ubLoop; if ( gfDelayResolvingBestSightingDueToDoor ) { @@ -513,7 +513,7 @@ void HandleBestSightingPositionInRealtime( void ) CancelItemPointer(); // select (and center screen on) the merc who saw the enemy // HEADROCK HAM 3.6: A much-requested toggle. - if (gusSelectedSoldier != (UINT16)MercPtrs[gubBestToMakeSighting[ 0 ]]->ubID && + if (gusSelectedSoldier != MercPtrs[gubBestToMakeSighting[ 0 ]]->ubID && !gGameExternalOptions.fNoAutoFocusChangeInRealtimeSneak) SelectSoldier (MercPtrs[gubBestToMakeSighting[ 0 ]]->ubID, false, true); // if not quiet, emit a message warning the player @@ -582,7 +582,7 @@ void HandleBestSightingPositionInTurnbased( void ) { // This function is called for handling interrupts when opening a door in turnbased - UINT8 ubLoop, ubLoop2; + UINT16 ubLoop, ubLoop2; BOOLEAN fOk = FALSE; if ( gubBestToMakeSighting[ 0 ] != NOBODY ) @@ -676,9 +676,9 @@ void InitSightArrays( void ) } } -void AddToShouldBecomeHostileOrSayQuoteList( UINT8 ubID ) +void AddToShouldBecomeHostileOrSayQuoteList( UINT16 ubID ) { - UINT8 ubLoop; + UINT16 ubLoop; Assert( gubNumShouldBecomeHostileOrSayQuote < SHOULD_BECOME_HOSTILE_SIZE ); @@ -700,9 +700,9 @@ void AddToShouldBecomeHostileOrSayQuoteList( UINT8 ubID ) gubNumShouldBecomeHostileOrSayQuote++; } -UINT8 SelectSpeakerFromHostileOrSayQuoteList( void ) +UINT16 SelectSpeakerFromHostileOrSayQuoteList( void ) { - UINT8 ubProfileList[ SHOULD_BECOME_HOSTILE_SIZE ]; // NB list of merc IDs, not profiles! + UINT16 ubProfileList[ SHOULD_BECOME_HOSTILE_SIZE ]; // NB list of merc IDs, not profiles! UINT8 ubLoop, ubNumProfiles = 0; SOLDIERTYPE * pSoldier; @@ -749,7 +749,7 @@ void CheckHostileOrSayQuoteList( void ) } else { - UINT8 ubSpeaker, ubLoop; + UINT16 ubSpeaker, ubLoop; SOLDIERTYPE * pSoldier; ubSpeaker = SelectSpeakerFromHostileOrSayQuoteList(); @@ -992,11 +992,11 @@ void HandleSight(SOLDIERTYPE *pSoldier, UINT8 ubSightFlags) } -void OurTeamRadiosRandomlyAbout(UINT8 ubAbout) +void OurTeamRadiosRandomlyAbout(UINT16 ubAbout) { INT32 iLoop; // WDS - make number of mercenaries, etc. be configurable -INT8 radioCnt = 0,radioMan[CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS]; +INT16 radioCnt = 0,radioMan[CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS]; SOLDIERTYPE *pSoldier; @@ -1025,7 +1025,7 @@ INT8 radioCnt = 0,radioMan[CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS]; // if this merc is active, in this sector, and well enough to look if (pSoldier->bActive && pSoldier->bInSector && (pSoldier->stats.bLife >= OKLIFE)) // put him on our list, and increment the counter - radioMan[radioCnt++] = (INT8)iLoop; + radioMan[radioCnt++] = (INT16)iLoop; } @@ -1061,7 +1061,7 @@ INT8 radioCnt = 0,radioMan[CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS]; -INT16 TeamNoLongerSeesMan( UINT8 ubTeam, SOLDIERTYPE *pOpponent, UINT8 ubExcludeID, INT8 bIteration ) +INT16 TeamNoLongerSeesMan( UINT8 ubTeam, SOLDIERTYPE *pOpponent, UINT16 ubExcludeID, INT8 bIteration ) { UINT16 bLoop; SOLDIERTYPE *pMate; @@ -1542,7 +1542,7 @@ void TurnOffEveryonesMuzzleFlashes( void ) void TurnOffTeamsMuzzleFlashes( UINT8 ubTeam ) { - UINT8 ubLoop; + UINT16 ubLoop; SOLDIERTYPE * pSoldier; for (ubLoop = gTacticalStatus.Team[ ubTeam ].bFirstID; ubLoop <= gTacticalStatus.Team[ ubTeam ].bLastID; ubLoop++) @@ -3062,16 +3062,16 @@ void RemoveManAsTarget(SOLDIERTYPE *pSoldier) { SOLDIERTYPE *pOpponent; - UINT8 ubTarget,ubLoop; + UINT16 ubTarget,ubLoop; ubTarget = pSoldier->ubID; // clean up the public opponent lists and locations for (ubLoop = 0; ubLoop < MAXTEAMS; ubLoop++) - // never causes any additional looks - UpdatePublic(ubLoop,ubTarget,NOT_HEARD_OR_SEEN,NOWHERE,0); - + { // never causes any additional looks + UpdatePublic(ubLoop, ubTarget, NOT_HEARD_OR_SEEN, NOWHERE, 0); + } /* @@ -3142,7 +3142,7 @@ IAN COMMENTED THIS OUT MAY 1997 - DO WE NEED THIS? -void UpdatePublic(UINT8 ubTeam, UINT8 ubID, INT8 bNewOpplist, INT32 sGridNo, INT8 bLevel) +void UpdatePublic(UINT8 ubTeam, UINT16 ubID, INT8 bNewOpplist, INT32 sGridNo, INT8 bLevel) { INT32 cnt; INT8 *pbPublOL; @@ -3203,7 +3203,7 @@ void UpdatePublic(UINT8 ubTeam, UINT8 ubID, INT8 bNewOpplist, INT32 sGridNo, INT -void UpdatePersonal(SOLDIERTYPE *pSoldier, UINT8 ubID, INT8 bNewOpplist, INT32 sGridNo, INT8 bLevel) +void UpdatePersonal(SOLDIERTYPE *pSoldier, UINT16 ubID, INT8 bNewOpplist, INT32 sGridNo, INT8 bLevel) { /* #ifdef RECORDOPPLIST @@ -3464,8 +3464,8 @@ void BetweenTurnsVisibilityAdjustments(void) void SaySeenQuote( SOLDIERTYPE *pSoldier, BOOLEAN fSeenCreature, BOOLEAN fVirginSector, BOOLEAN fSeenJoey ) { SOLDIERTYPE *pTeamSoldier; - UINT8 ubNumEnemies = 0; - UINT8 ubNumAllies = 0; + UINT16 ubNumEnemies = 0; + UINT16 ubNumAllies = 0; UINT32 cnt; #ifdef JA2UB //Ja25 No meanwhiles @@ -3683,12 +3683,12 @@ void OurTeamSeesSomeone( SOLDIERTYPE * pSoldier, INT8 bNumReRevealed, INT8 bNumN } -void RadioSightings(SOLDIERTYPE *pSoldier, UINT8 ubAbout, UINT8 ubTeamToRadioTo ) +void RadioSightings(SOLDIERTYPE *pSoldier, UINT16 ubAbout, UINT8 ubTeamToRadioTo ) { SOLDIERTYPE *pOpponent; INT32 iLoop; - UINT8 start,end,revealedEnemies = 0,unknownEnemies = 0,stillUnseen=TRUE; - UINT8 scrollToGuynum = NOBODY,sightedHatedOpponent = FALSE; + UINT16 start,end,revealedEnemies = 0,unknownEnemies = 0,stillUnseen=TRUE; + UINT16 scrollToGuynum = NOBODY,sightedHatedOpponent = FALSE; //UINT8 oppIsCivilian; INT8 *pPersOL,*pbPublOL; //,dayQuote; BOOLEAN fContactSeen; @@ -5596,7 +5596,7 @@ UINT8 DoorOpeningNoise( SOLDIERTYPE *pSoldier ) return( ubDoorNoise ); } -void MakeNoise(UINT8 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubVolume, UINT8 ubNoiseType, STR16 zNoiseMessage ) +void MakeNoise(UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubVolume, UINT8 ubNoiseType, STR16 zNoiseMessage ) { EV_S_NOISE SNoise; @@ -5693,7 +5693,7 @@ void MakeNoise(UINT8 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, } -void OurNoise( UINT8 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubVolume, UINT8 ubNoiseType, STR16 zNoiseMessage ) +void OurNoise( UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubVolume, UINT8 ubNoiseType, STR16 zNoiseMessage ) { #ifdef BYPASSNOISE return; @@ -5724,7 +5724,8 @@ void OurNoise( UINT8 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, -void TheirNoise(UINT8 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubVolume, +void TheirNoise(UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, + UINT8 ubVolume, UINT8 ubNoiseType, STR16 zNoiseMessage ) { // SOLDIERTYPE *pSoldier; @@ -5784,15 +5785,18 @@ void TheirNoise(UINT8 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType // else if noiseMaker's NOBODY, no opplist changes or interrupts are possible } -void ProcessNoise(UINT8 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubBaseVolume, UINT8 ubNoiseType, STR16 zNoiseMessage ) +void ProcessNoise(UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubBaseVolume, UINT8 ubNoiseType, STR16 zNoiseMessage ) { SOLDIERTYPE *pSoldier; - UINT8 bLoop, bTeam; + UINT16 bLoop; + UINT8 bTeam; UINT8 ubLoudestEffVolume, ubEffVolume; // UINT8 ubPlayVolume; - UINT8 ubSourceTerrType, ubSource; + UINT8 ubSourceTerrType; + UINT16 ubSource; INT8 bTellPlayer = FALSE, bHeard, bSeen; - UINT8 ubHeardLoudestBy = NOBODY, ubNoiseDir = 0xff, ubLoudestNoiseDir = 0xff; + UINT16 ubHeardLoudestBy = NOBODY; + UINT8 ubNoiseDir = 0xff, ubLoudestNoiseDir = 0xff; #ifdef RECORDOPPLIST @@ -6425,8 +6429,8 @@ UINT8 CalcEffVolume(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel, UINT8 ubN -void HearNoise(SOLDIERTYPE *pSoldier, UINT8 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubVolume, - UINT8 ubNoiseType, UINT8 *ubSeen) +void HearNoise(SOLDIERTYPE *pSoldier, UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, + UINT8 ubVolume, UINT8 ubNoiseType, UINT8 *ubSeen) { INT16 sNoiseX, sNoiseY; INT8 bHadToTurn = FALSE, bSourceSeen = FALSE; @@ -6781,7 +6785,7 @@ void HearNoise(SOLDIERTYPE *pSoldier, UINT8 ubNoiseMaker, INT32 sGridNo, INT8 bL plan_lib->update_plan(pSoldier->bAIIndex, pSoldier, ai_input); } -void TellPlayerAboutNoise( SOLDIERTYPE *pSoldier, UINT8 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubVolume, UINT8 ubNoiseType, UINT8 ubNoiseDir, STR16 zNoiseMessage ) +void TellPlayerAboutNoise( SOLDIERTYPE *pSoldier, UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubVolume, UINT8 ubNoiseType, UINT8 ubNoiseDir, STR16 zNoiseMessage ) { UINT8 ubVolumeIndex; @@ -7509,10 +7513,10 @@ void NoticeUnseenAttacker( SOLDIERTYPE * pAttacker, SOLDIERTYPE * pDefender, INT void CheckForAlertWhenEnemyDies( SOLDIERTYPE * pDyingSoldier ) { - UINT8 ubID; - SOLDIERTYPE * pSoldier; - INT8 bDir; - INT16 sDistAway, sDistVisible; + UINT16 ubID; + SOLDIERTYPE * pSoldier; + INT8 bDir; + INT16 sDistAway, sDistVisible; for ( ubID = gTacticalStatus.Team[ pDyingSoldier->bTeam ].bFirstID; ubID <= gTacticalStatus.Team[ pDyingSoldier->bTeam ].bLastID; ubID++ ) { @@ -7547,8 +7551,8 @@ void CheckForAlertWhenEnemyDies( SOLDIERTYPE * pDyingSoldier ) BOOLEAN ArmyKnowsOfPlayersPresence( void ) { - UINT8 ubID; - SOLDIERTYPE * pSoldier; + UINT16 ubID; + SOLDIERTYPE * pSoldier; // if anyone is still left... if (gTacticalStatus.Team[ ENEMY_TEAM ].bTeamActive && gTacticalStatus.Team[ ENEMY_TEAM ].bMenInSector > 0 ) @@ -7568,7 +7572,7 @@ BOOLEAN ArmyKnowsOfPlayersPresence( void ) BOOLEAN MercSeesCreature( SOLDIERTYPE * pSoldier ) { - UINT8 ubID; + UINT16 ubID; if (pSoldier->aiData.bOppCnt > 0) { @@ -7584,7 +7588,7 @@ BOOLEAN MercSeesCreature( SOLDIERTYPE * pSoldier ) } -INT8 FindUnusedWatchedLoc( UINT8 ubID ) +INT8 FindUnusedWatchedLoc( UINT16 ubID ) { INT8 bLoop; @@ -7601,7 +7605,7 @@ INT8 FindUnusedWatchedLoc( UINT8 ubID ) return( -1 ); } -INT8 FindWatchedLocWithLessThanXPointsLeft( UINT8 ubID, UINT8 ubPointLimit ) +INT8 FindWatchedLocWithLessThanXPointsLeft( UINT16 ubID, UINT8 ubPointLimit ) { INT8 bLoop; @@ -7615,7 +7619,7 @@ INT8 FindWatchedLocWithLessThanXPointsLeft( UINT8 ubID, UINT8 ubPointLimit ) return( -1 ); } -INT8 FindWatchedLoc( UINT8 ubID, INT32 sGridNo, INT8 bLevel ) +INT8 FindWatchedLoc( UINT16 ubID, INT32 sGridNo, INT8 bLevel ) { INT8 bLoop; @@ -7632,7 +7636,7 @@ INT8 FindWatchedLoc( UINT8 ubID, INT32 sGridNo, INT8 bLevel ) return( -1 ); } -INT8 GetWatchedLocPoints( UINT8 ubID, INT32 sGridNo, INT8 bLevel ) +INT8 GetWatchedLocPoints( UINT16 ubID, INT32 sGridNo, INT8 bLevel ) { INT8 bLoc; @@ -7657,7 +7661,7 @@ INT8 GetWatchedLocPoints( UINT8 ubID, INT32 sGridNo, INT8 bLevel ) } -INT8 GetHighestVisibleWatchedLoc( UINT8 ubID ) +INT8 GetHighestVisibleWatchedLoc( UINT16 ubID ) { INT8 bLoop; INT8 bHighestLoc = -1; @@ -7678,7 +7682,7 @@ INT8 GetHighestVisibleWatchedLoc( UINT8 ubID ) return( bHighestLoc ); } -INT8 GetHighestWatchedLocPoints( UINT8 ubID ) +INT8 GetHighestWatchedLocPoints( UINT16 ubID ) { INT8 bLoop; INT8 bHighestPoints = 0; @@ -7694,10 +7698,10 @@ INT8 GetHighestWatchedLocPoints( UINT8 ubID ) } -void CommunicateWatchedLoc( UINT8 ubID, INT32 sGridNo, INT8 bLevel, UINT8 ubPoints ) +void CommunicateWatchedLoc( UINT16 ubID, INT32 sGridNo, INT8 bLevel, UINT8 ubPoints ) { - UINT8 ubLoop; - INT8 bTeam, bLoopPoint, bPoint; + UINT16 ubLoop; + INT8 bTeam, bLoopPoint, bPoint; bTeam = MercPtrs[ ubID ]->bTeam; @@ -7739,7 +7743,7 @@ void CommunicateWatchedLoc( UINT8 ubID, INT32 sGridNo, INT8 bLevel, UINT8 ubPoin } -void IncrementWatchedLoc( UINT8 ubID, INT32 sGridNo, INT8 bLevel ) +void IncrementWatchedLoc( UINT16 ubID, INT32 sGridNo, INT8 bLevel ) { INT8 bPoint; @@ -7778,7 +7782,7 @@ void IncrementWatchedLoc( UINT8 ubID, INT32 sGridNo, INT8 bLevel ) } } -void SetWatchedLocAsUsed( UINT8 ubID, INT32 sGridNo, INT8 bLevel ) +void SetWatchedLocAsUsed( UINT16 ubID, INT32 sGridNo, INT8 bLevel ) { INT8 bPoint; @@ -7792,7 +7796,7 @@ void SetWatchedLocAsUsed( UINT8 ubID, INT32 sGridNo, INT8 bLevel ) BOOLEAN WatchedLocLocationIsEmpty( INT32 sGridNo, INT8 bLevel, INT8 bTeam ) { // look to see if there is anyone near the watched loc who is not on this team - UINT8 ubID; + UINT16 ubID; INT32 sTempGridNo; INT16 sX, sY; @@ -7817,7 +7821,7 @@ BOOLEAN WatchedLocLocationIsEmpty( INT32 sGridNo, INT8 bLevel, INT8 bTeam ) void DecayWatchedLocs( INT8 bTeam ) { - UINT8 cnt, cnt2; + UINT16 cnt, cnt2; // loop through all soldiers for ( cnt = gTacticalStatus.Team[ bTeam ].bFirstID; cnt <= gTacticalStatus.Team[ bTeam ].bLastID; cnt++ ) diff --git a/Tactical/opplist.h b/Tactical/opplist.h index 9330b7e6..b8791758 100644 --- a/Tactical/opplist.h +++ b/Tactical/opplist.h @@ -117,7 +117,7 @@ void ManSeesMan(SOLDIERTYPE *pSoldier, SOLDIERTYPE *pOpponent, INT32 sOppGridNo, void DecideTrueVisibility(SOLDIERTYPE *pSoldier, UINT8 ubLocate); void AddOneOpponent(SOLDIERTYPE *pSoldier); void RemoveOneOpponent(SOLDIERTYPE *pSoldier); -void UpdatePersonal(SOLDIERTYPE *pSoldier, UINT8 ubID, INT8 bNewOpplist, INT32 sGridNo, INT8 bLevel); +void UpdatePersonal(SOLDIERTYPE *pSoldier, UINT16 ubID, INT8 bNewOpplist, INT32 sGridNo, INT8 bLevel); INT16 MaxNormalDistanceVisible( void ); INT16 DistanceVisible( SOLDIERTYPE *pSoldier, INT8 bFacingDir, INT8 bSubjectDir, INT32 sSubjectGridNo, INT8 bLevel, const BOOLEAN& isCowering, const UINT8& tunnelVision); void ResetLastKnownLocs(SOLDIERTYPE *ptr); @@ -129,9 +129,9 @@ void InitOpponentKnowledgeSystem(void); void InitSoldierOppList(SOLDIERTYPE *pSoldier); void BetweenTurnsVisibilityAdjustments(void); void RemoveManAsTarget(SOLDIERTYPE *pSoldier); -void UpdatePublic(UINT8 ubTeam, UINT8 ubID, INT8 bNewOpplist, INT32 sGridNo, INT8 bLevel ); -void RadioSightings(SOLDIERTYPE *pSoldier, UINT8 ubAbout, UINT8 ubTeamToRadioTo ); -void OurTeamRadiosRandomlyAbout(UINT8 ubAbout); +void UpdatePublic(UINT8 ubTeam, UINT16 ubID, INT8 bNewOpplist, INT32 sGridNo, INT8 bLevel ); +void RadioSightings(SOLDIERTYPE *pSoldier, UINT16 ubAbout, UINT8 ubTeamToRadioTo ); +void OurTeamRadiosRandomlyAbout(UINT16 ubAbout); void DebugSoldierPage1( ); void DebugSoldierPage2( ); void DebugSoldierPage3( ); @@ -139,8 +139,8 @@ void DebugSoldierPage4( ); UINT8 MovementNoise( SOLDIERTYPE *pSoldier ); UINT8 DoorOpeningNoise( SOLDIERTYPE *pSoldier ); -void MakeNoise(UINT8 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubVolume, UINT8 ubNoiseType, STR16 zNoiseMessage = NULL ); -void OurNoise( UINT8 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubVolume, UINT8 ubNoiseType, STR16 zNoiseMessage = NULL ); +void MakeNoise(UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubVolume, UINT8 ubNoiseType, STR16 zNoiseMessage = NULL ); +void OurNoise( UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubVolume, UINT8 ubNoiseType, STR16 zNoiseMessage = NULL ); void ResolveInterruptsVs( SOLDIERTYPE * pSoldier, UINT8 ubInterruptType); @@ -151,9 +151,9 @@ void NoticeUnseenAttacker( SOLDIERTYPE * pAttacker, SOLDIERTYPE * pDefender, INT BOOLEAN MercSeesCreature( SOLDIERTYPE * pSoldier ); -INT8 GetWatchedLocPoints( UINT8 ubID, INT32 sGridNo, INT8 bLevel ); -INT8 GetHighestVisibleWatchedLoc( UINT8 ubID ); -INT8 GetHighestWatchedLocPoints( UINT8 ubID ); +INT8 GetWatchedLocPoints( UINT16 ubID, INT32 sGridNo, INT8 bLevel ); +INT8 GetHighestVisibleWatchedLoc( UINT16 ubID ); +INT8 GetHighestWatchedLocPoints( UINT16 ubID ); void TurnOffEveryonesMuzzleFlashes( void ); void TurnOffTeamsMuzzleFlashes( UINT8 ubTeam ); @@ -164,7 +164,7 @@ void CheckHostileOrSayQuoteList( void ); void InitOpplistForDoorOpening( void ); UINT8 DoorOpeningNoise( SOLDIERTYPE * pSoldier ); -void AddToShouldBecomeHostileOrSayQuoteList( UINT8 ubID ); +void AddToShouldBecomeHostileOrSayQuoteList( UINT16 ubID ); //extern INT8 gbLightSighting[1][16]; diff --git a/TacticalAI/AIInternals.h b/TacticalAI/AIInternals.h index cc7afa94..4373a496 100644 --- a/TacticalAI/AIInternals.h +++ b/TacticalAI/AIInternals.h @@ -131,7 +131,7 @@ class ATTACKTYPE { public: UINT8 ubPossible; // is this attack form possible - UINT8 ubOpponent; // which soldier is the victim + UINT16 ubOpponent; // which soldier is the victim //CHANGED STRUCTURE VALUE BY GOTTHARD 7/14/07 INT16 ubAimTime; // how many extra APs to spend on aiming INT16 ubChanceToReallyHit; // chance to hit * chance to get through cover @@ -213,7 +213,7 @@ void CreatureDecideAlertStatus( SOLDIERTYPE *pCreature ); // sevenfm: void CheckTossSelfSmoke(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow); void CheckTossFriendSmoke(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow); -void CheckTossAt(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow, INT32 sTargetSpot, INT8 bTargetLevel, UINT8 ubOpponentID); +void CheckTossAt(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow, INT32 sTargetSpot, INT8 bTargetLevel, UINT16 ubOpponentID); INT32 FindTossSpotInDirection(INT32 sSpot, INT8 bLevel, INT32 sTargetSpot, BOOLEAN fCheckAdjacentDirections, BOOLEAN fCheckFarther); void CheckTossGrenadeAt(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow, INT32 sTargetSpot, INT8 bTargetLevel, UINT8 ubGrenadeType); @@ -319,7 +319,7 @@ BOOLEAN GetBestAoEGridNo(SOLDIERTYPE *pSoldier, INT32* pGridNo, INT16 aRadius, U // Get the ID of the farthest opponent we can see, with an optional minimum range // puID - ID of the farthest opponent pSoldier can see // sRange - only return true and give an idea if opponent found is further away than this -BOOLEAN GetFarthestOpponent(SOLDIERTYPE *pSoldier, UINT8* puID, INT16 sRange); +BOOLEAN GetFarthestOpponent(SOLDIERTYPE *pSoldier, UINT16 * puID, INT16 sRange); // are there more allies than friends in adjacent sectors? BOOLEAN MoreFriendsThanEnemiesinNearbysectors(UINT8 ausTeam, INT16 aX, INT16 aY, INT8 aZ); \ No newline at end of file diff --git a/TacticalAI/AIList.cpp b/TacticalAI/AIList.cpp index 8dc6f568..85d12220 100644 --- a/TacticalAI/AIList.cpp +++ b/TacticalAI/AIList.cpp @@ -28,11 +28,11 @@ AILIST gAIList[ AI_LIST_SIZE ]; AILIST * gpFirstAIListEntry = NULL; -BOOLEAN SatisfiesAIListConditions( SOLDIERTYPE * pSoldier, UINT8 * pubDoneCount, BOOLEAN fDoRandomChecks ); +BOOLEAN SatisfiesAIListConditions( SOLDIERTYPE * pSoldier, UINT16 * pubDoneCount, BOOLEAN fDoRandomChecks ); void ClearAIList( void ) { - UINT8 ubLoop; + UINT16 ubLoop; for ( ubLoop = 0; ubLoop < AI_LIST_SIZE; ubLoop++ ) { @@ -50,9 +50,9 @@ void DeleteAIListEntry( AILIST * pEntry ) pEntry->pNext = NULL; } -UINT8 FindEmptyAIListEntry( void ) +UINT16 FindEmptyAIListEntry( void ) { - UINT8 ubLoop; + UINT16 ubLoop; for ( ubLoop = 0; ubLoop < AI_LIST_SIZE; ubLoop++ ) { @@ -65,7 +65,7 @@ UINT8 FindEmptyAIListEntry( void ) return( AI_LIST_SIZE ); } -AILIST * CreateNewAIListEntry( UINT8 ubNewEntry, UINT8 ubID, INT8 bPriority ) +AILIST * CreateNewAIListEntry( UINT16 ubNewEntry, UINT16 ubID, INT8 bPriority ) { gAIList[ ubNewEntry ].ubID = ubID; gAIList[ ubNewEntry ].bPriority = bPriority; @@ -73,10 +73,10 @@ AILIST * CreateNewAIListEntry( UINT8 ubNewEntry, UINT8 ubID, INT8 bPriority ) return( &(gAIList[ ubNewEntry ]) ); } -UINT8 RemoveFirstAIListEntry( void ) +UINT16 RemoveFirstAIListEntry( void ) { - AILIST * pOldFirstEntry; - UINT8 ubID; + AILIST *pOldFirstEntry; + UINT16 ubID; while ( gpFirstAIListEntry != NULL) { @@ -98,7 +98,7 @@ UINT8 RemoveFirstAIListEntry( void ) return( NOBODY ); } -void RemoveAIListEntryForID( UINT8 ubID ) +void RemoveAIListEntryForID( UINT16 ubID ) { AILIST * pEntry; AILIST * pPrevEntry; @@ -127,9 +127,9 @@ void RemoveAIListEntryForID( UINT8 ubID ) // none found, that's okay } -BOOLEAN InsertIntoAIList( UINT8 ubID, INT8 bPriority ) +BOOLEAN InsertIntoAIList( UINT16 ubID, INT8 bPriority ) { - UINT8 ubNewEntry; + UINT16 ubNewEntry; AILIST * pEntry, * pNewEntry, * pPrevEntry = NULL; ubNewEntry = FindEmptyAIListEntry(); @@ -182,7 +182,7 @@ BOOLEAN InsertIntoAIList( UINT8 ubID, INT8 bPriority ) return( FALSE ); } -BOOLEAN SatisfiesAIListConditions( SOLDIERTYPE * pSoldier, UINT8 * pubDoneCount, BOOLEAN fDoRandomChecks ) +BOOLEAN SatisfiesAIListConditions( SOLDIERTYPE * pSoldier, UINT16 * pubDoneCount, BOOLEAN fDoRandomChecks ) { if ( (gTacticalStatus.bBoxingState == BOXING) && !(pSoldier->flags.uiStatusFlags & SOLDIER_BOXER) ) { @@ -280,12 +280,12 @@ BOOLEAN SatisfiesAIListConditions( SOLDIERTYPE * pSoldier, UINT8 * pubDoneCount, return( TRUE ); } -BOOLEAN MoveToFrontOfAIList( UINT8 ubID ) +BOOLEAN MoveToFrontOfAIList( UINT16 ubID ) { // we'll have to fake this guy's alert status (in the list) to be the same as the current // front of the list INT8 bPriority; - UINT8 ubNewEntry; + UINT16 ubNewEntry; AILIST * pNewEntry; if ( !SatisfiesAIListConditions( MercPtrs[ ubID ], NULL, FALSE ) ) @@ -320,8 +320,8 @@ BOOLEAN BuildAIListForTeam( INT8 bTeam ) BOOLEAN fInsertRet; SOLDIERTYPE * pSoldier; BOOLEAN fRet = FALSE; - UINT8 ubCount = 0; - UINT8 ubDoneCount = 0; + UINT16 ubCount = 0; + UINT16 ubDoneCount = 0; INT8 bPriority; // this team is being given control so reset their muzzle flashes diff --git a/TacticalAI/AIList.h b/TacticalAI/AIList.h index d67bfc6d..bb44ac29 100644 --- a/TacticalAI/AIList.h +++ b/TacticalAI/AIList.h @@ -2,7 +2,7 @@ typedef struct AILIST { - UINT8 ubID; + UINT16 ubID; INT8 bPriority; UINT8 ubUnused; struct AILIST * pNext; @@ -11,8 +11,8 @@ typedef struct AILIST #define MAX_AI_PRIORITY 100 extern void ClearAIList( void ); -extern AILIST * CreateNewAIListEntry( UINT8 ubNewEntry, UINT8 ubID, INT8 bAlertStatus ); -extern BOOLEAN InsertIntoAIList( UINT8 ubID, INT8 bAlertStatus ); -extern UINT8 RemoveFirstAIListEntry( void ); +extern AILIST * CreateNewAIListEntry( UINT16 ubNewEntry, UINT16 ubID, INT8 bAlertStatus ); +extern BOOLEAN InsertIntoAIList( UINT16 ubID, INT8 bAlertStatus ); +extern UINT16 RemoveFirstAIListEntry( void ); extern BOOLEAN BuildAIListForTeam( INT8 bTeam ); -extern BOOLEAN MoveToFrontOfAIList( UINT8 ubID ); +extern BOOLEAN MoveToFrontOfAIList( UINT16 ubID ); diff --git a/TacticalAI/AIMain.cpp b/TacticalAI/AIMain.cpp index 50342612..075021ef 100644 --- a/TacticalAI/AIMain.cpp +++ b/TacticalAI/AIMain.cpp @@ -402,7 +402,7 @@ BOOLEAN InitAI( void ) // remove all individual files CHAR8 buf[1024]; - for (UINT8 cnt = 0; cnt < TOTAL_SOLDIERS; cnt++) + for (UINT16 cnt = 0; cnt < TOTAL_SOLDIERS; cnt++) { sprintf(buf, "Logs\\AI_Decisions [%d].txt", cnt); remove(buf); @@ -883,7 +883,7 @@ void HandleSoldierAI( SOLDIERTYPE *pSoldier ) // FIXME - this function is named void EndAIGuysTurn( SOLDIERTYPE *pSoldier ) { - UINT8 ubID; + UINT16 ubID; if (gfTurnBasedAI) { @@ -1174,12 +1174,12 @@ INT32 FindAdjacentSpotBeside(SOLDIERTYPE *pSoldier, INT32 sGridNo) return(sCheapestDest); } -UINT8 GetMostThreateningOpponent( SOLDIERTYPE *pSoldier ) +UINT16 GetMostThreateningOpponent( SOLDIERTYPE *pSoldier ) { UINT32 uiLoop; INT32 iThreatVal,iMinThreat = 30000; SOLDIERTYPE *pTargetSoldier; - UINT8 ubTargetSoldier = NOBODY; + UINT16 ubTargetSoldier = NOBODY; // Loop through all mercs @@ -1263,7 +1263,7 @@ void FreeUpNPCFromPendingAction( SOLDIERTYPE *pSoldier ) } } -void FreeUpNPCFromAttacking(UINT8 ubID) +void FreeUpNPCFromAttacking(UINT16 ubID) { SOLDIERTYPE *pSoldier; @@ -2659,7 +2659,7 @@ INT8 ExecuteAction(SOLDIERTYPE *pSoldier) case AI_ACTION_USE_SKILL: { - UINT8 ubID = WhoIsThere2( pSoldier->aiData.usActionData, 0 ); + UINT16 ubID = WhoIsThere2( pSoldier->aiData.usActionData, 0 ); BOOLEAN result = pSoldier->UseSkill(pSoldier->usAISkillUse, pSoldier->aiData.usActionData, ubID); diff --git a/TacticalAI/AIUtils.cpp b/TacticalAI/AIUtils.cpp index c577b762..ff6ceda0 100644 --- a/TacticalAI/AIUtils.cpp +++ b/TacticalAI/AIUtils.cpp @@ -837,7 +837,7 @@ INT16 RandomFriendWithin(SOLDIERTYPE *pSoldier) { UINT32 uiLoop; UINT16 usMaxDist; - UINT8 ubFriendCount, ubFriendIDs[MAXMERCS], ubFriendID; + UINT16 ubFriendCount, ubFriendIDs[MAXMERCS], ubFriendID; UINT8 ubDirection; UINT8 ubDirsLeft; BOOLEAN fDirChecked[8]; @@ -1385,7 +1385,7 @@ INT32 ClosestReachableDisturbance(SOLDIERTYPE *pSoldier, BOOLEAN * pfChangeLevel } -INT32 ClosestKnownOpponent(SOLDIERTYPE *pSoldier, INT32 * psGridNo, INT8 * pbLevel, UINT8 *pubOpponentID) +INT32 ClosestKnownOpponent(SOLDIERTYPE *pSoldier, INT32 * psGridNo, INT8 * pbLevel, UINT16 * pubOpponentID) { INT32 *psLastLoc,sGridNo, sClosestOpponent = NOWHERE; UINT32 uiLoop; @@ -1710,7 +1710,7 @@ INT32 ClosestPC( SOLDIERTYPE *pSoldier, INT32 * psDistance ) // NOTE: skips EPCs! - UINT8 ubLoop; + UINT16 ubLoop; SOLDIERTYPE *pTargetSoldier; INT32 sMinDist = WORLD_MAX; INT32 sDist; @@ -1769,7 +1769,7 @@ INT32 ClosestUnDisguisedPC( SOLDIERTYPE *pSoldier, INT32 * psDistance ) // used by NPCs... find the closest PC // NOTE: skips EPCs! - UINT8 ubLoop; + UINT16 ubLoop; SOLDIERTYPE *pTargetSoldier; INT32 sMinDist = WORLD_MAX; INT32 sDist; @@ -2028,7 +2028,7 @@ INT16 EstimatePathCostToLocation( SOLDIERTYPE * pSoldier, INT32 sDestGridNo, INT BOOLEAN GuySawEnemy( SOLDIERTYPE * pSoldier, UINT8 ubMax ) { UINT8 ubTeamLoop; - UINT8 ubIDLoop; + UINT16 ubIDLoop; SOLDIERTYPE *pOpponent; for ( ubTeamLoop = 0; ubTeamLoop < MAXTEAMS; ++ubTeamLoop ) @@ -2181,7 +2181,7 @@ INT32 ClosestReachableFriendInTrouble(SOLDIERTYPE *pSoldier, BOOLEAN * pfClimbin INT16 DistanceToClosestFriend( SOLDIERTYPE * pSoldier ) { // find the distance to the closest person on the same team - UINT8 ubLoop; + UINT16 ubLoop; SOLDIERTYPE *pTargetSoldier; INT16 sMinDist = 1000; INT16 sDist; @@ -3452,9 +3452,9 @@ INT32 CalcStraightThreatValue( SOLDIERTYPE *pEnemy ) } // Flugente: get the id of the closest soldier with a specific flag that we can currently see -UINT8 GetClosestFlaggedSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam, UINT32 aFlag, BOOLEAN fCheckSight ) +UINT16 GetClosestFlaggedSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam, UINT32 aFlag, BOOLEAN fCheckSight ) { - UINT8 id = NOBODY; + UINT16 id = NOBODY; UINT32 uiLoop; SOLDIERTYPE * pFriend; INT16 range = aRange; @@ -3505,9 +3505,9 @@ UINT8 GetClosestFlaggedSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 au } // get the id of the closest soldier (closer than x tiles) of a specific team that is wounded that we can currently see -UINT8 GetClosestWoundedSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam ) +UINT16 GetClosestWoundedSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam ) { - UINT8 id = NOBODY; + UINT16 id = NOBODY; UINT32 uiLoop; SOLDIERTYPE * pFriend; INT16 range = aRange; @@ -3554,9 +3554,9 @@ UINT8 GetClosestWoundedSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 au } // get the id of the closest medic (closer than x tiles) of a specific team -UINT8 GetClosestMedicSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam ) +UINT16 GetClosestMedicSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam ) { - UINT8 id = NOBODY; + UINT16 id = NOBODY; UINT32 uiLoop; SOLDIERTYPE * pFriend; INT16 range = aRange; @@ -3618,18 +3618,18 @@ INT16 MaxNormalVisionDistance( void ) // sevenfm: check friendly soldiers between me and noise gridno // count only friends that are active and not stationary/onguard/sniper -UINT8 CountFriendsInDirection( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo ) +UINT16 CountFriendsInDirection( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo ) { SOLDIERTYPE * pFriend; UINT8 ubFriendDir, ubMyDir; - UINT8 ubFriends = 0; + UINT16 ubFriends = 0; CHECKF(pSoldier); ubMyDir = atan8(CenterX(sTargetGridNo),CenterY(sTargetGridNo),CenterX(pSoldier->sGridNo),CenterY(pSoldier->sGridNo)); // Run through each friendly. - for ( UINT8 iCounter = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID ; iCounter <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID ; iCounter ++ ) + for ( UINT16 iCounter = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID ; iCounter <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID ; iCounter ++ ) { pFriend = MercPtrs[ iCounter ]; ubFriendDir = atan8(CenterX(sTargetGridNo),CenterY(sTargetGridNo),CenterX(pFriend->sGridNo),CenterY(pFriend->sGridNo)); @@ -3651,17 +3651,17 @@ UINT8 CountFriendsInDirection( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo ) } // sevenfm: count nearby friend soldiers -UINT8 CountNearbyFriends( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubDistance ) +UINT16 CountNearbyFriends( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubDistance ) { SOLDIERTYPE * pFriend; - UINT8 ubFriendCount = 0; + UINT16 ubFriendCount = 0; // safety check if( !pSoldier ) return 0; // Run through each friendly. - for ( UINT8 iCounter = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID ; iCounter <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID ; iCounter ++ ) + for ( UINT16 iCounter = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID ; iCounter <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID ; iCounter ++ ) { pFriend = MercPtrs[ iCounter ]; // Make sure that character is alive, not too shocked, and conscious, and of higher experience level @@ -3970,7 +3970,7 @@ BOOLEAN WeAttack(INT8 bTeam) SOLDIERTYPE * pFriend; // Run through each friendly. - for (UINT8 iCounter = gTacticalStatus.Team[bTeam].bFirstID; iCounter <= gTacticalStatus.Team[bTeam].bLastID; iCounter++) + for (UINT16 iCounter = gTacticalStatus.Team[bTeam].bFirstID; iCounter <= gTacticalStatus.Team[bTeam].bLastID; iCounter++) { pFriend = MercPtrs[iCounter]; @@ -3994,7 +3994,7 @@ UINT8 CountNearbyFriendsLastAttackHit( SOLDIERTYPE *pSoldier, INT32 sGridNo, UIN UINT8 ubFriendCount = 0; // Run through each friendly. - for ( UINT8 iCounter = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID ; iCounter <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID ; iCounter ++ ) + for ( UINT16 iCounter = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID ; iCounter <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID ; iCounter ++ ) { pFriend = MercPtrs[ iCounter ]; @@ -4034,7 +4034,7 @@ UINT8 CountFriendsFlankSameSpot(SOLDIERTYPE *pSoldier, INT32 sSpot) } // Run through each friendly. - for (UINT8 iCounter = gTacticalStatus.Team[pSoldier->bTeam].bFirstID; iCounter <= gTacticalStatus.Team[pSoldier->bTeam].bLastID; iCounter++) + for (UINT16 iCounter = gTacticalStatus.Team[pSoldier->bTeam].bFirstID; iCounter <= gTacticalStatus.Team[pSoldier->bTeam].bLastID; iCounter++) { pFriend = MercPtrs[iCounter]; @@ -4116,7 +4116,7 @@ UINT8 CountFriendsBlack( SOLDIERTYPE *pSoldier, INT32 sClosestOpponent ) } // Run through each friendly. - for ( UINT8 iCounter = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID ; iCounter <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID ; iCounter ++ ) + for ( UINT16 iCounter = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID ; iCounter <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID ; iCounter ++ ) { pFriend = MercPtrs[ iCounter ]; @@ -4145,17 +4145,17 @@ UINT8 CountFriendsBlack( SOLDIERTYPE *pSoldier, INT32 sClosestOpponent ) } // count friends under fire or with shock -UINT8 CountTeamUnderAttack(INT8 bTeam, INT32 sGridNo, INT16 sDistance) +UINT16 CountTeamUnderAttack(INT8 bTeam, INT32 sGridNo, INT16 sDistance) { SOLDIERTYPE * pFriend; - UINT8 ubFriendCount = 0; + UINT16 ubFriendCount = 0; // safety check if (bTeam >= MAXTEAMS) return 0; // Run through each friendly. - for (UINT8 iCounter = gTacticalStatus.Team[bTeam].bFirstID; iCounter <= gTacticalStatus.Team[bTeam].bLastID; iCounter++) + for (UINT16 iCounter = gTacticalStatus.Team[bTeam].bFirstID; iCounter <= gTacticalStatus.Team[bTeam].bLastID; iCounter++) { pFriend = MercPtrs[iCounter]; @@ -4397,10 +4397,10 @@ BOOLEAN EnemySeenSoldierRecently( SOLDIERTYPE *pSoldier, UINT8 ubMax ) return FALSE; } -UINT8 CountTeamSeeSoldier( INT8 bTeam, SOLDIERTYPE *pSoldier ) +UINT16 CountTeamSeeSoldier( INT8 bTeam, SOLDIERTYPE *pSoldier ) { SOLDIERTYPE *pFriend; - UINT8 ubFriends = 0; + UINT16 ubFriends = 0; CHECKF( pSoldier ); @@ -4846,13 +4846,13 @@ BOOLEAN AnyCoverFromSpot( INT32 sSpot, INT8 bLevel, INT32 sThreatLoc, INT8 bThre return FALSE; } -UINT8 CountSeenEnemiesLastTurn( SOLDIERTYPE* pSoldier ) +UINT16 CountSeenEnemiesLastTurn( SOLDIERTYPE* pSoldier ) { CHECKF(pSoldier); UINT8 ubTeamLoop; - UINT8 ubIDLoop; - UINT8 cnt = 0; + UINT16 ubIDLoop; + UINT16 cnt = 0; for( ubTeamLoop = 0; ubTeamLoop < MAXTEAMS; ubTeamLoop++ ) { @@ -5677,7 +5677,7 @@ BOOLEAN DuskLight(void) return FALSE; } -BOOLEAN UsePersonalKnowledge(SOLDIERTYPE *pSoldier, UINT8 ubOpponentID) +BOOLEAN UsePersonalKnowledge(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID) { INT8 bPersonalKnowledge; INT8 bPublicKnowledge; @@ -5701,7 +5701,7 @@ BOOLEAN UsePersonalKnowledge(SOLDIERTYPE *pSoldier, UINT8 ubOpponentID) return FALSE; } -INT8 Knowledge(SOLDIERTYPE *pSoldier, UINT8 ubOpponentID) +INT8 Knowledge(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID) { if (!pSoldier || ubOpponentID == NOBODY) { @@ -5716,7 +5716,7 @@ INT8 Knowledge(SOLDIERTYPE *pSoldier, UINT8 ubOpponentID) return PublicKnowledge(pSoldier->bTeam, ubOpponentID); } -INT32 KnownLocation(SOLDIERTYPE *pSoldier, UINT8 ubOpponentID) +INT32 KnownLocation(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID) { if (!pSoldier || ubOpponentID == NOBODY) { @@ -5731,7 +5731,7 @@ INT32 KnownLocation(SOLDIERTYPE *pSoldier, UINT8 ubOpponentID) return KnownPublicLocation(pSoldier->bTeam, ubOpponentID); } -INT8 KnownLevel(SOLDIERTYPE *pSoldier, UINT8 ubOpponentID) +INT8 KnownLevel(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID) { if (!pSoldier || ubOpponentID == NOBODY) { @@ -5746,7 +5746,7 @@ INT8 KnownLevel(SOLDIERTYPE *pSoldier, UINT8 ubOpponentID) return KnownPublicLevel(pSoldier->bTeam, ubOpponentID); } -INT8 PersonalKnowledge(SOLDIERTYPE *pSoldier, UINT8 ubOpponentID) +INT8 PersonalKnowledge(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID) { if (!pSoldier || ubOpponentID == NOBODY) { @@ -5756,7 +5756,7 @@ INT8 PersonalKnowledge(SOLDIERTYPE *pSoldier, UINT8 ubOpponentID) return pSoldier->aiData.bOppList[ubOpponentID]; } -INT32 KnownPersonalLocation(SOLDIERTYPE *pSoldier, UINT8 ubOpponentID) +INT32 KnownPersonalLocation(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID) { if (!pSoldier || ubOpponentID == NOBODY) { @@ -5770,7 +5770,7 @@ INT32 KnownPersonalLocation(SOLDIERTYPE *pSoldier, UINT8 ubOpponentID) return gsLastKnownOppLoc[pSoldier->ubID][ubOpponentID]; } -INT8 KnownPersonalLevel(SOLDIERTYPE *pSoldier, UINT8 ubOpponentID) +INT8 KnownPersonalLevel(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID) { if (!pSoldier || ubOpponentID == NOBODY) { @@ -5780,7 +5780,7 @@ INT8 KnownPersonalLevel(SOLDIERTYPE *pSoldier, UINT8 ubOpponentID) return gbLastKnownOppLevel[pSoldier->ubID][ubOpponentID]; } -INT8 PublicKnowledge(UINT8 bTeam, UINT8 ubOpponentID) +INT8 PublicKnowledge(UINT8 bTeam, UINT16 ubOpponentID) { if (bTeam >= MAXTEAMS || ubOpponentID == NOBODY) { @@ -5790,7 +5790,7 @@ INT8 PublicKnowledge(UINT8 bTeam, UINT8 ubOpponentID) return gbPublicOpplist[bTeam][ubOpponentID]; } -INT32 KnownPublicLocation(UINT8 bTeam, UINT8 ubOpponentID) +INT32 KnownPublicLocation(UINT8 bTeam, UINT16 ubOpponentID) { if (bTeam >= MAXTEAMS || ubOpponentID == NOBODY) { @@ -5804,7 +5804,7 @@ INT32 KnownPublicLocation(UINT8 bTeam, UINT8 ubOpponentID) return gsPublicLastKnownOppLoc[bTeam][ubOpponentID]; } -INT8 KnownPublicLevel(UINT8 bTeam, UINT8 ubOpponentID) +INT8 KnownPublicLevel(UINT8 bTeam, UINT16 ubOpponentID) { if (bTeam >= MAXTEAMS || ubOpponentID == NOBODY) { @@ -5945,14 +5945,14 @@ INT32 RandomizeOpponentLocation(INT32 sSpot, SOLDIERTYPE *pOpponent, INT16 sMaxD } // first call PrepareThreatlist to make threat list -UINT8 ClosestKnownThreatID(SOLDIERTYPE *pSoldier) +UINT16 ClosestKnownThreatID(SOLDIERTYPE *pSoldier) { CHECKF(pSoldier); UINT32 uiLoop; INT32 sClosestOpponent = NOWHERE; INT32 iRange, iClosestRange; - UINT8 ubClosestOpponentID = NOBODY; + UINT16 ubClosestOpponentID = NOBODY; // use global defined threat list for (uiLoop = 0; uiLoop < guiThreatCnt; uiLoop++) @@ -5975,14 +5975,14 @@ UINT8 ClosestKnownThreatID(SOLDIERTYPE *pSoldier) } // first call PrepareThreatlist to make threat list -UINT8 ClosestSeenThreatID(SOLDIERTYPE *pSoldier, UINT8 ubMax) +UINT16 ClosestSeenThreatID(SOLDIERTYPE *pSoldier, UINT8 ubMax) { CHECKF(pSoldier); UINT32 uiLoop; INT32 sClosestOpponent = NOWHERE; INT32 iRange, iClosestRange; - UINT8 ubClosestOpponentID = NOBODY; + UINT16 ubClosestOpponentID = NOBODY; // use global defined threat list for (uiLoop = 0; uiLoop < guiThreatCnt; uiLoop++) @@ -6103,7 +6103,7 @@ void PrepareThreatlist(SOLDIERTYPE *pSoldier) } } -UINT8 CountPublicKnownEnemies(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 sDistance) +UINT16 CountPublicKnownEnemies(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 sDistance) { CHECKF(pSoldier); @@ -6113,7 +6113,7 @@ UINT8 CountPublicKnownEnemies(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 sDista INT32 sThreatLoc; INT8 iThreatLevel; - UINT8 ubNum = 0; + UINT16 ubNum = 0; // loop through all the enemies for (uiLoop = 0; uiLoop < guiNumMercSlots; ++uiLoop) @@ -6157,7 +6157,7 @@ UINT8 CountPublicKnownEnemies(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 sDista return ubNum; } -UINT8 CountPublicKnownEnemies(SOLDIERTYPE *pSoldier) +UINT16 CountPublicKnownEnemies(SOLDIERTYPE *pSoldier) { CHECKF(pSoldier); @@ -6167,7 +6167,7 @@ UINT8 CountPublicKnownEnemies(SOLDIERTYPE *pSoldier) INT32 sThreatLoc; INT8 iThreatLevel; - UINT8 ubNum = 0; + UINT16 ubNum = 0; // loop through all the enemies for (uiLoop = 0; uiLoop < guiNumMercSlots; ++uiLoop) diff --git a/TacticalAI/Attacks.cpp b/TacticalAI/Attacks.cpp index b3fee114..fb7df79f 100644 --- a/TacticalAI/Attacks.cpp +++ b/TacticalAI/Attacks.cpp @@ -850,13 +850,13 @@ void CalcBestThrow(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow) { DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"calcbestthrow"); // September 9, 1998: added code for LAWs (CJC) - UINT8 ubLoop, ubLoop2; + UINT16 ubLoop, ubLoop2; INT32 iAttackValue; INT32 iHitRate, iThreatValue, iTotalThreatValue,iOppThreatValue[MAXMERCS]; INT32 sGridNo, sEndGridNo, sFriendTile[MAXMERCS], sOpponentTile[MAXMERCS]; INT8 bFriendLevel[MAXMERCS], bOpponentLevel[MAXMERCS]; INT32 iEstDamage; - UINT8 ubFriendCnt = 0,ubOpponentCnt = 0, ubOpponentID[MAXMERCS]; + UINT16 ubFriendCnt = 0,ubOpponentCnt = 0, ubOpponentID[MAXMERCS]; UINT8 ubMaxPossibleAimTime; INT16 sRawAPCost, sMinAPcost; UINT8 ubChanceToHit, ubChanceToGetThrough, ubChanceToReallyHit, ubFriendlyFireChance; @@ -3484,9 +3484,9 @@ UINT8 UnderFire::Chance(INT8 bTeam, INT8 bSide, BOOLEAN fCheckNeutral) // if an enemy soldier fulfils taboo, make sure to not hit him at all! BOOLEAN GetBestAoEGridNo(SOLDIERTYPE *pSoldier, INT32* pGridNo, INT16 aRadius, UINT8 uCheckFriends, UINT8 aMinRating, SOLDIER_CONDITION cond, SOLDIER_CONDITION taboo) { - UINT8 ubLoop, ubLoop2; + UINT16 ubLoop, ubLoop2; INT32 sGridNo, sFriendTile[MAXMERCS], sOpponentTile[MAXMERCS], sTabooTile[MAXMERCS]; - UINT8 ubFriendCnt = 0,ubOpponentCnt = 0, ubTabooCnt = 0, ubOpponentID[MAXMERCS]; + UINT16 ubFriendCnt = 0,ubOpponentCnt = 0, ubTabooCnt = 0, ubOpponentID[MAXMERCS]; INT32 bMaxLeft,bMaxRight,bMaxUp,bMaxDown, i, j; INT8 bPersOL, bPublOL; SOLDIERTYPE *pFriend; @@ -3676,7 +3676,7 @@ BOOLEAN GetBestAoEGridNo(SOLDIERTYPE *pSoldier, INT32* pGridNo, INT16 aRadius, U // Get the ID of the farthest opponent we can see, with an optional minimum range // puID - ID of the farthest opponent pSoldier can see // sRange - only return an true and give an idea if opponent found is further away than this -BOOLEAN GetFarthestOpponent(SOLDIERTYPE *pSoldier, UINT8* puID, INT16 sRange) +BOOLEAN GetFarthestOpponent(SOLDIERTYPE *pSoldier, UINT16 * puID, INT16 sRange) { INT32 sGridNo; UINT32 uiLoop; @@ -3800,9 +3800,7 @@ void CheckTossSelfSmoke(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow) INT8 bTargetLevel = bLevel; INT32 sClosestThreat; - UINT8 ubClosestThreatID; - - ubClosestThreatID = pSoldier->ubPreviousAttackerID; + UINT16 ubClosestThreatID = pSoldier->ubPreviousAttackerID; // try to find good spot for smoke if (ubClosestThreatID != NOBODY && @@ -3901,7 +3899,7 @@ void CheckTossFriendSmoke(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow) SOLDIERTYPE * pFriend; INT32 sClosestFriendSpot = NOWHERE; INT8 bClosestFriendLevel = 0; - UINT8 ubClosestFriendID = NOBODY; + UINT16 ubClosestFriendID = NOBODY; INT32 sFriendSpot; INT8 bFriendLevel; @@ -3914,7 +3912,7 @@ void CheckTossFriendSmoke(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow) UINT8 ubDirection; // Run through each friendly. - for (UINT8 iCounter = gTacticalStatus.Team[pSoldier->bTeam].bFirstID; iCounter <= gTacticalStatus.Team[pSoldier->bTeam].bLastID; iCounter++) + for (UINT16 iCounter = gTacticalStatus.Team[pSoldier->bTeam].bFirstID; iCounter <= gTacticalStatus.Team[pSoldier->bTeam].bLastID; iCounter++) { pFriend = MercPtrs[iCounter]; @@ -4012,7 +4010,7 @@ void CheckTossFriendSmoke(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow) // check if we can toss grenade at spot, and prepare attack data // grenade should be in hand -void CheckTossAt(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow, INT32 sTargetSpot, INT8 bTargetLevel, UINT8 ubOpponentID) +void CheckTossAt(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow, INT32 sTargetSpot, INT8 bTargetLevel, UINT16 ubOpponentID) { UINT16 usInHand, usGrenade; INT32 iTossRange; diff --git a/TacticalAI/CreatureDecideAction.cpp b/TacticalAI/CreatureDecideAction.cpp index fe0ac6f5..4cdf9380 100644 --- a/TacticalAI/CreatureDecideAction.cpp +++ b/TacticalAI/CreatureDecideAction.cpp @@ -70,7 +70,7 @@ INT8 gbHuntCallPriority[NUM_CREATURE_CALLS] = void CreatureCall( SOLDIERTYPE * pCaller ) { UINT8 ubCallerType=0; - UINT8 ubReceiver; + UINT16 ubReceiver; INT8 bFullPriority; INT8 bPriority; SOLDIERTYPE * pReceiver; diff --git a/TacticalAI/DecideAction.cpp b/TacticalAI/DecideAction.cpp index 5732115d..2aaa460b 100644 --- a/TacticalAI/DecideAction.cpp +++ b/TacticalAI/DecideAction.cpp @@ -47,7 +47,7 @@ extern BOOLEAN gfHiddenInterrupt; extern BOOLEAN gfUseAlternateQueenPosition; extern UINT16 PickSoldierReadyAnimation( SOLDIERTYPE *pSoldier, BOOLEAN fEndReady, BOOLEAN fHipStance ); -extern void IncrementWatchedLoc(UINT8 ubID, INT32 sGridNo, INT8 bLevel); +extern void IncrementWatchedLoc(UINT16 ubID, INT32 sGridNo, INT8 bLevel); void LogDecideInfo(SOLDIERTYPE *pSoldier); void LogKnowledgeInfo(SOLDIERTYPE *pSoldier); @@ -759,7 +759,7 @@ INT8 DecideActionGreen(SOLDIERTYPE *pSoldier) { // WANNE: This should fix the bug if any merc are still under PC control. This could happen after boxing in SAN MONA. SOLDIERTYPE *pTeamSoldier; - for (INT8 bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++) + for (UINT16 bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++) { pTeamSoldier=MercPtrs[bLoop]; @@ -938,7 +938,7 @@ INT8 DecideActionGreen(SOLDIERTYPE *pSoldier) // Flugente: if we see one of our buddies in handcuffs, its a clear sign of enemy activity! if ( gGameExternalOptions.fAllowPrisonerSystem && pSoldier->bTeam == ENEMY_TEAM && !gTacticalStatus.Team[pSoldier->bTeam].bAwareOfOpposition ) { - UINT8 ubPerson = GetClosestFlaggedSoldierID( pSoldier, 20, ENEMY_TEAM, SOLDIER_POW, TRUE ); + UINT16 ubPerson = GetClosestFlaggedSoldierID( pSoldier, 20, ENEMY_TEAM, SOLDIER_POW, TRUE ); if ( ubPerson != NOBODY ) { @@ -950,7 +950,7 @@ INT8 DecideActionGreen(SOLDIERTYPE *pSoldier) // if we are a doctor with medical gear, we might be able to help a wounded ally if ( pSoldier->CanMedicAI() ) { - UINT8 ubPerson = GetClosestWoundedSoldierID( pSoldier, gGameExternalOptions.sEnemyMedicsSearchRadius, pSoldier->bTeam); + UINT16 ubPerson = GetClosestWoundedSoldierID( pSoldier, gGameExternalOptions.sEnemyMedicsSearchRadius, pSoldier->bTeam); // are we ourselves the patient? if ( ubPerson == pSoldier->ubID ) @@ -1004,7 +1004,7 @@ INT8 DecideActionGreen(SOLDIERTYPE *pSoldier) // if we are not a medic, but are wounded, seek a medic else if ( pSoldier->iHealableInjury >= gGameExternalOptions.sEnemyMedicsWoundMinAmount ) { - UINT8 ubPerson = GetClosestMedicSoldierID( pSoldier, gGameExternalOptions.sEnemyMedicsSearchRadius / 2, pSoldier->bTeam); + UINT16 ubPerson = GetClosestMedicSoldierID( pSoldier, gGameExternalOptions.sEnemyMedicsSearchRadius / 2, pSoldier->bTeam); if ( ubPerson != NOBODY ) { @@ -1661,7 +1661,7 @@ INT8 DecideActionYellow(SOLDIERTYPE *pSoldier) // Flugente: if we see one of our buddies captured, it is a clear sign of enemy activity! if ( gGameExternalOptions.fAllowPrisonerSystem && pSoldier->bTeam == ENEMY_TEAM ) { - UINT8 ubPerson = GetClosestFlaggedSoldierID( pSoldier, 20, ENEMY_TEAM, SOLDIER_POW, TRUE ); + UINT16 ubPerson = GetClosestFlaggedSoldierID( pSoldier, 20, ENEMY_TEAM, SOLDIER_POW, TRUE ); if ( ubPerson != NOBODY ) { @@ -1705,7 +1705,7 @@ INT8 DecideActionYellow(SOLDIERTYPE *pSoldier) // if we are a doctor with medical gear, we might be able to help a wounded ally if ( pSoldier->CanMedicAI() ) { - UINT8 ubPerson = GetClosestWoundedSoldierID( pSoldier, gGameExternalOptions.sEnemyMedicsSearchRadius, pSoldier->bTeam); + UINT16 ubPerson = GetClosestWoundedSoldierID( pSoldier, gGameExternalOptions.sEnemyMedicsSearchRadius, pSoldier->bTeam); // are we ourselves the patient? if ( ubPerson == pSoldier->ubID ) @@ -1759,7 +1759,7 @@ INT8 DecideActionYellow(SOLDIERTYPE *pSoldier) // if we are not a medic, but are wounded, seek a medic else if ( pSoldier->iHealableInjury >= gGameExternalOptions.sEnemyMedicsWoundMinAmount ) { - UINT8 ubPerson = GetClosestMedicSoldierID( pSoldier, gGameExternalOptions.sEnemyMedicsSearchRadius / 2, pSoldier->bTeam); + UINT16 ubPerson = GetClosestMedicSoldierID( pSoldier, gGameExternalOptions.sEnemyMedicsSearchRadius / 2, pSoldier->bTeam); if ( ubPerson != NOBODY ) { @@ -3286,7 +3286,7 @@ INT8 DecideActionRed(SOLDIERTYPE *pSoldier) // Flugente: if we see one of our buddies captured, it is a clear sign of enemy activity! if ( gGameExternalOptions.fAllowPrisonerSystem && pSoldier->bTeam == ENEMY_TEAM ) { - UINT8 ubPerson = GetClosestFlaggedSoldierID( pSoldier, 20, ENEMY_TEAM, SOLDIER_POW, TRUE ); + UINT16 ubPerson = GetClosestFlaggedSoldierID( pSoldier, 20, ENEMY_TEAM, SOLDIER_POW, TRUE ); if ( ubPerson != NOBODY ) { @@ -3325,7 +3325,7 @@ INT8 DecideActionRed(SOLDIERTYPE *pSoldier) // if we are a doctor with medical gear, we might be able to help a wounded ally if ( pSoldier->CanMedicAI() ) { - UINT8 ubPerson = GetClosestWoundedSoldierID( pSoldier, gGameExternalOptions.sEnemyMedicsSearchRadius, pSoldier->bTeam); + UINT16 ubPerson = GetClosestWoundedSoldierID( pSoldier, gGameExternalOptions.sEnemyMedicsSearchRadius, pSoldier->bTeam); // are we ourselves the patient? if ( ubPerson == pSoldier->ubID ) @@ -3379,7 +3379,7 @@ INT8 DecideActionRed(SOLDIERTYPE *pSoldier) // if we are not a medic, but are wounded, seek a medic else if ( pSoldier->iHealableInjury >= gGameExternalOptions.sEnemyMedicsWoundMinAmount ) { - UINT8 ubPerson = GetClosestMedicSoldierID( pSoldier, gGameExternalOptions.sEnemyMedicsSearchRadius / 2, pSoldier->bTeam); + UINT16 ubPerson = GetClosestMedicSoldierID( pSoldier, gGameExternalOptions.sEnemyMedicsSearchRadius / 2, pSoldier->bTeam); if ( ubPerson != NOBODY ) { @@ -6842,7 +6842,7 @@ L_NEWAIM: { DebugAI(AI_MSG_TOPIC, pSoldier, String("[Make boxer close if possible]")); - UINT8 ubOpponentID; + UINT16 ubOpponentID; sClosestOpponent = ClosestKnownOpponent(pSoldier, NULL, NULL, &ubOpponentID); DebugAI(AI_MSG_INFO, pSoldier, String("boxer: found closest opponent [%d] at %d", ubOpponentID, sClosestOpponent)); diff --git a/TacticalAI/FindLocations.cpp b/TacticalAI/FindLocations.cpp index 5cc98c7c..4ed9142d 100644 --- a/TacticalAI/FindLocations.cpp +++ b/TacticalAI/FindLocations.cpp @@ -123,7 +123,7 @@ void AICenterXY( INT32 sGridNo, FLOAT * pdX, FLOAT * pdY ) *pdY = (FLOAT) (sYPos * CELL_Y_SIZE + CELL_Y_SIZE / 2); } -INT8 CalcWorstCTGTForPosition( SOLDIERTYPE * pSoldier, UINT8 ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft ) +INT8 CalcWorstCTGTForPosition( SOLDIERTYPE * pSoldier, UINT16 ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft ) { // When considering a gridno for cover, we want to take into account cover if we // lie down, so we return the LOWEST chance to get through for that location. @@ -162,7 +162,7 @@ INT8 CalcWorstCTGTForPosition( SOLDIERTYPE * pSoldier, UINT8 ubOppID, INT32 sOpp return( bWorstCTGT ); } -INT8 CalcAverageCTGTForPosition( SOLDIERTYPE * pSoldier, UINT8 ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft ) +INT8 CalcAverageCTGTForPosition( SOLDIERTYPE * pSoldier, UINT16 ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft ) { // When considering a gridno for cover, we want to take into account cover if we // lie down, so we return the LOWEST chance to get through for that location. @@ -196,7 +196,7 @@ INT8 CalcAverageCTGTForPosition( SOLDIERTYPE * pSoldier, UINT8 ubOppID, INT32 sO } -INT8 CalcBestCTGT( SOLDIERTYPE *pSoldier, UINT8 ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft ) +INT8 CalcBestCTGT( SOLDIERTYPE *pSoldier, UINT16 ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft ) { // NOTE: CTGT stands for "ChanceToGetThrough..." @@ -595,7 +595,8 @@ INT32 CalcCoverValue(SOLDIERTYPE *pMe, INT32 sMyGridNo, INT32 iMyThreat, INT32 i UINT8 NumberOfTeamMatesAdjacent( SOLDIERTYPE * pSoldier, INT32 sGridNo ) { - UINT8 ubLoop, ubCount, ubWhoIsThere; + UINT8 ubLoop, ubCount; + UINT16 ubWhoIsThere; INT32 sTempGridNo; ubCount = 0; diff --git a/TacticalAI/Medical.cpp b/TacticalAI/Medical.cpp index 86bf9eb8..4d38e791 100644 --- a/TacticalAI/Medical.cpp +++ b/TacticalAI/Medical.cpp @@ -44,9 +44,9 @@ BOOLEAN FindAutobandageClimbPoint( INT32 sDesiredGridNo, BOOLEAN fClimbUp ) { // checks for existance of location to climb up to building, not occupied by a medic BUILDING * pBuilding; - UINT8 ubNumClimbSpots; + UINT8 ubNumClimbSpots; UINT8 ubLoop; - UINT8 ubWhoIsThere; + UINT16 ubWhoIsThere; pBuilding = FindBuilding( sDesiredGridNo ); if (!pBuilding) @@ -76,8 +76,8 @@ BOOLEAN FindAutobandageClimbPoint( INT32 sDesiredGridNo, BOOLEAN fClimbUp ) BOOLEAN FullPatientCheck( SOLDIERTYPE * pPatient ) { - UINT8 cnt; - SOLDIERTYPE * pSoldier; + UINT16 cnt; + SOLDIERTYPE * pSoldier; if ( CanCharacterAutoBandageTeammate( pPatient ) ) { @@ -123,10 +123,10 @@ BOOLEAN FullPatientCheck( SOLDIERTYPE * pPatient ) BOOLEAN CanAutoBandage( BOOLEAN fDoFullCheck ) { // returns false if we should stop being in auto-bandage mode - UINT8 cnt; - UINT8 ubMedics = 0, ubPatients = 0; + UINT16 cnt; + UINT16 ubMedics = 0, ubPatients = 0; SOLDIERTYPE * pSoldier; - static UINT8 ubIDForFullCheck = NOBODY; + static UINT16 ubIDForFullCheck = NOBODY; // run though the list of chars on team cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; @@ -231,18 +231,19 @@ BOOLEAN CanCharacterBeAutoBandagedByTeammate( SOLDIERTYPE *pSoldier ) INT8 FindBestPatient( SOLDIERTYPE * pSoldier, BOOLEAN * pfDoClimb ) { - UINT8 cnt, cnt2; - INT32 bBestPriority = 0, sBestAdjGridNo = NOWHERE; - INT32 sPatientGridNo = NOWHERE, sBestPatientGridNo = NOWHERE; - INT16 sShortestPath = 1000, sPathCost, sOtherMedicPathCost; - SOLDIERTYPE * pPatient; - SOLDIERTYPE * pBestPatient = NULL; - SOLDIERTYPE * pOtherMedic; - INT8 bPatientPriority; - UINT8 ubDirection; + UINT16 cnt; + UINT8 cnt2; + INT32 bBestPriority = 0, sBestAdjGridNo = NOWHERE; + INT32 sPatientGridNo = NOWHERE, sBestPatientGridNo = NOWHERE; + INT16 sShortestPath = 1000, sPathCost, sOtherMedicPathCost; + SOLDIERTYPE * pPatient; + SOLDIERTYPE * pBestPatient = NULL; + SOLDIERTYPE * pOtherMedic; + INT8 bPatientPriority; + UINT8 ubDirection; INT32 sAdjustedGridNo, sAdjacentGridNo, sOtherAdjacentGridNo; - INT32 sClimbGridNo, sBestClimbGridNo = NOWHERE, sShortestClimbPath = 1000; - BOOLEAN fClimbingNecessary; + INT32 sClimbGridNo, sBestClimbGridNo = NOWHERE, sShortestClimbPath = 1000; + BOOLEAN fClimbingNecessary; gubGlobalPathFlags = PATH_THROUGH_PEOPLE; @@ -478,7 +479,7 @@ INT8 DecideAutoBandage( SOLDIERTYPE * pSoldier ) BOOLEAN DoctorIsPresent( SOLDIERTYPE * pPatient, BOOLEAN fOnDoctorAssignmentCheck ) { SOLDIERTYPE * pMedic = NULL; - UINT8 cnt; + UINT16 cnt; INT8 bSlot; BOOLEAN fDoctorHasBeenFound = FALSE; diff --git a/TacticalAI/NPC.cpp b/TacticalAI/NPC.cpp index 3a501194..c7d08178 100644 --- a/TacticalAI/NPC.cpp +++ b/TacticalAI/NPC.cpp @@ -2566,7 +2566,8 @@ void Converse( UINT8 ubNPC, UINT8 ubMerc, INT8 bApproach, UINT32 uiApproachData INT32 NPCConsiderInitiatingConv( SOLDIERTYPE * pNPC, UINT8 * pubDesiredMerc ) { INT32 sMyGridNo, sDist, sDesiredMercDist = 100; - UINT8 ubNPC, ubMerc, ubDesiredMerc = NOBODY; + UINT8 ubNPC; + UINT16 ubMerc, ubDesiredMerc = NOBODY; UINT8 ubTalkDesire, ubHighestTalkDesire = 0; SOLDIERTYPE * pMerc; SOLDIERTYPE * pDesiredMerc = NULL; @@ -2913,9 +2914,9 @@ BOOLEAN PCDoesFirstAidOnNPC( UINT8 ubNPC ) void TriggerClosestMercWhoCanSeeNPC( UINT8 ubNPC, NPCQuoteInfo *pQuotePtr ) { // Loop through all mercs, gather closest mercs who can see and trigger one! - UINT8 ubMercsInSector[ 40 ] = { 0 }; - UINT8 ubNumMercs = 0; - UINT8 ubChosenMerc; + UINT16 ubMercsInSector[CODE_MAXIMUM_NUMBER_OF_PLAYER_MERCS] = { 0 }; //std::vector would probably be better here + UINT16 ubNumMercs = 0; + UINT16 ubChosenMerc; SOLDIERTYPE *pTeamSoldier, *pSoldier; INT32 cnt; @@ -2933,7 +2934,7 @@ void TriggerClosestMercWhoCanSeeNPC( UINT8 ubNPC, NPCQuoteInfo *pQuotePtr ) // Add guy if he's a candidate... if ( OK_INSECTOR_MERC( pTeamSoldier ) && pTeamSoldier->aiData.bOppList[ pSoldier->ubID ] == SEEN_CURRENTLY ) { - ubMercsInSector[ ubNumMercs ] = (UINT8)cnt; + ubMercsInSector[ ubNumMercs ] = (UINT16)cnt; ubNumMercs++; } } @@ -2941,7 +2942,7 @@ void TriggerClosestMercWhoCanSeeNPC( UINT8 ubNPC, NPCQuoteInfo *pQuotePtr ) // If we are > 0 if ( ubNumMercs > 0 ) { - ubChosenMerc = (UINT8)Random( ubNumMercs ); + ubChosenMerc = (UINT16)Random( ubNumMercs ); // Post action to close panel NPCClosePanel( ); @@ -3649,12 +3650,12 @@ BOOLEAN LoadBackupNPCInfoFromSavedGameFile( HWFILE hFile, UINT32 uiSaveGameVersi void TriggerFriendWithHostileQuote( UINT8 ubNPC ) { - UINT8 ubMercsAvailable[ 40 ] = { 0 }; - UINT8 ubNumMercsAvailable = 0, ubChosenMerc; - SOLDIERTYPE * pTeamSoldier; - SOLDIERTYPE * pSoldier; - INT32 cnt; - INT8 bTeam; + UINT16 ubMercsAvailable[CODE_MAXIMUM_NUMBER_OF_PLAYER_MERCS] = { 0 }; + UINT16 ubNumMercsAvailable = 0, ubChosenMerc; + SOLDIERTYPE * pTeamSoldier; + SOLDIERTYPE * pSoldier; + INT32 cnt; + INT8 bTeam; // First get pointer to NPC pSoldier = FindSoldierByProfileID( ubNPC, FALSE ); @@ -3697,7 +3698,7 @@ void TriggerFriendWithHostileQuote( UINT8 ubNPC ) if (ubNumMercsAvailable > 0) { PauseAITemporarily(); - ubChosenMerc = (UINT8) Random( ubNumMercsAvailable ); + ubChosenMerc = (UINT16) Random( ubNumMercsAvailable ); TriggerNPCWithIHateYouQuote( ubMercsAvailable[ ubChosenMerc ] ); } else diff --git a/TacticalAI/PanicButtons.cpp b/TacticalAI/PanicButtons.cpp index 970879b9..64471ef4 100644 --- a/TacticalAI/PanicButtons.cpp +++ b/TacticalAI/PanicButtons.cpp @@ -19,7 +19,7 @@ void MakeClosestEnemyChosenOne() UINT32 cnt; INT16 sPathCost, sShortestPath = 1000; INT8 bOldKeys = -1; - UINT8 ubClosestEnemy = NOBODY; + UINT16 ubClosestEnemy = NOBODY; SOLDIERTYPE * pSoldier; INT8 bPanicTrigger; INT32 sPanicTriggerGridNo; diff --git a/TacticalAI/ZombieDecideAction.cpp b/TacticalAI/ZombieDecideAction.cpp index 9ed67fb8..c21c50a7 100644 --- a/TacticalAI/ZombieDecideAction.cpp +++ b/TacticalAI/ZombieDecideAction.cpp @@ -575,7 +575,7 @@ INT8 ZombieDecideActionRed(SOLDIERTYPE *pSoldier) INT8 bInWater, bInDeepWater; INT8 bSeekPts = 0, bHelpPts = 0, bWatchPts = 0; BOOLEAN fClimb; - UINT8 ubThreatID = NOBODY; + UINT16 ubThreatID = NOBODY; INT32 sThreatSpot = NOWHERE; INT8 bThreatLevel = 0; @@ -914,7 +914,7 @@ INT8 ZombieDecideActionBlack(SOLDIERTYPE *pSoldier) INT8 bWeaponIn; BOOLEAN fClimb; INT32 iDummy; - UINT8 ubThreatID = NOBODY; + UINT16 ubThreatID = NOBODY; INT32 sThreatSpot = NOWHERE; INT8 bThreatLevel = 0; diff --git a/TacticalAI/ai.h b/TacticalAI/ai.h index c30be8cb..41508367 100644 --- a/TacticalAI/ai.h +++ b/TacticalAI/ai.h @@ -175,7 +175,7 @@ void CheckForChangingOrders(SOLDIERTYPE *pSoldier ); INT8 ClosestPanicTrigger( SOLDIERTYPE * pSoldier ); -INT32 ClosestKnownOpponent(SOLDIERTYPE *pSoldier, INT32 * psGridNo, INT8 * pbLevel, UINT8 *pubOpponentID = NULL); +INT32 ClosestKnownOpponent(SOLDIERTYPE *pSoldier, INT32 * psGridNo, INT8 * pbLevel, UINT16 * pubOpponentID = NULL); INT32 ClosestPC( SOLDIERTYPE *pSoldier, INT32 * psDistance ); INT32 ClosestUnDisguisedPC( SOLDIERTYPE *pSoldier, INT32 * psDistance ); // Flugente: like ClosestPC(...), but does not account for covert or not visible mercs BOOLEAN CanAutoBandage( BOOLEAN fDoFullCheck ); @@ -220,7 +220,7 @@ BOOLEAN FindRoofClimbingPoints( SOLDIERTYPE * pSoldier, INT16 sDesiredSpot ); INT32 FindSpotMaxDistFromOpponents(SOLDIERTYPE *pSoldier); INT32 FindSweetCoverSpot(SOLDIERTYPE *pSoldier); -void FreeUpNPCFromAttacking(UINT8 ubID); +void FreeUpNPCFromAttacking(UINT16 ubID); void FreeUpNPCFromPendingAction( SOLDIERTYPE * pSoldier ); void FreeUpNPCFromTurning(SOLDIERTYPE *pSoldier, INT8 bLook); void FreeUpNPCFromStanceChange(SOLDIERTYPE *pSoldier ); @@ -228,7 +228,7 @@ void FreeUpNPCFromLoweringGun( SOLDIERTYPE *pSoldier ); void FreeUpNPCFromRoofClimb(SOLDIERTYPE *pSoldier ); UINT8 GetClosestOpponent( SOLDIERTYPE *pSoldier ); -UINT8 GetMostThreateningOpponent( SOLDIERTYPE *pSoldier ); +UINT16 GetMostThreateningOpponent( SOLDIERTYPE *pSoldier ); void HandleSoldierAI( SOLDIERTYPE *pSoldier ); void HandleInitialRedAlert( INT8 bTeam, UINT8 ubCommunicate); @@ -271,19 +271,19 @@ INT32 FindFlankingSpot(SOLDIERTYPE *pSoldier, INT32 sPos, INT8 bAction ); BOOLEAN CanClimbFromHere (SOLDIERTYPE * pSoldier, BOOLEAN fUp ); // HEADROCK HAM 3.6: Adding includes for A* cover calculations -INT8 CalcWorstCTGTForPosition( SOLDIERTYPE * pSoldier, UINT8 ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft ); -INT8 CalcBestCTGT( SOLDIERTYPE *pSoldier, UINT8 ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft ); -INT8 CalcAverageCTGTForPosition( SOLDIERTYPE * pSoldier, UINT8 ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft ); +INT8 CalcWorstCTGTForPosition( SOLDIERTYPE * pSoldier, UINT16 ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft ); +INT8 CalcBestCTGT( SOLDIERTYPE *pSoldier, UINT16 ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft ); +INT8 CalcAverageCTGTForPosition( SOLDIERTYPE * pSoldier, UINT16 ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft ); UINT8 NumberOfTeamMatesAdjacent( SOLDIERTYPE * pSoldier, INT32 sGridNo ); // Flugente: get the id of the closest soldier (coser than x tiles) of a specific team with a specific flag that we can currently see -UINT8 GetClosestFlaggedSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam, UINT32 aFlag, BOOLEAN fCheckSight = TRUE ); +UINT16 GetClosestFlaggedSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam, UINT32 aFlag, BOOLEAN fCheckSight = TRUE ); // get the id of the closest soldier (closer than x tiles) of a specific team that is wounded that we can currently see -UINT8 GetClosestWoundedSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam ); +UINT16 GetClosestWoundedSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam ); // get the id of the closest medic (closer than x tiles) of a specific team -UINT8 GetClosestMedicSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam ); +UINT16 GetClosestMedicSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam ); // sevenfm: BOOLEAN NightLight(void); @@ -291,15 +291,15 @@ BOOLEAN DuskLight(void); BOOLEAN InSmokeNearby(INT32 sGridNo, INT8 bLevel); INT16 MaxNormalVisionDistance( void ); UINT8 MinFlankDirections( SOLDIERTYPE *pSoldier ); -UINT8 CountFriendsInDirection( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo ); +UINT16 CountFriendsInDirection( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo ); BOOLEAN GuySawEnemy( SOLDIERTYPE * pSoldier, UINT8 ubMax = SEEN_3_TURNS_AGO ); -UINT8 CountNearbyFriends( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubDistance ); +UINT16 CountNearbyFriends( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubDistance ); UINT8 CountNearbyFriendsLastAttackHit( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubDistance ); UINT8 CountFriendsFlankSameSpot(SOLDIERTYPE *pSoldier, INT32 sSpot = NOWHERE); UINT8 CountFriendsBlack( SOLDIERTYPE *pSoldier, INT32 sClosestOpponent = NOWHERE ); -UINT8 CountTeamUnderAttack(INT8 bTeam, INT32 sGridNo, INT16 sDistance); -UINT8 CountPublicKnownEnemies(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 sDistance); -UINT8 CountPublicKnownEnemies(SOLDIERTYPE *pSoldier); +UINT16 CountTeamUnderAttack(INT8 bTeam, INT32 sGridNo, INT16 sDistance); +UINT16 CountPublicKnownEnemies(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 sDistance); +UINT16 CountPublicKnownEnemies(SOLDIERTYPE *pSoldier); UINT8 SectorCurfew(BOOLEAN fNight); UINT8 TeamPercentKilled(INT8 bTeam); @@ -308,15 +308,15 @@ UINT8 ArmyPercentKilled(void); UINT8 ArmyPercentKilledTolerance(void); BOOLEAN EnemySeenSoldierRecently( SOLDIERTYPE *pSoldier, UINT8 ubMax = SEEN_3_TURNS_AGO ); -UINT8 CountTeamSeeSoldier( INT8 bTeam, SOLDIERTYPE *pSoldier ); +UINT16 CountTeamSeeSoldier( INT8 bTeam, SOLDIERTYPE *pSoldier ); BOOLEAN AICheckFriendsNoContact( SOLDIERTYPE *pSoldier ); BOOLEAN AICheckIsFlanking( SOLDIERTYPE *pSoldier ); INT8 CalcMoraleNew(SOLDIERTYPE *pSoldier); void PrepareThreatlist(SOLDIERTYPE *pSoldier); -UINT8 ClosestSeenThreatID(SOLDIERTYPE *pSoldier, UINT8 ubMax = SEEN_CURRENTLY); // first call PrepareThreatlist to make threat list -UINT8 ClosestKnownThreatID(SOLDIERTYPE *pSoldier); // first call PrepareThreatlist to make threat list +UINT16 ClosestSeenThreatID(SOLDIERTYPE *pSoldier, UINT8 ubMax = SEEN_CURRENTLY); // first call PrepareThreatlist to make threat list +UINT16 ClosestKnownThreatID(SOLDIERTYPE *pSoldier); // first call PrepareThreatlist to make threat list BOOLEAN ProneSightCoverAtSpot(SOLDIERTYPE *pSoldier, INT32 sSpot, BOOLEAN fUnlimited); BOOLEAN SightCoverAtSpot(SOLDIERTYPE *pSoldier, INT32 sSpot, BOOLEAN fUnlimited); @@ -336,7 +336,7 @@ UINT8 TerrainDensity(INT32 sSpot, INT8 bLevel, UINT8 ubDistance, BOOLEAN fGrass) BOOLEAN FindNearbyExplosiveStructure(INT32 sSpot, INT8 bLevel); INT16 DistanceToClosestActiveOpponent(SOLDIERTYPE *pSoldier, INT32 sSpot); BOOLEAN ValidOpponent(SOLDIERTYPE* pSoldier, SOLDIERTYPE* pOpponent); -UINT8 CountSeenEnemiesLastTurn( SOLDIERTYPE *pSoldier ); +UINT16 CountSeenEnemiesLastTurn( SOLDIERTYPE *pSoldier ); BOOLEAN FindObstacleNearSpot(INT32 sSpot, INT8 bLevel); BOOLEAN CheckNPCDestination(SOLDIERTYPE *pSoldier, INT32 sGridNo); UINT8 SpotDangerLevel(SOLDIERTYPE *pSoldier, INT32 sGridNo); @@ -387,19 +387,19 @@ BOOLEAN AICheckSpecialRole(SOLDIERTYPE *pSoldier); // Knowledge functions // ************************************************************* -INT8 Knowledge(SOLDIERTYPE *pSoldier, UINT8 ubOpponentID); -INT32 KnownLocation(SOLDIERTYPE *pSoldier, UINT8 ubOpponentID); -INT8 KnownLevel(SOLDIERTYPE *pSoldier, UINT8 ubOpponentID); +INT8 Knowledge(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID); +INT32 KnownLocation(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID); +INT8 KnownLevel(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID); -BOOLEAN UsePersonalKnowledge(SOLDIERTYPE *pSoldier, UINT8 ubOpponentID); +BOOLEAN UsePersonalKnowledge(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID); -INT8 PersonalKnowledge(SOLDIERTYPE *pSoldier, UINT8 ubOpponentID); -INT32 KnownPersonalLocation(SOLDIERTYPE *pSoldier, UINT8 ubOpponentID); -INT8 KnownPersonalLevel(SOLDIERTYPE *pSoldier, UINT8 ubOpponentID); +INT8 PersonalKnowledge(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID); +INT32 KnownPersonalLocation(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID); +INT8 KnownPersonalLevel(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID); -INT8 PublicKnowledge(UINT8 bTeam, UINT8 ubOpponentID); -INT32 KnownPublicLocation(UINT8 bTeam, UINT8 ubOpponentID); -INT8 KnownPublicLevel(UINT8 bTeam, UINT8 ubOpponentID); +INT8 PublicKnowledge(UINT8 bTeam, UINT16 ubOpponentID); +INT32 KnownPublicLocation(UINT8 bTeam, UINT16 ubOpponentID); +INT8 KnownPublicLevel(UINT8 bTeam, UINT16 ubOpponentID); #define MAX_FLANKS_RED 25 #define MAX_FLANKS_YELLOW 25 diff --git a/TileEngine/Explosion Control.cpp b/TileEngine/Explosion Control.cpp index b4fbfb45..258d73c5 100644 --- a/TileEngine/Explosion Control.cpp +++ b/TileEngine/Explosion Control.cpp @@ -69,19 +69,19 @@ BOOLEAN HookerInRoom( UINT16 usRoom ); // MODULE FOR EXPLOSIONS // Spreads the effects of explosions... -BOOLEAN ExpAffect( INT32 sBombGridNo, INT32 sGridNo, UINT32 uiDist, UINT16 usItem, UINT8 ubOwner, INT16 sSubsequent, BOOLEAN *pfMercHit, INT8 bLevel, INT32 iSmokeEffectID ); +BOOLEAN ExpAffect( INT32 sBombGridNo, INT32 sGridNo, UINT32 uiDist, UINT16 usItem, UINT16 ubOwner, INT16 sSubsequent, BOOLEAN *pfMercHit, INT8 bLevel, INT32 iSmokeEffectID ); // Flashbang effect on soldier UINT8 DetermineFlashbangEffect( SOLDIERTYPE *pSoldier, INT8 ubExplosionDir, BOOLEAN fInBuilding); // HEADROCK HAM 5.1: Explosion Fragments launcher -void FireFragments( UINT8 ubOwner, INT16 sX, INT16 sY, INT16 sZ, UINT16 usItem, UINT8 ubDirection = DIRECTION_IRRELEVANT ); +void FireFragments( UINT16 ubOwner, INT16 sX, INT16 sY, INT16 sZ, UINT16 usItem, UINT8 ubDirection = DIRECTION_IRRELEVANT ); // Flugente: shoot a gun without anyone operating it (used for makeshift traps wih guns) void FireFragmentsTrapGun( SOLDIERTYPE* pThrower, INT32 gridno, INT16 sZ, OBJECTTYPE* pObj, UINT8 ubDirection = NORTH ); extern INT8 gbSAMGraphicList[ MAX_NUMBER_OF_SAMS ]; -extern void AddToShouldBecomeHostileOrSayQuoteList( UINT8 ubID ); +extern void AddToShouldBecomeHostileOrSayQuoteList( UINT16 ubID ); extern void RecompileLocalMovementCostsForWall( INT32 sGridNo, UINT8 ubOrientation ); void FatigueCharacter( SOLDIERTYPE *pSoldier ); @@ -182,11 +182,11 @@ UINT8 gubElementsOnExplosionQueue = 0; BOOLEAN gfExplosionQueueActive = FALSE; BOOLEAN gfExplosionQueueMayHaveChangedSight = FALSE; -UINT8 gubPersonToSetOffExplosions = NOBODY; +UINT16 gubPersonToSetOffExplosions = NOBODY; INT32 gsTempActionGridNo = NOWHERE; -extern UINT8 gubInterruptProvoker; +extern UINT16 gubInterruptProvoker; #define NUM_EXPLOSION_SLOTS 100 @@ -198,7 +198,7 @@ UINT32 guiNumExplosions = 0; INT32 GetFreeExplosion( void ); void RecountExplosions( void ); void GenerateExplosionFromExplosionPointer( EXPLOSIONTYPE *pExplosion ); -void HandleBuldingDestruction( INT32 sGridNo, UINT8 ubOwner ); +void HandleBuldingDestruction( INT32 sGridNo, UINT16 ubOwner ); #ifdef JA2UB //JA25 UB @@ -251,7 +251,7 @@ void RecountExplosions( void ) extern void HandleLoyaltyForDemolitionOfBuilding( SOLDIERTYPE *pSoldier, INT16 sPointsDmg ); // GENERATE EXPLOSION -void InternalIgniteExplosion( UINT8 ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGridNo, UINT16 usItem, BOOLEAN fLocate, INT8 bLevel, UINT8 ubDirection, OBJECTTYPE * pObj ) +void InternalIgniteExplosion( UINT16 ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGridNo, UINT16 usItem, BOOLEAN fLocate, INT8 bLevel, UINT8 ubDirection, OBJECTTYPE * pObj ) { #ifdef JA2BETAVERSION if (is_networked) { @@ -392,7 +392,7 @@ void InternalIgniteExplosion( UINT8 ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 } -void IgniteExplosion( UINT8 ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT8 ubDirection, OBJECTTYPE * pObj ) +void IgniteExplosion( UINT16 ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT8 ubDirection, OBJECTTYPE * pObj ) { InternalIgniteExplosion( ubOwner, sX, sY, sZ, sGridNo, usItem, TRUE, bLevel, ubDirection, pObj ); } @@ -654,8 +654,9 @@ void HandleFencePartnerCheck( INT32 sStructGridNo ) -INT8 ExplosiveDamageStructureAtGridNo( STRUCTURE * pCurrent, STRUCTURE **ppNextCurrent, INT32 sGridNo, INT16 sWoundAmt, UINT32 uiDist, - BOOLEAN *pfRecompileMovementCosts, BOOLEAN fOnlyWalls, BOOLEAN fSubSequentMultiTilesTransitionDamage, UINT8 ubOwner, INT8 bLevel, +INT8 ExplosiveDamageStructureAtGridNo( STRUCTURE * pCurrent, STRUCTURE **ppNextCurrent, INT32 sGridNo, INT16 sWoundAmt, + UINT32 uiDist, + BOOLEAN *pfRecompileMovementCosts, BOOLEAN fOnlyWalls, BOOLEAN fSubSequentMultiTilesTransitionDamage, UINT16 ubOwner, INT8 bLevel, UINT8 ubReason ) { #ifdef JA2BETAVERSION @@ -1335,8 +1336,10 @@ INT8 ExplosiveDamageStructureAtGridNo( STRUCTURE * pCurrent, STRUCTURE **ppNextC STRUCTURE *gStruct; -void ExplosiveDamageGridNo( INT32 sGridNo, INT16 sWoundAmt, UINT32 uiDist, BOOLEAN *pfRecompileMovementCosts, - BOOLEAN fOnlyWalls, INT8 bMultiStructSpecialFlag, BOOLEAN fSubSequentMultiTilesTransitionDamage, UINT8 ubOwner, INT8 bLevel, +void ExplosiveDamageGridNo( INT32 sGridNo, INT16 sWoundAmt, UINT32 uiDist, + BOOLEAN *pfRecompileMovementCosts, + BOOLEAN fOnlyWalls, INT8 bMultiStructSpecialFlag, BOOLEAN fSubSequentMultiTilesTransitionDamage, UINT16 ubOwner, + INT8 bLevel, UINT8 ubReason ) { #ifdef JA2BETAVERSION @@ -1519,7 +1522,7 @@ void ExplosiveDamageGridNo( INT32 sGridNo, INT16 sWoundAmt, UINT32 uiDist, BOOLE } -BOOLEAN DamageSoldierFromBlast( UINT8 ubPerson, UINT8 ubOwner, INT32 sBombGridNo, INT16 sWoundAmt, INT16 sBreathAmt, UINT32 uiDist, UINT16 usItem, INT16 sSubsequent , BOOL fFromRemoteClient ) +BOOLEAN DamageSoldierFromBlast( UINT16 ubPerson, UINT16 ubOwner, INT32 sBombGridNo, INT16 sWoundAmt, INT16 sBreathAmt, UINT32 uiDist, UINT16 usItem, INT16 sSubsequent, BOOL fFromRemoteClient ) { // OJW - 20091028 if (is_networked && is_client) @@ -1889,12 +1892,12 @@ BOOLEAN DamageSoldierFromBlast( UINT8 ubPerson, UINT8 ubOwner, INT32 sBombGridNo if (IsOurSoldier(pSoldier) || (pSoldier->bTeam == 1 && is_server) && !fFromRemoteClient) { // if it gets here then we can let the other clients know our merc took damage - send_explosivedamage( ubPerson , ubOwner , sBombGridNo , sNewWoundAmt , sBreathAmt , uiDist , usItem , sSubsequent ); + send_explosivedamage( ubPerson, ubOwner, sBombGridNo, sNewWoundAmt, sBreathAmt, uiDist, usItem, sSubsequent ); } } // OJW - 20091028 - If from a remote client, use unadjusted damage amount - pSoldier->EVENT_SoldierGotHit( usItem, (fFromRemoteClient ? sWoundAmt : sNewWoundAmt) , sBreathAmt, ubDirection, (INT16)uiDist, ubOwner, ubSpecial, ANIM_CROUCH, sSubsequent, sBombGridNo ); + pSoldier->EVENT_SoldierGotHit( usItem, (fFromRemoteClient ? sWoundAmt : sNewWoundAmt), sBreathAmt, ubDirection, (INT16)uiDist, ubOwner, ubSpecial, ANIM_CROUCH, sSubsequent, sBombGridNo ); pSoldier->ubMiscSoldierFlags |= SOLDIER_MISC_HURT_BY_EXPLOSION; @@ -1906,7 +1909,7 @@ BOOLEAN DamageSoldierFromBlast( UINT8 ubPerson, UINT8 ubOwner, INT32 sBombGridNo return( TRUE ); } -BOOLEAN DishOutGasDamage( SOLDIERTYPE * pSoldier, EXPLOSIVETYPE * pExplosive, INT16 sSubsequent, BOOLEAN fRecompileMovementCosts, INT16 sWoundAmt, INT16 sBreathAmt, UINT8 ubOwner , BOOL fFromRemoteClient ) +BOOLEAN DishOutGasDamage( SOLDIERTYPE * pSoldier, EXPLOSIVETYPE * pExplosive, INT16 sSubsequent, BOOLEAN fRecompileMovementCosts, INT16 sWoundAmt, INT16 sBreathAmt, UINT16 ubOwner, BOOL fFromRemoteClient ) { // OJW - 20091028 if (is_networked && is_client) @@ -2154,7 +2157,7 @@ BOOLEAN DishOutGasDamage( SOLDIERTYPE * pSoldier, EXPLOSIVETYPE * pExplosive, IN // and align them with our random number generator if (IsOurSoldier(pSoldier) || (pSoldier->bTeam == 1 && is_server) && !fFromRemoteClient) { - send_gasdamage( pSoldier , pExplosive->uiIndex , sSubsequent , fRecompileMovementCosts , sWoundAmt , sBreathAmt , ubOwner ); + send_gasdamage( pSoldier, pExplosive->uiIndex, sSubsequent, fRecompileMovementCosts, sWoundAmt, sBreathAmt, ubOwner ); } } @@ -2171,7 +2174,7 @@ BOOLEAN DishOutGasDamage( SOLDIERTYPE * pSoldier, EXPLOSIVETYPE * pExplosive, IN return( fRecompileMovementCosts ); } -BOOLEAN ExpAffect( INT32 sBombGridNo, INT32 sGridNo, UINT32 uiDist, UINT16 usItem, UINT8 ubOwner, INT16 sSubsequent, BOOLEAN *pfMercHit, INT8 bLevel, INT32 iSmokeEffectID ) +BOOLEAN ExpAffect( INT32 sBombGridNo, INT32 sGridNo, UINT32 uiDist, UINT16 usItem, UINT16 ubOwner, INT16 sSubsequent, BOOLEAN *pfMercHit, INT8 bLevel, INT32 iSmokeEffectID ) { #ifdef JA2BETAVERSION if (is_networked) { @@ -2182,7 +2185,7 @@ BOOLEAN ExpAffect( INT32 sBombGridNo, INT32 sGridNo, UINT32 uiDist, UINT16 usIte #endif INT16 sWoundAmt = 0,sBreathAmt = 0, /* sNewWoundAmt = 0, sNewBreathAmt = 0, */ sStructDmgAmt; - UINT8 ubPerson; + UINT16 ubPerson; SOLDIERTYPE *pSoldier; EXPLOSIVETYPE *pExplosive; INT16 sX, sY; @@ -2307,7 +2310,7 @@ BOOLEAN ExpAffect( INT32 sBombGridNo, INT32 sGridNo, UINT32 uiDist, UINT16 usIte // ATE: Make sure guys get pissed at us! - HandleBuldingDestruction( sGridNo ,ubOwner ); + HandleBuldingDestruction( sGridNo,ubOwner ); if ( fBlastEffect ) @@ -2374,7 +2377,7 @@ BOOLEAN ExpAffect( INT32 sBombGridNo, INT32 sGridNo, UINT32 uiDist, UINT16 usIte } } - ExplosiveDamageGridNo( sGridNo, sStructDmgAmt, uiDist, &fRecompileMovementCosts, FALSE, -1, 0 , ubOwner, bLevel, STRUCTURE_DAMAGE_EXPLOSION ); + ExplosiveDamageGridNo( sGridNo, sStructDmgAmt, uiDist, &fRecompileMovementCosts, FALSE, -1, 0, ubOwner, bLevel, STRUCTURE_DAMAGE_EXPLOSION ); // ATE: Look for damage to walls ONLY for next two gridnos sNewGridNo = NewGridNo( sGridNo, DirectionInc( NORTH ) ); @@ -2926,7 +2929,7 @@ void GetRayStopInfo( UINT32 uiNewSpot, UINT8 ubDir, INT8 bLevel, BOOLEAN fSmokeE -void SpreadEffect( INT32 sGridNo, UINT8 ubRadius, UINT16 usItem, UINT8 ubOwner, BOOLEAN fSubsequent, INT8 bLevel, INT32 iSmokeEffectID , BOOL fFromRemoteClient , BOOL fNewSmokeEffect ) +void SpreadEffect( INT32 sGridNo, UINT8 ubRadius, UINT16 usItem, UINT16 ubOwner, BOOLEAN fSubsequent, INT8 bLevel, INT32 iSmokeEffectID, BOOL fFromRemoteClient, BOOL fNewSmokeEffect ) { if (is_networked && is_client) { @@ -3291,7 +3294,7 @@ void BillyBlocksDoorCallback( void ) BOOLEAN HookerInRoom( UINT16 usRoom ) { //DBrot: More Rooms - UINT8 ubLoop;//, ubTempRoom; + UINT16 ubLoop;//, ubTempRoom; UINT16 usTempRoom; SOLDIERTYPE * pSoldier; @@ -3804,7 +3807,7 @@ void AddBombToQueue( UINT32 uiWorldBombIndex, UINT32 uiTimeStamp, BOOL fFromRemo WORLDITEM wi = gWorldItems[iWorldIndex]; if (wi.fExists) { - INT8 soldierID = wi.soldierID; // bomb's owner + INT16 soldierID = wi.soldierID; // bomb's owner if (soldierID == -1) soldierID = wi.object[0]->data.misc.ubBombOwner - 2; // undo the hack @@ -3835,7 +3838,7 @@ void AddBombToQueue( UINT32 uiWorldBombIndex, UINT32 uiTimeStamp, BOOL fFromRemo } // Flugente: activate everything connected to a tripwire in the surrounding if sGridNo on level bLevel with regard to the tripwire netwrok and hierarchy determined by ubFlag -BOOLEAN ActivateSurroundingTripwire( UINT8 ubID, INT32 sGridNo, INT8 bLevel, UINT32 ubFlag ) +BOOLEAN ActivateSurroundingTripwire( UINT16 ubID, INT32 sGridNo, INT8 bLevel, UINT32 ubFlag ) { UINT32 uiTimeStamp= GetJA2Clock(); BOOLEAN fFoundMine = FALSE; @@ -3970,7 +3973,7 @@ BOOLEAN ActivateSurroundingTripwire( UINT8 ubID, INT32 sGridNo, INT8 bLevel, UIN } // Flugente: A special function for tripwire gun traps. Search if pObj has a gun attached. If so, fire a shot from that gun in a specific direction. Afterwards place the gun on the ground -void CheckAndFireTripwireGun( OBJECTTYPE* pObj, INT32 sGridNo, INT8 bLevel, UINT8 ubId, UINT8 ubDirection ) +void CheckAndFireTripwireGun( OBJECTTYPE* pObj, INT32 sGridNo, INT8 bLevel, UINT16 ubId, UINT8 ubDirection ) { if ( !pObj ) return; @@ -4063,7 +4066,7 @@ void HandleExplosionQueue( void ) if ( sSoundID > NO_ALT_SOUND ) PlayJA2Sample( sSoundID, RATE_11025, SoundVolume( HIGHVOLUME, sGridNo ), 1, SoundDir( sGridNo ) ); - UINT8 ubID = WhoIsThere2( sGridNo, ubLevel ); + UINT16 ubID = WhoIsThere2( sGridNo, ubLevel ); if ( ubID != NOBODY ) { @@ -4294,7 +4297,7 @@ void HandleExplosionQueue( void ) if (gfExplosionQueueMayHaveChangedSight) { - UINT8 ubLoop; + UINT16 ubLoop; SOLDIERTYPE * pTeamSoldier; // set variable so we may at least have someone to resolve interrupts vs @@ -4669,7 +4672,7 @@ void DecayBombTimers( void ) } } -void SetOffBombsByFrequency( UINT8 ubID, INT8 bFrequency ) +void SetOffBombsByFrequency( UINT16 ubID, INT8 bFrequency ) { UINT32 uiWorldBombIndex; UINT32 uiTimeStamp; @@ -4749,7 +4752,7 @@ void SetOffBombsByFrequency( UINT8 ubID, INT8 bFrequency ) // OJW - 20091029 - disarm explosives if (is_networked && is_client) - send_disarm_explosive( sGridNo , gWorldBombs[uiWorldBombIndex].iItemIndex, ubID ); + send_disarm_explosive( sGridNo, gWorldBombs[uiWorldBombIndex].iItemIndex, ubID ); // set back ubWireNetworkFlag and bDefuseFrequency, but not the direction... bomb is still aimed, it is just turned off (*pObj)[0]->data.ubWireNetworkFlag = 0; @@ -4857,7 +4860,7 @@ void SetOffBombsByFrequency( UINT8 ubID, INT8 bFrequency ) } } -void SetOffPanicBombs( UINT8 ubID, INT8 bPanicTrigger ) +void SetOffPanicBombs( UINT16 ubID, INT8 bPanicTrigger ) { // need to turn off gridnos & flags in gTacticalStatus gTacticalStatus.sPanicTriggerGridNo[ bPanicTrigger ] = NOWHERE; @@ -4895,7 +4898,7 @@ void SetOffPanicBombs( UINT8 ubID, INT8 bPanicTrigger ) } } -BOOLEAN SetOffBombsInGridNo( UINT8 ubID, INT32 sGridNo, BOOLEAN fAllBombs, INT8 bLevel ) +BOOLEAN SetOffBombsInGridNo( UINT16 ubID, INT32 sGridNo, BOOLEAN fAllBombs, INT8 bLevel ) { UINT32 uiWorldBombIndex; UINT32 uiTimeStamp; @@ -5006,7 +5009,7 @@ BOOLEAN SetOffBombsInGridNo( UINT8 ubID, INT32 sGridNo, BOOLEAN fAllBombs, INT8 return( fFoundMine ); } -void ActivateSwitchInGridNo( UINT8 ubID, INT32 sGridNo ) +void ActivateSwitchInGridNo( UINT16 ubID, INT32 sGridNo ) { UINT32 uiWorldBombIndex; OBJECTTYPE * pObj; @@ -5307,10 +5310,10 @@ void UpdateSAMDoneRepair( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ ) // loop through civ team and find // anybody who is an NPC and // see if they get angry -void HandleBuldingDestruction( INT32 sGridNo, UINT8 ubOwner ) +void HandleBuldingDestruction( INT32 sGridNo, UINT16 ubOwner ) { SOLDIERTYPE * pSoldier; - UINT8 cnt; + UINT16 cnt; if ( ubOwner == NOBODY ) { @@ -5432,7 +5435,7 @@ UINT8 DetermineFlashbangEffect( SOLDIERTYPE *pSoldier, INT8 ubExplosionDir, BOOL // HEADROCK HAM 5.1: This handles launching fragments out of an explosion. The number of fragments is read from // the Explosives.XML file, and they each have a set amount of damage and range as well. They are currently // fired at completely random trajectories. -void FireFragments( UINT8 ubOwner, INT16 sX, INT16 sY, INT16 sZ, UINT16 usItem, UINT8 ubDirection ) +void FireFragments( UINT16 ubOwner, INT16 sX, INT16 sY, INT16 sZ, UINT16 usItem, UINT8 ubDirection ) { // WANNE: Disable Fragments in a multiplayer game, because this can lead to crashes when stepping on mines, ... if (is_networked) @@ -5951,7 +5954,7 @@ BOOLEAN HandleAttachedExplosions(UINT8 ubOwner, INT16 sX, INT16 sY, INT16 sZ, IN NewLightEffect( sGridNo, (UINT8)Explosive[ Item[iter->usItem].ubClassIndex ].ubDuration, (UINT8)Explosive[iter->usItem].ubStartRadius ); } else { - IgniteExplosion( ubOwner, sX, sY, sZ, sGridNo, Item[iter->usItem].uiIndex, bLevel, direction , NULL ); + IgniteExplosion( ubOwner, sX, sY, sZ, sGridNo, Item[iter->usItem].uiIndex, bLevel, direction, NULL ); } fAttFound = TRUE; } @@ -5960,17 +5963,17 @@ BOOLEAN HandleAttachedExplosions(UINT8 ubOwner, INT16 sX, INT16 sY, INT16 sZ, IN { if(Item[iter->usItem].gascan) { - IgniteExplosion( ubOwner, sX, sY, sZ, sGridNo, GAS_EXPLOSION, bLevel, DIRECTION_IRRELEVANT , NULL ); + IgniteExplosion( ubOwner, sX, sY, sZ, sGridNo, GAS_EXPLOSION, bLevel, DIRECTION_IRRELEVANT, NULL ); fAttFound = TRUE; } if ( Item[iter->usItem].alcohol > 0.0f ) { - IgniteExplosion( ubOwner, sX, sY, sZ, sGridNo, MOLOTOV_EXPLOSION, bLevel, DIRECTION_IRRELEVANT , NULL ); + IgniteExplosion( ubOwner, sX, sY, sZ, sGridNo, MOLOTOV_EXPLOSION, bLevel, DIRECTION_IRRELEVANT, NULL ); fAttFound = TRUE; } if(Item[iter->usItem].marbles) { - IgniteExplosion( ubOwner, sX, sY, sZ, sGridNo, FRAG_EXPLOSION, bLevel, DIRECTION_IRRELEVANT , NULL ); + IgniteExplosion( ubOwner, sX, sY, sZ, sGridNo, FRAG_EXPLOSION, bLevel, DIRECTION_IRRELEVANT, NULL ); fAttFound = TRUE; } } diff --git a/TileEngine/Explosion Control.h b/TileEngine/Explosion Control.h index acea7f41..b668dd86 100644 --- a/TileEngine/Explosion Control.h +++ b/TileEngine/Explosion Control.h @@ -15,7 +15,7 @@ typedef struct { UINT32 uiFlags; - UINT8 ubOwner; + UINT16 ubOwner; INT8 ubTypeID; UINT16 usItem; @@ -100,8 +100,8 @@ extern EXPLOSIONTYPE gExplosionData[ NUM_EXPLOSION_SLOTS ]; extern UINT8 gubElementsOnExplosionQueue; extern BOOLEAN gfExplosionQueueActive; -void IgniteExplosion( UINT8 ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT8 ubDirection = DIRECTION_IRRELEVANT, OBJECTTYPE * pObj =NULL ); -void InternalIgniteExplosion( UINT8 ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGridNo, UINT16 usItem, BOOLEAN fLocate, INT8 bLevel, UINT8 ubDirection = DIRECTION_IRRELEVANT, OBJECTTYPE * pObj =NULL ); +void IgniteExplosion( UINT16 ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT8 ubDirection = DIRECTION_IRRELEVANT, OBJECTTYPE * pObj =NULL ); +void InternalIgniteExplosion( UINT16 ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGridNo, UINT16 usItem, BOOLEAN fLocate, INT8 bLevel, UINT8 ubDirection = DIRECTION_IRRELEVANT, OBJECTTYPE * pObj =NULL ); void GenerateExplosion( EXPLOSION_PARAMS *pExpParams ); @@ -110,10 +110,10 @@ void GenerateExplosion( EXPLOSION_PARAMS *pExpParams ); void HandleExplosionWarningAnimations( ); void DecayBombTimers( void ); -void SetOffBombsByFrequency( UINT8 ubID, INT8 bFrequency ); -BOOLEAN SetOffBombsInGridNo( UINT8 ubID, INT32 sGridNo, BOOLEAN fAllBombs, INT8 bLevel ); -void ActivateSwitchInGridNo( UINT8 ubID, INT32 sGridNo ); -void SetOffPanicBombs( UINT8 ubID, INT8 bPanicTrigger ); +void SetOffBombsByFrequency( UINT16 ubID, INT8 bFrequency ); +BOOLEAN SetOffBombsInGridNo( UINT16 ubID, INT32 sGridNo, BOOLEAN fAllBombs, INT8 bLevel ); +void ActivateSwitchInGridNo( UINT16 ubID, INT32 sGridNo ); +void SetOffPanicBombs( UINT16 ubID, INT8 bPanicTrigger ); void UpdateExplosionFrame( INT32 iIndex, INT16 sCurrentFrame ); void RemoveExplosionData( INT32 iIndex ); @@ -136,16 +136,16 @@ void RemoveActiveExplosionMarkers(); #define GASMASK_MIN_STATUS 70 // OJW - 20091028 - Explosion damage sync -BOOLEAN DamageSoldierFromBlast( UINT8 ubPerson, UINT8 ubOwner, INT32 sBombGridNo, INT16 sWoundAmt, INT16 sBreathAmt, UINT32 uiDist, UINT16 usItem, INT16 sSubsequent , BOOL fFromRemoteClient = FALSE ); -BOOLEAN DishOutGasDamage( SOLDIERTYPE * pSoldier, EXPLOSIVETYPE * pExplosive, INT16 sSubsequent, BOOLEAN fRecompileMovementCosts, INT16 sWoundAmt, INT16 sBreathAmt, UINT8 ubOwner , BOOL fFromRemoteClient = FALSE ); -void SpreadEffect( INT32 sGridNo, UINT8 ubRadius, UINT16 usItem, UINT8 ubOwner, BOOLEAN fSubsequent, INT8 bLevel, INT32 iSmokeEffectNum , BOOL fFromRemoteClient = FALSE , BOOL fNewSmokeEffect = FALSE ); +BOOLEAN DamageSoldierFromBlast( UINT16 ubPerson, UINT16 ubOwner, INT32 sBombGridNo, INT16 sWoundAmt, INT16 sBreathAmt, UINT32 uiDist, UINT16 usItem, INT16 sSubsequent, BOOL fFromRemoteClient = FALSE ); +BOOLEAN DishOutGasDamage( SOLDIERTYPE * pSoldier, EXPLOSIVETYPE * pExplosive, INT16 sSubsequent, BOOLEAN fRecompileMovementCosts, INT16 sWoundAmt, INT16 sBreathAmt, UINT16 ubOwner, BOOL fFromRemoteClient = FALSE ); +void SpreadEffect( INT32 sGridNo, UINT8 ubRadius, UINT16 usItem, UINT16 ubOwner, BOOLEAN fSubsequent, INT8 bLevel, INT32 iSmokeEffectNum, BOOL fFromRemoteClient = FALSE, BOOL fNewSmokeEffect = FALSE ); void AddBombToQueue( UINT32 uiWorldBombIndex, UINT32 uiTimeStamp, BOOL fFromRemoteClient = FALSE ); // Flugente: activate everything connected to a tripwire in the surrounding if sGridNo on level bLevel with regard to the tripwire netwrok and hierarchy determined by ubFlag -BOOLEAN ActivateSurroundingTripwire( UINT8 ubID, INT32 sGridNo, INT8 bLevel, UINT32 ubFlag ); +BOOLEAN ActivateSurroundingTripwire( UINT16 ubID, INT32 sGridNo, INT8 bLevel, UINT32 ubFlag ); // Flugente: A special function for tripwire gun traps. Search if pObj has a gun attached. If so, fire a shot from that gun in a specific direction. Afterwards place the gun on the ground -void CheckAndFireTripwireGun( OBJECTTYPE* pObj, INT32 sGridNo, INT8 bLevel, UINT8 ubId, UINT8 ubDirection ); +void CheckAndFireTripwireGun( OBJECTTYPE* pObj, INT32 sGridNo, INT8 bLevel, UINT16 ubId, UINT8 ubDirection ); extern void ToggleActionItemsByFrequency( INT8 bFrequency ); extern void PerformItemAction( INT32 sGridNo, OBJECTTYPE * pObj ); @@ -168,8 +168,10 @@ extern void HandleSeeingPowerGenFan( UINT32 sGridNo ); extern void HandleSeeingFortifiedDoor( UINT32 sGridNo );//Ja25 UB #endif -void ExplosiveDamageGridNo( INT32 sGridNo, INT16 sWoundAmt, UINT32 uiDist, BOOLEAN *pfRecompileMovementCosts, - BOOLEAN fOnlyWalls, INT8 bMultiStructSpecialFlag, BOOLEAN fSubSequentMultiTilesTransitionDamage, UINT8 ubOwner, INT8 bLevel, +void ExplosiveDamageGridNo( INT32 sGridNo, INT16 sWoundAmt, UINT32 uiDist, + BOOLEAN *pfRecompileMovementCosts, + BOOLEAN fOnlyWalls, INT8 bMultiStructSpecialFlag, BOOLEAN fSubSequentMultiTilesTransitionDamage, UINT16 ubOwner, + INT8 bLevel, UINT8 ubReason ); // Flugente: handle secondary explosive effects diff --git a/TileEngine/LightEffects.cpp b/TileEngine/LightEffects.cpp index 91a0669a..d11e7fe7 100644 --- a/TileEngine/LightEffects.cpp +++ b/TileEngine/LightEffects.cpp @@ -538,7 +538,7 @@ void ResetLightEffects() } // Flugente: create and destroy light sources tied to a person -void CreatePersonalLight( INT32 sGridNo, UINT8 ubID ) +void CreatePersonalLight( INT32 sGridNo, UINT16 ubID ) { INT32 iLightIndex = NewLightEffectInternal( sGridNo, 0, 1 ); @@ -549,7 +549,7 @@ void CreatePersonalLight( INT32 sGridNo, UINT8 ubID ) } } -void RemovePersonalLights( UINT8 ubID ) +void RemovePersonalLights( UINT16 ubID ) { LIGHTEFFECT *pLight; diff --git a/TileEngine/LightEffects.h b/TileEngine/LightEffects.h index 783f6695..869d2e82 100644 --- a/TileEngine/LightEffects.h +++ b/TileEngine/LightEffects.h @@ -25,7 +25,7 @@ typedef struct // Flugente: added variables necessary for dynamic (flash-)lighting INT32 flags; - UINT8 ubOwner; + UINT16 ubOwner; } LIGHTEFFECT; @@ -55,7 +55,7 @@ void ResetLightEffects(); BOOLEAN IsLightEffectAtTile( INT32 sGridNo ); // Flugente: create and destroy light sources tied to a person -void CreatePersonalLight( INT32 sGridNo, UINT8 ubID ); -void RemovePersonalLights( UINT8 ubID ); +void CreatePersonalLight( INT32 sGridNo, UINT16 ubID ); +void RemovePersonalLights( UINT16 ubID ); #endif \ No newline at end of file diff --git a/TileEngine/SmokeEffects.cpp b/TileEngine/SmokeEffects.cpp index 798d8488..78213ddc 100644 --- a/TileEngine/SmokeEffects.cpp +++ b/TileEngine/SmokeEffects.cpp @@ -196,7 +196,7 @@ UINT16 FromSmokeTypeToWorldFlags( INT8 bType ) -INT32 NewSmokeEffect( INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT8 ubOwner, BOOL fFromRemoteClient ) +INT32 NewSmokeEffect( INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT16 ubOwner, BOOL fFromRemoteClient ) { SMOKEEFFECT *pSmoke; INT32 iSmokeIndex; @@ -331,12 +331,12 @@ INT32 NewSmokeEffect( INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT8 ubOwner, } // ATE: FALSE into subsequent-- it's the first one! - SpreadEffect( pSmoke->sGridNo, pSmoke->ubRadius, pSmoke->usItem, pSmoke->ubOwner, FALSE, bLevel, iSmokeIndex , fFromRemoteClient , TRUE ); + SpreadEffect( pSmoke->sGridNo, pSmoke->ubRadius, pSmoke->usItem, pSmoke->ubOwner, FALSE, bLevel, iSmokeIndex, fFromRemoteClient, TRUE ); return( iSmokeIndex ); } -INT32 NewSmokeEffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT8 ubOwner, BOOLEAN fFromRemoteClient, UINT8 ubDuration, UINT8 ubRadius, UINT8 ubGeneration) +INT32 NewSmokeEffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT16 ubOwner, BOOLEAN fFromRemoteClient, UINT8 ubDuration, UINT8 ubRadius, UINT8 ubGeneration) { SMOKEEFFECT *pSmoke; INT32 iSmokeIndex; diff --git a/TileEngine/SmokeEffects.h b/TileEngine/SmokeEffects.h index 996a40d6..590f1d8a 100644 --- a/TileEngine/SmokeEffects.h +++ b/TileEngine/SmokeEffects.h @@ -33,7 +33,7 @@ typedef struct TAG_SMOKE_EFFECT BOOLEAN fAllocated; INT8 bType; UINT16 usItem; - UINT8 ubOwner; + UINT16 ubOwner; UINT8 ubGeneration; UINT32 uiTimeOfLastUpdate; INT8 iMPTeamIndex; @@ -57,7 +57,7 @@ void AddSmokeEffectToTile( INT32 iSmokeEffectID, INT8 bType, INT32 sGridNo, INT8 void RemoveSmokeEffectFromTile( INT32 sGridNo, INT8 bLevel ); -INT32 NewSmokeEffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT8 ubOwner, BOOLEAN fFromRemoteClient = 0, UINT8 ubDuration = 0, UINT8 ubRadius = 0, UINT8 ubGeneration = 0); +INT32 NewSmokeEffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT16 ubOwner, BOOLEAN fFromRemoteClient = 0, UINT8 ubDuration = 0, UINT8 ubRadius = 0, UINT8 ubGeneration = 0); BOOLEAN SaveSmokeEffectsToSaveGameFile( HWFILE hFile ); BOOLEAN LoadSmokeEffectsFromLoadGameFile( HWFILE hFile ); diff --git a/TileEngine/overhead map.cpp b/TileEngine/overhead map.cpp index ddad42f9..134f0d65 100644 --- a/TileEngine/overhead map.cpp +++ b/TileEngine/overhead map.cpp @@ -751,7 +751,7 @@ void GoIntoOverheadMap( ) // Make sure we are in team panel mode... gfSwitchPanel = TRUE; gbNewPanel = TEAM_PANEL; - gubNewPanelParam = (UINT8)gusSelectedSoldier; + gubNewPanelParam = gusSelectedSoldier; fInterfacePanelDirty = DIRTYLEVEL2; // Disable tactical buttons...... @@ -772,7 +772,7 @@ void HandleOverheadUI(void) { INT32 sMousePos = 0; InputAtom InputEvent; - UINT8 ubID; + UINT16 ubID; // CHECK FOR MOUSE OVER REGIONS... if(GetOverheadMouseGridNo(&sMousePos)) diff --git a/TileEngine/physics.cpp b/TileEngine/physics.cpp index b3a15711..d9b8dfff 100644 --- a/TileEngine/physics.cpp +++ b/TileEngine/physics.cpp @@ -218,7 +218,7 @@ void RecountObjectSlots(void) } -INT32 CreatePhysicalObject( OBJECTTYPE *pGameObj, real dLifeLength, real xPos, real yPos, real zPos, real xForce, real yForce, real zForce, UINT8 ubOwner, UINT8 ubActionCode, UINT32 uiActionData, BOOLEAN fTestObject ) +INT32 CreatePhysicalObject( OBJECTTYPE *pGameObj, real dLifeLength, real xPos, real yPos, real zPos, real xForce, real yForce, real zForce, UINT16 ubOwner, UINT8 ubActionCode, UINT32 uiActionData, BOOLEAN fTestObject ) { INT32 iObjectIndex; FLOAT mass; diff --git a/TileEngine/physics.h b/TileEngine/physics.h index e27d8aad..81effb21 100644 --- a/TileEngine/physics.h +++ b/TileEngine/physics.h @@ -118,7 +118,7 @@ public: FLOAT dLifeSpan; BOOLEAN fFirstTimeMoved; INT32 sFirstGridNo; - UINT8 ubOwner; + UINT16 ubOwner; UINT8 ubActionCode; UINT32 uiActionData; BOOLEAN fDropItem; @@ -153,7 +153,7 @@ extern REAL_OBJECT ObjectSlots[ NUM_OBJECT_SLOTS ]; // OBJECT LIST STUFF -INT32 CreatePhysicalObject( OBJECTTYPE *pGameObj, real dLifeLength, real xPos, real yPos, real zPos, real xForce, real yForce, real zForce, UINT8 ubOwner, UINT8 ubActionCode, UINT32 uiActionData, BOOLEAN fTestObject ); +INT32 CreatePhysicalObject( OBJECTTYPE *pGameObj, real dLifeLength, real xPos, real yPos, real zPos, real xForce, real yForce, real zForce, UINT16 ubOwner, UINT8 ubActionCode, UINT32 uiActionData, BOOLEAN fTestObject ); BOOLEAN RemoveObjectSlot( INT32 iObject ); void RemoveAllPhysicsObjects( ); // OJW - 20091002 - mp explosives diff --git a/TileEngine/pits.cpp b/TileEngine/pits.cpp index 2194a51d..fc875bb9 100644 --- a/TileEngine/pits.cpp +++ b/TileEngine/pits.cpp @@ -211,7 +211,7 @@ void RemoveAllPits() void SearchForOtherMembersWithinPitRadiusAndMakeThemFall( INT32 sGridNo, INT16 sRadius ) { INT32 x, y, sNewGridNo; - UINT8 ubID; + UINT16 ubID; SOLDIERTYPE *pSoldier; @@ -241,7 +241,7 @@ void SearchForOtherMembersWithinPitRadiusAndMakeThemFall( INT32 sGridNo, INT16 s } } -void HandleFallIntoPitFromAnimation( UINT8 ubID ) +void HandleFallIntoPitFromAnimation( UINT16 ubID ) { SOLDIERTYPE *pSoldier = MercPtrs[ ubID ]; EXITGRID ExitGrid; diff --git a/TileEngine/pits.h b/TileEngine/pits.h index 0ffb99c1..5050fe6f 100644 --- a/TileEngine/pits.h +++ b/TileEngine/pits.h @@ -14,7 +14,7 @@ void RemoveAllPits(); extern BOOLEAN gfShowPits; extern BOOLEAN gfLoadPitsWithoutArming; -void HandleFallIntoPitFromAnimation( UINT8 ubID ); +void HandleFallIntoPitFromAnimation( UINT16 ubID ); #endif \ No newline at end of file diff --git a/TileEngine/structure.cpp b/TileEngine/structure.cpp index 1b2fb135..3af1798c 100644 --- a/TileEngine/structure.cpp +++ b/TileEngine/structure.cpp @@ -1788,7 +1788,7 @@ BOOLEAN StructureDensity( STRUCTURE * pStructure, UINT8 * pubLevel0, UINT8 * pub return( TRUE ); } -INT8 DamageStructure( STRUCTURE * pStructure, UINT8 ubDamage, UINT8 ubReason, INT32 sGridNo, INT16 sX, INT16 sY, UINT8 ubOwner, INT32 sAntiMaterialImpact ) +INT8 DamageStructure( STRUCTURE * pStructure, UINT8 ubDamage, UINT8 ubReason, INT32 sGridNo, INT16 sX, INT16 sY, UINT16 ubOwner, INT32 sAntiMaterialImpact ) { // do damage to a structure; returns TRUE if the structure should be removed STRUCTURE *pBase; diff --git a/TileEngine/structure.h b/TileEngine/structure.h index d9fd6793..2870deac 100644 --- a/TileEngine/structure.h +++ b/TileEngine/structure.h @@ -91,7 +91,7 @@ STRUCTURE* GetTallestStructureOnGridnoDrag( INT32 sGridNo, INT8 bLevel ); // FUNCTIONS FOR DETERMINING STUFF THAT BLOCKS VIEW FOR TILE_bASED LOS INT8 GetBlockingStructureInfo( INT32 sGridNo, INT8 bDir, INT8 bNextDir, INT8 bLevel, INT8 *pStructHeight, STRUCTURE ** ppTallestStructure, BOOLEAN fWallsBlock ); -INT8 DamageStructure( STRUCTURE * pStructure, UINT8 ubDamage, UINT8 ubReason, INT32 sGridNo, INT16 sX, INT16 sY, UINT8 ubOwner, INT32 sAntiMaterialImpact = 0 ); +INT8 DamageStructure( STRUCTURE * pStructure, UINT8 ubDamage, UINT8 ubReason, INT32 sGridNo, INT16 sX, INT16 sY, UINT16 ubOwner, INT32 sAntiMaterialImpact = 0 ); // Material armour type enumeration enum diff --git a/TileEngine/worlddef.h b/TileEngine/worlddef.h index 0d60208e..acac1b00 100644 --- a/TileEngine/worlddef.h +++ b/TileEngine/worlddef.h @@ -36,7 +36,7 @@ class OBJECTTYPE; class SOLDIERTYPE; // SB: new map version, with map dimensions added -#define MAJOR_MAP_VERSION 7.0 +#define MAJOR_MAP_VERSION 8.0 // 7.0 -> 8.0 Due to increased teamsizes. //Current minor map version updater. #define MINOR_MAP_OVERHEATING 28 // 27 -> 28: Flugente:: increased to 28 because of included weapon overheated and tripwire feature. See ObjectClass for the new Tags! //#define MINOR_MAP_VERSION 29 // 28 -> 29: increased range of roomnumbers to full UINT16 by DBrot @@ -273,7 +273,7 @@ typedef struct UINT8 ubAdjacentSoldierCnt; UINT8 ubTerrainID; - UINT8 ubReservedSoldierID; + UINT16 ubReservedSoldierID; UINT8 ubBloodInfo; UINT8 ubSmellInfo; } MAP_ELEMENT; diff --git a/TileEngine/worldman.cpp b/TileEngine/worldman.cpp index 68880690..0526775f 100644 --- a/TileEngine/worldman.cpp +++ b/TileEngine/worldman.cpp @@ -3758,7 +3758,7 @@ BOOLEAN IsRoofVisible2( INT32 sMapPos ) } -UINT8 WhoIsThere2( INT32 sGridNo, INT8 bLevel ) +UINT16 WhoIsThere2( INT32 sGridNo, INT8 bLevel ) { STRUCTURE * pStructure; @@ -3782,7 +3782,7 @@ UINT8 WhoIsThere2( INT32 sGridNo, INT8 bLevel ) { // found a person, on the right level! // structure ID and merc ID are identical for merc structures - return( (UINT8) pStructure->usStructureID ); + return( pStructure->usStructureID ); } } pStructure = pStructure->pNext; @@ -3790,7 +3790,7 @@ UINT8 WhoIsThere2( INT32 sGridNo, INT8 bLevel ) } - return( (UINT8)NOBODY ); + return( NOBODY ); } UINT8 GetTerrainType( INT32 sGridNo ) @@ -4167,7 +4167,7 @@ void UpdateTreeVisibility() // find visible soldier near spot if (!TileIsOutOfBounds(sSpot) && !fHideTree) { - for (UINT8 uiLoop = 0; uiLoop < guiNumMercSlots; uiLoop++) + for (UINT16 uiLoop = 0; uiLoop < guiNumMercSlots; uiLoop++) { pOpponent = MercSlots[uiLoop]; diff --git a/TileEngine/worldman.h b/TileEngine/worldman.h index 7e504d12..eed5ca67 100644 --- a/TileEngine/worldman.h +++ b/TileEngine/worldman.h @@ -128,7 +128,7 @@ BOOLEAN RemoveShadowFromLevelNode( INT32 iMapIndex, LEVELNODE *pNode ); BOOLEAN AddMercToHead( INT32 iMapIndex, SOLDIERTYPE *pSoldier, BOOLEAN fAddStructInfo ); BOOLEAN RemoveMerc( INT32 iMapIndex, SOLDIERTYPE *pSoldier, BOOLEAN fPlaceHolder ); -UINT8 WhoIsThere2( INT32 sGridNo, INT8 bLevel ); +UINT16 WhoIsThere2( INT32 sGridNo, INT8 bLevel ); BOOLEAN AddMercStructureInfo( INT32 sGridNo, SOLDIERTYPE *pSoldier ); BOOLEAN AddMercStructureInfoFromAnimSurface( INT32 sGridNo, SOLDIERTYPE *pSoldier, UINT16 usAnimSurface, UINT16 usAnimState ); BOOLEAN UpdateMercStructureInfo( SOLDIERTYPE *pSoldier ); diff --git a/Utils/Event Pump.h b/Utils/Event Pump.h index 536d0ab5..066f648e 100644 --- a/Utils/Event Pump.h +++ b/Utils/Event Pump.h @@ -163,7 +163,7 @@ typedef struct INT16 sYPos; INT16 sZPos; INT16 sRange; - UINT8 ubAttackerID; + UINT16 ubAttackerID; BOOLEAN fHit; UINT8 ubSpecial; UINT8 ubLocation; @@ -179,7 +179,7 @@ typedef struct INT16 sZPos; UINT16 usWeaponIndex; INT16 bWeaponStatus; - UINT8 ubAttackerID; + UINT16 ubAttackerID; UINT16 usStructureID; INT32 iImpact; INT32 iBullet; @@ -193,19 +193,19 @@ typedef struct UINT16 usStructureID; BOOLEAN fBlowWindowSouth; BOOLEAN fLargeForce; - UINT8 ubAttackerID; + UINT16 ubAttackerID; INT32 iBullet; } EV_S_WINDOWHIT; typedef struct { - UINT8 ubAttackerID; + UINT16 ubAttackerID; INT32 iBullet; } EV_S_MISS; typedef struct { - UINT8 ubNoiseMaker; + UINT16 ubNoiseMaker; INT32 sGridNo; UINT8 bLevel; UINT8 ubTerrType; @@ -231,7 +231,7 @@ typedef struct typedef struct { - UINT8 usSoldierID; + UINT16 usSoldierID; // UINT32 uiUniqueId; UINT16 usPathDataSize; // Size of Path INT32 sAtGridNo; // Owner merc is at this tile when sending packet @@ -249,7 +249,7 @@ typedef struct typedef struct { - UINT8 usSoldierID; + UINT16 usSoldierID; //UINT32 uiUniqueId; INT32 sAtGridNo; // Owner merc is at this tile when sending packet INT8 bActionPoints; // current A.P. value diff --git a/Utils/PopUpBox.cpp b/Utils/PopUpBox.cpp index 26480dd1..f0bfc3c8 100644 --- a/Utils/PopUpBox.cpp +++ b/Utils/PopUpBox.cpp @@ -395,7 +395,7 @@ void AddMonoString(UINT32 *hStringHandle, STR16 pString) } -// adds a SECOND column string to the CURRENT popup box +// Adds string to the current popup box 2nd column. !!! String's position is the LAST used position in the 1st column !!! void AddSecondColumnMonoString( UINT32 *hStringHandle, STR16 pString ) { STR16 pLocalString=NULL; @@ -441,6 +441,52 @@ void AddSecondColumnMonoString( UINT32 *hStringHandle, STR16 pString ) return; } +// Adds a string to the first available slot in the second column +void AddMonoStringToSecondColumn(UINT32* hStringHandle, STR16 pString) +{ + STR16 pLocalString = NULL; + POPUPSTRINGPTR pStringSt = NULL; + INT32 iCounter = 0; + + + if ((guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT)) + return; + + Assert(PopUpBoxList[guiCurrentBox] != NULL); + + // find the free text string index in 2nd column + for (iCounter = 0; (iCounter < MAX_POPUP_BOX_STRING_COUNT) && (PopUpBoxList[guiCurrentBox]->pSecondColumnString[iCounter] != NULL); iCounter++); + + if (iCounter >= MAX_POPUP_BOX_STRING_COUNT) + { + // using too many text lines, or not freeing them up properly + Assert(0); + return; + } + + pStringSt = (POPUPSTRING*)(MemAlloc(sizeof(POPUPSTRING))); + if (pStringSt == NULL) + return; + + pLocalString = (STR16)MemAlloc((wcslen(pString) + 1) * sizeof(CHAR16)); + if (pLocalString == NULL) + return; + + wcscpy(pLocalString, pString); + + RemoveCurrentBoxSecondaryText(iCounter); + + PopUpBoxList[guiCurrentBox]->pSecondColumnString[iCounter] = pStringSt; + PopUpBoxList[guiCurrentBox]->pSecondColumnString[iCounter]->fColorFlag = FALSE; + PopUpBoxList[guiCurrentBox]->pSecondColumnString[iCounter]->pString = pLocalString; + PopUpBoxList[guiCurrentBox]->pSecondColumnString[iCounter]->fShadeFlag = FALSE; + PopUpBoxList[guiCurrentBox]->pSecondColumnString[iCounter]->fHighLightFlag = FALSE; + + *hStringHandle = iCounter; + + return; +} + // Adds a COLORED first column string to the CURRENT box void AddColorString(INT32 *hStringHandle, STR16 pString) @@ -543,6 +589,27 @@ UINT32 GetNumberOfLinesOfTextInBox( INT32 hBoxHandle ) } +UINT32 GetNumberOfSecondaryLinesOfTextInBox(INT32 hBoxHandle) +{ + INT32 iCounter = 0; + + if ((hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT)) + return(0); + + // count number of lines + // check string size + for (iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++) + { + if (PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter] == NULL) + { + break; + } + } + + return(iCounter); +} + + void SetBoxFont(INT32 hBoxHandle, UINT32 uiFont) { @@ -585,6 +652,15 @@ void SetBoxSecondColumnCurrentOffset( INT32 hBoxHandle, UINT32 uiCurrentOffset ) return; } +void SetBoxSecondColumnOffsetAdjustment(INT32 hBoxHandle, INT16 x) +{ + if ((hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT)) + return; + + PopUpBoxList[hBoxHandle]->usSecondColumnOffsetAdjustment = x; + return; +} + void SetBoxSecondColumnFont(INT32 hBoxHandle, UINT32 uiFont) { UINT32 iCounter=0; @@ -1284,7 +1360,7 @@ BOOLEAN DrawBox(UINT32 uiCounter) usTopX=(UINT16)PopUpBoxList[uiCounter]->Position.iX; usTopY=(UINT16)PopUpBoxList[uiCounter]->Position.iY; - usWidth=((UINT16)(PopUpBoxList[uiCounter]->Dimensions.iRight-PopUpBoxList[uiCounter]->Dimensions.iLeft)); + usWidth=((UINT16)(PopUpBoxList[uiCounter]->Dimensions.iRight-PopUpBoxList[uiCounter]->Dimensions.iLeft + PopUpBoxList[uiCounter]->usSecondColumnOffsetAdjustment)); usHeight=((UINT16)(PopUpBoxList[uiCounter]->Dimensions.iBottom-PopUpBoxList[uiCounter]->Dimensions.iTop)); //CHRISL: Adjust position for screen limits @@ -1306,7 +1382,7 @@ BOOLEAN DrawBox(UINT32 uiCounter) } // make sure it will fit on screen! - Assert( usTopX + usWidth <= SCREEN_WIDTH ); + Assert( usTopX + usWidth <= SCREEN_WIDTH ); Assert( usTopY + usHeight <= SCREEN_HEIGHT ); // subtract 4 because the 2 2-pixel corners are handled separately @@ -1392,100 +1468,94 @@ BOOLEAN DrawBoxText(UINT32 uiCounter) // there is text in this line? if(PopUpBoxList[uiCounter]->Text[uiCount]) { - // set font - SetFont(PopUpBoxList[uiCounter]->Text[uiCount]->uiFont); + SetFont(PopUpBoxList[uiCounter]->Text[uiCount]->uiFont); // are we highlighting?...shading?..or neither if( ( PopUpBoxList[ uiCounter ]->Text[ uiCount ]->fHighLightFlag == FALSE )&&( PopUpBoxList[ uiCounter ]->Text[ uiCount ]->fShadeFlag == FALSE) &&( PopUpBoxList[ uiCounter ]->Text[ uiCount ]->fSecondaryShadeFlag == FALSE ) ) { // neither - SetFontForeground(PopUpBoxList[uiCounter]->Text[uiCount]->ubForegroundColor); + SetFontForeground(PopUpBoxList[uiCounter]->Text[uiCount]->ubForegroundColor); } - else if( ( PopUpBoxList[ uiCounter ]->Text[ uiCount ]->fHighLightFlag == TRUE ) ) + else if( ( PopUpBoxList[ uiCounter ]->Text[ uiCount ]->fHighLightFlag == TRUE ) ) { - // highlight - SetFontForeground(PopUpBoxList[uiCounter]->Text[uiCount]->ubHighLight); + SetFontForeground(PopUpBoxList[uiCounter]->Text[uiCount]->ubHighLight); } else if( ( PopUpBoxList[ uiCounter ]->Text[ uiCount ]->fSecondaryShadeFlag == TRUE ) ) { SetFontForeground(PopUpBoxList[uiCounter]->Text[uiCount]->ubSecondaryShade); } - else + else { //shading SetFontForeground(PopUpBoxList[uiCounter]->Text[uiCount]->ubShade); } // set background - SetFontBackground(PopUpBoxList[uiCounter]->Text[uiCount]->ubBackgroundColor); + SetFontBackground(PopUpBoxList[uiCounter]->Text[uiCount]->ubBackgroundColor); // copy string - wcsncpy(sString, PopUpBoxList[uiCounter]->Text[uiCount]->pString, wcslen(PopUpBoxList[uiCounter]->Text[uiCount]->pString)+1); + wcsncpy(sString, PopUpBoxList[uiCounter]->Text[uiCount]->pString, wcslen(PopUpBoxList[uiCounter]->Text[uiCount]->pString)+1); - // cnetering? - if(PopUpBoxList[uiCounter]->uiFlags & POPUP_BOX_FLAG_CENTER_TEXT) + // centering? + if(PopUpBoxList[uiCounter]->uiFlags & POPUP_BOX_FLAG_CENTER_TEXT) { - FindFontCenterCoordinates(((INT16)(PopUpBoxList[uiCounter]->Position.iX+PopUpBoxList[uiCounter]->uiLeftMargin)),((INT16)(PopUpBoxList[uiCounter]->Position.iY+uiCount*GetFontHeight(PopUpBoxList[uiCounter]->Text[uiCount]->uiFont)+PopUpBoxList[uiCounter]->uiTopMargin+uiCount*PopUpBoxList[uiCounter]->uiLineSpace)),((INT16)(PopUpBoxList[uiCounter]->Dimensions.iRight-(PopUpBoxList[uiCounter]->uiRightMargin+PopUpBoxList[uiCounter]->uiLeftMargin+2))),((INT16)GetFontHeight(PopUpBoxList[uiCounter]->Text[uiCount]->uiFont)),(sString),((INT32)PopUpBoxList[uiCounter]->Text[uiCount]->uiFont) ,&uX, &uY); + FindFontCenterCoordinates(((INT16)(PopUpBoxList[uiCounter]->Position.iX+PopUpBoxList[uiCounter]->uiLeftMargin)),((INT16)(PopUpBoxList[uiCounter]->Position.iY+uiCount*GetFontHeight(PopUpBoxList[uiCounter]->Text[uiCount]->uiFont)+PopUpBoxList[uiCounter]->uiTopMargin+uiCount*PopUpBoxList[uiCounter]->uiLineSpace)),((INT16)(PopUpBoxList[uiCounter]->Dimensions.iRight-(PopUpBoxList[uiCounter]->uiRightMargin+PopUpBoxList[uiCounter]->uiLeftMargin+2))),((INT16)GetFontHeight(PopUpBoxList[uiCounter]->Text[uiCount]->uiFont)),(sString),((INT32)PopUpBoxList[uiCounter]->Text[uiCount]->uiFont) ,&uX, &uY); } - else + else { - uX=((INT16)(PopUpBoxList[uiCounter]->Position.iX+PopUpBoxList[uiCounter]->uiLeftMargin)); - uY=((INT16)(PopUpBoxList[uiCounter]->Position.iY+uiCount*GetFontHeight(PopUpBoxList[uiCounter]->Text[uiCount]->uiFont)+PopUpBoxList[uiCounter]->uiTopMargin+uiCount*PopUpBoxList[uiCounter]->uiLineSpace)); + uX=((INT16)(PopUpBoxList[uiCounter]->Position.iX+PopUpBoxList[uiCounter]->uiLeftMargin)); + uY=((INT16)(PopUpBoxList[uiCounter]->Position.iY+uiCount*GetFontHeight(PopUpBoxList[uiCounter]->Text[uiCount]->uiFont)+PopUpBoxList[uiCounter]->uiTopMargin+uiCount*PopUpBoxList[uiCounter]->uiLineSpace)); } // print - //gprintfdirty(uX,uY,PopUpBoxList[uiCounter]->Text[uiCount]->pString ); - mprintf(uX,uY,PopUpBoxList[uiCounter]->Text[uiCount]->pString); + mprintf(uX,uY,PopUpBoxList[uiCounter]->Text[uiCount]->pString); } // there is secondary text in this line? if(PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]) { - // set font - SetFont(PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->uiFont); + SetFont(PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->uiFont); // are we highlighting?...shading?..or neither if( ( PopUpBoxList[ uiCounter ]->pSecondColumnString[ uiCount ]->fHighLightFlag == FALSE )&&( PopUpBoxList[ uiCounter ]->pSecondColumnString[ uiCount ]->fShadeFlag == FALSE) ) { // neither - SetFontForeground(PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->ubForegroundColor); + SetFontForeground(PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->ubForegroundColor); } - else if( ( PopUpBoxList[ uiCounter ]->pSecondColumnString[ uiCount ]->fHighLightFlag == TRUE ) ) + else if( ( PopUpBoxList[ uiCounter ]->pSecondColumnString[ uiCount ]->fHighLightFlag == TRUE ) ) { - // highlight - SetFontForeground(PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->ubHighLight); + SetFontForeground(PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->ubHighLight); } - else + else { //shading SetFontForeground(PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->ubShade); } // set background - SetFontBackground(PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->ubBackgroundColor); + SetFontBackground(PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->ubBackgroundColor); // copy string - wcsncpy(sString, PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->pString, wcslen(PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->pString)+1); + wcsncpy(sString, PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->pString, wcslen(PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->pString)+1); - // cnetering? - if(PopUpBoxList[uiCounter]->uiFlags & POPUP_BOX_FLAG_CENTER_TEXT) + // centering? + if(PopUpBoxList[uiCounter]->uiFlags & POPUP_BOX_FLAG_CENTER_TEXT) { - FindFontCenterCoordinates(((INT16)(PopUpBoxList[uiCounter]->Position.iX+PopUpBoxList[uiCounter]->uiLeftMargin)),((INT16)(PopUpBoxList[uiCounter]->Position.iY+uiCount*GetFontHeight(PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->uiFont)+PopUpBoxList[uiCounter]->uiTopMargin+uiCount*PopUpBoxList[uiCounter]->uiLineSpace)),((INT16)(PopUpBoxList[uiCounter]->Dimensions.iRight-(PopUpBoxList[uiCounter]->uiRightMargin+PopUpBoxList[uiCounter]->uiLeftMargin+2))),((INT16)GetFontHeight(PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->uiFont)),(sString),((INT32)PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->uiFont) ,&uX, &uY); + FindFontCenterCoordinates(((INT16)(PopUpBoxList[uiCounter]->Position.iX+PopUpBoxList[uiCounter]->uiLeftMargin)),((INT16)(PopUpBoxList[uiCounter]->Position.iY+uiCount*GetFontHeight(PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->uiFont)+PopUpBoxList[uiCounter]->uiTopMargin+uiCount*PopUpBoxList[uiCounter]->uiLineSpace)),((INT16)(PopUpBoxList[uiCounter]->Dimensions.iRight-(PopUpBoxList[uiCounter]->uiRightMargin+PopUpBoxList[uiCounter]->uiLeftMargin+2))),((INT16)GetFontHeight(PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->uiFont)),(sString),((INT32)PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->uiFont) ,&uX, &uY); } - else + else { - uX=((INT16)(PopUpBoxList[uiCounter]->Position.iX+PopUpBoxList[uiCounter]->uiLeftMargin + PopUpBoxList[uiCounter]->uiSecondColumnCurrentOffset ) ); - uY=((INT16)(PopUpBoxList[uiCounter]->Position.iY+uiCount*GetFontHeight(PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->uiFont)+PopUpBoxList[uiCounter]->uiTopMargin+uiCount*PopUpBoxList[uiCounter]->uiLineSpace)); + uX=((INT16)(PopUpBoxList[uiCounter]->Position.iX+PopUpBoxList[uiCounter]->uiLeftMargin + PopUpBoxList[uiCounter]->uiSecondColumnCurrentOffset + PopUpBoxList[uiCounter]->usSecondColumnOffsetAdjustment)); + uY=((INT16)(PopUpBoxList[uiCounter]->Position.iY+uiCount*GetFontHeight(PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->uiFont)+PopUpBoxList[uiCounter]->uiTopMargin+uiCount*PopUpBoxList[uiCounter]->uiLineSpace)); } // print - //gprintfdirty(uX,uY,PopUpBoxList[uiCounter]->Text[uiCount]->pString ); - mprintf(uX,uY,PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->pString); + mprintf(uX,uY,PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->pString); } } @@ -1550,6 +1620,13 @@ void ResizeBoxToText(INT32 hBoxHandle) // Flugente we shouldn't have added more popup options than we can display anyway, but I have no idea where to stop that, so at least we can fix this PopUpBoxList[hBoxHandle]->Dimensions.iBottom = min( iHeight, SCREEN_HEIGHT - PopUpBoxList[hBoxHandle]->Position.iY); PopUpBoxList[hBoxHandle]->Dimensions.iRight = min( iWidth, SCREEN_WIDTH - PopUpBoxList[hBoxHandle]->Position.iX ); + + // Constrain popup box height to background graphics max height. Otherwise we get blue graphics glitches + const auto popupBoxHeight = PopUpBoxList[hBoxHandle]->Dimensions.iBottom - PopUpBoxList[hBoxHandle]->Dimensions.iTop; + if (popupBoxHeight > 480) + { + PopUpBoxList[hBoxHandle]->Dimensions.iBottom = PopUpBoxList[hBoxHandle]->Dimensions.iTop + 480; + } } diff --git a/Utils/PopUpBox.h b/Utils/PopUpBox.h index 033e6227..4f3b6dd7 100644 --- a/Utils/PopUpBox.h +++ b/Utils/PopUpBox.h @@ -46,6 +46,7 @@ struct popupbox{ UINT32 uiBuffer; UINT32 uiSecondColumnMinimunOffset; UINT32 uiSecondColumnCurrentOffset; + INT16 usSecondColumnOffsetAdjustment; UINT32 uiBoxMinWidth; BOOLEAN fUpdated; BOOLEAN fShowBox; @@ -74,6 +75,7 @@ void SetBoxBuffer(INT32 hBoxHandle, UINT32 uiBuffer); void SetBoxPosition(INT32 hBoxHandle,SGPPoint Position); void GetBoxPosition( INT32 hBoxHandle, SGPPoint *Position ); UINT32 GetNumberOfLinesOfTextInBox( INT32 hBoxHandle ); +UINT32 GetNumberOfSecondaryLinesOfTextInBox(INT32 hBoxHandle); void SetBoxSize( INT32 hBoxHandle, SGPRect Dimensions ); void GetBoxSize( INT32 hBoxHandle, SGPRect *Dimensions ); void SetBoxFlags( INT32 hBoxHandle, UINT32 uiFlags); @@ -136,6 +138,7 @@ void HideAllBoxes( void ); // add the second column monocrome string void AddSecondColumnMonoString( UINT32 *hStringHandle, STR16 pString ); +void AddMonoStringToSecondColumn(UINT32* hStringHandle, STR16 pString); // set the 2nd column font for this box void SetBoxSecondColumnFont(INT32 hBoxHandle, UINT32 uiFont); @@ -156,6 +159,8 @@ void SetBoxSecondColumnForeground(INT32 hBoxHandle, UINT8 ubColor); void SetBoxSecondColumnBackground(INT32 hBoxHandle, UINT8 ubColor); void SetBoxSecondColumnHighLight(INT32 hBoxHandle, UINT8 ubColor); void SetBoxSecondColumnShade(INT32 hBoxHandle, UINT8 ubColor); +// Manual adjustment for 2nd column offset, eg. when 1st column has a title text that's wider than the rest and you want to move 2nd column texts towards the 1st column some. +void SetBoxSecondColumnOffsetAdjustment(INT32 hBoxHandle, INT16 x); // secondary shades for boxes diff --git a/builddefines.h b/builddefines.h index 5e48f506..4ca80242 100644 --- a/builddefines.h +++ b/builddefines.h @@ -33,7 +33,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 diff --git a/gamescreen.cpp b/gamescreen.cpp index a6a05c8a..3c5be8e6 100644 --- a/gamescreen.cpp +++ b/gamescreen.cpp @@ -117,7 +117,7 @@ BOOLEAN gfExitToNewSector = FALSE; BOOLEAN gfGameScreenLocateToSoldier = FALSE; BOOLEAN gfEnteringMapScreen = FALSE; UINT32 uiOldMouseCursor; -UINT8 gubPreferredInitialSelectedGuy = NOBODY; +UINT16 gubPreferredInitialSelectedGuy = NOBODY; BOOLEAN gfTacticalIsModal = FALSE; MOUSE_REGION gTacticalDisableRegion; @@ -1030,7 +1030,7 @@ void TacticalScreenLocateToSoldier( ) { INT32 cnt; SOLDIERTYPE *pSoldier; - INT16 bLastTeamID; + UINT16 bLastTeamID; BOOLEAN fPreferedGuyUsed = FALSE; if ( gubPreferredInitialSelectedGuy != NOBODY ) @@ -1075,7 +1075,7 @@ void UpdateTeamPanelAssignments( ) { INT32 cnt; SOLDIERTYPE *pSoldier; - INT16 bLastTeamID; + UINT16 bLastTeamID; // Remove all players RemoveAllPlayersFromSlot( ); diff --git a/gamescreen.h b/gamescreen.h index 38403749..49a65019 100644 --- a/gamescreen.h +++ b/gamescreen.h @@ -16,7 +16,7 @@ typedef void (*MODAL_HOOK)( void ); extern BOOLEAN gfGameScreenLocateToSoldier; extern BOOLEAN gfEnteringMapScreen; -extern UINT8 gubPreferredInitialSelectedGuy; +extern UINT16 gubPreferredInitialSelectedGuy; void EnterMapScreen( ); diff --git a/lua/lua_VS2019.vcxproj b/lua/lua_VS2019.vcxproj index 3052380a..863ddc7b 100644 --- a/lua/lua_VS2019.vcxproj +++ b/lua/lua_VS2019.vcxproj @@ -78,67 +78,67 @@ StaticLibrary true NotSet - v142 + v143 StaticLibrary true NotSet - v142 + v143 StaticLibrary true NotSet - v142 + v143 StaticLibrary true NotSet - v142 + v143 StaticLibrary false false NotSet - v142 + v143 StaticLibrary false false NotSet - v142 + v143 StaticLibrary false false NotSet - v142 + v143 StaticLibrary false false NotSet - v142 + v143 StaticLibrary false false NotSet - v142 + v143 StaticLibrary false false NotSet - v142 + v143 diff --git a/lua/lua_VS2019.vcxproj.user b/lua/lua_VS2019.vcxproj.user new file mode 100644 index 00000000..88a55094 --- /dev/null +++ b/lua/lua_VS2019.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file From 5c1317042466ee9e67e6715e836ad19cefc421e7 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 10 Oct 2022 15:58:11 +0300 Subject: [PATCH 002/192] Create .gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..f77e4723 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +build/ +lib/ From 9ac53cac32d8d274153f985a6af82162f051bace Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Thu, 27 Jul 2023 21:29:37 +0300 Subject: [PATCH 003/192] Fix UINT8 references to pSoldier->ubID to UINT16 --- Laptop/insurance Contract.cpp | 4 ++-- Laptop/insurance Contract.h | 6 +++--- Strategic/Game Event Hook.cpp | 4 ++-- Strategic/Rebel Command.cpp | 14 +++++++------- Tactical/PATHAI.cpp | 2 +- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/Laptop/insurance Contract.cpp b/Laptop/insurance Contract.cpp index c7114942..0e23acc6 100644 --- a/Laptop/insurance Contract.cpp +++ b/Laptop/insurance Contract.cpp @@ -1355,7 +1355,7 @@ BOOLEAN AddLifeInsurancePayout( SOLDIERTYPE *pSoldier ) } -void StartInsuranceInvestigation( UINT8 ubPayoutID ) +void StartInsuranceInvestigation( UINT16 ubPayoutID ) { UINT8 ubDays; @@ -1408,7 +1408,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 ) diff --git a/Laptop/insurance Contract.h b/Laptop/insurance Contract.h index 1be525a9..d795d277 100644 --- a/Laptop/insurance Contract.h +++ b/Laptop/insurance Contract.h @@ -19,8 +19,8 @@ void DailyUpdateOfInsuredMercs(); BOOLEAN AddLifeInsurancePayout( SOLDIERTYPE *pSoldier ); void InsuranceContractPayLifeInsuranceForDeadMerc( UINT16 ubPayoutID ); -void StartInsuranceInvestigation( UINT8 ubPayoutID ); -void EndInsuranceInvestigation( UINT8 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 \ No newline at end of file +#endif diff --git a/Strategic/Game Event Hook.cpp b/Strategic/Game Event Hook.cpp index 1a971658..845c0b6a 100644 --- a/Strategic/Game Event Hook.cpp +++ b/Strategic/Game Event Hook.cpp @@ -392,10 +392,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 ); diff --git a/Strategic/Rebel Command.cpp b/Strategic/Rebel Command.cpp index b5ce30aa..a11bedfc 100644 --- a/Strategic/Rebel Command.cpp +++ b/Strategic/Rebel Command.cpp @@ -2178,7 +2178,7 @@ BOOLEAN SetupMissionAgentBox(UINT16 x, UINT16 y, INT8 index) // temp/fixme std::vector mercs; - for (UINT8 i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i) + for (UINT16 i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i) { SOLDIERTYPE* pSoldier = MercPtrs[i]; @@ -2823,7 +2823,7 @@ void PrepareMission(INT8 index) // confirmation popup std::vector mercs; - for (UINT8 i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i) + for (UINT16 i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i) { SOLDIERTYPE* pSoldier = MercPtrs[i]; @@ -2988,7 +2988,7 @@ void PrepareMission(INT8 index) if (!evt.sentGenericRebelAgent) { - for (UINT8 i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i) + for (UINT16 i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i) { SOLDIERTYPE* pSoldier = MercPtrs[i]; if (pSoldier->ubProfile == evt.mercProfileId) @@ -4907,7 +4907,7 @@ 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 (UINT16 i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i) { const SOLDIERTYPE* pSoldier = MercPtrs[i]; @@ -4978,7 +4978,7 @@ void HandleStrategicEvent(const UINT32 eventParam) if (!evt1.sentGenericRebelAgent) { - for (UINT8 i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i) + for (UINT16 i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i) { SOLDIERTYPE* pSoldier = MercPtrs[i]; if (pSoldier->ubProfile == evt1.mercProfileId) @@ -5005,7 +5005,7 @@ 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 (UINT16 i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i) { SOLDIERTYPE* pSoldier = MercPtrs[i]; if (pSoldier->ubProfile == evt1.mercProfileId) @@ -5027,7 +5027,7 @@ 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 (UINT16 i = gTacticalStatus.Team[OUR_TEAM].bFirstID; i <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++i) { SOLDIERTYPE* pSoldier = MercPtrs[i]; if (pSoldier->ubProfile == evt1.mercProfileId) diff --git a/Tactical/PATHAI.cpp b/Tactical/PATHAI.cpp index 25cebecf..2a7de9cb 100644 --- a/Tactical/PATHAI.cpp +++ b/Tactical/PATHAI.cpp @@ -2075,7 +2075,7 @@ bool AStarPathfinder::IsSomeoneInTheWay() if (fPathAroundPeople && ( (CurrentNode != DestNode) || fCopyReachable) ) { // ATE: ONLY cancel if they are moving..... - UINT8 ubMerc = WhoIsThere2( CurrentNode, pSoldier->pathing.bLevel); + UINT16 ubMerc = WhoIsThere2( CurrentNode, pSoldier->pathing.bLevel); if ( ubMerc < NOBODY && ubMerc != pSoldier->ubID ) { // Check for movement.... From 57cc888cd7291d56662a3e6e15aa39bac7ae0b8b Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Thu, 27 Jul 2023 21:30:03 +0300 Subject: [PATCH 004/192] Allow more creatures, civs and rebels --- Tactical/Overhead Types.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Tactical/Overhead Types.h b/Tactical/Overhead Types.h index 3a86994b..2ca0d5db 100644 --- a/Tactical/Overhead Types.h +++ b/Tactical/Overhead Types.h @@ -285,11 +285,11 @@ extern UINT16 giMAXIMUM_NUMBER_OF_PLAYER_VEHICLES; extern UINT16 giMAXIMUM_NUMBER_OF_PLAYER_SLOTS; #define CODE_MAXIMUM_NUMBER_OF_ENEMIES 256 extern UINT16 giMAXIMUM_NUMBER_OF_ENEMIES; -#define CODE_MAXIMUM_NUMBER_OF_CREATURES 40 +#define CODE_MAXIMUM_NUMBER_OF_CREATURES 256 extern UINT16 giMAXIMUM_NUMBER_OF_CREATURES; -#define CODE_MAXIMUM_NUMBER_OF_REBELS 64 +#define CODE_MAXIMUM_NUMBER_OF_REBELS 256 extern UINT16 giMAXIMUM_NUMBER_OF_REBELS; -#define CODE_MAXIMUM_NUMBER_OF_CIVS 40 +#define CODE_MAXIMUM_NUMBER_OF_CIVS 256 extern UINT16 giMAXIMUM_NUMBER_OF_CIVS; // The following should be the largest from the above set of constants. From 06918d75853f66e4a7549134b534c601774467be Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sat, 29 Jul 2023 14:43:57 +0300 Subject: [PATCH 005/192] Update Item Types.h uint8 -> uint16 --- Tactical/Item Types.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tactical/Item Types.h b/Tactical/Item Types.h index fb78fe59..c43c6fc2 100644 --- a/Tactical/Item Types.h +++ b/Tactical/Item Types.h @@ -247,7 +247,7 @@ public: UINT32 lbeClass; UINT16 lbeIndex; - UINT8 ubID; + UINT16 ubID; BOOLEAN ZipperFlag; int uniqueID; UINT32 uiNodeChecksum; From 4e253d0ec0e14a35af6ad3594e44fec3c64192a6 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sat, 9 Nov 2024 15:24:10 +0200 Subject: [PATCH 006/192] Update Dialogue Control.cpp Fix an access to member variable that prevented compilation --- Tactical/Dialogue Control.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tactical/Dialogue Control.cpp b/Tactical/Dialogue Control.cpp index 659c8c48..6ffe3ee1 100644 --- a/Tactical/Dialogue Control.cpp +++ b/Tactical/Dialogue Control.cpp @@ -900,11 +900,11 @@ void HandleDialogue( ) } else if ( QItem.uiSpecialEventFlag & DIALOGUE_SPECIAL_EVENT_CONTRACT_WANTS_TO_RENEW ) { - HandleMercIsWillingToRenew( (UINT16)QItem->uiSpecialEventData ); + HandleMercIsWillingToRenew( (UINT16)QItem.uiSpecialEventData ); } else if ( QItem.uiSpecialEventFlag & DIALOGUE_SPECIAL_EVENT_CONTRACT_NOGO_TO_RENEW ) { - HandleMercIsNotWillingToRenew( (UINT16)QItem->uiSpecialEventData ); + HandleMercIsNotWillingToRenew( (UINT16)QItem.uiSpecialEventData ); } else { From 17875978e0feef80b95215dd39299e3786296977 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sat, 9 Nov 2024 15:24:30 +0200 Subject: [PATCH 007/192] Update LOS.cpp Fix missing variable declaration --- Tactical/LOS.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tactical/LOS.cpp b/Tactical/LOS.cpp index 9f70af34..d7ad5a97 100644 --- a/Tactical/LOS.cpp +++ b/Tactical/LOS.cpp @@ -2434,7 +2434,7 @@ INT32 SoldierToLocationWindowTest( SOLDIERTYPE * pStartSoldier, INT32 sEndGridNo INT32 SoldierTo3DLocationLineOfSightTest( SOLDIERTYPE * pStartSoldier, INT32 sGridNo, INT8 bLevel, INT8 bCubeLevel, INT8 bAware, int iTileSightLimit, bool adjustForSight ) { FLOAT dStartZPos, dEndZPos; - INT16 sXPos, sYPos; + INT16 sX, sY, sX2, sY2; UINT16 ubTargetID; BOOLEAN fOk; From bc870123bf7e7f633472d80f144890e18d17b428 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sat, 9 Nov 2024 15:29:07 +0200 Subject: [PATCH 008/192] Implement page scrolling in Laptop Personnel page Pressing Shift and right or left arrow buttons, 'a' or 'd' buttons, or previous or next ingame buttons now advance one whole page. Without shift pressed down, all three function as original and move one merc at a time. --- Laptop/personnel.cpp | 153 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 141 insertions(+), 12 deletions(-) diff --git a/Laptop/personnel.cpp b/Laptop/personnel.cpp index 935b5cf0..524465d9 100644 --- a/Laptop/personnel.cpp +++ b/Laptop/personnel.cpp @@ -921,7 +921,7 @@ void RenderPersonnelFace(INT32 iId, INT32 iSlot, BOOLEAN fDead, BOOLEAN fFired, // WDS - make number of mercenaries, etc. be configurable -BOOLEAN NextPersonnelFace( void ) +static BOOLEAN NextPersonnelFace( void ) { if (fCurrentTeamMode) { @@ -965,7 +965,7 @@ BOOLEAN NextPersonnelFace( void ) return TRUE; } -BOOLEAN PrevPersonnelFace( void ) +static BOOLEAN PrevPersonnelFace( void ) { if (fCurrentTeamMode) { // Anyone to display? @@ -1021,6 +1021,107 @@ BOOLEAN PrevPersonnelFace( void ) return TRUE; } +static BOOLEAN NextPersonnelFacePage(void) +{ + if (fCurrentTeamMode) + { + // Anyone to display? + if (currentTeamIndex == -1) { + return TRUE; + } + + fReDrawScreenFlag = TRUE; + // wrap around? + currentTeamIndex += MAX_MERCS_ON_SCREEN; + if (currentTeamIndex >= maxCurrentTeamIndex) + { + currentTeamIndex = 0; + currentTeamFirstIndex = 0; + return FALSE; + } + else + { + currentTeamFirstIndex += MAX_MERCS_ON_SCREEN; + } + } + else { + // Anyone to display? + if (iCurPortraitId == -1) { + return TRUE; + } + + iCurPortraitId += MAX_MERCS_ON_SCREEN; + if (iCurPortraitId >= (GetNumberOfDeadOnPastTeam() + GetNumberOfLeftOnPastTeam() + GetNumberOfOtherOnPastTeam()) - giCurrentUpperLeftPortraitNumber) + { + // about to go off the end + giCurrentUpperLeftPortraitNumber = 0; + iCurPortraitId = 0; + } + else + { + giCurrentUpperLeftPortraitNumber += MAX_MERCS_ON_SCREEN; + iCurPortraitId = 0; + } + + // get of this merc in this slot + iCurrentPersonSelectedId = iCurPortraitId; + fReDrawScreenFlag = TRUE; + } + + return TRUE; +} + +static BOOLEAN PrevPersonnelFacePage(void) +{ + if (fCurrentTeamMode) { + // Anyone to display? + if (currentTeamIndex == -1) { + return TRUE; + } + + fReDrawScreenFlag = TRUE; + currentTeamIndex -= MAX_MERCS_ON_SCREEN; + // wrap around? + if (currentTeamIndex <= 0) { + currentTeamIndex = maxCurrentTeamIndex; + currentTeamFirstIndex = (currentTeamIndex / MAX_MERCS_ON_SCREEN) * MAX_MERCS_ON_SCREEN; + if (currentTeamIndex == 0) { + return FALSE; + } + } + else { + currentTeamFirstIndex -= MAX_MERCS_ON_SCREEN; + } + } + else + { + // Anyone to display? + if (iCurPortraitId == -1) { + return TRUE; + } + + iCurPortraitId -= MAX_MERCS_ON_SCREEN; + + if ((iCurPortraitId <= 0) && (giCurrentUpperLeftPortraitNumber == 0)) + { + // about to go off the end + giCurrentUpperLeftPortraitNumber = (GetNumberOfDeadOnPastTeam() + GetNumberOfLeftOnPastTeam() + GetNumberOfOtherOnPastTeam()) - (GetNumberOfDeadOnPastTeam() + GetNumberOfLeftOnPastTeam() + GetNumberOfOtherOnPastTeam()) % MAX_MERCS_ON_SCREEN; + iCurPortraitId = (GetNumberOfDeadOnPastTeam() + GetNumberOfLeftOnPastTeam() + GetNumberOfOtherOnPastTeam()) % MAX_MERCS_ON_SCREEN; + } + else + { + giCurrentUpperLeftPortraitNumber -= MAX_MERCS_ON_SCREEN; + iCurPortraitId = MAX_MERCS_ON_SCREEN - 1; + } + // get of this merc in this slot + + iCurrentPersonSelectedId = iCurPortraitId; + fReDrawScreenFlag = TRUE; + } + + return TRUE; +} + void CreatePersonnelButtons( void ) { @@ -1109,7 +1210,14 @@ void LeftButtonCallBack(GUI_BUTTON *btn,INT32 reason) { btn->uiFlags&=~(BUTTON_CLICKED_ON); fReDrawScreenFlag=TRUE; - PrevPersonnelFace( ); + if (_KeyDown(SHIFT)) + { + PrevPersonnelFacePage(); + } + else + { + PrevPersonnelFace( ); + } uiCurrentInventoryIndex = 0; guiSliderPosition = 0; @@ -1156,21 +1264,26 @@ void RightButtonCallBack(GUI_BUTTON *btn,INT32 reason) { if(!(btn->uiFlags & BUTTON_CLICKED_ON)) { - fReDrawScreenFlag=TRUE; + fReDrawScreenFlag=TRUE; } - btn->uiFlags|=(BUTTON_CLICKED_ON); + btn->uiFlags|=(BUTTON_CLICKED_ON); } else if(reason & MSYS_CALLBACK_REASON_LBUTTON_UP ) { if(btn->uiFlags & BUTTON_CLICKED_ON) { - btn->uiFlags&=~(BUTTON_CLICKED_ON); - fReDrawScreenFlag=TRUE; - NextPersonnelFace( ); - uiCurrentInventoryIndex = 0; - guiSliderPosition = 0; - - + btn->uiFlags&=~(BUTTON_CLICKED_ON); + fReDrawScreenFlag=TRUE; + if (_KeyDown(SHIFT)) + { + NextPersonnelFacePage(); + } + else + { + NextPersonnelFace( ); + } + uiCurrentInventoryIndex = 0; + guiSliderPosition = 0; } } } @@ -6759,6 +6872,22 @@ void HandlePersonnelKeyboard( void ) guiSliderPosition = 0; fPausedReDrawScreenFlag = TRUE; break; + case SHIFT_LEFTARROW: + case 'A': + fReDrawScreenFlag = TRUE; + PrevPersonnelFacePage(); + uiCurrentInventoryIndex = 0; + guiSliderPosition = 0; + fPausedReDrawScreenFlag = TRUE; + break; + case SHIFT_RIGHTARROW: + case 'D': + fReDrawScreenFlag = TRUE; + NextPersonnelFacePage(); + uiCurrentInventoryIndex = 0; + guiSliderPosition = 0; + fPausedReDrawScreenFlag = TRUE; + break; case SHIFT_TAB: if ( !fCurrentTeamMode ) { From f99065d0c6df5d120703d8379633a4bff5847000 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sat, 9 Nov 2024 15:30:42 +0200 Subject: [PATCH 009/192] Remove unused button callback functions Unimplemented feature of browsing 4 mercs forward/backwards in personnel page. --- Laptop/personnel.cpp | 62 -------------------------------------------- 1 file changed, 62 deletions(-) diff --git a/Laptop/personnel.cpp b/Laptop/personnel.cpp index 524465d9..be713290 100644 --- a/Laptop/personnel.cpp +++ b/Laptop/personnel.cpp @@ -322,8 +322,6 @@ void RenderPersonnelStats(INT32 iId, INT32 iSlot); void RenderPersonnelFace(INT32 iId, INT32 iSlot, BOOLEAN fDead, BOOLEAN fFired, BOOLEAN fOther ); void LeftButtonCallBack(GUI_BUTTON *btn,INT32 reason); void RightButtonCallBack(GUI_BUTTON *btn,INT32 reason); -void LeftFFButtonCallBack(GUI_BUTTON *btn,INT32 reason); -void RightFFButtonCallBack(GUI_BUTTON *btn,INT32 reason); void PersonnelPortraitCallback( MOUSE_REGION * pRegion, INT32 iReason ); void CreatePersonnelButtons( void ); void DeletePersonnelButtons( void ); @@ -1225,36 +1223,6 @@ void LeftButtonCallBack(GUI_BUTTON *btn,INT32 reason) } } -void LeftFFButtonCallBack(GUI_BUTTON *btn,INT32 reason) -{ - if (!(btn->uiFlags & BUTTON_ENABLED)) - return; - - if(reason & MSYS_CALLBACK_REASON_LBUTTON_DWN ) - { - if(!(btn->uiFlags & BUTTON_CLICKED_ON)) - { - fReDrawScreenFlag=TRUE; - } - btn->uiFlags|=(BUTTON_CLICKED_ON); - } - else if(reason & MSYS_CALLBACK_REASON_LBUTTON_UP ) - { - if(btn->uiFlags & BUTTON_CLICKED_ON) - { - btn->uiFlags&=~(BUTTON_CLICKED_ON); - fReDrawScreenFlag=TRUE; - PrevPersonnelFace( ); - PrevPersonnelFace( ); - PrevPersonnelFace( ); - PrevPersonnelFace( ); - - // set states - SetPersonnelButtonStates( ); - } - } -} - void RightButtonCallBack(GUI_BUTTON *btn,INT32 reason) { if (!(btn->uiFlags & BUTTON_ENABLED)) @@ -1288,36 +1256,6 @@ void RightButtonCallBack(GUI_BUTTON *btn,INT32 reason) } } -void RightFFButtonCallBack(GUI_BUTTON *btn,INT32 reason) -{ - if (!(btn->uiFlags & BUTTON_ENABLED)) - return; - - if(reason & MSYS_CALLBACK_REASON_LBUTTON_DWN ) - { - if(!(btn->uiFlags & BUTTON_CLICKED_ON)) - { - fReDrawScreenFlag=TRUE; - } - btn->uiFlags|=(BUTTON_CLICKED_ON); - } - else if(reason & MSYS_CALLBACK_REASON_LBUTTON_UP ) - { - if(btn->uiFlags & BUTTON_CLICKED_ON) - { - btn->uiFlags&=~(BUTTON_CLICKED_ON); - fReDrawScreenFlag=TRUE; - NextPersonnelFace( ); - NextPersonnelFace( ); - NextPersonnelFace( ); - NextPersonnelFace( ); - - // set states - SetPersonnelButtonStates( ); - } - } -} - void DisplayHeader( void ) { SetFont(PERS_HEADER_FONT); From a81820d0d7985686f779c06c0e5bfb6fd28b6e69 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sat, 9 Nov 2024 16:46:39 +0200 Subject: [PATCH 010/192] Fix UB compilation --- Tactical/Overhead.cpp | 6 +++--- Tactical/Overhead.h | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index 88f58a42..1b155c8d 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -10876,11 +10876,11 @@ BOOLEAN CanMsgBoxForPlayerToBeNotifiedOfSomeoneElseInSector() } -INT8 NumMercsOnPlayerTeam( ) +UINT16 NumMercsOnPlayerTeam( ) { - INT32 cnt; + INT32 cnt; SOLDIERTYPE *pSoldier; - UINT8 ubCount = 0; + UINT16 ubCount = 0; cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; diff --git a/Tactical/Overhead.h b/Tactical/Overhead.h index 4d2ba7d9..33c6cfae 100644 --- a/Tactical/Overhead.h +++ b/Tactical/Overhead.h @@ -333,10 +333,10 @@ void SetMsgBoxForPlayerBeNotifiedOfSomeoneElseInSector(); void HandleDisplayingOfPlayerLostDialogue( ); // UTILITY FUNCTIONS -INT8 NumActiveAndConsciousTeamMembers( UINT8 ubTeam ); -UINT8 NumEnemyInSector( ); -UINT8 NumCapableEnemyInSector( ); -INT8 NumMercsOnPlayerTeam( ); +UINT16 NumActiveAndConsciousTeamMembers( UINT8 ubTeam ); +UINT16 NumEnemyInSector( ); +UINT16 NumCapableEnemyInSector( ); +UINT16 NumMercsOnPlayerTeam( ); #endif extern BOOLEAN sniperwarning; From 2b024d63c6598bbb0b87b13adeb86f4f8def8cb0 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sat, 9 Nov 2024 16:46:55 +0200 Subject: [PATCH 011/192] Fix endless loop --- Tactical/Turn Based Input.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tactical/Turn Based Input.cpp b/Tactical/Turn Based Input.cpp index e502460a..6346f087 100644 --- a/Tactical/Turn Based Input.cpp +++ b/Tactical/Turn Based Input.cpp @@ -2209,7 +2209,7 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) // sevenfm: unready weapon for all selected if (!fFound) { - UINT8 cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID; + UINT16 cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID; for (SOLDIERTYPE *pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; cnt++, pSoldier++) { if (pSoldier->bActive && pSoldier->bInSector && pSoldier->flags.uiStatusFlags & SOLDIER_MULTI_SELECTED && WeaponReady(pSoldier)) @@ -8311,7 +8311,7 @@ void HandleTBBackpacks(void) bool backpackDropped = false; SOLDIERTYPE* pTeamSoldier; - for (UINT8 ubLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; ubLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ubLoop++) + for (UINT16 ubLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; ubLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ubLoop++) { pTeamSoldier = MercPtrs[ubLoop]; From fdd6859726327f36d568ab329a9dd2067e35ac21 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sat, 9 Nov 2024 20:23:38 +0200 Subject: [PATCH 012/192] Implement multiselection for contract renewal --- Strategic/Assignments.cpp | 216 ++++++++++++++++++++++++++++++++------ Strategic/mapscreen.cpp | 90 +++++++++++++++- Strategic/mapscreen.h | 4 +- 3 files changed, 273 insertions(+), 37 deletions(-) diff --git a/Strategic/Assignments.cpp b/Strategic/Assignments.cpp index d68ef086..ec1410df 100644 --- a/Strategic/Assignments.cpp +++ b/Strategic/Assignments.cpp @@ -560,8 +560,6 @@ void HandleShadingOfLinesForSnitchSectorMenu( void ); // Flugente: prisoner menu void HandleShadingOfLinesForPrisonerMenu( void ); -// post message about contract -void PostContractMessage( SOLDIERTYPE *pCharacter, INT32 iContract ); BOOLEAN DisplayVehicleMenu( SOLDIERTYPE *pSoldier ); BOOLEAN DisplayRepairMenu( SOLDIERTYPE *pSoldier ); @@ -12879,40 +12877,69 @@ void ContractMenuBtnCallback( MOUSE_REGION * pRegion, INT32 iReason ) switch( iValue ) { - case( CONTRACT_MENU_DAY ): - MercContractHandling( pSoldier, CONTRACT_EXTEND_1_DAY ); - PostContractMessage( pSoldier, CONTRACT_EXTEND_1_DAY ); + case( CONTRACT_MENU_DAY ): + if (gSelectedSoldiers.size() > 0) + { + for (size_t i=0; i < gSelectedSoldiers.size(); ++i) + { + pSoldier = gSelectedSoldiers[i]; + MercContractHandling(pSoldier, CONTRACT_EXTEND_1_DAY); + } + } + else + { + MercContractHandling( pSoldier, CONTRACT_EXTEND_1_DAY ); + } fOkToClose = TRUE; break; case( CONTRACT_MENU_WEEK ): - MercContractHandling( pSoldier, CONTRACT_EXTEND_1_WEEK ); - PostContractMessage( pSoldier, CONTRACT_EXTEND_1_WEEK ); + if (gSelectedSoldiers.size() > 0) + { + for (size_t i = 0; i < gSelectedSoldiers.size(); ++i) + { + pSoldier = gSelectedSoldiers[i]; + MercContractHandling(pSoldier, CONTRACT_EXTEND_1_WEEK); + } + } + else + { + MercContractHandling(pSoldier, CONTRACT_EXTEND_1_WEEK); + } fOkToClose = TRUE; break; case( CONTRACT_MENU_TWO_WEEKS ): - MercContractHandling( pSoldier, CONTRACT_EXTEND_2_WEEK ); - PostContractMessage( pSoldier, CONTRACT_EXTEND_2_WEEK ); + if (gSelectedSoldiers.size() > 0) + { + for (size_t i = 0; i < gSelectedSoldiers.size(); ++i) + { + pSoldier = gSelectedSoldiers[i]; + MercContractHandling(pSoldier, CONTRACT_EXTEND_2_WEEK); + } + } + else + { + MercContractHandling(pSoldier, CONTRACT_EXTEND_2_WEEK); + } fOkToClose = TRUE; break; case( CONTRACT_MENU_TERMINATE ): - gpDismissSoldier = pSoldier; + gpDismissSoldier = pSoldier; - // If in the renewal sequence.. do right away... - // else put up requester. - if ( gfInContractMenuFromRenewSequence ) - { - MercDismissConfirmCallBack( MSG_BOX_RETURN_YES ); - } - else - { - // The game should be unpaused when this message box disappears - UnPauseGame(); - DoMapMessageBox( MSG_BOX_BASIC_STYLE, gzLateLocalizedString[ 48 ], MAP_SCREEN, MSG_BOX_FLAG_YESNO, MercDismissConfirmCallBack ); - } - - fOkToClose = TRUE; + // If in the renewal sequence.. do right away... + // else put up requester. + if ( gfInContractMenuFromRenewSequence ) + { + MercDismissConfirmCallBack( MSG_BOX_RETURN_YES ); + } + else + { + // The game should be unpaused when this message box disappears + UnPauseGame(); + DoMapMessageBox( MSG_BOX_BASIC_STYLE, gzLateLocalizedString[ 48 ], MAP_SCREEN, MSG_BOX_FLAG_YESNO, MercDismissConfirmCallBack ); + } + fOkToClose = TRUE; break; } @@ -12929,14 +12956,13 @@ void ContractMenuBtnCallback( MOUSE_REGION * pRegion, INT32 iReason ) fGlowContractRegion = FALSE; fShowContractMenu = FALSE; - // dirty region + // dirty region fTeamPanelDirty = TRUE; fMapScreenBottomDirty = TRUE; fCharacterInfoPanelDirty = TRUE; - gfRenderPBInterface = TRUE; + gfRenderPBInterface = TRUE; } - return; } @@ -14723,14 +14749,6 @@ void HandleShadingOfLinesForSquadMenu( void ) } -void PostContractMessage( SOLDIERTYPE *pCharacter, INT32 iContract ) -{ - // send a message stating that offer of contract extension made - //MapScreenMessage(FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Offered to extend %s's contract by another %s.", pCharacter->GetName(), pContractExtendStrings[ iContract ] ); - - return; -} - BOOLEAN DisplayVehicleMenu( SOLDIERTYPE *pSoldier ) { BOOLEAN fVehiclePresent=FALSE; @@ -15294,6 +15312,134 @@ void CreateContractBox( SOLDIERTYPE *pCharacter ) } + +void CreateContractBoxMultiSelect(INT32 DailySalaries, INT32 WeeklySalaries, INT32 BiweeklySalaries) +{ + UINT32 hStringHandle; + UINT32 uiCounter; + CHAR16 sString[50]; + CHAR16 sDollarString[50]; + + // rebuild contractbox for this merc + RemoveBox(ghContractBox); + ghContractBox = -1; + fShowContractMenu = TRUE; + + ContractPosition.iX = (SCREEN_WIDTH - INTERFACE_WIDTH) / 2 + OrigContractPosition.iX; + ContractPosition.iY = yResOffset + OrigContractPosition.iY; + + if (giBoxY != 0) + { + ContractPosition.iX = giBoxY; + } + + CreatePopUpBox(&ghContractBox, ContractDimensions, ContractPosition, (POPUP_BOX_FLAG_CLIP_TEXT | POPUP_BOX_FLAG_RESIZE)); + SetBoxBuffer(ghContractBox, FRAME_BUFFER); + SetBorderType(ghContractBox, guiPOPUPBORDERS); + SetBackGroundSurface(ghContractBox, guiPOPUPTEX); + SetMargins(ghContractBox, 6, 6, 4, 4); + SetLineSpace(ghContractBox, 2); + + // set current box to this one + SetCurrentBox(ghContractBox); + + // not null character? + //if (pCharacter != NULL) + { + for (uiCounter = 0; uiCounter < MAX_CONTRACT_MENU_STRING_COUNT; uiCounter++) + { + switch (uiCounter) + { + case(CONTRACT_MENU_CURRENT_FUNDS): + /* + // add current balance after title string + swprintf( sDollarString, L"%d", LaptopSaveInfo.iCurrentBalance); + InsertCommasForDollarFigure( sDollarString ); + InsertDollarSignInToString( sDollarString ); + swprintf( sString, L"%s %s", pContractStrings[uiCounter], sDollarString ); + AddMonoString(&hStringHandle, sString); + */ + AddMonoString(&hStringHandle, pContractStrings[uiCounter]); + break; + case(CONTRACT_MENU_DAY): + + //if (pCharacter->ubWhatKindOfMercAmI != MERC_TYPE__AIM_MERC) + //{ + // swprintf(sDollarString, L"%d", 0); + //} + //else + { + swprintf(sDollarString, L"%d", DailySalaries); + } + InsertCommasForDollarFigure(sDollarString); + InsertDollarSignInToString(sDollarString); + swprintf(sString, L"%s ( %s )", pContractStrings[uiCounter], sDollarString); + AddMonoString(&hStringHandle, sString); + break; + case(CONTRACT_MENU_WEEK): + + //if (pCharacter->ubWhatKindOfMercAmI != MERC_TYPE__AIM_MERC) + //{ + // swprintf(sDollarString, L"%d", 0); + //} + //else + { + swprintf(sDollarString, L"%d", WeeklySalaries); + } + + InsertCommasForDollarFigure(sDollarString); + InsertDollarSignInToString(sDollarString); + swprintf(sString, L"%s ( %s )", pContractStrings[uiCounter], sDollarString); + AddMonoString(&hStringHandle, sString); + break; + case(CONTRACT_MENU_TWO_WEEKS): + + //if (pCharacter->ubWhatKindOfMercAmI != MERC_TYPE__AIM_MERC) + //{ + // swprintf(sDollarString, L"%d", 0); + //} + //else + { + swprintf(sDollarString, L"%d", BiweeklySalaries); + } + + + InsertCommasForDollarFigure(sDollarString); + InsertDollarSignInToString(sDollarString); + swprintf(sString, L"%s ( %s )", pContractStrings[uiCounter], sDollarString); + AddMonoString(&hStringHandle, sString); + break; + default: + AddMonoString(&hStringHandle, pContractStrings[uiCounter]); + break; + } + UnHighLightLine(hStringHandle); + } + } + + + SetBoxFont(ghContractBox, MAP_SCREEN_FONT); + SetBoxHighLight(ghContractBox, FONT_WHITE); + SetBoxForeground(ghContractBox, FONT_LTGREEN); + SetBoxBackground(ghContractBox, FONT_BLACK); + + // shaded color..for darkened text + SetBoxShade(ghContractBox, FONT_GRAY7); + + //if (pCharacter != NULL) + { + // now set the color for the current balance value + SetBoxLineForeground(ghContractBox, 0, FONT_YELLOW); + } + + // resize box to text + ResizeBoxToText(ghContractBox); + + fTeamPanelDirty = TRUE; + fCharacterInfoPanelDirty = TRUE; +} + + void CreateAttributeBox( void ) { UINT32 hStringHandle; diff --git a/Strategic/mapscreen.cpp b/Strategic/mapscreen.cpp index cac4c6b3..d1bf91a4 100644 --- a/Strategic/mapscreen.cpp +++ b/Strategic/mapscreen.cpp @@ -131,6 +131,8 @@ #include "LuaInitNPCs.h" #endif +std::vector gSelectedSoldiers{}; + // Flugente: militia movement // plot @@ -790,6 +792,7 @@ void InterruptTimeForMenus( void ); void CreateAttributeBox( void ); void CreateVehicleBox( void ); void CreateContractBox( SOLDIERTYPE *pCharacter ); +void CreateContractBoxMultiSelect(INT32 DailySalaries, INT32 WeeklySalaries, INT32 BiweeklySalaries); void CreateAssignmentsBox( void ); void CreateTrainingBox( void ); void CreateMercRemoveAssignBox( void ); @@ -12014,6 +12017,67 @@ void TeamListSleepRegionMvtCallBack( MOUSE_REGION *pRegion, INT32 iReason ) } +static void HandleSelectedMercsContract() +{ + INT32 iCounter = 0; + UINT8 ubNumberOfSelectedSoldiers = 0; + INT32 DailySalaries = 0; + INT32 WeeklySalaries = 0; + INT32 BiweeklySalaries = 0; + SOLDIERTYPE* pSoldier = nullptr; + gSelectedSoldiers.clear(); + + for (iCounter = 0; iCounter < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS; ++iCounter) + { + pSoldier = nullptr; + + // if the current character in the list is valid...then grab soldier pointer for the character + if (gCharactersList[iCounter].fValid) + { + // get the soldier pointer + pSoldier = &Menptr[gCharactersList[iCounter].usSolID]; + + if (pSoldier->bActive == FALSE) + { + continue; + } + + if (IsEntryInSelectedListSet((INT8)iCounter) == FALSE) + { + continue; + } + + if (CanExtendContractForCharSlot((INT8)iCounter)) + { + // up the total number of soldiers + gSelectedSoldiers.push_back(pSoldier); + ubNumberOfSelectedSoldiers++; + + DailySalaries += gMercProfiles[pSoldier->ubProfile].sSalary; + WeeklySalaries += gMercProfiles[pSoldier->ubProfile].uiWeeklySalary; + BiweeklySalaries += gMercProfiles[pSoldier->ubProfile].uiBiWeeklySalary; + + bSelectedContractChar = bSelectedInfoChar; + giContractHighLine = bSelectedContractChar; + } + } + } + + if (ubNumberOfSelectedSoldiers > 1) + { + for (size_t i = 0; i < ubNumberOfSelectedSoldiers; i++) + { + CheckIfSalaryIncreasedAndSayQuote(gSelectedSoldiers[i], false); + } + + CreateContractBoxMultiSelect(DailySalaries, WeeklySalaries, BiweeklySalaries); + } + else if (ubNumberOfSelectedSoldiers == 1) + { + RequestContractMenu(); + } +} + void TeamListContractRegionBtnCallBack(MOUSE_REGION *pRegion, INT32 iReason ) { @@ -12027,6 +12091,7 @@ void TeamListContractRegionBtnCallBack(MOUSE_REGION *pRegion, INT32 iReason ) // marke strogg more mercs must add skipped mercs FIRSTmercTOdisplay iValue = MSYS_GetRegionUserData( pRegion, 0 ); +#if 0 if( gCharactersList[ iValue ].fValid == TRUE && ValidSelectableCharForNextOrPrev(iValue + FIRSTmercTOdisplay)) { if (iReason & MSYS_CALLBACK_REASON_LBUTTON_UP) @@ -12047,7 +12112,29 @@ void TeamListContractRegionBtnCallBack(MOUSE_REGION *pRegion, INT32 iReason ) ContractRegionBtnCallback( pRegion, iReason ); } +#else + if (iReason & MSYS_CALLBACK_REASON_LBUTTON_UP) + { + if ((gCharactersList[iValue + FIRSTmercTOdisplay].fValid == TRUE)) + { + // HEADROCK HAM B2.8: Added argument for multi-select entire squads + if (HandleCtrlOrShiftInTeamPanel((INT8)iValue + FIRSTmercTOdisplay, FALSE)) + { + return; + } + // reset list if the clicked character isn't also selected + ChangeSelectedInfoChar((INT8)iValue + FIRSTmercTOdisplay, (BOOLEAN)(IsEntryInSelectedListSet((INT8)iValue + FIRSTmercTOdisplay) == FALSE)); + + HandleSelectedMercsContract(); + } + else + { + // reset selected characters + ResetAllSelectedCharacterModes(); + } + } +#endif if (iReason & MSYS_CALLBACK_REASON_RBUTTON_UP) { // reset selected characters @@ -12741,7 +12828,8 @@ void HandleShadingOfLinesForContractMenu( void ) } // if THIS soldier is involved in a fight (dismissing in a hostile sector IS ok...) - if( ( gTacticalStatus.uiFlags & INCOMBAT ) && pSoldier->bInSector ) + // Also if we have multiple mercs selected, disable terminating contracts + if( gSelectedSoldiers.size() > 0 || (( gTacticalStatus.uiFlags & INCOMBAT ) && pSoldier->bInSector )) { ShadeStringInBox( ghContractBox, CONTRACT_MENU_TERMINATE ); } diff --git a/Strategic/mapscreen.h b/Strategic/mapscreen.h index 47ae7936..44deeb25 100644 --- a/Strategic/mapscreen.h +++ b/Strategic/mapscreen.h @@ -134,6 +134,8 @@ extern BOOLEAN gfInChangeArrivalSectorMode; extern BOOLEAN gfSkyriderEmptyHelpGiven; +extern std::vector gSelectedSoldiers; + BOOLEAN SetInfoChar(UINT16 ubID); void EndMapScreen( BOOLEAN fDuringFade ); @@ -228,4 +230,4 @@ void RetreatBandageCallback( UINT8 ubResult ); bool isWidescreenUI(void); -#endif \ No newline at end of file +#endif From 5cf0ef4bdefc3a379f886961561648ab2def8411 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sat, 9 Nov 2024 22:52:21 +0200 Subject: [PATCH 013/192] Correct variables from INT8 to INT16 --- Ja2/SaveLoadGame.cpp | 14 +- Ja2/gamescreen.cpp | 8 +- Strategic/Assignments.cpp | 2 +- Strategic/Map Screen Interface.cpp | 40 +++--- Strategic/Map Screen Interface.h | 12 +- Strategic/mapscreen.cpp | 58 ++++---- Tactical/Overhead.h | 204 ++++++++++++++--------------- Tactical/Soldier Control.h | 2 +- 8 files changed, 170 insertions(+), 170 deletions(-) diff --git a/Ja2/SaveLoadGame.cpp b/Ja2/SaveLoadGame.cpp index 7af72c6b..575b25b7 100644 --- a/Ja2/SaveLoadGame.cpp +++ b/Ja2/SaveLoadGame.cpp @@ -304,7 +304,7 @@ typedef struct INT16 sContractRehireSoldierID; - GAME_OPTIONS GameOptions; + GAME_OPTIONS GameOptions; UINT32 uiSeedNumber; @@ -322,7 +322,7 @@ typedef struct BOOLEAN fDisableMapInterfaceDueToBattle; INT32 sBoxerGridNo[ NUM_BOXERS ]; - UINT8 ubBoxerID[ NUM_BOXERS ]; + UINT16 ubBoxerID[ NUM_BOXERS ]; BOOLEAN fBoxerFought[ NUM_BOXERS ]; BOOLEAN fHelicopterDestroyed; //if the chopper is destroyed @@ -412,7 +412,7 @@ typedef struct UINT32 uiMeanWhileFlags; - INT8 bSelectedInfoChar; + INT16 bSelectedInfoChar; INT8 bHospitalPriceModifier; INT8 bUnused2[ 2 ]; @@ -1936,7 +1936,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 @@ -8794,7 +8794,7 @@ BOOLEAN LoadGeneralInfo( HWFILE hFile ) 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); @@ -8872,7 +8872,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); @@ -9096,7 +9096,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 diff --git a/Ja2/gamescreen.cpp b/Ja2/gamescreen.cpp index 0e5321fb..dcaa3be8 100644 --- a/Ja2/gamescreen.cpp +++ b/Ja2/gamescreen.cpp @@ -735,11 +735,11 @@ UINT32 MainGameScreenHandle(void) if ( !ARE_IN_FADE_IN( ) ) { - HandleAutoBandagePending( ); + HandleAutoBandagePending( ); - #ifdef JA2UB - HandleThePlayerBeNotifiedOfSomeoneElseInSector(); - #endif +#ifdef JA2UB + HandleThePlayerBeNotifiedOfSomeoneElseInSector(); +#endif } diff --git a/Strategic/Assignments.cpp b/Strategic/Assignments.cpp index ec1410df..f1711ed8 100644 --- a/Strategic/Assignments.cpp +++ b/Strategic/Assignments.cpp @@ -18418,7 +18418,7 @@ BOOLEAN HandleSelectedMercsBeingPutAsleep( BOOLEAN fWakeUp, BOOLEAN fDisplayWarn continue; } - if( IsEntryInSelectedListSet( ( INT8 )iCounter ) == FALSE ) + if( IsEntryInSelectedListSet( iCounter ) == FALSE ) { continue; } diff --git a/Strategic/Map Screen Interface.cpp b/Strategic/Map Screen Interface.cpp index 1bb2343e..b606329e 100644 --- a/Strategic/Map Screen Interface.cpp +++ b/Strategic/Map Screen Interface.cpp @@ -450,7 +450,7 @@ void InitalizeVehicleAndCharacterList( void ) memset(&gCharactersList, 0, sizeof( gCharactersList )); } -void SetEntryInSelectedCharacterList( INT8 bEntry ) +void SetEntryInSelectedCharacterList( INT16 bEntry ) { Assert( ( bEntry >= 0 ) && ( bEntry < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS ) ); @@ -458,7 +458,7 @@ void SetEntryInSelectedCharacterList( INT8 bEntry ) fSelectedListOfMercsForMapScreen[ bEntry ] = TRUE; } -void ResetEntryForSelectedList( INT8 bEntry ) +void ResetEntryForSelectedList( INT16 bEntry ) { Assert( ( bEntry >= 0 ) && ( bEntry < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS ) ); @@ -480,7 +480,7 @@ void ResetSelectedListForMapScreen( void ) } } -BOOLEAN IsEntryInSelectedListSet( INT8 bEntry ) +BOOLEAN IsEntryInSelectedListSet( INT16 bEntry ) { Assert( ( bEntry >= 0 ) && ( bEntry < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS ) ); @@ -489,7 +489,7 @@ BOOLEAN IsEntryInSelectedListSet( INT8 bEntry ) return( fSelectedListOfMercsForMapScreen[ bEntry ] ); } -void ToggleEntryInSelectedList( INT8 bEntry ) +void ToggleEntryInSelectedList( INT16 bEntry ) { Assert( ( bEntry >= 0 ) && ( bEntry < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS ) ); @@ -497,9 +497,9 @@ void ToggleEntryInSelectedList( INT8 bEntry ) fSelectedListOfMercsForMapScreen[ bEntry ] = !( fSelectedListOfMercsForMapScreen[ bEntry ] ); } -void BuildSelectedListFromAToB( INT8 bA, INT8 bB ) +void BuildSelectedListFromAToB( INT16 bA, INT16 bB ) { - INT8 bStart =0, bEnd = 0; + INT16 bStart =0, bEnd = 0; // run from a to b..set slots as selected @@ -636,7 +636,7 @@ void DeselectSelectedListMercsWhoCantMoveWithThisGuy( SOLDIERTYPE *pSoldier ) if ( !CanSoldierMoveWithVehicleId( pSoldier2, pSoldier->iVehicleId ) ) { // reset entry for selected list - ResetEntryForSelectedList( ( INT8 )iCounter ); + ResetEntryForSelectedList( iCounter ); } } // if anchor guy IS a vehicle @@ -645,7 +645,7 @@ void DeselectSelectedListMercsWhoCantMoveWithThisGuy( SOLDIERTYPE *pSoldier ) if ( !CanSoldierMoveWithVehicleId( pSoldier2, pSoldier->bVehicleID ) ) { // reset entry for selected list - ResetEntryForSelectedList( ( INT8 )iCounter ); + ResetEntryForSelectedList( iCounter ); } } // if this guy is IN a vehicle @@ -654,7 +654,7 @@ void DeselectSelectedListMercsWhoCantMoveWithThisGuy( SOLDIERTYPE *pSoldier ) if ( !CanSoldierMoveWithVehicleId( pSoldier, pSoldier2->iVehicleId ) ) { // reset entry for selected list - ResetEntryForSelectedList( ( INT8 )iCounter ); + ResetEntryForSelectedList( iCounter ); } } // if this guy IS a vehicle @@ -663,13 +663,13 @@ void DeselectSelectedListMercsWhoCantMoveWithThisGuy( SOLDIERTYPE *pSoldier ) if ( !CanSoldierMoveWithVehicleId( pSoldier, pSoldier2->bVehicleID ) ) { // reset entry for selected list - ResetEntryForSelectedList( ( INT8 )iCounter ); + ResetEntryForSelectedList( iCounter ); } } // reject those not a squad (vehicle handled above) else if( pSoldier2->bAssignment >= ON_DUTY ) { - ResetEntryForSelectedList( ( INT8 )iCounter ); + ResetEntryForSelectedList( iCounter ); } else { @@ -678,14 +678,14 @@ void DeselectSelectedListMercsWhoCantMoveWithThisGuy( SOLDIERTYPE *pSoldier ) ( pSoldier->sSectorY != pSoldier2->sSectorY ) || ( pSoldier->bSectorZ != pSoldier2->bSectorZ ) ) { - ResetEntryForSelectedList( ( INT8 )iCounter ); + ResetEntryForSelectedList( iCounter ); } // if either is between sectors, they must be in the same movement group if ( ( pSoldier->flags.fBetweenSectors || pSoldier2->flags.fBetweenSectors ) && ( pSoldier->ubGroupID != pSoldier2->ubGroupID ) ) { - ResetEntryForSelectedList( ( INT8 )iCounter ); + ResetEntryForSelectedList( iCounter ); } } @@ -715,7 +715,7 @@ void SelectUnselectedMercsWhoMustMoveWithThisGuy( void ) if ( AnyMercInSameSquadOrVehicleIsSelected( pSoldier ) ) { // then also select this guy - SetEntryInSelectedCharacterList( ( INT8 ) iCounter ); + SetEntryInSelectedCharacterList( iCounter ); } } } @@ -2600,7 +2600,7 @@ void GoToNextCharacterInList( void ) { if ( ( gCharactersList[ iCount ].fValid ) && ( iCount < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS ) && ValidSelectableCharForNextOrPrev( iCount ) ) { - ChangeSelectedInfoChar( ( INT8 )iCount, TRUE ); + ChangeSelectedInfoChar( iCount, TRUE ); break; } else @@ -2635,7 +2635,7 @@ void GoToFirstCharacterInList( void ) { if ( ( gCharactersList[ iCounter ].fValid ) && ( iCounter < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS ) && ValidSelectableCharForNextOrPrev( iCounter ) ) { - ChangeSelectedInfoChar( ( INT8 )iCounter, TRUE ); + ChangeSelectedInfoChar( iCounter, TRUE ); break; } } @@ -2661,7 +2661,7 @@ void GoToLastCharacterInList( void ) { if ( ( gCharactersList[ iCounter ].fValid ) && ( iCounter < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS ) && ValidSelectableCharForNextOrPrev( iCounter ) ) { - ChangeSelectedInfoChar( ( INT8 )iCounter, TRUE ); + ChangeSelectedInfoChar( iCounter, TRUE ); break; } } @@ -2691,7 +2691,7 @@ void GoToPrevCharacterInList( void ) { if ( ( gCharactersList[ iCount ].fValid ) && ( iCount < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS ) && ValidSelectableCharForNextOrPrev( iCount ) ) { - ChangeSelectedInfoChar( ( INT8 )iCount, TRUE ); + ChangeSelectedInfoChar( iCount, TRUE ); break; } else @@ -4602,11 +4602,11 @@ void HandleSettingTheSelectedListOfMercs( void ) // make DEST column glow giDestHighLine = iCounter; - ChangeSelectedInfoChar( ( INT16 ) iCounter, TRUE ); + ChangeSelectedInfoChar( iCounter, TRUE ); } // add this guy to the selected list of grunts - SetEntryInSelectedCharacterList( ( INT8 )iCounter ); + SetEntryInSelectedCharacterList( iCounter ); } } } diff --git a/Strategic/Map Screen Interface.h b/Strategic/Map Screen Interface.h index 69c19e3a..44adfbc6 100644 --- a/Strategic/Map Screen Interface.h +++ b/Strategic/Map Screen Interface.h @@ -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. @@ -745,4 +745,4 @@ extern BOOLEAN CanCharacterMoveInStrategic( SOLDIERTYPE *pSoldier, INT8 *pbError extern BOOLEAN MapscreenCanPassItemToCharNum( INT32 iNewCharSlot ); -#endif \ No newline at end of file +#endif diff --git a/Strategic/mapscreen.cpp b/Strategic/mapscreen.cpp index d1bf91a4..97d670ba 100644 --- a/Strategic/mapscreen.cpp +++ b/Strategic/mapscreen.cpp @@ -930,7 +930,7 @@ void ChangeMapScreenMaskCursor( UINT16 usCursor ); void CancelOrShortenPlottedPath( void ); // HEADROCK HAM B2.8: Added argument to enable multi-selecting entire squads -BOOLEAN HandleCtrlOrShiftInTeamPanel( INT8 bCharNumber, BOOLEAN fFromRightClickAssignments ); +BOOLEAN HandleCtrlOrShiftInTeamPanel( INT16 bCharNumber, BOOLEAN fFromRightClickAssignments ); INT32 GetContractExpiryTime( SOLDIERTYPE *pSoldier ); @@ -7648,7 +7648,7 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) { bSelectedAssignChar = ( INT16 )giHighLine; RebuildAssignmentsBox( ); - ChangeSelectedInfoChar( ( INT16 ) giHighLine, FALSE ); + ChangeSelectedInfoChar( giHighLine, FALSE ); fShowAssignmentMenu = TRUE; } } @@ -11329,12 +11329,12 @@ void TeamListInfoRegionBtnCallBack(MOUSE_REGION *pRegion, INT32 iReason ) if( gCharactersList[ iValue + FIRSTmercTOdisplay].fValid == TRUE && ValidSelectableCharForNextOrPrev(iValue + FIRSTmercTOdisplay)) { // HEADROCK HAM B2.8: Added argument for multi-select entire squads - if ( HandleCtrlOrShiftInTeamPanel( ( INT8 ) iValue + FIRSTmercTOdisplay, FALSE )) + if ( HandleCtrlOrShiftInTeamPanel( iValue + FIRSTmercTOdisplay, FALSE )) { return; } - ChangeSelectedInfoChar( ( INT8 ) iValue+ FIRSTmercTOdisplay, TRUE ); + ChangeSelectedInfoChar( iValue+ FIRSTmercTOdisplay, TRUE ); pSoldier = &Menptr[ gCharactersList[ iValue + FIRSTmercTOdisplay].usSolID ]; @@ -11387,7 +11387,7 @@ void TeamListInfoRegionBtnCallBack(MOUSE_REGION *pRegion, INT32 iReason ) pSoldier = &Menptr[ gCharactersList[ iValue + FIRSTmercTOdisplay].usSolID ]; // select this character - ChangeSelectedInfoChar( ( INT8 ) iValue+ FIRSTmercTOdisplay, TRUE ); + ChangeSelectedInfoChar( iValue+ FIRSTmercTOdisplay, TRUE ); if (!isWidescreenUI()) { @@ -11484,13 +11484,13 @@ void TeamListAssignmentRegionBtnCallBack(MOUSE_REGION *pRegion, INT32 iReason ) if( gCharactersList[ iValue + FIRSTmercTOdisplay].fValid == TRUE && ValidSelectableCharForNextOrPrev(iValue + FIRSTmercTOdisplay)) { // HEADROCK HAM B2.8: Added argument for multi-select entire squads - if ( HandleCtrlOrShiftInTeamPanel( ( INT8 ) iValue + FIRSTmercTOdisplay, FALSE )) + if ( HandleCtrlOrShiftInTeamPanel( iValue + FIRSTmercTOdisplay, FALSE )) { return; } // reset list if the clicked character isn't also selected - ChangeSelectedInfoChar( ( INT8 ) iValue + FIRSTmercTOdisplay, ( BOOLEAN )( IsEntryInSelectedListSet( ( INT8 ) iValue + FIRSTmercTOdisplay) == FALSE ) ); + ChangeSelectedInfoChar( iValue + FIRSTmercTOdisplay, ( BOOLEAN )( IsEntryInSelectedListSet( iValue + FIRSTmercTOdisplay) == FALSE ) ); pSoldier = &Menptr[ gCharactersList[ iValue + FIRSTmercTOdisplay ].usSolID ]; @@ -11554,7 +11554,7 @@ void TeamListAssignmentRegionBtnCallBack(MOUSE_REGION *pRegion, INT32 iReason ) if (iReason & MSYS_CALLBACK_REASON_RBUTTON_UP) { // HEADROCK HAM B2.8: Added argument for multi-select entire squads - if ( HandleCtrlOrShiftInTeamPanel( ( INT8 ) iValue + FIRSTmercTOdisplay, TRUE )) + if ( HandleCtrlOrShiftInTeamPanel( iValue + FIRSTmercTOdisplay, TRUE )) { return; } @@ -11571,7 +11571,7 @@ void TeamListAssignmentRegionBtnCallBack(MOUSE_REGION *pRegion, INT32 iReason ) if( gCharactersList[ iValue + FIRSTmercTOdisplay].fValid == TRUE ) { - ChangeSelectedInfoChar( ( INT8 ) iValue + FIRSTmercTOdisplay, TRUE ); + ChangeSelectedInfoChar( iValue + FIRSTmercTOdisplay, TRUE ); pSoldier = &Menptr[ gCharactersList[ iValue + FIRSTmercTOdisplay].usSolID ]; @@ -11612,7 +11612,7 @@ void TeamListAssignmentRegionBtnCallBack(MOUSE_REGION *pRegion, INT32 iReason ) if ( AnyMercInSameSquadOrVehicleIsSelected( pSoldier ) ) { // then also select this guy - SetEntryInSelectedCharacterList( ( INT8 ) iCounter ); + SetEntryInSelectedCharacterList( iCounter ); } } } @@ -11723,13 +11723,13 @@ void TeamListDestinationRegionBtnCallBack(MOUSE_REGION *pRegion, INT32 iReason ) if( gCharactersList[ iValue + FIRSTmercTOdisplay].fValid == TRUE && ValidSelectableCharForNextOrPrev(iValue + FIRSTmercTOdisplay)) { // HEADROCK HAM B2.8: Added argument for multi-select entire squads - if ( HandleCtrlOrShiftInTeamPanel( ( INT8 ) iValue + FIRSTmercTOdisplay , FALSE )) + if ( HandleCtrlOrShiftInTeamPanel( iValue + FIRSTmercTOdisplay , FALSE )) { return; } // reset list if the clicked character isn't also selected - ChangeSelectedInfoChar( ( INT8 ) iValue + FIRSTmercTOdisplay, ( BOOLEAN )( IsEntryInSelectedListSet( ( INT8 ) iValue + FIRSTmercTOdisplay ) == FALSE ) ); + ChangeSelectedInfoChar( iValue + FIRSTmercTOdisplay, ( BOOLEAN )( IsEntryInSelectedListSet( iValue + FIRSTmercTOdisplay ) == FALSE ) ); // deselect any characters/vehicles that can't accompany the clicked merc DeselectSelectedListMercsWhoCantMoveWithThisGuy( &( Menptr[ gCharactersList[ iValue + FIRSTmercTOdisplay ].usSolID ] ) ); @@ -11809,7 +11809,7 @@ void TeamListDestinationRegionBtnCallBack(MOUSE_REGION *pRegion, INT32 iReason ) MakeMapModesSuitableForDestPlotting( ( INT8 ) iValue + FIRSTmercTOdisplay ); // reset list if the clicked character isn't also selected - ChangeSelectedInfoChar( ( INT8 ) iValue + FIRSTmercTOdisplay, ( BOOLEAN )( IsEntryInSelectedListSet( ( INT8 ) iValue + FIRSTmercTOdisplay ) == FALSE ) ); + ChangeSelectedInfoChar( iValue + FIRSTmercTOdisplay, ( BOOLEAN )( IsEntryInSelectedListSet( iValue + FIRSTmercTOdisplay ) == FALSE ) ); CancelPathsOfAllSelectedCharacters(); @@ -11900,13 +11900,13 @@ void TeamListSleepRegionBtnCallBack( MOUSE_REGION *pRegion, INT32 iReason ) if( ( gCharactersList[ iValue + FIRSTmercTOdisplay].fValid == TRUE ) ) { // HEADROCK HAM B2.8: Added argument for multi-select entire squads - if ( HandleCtrlOrShiftInTeamPanel( ( INT8 ) iValue + FIRSTmercTOdisplay , FALSE )) + if ( HandleCtrlOrShiftInTeamPanel( iValue + FIRSTmercTOdisplay , FALSE )) { return; } // reset list if the clicked character isn't also selected - ChangeSelectedInfoChar( ( INT8 ) iValue + FIRSTmercTOdisplay, ( BOOLEAN )( IsEntryInSelectedListSet( ( INT8 ) iValue + FIRSTmercTOdisplay ) == FALSE ) ); + ChangeSelectedInfoChar( iValue + FIRSTmercTOdisplay, ( BOOLEAN )( IsEntryInSelectedListSet( iValue + FIRSTmercTOdisplay ) == FALSE ) ); // if this slot's sleep status can be changed if ( CanChangeSleepStatusForCharSlot( (INT8) iValue + FIRSTmercTOdisplay ) ) @@ -12042,7 +12042,7 @@ static void HandleSelectedMercsContract() continue; } - if (IsEntryInSelectedListSet((INT8)iCounter) == FALSE) + if (IsEntryInSelectedListSet(iCounter) == FALSE) { continue; } @@ -12118,13 +12118,13 @@ void TeamListContractRegionBtnCallBack(MOUSE_REGION *pRegion, INT32 iReason ) if ((gCharactersList[iValue + FIRSTmercTOdisplay].fValid == TRUE)) { // HEADROCK HAM B2.8: Added argument for multi-select entire squads - if (HandleCtrlOrShiftInTeamPanel((INT8)iValue + FIRSTmercTOdisplay, FALSE)) + if (HandleCtrlOrShiftInTeamPanel(iValue + FIRSTmercTOdisplay, FALSE)) { return; } // reset list if the clicked character isn't also selected - ChangeSelectedInfoChar((INT8)iValue + FIRSTmercTOdisplay, (BOOLEAN)(IsEntryInSelectedListSet((INT8)iValue + FIRSTmercTOdisplay) == FALSE)); + ChangeSelectedInfoChar(iValue + FIRSTmercTOdisplay, (BOOLEAN)(IsEntryInSelectedListSet(iValue + FIRSTmercTOdisplay) == FALSE)); HandleSelectedMercsContract(); } @@ -14925,13 +14925,13 @@ void SortListOfMercsInTeamPanel( BOOLEAN fRetainSelectedMercs, BOOLEAN fReverse // this guy is selected if( pSelectedSoldier[ iCounter ] == pCurrentSoldier ) { - SetEntryInSelectedCharacterList( ( INT8 ) iCounterA ); + SetEntryInSelectedCharacterList( iCounterA ); } // update who the currently selected info guy is if( pPreviousSelectedInfoChar == pCurrentSoldier ) { - ChangeSelectedInfoChar( ( INT8 ) iCounterA, FALSE ); + ChangeSelectedInfoChar( iCounterA, FALSE ); } } } @@ -15537,7 +15537,7 @@ void CancelOrShortenPlottedPath( void ) } -BOOLEAN HandleCtrlOrShiftInTeamPanel( INT8 bCharNumber, BOOLEAN fFromRightClickAssignments ) +BOOLEAN HandleCtrlOrShiftInTeamPanel( INT16 bCharNumber, BOOLEAN fFromRightClickAssignments ) { // HEADROCK HAM B2.8: New condition based on new argument. if (fFromRightClickAssignments) @@ -15569,7 +15569,7 @@ BOOLEAN HandleCtrlOrShiftInTeamPanel( INT8 bCharNumber, BOOLEAN fFromRightClickA (pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE && pSelected->iVehicleId == pSoldier->bVehicleID ) ) { // then also select this guy - SetEntryInSelectedCharacterList( ( INT8 ) iCounter ); + SetEntryInSelectedCharacterList( iCounter ); } } @@ -15582,7 +15582,7 @@ BOOLEAN HandleCtrlOrShiftInTeamPanel( INT8 bCharNumber, BOOLEAN fFromRightClickA // make sure only trainers/trainees of the same stat are selected together. if (pSoldier->bTrainStat == pSelected->bTrainStat) { - SetEntryInSelectedCharacterList( ( INT8 ) iCounter ); + SetEntryInSelectedCharacterList( iCounter ); } } @@ -15591,7 +15591,7 @@ BOOLEAN HandleCtrlOrShiftInTeamPanel( INT8 bCharNumber, BOOLEAN fFromRightClickA pSoldier->sSectorY == pSelected->sSectorY && pSoldier->sZLevel == pSelected->sZLevel ) { - SetEntryInSelectedCharacterList( ( INT8 ) iCounter ); + SetEntryInSelectedCharacterList( iCounter ); } } } @@ -15624,7 +15624,7 @@ BOOLEAN HandleCtrlOrShiftInTeamPanel( INT8 bCharNumber, BOOLEAN fFromRightClickA (pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE && pSelected->iVehicleId == pSoldier->bVehicleID ) ) { // then also select this guy - ResetEntryForSelectedList( ( INT8 ) iCounter ); + ResetEntryForSelectedList( iCounter ); } } @@ -15637,7 +15637,7 @@ BOOLEAN HandleCtrlOrShiftInTeamPanel( INT8 bCharNumber, BOOLEAN fFromRightClickA // make sure only trainers/trainees of the same stat are selected together. if (pSoldier->bTrainStat == pSelected->bTrainStat) { - ResetEntryForSelectedList( ( INT8 ) iCounter ); + ResetEntryForSelectedList( iCounter ); } } @@ -15646,7 +15646,7 @@ BOOLEAN HandleCtrlOrShiftInTeamPanel( INT8 bCharNumber, BOOLEAN fFromRightClickA pSoldier->sSectorY == pSelected->sSectorY && pSoldier->sZLevel == pSelected->sZLevel ) { - ResetEntryForSelectedList( ( INT8 ) iCounter ); + ResetEntryForSelectedList( iCounter ); } } } @@ -15852,7 +15852,7 @@ void CopyPathToAllSelectedCharacters( PathStPtr pPath ) void CancelPathsOfAllSelectedCharacters() { - INT8 bCounter = 0; + INT16 bCounter = 0; SOLDIERTYPE *pSoldier = NULL; BOOLEAN fSkyriderMsgShown = FALSE; @@ -17049,7 +17049,7 @@ void ClearPreviousPaths( void ) void SelectAllCharactersInSquad( INT8 bSquadNumber ) { - INT8 bCounter; + INT16 bCounter; BOOLEAN fFirstOne = TRUE; SOLDIERTYPE *pSoldier; diff --git a/Tactical/Overhead.h b/Tactical/Overhead.h index 33c6cfae..b3378957 100644 --- a/Tactical/Overhead.h +++ b/Tactical/Overhead.h @@ -23,12 +23,12 @@ enum // TACTICAL ENGINE STATUS FLAGS typedef struct { - UINT16 bFirstID; - UINT16 bLastID; + UINT16 bFirstID; + UINT16 bLastID; COLORVAL RadarColor; INT8 bSide; - INT16 bMenInSector; - UINT16 ubLastMercToRadio; + INT16 bMenInSector; + UINT16 ubLastMercToRadio; INT8 bTeamActive; INT8 bAwareOfOpposition; INT8 bHuman; @@ -60,108 +60,108 @@ enum struct TacticalStatusType { - UINT32 uiFlags; + UINT32 uiFlags; TacticalTeamType Team[ MAXTEAMS ]; - UINT8 ubCurrentTeam; - INT32 sSlideTarget; - INT16 sSlideReason; - UINT32 uiTimeSinceMercAIStart; - INT8 fPanicFlags; - INT32 sPanicTriggerGridNoUnused; - INT16 sHandGrid; - UINT16 ubSpottersCalledForBy; - UINT16 ubTheChosenOne; - UINT32 uiTimeOfLastInput; - UINT32 uiTimeSinceDemoOn; - UINT32 uiCountdownToRestart; - BOOLEAN fGoingToEnterDemo; - BOOLEAN fNOTDOLASTDEMO; - BOOLEAN fMultiplayer; - BOOLEAN fCivGroupHostile[ NUM_CIV_GROUPS ]; - UINT8 ubLastBattleSectorX; - UINT8 ubLastBattleSectorY; - BOOLEAN fLastBattleWon; - INT8 bOriginalSizeOfEnemyForce; - INT8 bPanicTriggerIsAlarmUnused; - BOOLEAN fVirginSector; - BOOLEAN fEnemyInSector; - BOOLEAN fInterruptOccurred; - INT8 bRealtimeSpeed; - UINT8 ubEnemyIntention; - UINT8 ubEnemyIntendedRetreatDirection; - UINT16 ubEnemySightingOnTheirTurnEnemyID; - UINT16 ubEnemySightingOnTheirTurnPlayerID; - BOOLEAN fEnemySightingOnTheirTurn; - BOOLEAN fAutoBandageMode; - UINT8 ubAttackBusyCount; - INT8 bNumEnemiesFoughtInBattleUnused; - UINT16 ubEngagedInConvFromActionMercID; - UINT16 usTactialTurnLimitCounter; - BOOLEAN fInTopMessage; - UINT8 ubTopMessageType; - CHAR16 zTopMessageString[20]; - UINT16 usTactialTurnLimitMax; - UINT32 uiTactialTurnLimitClock; - BOOLEAN fTactialTurnLimitStartedBeep; - INT8 bBoxingState; - INT8 bConsNumTurnsNotSeen; - UINT8 ubArmyGuysKilled; + UINT8 ubCurrentTeam; + INT32 sSlideTarget; + INT16 sSlideReason; + UINT32 uiTimeSinceMercAIStart; + INT8 fPanicFlags; + INT32 sPanicTriggerGridNoUnused; + INT16 sHandGrid; + UINT16 ubSpottersCalledForBy; + UINT16 ubTheChosenOne; + UINT32 uiTimeOfLastInput; + UINT32 uiTimeSinceDemoOn; + UINT32 uiCountdownToRestart; + BOOLEAN fGoingToEnterDemo; + BOOLEAN fNOTDOLASTDEMO; + BOOLEAN fMultiplayer; + BOOLEAN fCivGroupHostile[ NUM_CIV_GROUPS ]; + UINT8 ubLastBattleSectorX; + UINT8 ubLastBattleSectorY; + BOOLEAN fLastBattleWon; + INT8 bOriginalSizeOfEnemyForce; + INT8 bPanicTriggerIsAlarmUnused; + BOOLEAN fVirginSector; + BOOLEAN fEnemyInSector; + BOOLEAN fInterruptOccurred; + INT8 bRealtimeSpeed; + UINT8 ubEnemyIntention; + UINT8 ubEnemyIntendedRetreatDirection; + UINT16 ubEnemySightingOnTheirTurnEnemyID; + UINT16 ubEnemySightingOnTheirTurnPlayerID; + BOOLEAN fEnemySightingOnTheirTurn; + BOOLEAN fAutoBandageMode; + UINT8 ubAttackBusyCount; + INT8 bNumEnemiesFoughtInBattleUnused; + UINT16 ubEngagedInConvFromActionMercID; + UINT16 usTactialTurnLimitCounter; + BOOLEAN fInTopMessage; + UINT8 ubTopMessageType; + CHAR16 zTopMessageString[20]; + UINT16 usTactialTurnLimitMax; + UINT32 uiTactialTurnLimitClock; + BOOLEAN fTactialTurnLimitStartedBeep; + INT8 bBoxingState; + INT8 bConsNumTurnsNotSeen; + UINT8 ubArmyGuysKilled; - INT32 sPanicTriggerGridNo[ NUM_PANIC_TRIGGERS ]; - INT8 bPanicTriggerIsAlarm[ NUM_PANIC_TRIGGERS ]; - UINT8 ubPanicTolerance[ NUM_PANIC_TRIGGERS ]; - BOOLEAN fAtLeastOneGuyOnMultiSelect; - BOOLEAN fSaidCreatureFlavourQuote; - BOOLEAN fHaveSeenCreature; - BOOLEAN fKilledEnemyOnAttack; - UINT16 ubEnemyKilledOnAttack; - INT8 bEnemyKilledOnAttackLevel; - UINT16 ubEnemyKilledOnAttackLocation; - BOOLEAN fItemsSeenOnAttack; - BOOLEAN ubItemsSeenOnAttackSoldier; - BOOLEAN fBeenInCombatOnce; - BOOLEAN fSaidCreatureSmellQuote; - UINT32 usItemsSeenOnAttackGridNo; - BOOLEAN fLockItemLocators; - UINT8 ubLastQuoteSaid; - UINT8 ubLastQuoteProfileNUm; - BOOLEAN fCantGetThrough; - INT32 sCantGetThroughGridNo; - INT32 sCantGetThroughSoldierGridNo; - UINT16 ubCantGetThroughID; - BOOLEAN fDidGameJustStart; - BOOLEAN fStatChangeCheatOn; - UINT8 ubLastRequesterTargetID; - BOOLEAN fGoodToAllowCrows; - UINT8 ubNumCrowsPossible; - UINT32 uiTimeCounterForGiveItemSrc; - BOOLEAN fUnLockUIAfterHiddenInterrupt; - INT8 bNumFoughtInBattle[ MAXTEAMS ]; - UINT32 uiDecayBloodLastUpdate; - UINT32 uiTimeSinceLastInTactical; - BOOLEAN fHasAGameBeenStarted; - INT8 bConsNumTurnsWeHaventSeenButEnemyDoes; - BOOLEAN fSomeoneHit; - UINT32 uiTimeSinceLastOpplistDecay; - INT8 bMercArrivingQuoteBeingUsed; - UINT16 ubEnemyKilledOnAttackKiller; - BOOLEAN fCountingDownForGuideDescription; - INT8 bGuideDescriptionCountDown; - UINT8 ubGuideDescriptionToUse; - INT8 bGuideDescriptionSectorX; - INT8 bGuideDescriptionSectorY; - INT8 fEnemyFlags; - BOOLEAN fAutoBandagePending; - BOOLEAN fHasEnteredCombatModeSinceEntering; - BOOLEAN fDontAddNewCrows; - UINT8 ubMorePadding; - UINT16 sCreatureTenseQuoteDelay; - UINT32 uiCreatureTenseQuoteLastUpdate; + INT32 sPanicTriggerGridNo[ NUM_PANIC_TRIGGERS ]; + INT8 bPanicTriggerIsAlarm[ NUM_PANIC_TRIGGERS ]; + UINT8 ubPanicTolerance[ NUM_PANIC_TRIGGERS ]; + BOOLEAN fAtLeastOneGuyOnMultiSelect; + BOOLEAN fSaidCreatureFlavourQuote; + BOOLEAN fHaveSeenCreature; + BOOLEAN fKilledEnemyOnAttack; + UINT16 ubEnemyKilledOnAttack; + INT8 bEnemyKilledOnAttackLevel; + UINT16 ubEnemyKilledOnAttackLocation; + BOOLEAN fItemsSeenOnAttack; + BOOLEAN ubItemsSeenOnAttackSoldier; + BOOLEAN fBeenInCombatOnce; + BOOLEAN fSaidCreatureSmellQuote; + UINT32 usItemsSeenOnAttackGridNo; + BOOLEAN fLockItemLocators; + UINT8 ubLastQuoteSaid; + UINT8 ubLastQuoteProfileNUm; + BOOLEAN fCantGetThrough; + INT32 sCantGetThroughGridNo; + INT32 sCantGetThroughSoldierGridNo; + UINT16 ubCantGetThroughID; + BOOLEAN fDidGameJustStart; + BOOLEAN fStatChangeCheatOn; + UINT8 ubLastRequesterTargetID; + BOOLEAN fGoodToAllowCrows; + UINT8 ubNumCrowsPossible; + UINT32 uiTimeCounterForGiveItemSrc; + BOOLEAN fUnLockUIAfterHiddenInterrupt; + INT8 bNumFoughtInBattle[ MAXTEAMS ]; + UINT32 uiDecayBloodLastUpdate; + UINT32 uiTimeSinceLastInTactical; + BOOLEAN fHasAGameBeenStarted; + INT8 bConsNumTurnsWeHaventSeenButEnemyDoes; + BOOLEAN fSomeoneHit; + UINT32 uiTimeSinceLastOpplistDecay; + INT8 bMercArrivingQuoteBeingUsed; + UINT16 ubEnemyKilledOnAttackKiller; + BOOLEAN fCountingDownForGuideDescription; + INT8 bGuideDescriptionCountDown; + UINT8 ubGuideDescriptionToUse; + INT8 bGuideDescriptionSectorX; + INT8 bGuideDescriptionSectorY; + INT8 fEnemyFlags; + BOOLEAN fAutoBandagePending; + BOOLEAN fHasEnteredCombatModeSinceEntering; + BOOLEAN fDontAddNewCrows; + UINT8 ubMorePadding; + UINT16 sCreatureTenseQuoteDelay; + UINT32 uiCreatureTenseQuoteLastUpdate; // SANDRO - added these - UINT16 ubLastRequesterSurgeryTargetID; - UINT8 ubInterruptPending; + UINT16 ubLastRequesterSurgeryTargetID; + UINT8 ubInterruptPending; // sevenfm: Ctrl+D disable interrupts - BOOLEAN ubDisablePlayerInterrupts; + BOOLEAN ubDisablePlayerInterrupts; // PADDING GONE!!!!! }; diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index 63503bbf..bfc9e6a6 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -1543,7 +1543,7 @@ public: /////////////////////////////////////////////////////// // Flugente: this was the location of required variables required for the now removed poison feature. They can be used again UINT8 ubMilitiaAssists; // Flugente: stores militia assists - INT8 sNonNPCTraderID; // Flugente: we can set up non-NPC soldiers to be merchants, we store their dealer id here (value > 0 means arms dealer entry x) + INT8 sNonNPCTraderID; // Flugente: we can set up non-NPC soldiers to be merchants, we store their dealer id here (value > 0 means arms dealer entry x) //INT8 bUnusedINT8_3; UINT16 usDragPersonID; // Flugente: id of person we are dragging From 508310be3e67dfd930f623652e6427c40ed665f9 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 10 Nov 2024 01:19:05 +0200 Subject: [PATCH 014/192] Change UINT8 to UINT16 for soldierInitLists & hostiles in sector --- Strategic/Auto Resolve.cpp | 28 +++--- Strategic/Campaign Types.h | 52 +++++------ Strategic/Creature Spreading.cpp | 36 ++++---- Strategic/Creature Spreading.h | 26 +++--- Strategic/LuaInitNPCs.cpp | 4 +- Strategic/Player Command.cpp | 2 +- Strategic/Queen Command.cpp | 81 +++++++++-------- Strategic/Queen Command.h | 24 +++--- Strategic/Reinforcement.cpp | 8 +- Strategic/Reinforcement.h | 6 +- Strategic/UndergroundInit.cpp | 17 +++- Tactical/Enemy Soldier Save.cpp | 12 +-- Tactical/Soldier Control.cpp | 2 +- Tactical/Soldier Init List.cpp | 144 +++++++++++++++---------------- Tactical/Soldier Init List.h | 18 ++-- 15 files changed, 236 insertions(+), 224 deletions(-) diff --git a/Strategic/Auto Resolve.cpp b/Strategic/Auto Resolve.cpp index 6d0ce078..7715042d 100644 --- a/Strategic/Auto Resolve.cpp +++ b/Strategic/Auto Resolve.cpp @@ -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 @@ -3067,7 +3067,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 +3087,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 +3096,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; diff --git a/Strategic/Campaign Types.h b/Strategic/Campaign Types.h index 37be5a19..238568a9 100644 --- a/Strategic/Campaign Types.h +++ b/Strategic/Campaign Types.h @@ -487,18 +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; + 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; 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 @@ -511,8 +511,8 @@ 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, @@ -551,8 +551,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 +565,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 +583,8 @@ typedef struct SECTORINFO UINT8 ubNumElites_Turncoat; UINT8 usExplorationProgress; - UINT8 ubNumRobots; - UINT8 ubRobotsInBattle; + UINT16 ubNumRobots; + UINT16 ubRobotsInBattle; INT8 bPadding[ 6 ]; }SECTORINFO; @@ -600,18 +600,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 +622,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 +656,4 @@ enum CreateMusic CM_ALWAYS, }; -#endif \ No newline at end of file +#endif diff --git a/Strategic/Creature Spreading.cpp b/Strategic/Creature Spreading.cpp index 13581a26..1bd1c033 100644 --- a/Strategic/Creature Spreading.cpp +++ b/Strategic/Creature Spreading.cpp @@ -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; @@ -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; @@ -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 ) { @@ -2422,4 +2422,4 @@ void ResetCreatureAttackVariables() gubAdultFemalesAttackingTown = 0; gubCreatureBattleCode = CREATURE_BATTLE_CODE_NONE; gubSectorIDOfCreatureAttack = 0; -} \ No newline at end of file +} diff --git a/Strategic/Creature Spreading.h b/Strategic/Creature Spreading.h index e7e812c6..67b1daea 100644 --- a/Strategic/Creature Spreading.h +++ b/Strategic/Creature Spreading.h @@ -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 \ No newline at end of file +#endif diff --git a/Strategic/LuaInitNPCs.cpp b/Strategic/LuaInitNPCs.cpp index 7b9eb60f..c8a19d6f 100644 --- a/Strategic/LuaInitNPCs.cpp +++ b/Strategic/LuaInitNPCs.cpp @@ -220,7 +220,7 @@ static int l_iStringToUse(lua_State *L); static int l_StopVideo(lua_State *L); static int l_StartVideo(lua_State *L); -UNDERGROUND_SECTORINFO* NewUndergroundNode( UINT8 ubSectorX, UINT8 ubSectorY, UINT8 ubSectorZ ); +extern UNDERGROUND_SECTORINFO* NewUndergroundNode( UINT8 ubSectorX, UINT8 ubSectorY, UINT8 ubSectorZ ); BOOLEAN LoadLuaGlobalFromLoadGameFile( HWFILE hFile ); BOOLEAN SaveLuaGlobalToSaveGameFile( HWFILE hFile ); @@ -13574,7 +13574,7 @@ static int l_SetPhotoFactLaptopData( lua_State *L ) return 0; } -extern UINT8 NumHostilesInSector( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ ); +extern UINT16 NumHostilesInSector( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ ); static int l_GetNumHostilesInSector( lua_State *L ) { diff --git a/Strategic/Player Command.cpp b/Strategic/Player Command.cpp index efa91292..729a957c 100644 --- a/Strategic/Player Command.cpp +++ b/Strategic/Player Command.cpp @@ -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 ); } diff --git a/Strategic/Queen Command.cpp b/Strategic/Queen Command.cpp index 676c21d3..077d373d 100644 --- a/Strategic/Queen Command.cpp +++ b/Strategic/Queen Command.cpp @@ -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 ) { @@ -309,7 +309,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 +344,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 +368,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 +396,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 +441,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 +468,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 +486,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 ); @@ -576,9 +576,9 @@ 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 ) @@ -590,13 +590,12 @@ UINT8 NumFreeSlots( UINT8 ubTeam ) // 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; } -#pragma optimize("",off) //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) @@ -1187,7 +1186,7 @@ BOOLEAN PrepareEnemyForUndergroundBattle() Assert( FALSE ); return FALSE; } -#pragma optimize("",on) + //The queen AI layer must process the event by subtracting forces, etc. void ProcessQueenCmdImplicationsOfDeath( SOLDIERTYPE *pSoldier ) { @@ -2176,12 +2175,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 +2322,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 +2345,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 +2368,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 +2391,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 +2414,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 +2462,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 +2557,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 +2580,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--; diff --git a/Strategic/Queen Command.h b/Strategic/Queen Command.h index 541206d0..ead2f97e 100644 --- a/Strategic/Queen Command.h +++ b/Strategic/Queen Command.h @@ -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,8 +39,8 @@ 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(); diff --git a/Strategic/Reinforcement.cpp b/Strategic/Reinforcement.cpp index 2adaa4f9..081ada33 100644 --- a/Strategic/Reinforcement.cpp +++ b/Strategic/Reinforcement.cpp @@ -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 ); diff --git a/Strategic/Reinforcement.h b/Strategic/Reinforcement.h index e6017b51..05079013 100644 --- a/Strategic/Reinforcement.h +++ b/Strategic/Reinforcement.h @@ -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 \ No newline at end of file +#endif diff --git a/Strategic/UndergroundInit.cpp b/Strategic/UndergroundInit.cpp index a5ea0904..9e102d26 100644 --- a/Strategic/UndergroundInit.cpp +++ b/Strategic/UndergroundInit.cpp @@ -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(const char * index, UINT8& value) return false; } +template <> +bool LuaTable::getValue(const char* index, UINT16& value) +{ + int dummy; + + bool b = getValue(index, dummy); + if (b) + { + value = static_cast(dummy); + return true; + } + + return false; +} + // Calls into Lua script to let build underground sector list. BOOLEAN LuaUnderground::InitializeSectorList() { diff --git a/Tactical/Enemy Soldier Save.cpp b/Tactical/Enemy Soldier Save.cpp index 0d11d98a..2fdfa34f 100644 --- a/Tactical/Enemy Soldier Save.cpp +++ b/Tactical/Enemy Soldier Save.cpp @@ -39,7 +39,7 @@ int gCivPreservedTempFileVersion[256]; BOOLEAN AddPlacementToWorld( SOLDIERINITNODE *pNode, GROUP *pGroup = NULL ); -BOOLEAN CountNumberOfElitesRegularsAdminsAndCreaturesFromEnemySoldiersTempFile( UINT8 *pubNumRobots, UINT8 *pubNumElites, UINT8 *pubNumRegulars, UINT8 *pubNumAdmins, UINT8 *pubNumCreatures, UINT8 *pubNumTanks, UINT8 *pubNumJeeps ); +BOOLEAN CountNumberOfElitesRegularsAdminsAndCreaturesFromEnemySoldiersTempFile( UINT16 *pubNumRobots, UINT16 *pubNumElites, UINT16 *pubNumRegulars, UINT16 *pubNumAdmins, UINT16 *pubNumCreatures, UINT16 *pubNumTanks, UINT16 *pubNumJeeps ); BOOLEAN gfRestoringEnemySoldiersFromTempFile = FALSE; BOOLEAN gfRestoringCiviliansFromTempFile = FALSE; @@ -100,8 +100,8 @@ BOOLEAN LoadEnemySoldiersFromTempFile() #endif INT8 bSectorZ; UINT8 ubSectorID; - UINT8 ubNumRobots = 0, ubNumElites = 0, ubNumTroops = 0, ubNumAdmins = 0, ubNumCreatures = 0, ubNumTanks = 0, ubNumJeeps = 0; - UINT8 ubStrategicRobots, ubStrategicElites, ubStrategicTroops, ubStrategicAdmins, ubStrategicCreatures, ubStrategicTanks, ubStrategicJeeps; + UINT16 ubNumRobots = 0, ubNumElites = 0, ubNumTroops = 0, ubNumAdmins = 0, ubNumCreatures = 0, ubNumTanks = 0, ubNumJeeps = 0; + UINT16 ubStrategicRobots, ubStrategicElites, ubStrategicTroops, ubStrategicAdmins, ubStrategicCreatures, ubStrategicTanks, ubStrategicJeeps; gfRestoringEnemySoldiersFromTempFile = TRUE; @@ -695,8 +695,8 @@ BOOLEAN NewWayOfLoadingEnemySoldiersFromTempFile() #endif INT8 bSectorZ; UINT8 ubSectorID; - UINT8 ubNumRobots = 0, ubNumElites = 0, ubNumTroops = 0, ubNumAdmins = 0, ubNumCreatures = 0, ubNumTanks = 0, ubNumJeeps = 0; - UINT8 ubStrategicRobots = 0, ubStrategicElites, ubStrategicTroops, ubStrategicAdmins, ubStrategicCreatures, ubStrategicTanks, ubStrategicJeeps; + UINT16 ubNumRobots = 0, ubNumElites = 0, ubNumTroops = 0, ubNumAdmins = 0, ubNumCreatures = 0, ubNumTanks = 0, ubNumJeeps = 0; + UINT16 ubStrategicRobots = 0, ubStrategicElites, ubStrategicTroops, ubStrategicAdmins, ubStrategicCreatures, ubStrategicTanks, ubStrategicJeeps; gfRestoringEnemySoldiersFromTempFile = TRUE; @@ -1638,7 +1638,7 @@ BOOLEAN NewWayOfSavingEnemyAndCivliansToTempFile( INT16 sSectorX, INT16 sSectorY -BOOLEAN CountNumberOfElitesRegularsAdminsAndCreaturesFromEnemySoldiersTempFile( UINT8 *pubNumRobots, UINT8 *pubNumElites, UINT8 *pubNumRegulars, UINT8 *pubNumAdmins, UINT8 *pubNumCreatures, UINT8 *pubNumTanks, UINT8 *pubNumJeeps ) +BOOLEAN CountNumberOfElitesRegularsAdminsAndCreaturesFromEnemySoldiersTempFile( UINT16 *pubNumRobots, UINT16 *pubNumElites, UINT16 *pubNumRegulars, UINT16 *pubNumAdmins, UINT16 *pubNumCreatures, UINT16 *pubNumTanks, UINT16 *pubNumJeeps ) { // SOLDIERINITNODE *curr; SOLDIERCREATE_STRUCT tempDetailedPlacement; diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index 35cc4b59..7963e9e6 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -22475,7 +22475,7 @@ void SOLDIERTYPE::EVENT_SoldierBeginAttachCan( INT32 sGridNo, UINT8 ubDirection } -extern UINT8 NumEnemiesInAnySector( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ ); +extern UINT16 NumEnemiesInAnySector( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ ); void SOLDIERTYPE::EVENT_SoldierBuildStructure( INT32 sGridNo, UINT8 ubDirection ) { diff --git a/Tactical/Soldier Init List.cpp b/Tactical/Soldier Init List.cpp index 7cb99a45..d4ec5fe7 100644 --- a/Tactical/Soldier Init List.cpp +++ b/Tactical/Soldier Init List.cpp @@ -318,8 +318,8 @@ BOOLEAN LoadSoldiersFromMap(INT8** hBuffer, FLOAT dMajorMapVersion, UINT8 ubMino AssertMsg(0, "Failed to allocate memory for new basic placement in LoadSoldiersFromMap."); return(FALSE); } - Assert(cnt < 256); - pNode->ubNodeID = (UINT8)cnt; + Assert(cnt < MAX_INDIVIDUALS); + pNode->ubNodeID = cnt; if(tempBasicPlacement.fDetailedPlacement) { // Add the static detailed placement information in the same newly created node as the basic placement. Read static detailed placement from file. @@ -369,7 +369,7 @@ BOOLEAN SaveSoldiersToMap(HWFILE hFile, FLOAT dMajorMapVersion, UINT8 ubMinorMap { if(!curr) return(FALSE); - curr->ubNodeID = (UINT8)i; + curr->ubNodeID = i; curr->pBasicPlacement->Save(hFile, dMajorMapVersion, ubMinorMapVersion); if(curr->pBasicPlacement->fDetailedPlacement) { @@ -577,7 +577,6 @@ void SortSoldierInitList() } extern FLOAT gAmbushRadiusModifier; -#pragma optimize("",off) BOOLEAN AddPlacementToWorld( SOLDIERINITNODE *curr, GROUP *pGroup = NULL ) { UINT8 ubProfile; @@ -855,7 +854,7 @@ BOOLEAN AddPlacementToWorld( SOLDIERINITNODE *curr, GROUP *pGroup = NULL ) if(is_server) ScreenMsg( FONT_YELLOW, MSG_MPSYSTEM, L"report this MP error (AddPlacementToWorld-FAIL!)"); return FALSE; } -#pragma optimize("",on) + void AddPlacementToWorldByProfileID( UINT8 ubProfile ) { SOLDIERINITNODE * curr; @@ -874,12 +873,12 @@ void AddPlacementToWorldByProfileID( UINT8 ubProfile ) } } -UINT8 AddSoldierInitListTeamToWorld( INT8 bTeam, UINT8 ubMaxNum ) +UINT16 AddSoldierInitListTeamToWorld( INT8 bTeam, UINT16 ubMaxNum ) { - UINT8 ubNumAdded = 0; + UINT16 ubNumAdded = 0; SOLDIERINITNODE *mark; - UINT8 ubSlotsToFill; - UINT8 ubSlotsAvailable; + UINT16 ubSlotsToFill; + UINT16 ubSlotsAvailable; SOLDIERINITNODE *curr; DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("AddSoldierInitListTeamToWorld")); @@ -1046,22 +1045,22 @@ UINT8 AddSoldierInitListTeamToWorld( INT8 bTeam, UINT8 ubMaxNum ) return ubNumAdded; } -#pragma optimize("",off) -void AddSoldierInitListEnemyDefenceSoldiers( UINT8 ubTotalAdmin, UINT8 ubTotalTroops, UINT8 ubTotalElite, UINT8 ubTotalRobots, UINT8 ubTotalTanks, UINT8 ubTotalJeeps ) + +void AddSoldierInitListEnemyDefenceSoldiers( UINT16 ubTotalAdmin, UINT16 ubTotalTroops, UINT16 ubTotalElite, UINT16 ubTotalRobots, UINT16 ubTotalTanks, UINT16 ubTotalJeeps ) { SOLDIERINITNODE *mark; SOLDIERINITNODE *curr; INT32 iRandom; - UINT8 ubMaxNum; - UINT8 ubRobotPDSlots = 0, ubRobotDSlots = 0, ubRobotPSlots = 0, ubRobotBSlots = 0; - UINT8 ubElitePDSlots = 0, ubEliteDSlots = 0, ubElitePSlots = 0, ubEliteBSlots = 0; - UINT8 ubTroopPDSlots = 0, ubTroopDSlots = 0, ubTroopPSlots = 0, ubTroopBSlots = 0; - UINT8 ubAdminPDSlots = 0, ubAdminDSlots = 0, ubAdminPSlots = 0, ubAdminBSlots = 0; - UINT8 ubTankPDSlots = 0, ubTankDSlots = 0, ubTankPSlots = 0, ubTankBSlots = 0; - UINT8 ubJeepPDSlots = 0, ubJeepDSlots = 0, ubJeepPSlots = 0, ubJeepBSlots = 0; - UINT8 ubFreeSlots; - UINT8 *pCurrSlots=NULL; - UINT8 *pCurrTotal=NULL; + UINT16 ubMaxNum; + UINT16 ubRobotPDSlots = 0, ubRobotDSlots = 0, ubRobotPSlots = 0, ubRobotBSlots = 0; + UINT16 ubElitePDSlots = 0, ubEliteDSlots = 0, ubElitePSlots = 0, ubEliteBSlots = 0; + UINT16 ubTroopPDSlots = 0, ubTroopDSlots = 0, ubTroopPSlots = 0, ubTroopBSlots = 0; + UINT16 ubAdminPDSlots = 0, ubAdminDSlots = 0, ubAdminPSlots = 0, ubAdminBSlots = 0; + UINT16 ubTankPDSlots = 0, ubTankDSlots = 0, ubTankPSlots = 0, ubTankBSlots = 0; + UINT16 ubJeepPDSlots = 0, ubJeepDSlots = 0, ubJeepPSlots = 0, ubJeepBSlots = 0; + UINT16 ubFreeSlots; + UINT16 *pCurrSlots=NULL; + UINT16 *pCurrTotal=NULL; UINT8 ubCurrClass; DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("AddSoldierInitListEnemyDefenceSoldiers")); @@ -1601,25 +1600,25 @@ void AddSoldierInitListEnemyDefenceSoldiers( UINT8 ubTotalAdmin, UINT8 ubTotalTr curr = curr->next; } } -#pragma optimize("",on) + //If we are adding militia to our map, then we do a few things differently. //First of all, they exist exclusively to the enemy troops, so if the militia exists in the //sector, then they get to use the enemy placements. However, we remove any orders from //placements containing RNDPTPATROL or POINTPATROL orders, as well as remove any detailed //placement information. -void AddSoldierInitListMilitia( UINT8 ubNumGreen, UINT8 ubNumRegs, UINT8 ubNumElites ) +void AddSoldierInitListMilitia( UINT16 ubNumGreen, UINT16 ubNumRegs, UINT16 ubNumElites ) { SOLDIERINITNODE *mark; SOLDIERINITNODE *curr; INT32 iRandom; - UINT8 ubMaxNum; + UINT16 ubMaxNum; BOOLEAN fDoPlacement; - UINT8 ubEliteSlots = 0; - UINT8 ubRegSlots = 0; - UINT8 ubGreenSlots = 0; - UINT8 ubFreeSlots; - UINT8 *pCurrSlots=NULL; - UINT8 *pCurrTotal=NULL; + UINT16 ubEliteSlots = 0; + UINT16 ubRegSlots = 0; + UINT16 ubGreenSlots = 0; + UINT16 ubFreeSlots; + UINT16 *pCurrSlots=NULL; + UINT16 *pCurrTotal=NULL; DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("AddSoldierInitListMilitia")); @@ -1955,22 +1954,22 @@ void AddSoldierInitListMilitia( UINT8 ubNumGreen, UINT8 ubNumRegs, UINT8 ubNumEl } } -void AddSoldierInitListCreatures( BOOLEAN fQueen, UINT8 ubNumLarvae, UINT8 ubNumInfants, - UINT8 ubNumYoungMales, UINT8 ubNumYoungFemales, UINT8 ubNumAdultMales, - UINT8 ubNumAdultFemales ) +void AddSoldierInitListCreatures( BOOLEAN fQueen, UINT16 ubNumLarvae, UINT16 ubNumInfants, + UINT16 ubNumYoungMales, UINT16 ubNumYoungFemales, UINT16 ubNumAdultMales, + UINT16 ubNumAdultFemales ) { SOLDIERINITNODE *curr; INT32 iRandom; - UINT8 ubFreeSlots; + UINT16 ubFreeSlots; BOOLEAN fDoPlacement; - UINT8 ubNumCreatures; + UINT16 ubNumCreatures; DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("AddSoldierInitListCreatures")); SortSoldierInitList(); //Okay, if we have a queen, place her first. She MUST have a special placement, else //we can't use anything. - ubNumCreatures = (UINT8)(ubNumLarvae + ubNumInfants + ubNumYoungMales + ubNumYoungFemales + ubNumAdultMales + ubNumAdultFemales); + ubNumCreatures = (ubNumLarvae + ubNumInfants + ubNumYoungMales + ubNumYoungFemales + ubNumAdultMales + ubNumAdultFemales); if( fQueen ) { curr = gSoldierInitHead; @@ -2292,10 +2291,9 @@ void UseEditorAlternateList() //if the map was loaded again! void EvaluateDeathEffectsToSoldierInitList( SOLDIERTYPE *pSoldier ) { - SOLDIERINITNODE *curr; - UINT8 ubNodeID; - curr = gSoldierInitHead; - ubNodeID = 0; + UINT16 ubNodeID = 0; + SOLDIERINITNODE* curr = gSoldierInitHead; + if( pSoldier->bTeam == MILITIA_TEAM ) return; while( curr ) @@ -2319,7 +2317,7 @@ void EvaluateDeathEffectsToSoldierInitList( SOLDIERTYPE *pSoldier ) } } -void RemoveDetailedPlacementInfo( UINT8 ubNodeID ) +void RemoveDetailedPlacementInfo( UINT16 ubNodeID ) { SOLDIERINITNODE *curr; curr = gSoldierInitHead; @@ -2345,7 +2343,7 @@ BOOLEAN SaveSoldierInitListLinks( HWFILE hfile ) { SOLDIERINITNODE *curr; UINT32 uiNumBytesWritten; - UINT8 ubSlots = 0; + UINT16 ubSlots = 0; //count the number of soldier init nodes... curr = gSoldierInitHead; @@ -2355,8 +2353,8 @@ BOOLEAN SaveSoldierInitListLinks( HWFILE hfile ) curr = curr->next; } //...and save it. - FileWrite( hfile, &ubSlots, 1, &uiNumBytesWritten ); - if( uiNumBytesWritten != 1 ) + FileWrite( hfile, &ubSlots, 2, &uiNumBytesWritten ); + if( uiNumBytesWritten != 2 ) { return FALSE; } @@ -2368,8 +2366,8 @@ BOOLEAN SaveSoldierInitListLinks( HWFILE hfile ) { curr->ubSoldierID = 0; } - FileWrite( hfile, &curr->ubNodeID, 1, &uiNumBytesWritten ); - if( uiNumBytesWritten != 1 ) + FileWrite( hfile, &curr->ubNodeID, 2, &uiNumBytesWritten ); + if( uiNumBytesWritten != 2 ) { return FALSE; } @@ -2387,23 +2385,23 @@ BOOLEAN LoadSoldierInitListLinks( HWFILE hfile ) { UINT32 uiNumBytesRead; SOLDIERINITNODE *curr; - UINT8 ubSlots, ubNodeID; - UINT16 ubSoldierID; + UINT16 ubSlots; + UINT16 ubSoldierID, ubNodeID; - FileRead( hfile, &ubSlots, 1, &uiNumBytesRead ); - if( uiNumBytesRead != 1 ) + FileRead( hfile, &ubSlots, 2, &uiNumBytesRead ); + if( uiNumBytesRead != 2 ) { return FALSE; } while( ubSlots-- ) { - FileRead( hfile, &ubNodeID, 1, &uiNumBytesRead ); - if( uiNumBytesRead != 1 ) + FileRead( hfile, &ubNodeID, 2, &uiNumBytesRead ); + if( uiNumBytesRead != 2 ) { return FALSE; } - FileRead( hfile, &ubSoldierID, 1, &uiNumBytesRead ); - if( uiNumBytesRead != 1 ) + FileRead( hfile, &ubSoldierID, 2, &uiNumBytesRead ); + if( uiNumBytesRead != 2 ) { return FALSE; } @@ -2799,18 +2797,18 @@ BOOLEAN NewWayOfLoadingEnemySoldierInitListLinks( HWFILE hfile ) { UINT32 uiNumBytesRead; SOLDIERINITNODE *curr; - UINT8 ubSlots, ubNodeID; - UINT16 ubSoldierID; + UINT16 ubSlots; + UINT16 ubSoldierID, ubNodeID; - FileRead( hfile, &ubSlots, 1, &uiNumBytesRead ); - if( uiNumBytesRead != 1 ) + FileRead( hfile, &ubSlots, 2, &uiNumBytesRead ); + if( uiNumBytesRead != 2 ) { return FALSE; } while( ubSlots-- ) { - FileRead( hfile, &ubNodeID, 1, &uiNumBytesRead ); - if( uiNumBytesRead != 1 ) + FileRead( hfile, &ubNodeID, 2, &uiNumBytesRead ); + if( uiNumBytesRead != 2 ) { return FALSE; } @@ -2846,18 +2844,18 @@ BOOLEAN NewWayOfLoadingCivilianInitListLinks( HWFILE hfile ) { UINT32 uiNumBytesRead; SOLDIERINITNODE *curr; - UINT8 ubSlots, ubNodeID; - UINT16 ubSoldierID; + UINT16 ubSlots; + UINT16 ubSoldierID, ubNodeID; - FileRead( hfile, &ubSlots, 1, &uiNumBytesRead ); - if( uiNumBytesRead != 1 ) + FileRead( hfile, &ubSlots, 2, &uiNumBytesRead ); + if( uiNumBytesRead != 2 ) { return FALSE; } while( ubSlots-- ) { - FileRead( hfile, &ubNodeID, 1, &uiNumBytesRead ); - if( uiNumBytesRead != 1 ) + FileRead( hfile, &ubNodeID, 2, &uiNumBytesRead ); + if( uiNumBytesRead != 2 ) { return FALSE; } @@ -2893,18 +2891,18 @@ BOOLEAN LookAtButDontProcessEnemySoldierInitListLinks( HWFILE hfile ) { UINT32 uiNumBytesRead; SOLDIERINITNODE *curr; - UINT8 ubSlots, ubNodeID; - UINT16 ubSoldierID; + UINT16 ubSlots; + UINT16 ubSoldierID, ubNodeID; - FileRead( hfile, &ubSlots, 1, &uiNumBytesRead ); - if( uiNumBytesRead != 1 ) + FileRead( hfile, &ubSlots, 2, &uiNumBytesRead ); + if( uiNumBytesRead != 2 ) { return FALSE; } while( ubSlots-- ) { - FileRead( hfile, &ubNodeID, 1, &uiNumBytesRead ); - if( uiNumBytesRead != 1 ) + FileRead( hfile, &ubNodeID, 2, &uiNumBytesRead ); + if( uiNumBytesRead != 2 ) { return FALSE; } @@ -3329,4 +3327,4 @@ void SectorAddDownedPilot( INT16 sMapX, INT16 sMapY, INT16 sMapZ ) // remove the flag. We can only find the pilot the first time we visit this sector after the heli was shut down pSector->usSectorInfoFlag &= ~SECTORINFO_ENEMYHELI_SHOTDOWN; } -} \ No newline at end of file +} diff --git a/Tactical/Soldier Init List.h b/Tactical/Soldier Init List.h index ed1002a2..0eb2f2ef 100644 --- a/Tactical/Soldier Init List.h +++ b/Tactical/Soldier Init List.h @@ -6,7 +6,7 @@ typedef struct SOLDIERINITNODE { - UINT8 ubNodeID; + UINT16 ubNodeID; UINT16 ubSoldierID; BASIC_SOLDIERCREATE_STRUCT *pBasicPlacement; SOLDIERCREATE_STRUCT *pDetailedPlacement; @@ -39,13 +39,13 @@ SOLDIERINITNODE* AddBasicPlacementToSoldierInitList( BASIC_SOLDIERCREATE_STRUCT void RemoveSoldierNodeFromInitList( SOLDIERINITNODE *pNode ); SOLDIERINITNODE* FindSoldierInitNodeWithID( UINT16 usID ); -UINT8 AddSoldierInitListTeamToWorld( INT8 bTeam, UINT8 ubMaxNum ); -void AddSoldierInitListEnemyDefenceSoldiers( UINT8 ubTotalAdmin, UINT8 ubTotalTroops, UINT8 ubTotalElite, UINT8 ubTotalRobots, UINT8 ubTotalTanks, UINT8 ubTotalJeeps ); -void AddSoldierInitListCreatures( BOOLEAN fQueen, UINT8 ubNumLarvae, UINT8 ubNumInfants, - UINT8 ubNumYoungMales, UINT8 ubNumYoungFemales, UINT8 ubNumAdultMales, - UINT8 ubNumAdultFemales ); +UINT16 AddSoldierInitListTeamToWorld( INT8 bTeam, UINT16 ubMaxNum ); +void AddSoldierInitListEnemyDefenceSoldiers( UINT16 ubTotalAdmin, UINT16 ubTotalTroops, UINT16 ubTotalElite, UINT16 ubTotalRobots, UINT16 ubTotalTanks, UINT16 ubTotalJeeps ); +void AddSoldierInitListCreatures( BOOLEAN fQueen, UINT16 ubNumLarvae, UINT16 ubNumInfants, + UINT16 ubNumYoungMales, UINT16 ubNumYoungFemales, UINT16 ubNumAdultMales, + UINT16 ubNumAdultFemales ); void AddSoldierInitListOtherCreatures( UINT8 usNum ); -void AddSoldierInitListMilitia( UINT8 ubNumGreen, UINT8 ubNumReg, UINT8 ubNumElites ); +void AddSoldierInitListMilitia( UINT16 ubNumGreen, UINT16 ubNumReg, UINT16 ubNumElites ); void AddSoldierInitListMilitiaOnEdge( UINT8 ubStrategicInsertionCode, UINT8 ubNumGreen, UINT8 ubNumReg, UINT8 ubNumElites ); void AddSoldierInitListBloodcats(); @@ -55,7 +55,7 @@ void UseEditorAlternateList(); void AddPlacementToWorldByProfileID( UINT8 ubProfile ); void EvaluateDeathEffectsToSoldierInitList( SOLDIERTYPE *pSoldier ); -void RemoveDetailedPlacementInfo( UINT8 ubNodeID ); +void RemoveDetailedPlacementInfo( UINT16 ubNodeID ); void AddProfilesUsingProfileInsertionData(); void AddProfilesNotUsingProfileInsertionData(); @@ -69,4 +69,4 @@ void SectorAddPrisonersofWar( INT16 sMapX, INT16 sMapY, INT16 sMapZ ); // Flugente: decide wether to add a downed pilot if a helicopter was shot down here void SectorAddDownedPilot( INT16 sMapX, INT16 sMapY, INT16 sMapZ ); -#endif \ No newline at end of file +#endif From d9edc9362b33cd48de67c2034fb19256587181e6 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 10 Nov 2024 22:01:17 +0200 Subject: [PATCH 015/192] Fix loading of tactical status ubEnemyKilledOnAttacker is size UINT16 but loading function was reading only UINT8 worth for it --- Ja2/SaveLoadGame.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Ja2/SaveLoadGame.cpp b/Ja2/SaveLoadGame.cpp index 575b25b7..3d634441 100644 --- a/Ja2/SaveLoadGame.cpp +++ b/Ja2/SaveLoadGame.cpp @@ -7740,16 +7740,16 @@ BOOLEAN LoadTacticalStatusFromSavedGame( HWFILE hFile ) numBytesRead = ReadFieldByField(hFile, &gTacticalStatus.fSomeoneHit, sizeof(gTacticalStatus.fSomeoneHit), sizeof(BOOLEAN), 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); From 0089e0a6405e2409e6d1884a8eb02fe5242c4b47 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 10 Nov 2024 22:02:46 +0200 Subject: [PATCH 016/192] Change strategic enemy amounts to UINT16 --- Ja2/legion cfg.cpp | 6 +- Strategic/AI Viewer.cpp | 8 +-- Strategic/Auto Resolve.cpp | 6 +- Strategic/Map Screen Interface Map.cpp | 2 +- Strategic/MilitiaSquads.cpp | 2 +- Strategic/MilitiaSquads.h | 4 +- Strategic/Strategic AI.cpp | 90 ++++++++++++------------ Strategic/Strategic AI.h | 6 +- Strategic/Strategic Movement.h | 28 ++++---- Strategic/Strategic Transport Groups.cpp | 16 ++--- Strategic/Strategic Transport Groups.h | 2 +- 11 files changed, 85 insertions(+), 85 deletions(-) diff --git a/Ja2/legion cfg.cpp b/Ja2/legion cfg.cpp index 2004c497..0534251c 100644 --- a/Ja2/legion cfg.cpp +++ b/Ja2/legion cfg.cpp @@ -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 ) { diff --git a/Strategic/AI Viewer.cpp b/Strategic/AI Viewer.cpp index 3c1945fe..9f2006f0 100644 --- a/Strategic/AI Viewer.cpp +++ b/Strategic/AI Viewer.cpp @@ -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; @@ -722,7 +722,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 +1832,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; diff --git a/Strategic/Auto Resolve.cpp b/Strategic/Auto Resolve.cpp index 7715042d..565cf5bb 100644 --- a/Strategic/Auto Resolve.cpp +++ b/Strategic/Auto Resolve.cpp @@ -755,9 +755,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; diff --git a/Strategic/Map Screen Interface Map.cpp b/Strategic/Map Screen Interface Map.cpp index 046bdc57..8fd4fa52 100644 --- a/Strategic/Map Screen Interface Map.cpp +++ b/Strategic/Map Screen Interface Map.cpp @@ -8090,7 +8090,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 ) diff --git a/Strategic/MilitiaSquads.cpp b/Strategic/MilitiaSquads.cpp index 303ea283..149a6c97 100644 --- a/Strategic/MilitiaSquads.cpp +++ b/Strategic/MilitiaSquads.cpp @@ -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; diff --git a/Strategic/MilitiaSquads.h b/Strategic/MilitiaSquads.h index f86a8a62..d07913dd 100644 --- a/Strategic/MilitiaSquads.h +++ b/Strategic/MilitiaSquads.h @@ -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 \ No newline at end of file +#endif diff --git a/Strategic/Strategic AI.cpp b/Strategic/Strategic AI.cpp index bf1d52b5..8fbed770 100644 --- a/Strategic/Strategic AI.cpp +++ b/Strategic/Strategic AI.cpp @@ -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. @@ -1151,8 +1151,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 +1538,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... @@ -2237,12 +2237,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", @@ -2325,7 +2325,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)", @@ -2678,7 +2678,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; @@ -3044,7 +3044,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 */ @@ -3171,7 +3171,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 ) { @@ -3261,7 +3261,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 ) { @@ -4510,15 +4510,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) @@ -5211,12 +5211,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) { @@ -5259,7 +5259,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; @@ -5351,7 +5351,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()); @@ -6751,7 +6751,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; @@ -6795,19 +6795,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; @@ -7084,12 +7084,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; diff --git a/Strategic/Strategic AI.h b/Strategic/Strategic AI.h index 5c7986af..bac2582d 100644 --- a/Strategic/Strategic AI.h +++ b/Strategic/Strategic AI.h @@ -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 \ No newline at end of file +#endif diff --git a/Strategic/Strategic Movement.h b/Strategic/Strategic Movement.h index 1b49768a..d1aad931 100644 --- a/Strategic/Strategic Movement.h +++ b/Strategic/Strategic Movement.h @@ -62,28 +62,28 @@ typedef struct 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 diff --git a/Strategic/Strategic Transport Groups.cpp b/Strategic/Strategic Transport Groups.cpp index 16916e3f..ccd981d0 100644 --- a/Strategic/Strategic Transport Groups.cpp +++ b/Strategic/Strategic Transport Groups.cpp @@ -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> transportGroupIdToSoldierMap; +std::map> transportGroupIdToSoldierMap; std::map 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; @@ -603,7 +603,7 @@ void UpdateTransportGroupInventory() { SOLDIERTYPE* pSoldier = &Menptr[slot]; - const std::map>::iterator groupIter = transportGroupIdToSoldierMap.find(pSoldier->ubGroupID); + const std::map>::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 +620,7 @@ void UpdateTransportGroupInventory() } // found a matching transport groupid - std::map::iterator soldierClassIter = groupIter->second.find(SOLDIER_CLASS_JEEP); + std::map::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 +874,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 +913,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; diff --git a/Strategic/Strategic Transport Groups.h b/Strategic/Strategic Transport Groups.h index 3fd873c5..897777fd 100644 --- a/Strategic/Strategic Transport Groups.h +++ b/Strategic/Strategic Transport Groups.h @@ -22,7 +22,7 @@ void UpdateTransportGroupInventory(); const std::map GetTransportGroupSectorInfo(); -void AddToTransportGroupMap(UINT8 groupId, int soldierClass, UINT8 amount); +void AddToTransportGroupMap(UINT8 groupId, int soldierClass, UINT16 amount); void ClearTransportGroupMap(); void NotifyTransportGroupDefeated(); From 040410b450a5b4df4fa8c9eab09c905921da8dbd Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 10 Nov 2024 22:03:46 +0200 Subject: [PATCH 017/192] Whitespace formatting for SAVED_GAME_HEADER --- Ja2/SaveLoadGame.h | 52 ++++++++++++++++++---------------------------- 1 file changed, 20 insertions(+), 32 deletions(-) diff --git a/Ja2/SaveLoadGame.h b/Ja2/SaveLoadGame.h index 0bf89f50..ea873e35 100644 --- a/Ja2/SaveLoadGame.h +++ b/Ja2/SaveLoadGame.h @@ -38,41 +38,29 @@ 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; - 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! + 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; From fcf2b27d1ac7a13c4a163eeca082b6e2098f3dff Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 11 Nov 2024 00:08:30 +0200 Subject: [PATCH 018/192] More UINT8 -> UINT16 changes --- Strategic/Auto Resolve.cpp | 8 +-- Strategic/Campaign Types.h | 2 +- Strategic/Map Screen Interface Map.cpp | 12 ++--- Strategic/MilitiaIndividual.cpp | 4 +- Strategic/MilitiaIndividual.h | 6 +-- Strategic/MilitiaSquads.cpp | 72 +++++++++++++------------- Strategic/PreBattle Interface.cpp | 12 ++--- Strategic/Queen Command.cpp | 6 +-- Strategic/Rebel Command.cpp | 2 +- Strategic/Rebel Command.h | 2 +- Strategic/Strategic Movement.cpp | 8 +-- Strategic/Strategic Movement.h | 2 +- Strategic/Town Militia.cpp | 36 ++++++------- Strategic/Town Militia.h | 14 ++--- Strategic/mapscreen.cpp | 6 +-- Tactical/Inventory Choosing.cpp | 8 +-- Tactical/Inventory Choosing.h | 4 +- Tactical/Militia Control.cpp | 2 +- Tactical/Overhead.cpp | 2 +- Tactical/Soldier Init List.cpp | 30 +++++------ Tactical/Soldier Init List.h | 4 +- 21 files changed, 121 insertions(+), 121 deletions(-) diff --git a/Strategic/Auto Resolve.cpp b/Strategic/Auto Resolve.cpp index 565cf5bb..5a1cb23a 100644 --- a/Strategic/Auto Resolve.cpp +++ b/Strategic/Auto Resolve.cpp @@ -2048,7 +2048,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 +2077,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 +2200,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; diff --git a/Strategic/Campaign Types.h b/Strategic/Campaign Types.h index 238568a9..f5b6d996 100644 --- a/Strategic/Campaign Types.h +++ b/Strategic/Campaign Types.h @@ -519,7 +519,7 @@ typedef struct SECTORINFO //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; diff --git a/Strategic/Map Screen Interface Map.cpp b/Strategic/Map Screen Interface Map.cpp index 8fd4fa52..8fcb5381 100644 --- a/Strategic/Map Screen Interface Map.cpp +++ b/Strategic/Map Screen Interface Map.cpp @@ -6231,14 +6231,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 ); diff --git a/Strategic/MilitiaIndividual.cpp b/Strategic/MilitiaIndividual.cpp index dade1619..28cd25af 100644 --- a/Strategic/MilitiaIndividual.cpp +++ b/Strategic/MilitiaIndividual.cpp @@ -1004,7 +1004,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 +1042,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::iterator itend = gIndividualMilitiaVector.end( ); for ( std::vector::iterator it = gIndividualMilitiaVector.begin( ); it != itend; ++it ) diff --git a/Strategic/MilitiaIndividual.h b/Strategic/MilitiaIndividual.h index e03e7a95..bb7747e7 100644 --- a/Strategic/MilitiaIndividual.h +++ b/Strategic/MilitiaIndividual.h @@ -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 \ No newline at end of file +#endif diff --git a/Strategic/MilitiaSquads.cpp b/Strategic/MilitiaSquads.cpp index 149a6c97..793798ff 100644 --- a/Strategic/MilitiaSquads.cpp +++ b/Strategic/MilitiaSquads.cpp @@ -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; diff --git a/Strategic/PreBattle Interface.cpp b/Strategic/PreBattle Interface.cpp index 003a1fe2..effe444f 100644 --- a/Strategic/PreBattle Interface.cpp +++ b/Strategic/PreBattle Interface.cpp @@ -298,9 +298,9 @@ 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; @@ -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 ); diff --git a/Strategic/Queen Command.cpp b/Strategic/Queen Command.cpp index 077d373d..58452a63 100644 --- a/Strategic/Queen Command.cpp +++ b/Strategic/Queen Command.cpp @@ -1771,8 +1771,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; @@ -2000,7 +2000,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; diff --git a/Strategic/Rebel Command.cpp b/Strategic/Rebel Command.cpp index 7961b78a..1688ea83 100644 --- a/Strategic/Rebel Command.cpp +++ b/Strategic/Rebel Command.cpp @@ -3182,7 +3182,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; diff --git a/Strategic/Rebel Command.h b/Strategic/Rebel Command.h index 22b6fd3b..d29cff3f 100644 --- a/Strategic/Rebel Command.h +++ b/Strategic/Rebel Command.h @@ -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(); diff --git a/Strategic/Strategic Movement.cpp b/Strategic/Strategic Movement.cpp index 21baa737..588f91c1 100644 --- a/Strategic/Strategic Movement.cpp +++ b/Strategic/Strategic Movement.cpp @@ -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 ] ]; diff --git a/Strategic/Strategic Movement.h b/Strategic/Strategic Movement.h index d1aad931..1acd86d3 100644 --- a/Strategic/Strategic Movement.h +++ b/Strategic/Strategic Movement.h @@ -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 ); diff --git a/Strategic/Town Militia.cpp b/Strategic/Town Militia.cpp index feaf4aed..976b9545 100644 --- a/Strategic/Town Militia.cpp +++ b/Strategic/Town Militia.cpp @@ -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 ) diff --git a/Strategic/Town Militia.h b/Strategic/Town Militia.h index 33824893..db584d71 100644 --- a/Strategic/Town Militia.h +++ b/Strategic/Town Militia.h @@ -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 \ No newline at end of file +#endif diff --git a/Strategic/mapscreen.cpp b/Strategic/mapscreen.cpp index 97d670ba..2afd246f 100644 --- a/Strategic/mapscreen.cpp +++ b/Strategic/mapscreen.cpp @@ -17506,9 +17506,9 @@ BOOLEAN MilitiaPlotStart( ) return FALSE; // 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]; // when we start plotting, the group is still empty - we add militia later GROUP* pGroup = CreateNewMilitiaGroupDepartingFromSector( SECTOR( sSelMapX, sSelMapY ), greens, regulars, elites ); diff --git a/Tactical/Inventory Choosing.cpp b/Tactical/Inventory Choosing.cpp index 72bfa796..4bab504f 100644 --- a/Tactical/Inventory Choosing.cpp +++ b/Tactical/Inventory Choosing.cpp @@ -3924,23 +3924,23 @@ void MoveOneMilitiaEquipmentSet(INT16 sSourceX, INT16 sSourceY, INT16 sTargetX, } } -void MoveMilitiaEquipment(INT16 sSourceX, INT16 sSourceY, INT16 sTargetX, INT16 sTargetY, UINT8 usElites, UINT8 usRegulars, UINT8 usGreens) +void MoveMilitiaEquipment(INT16 sSourceX, INT16 sSourceY, INT16 sTargetX, INT16 sTargetY, UINT16 usElites, UINT16 usRegulars, UINT16 usGreens) { if ( !gGameExternalOptions.fMilitiaUseSectorInventory ) return; // atm there is no class-specific selection, but that might change in the future - for (UINT8 i = 0; i < usElites; ++i) + for (UINT16 i = 0; i < usElites; ++i) { MoveOneMilitiaEquipmentSet( sSourceX, sSourceY, sTargetX, sTargetY, SOLDIER_CLASS_ELITE_MILITIA); } - for (UINT8 i = 0; i < usRegulars; ++i) + for (UINT16 i = 0; i < usRegulars; ++i) { MoveOneMilitiaEquipmentSet( sSourceX, sSourceY, sTargetX, sTargetY, SOLDIER_CLASS_REG_MILITIA); } - for (UINT8 i = 0; i < usGreens; ++i) + for (UINT16 i = 0; i < usGreens; ++i) { MoveOneMilitiaEquipmentSet( sSourceX, sSourceY, sTargetX, sTargetY, SOLDIER_CLASS_GREEN_MILITIA); } diff --git a/Tactical/Inventory Choosing.h b/Tactical/Inventory Choosing.h index 6f75e339..0fa4a469 100644 --- a/Tactical/Inventory Choosing.h +++ b/Tactical/Inventory Choosing.h @@ -121,9 +121,9 @@ extern ARMY_GUN_CHOICE_TYPE gArmyItemChoices[SOLDIER_GUN_CHOICE_SELECTIONS][MAX_ void MoveOneMilitiaEquipmentSet(INT16 sSourceX, INT16 sSourceY, INT16 sTargetX, INT16 sTargetY, INT8 bSoldierClass); // move a number of militia equipment sets between sectors -void MoveMilitiaEquipment(INT16 sSourceX, INT16 sSourceY, INT16 sTargetX, INT16 sTargetY, UINT8 usElites, UINT8 usRegulars, UINT8 usGreens); +void MoveMilitiaEquipment(INT16 sSourceX, INT16 sSourceY, INT16 sTargetX, INT16 sTargetY, UINT16 usElites, UINT16 usRegulars, UINT16 usGreens); // take militia items from sector void TakeMilitiaEquipmentfromSector( INT16 sMapX, INT16 sMapY, INT8 sMapZ, SOLDIERCREATE_STRUCT *pp, INT8 bSoldierClass ); -#endif \ No newline at end of file +#endif diff --git a/Tactical/Militia Control.cpp b/Tactical/Militia Control.cpp index 715db535..e5fad2d8 100644 --- a/Tactical/Militia Control.cpp +++ b/Tactical/Militia Control.cpp @@ -199,7 +199,7 @@ void PrepareMilitiaForTactical( BOOLEAN fPrepareAll) { SECTORINFO *pSector; INT32 x; - UINT8 ubGreen, ubRegs, ubElites; + UINT16 ubGreen, ubRegs, ubElites; if( gbWorldSectorZ > 0 ) return; diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index 1b155c8d..84fbb739 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -994,7 +994,7 @@ BOOLEAN ExecuteOverhead( ) // check if bonus militia join us if (checkBonusMilitia == TRUE && gGameExternalOptions.fRebelCommandEnabled && gubPBSectorZ == 0) { - UINT8 bonusGreenMilitia = 0, bonusRegularMilitia = 0, bonusEliteMilitia = 0; + UINT16 bonusGreenMilitia = 0, bonusRegularMilitia = 0, bonusEliteMilitia = 0; RebelCommand::GetBonusMilitia(gubPBSectorX, gubPBSectorY, bonusGreenMilitia, bonusRegularMilitia, bonusEliteMilitia, TRUE); checkBonusMilitia = FALSE; } diff --git a/Tactical/Soldier Init List.cpp b/Tactical/Soldier Init List.cpp index d4ec5fe7..3db1f288 100644 --- a/Tactical/Soldier Init List.cpp +++ b/Tactical/Soldier Init List.cpp @@ -2109,12 +2109,12 @@ void AddSoldierInitListCreatures( BOOLEAN fQueen, UINT16 ubNumLarvae, UINT16 ubN } } -void AddSoldierInitListOtherCreatures( UINT8 usNum ) +void AddSoldierInitListOtherCreatures( UINT16 usNum ) { SOLDIERINITNODE *curr; - UINT8 ubFreeSlots; + UINT16 ubFreeSlots; BOOLEAN fDoPlacement; - UINT8 ubNumCreatures = usNum; + UINT16 ubNumCreatures = usNum; DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String( "AddSoldierInitListBloodcats" ) ); @@ -2465,7 +2465,7 @@ void AddSoldierInitListBloodcats() else { //We don't yet know the number of bloodcat placements in this sector so //count them now, and permanently record it. - INT8 bBloodCatPlacements = 0; + INT16 bBloodCatPlacements = 0; curr = gSoldierInitHead; while( curr ) { @@ -2513,11 +2513,11 @@ void AddSoldierInitListBloodcats() } if( pSector->bBloodCats > 0 ) { //Add them to the world now... - UINT8 ubNumAdded = 0; - UINT8 ubMaxNum = (UINT8)pSector->bBloodCats; + UINT16 ubNumAdded = 0; + UINT16 ubMaxNum = (UINT16)pSector->bBloodCats; SOLDIERINITNODE *mark; - UINT8 ubSlotsToFill; - UINT8 ubSlotsAvailable; + UINT16 ubSlotsToFill; + UINT16 ubSlotsAvailable; SOLDIERINITNODE *curr; //Sort the list in the following manner: @@ -2983,12 +2983,12 @@ void StripEnemyDetailedPlacementsIfSectorWasPlayerLiberated() //#define CENTRAL_GRIDNO 13202 //#define CENTRAL_RADIUS 30 -void AddSoldierInitListMilitiaOnEdge( UINT8 ubStrategicInsertionCode, UINT8 ubNumGreen, UINT8 ubNumReg, UINT8 ubNumElites ) +void AddSoldierInitListMilitiaOnEdge( UINT8 ubStrategicInsertionCode, UINT16 ubNumGreen, UINT16 ubNumReg, UINT16 ubNumElites ) { SOLDIERTYPE *pSoldier; MAPEDGEPOINTINFO MapEdgepointInfo; - UINT8 ubCurrSlot; - UINT8 ubTotalSoldiers; + UINT16 ubCurrSlot; + UINT16 ubTotalSoldiers; UINT8 bDesiredDirection=0; ubTotalSoldiers = ubNumGreen + ubNumReg + ubNumElites; @@ -3073,7 +3073,7 @@ void AddSoldierInitListMilitiaOnEdge( UINT8 ubStrategicInsertionCode, UINT8 ubNu } UpdateMercInSector( pSoldier, gWorldSectorX, gWorldSectorY, 0 ); } - else if( ubNumReg && (UINT8)Random( ubTotalSoldiers ) < (UINT8)(ubNumElites + ubNumReg) ) + else if( ubNumReg && (UINT16)Random( ubTotalSoldiers ) < (ubNumElites + ubNumReg) ) { ubNumReg--; ubTotalSoldiers--; @@ -3113,7 +3113,7 @@ void AddSoldierInitListMilitiaOnEdge( UINT8 ubStrategicInsertionCode, UINT8 ubNu } UpdateMercInSector( pSoldier, gWorldSectorX, gWorldSectorY, 0 ); } - else if( ubNumGreen && (UINT8)Random( ubTotalSoldiers ) < (UINT8)(ubNumElites + ubNumReg + ubNumGreen) ) + else if( ubNumGreen && (UINT16)Random( ubTotalSoldiers ) < (UINT16)(ubNumElites + ubNumReg + ubNumGreen) ) { ubNumGreen--; ubTotalSoldiers--; @@ -3219,7 +3219,7 @@ void SectorAddAssassins( INT16 sMapX, INT16 sMapY, INT16 sMapZ ) return; // now count militia, and which type (green, regular, elite) is most numerous - that will be the best type to blend in - UINT8 militiacnt = MilitiaInSectorOfRank( sMapX, sMapY, GREEN_MILITIA ); + UINT16 militiacnt = MilitiaInSectorOfRank( sMapX, sMapY, GREEN_MILITIA ); UINT8 militiadisguise = GREEN_MILITIA; if ( MilitiaInSectorOfRank( sMapX, sMapY, REGULAR_MILITIA ) > militiacnt ) { @@ -3290,7 +3290,7 @@ void SectorAddPrisonersofWar( INT16 sMapX, INT16 sMapY, INT16 sMapZ ) } // we can't spawn if all civilian slots are already taken (we leave a bit of reserve for more important civs) - UINT8 maxcivs = max(0, gGameExternalOptions.ubGameMaximumNumberOfCivilians - 3); + UINT16 maxcivs = max(0, gGameExternalOptions.ubGameMaximumNumberOfCivilians - 3); for (UINT16 i = numberofpows; i < numprisoners; ++i) { diff --git a/Tactical/Soldier Init List.h b/Tactical/Soldier Init List.h index 0eb2f2ef..4774bd97 100644 --- a/Tactical/Soldier Init List.h +++ b/Tactical/Soldier Init List.h @@ -44,9 +44,9 @@ void AddSoldierInitListEnemyDefenceSoldiers( UINT16 ubTotalAdmin, UINT16 ubTotal void AddSoldierInitListCreatures( BOOLEAN fQueen, UINT16 ubNumLarvae, UINT16 ubNumInfants, UINT16 ubNumYoungMales, UINT16 ubNumYoungFemales, UINT16 ubNumAdultMales, UINT16 ubNumAdultFemales ); -void AddSoldierInitListOtherCreatures( UINT8 usNum ); +void AddSoldierInitListOtherCreatures( UINT16 usNum ); void AddSoldierInitListMilitia( UINT16 ubNumGreen, UINT16 ubNumReg, UINT16 ubNumElites ); -void AddSoldierInitListMilitiaOnEdge( UINT8 ubStrategicInsertionCode, UINT8 ubNumGreen, UINT8 ubNumReg, UINT8 ubNumElites ); +void AddSoldierInitListMilitiaOnEdge( UINT8 ubStrategicInsertionCode, UINT16 ubNumGreen, UINT16 ubNumReg, UINT16 ubNumElites ); void AddSoldierInitListBloodcats(); From 6c33009fab63e010b6bd309dbd84fd9b31748875 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 11 Nov 2024 00:14:51 +0200 Subject: [PATCH 019/192] Remove bLastKnownEnemies from SECTORINFO As per the old comment, even though the field value is updated partially according to whether there are known enemies present or not, it's not used for anything. --- Strategic/Auto Resolve.cpp | 2 -- Strategic/Campaign Types.h | 3 --- Strategic/PreBattle Interface.cpp | 4 ---- Strategic/Queen Command.cpp | 17 ----------------- Strategic/Strategic Movement.cpp | 23 ----------------------- Tactical/Overhead.cpp | 5 ----- 6 files changed, 54 deletions(-) diff --git a/Strategic/Auto Resolve.cpp b/Strategic/Auto Resolve.cpp index 5a1cb23a..2d833ef6 100644 --- a/Strategic/Auto Resolve.cpp +++ b/Strategic/Auto Resolve.cpp @@ -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 ) { @@ -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]; diff --git a/Strategic/Campaign Types.h b/Strategic/Campaign Types.h index f5b6d996..2c490fcb 100644 --- a/Strategic/Campaign Types.h +++ b/Strategic/Campaign Types.h @@ -500,9 +500,6 @@ typedef struct SECTORINFO UINT16 ubNumCreatures; //only set when immediately before ground attack made! UINT16 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 - UINT32 ubDayOfLastCreatureAttack; UINT32 uiFacilitiesFlags; // the flags for various facilities diff --git a/Strategic/PreBattle Interface.cpp b/Strategic/PreBattle Interface.cpp index effe444f..36fd826a 100644 --- a/Strategic/PreBattle Interface.cpp +++ b/Strategic/PreBattle Interface.cpp @@ -407,8 +407,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 ) @@ -1547,14 +1545,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; diff --git a/Strategic/Queen Command.cpp b/Strategic/Queen Command.cpp index 58452a63..23bddfc8 100644 --- a/Strategic/Queen Command.cpp +++ b/Strategic/Queen Command.cpp @@ -1190,7 +1190,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"); @@ -1737,22 +1736,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! diff --git a/Strategic/Strategic Movement.cpp b/Strategic/Strategic Movement.cpp index 588f91c1..323f9100 100644 --- a/Strategic/Strategic Movement.cpp +++ b/Strategic/Strategic Movement.cpp @@ -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) { @@ -3769,8 +3764,6 @@ INT32 GetTravelTimeForFootTeam( UINT8 ubSector, UINT8 ubDirection ) void HandleArrivalOfReinforcements( GROUP *pGroup ) { SOLDIERTYPE *pSoldier; - SECTORINFO *pSector; - INT32 iNumEnemiesInSector; INT32 cnt; if ( pGroup->usGroupTeam == OUR_TEAM ) @@ -3834,22 +3827,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 ) diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index 84fbb739..5aa32012 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -7520,11 +7520,6 @@ BOOLEAN CheckForEndOfBattle( BOOLEAN fAnEnemyRetreated ) if ( fBattleLost || fBattleWon ) { - if( !gbWorldSectorZ ) - { - SectorInfo[SECTOR( gWorldSectorX, gWorldSectorY )].bLastKnownEnemies = NumNonPlayerTeamMembersInSector( gWorldSectorX, gWorldSectorY, ENEMY_TEAM ); - } - // Flugente: note number of wounded for campaign stats UpdateWoundedFromSectorInfo( gWorldSectorX, gWorldSectorY, gbWorldSectorZ ); } From 3c2592881ff365756b8c673e52ec1ec1f5748091 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 11 Nov 2024 11:15:36 +0200 Subject: [PATCH 020/192] Fix ShadeMapElements function declaration --- Strategic/Map Screen Interface Map.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Strategic/Map Screen Interface Map.cpp b/Strategic/Map Screen Interface Map.cpp index 8fcb5381..31c577e9 100644 --- a/Strategic/Map Screen Interface Map.cpp +++ b/Strategic/Map Screen Interface Map.cpp @@ -522,7 +522,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 ); From d6370b7463f52a364a62495d6c41ca38b34574f0 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 13 Nov 2024 01:21:55 +0200 Subject: [PATCH 021/192] Fix invisible cows and bloodcats --- Tactical/Animation Data.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tactical/Animation Data.cpp b/Tactical/Animation Data.cpp index 7cd94389..0a582d63 100644 --- a/Tactical/Animation Data.cpp +++ b/Tactical/Animation Data.cpp @@ -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 ) { From aad6ed8297b41cdbd623dda7b1bf46f1ade1e05c Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 13 Nov 2024 01:29:36 +0200 Subject: [PATCH 022/192] Implemented SoldierID type to replace SOLDIERTYPE->ubID Goal is to convert all use of SOLDIERTYPE->ubID and any other ID fields that reference the same ID to a safer type than UINT16. Same with any function that's supposed to take ubID --- Tactical/Overhead Types.h | 72 +++++++++++++++++++++++++++++++++++++- Tactical/Soldier Control.h | 2 +- 2 files changed, 72 insertions(+), 2 deletions(-) diff --git a/Tactical/Overhead Types.h b/Tactical/Overhead Types.h index 2ca0d5db..a8d45707 100644 --- a/Tactical/Overhead Types.h +++ b/Tactical/Overhead Types.h @@ -32,7 +32,7 @@ //TACTICAL OVERHEAD STUFF //#define NO_SOLDIER TOTAL_SOLDIERS // SAME AS NOBODY //#define NOBODY NO_SOLDIER -#define NOBODY TOTAL_SOLDIERS +//#define NOBODY TOTAL_SOLDIERS @@ -375,4 +375,74 @@ typedef struct // strcmp returns 0 if true! #define COMPARE_PALETTEREP_ID( a, b ) ( strcmp( a, b ) ? FALSE : TRUE ) + +typedef struct SoldierID +{ + UINT16 i; + + // Implicit conversion and constructor to provide compatibility with unchanged code + // TODO: Remove once SoldierID is used everywhere and these are no longer needed + inline operator UINT16() const { return i; } + SoldierID(const UINT16 val = 0) + : i(val) + {} +} SoldierID; + +//inline bool operator==(const SoldierID lhs, const SoldierID rhs) { return lhs.i == rhs.i; } +//inline bool operator!=(const SoldierID lhs, const SoldierID rhs) { return lhs.i != rhs.i; } + +inline bool operator<(const SoldierID lhs, const SoldierID rhs) { return lhs.i < rhs.i; } +inline bool operator<(const SoldierID lhs, const int rhs) { return lhs.i < rhs; } +inline bool operator<(const int lhs, const SoldierID rhs) { return lhs < rhs.i; } +inline bool operator<(const unsigned int lhs, const SoldierID rhs) { return lhs < rhs.i; } +inline bool operator<(const UINT16 lhs, const SoldierID rhs) { return lhs < rhs.i; } + +inline bool operator>(const SoldierID lhs, const SoldierID rhs) { return lhs.i > rhs.i; } +inline bool operator>(const SoldierID lhs, const int rhs) { return lhs.i > rhs; } +inline bool operator>(const int lhs, const SoldierID rhs) { return lhs > rhs.i; } +inline bool operator>(const UINT16 lhs, const SoldierID rhs) { return lhs > rhs.i; } + +inline bool operator<=(const SoldierID lhs, const SoldierID rhs) { return lhs.i <= rhs.i; } +inline bool operator<=(const SoldierID lhs, const int rhs) { return lhs.i <= rhs; } +inline bool operator<=(const SoldierID lhs, const UINT16 rhs) { return lhs.i <= rhs; } +inline bool operator<=(const int lhs, const SoldierID rhs) { return lhs <= rhs.i; } +inline bool operator<=(const UINT32 lhs, const SoldierID rhs) { return lhs <= rhs.i; } +inline bool operator<=(const UINT16 lhs, const SoldierID rhs) { return lhs <= rhs.i; } +inline bool operator<=(const INT16 lhs, const SoldierID rhs) { return lhs <= rhs.i; } + +inline bool operator>=(const SoldierID lhs, const SoldierID rhs) { return lhs.i >= rhs.i; } +inline bool operator>=(const SoldierID lhs, const int rhs) { return lhs.i >= rhs; } +inline bool operator>=(const SoldierID lhs, const UINT16 rhs) { return lhs.i >= rhs; } +inline bool operator>=(const int lhs, const SoldierID rhs) { return lhs >= rhs.i; } +inline bool operator>=(const unsigned int lhs, const SoldierID rhs) { return lhs >= rhs.i; } +inline bool operator>=(const UINT16 lhs, const SoldierID rhs) { return lhs >= rhs.i; } + +inline SoldierID operator-(const SoldierID lhs, const SoldierID rhs) { return SoldierID{ static_cast(lhs.i - rhs.i) }; } +inline SoldierID operator-(const SoldierID lhs, const int rhs) { return SoldierID{ static_cast(lhs.i - rhs) }; } +inline SoldierID operator-(const SoldierID lhs, const unsigned int rhs) { return SoldierID{ static_cast(lhs.i - rhs) }; } +inline SoldierID operator-(const SoldierID lhs, const UINT16 rhs) { return SoldierID{ static_cast(lhs.i - rhs) }; } +inline SoldierID operator-(const int lhs, const SoldierID rhs) { return SoldierID{ static_cast(lhs - rhs.i) }; } +inline SoldierID operator-(const unsigned int lhs, const SoldierID rhs) { return SoldierID{ static_cast(lhs - rhs.i) }; } + +inline SoldierID operator+(const SoldierID lhs, const SoldierID rhs) { return SoldierID{ static_cast(lhs.i + rhs.i) }; } +inline SoldierID operator+(const SoldierID lhs, const int rhs) { return SoldierID{ static_cast(lhs.i + rhs) }; } +inline SoldierID operator+(const SoldierID lhs, const unsigned int rhs) { return SoldierID{ static_cast(lhs.i + rhs) }; } +inline SoldierID operator+(const SoldierID lhs, const UINT16 rhs) { return SoldierID{ static_cast(lhs.i + rhs) }; } +inline SoldierID operator+(const unsigned int lhs, const SoldierID rhs) { return SoldierID{ static_cast(lhs + rhs.i) }; } +inline SoldierID operator+(const INT16 lhs, const SoldierID rhs) { return SoldierID{ static_cast(lhs + rhs.i) }; } + +inline SoldierID operator--(SoldierID lhs) +{ + lhs.i -= 1; + return lhs; +} + +inline SoldierID operator++(SoldierID lhs) +{ + lhs.i += 1; + return lhs; +} + +//TODO: Change this to constexpr after SoldierID is ready and the user defined constructor from uint16 is not needed anymore. +inline const SoldierID NOBODY{ TOTAL_SOLDIERS }; #endif diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index bfc9e6a6..81dc88bc 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -1103,7 +1103,7 @@ public: // properly until it is all fixed and the files updated. public: // ID - UINT16 ubID; + SoldierID ubID; CHAR16 name[ 10 ]; INT16 GetMaxDistanceVisible(INT32 sGridNo = -1, INT8 bLevel = -1, int calcAsType = -1); From 4d740055daea2d97e2832bbfc97756b964aeedff Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 13 Nov 2024 01:33:32 +0200 Subject: [PATCH 023/192] Provide access function to MenPtrs, MercPtrs & MercSlots All raw array accesses should be done with these instead. --- Tactical/Overhead.cpp | 20 ++++++++++++++++++++ Tactical/Overhead.h | 3 +++ 2 files changed, 23 insertions(+) diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index 5aa32012..05cbe6b3 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -274,6 +274,26 @@ UINT32 guiNumMercSlots = 0; SOLDIERTYPE* AwaySlots[ TOTAL_SOLDIERS ]; UINT32 guiNumAwaySlots = 0; +SOLDIERTYPE* SoldierFromID(const SoldierID id) +{ + if (id >= TOTAL_SOLDIERS) + { + return nullptr; + } + + return &Menptr[id.i]; +} + +SOLDIERTYPE* SoldierFromID(const SoldierID id, SOLDIERTYPE* Array[TOTAL_SOLDIERS]) +{ + if (id >= TOTAL_SOLDIERS) + { + return nullptr; + } + + return Array[id.i]; +} + // DEF: changed to have client wait for gPlayerNum assigned from host UINT8 gbPlayerNum = 0; diff --git a/Tactical/Overhead.h b/Tactical/Overhead.h index b3378957..9f123297 100644 --- a/Tactical/Overhead.h +++ b/Tactical/Overhead.h @@ -433,5 +433,8 @@ BOOLEAN IsCivFactionMemberAliveInSector( UINT8 usCivilianGroup ); BOOLEAN IsFreeSlotAvailable( int aTeam ); void AttemptToCapturePlayerSoldiers(); + +SOLDIERTYPE* SoldierFromID(const SoldierID id); +SOLDIERTYPE* SoldierFromID(const SoldierID id, SOLDIERTYPE* Array[TOTAL_SOLDIERS]); #endif From f5b14476462085539eadc30bb708ff23250f047c Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 13 Nov 2024 22:12:37 +0200 Subject: [PATCH 024/192] Move MercSlots zeroing to same loop where MercPtrs are set One less for loop that way --- Tactical/Overhead.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index 05cbe6b3..d8a47380 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -674,13 +674,15 @@ void ShutdownTacticalEngine( ) BOOLEAN InitOverhead( ) { UINT32 cnt; - UINT16 cnt2; + UINT16 cnt2; // Set pointers list for( cnt = 0; cnt < TOTAL_SOLDIERS; cnt++ ) { MercPtrs[ cnt ] = &Menptr[ cnt ]; MercPtrs[ cnt ]->bActive = FALSE; + // Zero out merc slots! + MercSlots[cnt] = NULL; } memset( &gTacticalStatus, 0, sizeof( TacticalStatusType ) ); UINT8 maxteams; @@ -774,11 +776,6 @@ BOOLEAN InitOverhead( ) } } - // Zero out merc slots! - for ( cnt = 0; cnt < TOTAL_SOLDIERS; cnt++ ) - { - MercSlots[ cnt ] = NULL; - } // Set other tactical flags gTacticalStatus.uiFlags = TURNBASED | TRANSLUCENCY_TYPE; From 0103a871cc3438fe490ce25362bcfe815cdbadfd Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Thu, 14 Nov 2024 00:43:48 +0200 Subject: [PATCH 025/192] Operator overloads for accessing SOLDIERTYPE* through SoldierID --- Tactical/Overhead Types.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Tactical/Overhead Types.h b/Tactical/Overhead Types.h index a8d45707..4f22eed1 100644 --- a/Tactical/Overhead Types.h +++ b/Tactical/Overhead Types.h @@ -376,6 +376,9 @@ typedef struct #define COMPARE_PALETTEREP_ID( a, b ) ( strcmp( a, b ) ? FALSE : TRUE ) +struct SOLDIERTYPE; +extern SOLDIERTYPE *MercPtrs[TOTAL_SOLDIERS]; + typedef struct SoldierID { UINT16 i; @@ -386,6 +389,9 @@ typedef struct SoldierID SoldierID(const UINT16 val = 0) : i(val) {} + + SOLDIERTYPE* operator->() { return MercPtrs[i]; } + const SOLDIERTYPE* operator->() const { return MercPtrs[i]; } } SoldierID; //inline bool operator==(const SoldierID lhs, const SoldierID rhs) { return lhs.i == rhs.i; } From 1345d925217f68c082e498478d1c8b3dd7841a86 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Thu, 14 Nov 2024 00:45:50 +0200 Subject: [PATCH 026/192] Convert Soldier Find.cpp to SoldierID --- Strategic/Assignments.cpp | 2 +- Tactical/Handle UI.cpp | 12 ++--- Tactical/Handle UI.h | 16 +++---- Tactical/Overhead.cpp | 4 +- Tactical/Overhead.h | 2 +- Tactical/Points.cpp | 4 +- Tactical/Real Time Input.cpp | 2 +- Tactical/Soldier Ani.cpp | 2 +- Tactical/Soldier Control.cpp | 2 +- Tactical/Soldier Find.cpp | 91 +++++++++++++++++------------------- Tactical/Soldier Find.h | 12 ++--- Tactical/opplist.cpp | 46 +++++++++--------- 12 files changed, 95 insertions(+), 100 deletions(-) diff --git a/Strategic/Assignments.cpp b/Strategic/Assignments.cpp index f1711ed8..75de1b8e 100644 --- a/Strategic/Assignments.cpp +++ b/Strategic/Assignments.cpp @@ -292,7 +292,7 @@ extern BOOLEAN fInMapMode; INT8 gbTrainingMode = -1; // who is the highlighted guy -extern UINT16 gusUIFullTargetID; +extern SoldierID gusUIFullTargetID; // showing town info? extern BOOLEAN fShowTownInfo; diff --git a/Tactical/Handle UI.cpp b/Tactical/Handle UI.cpp index 92e9e6d4..f72f4848 100644 --- a/Tactical/Handle UI.cpp +++ b/Tactical/Handle UI.cpp @@ -272,12 +272,12 @@ extern BOOLEAN gfGetNewPathThroughPeople; extern BOOLEAN gfIgnoreOnSelectedGuy; extern BOOLEAN gfInOpenDoorMenu; -BOOLEAN gfUIFullTargetFound; -UINT32 guiUIFullTargetFlags; -UINT16 gusUIFullTargetID; -BOOLEAN gfUISelectiveTargetFound; -UINT32 guiUISelectiveTargetFlags; -UINT16 gusUISelectiveTargetID; +BOOLEAN gfUIFullTargetFound; +UINT32 guiUIFullTargetFlags; +SoldierID gusUIFullTargetID; +BOOLEAN gfUISelectiveTargetFound; +UINT32 guiUISelectiveTargetFlags; +SoldierID gusUISelectiveTargetID; SOLDIERTYPE *gpRequesterMerc = NULL; SOLDIERTYPE *gpRequesterTargetMerc = NULL; diff --git a/Tactical/Handle UI.h b/Tactical/Handle UI.h index 14b15f1e..5109cc85 100644 --- a/Tactical/Handle UI.h +++ b/Tactical/Handle UI.h @@ -268,16 +268,16 @@ extern BOOLEAN gfUIHandlePhysicsTrajectory; // GLOBALS FOR FAST LOOKUP FOR FINDING MERCS FROM THE MOUSE -extern BOOLEAN gfUISelectiveTargetFound; -extern UINT16 gusUISelectiveTargetID; -extern UINT32 guiUISelectiveTargetFlags; +extern BOOLEAN gfUISelectiveTargetFound; +extern SoldierID gusUISelectiveTargetID; +extern UINT32 guiUISelectiveTargetFlags; -extern BOOLEAN gfUIFullTargetFound; -extern UINT16 gusUIFullTargetID; -extern UINT32 guiUIFullTargetFlags; +extern BOOLEAN gfUIFullTargetFound; +extern SoldierID gusUIFullTargetID; +extern UINT32 guiUIFullTargetFlags; extern BOOLEAN gfUIConfirmExitArrows; -extern INT32 gsJumpOverGridNo; +extern INT32 gsJumpOverGridNo; extern UINT32 HandleTacticalUI(void); extern UINT32 UIHandleEndTurn( UI_EVENT *pUIEvent ); @@ -382,4 +382,4 @@ void GetGridNoScreenXY( INT32 sGridNo, INT16 *pScreenX, INT16 *pScreenY ); //Legion by Jazz void GetMercOknoDirection( UINT8 ubSoldierID, BOOLEAN *pfGoDown, BOOLEAN *pfGoUp ); -#endif \ No newline at end of file +#endif diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index d8a47380..33f5dd89 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -5482,7 +5482,7 @@ INT32 FindAdjacentGridEx( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 *pubDirect INT32 sClosest = -1, sSpot; INT32 sCloseGridNo = NOWHERE; UINT32 uiMercFlags; - UINT16 usSoldierIndex; + SoldierID usSoldierIndex; UINT8 ubDir; STRUCTURE *pDoor; UINT8 ubWallOrientation; @@ -5845,7 +5845,7 @@ INT32 FindNextToAdjacentGridEx( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 *pub INT32 sClosest = -1, sSpot, sSpot2; INT32 sCloseGridNo = NOWHERE; UINT32 uiMercFlags; - UINT16 usSoldierIndex; + SoldierID usSoldierIndex; UINT8 ubDir; STRUCTURE *pDoor; UINT8 ubWallOrientation; diff --git a/Tactical/Overhead.h b/Tactical/Overhead.h index 9f123297..f75aa410 100644 --- a/Tactical/Overhead.h +++ b/Tactical/Overhead.h @@ -260,7 +260,7 @@ INT32 FindNextToAdjacentGridEx( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 *pub void SelectNextAvailSoldier( SOLDIERTYPE *pSoldier ); BOOLEAN TeamMemberNear(INT8 bTeam, INT32 sGridNo, INT32 iRange); -BOOLEAN IsValidTargetMerc( UINT16 ubSoldierID ); +BOOLEAN IsValidTargetMerc( SoldierID ubSoldierID ); // FUNCTIONS FOR MANIPULATING MERC SLOTS - A LIST OF ALL ACTIVE MERCS INT32 GetFreeMercSlot( ); diff --git a/Tactical/Points.cpp b/Tactical/Points.cpp index ee07e3f0..2ca80a77 100644 --- a/Tactical/Points.cpp +++ b/Tactical/Points.cpp @@ -2006,7 +2006,7 @@ void GetAPChargeForShootOrStabWRTGunRaises( SOLDIERTYPE *pSoldier, INT32 sGridNo { UINT8 ubDirection; UINT32 uiMercFlags; - UINT16 usTargID; + SoldierID usTargID; BOOLEAN fAddingTurningCost = FALSE; BOOLEAN fAddingRaiseGunCost = FALSE; @@ -2189,7 +2189,7 @@ UINT16 CalculateRaiseGunCost(SOLDIERTYPE *pSoldier, BOOLEAN fAddingRaiseGunCost, INT16 MinAPsToShootOrStab(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 bAimTime, UINT8 ubAddTurningCost, UINT8 ubForceRaiseGunCost ) { UINT32 uiMercFlags; - UINT16 usTargID; + SoldierID usTargID; INT16 bFullAPs; INT16 bAimSkill; INT16 bAPCost = APBPConstants[AP_MIN_AIM_ATTACK]; diff --git a/Tactical/Real Time Input.cpp b/Tactical/Real Time Input.cpp index b8c21c52..81b606ba 100644 --- a/Tactical/Real Time Input.cpp +++ b/Tactical/Real Time Input.cpp @@ -180,7 +180,7 @@ void GetRTMouseButtonInput( UINT32 *puiNewEvent ) void QueryRTLeftButton( UINT32 *puiNewEvent ) { - UINT16 usSoldierIndex; + SoldierID usSoldierIndex; SOLDIERTYPE *pSoldier; SOLDIERTYPE *pVehicle; UINT32 uiMercFlags; diff --git a/Tactical/Soldier Ani.cpp b/Tactical/Soldier Ani.cpp index 9d8c420a..49bcea84 100644 --- a/Tactical/Soldier Ani.cpp +++ b/Tactical/Soldier Ani.cpp @@ -2046,7 +2046,7 @@ BOOLEAN AdjustToNextAnimationFrame( SOLDIERTYPE *pSoldier ) { SOLDIERTYPE *pTSoldier; UINT32 uiMercFlags; - UINT16 usSoldierIndex; + SoldierID usSoldierIndex; if ( FindSoldier( pSoldier->sTargetGridNo, &usSoldierIndex, &uiMercFlags, FIND_SOLDIER_GRIDNO ) ) { diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index 7963e9e6..2b256bb3 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -13269,7 +13269,7 @@ void SOLDIERTYPE::EVENT_SoldierEnterVehicle( INT32 sGridNo, UINT8 ubDirection, U { SOLDIERTYPE *pTSoldier; UINT32 uiMercFlags; - UINT16 usSoldierIndex; + SoldierID usSoldierIndex; if ( FindSoldier( sGridNo, &usSoldierIndex, &uiMercFlags, FIND_SOLDIER_GRIDNO ) ) { diff --git a/Tactical/Soldier Find.cpp b/Tactical/Soldier Find.cpp index 72941d04..718cf8ee 100644 --- a/Tactical/Soldier Find.cpp +++ b/Tactical/Soldier Find.cpp @@ -46,11 +46,8 @@ BOOLEAN IsGridNoInScreenRect( INT32 sGridNo, SGPRect *pRect ); BOOLEAN IsPointInScreenRect( INT16 sXPos, INT16 sYPos, SGPRect *pRect ); void GetSoldierScreenRect( SOLDIERTYPE *pSoldier, SGPRect *pRect ); -// This value is used to keep a small static array of uBID's which are stacked -#define MAX_STACKED_MERCS 10 - -UINT32 gScrollSlideInertiaDirection[ NUM_WORLD_DIRECTIONS ] = +UINT32 gScrollSlideInertiaDirection[ NUM_WORLD_DIRECTIONS ] = { 3, 0, @@ -62,25 +59,29 @@ UINT32 gScrollSlideInertiaDirection[ NUM_WORLD_DIRECTIONS ] = 3, }; + +// This value is used to keep a small static array of uBID's which are stacked +#define MAX_STACKED_MERCS 10 + // Struct used for cycling through multiple mercs per mouse position typedef struct { INT8 bNum; - UINT16 ubIDs[ MAX_STACKED_MERCS ]; + SoldierID ubIDs[ MAX_STACKED_MERCS ]; INT8 bCur; BOOLEAN fUseGridNo; INT32 sUseGridNoGridNo; } SOLDIER_STACK_TYPE; -SOLDIER_STACK_TYPE gSoldierStack; -BOOLEAN gfHandleStack = FALSE; +SOLDIER_STACK_TYPE gSoldierStack; +BOOLEAN gfHandleStack = FALSE; -extern BOOLEAN gUIActionModeChangeDueToMouseOver; -extern UINT32 guiUITargetSoldierId; +extern BOOLEAN gUIActionModeChangeDueToMouseOver; +extern UINT32 guiUITargetSoldierId; -BOOLEAN FindSoldierFromMouse( UINT16 *pusSoldierIndex, UINT32 *pMercFlags ) +BOOLEAN FindSoldierFromMouse( SoldierID *pusSoldierIndex, UINT32 *pMercFlags ) { INT32 usMapPos; @@ -97,7 +98,7 @@ BOOLEAN FindSoldierFromMouse( UINT16 *pusSoldierIndex, UINT32 *pMercFlags ) return( FALSE ); } -BOOLEAN SelectiveFindSoldierFromMouse( UINT16 *pusSoldierIndex, UINT32 *pMercFlags ) +BOOLEAN SelectiveFindSoldierFromMouse( SoldierID *pusSoldierIndex, UINT32 *pMercFlags ) { INT32 usMapPos; @@ -115,7 +116,7 @@ BOOLEAN SelectiveFindSoldierFromMouse( UINT16 *pusSoldierIndex, UINT32 *pMercFla } -UINT32 GetSoldierFindFlags( UINT16 ubID ) +UINT32 GetSoldierFindFlags( const SoldierID ubID ) { UINT32 MercFlags = 0; SOLDIERTYPE *pSoldier; @@ -123,7 +124,7 @@ UINT32 GetSoldierFindFlags( UINT16 ubID ) // Get pSoldier! pSoldier = MercPtrs[ ubID ]; - // FInd out and set flags + // Find out and set flags if ( ubID == gusSelectedSoldier ) { MercFlags |= SELECTED_MERC; @@ -136,12 +137,12 @@ UINT32 GetSoldierFindFlags( UINT16 ubID ) } else { - // It's our own merc - MercFlags |= OWNED_MERC; + // It's our own merc + MercFlags |= OWNED_MERC; if ( pSoldier->bAssignment < ON_DUTY ) { - MercFlags |= ONDUTY_MERC; + MercFlags |= ONDUTY_MERC; } } } @@ -191,20 +192,20 @@ extern BOOLEAN CheckVideoObjectScreenCoordinateInData( HVOBJECT hSrcVObject, UIN // THIS FUNCTION IS CALLED FAIRLY REGULARLY -BOOLEAN FindSoldier( INT32 sGridNo, UINT16 *pusSoldierIndex, UINT32 *pMercFlags, UINT32 uiFlags ) +BOOLEAN FindSoldier( INT32 sGridNo, SoldierID *pusSoldierIndex, UINT32 *pMercFlags, UINT32 uiFlags ) { - UINT32 cnt; + UINT32 cnt; SOLDIERTYPE *pSoldier; - SGPRect aRect; - BOOLEAN fSoldierFound = FALSE; - INT16 sXMapPos, sYMapPos, sScreenX, sScreenY; - INT16 sMaxScreenMercY, sHeighestMercScreenY = -32000; - BOOLEAN fDoFull; - UINT16 ubBestMerc = NOBODY; - UINT16 usAnimSurface; - INT32 iMercScreenX, iMercScreenY; - BOOLEAN fInScreenRect = FALSE; - BOOLEAN fInGridNo = FALSE; + SGPRect aRect; + BOOLEAN fSoldierFound = FALSE; + INT16 sXMapPos, sYMapPos, sScreenX, sScreenY; + INT16 sMaxScreenMercY, sHeighestMercScreenY = -32000; + BOOLEAN fDoFull; + SoldierID ubBestMerc = NOBODY; + UINT16 usAnimSurface; + INT32 iMercScreenX, iMercScreenY; + BOOLEAN fInScreenRect = FALSE; + BOOLEAN fInGridNo = FALSE; *pusSoldierIndex = NOBODY; @@ -227,8 +228,8 @@ BOOLEAN FindSoldier( INT32 sGridNo, UINT16 *pusSoldierIndex, UINT32 *pMercFlags, for ( cnt = 0; cnt < guiNumMercSlots; cnt++ ) { pSoldier = MercSlots[ cnt ]; - fInScreenRect = FALSE; - fInGridNo = FALSE; + fInScreenRect = FALSE; + fInGridNo = FALSE; if ( pSoldier != NULL ) { @@ -339,7 +340,7 @@ BOOLEAN FindSoldier( INT32 sGridNo, UINT16 *pusSoldierIndex, UINT32 *pMercFlags, if ( usAnimSurface != INVALID_ANIMATION_SURFACE ) { iMercScreenX = (INT32)( sScreenX - aRect.iLeft ); - iMercScreenY = (INT32)( -1 * ( sScreenY - aRect.iBottom ) ); + iMercScreenY = (INT32)( -1 * ( sScreenY - aRect.iBottom ) ); if ( !CheckVideoObjectScreenCoordinateInData( gAnimSurfaceDatabase[ usAnimSurface ].hVideoObject, pSoldier->usAniFrame, iMercScreenX, iMercScreenY ) ) { @@ -359,7 +360,7 @@ BOOLEAN FindSoldier( INT32 sGridNo, UINT16 *pusSoldierIndex, UINT32 *pMercFlags, { gfHandleStack = TRUE; - // Add this one! + // Add this one! gSoldierStack.ubIDs[ gSoldierStack.bNum ] = pSoldier->ubID; gSoldierStack.bNum++; @@ -430,7 +431,7 @@ BOOLEAN FindSoldier( INT32 sGridNo, UINT16 *pusSoldierIndex, UINT32 *pMercFlags, if ( fSoldierFound && ubBestMerc != NOBODY ) { - *pusSoldierIndex = (UINT16)ubBestMerc; + *pusSoldierIndex = ubBestMerc; (*pMercFlags) = GetSoldierFindFlags( ubBestMerc ); @@ -460,8 +461,8 @@ BOOLEAN FindSoldier( INT32 sGridNo, UINT16 *pusSoldierIndex, UINT32 *pMercFlags, BOOLEAN CycleSoldierFindStack( INT32 usMapPos ) { - UINT16 usSoldierIndex; - UINT32 uiMercFlags; + SoldierID usSoldierIndex; + UINT32 uiMercFlags; // Have we initalized for this yet? if ( !gfHandleStack ) @@ -521,10 +522,9 @@ BOOLEAN CycleSoldierFindStack( INT32 usMapPos ) SOLDIERTYPE * SimpleFindSoldier( INT32 sGridNo, INT8 bLevel ) { - UINT16 ubID; + SoldierID ubID = WhoIsThere2( sGridNo, bLevel ); - ubID = WhoIsThere2( sGridNo, bLevel ); - if ( ubID == NOBODY ) + if ( ubID >= NOBODY ) { return( NULL ); } @@ -534,7 +534,7 @@ SOLDIERTYPE * SimpleFindSoldier( INT32 sGridNo, INT8 bLevel ) } } -BOOLEAN IsValidTargetMerc( UINT16 ubSoldierID ) +BOOLEAN IsValidTargetMerc( SoldierID ubSoldierID ) { SOLDIERTYPE *pSoldier = MercPtrs[ ubSoldierID ]; @@ -785,14 +785,9 @@ BOOLEAN GridNoOnScreen( INT32 sGridNo ) } -BOOLEAN SoldierOnScreen( UINT16 usID ) +BOOLEAN SoldierOnScreen( SoldierID usID ) { - SOLDIERTYPE *pSoldier; - - // Get pointer of soldier - pSoldier = MercPtrs[ usID ]; - - return( GridNoOnScreen( pSoldier->sGridNo ) ); + return( GridNoOnScreen( usID->sGridNo ) ); } @@ -1006,7 +1001,7 @@ BOOLEAN FindRelativeSoldierPosition( SOLDIERTYPE *pSoldier, UINT16 *usFlags, INT } // VERY quickly finds a soldier at gridno , ( that is visible ) -UINT16 QuickFindSoldier( INT32 sGridNo ) +SoldierID QuickFindSoldier( INT32 sGridNo ) { UINT32 cnt; SOLDIERTYPE *pSoldier = NULL; @@ -1020,7 +1015,7 @@ UINT16 QuickFindSoldier( INT32 sGridNo ) { if ( pSoldier->sGridNo == sGridNo && pSoldier->bVisible != -1 ) { - return( (UINT16)cnt ); + return( cnt ); } } diff --git a/Tactical/Soldier Find.h b/Tactical/Soldier Find.h index 6616dfb4..e35fc20a 100644 --- a/Tactical/Soldier Find.h +++ b/Tactical/Soldier Find.h @@ -30,16 +30,16 @@ class SOLDIERTYPE; #define FINDSOLDIERSELECTIVESAMELEVEL( l ) ( ( ( FIND_SOLDIER_SELECTIVE | FIND_SOLDIER_SAMELEVEL ) | ( l << 16 ) ) ) -BOOLEAN FindSoldierFromMouse( UINT16 *pusSoldierIndex, UINT32 *pMercFlags ); -BOOLEAN SelectiveFindSoldierFromMouse( UINT16 *pusSoldierIndex, UINT32 *pMercFlags ); -BOOLEAN FindSoldier( INT32 sGridNo, UINT16 *pusSoldierIndex, UINT32 *pMercFlags , UINT32 uiFlags ); +BOOLEAN FindSoldierFromMouse( SoldierID *pusSoldierIndex, UINT32 *pMercFlags ); +BOOLEAN SelectiveFindSoldierFromMouse( SoldierID *pusSoldierIndex, UINT32 *pMercFlags ); +BOOLEAN FindSoldier( INT32 sGridNo, SoldierID *pusSoldierIndex, UINT32 *pMercFlags , UINT32 uiFlags ); SOLDIERTYPE * SimpleFindSoldier( INT32 sGridNo, INT8 bLevel ); BOOLEAN CycleSoldierFindStack( INT32 usMapPos ); BOOLEAN GridNoOnScreen( INT32 sGridNo ); -BOOLEAN SoldierOnScreen( UINT16 usID ); +BOOLEAN SoldierOnScreen( SoldierID usID ); BOOLEAN SoldierLocationRelativeToScreen( INT32 sGridNo, UINT16 usReasonID, INT8 *pbDirection, UINT32 *puiScrollFlags ); void GetSoldierScreenPos( SOLDIERTYPE *pSoldier, INT16 *psScreenX, INT16 *psScreenY ); void GetSoldierAnimDims( SOLDIERTYPE *pSoldier, INT16 *psHeight, INT16 *psWidth ); @@ -48,9 +48,9 @@ void GetSoldierTRUEScreenPos( SOLDIERTYPE *pSoldier, INT16 *psScreenX, INT16 *ps BOOLEAN IsPointInSoldierBoundingBox( SOLDIERTYPE *pSoldier, INT16 sX, INT16 sY ); BOOLEAN FindRelativeSoldierPosition( SOLDIERTYPE *pSoldier, UINT16 *usFlags, INT16 sX, INT16 sY ); -UINT16 QuickFindSoldier( INT32 sGridNo ); +SoldierID QuickFindSoldier( INT32 sGridNo ); void GetGridNoScreenPos( INT32 sGridNo, UINT8 ubLevel, INT16 *psScreenX, INT16 *psScreenY ); -#endif \ No newline at end of file +#endif diff --git a/Tactical/opplist.cpp b/Tactical/opplist.cpp index 663d2a40..3c68ee3a 100644 --- a/Tactical/opplist.cpp +++ b/Tactical/opplist.cpp @@ -3985,11 +3985,11 @@ extern UINT32 guiNumBackSaves; void DebugSoldierPage1( ) { - SOLDIERTYPE *pSoldier; - UINT16 usSoldierIndex; - UINT32 uiMercFlags; - INT32 usMapPos; - UINT8 ubLine=0; + SOLDIERTYPE *pSoldier; + SoldierID usSoldierIndex; + UINT32 uiMercFlags; + INT32 usMapPos; + UINT8 ubLine=0; if ( FindSoldierFromMouse( &usSoldierIndex, &uiMercFlags ) ) { @@ -4168,13 +4168,13 @@ void DebugSoldierPage1( ) void DebugSoldierPage2( ) { - SOLDIERTYPE *pSoldier; - UINT16 usSoldierIndex; - UINT32 uiMercFlags; - INT32 usMapPos; - TILE_ELEMENT TileElem; - LEVELNODE *pNode; - UINT8 ubLine; + SOLDIERTYPE *pSoldier; + SoldierID usSoldierIndex; + UINT32 uiMercFlags; + INT32 usMapPos; + TILE_ELEMENT TileElem; + LEVELNODE *pNode; + UINT8 ubLine; if ( FindSoldierFromMouse( &usSoldierIndex, &uiMercFlags ) ) { @@ -4442,11 +4442,11 @@ void DebugSoldierPage2( ) void DebugSoldierPage3( ) { - SOLDIERTYPE *pSoldier; - UINT16 usSoldierIndex; - UINT32 uiMercFlags; - INT32 usMapPos; - UINT8 ubLine; + SOLDIERTYPE *pSoldier; + SoldierID usSoldierIndex; + UINT32 uiMercFlags; + INT32 usMapPos; + UINT8 ubLine; if ( FindSoldierFromMouse( &usSoldierIndex, &uiMercFlags ) ) { @@ -4835,12 +4835,12 @@ void WriteQuantityAndAttachments( OBJECTTYPE *pObject, INT32 yp ) void DebugSoldierPage4( ) { - SOLDIERTYPE *pSoldier; - UINT32 uiMercFlags; - CHAR16 szOrders[20]; - CHAR16 szAttitude[20]; - UINT16 usSoldierIndex; - UINT8 ubLine; + SOLDIERTYPE *pSoldier; + UINT32 uiMercFlags; + CHAR16 szOrders[20]; + CHAR16 szAttitude[20]; + SoldierID usSoldierIndex; + UINT8 ubLine; if ( FindSoldierFromMouse( &usSoldierIndex, &uiMercFlags ) ) { From c04cc4cfcc7098f118370226199a58b0aa088240 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Thu, 14 Nov 2024 01:00:05 +0200 Subject: [PATCH 027/192] Update Map Screen Interface.h --- Strategic/Map Screen Interface.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Strategic/Map Screen Interface.h b/Strategic/Map Screen Interface.h index 44adfbc6..7837887f 100644 --- a/Strategic/Map Screen Interface.h +++ b/Strategic/Map Screen Interface.h @@ -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; From 1327d186ed1d5265358b29b0bd42a220bfbac9a2 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Thu, 14 Nov 2024 01:08:38 +0200 Subject: [PATCH 028/192] Use usSolID directly usSolID *is* ubID from Menptr! --- Strategic/mapscreen.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Strategic/mapscreen.cpp b/Strategic/mapscreen.cpp index 2afd246f..6aaf41b5 100644 --- a/Strategic/mapscreen.cpp +++ b/Strategic/mapscreen.cpp @@ -12911,7 +12911,7 @@ void HandleChangeOfInfoChar( void ) if( gCharactersList[ bOldInfoChar ].fValid == TRUE ) { // set face in active - SetAutoFaceInActiveFromSoldier( Menptr[ gCharactersList[ bOldInfoChar ].usSolID ].ubID ); + SetAutoFaceInActiveFromSoldier( gCharactersList[ bOldInfoChar ].usSolID ); } } From 568aa0a0b8bc269cf789c36bcc2a2fdb2d83b078 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 15 Nov 2024 00:04:39 +0200 Subject: [PATCH 029/192] Update Item Types.cpp --- Tactical/Item Types.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tactical/Item Types.cpp b/Tactical/Item Types.cpp index df85bad6..324cde2e 100644 --- a/Tactical/Item Types.cpp +++ b/Tactical/Item Types.cpp @@ -48,9 +48,9 @@ bool checkLBEArrayIntegrity(bool verbose) { ScreenMsg(FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"LBENODE integrity check start: checking soldier items..."); for (int i = 0; i < CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS; i++) { - if (!gCharactersList[i].fValid || gCharactersList[i].usSolID < 0) continue; + if (!gCharactersList[i].fValid || gCharactersList[i].usSolID >= NOBODY) continue; - int id = gCharactersList[i].usSolID; + SoldierID id = gCharactersList[i].usSolID; SOLDIERTYPE soldier = Menptr[id]; if (verbose)ScreenMsg(FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"LBENODE integrity check start: checking soldier items (%s)...", soldier.name); From 6a0d02e9b93f089675a9ca7d7958aff323602eb6 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 15 Nov 2024 01:03:21 +0200 Subject: [PATCH 030/192] Change type from BOOLEAN(!) to SoldierID --- Tactical/Overhead.cpp | 2 +- Tactical/Soldier Ani.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index 33f5dd89..8c413bff 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -6783,7 +6783,7 @@ void SetEnemyPresence( ) } -extern BOOLEAN gfLastMercTalkedAboutKillingID; +extern SoldierID gfLastMercTalkedAboutKillingID; BOOLEAN SoldierHasSeenEnemiesLastFewTurns( SOLDIERTYPE *pTeamSoldier ) { diff --git a/Tactical/Soldier Ani.cpp b/Tactical/Soldier Ani.cpp index 49bcea84..1b86246b 100644 --- a/Tactical/Soldier Ani.cpp +++ b/Tactical/Soldier Ani.cpp @@ -78,7 +78,7 @@ class SOLDIERTYPE; //#define TIME_FOR_RANDOM_ANIM_CHECK 10 #define TIME_FOR_RANDOM_ANIM_CHECK 1 -BOOLEAN gfLastMercTalkedAboutKillingID = NOBODY; +SoldierID gfLastMercTalkedAboutKillingID = NOBODY; extern void AddFuelToVehicle( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pVehicle ); From 735075869ce748e64460cb8d9688d9fab3110ddb Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 15 Nov 2024 01:14:30 +0200 Subject: [PATCH 031/192] Fix incorrect variables ubImprintID uses SOLDIERTYPE->ubProfile, not SOLDIERTYPE->ubID in every other instance of the code. This one's clearly a mistake. --- TacticalAI/FindLocations.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/TacticalAI/FindLocations.cpp b/TacticalAI/FindLocations.cpp index 14574528..1b726e20 100644 --- a/TacticalAI/FindLocations.cpp +++ b/TacticalAI/FindLocations.cpp @@ -1988,7 +1988,7 @@ INT8 SearchForItems( SOLDIERTYPE * pSoldier, INT8 bReason, UINT16 usItem ) if ( pItem->usItemClass == IC_GUN && (*pObj)[0]->data.objectStatus >= MINIMUM_REQUIRED_STATUS ) { // maybe this gun has ammo (adjust for whether it is better than ours!) - if ( (*pObj)[0]->data.gun.bGunAmmoStatus < 0 || (*pObj)[0]->data.gun.ubGunShotsLeft == 0 || (ItemHasFingerPrintID(pObj->usItem) && (*pObj)[0]->data.ubImprintID != NOBODY && (*pObj)[0]->data.ubImprintID != pSoldier->ubID) ) + if ( (*pObj)[0]->data.gun.bGunAmmoStatus < 0 || (*pObj)[0]->data.gun.ubGunShotsLeft == 0 || (ItemHasFingerPrintID(pObj->usItem) && (*pObj)[0]->data.ubImprintID != NO_PROFILE && (*pObj)[0]->data.ubImprintID != pSoldier->ubProfile) ) { iTempValue = 0; } @@ -2029,7 +2029,7 @@ INT8 SearchForItems( SOLDIERTYPE * pSoldier, INT8 bReason, UINT16 usItem ) if (pItem->usItemClass & IC_WEAPON && (*pObj)[0]->data.objectStatus >= MINIMUM_REQUIRED_STATUS ) { DebugAI(AI_MSG_INFO, pSoldier, String("weapon has good status")); - if ( (pItem->usItemClass & IC_GUN) && ((*pObj)[0]->data.gun.bGunAmmoStatus < 0 || (*pObj)[0]->data.gun.ubGunShotsLeft == 0 || (ItemHasFingerPrintID(pObj->usItem) && (*pObj)[0]->data.ubImprintID != NOBODY && (*pObj)[0]->data.ubImprintID != pSoldier->ubID) ) ) + if ( (pItem->usItemClass & IC_GUN) && ((*pObj)[0]->data.gun.bGunAmmoStatus < 0 || (*pObj)[0]->data.gun.ubGunShotsLeft == 0 || (ItemHasFingerPrintID(pObj->usItem) && (*pObj)[0]->data.ubImprintID != NO_PROFILE && (*pObj)[0]->data.ubImprintID != pSoldier->ubProfile) ) ) { // jammed or out of ammo, skip it! DebugAI(AI_MSG_INFO, pSoldier, String("jammed or out of ammo, skip it!")); @@ -2080,7 +2080,7 @@ INT8 SearchForItems( SOLDIERTYPE * pSoldier, INT8 bReason, UINT16 usItem ) if ( pItem->usItemClass & IC_WEAPON && (*pObj)[0]->data.objectStatus >= MINIMUM_REQUIRED_STATUS ) { DebugAI(AI_MSG_INFO, pSoldier, String("gun has good status")); - if ( (pItem->usItemClass & IC_GUN) && ((*pObj)[0]->data.gun.bGunAmmoStatus < 0 || (*pObj)[0]->data.gun.ubGunShotsLeft == 0 || (ItemHasFingerPrintID(pObj->usItem) && (*pObj)[0]->data.ubImprintID != NOBODY && (*pObj)[0]->data.ubImprintID != pSoldier->ubID) ) ) + if ( (pItem->usItemClass & IC_GUN) && ((*pObj)[0]->data.gun.bGunAmmoStatus < 0 || (*pObj)[0]->data.gun.ubGunShotsLeft == 0 || (ItemHasFingerPrintID(pObj->usItem) && (*pObj)[0]->data.ubImprintID != NO_PROFILE && (*pObj)[0]->data.ubImprintID != pSoldier->ubProfile) ) ) { // jammed or out of ammo, skip it! DebugAI(AI_MSG_INFO, pSoldier, String("jammed or out of ammo, skip it!")); From 0def972901778b0d0b5332ea1dbd2465776750ba Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 15 Nov 2024 01:28:06 +0200 Subject: [PATCH 032/192] Convert SetInfoChar & DrawFace to use SoldierID --- Strategic/mapscreen.cpp | 4 ++-- Strategic/mapscreen.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Strategic/mapscreen.cpp b/Strategic/mapscreen.cpp index 6aaf41b5..81a3e340 100644 --- a/Strategic/mapscreen.cpp +++ b/Strategic/mapscreen.cpp @@ -1902,7 +1902,7 @@ BOOLEAN InitializeInvPanelCoordsRobot() } // the tries to select a mapscreen character by his soldier ID -BOOLEAN SetInfoChar( UINT16 ubID ) +BOOLEAN SetInfoChar( SoldierID ubID ) { for (INT16 bCounter = 0; bCounter < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS; bCounter++) { @@ -2223,7 +2223,7 @@ void GlowTrashCan( void ) void DrawFace( INT16 sCharNumber ) { SOLDIERTYPE *pSoldier = NULL; - static INT16 sOldId = -1; + static SoldierID sOldId = NOBODY; // draws the face of the currently selected merc, being displayed int he upper left hand corner diff --git a/Strategic/mapscreen.h b/Strategic/mapscreen.h index 44deeb25..e17da45b 100644 --- a/Strategic/mapscreen.h +++ b/Strategic/mapscreen.h @@ -137,7 +137,7 @@ extern BOOLEAN gfSkyriderEmptyHelpGiven; extern std::vector gSelectedSoldiers; -BOOLEAN SetInfoChar(UINT16 ubID); +BOOLEAN SetInfoChar(SoldierID ubID); void EndMapScreen( BOOLEAN fDuringFade ); void ReBuildCharactersList( void ); From d07dcf477acc6ba90a3933bc2fbe7eb900778e55 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 15 Nov 2024 01:30:28 +0200 Subject: [PATCH 033/192] Update Scheduling.h --- Strategic/Scheduling.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Strategic/Scheduling.h b/Strategic/Scheduling.h index 084223fa..a18c4df0 100644 --- a/Strategic/Scheduling.h +++ b/Strategic/Scheduling.h @@ -63,7 +63,7 @@ public: UINT32 usData2[MAX_SCHEDULE_ACTIONS]; // Secondary information, not used by most actions UINT8 ubAction[MAX_SCHEDULE_ACTIONS]; UINT8 ubScheduleID; - UINT16 ubSoldierID; + SoldierID ubSoldierID; UINT16 usFlags; public: SCHEDULENODE& operator=(const _OLD_SCHEDULENODE& src); From b9deb3cc1969c08e681270774eb11e318a99d064 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 15 Nov 2024 01:31:22 +0200 Subject: [PATCH 034/192] PossiblyStartEnemyTaunt( uiTargetId ) to SoldierID --- Tactical/Civ Quotes.cpp | 2 +- Tactical/Civ Quotes.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Tactical/Civ Quotes.cpp b/Tactical/Civ Quotes.cpp index 5a02d724..01dfd72a 100644 --- a/Tactical/Civ Quotes.cpp +++ b/Tactical/Civ Quotes.cpp @@ -1095,7 +1095,7 @@ BOOLEAN LoadCivQuotesFromLoadGameFile( HWFILE hFile ) //-------------------------------------------------------------- #pragma optimize("", off) // 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 ) diff --git a/Tactical/Civ Quotes.h b/Tactical/Civ Quotes.h index 0c466651..4dda1ae0 100644 --- a/Tactical/Civ Quotes.h +++ b/Tactical/Civ Quotes.h @@ -154,7 +154,7 @@ enum TAUNTTYPE//enemy taunts - SANDRO TAUNT_RIPOSTE }; -void PossiblyStartEnemyTaunt( SOLDIERTYPE *pCiv, TAUNTTYPE iTauntType, UINT32 uiTargetID = NOBODY ); +void PossiblyStartEnemyTaunt( SOLDIERTYPE *pCiv, TAUNTTYPE iTauntType, SoldierID uiTargetID = NOBODY ); void StartEnemyTaunt( SOLDIERTYPE *pCiv, TAUNTTYPE iTauntType, SOLDIERTYPE *pTarget = NULL ); //enemy taunts - SANDRO // anv: added pTarget argument void ShowTauntPopupBox( SOLDIERTYPE *pCiv, STR16 gzTauntQuote ); @@ -179,4 +179,4 @@ void BeginChatQuote( SOLDIERTYPE *pCiv, INT16 sX, INT16 sY ); BOOLEAN CivQuoteActive(); -#endif \ No newline at end of file +#endif From 1c631cb85f2b66567af10cf48811b61209c2ee46 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 15 Nov 2024 01:32:25 +0200 Subject: [PATCH 035/192] REAL_OBJECT.ubLastTargetTakenDamage -> SoldierID --- TileEngine/physics.cpp | 4 ++-- TileEngine/physics.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/TileEngine/physics.cpp b/TileEngine/physics.cpp index b5847a62..ac3761b5 100644 --- a/TileEngine/physics.cpp +++ b/TileEngine/physics.cpp @@ -2471,7 +2471,7 @@ void CheckForObjectHittingMerc( REAL_OBJECT *pObject, UINT16 usStructureID ) // Is it a guy? if ( usStructureID < INVALID_STRUCTURE_ID ) { - if ( pObject->ubLastTargetTakenDamage != (UINT8)usStructureID ) + if ( pObject->ubLastTargetTakenDamage != usStructureID ) { // Flugente: if this fails, something is very wrong indeed Assert(usStructureIDEVENT_SoldierGotHit( NOTHING, sDamage, sBreath, pSoldier->ubDirection, 0, pObject->ubOwner, FIRE_WEAPON_TOSSED_OBJECT_SPECIAL, 0, 0, NOWHERE ); - pObject->ubLastTargetTakenDamage = (UINT8)( usStructureID ); + pObject->ubLastTargetTakenDamage = usStructureID; } } } diff --git a/TileEngine/physics.h b/TileEngine/physics.h index 81effb21..249334c8 100644 --- a/TileEngine/physics.h +++ b/TileEngine/physics.h @@ -133,7 +133,7 @@ public: BOOLEAN fPotentialForDebug; INT32 sLevelNodeGridNo; INT32 iSoundID; - UINT8 ubLastTargetTakenDamage; + SoldierID ubLastTargetTakenDamage; // OJW - 20091002 - mp explosives UINT8 mpTeam; // the intiating clients team INT32 mpRealObjectID; // ID from the initiating client @@ -183,4 +183,4 @@ INT32 RandomGridFromRadius( INT32 sSweetGridNo, INT8 ubMinRadius, INT8 ubMaxRad UINT32 GetArtilleryTargetGridNo( UINT32 sTargetGridNo, INT8 bRadius ); BOOLEAN GetArtilleryLaunchParams(UINT32 sStartingGridNo, UINT32 sTargetGridNo, UINT8 ubTargetLevel, INT16 sStartZ, INT16 sEndZ, UINT16 usLauncher, OBJECTTYPE* pObj, FLOAT* pdForce, FLOAT* pdDegrees); -#endif \ No newline at end of file +#endif From 337cf1804f6ae53fcbe71b6016a62da5b33e2faa Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 15 Nov 2024 01:32:35 +0200 Subject: [PATCH 036/192] Update Overhead Types.h --- Tactical/Overhead Types.h | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/Tactical/Overhead Types.h b/Tactical/Overhead Types.h index 4f22eed1..1807979a 100644 --- a/Tactical/Overhead Types.h +++ b/Tactical/Overhead Types.h @@ -392,13 +392,30 @@ typedef struct SoldierID SOLDIERTYPE* operator->() { return MercPtrs[i]; } const SOLDIERTYPE* operator->() const { return MercPtrs[i]; } + inline operator SOLDIERTYPE* () { return MercPtrs[i]; } + inline operator const SOLDIERTYPE*() const { return MercPtrs[i]; } } SoldierID; -//inline bool operator==(const SoldierID lhs, const SoldierID rhs) { return lhs.i == rhs.i; } -//inline bool operator!=(const SoldierID lhs, const SoldierID rhs) { return lhs.i != rhs.i; } +inline bool operator==(const SoldierID lhs, const SoldierID rhs) { return lhs.i == rhs.i; } +inline bool operator==(const SoldierID lhs, const int rhs) { return lhs.i == rhs; } +inline bool operator==(const SoldierID lhs, const UINT32 rhs) { return lhs.i == rhs; } +inline bool operator==(const SoldierID lhs, const UINT16 rhs) { return lhs.i == rhs; } +inline bool operator==(const SoldierID lhs, const INT16 rhs) { return lhs.i == rhs; } +inline bool operator==(const int lhs, const SoldierID rhs) { return lhs == rhs.i; } +inline bool operator==(const UINT16 lhs, const SoldierID rhs) { return lhs == rhs.i; } +inline bool operator==(const INT16 lhs, const SoldierID rhs) { return lhs == rhs.i; } + +inline bool operator!=(const SoldierID lhs, const SoldierID rhs) { return lhs.i != rhs.i; } +inline bool operator!=(const SoldierID lhs, const UINT32 rhs) { return lhs.i != rhs; } +inline bool operator!=(const SoldierID lhs, const UINT16 rhs) { return lhs.i != rhs; } +inline bool operator!=(const int lhs, const SoldierID rhs) { return lhs != rhs.i; } +inline bool operator!=(const UINT32 lhs, const SoldierID rhs) { return lhs != rhs.i; } +inline bool operator!=(const UINT16 lhs, const SoldierID rhs) { return lhs != rhs.i; } +inline bool operator!=(const INT16 lhs, const SoldierID rhs) { return lhs != rhs.i; } inline bool operator<(const SoldierID lhs, const SoldierID rhs) { return lhs.i < rhs.i; } inline bool operator<(const SoldierID lhs, const int rhs) { return lhs.i < rhs; } +inline bool operator<(const SoldierID lhs, UINT16 rhs) { return lhs.i < rhs; } inline bool operator<(const int lhs, const SoldierID rhs) { return lhs < rhs.i; } inline bool operator<(const unsigned int lhs, const SoldierID rhs) { return lhs < rhs.i; } inline bool operator<(const UINT16 lhs, const SoldierID rhs) { return lhs < rhs.i; } From cba88ab2bc701fb81efb7735596801e78a7c6185 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 15 Nov 2024 01:34:10 +0200 Subject: [PATCH 037/192] Update LuaInitNPCs.cpp convert l_ACTION_ITEM_SEX (lua_State *L) to use SoldierID properly --- Strategic/LuaInitNPCs.cpp | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/Strategic/LuaInitNPCs.cpp b/Strategic/LuaInitNPCs.cpp index c8a19d6f..e5634f6d 100644 --- a/Strategic/LuaInitNPCs.cpp +++ b/Strategic/LuaInitNPCs.cpp @@ -7129,7 +7129,7 @@ static int l_ACTION_ITEM_SEX (lua_State *L) if ( ! (gTacticalStatus.uiFlags & INCOMBAT) ) { - UINT16 ubID; + SoldierID soldier; OBJECTTYPE DoorCloser; INT16 sTeleportSpot; INT16 sDoorSpot; @@ -7142,16 +7142,16 @@ static int l_ACTION_ITEM_SEX (lua_State *L) if ( TileIsOutOfBounds(sGridNo) ) return 0; - ubID = WhoIsThere2( sGridNo, 0 ); - if ( (ubID != NOBODY) && (MercPtrs[ ubID ]->bTeam == gbPlayerNum) ) + soldier = WhoIsThere2( sGridNo, 0 ); + if ( (soldier != NOBODY) && (soldier->bTeam == gbPlayerNum) ) { - if ( InARoom( sGridNo, &usRoom ) && InARoom( MercPtrs[ ubID ]->sOldGridNo, &usOldRoom ) && usOldRoom != usRoom ) + if ( InARoom( sGridNo, &usRoom ) && InARoom( soldier->sOldGridNo, &usOldRoom ) && usOldRoom != usRoom ) { // also require there to be a miniskirt civ in the room if ( HookerInRoom( usRoom ) ) { // stop the merc... - MercPtrs[ ubID ]->EVENT_StopMerc( MercPtrs[ ubID ]->sGridNo, MercPtrs[ ubID ]->ubDirection ); + soldier->EVENT_StopMerc( soldier->sGridNo, soldier->ubDirection ); if ( sGridNo == gModSettings.iCarlaDoorGridNo +1 ) { @@ -7181,25 +7181,25 @@ static int l_ACTION_ITEM_SEX (lua_State *L) PerformItemAction( sDoorSpot, &DoorCloser ); // Flugente: additional dialogue - AdditionalTacticalCharacterDialogue_CallsLua( MercPtrs[ubID], ADE_SEX ); + AdditionalTacticalCharacterDialogue_CallsLua( soldier, ADE_SEX ); // have sex HandleNPCDoAction( 0, NPC_ACTION_SEX, 0 ); // move the merc outside of the room again - sTeleportSpot = FindGridNoFromSweetSpotWithStructData( MercPtrs[ ubID ], STANDING, sTeleportSpot, 2, &ubDirection, FALSE ); - MercPtrs[ ubID ]->ChangeSoldierState( STANDING, 0, TRUE ); - TeleportSoldier( MercPtrs[ ubID ], sTeleportSpot, FALSE ); + sTeleportSpot = FindGridNoFromSweetSpotWithStructData( soldier, STANDING, sTeleportSpot, 2, &ubDirection, FALSE ); + soldier->ChangeSoldierState( STANDING, 0, TRUE ); + TeleportSoldier( soldier, sTeleportSpot, FALSE ); - HandleMoraleEvent( MercPtrs[ ubID ], MORALE_SEX, gWorldSectorX, gWorldSectorY, gbWorldSectorZ ); - FatigueCharacter( MercPtrs[ ubID ] ); - FatigueCharacter( MercPtrs[ ubID ] ); - FatigueCharacter( MercPtrs[ ubID ] ); - FatigueCharacter( MercPtrs[ ubID ] ); - DirtyMercPanelInterface( MercPtrs[ ubID ], DIRTYLEVEL1 ); + HandleMoraleEvent( soldier, MORALE_SEX, gWorldSectorX, gWorldSectorY, gbWorldSectorZ ); + FatigueCharacter( soldier ); + FatigueCharacter( soldier ); + FatigueCharacter( soldier ); + FatigueCharacter( soldier ); + DirtyMercPanelInterface( soldier, DIRTYLEVEL1 ); // Flugente: we might get a disease from this... - HandlePossibleInfection( MercPtrs[ubID], NULL, INFECTION_TYPE_SEX ); + HandlePossibleInfection( soldier, NULL, INFECTION_TYPE_SEX ); } } } From e9c8124dc2a069fd9535d8a8405d5c5907b35856 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 15 Nov 2024 19:05:19 +0200 Subject: [PATCH 038/192] Fix UB compilation --- Strategic/Queen Command.cpp | 12 ++++++------ Tactical/Ja25_Tactical.cpp | 18 +++++++++--------- Tactical/Ja25_Tactical.h | 4 ++-- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/Strategic/Queen Command.cpp b/Strategic/Queen Command.cpp index 23bddfc8..487ee8fe 100644 --- a/Strategic/Queen Command.cpp +++ b/Strategic/Queen Command.cpp @@ -3158,8 +3158,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 ); @@ -3174,13 +3174,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 ); } } } diff --git a/Tactical/Ja25_Tactical.cpp b/Tactical/Ja25_Tactical.cpp index 4893ce49..417dc46e 100644 --- a/Tactical/Ja25_Tactical.cpp +++ b/Tactical/Ja25_Tactical.cpp @@ -84,7 +84,7 @@ typedef struct //Morris items //UINT32 MORRIS_INSTRUCTION_NOTE = 1362; -UINT8 Get3RandomQualifiedMercs( UINT8 *pSoldierId1, UINT8 *pSoldierId2, UINT8 *pSoldierId3 ); +UINT8 Get3RandomQualifiedMercs( SoldierID *pSoldierId1, SoldierID *pSoldierId2, SoldierID *pSoldierId3 ); //******************************************************************* // @@ -584,7 +584,7 @@ UINT8 RandomArrayOfQualifiedMercs( UINT8 *pRandomSoldierIdArray ) return( usNumMercsPresent ); } -UINT8 Get3RandomQualifiedMercs( UINT8 *pSoldierId1, UINT8 *pSoldierId2, UINT8 *pSoldierId3 ) +UINT8 Get3RandomQualifiedMercs( SoldierID *pSoldierId1, SoldierID *pSoldierId2, SoldierID *pSoldierId3 ) { UINT8 usNumMercs; UINT8 RandomSoldierIdArray[ NUM_MERCS_WITH_NEW_QUOTES ]; @@ -875,20 +875,20 @@ void HandlePowerGenAlarm() } else { - UINT8 bSoldierId1, bSoldierId2, bSoldierId3; + SoldierID bSoldierId1, bSoldierId2, bSoldierId3; Get3RandomQualifiedMercs( &bSoldierId1, &bSoldierId2, &bSoldierId3 ); - if( bSoldierId1 != -1 && Menptr[ bSoldierId1 ].ubProfile != BIGGENS_UB ) //BIGGENS + if( bSoldierId1 != NOBODY && bSoldierId1->ubProfile != BIGGENS_UB ) //BIGGENS { - TacticalCharacterDialogue( &Menptr[ bSoldierId1 ], QUOTE_HATED_1_ON_TEAM_LONGTIMETOHATE ); + TacticalCharacterDialogue( bSoldierId1, QUOTE_HATED_1_ON_TEAM_LONGTIMETOHATE ); } - else if( bSoldierId2 != -1 && Menptr[ bSoldierId2 ].ubProfile != BIGGENS_UB ) //BIGGENS + else if( bSoldierId2 != NOBODY && bSoldierId2->ubProfile != BIGGENS_UB ) //BIGGENS { - TacticalCharacterDialogue( &Menptr[ bSoldierId2 ], QUOTE_HATED_1_ON_TEAM_LONGTIMETOHATE ); + TacticalCharacterDialogue( bSoldierId2, QUOTE_HATED_1_ON_TEAM_LONGTIMETOHATE ); } - else if( bSoldierId3 != -1 && Menptr[ bSoldierId3 ].ubProfile != BIGGENS_UB ) // BIGGENS + else if( bSoldierId3 != NOBODY && bSoldierId3->ubProfile != BIGGENS_UB ) // BIGGENS { - TacticalCharacterDialogue( &Menptr[ bSoldierId3 ], QUOTE_HATED_1_ON_TEAM_LONGTIMETOHATE ); + TacticalCharacterDialogue( bSoldierId3, QUOTE_HATED_1_ON_TEAM_LONGTIMETOHATE ); } } } diff --git a/Tactical/Ja25_Tactical.h b/Tactical/Ja25_Tactical.h index 4f086238..a8b12371 100644 --- a/Tactical/Ja25_Tactical.h +++ b/Tactical/Ja25_Tactical.h @@ -50,7 +50,7 @@ BOOLEAN SayQuoteFromAllNewHiredMercButDoGastonLast( UINT8 ubProfile, UINT32 uiQu UINT8 RandomArrayOfQualifiedMercs( UINT8 *pRandomSoldierIdArray ); -extern UINT8 Get3RandomQualifiedMercs( UINT8 *pSoldierId1, UINT8 *pSoldierId2, UINT8 *pSoldierId3 ); +extern UINT8 Get3RandomQualifiedMercs( SoldierID *pSoldierId1, SoldierID *pSoldierId2, SoldierID *pSoldierId3 ); void HandleWhenCertainPercentageOfEnemiesDie(); @@ -151,4 +151,4 @@ extern void InitGridNoUB(); #endif -#endif \ No newline at end of file +#endif From b98732daa7db604ef294edea60f4ae23e85581b5 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 15 Nov 2024 19:06:34 +0200 Subject: [PATCH 039/192] Convert gusSelectedSoldier to SoldierID --- Ja2/aniviewscreen.cpp | 2 +- Ja2/gamescreen.cpp | 12 +- Ja2/jascreens.cpp | 44 +++---- Strategic/strategicmap.cpp | 10 +- Tactical/Dialogue Control.cpp | 18 +-- Tactical/DisplayCover.cpp | 17 ++- Tactical/Handle UI Plan.cpp | 3 +- Tactical/Handle UI.cpp | 14 +-- Tactical/Interface Control.cpp | 4 +- Tactical/Interface Cursors.cpp | 4 +- Tactical/Interface Panels.cpp | 6 +- Tactical/Interface Utils.cpp | 2 +- Tactical/Interface.cpp | 6 +- Tactical/Overhead.cpp | 64 +++++----- Tactical/Overhead.h | 4 +- Tactical/Real Time Input.cpp | 34 +++--- Tactical/ShopKeeper Interface.cpp | 10 +- Tactical/Soldier Control.cpp | 2 +- Tactical/SoldierTooltips.cpp | 16 +-- Tactical/Squads.cpp | 2 +- Tactical/Strategic Exit GUI.cpp | 32 ++--- Tactical/TeamTurns.cpp | 22 ++-- Tactical/Turn Based Input.cpp | 196 +++++++++++++++--------------- Tactical/UI Cursors.cpp | 2 +- Tactical/opplist.cpp | 12 +- TileEngine/Explosion Control.cpp | 9 +- TileEngine/Interactive Tiles.cpp | 4 +- TileEngine/overhead map.cpp | 2 +- TileEngine/renderworld.cpp | 4 +- TileEngine/worlddef.cpp | 2 +- 30 files changed, 270 insertions(+), 289 deletions(-) diff --git a/Ja2/aniviewscreen.cpp b/Ja2/aniviewscreen.cpp index 638e67a2..9a3f3946 100644 --- a/Ja2/aniviewscreen.cpp +++ b/Ja2/aniviewscreen.cpp @@ -104,7 +104,7 @@ UINT32 AniEditScreenHandle(void) fToggle2 = FALSE; ubCurLoadedState = 0; - pSoldier = MercPtrs[ gusSelectedSoldier ]; + pSoldier = gusSelectedSoldier; gTacticalStatus.uiFlags |= LOADING_SAVED_GAME; diff --git a/Ja2/gamescreen.cpp b/Ja2/gamescreen.cpp index dcaa3be8..d1f48eb4 100644 --- a/Ja2/gamescreen.cpp +++ b/Ja2/gamescreen.cpp @@ -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 @@ -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 ); @@ -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 ); } } diff --git a/Ja2/jascreens.cpp b/Ja2/jascreens.cpp index b431dd2e..5362171a 100644 --- a/Ja2/jascreens.cpp +++ b/Ja2/jascreens.cpp @@ -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; diff --git a/Strategic/strategicmap.cpp b/Strategic/strategicmap.cpp index b0f37b70..cca5a3ee 100644 --- a/Strategic/strategicmap.cpp +++ b/Strategic/strategicmap.cpp @@ -3993,7 +3993,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 ); } @@ -4839,13 +4839,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; } @@ -4959,12 +4959,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( ) ) { diff --git a/Tactical/Dialogue Control.cpp b/Tactical/Dialogue Control.cpp index 6ffe3ee1..cc8c8e67 100644 --- a/Tactical/Dialogue Control.cpp +++ b/Tactical/Dialogue Control.cpp @@ -657,13 +657,13 @@ void HandleDialogue( ) { if( gfMorrisShouldSayHi ) { - SOLDIERTYPE * pMorris; - SOLDIERTYPE * pSoldier; - INT16 sPlayerGridNo; - UINT8 ubPlayerID; - UINT8 ubQualifiedSoldierIDArray[ NUM_MERCS_WITH_NEW_QUOTES ]; - UINT8 ubNumQualifiedMercs=0; - UINT8 ubCnt=0; + SOLDIERTYPE *pMorris; + SOLDIERTYPE *pSoldier; + INT16 sPlayerGridNo; + SoldierID ubPlayerID; + UINT8 ubQualifiedSoldierIDArray[ NUM_MERCS_WITH_NEW_QUOTES ]; + UINT8 ubNumQualifiedMercs=0; + UINT8 ubCnt=0; if( !( gMercProfiles[ MORRIS_UB ].ubMiscFlags2 & PROFILE_MISC_FLAG2_SAID_FIRSTSEEN_QUOTE ) ) { @@ -676,7 +676,7 @@ void HandleDialogue( ) ubPlayerID = WhoIsThere2( sPlayerGridNo, 0 ); if (ubPlayerID != NOBODY) { - InitiateConversation( pMorris, MercPtrs[ ubPlayerID ], NPC_INITIAL_QUOTE, 0 ); + InitiateConversation( pMorris, ubPlayerID, NPC_INITIAL_QUOTE, 0 ); gMercProfiles[ pMorris->ubProfile ].ubMiscFlags2 |= PROFILE_MISC_FLAG2_SAID_FIRSTSEEN_QUOTE; } } @@ -1887,7 +1887,7 @@ BOOLEAN CharacterDialogue( UINT8 ubCharacterNum, UINT16 usQuoteNum, INT32 iFaceI { if ( gusSelectedSoldier != NOBODY ) { - AdditionalTacticalCharacterDialogue_CallsLua( MercPtrs[gusSelectedSoldier], ADE_DIALOGUE_REACTION, ubCharacterNum, usQuoteNum, ( gMercProfiles[ubCharacterNum].ubMiscFlags & PROFILE_MISC_FLAG_RECRUITED ) ? 1 : 0 ); + AdditionalTacticalCharacterDialogue_CallsLua( gusSelectedSoldier, ADE_DIALOGUE_REACTION, ubCharacterNum, usQuoteNum, ( gMercProfiles[ubCharacterNum].ubMiscFlags & PROFILE_MISC_FLAG_RECRUITED ) ? 1 : 0 ); } } // if team members talk, anyone may answer diff --git a/Tactical/DisplayCover.cpp b/Tactical/DisplayCover.cpp index b4324511..40f674f1 100644 --- a/Tactical/DisplayCover.cpp +++ b/Tactical/DisplayCover.cpp @@ -538,11 +538,10 @@ void DisplayCover( BOOLEAN forceUpdate ) static void CalculateCoverFromEnemies() { - if (gusSelectedSoldier == NOBODY) + if (gusSelectedSoldier == NOBODY || gusSelectedSoldier->bActive == false) return; - SOLDIERTYPE* pSoldier; - GetSoldier(&pSoldier, gusSelectedSoldier); + SOLDIERTYPE* pSoldier = gusSelectedSoldier; const INT8 OurSoldierStealth = GetStealth(pSoldier); const INT8 OurSoldierLBESightAdjustment = GetSightAdjustmentBasedOnLBE(pSoldier); @@ -673,10 +672,10 @@ void CalculateCover() INT8 ubZ; SOLDIERTYPE* pSoldier; - if (gusSelectedSoldier == NOBODY) + if (gusSelectedSoldier == NOBODY || gusSelectedSoldier->bActive == false) return; - GetSoldier(&pSoldier, gusSelectedSoldier); + pSoldier = gusSelectedSoldier; for (ubX = gsMinCellX; ubX <= gsMaxCellX; ++ubX) { @@ -1199,7 +1198,7 @@ void CalculateMines() return; } - const INT32& sSelectedSoldierGridNo = MercPtrs[ gusSelectedSoldier ]->sGridNo; + const INT32& sSelectedSoldierGridNo = gusSelectedSoldier->sGridNo; for ( ubX=gsMinCellX; ubX<=gsMaxCellX; ++ubX ) { @@ -1453,7 +1452,7 @@ void CalculateTraitRange() return; } - const INT32& sSelectedSoldierGridNo = MercPtrs[ gusSelectedSoldier ]->sGridNo; + const INT32& sSelectedSoldierGridNo = gusSelectedSoldier->sGridNo; for ( ubX=gsMinCellX; ubX<=gsMaxCellX; ++ubX ) { @@ -1591,7 +1590,7 @@ void CalculateTrackerRange( ) UINT16 range = gSkillTraitValues.usSVTrackerMaxRange * trackerskill; - const INT32& sSelectedSoldierGridNo = MercPtrs[gusSelectedSoldier]->sGridNo; + const INT32& sSelectedSoldierGridNo = gusSelectedSoldier->sGridNo; for ( ubX = gsMinCellX; ubX <= gsMaxCellX; ++ubX ) { @@ -1775,7 +1774,7 @@ void CalculateWeapondata() BOOLEAN guninhand = WeaponInHand( pSoldier ); - INT32 sSelectedSoldierGridNo = MercPtrs[gusSelectedSoldier]->sGridNo; + INT32 sSelectedSoldierGridNo = gusSelectedSoldier->sGridNo; if ( TileIsOutOfBounds( sSelectedSoldierGridNo ) ) return; diff --git a/Tactical/Handle UI Plan.cpp b/Tactical/Handle UI Plan.cpp index 33b0708d..0669e172 100644 --- a/Tactical/Handle UI Plan.cpp +++ b/Tactical/Handle UI Plan.cpp @@ -197,7 +197,7 @@ BOOLEAN AddUIPlan( INT32 sGridNo, UINT8 ubPlanID ) pPlanSoldier->ChangeSoldierState( pPlanSoldier->usUIMovementMode, 0, FALSE ); // Change selected soldier - gusSelectedSoldier = (UINT16)pPlanSoldier->ubID; + gusSelectedSoldier = pPlanSoldier->ubID; // Change global planned mode to this guy! gpUIPlannedSoldier = pPlanSoldier; @@ -243,6 +243,7 @@ void EndUIPlan( ) SOLDIERTYPE *pSoldier; // Zero out any planned soldiers + //FIXME for( cnt = MAX_NUM_SOLDIERS; cnt < TOTAL_SOLDIERS; cnt++ ) { pSoldier = MercPtrs[ cnt ]; diff --git a/Tactical/Handle UI.cpp b/Tactical/Handle UI.cpp index f72f4848..92eeec76 100644 --- a/Tactical/Handle UI.cpp +++ b/Tactical/Handle UI.cpp @@ -1013,7 +1013,7 @@ void SetUIMouseCursor( ) if( GetMouseMapPos( &usMapPos) ) { - if ( gusSelectedSoldier != NOBODY && MercPtrs[ gusSelectedSoldier ]->pathing.bLevel == 0 ) + if ( gusSelectedSoldier != NOBODY && gusSelectedSoldier->pathing.bLevel == 0 ) { // ATE: Is this place revealed? if ( !InARoom( usMapPos, &usRoomNum ) || ( InARoom( usMapPos, &usRoomNum ) && gpWorldLevelData[ usMapPos ].uiFlags & MAPELEMENT_REVEALED ) ) @@ -1953,7 +1953,7 @@ UINT32 UIHandleAOnTerrain( UI_EVENT *pUIEvent ) if ( gfUIFullTargetFound ) { // No, ok display message IF this is the first time at this gridno - if ( gsOutOfRangeGridNo != MercPtrs[ gusUIFullTargetID ]->sGridNo || gubOutOfRangeMerc != gusSelectedSoldier ) + if ( gsOutOfRangeGridNo != gusUIFullTargetID->sGridNo || gubOutOfRangeMerc != gusSelectedSoldier ) { // Display ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, TacticalStr[ OUT_OF_RANGE_STRING ] ); @@ -1961,7 +1961,7 @@ UINT32 UIHandleAOnTerrain( UI_EVENT *pUIEvent ) //PlayJA2Sample( TARGET_OUT_OF_RANGE, RATE_11025, MIDVOLUME, 1, MIDDLEPAN ); // Set - gsOutOfRangeGridNo = MercPtrs[ gusUIFullTargetID ]->sGridNo; + gsOutOfRangeGridNo = gusUIFullTargetID->sGridNo; gubOutOfRangeMerc = gusSelectedSoldier; } } @@ -2058,7 +2058,7 @@ UINT32 UIHandleCWait( UI_EVENT *pUIEvent ) { if( pSoldier->flags.uiStatusFlags & SOLDIER_DRIVER ) { - pSoldier = GetSoldierStructureForVehicle( MercPtrs[ gusSelectedSoldier ]->iVehicleId ); + pSoldier = GetSoldierStructureForVehicle( gusSelectedSoldier->iVehicleId ); } pInvTile = GetCurInteractiveTile( ); @@ -3746,7 +3746,7 @@ BOOLEAN UIHandleOnMerc( BOOLEAN fMovementMode ) // anv: don't switch if passengers are blocked from attacking if( gusSelectedSoldier != NOBODY ) { - SOLDIERTYPE *pSelectedSoldier = MercPtrs[gusSelectedSoldier]; + SOLDIERTYPE *pSelectedSoldier = gusSelectedSoldier; if( pSelectedSoldier->flags.uiStatusFlags & ( SOLDIER_DRIVER | SOLDIER_PASSENGER ) ) { SOLDIERTYPE *pVehicle = GetSoldierStructureForVehicle( pSelectedSoldier->iVehicleId ); @@ -6386,7 +6386,7 @@ BOOLEAN IsValidTalkableNPC( UINT16 ubSoldierID, BOOLEAN fGive, BOOLEAN fAllowMer if ( gusSelectedSoldier != NOBODY ) { - if ( AM_A_ROBOT( MercPtrs[ gusSelectedSoldier ] ) ) + if ( AM_A_ROBOT( gusSelectedSoldier ) ) { return( FALSE ); } @@ -7042,7 +7042,7 @@ BOOLEAN SelectedGuyInBusyAnimation( ) if ( gusSelectedSoldier != NOBODY ) { - pSoldier = MercPtrs[ gusSelectedSoldier ]; + pSoldier = gusSelectedSoldier; if ( pSoldier->usAnimState == LOB_ITEM || pSoldier->usAnimState == THROW_ITEM || diff --git a/Tactical/Interface Control.cpp b/Tactical/Interface Control.cpp index 1d733042..294f03e2 100644 --- a/Tactical/Interface Control.cpp +++ b/Tactical/Interface Control.cpp @@ -317,7 +317,7 @@ void SetUpInterface( ) { if ( gusSelectedSoldier != NOBODY ) { - if ( MercPtrs[ gusSelectedSoldier ]->sGridNo != gsUIHandleShowMoveGridLocation ) + if ( gusSelectedSoldier->sGridNo != gsUIHandleShowMoveGridLocation ) { if ( gfUIHandleShowMoveGrid == 2 ) { @@ -327,7 +327,7 @@ void SetUpInterface( ) } else { - if ( MercPtrs[ gusSelectedSoldier ]->bStealthMode ) + if ( gusSelectedSoldier->bStealthMode ) { AddTopmostToHead( gsUIHandleShowMoveGridLocation, GetSnapCursorIndex( FIRSTPOINTERS9 ) ); gpWorldLevelData[gsUIHandleShowMoveGridLocation].pTopmostHead->ubShadeLevel=DEFAULT_SHADE_LEVEL; diff --git a/Tactical/Interface Cursors.cpp b/Tactical/Interface Cursors.cpp index aaae395b..386e086a 100644 --- a/Tactical/Interface Cursors.cpp +++ b/Tactical/Interface Cursors.cpp @@ -354,7 +354,7 @@ BOOLEAN DrawUICursor( ) // ATE; Is the current guy in steath mode? if ( gusSelectedSoldier != NOBODY ) { - if ( MercPtrs[ gusSelectedSoldier ]->bStealthMode ) + if ( gusSelectedSoldier->bStealthMode ) { usTileCursor = FIRSTPOINTERS9; } @@ -367,7 +367,7 @@ BOOLEAN DrawUICursor( ) // ATE; Is the current guy in steath mode? if ( gusSelectedSoldier != NOBODY ) { - if ( MercPtrs[ gusSelectedSoldier ]->bStealthMode ) + if ( gusSelectedSoldier->bStealthMode ) { usTileCursor = FIRSTPOINTERS10; } diff --git a/Tactical/Interface Panels.cpp b/Tactical/Interface Panels.cpp index 0a8ebe93..defdd7d7 100644 --- a/Tactical/Interface Panels.cpp +++ b/Tactical/Interface Panels.cpp @@ -6201,7 +6201,7 @@ void MercFacePanelCallback( MOUSE_REGION * pRegion, INT32 iReason ) if ( OK_CONTROLLABLE_MERC( MercPtrs[ ubSoldierID ] ) && !( MercPtrs[ ubSoldierID ]->flags.uiStatusFlags & ( SOLDIER_VEHICLE | SOLDIER_PASSENGER | SOLDIER_DRIVER ) ) ) { //ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s added", MercPtrs[ ubSoldierID ]->name ); - MercPtrs[ gusSelectedSoldier ]->flags.uiStatusFlags |= SOLDIER_MULTI_SELECTED; + gusSelectedSoldier->flags.uiStatusFlags |= SOLDIER_MULTI_SELECTED; MercPtrs[ ubSoldierID ]->flags.uiStatusFlags |= SOLDIER_MULTI_SELECTED; EndMultiSoldierSelection( TRUE ); } @@ -6213,7 +6213,7 @@ void MercFacePanelCallback( MOUSE_REGION * pRegion, INT32 iReason ) MercPtrs[ ubSoldierID ]->flags.uiStatusFlags &= (~SOLDIER_MULTI_SELECTED ); if (ubSoldierID != gusSelectedSoldier) { - MercPtrs[ gusSelectedSoldier ]->flags.uiStatusFlags |= SOLDIER_MULTI_SELECTED; + gusSelectedSoldier->flags.uiStatusFlags |= SOLDIER_MULTI_SELECTED; } EndMultiSoldierSelection( TRUE ); } @@ -7194,7 +7194,7 @@ UINT16 FindNextMercInTeamPanel( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLif //Select next squad iCurrentSquad = CurrentSquad( ); - pNewSoldier = FindNextActiveSquad( MercPtrs[ gusSelectedSoldier ] ); + pNewSoldier = FindNextActiveSquad( gusSelectedSoldier ); if ( pNewSoldier->bAssignment != iCurrentSquad ) { diff --git a/Tactical/Interface Utils.cpp b/Tactical/Interface Utils.cpp index b0bbfae5..53417ea2 100644 --- a/Tactical/Interface Utils.cpp +++ b/Tactical/Interface Utils.cpp @@ -43,7 +43,7 @@ extern UINT32 guiBrownBackgroundForTeamPanel; extern UINT32 guiGoldBackgroundForTeamPanel; // selected grunt -extern UINT16 gusSelectedSoldier; +extern SoldierID gusSelectedSoldier; // car portraits enum{ diff --git a/Tactical/Interface.cpp b/Tactical/Interface.cpp index 34bdc582..8ba363ec 100644 --- a/Tactical/Interface.cpp +++ b/Tactical/Interface.cpp @@ -851,7 +851,7 @@ void PopupMovementMenu( UI_EVENT *pUIEvent ) if ( gusSelectedSoldier != NOBODY ) { - pSoldier = MercPtrs[ gusSelectedSoldier ]; + pSoldier = gusSelectedSoldier; } // Blit background! @@ -6136,7 +6136,7 @@ void ShowEnemyWeapon( INT16 sX, INT16 sY, SOLDIERTYPE* pTargetSoldier ) INT32 iVisibleDistance; if ( gusSelectedSoldier != NOBODY ) - pSelectedSoldier = MercPtrs[ gusSelectedSoldier ]; + pSelectedSoldier = gusSelectedSoldier; else return; @@ -6182,7 +6182,7 @@ void ShowEnemyHealthBar( INT16 sX, INT16 sY, SOLDIERTYPE* pSoldier ) SOLDIERTYPE *pSelectedSoldier; if ( gusSelectedSoldier != NOBODY ) - pSelectedSoldier = MercPtrs[ gusSelectedSoldier ]; + pSelectedSoldier = gusSelectedSoldier; else return; diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index 8c413bff..5a67e3c3 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -298,7 +298,7 @@ SOLDIERTYPE* SoldierFromID(const SoldierID id, SOLDIERTYPE* Array[TOTAL_SOLDIERS UINT8 gbPlayerNum = 0; // Global for current selected soldier -UINT16 gusSelectedSoldier = NOBODY; +SoldierID gusSelectedSoldier = NOBODY; INT8 gbShowEnemies = FALSE; BOOLEAN gfMovingAnimation = FALSE; @@ -3362,7 +3362,7 @@ void InternalSelectSoldier( UINT16 usSoldierID, BOOLEAN fAcknowledge, BOOLEAN fF if ( gusSelectedSoldier != NOBODY ) { // Get guy - pOldSoldier = MercPtrs[ gusSelectedSoldier ]; + pOldSoldier = gusSelectedSoldier; pOldSoldier->flags.fShowLocator = FALSE; pOldSoldier->flags.fFlashLocator = FALSE; @@ -4249,8 +4249,8 @@ void HandleNPCTeamMemberDeath( SOLDIERTYPE *pSoldierOld ) //if the person was Raul, and we are to say the blown up quotes if( pSoldierOld->ubProfile == RAUL_UB /*RAUL */ && IsJa25GeneralFlagSet( JA_GF__RAUL_BLOW_HIMSELF_UP ) ) { - UINT8 SoldierId1; - UINT8 SoldierId2; + SoldierID SoldierId1; + SoldierID SoldierId2; //Get some random Soldier ID's of the valid mercs if( Get3RandomQualifiedMercs( &SoldierId1, &SoldierId2, NULL ) != 0 ) @@ -6571,8 +6571,8 @@ void EnterCombatMode( UINT8 ubStartingTeam ) DebugMsg (TOPIC_JA2,DBG_LEVEL_3,String("EnterCombatMode continuing... start player turn, selected soldier = %d",gusSelectedSoldier)); // OK, make sure we have a selected guy // Madd: this was causing a weird crash becuase gusSelectedSoldier was 156 (out of the array bounds) for some reason - //if ( MercPtrs[ gusSelectedSoldier ]->aiData.bOppCnt == 0 ) - if ( gusSelectedSoldier != NOBODY && MercPtrs[ gusSelectedSoldier ]->aiData.bOppCnt == 0 ) + //if ( gusSelectedSoldier->aiData.bOppCnt == 0 ) + if ( gusSelectedSoldier != NOBODY && gusSelectedSoldier->aiData.bOppCnt == 0 ) { DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"EnterCombatMode continuing... nobody selected"); // OK, look through and find one.... @@ -9631,7 +9631,7 @@ SOLDIERTYPE *InternalReduceAttackBusyCount( ) if (gTacticalStatus.ubCurrentTeam == gbPlayerNum && gusSelectedSoldier < TOTAL_SOLDIERS) { - pSoldier = MercPtrs[ gusSelectedSoldier ]; + pSoldier = gusSelectedSoldier; } else { @@ -9658,7 +9658,7 @@ SOLDIERTYPE *InternalReduceAttackBusyCount( ) return( NULL ); } - pSoldier = MercPtrs[ gusSelectedSoldier ]; + pSoldier = gusSelectedSoldier; } if (!pSoldier) @@ -10179,7 +10179,7 @@ void RemoveManFromTeam( INT8 bTeam ) void RemoveSoldierFromTacticalSector( SOLDIERTYPE *pSoldier, BOOLEAN fAdjustSelected ) { - UINT16 ubID; + SoldierID ubID; SOLDIERTYPE *pNewSoldier; // reset merc's opplist @@ -10935,7 +10935,7 @@ void TurnCoatAttemptMessageBoxCallBack( UINT8 ubExitValue ) INT16 approachselected = DropDownTemplate::getInstance().GetSelectedEntryKey(); - UINT8 approachchance = MercPtrs[gusSelectedSoldier]->GetTurncoatConvinctionChance( prisonerdialoguetargetID, approachselected ); + UINT8 approachchance = gusSelectedSoldier->GetTurncoatConvinctionChance( prisonerdialoguetargetID, approachselected ); // you can never turn a VIP (though we don't tell the player if someone is a VIP, lest they have an exploit to find out) if ( pSoldier->usSoldierFlagMask & SOLDIER_VIP ) @@ -10953,24 +10953,24 @@ void TurnCoatAttemptMessageBoxCallBack( UINT8 ubExitValue ) ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szTurncoatText[0], pSoldier->GetName() ); // increase intel penalty. We can only try to convert enemies if the penalty is low, and having a high penalty means we can't mine intel for a few hours but have to hide - MercPtrs[gusSelectedSoldier]->usSkillCooldown[SOLDIER_COOLDOWN_INTEL_PENALTY] += 1; + gusSelectedSoldier->usSkillCooldown[SOLDIER_COOLDOWN_INTEL_PENALTY] += 1; - StatChange( MercPtrs[gusSelectedSoldier], EXPERAMT, 2, FROM_SUCCESS ); - StatChange( MercPtrs[gusSelectedSoldier], LDRAMT, 4, FROM_SUCCESS ); + StatChange( gusSelectedSoldier, EXPERAMT, 2, FROM_SUCCESS ); + StatChange( gusSelectedSoldier, LDRAMT, 4, FROM_SUCCESS ); } else { ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szTurncoatText[1], pSoldier->GetName() ); // increase intel penalty. We can only try to convert enemies if the penalty is low, and having a high penalty means we can't mine intel for a few hours but have to hide - MercPtrs[gusSelectedSoldier]->usSkillCooldown[SOLDIER_COOLDOWN_INTEL_PENALTY] += 4; + gusSelectedSoldier->usSkillCooldown[SOLDIER_COOLDOWN_INTEL_PENALTY] += 4; - StatChange( MercPtrs[gusSelectedSoldier], EXPERAMT, 1, FROM_FAILURE ); - StatChange( MercPtrs[gusSelectedSoldier], LDRAMT, 1, FROM_FAILURE ); + StatChange( gusSelectedSoldier, EXPERAMT, 1, FROM_FAILURE ); + StatChange( gusSelectedSoldier, LDRAMT, 1, FROM_FAILURE ); } // explain that suspicion is so high that we have to stop - if ( MercPtrs[gusSelectedSoldier]->usSkillCooldown[SOLDIER_COOLDOWN_INTEL_PENALTY] >= 20 ) + if ( gusSelectedSoldier->usSkillCooldown[SOLDIER_COOLDOWN_INTEL_PENALTY] >= 20 ) ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szTurncoatText[2] ); // use up resources spent, regardless of whether or not we were successful @@ -10979,7 +10979,7 @@ void TurnCoatAttemptMessageBoxCallBack( UINT8 ubExitValue ) INT32 bribeamount = 10 * min( 10, CurrentPlayerProgressPercentage() ); // substract money spent - AddTransactionToPlayersBook ( TRANSFER_FUNDS_TO_MERC, MercPtrs[gusSelectedSoldier]->ubProfile, GetWorldTotalMin(), -bribeamount ); + AddTransactionToPlayersBook ( TRANSFER_FUNDS_TO_MERC, gusSelectedSoldier->ubProfile, GetWorldTotalMin(), -bribeamount ); } else if ( approachselected == 4 ) { @@ -10989,7 +10989,7 @@ void TurnCoatAttemptMessageBoxCallBack( UINT8 ubExitValue ) } // spend AP - DeductPoints( MercPtrs[gusSelectedSoldier], APBPConstants[AP_TALK], 0, UNTRIGGERED_INTERRUPT ); + DeductPoints( gusSelectedSoldier, APBPConstants[AP_TALK], 0, UNTRIGGERED_INTERRUPT ); //ReduceAttackBusyCount(); } @@ -11014,12 +11014,12 @@ void HandleTurncoatAttempt( SOLDIERTYPE* pSoldier ) std::vector > dropdownvector_1; INT16 cnt = 1; - UINT8 chance = MercPtrs[gusSelectedSoldier]->GetTurncoatConvinctionChance( prisonerdialoguetargetID, cnt ); + UINT8 chance = gusSelectedSoldier->GetTurncoatConvinctionChance( prisonerdialoguetargetID, cnt ); swprintf( gTurncoatDropdownText[cnt-1], szTurncoatText[3], chance ); dropdownvector_1.push_back( std::make_pair( cnt, gTurncoatDropdownText[cnt - 1] ) ); ++cnt; - chance = MercPtrs[gusSelectedSoldier]->GetTurncoatConvinctionChance( prisonerdialoguetargetID, cnt ); + chance = gusSelectedSoldier->GetTurncoatConvinctionChance( prisonerdialoguetargetID, cnt ); swprintf( gTurncoatDropdownText[cnt - 1], szTurncoatText[4], chance ); dropdownvector_1.push_back( std::make_pair( cnt, gTurncoatDropdownText[cnt - 1] ) ); @@ -11028,7 +11028,7 @@ void HandleTurncoatAttempt( SOLDIERTYPE* pSoldier ) INT32 bribeamount = 10 * min( 10, ubCurrentProgress ); if ( bribeamount <= balance ) { - chance = MercPtrs[gusSelectedSoldier]->GetTurncoatConvinctionChance( prisonerdialoguetargetID, cnt ); + chance = gusSelectedSoldier->GetTurncoatConvinctionChance( prisonerdialoguetargetID, cnt ); swprintf( gTurncoatDropdownText[cnt - 1], szTurncoatText[5], bribeamount, chance ); dropdownvector_1.push_back( std::make_pair( cnt, gTurncoatDropdownText[cnt - 1] ) ); } @@ -11038,7 +11038,7 @@ void HandleTurncoatAttempt( SOLDIERTYPE* pSoldier ) int intelbribeneeded = max( 2, ( ubCurrentProgress + 5 ) / 10 ); if ( intelbribeneeded <= intelreserve ) { - chance = MercPtrs[gusSelectedSoldier]->GetTurncoatConvinctionChance( prisonerdialoguetargetID, cnt ); + chance = gusSelectedSoldier->GetTurncoatConvinctionChance( prisonerdialoguetargetID, cnt ); swprintf( gTurncoatDropdownText[cnt - 1], szTurncoatText[6], intelbribeneeded, chance ); dropdownvector_1.push_back( std::make_pair( cnt, gTurncoatDropdownText[cnt - 1] ) ); } @@ -11163,7 +11163,7 @@ void PrisonerSurrenderMessageBoxCallBack( UINT8 ubExitValue ) if ( ubExitValue == 1 ) { SOLDIERTYPE *pSoldierToSurrender = MercPtrs[prisonerdialoguetargetID]; - DeductPoints( MercPtrs[gusSelectedSoldier], APBPConstants[AP_TALK], 0, UNTRIGGERED_INTERRUPT ); + DeductPoints( gusSelectedSoldier, APBPConstants[AP_TALK], 0, UNTRIGGERED_INTERRUPT ); if ( !gGameExternalOptions.fEnemyCanSurrender ) { @@ -11285,7 +11285,7 @@ void PrisonerSurrenderMessageBoxCallBack( UINT8 ubExitValue ) // dynamic opinion: a merc caused the remaining enemies to give up if (gGameExternalOptions.fDynamicOpinions && gusSelectedSoldier != NOBODY ) - HandleDynamicOpinionChange( MercPtrs[gusSelectedSoldier], OPINIONEVENT_BATTLE_TOOK_PRISONER, TRUE, TRUE ); + HandleDynamicOpinionChange( gusSelectedSoldier, OPINIONEVENT_BATTLE_TOOK_PRISONER, TRUE, TRUE ); } else { @@ -11295,22 +11295,22 @@ void PrisonerSurrenderMessageBoxCallBack( UINT8 ubExitValue ) ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szPrisonerTextStr[STR_PRISONER_REFUSE_SURRENDER] ); // if asking for surrender while undercover and the enemy refuses, he learns who you are, so he uncovers you - if ( gusSelectedSoldier != NOBODY && MercPtrs[ gusSelectedSoldier ]->usSoldierFlagMask & (SOLDIER_COVERT_CIV|SOLDIER_COVERT_SOLDIER) ) + if ( gusSelectedSoldier != NOBODY && gusSelectedSoldier->usSoldierFlagMask & (SOLDIER_COVERT_CIV|SOLDIER_COVERT_SOLDIER) ) { - MercPtrs[ gusSelectedSoldier ]->LooseDisguise(); + gusSelectedSoldier->LooseDisguise(); if ( gSkillTraitValues.fCOStripIfUncovered ) - MercPtrs[ gusSelectedSoldier ]->Strip(); + gusSelectedSoldier->Strip(); ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_SURRENDER_FAILED] ); - ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_UNCOVER_SINGLE], MercPtrs[ gusSelectedSoldier ]->GetName() ); + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_UNCOVER_SINGLE], gusSelectedSoldier->GetName() ); } } } // we offered to surrender OURSELVES TO the enemy else if ( ubExitValue == 2 ) { - DeductPoints( MercPtrs[gusSelectedSoldier], APBPConstants[AP_TALK], 0, UNTRIGGERED_INTERRUPT ); + DeductPoints( gusSelectedSoldier, APBPConstants[AP_TALK], 0, UNTRIGGERED_INTERRUPT ); if ( !gGameExternalOptions.fPlayerCanAsktoSurrender || MercPtrs[prisonerdialoguetargetID]->bTeam == CREATURE_TEAM ) { @@ -11323,7 +11323,7 @@ void PrisonerSurrenderMessageBoxCallBack( UINT8 ubExitValue ) // we distract the enemy by essentially talking them to death else if ( ubExitValue == 3 ) { - DeductPoints( MercPtrs[gusSelectedSoldier], APBPConstants[AP_TALK], 0, UNTRIGGERED_INTERRUPT ); + DeductPoints( gusSelectedSoldier, APBPConstants[AP_TALK], 0, UNTRIGGERED_INTERRUPT ); // Flugente: if we are disguised and talk to a non-profile NPC, we will continue to 'chat' with the enemy as long as we aren't ordered to do something else. // This way we can easily order our spies to 'distract' enemies @@ -11367,7 +11367,7 @@ void PrisonerSurrenderMessageBoxCallBack( UINT8 ubExitValue ) else { // normal dialog - DeductPoints( MercPtrs[gusSelectedSoldier], APBPConstants[AP_TALK], 0, UNTRIGGERED_INTERRUPT ); + DeductPoints( gusSelectedSoldier, APBPConstants[AP_TALK], 0, UNTRIGGERED_INTERRUPT ); StartCivQuote(MercPtrs[prisonerdialoguetargetID]); } } diff --git a/Tactical/Overhead.h b/Tactical/Overhead.h index f75aa410..5ed891e3 100644 --- a/Tactical/Overhead.h +++ b/Tactical/Overhead.h @@ -170,8 +170,8 @@ struct TacticalStatusType extern UINT8 gbPlayerNum; extern INT8 gbShowEnemies; -extern UINT16 gusSelectedSoldier; -extern UINT16 gusOldSelectedSoldier; +extern SoldierID gusSelectedSoldier; +extern UINT16 gusOldSelectedSoldier; extern CHAR8 gzAlertStr[][ 30 ]; extern CHAR8 gzActionStr[][ 30 ]; diff --git a/Tactical/Real Time Input.cpp b/Tactical/Real Time Input.cpp index 81b606ba..ab0797f7 100644 --- a/Tactical/Real Time Input.cpp +++ b/Tactical/Real Time Input.cpp @@ -202,11 +202,11 @@ void QueryRTLeftButton( UINT32 *puiNewEvent ) if ( gusSelectedSoldier != NOBODY ) { - if ( MercPtrs[ gusSelectedSoldier ]->pTempObject != NULL ) + if ( gusSelectedSoldier->pTempObject != NULL ) { return; } - if ( MercPtrs[ gusSelectedSoldier ]->flags.uiStatusFlags & SOLDIER_DRIVER ) + if ( gusSelectedSoldier->flags.uiStatusFlags & SOLDIER_DRIVER ) { pVehicle = GetSoldierStructureForVehicle( MercPtrs[ usSubjectSoldier ]->iVehicleId ); usSubjectSoldier = pVehicle->ubID; @@ -448,8 +448,8 @@ void QueryRTLeftButton( UINT32 *puiNewEvent ) { // Set movement mode // OK, only change this if we are stationary! - //if ( gAnimControl[ MercPtrs[ gusSelectedSoldier ]->usAnimState ].uiFlags & ANIM_STATIONARY ) - //if ( MercPtrs[ gusSelectedSoldier ]->usAnimState == WALKING ) + //if ( gAnimControl[ gusSelectedSoldier->usAnimState ].uiFlags & ANIM_STATIONARY ) + //if ( gusSelectedSoldier->usAnimState == WALKING ) { MercPtrs[ usSubjectSoldier ]->flags.fUIMovementFast = TRUE; *puiNewEvent = C_MOVE_MERC; @@ -621,7 +621,7 @@ void QueryRTLeftButton( UINT32 *puiNewEvent ) //{ // if ( gusSelectedSoldier != NOBODY ) // { - // if ( !( gAnimControl[ MercPtrs[ gusSelectedSoldier ]->usAnimState ].uiFlags & ANIM_STATIONARY ) ) + // if ( !( gAnimControl[ gusSelectedSoldier->usAnimState ].uiFlags & ANIM_STATIONARY ) ) // { //gUITargetShotWaiting = TRUE; @@ -680,7 +680,7 @@ void QueryRTLeftButton( UINT32 *puiNewEvent ) // OK, if we have a selected guy.. make him part too.... if ( gusSelectedSoldier != NOBODY ) { - MercPtrs[ gusSelectedSoldier ]->flags.uiStatusFlags |= (SOLDIER_MULTI_SELECTED ); + gusSelectedSoldier->flags.uiStatusFlags |= (SOLDIER_MULTI_SELECTED ); } } @@ -715,7 +715,7 @@ void QueryRTLeftButton( UINT32 *puiNewEvent ) // OK, if we have a selected guy.. make him part too.... if ( gusSelectedSoldier != NOBODY ) { - MercPtrs[ gusSelectedSoldier ]->flags.uiStatusFlags |= (SOLDIER_MULTI_SELECTED ); + gusSelectedSoldier->flags.uiStatusFlags |= (SOLDIER_MULTI_SELECTED ); } gfIgnoreOnSelectedGuy = TRUE; @@ -1017,7 +1017,7 @@ void QueryRTRightButton( UINT32 *puiNewEvent ) if ( gfUICanBeginAllMoveCycle ) { // ATE: Here, check if we can do this.... - if ( !UIOKMoveDestination( MercPtrs[ gusSelectedSoldier ], usMapPos ) ) + if ( !UIOKMoveDestination( gusSelectedSoldier, usMapPos ) ) { ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_UI_FEEDBACK, TacticalStr[ CANT_MOVE_THERE_STR ] ); gfRTClickLeftHoldIntercepted = TRUE; @@ -1041,7 +1041,7 @@ void QueryRTRightButton( UINT32 *puiNewEvent ) { gfBeginBurstSpreadTracking = FALSE; gfRTClickLeftHoldIntercepted = TRUE; - MercPtrs[ gusSelectedSoldier ]->flags.fDoSpread = FALSE; + gusSelectedSoldier->flags.fDoSpread = FALSE; fClickHoldIntercepted = TRUE; *puiNewEvent = A_END_ACTION; gCurrentUIMode = MOVE_MODE; @@ -1234,7 +1234,7 @@ void QueryRTRightButton( UINT32 *puiNewEvent ) case MOVE_MODE: case TALKCURSOR_MODE: // anv: don't switch if passengers are blocked from attacking - pSoldier = MercPtrs[ gusSelectedSoldier ]; + pSoldier = gusSelectedSoldier; if( pSoldier->flags.uiStatusFlags & ( SOLDIER_DRIVER | SOLDIER_PASSENGER ) ) { SOLDIERTYPE *pVehicle = GetSoldierStructureForVehicle( pSoldier->iVehicleId ); @@ -2032,13 +2032,13 @@ void HandleMouseRTWheel( void ) if ( _KeyDown( ALT ) ) { if ( (gusSelectedSoldier != NOBODY) && ( gpItemPointer == NULL ) ) - GotoLowerStance(MercPtrs[ gusSelectedSoldier ]); + GotoLowerStance(gusSelectedSoldier); return; } if ( gusSelectedSoldier != NOBODY ) { //Select prev merc - bID = FindPrevActiveAndAliveMerc( MercPtrs[ gusSelectedSoldier ], TRUE, TRUE ); + bID = FindPrevActiveAndAliveMerc( gusSelectedSoldier, TRUE, TRUE ); HandleLocateSelectMerc( bID, LOCATEANDSELECT_MERC ); // Center to guy.... LocateSoldier( gusSelectedSoldier, SETLOCATOR ); @@ -2050,14 +2050,14 @@ void HandleMouseRTWheel( void ) if ( _KeyDown( ALT ) ) { if ( (gusSelectedSoldier != NOBODY) && ( gpItemPointer == NULL ) ) - GotoHeigherStance( MercPtrs[ gusSelectedSoldier ] ); + GotoHeigherStance( gusSelectedSoldier ); return; } //ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"wheel %d", gViewportRegion.WheelState); if ( gusSelectedSoldier != NOBODY ) { //Select next merc - bID = FindNextMercInTeamPanel( MercPtrs[ gusSelectedSoldier ], FALSE, FALSE ); + bID = FindNextMercInTeamPanel( gusSelectedSoldier, FALSE, FALSE ); HandleLocateSelectMerc( bID, LOCATEANDSELECT_MERC ); // Center to guy.... LocateSoldier( gusSelectedSoldier, SETLOCATOR ); @@ -2073,7 +2073,7 @@ void HandleMouseRTMButton( UINT32 *puiNewEvent ) // toggle fire mode if ( ( gpItemPointer == NULL ) && ( gusSelectedSoldier != NOBODY ) && ( ( gsCurInterfacePanel != SM_PANEL ) || ( ButtonList[ iSMPanelButtons[ BURSTMODE_BUTTON ] ]->uiFlags & BUTTON_ENABLED ) ) ) - ChangeWeaponMode( MercPtrs[ gusSelectedSoldier ] ); + ChangeWeaponMode( gusSelectedSoldier ); } else *puiNewEvent = LC_LOOK; @@ -2140,7 +2140,7 @@ void HandleMouseRTX1Button( UINT32 *puiNewEvent ) void HandleMouseRTX2Button( UINT32 *puiNewEvent ) { if ( _KeyDown( ALT ) ) - AutoReload( MercPtrs[ gusSelectedSoldier ] ); + AutoReload( gusSelectedSoldier ); else // Toggle squad's stealth mode..... // For each guy on squad... @@ -2252,7 +2252,7 @@ void HandleRTToggleFireMode( void ) // toggle fire mode if ( ( gpItemPointer == NULL ) && ( gusSelectedSoldier != NOBODY ) && ( ( gsCurInterfacePanel != SM_PANEL ) || ( ButtonList[ iSMPanelButtons[ BURSTMODE_BUTTON ] ]->uiFlags & BUTTON_ENABLED ) ) ) - ChangeWeaponMode( MercPtrs[ gusSelectedSoldier ] ); + ChangeWeaponMode( gusSelectedSoldier ); } void HandleRTLocateSoldier( void ) { diff --git a/Tactical/ShopKeeper Interface.cpp b/Tactical/ShopKeeper Interface.cpp index 72241b74..a09f5020 100644 --- a/Tactical/ShopKeeper Interface.cpp +++ b/Tactical/ShopKeeper Interface.cpp @@ -766,7 +766,7 @@ BOOLEAN EnterShopKeeperInterface() //ADB if we are here, we must be able to talk with an extended ear (CheckIfRadioIsEquipped()) //but if we are physically too far away, we don't have extended arms! - SOLDIERTYPE* pSoldier = MercPtrs[ gusSelectedSoldier ]; + SOLDIERTYPE* pSoldier = gusSelectedSoldier; SOLDIERTYPE* pShopkeeper = NULL; if ( gusIDOfCivTrader != NOBODY ) @@ -826,7 +826,7 @@ BOOLEAN EnterShopKeeperInterface() } // make sure current merc is close enough and eligible to talk to the shopkeeper. - AssertMsg( CanMercInteractWithSelectedShopkeeper( MercPtrs[ gusSelectedSoldier ] ), "Selected merc can't interact with shopkeeper. Send save AM-1"); + AssertMsg( CanMercInteractWithSelectedShopkeeper( gusSelectedSoldier ), "Selected merc can't interact with shopkeeper. Send save AM-1"); // Create a video surface to blt corner of the tactical screen that still shines through vs_desc.fCreateFlags = VSURFACE_CREATE_DEFAULT | VSURFACE_SYSTEM_MEM_USAGE; @@ -2477,7 +2477,7 @@ void EnterShopKeeperInterfaceScreen_NonNPC( INT8 ubArmsDealerID, UINT16 aMercID // Flugente: additional dialogue if ( gusSelectedSoldier != NOBODY ) - AdditionalTacticalCharacterDialogue_CallsLua( MercPtrs[gusSelectedSoldier], ADE_MERCHANT_CHAT, ubArmsDealerID >= 0 ? (UINT32)ubArmsDealerID : 0 ); + AdditionalTacticalCharacterDialogue_CallsLua( gusSelectedSoldier, ADE_MERCHANT_CHAT, ubArmsDealerID >= 0 ? (UINT32)ubArmsDealerID : 0 ); LeaveTacticalScreen( SHOPKEEPER_SCREEN ); } @@ -6780,7 +6780,7 @@ void DealWithItemsStillOnTheTable() } else { - pDropSoldier = MercPtrs[ gusSelectedSoldier ]; + pDropSoldier = gusSelectedSoldier; } // this guy HAS to be valid! @@ -7023,7 +7023,7 @@ void SelectArmsDealersDropItemToGroundRegionCallBack(MOUSE_REGION * pRegion, INT } else { - pDropSoldier = MercPtrs[ gusSelectedSoldier ]; + pDropSoldier = gusSelectedSoldier; } //if we don't have an item, pick one up diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index 2b256bb3..595994bb 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -2763,7 +2763,7 @@ BOOLEAN ReCreateSelectedSoldierLight( ) return(FALSE); } - pSoldier = MercPtrs[gusSelectedSoldier]; + pSoldier = gusSelectedSoldier; return(pSoldier->ReCreateSoldierLight( )); } diff --git a/Tactical/SoldierTooltips.cpp b/Tactical/SoldierTooltips.cpp index 731bb636..0adebc5a 100644 --- a/Tactical/SoldierTooltips.cpp +++ b/Tactical/SoldierTooltips.cpp @@ -132,8 +132,8 @@ void SoldierTooltip( SOLDIERTYPE* pSoldier ) if ( gusSelectedSoldier != NOBODY && gusUIFullTargetID != NOBODY ) { //CHRISL: Changed the second parameter to use the same information as the 'F' hotkey uses. - //iRangeToTarget = GetRangeInCellCoordsFromGridNoDiff( MercPtrs[ gusSelectedSoldier ]->sGridNo, sSoldierGridNo ) / 10; - iRangeToTarget = GetRangeInCellCoordsFromGridNoDiff( MercPtrs[ gusSelectedSoldier ]->sGridNo, MercPtrs[ gusUIFullTargetID ]->sGridNo ) / 10; + //iRangeToTarget = GetRangeInCellCoordsFromGridNoDiff( gusSelectedSoldier->sGridNo, sSoldierGridNo ) / 10; + iRangeToTarget = GetRangeInCellCoordsFromGridNoDiff( gusSelectedSoldier->sGridNo, MercPtrs[ gusUIFullTargetID ]->sGridNo ) / 10; } // WANNE: If we want to show the tooltip of milita and no merc is present in the sector else @@ -145,14 +145,14 @@ void SoldierTooltip( SOLDIERTYPE* pSoldier ) // SANDRO - don't use this if detail set to debug! if ( gGameExternalOptions.gfAllowUDTRange && gGameExternalOptions.ubSoldierTooltipDetailLevel != DL_Debug && !(gTacticalStatus.uiFlags & SHOW_ALL_MERCS) ) { - uiMaxTooltipDistance = (UINT32)( MercPtrs[ gusSelectedSoldier ]->GetMaxDistanceVisible(MercPtrs[ gusUIFullTargetID ]->sGridNo, 0, CALC_FROM_WANTED_DIR) * (gGameExternalOptions.ubUDTModifier)); + uiMaxTooltipDistance = (UINT32)( gusSelectedSoldier->GetMaxDistanceVisible(MercPtrs[ gusUIFullTargetID ]->sGridNo, 0, CALC_FROM_WANTED_DIR) * (gGameExternalOptions.ubUDTModifier)); uiMaxTooltipDistance /= 100; } //SCORE: Otherwise if we're using dynamics then do this // SANDRO - don't use this if detail set to debug! else if ( gGameExternalOptions.fEnableDynamicSoldierTooltips && gGameExternalOptions.ubSoldierTooltipDetailLevel != DL_Debug && !(gTacticalStatus.uiFlags & SHOW_ALL_MERCS) ) { - OBJECTTYPE* pObject = &(MercPtrs[gusSelectedSoldier]->inv[HANDPOS]); + OBJECTTYPE* pObject = &(gusSelectedSoldier->inv[HANDPOS]); for (attachmentList::iterator iter = (*pObject)[0]->attachments.begin(); iter != (*pObject)[0]->attachments.end(); ++iter) { if ( Item[iter->usItem].visionrangebonus > 0 && iter->exists()) { @@ -175,14 +175,14 @@ void SoldierTooltip( SOLDIERTYPE* pSoldier ) { // add 10% to max tooltip viewing distance per level of the merc // sevenfm: fixed incorrect integer calculation - uiMaxTooltipDistance = (INT32)( uiMaxTooltipDistance * ( 1 + ( (FLOAT)( EffectiveExpLevel( MercPtrs[ gusSelectedSoldier ] ) ) / 10.0 ) ) ); // SANDRO - changed to effective level calc + uiMaxTooltipDistance = (INT32)( uiMaxTooltipDistance * ( 1 + ( (FLOAT)( EffectiveExpLevel( gusSelectedSoldier ) ) / 10.0 ) ) ); // SANDRO - changed to effective level calc // sevenfm: this calculation doesn't make sense: disabled //if ( gGameExternalOptions.gfAllowLimitedVision ) // uiMaxTooltipDistance *= 1 - (gGameExternalOptions.ubVisDistDecreasePerRainIntensity / 100); - if ( !(Item[MercPtrs[gusSelectedSoldier]->inv[HEAD1POS].usItem].nightvisionrangebonus > 0) && - !(Item[MercPtrs[gusSelectedSoldier]->inv[HEAD2POS].usItem].nightvisionrangebonus > 0) && + if ( !(Item[gusSelectedSoldier->inv[HEAD1POS].usItem].nightvisionrangebonus > 0) && + !(Item[gusSelectedSoldier->inv[HEAD2POS].usItem].nightvisionrangebonus > 0) && !DayTime() ) { // if night reduce max tooltip viewing distance by a factor of 4 if merc is not wearing NVG @@ -321,7 +321,7 @@ void SoldierTooltip( SOLDIERTYPE* pSoldier ) if ( ubTooltipDetailLevel < DL_Full) { // Get the current selected merc - SOLDIERTYPE* pMerc = MercPtrs[ gusSelectedSoldier ]; + SOLDIERTYPE* pMerc = gusSelectedSoldier; if ( pMerc->aiData.bOppList[pSoldier->ubID] != SEEN_CURRENTLY ) { diff --git a/Tactical/Squads.cpp b/Tactical/Squads.cpp index 355bbf8a..26d7f5c3 100644 --- a/Tactical/Squads.cpp +++ b/Tactical/Squads.cpp @@ -926,7 +926,7 @@ BOOLEAN SetCurrentSquad( INT32 iCurrentSquad, BOOLEAN fForce ) // check if the currently selected guy is on this squad, if not, get the first one on the new squad if ( gusSelectedSoldier != NOBODY ) { - if( Menptr[ gusSelectedSoldier ].bAssignment != iCurrentTacticalSquad ) + if( gusSelectedSoldier->bAssignment != iCurrentTacticalSquad ) { // ATE: Changed this to FALSE for ackoledgement sounds.. sounds bad if just starting/entering sector.. SelectSoldier( Squad[ iCurrentTacticalSquad ][ 0 ]->ubID, FALSE, TRUE ); diff --git a/Tactical/Strategic Exit GUI.cpp b/Tactical/Strategic Exit GUI.cpp index 58d4459c..c8b87e8d 100644 --- a/Tactical/Strategic Exit GUI.cpp +++ b/Tactical/Strategic Exit GUI.cpp @@ -177,7 +177,7 @@ BOOLEAN InternalInitSectorExitMenu( UINT8 ubDirection, INT32 sAdditionalData )// } // anv: vehicle always move with all passengers inside - if( MercPtrs[gusSelectedSoldier]->bAssignment == VEHICLE ) + if( gusSelectedSoldier->bAssignment == VEHICLE ) { gExitDialog.fSingleMoveDisabled = TRUE; gExitDialog.fSingleMoveOn = FALSE; @@ -217,7 +217,7 @@ BOOLEAN InternalInitSectorExitMenu( UINT8 ubDirection, INT32 sAdditionalData )// gExitDialog.fGotoSector = TRUE; } - gExitDialog.ubNumPeopleOnSquad = NumberOfPlayerControllableMercsInSquad( MercPtrs[ gusSelectedSoldier ]->bAssignment ); + gExitDialog.ubNumPeopleOnSquad = NumberOfPlayerControllableMercsInSquad( gusSelectedSoldier->bAssignment ); //Determine for( i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; i++ ) @@ -230,8 +230,8 @@ BOOLEAN InternalInitSectorExitMenu( UINT8 ubDirection, INT32 sAdditionalData )// if( !pSoldier->flags.fBetweenSectors && pSoldier->sSectorX == gWorldSectorX && pSoldier->sSectorY == gWorldSectorY && pSoldier->bSectorZ == gbWorldSectorZ && pSoldier->stats.bLife >= OKLIFE && - ( pSoldier->bAssignment != MercPtrs[ gusSelectedSoldier ]->bAssignment || - ( pSoldier->bAssignment == VEHICLE && pSoldier->iVehicleId != MercPtrs[ gusSelectedSoldier ]->iVehicleId ) ) && + ( pSoldier->bAssignment != gusSelectedSoldier->bAssignment || + ( pSoldier->bAssignment == VEHICLE && pSoldier->iVehicleId != gusSelectedSoldier->iVehicleId ) ) && pSoldier->bAssignment != ASSIGNMENT_POW && pSoldier->bAssignment != IN_TRANSIT && pSoldier->bAssignment != ASSIGNMENT_DEAD && pSoldier->bAssignment != ASSIGNMENT_MINIEVENT && pSoldier->bAssignment != ASSIGNMENT_REBELCOMMAND && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) ) { //KM: We need to determine if there are more than one squad (meaning other concious mercs in a different squad or assignment) @@ -245,7 +245,7 @@ BOOLEAN InternalInitSectorExitMenu( UINT8 ubDirection, INT32 sAdditionalData )// // Double check that ... // if we are a EPC and are the selected guy, make single move off and disable it.... - if ( AM_AN_EPC( MercPtrs[ gusSelectedSoldier ] ) ) + if ( AM_AN_EPC( gusSelectedSoldier ) ) { // Check if there are more than one in this squad if ( gExitDialog.ubNumPeopleOnSquad > 1 ) @@ -268,7 +268,7 @@ BOOLEAN InternalInitSectorExitMenu( UINT8 ubDirection, INT32 sAdditionalData )// { continue; } - if( MercPtrs[ i ]->bAssignment == MercPtrs[ gusSelectedSoldier ]->bAssignment ) + if( MercPtrs[ i ]->bAssignment == gusSelectedSoldier->bAssignment ) { if( AM_AN_EPC( MercPtrs[ i ] ) ) { @@ -550,7 +550,7 @@ void UpdateSectorExitMenu( ) if( gExitDialog.fSelectedMercIsEPC ) { //EPCs cannot leave the sector alone and must be escorted CHAR16 str[ 256 ]; - swprintf( str, pExitingSectorHelpText[ EXIT_GUI_ESCORTED_CHARACTERS_MUST_BE_ESCORTED_HELPTEXT ], MercPtrs[ gusSelectedSoldier ]->name ); + swprintf( str, pExitingSectorHelpText[ EXIT_GUI_ESCORTED_CHARACTERS_MUST_BE_ESCORTED_HELPTEXT ], gusSelectedSoldier->name ); SetButtonFastHelpText( gExitDialog.uiSingleMoveButton, str ); SetRegionFastHelpText( &gExitDialog.SingleRegion, str ); } @@ -561,26 +561,26 @@ void UpdateSectorExitMenu( ) CHAR16 str[ 256 ]; if( !gExitDialog.fSquadHasMultipleEPCs ) { - if( gMercProfiles[ MercPtrs[ gusSelectedSoldier ]->ubProfile ].bSex == MALE ) + if( gMercProfiles[ gusSelectedSoldier->ubProfile ].bSex == MALE ) { //male singular - swprintf( str, pExitingSectorHelpText[ EXIT_GUI_MERC_CANT_ISOLATE_EPC_HELPTEXT_MALE_SINGULAR ], MercPtrs[ gusSelectedSoldier ]->name, + swprintf( str, pExitingSectorHelpText[ EXIT_GUI_MERC_CANT_ISOLATE_EPC_HELPTEXT_MALE_SINGULAR ], gusSelectedSoldier->name, MercPtrs[ gExitDialog.bSingleMoveWillIsolateEPC ]->name ); } else { //female singular - swprintf( str, pExitingSectorHelpText[ EXIT_GUI_MERC_CANT_ISOLATE_EPC_HELPTEXT_FEMALE_SINGULAR ], MercPtrs[ gusSelectedSoldier ]->name, + swprintf( str, pExitingSectorHelpText[ EXIT_GUI_MERC_CANT_ISOLATE_EPC_HELPTEXT_FEMALE_SINGULAR ], gusSelectedSoldier->name, MercPtrs[ gExitDialog.bSingleMoveWillIsolateEPC ]->name ); } } else { - if( gMercProfiles[ MercPtrs[ gusSelectedSoldier ]->ubProfile ].bSex == MALE ) + if( gMercProfiles[ gusSelectedSoldier->ubProfile ].bSex == MALE ) { //male plural - swprintf( str, pExitingSectorHelpText[ EXIT_GUI_MERC_CANT_ISOLATE_EPC_HELPTEXT_MALE_PLURAL ], MercPtrs[ gusSelectedSoldier ]->name ); + swprintf( str, pExitingSectorHelpText[ EXIT_GUI_MERC_CANT_ISOLATE_EPC_HELPTEXT_MALE_PLURAL ], gusSelectedSoldier->name ); } else { //female plural - swprintf( str, pExitingSectorHelpText[ EXIT_GUI_MERC_CANT_ISOLATE_EPC_HELPTEXT_FEMALE_PLURAL ], MercPtrs[ gusSelectedSoldier ]->name ); + swprintf( str, pExitingSectorHelpText[ EXIT_GUI_MERC_CANT_ISOLATE_EPC_HELPTEXT_FEMALE_PLURAL ], gusSelectedSoldier->name ); } } SetButtonFastHelpText( gExitDialog.uiSingleMoveButton, str ); @@ -592,7 +592,7 @@ void UpdateSectorExitMenu( ) CHAR16 str[ 256 ]; EnableButton( gExitDialog.uiSingleMoveButton ); MSYS_EnableRegion(&(gExitDialog.SingleRegion) ); - swprintf( str, pExitingSectorHelpText[ EXIT_GUI_SINGLE_TRAVERSAL_WILL_SEPARATE_SQUADS_HELPTEXT ], MercPtrs[ gusSelectedSoldier ]->name ); + swprintf( str, pExitingSectorHelpText[ EXIT_GUI_SINGLE_TRAVERSAL_WILL_SEPARATE_SQUADS_HELPTEXT ], gusSelectedSoldier->name ); SetButtonFastHelpText( gExitDialog.uiSingleMoveButton, str ); SetRegionFastHelpText( &gExitDialog.SingleRegion, str ); } @@ -762,12 +762,12 @@ void RemoveSectorExitMenu( BOOLEAN fOk ) gfIgnoreScrolling = FALSE; // if we are an EPC, don't allow this if nobody else on squad - if ( fOk && AM_AN_EPC( MercPtrs[ gusSelectedSoldier ] ) ) + if ( fOk && AM_AN_EPC( gusSelectedSoldier ) ) { // Check if there are more than one in this squad if ( gExitDialog.ubNumPeopleOnSquad == 0 ) { - swprintf( Str, pMessageStrings[ MSG_EPC_CANT_TRAVERSE ], MercPtrs[ gusSelectedSoldier ]->name ); + swprintf( Str, pMessageStrings[ MSG_EPC_CANT_TRAVERSE ], gusSelectedSoldier->name ); DoMessageBox( MSG_BOX_BASIC_STYLE, Str, GAME_SCREEN, ( UINT8 )MSG_BOX_FLAG_OK, NULL, NULL ); return; diff --git a/Tactical/TeamTurns.cpp b/Tactical/TeamTurns.cpp index 6173458d..d3962619 100644 --- a/Tactical/TeamTurns.cpp +++ b/Tactical/TeamTurns.cpp @@ -212,10 +212,10 @@ void StartPlayerTeamTurn( BOOLEAN fDoBattleSnd, BOOLEAN fEnteringCombatMode ) if ( gusSelectedSoldier != NOBODY ) { // Check if this guy is able to be selected.... - if ( MercPtrs[ gusSelectedSoldier ]->stats.bLife < OKLIFE ) + if ( gusSelectedSoldier->stats.bLife < OKLIFE ) { DebugMsg(TOPIC_JA2INTERRUPT,DBG_LEVEL_3,String("StartPlayerTeamTurn: SelectNextAvailSoldier")); - SelectNextAvailSoldier( MercPtrs[ gusSelectedSoldier ] ); + SelectNextAvailSoldier( gusSelectedSoldier ); } else { @@ -230,7 +230,7 @@ void StartPlayerTeamTurn( BOOLEAN fDoBattleSnd, BOOLEAN fEnteringCombatMode ) if ( fDoBattleSnd ) { // Say ATTENTION SOUND... - MercPtrs[ gusSelectedSoldier ]->DoMercBattleSound( BATTLE_SOUND_ATTN1 ); + gusSelectedSoldier->DoMercBattleSound( BATTLE_SOUND_ATTN1 ); } if ( gsInterfaceLevel == 1 ) @@ -1289,14 +1289,14 @@ void EndInterrupt( BOOLEAN fMarkInterruptOccurred ) gfHiddenInterrupt = FALSE; // If we can continue a move, do so! - if ( MercPtrs[ gusSelectedSoldier ]->flags.fNoAPToFinishMove && pSoldier->ubReasonCantFinishMove != REASON_STOPPED_SIGHT ) + if ( gusSelectedSoldier->flags.fNoAPToFinishMove && pSoldier->ubReasonCantFinishMove != REASON_STOPPED_SIGHT ) { // Continue - MercPtrs[ gusSelectedSoldier ]->AdjustNoAPToFinishMove( FALSE ); + gusSelectedSoldier->AdjustNoAPToFinishMove( FALSE ); - if ( MercPtrs[ gusSelectedSoldier ]->sGridNo != MercPtrs[ gusSelectedSoldier ]->pathing.sFinalDestination ) + if ( gusSelectedSoldier->sGridNo != gusSelectedSoldier->pathing.sFinalDestination ) { - MercPtrs[ gusSelectedSoldier ]->EVENT_GetNewSoldierPath( MercPtrs[ gusSelectedSoldier ]->pathing.sFinalDestination, MercPtrs[ gusSelectedSoldier ]->usUIMovementMode ); + gusSelectedSoldier->EVENT_GetNewSoldierPath( gusSelectedSoldier->pathing.sFinalDestination, gusSelectedSoldier->usUIMovementMode ); } else { @@ -1332,7 +1332,7 @@ void EndInterrupt( BOOLEAN fMarkInterruptOccurred ) SlideTo( NOWHERE, gusSelectedSoldier, NOBODY ,SETLOCATOR); // Say ATTENTION SOUND... - MercPtrs[ gusSelectedSoldier ]->DoMercBattleSound( BATTLE_SOUND_ATTN1 ); + gusSelectedSoldier->DoMercBattleSound( BATTLE_SOUND_ATTN1 ); if ( gsInterfaceLevel == 1 ) { @@ -1692,7 +1692,7 @@ BOOLEAN StandardInterruptConditionsMet( SOLDIERTYPE * pSoldier, UINT16 ubOpponen // the selected character, ie. his friends... if ( pOpponent->bTeam == gbPlayerNum ) { - if ((ubOpponentID != gusSelectedSoldier) && (pSoldier->bSide != Menptr[gusSelectedSoldier].bSide)) + if ((ubOpponentID != gusSelectedSoldier) && (pSoldier->bSide != gusSelectedSoldier->bSide)) { return( FALSE ); } @@ -1714,7 +1714,7 @@ BOOLEAN StandardInterruptConditionsMet( SOLDIERTYPE * pSoldier, UINT16 ubOpponen } /* old DG code for same: - if ((ubOpponentID != gusSelectedSoldier) && (pSoldier->bSide != Menptr[gusSelectedSoldier].bSide)) + if ((ubOpponentID != gusSelectedSoldier) && (pSoldier->bSide != gusSelectedSoldier->bSide)) { return(FALSE); } @@ -2356,7 +2356,7 @@ void DoneAddingToIntList( SOLDIERTYPE * pSoldier, BOOLEAN fChange, UINT8 ubInter send_interrupt( npSoldier ); - SOLDIERTYPE* pMerc = MercPtrs[ gusSelectedSoldier ]; + SOLDIERTYPE* pMerc = gusSelectedSoldier; //AdjustNoAPToFinishMove( pMerc, TRUE ); pMerc->HaultSoldierFromSighting(TRUE); //pMerc->fTurningFromPronePosition = FALSE;// hmmm ?? diff --git a/Tactical/Turn Based Input.cpp b/Tactical/Turn Based Input.cpp index 6346f087..bdd31b7f 100644 --- a/Tactical/Turn Based Input.cpp +++ b/Tactical/Turn Based Input.cpp @@ -493,7 +493,7 @@ void QueryTBLeftButton( UINT32 *puiNewEvent ) { BOOLEAN fResult; - if ( ( fResult = UIOKMoveDestination( MercPtrs[ gusSelectedSoldier ], usMapPos ) ) == 1 ) + if ( ( fResult = UIOKMoveDestination( gusSelectedSoldier, usMapPos ) ) == 1 ) { // ATE: CHECK IF WE CAN GET TO POSITION // Check if we are not in combat @@ -998,10 +998,10 @@ void QueryTBRightButton( UINT32 *puiNewEvent ) gfFirstCycleMovementStarted = TRUE; // OK, set this guy's movement mode to crawling fo rthat we will start cycling in run..... - if ( MercPtrs[ gusSelectedSoldier ]->usUIMovementMode != RUNNING ) + if ( gusSelectedSoldier->usUIMovementMode != RUNNING ) { // ATE: UNLESS WE ARE IN RUNNING MODE ALREADY - MercPtrs[ gusSelectedSoldier ]->usUIMovementMode = CRAWLING; + gusSelectedSoldier->usUIMovementMode = CRAWLING; } } @@ -1016,7 +1016,7 @@ void QueryTBRightButton( UINT32 *puiNewEvent ) { gfBeginBurstSpreadTracking = FALSE; gfRTClickLeftHoldIntercepted = TRUE; - MercPtrs[ gusSelectedSoldier ]->flags.fDoSpread = FALSE; + gusSelectedSoldier->flags.fDoSpread = FALSE; fClickHoldIntercepted = TRUE; *puiNewEvent = A_END_ACTION; gCurrentUIMode = MOVE_MODE; @@ -1070,7 +1070,7 @@ void QueryTBRightButton( UINT32 *puiNewEvent ) case MOVE_MODE: // anv: don't switch if passengers are blocked from attacking - pSoldier = MercPtrs[ gusSelectedSoldier ]; + pSoldier = gusSelectedSoldier; if( pSoldier->flags.uiStatusFlags & ( SOLDIER_DRIVER | SOLDIER_PASSENGER ) ) { SOLDIERTYPE *pVehicle = GetSoldierStructureForVehicle( pSoldier->iVehicleId ); @@ -1627,8 +1627,8 @@ void CheatCreateItem( ) CreateItem( usitem, status, &newobj ); (newobj)[0]->data.bTemperature = temperature; - if ( !AutoPlaceObject( MercPtrs[ gusSelectedSoldier ], &newobj, FALSE ) ) - AddItemToPool( MercPtrs[ gusSelectedSoldier ]->sGridNo, &newobj, 1, 0, 0, -1 ); + if ( !AutoPlaceObject( gusSelectedSoldier, &newobj, FALSE ) ) + AddItemToPool( gusSelectedSoldier->sGridNo, &newobj, 1, 0, 0, -1 ); } } @@ -2121,7 +2121,7 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) gfRTClickLeftHoldIntercepted = TRUE; if ( gusSelectedSoldier != NOBODY ) { - MercPtrs[ gusSelectedSoldier ]->flags.fDoSpread = FALSE; + gusSelectedSoldier->flags.fDoSpread = FALSE; } // Before anything, delete popup box! @@ -2223,11 +2223,11 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) continue; } else if (gusSelectedSoldier != NOBODY && - MercPtrs[gusSelectedSoldier] && - !(gAnimControl[MercPtrs[gusSelectedSoldier]->usAnimState].uiFlags & ANIM_STATIONARY)) + gusSelectedSoldier && + !(gAnimControl[gusSelectedSoldier->usAnimState].uiFlags & ANIM_STATIONARY)) { // If soldier is not stationary, stop - MercPtrs[gusSelectedSoldier]->StopSoldier(); + gusSelectedSoldier->StopSoldier(); *puiNewEvent = A_CHANGE_TO_MOVE; continue; } @@ -2235,21 +2235,21 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) // sevenfm: also stop dragging if (gusSelectedSoldier != NOBODY && - MercPtrs[gusSelectedSoldier] && - MercPtrs[gusSelectedSoldier]->IsDragging(false)) + gusSelectedSoldier && + gusSelectedSoldier->IsDragging(false)) { - MercPtrs[gusSelectedSoldier]->CancelDrag(); - DirtyMercPanelInterface(MercPtrs[gusSelectedSoldier], DIRTYLEVEL2); + gusSelectedSoldier->CancelDrag(); + DirtyMercPanelInterface(gusSelectedSoldier, DIRTYLEVEL2); continue; } // sevenfm: unready weapon if (gusSelectedSoldier != NOBODY && - MercPtrs[gusSelectedSoldier] && - WeaponReady(MercPtrs[gusSelectedSoldier])) + gusSelectedSoldier && + WeaponReady(gusSelectedSoldier)) { - MercPtrs[gusSelectedSoldier]->InternalSoldierReadyWeapon(MercPtrs[gusSelectedSoldier]->ubDirection, TRUE, FALSE); - HandleSight(MercPtrs[gusSelectedSoldier], SIGHT_LOOK); + gusSelectedSoldier->InternalSoldierReadyWeapon(gusSelectedSoldier->ubDirection, TRUE, FALSE); + HandleSight(gusSelectedSoldier, SIGHT_LOOK); continue; } } @@ -2313,19 +2313,19 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) // { // if ( gusSelectedSoldier != NOBODY ) // { - // if ( gTacticalStatus.uiFlags & TURNBASED && !MercPtrs[ gusSelectedSoldier ]->fDontChargeReadyAPs ) + // if ( gTacticalStatus.uiFlags & TURNBASED && !gusSelectedSoldier->fDontChargeReadyAPs ) // { - // INT16 apCost = GetAPsToReadyWeapon( MercPtrs[ gusSelectedSoldier ], 0 ); - // if (MercPtrs[ gusSelectedSoldier ]->bActionPoints >= apCost ) + // INT16 apCost = GetAPsToReadyWeapon( gusSelectedSoldier, 0 ); + // if (gusSelectedSoldier->bActionPoints >= apCost ) // { - // DeductPoints( MercPtrs[ gusSelectedSoldier ],apCost , 0 ); - // DirtyMercPanelInterface( MercPtrs[ gusSelectedSoldier ], DIRTYLEVEL2 ); - // SoldierReadyWeapon( MercPtrs[ gusSelectedSoldier ] ); + // DeductPoints( gusSelectedSoldier,apCost , 0 ); + // DirtyMercPanelInterface( gusSelectedSoldier, DIRTYLEVEL2 ); + // SoldierReadyWeapon( gusSelectedSoldier ); // } // } // else // { - // SoldierReadyWeapon( MercPtrs[ gusSelectedSoldier ] ); + // SoldierReadyWeapon( gusSelectedSoldier ); // } // } @@ -2344,7 +2344,7 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) for ( i = 0; i < 1000; i++ ) { - CalculateLaunchItemChanceToGetThrough( MercPtrs[ gusSelectedSoldier ], &(MercPtrs[ gusSelectedSoldier ]->inv[ HANDPOS ] ), usMapPos, 0, 0, &sGridNo, TRUE, (INT8 *)&ubLevel, TRUE ); + CalculateLaunchItemChanceToGetThrough( gusSelectedSoldier, &(gusSelectedSoldier->inv[ HANDPOS ] ), usMapPos, 0, 0, &sGridNo, TRUE, (INT8 *)&ubLevel, TRUE ); } ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_TESTVERSION, L"Physics 100 times: %d", ( GetJA2Clock( ) - iTime ) ); @@ -2412,7 +2412,7 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) //Select next squad iCurrentSquad = CurrentSquad( ); - pNewSoldier = FindNextActiveSquad( MercPtrs[ gusSelectedSoldier ] ); + pNewSoldier = FindNextActiveSquad( gusSelectedSoldier ); if ( pNewSoldier->bAssignment != iCurrentSquad ) { @@ -2436,7 +2436,7 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) { //Select next merc UINT16 bID; - bID = FindNextMercInTeamPanel( MercPtrs[ gusSelectedSoldier ], FALSE, FALSE ); + bID = FindNextMercInTeamPanel( gusSelectedSoldier, FALSE, FALSE ); HandleLocateSelectMerc( bID, LOCATEANDSELECT_MERC ); @@ -2458,7 +2458,7 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) if ( fCtrl ) { if ( gusSelectedSoldier != NOBODY ) - SwapMercPortraits( MercPtrs[ gusSelectedSoldier ], -1 ); + SwapMercPortraits( gusSelectedSoldier, -1 ); } break; @@ -2467,7 +2467,7 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) if ( fCtrl ) { if ( gusSelectedSoldier != NOBODY ) - SwapMercPortraits( MercPtrs[ gusSelectedSoldier ], 1 ); + SwapMercPortraits( gusSelectedSoldier, 1 ); } break; @@ -2498,10 +2498,10 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) // Lalien: commented out, to fix "end move & LOS bug" (same button has two different actions) // if ( gusSelectedSoldier != NOBODY ) // { - // if ( CheckForMercContMove( MercPtrs[ gusSelectedSoldier ] ) ) + // if ( CheckForMercContMove( gusSelectedSoldier ) ) // { // // Continue - // ContinueMercMovement( MercPtrs[ gusSelectedSoldier ] ); + // ContinueMercMovement( gusSelectedSoldier ); // ErasePath( TRUE ); // } // } @@ -2521,7 +2521,7 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) // nothing in hand and either not in SM panel, or the matching button is enabled if we are in SM panel if ( ( gpItemPointer == NULL ) ) { - GotoHeigherStance( MercPtrs[ gusSelectedSoldier ] ); + GotoHeigherStance( gusSelectedSoldier ); } } } @@ -2541,7 +2541,7 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) // nothing in hand and either not in SM panel, or the matching button is enabled if we are in SM panel if ( ( gpItemPointer == NULL ) ) { - GotoLowerStance( MercPtrs[ gusSelectedSoldier ] ); + GotoLowerStance( gusSelectedSoldier ); } } } @@ -2921,7 +2921,7 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) { if ( gusSelectedSoldier != NOBODY ) { - HandleTacticalFunctionSelection(MercPtrs[ gusSelectedSoldier ], usMapPos ); + HandleTacticalFunctionSelection(gusSelectedSoldier, usMapPos ); } } else if ( fAlt ) @@ -2994,8 +2994,8 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) if (CHEATER_CHEAT_LEVEL()) { //ChangeSoldiersBodyType( TANK_NW, TRUE ); - // MercPtrs[ gusSelectedSoldier ]->flags.uiStatusFlags |= SOLDIER_CREATURE; - //EVENT_InitNewSoldierAnim( MercPtrs[ gusSelectedSoldier ], CRIPPLE_BEG, 0 , TRUE ); + // gusSelectedSoldier->flags.uiStatusFlags |= SOLDIER_CREATURE; + //EVENT_InitNewSoldierAnim( gusSelectedSoldier, CRIPPLE_BEG, 0 , TRUE ); } } else if( fAlt ) @@ -3034,12 +3034,12 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) { if (CHEATER_CHEAT_LEVEL()) { - MercPtrs[gusSelectedSoldier]->EVENT_InitNewSoldierAnim(KID_SKIPPING, 0, TRUE); + gusSelectedSoldier->EVENT_InitNewSoldierAnim(KID_SKIPPING, 0, TRUE); //ChangeSoldiersBodyType( LARVAE_MONSTER, TRUE ); - //MercPtrs[ gusSelectedSoldier ]->usAttackingWeapon = TANK_CANNON; + //gusSelectedSoldier->usAttackingWeapon = TANK_CANNON; //LocateSoldier( gusSelectedSoldier, FALSE ); - //EVENT_FireSoldierWeapon( MercPtrs[ gusSelectedSoldier ], sMapPos ); + //EVENT_FireSoldierWeapon( gusSelectedSoldier, sMapPos ); } } else if( fAlt ) @@ -3510,7 +3510,7 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) if ( gusSelectedSoldier != NOBODY ) { - pSoldier = MercPtrs[ gusSelectedSoldier ]; + pSoldier = gusSelectedSoldier; if ( pSoldier->aiData.bOppCnt > 0 ) { @@ -3529,7 +3529,7 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) //CHRISL: drop all items if ( gusSelectedSoldier != NOBODY && !(gTacticalStatus.fEnemyInSector) ) { - SOLDIERTYPE *pSoldier = MercPtrs[ gusSelectedSoldier ]; + SOLDIERTYPE *pSoldier = gusSelectedSoldier; for(int i = BODYPOSFINAL; iinv[i].exists() == true) @@ -3593,12 +3593,12 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) if ( gfUIFullTargetFound ) { //Display the range to the target - DisplayRangeToTarget( MercPtrs[gusSelectedSoldier], MercPtrs[gusUIFullTargetID]->sGridNo ); + DisplayRangeToTarget( gusSelectedSoldier, MercPtrs[gusUIFullTargetID]->sGridNo ); } else { //Display the range to the target - DisplayRangeToTarget( MercPtrs[gusSelectedSoldier], usGridNo ); + DisplayRangeToTarget( gusSelectedSoldier, usGridNo ); } } @@ -4022,7 +4022,7 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) //CHRISL: Swap gunsling if ( gusSelectedSoldier != NOBODY ) { - SOLDIERTYPE *pSoldier = MercPtrs[ gusSelectedSoldier ]; + SOLDIERTYPE *pSoldier = gusSelectedSoldier; if ( fAlt ) // switch to knife, or from knife to gun @@ -4324,7 +4324,7 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) { if ( CHEATER_CHEAT_LEVEL( ) ) { - ReloadWeapon( MercPtrs[ gusSelectedSoldier ], MercPtrs[ gusSelectedSoldier ]->ubAttackingHand ); + ReloadWeapon( gusSelectedSoldier, gusSelectedSoldier->ubAttackingHand ); } else HandleTBReload(); @@ -4355,7 +4355,7 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) { if ( fAlt ) { - RemoveCharacterFromSquads( MercPtrs[gusSelectedSoldier] ); + RemoveCharacterFromSquads( gusSelectedSoldier ); } else if ( !fDisableMapInterfaceDueToBattle && !( gTacticalStatus.uiFlags & ENGAGED_IN_CONV ) && !is_networked ) { @@ -4475,7 +4475,7 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) else if ( fAlt && fShift ) { //resort Team by ubID - SortSquadByID(MercPtrs[gusSelectedSoldier]->bTeam); + SortSquadByID(gusSelectedSoldier->bTeam); } else { @@ -4597,7 +4597,7 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) { if ( gusSelectedSoldier != NOBODY ) { - CreateItem( FLAMETHROWER, 100, &( MercPtrs[ gusSelectedSoldier ]->inv[ HANDPOS ]) ); + CreateItem( FLAMETHROWER, 100, &( gusSelectedSoldier->inv[ HANDPOS ]) ); } } } @@ -4642,7 +4642,7 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) //Check if we have a good selected guy if ( gusSelectedSoldier != NOBODY ) { - pSoldier1 = MercPtrs[ gusSelectedSoldier ]; + pSoldier1 = gusSelectedSoldier; BOOLEAN fFoundGoodTarget = FALSE; if ( gfUIFullTargetFound ) @@ -4879,7 +4879,7 @@ BOOLEAN HandleCheckForExitArrowsInput( BOOLEAN fAdjustConfirm ) } else if( gfLoneEPCAttemptingTraversal ) { - ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_UI_FEEDBACK, pExitingSectorHelpText[ EXIT_GUI_ESCORTED_CHARACTERS_CANT_LEAVE_SECTOR_ALONE_STR ], MercPtrs[ gusSelectedSoldier ]->GetName() ); + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_UI_FEEDBACK, pExitingSectorHelpText[ EXIT_GUI_ESCORTED_CHARACTERS_CANT_LEAVE_SECTOR_ALONE_STR ], gusSelectedSoldier->GetName() ); gfLoneEPCAttemptingTraversal = FALSE; } else if( gubLoneMercAttemptingToAbandonEPCs ) @@ -4887,26 +4887,26 @@ BOOLEAN HandleCheckForExitArrowsInput( BOOLEAN fAdjustConfirm ) CHAR16 str[256]; if( gubLoneMercAttemptingToAbandonEPCs == 1 ) { //Use the singular version of the string - if( gMercProfiles[ MercPtrs[ gusSelectedSoldier ]->ubProfile ].bSex == MALE ) + if( gMercProfiles[ gusSelectedSoldier->ubProfile ].bSex == MALE ) { //male singular - swprintf( str, pExitingSectorHelpText[ EXIT_GUI_MERC_CANT_ISOLATE_EPC_HELPTEXT_MALE_SINGULAR ], MercPtrs[ gusSelectedSoldier ]->GetName(), + swprintf( str, pExitingSectorHelpText[ EXIT_GUI_MERC_CANT_ISOLATE_EPC_HELPTEXT_MALE_SINGULAR ], gusSelectedSoldier->GetName(), MercPtrs[ gbPotentiallyAbandonedEPCSlotID ]->GetName() ); } else { //female singular - swprintf( str, pExitingSectorHelpText[ EXIT_GUI_MERC_CANT_ISOLATE_EPC_HELPTEXT_FEMALE_SINGULAR ], MercPtrs[ gusSelectedSoldier ]->GetName(), + swprintf( str, pExitingSectorHelpText[ EXIT_GUI_MERC_CANT_ISOLATE_EPC_HELPTEXT_FEMALE_SINGULAR ], gusSelectedSoldier->GetName(), MercPtrs[ gbPotentiallyAbandonedEPCSlotID ]->GetName() ); } } else { //Use the plural version of the string - if( gMercProfiles[ MercPtrs[ gusSelectedSoldier ]->ubProfile ].bSex == MALE ) + if( gMercProfiles[ gusSelectedSoldier->ubProfile ].bSex == MALE ) { //male plural - swprintf( str, pExitingSectorHelpText[ EXIT_GUI_MERC_CANT_ISOLATE_EPC_HELPTEXT_MALE_PLURAL ], MercPtrs[ gusSelectedSoldier ]->GetName() ); + swprintf( str, pExitingSectorHelpText[ EXIT_GUI_MERC_CANT_ISOLATE_EPC_HELPTEXT_MALE_PLURAL ], gusSelectedSoldier->GetName() ); } else { //female plural - swprintf( str, pExitingSectorHelpText[ EXIT_GUI_MERC_CANT_ISOLATE_EPC_HELPTEXT_FEMALE_PLURAL ], MercPtrs[ gusSelectedSoldier ]->GetName() ); + swprintf( str, pExitingSectorHelpText[ EXIT_GUI_MERC_CANT_ISOLATE_EPC_HELPTEXT_FEMALE_PLURAL ], gusSelectedSoldier->GetName() ); } } ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_UI_FEEDBACK, str ); @@ -4918,7 +4918,7 @@ BOOLEAN HandleCheckForExitArrowsInput( BOOLEAN fAdjustConfirm ) } else { - ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_UI_FEEDBACK, TacticalStr[ MERC_IS_TOO_FAR_AWAY_STR ], MercPtrs[ gusSelectedSoldier ]->GetName() ); + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_UI_FEEDBACK, TacticalStr[ MERC_IS_TOO_FAR_AWAY_STR ], gusSelectedSoldier->GetName() ); } return( TRUE ); @@ -5148,7 +5148,7 @@ void CycleSelectedMercsItem() if( gusSelectedSoldier != NOBODY ) { // Get soldier... - pSoldier = MercPtrs[ gusSelectedSoldier ]; + pSoldier = gusSelectedSoldier; UINT16 usOldHandItem = pSoldier->inv[HANDPOS].usItem; @@ -5377,7 +5377,7 @@ void SetBurstMode() { if ( gusSelectedSoldier != NOBODY ) { - ChangeWeaponMode( MercPtrs[ gusSelectedSoldier ] ); + ChangeWeaponMode( gusSelectedSoldier ); } } @@ -5386,12 +5386,12 @@ void SetScopeMode( INT32 usMapPos ) if ( gusSelectedSoldier != NOBODY ) { if ( GetMouseMapPos( &usMapPos )) - ChangeScopeMode( MercPtrs[ gusSelectedSoldier ], usMapPos ); + ChangeScopeMode( gusSelectedSoldier, usMapPos ); else - ChangeScopeMode( MercPtrs[ gusSelectedSoldier ], NOWHERE ); + ChangeScopeMode( gusSelectedSoldier, NOWHERE ); // reevaluate sight - ManLooksForOtherTeams( MercPtrs[ gusSelectedSoldier ] ); + ManLooksForOtherTeams( gusSelectedSoldier ); } } #pragma optimize("", off) @@ -6115,14 +6115,14 @@ INT8 HandleMoveModeInteractiveClick( INT32 usMapPos, UINT32 *puiNewEvent ) if ( fContinue ) { - sActionGridNo = FindAdjacentGridEx( MercPtrs[ gusSelectedSoldier ], sIntTileGridNo, &ubDirection, NULL, FALSE, TRUE ); + sActionGridNo = FindAdjacentGridEx( gusSelectedSoldier, sIntTileGridNo, &ubDirection, NULL, FALSE, TRUE ); if ( sActionGridNo == -1 ) { sActionGridNo = sIntTileGridNo; } // If this is not the same tile as ours, check if we can get to dest! - if ( sActionGridNo != MercPtrs[ gusSelectedSoldier ]->sGridNo && gsCurrentActionPoints == 0 ) + if ( sActionGridNo != gusSelectedSoldier->sGridNo && gsCurrentActionPoints == 0 ) { ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_UI_FEEDBACK, TacticalStr[ NO_PATH ] ); bReturnCode = -1; @@ -6403,7 +6403,7 @@ void HandleStanceChangeFromUIKeys( UINT8 ubAnimHeight ) { if( gusSelectedSoldier != NOBODY ) { - pSoldier = MercPtrs[ gusSelectedSoldier ]; + pSoldier = gusSelectedSoldier; // silversurfer: If we decide to stand up or press "s" again while we are standing we should reset movement to walk mode. // If we want to run we have to press "r" which is handled elsewhere. if ( ubAnimHeight == ANIM_STAND ) @@ -6508,9 +6508,9 @@ void HandleStealthChangeFromUIKeys( ) { if( gusSelectedSoldier != NOBODY ) { - if ( !AM_A_ROBOT( MercPtrs[ gusSelectedSoldier ] ) ) + if ( !AM_A_ROBOT( gusSelectedSoldier ) ) { - ToggleStealthMode( MercPtrs[ gusSelectedSoldier ] ); + ToggleStealthMode( gusSelectedSoldier ); } } } @@ -7475,12 +7475,12 @@ void HandleMouseTBWheel( void ) //change stance ->DOWN if ( _KeyDown( ALT ) ) { if ( (gusSelectedSoldier != NOBODY) && ( gpItemPointer == NULL ) ) - GotoLowerStance(MercPtrs[ gusSelectedSoldier ]); + GotoLowerStance(gusSelectedSoldier); return; } if ( gusSelectedSoldier != NOBODY ) { - bID = FindPrevActiveAndAliveMerc( MercPtrs[ gusSelectedSoldier ], TRUE, TRUE ); + bID = FindPrevActiveAndAliveMerc( gusSelectedSoldier, TRUE, TRUE ); HandleLocateSelectMerc( bID, LOCATEANDSELECT_MERC ); ErasePath(TRUE); gfPlotNewMovement = TRUE; @@ -7494,14 +7494,14 @@ void HandleMouseTBWheel( void ) //change stance ->UP if ( _KeyDown( ALT ) ) { if ( (gusSelectedSoldier != NOBODY) && ( gpItemPointer == NULL ) ) - GotoHeigherStance( MercPtrs[ gusSelectedSoldier ] ); + GotoHeigherStance( gusSelectedSoldier ); return; } //ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"wheel %d", gViewportRegion.WheelState); if ( gusSelectedSoldier != NOBODY ) { //Select next merc - bID = FindNextMercInTeamPanel( MercPtrs[ gusSelectedSoldier ], FALSE, FALSE ); + bID = FindNextMercInTeamPanel( gusSelectedSoldier, FALSE, FALSE ); HandleLocateSelectMerc( bID, LOCATEANDSELECT_MERC ); ErasePath(TRUE); gfPlotNewMovement = TRUE; @@ -7546,7 +7546,7 @@ void HandleMouseTBX1Button( UINT32 *puiNewEvent ) void HandleMouseTBX2Button( UINT32 *puiNewEvent ) { if ( _KeyDown( ALT ) ) - AutoReload( MercPtrs[ gusSelectedSoldier ] ); + AutoReload( gusSelectedSoldier ); else HandleTBToggleStealthAll(); } @@ -7761,7 +7761,7 @@ void HandleTBCycleThroughVisibleEnemies( void ) if ( gusSelectedSoldier != NOBODY ) { - pSoldier = MercPtrs[ gusSelectedSoldier ]; + pSoldier = gusSelectedSoldier; if ( pSoldier->aiData.bOppCnt > 0 ) { @@ -7780,7 +7780,7 @@ void HandleTBCycleThroughVisibleEnemiesBackward( void ) if ( gusSelectedSoldier != NOBODY ) { - pSoldier = MercPtrs[ gusSelectedSoldier ]; + pSoldier = gusSelectedSoldier; if ( pSoldier->aiData.bOppCnt > 0 ) { @@ -7808,9 +7808,9 @@ void HandleTBChangeLevel( void ) void HandleTBSwapHands( void ) { // swap primary & secondary hand - if ( gusSelectedSoldier != NOBODY && !AM_A_ROBOT( MercPtrs[ gusSelectedSoldier ] )) + if ( gusSelectedSoldier != NOBODY && !AM_A_ROBOT( gusSelectedSoldier )) { - SOLDIERTYPE *pSoldier = MercPtrs[ gusSelectedSoldier ]; + SOLDIERTYPE *pSoldier = gusSelectedSoldier; UINT16 usOldHandItem = pSoldier->inv[HANDPOS].usItem; SwapHandItems( pSoldier ); pSoldier->ReLoadSoldierAnimationDueToHandItemChange( usOldHandItem, pSoldier->inv[HANDPOS].usItem ); @@ -7825,7 +7825,7 @@ void HandleTBSwapGunsling( void ) if ( gusSelectedSoldier != NOBODY && UsingNewInventorySystem() == true) { - pSoldier = MercPtrs[ gusSelectedSoldier ]; + pSoldier = gusSelectedSoldier; pSoldier->SwitchWeapons( ); } } @@ -7833,7 +7833,7 @@ void HandleTBSwapKnife( void ) { if ( gusSelectedSoldier != NOBODY && UsingNewInventorySystem() == true) { - SOLDIERTYPE *pSoldier = MercPtrs[ gusSelectedSoldier ]; + SOLDIERTYPE *pSoldier = gusSelectedSoldier; pSoldier->SwitchWeapons( TRUE ); } } @@ -7841,7 +7841,7 @@ void HandleTBSwapSidearm( void ) { if ( gusSelectedSoldier != NOBODY && UsingNewInventorySystem() == true) { - SOLDIERTYPE *pSoldier = MercPtrs[ gusSelectedSoldier ]; + SOLDIERTYPE *pSoldier = gusSelectedSoldier; pSoldier->SwitchWeapons( FALSE, TRUE ); } } @@ -7941,7 +7941,7 @@ void HandleTBToggleStealth( void ) } void HandleTBReload( void ) { - AutoReload( MercPtrs[ gusSelectedSoldier ] ); + AutoReload( gusSelectedSoldier ); } void HandleTBReloadAll( void ) { @@ -8242,19 +8242,19 @@ void HandleTBToggleTrapNetworkView( void ) void HandleTBGotoHigherStance( void ) { if ( (gusSelectedSoldier != NOBODY) && ( gpItemPointer == NULL ) ) - GotoHeigherStance(MercPtrs[ gusSelectedSoldier ]); + GotoHeigherStance(gusSelectedSoldier); } void HandleTBGotoLowerStance( void ) { if ( (gusSelectedSoldier != NOBODY) && ( gpItemPointer == NULL ) ) - GotoLowerStance( MercPtrs[ gusSelectedSoldier ] ); + GotoLowerStance( gusSelectedSoldier ); } void HandleTBLocateNextMerc( void ) { UINT16 bID; if ( gusSelectedSoldier != NOBODY ) { //Select next merc - bID = FindNextMercInTeamPanel( MercPtrs[ gusSelectedSoldier ], FALSE, FALSE ); + bID = FindNextMercInTeamPanel( gusSelectedSoldier, FALSE, FALSE ); HandleLocateSelectMerc( bID, LOCATEANDSELECT_MERC ); // Center to guy.... LocateSoldier( gusSelectedSoldier, SETLOCATOR ); @@ -8265,7 +8265,7 @@ void HandleTBLocatePrevMerc( void ) UINT16 bID; if ( gusSelectedSoldier != NOBODY ) { - bID = FindPrevActiveAndAliveMerc( MercPtrs[ gusSelectedSoldier ], TRUE, TRUE ); + bID = FindPrevActiveAndAliveMerc( gusSelectedSoldier, TRUE, TRUE ); HandleLocateSelectMerc( bID, LOCATEANDSELECT_MERC ); // Center to guy.... LocateSoldier( gusSelectedSoldier, SETLOCATOR ); @@ -8338,7 +8338,7 @@ void HandleTBDropBackpacks( void ) //if( UsingNewInventorySystem() && gusSelectedSoldier != NOBODY ) if( UsingNewInventorySystem() ) { - //SOLDIERTYPE *pSoldier = MercPtrs[ gusSelectedSoldier ]; + //SOLDIERTYPE *pSoldier = gusSelectedSoldier; SOLDIERTYPE *pTeamSoldier; UINT16 ubLoop; @@ -8376,7 +8376,7 @@ void HandleTBPickUpBackpacks( void ) //if( UsingNewInventorySystem() && gusSelectedSoldier != NOBODY ) if( UsingNewInventorySystem() ) { - //SOLDIERTYPE *pSoldier = MercPtrs[ gusSelectedSoldier ]; + //SOLDIERTYPE *pSoldier = gusSelectedSoldier; SOLDIERTYPE *pTeamSoldier; UINT16 ubLoop; @@ -8411,7 +8411,7 @@ void HandleTBPickUpBackpacks( void ) void HandleTBSoldierRun( void ) { - SOLDIERTYPE *pSoldier = MercPtrs[ gusSelectedSoldier ]; + SOLDIERTYPE *pSoldier = gusSelectedSoldier; if ( pSoldier->flags.uiStatusFlags & ( SOLDIER_DRIVER ) ) { pSoldier = GetSoldierStructureForVehicle( pSoldier->iVehicleId ); @@ -8861,7 +8861,7 @@ void HandleTacticalStoreInvItem( void ) UINT16 APTotalCost = 0; if( gusSelectedSoldier != NOBODY ) - pSoldier = MercPtrs[ gusSelectedSoldier ]; + pSoldier = gusSelectedSoldier; else return; @@ -8934,7 +8934,7 @@ void HandleTacticalTakeInvItem( INT32 iType ) } if( gusSelectedSoldier != NOBODY ) - pSoldier = MercPtrs[ gusSelectedSoldier ]; + pSoldier = gusSelectedSoldier; else return; @@ -9044,7 +9044,7 @@ void HandleTacticalDropItem( UINT8 ubSlot ) UINT16 APTotalCost = 0; if( gusSelectedSoldier != NOBODY ) - pSoldier = MercPtrs[ gusSelectedSoldier ]; + pSoldier = gusSelectedSoldier; else return; @@ -9069,7 +9069,7 @@ void HandleTacticalTakeItem( void ) SOLDIERTYPE *pSoldier; if( gusSelectedSoldier != NOBODY ) - pSoldier = MercPtrs[ gusSelectedSoldier ]; + pSoldier = gusSelectedSoldier; else return; @@ -9108,7 +9108,7 @@ void HandleTacticalReload() INT16 bAPs = 0; if (gusSelectedSoldier != NOBODY) - pSoldier = MercPtrs[gusSelectedSoldier]; + pSoldier = gusSelectedSoldier; else return; @@ -9579,10 +9579,10 @@ void HandleTBSkillsMenu(void) { TraitsMenu(usMapPos); } - else if (gusSelectedSoldier != NOBODY && MercPtrs[gusSelectedSoldier] && !TileIsOutOfBounds(MercPtrs[gusSelectedSoldier]->sGridNo)) + else if (gusSelectedSoldier != NOBODY && gusSelectedSoldier && !TileIsOutOfBounds(gusSelectedSoldier->sGridNo)) { - LocateGridNo(MercPtrs[gusSelectedSoldier]->sGridNo); - TraitsMenu(MercPtrs[gusSelectedSoldier]->sGridNo); + LocateGridNo(gusSelectedSoldier->sGridNo); + TraitsMenu(gusSelectedSoldier->sGridNo); } } @@ -9606,7 +9606,7 @@ void HandleTBPickUpBackpacks(BOOLEAN fAll) if (gusSelectedSoldier != NOBODY) { - pSoldier = MercPtrs[gusSelectedSoldier]; + pSoldier = gusSelectedSoldier; } INT16 sAPCost = APBPConstants[AP_BACK_PACK]; diff --git a/Tactical/UI Cursors.cpp b/Tactical/UI Cursors.cpp index 24c5614b..6cdd0e3d 100644 --- a/Tactical/UI Cursors.cpp +++ b/Tactical/UI Cursors.cpp @@ -364,7 +364,7 @@ UINT8 HandleActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT32 usMapPos, BOOLEA // If we are in realtime, follow! if ( ( !( gTacticalStatus.uiFlags & INCOMBAT ) ) ) { - if ( ( gAnimControl[ MercPtrs[ gusSelectedSoldier ]->usAnimState ].uiFlags & ANIM_STATIONARY ) ) + if ( ( gAnimControl[ gusSelectedSoldier->usAnimState ].uiFlags & ANIM_STATIONARY ) ) { if ( gUITargetShotWaiting ) { diff --git a/Tactical/opplist.cpp b/Tactical/opplist.cpp index 3c68ee3a..39b72bfa 100644 --- a/Tactical/opplist.cpp +++ b/Tactical/opplist.cpp @@ -4642,16 +4642,16 @@ void DebugSoldierPage3( ) // OPIONION OF SELECTED MERC if ( gusSelectedSoldier != NOBODY && pSoldier->ubProfile != NO_PROFILE && ( - gMercProfiles[MercPtrs[gusSelectedSoldier]->ubProfile].Type == PROFILETYPE_AIM || - gMercProfiles[MercPtrs[gusSelectedSoldier]->ubProfile].Type == PROFILETYPE_MERC || - gMercProfiles[MercPtrs[gusSelectedSoldier]->ubProfile].Type == PROFILETYPE_RPC || - gMercProfiles[MercPtrs[gusSelectedSoldier]->ubProfile].Type == PROFILETYPE_IMP ) ) + gMercProfiles[gusSelectedSoldier->ubProfile].Type == PROFILETYPE_AIM || + gMercProfiles[gusSelectedSoldier->ubProfile].Type == PROFILETYPE_MERC || + gMercProfiles[gusSelectedSoldier->ubProfile].Type == PROFILETYPE_RPC || + gMercProfiles[gusSelectedSoldier->ubProfile].Type == PROFILETYPE_IMP ) ) { SetFontShade(LARGEFONT1, FONT_SHADE_GREEN); gprintf( 0, LINE_HEIGHT * ubLine, L"NPC Opinion:"); SetFontShade(LARGEFONT1, FONT_SHADE_NEUTRAL); - if (OKToCheckOpinion(MercPtrs[ gusSelectedSoldier ]->ubProfile)) - gprintf( 150, LINE_HEIGHT * ubLine, L"%d", gMercProfiles[ pSoldier->ubProfile ].bMercOpinion[ MercPtrs[ gusSelectedSoldier ]->ubProfile ] ); + if (OKToCheckOpinion(gusSelectedSoldier->ubProfile)) + gprintf( 150, LINE_HEIGHT * ubLine, L"%d", gMercProfiles[ pSoldier->ubProfile ].bMercOpinion[ gusSelectedSoldier->ubProfile ] ); ubLine++; } } diff --git a/TileEngine/Explosion Control.cpp b/TileEngine/Explosion Control.cpp index 2c467f85..6d3c28b2 100644 --- a/TileEngine/Explosion Control.cpp +++ b/TileEngine/Explosion Control.cpp @@ -4387,7 +4387,7 @@ void HandleExplosionWarningAnimations( ) // show focus area if skill is active if ( gusSelectedSoldier != NOBODY ) { - SOLDIERTYPE* pSoldier = MercPtrs[gusSelectedSoldier]; + SOLDIERTYPE* pSoldier = gusSelectedSoldier; if ( pSoldier->bActive && pSoldier->bInSector) { @@ -5620,10 +5620,8 @@ void FireFragmentsTrapGun( SOLDIERTYPE* pThrower, INT32 gridno, INT16 sZ, OBJECT void HavePersonAtGridnoStop( UINT32 sGridNo ) { - UINT8 ubID; - //Sewe if there is a person at the gridno - ubID = WhoIsThere2( sGridNo, 0 ); + SoldierID ubID = WhoIsThere2( sGridNo, 0 ); //is it a valid person if ( (ubID != NOBODY) && (MercPtrs[ ubID ]->bTeam == gbPlayerNum) ) @@ -5813,8 +5811,7 @@ void HandleSwitchToOpenFortifiedDoor( UINT32 sGridNo ) void HandleSeeingPowerGenFan( UINT32 sGridNo ) { -// INT8 bID; - UINT8 ubPerson; + SoldierID ubPerson; BOOLEAN fFanIsStopped; BOOLEAN fFanHasBeenStopped; SOLDIERTYPE *pSoldier; diff --git a/TileEngine/Interactive Tiles.cpp b/TileEngine/Interactive Tiles.cpp index 550df2ae..e8216082 100644 --- a/TileEngine/Interactive Tiles.cpp +++ b/TileEngine/Interactive Tiles.cpp @@ -505,7 +505,7 @@ void LogMouseOverInteractiveTile( INT32 sGridNo ) } // Also, don't allow for mercs who are on upper level... - if ( gusSelectedSoldier != NOBODY && MercPtrs[ gusSelectedSoldier ]->pathing.bLevel == 1 ) + if ( gusSelectedSoldier != NOBODY && gusSelectedSoldier->pathing.bLevel == 1 ) { return; } @@ -789,7 +789,7 @@ BOOLEAN RefineLogicOnStruct( INT32 sGridNo, LEVELNODE *pNode ) return( FALSE ); } - if ( gusSelectedSoldier != NOBODY && MercPtrs[ gusSelectedSoldier ]->ubBodyType == ROBOTNOWEAPON ) + if ( gusSelectedSoldier != NOBODY && gusSelectedSoldier->ubBodyType == ROBOTNOWEAPON ) { return( FALSE ); } diff --git a/TileEngine/overhead map.cpp b/TileEngine/overhead map.cpp index e3c2dcae..9db3faca 100644 --- a/TileEngine/overhead map.cpp +++ b/TileEngine/overhead map.cpp @@ -567,7 +567,7 @@ void HandleOverheadMap( ) if( !gfEditMode && !gfTacticalPlacementGUIActive && gusSelectedSoldier != NOBODY ) { - pSoldier = MercPtrs[ gusSelectedSoldier ]; + pSoldier = gusSelectedSoldier; DisplayMercNameInOverhead( pSoldier ); } diff --git a/TileEngine/renderworld.cpp b/TileEngine/renderworld.cpp index 85eb7bd9..2a93d397 100644 --- a/TileEngine/renderworld.cpp +++ b/TileEngine/renderworld.cpp @@ -1069,7 +1069,7 @@ inline UINT16 * GetShadeTable(LEVELNODE * pNode, SOLDIERTYPE * pSoldier, SOLDIER SOLDIERTYPE * pSelSoldier; if (gusSelectedSoldier != NOBODY) { - pSelSoldier = MercPtrs[gusSelectedSoldier]; + pSelSoldier = gusSelectedSoldier; } else { @@ -1149,7 +1149,7 @@ inline UINT16 * GetShadeTable(LEVELNODE * pNode, SOLDIERTYPE * pSoldier, SOLDIER } //if ( gusSelectedSoldier != NOBODY ) //{ - // pSelSoldier = MercPtrs[ gusSelectedSoldier ]; + // pSelSoldier = gusSelectedSoldier; // Shade differently depending on visiblity // if ( pSoldier->bVisible == 0 || ( pSelSoldier->aiData.bOppList[ pSoldier->ubID ] == 0 ) ) // { diff --git a/TileEngine/worlddef.cpp b/TileEngine/worlddef.cpp index 628a35e3..6265f093 100644 --- a/TileEngine/worlddef.cpp +++ b/TileEngine/worlddef.cpp @@ -3291,7 +3291,7 @@ BOOLEAN LoadWorld(const STR8 puiFilename, FLOAT* pMajorMapVersion, UINT8* pMinor // CHECK IF OUR SELECTED GUY IS GONE! if(gusSelectedSoldier != NOBODY) { - if(MercPtrs[gusSelectedSoldier]->bActive == FALSE) + if(gusSelectedSoldier->bActive == FALSE) gusSelectedSoldier = NOBODY; } AdjustSoldierCreationStartValues(); From 83b3485e5819001ba31f3648f6168fdeb3370f91 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 15 Nov 2024 21:04:05 +0200 Subject: [PATCH 040/192] Convert prisonerdialoguetargetID to SoldierID --- Tactical/Overhead.cpp | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index 5a67e3c3..ea6775cc 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -10918,7 +10918,7 @@ void HandleDisplayingOfPlayerLostDialogue( ) } #endif -static UINT16 prisonerdialoguetargetID = NOBODY; +static SoldierID prisonerdialoguetargetID = NOBODY; void TurnCoatAttemptMessageBoxCallBack( UINT8 ubExitValue ) { @@ -10928,7 +10928,7 @@ void TurnCoatAttemptMessageBoxCallBack( UINT8 ubExitValue ) || gusSelectedSoldier == NOBODY ) return; - SOLDIERTYPE* pSoldier = MercPtrs[prisonerdialoguetargetID]; + SOLDIERTYPE* pSoldier = prisonerdialoguetargetID; if ( !pSoldier ) return; @@ -11162,7 +11162,7 @@ void PrisonerSurrenderMessageBoxCallBack( UINT8 ubExitValue ) if ( ubExitValue == 1 ) { - SOLDIERTYPE *pSoldierToSurrender = MercPtrs[prisonerdialoguetargetID]; + SOLDIERTYPE *pSoldierToSurrender = prisonerdialoguetargetID; DeductPoints( gusSelectedSoldier, APBPConstants[AP_TALK], 0, UNTRIGGERED_INTERRUPT ); if ( !gGameExternalOptions.fEnemyCanSurrender ) @@ -11312,9 +11312,9 @@ void PrisonerSurrenderMessageBoxCallBack( UINT8 ubExitValue ) { DeductPoints( gusSelectedSoldier, APBPConstants[AP_TALK], 0, UNTRIGGERED_INTERRUPT ); - if ( !gGameExternalOptions.fPlayerCanAsktoSurrender || MercPtrs[prisonerdialoguetargetID]->bTeam == CREATURE_TEAM ) + if ( !gGameExternalOptions.fPlayerCanAsktoSurrender || prisonerdialoguetargetID->bTeam == CREATURE_TEAM ) { - StartCivQuote( MercPtrs[prisonerdialoguetargetID] ); + StartCivQuote( prisonerdialoguetargetID ); return; } @@ -11329,23 +11329,23 @@ void PrisonerSurrenderMessageBoxCallBack( UINT8 ubExitValue ) // This way we can easily order our spies to 'distract' enemies if ( GetSoldier( &pSoldier, gusSelectedSoldier ) && pSoldier->bTeam == gbPlayerNum && - MercPtrs[prisonerdialoguetargetID] && - MercPtrs[prisonerdialoguetargetID]->bTeam == ENEMY_TEAM && - MercPtrs[prisonerdialoguetargetID]->ubProfile == NO_PROFILE && - MercPtrs[prisonerdialoguetargetID]->aiData.bAlertStatus < STATUS_RED && - !MercPtrs[prisonerdialoguetargetID]->RecognizeAsCombatant( gusSelectedSoldier ) ) + prisonerdialoguetargetID && + prisonerdialoguetargetID->bTeam == ENEMY_TEAM && + prisonerdialoguetargetID->ubProfile == NO_PROFILE && + prisonerdialoguetargetID->aiData.bAlertStatus < STATUS_RED && + !prisonerdialoguetargetID->RecognizeAsCombatant( gusSelectedSoldier ) ) { // both soldiers face each other - pSoldier->EVENT_SetSoldierDesiredDirection( GetDirectionToGridNoFromGridNo( pSoldier->sGridNo, MercPtrs[prisonerdialoguetargetID]->sGridNo ) ); - MercPtrs[prisonerdialoguetargetID]->EVENT_SetSoldierDesiredDirection( GetDirectionToGridNoFromGridNo( MercPtrs[prisonerdialoguetargetID]->sGridNo, pSoldier->sGridNo ) ); + pSoldier->EVENT_SetSoldierDesiredDirection( GetDirectionToGridNoFromGridNo( pSoldier->sGridNo, prisonerdialoguetargetID->sGridNo ) ); + prisonerdialoguetargetID->EVENT_SetSoldierDesiredDirection( GetDirectionToGridNoFromGridNo( prisonerdialoguetargetID->sGridNo, pSoldier->sGridNo ) ); - MercPtrs[prisonerdialoguetargetID]->usChatPartnerID = gusSelectedSoldier; + prisonerdialoguetargetID->usChatPartnerID = gusSelectedSoldier; pSoldier->usChatPartnerID = prisonerdialoguetargetID; } else { // normal dialog - StartCivQuote( MercPtrs[prisonerdialoguetargetID] ); + StartCivQuote( prisonerdialoguetargetID ); } } else @@ -11354,21 +11354,21 @@ void PrisonerSurrenderMessageBoxCallBack( UINT8 ubExitValue ) if (gSkillTraitValues.fCOTurncoats == TRUE && GetSoldier( &pSoldier, gusSelectedSoldier ) && pSoldier->bTeam == gbPlayerNum && - MercPtrs[prisonerdialoguetargetID] && - MercPtrs[prisonerdialoguetargetID]->bTeam == ENEMY_TEAM && - MercPtrs[prisonerdialoguetargetID]->ubProfile == NO_PROFILE && - MercPtrs[prisonerdialoguetargetID]->aiData.bAlertStatus < STATUS_RED && - !MercPtrs[prisonerdialoguetargetID]->RecognizeAsCombatant( gusSelectedSoldier ) ) + prisonerdialoguetargetID && + prisonerdialoguetargetID->bTeam == ENEMY_TEAM && + prisonerdialoguetargetID->ubProfile == NO_PROFILE && + prisonerdialoguetargetID->aiData.bAlertStatus < STATUS_RED && + !prisonerdialoguetargetID->RecognizeAsCombatant( gusSelectedSoldier ) ) { MSYS_RemoveRegion(&(gMsgBox.BackRegion)); - pSoldier->UseSkill(SKILLS_CREATE_TURNCOAT, MercPtrs[prisonerdialoguetargetID]->sGridNo, MercPtrs[prisonerdialoguetargetID]->ubID); + pSoldier->UseSkill(SKILLS_CREATE_TURNCOAT, prisonerdialoguetargetID->sGridNo, prisonerdialoguetargetID->ubID); // AP reduction is handled inside the turncoat attempt flow (TurnCoatAttemptMessageBoxCallBack) } else { // normal dialog DeductPoints( gusSelectedSoldier, APBPConstants[AP_TALK], 0, UNTRIGGERED_INTERRUPT ); - StartCivQuote(MercPtrs[prisonerdialoguetargetID]); + StartCivQuote(prisonerdialoguetargetID); } } From ecb29ae9bc80b774ea43508bf715c66c061282f1 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 15 Nov 2024 21:09:17 +0200 Subject: [PATCH 041/192] Convert SOLDIERTYPE->usChatPartnerID to SoldierID --- Tactical/Overhead.cpp | 4 ++-- Tactical/Soldier Control.cpp | 2 +- Tactical/Soldier Control.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index ea6775cc..3d10915f 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -11397,7 +11397,7 @@ void CheckChatPartners() if ( fMercQuoteThisTime ) GetSoldierScreenPos( pSoldier, &sScreenX, &sScreenY ); else - GetSoldierScreenPos( MercPtrs[pSoldier->usChatPartnerID], &sScreenX, &sScreenY ); + GetSoldierScreenPos( pSoldier->usChatPartnerID, &sScreenX, &sScreenY ); if ( gsVIEWPORT_START_X <= sScreenX && gsVIEWPORT_END_X >= sScreenX && @@ -11407,7 +11407,7 @@ void CheckChatPartners() if ( fMercQuoteThisTime ) BeginChatQuote( pSoldier, sScreenX, sScreenY ); else - BeginChatQuote( MercPtrs[pSoldier->usChatPartnerID], sScreenX, sScreenY ); + BeginChatQuote( pSoldier->usChatPartnerID, sScreenX, sScreenY ); fMercQuoteThisTime = !fMercQuoteThisTime; diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index 595994bb..78ba39b6 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -21010,7 +21010,7 @@ void SOLDIERTYPE::StopChatting() { if ( this->usChatPartnerID != NOBODY ) { - ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, TacticalStr[DISTRACT_STOP_STR], this->GetName(), MercPtrs[this->usChatPartnerID]->GetName() ); + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, TacticalStr[DISTRACT_STOP_STR], this->GetName(), this->usChatPartnerID->GetName() ); MercPtrs[this->usChatPartnerID]->usChatPartnerID = NOBODY; this->usChatPartnerID = NOBODY; diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index 81dc88bc..d28bb698 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -1550,7 +1550,7 @@ public: //INT16 bUnusedINT16_4; INT16 sDragCorpseID; // Flugente: id of corpse we are dragging - UINT16 usChatPartnerID; // Flugente: the id of another merc we are 'chatting' with + SoldierID usChatPartnerID; // Flugente: the id of another merc we are 'chatting' with // Flugente: new variables for extra stats INT16 bExtraStrength; // additional strength gained via power armor From 9079f2e0c1a1522060f3ec7bdc9a25a0373a97a4 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 15 Nov 2024 21:20:49 +0200 Subject: [PATCH 042/192] Whitespace changes to SOLDIERTYPE --- Tactical/Soldier Control.h | 662 ++++++++++++++++++------------------- 1 file changed, 325 insertions(+), 337 deletions(-) diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index d28bb698..70a032d7 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -1103,452 +1103,440 @@ public: // properly until it is all fixed and the files updated. public: // ID - SoldierID ubID; - CHAR16 name[ 10 ]; + SoldierID ubID; + CHAR16 name[ 10 ]; INT16 GetMaxDistanceVisible(INT32 sGridNo = -1, INT8 bLevel = -1, int calcAsType = -1); // DESCRIPTION / STATS, ETC - UINT8 ubBodyType; - INT16 bActionPoints; //100AP - INT16 bInitialActionPoints; //100AP - INT8 bOldLife; // life at end of last turn, recorded for monster AI - INT8 bVisible; // to render or not to render... - INT8 bActive; - INT8 bTeam; // Team identifier + UINT8 ubBodyType; + INT16 bActionPoints; //100AP + INT16 bInitialActionPoints; //100AP + INT8 bOldLife; // life at end of last turn, recorded for monster AI + INT8 bVisible; // to render or not to render... + INT8 bActive; + INT8 bTeam; // Team identifier - OBJECTTYPE *pTempObject; - KEY_ON_RING *pKeyRing; + OBJECTTYPE *pTempObject; + KEY_ON_RING *pKeyRing; - UINT8 bInSector; - INT8 bFlashPortraitFrame; - INT16 sFractLife; // fraction of life pts (in hundreths) - INT8 bBleeding; // blood loss control variable - INT8 bBreath; // current breath value - INT8 bBreathMax; // max breath, affected by fatigue/sleep - INT8 bStealthMode; - INT16 sBreathRed; // current breath loss value + UINT8 bInSector; + INT8 bFlashPortraitFrame; + INT16 sFractLife; // fraction of life pts (in hundreths) + INT8 bBleeding; // blood loss control variable + INT8 bBreath; // current breath value + INT8 bBreathMax; // max breath, affected by fatigue/sleep + INT8 bStealthMode; + INT16 sBreathRed; // current breath loss value - UINT8 ubWaitActionToDo; - INT8 ubInsertionDirection; - INT8 bGunType; - UINT16 ubOppNum; - INT8 bLastRenderVisibleValue; - UINT8 ubAttackingHand; - INT16 sWeightCarriedAtTurnStart; + UINT8 ubWaitActionToDo; + INT8 ubInsertionDirection; + INT8 bGunType; + UINT16 ubOppNum; + INT8 bLastRenderVisibleValue; + UINT8 ubAttackingHand; + INT16 sWeightCarriedAtTurnStart; ///////////////////////////////////////////////////////////////////////////////// // SANDRO - added following // values for surgery feature - INT32 iHealableInjury; - BOOLEAN fDoingSurgery; + INT32 iHealableInjury; + BOOLEAN fDoingSurgery; // value for unregainable breath feature (for Martial Arts) - signed long lUnregainableBreath; + signed long lUnregainableBreath; // this stores possible stats lost due to critical hits - UINT8 ubCriticalStatDamage[ NUM_DAMAGABLE_STATS ]; + UINT8 ubCriticalStatDamage[ NUM_DAMAGABLE_STATS ]; ///////////////////////////////////////////////////////////////////////////////// //NEW MOVEMENT INFORMATION for Strategic Movement - UINT8 ubGroupID; //the movement group the merc is currently part of. - //sSectorX and sSectorY will reflect the sector the - //merc was at last. + UINT8 ubGroupID; // The movement group the merc is currently part of. + // sSectorX and sSectorY will reflect the sector the + // merc was at last. - UINT8 ubMovementNoiseHeard;// 8 flags by direction + UINT8 ubMovementNoiseHeard;// 8 flags by direction // WORLD POSITION STUFF - FLOAT dXPos; - FLOAT dYPos; + FLOAT dXPos; + FLOAT dYPos; // HEADROCK HAM 4: These two vars are appropriated for the new Shooting Mechanism. // They represent the soldier's position at the start of his turn. - //FLOAT dOldXPos; - //FLOAT dOldYPos; - INT16 sOldXPos; - INT16 sOldYPos; - INT32 sInitialGridNo; - INT32 sGridNo; - UINT8 ubDirection; - INT16 sHeightAdjustment; - INT16 sDesiredHeight; - INT32 sTempNewGridNo; // New grid no for advanced animations - INT16 sRoomNo; - INT8 bOverTerrainType; - INT8 bOldOverTerrainType; + //FLOAT dOldXPos; + //FLOAT dOldYPos; + INT16 sOldXPos; + INT16 sOldYPos; + INT32 sInitialGridNo; + INT32 sGridNo; + UINT8 ubDirection; + INT16 sHeightAdjustment; + INT16 sDesiredHeight; + INT32 sTempNewGridNo; // New grid no for advanced animations + INT16 sRoomNo; + INT8 bOverTerrainType; + INT8 bOldOverTerrainType; - INT8 bCollapsed; // collapsed due to being out of APs - INT8 bBreathCollapsed; // collapsed due to being out of APs + INT8 bCollapsed; // collapsed due to being out of APs + INT8 bBreathCollapsed; // collapsed due to being out of APs - - UINT8 ubDesiredHeight; - UINT16 usPendingAnimation; - UINT8 ubPendingStanceChange; - UINT16 usAnimState; + UINT8 ubDesiredHeight; + UINT16 usPendingAnimation; + UINT8 ubPendingStanceChange; + UINT16 usAnimState; + UINT32 uiAIDelay; + INT16 sReloadDelay; + UINT16 ubAttackerID; + UINT16 ubPreviousAttackerID; - - - UINT32 uiAIDelay; - INT16 sReloadDelay; - UINT16 ubAttackerID; - UINT16 ubPreviousAttackerID; - - INT32 sInsertionGridNo; + INT32 sInsertionGridNo; AnimationSurfaceCacheType AnimCache; // will be 9 bytes once changed to pointers - UINT8 bSide; - UINT8 bViewRange; - INT8 bNewOppCnt; - INT8 bService; // first aid, or other time consuming process + UINT8 bSide; + UINT8 bViewRange; + INT8 bNewOppCnt; + INT8 bService; // first aid, or other time consuming process - UINT16 usAniCode; - UINT16 usAniFrame; - INT16 sAniDelay; + UINT16 usAniCode; + UINT16 usAniFrame; + INT16 sAniDelay; // MOVEMENT TO NEXT TILE HANDLING STUFF - UINT8 ubDelayedMovementCauseMerc; - INT32 sDelayedMovementCauseGridNo; - INT32 sReservedMovementGridNo; + UINT8 ubDelayedMovementCauseMerc; + INT32 sDelayedMovementCauseGridNo; + INT32 sReservedMovementGridNo; // Weapon Stuff - INT32 sTargetGridNo; - INT8 bTargetLevel; - INT8 bTargetCubeLevel; - INT32 sLastTarget; + INT32 sTargetGridNo; + INT8 bTargetLevel; + INT8 bTargetCubeLevel; + INT32 sLastTarget; // HEADROCK HAM 4: the muzzle offset of the shooter's previous bullet. (NCTH) - FLOAT dPrevMuzzleOffsetX[2]; - FLOAT dPrevMuzzleOffsetY[2]; + FLOAT dPrevMuzzleOffsetX[2]; + FLOAT dPrevMuzzleOffsetY[2]; // HEADROCK HAM 4: Two more values. These record the shooter's previous Counter Force applied on the gun. - FLOAT dPrevCounterForceX[2]; - FLOAT dPrevCounterForceY[2]; + FLOAT dPrevCounterForceX[2]; + FLOAT dPrevCounterForceY[2]; // CHRISL: Track initial offsets for autofire - FLOAT dInitialMuzzleOffsetX; - FLOAT dInitialMuzzleOffsetY; + FLOAT dInitialMuzzleOffsetX; + FLOAT dInitialMuzzleOffsetY; - INT8 bTilesMoved; - FLOAT dNextBleed; + INT8 bTilesMoved; + FLOAT dNextBleed; - UINT8 ubTilesMovedPerRTBreathUpdate; - UINT16 usLastMovementAnimPerRTBreathUpdate; + UINT8 ubTilesMovedPerRTBreathUpdate; + UINT16 usLastMovementAnimPerRTBreathUpdate; - INT16 sLocatorFrame; + INT16 sLocatorFrame; - INT32 iFaceIndex; + INT32 iFaceIndex; // FULL 3-d TILE STUFF ( keep records of three tiles infront ) - UINT16 usFrontArcFullTileList[ MAX_FULLTILE_DIRECTIONS ]; - INT32 usFrontArcFullTileGridNos[ MAX_FULLTILE_DIRECTIONS ]; + UINT16 usFrontArcFullTileList[ MAX_FULLTILE_DIRECTIONS ]; + INT32 usFrontArcFullTileGridNos[ MAX_FULLTILE_DIRECTIONS ]; // PALETTE MANAGEMENT STUFF - PaletteRepID HeadPal; // 30 - PaletteRepID PantsPal; // 30 - PaletteRepID VestPal; // 30 - PaletteRepID SkinPal; // 30 - PaletteRepID MiscPal; // 30 - - - - - SGPPaletteEntry *p8BPPPalette; // 4 - UINT16 *p16BPPPalette; - UINT16 *pShades[ NUM_SOLDIER_SHADES ]; // Shading tables - UINT16 *pGlowShades[ 20 ]; // - UINT16 *pCurrentShade; - UINT8 ubFadeLevel; - UINT8 ubServiceCount; - UINT16 ubServicePartner; - THROW_PARAMS *pThrowParams; - INT8 bReverse; - LEVELNODE *pLevelNode; - LEVELNODE *pExternShadowLevelNode; - LEVELNODE *pRoofUILevelNode; - + PaletteRepID HeadPal; // 30 + PaletteRepID PantsPal; // 30 + PaletteRepID VestPal; // 30 + PaletteRepID SkinPal; // 30 + PaletteRepID MiscPal; // 30 + SGPPaletteEntry *p8BPPPalette; // 4 + UINT16 *p16BPPPalette; + UINT16 *pShades[ NUM_SOLDIER_SHADES ]; // Shading tables + UINT16 *pGlowShades[ 20 ]; // + UINT16 *pCurrentShade; + UINT8 ubFadeLevel; + UINT8 ubServiceCount; + UINT16 ubServicePartner; + THROW_PARAMS *pThrowParams; + INT8 bReverse; + LEVELNODE *pLevelNode; + LEVELNODE *pExternShadowLevelNode; + LEVELNODE *pRoofUILevelNode; // UNBLIT BACKGROUND - UINT16 *pBackGround; - UINT16 *pZBackground; - UINT16 usUnblitX, usUnblitY; - UINT16 usUnblitWidth, usUnblitHeight; + UINT16 *pBackGround; + UINT16 *pZBackground; + UINT16 usUnblitX, usUnblitY; + UINT16 usUnblitWidth, usUnblitHeight; - UINT8 ubStrategicInsertionCode; - INT32 usStrategicInsertionData; + UINT8 ubStrategicInsertionCode; + INT32 usStrategicInsertionData; - INT32 iLight; - INT32 iMuzFlash; - INT8 bMuzFlashCount; + INT32 iLight; + INT32 iMuzFlash; + INT8 bMuzFlashCount; - INT16 sX; - INT16 sY; + INT16 sX; + INT16 sY; - UINT16 usOldAniState; - INT16 sOldAniCode; + UINT16 usOldAniState; + INT16 sOldAniCode; - INT8 bBulletsLeft; - UINT8 ubSuppressionPoints; + INT8 bBulletsLeft; + UINT8 ubSuppressionPoints; // STUFF FOR RANDOM ANIMATIONS - UINT32 uiTimeOfLastRandomAction; - INT16 usLastRandomAnim; + UINT32 uiTimeOfLastRandomAction; + INT16 usLastRandomAnim; + UINT16 usAnimSurface; + UINT16 sZLevel; - UINT16 usAnimSurface; - UINT16 sZLevel; - - INT16 sWalkToAttackMovementMode;//shadooow: stores movement mode used in last pathing - INT32 sWalkToAttackGridNo; - INT16 sWalkToAttackWalkToCost; + INT16 sWalkToAttackMovementMode;//shadooow: stores movement mode used in last pathing + INT32 sWalkToAttackGridNo; + INT16 sWalkToAttackWalkToCost; - INT16 sLocatorOffX; - INT16 sLocatorOffY; - UINT16 *pForcedShade; + INT16 sLocatorOffX; + INT16 sLocatorOffY; + UINT16 *pForcedShade; - INT8 bDisplayDamageCount; - UINT8 sWalkToAttackEndDirection;//shadooow: stores direction of merc at the destination grid - INT16 sDamage; - INT16 sDamageX; - INT16 sDamageY; - INT8 bDamageDir; - INT8 bDoBurst; - INT16 usUIMovementMode; - INT8 bUIInterfaceLevel; + INT8 bDisplayDamageCount; + UINT8 sWalkToAttackEndDirection;//shadooow: stores direction of merc at the destination grid + INT16 sDamage; + INT16 sDamageX; + INT16 sDamageY; + INT8 bDamageDir; + INT8 bDoBurst; + INT16 usUIMovementMode; + INT8 bUIInterfaceLevel; - UINT8 ubProfile; - UINT8 ubQuoteRecord; - UINT8 ubQuoteActionID; - UINT8 ubBattleSoundID; + UINT8 ubProfile; + UINT8 ubQuoteRecord; + UINT8 ubQuoteActionID; + UINT8 ubBattleSoundID; - UINT8 ubClosePanelFrame; - UINT8 ubDeadPanelFrame; - INT8 bOpenPanelFrame; + UINT8 ubClosePanelFrame; + UINT8 ubDeadPanelFrame; + INT8 bOpenPanelFrame; - INT16 sPanelFaceX; - INT16 sPanelFaceY; + INT16 sPanelFaceX; + INT16 sPanelFaceY; // QUOTE STUFF - INT8 bNumHitsThisTurn; - UINT16 usQuoteSaidFlags; - INT8 bLastSkillCheck; - INT8 ubSkillCheckAttempts; + INT8 bNumHitsThisTurn; + UINT16 usQuoteSaidFlags; + INT8 bLastSkillCheck; + INT8 ubSkillCheckAttempts; - INT8 bVocalVolume; // verbal sounds need to differ in volume + INT8 bVocalVolume; // verbal sounds need to differ in volume - INT8 bStartFallDir; + INT8 bStartFallDir; - UINT8 ubPendingDirection; - UINT32 uiAnimSubFlags; + UINT8 ubPendingDirection; + UINT32 uiAnimSubFlags; - UINT8 bAimShotLocation; - UINT8 ubHitLocation; - UINT8 bAimMeleeLocation; + UINT8 bAimShotLocation; + UINT8 ubHitLocation; + UINT8 bAimMeleeLocation; - UINT16 *pEffectShades[ NUM_SOLDIER_EFFECTSHADES ]; // Shading tables for effects + UINT16 *pEffectShades[ NUM_SOLDIER_EFFECTSHADES ]; // Shading tables for effects - UINT8 ubPlannedUIAPCost; - INT16 sPlannedTargetX; - INT16 sPlannedTargetY; + UINT8 ubPlannedUIAPCost; + INT16 sPlannedTargetX; + INT16 sPlannedTargetY; - INT32 sSpreadLocations[ MAX_BURST_SPREAD_TARGETS ]; - INT32 sStartGridNo; - INT32 sEndGridNo; - INT32 sForcastGridno; - INT16 sZLevelOverride; - INT8 bMovedPriorToInterrupt; - INT32 iEndofContractTime; // time, in global time(resolution, minutes) that merc will leave, or if its a M.E.R.C. merc it will be set to -1. -2 for NPC and player generated - INT32 iStartContractTime; - INT32 iTotalContractLength; // total time of AIM mercs contract or the time since last paid for a M.E.R.C. merc - INT32 iNextActionSpecialData; // AI special action data record for the next action - UINT8 ubWhatKindOfMercAmI; //Set to the type of character it is - INT8 bAssignment; // soldiers current assignment - INT8 bOldAssignment; // old assignment, for autosleep purposes - INT8 bTrainStat; // current stat soldier is training - INT16 sSectorX; // X position on the Stategic Map - INT16 sSectorY; // Y position on the Stategic Map - INT8 bSectorZ; // Z sector location - INT32 iVehicleId; // the id of the vehicle the char is in - PathStPtr pMercPath; //Path Structure - UINT16 usMedicalDeposit; // is there a medical deposit on merc - UINT16 usLifeInsurance; // is there life insurance taken out on merc + INT32 sSpreadLocations[ MAX_BURST_SPREAD_TARGETS ]; + INT32 sStartGridNo; + INT32 sEndGridNo; + INT32 sForcastGridno; + INT16 sZLevelOverride; + INT8 bMovedPriorToInterrupt; + INT32 iEndofContractTime; // time, in global time(resolution, minutes) that merc will leave, or if its a M.E.R.C. merc it will be set to -1. -2 for NPC and player generated + INT32 iStartContractTime; + INT32 iTotalContractLength; // total time of AIM mercs contract or the time since last paid for a M.E.R.C. merc + INT32 iNextActionSpecialData; // AI special action data record for the next action + UINT8 ubWhatKindOfMercAmI; //Set to the type of character it is + INT8 bAssignment; // soldiers current assignment + INT8 bOldAssignment; // old assignment, for autosleep purposes + INT8 bTrainStat; // current stat soldier is training + INT16 sSectorX; // X position on the Stategic Map + INT16 sSectorY; // Y position on the Stategic Map + INT8 bSectorZ; // Z sector location + INT32 iVehicleId; // the id of the vehicle the char is in + PathStPtr pMercPath; //Path Structure + UINT16 usMedicalDeposit; // is there a medical deposit on merc + UINT16 usLifeInsurance; // is there life insurance taken out on merc //DEF: Used for the communications - UINT32 uiStartMovementTime; // the time since the merc first started moving - UINT32 uiOptimumMovementTime; // everytime in ececute overhead the time for the current ani will be added to this total - UINT32 usLastUpdateTime ; // The last time the soldier was in ExecuteOverhead + UINT32 uiStartMovementTime; // the time since the merc first started moving + UINT32 uiOptimumMovementTime; // everytime in ececute overhead the time for the current ani will be added to this total + UINT32 usLastUpdateTime ; // The last time the soldier was in ExecuteOverhead - UINT32 uiSoldierUpdateNumber; - BYTE ubSoldierUpdateType; - INT32 sScheduledStop; //hayden, used for scheduling a grid to stop + UINT32 uiSoldierUpdateNumber; + BYTE ubSoldierUpdateType; + INT32 sScheduledStop; //hayden, used for scheduling a grid to stop //END - INT32 iStartOfInsuranceContract; - UINT32 uiLastAssignmentChangeMin; // timestamp of last assignment change in minutes - INT32 iTotalLengthOfInsuranceContract; + INT32 iStartOfInsuranceContract; + UINT32 uiLastAssignmentChangeMin; // timestamp of last assignment change in minutes + INT32 iTotalLengthOfInsuranceContract; - UINT8 ubSoldierClass; //admin, elite, troop (creature types?) Nav: 2 seems to mean elite, 3 troop so admin is 1 - UINT8 ubAPsLostToSuppression; - UINT16 ubSuppressorID; + UINT8 ubSoldierClass; //admin, elite, troop (creature types?) Nav: 2 seems to mean elite, 3 troop so admin is 1 + UINT8 ubAPsLostToSuppression; + UINT16 ubSuppressorID; //Squad merging vars - UINT8 ubDesiredSquadAssignment; - UINT8 ubNumTraversalsAllowedToMerge; + UINT8 ubDesiredSquadAssignment; + UINT8 ubNumTraversalsAllowedToMerge; - UINT16 usPendingAnimation2; - UINT8 ubCivilianGroup; + UINT16 usPendingAnimation2; + UINT8 ubCivilianGroup; - UINT32 uiUniqueSoldierIdValue; // the unique value every instance of a soldier gets - 1 is the first valid value + UINT32 uiUniqueSoldierIdValue; // the unique value every instance of a soldier gets - 1 is the first valid value - INT8 bEndDoorOpenCode; + INT8 bEndDoorOpenCode; - UINT8 ubScheduleID; - INT32 sEndDoorOpenCodeData;//dnl ch53 121009 - INT8 bBlockedByAnotherMercDirection; - UINT16 usAttackingWeapon; - INT8 bWeaponMode; - UINT16 ubTargetID; - INT8 bAIScheduleProgress; - INT32 sOffWorldGridNo; - struct TAG_anitile *pAniTile; - INT8 bCamo; - INT32 sAbsoluteFinalDestination; - UINT8 ubHiResDirection; - UINT8 ubHiResDesiredDirection; - UINT8 ubLastFootPrintSound; - INT8 bVehicleID; - INT8 bMovementDirection; - INT32 sOldGridNo; - UINT16 usDontUpdateNewGridNoOnMoveAnimChange; - INT16 sBoundingBoxWidth; - INT16 sBoundingBoxHeight; - INT16 sBoundingBoxOffsetX; - INT16 sBoundingBoxOffsetY; - UINT32 uiTimeSameBattleSndDone; - INT8 bOldBattleSnd; - INT32 iBurstSoundID; - INT8 bSlotItemTakenFrom; - UINT16 ubAutoBandagingMedic; - UINT16 ubRobotRemoteHolderID; - UINT32 uiTimeOfLastContractUpdate; - INT8 bTypeOfLastContract; - INT8 bTurnsCollapsed; - INT8 bSleepDrugCounter; - UINT8 ubMilitiaKills; + UINT8 ubScheduleID; + INT32 sEndDoorOpenCodeData;//dnl ch53 121009 + INT8 bBlockedByAnotherMercDirection; + UINT16 usAttackingWeapon; + INT8 bWeaponMode; + UINT16 ubTargetID; + INT8 bAIScheduleProgress; + INT32 sOffWorldGridNo; + struct TAG_anitile *pAniTile; + INT8 bCamo; + INT32 sAbsoluteFinalDestination; + UINT8 ubHiResDirection; + UINT8 ubHiResDesiredDirection; + UINT8 ubLastFootPrintSound; + INT8 bVehicleID; + INT8 bMovementDirection; + INT32 sOldGridNo; + UINT16 usDontUpdateNewGridNoOnMoveAnimChange; + INT16 sBoundingBoxWidth; + INT16 sBoundingBoxHeight; + INT16 sBoundingBoxOffsetX; + INT16 sBoundingBoxOffsetY; + UINT32 uiTimeSameBattleSndDone; + INT8 bOldBattleSnd; + INT32 iBurstSoundID; + INT8 bSlotItemTakenFrom; + UINT16 ubAutoBandagingMedic; + UINT16 ubRobotRemoteHolderID; + UINT32 uiTimeOfLastContractUpdate; + INT8 bTypeOfLastContract; + INT8 bTurnsCollapsed; + INT8 bSleepDrugCounter; + UINT8 ubMilitiaKills; - INT8 bBlindedCounter; + INT8 bBlindedCounter; - UINT8 ubHoursOnAssignment; // used for assignments handled only every X hours + UINT8 ubHoursOnAssignment; // used for assignments handled only every X hours - UINT8 ubMercJustFired; // the merc was just fired..there may be dialogue events occuring, this flag will prevent any interaction with contracts - // until after the merc leaves - UINT8 ubTurnsUntilCanSayHeardNoise; - UINT16 usQuoteSaidExtFlags; + UINT8 ubMercJustFired; // the merc was just fired..there may be dialogue events occuring, this flag will prevent any interaction with contracts + // until after the merc leaves + UINT8 ubTurnsUntilCanSayHeardNoise; + UINT16 usQuoteSaidExtFlags; - INT32 sContPathLocation;//dnl ch53 was UINT16 - INT8 bGoodContPath; - UINT8 ubPendingActionInterrupted; - INT8 bNoiseLevel; - INT8 bRegenerationCounter; // Flugente: not used anymore! - INT8 bRegenBoostersUsedToday; // Flugente: not used anymore! - INT8 bNumPelletsHitBy; - INT32 sSkillCheckGridNo; - UINT16 ubLastEnemyCycledID; + INT32 sContPathLocation;//dnl ch53 was UINT16 + INT8 bGoodContPath; + UINT8 ubPendingActionInterrupted; + INT8 bNoiseLevel; + INT8 bRegenerationCounter; // Flugente: not used anymore! + INT8 bRegenBoostersUsedToday; // Flugente: not used anymore! + INT8 bNumPelletsHitBy; + INT32 sSkillCheckGridNo; + UINT16 ubLastEnemyCycledID; - UINT8 ubPrevSectorID; - UINT8 ubNumTilesMovesSinceLastForget; - INT8 bTurningIncrement; - UINT32 uiBattleSoundID; + UINT8 ubPrevSectorID; + UINT8 ubNumTilesMovesSinceLastForget; + INT8 bTurningIncrement; + UINT32 uiBattleSoundID; - UINT16 usValueGoneUp; + UINT16 usValueGoneUp; - UINT8 ubNumLocateCycles; - UINT8 ubDelayedMovementFlags; - UINT16 ubCTGTTargetID; + UINT8 ubNumLocateCycles; + UINT8 ubDelayedMovementFlags; + UINT16 ubCTGTTargetID; - UINT32 uiMercChecksum; + UINT32 uiMercChecksum; - INT8 bCurrentCivQuote; - INT8 bCurrentCivQuoteDelta; - UINT8 ubMiscSoldierFlags; - UINT8 ubReasonCantFinishMove; + INT8 bCurrentCivQuote; + INT8 bCurrentCivQuoteDelta; + UINT8 ubMiscSoldierFlags; + UINT8 ubReasonCantFinishMove; - INT32 sLocationOfFadeStart; - UINT8 bUseExitGridForReentryDirection; + INT32 sLocationOfFadeStart; + UINT8 bUseExitGridForReentryDirection; - UINT32 uiTimeSinceLastSpoke; - UINT8 ubContractRenewalQuoteCode; - INT32 sPreTraversalGridNo; - UINT32 uiXRayActivatedTime; - INT8 bTurningFromUI; - INT8 bPendingActionData5; + UINT32 uiTimeSinceLastSpoke; + UINT8 ubContractRenewalQuoteCode; + INT32 sPreTraversalGridNo; + UINT32 uiXRayActivatedTime; + INT8 bTurningFromUI; + INT8 bPendingActionData5; - INT8 bDelayedStrategicMoraleMod; - UINT8 ubDoorOpeningNoise; + INT8 bDelayedStrategicMoraleMod; + UINT8 ubDoorOpeningNoise; - struct GROUP *pGroup; - UINT8 ubLeaveHistoryCode; - INT8 bOverrideMoveSpeed; + struct GROUP *pGroup; + UINT8 ubLeaveHistoryCode; + INT8 bOverrideMoveSpeed; - UINT32 uiTimeSoldierWillArrive; + UINT32 uiTimeSoldierWillArrive; - INT8 bVehicleUnderRepairID; - INT32 iTimeCanSignElsewhere; - INT8 bHospitalPriceModifier; - UINT32 uiStartTimeOfInsuranceContract; - INT8 bCorpseQuoteTolerance; - INT8 bDeafenedCounter; - INT32 iPositionSndID; - INT32 iTuringSoundID; - UINT8 ubLastDamageReason; - INT32 sLastTwoLocations[2]; - INT32 uiTimeSinceLastBleedGrunt; - UINT16 ubNextToPreviousAttackerID; - UINT8 bDoAutofire; - INT8 numFlanks; - INT32 lastFlankSpot; - INT8 sniper; - INT16 origDir; - INT8 wornCamo; + INT8 bVehicleUnderRepairID; + INT32 iTimeCanSignElsewhere; + INT8 bHospitalPriceModifier; + UINT32 uiStartTimeOfInsuranceContract; + INT8 bCorpseQuoteTolerance; + INT8 bDeafenedCounter; + INT32 iPositionSndID; + INT32 iTuringSoundID; + UINT8 ubLastDamageReason; + INT32 sLastTwoLocations[2]; + INT32 uiTimeSinceLastBleedGrunt; + UINT16 ubNextToPreviousAttackerID; + UINT8 bDoAutofire; + INT8 numFlanks; + INT32 lastFlankSpot; + INT8 sniper; + INT16 origDir; - INT8 urbanCamo; // Madd: new camo types - INT8 wornUrbanCamo; - - INT8 desertCamo; - INT8 wornDesertCamo; - - INT8 snowCamo; - INT8 wornSnowCamo; + INT8 wornCamo; + INT8 urbanCamo; // Madd: new camo types + INT8 wornUrbanCamo; + INT8 desertCamo; + INT8 wornDesertCamo; + INT8 snowCamo; + INT8 wornSnowCamo; // HEADROCK HAM 3.6: Added integer tracking the facility this character is using. - INT16 sFacilityTypeOperated; + INT16 sFacilityTypeOperated; // HEADROCK HAM 3.6: I'm removing this filler to make room for the above variable. I'm very worried though, // I don't know if this is a good idea at all... //INT16 filler; // Flugente: Is this the correct position? - INT8 bScopeMode; + INT8 bScopeMode; /////////////////////////////////////////////////////// // Flugente: this was the location of required variables required for the now removed poison feature. They can be used again - UINT8 ubMilitiaAssists; // Flugente: stores militia assists - INT8 sNonNPCTraderID; // Flugente: we can set up non-NPC soldiers to be merchants, we store their dealer id here (value > 0 means arms dealer entry x) - //INT8 bUnusedINT8_3; - UINT16 usDragPersonID; // Flugente: id of person we are dragging + UINT8 ubMilitiaAssists; // Flugente: stores militia assists + INT8 sNonNPCTraderID; // Flugente: we can set up non-NPC soldiers to be merchants, we store their dealer id here (value > 0 means arms dealer entry x) + //INT8 bUnusedINT8_3; + UINT16 usDragPersonID; // Flugente: id of person we are dragging - //INT16 bUnusedINT16_4; - INT16 sDragCorpseID; // Flugente: id of corpse we are dragging + //INT16 bUnusedINT16_4; + INT16 sDragCorpseID; // Flugente: id of corpse we are dragging SoldierID usChatPartnerID; // Flugente: the id of another merc we are 'chatting' with @@ -1557,7 +1545,7 @@ public: INT16 bExtraDexterity; // additional dexterity gained via drugs INT16 bExtraAgility; // additional agility gained via drugs INT16 bExtraWisdom; // additional wisdom gained via drugs - INT8 bExtraExpLevel; // corruption can temporarily alter our ExpLevel without messing up our stats this way + INT8 bExtraExpLevel; // corruption can temporarily alter our ExpLevel without messing up our stats this way UINT32 usSoldierFlagMask; // for various soldier-related flags (Illusion, Kill streak, etc.). Easier than adding 32 bool variables @@ -1614,11 +1602,11 @@ public: #ifdef JA2UB //ja25 - BOOLEAN fIgnoreGetupFromCollapseCheck; - TIMECOUNTER GetupFromJA25StartCounter; - BOOLEAN fWaitingToGetupFromJA25Start; + BOOLEAN fIgnoreGetupFromCollapseCheck; + TIMECOUNTER GetupFromJA25StartCounter; + BOOLEAN fWaitingToGetupFromJA25Start; - UINT8 ubPercentDamageInflictedByTeam[NUM_ASSIST_SLOTS]; //The percent of damage inflicted by the player team. Each element corresponds to the Soldier ID. Each element contains the percent damage inflicted by that merc + UINT8 ubPercentDamageInflictedByTeam[NUM_ASSIST_SLOTS]; //The percent of damage inflicted by the player team. Each element corresponds to the Soldier ID. Each element contains the percent damage inflicted by that merc #endif char endOfPOD; // marker for end of POD (plain old data) @@ -1629,20 +1617,20 @@ public: // properly until it is all fixed and the files updated. Inventory inv; - AI::tactical::Plan* ai_masterplan_; // Interface object for ModularizedTacticalAI + AI::tactical::Plan* ai_masterplan_; // Interface object for ModularizedTacticalAI //data from version 101 wrapped into structs - STRUCT_AIData aiData; - STRUCT_Flags flags; - STRUCT_TimeChanges timeChanges; - STRUCT_TimeCounters timeCounters; - //STRUCT_Drugs drugs; // Flugente: drug values are now in newdrugs - DRUGS newdrugs; - STRUCT_Statistics stats; - STRUCT_Pathing pathing; + STRUCT_AIData aiData; + STRUCT_Flags flags; + STRUCT_TimeChanges timeChanges; + STRUCT_TimeCounters timeCounters; + //STRUCT_Drugs drugs; // Flugente: drug values are now in newdrugs + DRUGS newdrugs; + STRUCT_Statistics stats; + STRUCT_Pathing pathing; // Debugging data - not saved - INT32 sPlotSrcGrid; + INT32 sPlotSrcGrid; //std::vector CTH; // sevenfm: remember suppression points, shock from last attack From ee429fd1f4cae02c1fe7eabb4fedbb618429c7c6 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 15 Nov 2024 22:51:48 +0200 Subject: [PATCH 043/192] Convert SOLDIERTYPE->ubAttackerID to SoldierID --- Multiplayer/client.cpp | 8 ++++---- Strategic/Strategic Merc Handler.cpp | 4 ++-- Strategic/Strategic Town Loyalty.cpp | 8 ++++---- Tactical/Overhead.cpp | 22 +++++++++++----------- Tactical/Rotting Corpses.cpp | 4 ++-- Tactical/Soldier Ani.cpp | 16 ++++++++-------- Tactical/Soldier Control.cpp | 6 +++--- Tactical/Soldier Control.h | 2 +- 8 files changed, 35 insertions(+), 35 deletions(-) diff --git a/Multiplayer/client.cpp b/Multiplayer/client.cpp index 637f6df4..b8507358 100644 --- a/Multiplayer/client.cpp +++ b/Multiplayer/client.cpp @@ -3844,9 +3844,9 @@ void send_death( SOLDIERTYPE *pSoldier ) 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) nDeath.attacker_id = pSoldier->ubNextToPreviousAttackerID; @@ -3871,8 +3871,8 @@ void send_death( SOLDIERTYPE *pSoldier ) pAttacker=MercPtrs[ 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; } diff --git a/Strategic/Strategic Merc Handler.cpp b/Strategic/Strategic Merc Handler.cpp index b3a21464..e6cae0b5 100644 --- a/Strategic/Strategic Merc Handler.cpp +++ b/Strategic/Strategic Merc Handler.cpp @@ -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; diff --git a/Strategic/Strategic Town Loyalty.cpp b/Strategic/Strategic Town Loyalty.cpp index 579155ab..44fc5f1f 100644 --- a/Strategic/Strategic Town Loyalty.cpp +++ b/Strategic/Strategic Town Loyalty.cpp @@ -740,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 ); @@ -800,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; } @@ -908,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; diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index 3d10915f..f729d931 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -3796,7 +3796,7 @@ void HandleNPCTeamMemberDeath( SOLDIERTYPE *pSoldierOld ) { if ( pSoldierOld->ubAttackerID != NOBODY ) { - pKiller = MercPtrs[ pSoldierOld->ubAttackerID ]; + pKiller = pSoldierOld->ubAttackerID; } if( pKiller && pKiller->bTeam == OUR_TEAM ) { @@ -4016,7 +4016,7 @@ void HandleNPCTeamMemberDeath( SOLDIERTYPE *pSoldierOld ) { if ( pSoldierOld->ubAttackerID != NOBODY ) { - pKiller = MercPtrs[ pSoldierOld->ubAttackerID ]; + pKiller = pSoldierOld->ubAttackerID; } BeginHandleDeidrannaDeath( pKiller, pSoldierOld->sGridNo, pSoldierOld->pathing.bLevel ); @@ -4088,7 +4088,7 @@ void HandleNPCTeamMemberDeath( SOLDIERTYPE *pSoldierOld ) // If the militia's killer is known // silversurfer: did the player team kill the militia? If not, militia shouldn't become hostile towards the player. - if ( pSoldierOld->ubAttackerID != NOBODY && MercPtrs[ pSoldierOld->ubAttackerID ]->bTeam == OUR_TEAM ) + if ( pSoldierOld->ubAttackerID != NOBODY && pSoldierOld->ubAttackerID->bTeam == OUR_TEAM ) { // also treat this as murder - but player will never be blamed for militia death he didn't cause // HEADROCK HAM 3.6: Actually this function never runs for militia (see function for details) @@ -4118,7 +4118,7 @@ void HandleNPCTeamMemberDeath( SOLDIERTYPE *pSoldierOld ) if ( pSoldierOld->ubAttackerID != NOBODY ) { - pKiller = MercPtrs[ pSoldierOld->ubAttackerID ]; + pKiller = pSoldierOld->ubAttackerID; BeginHandleQueenBitchDeath( pKiller, pSoldierOld->sGridNo, pSoldierOld->pathing.bLevel ); } @@ -4130,9 +4130,9 @@ void HandleNPCTeamMemberDeath( SOLDIERTYPE *pSoldierOld ) TrackEnemiesKilled( ENEMY_KILLED_IN_TACTICAL, pSoldierOld->ubSoldierClass ); } // If enemy guy was killed by the player, give morale boost to player's team! - if (pSoldierOld->ubAttackerID != NOBODY && MercPtrs[ pSoldierOld->ubAttackerID ]->bTeam == gbPlayerNum ) + if (pSoldierOld->ubAttackerID != NOBODY && pSoldierOld->ubAttackerID->bTeam == gbPlayerNum ) { - HandleMoraleEvent( MercPtrs[pSoldierOld->ubAttackerID], MORALE_KILLED_ENEMY, gWorldSectorX, gWorldSectorY, gbWorldSectorZ ); + HandleMoraleEvent( pSoldierOld->ubAttackerID, MORALE_KILLED_ENEMY, gWorldSectorX, gWorldSectorY, gbWorldSectorZ ); } HandleGlobalLoyaltyEvent( GLOBAL_LOYALTY_ENEMY_KILLED, gWorldSectorX, gWorldSectorY, gbWorldSectorZ ); @@ -4176,7 +4176,7 @@ void HandleNPCTeamMemberDeath( SOLDIERTYPE *pSoldierOld ) UINT16 ubAssister = NOBODY; // if it was a kill by a player's merc - if (pSoldierOld->ubAttackerID != NOBODY && MercPtrs[ pSoldierOld->ubAttackerID ]->bTeam == gbPlayerNum ) + if (pSoldierOld->ubAttackerID != NOBODY && pSoldierOld->ubAttackerID->bTeam == gbPlayerNum ) { // SANDRO - for special NPCs, you gain more experiences UINT16 usNumExpChances = ( 10 * pSoldierOld->stats.bExpLevel ); // basic value @@ -4207,7 +4207,7 @@ void HandleNPCTeamMemberDeath( SOLDIERTYPE *pSoldierOld ) break; } // EXPERIENCE CLASS GAIN: Earned a kill - StatChange( MercPtrs[ pSoldierOld->ubAttackerID ], EXPERAMT, usNumExpChances, FALSE ); + StatChange( pSoldierOld->ubAttackerID, EXPERAMT, usNumExpChances, FALSE ); } // JA2 Gold: if previous and current attackers are the same, the next-to-previous attacker gets the assist @@ -4229,9 +4229,9 @@ void HandleNPCTeamMemberDeath( SOLDIERTYPE *pSoldierOld ) } } - if (pSoldierOld->ubAttackerID != NOBODY && MercPtrs[ pSoldierOld->ubAttackerID ]->bTeam == MILITIA_TEAM ) + if (pSoldierOld->ubAttackerID != NOBODY && pSoldierOld->ubAttackerID->bTeam == MILITIA_TEAM ) { - MercPtrs[pSoldierOld->ubAttackerID]->ubMilitiaAssists++; + pSoldierOld->ubAttackerID->ubMilitiaAssists++; } //if the NPC is a dealer, add the dealers items to the ground @@ -4567,7 +4567,7 @@ UINT8 CivilianGroupMembersChangeSidesWithinProximity( SOLDIERTYPE * pAttacked ) // if in LOS of this guy's attacker if ( (pAttacked->ubAttackerID != NOBODY && pSoldier->aiData.bOppList[pAttacked->ubAttackerID] == SEEN_CURRENTLY) || ( PythSpacesAway( pSoldier->sGridNo, pAttacked->sGridNo ) < pAttacked->GetMaxDistanceVisible(pSoldier->sGridNo, pSoldier->pathing.bLevel) ) - || ( pAttacked->ubAttackerID != NOBODY && PythSpacesAway( pSoldier->sGridNo, MercPtrs[ pAttacked->ubAttackerID ]->sGridNo ) < pAttacked->GetMaxDistanceVisible(MercPtrs[ pAttacked->ubAttackerID ]->sGridNo, MercPtrs[ pAttacked->ubAttackerID ]->pathing.bLevel) ) ) + || ( pAttacked->ubAttackerID != NOBODY && PythSpacesAway( pSoldier->sGridNo, pAttacked->ubAttackerID->sGridNo ) < pAttacked->GetMaxDistanceVisible(pAttacked->ubAttackerID->sGridNo, pAttacked->ubAttackerID->pathing.bLevel) ) ) { MakeCivHostile(pSoldier); if ( pSoldier->aiData.bOppCnt > 0 ) diff --git a/Tactical/Rotting Corpses.cpp b/Tactical/Rotting Corpses.cpp index cee4fe75..b5346fb6 100644 --- a/Tactical/Rotting Corpses.cpp +++ b/Tactical/Rotting Corpses.cpp @@ -1022,7 +1022,7 @@ BOOLEAN TurnSoldierIntoCorpse( SOLDIERTYPE *pSoldier, BOOLEAN fRemoveMerc, BOOLE // HEADROCK HAM B2.8: Now also reveals equipment dropped by militia, if requirement is met. if( pSoldier->bTeam == ENEMY_TEAM || ( gGameExternalOptions.ubMilitiaDropEquipment == 2 && pSoldier->bTeam == MILITIA_TEAM ) || - ( gGameExternalOptions.ubMilitiaDropEquipment == 1 && pSoldier->bTeam == MILITIA_TEAM && Menptr[ pSoldier->ubAttackerID ].bTeam != OUR_TEAM )) + ( gGameExternalOptions.ubMilitiaDropEquipment == 1 && pSoldier->bTeam == MILITIA_TEAM && pSoldier->ubAttackerID->bTeam != OUR_TEAM )) { //add a flag to the item so when all enemies are killed, we can run through and reveal all the enemies items usItemFlags |= WORLD_ITEM_DROPPED_FROM_ENEMY; @@ -1054,7 +1054,7 @@ BOOLEAN TurnSoldierIntoCorpse( SOLDIERTYPE *pSoldier, BOOLEAN fRemoveMerc, BOOLE // HEADROCK HAM B2.8: Militia will drop items only if allowed. if (!(gGameExternalOptions.ubMilitiaDropEquipment == 0 && pSoldier->bTeam == MILITIA_TEAM ) && - !(gGameExternalOptions.ubMilitiaDropEquipment == 1 && pSoldier->bTeam == MILITIA_TEAM && Menptr[ pSoldier->ubAttackerID ].bTeam == OUR_TEAM )) + !(gGameExternalOptions.ubMilitiaDropEquipment == 1 && pSoldier->bTeam == MILITIA_TEAM && pSoldier->ubAttackerID->bTeam == OUR_TEAM )) { AddItemToPool( pSoldier->sGridNo, pObj, bVisible , pSoldier->pathing.bLevel, usItemFlags, -1 ); } diff --git a/Tactical/Soldier Ani.cpp b/Tactical/Soldier Ani.cpp index 1b86246b..92cf3377 100644 --- a/Tactical/Soldier Ani.cpp +++ b/Tactical/Soldier Ani.cpp @@ -3932,7 +3932,7 @@ BOOLEAN HandleSoldierDeath( SOLDIERTYPE *pSoldier , BOOLEAN *pfMadeCorpse ) SOLDIERTYPE *pKillerSoldier = NULL; if(pSoldier->ubAttackerID != NOBODY) { - pKillerSoldier = MercPtrs[pSoldier->ubAttackerID]; + pKillerSoldier = pSoldier->ubAttackerID; } else if(pSoldier->ubPreviousAttackerID != NOBODY) { @@ -3995,8 +3995,8 @@ BOOLEAN HandleSoldierDeath( SOLDIERTYPE *pSoldier , BOOLEAN *pfMadeCorpse ) { ////////////////////////////////////////////////////////////// // SANDRO - some changes here - UINT16 ubAttacker = pSoldier->ubAttackerID; - UINT16 ubAssister = pSoldier->ubPreviousAttackerID; + SoldierID ubAttacker = pSoldier->ubAttackerID; + SoldierID ubAssister = pSoldier->ubPreviousAttackerID; // If attacker is nobody, and we died, then set the last attacker(if exists) as our killer if ( ubAttacker == NOBODY ) { @@ -4024,9 +4024,9 @@ BOOLEAN HandleSoldierDeath( SOLDIERTYPE *pSoldier , BOOLEAN *pfMadeCorpse ) { // anv: note that ubAttacker can be already different from pSoldier->ubAttackerID // IF this guy has an attacker and he's a good guy, play sound - if ( pSoldier->ubAttackerID != NOBODY ) + if ( pSoldier->ubAttackerID < NOBODY ) { - if ( MercPtrs[ pSoldier->ubAttackerID ] != NULL && MercPtrs[ pSoldier->ubAttackerID ]->bTeam == gbPlayerNum && gTacticalStatus.ubAttackBusyCount > 0 ) + if ( pSoldier->ubAttackerID->bTeam == gbPlayerNum && gTacticalStatus.ubAttackBusyCount > 0 ) { gTacticalStatus.fKilledEnemyOnAttack = TRUE; gTacticalStatus.ubEnemyKilledOnAttack = pSoldier->ubID; @@ -4110,7 +4110,7 @@ BOOLEAN HandleSoldierDeath( SOLDIERTYPE *pSoldier , BOOLEAN *pfMadeCorpse ) } break; } - //gMercProfiles[ MercPtrs[ pSoldier->ubAttackerID ]->ubProfile ].usKills++; + //gMercProfiles[ pSoldier->ubAttackerID->ubProfile ].usKills++; ///////////////////////////////////////////////////////////////////////////////////// gStrategicStatus.usPlayerKills++; @@ -4456,7 +4456,7 @@ void CheckForAndHandleSoldierIncompacitated( SOLDIERTYPE *pSoldier ) // SANDRO - if Martial Artist took someone down, always fall back if possible (for the fun) if ( pSoldier->ubAttackerID != NOBODY && gGameOptions.fNewTraitSystem ) { - if ( HAS_SKILL_TRAIT( MercPtrs[ pSoldier->ubAttackerID ], MARTIAL_ARTS_NT ) && (!MercPtrs[ pSoldier->ubAttackerID ]->usAttackingWeapon || ItemIsBrassKnuckles(MercPtrs[ pSoldier->ubAttackerID ]->inv[HANDPOS].usItem)) ) + if ( HAS_SKILL_TRAIT( pSoldier->ubAttackerID, MARTIAL_ARTS_NT ) && (!pSoldier->ubAttackerID->usAttackingWeapon || ItemIsBrassKnuckles(pSoldier->ubAttackerID->inv[HANDPOS].usItem)) ) { fAlwaysFallBack = TRUE; } @@ -4468,7 +4468,7 @@ void CheckForAndHandleSoldierIncompacitated( SOLDIERTYPE *pSoldier ) if ( pSoldier->ubAttackerID != NOBODY ) { // Find direction! - bTestDirection = (INT8)GetDirectionFromGridNo( MercPtrs[ pSoldier->ubAttackerID ]->sGridNo, pSoldier ); + bTestDirection = (INT8)GetDirectionFromGridNo( pSoldier->ubAttackerID->sGridNo, pSoldier ); fForceDirection = TRUE; } diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index 78ba39b6..bb011c63 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -5732,9 +5732,9 @@ void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT1 // handle morale for heavy damage attacks if ( sDamage > 25 ) { - if ( this->ubAttackerID != NOBODY && MercPtrs[this->ubAttackerID]->bTeam == gbPlayerNum ) + if ( this->ubAttackerID != NOBODY && this->ubAttackerID->bTeam == gbPlayerNum ) { - HandleMoraleEvent( MercPtrs[this->ubAttackerID], MORALE_DID_LOTS_OF_DAMAGE, MercPtrs[this->ubAttackerID]->sSectorX, MercPtrs[this->ubAttackerID]->sSectorY, MercPtrs[this->ubAttackerID]->bSectorZ ); + HandleMoraleEvent( this->ubAttackerID, MORALE_DID_LOTS_OF_DAMAGE, this->ubAttackerID->sSectorX, this->ubAttackerID->sSectorY, this->ubAttackerID->bSectorZ ); this->ubLastMoraleFromHit++; } if ( this->bTeam == gbPlayerNum ) @@ -10475,7 +10475,7 @@ UINT8 SOLDIERTYPE::SoldierTakeDamage( INT8 bHeight, INT16 sLifeDeduct, INT16 sBr sTestOne = EffectiveStrength( this, FALSE ); sTestTwo = 2 * max(sLifeDeduct, (sBreathLoss / 100)); - if (this->ubAttackerID != NOBODY && MercPtrs[this->ubAttackerID]->ubBodyType == BLOODCAT) + if (this->ubAttackerID != NOBODY && this->ubAttackerID->ubBodyType == BLOODCAT) { // bloodcat boost, let them make people drop items more sTestTwo += 20; diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index 70a032d7..c092c3c2 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -1187,8 +1187,8 @@ public: UINT32 uiAIDelay; INT16 sReloadDelay; - UINT16 ubAttackerID; UINT16 ubPreviousAttackerID; + SoldierID ubAttackerID; INT32 sInsertionGridNo; From 131172e41a2a43915ad69d6fcabe9db827c41a2b Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 15 Nov 2024 22:54:44 +0200 Subject: [PATCH 044/192] Convert SOLDIERTYPE->ubPreviousAttackerID to SoldierID --- Multiplayer/client.cpp | 4 ++-- Tactical/Dialogue Control.cpp | 4 ++-- Tactical/Soldier Ani.cpp | 2 +- Tactical/Soldier Control.h | 2 +- Tactical/SoldierTooltips.cpp | 6 +++--- TacticalAI/Attacks.cpp | 30 ++++++++++++------------------ 6 files changed, 21 insertions(+), 27 deletions(-) diff --git a/Multiplayer/client.cpp b/Multiplayer/client.cpp index b8507358..b1100d17 100644 --- a/Multiplayer/client.cpp +++ b/Multiplayer/client.cpp @@ -3863,9 +3863,9 @@ 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 ]; diff --git a/Tactical/Dialogue Control.cpp b/Tactical/Dialogue Control.cpp index cc8c8e67..4a2fc253 100644 --- a/Tactical/Dialogue Control.cpp +++ b/Tactical/Dialogue Control.cpp @@ -3117,8 +3117,8 @@ void HandleDialogueEnd( FACETYPE *pFace ) case QUOTE_CLOSE_CALL: case QUOTE_UNDER_HEAVY_FIRE: case QUOTE_TAKEN_A_BREATING: - if( pSoldier->ubPreviousAttackerID != NOBODY && !( MercPtrs[pSoldier->ubPreviousAttackerID]->bDeafenedCounter > 0 ) ) - PossiblyStartEnemyTaunt( MercPtrs[pSoldier->ubPreviousAttackerID], TAUNT_RIPOSTE, gTacticalStatus.ubLastQuoteProfileNUm ); + if( pSoldier->ubPreviousAttackerID != NOBODY && !( pSoldier->ubPreviousAttackerID->bDeafenedCounter > 0 ) ) + PossiblyStartEnemyTaunt( pSoldier->ubPreviousAttackerID, TAUNT_RIPOSTE, gTacticalStatus.ubLastQuoteProfileNUm ); break; default: // select random enemy, who we see, who sees us and isn't deaf diff --git a/Tactical/Soldier Ani.cpp b/Tactical/Soldier Ani.cpp index 92cf3377..8f1e6191 100644 --- a/Tactical/Soldier Ani.cpp +++ b/Tactical/Soldier Ani.cpp @@ -3936,7 +3936,7 @@ BOOLEAN HandleSoldierDeath( SOLDIERTYPE *pSoldier , BOOLEAN *pfMadeCorpse ) } else if(pSoldier->ubPreviousAttackerID != NOBODY) { - pKillerSoldier = MercPtrs[pSoldier->ubPreviousAttackerID]; + pKillerSoldier = pSoldier->ubPreviousAttackerID; } if(pKillerSoldier != NULL) { diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index c092c3c2..858263d3 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -1187,8 +1187,8 @@ public: UINT32 uiAIDelay; INT16 sReloadDelay; - UINT16 ubPreviousAttackerID; SoldierID ubAttackerID; + SoldierID ubPreviousAttackerID; INT32 sInsertionGridNo; diff --git a/Tactical/SoldierTooltips.cpp b/Tactical/SoldierTooltips.cpp index 0adebc5a..ceb58df0 100644 --- a/Tactical/SoldierTooltips.cpp +++ b/Tactical/SoldierTooltips.cpp @@ -261,13 +261,13 @@ void SoldierTooltip( SOLDIERTYPE* pSoldier ) swprintf(pStrInfo, L"%s|Roaming |Range: %d\n", pStrInfo, RoamingRange(pSoldier, &usOrigin)); swprintf(pStrInfo, L"%s|Team |Aware: %d\n", pStrInfo, gTacticalStatus.Team[pSoldier->bTeam].bAwareOfOpposition); swprintf(pStrInfo, L"%s|Collapsed %d |BreathCollapsed %d\n", pStrInfo, pSoldier->bCollapsed, pSoldier->bBreathCollapsed); - if (pSoldier->ubPreviousAttackerID != NOBODY && MercPtrs[pSoldier->ubPreviousAttackerID]) + if (pSoldier->ubPreviousAttackerID < NOBODY) { - swprintf(pStrInfo, L"%s|Under |Fire %d AttackerID %d AttackerTarget %d\n", pStrInfo, pSoldier->aiData.bUnderFire, pSoldier->ubPreviousAttackerID, MercPtrs[pSoldier->ubPreviousAttackerID]->sLastTarget); + swprintf(pStrInfo, L"%s|Under |Fire %d AttackerID %d AttackerTarget %d\n", pStrInfo, pSoldier->aiData.bUnderFire, pSoldier->ubPreviousAttackerID.i, pSoldier->ubPreviousAttackerID->sLastTarget); } else { - swprintf(pStrInfo, L"%s|Under |Fire %d AttackerID %d\n", pStrInfo, pSoldier->aiData.bUnderFire, pSoldier->ubPreviousAttackerID); + swprintf(pStrInfo, L"%s|Under |Fire %d AttackerID %d\n", pStrInfo, pSoldier->aiData.bUnderFire, pSoldier->ubPreviousAttackerID.i); } swprintf(pStrInfo, L"%s|Visible %d |Moved %d\n", pStrInfo, pSoldier->bVisible, pSoldier->aiData.bMoved); diff --git a/TacticalAI/Attacks.cpp b/TacticalAI/Attacks.cpp index e47e0ca4..25ea052a 100644 --- a/TacticalAI/Attacks.cpp +++ b/TacticalAI/Attacks.cpp @@ -3788,21 +3788,19 @@ void CheckTossSelfSmoke(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow) // if we can afford the minimum AP cost to throw this tossable item if (pSoldier->bActionPoints >= ubMinAPcost) { - INT32 sSpot = pSoldier->sGridNo; - INT8 bLevel = pSoldier->pathing.bLevel; + INT32 sSpot = pSoldier->sGridNo; + INT8 bLevel = pSoldier->pathing.bLevel; - INT32 sTargetSpot = NOWHERE; - INT8 bTargetLevel = bLevel; + INT32 sTargetSpot = NOWHERE; + INT8 bTargetLevel = bLevel; - INT32 sClosestThreat; - UINT16 ubClosestThreatID = pSoldier->ubPreviousAttackerID; + INT32 sClosestThreat; + SoldierID ubClosestThreatID = pSoldier->ubPreviousAttackerID; // try to find good spot for smoke - if (ubClosestThreatID != NOBODY && - MercPtrs[ubClosestThreatID] && - !TileIsOutOfBounds(MercPtrs[ubClosestThreatID]->sGridNo)) + if (ubClosestThreatID != NOBODY && !TileIsOutOfBounds(ubClosestThreatID->sGridNo)) { - sClosestThreat = MercPtrs[ubClosestThreatID]->sGridNo; + sClosestThreat = ubClosestThreatID->sGridNo; sTargetSpot = FindTossSpotInDirection(sSpot, bLevel, sClosestThreat, TRUE, TRUE); } @@ -3811,11 +3809,9 @@ void CheckTossSelfSmoke(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow) { ubClosestThreatID = ClosestSeenThreatID(pSoldier, uiThreatCnt, SEEN_LAST_TURN); - if (ubClosestThreatID != NOBODY && - MercPtrs[ubClosestThreatID] && - !TileIsOutOfBounds(MercPtrs[ubClosestThreatID]->sGridNo)) + if (ubClosestThreatID != NOBODY && !TileIsOutOfBounds(ubClosestThreatID->sGridNo)) { - sClosestThreat = MercPtrs[ubClosestThreatID]->sGridNo; + sClosestThreat = ubClosestThreatID->sGridNo; sTargetSpot = FindTossSpotInDirection(sSpot, bLevel, sClosestThreat, TRUE, TRUE); } @@ -3825,11 +3821,9 @@ void CheckTossSelfSmoke(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow) { ubClosestThreatID = ClosestKnownThreatID(pSoldier, uiThreatCnt); - if (ubClosestThreatID != NOBODY && - MercPtrs[ubClosestThreatID] && - !TileIsOutOfBounds(MercPtrs[ubClosestThreatID]->sGridNo)) + if (ubClosestThreatID != NOBODY && !TileIsOutOfBounds(ubClosestThreatID->sGridNo)) { - sClosestThreat = MercPtrs[ubClosestThreatID]->sGridNo; + sClosestThreat = ubClosestThreatID->sGridNo; sTargetSpot = FindTossSpotInDirection(sSpot, bLevel, sClosestThreat, TRUE, TRUE); } From 8346d5bfa1598507f4bac41d4dd538a852ffef6a Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 15 Nov 2024 22:58:25 +0200 Subject: [PATCH 045/192] Convert SOLDIERTYPE->ubNextToPreviousAttackerID to SoldierID --- Multiplayer/client.cpp | 6 +++--- Tactical/Soldier Control.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Multiplayer/client.cpp b/Multiplayer/client.cpp index b1100d17..f540d025 100644 --- a/Multiplayer/client.cpp +++ b/Multiplayer/client.cpp @@ -3848,7 +3848,7 @@ void send_death( SOLDIERTYPE *pSoldier ) { 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; } @@ -3867,8 +3867,8 @@ void send_death( SOLDIERTYPE *pSoldier ) { 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 != NOBODY) diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index 858263d3..cd4e1ff2 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -1504,7 +1504,7 @@ public: UINT8 ubLastDamageReason; INT32 sLastTwoLocations[2]; INT32 uiTimeSinceLastBleedGrunt; - UINT16 ubNextToPreviousAttackerID; + SoldierID ubNextToPreviousAttackerID; UINT8 bDoAutofire; INT8 numFlanks; INT32 lastFlankSpot; From 1a172427efbd20ff52d061a4a4088e4b3662ad96 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 15 Nov 2024 23:01:52 +0200 Subject: [PATCH 046/192] Update Soldier Create.cpp --- Tactical/Soldier Create.cpp | 76 ++++++++++++++++++------------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/Tactical/Soldier Create.cpp b/Tactical/Soldier Create.cpp index 50cfbb23..a685dfc7 100644 --- a/Tactical/Soldier Create.cpp +++ b/Tactical/Soldier Create.cpp @@ -2085,57 +2085,57 @@ void InitSoldierStruct( SOLDIERTYPE *pSoldier ) pSoldier->initialize(); // Set default values - pSoldier->bVisible = -1; - pSoldier->iFaceIndex = -1; + pSoldier->bVisible = -1; + pSoldier->iFaceIndex = -1; // Set morale default - //pSoldier->aiData.bMorale = DEFAULT_MORALE; - pSoldier->aiData.bMorale = gMoraleSettings.ubDefaultMorale; + //pSoldier->aiData.bMorale = DEFAULT_MORALE; + pSoldier->aiData.bMorale = gMoraleSettings.ubDefaultMorale; - pSoldier->ubAttackerID = NOBODY; - pSoldier->ubPreviousAttackerID = NOBODY; - pSoldier->ubNextToPreviousAttackerID = NOBODY; + pSoldier->ubAttackerID = NOBODY; + pSoldier->ubPreviousAttackerID = NOBODY; + pSoldier->ubNextToPreviousAttackerID = NOBODY; //Set AI Delay! - pSoldier->uiAIDelay = 100; + pSoldier->uiAIDelay = 100; - pSoldier->iLight = -1; - pSoldier->iFaceIndex = -1; + pSoldier->iLight = -1; + pSoldier->iFaceIndex = -1; // Set update time to new speed - pSoldier->ubDesiredHeight = NO_DESIRED_HEIGHT; - pSoldier->bViewRange = NORMAL_VIEW_RANGE; - pSoldier->bInSector = FALSE; - pSoldier->sGridNo = NOWHERE; - pSoldier->iMuzFlash = -1; - pSoldier->usPendingAnimation = NO_PENDING_ANIMATION; + pSoldier->ubDesiredHeight = NO_DESIRED_HEIGHT; + pSoldier->bViewRange = NORMAL_VIEW_RANGE; + pSoldier->bInSector = FALSE; + pSoldier->sGridNo = NOWHERE; + pSoldier->iMuzFlash = -1; + pSoldier->usPendingAnimation = NO_PENDING_ANIMATION; pSoldier->usPendingAnimation2 = NO_PENDING_ANIMATION; - pSoldier->ubPendingStanceChange = NO_PENDING_STANCE; - pSoldier->ubPendingDirection = NO_PENDING_DIRECTION; - pSoldier->aiData.ubPendingAction = NO_PENDING_ACTION; + pSoldier->ubPendingStanceChange = NO_PENDING_STANCE; + pSoldier->ubPendingDirection = NO_PENDING_DIRECTION; + pSoldier->aiData.ubPendingAction = NO_PENDING_ACTION; pSoldier->bLastRenderVisibleValue = -1; - pSoldier->bBreath = 99; - pSoldier->bBreathMax = 100; - pSoldier->bActive = TRUE; - pSoldier->flags.fShowLocator = FALSE; - pSoldier->sLastTarget = NOWHERE; + pSoldier->bBreath = 99; + pSoldier->bBreathMax = 100; + pSoldier->bActive = TRUE; + pSoldier->flags.fShowLocator = FALSE; + pSoldier->sLastTarget = NOWHERE; pSoldier->sAbsoluteFinalDestination = NOWHERE; - pSoldier->sZLevelOverride = -1; - pSoldier->ubServicePartner = NOBODY; - pSoldier->ubAttackingHand = HANDPOS; - pSoldier->usAnimState = STANDING; - pSoldier->aiData.bInterruptDuelPts = NO_INTERRUPT; - pSoldier->aiData.bMoved = FALSE; + pSoldier->sZLevelOverride = -1; + pSoldier->ubServicePartner = NOBODY; + pSoldier->ubAttackingHand = HANDPOS; + pSoldier->usAnimState = STANDING; + pSoldier->aiData.bInterruptDuelPts = NO_INTERRUPT; + pSoldier->aiData.bMoved = FALSE; pSoldier->ubRobotRemoteHolderID = NOBODY; - pSoldier->aiData.sNoiseGridno = NOWHERE; - pSoldier->ubPrevSectorID = 255; - pSoldier->aiData.bNextPatrolPnt = 1; - pSoldier->bCurrentCivQuote = -1; + pSoldier->aiData.sNoiseGridno = NOWHERE; + pSoldier->ubPrevSectorID = 255; + pSoldier->aiData.bNextPatrolPnt = 1; + pSoldier->bCurrentCivQuote = -1; pSoldier->bCurrentCivQuoteDelta = 0; - pSoldier->uiBattleSoundID = NO_SAMPLE; - pSoldier->aiData.ubXRayedBy = NOBODY; - pSoldier->uiXRayActivatedTime = 0; - pSoldier->bBulletsLeft = 0; + pSoldier->uiBattleSoundID = NO_SAMPLE; + pSoldier->aiData.ubXRayedBy = NOBODY; + pSoldier->uiXRayActivatedTime = 0; + pSoldier->bBulletsLeft = 0; pSoldier->bVehicleUnderRepairID = -1; pSoldier->sFacilityTypeOperated = -1; // HEADROCK HAM 3.6: Facility Operated pSoldier->usChatPartnerID = NOBODY; From 5de6f77f2e4cacca2cb8d69cb3375899647b6220 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 15 Nov 2024 23:26:22 +0200 Subject: [PATCH 047/192] Convert SOLDIERTYPE::ubOppNum to SoldierID --- Tactical/Soldier Control.h | 2 +- Tactical/Weapons.cpp | 52 +++++++++++++++++++++----------------- 2 files changed, 30 insertions(+), 24 deletions(-) diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index cd4e1ff2..0a1c36d6 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -1134,7 +1134,7 @@ public: UINT8 ubWaitActionToDo; INT8 ubInsertionDirection; INT8 bGunType; - UINT16 ubOppNum; + SoldierID ubOppNum; INT8 bLastRenderVisibleValue; UINT8 ubAttackingHand; INT16 sWeightCarriedAtTurnStart; diff --git a/Tactical/Weapons.cpp b/Tactical/Weapons.cpp index 4e09c326..d87690f6 100644 --- a/Tactical/Weapons.cpp +++ b/Tactical/Weapons.cpp @@ -5635,13 +5635,13 @@ void StructureHit( INT32 iBullet, UINT16 usWeaponIndex, INT16 bWeaponStatus, UIN if ( pAttacker->ubOppNum != NOBODY ) { // if it was another team shooting at someone under our control - if ( (pAttacker->bTeam != Menptr[ pAttacker->ubOppNum ].bTeam ) ) + if ( pAttacker->bTeam != pAttacker->ubOppNum->bTeam ) { // if OPPONENT is under our control - if (Menptr[ pAttacker->ubOppNum ].bTeam == gbPlayerNum ) + if ( pAttacker->ubOppNum->bTeam == gbPlayerNum ) { // AGILITY GAIN: Opponent "dodged" a bullet shot at him (it missed) - StatChange( MercPtrs[ pAttacker->ubOppNum ], AGILAMT, 5, FROM_FAILURE ); + StatChange( pAttacker->ubOppNum, AGILAMT, 5, FROM_FAILURE ); } } } @@ -6057,31 +6057,35 @@ void StructureHit( INT32 iBullet, UINT16 usWeaponIndex, INT16 bWeaponStatus, UIN // anv: enemy taunt on miss if( pBullet->pFirer != NULL && pBullet->pFirer->ubOppNum != NOBODY ) { + SoldierID OpponentID = pBullet->pFirer->ubOppNum; + INT8 Team = OpponentID->bTeam; + SoldierID ShooterID = pBullet->pFirer->ubID; + if( Item[ pBullet->pFirer->usAttackingWeapon ].usItemClass & IC_GUN ) { if (gTauntsSettings.fTauntVoice) { // say taunt only to inform others - if (gbPublicOpplist[MercPtrs[pBullet->pFirer->ubOppNum]->bTeam][pBullet->pFirer->ubID] != SEEN_CURRENTLY && - gbPublicOpplist[MercPtrs[pBullet->pFirer->ubOppNum]->bTeam][pBullet->pFirer->ubID] != SEEN_THIS_TURN && - gTacticalStatus.Team[MercPtrs[pBullet->pFirer->ubOppNum]->bTeam].bMenInSector > 1) + if (gbPublicOpplist[Team][ShooterID] != SEEN_CURRENTLY && + gbPublicOpplist[Team][ShooterID] != SEEN_THIS_TURN && + gTacticalStatus.Team[Team].bMenInSector > 1) { - PossiblyStartEnemyTaunt(MercPtrs[pBullet->pFirer->ubOppNum], TAUNT_GOT_MISSED_GUNFIRE, pBullet->pFirer->ubID); + PossiblyStartEnemyTaunt(OpponentID, TAUNT_GOT_MISSED_GUNFIRE, ShooterID); } } - else if (MercPtrs[pBullet->pFirer->ubOppNum]->aiData.bOppList[pBullet->pFirer->ubID] == SEEN_CURRENTLY) + else if (OpponentID->aiData.bOppList[ShooterID] == SEEN_CURRENTLY) { - PossiblyStartEnemyTaunt(MercPtrs[pBullet->pFirer->ubOppNum], TAUNT_GOT_MISSED_GUNFIRE, pBullet->pFirer->ubID); + PossiblyStartEnemyTaunt(OpponentID, TAUNT_GOT_MISSED_GUNFIRE, ShooterID); } - PossiblyStartEnemyTaunt( pBullet->pFirer, TAUNT_MISS_GUNFIRE, pBullet->pFirer->ubOppNum ); + PossiblyStartEnemyTaunt( pBullet->pFirer, TAUNT_MISS_GUNFIRE, OpponentID); } else if( Item[ pBullet->pFirer->usAttackingWeapon ].usItemClass & IC_THROWING_KNIFE ) { - if( MercPtrs[ pBullet->pFirer->ubOppNum ]->aiData.bOppList[ pBullet->pFirer->ubID ] == SEEN_CURRENTLY ) - PossiblyStartEnemyTaunt( MercPtrs[ pBullet->pFirer->ubOppNum ], TAUNT_GOT_MISSED_THROWING_KNIFE, pBullet->pFirer->ubID ); + if( OpponentID->aiData.bOppList[ShooterID] == SEEN_CURRENTLY ) + PossiblyStartEnemyTaunt(OpponentID, TAUNT_GOT_MISSED_THROWING_KNIFE, ShooterID); - PossiblyStartEnemyTaunt( pBullet->pFirer, TAUNT_MISS_THROWING_KNIFE, pBullet->pFirer->ubOppNum ); + PossiblyStartEnemyTaunt( pBullet->pFirer, TAUNT_MISS_THROWING_KNIFE, OpponentID); } } } @@ -9060,7 +9064,7 @@ INT32 HTHImpact( SOLDIERTYPE * pSoldier, SOLDIERTYPE * pTarget, INT32 iHitBy, BO void ShotMiss( UINT16 ubAttackerID, INT32 iBullet ) { BOOLEAN fDoMissForGun = FALSE; - SOLDIERTYPE* pAttacker = NULL; + SOLDIERTYPE* pAttacker = NULL; BULLET* pBullet; if ( ubAttackerID == NOBODY ) @@ -9071,13 +9075,13 @@ void ShotMiss( UINT16 ubAttackerID, INT32 iBullet ) if ( pAttacker->ubOppNum != NOBODY ) { // if it was another team shooting at someone under our control - if ( (pAttacker->bTeam != Menptr[ pAttacker->ubOppNum ].bTeam ) ) + if ( (pAttacker->bTeam != pAttacker->ubOppNum->bTeam ) ) { // if OPPONENT is under our control - if (Menptr[ pAttacker->ubOppNum ].bTeam == gbPlayerNum ) + if (pAttacker->ubOppNum->bTeam == gbPlayerNum ) { // AGILITY GAIN: Opponent "dodged" a bullet shot at him (it missed) - StatChange( MercPtrs[ pAttacker->ubOppNum ], AGILAMT, 5, FROM_FAILURE ); + StatChange( pAttacker->ubOppNum, AGILAMT, 5, FROM_FAILURE ); } } } @@ -9161,17 +9165,19 @@ void ShotMiss( UINT16 ubAttackerID, INT32 iBullet ) // anv: enemy taunt on miss if ( pAttacker != NULL && pAttacker->ubOppNum != NOBODY ) { + SoldierID OpponentID = pAttacker->ubOppNum; + if( Item[ pAttacker->usAttackingWeapon ].usItemClass & IC_GUN ) { - if( MercPtrs[pAttacker->ubOppNum]->aiData.bOppList[ pAttacker->ubID ] == SEEN_CURRENTLY ) - PossiblyStartEnemyTaunt( MercPtrs[pAttacker->ubOppNum], TAUNT_GOT_MISSED_GUNFIRE, pAttacker->ubID ); - PossiblyStartEnemyTaunt( pAttacker, TAUNT_MISS_GUNFIRE, pAttacker->ubOppNum ); + if(OpponentID->aiData.bOppList[ pAttacker->ubID ] == SEEN_CURRENTLY ) + PossiblyStartEnemyTaunt( OpponentID, TAUNT_GOT_MISSED_GUNFIRE, pAttacker->ubID ); + PossiblyStartEnemyTaunt( pAttacker, TAUNT_MISS_GUNFIRE, OpponentID ); } else if( Item[ pAttacker->usAttackingWeapon ].usItemClass & IC_THROWING_KNIFE ) { - if( MercPtrs[pAttacker->ubOppNum]->aiData.bOppList[ pAttacker->ubID ] == SEEN_CURRENTLY ) - PossiblyStartEnemyTaunt( MercPtrs[pAttacker->ubOppNum], TAUNT_GOT_MISSED_THROWING_KNIFE, pAttacker->ubID ); - PossiblyStartEnemyTaunt( pAttacker, TAUNT_MISS_THROWING_KNIFE, pAttacker->ubOppNum ); + if( OpponentID->aiData.bOppList[ pAttacker->ubID ] == SEEN_CURRENTLY ) + PossiblyStartEnemyTaunt( OpponentID, TAUNT_GOT_MISSED_THROWING_KNIFE, pAttacker->ubID ); + PossiblyStartEnemyTaunt( pAttacker, TAUNT_MISS_THROWING_KNIFE, OpponentID ); } } } From f823cb97184c15be00e3b670dd2a2ffa0360a3a0 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 15 Nov 2024 23:32:13 +0200 Subject: [PATCH 048/192] Update Soldier Control.h --- Tactical/Soldier Control.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index 0a1c36d6..de9812a1 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -1387,7 +1387,7 @@ public: UINT8 ubSoldierClass; //admin, elite, troop (creature types?) Nav: 2 seems to mean elite, 3 troop so admin is 1 UINT8 ubAPsLostToSuppression; - UINT16 ubSuppressorID; + SoldierID ubSuppressorID; //Squad merging vars UINT8 ubDesiredSquadAssignment; From 566ead5815ea994603c2903af3065ed83d93e04c Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 15 Nov 2024 23:46:15 +0200 Subject: [PATCH 049/192] Convert SOLDIERTYPE::ubTargetID to SoldierID --- Tactical/LOS.cpp | 6 +-- Tactical/Overhead.cpp | 2 +- Tactical/Soldier Ani.cpp | 74 ++++++++++++++++++------------------ Tactical/Soldier Control.cpp | 4 +- Tactical/Soldier Control.h | 2 +- Tactical/Soldier Profile.cpp | 2 +- Tactical/Weapons.cpp | 24 ++++++------ 7 files changed, 57 insertions(+), 57 deletions(-) diff --git a/Tactical/LOS.cpp b/Tactical/LOS.cpp index d7ad5a97..7c607510 100644 --- a/Tactical/LOS.cpp +++ b/Tactical/LOS.cpp @@ -4907,7 +4907,7 @@ INT8 FireBulletGivenTargetNCTH( SOLDIERTYPE * pFirer, FLOAT dEndX, FLOAT dEndY, ubImpact = (UINT8) (ubImpact * AmmoTypes[weapon->gun.ubGunAmmoType].multipleBulletDamageMultiplier / max(1,AmmoTypes[weapon->gun.ubGunAmmoType].multipleBulletDamageDivisor) ); if (pFirer->ubTargetID != NOBODY) { - MercPtrs[ pFirer->ubTargetID ]->bNumPelletsHitBy = 0; + pFirer->ubTargetID->bNumPelletsHitBy = 0; } } weapon=NULL; @@ -5435,7 +5435,7 @@ INT8 FireBulletGivenTarget( SOLDIERTYPE * pFirer, FLOAT dEndX, FLOAT dEndY, FLOA ubImpact = (UINT8) (ubImpact * AmmoTypes[weapon->gun.ubGunAmmoType].multipleBulletDamageMultiplier / max(1,AmmoTypes[weapon->gun.ubGunAmmoType].multipleBulletDamageDivisor) ); if (pFirer->ubTargetID != NOBODY) { - MercPtrs[ pFirer->ubTargetID ]->bNumPelletsHitBy = 0; + pFirer->ubTargetID->bNumPelletsHitBy = 0; } } weapon=NULL; @@ -6951,7 +6951,7 @@ INT8 ChanceToGetThrough(SOLDIERTYPE * pFirer, FLOAT dEndX, FLOAT dEndY, FLOAT dE // sevenfm: additionally initialize usAttackingWeapon, ubTargetID, bDoBurst and bDoAutofire which are used by FireBulletGivenTarget() UINT16 oldAttackingWeapon = pFirer->usAttackingWeapon; UINT8 oldAttackingHand = pFirer->ubAttackingHand; - UINT8 oldTargetID = pFirer->ubTargetID; + SoldierID oldTargetID = pFirer->ubTargetID; INT8 oldBurst = pFirer->bDoBurst; INT8 oldAutofire = pFirer->bDoAutofire; diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index f729d931..eec87214 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -9676,7 +9676,7 @@ SOLDIERTYPE *InternalReduceAttackBusyCount( ) pTarget = NULL; if (pSoldier->ubTargetID != NOBODY) { - pTarget = MercPtrs[ pSoldier->ubTargetID ]; + pTarget = pSoldier->ubTargetID; } // Flugente 18-07-22: commenting this out - it doesn't do harm in realtime, and is more realistic diff --git a/Tactical/Soldier Ani.cpp b/Tactical/Soldier Ani.cpp index 8f1e6191..602800af 100644 --- a/Tactical/Soldier Ani.cpp +++ b/Tactical/Soldier Ani.cpp @@ -1557,7 +1557,7 @@ BOOLEAN AdjustToNextAnimationFrame( SOLDIERTYPE *pSoldier ) if ( pSoldier->bTeam != gbPlayerNum ) { // only locate if the enemy is visible or he's aiming at a player - if ( pSoldier->bVisible != -1 || (pSoldier->ubTargetID != NOBODY && MercPtrs[ pSoldier->ubTargetID ]->bTeam == gbPlayerNum) ) + if ( pSoldier->bVisible != -1 || (pSoldier->ubTargetID != NOBODY && pSoldier->ubTargetID->bTeam == gbPlayerNum) ) { LocateGridNo( pSoldier->sTargetGridNo ); } @@ -4043,13 +4043,13 @@ BOOLEAN HandleSoldierDeath( SOLDIERTYPE *pSoldier , BOOLEAN *pfMadeCorpse ) else if ( pSoldier->bVisible == TRUE ) { // We were a visible enemy, say laugh! - if ( Random(3) == 0 && !CREATURE_OR_BLOODCAT( MercPtrs[ ubAttacker ] ) ) + if ( Random(3) == 0 && !CREATURE_OR_BLOODCAT( ubAttacker ) ) { // if the attacker was from the same team, play a curse, otherwise play a laugh - if ( MercPtrs[ubAttacker]->bSide == pSoldier->bSide ) - MercPtrs[ubAttacker]->DoMercBattleSound( BATTLE_SOUND_CURSE1 ); + if ( ubAttacker->bSide == pSoldier->bSide ) + ubAttacker->DoMercBattleSound( BATTLE_SOUND_CURSE1 ); else - MercPtrs[ ubAttacker ]->DoMercBattleSound( BATTLE_SOUND_LAUGH1 ); + ubAttacker->DoMercBattleSound( BATTLE_SOUND_LAUGH1 ); } } } @@ -4061,7 +4061,7 @@ BOOLEAN HandleSoldierDeath( SOLDIERTYPE *pSoldier , BOOLEAN *pfMadeCorpse ) // militia also now track kills... if ( ubAttacker != NOBODY ) { - if ( MercPtrs[ ubAttacker ]->bTeam == gbPlayerNum ) + if ( ubAttacker->bTeam == gbPlayerNum ) { // increment kills ///////////////////////////////////////////////////////////////////////////////////// @@ -4069,43 +4069,43 @@ BOOLEAN HandleSoldierDeath( SOLDIERTYPE *pSoldier , BOOLEAN *pfMadeCorpse ) switch(pSoldier->ubSoldierClass) { case SOLDIER_CLASS_ROBOT: - gMercProfiles[ MercPtrs[ ubAttacker ]->ubProfile ].records.usKillsOthers++; + gMercProfiles[ ubAttacker->ubProfile ].records.usKillsOthers++; break; case SOLDIER_CLASS_ELITE : - gMercProfiles[ MercPtrs[ ubAttacker ]->ubProfile ].records.usKillsElites++; + gMercProfiles[ ubAttacker->ubProfile ].records.usKillsElites++; break; case SOLDIER_CLASS_ARMY : - gMercProfiles[ MercPtrs[ ubAttacker ]->ubProfile ].records.usKillsRegulars++; + gMercProfiles[ ubAttacker->ubProfile ].records.usKillsRegulars++; break; case SOLDIER_CLASS_ADMINISTRATOR : - gMercProfiles[ MercPtrs[ ubAttacker ]->ubProfile ].records.usKillsAdmins++; + gMercProfiles[ ubAttacker->ubProfile ].records.usKillsAdmins++; break; case SOLDIER_CLASS_CREATURE : - gMercProfiles[ MercPtrs[ ubAttacker ]->ubProfile ].records.usKillsCreatures++; + gMercProfiles[ ubAttacker->ubProfile ].records.usKillsCreatures++; break; case SOLDIER_CLASS_ZOMBIE : - gMercProfiles[ MercPtrs[ ubAttacker ]->ubProfile ].records.usKillsZombies++; + gMercProfiles[ ubAttacker->ubProfile ].records.usKillsZombies++; break; case SOLDIER_CLASS_BANDIT: - gMercProfiles[MercPtrs[ubAttacker]->ubProfile].records.usKillsOthers++; + gMercProfiles[ ubAttacker->ubProfile ].records.usKillsOthers++; break; default : if ( CREATURE_OR_BLOODCAT( pSoldier ) ) - gMercProfiles[ MercPtrs[ ubAttacker ]->ubProfile ].records.usKillsCreatures++; + gMercProfiles[ ubAttacker->ubProfile ].records.usKillsCreatures++; else if ( ARMED_VEHICLE( pSoldier ) ) - gMercProfiles[ MercPtrs[ ubAttacker ]->ubProfile ].records.usKillsTanks++; + gMercProfiles[ ubAttacker->ubProfile ].records.usKillsTanks++; else if ( pSoldier->bTeam == CIV_TEAM && !pSoldier->aiData.bNeutral && pSoldier->bSide != gbPlayerNum ) - gMercProfiles[ MercPtrs[ ubAttacker ]->ubProfile ].records.usKillsHostiles++; + gMercProfiles[ ubAttacker->ubProfile ].records.usKillsHostiles++; else { - gMercProfiles[ MercPtrs[ ubAttacker ]->ubProfile ].records.usKillsOthers++; + gMercProfiles[ ubAttacker->ubProfile ].records.usKillsOthers++; // Flugente: dynamic opinions: if this guy is not hostile towards us, then some mercs will complain about killing civilians - if (gGameExternalOptions.fDynamicOpinions && pSoldier->bTeam != OUR_TEAM && (pSoldier->aiData.bNeutral || pSoldier->bSide == MercPtrs[ubAttacker]->bSide) ) + if (gGameExternalOptions.fDynamicOpinions && pSoldier->bTeam != OUR_TEAM && (pSoldier->aiData.bNeutral || pSoldier->bSide == ubAttacker->bSide) ) { // not for killing animals though... if ( pSoldier->ubBodyType != CROW && pSoldier->ubBodyType != COW ) - HandleDynamicOpinionChange( MercPtrs[ubAttacker], OPINIONEVENT_CIVKILLER, TRUE, TRUE ); + HandleDynamicOpinionChange( ubAttacker, OPINIONEVENT_CIVKILLER, TRUE, TRUE ); } } break; @@ -4117,61 +4117,61 @@ BOOLEAN HandleSoldierDeath( SOLDIERTYPE *pSoldier , BOOLEAN *pfMadeCorpse ) // Flugente: dynamic opinions: if this guy is not hostile towards us, then some mercs will complain about killing civilians if (gGameExternalOptions.fDynamicOpinions) { - if (pSoldier->bTeam != OUR_TEAM && (pSoldier->aiData.bNeutral || pSoldier->bSide == MercPtrs[ubAttacker]->bSide)) + if (pSoldier->bTeam != OUR_TEAM && (pSoldier->aiData.bNeutral || pSoldier->bSide == ubAttacker->bSide)) { // not for killing animals though... if (pSoldier->ubBodyType != CROW && pSoldier->ubBodyType != COW) - HandleDynamicOpinionChange(MercPtrs[ubAttacker], OPINIONEVENT_CIVKILLER, TRUE, TRUE); + HandleDynamicOpinionChange(ubAttacker, OPINIONEVENT_CIVKILLER, TRUE, TRUE); } else { // if this enemy was attacking a freshly wounded merc, it is likely they posed a real threat - the merc will be thankful for saving their life - if (pSoldier->ubTargetID != NOBODY && MercPtrs[pSoldier->ubTargetID]->bBleeding > 10) + if (pSoldier->ubTargetID != NOBODY && pSoldier->ubTargetID->bBleeding > 10) { - AddOpinionEvent(MercPtrs[pSoldier->ubTargetID]->ubProfile, MercPtrs[ubAttacker]->ubProfile, OPINIONEVENT_BATTLE_SAVIOUR); + AddOpinionEvent(pSoldier->ubTargetID->ubProfile, ubAttacker->ubProfile, OPINIONEVENT_BATTLE_SAVIOUR); } else { // complain about a fragthief, or thank for assistance - correct event is chosen internally - HandleDynamicOpinionChange(MercPtrs[ubAttacker], OPINIONEVENT_FRAGTHIEF, TRUE, TRUE); + HandleDynamicOpinionChange(ubAttacker, OPINIONEVENT_FRAGTHIEF, TRUE, TRUE); } } } } - else if ( MercPtrs[ ubAttacker ]->bTeam == MILITIA_TEAM ) + else if ( ubAttacker->bTeam == MILITIA_TEAM ) { // get a kill! 2 points! - MercPtrs[ ubAttacker ]->ubMilitiaKills += 1; + ubAttacker->ubMilitiaKills += 1; } } if ( ubAssister != NOBODY && ubAssister != ubAttacker ) { - if ( MercPtrs[ ubAssister ]->bTeam == gbPlayerNum ) + if ( ubAssister->bTeam == gbPlayerNum ) { ///////////////////////////////////////////////////////////////////////////////////// // SANDRO - new mercs' records - if( MercPtrs[ ubAttacker ] != NULL ) + if( ubAttacker != NOBODY ) { - if( MercPtrs[ ubAttacker ]->bTeam == gbPlayerNum ) - gMercProfiles[ MercPtrs[ ubAssister ]->ubProfile ].records.usAssistsMercs++; - else if ( MercPtrs[ ubAttacker ]->bTeam == MILITIA_TEAM ) - gMercProfiles[ MercPtrs[ ubAssister ]->ubProfile ].records.usAssistsMilitia++; + if( ubAttacker->bTeam == gbPlayerNum ) + gMercProfiles[ ubAssister->ubProfile ].records.usAssistsMercs++; + else if ( ubAttacker->bTeam == MILITIA_TEAM ) + gMercProfiles[ ubAssister->ubProfile ].records.usAssistsMilitia++; else - gMercProfiles[ MercPtrs[ ubAssister ]->ubProfile ].records.usAssistsOthers++; + gMercProfiles[ ubAssister->ubProfile ].records.usAssistsOthers++; } else { - gMercProfiles[ MercPtrs[ ubAssister ]->ubProfile ].records.usAssistsOthers++; + gMercProfiles[ ubAssister->ubProfile ].records.usAssistsOthers++; } - //gMercProfiles[ MercPtrs[ ubAssister ]->ubProfile ].usAssists++; + //gMercProfiles[ ubAssister->ubProfile ].usAssists++; ///////////////////////////////////////////////////////////////////////////////////// } - else if ( MercPtrs[ ubAssister ]->bTeam == MILITIA_TEAM ) + else if ( ubAssister->bTeam == MILITIA_TEAM ) { // get an assist - 1 points - MercPtrs[ubAssister]->ubMilitiaAssists += 1; + ubAssister->ubMilitiaAssists += 1; } } /* diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index bb011c63..fbd3f15d 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -16044,12 +16044,12 @@ BOOLEAN SOLDIERTYPE::SeemsLegit( UINT16 ubObserverID ) if ( this->sSectorX == gWorldSectorX && this->sSectorY == gWorldSectorY && this->bSectorZ == gbWorldSectorZ ) { // are we targeting a buddy of our observer? - if ( this->ubTargetID != NOBODY && MercPtrs[this->ubTargetID] && MercPtrs[this->ubTargetID]->bTeam == pSoldier->bTeam ) + if ( this->ubTargetID < NOBODY && this->ubTargetID->bTeam == pSoldier->bTeam ) { // if we are aiming at a soldier, others will notice our intent... not covert! if ( WeaponReady( this ) ) { - ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_TARGETTING_SOLDIER], this->GetName(), MercPtrs[this->ubTargetID]->GetName() ); + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_TARGETTING_SOLDIER], this->GetName(), this->ubTargetID->GetName() ); return FALSE; } } diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index de9812a1..34f9a777 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -1406,7 +1406,7 @@ public: INT8 bBlockedByAnotherMercDirection; UINT16 usAttackingWeapon; INT8 bWeaponMode; - UINT16 ubTargetID; + SoldierID ubTargetID; INT8 bAIScheduleProgress; INT32 sOffWorldGridNo; struct TAG_anitile *pAniTile; diff --git a/Tactical/Soldier Profile.cpp b/Tactical/Soldier Profile.cpp index 8c53299e..449277c2 100644 --- a/Tactical/Soldier Profile.cpp +++ b/Tactical/Soldier Profile.cpp @@ -1713,7 +1713,7 @@ SOLDIERTYPE *ChangeSoldierTeam( SOLDIERTYPE *pSoldier, UINT8 ubTeam ) // Set insertion gridNo - pNewSoldier->sInsertionGridNo = sOldGridNo; + pNewSoldier->sInsertionGridNo = sOldGridNo; if ( gfPotentialTeamChangeDuringDeath ) { diff --git a/Tactical/Weapons.cpp b/Tactical/Weapons.cpp index d87690f6..4b2653c3 100644 --- a/Tactical/Weapons.cpp +++ b/Tactical/Weapons.cpp @@ -2807,7 +2807,7 @@ BOOLEAN UseGunNCTH( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo ) // HEADROCK: Actually, it's 1 for the first shot. Works fine regardless though. // HEADROCK HAM 4: Extra experience gain now given when the target is hit. This part only gives basic points // for the attack (FAILURE type). - if ( PTR_OURTEAM && pSoldier->ubTargetID != NOBODY && (!pSoldier->bDoBurst || pSoldier->bDoBurst == 2 ) && (gTacticalStatus.uiFlags & INCOMBAT ) && ( SoldierToSoldierBodyPartChanceToGetThrough( pSoldier, MercPtrs[ pSoldier->ubTargetID ], pSoldier->bAimShotLocation ) > 0 ) ) + if ( PTR_OURTEAM && pSoldier->ubTargetID != NOBODY && (!pSoldier->bDoBurst || pSoldier->bDoBurst == 2 ) && (gTacticalStatus.uiFlags & INCOMBAT ) && ( SoldierToSoldierBodyPartChanceToGetThrough( pSoldier, pSoldier->ubTargetID, pSoldier->bAimShotLocation ) > 0 ) ) { // add base pts for taking a shot, whether it hits or misses dExpGain = 2.0f; @@ -2818,11 +2818,11 @@ BOOLEAN UseGunNCTH( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo ) dExpGain = (dExpGain * 2) / 3; } - if ( MercPtrs[ pSoldier->ubTargetID ]->ubBodyType == COW || MercPtrs[ pSoldier->ubTargetID ]->ubBodyType == CROW ) + if ( pSoldier->ubTargetID->ubBodyType == COW || pSoldier->ubTargetID->ubBodyType == CROW ) { dExpGain /= 2; } - else if ( MercPtrs[ pSoldier->ubTargetID ]->flags.uiStatusFlags & SOLDIER_VEHICLE || AM_A_ROBOT( MercPtrs[ pSoldier->ubTargetID ] ) || TANK( MercPtrs[ pSoldier->ubTargetID ] ) ) + else if ( pSoldier->ubTargetID->flags.uiStatusFlags & SOLDIER_VEHICLE || AM_A_ROBOT( pSoldier->ubTargetID ) || TANK( pSoldier->ubTargetID ) ) { // no exp from shooting a vehicle that you can't damage and can't move! dExpGain = 0; @@ -2856,11 +2856,11 @@ BOOLEAN UseGunNCTH( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo ) // add base pts for taking a shot, whether it hits or misses dExpGain = 5.0f; - if ( MercPtrs[ pSoldier->ubTargetID ]->ubBodyType == COW || MercPtrs[ pSoldier->ubTargetID ]->ubBodyType == CROW ) + if ( pSoldier->ubTargetID->ubBodyType == COW || pSoldier->ubTargetID->ubBodyType == CROW ) { dExpGain /= 2; } - else if ( MercPtrs[ pSoldier->ubTargetID ]->flags.uiStatusFlags & SOLDIER_VEHICLE || AM_A_ROBOT( MercPtrs[ pSoldier->ubTargetID ] ) || TANK( MercPtrs[ pSoldier->ubTargetID ] ) ) + else if ( pSoldier->ubTargetID->flags.uiStatusFlags & SOLDIER_VEHICLE || AM_A_ROBOT( pSoldier->ubTargetID ) || TANK( pSoldier->ubTargetID ) ) { // no exp from shooting a vehicle that you can't damage and can't move! dExpGain = 0; @@ -3535,7 +3535,7 @@ BOOLEAN UseGun( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo ) } // NB bDoBurst will be 2 at this point for the first shot since it was incremented // above - if ( PTR_OURTEAM && pSoldier->ubTargetID != NOBODY && (!pSoldier->bDoBurst || pSoldier->bDoBurst == 2 ) && (gTacticalStatus.uiFlags & INCOMBAT ) && ( SoldierToSoldierBodyPartChanceToGetThrough( pSoldier, MercPtrs[ pSoldier->ubTargetID ], pSoldier->bAimShotLocation ) > 0 ) ) + if ( PTR_OURTEAM && pSoldier->ubTargetID != NOBODY && (!pSoldier->bDoBurst || pSoldier->bDoBurst == 2 ) && (gTacticalStatus.uiFlags & INCOMBAT ) && ( SoldierToSoldierBodyPartChanceToGetThrough( pSoldier, pSoldier->ubTargetID, pSoldier->bAimShotLocation ) > 0 ) ) { if ( fGonnaHit ) { @@ -3562,11 +3562,11 @@ BOOLEAN UseGun( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo ) usExpGain = (usExpGain * 2) / 3; } - if ( MercPtrs[ pSoldier->ubTargetID ]->ubBodyType == COW || MercPtrs[ pSoldier->ubTargetID ]->ubBodyType == CROW ) + if ( pSoldier->ubTargetID->ubBodyType == COW || pSoldier->ubTargetID->ubBodyType == CROW ) { usExpGain /= 2; } - else if ( MercPtrs[ pSoldier->ubTargetID ]->flags.uiStatusFlags & SOLDIER_VEHICLE || AM_A_ROBOT( MercPtrs[ pSoldier->ubTargetID ] ) || TANK( MercPtrs[ pSoldier->ubTargetID ] ) ) + else if ( pSoldier->ubTargetID->flags.uiStatusFlags & SOLDIER_VEHICLE || AM_A_ROBOT( pSoldier->ubTargetID ) || TANK( pSoldier->ubTargetID ) ) { // no exp from shooting a vehicle that you can't damage and can't move! usExpGain = 0; @@ -3632,11 +3632,11 @@ BOOLEAN UseGun( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo ) // add base pts for taking a shot, whether it hits or misses usExpGain += 10; - if ( MercPtrs[ pSoldier->ubTargetID ]->ubBodyType == COW || MercPtrs[ pSoldier->ubTargetID ]->ubBodyType == CROW ) + if ( pSoldier->ubTargetID->ubBodyType == COW || pSoldier->ubTargetID->ubBodyType == CROW ) { usExpGain /= 2; } - else if ( MercPtrs[ pSoldier->ubTargetID ]->flags.uiStatusFlags & SOLDIER_VEHICLE || AM_A_ROBOT( MercPtrs[ pSoldier->ubTargetID ] ) || TANK( MercPtrs[ pSoldier->ubTargetID ] ) ) + else if ( pSoldier->ubTargetID->flags.uiStatusFlags & SOLDIER_VEHICLE || AM_A_ROBOT( pSoldier->ubTargetID ) || TANK( pSoldier->ubTargetID ) ) { // no exp from shooting a vehicle that you can't damage and can't move! usExpGain = 0; @@ -4134,11 +4134,11 @@ BOOLEAN UseBlade( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo ) // add base pts for taking a shot, whether it hits or misses usExpGain += 10; - if ( MercPtrs[ pSoldier->ubTargetID ]->ubBodyType == COW || MercPtrs[ pSoldier->ubTargetID ]->ubBodyType == CROW ) + if ( pSoldier->ubTargetID->ubBodyType == COW || pSoldier->ubTargetID->ubBodyType == CROW ) { usExpGain /= 2; } - else if ( MercPtrs[ pSoldier->ubTargetID ]->flags.uiStatusFlags & SOLDIER_VEHICLE || AM_A_ROBOT( MercPtrs[ pSoldier->ubTargetID ] ) || TANK( MercPtrs[ pSoldier->ubTargetID ] ) ) + else if ( pSoldier->ubTargetID->flags.uiStatusFlags & SOLDIER_VEHICLE || AM_A_ROBOT( pSoldier->ubTargetID ) || TANK( pSoldier->ubTargetID ) ) { // no exp from shooting a vehicle that you can't damage and can't move! usExpGain = 0; From 75deccbc44d08a74122241dcfecc10f5e739654d Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 15 Nov 2024 23:56:26 +0200 Subject: [PATCH 050/192] Convert SOLDIERTYPE::ubRobotRemoteHolderID to SoldierID --- Strategic/Auto Resolve.cpp | 2 +- Tactical/Dialogue Control.cpp | 2 +- Tactical/Soldier Control.cpp | 6 ++---- Tactical/Soldier Control.h | 2 +- Tactical/TeamTurns.cpp | 4 ++-- 5 files changed, 7 insertions(+), 9 deletions(-) diff --git a/Strategic/Auto Resolve.cpp b/Strategic/Auto Resolve.cpp index 2d833ef6..6613354a 100644 --- a/Strategic/Auto Resolve.cpp +++ b/Strategic/Auto Resolve.cpp @@ -2835,7 +2835,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. - UINT16 ubRobotControllerID; + SoldierID ubRobotControllerID; ubRobotControllerID = gpAR->pRobotCell->pSoldier->ubRobotRemoteHolderID; diff --git a/Tactical/Dialogue Control.cpp b/Tactical/Dialogue Control.cpp index 4a2fc253..52d13596 100644 --- a/Tactical/Dialogue Control.cpp +++ b/Tactical/Dialogue Control.cpp @@ -1595,7 +1595,7 @@ BOOLEAN TacticalCharacterDialogue( SOLDIERTYPE *pSoldier, UINT16 usQuoteNum ) { if ( pSoldier->CanRobotBeControlled( ) ) { - return( TacticalCharacterDialogue( MercPtrs[ pSoldier->ubRobotRemoteHolderID ], usQuoteNum ) ); + return( TacticalCharacterDialogue( pSoldier->ubRobotRemoteHolderID, usQuoteNum ) ); } else { diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index fbd3f15d..35aeea8c 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -23549,8 +23549,6 @@ BOOLEAN SOLDIERTYPE::IsValidPistolFastShot( INT16 bAimTime, INT32 iTrgGridNo ) } BOOLEAN SOLDIERTYPE::CanRobotBeControlled( void ) { - SOLDIERTYPE *pController; - if ( !(this->flags.uiStatusFlags & SOLDIER_ROBOT) ) { return(FALSE); @@ -23561,7 +23559,7 @@ BOOLEAN SOLDIERTYPE::CanRobotBeControlled( void ) return(FALSE); } - pController = MercPtrs[this->ubRobotRemoteHolderID]; + SOLDIERTYPE* pController = this->ubRobotRemoteHolderID; if ( pController->bActive ) { @@ -23665,7 +23663,7 @@ SOLDIERTYPE *SOLDIERTYPE::GetRobotController( void ) } else { - return(MercPtrs[this->ubRobotRemoteHolderID]); + return(this->ubRobotRemoteHolderID); } } diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index 34f9a777..51193c3a 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -1428,7 +1428,7 @@ public: INT32 iBurstSoundID; INT8 bSlotItemTakenFrom; UINT16 ubAutoBandagingMedic; - UINT16 ubRobotRemoteHolderID; + SoldierID ubRobotRemoteHolderID; UINT32 uiTimeOfLastContractUpdate; INT8 bTypeOfLastContract; INT8 bTurnsCollapsed; diff --git a/Tactical/TeamTurns.cpp b/Tactical/TeamTurns.cpp index d3962619..0bc3e181 100644 --- a/Tactical/TeamTurns.cpp +++ b/Tactical/TeamTurns.cpp @@ -1825,8 +1825,8 @@ INT8 CalcInterruptDuelPts( SOLDIERTYPE * pSoldier, UINT16 ubOpponentID, BOOLEAN { //iPoints = EffectiveExpLevel( MercPtrs[ pSoldier->ubRobotRemoteHolderID ] ) - 2; // Snap: (do some proper rounding here) - iPoints = ( 20*EffectiveExpLevel( MercPtrs[ pSoldier->ubRobotRemoteHolderID ] ) - + EffectiveAgility( MercPtrs[ pSoldier->ubRobotRemoteHolderID ], FALSE ) + 15 ) / 30 - 2; + iPoints = ( 20*EffectiveExpLevel( pSoldier->ubRobotRemoteHolderID ) + + EffectiveAgility( pSoldier->ubRobotRemoteHolderID, FALSE ) + 15 ) / 30 - 2; } else { From 153d4020656a19caa34830268a2adddf6c827ae7 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 15 Nov 2024 23:58:28 +0200 Subject: [PATCH 051/192] Update Soldier Control.h --- Tactical/Soldier Control.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index 51193c3a..e92bd051 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -1464,7 +1464,7 @@ public: UINT8 ubNumLocateCycles; UINT8 ubDelayedMovementFlags; - UINT16 ubCTGTTargetID; + SoldierID ubCTGTTargetID; UINT32 uiMercChecksum; From 8ef7fb5ae45a87689569a7f985eb40c235264d31 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sat, 16 Nov 2024 00:09:48 +0200 Subject: [PATCH 052/192] Convert SOLDIERTYPE::usDragPersonID to SoldierID --- Tactical/Items.cpp | 2 +- Tactical/Soldier Control.cpp | 4 ++-- Tactical/Soldier Control.h | 6 +----- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/Tactical/Items.cpp b/Tactical/Items.cpp index c26144e5..cbcdfcd5 100644 --- a/Tactical/Items.cpp +++ b/Tactical/Items.cpp @@ -3167,7 +3167,7 @@ UINT32 CalculateCarriedWeight( SOLDIERTYPE * pSoldier, BOOLEAN fConsiderDragging { if (pSoldier->usDragPersonID != NOBODY) { - SOLDIERTYPE* pOtherSoldier = MercPtrs[pSoldier->usDragPersonID]; + SOLDIERTYPE* pOtherSoldier = pSoldier->usDragPersonID; uiTotalWeight += GetTotalWeight( pOtherSoldier ); uiTotalWeight += pOtherSoldier->GetBodyWeight(); diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index 35aeea8c..e9c55505 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -11529,7 +11529,7 @@ void SOLDIERTYPE::MoveMerc( FLOAT dMovementChange, FLOAT dAngle, BOOLEAN fCheckR if ( this->usDragPersonID != NOBODY ) { - SOLDIERTYPE* pSoldier = MercPtrs[this->usDragPersonID]; + SOLDIERTYPE* pSoldier = this->usDragPersonID; if ( pSoldier ) { @@ -20876,7 +20876,7 @@ void SOLDIERTYPE::CancelDrag() // if we are dragging a person, set them to the center of their gridno, otherwise their position might be off if (this->usDragPersonID != NOBODY) { - SOLDIERTYPE* pSoldier = MercPtrs[this->usDragPersonID]; + SOLDIERTYPE* pSoldier = this->usDragPersonID; if ( pSoldier && !TileIsOutOfBounds(pSoldier->sGridNo) ) { diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index e92bd051..db866046 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -1532,12 +1532,8 @@ public: // Flugente: this was the location of required variables required for the now removed poison feature. They can be used again UINT8 ubMilitiaAssists; // Flugente: stores militia assists INT8 sNonNPCTraderID; // Flugente: we can set up non-NPC soldiers to be merchants, we store their dealer id here (value > 0 means arms dealer entry x) - //INT8 bUnusedINT8_3; - UINT16 usDragPersonID; // Flugente: id of person we are dragging - - //INT16 bUnusedINT16_4; + SoldierID usDragPersonID; // Flugente: id of person we are dragging INT16 sDragCorpseID; // Flugente: id of corpse we are dragging - SoldierID usChatPartnerID; // Flugente: the id of another merc we are 'chatting' with // Flugente: new variables for extra stats From 419b0c794d7028c886612dbd893b019267051776 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sat, 16 Nov 2024 00:18:02 +0200 Subject: [PATCH 053/192] SOLDIERTYPE::CreateSoldierCommon to SoldierID --- Tactical/Animation Cache.cpp | 8 ++++---- Tactical/Animation Cache.h | 6 +++--- Tactical/Overhead.cpp | 6 +++--- Tactical/Soldier Control.cpp | 2 +- Tactical/Soldier Control.h | 2 +- Tactical/Soldier Create.cpp | 2 +- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Tactical/Animation Cache.cpp b/Tactical/Animation Cache.cpp index ec30ff95..3b320c60 100644 --- a/Tactical/Animation Cache.cpp +++ b/Tactical/Animation Cache.cpp @@ -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,7 +41,7 @@ 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 ); diff --git a/Tactical/Animation Cache.h b/Tactical/Animation Cache.h index bf2753b8..a64063c9 100644 --- a/Tactical/Animation Cache.h +++ b/Tactical/Animation Cache.h @@ -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 @@ -19,11 +19,11 @@ typedef struct extern UINT32 guiCacheSize; BOOLEAN GetCachedAnimationSurface( UINT16 usSoldierID, AnimationSurfaceCacheType *pAnimCache, UINT16 usSurfaceIndex, UINT16 usCurrentAnimation ); -BOOLEAN InitAnimationCache( UINT16 usSoldierID, AnimationSurfaceCacheType *pAnimCache ); +BOOLEAN InitAnimationCache( SoldierID usSoldierID, AnimationSurfaceCacheType *pAnimCache ); void DeleteAnimationCache( UINT16 usSoldierID, AnimationSurfaceCacheType *pAnimCache ); void DetermineOptimumAnimationCacheSize( ); void UnLoadCachedAnimationSurfaces( UINT16 usSoldierID, AnimationSurfaceCacheType *pAnimCache ); -#endif \ No newline at end of file +#endif diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index eec87214..c4e2164e 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -3468,15 +3468,15 @@ void SelectSoldier( UINT16 usSoldierID, BOOLEAN fAcknowledge, BOOLEAN fForceRese BOOLEAN ResetAllAnimationCache( ) { - UINT32 cnt; - SOLDIERTYPE *pSoldier; + UINT16 cnt; + SOLDIERTYPE *pSoldier; // Loop through all mercs and make go for ( pSoldier = Menptr, cnt = 0; cnt < TOTAL_SOLDIERS; pSoldier++, cnt++ ) { if ( pSoldier != NULL ) { - InitAnimationCache( (UINT16)cnt, &(pSoldier->AnimCache) ); + InitAnimationCache( cnt, &(pSoldier->AnimCache) ); } diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index e9c55505..cbb6ce03 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -2413,7 +2413,7 @@ void SOLDIERTYPE::DoNinjaAttack( void ) } -BOOLEAN SOLDIERTYPE::CreateSoldierCommon( UINT8 ubBodyType, UINT16 usSoldierID, UINT16 usState ) +BOOLEAN SOLDIERTYPE::CreateSoldierCommon( UINT8 ubBodyType, SoldierID usSoldierID, UINT16 usState ) { BOOLEAN fSuccess = FALSE; INT32 iCounter = 0; diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index db866046..a3f90e4d 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -1656,7 +1656,7 @@ public: BOOLEAN CreateSoldierLight( void ); BOOLEAN DeleteSoldierLight( void ); - BOOLEAN CreateSoldierCommon( UINT8 ubBodyType, UINT16 usSoldierID, UINT16 usState ); + BOOLEAN CreateSoldierCommon( UINT8 ubBodyType, SoldierID usSoldierID, UINT16 usState ); // Soldier Management functions, called by Event Pump.c diff --git a/Tactical/Soldier Create.cpp b/Tactical/Soldier Create.cpp index a685dfc7..f54fc3d5 100644 --- a/Tactical/Soldier Create.cpp +++ b/Tactical/Soldier Create.cpp @@ -1189,7 +1189,7 @@ SOLDIERTYPE* TacticalCreateSoldier( SOLDIERCREATE_STRUCT *pCreateStruct, UINT16 // Copy into merc struct *MercPtrs[ Soldier.ubID ] = Soldier; // Alrighty then, we are set to create the merc, stuff after here can fail! - CHECKF( MercPtrs[ Soldier.ubID ]->CreateSoldierCommon( Soldier.ubBodyType, Soldier.ubID, STANDING ) != FALSE ); + CHECKF( Soldier.ubID->CreateSoldierCommon( Soldier.ubBodyType, Soldier.ubID, STANDING ) != FALSE ); } } else From b112d39fe28608516667978b1da4afeb418f74c3 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sat, 16 Nov 2024 00:34:19 +0200 Subject: [PATCH 054/192] Convert SOLDIERTYPE::EVENT_SoldierGotHit to SoldierID --- Tactical/Soldier Control.cpp | 42 ++++++++++++++++++------------------ Tactical/Soldier Control.h | 2 +- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index cbb6ce03..617facce 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -5700,7 +5700,7 @@ UINT16 PickSoldierReadyAnimation( SOLDIERTYPE *pSoldier, BOOLEAN fEndReady, BOOL #pragma optimize("", off) // ATE: THIS FUNCTION IS USED FOR ALL SOLDIER TAKE DAMAGE FUNCTIONS! -void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT16 sBreathLoss, UINT16 bDirection, UINT16 sRange, UINT16 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation, INT16 sSubsequent, INT32 sLocationGrid ) +void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT16 sBreathLoss, UINT16 bDirection, UINT16 sRange, SoldierID ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation, INT16 sSubsequent, INT32 sLocationGrid ) { UINT8 ubCombinedLoss, ubVolume, ubReason; // SOLDIERTYPE * pNewSoldier; @@ -5719,7 +5719,7 @@ void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT1 // DO STUFF COMMON FOR ALL TYPES if ( ubAttackerID != NOBODY ) { - MercPtrs[ubAttackerID]->aiData.bLastAttackHit = TRUE; + ubAttackerID->aiData.bLastAttackHit = TRUE; } // Set attacker's ID @@ -5759,8 +5759,8 @@ void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT1 } // Flugente: check the ammo else if ( ubAttackerID != NOBODY - && MercPtrs[ubAttackerID]->inv[HANDPOS].exists() - && AmmoTypes[*&( MercPtrs[ubAttackerID]->inv[HANDPOS] )[0]->data.gun.ubGunAmmoType].ammoflag & AMMO_TRAIL_FIRE ) + && ubAttackerID->inv[HANDPOS].exists() + && AmmoTypes[*&( ubAttackerID->inv[HANDPOS] )[0]->data.gun.ubGunAmmoType].ammoflag & AMMO_TRAIL_FIRE ) { ubReason = TAKE_DAMAGE_GAS_FIRE; @@ -5780,7 +5780,7 @@ void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT1 } // callahan update end - else if ( Item[usWeaponIndex].usItemClass & (IC_GUN | IC_THROWING_KNIFE) && AmmoTypes[MercPtrs[ubAttackerID]->inv[MercPtrs[ubAttackerID]->ubAttackingHand][0]->data.gun.ubGunAmmoType].explosionSize <= 1 ) + else if ( Item[usWeaponIndex].usItemClass & (IC_GUN | IC_THROWING_KNIFE) && AmmoTypes[ ubAttackerID->inv[ ubAttackerID->ubAttackingHand ][0]->data.gun.ubGunAmmoType ].explosionSize <= 1 ) { if ( ubSpecial == FIRE_WEAPON_SLEEP_DART_SPECIAL ) { @@ -5848,16 +5848,16 @@ void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT1 ubReason = TAKE_DAMAGE_BLADE; // Flugente: check wether we can make this blade bloody - if ( ubAttackerID != NOBODY && MercPtrs[ubAttackerID]->inv[HANDPOS].exists( ) ) + if ( ubAttackerID != NOBODY && ubAttackerID->inv[HANDPOS].exists( ) ) { - if ( Item[MercPtrs[ubAttackerID]->inv[HANDPOS].usItem].bloodieditem > 0 ) + if ( Item[ ubAttackerID->inv[HANDPOS].usItem ].bloodieditem > 0 ) { // magic happens - MercPtrs[ubAttackerID]->inv[HANDPOS].usItem = Item[MercPtrs[ubAttackerID]->inv[HANDPOS].usItem].bloodieditem; + ubAttackerID->inv[HANDPOS].usItem = Item[ ubAttackerID->inv[HANDPOS].usItem ].bloodieditem; } // Flugente: if the blade is infected, infect the victim - if ( *&(MercPtrs[ubAttackerID]->inv[HANDPOS])[0]->data.sObjectFlag & INFECTED && gGameExternalOptions.fDiseaseContaminatesItems ) + if ( *&(ubAttackerID->inv[HANDPOS])[0]->data.sObjectFlag & INFECTED && gGameExternalOptions.fDiseaseContaminatesItems ) { // infect us with the first disease this->Infect( 0 ); @@ -5865,7 +5865,7 @@ void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT1 // if this guy has the disease, infect the blade if ( this->sDiseasePoints[0] > 0 ) - *&(MercPtrs[ubAttackerID]->inv[HANDPOS])[0]->data.sObjectFlag |= INFECTED; + *&(ubAttackerID->inv[HANDPOS])[0]->data.sObjectFlag |= INFECTED; } } else if ( Item[usWeaponIndex].usItemClass & IC_PUNCH ) @@ -5877,7 +5877,7 @@ void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT1 { if ( ubAttackerID != NOBODY ) { - if ( !(MercPtrs[ubAttackerID]->inv[HANDPOS].exists( )) || ItemIsBrassKnuckles(MercPtrs[ubAttackerID]->inv[HANDPOS].usItem) ) + if ( !(ubAttackerID->inv[HANDPOS].exists( )) || ItemIsBrassKnuckles(ubAttackerID->inv[HANDPOS].usItem) ) { // with enhanced CCS, make the lost breath harder to regenerate, which makes CQC more usable if ( gGameExternalOptions.fEnhancedCloseCombatSystem ) @@ -5886,11 +5886,11 @@ void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT1 sBreathLoss = sDamage * (100 + gSkillTraitValues.bPercentModifierHtHBreathLoss); // 80% only for untrained mercs // martial arts bonus for breath damage - if ( HAS_SKILL_TRAIT( MercPtrs[ubAttackerID], MARTIAL_ARTS_NT ) ) + if ( HAS_SKILL_TRAIT( ubAttackerID, MARTIAL_ARTS_NT ) ) { - sBreathLoss += sDamage * gSkillTraitValues.ubMABonusBreathDamageHandToHand * NUM_SKILL_TRAITS( MercPtrs[ubAttackerID], MARTIAL_ARTS_NT ); + sBreathLoss += sDamage * gSkillTraitValues.ubMABonusBreathDamageHandToHand * NUM_SKILL_TRAITS( ubAttackerID, MARTIAL_ARTS_NT ); - sBreathRegainPenaltyMultiplier += (gSkillTraitValues.usMALostBreathRegainPenalty * NUM_SKILL_TRAITS( MercPtrs[ubAttackerID], MARTIAL_ARTS_NT )); + sBreathRegainPenaltyMultiplier += (gSkillTraitValues.usMALostBreathRegainPenalty * NUM_SKILL_TRAITS( ubAttackerID, MARTIAL_ARTS_NT )); } } else @@ -5947,7 +5947,7 @@ void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT1 if (ItemNeedsBatteries(usWeaponIndex)) { // check for batteries - OBJECTTYPE* pBatteries = FindAttachedBatteries( &(MercPtrs[ubAttackerID]->inv[HANDPOS]) ); + OBJECTTYPE* pBatteries = FindAttachedBatteries( &(ubAttackerID->inv[HANDPOS]) ); if ( pBatteries ) { sDamage = 0; @@ -5964,7 +5964,7 @@ void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT1 // destroy batteries pBatteries->RemoveObjectsFromStack( 1 ); if ( pBatteries->exists( ) == false ) { - MercPtrs[ubAttackerID]->inv[HANDPOS].RemoveAttachment( pBatteries ); + ubAttackerID->inv[HANDPOS].RemoveAttachment( pBatteries ); } } @@ -5976,7 +5976,7 @@ void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT1 } // marke added one 'or' for explosive ammo. variation of: AmmoTypes[this->inv[this->ubAttackingHand ][0]->data.gun.ubGunAmmoType].explosionSize > 1 // extracting attacker�s ammo type - else if ( Item[usWeaponIndex].usItemClass & IC_EXPLOSV || AmmoTypes[MercPtrs[ubAttackerID]->inv[MercPtrs[ubAttackerID]->ubAttackingHand][0]->data.gun.ubGunAmmoType].explosionSize > 1 ) + else if ( Item[usWeaponIndex].usItemClass & IC_EXPLOSV || AmmoTypes[ubAttackerID->inv[ubAttackerID->ubAttackingHand][0]->data.gun.ubGunAmmoType].explosionSize > 1 ) { INT8 bDeafValue; @@ -6371,7 +6371,7 @@ void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT1 PossiblyStartEnemyTaunt( this, TAUNT_GOT_HIT_GUNFIRE, ubAttackerID ); if (ubAttackerID != NOBODY) { - PossiblyStartEnemyTaunt( MercPtrs[ubAttackerID], TAUNT_HIT_GUNFIRE, this->ubID ); + PossiblyStartEnemyTaunt( ubAttackerID, TAUNT_HIT_GUNFIRE, this->ubID ); } } else @@ -6379,7 +6379,7 @@ void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT1 PossiblyStartEnemyTaunt( this, TAUNT_GOT_HIT_THROWING_KNIFE, ubAttackerID ); if (ubAttackerID != NOBODY) { - PossiblyStartEnemyTaunt(MercPtrs[ubAttackerID], TAUNT_HIT_THROWING_KNIFE, this->ubID); + PossiblyStartEnemyTaunt(ubAttackerID, TAUNT_HIT_THROWING_KNIFE, this->ubID); } } } @@ -6395,12 +6395,12 @@ void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT1 if ( Item[usWeaponIndex].usItemClass & IC_EXPLOSV || ubReason == TAKE_DAMAGE_EXPLOSION ) { PossiblyStartEnemyTaunt( this, TAUNT_GOT_HIT_EXPLOSION, ubAttackerID ); - //PossiblyStartEnemyTaunt( MercPtrs[ubAttackerID], TAUNT_HIT_EXPLOSION, this ); + //PossiblyStartEnemyTaunt( ubAttackerID, TAUNT_HIT_EXPLOSION, this ); } else if ( Item[usWeaponIndex].usItemClass & IC_TENTACLES ) { PossiblyStartEnemyTaunt( this, TAUNT_GOT_HIT_TENTACLES, ubAttackerID ); - //PossiblyStartEnemyTaunt( MercPtrs[ubAttackerID], TAUNT_HIT_TENTACLES, this ); + //PossiblyStartEnemyTaunt( ubAttackerID, TAUNT_HIT_TENTACLES, this ); } } if ( Item[usWeaponIndex].usItemClass & IC_PUNCH ) diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index a3f90e4d..fa0da17b 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -1670,7 +1670,7 @@ public: void EVENT_SetSoldierDirection( UINT16 usNewDirection ); void EVENT_SetSoldierDesiredDirection( UINT16 usNewDirection ); void EVENT_FireSoldierWeapon( INT32 sTargetGridNo ); - void EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 ubDamage, INT16 sBreathLoss, UINT16 bDirection, UINT16 sRange, UINT16 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation, INT16 sSubsequent, INT32 sLocationGridNo ); + void EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 ubDamage, INT16 sBreathLoss, UINT16 bDirection, UINT16 sRange, SoldierID ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation, INT16 sSubsequent, INT32 sLocationGridNo ); void EVENT_SoldierBeginBladeAttack( INT32 sGridNo, UINT8 ubDirection ); void EVENT_SoldierBeginPunchAttack( INT32 sGridNo, UINT8 ubDirection ); void EVENT_SoldierBeginFirstAid( INT32 sGridNo, UINT8 ubDirection ); From 23af6b6f3f767eae05df1064efe8d75196110b14 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sat, 16 Nov 2024 00:47:14 +0200 Subject: [PATCH 055/192] SoldierTakeDamage & SoldierTakeDelayedDamage to SoldierID --- Tactical/Soldier Control.cpp | 46 ++++++++++++++++++------------------ Tactical/Soldier Control.h | 4 ++-- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index 617facce..a962a750 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -9968,12 +9968,12 @@ void HandleTakeDamageDeath( SOLDIERTYPE *pSoldier, UINT8 bOldLife, UINT8 ubReaso } -UINT8 SOLDIERTYPE::SoldierTakeDamage( INT8 bHeight, INT16 sLifeDeduct, INT16 sBreathLoss, UINT8 ubReason, UINT16 ubAttacker, INT32 sSourceGrid, INT16 sSubsequent, BOOLEAN fShowDamage ) +UINT8 SOLDIERTYPE::SoldierTakeDamage( INT8 bHeight, INT16 sLifeDeduct, INT16 sBreathLoss, UINT8 ubReason, SoldierID ubAttacker, INT32 sSourceGrid, INT16 sSubsequent, BOOLEAN fShowDamage ) { #ifdef JA2BETAVERSION if ( is_networked ) { CHAR tmpMPDbgString[512]; - sprintf( tmpMPDbgString, "SoldierTakeDamage ( bHeight : %i , sLifeDeduct : %i , sBreathLoss : %i , ubReason : %i , ubAttacker : %i , sSourceGrid : %i , sSubsequent : %i , fShowDamage : %i )\n", bHeight, sLifeDeduct, sBreathLoss, ubReason, ubAttacker, sSourceGrid, sSubsequent, fShowDamage ); + sprintf( tmpMPDbgString, "SoldierTakeDamage ( bHeight : %i , sLifeDeduct : %i , sBreathLoss : %i , ubReason : %i , ubAttacker : %i , sSourceGrid : %i , sSubsequent : %i , fShowDamage : %i )\n", bHeight, sLifeDeduct, sBreathLoss, ubReason, ubAttacker.i, sSourceGrid, sSubsequent, fShowDamage ); MPDebugMsg( tmpMPDbgString ); } #endif @@ -9988,24 +9988,24 @@ UINT8 SOLDIERTYPE::SoldierTakeDamage( INT8 bHeight, INT16 sLifeDeduct, INT16 sBr this->ubLastDamageReason = ubReason; // Flugente: dynamic opinions - if (ubAttacker != NOBODY && MercPtrs[ubAttacker] ) + if (ubAttacker < NOBODY) { if (gGameExternalOptions.fDynamicOpinions) { - AddOpinionEvent(this->ubProfile, MercPtrs[ubAttacker]->ubProfile, OPINIONEVENT_FRIENDLYFIRE); + AddOpinionEvent(this->ubProfile, ubAttacker->ubProfile, OPINIONEVENT_FRIENDLYFIRE); // if this is a civilian, other mercs can complain about mercs shooting innocents // Flugente: dynamic opinions: if this guy is not hostile towards us, then some mercs will complain about killing civilians - if ((this->bTeam != OUR_TEAM) && (this->aiData.bNeutral || this->bSide == MercPtrs[ubAttacker]->bSide)) + if ((this->bTeam != OUR_TEAM) && (this->aiData.bNeutral || this->bSide == ubAttacker->bSide)) { // not for killing animals though... if (this->ubBodyType != CROW && this->ubBodyType != COW) - HandleDynamicOpinionChange(MercPtrs[ubAttacker], OPINIONEVENT_CIV_ATTACKER, TRUE, TRUE); + HandleDynamicOpinionChange(ubAttacker, OPINIONEVENT_CIV_ATTACKER, TRUE, TRUE); } } // if we are a turncoat, lose the flag if we were attacked by player forces - if ( (this->usSoldierFlagMask2 & SOLDIER_TURNCOAT) && MercPtrs[ubAttacker]->bSide == 0 ) + if ( (this->usSoldierFlagMask2 & SOLDIER_TURNCOAT) && ubAttacker->bSide == 0 ) { this->usSoldierFlagMask2 &= ~SOLDIER_TURNCOAT; @@ -10049,9 +10049,9 @@ UINT8 SOLDIERTYPE::SoldierTakeDamage( INT8 bHeight, INT16 sLifeDeduct, INT16 sBr // if we have equipped a riot shield and are being attacked in melee, ignore damage from some directions if ( ubReason == TAKE_DAMAGE_BLADE || ubReason == TAKE_DAMAGE_HANDTOHAND || ubReason == TAKE_DAMAGE_TENTACLES ) { - if ( ubAttacker != NOBODY && MercPtrs[ubAttacker] ) + if ( ubAttacker < NOBODY ) { - UINT8 attackdir_inverse = GetDirectionToGridNoFromGridNo( this->sGridNo, MercPtrs[ubAttacker]->sGridNo ); + UINT8 attackdir_inverse = GetDirectionToGridNoFromGridNo( this->sGridNo, ubAttacker->sGridNo ); // if the shield faces the direction of the attacker, we block the attack if ( attackdir_inverse == this->ubDirection || attackdir_inverse == gOneCCDirection[this->ubDirection] || attackdir_inverse == gOneCDirection[this->ubDirection] ) @@ -10107,8 +10107,8 @@ UINT8 SOLDIERTYPE::SoldierTakeDamage( INT8 bHeight, INT16 sLifeDeduct, INT16 sBr HandleTakeDamageDeath( this, bOldLife, ubReason ); // add to our records. - if ( ubAttacker != NOBODY && MercPtrs[ubAttacker] && MercPtrs[ubAttacker]->ubProfile != NO_PROFILE ) - gMercProfiles[MercPtrs[ubAttacker]->ubProfile].records.usDamageDealt += sLifeDeduct; + if ( ubAttacker < NOBODY && ubAttacker->ubProfile != NO_PROFILE ) + gMercProfiles[ubAttacker->ubProfile].records.usDamageDealt += sLifeDeduct; if ( this->ubProfile != NO_PROFILE ) gMercProfiles[this->ubProfile].records.usDamageTaken += sLifeDeduct; @@ -10174,7 +10174,7 @@ UINT8 SOLDIERTYPE::SoldierTakeDamage( INT8 bHeight, INT16 sLifeDeduct, INT16 sBr } else { - sReductionFactor = 4 + PythSpacesAway( MercPtrs[ubAttacker]->sGridNo, this->sGridNo ) / 2; + sReductionFactor = 4 + PythSpacesAway( ubAttacker->sGridNo, this->sGridNo ) / 2; } break; } @@ -10280,8 +10280,8 @@ UINT8 SOLDIERTYPE::SoldierTakeDamage( INT8 bHeight, INT16 sLifeDeduct, INT16 sBr } // add to our records. - if ( ubAttacker != NOBODY && MercPtrs[ubAttacker] && MercPtrs[ubAttacker]->ubProfile != NO_PROFILE ) - gMercProfiles[MercPtrs[ubAttacker]->ubProfile].records.usDamageDealt += sLifeDeduct; + if ( ubAttacker < NOBODY && ubAttacker->ubProfile != NO_PROFILE ) + gMercProfiles[ubAttacker->ubProfile].records.usDamageDealt += sLifeDeduct; if ( this->ubProfile != NO_PROFILE ) gMercProfiles[this->ubProfile].records.usDamageTaken += sLifeDeduct; @@ -10304,8 +10304,8 @@ UINT8 SOLDIERTYPE::SoldierTakeDamage( INT8 bHeight, INT16 sLifeDeduct, INT16 sBr // Flugente we might get a disease from this... if ( gGameExternalOptions.fDisease && sLifeDeduct > 0 ) { - if ( ubAttacker != NOBODY && MercPtrs[ubAttacker] && CREATURE_OR_BLOODCAT( MercPtrs[ubAttacker] ) ) - HandlePossibleInfection( this, MercPtrs[ubAttacker], INFECTION_TYPE_WOUND_ANIMAL ); + if ( ubAttacker < NOBODY && CREATURE_OR_BLOODCAT( ubAttacker ) ) + HandlePossibleInfection( this, ubAttacker, INFECTION_TYPE_WOUND_ANIMAL ); if ( ubReason == TAKE_DAMAGE_TENTACLES ) HandlePossibleInfection( this, NULL, INFECTION_TYPE_WOUND_ANIMAL ); @@ -10577,12 +10577,12 @@ UINT8 SOLDIERTYPE::SoldierTakeDamage( INT8 bHeight, INT16 sLifeDeduct, INT16 sBr if ( ubAttacker != NOBODY ) { // don't give exp for hitting friends! - if ( (MercPtrs[ubAttacker]->bTeam == gbPlayerNum) && (this->bTeam != gbPlayerNum) ) + if ( (ubAttacker->bTeam == gbPlayerNum) && (this->bTeam != gbPlayerNum) ) { if ( ubReason == TAKE_DAMAGE_EXPLOSION ) { // EXPLOSIVES GAIN (combLoss): Causing wounds in battle - StatChange( MercPtrs[ubAttacker], EXPLODEAMT, (UINT16)(10 * ubCombinedLoss), FROM_FAILURE ); + StatChange( ubAttacker, EXPLODEAMT, (UINT16)(10 * ubCombinedLoss), FROM_FAILURE ); } /* else if ( ubReason == TAKE_DAMAGE_GUNFIRE ) @@ -10630,7 +10630,7 @@ UINT8 SOLDIERTYPE::SoldierTakeDamage( INT8 bHeight, INT16 sLifeDeduct, INT16 sBr } } - if ( (ubAttacker != NOBODY) && (Menptr[ubAttacker].bTeam == OUR_TEAM) && (this->ubProfile != NO_PROFILE) && gMercProfiles[this->ubProfile].Type == PROFILETYPE_RPC || + if ( (ubAttacker != NOBODY) && (ubAttacker->bTeam == OUR_TEAM) && (this->ubProfile != NO_PROFILE) && gMercProfiles[this->ubProfile].Type == PROFILETYPE_RPC || gMercProfiles[this->ubProfile].Type == PROFILETYPE_NPC ) { gMercProfiles[this->ubProfile].ubMiscFlags |= PROFILE_MISC_FLAG_WOUNDEDBYPLAYER; @@ -10655,13 +10655,13 @@ UINT8 SOLDIERTYPE::SoldierTakeDamage( INT8 bHeight, INT16 sLifeDeduct, INT16 sBr #ifdef JA2UB //if the attacker is MORRIS, AND he didnt kill the person - if ( Menptr[ubAttacker].ubProfile == MORRIS_UB ) //MORRIS + if ( ubAttacker->ubProfile == MORRIS_UB ) //MORRIS { //if the soldier is hurt, but not dead if ( this->stats.bLife < bOldLife && this->stats.bLife > 0 ) { //if he hasnt said his quote #1 before - if ( !(Menptr[ubAttacker].usQuoteSaidExtFlags & SOLDIER_QUOTE_SAID_THOUGHT_KILLED_YOU) ) + if ( !(ubAttacker->usQuoteSaidExtFlags & SOLDIER_QUOTE_SAID_THOUGHT_KILLED_YOU) ) { //said a flag so morris can say this quote next turn gJa25SaveStruct.fMorrisToSayHurtPlayerQuoteNextTurn = TRUE; @@ -10675,7 +10675,7 @@ UINT8 SOLDIERTYPE::SoldierTakeDamage( INT8 bHeight, INT16 sLifeDeduct, INT16 sBr else if ( gJa25SaveStruct.fMorrisToSayHurtPlayerQuoteNextTurn && gJa25SaveStruct.ubPlayerMorrisHurt == this->ubProfile && this->stats.bLife <= 0 && - !(Menptr[ubAttacker].usQuoteSaidExtFlags & SOLDIER_QUOTE_SAID_THOUGHT_KILLED_YOU) ) + !(ubAttacker->usQuoteSaidExtFlags & SOLDIER_QUOTE_SAID_THOUGHT_KILLED_YOU) ) { //said a flag so morris can say this quote next turn gJa25SaveStruct.fMorrisToSayHurtPlayerQuoteNextTurn = FALSE; @@ -10705,7 +10705,7 @@ UINT8 SOLDIERTYPE::SoldierTakeDamage( INT8 bHeight, INT16 sLifeDeduct, INT16 sBr return(ubCombinedLoss); } -void SOLDIERTYPE::SoldierTakeDelayedDamage(INT8 bHeight, INT16 sLifeDeduct, INT16 sBreathLoss, UINT8 ubReason, UINT8 ubAttacker, INT32 sSourceGrid, INT16 sSubsequent, BOOLEAN fShowDamage) +void SOLDIERTYPE::SoldierTakeDelayedDamage(INT8 bHeight, INT16 sLifeDeduct, INT16 sBreathLoss, UINT8 ubReason, SoldierID ubAttacker, INT32 sSourceGrid, INT16 sSubsequent, BOOLEAN fShowDamage) { delayedDamageFunction = [this, bHeight, sLifeDeduct, sBreathLoss, ubReason, ubAttacker, sSourceGrid, sSubsequent, fShowDamage]() { diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index fa0da17b..f890d694 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -1711,10 +1711,10 @@ public: void ChangeSoldierStance( UINT8 ubDesiredStance ); void StopSoldier( void ); void ReviveSoldier( void ); - UINT8 SoldierTakeDamage( INT8 bHeight, INT16 sLifeDeduct, INT16 sBreathDeduct, UINT8 ubReason, UINT16 ubAttacker, INT32 sSourceGrid, INT16 sSubsequent, BOOLEAN fShowDamage ); + UINT8 SoldierTakeDamage( INT8 bHeight, INT16 sLifeDeduct, INT16 sBreathDeduct, UINT8 ubReason, SoldierID ubAttacker, INT32 sSourceGrid, INT16 sSubsequent, BOOLEAN fShowDamage ); // anv: resolve damage with delay, e.g. damage applied mid movement that would cause issues with world data if applied immediately - void SoldierTakeDelayedDamage(INT8 bHeight, INT16 sLifeDeduct, INT16 sBreathDeduct, UINT8 ubReason, UINT8 ubAttacker, INT32 sSourceGrid, INT16 sSubsequent, BOOLEAN fShowDamage); + void SoldierTakeDelayedDamage(INT8 bHeight, INT16 sLifeDeduct, INT16 sBreathDeduct, UINT8 ubReason, SoldierID ubAttacker, INT32 sSourceGrid, INT16 sSubsequent, BOOLEAN fShowDamage); void ResolveDelayedDamage(); // Palette functions for soldiers From 41fc407de698a2e3bc0011f6e252b4bba8a01cb5 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sat, 16 Nov 2024 00:55:51 +0200 Subject: [PATCH 056/192] Convert TacticalRemoveSoldier to SoldierID --- Tactical/Soldier Create.cpp | 12 ++++-------- Tactical/Soldier Create.h | 6 +++--- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/Tactical/Soldier Create.cpp b/Tactical/Soldier Create.cpp index f54fc3d5..ae841fb4 100644 --- a/Tactical/Soldier Create.cpp +++ b/Tactical/Soldier Create.cpp @@ -2148,12 +2148,10 @@ void InitSoldierStruct( SOLDIERTYPE *pSoldier ) } -BOOLEAN InternalTacticalRemoveSoldier( UINT16 usSoldierIndex, BOOLEAN fRemoveVehicle ) +BOOLEAN InternalTacticalRemoveSoldier( SoldierID usSoldierIndex, BOOLEAN fRemoveVehicle ) { - SOLDIERTYPE * pSoldier; - // Check range of index given - if ( usSoldierIndex < 0 || usSoldierIndex > TOTAL_SOLDIERS-1 ) + if ( usSoldierIndex >= NOBODY ) { // Set debug message @@ -2171,9 +2169,7 @@ BOOLEAN InternalTacticalRemoveSoldier( UINT16 usSoldierIndex, BOOLEAN fRemoveVeh gfUISelectiveTargetFound = FALSE; } - pSoldier = MercPtrs[ usSoldierIndex ]; - - return TacticalRemoveSoldierPointer( pSoldier, fRemoveVehicle ); + return TacticalRemoveSoldierPointer(usSoldierIndex, fRemoveVehicle ); } BOOLEAN TacticalRemoveSoldierPointer( SOLDIERTYPE *pSoldier, BOOLEAN fRemoveVehicle ) @@ -2244,7 +2240,7 @@ BOOLEAN TacticalRemoveSoldierPointer( SOLDIERTYPE *pSoldier, BOOLEAN fRemoveVehi return( TRUE ); } -BOOLEAN TacticalRemoveSoldier( UINT16 usSoldierIndex ) +BOOLEAN TacticalRemoveSoldier( SoldierID usSoldierIndex ) { return( InternalTacticalRemoveSoldier( usSoldierIndex, TRUE ) ); } diff --git a/Tactical/Soldier Create.h b/Tactical/Soldier Create.h index d8791d30..03d42673 100644 --- a/Tactical/Soldier Create.h +++ b/Tactical/Soldier Create.h @@ -451,7 +451,7 @@ public: //Original functions currently used throughout the game. -BOOLEAN TacticalRemoveSoldier( UINT16 usSoldierIndex ); +BOOLEAN TacticalRemoveSoldier( SoldierID usSoldierIndex ); BOOLEAN TacticalRemoveSoldierPointer( SOLDIERTYPE *pSoldier, BOOLEAN fRemoveVehicle ); INT8 CalcDifficultyModifier( UINT8 ubSoldierClass ); @@ -562,7 +562,7 @@ void GeneratePaletteForSoldier( SOLDIERTYPE *pSoldier, UINT8 ubSoldierClass, UIN void QuickCreateProfileMerc( INT8 bTeam, UINT8 ubProfileID ); -BOOLEAN InternalTacticalRemoveSoldier( UINT16 usSoldierIndex, BOOLEAN fRemoveVehicle ); +BOOLEAN InternalTacticalRemoveSoldier( SoldierID usSoldierIndex, BOOLEAN fRemoveVehicle ); //SPECIAL! Certain events in the game can cause profiled NPCs to become enemies. The two cases are //adding Mike and Iggy. We will only add one NPC in any given combat and the conditions for setting @@ -600,4 +600,4 @@ INT32 ChooseHairColor( UINT8 usBodyType, INT32 skin ); // Flugente: set palettes for vest/shirt void SetClothes( SOLDIERTYPE* pSoldier, INT8 aVest, INT8 aPants, INT8 aHair = -1, INT8 aSkin = -1 ); -#endif \ No newline at end of file +#endif From 98c18495c6599783afb5c5494569b50d046d3b27 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sat, 16 Nov 2024 00:58:16 +0200 Subject: [PATCH 057/192] Update GENERAL_SAVE_INFO::sContractRehireSoldierID to SoldierID --- Ja2/SaveLoadGame.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Ja2/SaveLoadGame.cpp b/Ja2/SaveLoadGame.cpp index 3d634441..ab84c449 100644 --- a/Ja2/SaveLoadGame.cpp +++ b/Ja2/SaveLoadGame.cpp @@ -296,12 +296,12 @@ 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; @@ -8505,7 +8505,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 @@ -8784,7 +8784,7 @@ 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); @@ -9045,10 +9045,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 From 3ff4cc0c19848ae9f05c61f6036362c247f09b21 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sat, 16 Nov 2024 01:22:20 +0200 Subject: [PATCH 058/192] GENERAL_SAVE_INFO members to SoldierID --- Ja2/SaveLoadGame.cpp | 18 +++++++++--------- Strategic/LuaInitNPCs.cpp | 2 +- Tactical/Boxing.cpp | 40 +++++++++++++++++++-------------------- Tactical/Boxing.h | 18 +++++++++--------- 4 files changed, 39 insertions(+), 39 deletions(-) diff --git a/Ja2/SaveLoadGame.cpp b/Ja2/SaveLoadGame.cpp index ab84c449..9b626576 100644 --- a/Ja2/SaveLoadGame.cpp +++ b/Ja2/SaveLoadGame.cpp @@ -232,7 +232,7 @@ typedef struct BOOLEAN fHavePurchasedItemsFromTony; //The selected soldier in tactical - UINT16 usSelectedSoldier; + SoldierID usSelectedSoldier; // The x and y scroll position INT16 sRenderCenterX; @@ -313,7 +313,7 @@ typedef struct INT16 sCurInterfacePanel; - UINT16 ubSMCurrentMercID; + SoldierID ubSMCurrentMercID; BOOLEAN fFirstTimeInMapScreen; @@ -321,9 +321,9 @@ typedef struct BOOLEAN fDisableMapInterfaceDueToBattle; - INT32 sBoxerGridNo[ NUM_BOXERS ]; - UINT16 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 @@ -341,8 +341,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 ]; @@ -8536,7 +8536,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 @@ -9068,7 +9068,7 @@ BOOLEAN LoadGeneralInfo( HWFILE hFile ) if( sGeneralInfo.ubSMCurrentMercID == NOBODY) gpSMCurrentMerc = NULL; else - gpSMCurrentMerc = &Menptr[ sGeneralInfo.ubSMCurrentMercID ]; + gpSMCurrentMerc = sGeneralInfo.ubSMCurrentMercID; //Set the interface panel to the team panel ShutdownCurrentPanel( ); diff --git a/Strategic/LuaInitNPCs.cpp b/Strategic/LuaInitNPCs.cpp index e5634f6d..b7a002ab 100644 --- a/Strategic/LuaInitNPCs.cpp +++ b/Strategic/LuaInitNPCs.cpp @@ -3601,7 +3601,7 @@ static int l_gubBoxerID(lua_State *L) if ( n >= 2 ) { UINT8 val = lua_tointeger( L, 1 ); - UINT8 val2 = lua_tointeger( L, 2 ); + UINT16 val2 = lua_tointeger( L, 2 ); if (val <= 2) { diff --git a/Tactical/Boxing.cpp b/Tactical/Boxing.cpp index bb161ba6..b48a4447 100644 --- a/Tactical/Boxing.cpp +++ b/Tactical/Boxing.cpp @@ -23,13 +23,13 @@ #include "message.h" #include "GameSettings.h" // added by SANDRO -INT32 gsBoxerGridNo[ NUM_BOXERS ] = { 11393, 11233, 11073 }; -UINT16 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; - UINT16 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; } } diff --git a/Tactical/Boxing.h b/Tactical/Boxing.h index 4d4abf6e..8f0dd5c5 100644 --- a/Tactical/Boxing.h +++ b/Tactical/Boxing.h @@ -19,14 +19,14 @@ enum DisqualificationReasons BAD_ATTACK } ; -extern INT32 gsBoxerGridNo[ NUM_BOXERS ]; -extern UINT16 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 \ No newline at end of file +#endif From e7fe1d1cda3b708b5d2eb87bce22384ce6125593 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sat, 16 Nov 2024 11:55:57 +0200 Subject: [PATCH 059/192] Update LaptopSave.h --- Laptop/LaptopSave.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Laptop/LaptopSave.h b/Laptop/LaptopSave.h index 4f555b96..0fed6ec9 100644 --- a/Laptop/LaptopSave.h +++ b/Laptop/LaptopSave.h @@ -25,8 +25,8 @@ class SOLDIERTYPE; typedef struct { - BOOLEAN fActive; - UINT16 ubSoldierID; + BOOLEAN fActive; + SoldierID ubSoldierID; UINT8 ubMercID; INT32 iPayOutPrice; } LIFE_INSURANCE_PAYOUT; From edb26a68fe5663b04a35b45e7ebd67c555a802c5 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sat, 16 Nov 2024 16:25:28 +0200 Subject: [PATCH 060/192] Guard against array out of bounds access --- Tactical/Soldier Control.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index a962a750..e3675f52 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -9105,7 +9105,10 @@ void SetSoldierAniSpeed( SOLDIERTYPE *pSoldier ) if ( pSoldier->flags.fUseMoverrideMoveSpeed ) { - pStatsSoldier = MercPtrs[pSoldier->bOverrideMoveSpeed]; + if (pSoldier->bOverrideMoveSpeed >= 0 && pSoldier->bOverrideMoveSpeed < TOTAL_SOLDIERS) + { + pStatsSoldier = MercPtrs[pSoldier->bOverrideMoveSpeed]; + } } // Only calculate if set to zero From d28d46d9740b44a29910420b67c1ef76404d6242 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sat, 16 Nov 2024 16:28:48 +0200 Subject: [PATCH 061/192] SOLDIERTYPE::bOverrideMoveSpeed to SoldierID --- Ja2/SaveLoadGame.cpp | 2 +- Tactical/Soldier Control.cpp | 4 ++-- Tactical/Soldier Control.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Ja2/SaveLoadGame.cpp b/Ja2/SaveLoadGame.cpp index 9b626576..9e43a098 100644 --- a/Ja2/SaveLoadGame.cpp +++ b/Ja2/SaveLoadGame.cpp @@ -2312,7 +2312,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); diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index e3675f52..f7b40549 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -9105,9 +9105,9 @@ void SetSoldierAniSpeed( SOLDIERTYPE *pSoldier ) if ( pSoldier->flags.fUseMoverrideMoveSpeed ) { - if (pSoldier->bOverrideMoveSpeed >= 0 && pSoldier->bOverrideMoveSpeed < TOTAL_SOLDIERS) + if (pSoldier->bOverrideMoveSpeed < NOBODY) { - pStatsSoldier = MercPtrs[pSoldier->bOverrideMoveSpeed]; + pStatsSoldier = pSoldier->bOverrideMoveSpeed; } } diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index f890d694..d4a5ccd6 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -1488,7 +1488,7 @@ public: struct GROUP *pGroup; UINT8 ubLeaveHistoryCode; - INT8 bOverrideMoveSpeed; + SoldierID bOverrideMoveSpeed; UINT32 uiTimeSoldierWillArrive; From cd720a639acbeb2b68a8115123c98e31e1708621 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sat, 16 Nov 2024 19:25:44 +0200 Subject: [PATCH 062/192] Fix Dismiss Merc not working after selecting several soldiers --- Strategic/Map Screen Interface.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Strategic/Map Screen Interface.cpp b/Strategic/Map Screen Interface.cpp index b606329e..102942fc 100644 --- a/Strategic/Map Screen Interface.cpp +++ b/Strategic/Map Screen Interface.cpp @@ -471,6 +471,7 @@ void ResetSelectedListForMapScreen( void ) // WDS - make number of mercenaries, etc. be configurable // set all the entries int he selected list to false memset( fSelectedListOfMercsForMapScreen, FALSE, sizeof(fSelectedListOfMercsForMapScreen) ); + gSelectedSoldiers.clear(); // if we still have a valid dude selected if ( ( bSelectedInfoChar != -1 ) && ( gCharactersList[ bSelectedInfoChar ].fValid == TRUE ) ) From 42d5ecb923d69a736bfcc0a69c64db33f31878bc Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sat, 16 Nov 2024 20:09:14 +0200 Subject: [PATCH 063/192] HandleLeavingOfEquipmentInCurrentSector() to SoldierID --- Strategic/Map Screen Interface.cpp | 47 +++++++++++++++++------------- Strategic/Map Screen Interface.h | 2 +- 2 files changed, 27 insertions(+), 22 deletions(-) diff --git a/Strategic/Map Screen Interface.cpp b/Strategic/Map Screen Interface.cpp index 102942fc..797b2cd7 100644 --- a/Strategic/Map Screen Interface.cpp +++ b/Strategic/Map Screen Interface.cpp @@ -1522,22 +1522,25 @@ void GetMoraleString( SOLDIERTYPE *pSoldier, STR16 sString ) // NOTE: This doesn't use the "LeaveList" system at all! -void HandleLeavingOfEquipmentInCurrentSector( UINT32 uiMercId ) +void HandleLeavingOfEquipmentInCurrentSector( SoldierID uiMercId ) { // just drop the stuff in the current sector //INT32 iCounter = 0; INT32 sGridNo, sTempGridNo; - INT8 sectorz = Menptr[uiMercId].bSectorZ; - if ( SPY_LOCATION( Menptr[uiMercId].bAssignment ) ) + INT8 sectorz = uiMercId->bSectorZ; + if ( SPY_LOCATION( uiMercId->bAssignment ) ) sectorz = max( 0, sectorz - 10 ); - - if( Menptr[ uiMercId ].sSectorX != gWorldSectorX || Menptr[ uiMercId ].sSectorY != gWorldSectorY || sectorz != gbWorldSectorZ ) + + const auto x = uiMercId->sSectorX; + const auto y = uiMercId->sSectorY; + + if( x != gWorldSectorX || y != gWorldSectorY || sectorz != gbWorldSectorZ ) { // ATE: Use insertion gridno if not nowhere and insertion is gridno - if ( Menptr[ uiMercId ].ubStrategicInsertionCode == INSERTION_CODE_GRIDNO && !TileIsOutOfBounds(Menptr[ uiMercId ].usStrategicInsertionData) ) + if ( uiMercId->ubStrategicInsertionCode == INSERTION_CODE_GRIDNO && !TileIsOutOfBounds(uiMercId->usStrategicInsertionData) ) { - sGridNo = Menptr[ uiMercId ].usStrategicInsertionData; + sGridNo = uiMercId->usStrategicInsertionData; } else { @@ -1548,7 +1551,7 @@ void HandleLeavingOfEquipmentInCurrentSector( UINT32 uiMercId ) else { // ATE: Mercs can have a gridno of NOWHERE..... - sGridNo = Menptr[ uiMercId ].sGridNo; + sGridNo = uiMercId->sGridNo; if (TileIsOutOfBounds(sGridNo)) { @@ -1565,36 +1568,38 @@ void HandleLeavingOfEquipmentInCurrentSector( UINT32 uiMercId ) } } - UINT32 invsize = Menptr[ uiMercId ].inv.size(); - UINT32 uiFoundItems = 0; - Inventory invTemporaryBeforeDrop; + Inventory &inv = uiMercId->inv; + const UINT32 invsize = inv.size(); - if( Menptr[ uiMercId ].sSectorX != gWorldSectorX || Menptr[ uiMercId ].sSectorY != gWorldSectorY || sectorz != gbWorldSectorZ ) + if( x != gWorldSectorX || y != gWorldSectorY || sectorz != gbWorldSectorZ ) { - if (fShowMapInventoryPool && Menptr[uiMercId].sSectorX == sSelMapX && Menptr[uiMercId].sSectorY == sSelMapY && Menptr[uiMercId].bSectorZ == iCurrentMapSectorZ) + if (fShowMapInventoryPool && x == sSelMapX && y == sSelMapY && uiMercId->bSectorZ == iCurrentMapSectorZ) { for (UINT32 iCounter = 0; iCounter < invsize; ++iCounter) { - if (Menptr[uiMercId].inv[iCounter].exists()) + if (inv[iCounter].exists()) { - AutoPlaceObjectInInventoryStash(&Menptr[uiMercId].inv[iCounter], Menptr[uiMercId].sGridNo, Menptr[uiMercId].pathing.bLevel); + AutoPlaceObjectInInventoryStash(&( inv[iCounter] ), uiMercId->sGridNo, uiMercId->pathing.bLevel); } } } else { + Inventory invTemporaryBeforeDrop; + UINT32 uiFoundItems = 0; + for (UINT32 iCounter = 0; iCounter < invsize; ++iCounter) { // slot found, // check if actual item - if (Menptr[uiMercId].inv[iCounter].exists() == true) + if (inv[iCounter].exists() == true) { - invTemporaryBeforeDrop[uiFoundItems] = Menptr[uiMercId].inv[iCounter]; + invTemporaryBeforeDrop[uiFoundItems] = inv[iCounter]; uiFoundItems++; } } // anv: add all items at once (less file operations = less lag) - AddItemsToUnLoadedSector(Menptr[uiMercId].sSectorX, Menptr[uiMercId].sSectorY, sectorz, sGridNo, uiFoundItems, &(invTemporaryBeforeDrop[0]), Menptr[uiMercId].pathing.bLevel, WOLRD_ITEM_FIND_SWEETSPOT_FROM_GRIDNO | WORLD_ITEM_REACHABLE, 0, 1, FALSE); + AddItemsToUnLoadedSector(x, y, sectorz, sGridNo, uiFoundItems, &(invTemporaryBeforeDrop[0]), uiMercId->pathing.bLevel, WOLRD_ITEM_FIND_SWEETSPOT_FROM_GRIDNO | WORLD_ITEM_REACHABLE, 0, 1, FALSE); } } else @@ -1603,14 +1608,14 @@ void HandleLeavingOfEquipmentInCurrentSector( UINT32 uiMercId ) { // slot found, // check if actual item - if( Menptr[ uiMercId ].inv[ iCounter ].exists() == true ) + if( inv[ iCounter ].exists() == true ) { - AddItemToPool( sGridNo, &( Menptr[ uiMercId ].inv[ iCounter ] ) , 1, Menptr[ uiMercId ].pathing.bLevel, WORLD_ITEM_REACHABLE, 0 ); + AddItemToPool( sGridNo, &( inv[ iCounter ] ) , 1, uiMercId->pathing.bLevel, WORLD_ITEM_REACHABLE, 0 ); } } } - DropKeysInKeyRing( MercPtrs[ uiMercId ], sGridNo, MercPtrs[ uiMercId ]->pathing.bLevel, 1, FALSE, 0, FALSE ); + DropKeysInKeyRing( uiMercId, sGridNo, uiMercId->pathing.bLevel, 1, FALSE, 0, FALSE ); } diff --git a/Strategic/Map Screen Interface.h b/Strategic/Map Screen Interface.h index 7837887f..d29fb861 100644 --- a/Strategic/Map Screen Interface.h +++ b/Strategic/Map Screen Interface.h @@ -513,7 +513,7 @@ 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 ); From 2918801f754db5c38d494f98f01371e4863615d9 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sat, 16 Nov 2024 20:55:08 +0200 Subject: [PATCH 064/192] AddSoldierToSector & OBJECTTYPE::soldierID changed to SoldierID --- Editor/EditorMercs.cpp | 2 +- Strategic/Map Screen Interface Map Inventory.cpp | 16 ++++++++-------- Strategic/mapscreen.cpp | 2 +- Tactical/Handle Items.cpp | 8 ++++---- Tactical/Interface Items.cpp | 2 +- Tactical/Interface Panels.cpp | 4 ++-- Tactical/Inventory Choosing.cpp | 6 +++--- Tactical/Soldier Add.cpp | 15 +++++++-------- Tactical/Soldier Add.h | 2 +- Tactical/World Items.cpp | 6 +++--- Tactical/World Items.h | 2 +- TileEngine/Explosion Control.cpp | 6 +++--- 12 files changed, 35 insertions(+), 36 deletions(-) diff --git a/Editor/EditorMercs.cpp b/Editor/EditorMercs.cpp index 6fb9f5b2..d53bb201 100644 --- a/Editor/EditorMercs.cpp +++ b/Editor/EditorMercs.cpp @@ -162,7 +162,7 @@ void AddNewItemToSelectedMercsInventory( BOOLEAN fCreate ); void RenderMercInventoryPanel(); void SetDroppableCheckboxesBasedOnMercsInventory(); -extern BOOLEAN InternalAddSoldierToSector( UINT16 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 diff --git a/Strategic/Map Screen Interface Map Inventory.cpp b/Strategic/Map Screen Interface Map Inventory.cpp index d7f8d043..a7fef9f1 100644 --- a/Strategic/Map Screen Interface Map Inventory.cpp +++ b/Strategic/Map Screen Interface Map Inventory.cpp @@ -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 -INT16 sObjectSourseSoldierID = -1; +SoldierID sObjectSourseSoldierID = NOBODY; // number of unseen items in sector UINT32 uiNumberOfUnSeenItems = 0; @@ -2660,7 +2660,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 +2674,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 +2689,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; @@ -5159,7 +5159,7 @@ void SortSectorInventoryStackAndMerge(bool ammoOnly ) 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. diff --git a/Strategic/mapscreen.cpp b/Strategic/mapscreen.cpp index 81a3e340..16c913bc 100644 --- a/Strategic/mapscreen.cpp +++ b/Strategic/mapscreen.cpp @@ -15770,7 +15770,7 @@ void ChangeSelectedInfoChar( INT16 bCharNumber, BOOLEAN fResetSelectedList ) fShowInventoryFlag = FALSE; } //shadooow: this resets the current highlight item selection to be redrawn again - HandleCompatibleAmmoUI(MercPtrs[gCharactersList[bCharNumber].usSolID], NO_SLOT, FALSE); + HandleCompatibleAmmoUI(gCharactersList[bCharNumber].usSolID, NO_SLOT, FALSE); if (gpItemPointer != NULL) { gfCheckForMouseOverItem = TRUE; diff --git a/Tactical/Handle Items.cpp b/Tactical/Handle Items.cpp index 95917894..2a1a1ba5 100644 --- a/Tactical/Handle Items.cpp +++ b/Tactical/Handle Items.cpp @@ -4292,7 +4292,7 @@ BOOLEAN DrawItemPoolList( ITEM_POOL *pItemPool, INT32 sGridNo, UINT8 bCommand, I if (gGameExternalOptions.gfShowBackpackOwner && Item[gWorldItems[pItemPool->iItemIndex].object.usItem].usItemClass == IC_LBEGEAR && LoadBearingEquipment[Item[gWorldItems[pItemPool->iItemIndex].object.usItem].ubClassIndex].lbeClass == BACKPACK && - gWorldItems[pItemPool->iItemIndex].soldierID != -1 && + gWorldItems[pItemPool->iItemIndex].soldierID != NOBODY && MercPtrs[gWorldItems[pItemPool->iItemIndex].soldierID]) swprintf(pStr, L"%s (%d) (%s)", ShortItemNames[gWorldItems[pTempItemPool->iItemIndex].object.usItem], gWorldItems[pTempItemPool->iItemIndex].object.ubNumberOfObjects, MercPtrs[gWorldItems[pItemPool->iItemIndex].soldierID]->GetName()); else @@ -4303,7 +4303,7 @@ BOOLEAN DrawItemPoolList( ITEM_POOL *pItemPool, INT32 sGridNo, UINT8 bCommand, I if (gGameExternalOptions.gfShowBackpackOwner && Item[gWorldItems[pItemPool->iItemIndex].object.usItem].usItemClass == IC_LBEGEAR && LoadBearingEquipment[Item[gWorldItems[pItemPool->iItemIndex].object.usItem].ubClassIndex].lbeClass == BACKPACK && - gWorldItems[pItemPool->iItemIndex].soldierID != -1 && + gWorldItems[pItemPool->iItemIndex].soldierID != NOBODY && MercPtrs[gWorldItems[pItemPool->iItemIndex].soldierID]) swprintf(pStr, L"%s (%s)", ShortItemNames[gWorldItems[pTempItemPool->iItemIndex].object.usItem], MercPtrs[gWorldItems[pItemPool->iItemIndex].soldierID]->GetName()); else @@ -4413,7 +4413,7 @@ BOOLEAN DrawItemPoolList( ITEM_POOL *pItemPool, INT32 sGridNo, UINT8 bCommand, I if (gGameExternalOptions.gfShowBackpackOwner && Item[gWorldItems[pItemPool->iItemIndex].object.usItem].usItemClass == IC_LBEGEAR && LoadBearingEquipment[Item[gWorldItems[pItemPool->iItemIndex].object.usItem].ubClassIndex].lbeClass == BACKPACK && - gWorldItems[pItemPool->iItemIndex].soldierID != -1 && + gWorldItems[pItemPool->iItemIndex].soldierID != NOBODY && MercPtrs[gWorldItems[pItemPool->iItemIndex].soldierID]) swprintf(pStr, L"%s (%d) (%s)", ShortItemNames[gWorldItems[pItemPool->iItemIndex].object.usItem], gWorldItems[pItemPool->iItemIndex].object.ubNumberOfObjects, MercPtrs[gWorldItems[pItemPool->iItemIndex].soldierID]->GetName()); else @@ -4424,7 +4424,7 @@ BOOLEAN DrawItemPoolList( ITEM_POOL *pItemPool, INT32 sGridNo, UINT8 bCommand, I if (gGameExternalOptions.gfShowBackpackOwner && Item[gWorldItems[pItemPool->iItemIndex].object.usItem].usItemClass == IC_LBEGEAR && LoadBearingEquipment[Item[gWorldItems[pItemPool->iItemIndex].object.usItem].ubClassIndex].lbeClass == BACKPACK && - gWorldItems[pItemPool->iItemIndex].soldierID != -1 && + gWorldItems[pItemPool->iItemIndex].soldierID != NOBODY && MercPtrs[gWorldItems[pItemPool->iItemIndex].soldierID]) swprintf(pStr, L"%s (%s)", ShortItemNames[gWorldItems[pItemPool->iItemIndex].object.usItem], MercPtrs[gWorldItems[pItemPool->iItemIndex].soldierID]->GetName()); else diff --git a/Tactical/Interface Items.cpp b/Tactical/Interface Items.cpp index 3cfe7e15..92ef5863 100644 --- a/Tactical/Interface Items.cpp +++ b/Tactical/Interface Items.cpp @@ -11478,7 +11478,7 @@ void RenderItemPickupMenu( ) !gfStealing && Item[gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].object.usItem].usItemClass == IC_LBEGEAR && LoadBearingEquipment[Item[gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].object.usItem].ubClassIndex].lbeClass == BACKPACK && - gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].soldierID != -1 && + gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].soldierID != NOBODY && MercPtrs[gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].soldierID]) //swprintf(pStr, L"%s (%s)", ShortItemNames[pObject->usItem], MercPtrs[gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].soldierID]->GetName()); swprintf(pStr, L"(%s)", MercPtrs[gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].soldierID]->GetName()); diff --git a/Tactical/Interface Panels.cpp b/Tactical/Interface Panels.cpp index defdd7d7..a397d28d 100644 --- a/Tactical/Interface Panels.cpp +++ b/Tactical/Interface Panels.cpp @@ -4209,7 +4209,7 @@ BOOLEAN ChangeDropPackStatus(SOLDIERTYPE *pSoldier, BOOLEAN newStatus) { if(gWorldItems[wi].soldierID == pSoldier->ubID) { - gWorldItems[wi].soldierID = -1; + gWorldItems[wi].soldierID = NOBODY; } } MoveItemToLBEItem( pSoldier, BPACKPOCKPOS ); @@ -4231,7 +4231,7 @@ BOOLEAN ChangeDropPackStatus(SOLDIERTYPE *pSoldier, BOOLEAN newStatus) //CHRISL: There's the remote chance that a non-LBE item might get associated with a merc. If that happens, we can // have a CTD, so lets resolve that here. if(Item[gWorldItems[wi].object.usItem].usItemClass != IC_LBEGEAR) - gWorldItems[wi].soldierID = -1; + gWorldItems[wi].soldierID = NOBODY; if(gWorldItems[wi].soldierID == pSoldier->ubID && gWorldItems[wi].fExists == TRUE && Item[gWorldItems[wi].object.usItem].usItemClass == IC_LBEGEAR && LoadBearingEquipment[Item[gWorldItems[wi].object.usItem].ubClassIndex].lbeClass == BACKPACK) { for (int x = 0; x < gWorldItems[wi].object.ubNumberOfObjects; ++x) { diff --git a/Tactical/Inventory Choosing.cpp b/Tactical/Inventory Choosing.cpp index 4bab504f..eee44c60 100644 --- a/Tactical/Inventory Choosing.cpp +++ b/Tactical/Inventory Choosing.cpp @@ -3901,7 +3901,7 @@ void MoveOneMilitiaEquipmentSet(INT16 sSourceX, INT16 sSourceY, INT16 sTargetX, pWorldItem_tmp[uiCount].usFlags = WORLD_ITEM_REACHABLE; pWorldItem_tmp[uiCount].bVisible = 1; pWorldItem_tmp[uiCount].bRenderZHeightAboveLevel = 0; - pWorldItem_tmp[uiCount].soldierID = -1; + pWorldItem_tmp[uiCount].soldierID = NOBODY; pWorldItem_tmp[uiCount].object = tmp.Inv[ i ]; } } @@ -4647,7 +4647,7 @@ void TakeMilitiaEquipmentfromSector( INT16 sMapX, INT16 sMapY, INT8 sMapZ, SOLDI pWorldItem[uiCount].usFlags = WORLD_ITEM_REACHABLE; pWorldItem[uiCount].bVisible = 1; pWorldItem[uiCount].bRenderZHeightAboveLevel = 0; - pWorldItem[uiCount].soldierID = -1; + pWorldItem[uiCount].soldierID = NOBODY; pWorldItem[uiCount].object = newAmmoObj; fNewMagCreated = FALSE; @@ -4686,7 +4686,7 @@ void TakeMilitiaEquipmentfromSector( INT16 sMapX, INT16 sMapY, INT8 sMapZ, SOLDI pWorldItem_tmp[uiCount].usFlags = WORLD_ITEM_REACHABLE; pWorldItem_tmp[uiCount].bVisible = 1; pWorldItem_tmp[uiCount].bRenderZHeightAboveLevel = 0; - pWorldItem_tmp[uiCount].soldierID = -1; + pWorldItem_tmp[uiCount].soldierID = NOBODY; pWorldItem_tmp[uiCount].object = newAmmoObj; fNewMagCreated = FALSE; diff --git a/Tactical/Soldier Add.cpp b/Tactical/Soldier Add.cpp index e5c9ec68..ef769a86 100644 --- a/Tactical/Soldier Add.cpp +++ b/Tactical/Soldier Add.cpp @@ -1135,17 +1135,16 @@ INT32 FindRandomGridNoBetweenCircles( INT32 sCenterGridNo, UINT8 uInnerRadius, U return(sGridNo); } -BOOLEAN InternalAddSoldierToSector(UINT16 ubID, BOOLEAN fCalculateDirection, BOOLEAN fUseAnimation, UINT16 usAnimState, UINT16 usAnimCode ) +BOOLEAN InternalAddSoldierToSector(SoldierID ubID, BOOLEAN fCalculateDirection, BOOLEAN fUseAnimation, UINT16 usAnimState, UINT16 usAnimCode ) { - UINT8 ubDirection = 0; - UINT8 ubCalculatedDirection = 0; - SOLDIERTYPE *pSoldier = 0; - INT32 sGridNo = NOWHERE; - INT32 sExitGridNo = NOWHERE; + UINT8 ubDirection = 0; + UINT8 ubCalculatedDirection = 0; + INT32 sGridNo = NOWHERE; + INT32 sExitGridNo = NOWHERE; DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("InternalAddSoldierToSector")); - pSoldier = MercPtrs[ ubID ]; + SOLDIERTYPE *pSoldier = ubID; if ( pSoldier->bActive ) { @@ -1332,7 +1331,7 @@ BOOLEAN InternalAddSoldierToSector(UINT16 ubID, BOOLEAN fCalculateDirection, BOO return( FALSE ); } -BOOLEAN AddSoldierToSector( UINT16 ubID ) +BOOLEAN AddSoldierToSector( SoldierID ubID ) { DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("AddSoldierToSector")); return( InternalAddSoldierToSector( ubID, TRUE, FALSE, 0 , 0) ); diff --git a/Tactical/Soldier Add.h b/Tactical/Soldier Add.h index 4d4ba01b..32aa90dd 100644 --- a/Tactical/Soldier Add.h +++ b/Tactical/Soldier Add.h @@ -30,7 +30,7 @@ INT32 FindRandomGridNoBetweenCircles( INT32 sCenterGridNo, UINT8 uInnerRadius, U // Adds a soldier ( already created in mercptrs[] array )! // Finds a good placement based on data in the loaded sector and if they are enemy's or not, etc... -BOOLEAN AddSoldierToSector( UINT16 ubID ); +BOOLEAN AddSoldierToSector( SoldierID ubID ); BOOLEAN AddSoldierToSectorNoCalculateDirection( UINT16 ubID ); diff --git a/Tactical/World Items.cpp b/Tactical/World Items.cpp index f2bac848..adcb9671 100644 --- a/Tactical/World Items.cpp +++ b/Tactical/World Items.cpp @@ -256,7 +256,7 @@ void WORLDITEM::initialize() this->bRenderZHeightAboveLevel = 0; this->bVisible = 0; this->ubNonExistChance = 0; - this->soldierID = -1; + this->soldierID = NOBODY; this->object.initialize(); } @@ -270,7 +270,7 @@ WORLDITEM& WORLDITEM::operator=(OLD_WORLDITEM_101& src) this->bRenderZHeightAboveLevel = src.bRenderZHeightAboveLevel; this->bVisible = src.bVisible; this->ubNonExistChance = src.ubNonExistChance; - this->soldierID = -1; + this->soldierID = NOBODY; //convert the OBJECTTYPE this->object = src.oldObject; @@ -288,7 +288,7 @@ WORLDITEM& WORLDITEM::operator=(_OLD_WORLDITEM& src)//dnl ch42 280909 bRenderZHeightAboveLevel = src.bRenderZHeightAboveLevel; bVisible = src.bVisible; ubNonExistChance = src.ubNonExistChance; - soldierID = -1; + soldierID = NOBODY; object = src.object; } return(*this); diff --git a/Tactical/World Items.h b/Tactical/World Items.h index 04a07697..cd3ae1ee 100644 --- a/Tactical/World Items.h +++ b/Tactical/World Items.h @@ -72,7 +72,7 @@ public: //Because this value is zero in the saved maps, we can't change it to 100, hence the reversal method. //This check is only performed the first time a map is loaded. Later, it is entirely skipped. UINT8 ubNonExistChance; - INT16 soldierID; + SoldierID soldierID; char endOfPod; OBJECTTYPE object; }; diff --git a/TileEngine/Explosion Control.cpp b/TileEngine/Explosion Control.cpp index 6d3c28b2..74e67f99 100644 --- a/TileEngine/Explosion Control.cpp +++ b/TileEngine/Explosion Control.cpp @@ -3796,11 +3796,11 @@ void AddBombToQueue( UINT32 uiWorldBombIndex, UINT32 uiTimeStamp, BOOL fFromRemo WORLDITEM wi = gWorldItems[iWorldIndex]; if (wi.fExists) { - INT16 soldierID = wi.soldierID; // bomb's owner - if (soldierID == -1) + SoldierID soldierID = wi.soldierID; // bomb's owner + if (soldierID == NOBODY) soldierID = wi.object[0]->data.misc.ubBombOwner - 2; // undo the hack - if (IsOurSoldier(gubPersonToSetOffExplosions) || IsOurSoldier(soldierID)) + if (IsOurSoldier(gubPersonToSetOffExplosions) || IsOurSoldier((SOLDIERTYPE*)soldierID)) { // we set off the bomb (could be failed disarm) or we own it, tell the other clients we are setting it off send_detonate_explosive(iWorldIndex,gubPersonToSetOffExplosions); From c475f9e4e6fd2407383e6ca1722e3e5b73d441ba Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 17 Nov 2024 01:25:00 +0200 Subject: [PATCH 065/192] Convert MapScreenCharacterSt::usSolID to SoldierID --- Strategic/Assignments.cpp | 35 +- Strategic/Facilities.cpp | 12 +- .../Map Screen Interface Map Inventory.cpp | 92 +++-- Strategic/Map Screen Interface Map.cpp | 6 +- Strategic/Map Screen Interface.cpp | 53 +-- Strategic/Meanwhile.cpp | 2 +- Strategic/Town Militia.cpp | 4 +- Strategic/mapscreen.cpp | 375 +++++++++--------- Strategic/mapscreen.h | 4 +- Tactical/Interface Items.cpp | 42 +- Tactical/Interface Panels.cpp | 6 +- Tactical/Item Types.cpp | 14 +- Tactical/Merc Hiring.cpp | 2 +- Tactical/SkillMenu.cpp | 2 +- 14 files changed, 331 insertions(+), 318 deletions(-) diff --git a/Strategic/Assignments.cpp b/Strategic/Assignments.cpp index 75de1b8e..2a4aaec5 100644 --- a/Strategic/Assignments.cpp +++ b/Strategic/Assignments.cpp @@ -632,7 +632,7 @@ BOOLEAN ValidTrainingPartnerInSameSectorOnAssignmentFound( SOLDIERTYPE *pSoldier extern void AddSectorForSoldierToListOfSectorsThatCompletedMilitiaTraining( SOLDIERTYPE *pSoldier ); -extern BOOLEAN CanChangeSleepStatusForCharSlot( INT8 bCharNumber ); +extern BOOLEAN CanChangeSleepStatusForCharSlot( INT16 bCharNumber ); // only 2 trainers are allowed per sector, so this function counts the # in a guy's sector // HEADROCK HAM 3.6: Now takes an extra argument for Militia Type @@ -3106,7 +3106,7 @@ void VerifyTownTrainingIsPaidFor( void ) continue; } - pSoldier = &Menptr[ gCharactersList[ iCounter ].usSolID ]; + pSoldier = gCharactersList[ iCounter ].usSolID; if( pSoldier->bActive && ( pSoldier->bAssignment == TRAIN_TOWN ) ) { @@ -9643,7 +9643,8 @@ void CreateDestroyMouseRegionsForAssignmentMenu( void ) return; } - if( ( Menptr[gCharactersList[bSelectedAssignChar].usSolID].stats.bLife == 0 ) || ( Menptr[gCharactersList[bSelectedAssignChar].usSolID].bAssignment == ASSIGNMENT_POW ) ) + + if( ( gCharactersList[bSelectedAssignChar].usSolID->stats.bLife == 0 ) || ( gCharactersList[bSelectedAssignChar].usSolID->bAssignment == ASSIGNMENT_POW ) ) { // dead guy handle menu stuff fShowRemoveMenu = fShowAssignmentMenu | fShowContractMenu; @@ -11114,7 +11115,7 @@ void DetermineWhichAssignmentMenusCanBeShown( void ) CreateDestroyMouseRegionForFacilityMenu(); CreateDestroyMouseRegionsForFacilityAssignmentMenu(); - if( ( ( Menptr[gCharactersList[ bSelectedInfoChar ].usSolID].stats.bLife == 0 )||( Menptr[gCharactersList[bSelectedInfoChar].usSolID].bAssignment == ASSIGNMENT_POW ) ) && ( (guiTacticalInterfaceFlags & INTERFACE_MAPSCREEN ) ) ) + if( ( ( gCharactersList[ bSelectedInfoChar ].usSolID->stats.bLife == 0 )||( gCharactersList[bSelectedInfoChar].usSolID->bAssignment == ASSIGNMENT_POW ) ) && ( (guiTacticalInterfaceFlags & INTERFACE_MAPSCREEN ) ) ) { // show basic assignment menu ShowBox( ghRemoveMercAssignBox ); @@ -11596,7 +11597,7 @@ void CreateDestroyMouseRegionsForContractMenu( void ) return; } - if( Menptr[gCharactersList[bSelectedContractChar].usSolID].stats.bLife == 0 ) + if( gCharactersList[bSelectedContractChar].usSolID->stats.bLife == 0 ) { // dead guy handle menu stuff @@ -12825,7 +12826,7 @@ void ContractMenuBtnCallback( MOUSE_REGION * pRegion, INT32 iReason ) if ( (guiTacticalInterfaceFlags & INTERFACE_MAPSCREEN ) ) { - pSoldier = &Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; } else { @@ -18406,7 +18407,7 @@ BOOLEAN HandleSelectedMercsBeingPutAsleep( BOOLEAN fWakeUp, BOOLEAN fDisplayWarn if( gCharactersList[ iCounter ].fValid ) { // get the soldier pointer - pSoldier = &Menptr[ gCharactersList[ iCounter ].usSolID ]; + pSoldier = gCharactersList[ iCounter ].usSolID; if( pSoldier->bActive == FALSE ) { @@ -18807,7 +18808,7 @@ void SetAssignmentForList( INT8 bAssignment, INT8 bParam ) { if( gCharactersList[ bSelectedAssignChar ].fValid == TRUE ) { - pSelectedSoldier = &Menptr[ gCharactersList[ bSelectedAssignChar ].usSolID ]; + pSelectedSoldier = gCharactersList[ bSelectedAssignChar ].usSolID; } } @@ -18819,9 +18820,9 @@ void SetAssignmentForList( INT8 bAssignment, INT8 bParam ) if( ( gCharactersList[ iCounter ].fValid ) && ( fSelectedListOfMercsForMapScreen[ iCounter ] == TRUE ) && ( iCounter != bSelectedAssignChar ) && - !(Menptr[ gCharactersList[ iCounter ].usSolID].flags.uiStatusFlags & SOLDIER_VEHICLE ) ) + !(gCharactersList[ iCounter ].usSolID->flags.uiStatusFlags & SOLDIER_VEHICLE ) ) { - pSoldier = MercPtrs[ gCharactersList[ iCounter ].usSolID ]; + pSoldier = gCharactersList[ iCounter ].usSolID; // assume it's NOT gonna work fItWorked = FALSE; @@ -19616,13 +19617,13 @@ SOLDIERTYPE *GetSelectedAssignSoldier( BOOLEAN fNullOK, BOOLEAN fReturnVehicleDr if( ( bSelectedAssignChar >= 0 ) && ( bSelectedAssignChar < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS ) && ( gCharactersList[ bSelectedAssignChar ].fValid ) ) { - pSoldier = &Menptr[ gCharactersList[ bSelectedAssignChar ].usSolID ]; + pSoldier = gCharactersList[ bSelectedAssignChar ].usSolID; } } else { // tactical version - pSoldier = &Menptr[ gusUIFullTargetID ]; + pSoldier = gusUIFullTargetID; } if ( !fNullOK ) @@ -20079,7 +20080,7 @@ BOOLEAN FindAnyAwakeTrainers( SOLDIERTYPE *pTrainee ) while(gCharactersList[ubCounter].fValid) { - pTrainer = MercPtrs[ gCharactersList[ ubCounter ].usSolID ]; + pTrainer = gCharactersList[ ubCounter ].usSolID; // Is trainer awake? if (pTrainer->bAssignment == TRAIN_TEAMMATE && pTrainer->bTrainStat == pTrainee->bTrainStat && @@ -20115,7 +20116,7 @@ BOOLEAN FindAnyAwakeTrainees( SOLDIERTYPE *pTrainer ) while(gCharactersList[ubCounter].fValid) { - pTrainee = MercPtrs[ gCharactersList[ ubCounter ].usSolID ]; + pTrainee = gCharactersList[ ubCounter ].usSolID; // Is trainee awake? if (pTrainee->bAssignment == TRAIN_BY_OTHER && pTrainee->bTrainStat == pTrainer->bTrainStat && @@ -21058,7 +21059,7 @@ INT8 CountFreeFacilitySlots( UINT8 sMapX, UINT8 sMapY, UINT8 ubFacilityType ) // Count number of people doing anything at this facility. while(gCharactersList[ubCounter].fValid) { - pSoldier = MercPtrs[ gCharactersList[ ubCounter ].usSolID ]; + pSoldier = gCharactersList[ ubCounter ].usSolID; // Is character operating this facility? if( (UINT8)pSoldier->sFacilityTypeOperated == ubFacilityType && @@ -21101,7 +21102,7 @@ INT8 CountFreeFacilityAssignmentSlots( UINT8 sMapX, UINT8 sMapY, UINT8 ubFacilit // Count number of people doing this assignment at this facility. while(gCharactersList[ubCounter].fValid) { - pSoldier = MercPtrs[ gCharactersList[ ubCounter ].usSolID ]; + pSoldier = gCharactersList[ ubCounter ].usSolID; // Is character operating this facility? if( (UINT8)pSoldier->sFacilityTypeOperated == ubFacilityType && @@ -21527,7 +21528,7 @@ void ResetAllExpensiveFacilityAssignments() while(gCharactersList[ubCounter].fValid) { - pSoldier = MercPtrs[ gCharactersList[ ubCounter ].usSolID ]; + pSoldier = gCharactersList[ ubCounter ].usSolID; // Is character doing facility work? INT8 ubAssignmentIndex = GetSoldierFacilityAssignmentIndex( pSoldier ); diff --git a/Strategic/Facilities.cpp b/Strategic/Facilities.cpp index 52975d1a..9be31cf9 100644 --- a/Strategic/Facilities.cpp +++ b/Strategic/Facilities.cpp @@ -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 ) && diff --git a/Strategic/Map Screen Interface Map Inventory.cpp b/Strategic/Map Screen Interface Map Inventory.cpp index a7fef9f1..cdfe41bd 100644 --- a/Strategic/Map Screen Interface Map Inventory.cpp +++ b/Strategic/Map Screen Interface Map Inventory.cpp @@ -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! @@ -1351,7 +1351,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 +1369,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 +1392,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 +1478,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 +1488,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 +1601,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 +1639,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 +1656,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 +1665,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 +1680,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 +1724,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 +1802,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 +2478,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 +2582,7 @@ void BeginInventoryPoolPtr( OBJECTTYPE *pInventorySlot ) if ( fShowInventoryFlag && bSelectedInfoChar >= 0 ) { - ReevaluateItemHatches( MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ], FALSE ); + ReevaluateItemHatches( gCharactersList[ bSelectedInfoChar ].usSolID, FALSE ); fTeamPanelDirty = TRUE; } } @@ -2643,7 +2650,7 @@ void BeginInventoryPoolPtr( OBJECTTYPE *pInventorySlot ) if ( fShowInventoryFlag && bSelectedInfoChar >= 0 ) { - ReevaluateItemHatches( MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ], FALSE ); + ReevaluateItemHatches( gCharactersList[ bSelectedInfoChar ].usSolID, FALSE ); fTeamPanelDirty = TRUE; } } @@ -3015,7 +3022,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 +3054,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 +3079,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 +3532,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 +3648,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 +4823,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 +4965,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 +5014,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 +5089,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,7 +5162,7 @@ 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++ ) { diff --git a/Strategic/Map Screen Interface Map.cpp b/Strategic/Map Screen Interface Map.cpp index 31c577e9..41e11cda 100644 --- a/Strategic/Map Screen Interface Map.cpp +++ b/Strategic/Map Screen Interface Map.cpp @@ -1298,7 +1298,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) && @@ -1350,7 +1350,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 @@ -7126,7 +7126,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 ) ) diff --git a/Strategic/Map Screen Interface.cpp b/Strategic/Map Screen Interface.cpp index 797b2cd7..eadc70bb 100644 --- a/Strategic/Map Screen Interface.cpp +++ b/Strategic/Map Screen Interface.cpp @@ -552,7 +552,7 @@ void ResetAssignmentsForMercsTrainingUnpaidSectorsInSelectedList( UINT8 ubMiliti continue; } - pSoldier = &Menptr[ gCharactersList[ iCounter ].usSolID ]; + pSoldier = gCharactersList[ iCounter ].usSolID; if( pSoldier->bActive == FALSE ) { @@ -586,7 +586,7 @@ void ResetAssignmentOfMercsThatWereTrainingMilitiaInThisSector( INT16 sSectorX, continue; } - pSoldier = &Menptr[ gCharactersList[ iCounter ].usSolID ]; + pSoldier = gCharactersList[ iCounter ].usSolID; if( pSoldier->bActive == FALSE ) { @@ -618,7 +618,7 @@ void DeselectSelectedListMercsWhoCantMoveWithThisGuy( SOLDIERTYPE *pSoldier ) { if( fSelectedListOfMercsForMapScreen[ iCounter ] == TRUE ) { - pSoldier2 = &( Menptr[ gCharactersList[ iCounter ].usSolID ] ); + pSoldier2 = gCharactersList[ iCounter ].usSolID; // skip the guy we are if ( pSoldier == pSoldier2 ) @@ -707,7 +707,7 @@ void SelectUnselectedMercsWhoMustMoveWithThisGuy( void ) // if not already selected if( fSelectedListOfMercsForMapScreen[ iCounter ] == FALSE ) { - pSoldier = &( Menptr[ gCharactersList[ iCounter ].usSolID ] ); + pSoldier = gCharactersList[ iCounter ].usSolID; // if on a squad or in a vehicle if ( ( pSoldier->bAssignment < ON_DUTY ) || ( pSoldier->bAssignment == VEHICLE ) ) @@ -735,7 +735,7 @@ BOOLEAN AnyMercInSameSquadOrVehicleIsSelected( SOLDIERTYPE *pSoldier ) // if selected if( fSelectedListOfMercsForMapScreen[ iCounter ] == TRUE ) { - pSoldier2 = &( Menptr[ gCharactersList[ iCounter ].usSolID ] ); + pSoldier2 = gCharactersList[ iCounter ].usSolID; // if they have the same assignment if( pSoldier->bAssignment == pSoldier2->bAssignment ) @@ -1295,10 +1295,10 @@ void CheckAndUpdateBasedOnContractTimes( void ) if( gCharactersList[iCounter].fValid == TRUE ) { // what kind of merc - if(Menptr[gCharactersList[iCounter].usSolID].ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC) + if(gCharactersList[iCounter].usSolID->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC) { // amount of time left on contract - iTimeRemaining=Menptr[gCharactersList[iCounter].usSolID].iEndofContractTime-GetWorldTotalMin(); + iTimeRemaining = gCharactersList[iCounter].usSolID->iEndofContractTime - GetWorldTotalMin(); if(iTimeRemaining >60*24) { // more than a day, display in green @@ -1329,9 +1329,9 @@ void CheckAndUpdateBasedOnContractTimes( void ) } } } - else if( Menptr[gCharactersList[iCounter].usSolID].ubWhatKindOfMercAmI == MERC_TYPE__MERC ) + else if( gCharactersList[iCounter].usSolID->ubWhatKindOfMercAmI == MERC_TYPE__MERC ) { - iTimeRemaining = Menptr[gCharactersList[iCounter].usSolID].iTotalContractLength; + iTimeRemaining = gCharactersList[iCounter].usSolID->iTotalContractLength; if( iTimeRemaining != iOldContractTimes[ iCounter ]) { @@ -1395,7 +1395,7 @@ void HandleDisplayOfSelectedMercArrows( void ) if( gCharactersList[ ubCount + FIRSTmercTOdisplay ].fValid == TRUE ) { // are they in the selected list or int he same mvt group as this guy - if( ( IsEntryInSelectedListSet( ubCount + FIRSTmercTOdisplay ) == TRUE ) || ( ( GetSelectedDestChar() != - 1 ) ? ( ( Menptr[ gCharactersList[ ubCount + FIRSTmercTOdisplay ].usSolID ].ubGroupID != 0 ) ? ( Menptr[ gCharactersList[GetSelectedDestChar()].usSolID ].ubGroupID == Menptr[ gCharactersList[ ubCount + FIRSTmercTOdisplay ].usSolID ].ubGroupID ) : FALSE ) : FALSE ) ) + if( ( IsEntryInSelectedListSet( ubCount + FIRSTmercTOdisplay ) == TRUE ) || ( ( GetSelectedDestChar() != - 1 ) ? ( ( gCharactersList[ ubCount + FIRSTmercTOdisplay ].usSolID->ubGroupID != 0 ) ? ( gCharactersList[GetSelectedDestChar()].usSolID->ubGroupID == gCharactersList[ ubCount + FIRSTmercTOdisplay ].usSolID->ubGroupID ) : FALSE ) : FALSE ) ) { sYPosition = y + ( ubCount * ( Y_SIZE + 2) ) - 1; @@ -1426,10 +1426,15 @@ void HandleDisplayOfItemPopUpForSector( INT16 sMapX, INT16 sMapY, INT16 sMapZ ) { if( gCharactersList[ bSelectedInfoChar ].fValid == TRUE ) { - if( ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID].sSectorX == sMapX ) && ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID].sSectorY == sMapY ) && ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID].bSectorZ == sMapZ ) && ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID].bActive ) && ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID].stats.bLife >= OKLIFE ) ) + SOLDIERTYPE* pSoldier = gCharactersList[bSelectedInfoChar].usSolID; + if( ( pSoldier->sSectorX == sMapX ) && + ( pSoldier->sSectorY == sMapY ) && + ( pSoldier->bSectorZ == sMapZ ) && + ( pSoldier->bActive ) && + ( pSoldier->stats.bLife >= OKLIFE ) ) { // valid character - InitializeItemPickupMenu( &( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID] ), NOWHERE , pItemPool, MAP_INVEN_POOL_X, MAP_INVEN_POOL_Y, -1 ); + InitializeItemPickupMenu( pSoldier, NOWHERE , pItemPool, MAP_INVEN_POOL_X, MAP_INVEN_POOL_Y, -1 ); fWasInited = TRUE; CreateScreenMaskForInventoryPoolPopUp( ); @@ -1937,19 +1942,19 @@ void UpdateCharRegionHelpText( void ) if( ( bSelectedInfoChar != -1 ) && ( gCharactersList[ bSelectedInfoChar ].fValid == TRUE ) ) { // valid soldier selected - pSoldier = MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; // health/energy/morale if( pSoldier->bAssignment != ASSIGNMENT_POW && pSoldier->bAssignment != ASSIGNMENT_MINIEVENT && pSoldier->bAssignment != ASSIGNMENT_REBELCOMMAND ) { if ( pSoldier->stats.bLife != 0 ) { - if ( AM_A_ROBOT( MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ] ) ) + if ( AM_A_ROBOT(pSoldier) ) { // robot (condition only) swprintf( sString, L"%s: %d/%d", pMapScreenStatusStrings[ 3 ], pSoldier->stats.bLife, pSoldier->stats.bLifeMax ); } - else if ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].flags.uiStatusFlags & SOLDIER_VEHICLE ) + else if (pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) { // vehicle (condition/fuel) swprintf( sString, L"%s: %d/%d, %s: %d/%d", @@ -2491,7 +2496,7 @@ BOOLEAN MapscreenCanPassItemToCharNum( INT32 iNewCharSlot ) } - pNewSoldier = MercPtrs[ gCharactersList[ iNewCharSlot ].usSolID ]; + pNewSoldier = gCharactersList[ iNewCharSlot ].usSolID; // if in a hostile sector, disallow if (gTacticalStatus.fEnemyInSector && pNewSoldier->bInSector) @@ -2531,7 +2536,7 @@ BOOLEAN MapscreenCanPassItemToCharNum( INT32 iNewCharSlot ) } else { - pOldSoldier = MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + pOldSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; } } @@ -3633,7 +3638,7 @@ void SetUpMovingListsForSector( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ ) { if( gCharactersList[ iCounter ].fValid ) { - pSoldier = MercPtrs[ gCharactersList[ iCounter ].usSolID ]; + pSoldier = gCharactersList[ iCounter ].usSolID; if( ( pSoldier->bActive ) && ( pSoldier->bAssignment != IN_TRANSIT ) && ( pSoldier->bAssignment != ASSIGNMENT_POW ) && !SPY_LOCATION( pSoldier->bAssignment ) && ( pSoldier->bAssignment != ASSIGNMENT_MINIEVENT ) && ( pSoldier->bAssignment != ASSIGNMENT_REBELCOMMAND ) && @@ -4584,7 +4589,7 @@ void HandleSettingTheSelectedListOfMercs( void ) // is the current guy a valid character? if( gCharactersList[ iCounter ].fValid == TRUE ) { - pSoldier = MercPtrs[ gCharactersList[ iCounter ].usSolID ]; + pSoldier = gCharactersList[ iCounter ].usSolID; if ( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) { @@ -4620,7 +4625,7 @@ void HandleSettingTheSelectedListOfMercs( void ) if( GetSelectedDestChar() != -1 ) { INT8 pbErrorNumber = -1; - pSoldier = MercPtrs[gCharactersList[GetSelectedDestChar()].usSolID]; + pSoldier = gCharactersList[GetSelectedDestChar()].usSolID; INT8 bSquadValue = pSoldier->bAssignment; if (bSquadValue == VEHICLE) { @@ -5679,7 +5684,7 @@ void UpdateHelpTextForMapScreenMercIcons( void ) else { // if merc is an AIM merc - if( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC ) + if( gCharactersList[ bSelectedInfoChar ].usSolID->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC ) { SetRegionFastHelpText( &(gContractIconRegion), zMarksMapScreenText[ 22 ] ); } @@ -5689,7 +5694,7 @@ void UpdateHelpTextForMapScreenMercIcons( void ) } // if merc has life insurance - if( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].usLifeInsurance > 0 ) + if( gCharactersList[ bSelectedInfoChar ].usSolID->usLifeInsurance > 0 ) { SetRegionFastHelpText( &(gInsuranceIconRegion), zMarksMapScreenText[ 3 ] ); } @@ -5699,7 +5704,7 @@ void UpdateHelpTextForMapScreenMercIcons( void ) } // if merc has a medical deposit - if( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].usMedicalDeposit > 0 ) + if( gCharactersList[ bSelectedInfoChar ].usSolID->usMedicalDeposit > 0 ) { SetRegionFastHelpText( &(gDepositIconRegion), zMarksMapScreenText[ 12 ] ); } @@ -6310,7 +6315,7 @@ BOOLEAN CanEntireMovementGroupMercIsInMove( SOLDIERTYPE *pSoldier, INT8 *pbError if( gCharactersList[ iCounter ].fValid == TRUE ) { // get soldier - pCurrentSoldier = &( Menptr[ gCharactersList[ iCounter ].usSolID ] ); + pCurrentSoldier = gCharactersList[ iCounter ].usSolID; // skip inactive grunts if( pCurrentSoldier->bActive == FALSE ) diff --git a/Strategic/Meanwhile.cpp b/Strategic/Meanwhile.cpp index ad9cdb8a..82ec3e04 100644 --- a/Strategic/Meanwhile.cpp +++ b/Strategic/Meanwhile.cpp @@ -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) diff --git a/Strategic/Town Militia.cpp b/Strategic/Town Militia.cpp index 976b9545..82c3e7df 100644 --- a/Strategic/Town Militia.cpp +++ b/Strategic/Town Militia.cpp @@ -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 ) @@ -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 ) diff --git a/Strategic/mapscreen.cpp b/Strategic/mapscreen.cpp index 16c913bc..3fd0fa4e 100644 --- a/Strategic/mapscreen.cpp +++ b/Strategic/mapscreen.cpp @@ -808,7 +808,7 @@ void HandleShadingOfLinesForContractMenu( void ); void UpdateStatusOfMapSortButtons( void ); void DisplayIconsForMercsAsleep( void ); -BOOLEAN CharacterIsInLoadedSectorAndWantsToMoveInventoryButIsNotAllowed( INT8 bCharId ); +BOOLEAN CharacterIsInLoadedSectorAndWantsToMoveInventoryButIsNotAllowed( INT16 bCharId ); void HandlePostAutoresolveMessages(); @@ -946,7 +946,7 @@ BOOLEAN AnyMovableCharsInOrBetweenThisSector( INT16 sSectorX, INT16 sSectorY, IN void SwapCharactersInList( INT32 iCharA, INT32 iCharB ); -BOOLEAN CanChangeDestinationForCharSlot( INT8 bCharNumber, BOOLEAN fShowErrorMessage ); +BOOLEAN CanChangeDestinationForCharSlot( INT16 bCharNumber, BOOLEAN fShowErrorMessage ); BOOLEAN RequestGiveSkyriderNewDestination( void ); void ExplainWhySkyriderCantFly( void ); @@ -2313,21 +2313,21 @@ void RenderIconsForUpperLeftCornerPiece( INT8 bCharNumber ) GetVideoObject(&hHandle, guiULICONS); // if merc is an AIM merc - if( Menptr[ gCharactersList[ bCharNumber ].usSolID ].ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC ) + if( gCharactersList[ bCharNumber ].usSolID->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC ) { // finite contract length icon BltVideoObject( guiSAVEBUFFER, hHandle, 0, x, y, VO_BLT_SRCTRANSPARENCY, NULL ); } // if merc has life insurance - if( Menptr[ gCharactersList[ bCharNumber ].usSolID ].usLifeInsurance > 0 ) + if( gCharactersList[ bCharNumber ].usSolID->usLifeInsurance > 0 ) { // draw life insurance icon BltVideoObject( guiSAVEBUFFER, hHandle, 2, x, y + spacing, VO_BLT_SRCTRANSPARENCY, NULL ); } // if merc has a medical deposit - if( Menptr[ gCharactersList[ bCharNumber ].usSolID ].usMedicalDeposit > 0 ) + if( gCharactersList[ bCharNumber ].usSolID->usMedicalDeposit > 0 ) { // draw medical deposit icon BltVideoObject( guiSAVEBUFFER, hHandle, 1, x, y + ( 2 * spacing), VO_BLT_SRCTRANSPARENCY, NULL ); @@ -2341,11 +2341,11 @@ void DrawPay(INT16 sCharNumber) INT32 uiSalary; CHAR16 sString[7]; INT16 usX, usY; - INT16 usMercProfileID; + UINT8 usMercProfileID; // get merc id - usMercProfileID = MercPtrs[ gCharactersList[ sCharNumber ].usSolID ]->ubProfile; + usMercProfileID = gCharactersList[ sCharNumber ].usSolID->ubProfile; // grab salary uiSalary=( ( UINT32 ) gMercProfiles[ usMercProfileID ].sSalary ); @@ -2371,7 +2371,7 @@ void DrawPay(INT16 sCharNumber) void DrawCharBars( void ) { - UINT16 usSoldierID; + SoldierID usSoldierID; SOLDIERTYPE *pSoldier; // will draw the heath, morale and breath bars for a character being displayed in the upper left hand corner @@ -2386,11 +2386,11 @@ void DrawCharBars( void ) // valid character if( bSelectedInfoChar != -1 ) { - usSoldierID=gCharactersList[ bSelectedInfoChar ].usSolID; + usSoldierID = gCharactersList[ bSelectedInfoChar ].usSolID; } else { - usSoldierID=gCharactersList[GetSelectedDestChar()].usSolID; + usSoldierID = gCharactersList[GetSelectedDestChar()].usSolID; } // grab soldier's id number @@ -2443,7 +2443,7 @@ void DrawCharStats( INT16 sCharNum ) //HVOBJECT hCrossHandle; SOLDIERTYPE *pSoldier = NULL; - pSoldier = &Menptr[gCharactersList[sCharNum].usSolID]; + pSoldier = gCharactersList[sCharNum].usSolID; // set up font SetFont(CHAR_FONT); @@ -2823,7 +2823,7 @@ void DrawCharHealth( INT16 sCharNum ) const auto width = UI_CHARPANEL.Text.CurrentHitpoints.width; const auto height = UI_CHARPANEL.Text.CurrentHitpoints.height; - pSoldier = &Menptr[gCharactersList[sCharNum].usSolID]; + pSoldier = gCharactersList[sCharNum].usSolID; if( pSoldier->bAssignment != ASSIGNMENT_POW && pSoldier->bAssignment != ASSIGNMENT_MINIEVENT && pSoldier->bAssignment != ASSIGNMENT_REBELCOMMAND ) { @@ -2935,7 +2935,7 @@ void DrawCharacterInfo(INT16 sCharNumber) return; } - pSoldier = MercPtrs[ gCharactersList[sCharNumber].usSolID ]; + pSoldier = gCharactersList[sCharNumber].usSolID; if( pSoldier->ubProfile == NO_PROFILE ) { @@ -3248,9 +3248,9 @@ void DrawCharacterInfo(INT16 sCharNumber) } // medical deposit - if( gMercProfiles[ Menptr[ gCharactersList[ sCharNumber ].usSolID ].ubProfile ].sMedicalDepositAmount > 0 ) + if( gMercProfiles[ gCharactersList[ sCharNumber ].usSolID->ubProfile ].sMedicalDepositAmount > 0 ) { - swprintf(sString, L"%d", gMercProfiles[ Menptr[ gCharactersList[ sCharNumber ].usSolID ].ubProfile ].sMedicalDepositAmount ); + swprintf(sString, L"%d", gMercProfiles[ gCharactersList[ sCharNumber ].usSolID->ubProfile ].sMedicalDepositAmount ); // insert commas and dollar sign InsertCommasForDollarFigure( sString ); @@ -3279,7 +3279,7 @@ void DrawCharacterInfo(INT16 sCharNumber) { if ( pSoldier->stats.bLife != 0 ) { - GetMoraleString( MercPtrs[gCharactersList[sCharNumber].usSolID], sString ); + GetMoraleString( gCharactersList[sCharNumber].usSolID, sString ); } else { @@ -3324,7 +3324,7 @@ BOOLEAN CharacterIsInTransitAndHasItemPickedUp( INT8 bCharacterNumber ) } // character in transit? - if( Menptr[ gCharactersList[ bCharacterNumber ].usSolID ].bAssignment != IN_TRANSIT ) + if( gCharactersList[ bCharacterNumber ].usSolID->bAssignment != IN_TRANSIT ) { // nope return( FALSE ); @@ -3354,7 +3354,7 @@ void DisplayCharacterInfo( void ) // This section draws STRATEGIC info pages. Another section is in Interface Panels.cpp and draws TACTICAL info pages. // The feature is toggled by Options-Menu switch, and its color is determined in the INI files. { - SOLDIERTYPE *pSoldier = MercPtrs[ gCharactersList[bSelectedInfoChar].usSolID ]; + SOLDIERTYPE *pSoldier = gCharactersList[bSelectedInfoChar].usSolID; UINT8 *pDestBuf; UINT32 uiDestPitchBYTES = 0; @@ -3580,39 +3580,41 @@ INT32 GetPathTravelTimeDuringPlotting( PathStPtr pPath ) else { // plotting for a character... - if( Menptr[gCharactersList[GetSelectedDestChar()].usSolID].bAssignment == VEHICLE ) + SOLDIERTYPE* pSoldier = gCharactersList[GetSelectedDestChar()].usSolID; + + if( pSoldier->bAssignment == VEHICLE ) { - ubGroupId = pVehicleList[ Menptr[gCharactersList[GetSelectedDestChar()].usSolID].iVehicleId ].ubMovementGroup; + ubGroupId = pVehicleList[ pSoldier->iVehicleId ].ubMovementGroup; pGroup = GetGroup( ubGroupId ); if( pGroup == NULL ) { - SetUpMvtGroupForVehicle( &( Menptr[gCharactersList[GetSelectedDestChar()].usSolID] ) ); + SetUpMvtGroupForVehicle( pSoldier ); // get vehicle id - ubGroupId = pVehicleList[ Menptr[gCharactersList[GetSelectedDestChar()].usSolID].iVehicleId ].ubMovementGroup; + ubGroupId = pVehicleList[ pSoldier->iVehicleId ].ubMovementGroup; pGroup = GetGroup( ubGroupId ); AssertNotNIL(pGroup); } } - else if( Menptr[gCharactersList[GetSelectedDestChar()].usSolID].flags.uiStatusFlags & SOLDIER_VEHICLE ) + else if( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) { - ubGroupId = pVehicleList[ Menptr[gCharactersList[GetSelectedDestChar()].usSolID].bVehicleID ].ubMovementGroup; + ubGroupId = pVehicleList[ pSoldier->bVehicleID ].ubMovementGroup; pGroup = GetGroup( ubGroupId ); if( pGroup == NULL ) { - SetUpMvtGroupForVehicle( &( Menptr[gCharactersList[GetSelectedDestChar()].usSolID] ) ); + SetUpMvtGroupForVehicle( pSoldier ); // get vehicle id - ubGroupId = pVehicleList[ Menptr[gCharactersList[GetSelectedDestChar()].usSolID].bVehicleID ].ubMovementGroup; + ubGroupId = pVehicleList[ pSoldier->bVehicleID ].ubMovementGroup; pGroup = GetGroup( ubGroupId ); AssertNotNIL(pGroup); } } else { - ubGroupId = Menptr[gCharactersList[GetSelectedDestChar()].usSolID].ubGroupID; + ubGroupId = pSoldier->ubGroupID; pGroup = GetGroup( ( UINT8 )( ubGroupId ) ); AssertNotNIL(pGroup); } @@ -4059,6 +4061,7 @@ void LoadCharacters( void ) void DisplayCharacterList() { + SOLDIERTYPE *pSoldier; INT16 sCount=0; UINT8 ubForegroundColor = 0; @@ -4084,12 +4087,14 @@ void DisplayCharacterList() // skip invalid characters if ( gCharactersList[( sCount + FIRSTmercTOdisplay )].fValid == TRUE ) { + pSoldier = gCharactersList[(sCount + FIRSTmercTOdisplay)].usSolID; + if( sCount == ( INT16 ) giHighLine ) { ubForegroundColor = FONT_WHITE; } // check to see if character is still alive - else if( Menptr[gCharactersList[(sCount + FIRSTmercTOdisplay)].usSolID].stats.bLife == 0 ) + else if(pSoldier->stats.bLife == 0 ) { ubForegroundColor = FONT_METALGRAY; } @@ -4098,13 +4103,11 @@ void DisplayCharacterList() ubForegroundColor = FONT_LTBLUE; } // in current sector? - else if( ( Menptr[gCharactersList[( sCount + FIRSTmercTOdisplay )].usSolID].sSectorX == sSelMapX ) && - ( Menptr[gCharactersList[( sCount + FIRSTmercTOdisplay )].usSolID].sSectorY == sSelMapY ) && - ( Menptr[gCharactersList[( sCount + FIRSTmercTOdisplay )].usSolID].bSectorZ == iCurrentMapSectorZ ) ) + else if ( pSoldier->sSectorX == sSelMapX && pSoldier->sSectorY == sSelMapY && pSoldier->bSectorZ == iCurrentMapSectorZ ) { // mobile ? - if( ( Menptr[gCharactersList[( sCount + FIRSTmercTOdisplay )].usSolID].bAssignment < ON_DUTY ) || - ( Menptr[gCharactersList[( sCount + FIRSTmercTOdisplay )].usSolID].bAssignment == VEHICLE ) ) + if( ( pSoldier->bAssignment < ON_DUTY ) || + ( pSoldier->bAssignment == VEHICLE ) ) ubForegroundColor = FONT_YELLOW; else ubForegroundColor = FONT_MAP_DKYELLOW; @@ -4117,7 +4120,7 @@ void DisplayCharacterList() SetFontForeground( ubForegroundColor ); - DrawName( Menptr[gCharactersList[( sCount + FIRSTmercTOdisplay )].usSolID].name, sCount, MAP_SCREEN_FONT); + DrawName( pSoldier->name, sCount, MAP_SCREEN_FONT); DrawLocation( sCount + FIRSTmercTOdisplay , sCount, MAP_SCREEN_FONT); DrawDestination( sCount + FIRSTmercTOdisplay, sCount, MAP_SCREEN_FONT); DrawAssignment( sCount + FIRSTmercTOdisplay, sCount, MAP_SCREEN_FONT); @@ -6281,17 +6284,17 @@ void DrawAssignment(INT16 sCharNumber, INT16 sRowIndex, INT32 iFont) INT16 usX=0; INT16 usY=0; CHAR16 sString[32]; + SOLDIERTYPE* pSoldier = gCharactersList[sCharNumber].usSolID; - GetMapscreenMercAssignmentString( MercPtrs[ gCharactersList[ sCharNumber ].usSolID ], sString ); + GetMapscreenMercAssignmentString( pSoldier, sString ); FindFontCenterCoordinates((short)UI_CHARLIST.xAssignment + 1, (short)(UI_CHARLIST.y + (sRowIndex*Y_SIZE)), (short)UI_CHARLIST.widthAssignment, (short)Y_SIZE, sString, (long)iFont, &usX, &usY); - SOLDIERTYPE *pSoldier = MercPtrs[ gCharactersList[ sCharNumber ].usSolID ]; if( fFlashAssignDone == TRUE ) { - if( Menptr[gCharactersList[sCharNumber].usSolID].flags.fDoneAssignmentAndNothingToDoFlag ) + if( pSoldier->flags.fDoneAssignmentAndNothingToDoFlag ) { SetFontForeground( FONT_RED ); } @@ -6328,8 +6331,7 @@ void DrawAssignment(INT16 sCharNumber, INT16 sRowIndex, INT32 iFont) ubProgress = SectorInfo[SECTOR(sMapX, sMapY)].ubMilitiaTrainingPercentDone; usMaxProgress = 100; } - else if ( pSoldier->bAssignment == TRAIN_SELF || - pSoldier->bAssignment == TRAIN_BY_OTHER ) + else if ( pSoldier->bAssignment == TRAIN_SELF || pSoldier->bAssignment == TRAIN_BY_OTHER ) { switch (pSoldier->bTrainStat) { @@ -6393,7 +6395,7 @@ void DrawLocation(INT16 sCharNumber, INT16 sRowIndex, INT32 iFont) INT16 usY=0; CHAR16 sString[32]; - GetMapscreenMercLocationString( MercPtrs[ gCharactersList[ sCharNumber ].usSolID ], sString ); + GetMapscreenMercLocationString( gCharactersList[ sCharNumber ].usSolID, sString ); FindFontCenterCoordinates((short)UI_CHARLIST.xLocation + 1, (short)(UI_CHARLIST.y + (sRowIndex*Y_SIZE)), (short)UI_CHARLIST.widthLocation, (short)Y_SIZE, sString, (long)iFont, &usX, &usY); @@ -6408,7 +6410,7 @@ void DrawDestination(INT16 sCharNumber, INT16 sRowIndex, INT32 iFont) INT16 usY=0; CHAR16 sString[32]; - GetMapscreenMercDestinationString( MercPtrs[ gCharactersList[ sCharNumber ].usSolID ], sString ); + GetMapscreenMercDestinationString( gCharactersList[ sCharNumber ].usSolID, sString ); if ( wcslen( sString ) == 0 ) { @@ -6428,7 +6430,7 @@ void DrawTimeRemaining( INT16 sCharNumber, INT32 iFont, UINT8 ubFontColor ) CHAR16 sString[32]; // marke strogg more mercs MUST override pointer into array by number of skipped mercs - GetMapscreenMercDepartureString( MercPtrs[ gCharactersList[ sCharNumber + FIRSTmercTOdisplay ].usSolID ], sString, &ubFontColor ); + GetMapscreenMercDepartureString( gCharactersList[ sCharNumber + FIRSTmercTOdisplay ].usSolID, sString, &ubFontColor ); // if merc is highlighted, override the color decided above with bright white if( sCharNumber == ( INT16 ) giHighLine ) @@ -6647,10 +6649,10 @@ UINT32 HandleMapUI( ) break; // check if last sector in character's path is same as where mouse is - if( GetLastSectorIdInCharactersPath( &Menptr[gCharactersList[GetSelectedDestChar()].usSolID] ) != CALCULATE_STRATEGIC_INDEX( sMapX, sMapY ) ) + if( GetLastSectorIdInCharactersPath( gCharactersList[GetSelectedDestChar()].usSolID ) != CALCULATE_STRATEGIC_INDEX( sMapX, sMapY ) ) { - sX = ( GetLastSectorIdInCharactersPath( &Menptr[gCharactersList[GetSelectedDestChar()].usSolID] ) % MAP_WORLD_X ); - sY = ( GetLastSectorIdInCharactersPath( &Menptr[gCharactersList[GetSelectedDestChar()].usSolID] ) / MAP_WORLD_X ); + sX = ( GetLastSectorIdInCharactersPath( gCharactersList[GetSelectedDestChar()].usSolID ) % MAP_WORLD_X ); + sY = ( GetLastSectorIdInCharactersPath( gCharactersList[GetSelectedDestChar()].usSolID ) / MAP_WORLD_X ); GetCursorPos(&MousePos); ScreenToClient(ghWindow, &MousePos); // In window coords! RestoreBackgroundForMapGrid( sX, sY ); @@ -6665,10 +6667,10 @@ UINT32 HandleMapUI( ) // Can we get go there? (NULL temp character path) if ( GetLengthOfPath( pTempCharacterPath ) > 0 ) { - PlotPathForCharacter( &Menptr[gCharactersList[GetSelectedDestChar()].usSolID], sMapX, sMapY, FALSE ); + PlotPathForCharacter( gCharactersList[GetSelectedDestChar()].usSolID, sMapX, sMapY, FALSE ); // copy the path to every other selected character - CopyPathToAllSelectedCharacters( GetSoldierMercPathPtr( MercPtrs[ gCharactersList[GetSelectedDestChar()].usSolID ] ) ); + CopyPathToAllSelectedCharacters( GetSoldierMercPathPtr( gCharactersList[GetSelectedDestChar()].usSolID ) ); StartConfirmMapMoveMode( sMapY ); fMapPanelDirty = TRUE; @@ -6693,9 +6695,9 @@ UINT32 HandleMapUI( ) case MAP_EVENT_SELECT_SECTOR: // will select the sector the selected merc is in - sMapX=Menptr[gCharactersList[bSelectedInfoChar].usSolID].sSectorX; - sMapY=Menptr[gCharactersList[bSelectedInfoChar].usSolID].sSectorY; - bMapZ=Menptr[gCharactersList[bSelectedInfoChar].usSolID].bSectorZ; + sMapX=gCharactersList[bSelectedInfoChar].usSolID.sSectorX; + sMapY=gCharactersList[bSelectedInfoChar].usSolID.sSectorY; + bMapZ=gCharactersList[bSelectedInfoChar].usSolID.bSectorZ; if( ( sSelMapX != sMapX || sSelMapY != sMapY || iCurrentMapSectorZ != bMapZ ) && ( gTacticalStatus.fDidGameJustStart == FALSE ) && ( gfPreBattleInterfaceActive == FALSE ) ) @@ -7348,7 +7350,7 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) { if ( bSelectedInfoChar != -1 ) { - SOLDIERTYPE *pSoldier = MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + SOLDIERTYPE *pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; if ( pSoldier->inv[ HANDPOS ].exists() == true ) { pSoldier->inv[ HANDPOS ][0]->data.objectStatus = 2; @@ -7359,7 +7361,7 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) { if ( bSelectedInfoChar != -1 ) { - SOLDIERTYPE *pSoldier = MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + SOLDIERTYPE *pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; if ( pSoldier->inv[ HANDPOS ].exists() == true ) { pSoldier->inv[ HANDPOS ].usItem = GUN_BARREL_EXTENDER; @@ -7401,7 +7403,7 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) if ( bSelectedInfoChar != -1 ) { // ALT-F10: force selected character asleep (ignores breathmax) - PutMercInAsleepState( MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ] ); + PutMercInAsleepState( gCharactersList[ bSelectedInfoChar ].usSolID ); } } #endif @@ -7447,7 +7449,7 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) { if( bSelectedInfoChar != -1 ) { - TownMilitiaTrainingCompleted( &Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ], sSelMapX, sSelMapY ); + TownMilitiaTrainingCompleted( gCharactersList[ bSelectedInfoChar ].usSolID, sSelMapX, sSelMapY ); } } #endif @@ -7515,7 +7517,7 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) { if( bSelectedInfoChar != -1 ) { - StatChange( &Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ], EXPERAMT, 1000, FROM_SUCCESS ); + StatChange( gCharactersList[ bSelectedInfoChar ].usSolID, EXPERAMT, 1000, FROM_SUCCESS ); } } #endif @@ -7788,7 +7790,7 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) case 'E': if(bSelectedInfoChar != -1) { - SOLDIERTYPE *pSoldier = MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + SOLDIERTYPE *pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; pSoldier->bInSector = FALSE; //CHRISL: Try to update InSector value so we don't have to "activate" a sector @@ -7915,7 +7917,7 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) // CTRL-F: Refuel vehicle if( ( fCtrl ) && ( bSelectedInfoChar != -1 ) ) { - SOLDIERTYPE *pSoldier = MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + SOLDIERTYPE *pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; if ( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) { @@ -7987,9 +7989,9 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) break; case 'H': // swap primary & secondary hand - if ( bSelectedInfoChar != -1 && fShowInventoryFlag && !AM_A_ROBOT( MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ] )) + if ( bSelectedInfoChar != -1 && fShowInventoryFlag && !AM_A_ROBOT( gCharactersList[ bSelectedInfoChar ].usSolID )) { - SOLDIERTYPE *pSoldier = MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + SOLDIERTYPE *pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; UINT16 usOldHandItem = pSoldier->inv[HANDPOS].usItem; SwapHandItems( pSoldier ); @@ -8025,7 +8027,7 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) //CHRISL: Swap gunsling if ( bSelectedInfoChar != -1 && fShowInventoryFlag && UsingNewInventorySystem() == true ) { - SOLDIERTYPE *pSoldier = MercPtrs[gCharactersList[bSelectedInfoChar].usSolID]; + SOLDIERTYPE *pSoldier = gCharactersList[bSelectedInfoChar].usSolID; if (fAlt) // switch to knife, or from knife to gun pSoldier->SwitchWeapons(TRUE); @@ -8109,7 +8111,7 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) { static UINT16 gQuoteNum = 0; // Get Soldier - TacticalCharacterDialogue( MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ], gQuoteNum ); + TacticalCharacterDialogue( gCharactersList[ bSelectedInfoChar ].usSolID, gQuoteNum ); gQuoteNum++; } else if( fCtrl ) @@ -8118,7 +8120,7 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) // Get Soldier if ( giHighLine != -1 ) { - TacticalCharacterDialogue( MercPtrs[ gCharactersList[ giHighLine ].usSolID ], gQuoteNum ); + TacticalCharacterDialogue( gCharactersList[ giHighLine ].usSolID, gQuoteNum ); gQuoteNum++; } } @@ -8127,7 +8129,7 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) case 'N': if ( bSelectedInfoChar != -1 && fShowInventoryFlag ) { - SOLDIERTYPE *pSoldier = MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + SOLDIERTYPE *pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; SwapGoggles(pSoldier); } break; @@ -8167,7 +8169,7 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) // ALT-P: Make the selected character a POW! if( ( fAlt ) && ( bSelectedInfoChar != -1 ) ) { - SOLDIERTYPE *pSoldier = MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + SOLDIERTYPE *pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; EnemyCapturesPlayerSoldier( pSoldier ); @@ -8302,7 +8304,7 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) { INT16 sDeltaX, sDeltaY; INT16 sPrevX = 0, sPrevY = 0; - SOLDIERTYPE *pSoldier = MercPtrs[ gCharactersList[GetSelectedDestChar()].usSolID ]; + SOLDIERTYPE *pSoldier = gCharactersList[GetSelectedDestChar()].usSolID; // can't teleport to where we already are if ( ( sMapX == pSoldier->sSectorX ) && ( sMapY == pSoldier->sSectorY ) ) @@ -8466,7 +8468,7 @@ void GetMapKeyboardInput( UINT32 *puiNewEvent ) { if(bSelectedInfoChar != -1) { - SOLDIERTYPE *pSoldier = MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + SOLDIERTYPE *pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; //CHRISL: Try to update InSector value so we don't have to "activate" a sector if (pSoldier->sSectorX == sSelMapX && pSoldier->sSectorY == sSelMapY && pSoldier->bSectorZ == iCurrentMapSectorZ && !pSoldier->flags.fBetweenSectors) @@ -9471,7 +9473,7 @@ void CreateDestroyMapInvButton() if (bSelectedInfoChar != -1 && gCharactersList[bSelectedInfoChar].fValid) { - SOLDIERTYPE* pSoldier = MercPtrs[gCharactersList[bSelectedInfoChar].usSolID]; + SOLDIERTYPE* pSoldier = gCharactersList[bSelectedInfoChar].usSolID; if (!(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) && !AM_A_ROBOT(pSoldier)) { InitInvSlotInterface(gMapScreenInvPocketXY, &gSCamoXY, MAPInvMoveCallback, MAPInvClickCallback, MAPInvMoveCamoCallback, MAPInvClickCamoCallback, FALSE); @@ -9931,7 +9933,7 @@ void HandleCursorOverRifleAmmo( ) if ( gfCheckForMouseOverItem ) { - if ( HandleCompatibleAmmoUI( &Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ], (INT8)gbCheckForMouseOverItemPos, TRUE ) ) + if ( HandleCompatibleAmmoUI( gCharactersList[ bSelectedInfoChar ].usSolID, (INT8)gbCheckForMouseOverItemPos, TRUE ) ) { if ( ( GetJA2Clock( ) - guiMouseOverItemTime ) > 100 ) { @@ -9955,7 +9957,7 @@ void MAPInvClickCamoCallback( MOUSE_REGION *pRegion, INT32 iReason ) SOLDIERTYPE* pSoldier = NULL; if( (bSelectedInfoChar != -1) && (gCharactersList[bSelectedInfoChar].fValid == TRUE) ) { - pSoldier = MercPtrs[gCharactersList[bSelectedInfoChar].usSolID]; + pSoldier = gCharactersList[bSelectedInfoChar].usSolID; } if ( gpItemPointer && pSoldier ) @@ -10564,7 +10566,7 @@ void MAPBeginItemPointer( SOLDIERTYPE *pSoldier, UINT8 ubHandPos ) if ( _KeyDown(CTRL) ) { // if in battle inform player they will have to do this in tactical - if( !CanPlayerUseSectorInventory( &Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ] ) ) + if( !CanPlayerUseSectorInventory( gCharactersList[ bSelectedInfoChar ].usSolID ) ) { // return item to original slot PlaceObject( pSoldier, ubHandPos, &gItemPointer ); @@ -10630,7 +10632,7 @@ void MAPEndItemPointer( ) if ( fShowInventoryFlag && bSelectedInfoChar >= 0 ) { - ReevaluateItemHatches( MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ], FALSE ); + ReevaluateItemHatches( gCharactersList[ bSelectedInfoChar ].usSolID, FALSE ); } } } @@ -10653,7 +10655,7 @@ void RenderAttributeStringsForUpperLeftHandCorner( UINT32 uiBufferToRenderTo ) if ( ( bSelectedInfoChar != - 1) && ( gCharactersList[ bSelectedInfoChar ].fValid ) ) { - pSoldier = MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; } SetFont( CHAR_FONT ); @@ -10772,7 +10774,8 @@ void SetUpCursorForStrategicMap( void ) else // yes - by character { // set cursor based on foot or vehicle - if( ( Menptr[gCharactersList[GetSelectedDestChar()].usSolID].bAssignment != VEHICLE ) && !( Menptr[gCharactersList[GetSelectedDestChar()].usSolID].flags.uiStatusFlags & SOLDIER_VEHICLE ) ) + SOLDIERTYPE* pSoldier = gCharactersList[GetSelectedDestChar()].usSolID; + if( ( pSoldier->bAssignment != VEHICLE ) && !( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) ) { ChangeMapScreenMaskCursor( CURSOR_STRATEGIC_FOOT ); } @@ -11336,7 +11339,7 @@ void TeamListInfoRegionBtnCallBack(MOUSE_REGION *pRegion, INT32 iReason ) ChangeSelectedInfoChar( iValue+ FIRSTmercTOdisplay, TRUE ); - pSoldier = &Menptr[ gCharactersList[ iValue + FIRSTmercTOdisplay].usSolID ]; + pSoldier = gCharactersList[ iValue + FIRSTmercTOdisplay].usSolID; // highlight giDestHighLine = -1; @@ -11384,7 +11387,7 @@ void TeamListInfoRegionBtnCallBack(MOUSE_REGION *pRegion, INT32 iReason ) if( gCharactersList[ iValue + FIRSTmercTOdisplay].fValid == TRUE ) { - pSoldier = &Menptr[ gCharactersList[ iValue + FIRSTmercTOdisplay].usSolID ]; + pSoldier = gCharactersList[ iValue + FIRSTmercTOdisplay].usSolID; // select this character ChangeSelectedInfoChar( iValue+ FIRSTmercTOdisplay, TRUE ); @@ -11492,7 +11495,7 @@ void TeamListAssignmentRegionBtnCallBack(MOUSE_REGION *pRegion, INT32 iReason ) // reset list if the clicked character isn't also selected ChangeSelectedInfoChar( iValue + FIRSTmercTOdisplay, ( BOOLEAN )( IsEntryInSelectedListSet( iValue + FIRSTmercTOdisplay) == FALSE ) ); - pSoldier = &Menptr[ gCharactersList[ iValue + FIRSTmercTOdisplay ].usSolID ]; + pSoldier = gCharactersList[ iValue + FIRSTmercTOdisplay ].usSolID; // if alive (dead guys keep going, use remove menu instead), // and it's between sectors and it can be reassigned (non-vehicles) @@ -11573,7 +11576,7 @@ void TeamListAssignmentRegionBtnCallBack(MOUSE_REGION *pRegion, INT32 iReason ) { ChangeSelectedInfoChar( iValue + FIRSTmercTOdisplay, TRUE ); - pSoldier = &Menptr[ gCharactersList[ iValue + FIRSTmercTOdisplay].usSolID ]; + pSoldier = gCharactersList[ iValue + FIRSTmercTOdisplay].usSolID; // highlight giDestHighLine = -1; @@ -11603,7 +11606,7 @@ void TeamListAssignmentRegionBtnCallBack(MOUSE_REGION *pRegion, INT32 iReason ) // if not already selected if( fSelectedListOfMercsForMapScreen[ iCounter ] == FALSE ) { - pSoldier = &( Menptr[ gCharactersList[ iCounter ].usSolID ] ); + pSoldier = gCharactersList[ iCounter ].usSolID; // if on a squad or in a vehicle if ( ( pSoldier->bAssignment < ON_DUTY ) || ( pSoldier->bAssignment == VEHICLE ) ) @@ -11659,7 +11662,7 @@ void TeamListAssignmentRegionMvtCallBack(MOUSE_REGION *pRegion, INT32 iReason ) { giHighLine = iValue; - if( !( Menptr[ gCharactersList[ iValue + FIRSTmercTOdisplay ].usSolID ].flags.uiStatusFlags & SOLDIER_VEHICLE ) ) + if( !( gCharactersList[ iValue + FIRSTmercTOdisplay ].usSolID->flags.uiStatusFlags & SOLDIER_VEHICLE ) ) { giAssignHighLine = iValue; } @@ -11690,7 +11693,7 @@ void TeamListAssignmentRegionMvtCallBack(MOUSE_REGION *pRegion, INT32 iReason ) else if( iReason & MSYS_CALLBACK_REASON_GAIN_MOUSE ) { if( ( gCharactersList[ iValue + FIRSTmercTOdisplay ].fValid == TRUE ) && - !( Menptr[ gCharactersList[ iValue + FIRSTmercTOdisplay].usSolID ].flags.uiStatusFlags & SOLDIER_VEHICLE ) ) + !( gCharactersList[ iValue + FIRSTmercTOdisplay].usSolID->flags.uiStatusFlags & SOLDIER_VEHICLE ) ) { // play click PlayGlowRegionSound( ); @@ -11732,23 +11735,23 @@ void TeamListDestinationRegionBtnCallBack(MOUSE_REGION *pRegion, INT32 iReason ) ChangeSelectedInfoChar( iValue + FIRSTmercTOdisplay, ( BOOLEAN )( IsEntryInSelectedListSet( iValue + FIRSTmercTOdisplay ) == FALSE ) ); // deselect any characters/vehicles that can't accompany the clicked merc - DeselectSelectedListMercsWhoCantMoveWithThisGuy( &( Menptr[ gCharactersList[ iValue + FIRSTmercTOdisplay ].usSolID ] ) ); + DeselectSelectedListMercsWhoCantMoveWithThisGuy( gCharactersList[ iValue + FIRSTmercTOdisplay ].usSolID ); // select all characters/vehicles that MUST accompany the clicked merc (same squad/vehicle) SelectUnselectedMercsWhoMustMoveWithThisGuy( ); // Find out if this guy and everyone travelling with him is allowed to move strategically // NOTE: errors are reported within... - if ( CanChangeDestinationForCharSlot( ( INT8 ) iValue + FIRSTmercTOdisplay, TRUE ) ) + if ( CanChangeDestinationForCharSlot( ( INT16 ) iValue + FIRSTmercTOdisplay, TRUE ) ) { // turn off sector inventory, turn on show teams filter, etc. MakeMapModesSuitableForDestPlotting( ( INT8 ) iValue + FIRSTmercTOdisplay ); // check if person is in a vehicle - if( Menptr[gCharactersList[ iValue + FIRSTmercTOdisplay ].usSolID].bAssignment == VEHICLE ) + if( gCharactersList[ iValue + FIRSTmercTOdisplay ].usSolID->bAssignment == VEHICLE ) { // if he's in the helicopter - if( Menptr[gCharactersList[ iValue + FIRSTmercTOdisplay ].usSolID].iVehicleId == iHelicopterVehicleId ) + if( gCharactersList[ iValue + FIRSTmercTOdisplay ].usSolID->iVehicleId == iHelicopterVehicleId ) { TurnOnAirSpaceMode( ); if( RequestGiveSkyriderNewDestination( ) == FALSE ) @@ -11911,7 +11914,7 @@ void TeamListSleepRegionBtnCallBack( MOUSE_REGION *pRegion, INT32 iReason ) // if this slot's sleep status can be changed if ( CanChangeSleepStatusForCharSlot( (INT8) iValue + FIRSTmercTOdisplay ) ) { - pSoldier = &Menptr[ gCharactersList[ iValue + FIRSTmercTOdisplay ].usSolID ]; + pSoldier = gCharactersList[ iValue + FIRSTmercTOdisplay ].usSolID; if( pSoldier->flags.fMercAsleep == TRUE ) { @@ -12035,7 +12038,7 @@ static void HandleSelectedMercsContract() if (gCharactersList[iCounter].fValid) { // get the soldier pointer - pSoldier = &Menptr[gCharactersList[iCounter].usSolID]; + pSoldier = gCharactersList[iCounter].usSolID; if (pSoldier->bActive == FALSE) { @@ -12047,7 +12050,7 @@ static void HandleSelectedMercsContract() continue; } - if (CanExtendContractForCharSlot((INT8)iCounter)) + if (CanExtendContractForCharSlot(iCounter)) { // up the total number of soldiers gSelectedSoldiers.push_back(pSoldier); @@ -12162,7 +12165,7 @@ void TeamListContractRegionMvtCallBack(MOUSE_REGION *pRegion, INT32 iReason ) { giHighLine = iValue; - if( CanExtendContractForCharSlot( (INT8) iValue + FIRSTmercTOdisplay ) ) + if( CanExtendContractForCharSlot( iValue + FIRSTmercTOdisplay ) ) { giContractHighLine = iValue; } @@ -12193,7 +12196,7 @@ void TeamListContractRegionMvtCallBack(MOUSE_REGION *pRegion, INT32 iReason ) } else if( iReason & MSYS_CALLBACK_REASON_GAIN_MOUSE ) { - if( CanExtendContractForCharSlot( (INT8) iValue + FIRSTmercTOdisplay ) ) + if( CanExtendContractForCharSlot( iValue + FIRSTmercTOdisplay ) ) { // play click PlayGlowRegionSound( ); @@ -12216,7 +12219,7 @@ INT32 GetIndexForthis( SOLDIERTYPE *pSoldier ) { if( gCharactersList[ iCounter ].fValid == TRUE ) { - if( ( &Menptr[ gCharactersList[ iCounter ].usSolID ] ) == pSoldier ) + if( gCharactersList[ iCounter ].usSolID == pSoldier->ubID ) { iIndex = iCounter; iCounter = iLastGuy; @@ -12288,7 +12291,7 @@ void PlotPermanentPaths( void ) } else if( GetSelectedDestChar() != -1 ) { - DisplaySoldierPath( &Menptr[ gCharactersList[GetSelectedDestChar()].usSolID ] ); + DisplaySoldierPath( gCharactersList[GetSelectedDestChar()].usSolID ); } } @@ -12343,7 +12346,7 @@ void PlotTemporaryPaths( void ) // dest char has been selected, else if( GetSelectedDestChar() != -1 ) { - PlotATemporaryPathForCharacter( &Menptr[ gCharactersList[GetSelectedDestChar()].usSolID ], sMapX, sMapY ); + PlotATemporaryPathForCharacter( gCharactersList[GetSelectedDestChar()].usSolID, sMapX, sMapY ); // check to see if we are drawing path DisplayThePotentialPathForCurrentDestinationCharacterForMapScreenInterface( sMapX, sMapY ); @@ -12354,7 +12357,7 @@ void PlotTemporaryPaths( void ) // clip region ClipBlitsToMapViewRegion( ); // blit - DisplaySoldierTempPath( &Menptr[ gCharactersList[GetSelectedDestChar()].usSolID ] ); + DisplaySoldierTempPath( gCharactersList[GetSelectedDestChar()].usSolID ); // restore RestoreClipRegionToFullScreen( ); } @@ -12596,7 +12599,7 @@ void DetermineIfContractMenuCanBeShown( void ) // determine which lines selectable HandleShadingOfLinesForContractMenu( ); - if( Menptr[gCharactersList[ bSelectedInfoChar ].usSolID].stats.bLife == 0 ) + if( gCharactersList[ bSelectedInfoChar ].usSolID->stats.bLife == 0 ) { // show basic assignment menu ShowBox( ghRemoveMercAssignBox ); @@ -12664,7 +12667,7 @@ void ContractRegionBtnCallback( MOUSE_REGION *pRegion, INT32 iReason ) if( CanExtendContractForCharSlot( bSelectedInfoChar ) ) { - pSoldier = MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; // create RebuildContractBoxForMerc( pSoldier ); @@ -12771,7 +12774,7 @@ void HandleShadingOfLinesForContractMenu( void ) Assert( CanExtendContractForCharSlot( bSelectedContractChar ) ); // grab the character - pSoldier = &Menptr[ gCharactersList[ bSelectedContractChar ].usSolID ]; + pSoldier = gCharactersList[ bSelectedContractChar ].usSolID; // is guy in AIM? and well enough to talk and make such decisions? @@ -12858,7 +12861,7 @@ void ReBuildCharactersList( void ) { // clear this slot gCharactersList[ sCount ].fValid = FALSE; - gCharactersList[ sCount ].usSolID = 0; + gCharactersList[ sCount ].usSolID = NOBODY; } // fills array with pressence of player controlled characters @@ -12977,7 +12980,7 @@ void EnableDisableTeamListRegionsAndHelpText( void ) MSYS_EnableRegion( &gTeamListLocationRegion[ bCharNum ] ); // valid character. If it's a vehicle, however - if ( Menptr[ gCharactersList[ bCharNum + FIRSTmercTOdisplay].usSolID ].flags.uiStatusFlags & SOLDIER_VEHICLE ) + if ( gCharactersList[ bCharNum + FIRSTmercTOdisplay].usSolID->flags.uiStatusFlags & SOLDIER_VEHICLE ) { // Can't change assignment for vehicles MSYS_DisableRegion( &gTeamListAssignmentRegion[ bCharNum ] ); @@ -12987,8 +12990,8 @@ void EnableDisableTeamListRegionsAndHelpText( void ) MSYS_EnableRegion( &gTeamListAssignmentRegion[ bCharNum ] ); // POW or dead ? - if ( ( Menptr[ gCharactersList[ bCharNum + FIRSTmercTOdisplay].usSolID ].bAssignment == ASSIGNMENT_POW ) || - ( Menptr[ gCharactersList[ bCharNum + FIRSTmercTOdisplay].usSolID ].stats.bLife == 0 ) ) + if ( ( gCharactersList[ bCharNum + FIRSTmercTOdisplay].usSolID->bAssignment == ASSIGNMENT_POW ) || + ( gCharactersList[ bCharNum + FIRSTmercTOdisplay].usSolID->stats.bLife == 0 ) ) { // "Remove Merc" SetRegionFastHelpText( &gTeamListAssignmentRegion[ bCharNum ], pRemoveMercStrings[ 0 ] ); @@ -13128,7 +13131,7 @@ BOOLEAN ContinueDialogue(SOLDIERTYPE *pSoldier, BOOLEAN fDone ) { ChangeSelectedInfoChar( bOldSelectedInfoChar, TRUE ); - SetAutoFaceInActive( MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ]->iFaceIndex ); + SetAutoFaceInActive( gCharactersList[ bSelectedInfoChar ].usSolID->iFaceIndex ); } */ @@ -13150,7 +13153,7 @@ BOOLEAN ContinueDialogue(SOLDIERTYPE *pSoldier, BOOLEAN fDone ) { if( gCharactersList[bCounter].fValid == TRUE ) { - if( ( &Menptr[gCharactersList[bCounter].usSolID]) == pSoldier ) + if( gCharactersList[bCounter].usSolID == pSoldier->ubID ) { if( bSelectedInfoChar != bCounter ) { @@ -13174,7 +13177,7 @@ void HandleSpontanousTalking( ) { if( ( bSelectedInfoChar != -1 ) && ( bSelectedInfoChar < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS ) ) { - ContinueDialogue( ( &Menptr[gCharactersList[bSelectedInfoChar].usSolID] ), TRUE ); + ContinueDialogue( gCharactersList[bSelectedInfoChar].usSolID, TRUE ); } } } @@ -13254,22 +13257,24 @@ BOOLEAN CheckIfClickOnLastSectorInPath( INT16 sX, INT16 sY ) return( FALSE ); } - if ( CALCULATE_STRATEGIC_INDEX( sX, sY ) == GetLastSectorIdInCharactersPath( ( &Menptr[ gCharactersList[GetSelectedDestChar()].usSolID ] ) ) ) + SOLDIERTYPE* pSoldier = gCharactersList[GetSelectedDestChar()].usSolID; + + if ( CALCULATE_STRATEGIC_INDEX( sX, sY ) == GetLastSectorIdInCharactersPath( pSoldier ) ) { // clicked on last sector, reset plotting mode // if he's IN a vehicle or IS a vehicle - if( ( Menptr[gCharactersList[GetSelectedDestChar()].usSolID].bAssignment == VEHICLE ) || ( Menptr[gCharactersList[GetSelectedDestChar()].usSolID].flags.uiStatusFlags & SOLDIER_VEHICLE ) ) + if( ( pSoldier->bAssignment == VEHICLE ) || ( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) ) { - if( Menptr[gCharactersList[GetSelectedDestChar()].usSolID].bAssignment == VEHICLE ) + if( pSoldier->bAssignment == VEHICLE ) { // IN a vehicle - iVehicleId = Menptr[gCharactersList[GetSelectedDestChar()].usSolID].iVehicleId; + iVehicleId = pSoldier->iVehicleId; } else { // IS a vehicle - iVehicleId = Menptr[gCharactersList[GetSelectedDestChar()].usSolID].bVehicleID; + iVehicleId = pSoldier->bVehicleID; } // rebuild waypoints - vehicles @@ -13278,7 +13283,7 @@ BOOLEAN CheckIfClickOnLastSectorInPath( INT16 sX, INT16 sY ) else { // rebuild waypoints - mercs on foot - ppMovePath = &( Menptr[gCharactersList[GetSelectedDestChar()].usSolID].pMercPath ); + ppMovePath = &( pSoldier->pMercPath ); } RebuildWayPointsForAllSelectedCharsGroups( ); @@ -13339,7 +13344,7 @@ void RebuildWayPointsForAllSelectedCharsGroups( void ) { if( ( fSelectedListOfMercsForMapScreen[ iCounter ] == TRUE ) ) { - pSoldier = MercPtrs[ gCharactersList[ iCounter ].usSolID ]; + pSoldier = gCharactersList[ iCounter ].usSolID; // if he's IN a vehicle or IS a vehicle @@ -13443,7 +13448,7 @@ void UpdateCursorIfInLastSector( void ) if ( GetSelectedDestChar() != -1 ) { //c heck if we are in the last sector of the characters path? - if ( CALCULATE_STRATEGIC_INDEX( sMapX, sMapY ) == GetLastSectorIdInCharactersPath( (&Menptr[gCharactersList[GetSelectedDestChar()].usSolID]) ) ) + if ( CALCULATE_STRATEGIC_INDEX( sMapX, sMapY ) == GetLastSectorIdInCharactersPath( gCharactersList[GetSelectedDestChar()].usSolID ) ) { // set cursor to checkmark ChangeMapScreenMaskCursor( CURSOR_CHECKMARK ); @@ -13623,7 +13628,7 @@ void UpDateStatusOfContractBox( void ) { ForceUpDateOfBox( ghContractBox ); - if( ( Menptr[gCharactersList[ bSelectedInfoChar ].usSolID].stats.bLife == 0 )||( Menptr[gCharactersList[bSelectedInfoChar].usSolID].bAssignment == ASSIGNMENT_POW ) ) + if( ( gCharactersList[ bSelectedInfoChar ].usSolID->stats.bLife == 0 )||( gCharactersList[bSelectedInfoChar].usSolID->bAssignment == ASSIGNMENT_POW ) ) { ForceUpDateOfBox( ghRemoveMercAssignBox ); } @@ -13774,17 +13779,21 @@ void UpdateStatusOfMapSortButtons( void ) INT16 GetLastValidCharacterInTeamPanelList( void ) { INT16 iCounter = 0, iValue = 0; + SOLDIERTYPE* pSoldier; + SOLDIERTYPE* pSelectedSoldier = gCharactersList[bSelectedInfoChar].usSolID; // run through the list and find the last valid guy in the list for( iCounter = 0; iCounter < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS; iCounter++ ) { if( gCharactersList[ iCounter ].fValid == TRUE ) { - if(( Menptr[ gCharactersList[ iCounter ].usSolID ].stats.bLife >= OKLIFE ) ) + pSoldier = gCharactersList[iCounter].usSolID; + + if(pSoldier->stats.bLife >= OKLIFE ) { if( fShowMapInventoryPool ) { - if( Menptr[ gCharactersList[ iCounter ].usSolID ].sSectorX == sSelMapX && Menptr[ gCharactersList[ iCounter ].usSolID ].sSectorY == sSelMapY && Menptr[ gCharactersList[ iCounter ].usSolID ].bSectorZ == ( INT8 )( iCurrentMapSectorZ ) ) + if( pSoldier->sSectorX == sSelMapX && pSoldier->sSectorY == sSelMapY && pSoldier->bSectorZ == ( INT8 )( iCurrentMapSectorZ ) ) { iValue = iCounter; } @@ -13797,7 +13806,7 @@ INT16 GetLastValidCharacterInTeamPanelList( void ) { if( gCharactersList[ bSelectedInfoChar ].fValid == TRUE ) { - if( Menptr[ gCharactersList[ iCounter ].usSolID ].sSectorX == Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].sSectorX && Menptr[ gCharactersList[ iCounter ].usSolID ].sSectorY == Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].sSectorY && Menptr[ gCharactersList[ iCounter ].usSolID ].bSectorZ ==Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].bSectorZ ) + if( pSoldier->sSectorX == pSelectedSoldier->sSectorX && pSoldier->sSectorY == pSelectedSoldier->sSectorY && pSoldier->bSectorZ == pSelectedSoldier->bSectorZ ) { iValue = iCounter; } @@ -13828,11 +13837,11 @@ INT8 GetPrevValidCharacterInTeamPanelList( INT8 bCurrentIndex ) { if( gCharactersList[ iCounter ].fValid == TRUE ) { - if( ( Menptr[ gCharactersList[ iCounter ].usSolID ].bLife >= OKLIFE ) ) + if( ( gCharactersList[ iCounter ].usSolID->bLife >= OKLIFE ) ) { if( fShowMapInventoryPool ) { - if( Menptr[ gCharactersList[ iCounter ].usSolID ].sSectorX == sSelMapX && Menptr[ gCharactersList[ iCounter ].usSolID ].sSectorY == sSelMapY && Menptr[ gCharactersList[ iCounter ].usSolID ].bSectorZ == ( INT8 )( iCurrentMapSectorZ ) ) + if( gCharactersList[ iCounter ].usSolID->sSectorX == sSelMapX && gCharactersList[ iCounter ].usSolID->sSectorY == sSelMapY && gCharactersList[ iCounter ].usSolID->bSectorZ == ( INT8 )( iCurrentMapSectorZ ) ) { iValue = iCounter; } @@ -13845,7 +13854,7 @@ INT8 GetPrevValidCharacterInTeamPanelList( INT8 bCurrentIndex ) { if( gCharactersList[ bSelectedInfoChar ].fValid == TRUE ) { - if( Menptr[ gCharactersList[ iCounter ].usSolID ].sSectorX == Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].sSectorX && Menptr[ gCharactersList[ iCounter ].usSolID ].sSectorY == Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].sSectorY && Menptr[ gCharactersList[ iCounter ].usSolID ].bSectorZ ==Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].bSectorZ ) + if( gCharactersList[ iCounter ].usSolID->sSectorX == gCharactersList[ bSelectedInfoChar ].usSolID->sSectorX && gCharactersList[ iCounter ].usSolID->sSectorY == gCharactersList[ bSelectedInfoChar ].usSolID->sSectorY && gCharactersList[ iCounter ].usSolID->bSectorZ ==gCharactersList[ bSelectedInfoChar ].usSolID->bSectorZ ) { iValue = iCounter; iCounter = 0; @@ -13875,11 +13884,11 @@ INT8 GetNextValidCharacterInTeamPanelList( INT8 bCurrentIndex ) { if( gCharactersList[ iCounter ].fValid == TRUE ) { - if( ( Menptr[ gCharactersList[ iCounter ].usSolID ].bLife >= OKLIFE ) ) + if( ( gCharactersList[ iCounter ].usSolID->bLife >= OKLIFE ) ) { if( fShowMapInventoryPool ) { - if( Menptr[ gCharactersList[ iCounter ].usSolID ].sSectorX == sSelMapX && Menptr[ gCharactersList[ iCounter ].usSolID ].sSectorY == sSelMapY && Menptr[ gCharactersList[ iCounter ].usSolID ].bSectorZ == ( INT8 )( iCurrentMapSectorZ ) ) + if( gCharactersList[ iCounter ].usSolID->sSectorX == sSelMapX && gCharactersList[ iCounter ].usSolID->sSectorY == sSelMapY && gCharactersList[ iCounter ].usSolID->bSectorZ == ( INT8 )( iCurrentMapSectorZ ) ) { iValue = iCounter; } @@ -13892,7 +13901,7 @@ INT8 GetNextValidCharacterInTeamPanelList( INT8 bCurrentIndex ) { if( gCharactersList[ bSelectedInfoChar ].fValid == TRUE ) { - if( Menptr[ gCharactersList[ iCounter ].usSolID ].sSectorX == Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].sSectorX && Menptr[ gCharactersList[ iCounter ].usSolID ].sSectorY == Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].sSectorY && Menptr[ gCharactersList[ iCounter ].usSolID ].bSectorZ ==Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].bSectorZ ) + if( gCharactersList[ iCounter ].usSolID->sSectorX == gCharactersList[ bSelectedInfoChar ].usSolID->sSectorX && gCharactersList[ iCounter ].usSolID->sSectorY == gCharactersList[ bSelectedInfoChar ].usSolID->sSectorY && gCharactersList[ iCounter ].usSolID->bSectorZ ==gCharactersList[ bSelectedInfoChar ].usSolID->bSectorZ ) { iValue = iCounter; } @@ -14122,7 +14131,7 @@ void UpdateBadAssignments( void ) { if( gCharactersList[ iCounter ].fValid == TRUE ) { - CheckIfSoldierUnassigned( &Menptr[ gCharactersList[ iCounter ].usSolID ] ); + CheckIfSoldierUnassigned( gCharactersList[ iCounter ].usSolID ); } } @@ -14180,7 +14189,7 @@ BOOLEAN AnyMercsLeavingRealSoon() { if( gCharactersList[ uiCounter ].fValid == TRUE ) { - if( ( Menptr[gCharactersList[uiCounter].usSolID].iEndofContractTime - uiTimeInMin ) <= MINS_TO_FLASH_CONTRACT_TIME ) + if( ( gCharactersList[uiCounter].usSolID->iEndofContractTime - uiTimeInMin ) <= MINS_TO_FLASH_CONTRACT_TIME ) { fFoundOne = TRUE; break; @@ -14263,10 +14272,8 @@ void HandleRemovalOfPreLoadedMapGraphics( void ) } -BOOLEAN CharacterIsInLoadedSectorAndWantsToMoveInventoryButIsNotAllowed( INT8 bCharId ) +BOOLEAN CharacterIsInLoadedSectorAndWantsToMoveInventoryButIsNotAllowed( INT16 bCharId ) { - UINT16 usSoldierId = 0; - // invalid char id if( bCharId == -1 ) { @@ -14280,10 +14287,10 @@ BOOLEAN CharacterIsInLoadedSectorAndWantsToMoveInventoryButIsNotAllowed( INT8 bC } // get the soldier id - usSoldierId = gCharactersList[ bCharId ].usSolID; + SoldierID usSoldierId = gCharactersList[ bCharId ].usSolID; // char is in loaded sector - if( Menptr[ usSoldierId ].sSectorX != gWorldSectorX || Menptr[ usSoldierId ].sSectorY != gWorldSectorY || Menptr[ usSoldierId ].bSectorZ != gbWorldSectorZ ) + if( usSoldierId->sSectorX != gWorldSectorX || usSoldierId->sSectorY != gWorldSectorY || usSoldierId->bSectorZ != gbWorldSectorZ ) { return( FALSE ); } @@ -14660,7 +14667,7 @@ void SortListOfMercsInTeamPanel( BOOLEAN fRetainSelectedMercs, BOOLEAN fReverse // if we have anyone valid selected if ( ( bSelectedInfoChar != -1 ) && ( gCharactersList[ bSelectedInfoChar ].fValid ) ) { - pPreviousSelectedInfoChar = &Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + pPreviousSelectedInfoChar = gCharactersList[ bSelectedInfoChar ].usSolID; } @@ -14677,7 +14684,7 @@ void SortListOfMercsInTeamPanel( BOOLEAN fRetainSelectedMercs, BOOLEAN fReverse } // get soldier assoc. with entry - pCurrentSoldier = &Menptr[ gCharactersList[ iCounter ].usSolID ]; + pCurrentSoldier = gCharactersList[ iCounter ].usSolID; // check if soldier is active if( pCurrentSoldier->bActive == FALSE ) @@ -14715,11 +14722,12 @@ void SortListOfMercsInTeamPanel( BOOLEAN fRetainSelectedMercs, BOOLEAN fReverse break; } - //if( ( wcscmp( Menptr[ gCharactersList[ iCounterA ].usSolID ].name, Menptr[ gCharactersList[ iCounter ].usSolID ].name ) > 0 ) && ( iCounterA < iCounter ) ) + //if( ( wcscmp( gCharactersList[ iCounterA ].usSolID->name, gCharactersList[ iCounter ].usSolID->name ) > 0 ) && ( iCounterA < iCounter ) ) if( iCounterA < iCounter ) { - if((fReverse && ( wcscmp( Menptr[ gCharactersList[ iCounterA ].usSolID ].name, Menptr[ gCharactersList[ iCounter ].usSolID ].name ) < 0 )) || - (!fReverse && ( wcscmp( Menptr[ gCharactersList[ iCounterA ].usSolID ].name, Menptr[ gCharactersList[ iCounter ].usSolID ].name ) > 0 ))) + + if((fReverse && ( wcscmp( gCharactersList[ iCounterA ].usSolID->name, gCharactersList[ iCounter ].usSolID->name ) < 0 )) || + (!fReverse && ( wcscmp( gCharactersList[ iCounterA ].usSolID->name, gCharactersList[ iCounter ].usSolID->name ) > 0 ))) SwapCharactersInList( iCounter, iCounterA ); } } @@ -14734,23 +14742,23 @@ void SortListOfMercsInTeamPanel( BOOLEAN fRetainSelectedMercs, BOOLEAN fReverse break; } - if( !fReverse && ( Menptr[ gCharactersList[ iCounterA ].usSolID ].bAssignment > Menptr[ gCharactersList[ iCounter ].usSolID ].bAssignment ) && ( iCounterA < iCounter ) ) + if( !fReverse && ( gCharactersList[ iCounterA ].usSolID->bAssignment > gCharactersList[ iCounter ].usSolID->bAssignment ) && ( iCounterA < iCounter ) ) { SwapCharactersInList( iCounter, iCounterA ); } - else if( fReverse && ( Menptr[ gCharactersList[ iCounterA ].usSolID ].bAssignment < Menptr[ gCharactersList[ iCounter ].usSolID ].bAssignment ) && ( iCounterA < iCounter ) ) + else if( fReverse && ( gCharactersList[ iCounterA ].usSolID->bAssignment < gCharactersList[ iCounter ].usSolID->bAssignment ) && ( iCounterA < iCounter ) ) { SwapCharactersInList( iCounter, iCounterA ); } - else if( ( Menptr[ gCharactersList[ iCounterA ].usSolID ].bAssignment == Menptr[ gCharactersList[ iCounter ].usSolID ].bAssignment ) && ( iCounterA < iCounter ) ) + else if( ( gCharactersList[ iCounterA ].usSolID->bAssignment == gCharactersList[ iCounter ].usSolID->bAssignment ) && ( iCounterA < iCounter ) ) { // same assignment // if it's in a vehicle - if( Menptr[ gCharactersList[ iCounterA ].usSolID ].bAssignment == VEHICLE ) + if( gCharactersList[ iCounterA ].usSolID->bAssignment == VEHICLE ) { // then also compare vehicle IDs - if( ( Menptr[ gCharactersList[ iCounterA ].usSolID ].iVehicleId > Menptr[ gCharactersList[ iCounter ].usSolID ].iVehicleId ) && ( iCounterA < iCounter ) ) + if( ( gCharactersList[ iCounterA ].usSolID->iVehicleId > gCharactersList[ iCounter ].usSolID->iVehicleId ) && ( iCounterA < iCounter ) ) { SwapCharactersInList( iCounter, iCounterA ); } @@ -14768,11 +14776,11 @@ void SortListOfMercsInTeamPanel( BOOLEAN fRetainSelectedMercs, BOOLEAN fReverse break; } - if( !fReverse && ( Menptr[ gCharactersList[ iCounterA ].usSolID ].flags.fMercAsleep == TRUE ) && ( Menptr[ gCharactersList[ iCounter ].usSolID ].flags.fMercAsleep == FALSE ) && ( iCounterA < iCounter ) ) + if( !fReverse && ( gCharactersList[ iCounterA ].usSolID->flags.fMercAsleep == TRUE ) && ( gCharactersList[ iCounter ].usSolID->flags.fMercAsleep == FALSE ) && ( iCounterA < iCounter ) ) { SwapCharactersInList( iCounter, iCounterA ); } - else if( fReverse && ( Menptr[ gCharactersList[ iCounterA ].usSolID ].flags.fMercAsleep == FALSE ) && ( Menptr[ gCharactersList[ iCounter ].usSolID ].flags.fMercAsleep == TRUE ) && ( iCounterA < iCounter ) ) + else if( fReverse && ( gCharactersList[ iCounterA ].usSolID->flags.fMercAsleep == FALSE ) && ( gCharactersList[ iCounter ].usSolID->flags.fMercAsleep == TRUE ) && ( iCounterA < iCounter ) ) { SwapCharactersInList( iCounter, iCounterA ); } @@ -14806,13 +14814,13 @@ void SortListOfMercsInTeamPanel( BOOLEAN fRetainSelectedMercs, BOOLEAN fReverse case( 4 ): // by destination sector - if( GetLengthOfMercPath( MercPtrs[ gCharactersList[ iCounter ].usSolID ] ) == 0 ) + if( GetLengthOfMercPath( gCharactersList[ iCounter ].usSolID ) == 0 ) { sEndSectorA = 9999; } else { - sEndSectorA = GetLastSectorIdInCharactersPath( &Menptr[ gCharactersList[ iCounter ].usSolID ] ); + sEndSectorA = GetLastSectorIdInCharactersPath( gCharactersList[ iCounter ].usSolID ); } for( iCounterA = 0; iCounterA < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS; iCounterA++ ) @@ -14822,13 +14830,13 @@ void SortListOfMercsInTeamPanel( BOOLEAN fRetainSelectedMercs, BOOLEAN fReverse break; } - if( GetLengthOfMercPath( MercPtrs[ gCharactersList[ iCounterA ].usSolID ] ) == 0 ) + if( GetLengthOfMercPath( gCharactersList[ iCounterA ].usSolID ) == 0 ) { sEndSectorB = 9999; } else { - sEndSectorB = GetLastSectorIdInCharactersPath( &Menptr[ gCharactersList[ iCounterA ].usSolID ] ); + sEndSectorB = GetLastSectorIdInCharactersPath( gCharactersList[ iCounterA ].usSolID ); } if( !fReverse && ( sEndSectorB > sEndSectorA ) && ( iCounterA < iCounter ) ) @@ -14843,7 +14851,7 @@ void SortListOfMercsInTeamPanel( BOOLEAN fRetainSelectedMercs, BOOLEAN fReverse break; case( 5 ): - iExpiryTime = GetContractExpiryTime( &( Menptr[ gCharactersList[ iCounter ].usSolID ] ) ); + iExpiryTime = GetContractExpiryTime( gCharactersList[ iCounter ].usSolID ); //by contract expiry for( iCounterA = 0; iCounterA < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS; iCounterA++ ) @@ -14853,7 +14861,7 @@ void SortListOfMercsInTeamPanel( BOOLEAN fRetainSelectedMercs, BOOLEAN fReverse break; } - iExpiryTimeA = GetContractExpiryTime( &( Menptr[ gCharactersList[ iCounterA ].usSolID ] ) ); + iExpiryTimeA = GetContractExpiryTime( gCharactersList[ iCounterA ].usSolID ); if( !fReverse && ( iExpiryTimeA > iExpiryTime ) && ( iCounterA < iCounter ) ) { @@ -14867,7 +14875,7 @@ void SortListOfMercsInTeamPanel( BOOLEAN fRetainSelectedMercs, BOOLEAN fReverse break; case( 6 ): - uiID = Menptr[ gCharactersList[ iCounter ].usSolID ].ubID; + uiID = gCharactersList[ iCounter ].usSolID->ubID; //by ubID for( iCounterA = 0; iCounterA < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS; iCounterA++ ) { @@ -14875,7 +14883,7 @@ void SortListOfMercsInTeamPanel( BOOLEAN fRetainSelectedMercs, BOOLEAN fReverse { break; } - uiIDA = Menptr[ gCharactersList[ iCounterA ].usSolID ].ubID; + uiIDA = gCharactersList[ iCounterA ].usSolID->ubID; if( !fReverse && ( uiIDA > uiID ) && ( iCounterA < iCounter ) ) { SwapCharactersInList( iCounter, iCounterA ); @@ -14914,7 +14922,7 @@ void SortListOfMercsInTeamPanel( BOOLEAN fRetainSelectedMercs, BOOLEAN fReverse } // grab current soldier - pCurrentSoldier = &Menptr[ gCharactersList[ iCounterA ].usSolID ]; + pCurrentSoldier = gCharactersList[ iCounterA ].usSolID; // check if soldier is active if( pCurrentSoldier->bActive == FALSE ) @@ -14956,10 +14964,8 @@ void SortListOfMercsInTeamPanel( BOOLEAN fRetainSelectedMercs, BOOLEAN fReverse void SwapCharactersInList( INT32 iCharA, INT32 iCharB ) { - UINT16 usTempSoldID; - // swap - usTempSoldID = gCharactersList[ iCharA ].usSolID; + SoldierID usTempSoldID = gCharactersList[ iCharA ].usSolID; gCharactersList[ iCharA ].usSolID = gCharactersList[ iCharB ].usSolID; gCharactersList[ iCharB ].usSolID = usTempSoldID; } @@ -15055,7 +15061,7 @@ void HandleAssignmentsDoneAndAwaitingFurtherOrders( void ) break; } - pSoldier = &( Menptr[ gCharactersList[ iCounter ].usSolID ] ); + pSoldier = gCharactersList[ iCounter ].usSolID; // toggle and redraw if flash was left ON even though the flag is OFF if( pSoldier->flags.fDoneAssignmentAndNothingToDoFlag || fFlashAssignDone ) @@ -15090,7 +15096,7 @@ void DisplayIconsForMercsAsleep( void ) { if( gCharactersList[ iCounter + FIRSTmercTOdisplay ].fValid == TRUE ) { - pSoldier = MercPtrs[ gCharactersList[ iCounter + FIRSTmercTOdisplay ].usSolID ]; + pSoldier = gCharactersList[ iCounter + FIRSTmercTOdisplay ].usSolID; if( pSoldier->bActive && pSoldier->flags.fMercAsleep && CanChangeSleepStatusForSoldier( pSoldier ) ) { BltVideoObject( guiSAVEBUFFER , hHandle, 0, UI_CHARLIST.xSleep + 2, ( INT16 )(UI_CHARLIST.y + (iCounter * ( Y_SIZE + 2 ) ) ) , VO_BLT_SRCTRANSPARENCY,NULL ); @@ -15175,7 +15181,7 @@ BOOLEAN CanToggleSelectedCharInventory( void ) return(FALSE); } - pSoldier = MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; // if not in inventory, and holding an item from sector inventory if( !fShowInventoryFlag && @@ -15216,7 +15222,7 @@ BOOLEAN MapCharacterHasAccessibleInventory( INT16 bCharNumber ) return(FALSE); } - pSoldier = MercPtrs[ gCharactersList[ bCharNumber ].usSolID ]; + pSoldier = gCharactersList[ bCharNumber ].usSolID; if( ( pSoldier->bAssignment == IN_TRANSIT ) || ( pSoldier->bAssignment == ASSIGNMENT_POW ) || @@ -15307,9 +15313,8 @@ void ChangeSelectedMapSector( INT16 sMapX, INT16 sMapY, INT8 bMapZ ) fTeamPanelDirty = TRUE; } -BOOLEAN CanChangeDestinationForCharSlot( INT8 bCharNumber, BOOLEAN fShowErrorMessage ) +BOOLEAN CanChangeDestinationForCharSlot( INT16 bCharNumber, BOOLEAN fShowErrorMessage ) { - SOLDIERTYPE *pSoldier = NULL; INT8 bErrorNumber = -1; @@ -15319,7 +15324,7 @@ BOOLEAN CanChangeDestinationForCharSlot( INT8 bCharNumber, BOOLEAN fShowErrorMes if ( gCharactersList[ bCharNumber ].fValid == FALSE ) return (FALSE); - pSoldier = MercPtrs[ gCharactersList[ bCharNumber ].usSolID ]; + SOLDIERTYPE* pSoldier = gCharactersList[ bCharNumber ].usSolID; // valid soldier? Assert( pSoldier ); @@ -15344,18 +15349,15 @@ BOOLEAN CanChangeDestinationForCharSlot( INT8 bCharNumber, BOOLEAN fShowErrorMes -BOOLEAN CanExtendContractForCharSlot( INT8 bCharNumber ) +BOOLEAN CanExtendContractForCharSlot( INT16 bCharNumber ) { - SOLDIERTYPE *pSoldier = NULL; - - if ( bCharNumber == -1 ) return( FALSE ); if ( gCharactersList[ bCharNumber ].fValid == FALSE ) return (FALSE); - pSoldier = MercPtrs[ gCharactersList[ bCharNumber ].usSolID ]; + SOLDIERTYPE* pSoldier = gCharactersList[ bCharNumber ].usSolID; // valid soldier? Assert( pSoldier ); @@ -15385,20 +15387,15 @@ BOOLEAN CanExtendContractForCharSlot( INT8 bCharNumber ) } -BOOLEAN CanChangeSleepStatusForCharSlot( INT8 bCharNumber ) +BOOLEAN CanChangeSleepStatusForCharSlot( INT16 bCharNumber ) { - SOLDIERTYPE *pSoldier = NULL; - if ( bCharNumber == -1 ) return( FALSE ); if ( gCharactersList[ bCharNumber ].fValid == FALSE ) return (FALSE); - - pSoldier = MercPtrs[ gCharactersList[ bCharNumber ].usSolID ]; - - return( CanChangeSleepStatusForSoldier( pSoldier ) ); + return( CanChangeSleepStatusForSoldier(gCharactersList[bCharNumber].usSolID) ); } @@ -15503,7 +15500,7 @@ void CancelOrShortenPlottedPath( void ) return; // try to delete portion of path AFTER the current sector for the helicopter - uiReturnValue = ClearPathAfterThisSectorForCharacter( &Menptr[gCharactersList[GetSelectedDestChar()].usSolID], sMapX, sMapY ); + uiReturnValue = ClearPathAfterThisSectorForCharacter( gCharactersList[GetSelectedDestChar()].usSolID, sMapX, sMapY ); } switch ( uiReturnValue ) @@ -15557,8 +15554,8 @@ BOOLEAN HandleCtrlOrShiftInTeamPanel( INT16 bCharNumber, BOOLEAN fFromRightClick // if not already selected if( fSelectedListOfMercsForMapScreen[ iCounter ] == FALSE ) { - SOLDIERTYPE * pSelected = &( Menptr[ gCharactersList[ bCharNumber ].usSolID ] ); - SOLDIERTYPE * pSoldier = &( Menptr[ gCharactersList[ iCounter ].usSolID ] ); + SOLDIERTYPE * pSelected = gCharactersList[ bCharNumber ].usSolID; + SOLDIERTYPE * pSoldier = gCharactersList[ iCounter ].usSolID; // if on a squad, or in a vehicle, or IS a vehicle if ( pSoldier->bAssignment == VEHICLE ) @@ -15612,8 +15609,8 @@ BOOLEAN HandleCtrlOrShiftInTeamPanel( INT16 bCharNumber, BOOLEAN fFromRightClick // if not already selected if( fSelectedListOfMercsForMapScreen[ iCounter ] == TRUE ) { - SOLDIERTYPE * pSelected = &( Menptr[ gCharactersList[ bCharNumber ].usSolID ] ); - SOLDIERTYPE * pSoldier = &( Menptr[ gCharactersList[ iCounter ].usSolID ] ); + SOLDIERTYPE * pSelected = gCharactersList[ bCharNumber ].usSolID; + SOLDIERTYPE * pSoldier = gCharactersList[ iCounter ].usSolID; // if on a squad, or in a vehicle, or IS a vehicle if ( pSoldier->bAssignment == VEHICLE ) @@ -15824,7 +15821,7 @@ void CopyPathToAllSelectedCharacters( PathStPtr pPath ) { if( fSelectedListOfMercsForMapScreen[ iCounter ] == TRUE ) { - pSoldier = MercPtrs[ gCharactersList[ iCounter ].usSolID ]; + pSoldier = gCharactersList[ iCounter ].usSolID; // skip itself! if ( GetSoldierMercPathPtr( pSoldier ) != pPath ) @@ -15933,7 +15930,7 @@ INT32 GetGroundTravelTimeOfCharacter( INT8 bCharNumber ) iTravelTime = GetPathTravelTimeDuringPlotting( pTempCharacterPath ); // add travel time for any prior path segments (stored in the selected character's mercpath, but waypoints aren't built) - iTravelTime += GetPathTravelTimeDuringPlotting( GetSoldierMercPathPtr( MercPtrs[ gCharactersList[ bCharNumber ].usSolID ] ) ); + iTravelTime += GetPathTravelTimeDuringPlotting( GetSoldierMercPathPtr( gCharactersList[ bCharNumber ].usSolID ) ); return( iTravelTime ); } @@ -15961,7 +15958,7 @@ INT16 CalcLocationValueForChar( INT32 iCounter ) if( gCharactersList[ iCounter ].fValid == FALSE ) return( sLocValue ); - pSoldier = MercPtrs[ gCharactersList[ iCounter ].usSolID ]; + pSoldier = gCharactersList[ iCounter ].usSolID; // don't reveal location of POWs! if( pSoldier->bAssignment != ASSIGNMENT_POW && pSoldier->bAssignment != ASSIGNMENT_MINIEVENT && pSoldier->bAssignment != ASSIGNMENT_REBELCOMMAND ) @@ -15996,7 +15993,7 @@ void MakeMapModesSuitableForDestPlotting( INT8 bCharNumber ) if( gCharactersList[ bCharNumber ].fValid == TRUE ) { - pSoldier = MercPtrs[ gCharactersList[ bCharNumber ].usSolID ]; + pSoldier = gCharactersList[ bCharNumber ].usSolID; CancelSectorInventoryDisplayIfOn( FALSE ); @@ -16296,7 +16293,7 @@ void RandomAwakeSelectedMercConfirmsStrategicMove( void ) { if( ( fSelectedListOfMercsForMapScreen[ iCounter ] == TRUE ) ) { - pSoldier = MercPtrs[ gCharactersList[ iCounter ].usSolID ]; + pSoldier = gCharactersList[ iCounter ].usSolID; if ( pSoldier->stats.bLife >= OKLIFE && !( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) && !AM_A_ROBOT( pSoldier ) && !AM_AN_EPC( pSoldier ) && !pSoldier->flags.fMercAsleep ) @@ -16557,7 +16554,7 @@ void WakeUpAnySleepingSelectedMercsOnFootOrDriving( void ) { if( ( fSelectedListOfMercsForMapScreen[ iCounter ] == TRUE ) ) { - pSoldier = MercPtrs[ gCharactersList[ iCounter ].usSolID ]; + pSoldier = gCharactersList[ iCounter ].usSolID; // if asleep if ( pSoldier->flags.fMercAsleep ) @@ -16850,10 +16847,10 @@ void RememberPreviousPathForAllSelectedChars( void ) { if( fSelectedListOfMercsForMapScreen[ iCounter ] == TRUE ) { - pSoldier = MercPtrs[ gCharactersList[ iCounter ].usSolID ]; + pSoldier = gCharactersList[ iCounter ].usSolID; // remember his previous path by copying it to his slot in the array kept for that purpose - gpCharacterPreviousMercPath[ iCounter ] = CopyPaths( GetSoldierMercPathPtr( MercPtrs[ gCharactersList[ iCounter ].usSolID ] ), gpCharacterPreviousMercPath[ iCounter ] ); + gpCharacterPreviousMercPath[ iCounter ] = CopyPaths( GetSoldierMercPathPtr( gCharactersList[ iCounter ].usSolID ), gpCharacterPreviousMercPath[ iCounter ] ); } } } @@ -16967,7 +16964,7 @@ void RestorePreviousPaths( void ) // if selected if( fSelectedListOfMercsForMapScreen[ iCounter ] == TRUE ) { - pSoldier = MercPtrs[ gCharactersList[ iCounter ].usSolID ]; + pSoldier = gCharactersList[ iCounter ].usSolID; if( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) { @@ -17068,7 +17065,7 @@ void SelectAllCharactersInSquad( INT8 bSquadNumber ) // is this entry is valid if( gCharactersList[ bCounter ].fValid == TRUE ) { - pSoldier = MercPtrs[ gCharactersList[ bCounter ].usSolID ]; + pSoldier = gCharactersList[ bCounter ].usSolID; // if this guy is on that squad or in a vehicle which is assigned to that squad // NOTE: There's no way to select everyone aboard Skyrider with this function... @@ -17198,7 +17195,7 @@ void RequestContractMenu( void ) if ( CanExtendContractForCharSlot( bSelectedInfoChar ) ) { // create - RebuildContractBoxForMerc( &Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ] ); + RebuildContractBoxForMerc( gCharactersList[ bSelectedInfoChar ].usSolID ); // reset selected characters ResetAllSelectedCharacterModes( ); @@ -17207,7 +17204,7 @@ void RequestContractMenu( void ) giContractHighLine = bSelectedContractChar; // if not triggered internally - if ( CheckIfSalaryIncreasedAndSayQuote( MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ], TRUE ) == FALSE ) + if ( CheckIfSalaryIncreasedAndSayQuote( gCharactersList[ bSelectedInfoChar ].usSolID, TRUE ) == FALSE ) { // show contract box fShowContractMenu = TRUE; @@ -17300,7 +17297,7 @@ INT32 GetTotalContractExpenses ( void ) while(gCharactersList[ubCounter].fValid) { - pSoldier = MercPtrs[ gCharactersList[ ubCounter ].usSolID ]; + pSoldier = gCharactersList[ ubCounter ].usSolID; // salary if( pSoldier->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC ) { diff --git a/Strategic/mapscreen.h b/Strategic/mapscreen.h index e17da45b..ac0b53e5 100644 --- a/Strategic/mapscreen.h +++ b/Strategic/mapscreen.h @@ -150,7 +150,7 @@ void ChangeSelectedMapSector( INT16 sMapX, INT16 sMapY, INT8 bMapZ ); BOOLEAN CanToggleSelectedCharInventory( void ); -BOOLEAN CanExtendContractForCharSlot( INT8 bCharNumber ); +BOOLEAN CanExtendContractForCharSlot( INT16 bCharNumber ); void TellPlayerWhyHeCantCompressTime( void ); @@ -168,7 +168,7 @@ void CancelChangeArrivalSectorMode( void ); void ExplainWhySkyriderCantFly( void ); -BOOLEAN CanChangeSleepStatusForCharSlot( INT8 bCharNumber ); +BOOLEAN CanChangeSleepStatusForCharSlot( INT16 bCharNumber ); BOOLEAN CanChangeSleepStatusForSoldier( SOLDIERTYPE *pSoldier ); BOOLEAN MapCharacterHasAccessibleInventory( INT16 bCharNumber ); diff --git a/Tactical/Interface Items.cpp b/Tactical/Interface Items.cpp index 92ef5863..ab4a8cb0 100644 --- a/Tactical/Interface Items.cpp +++ b/Tactical/Interface Items.cpp @@ -2362,16 +2362,17 @@ void addAmmoToPocketPopup( SOLDIERTYPE *pSoldier, INT16 sPocket, POPUP* popup ) } POPUP * createPopupForPocket( SOLDIERTYPE *pSoldier, INT16 sPocket ){ + SOLDIERTYPE* pSelectedSoldier = gCharactersList[bSelectedInfoChar].usSolID; if( !( guiCurrentItemDescriptionScreen == MAP_SCREEN - && fShowMapInventoryPool - && ( ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].sSectorX == sSelMapX ) - && ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].sSectorY == sSelMapY ) - && ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].bSectorZ == iCurrentMapSectorZ ) + && fShowMapInventoryPool + && ( ( pSelectedSoldier->sSectorX == sSelMapX ) + && ( pSelectedSoldier->sSectorY == sSelMapY ) + && ( pSelectedSoldier->bSectorZ == iCurrentMapSectorZ ) ) - && CanPlayerUseSectorInventory( &Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ] ) - ) ) + && CanPlayerUseSectorInventory( pSelectedSoldier ) + ) ) { return NULL; } @@ -5853,13 +5854,14 @@ void UpdateAttachmentTooltips(OBJECTTYPE *pObject, UINT8 ubStatusIndex) } } BOOLEAN showAttachmentPopups = FALSE; + SOLDIERTYPE* pSoldier = gCharactersList[bSelectedInfoChar].usSolID; if( guiCurrentItemDescriptionScreen == MAP_SCREEN && fShowMapInventoryPool - && ( (Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].sSectorX == sSelMapX ) - && ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].sSectorY == sSelMapY ) - && ( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].bSectorZ == iCurrentMapSectorZ ) ) - && CanPlayerUseSectorInventory( &Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ] ) + && ( (pSoldier->sSectorX == sSelMapX ) + && ( pSoldier->sSectorY == sSelMapY ) + && ( pSoldier->bSectorZ == iCurrentMapSectorZ ) ) + && CanPlayerUseSectorInventory( pSoldier ) && attachList.size()>0 ) // silversurfer: no need to show popups if we have nothing to display { showAttachmentPopups = TRUE; @@ -10546,18 +10548,20 @@ void ItemPopupRegionCallback( MOUSE_REGION * pRegion, INT32 iReason ) if (iReason & MSYS_CALLBACK_REASON_LBUTTON_DWN) { - 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 ) ) + SOLDIERTYPE* pSelected = gCharactersList[bSelectedInfoChar].usSolID; + + if( ( pSelected->sSectorX != sSelMapX ) || + ( pSelected->sSectorY != sSelMapY ) || + ( pSelected->bSectorZ != iCurrentMapSectorZ ) || + ( pSelected->flags.fBetweenSectors ) ) { if ( gpItemPointer == NULL ) { - swprintf( sString, pMapInventoryErrorString[ 2 ], Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].name ); + swprintf( sString, pMapInventoryErrorString[ 2 ], pSelected->name ); } else { - swprintf( sString, pMapInventoryErrorString[ 5 ], Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ].name ); + swprintf( sString, pMapInventoryErrorString[ 5 ], pSelected->name ); } DoMapMessageBox( MSG_BOX_BASIC_STYLE, sString, MAP_SCREEN, MSG_BOX_FLAG_OK, NULL ); return; @@ -12824,7 +12828,7 @@ void UpdateItemHatches() { if ( fShowInventoryFlag && bSelectedInfoChar >= 0 ) { - pSoldier = MercPtrs[ gCharactersList[ bSelectedInfoChar ].usSolID ]; + pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; } } else @@ -14539,7 +14543,7 @@ void UpdateMercBodyRegionHelpText( ) wcscpy( sString, L"" ); // valid soldier selected - pSoldier = MercPtrs[gCharactersList[bSelectedInfoChar].usSolID]; + pSoldier = gCharactersList[bSelectedInfoChar].usSolID; // health/energy/morale if ( pSoldier->bAssignment != ASSIGNMENT_POW ) @@ -14551,7 +14555,7 @@ void UpdateMercBodyRegionHelpText( ) // robot (condition only) swprintf( sString, L"%s: %d/%d", pMapScreenStatusStrings[3], pSoldier->stats.bLife, pSoldier->stats.bLifeMax ); } - else if ( Menptr[gCharactersList[bSelectedInfoChar].usSolID].flags.uiStatusFlags & SOLDIER_VEHICLE ) + else if (pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) { // vehicle (condition/fuel) swprintf( sString, L"%s: %d/%d, %s: %d/%d", diff --git a/Tactical/Interface Panels.cpp b/Tactical/Interface Panels.cpp index a397d28d..fee3becd 100644 --- a/Tactical/Interface Panels.cpp +++ b/Tactical/Interface Panels.cpp @@ -7320,9 +7320,7 @@ void KeyRingItemPanelButtonCallback( MOUSE_REGION * pRegion, INT32 iReason ) } - - - pSoldier = &( Menptr[ gCharactersList[ bSelectedInfoChar ].usSolID ] ); + pSoldier = gCharactersList[ bSelectedInfoChar ].usSolID; sStartYPosition = MAP_START_KEYRING_Y; sWidth = 261; sHeight = ( 359 - 107 ); @@ -7457,7 +7455,7 @@ void KeyRingSlotInvClickCallback( MOUSE_REGION * pRegion, INT32 iReason ) } else { - UINT16 ubSrcID, ubDestID; + SoldierID ubSrcID, ubDestID; BOOLEAN fOKToGo = FALSE; BOOLEAN fDeductPoints = FALSE; diff --git a/Tactical/Item Types.cpp b/Tactical/Item Types.cpp index 324cde2e..7409cc2f 100644 --- a/Tactical/Item Types.cpp +++ b/Tactical/Item Types.cpp @@ -51,24 +51,24 @@ bool checkLBEArrayIntegrity(bool verbose) { if (!gCharactersList[i].fValid || gCharactersList[i].usSolID >= NOBODY) continue; SoldierID id = gCharactersList[i].usSolID; - SOLDIERTYPE soldier = Menptr[id]; + SOLDIERTYPE *soldier = id; - if (verbose)ScreenMsg(FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"LBENODE integrity check start: checking soldier items (%s)...", soldier.name); + if (verbose)ScreenMsg(FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"LBENODE integrity check start: checking soldier items (%s)...", soldier->name); - for (int j = 0; j < soldier.inv.size(); j++) { - OBJECTTYPE * object = &(soldier.inv[j]); + for (int j = 0; j < soldier->inv.size(); j++) { + OBJECTTYPE * object = &(soldier->inv[j]); if (object->HasAnyActiveLBEs()) { if (!checkObjectLBEIntegrity(object)) { - ScreenMsg(FONT_MCOLOR_LTRED, MSG_INTERFACE, L"> LBENODE missing: %s -> %s!", soldier.name, Item[object->usItem].szItemName); + ScreenMsg(FONT_MCOLOR_LTRED, MSG_INTERFACE, L"> LBENODE missing: %s -> %s!", soldier->name, Item[object->usItem].szItemName); integrityCheck = false; } else { - if (verbose)ScreenMsg(FONT_MCOLOR_LTGREEN, MSG_INTERFACE, L"> OK: %s -> %s", soldier.name, Item[object->usItem].szItemName); + if (verbose)ScreenMsg(FONT_MCOLOR_LTGREEN, MSG_INTERFACE, L"> OK: %s -> %s", soldier->name, Item[object->usItem].szItemName); } } else { - if (verbose)ScreenMsg(FONT_MCOLOR_LTGRAY, MSG_INTERFACE, L"> SKIP: %s -> %s", soldier.name, Item[object->usItem].szItemName); + if (verbose)ScreenMsg(FONT_MCOLOR_LTGRAY, MSG_INTERFACE, L"> SKIP: %s -> %s", soldier->name, Item[object->usItem].szItemName); } } } diff --git a/Tactical/Merc Hiring.cpp b/Tactical/Merc Hiring.cpp index 341f77c5..5df4fed2 100644 --- a/Tactical/Merc Hiring.cpp +++ b/Tactical/Merc Hiring.cpp @@ -502,7 +502,7 @@ void MercArrivesCallback( UINT16 ubSoldierID ) { if (gCharactersList[cnt].fValid) { - pTeamSoldier = &Menptr[gCharactersList[cnt].usSolID]; + pTeamSoldier = gCharactersList[cnt].usSolID; if (pTeamSoldier != pSoldier && pTeamSoldier->bAssignment != ASSIGNMENT_DEAD && pTeamSoldier->bAssignment != ASSIGNMENT_POW && pTeamSoldier->bAssignment != IN_TRANSIT && pSoldier->ubStrategicInsertionCode != INSERTION_CODE_CHOPPER) { force_helidrop = false; diff --git a/Tactical/SkillMenu.cpp b/Tactical/SkillMenu.cpp index 7965c62e..0b4cdaf7 100644 --- a/Tactical/SkillMenu.cpp +++ b/Tactical/SkillMenu.cpp @@ -1096,7 +1096,7 @@ EquipmentSelection::Functions(UINT32 aVal) } else if ( aVal < gTemplateVector.size( ) ) { - SOLDIERTYPE* pSoldier = &Menptr[gCharactersList[bSelectedInfoChar].usSolID]; + SOLDIERTYPE* pSoldier = gCharactersList[bSelectedInfoChar].usSolID; if ( pSoldier ) { std::string name = gTemplateVector[aVal]; From 61c5a41beaefe38cbcbd16ec6788f9777b1c7683 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 17 Nov 2024 01:35:49 +0200 Subject: [PATCH 066/192] LocateSoldier() & HandleMercLeavingEquipmentInDrassen() & HandleMercLeavingEquipmentInOmerta() --- Strategic/Map Screen Interface.cpp | 18 +++++++++--------- Strategic/Map Screen Interface.h | 6 +++--- Tactical/Overhead.cpp | 4 ++-- Tactical/Overhead.h | 2 +- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/Strategic/Map Screen Interface.cpp b/Strategic/Map Screen Interface.cpp index eadc70bb..d23f06c1 100644 --- a/Strategic/Map Screen Interface.cpp +++ b/Strategic/Map Screen Interface.cpp @@ -1625,7 +1625,7 @@ void HandleLeavingOfEquipmentInCurrentSector( SoldierID uiMercId ) -void HandleMercLeavingEquipmentInOmerta( UINT32 uiMercId ) +void HandleMercLeavingEquipmentInOmerta( SoldierID uiMercId ) { INT32 iSlotIndex = 0; @@ -1643,7 +1643,7 @@ void HandleMercLeavingEquipmentInOmerta( UINT32 uiMercId ) } -void HandleMercLeavingEquipmentInDrassen( UINT32 uiMercId ) +void HandleMercLeavingEquipmentInDrassen( SoldierID uiMercId ) { INT32 iSlotIndex = 0; @@ -1856,7 +1856,7 @@ INT32 FindFreeSlotInLeaveList( void ) } -INT32 SetUpDropItemListForMerc( UINT32 uiMercId ) +INT32 SetUpDropItemListForMerc( SoldierID uiMercId ) { // will set up a drop list for this grunt, remove items from inventory, and profile INT32 iSlotIndex = -1; @@ -1867,27 +1867,27 @@ INT32 SetUpDropItemListForMerc( UINT32 uiMercId ) return( -1 ); } - UINT32 invsize = Menptr[ uiMercId ].inv.size(); + UINT32 invsize = uiMercId->inv.size(); for( UINT32 iCounter = 0; iCounter < invsize; ++iCounter ) { // slot found, // check if actual item - if( Menptr[ uiMercId ].inv[ iCounter ].exists() == true ) + if( uiMercId->inv[ iCounter ].exists() == true ) { // make a linked list of the items left behind, with the ptr to its head in this free slot - AddItemToLeaveIndex( &( Menptr[ uiMercId ].inv[ iCounter ] ), iSlotIndex ); + AddItemToLeaveIndex( &( uiMercId->inv[ iCounter ] ), iSlotIndex ); // store owner's profile id for the items added to this leave slot index - SetUpMercAboutToLeaveEquipment( Menptr[ uiMercId ].ubProfile, iSlotIndex ); + SetUpMercAboutToLeaveEquipment( uiMercId->ubProfile, iSlotIndex ); } } // ATE: Added this to drop keyring keys - the 2nd last paramter says to add it to a leave list... // the gridno, level and visiblity are ignored - DropKeysInKeyRing( MercPtrs[ uiMercId ], NOWHERE, 0, 0, TRUE, iSlotIndex, FALSE ); + DropKeysInKeyRing( uiMercId, NOWHERE, 0, 0, TRUE, iSlotIndex, FALSE ); // zero out profiles - gMercProfiles[ Menptr[ uiMercId ].ubProfile ].clearInventory(); + gMercProfiles[ uiMercId->ubProfile ].clearInventory(); return( iSlotIndex ); } diff --git a/Strategic/Map Screen Interface.h b/Strategic/Map Screen Interface.h index d29fb861..0120c7d0 100644 --- a/Strategic/Map Screen Interface.h +++ b/Strategic/Map Screen Interface.h @@ -516,8 +516,8 @@ void GetMoraleString( SOLDIERTYPE *pSoldier, STR16 sString ); 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 ); diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index c4e2164e..3676eeb7 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -3488,7 +3488,7 @@ BOOLEAN ResetAllAnimationCache( ) -void LocateSoldier( UINT16 usID, BOOLEAN fSetLocator) +void LocateSoldier( SoldierID usID, BOOLEAN fSetLocator) { SOLDIERTYPE *pSoldier; INT16 sNewCenterWorldX, sNewCenterWorldY; @@ -3501,7 +3501,7 @@ void LocateSoldier( UINT16 usID, BOOLEAN fSetLocator) if (!SoldierOnScreen(usID) || fSetLocator == 10 ) { // Get pointer of soldier - pSoldier = MercPtrs[ usID ]; + pSoldier = usID; // Center on guy sNewCenterWorldX = (INT16)pSoldier->dXPos; diff --git a/Tactical/Overhead.h b/Tactical/Overhead.h index 5ed891e3..11e0dc00 100644 --- a/Tactical/Overhead.h +++ b/Tactical/Overhead.h @@ -231,7 +231,7 @@ void SelectSoldier( UINT16 usSoldierID, BOOLEAN fAcknowledge, BOOLEAN fForceRese void RevealAllDroppedEnemyItems(); void LocateGridNo( INT32 sGridNo ); -void LocateSoldier( UINT16 usID, BOOLEAN fSetLocator); +void LocateSoldier( SoldierID usID, BOOLEAN fSetLocator); void BeginTeamTurn( UINT8 ubTeam ); void SlideTo(INT32 sGridNo, UINT16 usSoldierID , UINT16 usReasonID, BOOLEAN fSetLocator) ; From f0be44bb42b9e04465fa557b599275608ae82d03 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 17 Nov 2024 10:23:01 +0200 Subject: [PATCH 067/192] Convert to SoldierID TacticalStatusType::ubEnemySightingOnTheirTurnEnemyID TacticalStatusType::ubEnemySightingOnTheirTurnPlayerID TacticalTeamType::ubLastMercToRadio --- Ja2/gamescreen.cpp | 4 +- Tactical/Overhead.h | 6 +- Tactical/opplist.cpp | 533 +++++++++++++++++++------------------------ Tactical/opplist.h | 6 +- 4 files changed, 249 insertions(+), 300 deletions(-) diff --git a/Ja2/gamescreen.cpp b/Ja2/gamescreen.cpp index d1f48eb4..d95c5266 100644 --- a/Ja2/gamescreen.cpp +++ b/Ja2/gamescreen.cpp @@ -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; } diff --git a/Tactical/Overhead.h b/Tactical/Overhead.h index 11e0dc00..b083cda3 100644 --- a/Tactical/Overhead.h +++ b/Tactical/Overhead.h @@ -28,7 +28,7 @@ typedef struct COLORVAL RadarColor; INT8 bSide; INT16 bMenInSector; - UINT16 ubLastMercToRadio; + SoldierID ubLastMercToRadio; INT8 bTeamActive; INT8 bAwareOfOpposition; INT8 bHuman; @@ -89,8 +89,8 @@ struct TacticalStatusType INT8 bRealtimeSpeed; UINT8 ubEnemyIntention; UINT8 ubEnemyIntendedRetreatDirection; - UINT16 ubEnemySightingOnTheirTurnEnemyID; - UINT16 ubEnemySightingOnTheirTurnPlayerID; + SoldierID ubEnemySightingOnTheirTurnEnemyID; + SoldierID ubEnemySightingOnTheirTurnPlayerID; BOOLEAN fEnemySightingOnTheirTurn; BOOLEAN fAutoBandageMode; UINT8 ubAttackBusyCount; diff --git a/Tactical/opplist.cpp b/Tactical/opplist.cpp index 39b72bfa..46cbd3b4 100644 --- a/Tactical/opplist.cpp +++ b/Tactical/opplist.cpp @@ -3043,30 +3043,25 @@ void RemoveOneOpponent(SOLDIERTYPE *pSoldier) void RemoveManAsTarget(SOLDIERTYPE *pSoldier) { + SOLDIERTYPE *pOpponent; + UINT8 ubLoop; + SoldierID ubTarget = pSoldier->ubID; - SOLDIERTYPE *pOpponent; - UINT16 ubTarget,ubLoop; - - - ubTarget = pSoldier->ubID; - - // clean up the public opponent lists and locations - for (ubLoop = 0; ubLoop < MAXTEAMS; ubLoop++) - { // never causes any additional looks - UpdatePublic(ubLoop, ubTarget, NOT_HEARD_OR_SEEN, NOWHERE, 0); - } -/* - - -IAN COMMENTED THIS OUT MAY 1997 - DO WE NEED THIS? - - // make sure this guy is no longer a possible target for anyone - for (cnt = 0, pOpponent = Menptr; cnt < MAXMERCS; cnt++,pOpponent++) - { - if (pOpponent->bOppNum == ubTarget) - pOpponent->bOppNum = NOBODY; + // clean up the public opponent lists and locations + for (ubLoop = 0; ubLoop < MAXTEAMS; ubLoop++) + { // never causes any additional looks + UpdatePublic(ubLoop, ubTarget, NOT_HEARD_OR_SEEN, NOWHERE, 0); } + /* + IAN COMMENTED THIS OUT MAY 1997 - DO WE NEED THIS? + + // make sure this guy is no longer a possible target for anyone + for (cnt = 0, pOpponent = Menptr; cnt < MAXMERCS; cnt++,pOpponent++) + { + if (pOpponent->bOppNum == ubTarget) + pOpponent->bOppNum = NOBODY; + } */ @@ -3086,74 +3081,65 @@ IAN COMMENTED THIS OUT MAY 1997 - DO WE NEED THIS? if ( ( !CONSIDERED_NEUTRAL( pOpponent, pSoldier ) || pSoldier->usSoldierFlagMask & SOLDIER_POW ) && pOpponent->RecognizeAsCombatant(pSoldier->ubID) ) RemoveOneOpponent(pOpponent); } - UpdatePersonal(pOpponent,ubTarget,NOT_HEARD_OR_SEEN,NOWHERE,0); + UpdatePersonal(pOpponent, ubTarget, NOT_HEARD_OR_SEEN, NOWHERE, 0); gbSeenOpponents[ubLoop][ubTarget] = FALSE; } } -/* + /* + for (ubLoop = 0,pOpponent = Menptr; ubLoop < MAXMERCS; ubLoop++,pOpponent++) + { + // if the target is a true opponent and currently seen by this merc + if (!pSoldier->aiData.bNeutral && !pSoldier->aiData.bNeutral && + (pOpponent->aiData.bOppList[ubTarget] == SEEN_CURRENTLY) - for (ubLoop = 0,pOpponent = Menptr; ubLoop < MAXMERCS; ubLoop++,pOpponent++) - { - // if the target is a true opponent and currently seen by this merc - if (!pSoldier->aiData.bNeutral && !pSoldier->aiData.bNeutral && - (pOpponent->aiData.bOppList[ubTarget] == SEEN_CURRENTLY) + ) + ///*** UNTIL ANDREW GETS THE SIDE PARAMETERS WORKING + // && (pSoldier->side != pOpponent->side)) + { + RemoveOneOpponent(pOpponent); + } - ) - ///*** UNTIL ANDREW GETS THE SIDE PARAMETERS WORKING - // && (pSoldier->side != pOpponent->side)) - { - RemoveOneOpponent(pOpponent); - } + UpdatePersonal(pOpponent,ubTarget,NOT_HEARD_OR_SEEN,NOWHERE,0); - UpdatePersonal(pOpponent,ubTarget,NOT_HEARD_OR_SEEN,NOWHERE,0); - - gbSeenOpponents[ubLoop][ubTarget] = FALSE; - } -*/ - - ResetLastKnownLocs(pSoldier); - - if (gTacticalStatus.Team[pSoldier->bTeam].ubLastMercToRadio == ubTarget) - gTacticalStatus.Team[pSoldier->bTeam].ubLastMercToRadio = NOBODY; + gbSeenOpponents[ubLoop][ubTarget] = FALSE; + } + */ + ResetLastKnownLocs(pSoldier); + if (gTacticalStatus.Team[pSoldier->bTeam].ubLastMercToRadio == ubTarget) + gTacticalStatus.Team[pSoldier->bTeam].ubLastMercToRadio = NOBODY; } - - - -void UpdatePublic(UINT8 ubTeam, UINT16 ubID, INT8 bNewOpplist, INT32 sGridNo, INT8 bLevel) +void UpdatePublic(UINT8 ubTeam, SoldierID ubID, INT8 bNewOpplist, INT32 sGridNo, INT8 bLevel) { - INT32 cnt; - INT8 *pbPublOL; - UINT8 ubTeamMustLookAgain = FALSE, ubMadeDifference = FALSE; - SOLDIERTYPE *pSoldier; + INT32 cnt; + UINT8 ubTeamMustLookAgain = FALSE, ubMadeDifference = FALSE; + SOLDIERTYPE *pSoldier; + INT8* pbPublOL = &(gbPublicOpplist[ubTeam][ubID]); - - pbPublOL = &(gbPublicOpplist[ubTeam][ubID]); - - // if new opplist is more up-to-date, or we are just wiping it for some reason - if ((gubKnowledgeValue[*pbPublOL - OLDEST_HEARD_VALUE][bNewOpplist - OLDEST_HEARD_VALUE] > 0) || - (bNewOpplist == NOT_HEARD_OR_SEEN)) + // if new opplist is more up-to-date, or we are just wiping it for some reason + if ((gubKnowledgeValue[*pbPublOL - OLDEST_HEARD_VALUE][bNewOpplist - OLDEST_HEARD_VALUE] > 0) || + (bNewOpplist == NOT_HEARD_OR_SEEN)) { - // if this team is becoming aware of a soldier it wasn't previously aware of - if ((bNewOpplist != NOT_HEARD_OR_SEEN) && (*pbPublOL == NOT_HEARD_OR_SEEN)) - ubTeamMustLookAgain = TRUE; + // if this team is becoming aware of a soldier it wasn't previously aware of + if ((bNewOpplist != NOT_HEARD_OR_SEEN) && (*pbPublOL == NOT_HEARD_OR_SEEN)) + ubTeamMustLookAgain = TRUE; - // change the public opplist *BEFORE* anyone looks again or we'll recurse! - *pbPublOL = bNewOpplist; + // change the public opplist *BEFORE* anyone looks again or we'll recurse! + *pbPublOL = bNewOpplist; } - // always update the gridno, no matter what - gsPublicLastKnownOppLoc[ubTeam][ubID] = sGridNo; - gbPublicLastKnownOppLevel[ubTeam][ubID] = bLevel; + // always update the gridno, no matter what + gsPublicLastKnownOppLoc[ubTeam][ubID] = sGridNo; + gbPublicLastKnownOppLevel[ubTeam][ubID] = bLevel; - // if team has been told about a guy the team was completely unaware of - if (ubTeamMustLookAgain) + // if team has been told about a guy the team was completely unaware of + if (ubTeamMustLookAgain) { // then everyone on team who's not aware of guynum must look for him cnt = gTacticalStatus.Team[ubTeam].bFirstID; @@ -3162,10 +3148,10 @@ void UpdatePublic(UINT8 ubTeam, UINT16 ubID, INT8 bNewOpplist, INT32 sGridNo, IN { // if this soldier is active, in this sector, and well enough to look if (pSoldier->bActive && pSoldier->bInSector && (pSoldier->stats.bLife >= OKLIFE) && !( pSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) ) - { - // if soldier isn't aware of guynum, give him another chance to see - if (pSoldier->aiData.bOppList[ubID] == NOT_HEARD_OR_SEEN) { + // if soldier isn't aware of guynum, give him another chance to see + if (pSoldier->aiData.bOppList[ubID] == NOT_HEARD_OR_SEEN) + { if (ManLooksForMan(pSoldier,MercPtrs[ubID],UPDATEPUBLIC)) // then he actually saw guynum because of our new public knowledge ubMadeDifference = TRUE; @@ -3176,17 +3162,16 @@ void UpdatePublic(UINT8 ubTeam, UINT16 ubID, INT8 bNewOpplist, INT32 sGridNo, IN // if "Show only enemies seen" option is ON and it's this guy looking //if (pSoldier->ubID == ShowOnlySeenPerson) - // NewShowOnlySeenPerson(pSoldier); // update the string + // NewShowOnlySeenPerson(pSoldier); // update the string + } } } } - } } - -void UpdatePersonal(SOLDIERTYPE *pSoldier, UINT16 ubID, INT8 bNewOpplist, INT32 sGridNo, INT8 bLevel) +void UpdatePersonal(SOLDIERTYPE *pSoldier, SoldierID ubID, INT8 bNewOpplist, INT32 sGridNo, INT8 bLevel) { /* #ifdef RECORDOPPLIST @@ -3207,43 +3192,40 @@ void UpdatePersonal(SOLDIERTYPE *pSoldier, UINT16 ubID, INT8 bNewOpplist, INT32 - - INT8 OurMaxPublicOpplist() { - UINT32 uiLoop; - INT8 bHighestOpplist = 0; - UINT8 ubOppValue,ubHighestValue = 0; - SOLDIERTYPE * pSoldier; + UINT32 uiLoop; + INT8 bHighestOpplist = 0; + UINT8 ubOppValue,ubHighestValue = 0; + SOLDIERTYPE * pSoldier; - for (uiLoop = 0; uiLoop < guiNumMercSlots; uiLoop++) + for (uiLoop = 0; uiLoop < guiNumMercSlots; uiLoop++) { - pSoldier = MercSlots[ uiLoop ]; + pSoldier = MercSlots[ uiLoop ]; - // if this merc is inactive, at base, on assignment, or dead - if (!pSoldier || !pSoldier->stats.bLife) - continue; // next merc + // if this merc is inactive, at base, on assignment, or dead + if (!pSoldier || !pSoldier->stats.bLife) + continue; // next merc - // if this man is NEUTRAL / on our side, he's not an opponent - if (pSoldier->aiData.bNeutral || (gTacticalStatus.Team[gbPlayerNum].bSide == Menptr[pSoldier->ubID].bSide)) - continue; // next merc + // if this man is NEUTRAL / on our side, he's not an opponent + if (pSoldier->aiData.bNeutral || (gTacticalStatus.Team[gbPlayerNum].bSide == pSoldier->ubID->bSide)) + continue; // next merc - // opponent, check our public opplist value for him - ubOppValue = gubKnowledgeValue[0 - OLDEST_HEARD_VALUE][gbPublicOpplist[gbPlayerNum][pSoldier->ubID] - OLDEST_HEARD_VALUE]; + // opponent, check our public opplist value for him + ubOppValue = gubKnowledgeValue[0 - OLDEST_HEARD_VALUE][gbPublicOpplist[gbPlayerNum][pSoldier->ubID] - OLDEST_HEARD_VALUE]; - if (ubOppValue > ubHighestValue) - { - ubHighestValue = ubOppValue; - bHighestOpplist = gbPublicOpplist[gbPlayerNum][pSoldier->ubID]; - } + if (ubOppValue > ubHighestValue) + { + ubHighestValue = ubOppValue; + bHighestOpplist = gbPublicOpplist[gbPlayerNum][pSoldier->ubID]; + } } - return(bHighestOpplist); + return(bHighestOpplist); } - /* BOOLEAN VisibleAnywhere(SOLDIERTYPE *pSoldier) { @@ -3668,53 +3650,46 @@ void OurTeamSeesSomeone( SOLDIERTYPE * pSoldier, INT8 bNumReRevealed, INT8 bNumN void RadioSightings(SOLDIERTYPE *pSoldier, UINT16 ubAbout, UINT8 ubTeamToRadioTo ) { - SOLDIERTYPE *pOpponent; - INT32 iLoop; - UINT16 start,end,revealedEnemies = 0,unknownEnemies = 0,stillUnseen=TRUE; - UINT16 scrollToGuynum = NOBODY,sightedHatedOpponent = FALSE; - //UINT8 oppIsCivilian; - INT8 *pPersOL,*pbPublOL; //,dayQuote; - BOOLEAN fContactSeen; - BOOLEAN fSawCreatureForFirstTime = FALSE; - + SOLDIERTYPE *pOpponent; + INT32 iLoop; + UINT16 start, end, revealedEnemies = 0, unknownEnemies = 0, stillUnseen = TRUE; + BOOLEAN sightedHatedOpponent = FALSE; + //UINT8 oppIsCivilian; + INT8 *pPersOL,*pbPublOL; //,dayQuote; + BOOLEAN fContactSeen; + BOOLEAN fSawCreatureForFirstTime = FALSE; #ifdef TESTOPPLIST -DebugMsg( TOPIC_JA2OPPLIST, DBG_LEVEL_3, + DebugMsg( TOPIC_JA2OPPLIST, DBG_LEVEL_3, String("RADIO SIGHTINGS: for %d about %d",pSoldier->ubID,ubAbout) ); #endif - - #ifdef RECORDNET - if (!ptr->human) - fprintf(NetDebugFile,"\tNPC %d(%s) radios his sightings to his team\n",ptr->guynum,ExtMen[ptr->guynum].name); + if (!ptr->human) + fprintf(NetDebugFile,"\tNPC %d(%s) radios his sightings to his team\n",ptr->guynum,ExtMen[ptr->guynum].name); #endif - gTacticalStatus.Team[pSoldier->bTeam].ubLastMercToRadio = pSoldier->ubID; + gTacticalStatus.Team[pSoldier->bTeam].ubLastMercToRadio = pSoldier->ubID; - - - - - // who are we radioing about? - if (ubAbout == EVERYBODY) + // who are we radioing about? + if (ubAbout == EVERYBODY) { - start = 0; - end = MAXMERCS; + start = 0; + end = MAXMERCS; } - else + else { - start = ubAbout; - end = ubAbout + 1; + start = ubAbout; + end = ubAbout + 1; } - // hang a pointer to the start of our this guy's personal opplist - pPersOL = &(pSoldier->aiData.bOppList[start]); + // hang a pointer to the start of our this guy's personal opplist + pPersOL = &(pSoldier->aiData.bOppList[start]); - // hang a pointer to the start of this guy's opponents in the public opplist - pbPublOL = &(gbPublicOpplist[ubTeamToRadioTo][start]); + // hang a pointer to the start of this guy's opponents in the public opplist + pbPublOL = &(gbPublicOpplist[ubTeamToRadioTo][start]); pOpponent = MercPtrs[start]; @@ -3724,82 +3699,72 @@ DebugMsg( TOPIC_JA2OPPLIST, DBG_LEVEL_3, fContactSeen = FALSE; #ifdef TESTOPPLIST - DebugMsg( TOPIC_JA2OPPLIST, DBG_LEVEL_3, + DebugMsg( TOPIC_JA2OPPLIST, DBG_LEVEL_3, String("RS: checking %d",pOpponent->ubID) ); #endif - // make sure this merc is active, here & still alive (unconscious OK) - if (!pOpponent->bActive || !pOpponent->bInSector || !pOpponent->stats.bLife) - { -#ifdef TESTOPPLIST - DebugMsg( TOPIC_JA2OPPLIST, DBG_LEVEL_3, - String("RS: inactive/notInSector/life %d",pOpponent->ubID) ); -#endif - - - continue; // skip to the next merc - } - - // if these two mercs are on the same SIDE, then they're NOT opponents - // NEW: Apr. 21 '96: must allow ALL non-humans to get radioed about - if ((pSoldier->bSide == pOpponent->bSide) && (pOpponent->flags.uiStatusFlags & SOLDIER_PC)) - { + // make sure this merc is active, here & still alive (unconscious OK) + if (!pOpponent->bActive || !pOpponent->bInSector || !pOpponent->stats.bLife) + { #ifdef TESTOPPLIST DebugMsg( TOPIC_JA2OPPLIST, DBG_LEVEL_3, - String("RS: same side %d",pSoldier->bSide) ); -#endif - - continue; // skip to the next merc - } - - // determine whether we think we're still unseen or if "our cover's blown" - // if we know about this opponent's location for any reason - if ((pOpponent->bVisible >= 0) || gbShowEnemies) - { - // and he can see us, then gotta figure we KNOW that he can see us - if (pOpponent->aiData.bOppList[pSoldier->ubID] == SEEN_CURRENTLY) - stillUnseen = FALSE; - } - - - // if we personally don't know a thing about this opponent - if (*pPersOL == NOT_HEARD_OR_SEEN) - { -#ifdef RECORDOPPLIST - //fprintf(OpplistFile,"not heard or seen\n"); + String("RS: inactive/notInSector/life %d",pOpponent->ubID) ); #endif + continue; // skip to the next merc + } + // if these two mercs are on the same SIDE, then they're NOT opponents + // NEW: Apr. 21 '96: must allow ALL non-humans to get radioed about + if ((pSoldier->bSide == pOpponent->bSide) && (pOpponent->flags.uiStatusFlags & SOLDIER_PC)) + { #ifdef TESTOPPLIST DebugMsg( TOPIC_JA2OPPLIST, DBG_LEVEL_3, - String("RS: not heard or seen") ); + String("RS: same side %d",pSoldier->bSide) ); #endif + continue; // skip to the next merc + } - continue; // skip to the next opponent - } + // determine whether we think we're still unseen or if "our cover's blown" + // if we know about this opponent's location for any reason + if ((pOpponent->bVisible >= 0) || gbShowEnemies) + { + // and he can see us, then gotta figure we KNOW that he can see us + if (pOpponent->aiData.bOppList[pSoldier->ubID] == SEEN_CURRENTLY) + stillUnseen = FALSE; + } - // if personal knowledge is NOT more up to date and NOT the same as public - if ((!gubKnowledgeValue[*pbPublOL - OLDEST_HEARD_VALUE][*pPersOL - OLDEST_HEARD_VALUE]) && - (*pbPublOL != *pPersOL)) - { + + // if we personally don't know a thing about this opponent + if (*pPersOL == NOT_HEARD_OR_SEEN) + { #ifdef RECORDOPPLIST - //fprintf(OpplistFile,"no new knowledge (per %d, pub %d)\n",*pPersOL,*pbPublOL); + //fprintf(OpplistFile,"not heard or seen\n"); #endif - #ifdef TESTOPPLIST DebugMsg( TOPIC_JA2OPPLIST, DBG_LEVEL_3, - String("RS: no new knowledge per %d pub %d",*pPersOL,*pbPublOL) ); + String("RS: not heard or seen") ); #endif + continue; // skip to the next opponent + } - - - continue; // skip to the next opponent - } + // if personal knowledge is NOT more up to date and NOT the same as public + if ((!gubKnowledgeValue[*pbPublOL - OLDEST_HEARD_VALUE][*pPersOL - OLDEST_HEARD_VALUE]) && + (*pbPublOL != *pPersOL)) + { +#ifdef RECORDOPPLIST + //fprintf(OpplistFile,"no new knowledge (per %d, pub %d)\n",*pPersOL,*pbPublOL); +#endif +#ifdef TESTOPPLIST + DebugMsg( TOPIC_JA2OPPLIST, DBG_LEVEL_3, + String("RS: no new knowledge per %d pub %d",*pPersOL,*pbPublOL) ); +#endif + continue; // skip to the next opponent + } #ifdef RECORDOPPLIST - //fprintf(OpplistFile,"made it!\n"); + //fprintf(OpplistFile,"made it!\n"); #endif - #ifdef TESTOPPLIST DebugMsg( TOPIC_JA2OPPLIST, DBG_LEVEL_3, String("RS: made it!") ); @@ -3807,160 +3772,145 @@ DebugMsg( TOPIC_JA2OPPLIST, DBG_LEVEL_3, - // if it's our merc, and he currently sees this opponent - if (PTR_OURTEAM && (*pPersOL == SEEN_CURRENTLY) && !(( pOpponent->bSide == pSoldier->bSide) || pOpponent->aiData.bNeutral)) - { - // used by QueueDayMessage() to scroll to one of the new enemies - // scroll to the last guy seen, unless we see a hated guy, then use him! - if (!sightedHatedOpponent) - scrollToGuynum = pOpponent->ubID; - - // don't care whether and how many new enemies are seen if everyone visible - // and he's healthy enough to be a threat (so is worth talking about) - - // do the following if we're radioing to our own team; if radioing to militia - // then alert them instead - if ( ubTeamToRadioTo != MILITIA_TEAM ) + // if it's our merc, and he currently sees this opponent + if (PTR_OURTEAM && (*pPersOL == SEEN_CURRENTLY) && !(( pOpponent->bSide == pSoldier->bSide) || pOpponent->aiData.bNeutral)) { - if (!gbShowEnemies && (pOpponent->stats.bLife >= OKLIFE)) - { - // if this enemy has not been publicly seen or heard recently - if (*pbPublOL == NOT_HEARD_OR_SEEN) - { - // chalk up another "unknown" enemy - unknownEnemies++; + // don't care whether and how many new enemies are seen if everyone visible + // and he's healthy enough to be a threat (so is worth talking about) - fContactSeen = TRUE; - // if this enemy is hated by the merc doing the sighting - //if (MercHated(Proptr[ptr->characternum].p_bias,oppPtr->characternum)) - //sightedHatedOpponent = TRUE; - - // now the important part: does this enemy see him/her back? - if (pOpponent->aiData.bOppList[pSoldier->ubID] != SEEN_CURRENTLY) - { - // EXPERIENCE GAIN (10): Discovered a new enemy without being seen - StatChange(pSoldier,EXPERAMT,10,FALSE); - } - } - else + // do the following if we're radioing to our own team; if radioing to militia + // then alert them instead + if ( ubTeamToRadioTo != MILITIA_TEAM ) { + if (!gbShowEnemies && (pOpponent->stats.bLife >= OKLIFE)) + { + // if this enemy has not been publicly seen or heard recently + if (*pbPublOL == NOT_HEARD_OR_SEEN) + { + // chalk up another "unknown" enemy + unknownEnemies++; - // if he has publicly not been seen now, or anytime during this turn - if ((*pbPublOL != SEEN_CURRENTLY) && (*pbPublOL != SEEN_THIS_TURN)) + fContactSeen = TRUE; + // if this enemy is hated by the merc doing the sighting + //if (MercHated(Proptr[ptr->characternum].p_bias,oppPtr->characternum)) + //sightedHatedOpponent = TRUE; + + // now the important part: does this enemy see him/her back? + if (pOpponent->aiData.bOppList[pSoldier->ubID] != SEEN_CURRENTLY) + { + // EXPERIENCE GAIN (10): Discovered a new enemy without being seen + StatChange(pSoldier,EXPERAMT,10,FALSE); + } + } + else + { + // if he has publicly not been seen now, or anytime during this turn + if ((*pbPublOL != SEEN_CURRENTLY) && (*pbPublOL != SEEN_THIS_TURN)) { // chalk up another "revealed" enemy ++revealedEnemies; fContactSeen = TRUE; } - else - { - if ( MercPtrs[0]->stats.bLife < 10 ) + else { - //int breakpoint = 0; + if ( MercPtrs[0]->stats.bLife < 10 ) + { + //int breakpoint = 0; + } } } - } - if ( fContactSeen ) - { - if ( pSoldier->bTeam == gbPlayerNum ) + if ( fContactSeen ) { - if ( gTacticalStatus.ubCurrentTeam != gbPlayerNum ) + if ( pSoldier->bTeam == gbPlayerNum ) { - // Save some stuff! - if (gTacticalStatus.fEnemySightingOnTheirTurn) + if ( gTacticalStatus.ubCurrentTeam != gbPlayerNum ) { - // this has already come up so turn OFF the pause-all-anims flag for the previous - // person and set it for this next person - MercPtrs[gTacticalStatus.ubEnemySightingOnTheirTurnEnemyID]->flags.fPauseAllAnimation = FALSE; - } - else - { - gTacticalStatus.fEnemySightingOnTheirTurn = TRUE; - } - gTacticalStatus.ubEnemySightingOnTheirTurnEnemyID = pOpponent->ubID; - gTacticalStatus.ubEnemySightingOnTheirTurnPlayerID = pSoldier->ubID; - gTacticalStatus.uiTimeSinceDemoOn = GetJA2Clock( ); + // Save some stuff! + if (gTacticalStatus.fEnemySightingOnTheirTurn) + { + // this has already come up so turn OFF the pause-all-anims flag for the previous + // person and set it for this next person + gTacticalStatus.ubEnemySightingOnTheirTurnEnemyID->flags.fPauseAllAnimation = FALSE; + } + else + { + gTacticalStatus.fEnemySightingOnTheirTurn = TRUE; + } + gTacticalStatus.ubEnemySightingOnTheirTurnEnemyID = pOpponent->ubID; + gTacticalStatus.ubEnemySightingOnTheirTurnPlayerID = pSoldier->ubID; + gTacticalStatus.uiTimeSinceDemoOn = GetJA2Clock( ); - pOpponent->flags.fPauseAllAnimation = TRUE; + pOpponent->flags.fPauseAllAnimation = TRUE; + } + } + if ( pOpponent->flags.uiStatusFlags & SOLDIER_MONSTER ) + { + gfPlayerTeamSawCreatures = TRUE; + } + + // ATE: Added for bloodcat... + if ( pOpponent->ubBodyType == BLOODCAT ) + { + // 2 is for bloodcat + gfPlayerTeamSawCreatures = 2; } } if ( pOpponent->flags.uiStatusFlags & SOLDIER_MONSTER ) { - gfPlayerTeamSawCreatures = TRUE; - } - - // ATE: Added for bloodcat... - if ( pOpponent->ubBodyType == BLOODCAT ) - { - // 2 is for bloodcat - gfPlayerTeamSawCreatures = 2; - } - - } - - if ( pOpponent->flags.uiStatusFlags & SOLDIER_MONSTER ) - { - if ( !(gMercProfiles[ pSoldier->ubProfile ].ubMiscFlags & PROFILE_MISC_FLAG_HAVESEENCREATURE) ) - { - fSawCreatureForFirstTime = TRUE; + if ( !(gMercProfiles[ pSoldier->ubProfile ].ubMiscFlags & PROFILE_MISC_FLAG_HAVESEENCREATURE) ) + { + fSawCreatureForFirstTime = TRUE; + } } } - } - } - else - { - // radioing to militia that we saw someone! alert them! - if ( gTacticalStatus.Team[ MILITIA_TEAM ].bTeamActive && !gTacticalStatus.Team[ MILITIA_TEAM ].bAwareOfOpposition ) + else { - HandleInitialRedAlert( MILITIA_TEAM, FALSE ); + // radioing to militia that we saw someone! alert them! + if ( gTacticalStatus.Team[ MILITIA_TEAM ].bTeamActive && !gTacticalStatus.Team[ MILITIA_TEAM ].bAwareOfOpposition ) + { + HandleInitialRedAlert( MILITIA_TEAM, FALSE ); + } } - } - } // end of our team's merc sees new opponent + } // end of our team's merc sees new opponent - // IF WE'RE HERE, OUR PERSONAL INFORMATION IS AT LEAST AS UP-TO-DATE - // AS THE PUBLIC KNOWLEDGE, SO WE WILL REPLACE THE PUBLIC KNOWLEDGE + // IF WE'RE HERE, OUR PERSONAL INFORMATION IS AT LEAST AS UP-TO-DATE + // AS THE PUBLIC KNOWLEDGE, SO WE WILL REPLACE THE PUBLIC KNOWLEDGE #ifdef RECORDOPPLIST - fprintf(OpplistFile,"UpdatePublic (RadioSightings) for team %d about %d\n",ptr->team,oppPtr->guynum); + fprintf(OpplistFile,"UpdatePublic (RadioSightings) for team %d about %d\n",ptr->team,oppPtr->guynum); #endif - - #ifdef TESTOPPLIST - DebugMsg( TOPIC_JA2OPPLIST, DBG_LEVEL_3, + DebugMsg( TOPIC_JA2OPPLIST, DBG_LEVEL_3, String("...............UPDATE PUBLIC: soldier %d SEEING soldier %d",pSoldier->ubID,pOpponent->ubID) ); #endif - - - - UpdatePublic(ubTeamToRadioTo,pOpponent->ubID,*pPersOL,gsLastKnownOppLoc[pSoldier->ubID][pOpponent->ubID],gbLastKnownOppLevel[pSoldier->ubID][pOpponent->ubID]); + UpdatePublic(ubTeamToRadioTo,pOpponent->ubID,*pPersOL,gsLastKnownOppLoc[pSoldier->ubID][pOpponent->ubID],gbLastKnownOppLevel[pSoldier->ubID][pOpponent->ubID]); } - // if soldier heard a misc noise more important that his team's public one - if (pSoldier->aiData.ubNoiseVolume > gubPublicNoiseVolume[ubTeamToRadioTo]) + // if soldier heard a misc noise more important that his team's public one + if (pSoldier->aiData.ubNoiseVolume > gubPublicNoiseVolume[ubTeamToRadioTo]) { - // replace the soldier's team's public noise with his - gsPublicNoiseGridNo[ubTeamToRadioTo] = pSoldier->aiData.sNoiseGridno; - gbPublicNoiseLevel[ubTeamToRadioTo] = pSoldier->bNoiseLevel; - gubPublicNoiseVolume[ubTeamToRadioTo] = pSoldier->aiData.ubNoiseVolume; + // replace the soldier's team's public noise with his + gsPublicNoiseGridNo[ubTeamToRadioTo] = pSoldier->aiData.sNoiseGridno; + gbPublicNoiseLevel[ubTeamToRadioTo] = pSoldier->bNoiseLevel; + gubPublicNoiseVolume[ubTeamToRadioTo] = pSoldier->aiData.ubNoiseVolume; } - // if this soldier is on the local team + // if this soldier is on the local team if (PTR_OURTEAM) { - // don't trigger sighting quotes or stop merc's movement if everyone visible - //if (!(gTacticalStatus.uiFlags & SHOW_ALL_MERCS)) - { - // if we've revealed any enemies, or seen any previously unknown enemies - if (revealedEnemies || unknownEnemies) + // don't trigger sighting quotes or stop merc's movement if everyone visible + //if (!(gTacticalStatus.uiFlags & SHOW_ALL_MERCS)) { + // if we've revealed any enemies, or seen any previously unknown enemies + if (revealedEnemies || unknownEnemies) + { // First check for a virgin map and set to false if we see our first guy.... // Only if this guy is an ememy! - OurTeamSeesSomeone( pSoldier, revealedEnemies, unknownEnemies ); } else if (fSawCreatureForFirstTime) @@ -3968,8 +3918,7 @@ DebugMsg( TOPIC_JA2OPPLIST, DBG_LEVEL_3, gMercProfiles[ pSoldier->ubProfile ].ubMiscFlags |= PROFILE_MISC_FLAG_HAVESEENCREATURE; TacticalCharacterDialogue( pSoldier, QUOTE_FIRSTTIME_GAME_SEE_CREATURE ); } - - } + } } } diff --git a/Tactical/opplist.h b/Tactical/opplist.h index b8791758..381d8f65 100644 --- a/Tactical/opplist.h +++ b/Tactical/opplist.h @@ -117,7 +117,7 @@ void ManSeesMan(SOLDIERTYPE *pSoldier, SOLDIERTYPE *pOpponent, INT32 sOppGridNo, void DecideTrueVisibility(SOLDIERTYPE *pSoldier, UINT8 ubLocate); void AddOneOpponent(SOLDIERTYPE *pSoldier); void RemoveOneOpponent(SOLDIERTYPE *pSoldier); -void UpdatePersonal(SOLDIERTYPE *pSoldier, UINT16 ubID, INT8 bNewOpplist, INT32 sGridNo, INT8 bLevel); +void UpdatePersonal(SOLDIERTYPE *pSoldier, SoldierID ubID, INT8 bNewOpplist, INT32 sGridNo, INT8 bLevel); INT16 MaxNormalDistanceVisible( void ); INT16 DistanceVisible( SOLDIERTYPE *pSoldier, INT8 bFacingDir, INT8 bSubjectDir, INT32 sSubjectGridNo, INT8 bLevel, const BOOLEAN& isCowering, const UINT8& tunnelVision); void ResetLastKnownLocs(SOLDIERTYPE *ptr); @@ -129,7 +129,7 @@ void InitOpponentKnowledgeSystem(void); void InitSoldierOppList(SOLDIERTYPE *pSoldier); void BetweenTurnsVisibilityAdjustments(void); void RemoveManAsTarget(SOLDIERTYPE *pSoldier); -void UpdatePublic(UINT8 ubTeam, UINT16 ubID, INT8 bNewOpplist, INT32 sGridNo, INT8 bLevel ); +void UpdatePublic(UINT8 ubTeam, SoldierID ubID, INT8 bNewOpplist, INT32 sGridNo, INT8 bLevel ); void RadioSightings(SOLDIERTYPE *pSoldier, UINT16 ubAbout, UINT8 ubTeamToRadioTo ); void OurTeamRadiosRandomlyAbout(UINT16 ubAbout); void DebugSoldierPage1( ); @@ -177,4 +177,4 @@ INT32 MaxDistanceVisible( void ); // HEADROCK HAM 3.6: Moved here from cpp void MakeBloodcatsHostile( void ); -#endif \ No newline at end of file +#endif From cbf53f8848a44e9fafacff59eb4d5d05476bb190 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 17 Nov 2024 10:26:01 +0200 Subject: [PATCH 068/192] TacticalStatusType::ubLastRequesterSurgeryTargetID to SoldierID --- Tactical/Overhead.cpp | 10 +++++----- Tactical/Overhead.h | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index 3676eeb7..6b5223ab 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -783,15 +783,15 @@ BOOLEAN InitOverhead( ) gTacticalStatus.uiTimeOfLastInput = GetJA2Clock(); gTacticalStatus.uiTimeSinceDemoOn = GetJA2Clock(); gTacticalStatus.uiCountdownToRestart = GetJA2Clock(); - gTacticalStatus.fGoingToEnterDemo = FALSE; - gTacticalStatus.fNOTDOLASTDEMO = FALSE; + gTacticalStatus.fGoingToEnterDemo = FALSE; + gTacticalStatus.fNOTDOLASTDEMO = FALSE; if (is_networked) - gTacticalStatus.fDidGameJustStart = FALSE; + gTacticalStatus.fDidGameJustStart = FALSE; else - gTacticalStatus.fDidGameJustStart = TRUE; + gTacticalStatus.fDidGameJustStart = TRUE; - gTacticalStatus.ubLastRequesterTargetID = NO_PROFILE; + gTacticalStatus.ubLastRequesterTargetID = NO_PROFILE; gTacticalStatus.ubLastRequesterSurgeryTargetID = NOBODY; // SANDRO - reset surgery requester too for ( cnt = 0; cnt < NUM_PANIC_TRIGGERS; cnt++ ) diff --git a/Tactical/Overhead.h b/Tactical/Overhead.h index b083cda3..027a65b2 100644 --- a/Tactical/Overhead.h +++ b/Tactical/Overhead.h @@ -158,7 +158,7 @@ struct TacticalStatusType UINT16 sCreatureTenseQuoteDelay; UINT32 uiCreatureTenseQuoteLastUpdate; // SANDRO - added these - UINT16 ubLastRequesterSurgeryTargetID; + SoldierID ubLastRequesterSurgeryTargetID; UINT8 ubInterruptPending; // sevenfm: Ctrl+D disable interrupts BOOLEAN ubDisablePlayerInterrupts; From 3e1c87f53c293f21cf861a0275b52a1f145845a1 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 17 Nov 2024 10:27:42 +0200 Subject: [PATCH 069/192] Remove unused global gusOldSelectedSoldier --- Tactical/Interface.cpp | 2 -- Tactical/Overhead.h | 1 - TileEngine/worlddef.cpp | 2 -- 3 files changed, 5 deletions(-) diff --git a/Tactical/Interface.cpp b/Tactical/Interface.cpp index 8ba363ec..6c4aba41 100644 --- a/Tactical/Interface.cpp +++ b/Tactical/Interface.cpp @@ -164,8 +164,6 @@ MOUSE_REGION gMenuOverlayRegion; MOUSE_REGION gBottomPanalRegion; -UINT16 gusOldSelectedSoldier = NOBODY; - // OVerlay ID INT32 giPopupSlideMessageOverlay = -1; UINT16 gusOverlayPopupBoxWidth, gusOverlayPopupBoxHeight; diff --git a/Tactical/Overhead.h b/Tactical/Overhead.h index 027a65b2..0b7808fa 100644 --- a/Tactical/Overhead.h +++ b/Tactical/Overhead.h @@ -171,7 +171,6 @@ extern UINT8 gbPlayerNum; extern INT8 gbShowEnemies; extern SoldierID gusSelectedSoldier; -extern UINT16 gusOldSelectedSoldier; extern CHAR8 gzAlertStr[][ 30 ]; extern CHAR8 gzActionStr[][ 30 ]; diff --git a/TileEngine/worlddef.cpp b/TileEngine/worlddef.cpp index 6265f093..2b78ad20 100644 --- a/TileEngine/worlddef.cpp +++ b/TileEngine/worlddef.cpp @@ -3327,8 +3327,6 @@ BOOLEAN NewWorld( INT32 nMapRows, INT32 nMapCols ) UINT16 NewIndex; INT32 cnt; - gusSelectedSoldier = gusOldSelectedSoldier = NOBODY; - AdjustSoldierCreationStartValues( ); TrashWorld(); From 3fe6e4f3d89ab884df623bfb96b14214e30af559 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 17 Nov 2024 10:33:29 +0200 Subject: [PATCH 070/192] GetSoldier() to SoldierID --- Tactical/Handle UI Plan.cpp | 2 +- Tactical/Overhead.cpp | 8 ++++---- Tactical/Overhead.h | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Tactical/Handle UI Plan.cpp b/Tactical/Handle UI Plan.cpp index 0669e172..de94ba0a 100644 --- a/Tactical/Handle UI Plan.cpp +++ b/Tactical/Handle UI Plan.cpp @@ -79,7 +79,7 @@ BOOLEAN AddUIPlan( INT32 sGridNo, UINT8 ubPlanID ) if ( TacticalCreateSoldier( &MercCreateStruct, &ubNewIndex ) ) { // Get pointer to soldier - GetSoldier( &pPlanSoldier, (UINT16)ubNewIndex ); + GetSoldier( &pPlanSoldier, ubNewIndex ); pPlanSoldier->sPlannedTargetX = -1; pPlanSoldier->sPlannedTargetY = -1; diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index 6b5223ab..cadb4815 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -832,21 +832,21 @@ BOOLEAN ShutdownOverhead( ) return( TRUE ); } -BOOLEAN GetSoldier( SOLDIERTYPE **ppSoldier, UINT16 usSoldierIndex ) +BOOLEAN GetSoldier( SOLDIERTYPE **ppSoldier, SoldierID usSoldierIndex ) { // Check range of index given *ppSoldier = NULL; - if ( usSoldierIndex < 0 || usSoldierIndex > TOTAL_SOLDIERS-1 ) + if ( usSoldierIndex >= NOBODY ) { // Set debug message return( FALSE ); } // Check if a guy exists here // Does another soldier exist here? - if ( MercPtrs[ usSoldierIndex ]->bActive ) + if ( usSoldierIndex->bActive ) { // Set Existing guy - *ppSoldier = MercPtrs[ usSoldierIndex ]; + *ppSoldier = usSoldierIndex; return( TRUE); } else diff --git a/Tactical/Overhead.h b/Tactical/Overhead.h index 0b7808fa..b5e15019 100644 --- a/Tactical/Overhead.h +++ b/Tactical/Overhead.h @@ -203,7 +203,7 @@ void ShutdownTacticalEngine( ); BOOLEAN InitOverhead( ); BOOLEAN ShutdownOverhead( ); -BOOLEAN GetSoldier( SOLDIERTYPE **ppSoldier, UINT16 usSoldierIndex ); +BOOLEAN GetSoldier( SOLDIERTYPE **ppSoldier, SoldierID usSoldierIndex ); UINT32 CountNonVehiclesOnPlayerTeam( ); From ab94d33bec1e29d1f210633e89cccba5a737b744 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 17 Nov 2024 10:36:10 +0200 Subject: [PATCH 071/192] PlaySoldierJA2Sample() to SoldierID --- Utils/Sound Control.cpp | 13 ++++++------- Utils/Sound Control.h | 6 ++++-- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/Utils/Sound Control.cpp b/Utils/Sound Control.cpp index 2598dc28..f51b6347 100644 --- a/Utils/Sound Control.cpp +++ b/Utils/Sound Control.cpp @@ -575,16 +575,15 @@ UINT32 PlayJA2AmbientRandom( UINT32 usNum, UINT32 uiTimeMin, UINT32 uiTimeMax) -UINT32 PlaySoldierJA2Sample( UINT16 usID, UINT32 usNum, UINT32 usRate, UINT32 ubVolume, UINT32 ubLoops, UINT32 uiPan, BOOLEAN fCheck ) +UINT32 PlaySoldierJA2Sample( SoldierID usID, UINT32 usNum, UINT32 usRate, UINT32 ubVolume, UINT32 ubLoops, UINT32 uiPan, BOOLEAN fCheck ) { - if( !( gTacticalStatus.uiFlags & LOADING_SAVED_GAME ) ) { - // CHECK IF GUY IS ON SCREEN BEFORE PLAYING! - if ( ( MercPtrs[ usID ]->bVisible != -1 ) || !fCheck ) - { - return( PlayJA2Sample( usNum, usRate, CalculateSoundEffectsVolume( ubVolume ), ubLoops, uiPan ) ); - } + // CHECK IF GUY IS ON SCREEN BEFORE PLAYING! + if ( ( usID->bVisible != -1 ) || !fCheck ) + { + return( PlayJA2Sample( usNum, usRate, CalculateSoundEffectsVolume( ubVolume ), ubLoops, uiPan ) ); + } } return( 0 ); diff --git a/Utils/Sound Control.h b/Utils/Sound Control.h index 51a31a9b..64efce99 100644 --- a/Utils/Sound Control.h +++ b/Utils/Sound Control.h @@ -5,6 +5,8 @@ #ifndef SOUND_CONTROL_H #define SOUND_CONTROL_H +#include "Overhead Types.h" + // == Lesh modifications ====== #define FARLEFT 0 #define LEFTSIDE 96 @@ -423,7 +425,7 @@ UINT32 PlayJA2StreamingSampleFromFile( STR8 szFileName, UINT32 usRate, UINT32 ub UINT32 PlayJA2Ambient( UINT32 usNum, UINT32 ubVolume, UINT32 ubLoops); UINT32 PlayJA2AmbientRandom(UINT32 usNum, UINT32 uiTimeMin, UINT32 uiTimeMax); -UINT32 PlaySoldierJA2Sample( UINT16 usID, UINT32 usNum, UINT32 usRate, UINT32 ubVolume, UINT32 ubLoops, UINT32 uiPan, BOOLEAN fCheck ); +UINT32 PlaySoldierJA2Sample( SoldierID usID, UINT32 usNum, UINT32 usRate, UINT32 ubVolume, UINT32 ubLoops, UINT32 uiPan, BOOLEAN fCheck ); @@ -465,4 +467,4 @@ void SetPositionSndGridNo( INT32 iPositionSndIndex, INT32 sGridNo ); -#endif \ No newline at end of file +#endif From 30e6b9008c84e3c1f188503b1b95bbf96bec719a Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 17 Nov 2024 11:15:39 +0200 Subject: [PATCH 072/192] SetUIBusy() & UnSetUIBusy() to SoldierID --- Tactical/Handle UI.cpp | 4 ++-- Tactical/Handle UI.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Tactical/Handle UI.cpp b/Tactical/Handle UI.cpp index 92eeec76..cb1f7bf8 100644 --- a/Tactical/Handle UI.cpp +++ b/Tactical/Handle UI.cpp @@ -6708,7 +6708,7 @@ BOOLEAN HandleTalkInit( ) -void SetUIBusy( UINT16 ubID ) +void SetUIBusy( SoldierID ubID ) { if ( (gTacticalStatus.uiFlags & INCOMBAT ) && ( gTacticalStatus.uiFlags & TURNBASED ) && ( gTacticalStatus.ubCurrentTeam == gbPlayerNum ) ) { @@ -6720,7 +6720,7 @@ void SetUIBusy( UINT16 ubID ) } } -void UnSetUIBusy( UINT16 ubID ) +void UnSetUIBusy( SoldierID ubID ) { if ( gfUserTurnRegionActive && (gTacticalStatus.uiFlags & INCOMBAT ) && ( gTacticalStatus.uiFlags & TURNBASED ) && ( gTacticalStatus.ubCurrentTeam == gbPlayerNum ) ) { diff --git a/Tactical/Handle UI.h b/Tactical/Handle UI.h index 5109cc85..b72930ae 100644 --- a/Tactical/Handle UI.h +++ b/Tactical/Handle UI.h @@ -341,8 +341,8 @@ BOOLEAN HandleTalkInit( ); BOOLEAN HandleCheckForExitArrowsInput( BOOLEAN fAdjustForConfirm ); -void SetUIBusy( UINT16 ubID ); -void UnSetUIBusy( UINT16 ubID ); +void SetUIBusy( SoldierID ubID ); +void UnSetUIBusy( SoldierID ubID ); UINT32 UIHandleLUIEndLock( UI_EVENT *pUIEvent ); From f58cf588a67866485acf19c2a6360e14a1abead6 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 17 Nov 2024 14:20:37 +0200 Subject: [PATCH 073/192] Mark TacticalStatusType::sSlideReason as _UNUSED Removed from function call parameters at the same time. It was supplied to SlideTo, SlideToLocation and SoldierLocationRelativeToScreen but was never used. --- Ja2/SaveLoadGame.cpp | 2 +- Tactical/Dialogue Control.cpp | 2 +- Tactical/Interface Panels.cpp | 6 +++--- Tactical/Interface.cpp | 1 - Tactical/Overhead.cpp | 24 ++++++++++-------------- Tactical/Overhead.h | 6 +++--- Tactical/Rotting Corpses.cpp | 2 +- Tactical/Soldier Find.cpp | 2 +- Tactical/Soldier Find.h | 2 +- Tactical/TeamTurns.cpp | 8 ++++---- Tactical/fov.cpp | 2 +- Tactical/opplist.cpp | 6 +++--- TileEngine/renderworld.cpp | 2 +- 13 files changed, 30 insertions(+), 35 deletions(-) diff --git a/Ja2/SaveLoadGame.cpp b/Ja2/SaveLoadGame.cpp index 9e43a098..a85ad173 100644 --- a/Ja2/SaveLoadGame.cpp +++ b/Ja2/SaveLoadGame.cpp @@ -7661,7 +7661,7 @@ 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); diff --git a/Tactical/Dialogue Control.cpp b/Tactical/Dialogue Control.cpp index 52d13596..75e5244a 100644 --- a/Tactical/Dialogue Control.cpp +++ b/Tactical/Dialogue Control.cpp @@ -977,7 +977,7 @@ void HandleDialogue( ) gTacticalStatus.fLockItemLocators = FALSE; // Slide to location! - SlideToLocation( 0, QItem.uiSpecialEventData ); + SlideToLocation( QItem.uiSpecialEventData ); // Flugente: only set up face if we can access correctly if ( QItem.iFaceIndex >= 0 ) diff --git a/Tactical/Interface Panels.cpp b/Tactical/Interface Panels.cpp index fee3becd..99e7d55d 100644 --- a/Tactical/Interface Panels.cpp +++ b/Tactical/Interface Panels.cpp @@ -6307,7 +6307,7 @@ void HandleLocateSelectMerc( UINT16 ubID, INT8 bFlag ) // If we are currently selected, slide to location if ( ubID == gusSelectedSoldier ) { - SlideTo( NOWHERE, gusSelectedSoldier, NOBODY ,SETLOCATOR); + SlideTo(gusSelectedSoldier, SETLOCATOR); } else { @@ -6318,7 +6318,7 @@ void HandleLocateSelectMerc( UINT16 ubID, INT8 bFlag ) { if ( ubID == gusSelectedSoldier ) { - SlideTo( NOWHERE, gusSelectedSoldier, NOBODY ,SETLOCATOR ); + SlideTo(gusSelectedSoldier, SETLOCATOR ); } else { @@ -6334,7 +6334,7 @@ void HandleLocateSelectMerc( UINT16 ubID, INT8 bFlag ) // If we are currently selected, slide to location if ( ubID == gusSelectedSoldier ) { - SlideTo( NOWHERE, gusSelectedSoldier, NOBODY ,DONTSETLOCATOR); + SlideTo(gusSelectedSoldier, DONTSETLOCATOR); } else { diff --git a/Tactical/Interface.cpp b/Tactical/Interface.cpp index 6c4aba41..34ebaff3 100644 --- a/Tactical/Interface.cpp +++ b/Tactical/Interface.cpp @@ -5712,7 +5712,6 @@ void BeginMultiPurposeLocator( INT32 sGridNo, INT8 bLevel, BOOLEAN fSlideTo ) // sGridNo here for DG compatibility gTacticalStatus.sSlideTarget = sGridNo; - gTacticalStatus.sSlideReason = NOBODY; // Plot new path! gfPlotNewMovement = TRUE; diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index cadb4815..7c06c46d 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -3551,11 +3551,8 @@ void LocateGridNo( INT32 sGridNo ) -void SlideTo(INT32 sGridNo, UINT16 usSoldierID , UINT16 usReasonID, BOOLEAN fSetLocator) +void SlideTo(SoldierID usSoldierID, BOOLEAN fSetLocator) { - INT32 cnt; - - if ( usSoldierID == NOBODY ) { return; @@ -3563,7 +3560,7 @@ void SlideTo(INT32 sGridNo, UINT16 usSoldierID , UINT16 usReasonID, BOOLEAN fSet if ( fSetLocator == SETANDREMOVEPREVIOUSLOCATOR ) { - for ( cnt = 0; cnt < TOTAL_SOLDIERS; cnt++ ) + for (INT32 cnt = 0; cnt < TOTAL_SOLDIERS; cnt++ ) { if ( MercPtrs[ cnt ]->bActive && MercPtrs[ cnt ]->bInSector ) { @@ -3592,7 +3589,7 @@ void SlideTo(INT32 sGridNo, UINT16 usSoldierID , UINT16 usReasonID, BOOLEAN fSet } -void SlideToLocation( UINT16 usReasonID, INT32 sDestGridNo ) +void SlideToLocation( INT32 sDestGridNo ) { if (TileIsOutOfBounds(sDestGridNo)) { @@ -3607,7 +3604,6 @@ void SlideToLocation( UINT16 usReasonID, INT32 sDestGridNo ) // sGridNo here for DG compatibility gTacticalStatus.sSlideTarget = sDestGridNo; - gTacticalStatus.sSlideReason = usReasonID; // Plot new path! gfPlotNewMovement = TRUE; @@ -8014,7 +8010,7 @@ void CycleThroughKnownEnemies( BOOLEAN backward ) //LocateSoldier( pSoldier->ubID, 1 ); //ATE: Change to Slide To... - SlideTo( 0, pSoldier->ubID, 0, SETANDREMOVEPREVIOUSLOCATOR ); + SlideTo( pSoldier->ubID, SETANDREMOVEPREVIOUSLOCATOR ); return; } else @@ -8043,7 +8039,7 @@ void CycleThroughKnownEnemies( BOOLEAN backward ) //LocateSoldier( pSoldier->ubID, 1 ); //ATE: Change to Slide To... - SlideTo( 0, pSoldier->ubID, 0, SETANDREMOVEPREVIOUSLOCATOR ); + SlideTo( pSoldier->ubID, SETANDREMOVEPREVIOUSLOCATOR ); return; } else @@ -8100,7 +8096,7 @@ void CycleVisibleEnemies( SOLDIERTYPE *pSrcSoldier ) pSrcSoldier->ubLastEnemyCycledID = (UINT16)cnt; //ATE: Change to Slide To... - SlideTo( 0, pSoldier->ubID, 0, SETANDREMOVEPREVIOUSLOCATOR ); + SlideTo( pSoldier->ubID, SETANDREMOVEPREVIOUSLOCATOR ); ChangeInterfaceLevel( pSoldier->pathing.bLevel ); return; @@ -8128,7 +8124,7 @@ void CycleVisibleEnemies( SOLDIERTYPE *pSrcSoldier ) pSrcSoldier->ubLastEnemyCycledID = (UINT16)cnt; //ATE: Change to Slide To... - SlideTo( 0, pSoldier->ubID, 0, SETANDREMOVEPREVIOUSLOCATOR ); + SlideTo( pSoldier->ubID, SETANDREMOVEPREVIOUSLOCATOR ); ChangeInterfaceLevel( pSoldier->pathing.bLevel ); return; @@ -8163,7 +8159,7 @@ void CycleVisibleEnemiesBackward( SOLDIERTYPE *pSrcSoldier ) pSrcSoldier->ubLastEnemyCycledID = (UINT16)cnt; //ATE: Change to Slide To... - SlideTo( 0, pSoldier->ubID, 0, SETANDREMOVEPREVIOUSLOCATOR ); + SlideTo( pSoldier->ubID, SETANDREMOVEPREVIOUSLOCATOR ); ChangeInterfaceLevel( pSoldier->pathing.bLevel ); return; @@ -8192,7 +8188,7 @@ void CycleVisibleEnemiesBackward( SOLDIERTYPE *pSrcSoldier ) pSrcSoldier->ubLastEnemyCycledID = (UINT16)cnt; //ATE: Change to Slide To... - SlideTo( 0, pSoldier->ubID, 0, SETANDREMOVEPREVIOUSLOCATOR ); + SlideTo( pSoldier->ubID, SETANDREMOVEPREVIOUSLOCATOR ); ChangeInterfaceLevel( pSoldier->pathing.bLevel ); return; @@ -9884,7 +9880,7 @@ SOLDIERTYPE *InternalReduceAttackBusyCount( ) // Turn off item lock for locators... gTacticalStatus.fLockItemLocators = FALSE; // Slide to location! - SlideToLocation( 0, gTacticalStatus.usItemsSeenOnAttackGridNo ); + SlideToLocation( gTacticalStatus.usItemsSeenOnAttackGridNo ); } } diff --git a/Tactical/Overhead.h b/Tactical/Overhead.h index b5e15019..20c03e26 100644 --- a/Tactical/Overhead.h +++ b/Tactical/Overhead.h @@ -64,7 +64,7 @@ struct TacticalStatusType TacticalTeamType Team[ MAXTEAMS ]; UINT8 ubCurrentTeam; INT32 sSlideTarget; - INT16 sSlideReason; + INT16 sSlideReason_UNUSED; UINT32 uiTimeSinceMercAIStart; INT8 fPanicFlags; INT32 sPanicTriggerGridNoUnused; @@ -233,8 +233,8 @@ void LocateGridNo( INT32 sGridNo ); void LocateSoldier( SoldierID usID, BOOLEAN fSetLocator); void BeginTeamTurn( UINT8 ubTeam ); -void SlideTo(INT32 sGridNo, UINT16 usSoldierID , UINT16 usReasonID, BOOLEAN fSetLocator) ; -void SlideToLocation( UINT16 usReasonID, INT32 sDestGridNo ); +void SlideTo(SoldierID usSoldierID, BOOLEAN fSetLocator) ; +void SlideToLocation( INT32 sDestGridNo ); void RebuildAllSoldierShadeTables( ); void HandlePlayerTeamMemberDeath( SOLDIERTYPE *pSoldier ); diff --git a/Tactical/Rotting Corpses.cpp b/Tactical/Rotting Corpses.cpp index b5346fb6..0ca90c94 100644 --- a/Tactical/Rotting Corpses.cpp +++ b/Tactical/Rotting Corpses.cpp @@ -1436,7 +1436,7 @@ void MercLooksForCorpses( SOLDIERTYPE *pSoldier ) BeginMultiPurposeLocator( sGridNo, pCorpse->def.bLevel, FALSE ); // Slide to... - SlideToLocation( 0, sGridNo ); + SlideToLocation( sGridNo ); return; } diff --git a/Tactical/Soldier Find.cpp b/Tactical/Soldier Find.cpp index 718cf8ee..50e6b05e 100644 --- a/Tactical/Soldier Find.cpp +++ b/Tactical/Soldier Find.cpp @@ -798,7 +798,7 @@ BOOLEAN SoldierOnVisibleWorldTile( SOLDIERTYPE *pSoldier ) -BOOLEAN SoldierLocationRelativeToScreen( INT32 sGridNo, UINT16 usReasonID, INT8 *pbDirection, UINT32 *puiScrollFlags ) +BOOLEAN SoldierLocationRelativeToScreen( INT32 sGridNo, INT8 *pbDirection, UINT32 *puiScrollFlags ) { INT16 sWorldX; INT16 sWorldY; diff --git a/Tactical/Soldier Find.h b/Tactical/Soldier Find.h index e35fc20a..f57b7c39 100644 --- a/Tactical/Soldier Find.h +++ b/Tactical/Soldier Find.h @@ -40,7 +40,7 @@ BOOLEAN CycleSoldierFindStack( INT32 usMapPos ); BOOLEAN GridNoOnScreen( INT32 sGridNo ); BOOLEAN SoldierOnScreen( SoldierID usID ); -BOOLEAN SoldierLocationRelativeToScreen( INT32 sGridNo, UINT16 usReasonID, INT8 *pbDirection, UINT32 *puiScrollFlags ); +BOOLEAN SoldierLocationRelativeToScreen( INT32 sGridNo, INT8 *pbDirection, UINT32 *puiScrollFlags ); void GetSoldierScreenPos( SOLDIERTYPE *pSoldier, INT16 *psScreenX, INT16 *psScreenY ); void GetSoldierAnimDims( SOLDIERTYPE *pSoldier, INT16 *psHeight, INT16 *psWidth ); void GetSoldierAnimOffsets( SOLDIERTYPE *pSoldier, INT16 *sOffsetX, INT16 *sOffsetY ); diff --git a/Tactical/TeamTurns.cpp b/Tactical/TeamTurns.cpp index 0bc3e181..fd496bd5 100644 --- a/Tactical/TeamTurns.cpp +++ b/Tactical/TeamTurns.cpp @@ -225,7 +225,7 @@ void StartPlayerTeamTurn( BOOLEAN fDoBattleSnd, BOOLEAN fEnteringCombatMode ) // Slide to selected guy... if ( gusSelectedSoldier != NOBODY ) { - SlideTo( NOWHERE, gusSelectedSoldier, NOBODY ,SETLOCATOR); + SlideTo(gusSelectedSoldier, SETLOCATOR); if ( fDoBattleSnd ) { @@ -688,7 +688,7 @@ void DisplayHiddenInterrupt( SOLDIERTYPE * pSoldier ) if (pSoldier->bVisible != -1 ) { - SlideTo( NOWHERE, pSoldier->ubID, NOBODY ,SETLOCATOR); + SlideTo( pSoldier->ubID, SETLOCATOR); } if(is_client) @@ -961,7 +961,7 @@ void StartInterrupt( void ) SelectSoldier( ubFirstInterrupter, TRUE, TRUE ); // ATE; Slide to guy who got interrupted! - SlideTo( NOWHERE, gubLastInterruptedGuy, NOBODY, SETLOCATOR); + SlideTo( gubLastInterruptedGuy, SETLOCATOR); // Dirty panel interface! fInterfacePanelDirty = DIRTYLEVEL2; @@ -1329,7 +1329,7 @@ void EndInterrupt( BOOLEAN fMarkInterruptOccurred ) if ( gusSelectedSoldier != NOBODY ) { - SlideTo( NOWHERE, gusSelectedSoldier, NOBODY ,SETLOCATOR); + SlideTo( gusSelectedSoldier, SETLOCATOR); // Say ATTENTION SOUND... gusSelectedSoldier->DoMercBattleSound( BATTLE_SOUND_ATTN1 ); diff --git a/Tactical/fov.cpp b/Tactical/fov.cpp index ea893476..eaf173a2 100644 --- a/Tactical/fov.cpp +++ b/Tactical/fov.cpp @@ -765,7 +765,7 @@ void RevealRoofsAndItems(SOLDIERTYPE *pSoldier, UINT32 itemsToo, BOOLEAN fShowLo // Turn off item lock for locators... gTacticalStatus.fLockItemLocators = FALSE; // Slide to location! - SlideToLocation( 0, marker ); + SlideToLocation( marker ); } } diff --git a/Tactical/opplist.cpp b/Tactical/opplist.cpp index 46cbd3b4..d2649faf 100644 --- a/Tactical/opplist.cpp +++ b/Tactical/opplist.cpp @@ -2798,7 +2798,7 @@ if(SEE_MENT) { //SlideTo(0,pOpponent->ubID, pSoldier->ubID, SETLOCATOR); //rain - SlideTo(0,pOpponent->ubID, pSoldier->ubID, SETLOCATORFAST); + SlideTo(pOpponent->ubID, SETLOCATORFAST); //end rain } } @@ -2857,7 +2857,7 @@ void DecideTrueVisibility(SOLDIERTYPE *pSoldier, UINT8 ubLocate) //if (Status.stopSlidingAt == NOBODY) if (gTacticalStatus.uiFlags & TURNBASED && ( gTacticalStatus.uiFlags & INCOMBAT ) ) //LocateSoldier(pSoldier->ubID,DONTSETLOCATOR); - SlideTo(0,pSoldier->ubID, NOBODY, DONTSETLOCATOR); + SlideTo(pSoldier->ubID, DONTSETLOCATOR); // follow his movement on our screen as he moves around... //LocateMember(ptr->guynum,DONTSETLOCATOR); @@ -3618,7 +3618,7 @@ void OurTeamSeesSomeone( SOLDIERTYPE * pSoldier, INT8 bNumReRevealed, INT8 bNumN LocateSoldier( pSoldier->ubID, SETLOCATOR ); // Now slide to other guy.... - SlideTo( NOWHERE, gTacticalStatus.ubEnemySightingOnTheirTurnEnemyID, NOBODY ,SETLOCATOR); + SlideTo(gTacticalStatus.ubEnemySightingOnTheirTurnEnemyID, SETLOCATOR); } diff --git a/TileEngine/renderworld.cpp b/TileEngine/renderworld.cpp index 2a93d397..52a575d8 100644 --- a/TileEngine/renderworld.cpp +++ b/TileEngine/renderworld.cpp @@ -4133,7 +4133,7 @@ void ScrollWorld( ) ScrollFlags = 0; fDoScroll = FALSE; // - if ( SoldierLocationRelativeToScreen( gTacticalStatus.sSlideTarget, gTacticalStatus.sSlideReason, &bDirection, &ScrollFlags ) && GridNoOnVisibleWorldTile( gTacticalStatus.sSlideTarget ) ) + if ( SoldierLocationRelativeToScreen( gTacticalStatus.sSlideTarget, &bDirection, &ScrollFlags ) && GridNoOnVisibleWorldTile( gTacticalStatus.sSlideTarget ) ) { ScrollFlags = gScrollDirectionFlags[ bDirection ]; fDoScroll = TRUE; From 34f0b40f93f53f0a3393d6712e62da4c333f36bd Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 17 Nov 2024 14:53:52 +0200 Subject: [PATCH 074/192] Convert functions and globals to SoldierID --- Multiplayer/client.cpp | 2 +- Multiplayer/connect.h | 2 +- Strategic/LuaInitNPCs.cpp | 2 +- Tactical/Arms Dealer Init.cpp | 4 +- Tactical/Arms Dealer Init.h | 4 +- Tactical/Faces.cpp | 10 ++-- Tactical/Handle UI.cpp | 5 +- Tactical/Interface Items.cpp | 10 ++-- Tactical/Interface Panels.cpp | 78 +++++++++++++-------------- Tactical/Interface Panels.h | 8 +-- Tactical/Interface.cpp | 8 +-- Tactical/Interface.h | 4 +- Tactical/Overhead.cpp | 62 +++++++++++---------- Tactical/Overhead.h | 8 +-- Tactical/Real Time Input.cpp | 76 +++++++++++++------------- Tactical/ShopKeeper Interface.cpp | 25 ++++----- Tactical/Soldier Ani.cpp | 2 +- Tactical/Squads.cpp | 4 +- Tactical/opplist.cpp | 89 +++++++++++++++---------------- Tactical/opplist.h | 4 +- TacticalAI/PanicButtons.cpp | 14 ++--- TileEngine/Explosion Control.cpp | 56 +++++++++---------- TileEngine/Explosion Control.h | 12 ++--- 23 files changed, 240 insertions(+), 249 deletions(-) diff --git a/Multiplayer/client.cpp b/Multiplayer/client.cpp index f540d025..e4d40437 100644 --- a/Multiplayer/client.cpp +++ b/Multiplayer/client.cpp @@ -3612,7 +3612,7 @@ void recieveNEWSMOKEEFFECT (RPCParameters *rpcParameters) } } -void send_gasdamage( SOLDIERTYPE * pSoldier, UINT16 usExplosiveClassID, INT16 sSubsequent, BOOLEAN fRecompileMovementCosts, INT16 sWoundAmt, INT16 sBreathAmt, UINT16 ubOwner ) +void send_gasdamage( SOLDIERTYPE * pSoldier, UINT16 usExplosiveClassID, INT16 sSubsequent, BOOLEAN fRecompileMovementCosts, INT16 sWoundAmt, INT16 sBreathAmt, SoldierID ubOwner ) { explosiondamage_struct exp; exp.ubDamageFunc = 1; diff --git a/Multiplayer/connect.h b/Multiplayer/connect.h index 5984c5fa..e0975256 100644 --- a/Multiplayer/connect.h +++ b/Multiplayer/connect.h @@ -117,7 +117,7 @@ void send_plant_explosive (UINT16 ubID,UINT16 usItem,UINT8 ubItemStatus,UINT16 u void send_detonate_explosive (UINT32 uiWorldIndex, UINT16 ubID); void send_spreadeffect ( INT32 sGridNo, UINT8 ubRadius, UINT16 usItem, UINT16 ubOwner, BOOLEAN fSubsequent, INT8 bLevel, INT32 iSmokeEffectID ); void send_newsmokeeffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT16 ubOwner, INT32 iSmokeEffectID); -void send_gasdamage( SOLDIERTYPE * pSoldier, UINT16 usExplosiveClassID, INT16 sSubsequent, BOOLEAN fRecompileMovementCosts, INT16 sWoundAmt, INT16 sBreathAmt, UINT16 ubOwner ); +void send_gasdamage( SOLDIERTYPE * pSoldier, UINT16 usExplosiveClassID, INT16 sSubsequent, BOOLEAN fRecompileMovementCosts, INT16 sWoundAmt, INT16 sBreathAmt, SoldierID ubOwner ); void send_explosivedamage( UINT16 ubPerson, UINT16 ubOwner, INT32 sBombGridNo, INT16 sWoundAmt, INT16 sBreathAmt, UINT32 uiDist, UINT16 usItem, INT16 sSubsequent ); void send_disarm_explosive(UINT32 sGridNo, UINT32 uiWorldIndex, UINT16 ubID); diff --git a/Strategic/LuaInitNPCs.cpp b/Strategic/LuaInitNPCs.cpp index b7a002ab..84c9a86f 100644 --- a/Strategic/LuaInitNPCs.cpp +++ b/Strategic/LuaInitNPCs.cpp @@ -7400,7 +7400,7 @@ static int l_SetOffBombsByFrequency (lua_State *L) if ( lua_gettop(L) >= 2 ) { INT8 ACTION = lua_tointeger(L,1); - UINT8 ID = lua_tointeger(L,2); + SoldierID ID = lua_tointeger(L,2); if (ACTION >= 1 || ACTION <=4) diff --git a/Tactical/Arms Dealer Init.cpp b/Tactical/Arms Dealer Init.cpp index cfca4120..977701bf 100644 --- a/Tactical/Arms Dealer Init.cpp +++ b/Tactical/Arms Dealer Init.cpp @@ -1699,7 +1699,7 @@ void RemoveRandomItemFromArmsDealerInventory( UINT8 ubArmsDealer, UINT16 usItemI } -BOOLEAN AddDeadArmsDealerItemsToWorld( UINT8 usProfileID, UINT16 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, UINT16 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; diff --git a/Tactical/Arms Dealer Init.h b/Tactical/Arms Dealer Init.h index 1212f9c7..e32b3b8d 100644 --- a/Tactical/Arms Dealer Init.h +++ b/Tactical/Arms Dealer Init.h @@ -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, UINT16 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 \ No newline at end of file +#endif diff --git a/Tactical/Faces.cpp b/Tactical/Faces.cpp index f01c9f8d..dadad4d6 100644 --- a/Tactical/Faces.cpp +++ b/Tactical/Faces.cpp @@ -72,11 +72,11 @@ CAMO_FACE gCamoFace[NUM_PROFILES]; FACE_GEAR_VALUES zNewFaceGear[MAXITEMS]; FACE_GEAR_VALUES zNewFaceGearIMP[MAXITEMS]; -extern BOOLEAN gfSMDisableForItems; -extern INT16 gsCurInterfacePanel; -extern UINT16 gusSMCurrentMerc; -extern BOOLEAN gfRerenderInterfaceFromHelpText; -extern BOOLEAN gfInItemPickupMenu; +extern BOOLEAN gfSMDisableForItems; +extern INT16 gsCurInterfacePanel; +extern SoldierID gusSMCurrentMerc; +extern BOOLEAN gfRerenderInterfaceFromHelpText; +extern BOOLEAN gfInItemPickupMenu; BOOLEAN FaceRestoreSavedBackgroundRect( INT32 iFaceIndex, INT16 sDestLeft, INT16 sDestTop, INT16 sSrcLeft, INT16 sSrcTop, INT16 sWidth, INT16 sHeight ); void SetupFinalTalkingDelay( FACETYPE *pFace ); diff --git a/Tactical/Handle UI.cpp b/Tactical/Handle UI.cpp index cb1f7bf8..cca15ed9 100644 --- a/Tactical/Handle UI.cpp +++ b/Tactical/Handle UI.cpp @@ -1551,7 +1551,7 @@ UINT32 UIHandleChangeLevel( UI_EVENT *pUIEvent ) } -extern void InternalSelectSoldier( UINT16 usSoldierID, BOOLEAN fAcknowledge, BOOLEAN fForceReselect, BOOLEAN fFromUI ); +extern void InternalSelectSoldier( SoldierID usSoldierID, BOOLEAN fAcknowledge, BOOLEAN fForceReselect, BOOLEAN fFromUI ); UINT32 UIHandleSelectMerc( UI_EVENT *pUIEvent ) { @@ -1715,12 +1715,11 @@ UINT32 UIHandleMOnTerrain( UI_EVENT *pUIEvent ) // THIS IS JUST A CRUDE TEST FOR NOW if ( pSoldier->stats.bLife < OKLIFE ) { - UINT16 ubID; // Show reg. cursor // GO INTO IDLE MODE // guiPendingOverrideEvent = I_CHANGE_TO_IDLE; // gusSelectedSoldier = NOBODY; - ubID = FindNextActiveAndAliveMerc( pSoldier, FALSE, FALSE ); + SoldierID ubID = FindNextActiveAndAliveMerc( pSoldier, FALSE, FALSE ); if ( ubID != NOBODY ) { diff --git a/Tactical/Interface Items.cpp b/Tactical/Interface Items.cpp index ab4a8cb0..c6235487 100644 --- a/Tactical/Interface Items.cpp +++ b/Tactical/Interface Items.cpp @@ -230,12 +230,12 @@ enum MOUSE_REGION gInvRegions[ NUM_INV_SLOTS ]; extern MOUSE_REGION gMPanelRegion; -extern BOOLEAN fMapInventoryItem; -extern BOOLEAN gfAddingMoneyToMercFromPlayersAccount; -extern SOLDIERTYPE *gpSMCurrentMerc; -extern UINT16 gubSelectSMPanelToMerc; +extern BOOLEAN fMapInventoryItem; +extern BOOLEAN gfAddingMoneyToMercFromPlayersAccount; +extern SOLDIERTYPE *gpSMCurrentMerc; +extern SoldierID gubSelectSMPanelToMerc; extern MOUSE_REGION gSM_SELMERCMoneyRegion; -extern UINT32 guiMapInvSecondHandBlockout; +extern UINT32 guiMapInvSecondHandBlockout; //jackaians: global variables added for the stealing pickup menu BOOLEAN gfStealing = FALSE; diff --git a/Tactical/Interface Panels.cpp b/Tactical/Interface Panels.cpp index 99e7d55d..b0bd1677 100644 --- a/Tactical/Interface Panels.cpp +++ b/Tactical/Interface Panels.cpp @@ -399,9 +399,9 @@ BOOLEAN gfDisableTacticalPanelButtons = FALSE; BOOLEAN gfAddingMoneyToMercFromPlayersAccount = FALSE; BOOLEAN gfCheckForMouseOverItem = FALSE; -UINT32 guiMouseOverItemTime = 0; -INT8 gbCheckForMouseOverItemPos = 0; -UINT16 gubSelectSMPanelToMerc = NOBODY; +UINT32 guiMouseOverItemTime = 0; +INT8 gbCheckForMouseOverItemPos = 0; +SoldierID gubSelectSMPanelToMerc = NOBODY; BOOLEAN gfReEvaluateDisabledINVPanelButtons = FALSE; UINT32 guiBrownBackgroundForTeamPanel; @@ -478,8 +478,8 @@ void HelpTextDoneCallback( void ); // Globals - for one - the current merc here INT8 gbSMCurStanceObj; -UINT16 gusSMCurrentMerc = 0; -SOLDIERTYPE *gpSMCurrentMerc = NULL; +SoldierID gusSMCurrentMerc = NOBODY; +SOLDIERTYPE *gpSMCurrentMerc = NULL; // CHRISL: extern INT8 gbCompatibleApplyItem; extern SOLDIERTYPE *gpItemPopupSoldier; @@ -589,11 +589,11 @@ INT16 GetUIApsToDisplay( SOLDIERTYPE *pSoldier ) void CheckForDisabledForGiveItem( ) { INT16 sDist; - INT32 sDestGridNo; - INT8 bDestLevel; + INT32 sDestGridNo; + INT8 bDestLevel; INT32 cnt; SOLDIERTYPE *pSoldier; - UINT16 ubSrcSoldier; + SoldierID ubSrcSoldier; // CHRISL: If Merc hasn't been set, default to first merc if(gpSMCurrentMerc==NULL) @@ -646,17 +646,17 @@ void CheckForDisabledForGiveItem( ) { if ( gusSMCurrentMerc != ubSrcSoldier ) { - sDestGridNo = MercPtrs[ gusSMCurrentMerc ]->sGridNo; - bDestLevel = MercPtrs[ gusSMCurrentMerc ]->pathing.bLevel; + sDestGridNo = gusSMCurrentMerc->sGridNo; + bDestLevel = gusSMCurrentMerc->pathing.bLevel; // Get distance.... - sDist = PythSpacesAway( MercPtrs[ ubSrcSoldier ]->sGridNo, sDestGridNo ); + sDist = PythSpacesAway( ubSrcSoldier->sGridNo, sDestGridNo ); // Check LOS.... - if ( SoldierTo3DLocationLineOfSightTest( MercPtrs[ ubSrcSoldier ], sDestGridNo, bDestLevel, 3, TRUE, CALC_FROM_ALL_DIRS ) ) + if ( SoldierTo3DLocationLineOfSightTest( ubSrcSoldier, sDestGridNo, bDestLevel, 3, TRUE, CALC_FROM_ALL_DIRS ) ) { // UNCONSCIOUS GUYS ONLY 1 tile AWAY - if ( MercPtrs[ gusSMCurrentMerc ]->stats.bLife < CONSCIOUSNESS ) + if ( gusSMCurrentMerc->stats.bLife < CONSCIOUSNESS ) { if ( sDist <= PASSING_ITEM_DISTANCE_NOTOKLIFE ) { @@ -669,7 +669,7 @@ void CheckForDisabledForGiveItem( ) } } // anv: passengers in the same vehicle can pass items freely - else if ( MercPtrs[ ubSrcSoldier ]->iVehicleId != -1 && MercPtrs[ ubSrcSoldier ]->iVehicleId == MercPtrs[ gusSMCurrentMerc ]->iVehicleId ) + else if ( ubSrcSoldier->iVehicleId != -1 && ubSrcSoldier->iVehicleId == gusSMCurrentMerc->iVehicleId ) { gfSMDisableForItems = FALSE; } @@ -686,13 +686,13 @@ void CheckForDisabledForGiveItem( ) } } -void SetSMPanelCurrentMerc( UINT16 ubNewID ) +void SetSMPanelCurrentMerc( SoldierID ubNewID ) { gubSelectSMPanelToMerc = NOBODY; gusSMCurrentMerc = ubNewID; - gpSMCurrentMerc = MercPtrs[ ubNewID ]; + gpSMCurrentMerc = ubNewID; // Set to current guy's interface level //if ( gsInterfaceLevel != gpSMCurrentMerc->bUIInterfaceLevel ) @@ -1384,7 +1384,7 @@ void EnableSMPanelButtons( BOOLEAN fEnable , BOOLEAN fFromItemPickup ) } } -UINT16 GetSMPanelCurrentMerc( ) +SoldierID GetSMPanelCurrentMerc( ) { return( gusSMCurrentMerc ); } @@ -4798,8 +4798,6 @@ void BtnMuteCallback(GUI_BUTTON *btn,INT32 reason) void BtnPrevMercCallback(GUI_BUTTON *btn,INT32 reason) { - INT16 sID; - if (!(btn->uiFlags & BUTTON_ENABLED)) return; @@ -4811,9 +4809,9 @@ void BtnPrevMercCallback(GUI_BUTTON *btn,INT32 reason) { btn->uiFlags &= (~BUTTON_CLICKED_ON ); - sID = FindPrevActiveAndAliveMerc( gpSMCurrentMerc, TRUE, TRUE ); + SoldierID sID = FindPrevActiveAndAliveMerc( gpSMCurrentMerc, TRUE, TRUE ); - gubSelectSMPanelToMerc = (UINT16)sID; + gubSelectSMPanelToMerc = sID; if ( !gfInItemPickupMenu ) { @@ -4846,8 +4844,6 @@ void BtnPrevMercCallback(GUI_BUTTON *btn,INT32 reason) void BtnNextMercCallback(GUI_BUTTON *btn,INT32 reason) { - INT16 sID; - if (!(btn->uiFlags & BUTTON_ENABLED)) return; @@ -4859,10 +4855,10 @@ void BtnNextMercCallback(GUI_BUTTON *btn,INT32 reason) { btn->uiFlags &= (~BUTTON_CLICKED_ON ); - sID = FindNextActiveAndAliveMerc( gpSMCurrentMerc, TRUE, TRUE ); + SoldierID sID = FindNextActiveAndAliveMerc( gpSMCurrentMerc, TRUE, TRUE ); // Give him the panel! - gubSelectSMPanelToMerc = (UINT16)sID; + gubSelectSMPanelToMerc = sID; if ( !gfInItemPickupMenu ) { @@ -6251,13 +6247,13 @@ void MercFacePanelCallback( MOUSE_REGION * pRegion, INT32 iReason ) } -extern void InternalSelectSoldier( UINT16 usSoldierID, BOOLEAN fAcknowledge, BOOLEAN fForceReselect, BOOLEAN fFromUI ); +extern void InternalSelectSoldier( SoldierID usSoldierID, BOOLEAN fAcknowledge, BOOLEAN fForceReselect, BOOLEAN fFromUI ); -void HandleLocateSelectMerc( UINT16 ubID, INT8 bFlag ) +void HandleLocateSelectMerc( SoldierID ubID, INT8 bFlag ) { BOOLEAN fSelect = FALSE; - if( !MercPtrs[ ubID ]->bActive ) + if( !ubID->bActive ) { return; } @@ -6270,14 +6266,14 @@ void HandleLocateSelectMerc( UINT16 ubID, INT8 bFlag ) // ATE: No matter what we do... if below OKLIFE, just locate.... - if ( MercPtrs[ ubID ]->stats.bLife < OKLIFE ) + if ( ubID->stats.bLife < OKLIFE ) { LocateSoldier( ubID, SETLOCATOR ); return; } // Flugente: frozen soldiers can't be selected - if ( MercPtrs[ubID]->usSkillCooldown[SOLDIER_COOLDOWN_CRYO] ) + if ( ubID->usSkillCooldown[SOLDIER_COOLDOWN_CRYO] ) { LocateSoldier( ubID, SETLOCATOR ); return; @@ -6289,7 +6285,7 @@ void HandleLocateSelectMerc( UINT16 ubID, INT8 bFlag ) { // Select merc InternalSelectSoldier( ubID, TRUE, FALSE, TRUE); - MercPtrs[ ubID ]->flags.fFlashLocator = FALSE; + ubID->flags.fFlashLocator = FALSE; ResetMultiSelection( ); } else @@ -6300,7 +6296,7 @@ void HandleLocateSelectMerc( UINT16 ubID, INT8 bFlag ) } else { - if ( MercPtrs[ ubID ]->flags.fFlashLocator == FALSE ) + if ( ubID->flags.fFlashLocator == FALSE ) { if ( gGameSettings.fOptions[ TOPTION_OLD_SELECTION_METHOD ] ) { @@ -6364,7 +6360,7 @@ void HandleLocateSelectMerc( UINT16 ubID, INT8 bFlag ) if ( fSelect ) { // Select merc, only if alive! - if ( !( MercPtrs[ ubID ]->flags.uiStatusFlags & SOLDIER_DEAD ) ) + if ( !( ubID->flags.uiStatusFlags & SOLDIER_DEAD ) ) { InternalSelectSoldier( ubID, TRUE, FALSE, TRUE ); } @@ -6374,36 +6370,36 @@ void HandleLocateSelectMerc( UINT16 ubID, INT8 bFlag ) ResetMultiSelection( ); // Handle locate select merc.... - HandleMouseOverSoldierFaceForContMove( MercPtrs[ ubID ], TRUE ); + HandleMouseOverSoldierFaceForContMove( ubID, TRUE ); } -void ShowRadioLocator( UINT16 ubID, UINT8 ubLocatorSpeed ) +void ShowRadioLocator( SoldierID ubID, UINT8 ubLocatorSpeed ) { - RESETTIMECOUNTER( MercPtrs[ ubID ]->timeCounters.FlashSelCounter, FLASH_SELECTOR_DELAY ); + RESETTIMECOUNTER( ubID->timeCounters.FlashSelCounter, FLASH_SELECTOR_DELAY ); //LocateSoldier( ubID, FALSE ); // IC - this is already being done outside of this function :) - MercPtrs[ ubID ]->flags.fFlashLocator = TRUE; + ubID->flags.fFlashLocator = TRUE; //gbPanelSelectedGuy = ubID; IC - had to move this outside to make this function versatile - MercPtrs[ ubID ]->sLocatorFrame = 0; + ubID->sLocatorFrame = 0; if ( ubLocatorSpeed == SHOW_LOCATOR_NORMAL ) { // If we are an AI guy, and we have the baton, make lower... - // ( MercPtrs[ ubID ]->flags.uiStatusFlags & SOLDIER_UNDERAICONTROL && MercPtrs[ ubID ]->bTeam != gbPlayerNum ) + // ( ubID->flags.uiStatusFlags & SOLDIER_UNDERAICONTROL && ubID->bTeam != gbPlayerNum ) // //ercPtrs[ ubID ]->ubNumLocateCycles = 3; // //se // - MercPtrs[ ubID ]->ubNumLocateCycles = 5; + ubID->ubNumLocateCycles = 5; // } else { - MercPtrs[ ubID ]->ubNumLocateCycles = 3; + ubID->ubNumLocateCycles = 3; } } diff --git a/Tactical/Interface Panels.h b/Tactical/Interface Panels.h index 0e1bd050..e109ace3 100644 --- a/Tactical/Interface Panels.h +++ b/Tactical/Interface Panels.h @@ -77,9 +77,9 @@ void UpdateTEAMPanel( ); */ BOOLEAN InitializeTEAMPanelCoords( ); -void SetSMPanelCurrentMerc( UINT16 ubNewID ); +void SetSMPanelCurrentMerc( SoldierID ubNewID ); void SetTEAMPanelCurrentMerc( UINT16 ubNewID ); -UINT16 GetSMPanelCurrentMerc( ); +SoldierID GetSMPanelCurrentMerc( ); void UpdateSMPanel( ); BOOLEAN InitTEAMSlots( ); @@ -107,7 +107,7 @@ extern INT8 gbNewItem[ NUM_INV_SLOTS ]; extern INT8 gbNewItemCycle[ NUM_INV_SLOTS ]; extern UINT8 gubNewItemMerc; -void ShowRadioLocator( UINT16 ubID, UINT8 ubLocatorSpeed ); +void ShowRadioLocator( SoldierID ubID, UINT8 ubLocatorSpeed ); void EndRadioLocator( UINT16 ubID ); @@ -168,4 +168,4 @@ extern UINT8 gubDescBoxTotalAdvLines; // Jenilee: determine the cost of moving this item around in our inventory UINT16 GetInvMovementCost(OBJECTTYPE* pObj, INT16 old_pos, INT16 new_pos); -#endif \ No newline at end of file +#endif diff --git a/Tactical/Interface.cpp b/Tactical/Interface.cpp index 34ebaff3..01dcc0a0 100644 --- a/Tactical/Interface.cpp +++ b/Tactical/Interface.cpp @@ -185,9 +185,9 @@ BOOLEAN gfPanelAllocated = FALSE; extern MOUSE_REGION gDisableRegion; extern MOUSE_REGION gUserTurnRegion; -extern BOOLEAN gfUserTurnRegionActive; -extern UINT16 gubSelectSMPanelToMerc; -extern BOOLEAN gfIgnoreOnSelectedGuy; +extern BOOLEAN gfUserTurnRegionActive; +extern SoldierID gubSelectSMPanelToMerc; +extern BOOLEAN gfIgnoreOnSelectedGuy; enum { @@ -4216,7 +4216,7 @@ void BtnDoorMenuCallback(GUI_BUTTON *btn,INT32 reason) if ( EnoughPoints( gOpenDoorMenu.pSoldier, APBPConstants[AP_OPEN_DOOR], APBPConstants[BP_OPEN_DOOR], FALSE ) ) { // Set UI - SetUIBusy( (UINT8)gOpenDoorMenu.pSoldier->ubID ); + SetUIBusy( gOpenDoorMenu.pSoldier->ubID ); if ( gOpenDoorMenu.fClosingDoor ) { diff --git a/Tactical/Interface.h b/Tactical/Interface.h index e4d592a7..07aa6068 100644 --- a/Tactical/Interface.h +++ b/Tactical/Interface.h @@ -482,7 +482,7 @@ void HandleUpDownArrowBackgrounds( ); void EndDeadlockMsg( ); -void HandleLocateSelectMerc( UINT16 ubID, INT8 bFlag ); +void HandleLocateSelectMerc( SoldierID ubID, INT8 bFlag ); void DirtyMercPanelInterface( SOLDIERTYPE *pSoldier, UINT8 ubDirtyLevel ); @@ -581,4 +581,4 @@ void NCTHShowMounted( SOLDIERTYPE* pSoldier, UINT16* ptrBuf, UINT32 uiPitch, INT BOOLEAN HasBackgroundFlag( UINT8 usProfile, UINT64 aFlag ); INT16 GetBackgroundValue( UINT8 usProfile, UINT16 aNr ); -#endif \ No newline at end of file +#endif diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index 7c06c46d..2a6bd403 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -3287,9 +3287,9 @@ void SelectNextAvailSoldier( SOLDIERTYPE *pSoldier ) -void InternalSelectSoldier( UINT16 usSoldierID, BOOLEAN fAcknowledge, BOOLEAN fForceReselect, BOOLEAN fFromUI ) +void InternalSelectSoldier( SoldierID usSoldierID, BOOLEAN fAcknowledge, BOOLEAN fForceReselect, BOOLEAN fFromUI ) { - SOLDIERTYPE *pSoldier, *pOldSoldier; + SOLDIERTYPE *pSoldier, *pOldSoldier; // ARM: can't call SelectSoldier() in mapscreen, that will initialize interface panels!!! // ATE: Adjusted conditions a bit ( sometimes were not getting selected ) @@ -3312,7 +3312,7 @@ void InternalSelectSoldier( UINT16 usSoldierID, BOOLEAN fAcknowledge, BOOLEAN fF // Get guy - pSoldier = MercPtrs[ usSoldierID ]; + pSoldier = usSoldierID; if( ( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) ) { @@ -3460,7 +3460,7 @@ void InternalSelectSoldier( UINT16 usSoldierID, BOOLEAN fAcknowledge, BOOLEAN fF } -void SelectSoldier( UINT16 usSoldierID, BOOLEAN fAcknowledge, BOOLEAN fForceReselect ) +void SelectSoldier( SoldierID usSoldierID, BOOLEAN fAcknowledge, BOOLEAN fForceReselect ) { InternalSelectSoldier( usSoldierID, fAcknowledge, fForceReselect, FALSE ); } @@ -3575,14 +3575,13 @@ void SlideTo(SoldierID usSoldierID, BOOLEAN fSetLocator) ShowRadioLocator( usSoldierID, SHOW_LOCATOR_NORMAL ); // FIRST CHECK IF WE ARE ON SCREEN - if ( GridNoOnScreen( MercPtrs[ usSoldierID ]->sGridNo ) ) + if ( GridNoOnScreen( usSoldierID->sGridNo ) ) { return; } // sGridNo here for DG compatibility - gTacticalStatus.sSlideTarget = MercPtrs[ usSoldierID ]->sGridNo; - gTacticalStatus.sSlideReason = usReasonID; + gTacticalStatus.sSlideTarget = usSoldierID->sGridNo; // Plot new path! gfPlotNewMovement = TRUE; @@ -3612,8 +3611,8 @@ void SlideToLocation( INT32 sDestGridNo ) void RebuildAllSoldierShadeTables( ) { - UINT32 cnt; - SOLDIERTYPE *pSoldier; + UINT32 cnt; + SOLDIERTYPE *pSoldier; // Loop through all mercs and make go for ( pSoldier = Menptr, cnt = 0; cnt < TOTAL_SOLDIERS; pSoldier++, cnt++ ) @@ -3628,11 +3627,11 @@ void RebuildAllSoldierShadeTables( ) void HandlePlayerTeamMemberDeath( SOLDIERTYPE *pSoldier ) { - INT32 cnt; - INT32 iNewSelectedSoldier = -1; - SOLDIERTYPE *pTeamSoldier; - BOOLEAN fMissionFailed = TRUE; - INT8 bBuddyIndex; + INT32 cnt; + INT32 iNewSelectedSoldier = -1; + SOLDIERTYPE *pTeamSoldier; + BOOLEAN fMissionFailed = TRUE; + INT8 bBuddyIndex; VerifyPublicOpplistDueToDeath( pSoldier ); @@ -4169,7 +4168,7 @@ void HandleNPCTeamMemberDeath( SOLDIERTYPE *pSoldierOld ) // killing crows/cows is not worth any experience! if ( ( pSoldierOld->ubBodyType != CROW ) && ( pSoldierOld->ubBodyType != COW ) ) //&& pSoldierOld->ubLastDamageReason != TAKE_DAMAGE_BLOODLOSS ) // SANDRO - why not give exp for bleeding out? { - UINT16 ubAssister = NOBODY; + SoldierID ubAssister = NOBODY; // if it was a kill by a player's merc if (pSoldierOld->ubAttackerID != NOBODY && pSoldierOld->ubAttackerID->bTeam == gbPlayerNum ) @@ -4218,10 +4217,10 @@ void HandleNPCTeamMemberDeath( SOLDIERTYPE *pSoldierOld ) } // if it was assisted by a player's merc - if (ubAssister != NOBODY && MercPtrs[ ubAssister ]->bTeam == gbPlayerNum ) + if (ubAssister != NOBODY && ubAssister->bTeam == gbPlayerNum ) { // EXPERIENCE CLASS GAIN: Earned an assist - StatChange( MercPtrs[ ubAssister ], EXPERAMT, (UINT16)( 5 * pSoldierOld->stats.bExpLevel ), FALSE ); + StatChange( ubAssister, EXPERAMT, (UINT16)( 5 * pSoldierOld->stats.bExpLevel ), FALSE ); } } @@ -4252,7 +4251,7 @@ void HandleNPCTeamMemberDeath( SOLDIERTYPE *pSoldierOld ) if( Get3RandomQualifiedMercs( &SoldierId1, &SoldierId2, NULL ) != 0 ) { //Say the "he blew himself up quote" - TacticalCharacterDialogue( &Menptr[SoldierId1], QUOTE_GREETING ); + TacticalCharacterDialogue( SoldierId1, QUOTE_GREETING ); //if there isnt a second soldier if( SoldierId2 == NOBODY ) @@ -4261,7 +4260,7 @@ void HandleNPCTeamMemberDeath( SOLDIERTYPE *pSoldierOld ) } //say the "darn he took the inventoruy with him" - TacticalCharacterDialogue( &Menptr[SoldierId2], QUOTE_SMALL_TALK ); + TacticalCharacterDialogue( SoldierId2, QUOTE_SMALL_TALK ); } } #endif @@ -4272,7 +4271,7 @@ void HandleNPCTeamMemberDeath( SOLDIERTYPE *pSoldierOld ) UINT16 LastActiveTeamMember( UINT16 ubTeam ) { INT32 cnt; - SOLDIERTYPE *pSoldier; + SOLDIERTYPE *pSoldier; cnt = gTacticalStatus.Team[ ubTeam ].bLastID; @@ -4682,8 +4681,8 @@ SOLDIERTYPE * CivilianGroupMemberChangesSides( SOLDIERTYPE * pAttacked ) void CivilianGroupChangesSides( UINT8 ubCivilianGroup ) { // change civ group side due to external event (wall blowing up) - INT32 cnt; - SOLDIERTYPE * pSoldier; + INT32 cnt; + SOLDIERTYPE *pSoldier; gTacticalStatus.fCivGroupHostile[ ubCivilianGroup ] = CIV_GROUP_HOSTILE; @@ -4741,9 +4740,8 @@ void HickCowAttacked( SOLDIERTYPE * pNastyGuy, SOLDIERTYPE * pTarget ) void MilitiaChangesSides( ) { // make all the militia change sides - - INT32 cnt; - SOLDIERTYPE * pSoldier; + INT32 cnt; + SOLDIERTYPE *pSoldier; if ( gTacticalStatus.Team[ MILITIA_TEAM ].bMenInSector == 0 ) { @@ -4783,7 +4781,7 @@ gTacticalStatus.fCivGroupHostile[ ubLoop ] = CIV_GROUP_HOSTILE; UINT16 NumActiveAndConsciousTeamMembers( UINT8 ubTeam ) { INT32 cnt; - SOLDIERTYPE *pSoldier; + SOLDIERTYPE *pSoldier; UINT16 ubCount = 0; cnt = gTacticalStatus.Team[ ubTeam ].bFirstID; @@ -4801,11 +4799,11 @@ UINT16 NumActiveAndConsciousTeamMembers( UINT8 ubTeam ) } -UINT16 FindNextActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLife, BOOLEAN fOnlyRegularMercs ) +SoldierID FindNextActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLife, BOOLEAN fOnlyRegularMercs ) { UINT16 bLastTeamID; UINT16 cnt; - SOLDIERTYPE *pTeamSoldier; + SOLDIERTYPE *pTeamSoldier; cnt = pSoldier->ubID + 1; bLastTeamID = gTacticalStatus.Team[ pSoldier->bTeam ].bLastID; @@ -4915,11 +4913,11 @@ SOLDIERTYPE *FindNextActiveSquad( SOLDIERTYPE *pSoldier ) } -UINT16 FindPrevActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLife, BOOLEAN fOnlyRegularMercs ) +SoldierID FindPrevActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLife, BOOLEAN fOnlyRegularMercs ) { - UINT16 bLastTeamID; - INT32 cnt; - SOLDIERTYPE *pTeamSoldier; + UINT16 bLastTeamID; + INT32 cnt; + SOLDIERTYPE *pTeamSoldier; // loop back diff --git a/Tactical/Overhead.h b/Tactical/Overhead.h index 20c03e26..ff6543e4 100644 --- a/Tactical/Overhead.h +++ b/Tactical/Overhead.h @@ -70,7 +70,7 @@ struct TacticalStatusType INT32 sPanicTriggerGridNoUnused; INT16 sHandGrid; UINT16 ubSpottersCalledForBy; - UINT16 ubTheChosenOne; + SoldierID ubTheChosenOne; UINT32 uiTimeOfLastInput; UINT32 uiTimeSinceDemoOn; UINT32 uiCountdownToRestart; @@ -224,7 +224,7 @@ void EndTurn( UINT8 ubNextTeam ); void StartPlayerTeamTurn( BOOLEAN fDoBattleSnd, BOOLEAN fEnteringCombatMode ); void EndTacticalDemo( ); -void SelectSoldier( UINT16 usSoldierID, BOOLEAN fAcknowledge, BOOLEAN fForceReselect ); +void SelectSoldier( SoldierID usSoldierID, BOOLEAN fAcknowledge, BOOLEAN fForceReselect ); //Kaiden: Function declaration from UB to reveal all items after combat. void RevealAllDroppedEnemyItems(); @@ -241,8 +241,8 @@ void HandlePlayerTeamMemberDeath( SOLDIERTYPE *pSoldier ); UINT16 LastActiveTeamMember( UINT16 ubTeam ); BOOLEAN SoldierOnVisibleWorldTile( SOLDIERTYPE *pSoldier ); -UINT16 FindNextActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLife, BOOLEAN fOnlyRegularMercs ); -UINT16 FindPrevActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLife, BOOLEAN fOnlyRegularMercs ); +SoldierID FindNextActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLife, BOOLEAN fOnlyRegularMercs ); +SoldierID FindPrevActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLife, BOOLEAN fOnlyRegularMercs ); BOOLEAN CheckForPlayerTeamInMissionExit( ); void HandleNPCTeamMemberDeath( SOLDIERTYPE *pSoldier ); diff --git a/Tactical/Real Time Input.cpp b/Tactical/Real Time Input.cpp index ab0797f7..9ba02699 100644 --- a/Tactical/Real Time Input.cpp +++ b/Tactical/Real Time Input.cpp @@ -2021,51 +2021,53 @@ void HandleAltMouseRTX2Button(UINT32 *puiNewEvent) // sevenfm: original mouse commands functionality void HandleMouseRTWheel( void ) { - UINT16 bID; - // nothing in hand and either not in SM panel, or the matching button is enabled if we are in SM panel - if ( !( gTacticalStatus.uiFlags & ENGAGED_IN_CONV ) && - ( ( gsCurInterfacePanel != SM_PANEL ) || ( ButtonList[ iSMPanelButtons[ NEXTMERC_BUTTON ] ]->uiFlags & BUTTON_ENABLED ) ) ) - { - if ( gViewportRegion.WheelState > 0 ) //wheel up - { - //change stance ->DOWN - if ( _KeyDown( ALT ) ) + SoldierID bID; + // nothing in hand and either not in SM panel, or the matching button is enabled if we are in SM panel + if ( !( gTacticalStatus.uiFlags & ENGAGED_IN_CONV ) && + ( ( gsCurInterfacePanel != SM_PANEL ) || ( ButtonList[ iSMPanelButtons[ NEXTMERC_BUTTON ] ]->uiFlags & BUTTON_ENABLED ) ) ) + { + if ( gViewportRegion.WheelState > 0 ) //wheel up + { + //change stance ->DOWN + if ( _KeyDown( ALT ) ) { if ( (gusSelectedSoldier != NOBODY) && ( gpItemPointer == NULL ) ) - GotoLowerStance(gusSelectedSoldier); + GotoLowerStance(gusSelectedSoldier); return; - } + } - if ( gusSelectedSoldier != NOBODY ) - { //Select prev merc - bID = FindPrevActiveAndAliveMerc( gusSelectedSoldier, TRUE, TRUE ); - HandleLocateSelectMerc( bID, LOCATEANDSELECT_MERC ); - // Center to guy.... - LocateSoldier( gusSelectedSoldier, SETLOCATOR ); - } - } - else - { - //change stance ->UP - if ( _KeyDown( ALT ) ) + if ( gusSelectedSoldier != NOBODY ) + { //Select prev merc + bID = FindPrevActiveAndAliveMerc( gusSelectedSoldier, TRUE, TRUE ); + HandleLocateSelectMerc( bID, LOCATEANDSELECT_MERC ); + // Center to guy.... + LocateSoldier( gusSelectedSoldier, SETLOCATOR ); + } + } + else + { + //change stance ->UP + if ( _KeyDown( ALT ) ) { if ( (gusSelectedSoldier != NOBODY) && ( gpItemPointer == NULL ) ) - GotoHeigherStance( gusSelectedSoldier ); + GotoHeigherStance( gusSelectedSoldier ); return; - } + } - //ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"wheel %d", gViewportRegion.WheelState); - if ( gusSelectedSoldier != NOBODY ) - { //Select next merc - bID = FindNextMercInTeamPanel( gusSelectedSoldier, FALSE, FALSE ); - HandleLocateSelectMerc( bID, LOCATEANDSELECT_MERC ); - // Center to guy.... - LocateSoldier( gusSelectedSoldier, SETLOCATOR ); - } - } - //*puiNewEvent = M_ON_TERRAIN; ???????????????? - } + //ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"wheel %d", gViewportRegion.WheelState); + if ( gusSelectedSoldier != NOBODY ) + { //Select next merc + bID = FindNextMercInTeamPanel( gusSelectedSoldier, FALSE, FALSE ); + HandleLocateSelectMerc( bID, LOCATEANDSELECT_MERC ); + // Center to guy.... + LocateSoldier( gusSelectedSoldier, SETLOCATOR ); + } + } + //*puiNewEvent = M_ON_TERRAIN; ???????????????? + } } + + void HandleMouseRTMButton( UINT32 *puiNewEvent ) { if ( _KeyDown( ALT ) ) @@ -2078,6 +2080,8 @@ void HandleMouseRTMButton( UINT32 *puiNewEvent ) else *puiNewEvent = LC_LOOK; } + + void HandleMouseRTX1Button( UINT32 *puiNewEvent ) { if ( !_KeyDown( ALT ) && !_KeyDown( SHIFT )) diff --git a/Tactical/ShopKeeper Interface.cpp b/Tactical/ShopKeeper Interface.cpp index a09f5020..5e7b5ca6 100644 --- a/Tactical/ShopKeeper Interface.cpp +++ b/Tactical/ShopKeeper Interface.cpp @@ -379,17 +379,17 @@ BOOLEAN gfPerformTransactionInProgress = FALSE; BOOLEAN gfCommonQuoteUsedThisSession[ NUM_COMMON_SK_QUOTES ]; -extern SOLDIERTYPE *gpSMCurrentMerc; -extern SOLDIERTYPE *gpItemDescSoldier; +extern SOLDIERTYPE *gpSMCurrentMerc; +extern SOLDIERTYPE *gpItemDescSoldier; extern MOUSE_REGION gItemDescAttachmentRegions[MAX_ATTACHMENTS]; extern MOUSE_REGION gInvDesc; -extern BOOLEAN gfSMDisableForItems; -extern OBJECTTYPE *gpItemDescObject; -extern OBJECTTYPE *gpItemDescPrevObject; -extern OBJECTTYPE *gpItemDescPrevObject; -extern void HandleShortCutExitState( void ); -extern UINT16 gubSelectSMPanelToMerc; -extern INT32 giItemDescAmmoButton; +extern BOOLEAN gfSMDisableForItems; +extern OBJECTTYPE *gpItemDescObject; +extern OBJECTTYPE *gpItemDescPrevObject; +extern OBJECTTYPE *gpItemDescPrevObject; +extern void HandleShortCutExitState( void ); +extern SoldierID gubSelectSMPanelToMerc; +extern INT32 giItemDescAmmoButton; extern BOOLEAN BltVSurfaceUsingDD( HVSURFACE hDestVSurface, HVSURFACE hSrcVSurface, UINT32 fBltFlags, INT32 iDestX, INT32 iDestY, RECT *SrcRect ); @@ -1686,16 +1686,13 @@ void GetShopKeeperInterfaceUserInput() case SPACE: { - UINT8 ubID; - DeleteItemDescriptionBox( ); // skip Robot and EPCs - ubID = FindNextActiveAndAliveMerc( gpSMCurrentMerc, FALSE, TRUE ); - + SoldierID ubID = FindNextActiveAndAliveMerc( gpSMCurrentMerc, FALSE, TRUE ); gubSelectSMPanelToMerc = ubID; - LocateSoldier( ubID, DONTSETLOCATOR ); + // refresh background for player slots (in case item values change due to Flo's discount) gubSkiDirtyLevel = SKI_DIRTY_LEVEL2; } diff --git a/Tactical/Soldier Ani.cpp b/Tactical/Soldier Ani.cpp index 602800af..51a097d5 100644 --- a/Tactical/Soldier Ani.cpp +++ b/Tactical/Soldier Ani.cpp @@ -107,7 +107,7 @@ extern void PlaySoldierFootstepSound( SOLDIERTYPE *pSoldier ); extern UINT16 NumCapableEnemyInSector( ); extern BOOLEAN gfKillingGuysForLosingBattle; -extern UINT16 gubInterruptProvoker; +extern SoldierID gubInterruptProvoker; extern UINT16 PickSoldierReadyAnimation( SOLDIERTYPE *pSoldier, BOOLEAN fEndReady, BOOLEAN fHipStance ); diff --git a/Tactical/Squads.cpp b/Tactical/Squads.cpp index 26d7f5c3..fe88875d 100644 --- a/Tactical/Squads.cpp +++ b/Tactical/Squads.cpp @@ -1327,8 +1327,6 @@ void RebuildSquad( INT8 bSquadValue ) void UpdateCurrentlySelectedMerc( SOLDIERTYPE *pSoldier, INT8 bSquadValue ) { - UINT16 ubID; - // if this squad is the current one and and the psoldier is the currently selected soldier, get rid of 'em if( bSquadValue != iCurrentTacticalSquad ) { @@ -1338,7 +1336,7 @@ void UpdateCurrentlySelectedMerc( SOLDIERTYPE *pSoldier, INT8 bSquadValue ) // Are we the selected guy? if( gusSelectedSoldier == pSoldier->ubID ) { - ubID = FindNextActiveAndAliveMerc( pSoldier, FALSE, FALSE ); + SoldierID ubID = FindNextActiveAndAliveMerc( pSoldier, FALSE, FALSE ); if ( ubID != NOBODY && ubID != gusSelectedSoldier ) { diff --git a/Tactical/opplist.cpp b/Tactical/opplist.cpp index d2649faf..63be9d2e 100644 --- a/Tactical/opplist.cpp +++ b/Tactical/opplist.cpp @@ -87,7 +87,7 @@ void HandleManNoLongerSeen( SOLDIERTYPE * pSoldier, SOLDIERTYPE * pOpponent, INT // The_Bob - real time sneaking code 01/06/09 extern void CancelItemPointer(void); extern BOOLEAN NobodyAlerted(void); -extern void ShowRadioLocator( UINT16 ubID, UINT8 ubLocatorSpeed ); +extern void ShowRadioLocator( SoldierID ubID, UINT8 ubLocatorSpeed ); //#define TESTOPPLIST // for ManSeesMan() @@ -116,7 +116,7 @@ BOOLEAN gfMikeShouldSayHi = FALSE; BOOLEAN gfMorrisShouldSayHi = FALSE; #endif -UINT16 gubBestToMakeSighting[BEST_SIGHTING_ARRAY_SIZE]; +SoldierID gubBestToMakeSighting[BEST_SIGHTING_ARRAY_SIZE]; UINT8 gubBestToMakeSightingSize = 0; //BOOLEAN gfHumanSawSomeoneInRealtime; @@ -124,11 +124,11 @@ BOOLEAN gfDelayResolvingBestSightingDueToDoor = FALSE; #define SHOULD_BECOME_HOSTILE_SIZE 32 -UINT16 gubShouldBecomeHostileOrSayQuote[ SHOULD_BECOME_HOSTILE_SIZE ]; +SoldierID gubShouldBecomeHostileOrSayQuote[ SHOULD_BECOME_HOSTILE_SIZE ]; UINT8 gubNumShouldBecomeHostileOrSayQuote; // NB this ID is set for someone opening a door -UINT16 gubInterruptProvoker = NOBODY; +SoldierID gubInterruptProvoker = NOBODY; INT8 gbPublicOpplist[MAXTEAMS][TOTAL_SOLDIERS]; INT8 gbSeenOpponents[TOTAL_SOLDIERS][TOTAL_SOLDIERS]; @@ -356,9 +356,8 @@ INT16 AdjustMaxSightRangeForEnvEffects( SOLDIERTYPE *pSoldier, INT8 bLightLevel, void SwapBestSightingPositions( INT8 bPos1, INT8 bPos2 ) { - UINT16 ubTemp; + SoldierID ubTemp = gubBestToMakeSighting[ bPos1 ]; - ubTemp = gubBestToMakeSighting[ bPos1 ]; gubBestToMakeSighting[ bPos1 ] = gubBestToMakeSighting[ bPos2 ]; gubBestToMakeSighting[ bPos2 ] = ubTemp; } @@ -406,7 +405,7 @@ void ReevaluateBestSightingPosition( SOLDIERTYPE * pSoldier, INT8 bInterruptDuel // must percolate him down for ( ubLoop2 = ubLoop + 1; ubLoop2 < gubBestToMakeSightingSize; ubLoop2++ ) { - if ( gubBestToMakeSighting[ ubLoop2 ] != NOBODY && MercPtrs[ gubBestToMakeSighting[ ubLoop2 - 1 ] ]->aiData.bInterruptDuelPts < MercPtrs[ gubBestToMakeSighting[ ubLoop2 ] ]->aiData.bInterruptDuelPts ) + if ( gubBestToMakeSighting[ ubLoop2 ] != NOBODY && gubBestToMakeSighting[ ubLoop2 - 1 ]->aiData.bInterruptDuelPts < gubBestToMakeSighting[ ubLoop2 ]->aiData.bInterruptDuelPts ) { SwapBestSightingPositions( (UINT8) (ubLoop2 - 1), ubLoop2 ); } @@ -439,11 +438,11 @@ void ReevaluateBestSightingPosition( SOLDIERTYPE * pSoldier, INT8 bInterruptDuel { for ( ubLoop = 0; ubLoop < gubBestToMakeSightingSize; ubLoop++ ) { - if ( pSoldier->RecognizeAsCombatant(gubBestToMakeSighting[ ubLoop ]) && (gubBestToMakeSighting[ ubLoop ] == NOBODY) || ( gubBestToMakeSighting[ ubLoop ] != NOBODY && bInterruptDuelPts > MercPtrs[ gubBestToMakeSighting[ ubLoop ] ]->aiData.bInterruptDuelPts ) ) + if ( pSoldier->RecognizeAsCombatant(gubBestToMakeSighting[ ubLoop ]) && (gubBestToMakeSighting[ ubLoop ] == NOBODY) || ( gubBestToMakeSighting[ ubLoop ] != NOBODY && bInterruptDuelPts > gubBestToMakeSighting[ ubLoop ]->aiData.bInterruptDuelPts ) ) { if ( gubBestToMakeSighting[ gubBestToMakeSightingSize - 1 ] != NOBODY ) { - MercPtrs[ gubBestToMakeSighting[ gubBestToMakeSightingSize - 1 ] ]->aiData.bInterruptDuelPts = NO_INTERRUPT; + gubBestToMakeSighting[ gubBestToMakeSightingSize - 1 ]->aiData.bInterruptDuelPts = NO_INTERRUPT; DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String( "RBSP: resetting points for %d to zilch", pSoldier->ubID ) ); } @@ -468,7 +467,7 @@ void ReevaluateBestSightingPosition( SOLDIERTYPE * pSoldier, INT8 bInterruptDuel { if ( (gubBestToMakeSighting[ ubLoop ] != NOBODY) ) { - DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String( "RBSP entry %d: %d (%d pts)", ubLoop, gubBestToMakeSighting[ ubLoop ], MercPtrs[ gubBestToMakeSighting[ ubLoop ] ]->aiData.bInterruptDuelPts ) ); + DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String( "RBSP entry %d: %d (%d pts)", ubLoop, gubBestToMakeSighting[ ubLoop ], gubBestToMakeSighting[ ubLoop ]->aiData.bInterruptDuelPts ) ); } } @@ -503,52 +502,51 @@ void HandleBestSightingPositionInRealtime( void ) { // The_Bob - real time sneaking code 01/06/09 // if real time sneaking conditions are met... // this is now in the preferences window - SANDRO - if (gGameSettings.fOptions[TOPTION_ALLOW_REAL_TIME_SNEAK] && MercPtrs[gubBestToMakeSighting[ 0 ]]->bTeam == OUR_TEAM && NobodyAlerted() ) + if (gGameSettings.fOptions[TOPTION_ALLOW_REAL_TIME_SNEAK] && gubBestToMakeSighting[ 0 ]->bTeam == OUR_TEAM && NobodyAlerted() ) { // get rid of the item under cursor (we gotta react FAST) CancelItemPointer(); // select (and center screen on) the merc who saw the enemy // HEADROCK HAM 3.6: A much-requested toggle. - if (gusSelectedSoldier != MercPtrs[gubBestToMakeSighting[ 0 ]]->ubID && - !gGameExternalOptions.fNoAutoFocusChangeInRealtimeSneak) - SelectSoldier (MercPtrs[gubBestToMakeSighting[ 0 ]]->ubID, false, true); + if (gusSelectedSoldier != gubBestToMakeSighting[ 0 ]->ubID && !gGameExternalOptions.fNoAutoFocusChangeInRealtimeSneak) + SelectSoldier(gubBestToMakeSighting[ 0 ]->ubID, false, true); // if not quiet, emit a message warning the player if (!gGameExternalOptions.fQuietRealTimeSneak) ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, New113Message[MSG113_RTM_ENEMIES_SPOOTED]); return; // and do nothing } - else if ( MercPtrs[gubBestToMakeSighting[ 0 ]]->bTeam != OUR_TEAM && MercPtrs[gubBestToMakeSighting[ 0 ]]->aiData.bOppCnt > 0 ) + else if ( gubBestToMakeSighting[ 0 ]->bTeam != OUR_TEAM && gubBestToMakeSighting[ 0 ]->aiData.bOppCnt > 0 ) { // otherwise, simply award the turn to the team that saw the enemy first - EnterCombatMode( MercPtrs[gubBestToMakeSighting[ 0 ]]->bTeam ); + EnterCombatMode( gubBestToMakeSighting[ 0 ]->bTeam ); } else // otherwise, simply award the turn to the team that saw the enemy first - EnterCombatMode( MercPtrs[gubBestToMakeSighting[ 0 ]]->bTeam ); + EnterCombatMode( gubBestToMakeSighting[ 0 ]->bTeam ); } else { // if 1st and 2nd on same team, or 1st and 3rd on same team, or there IS no 3rd, award turn to 1st - if ( /*MercPtrs[gubBestToMakeSighting[ 0 ]]->aiData.bOppCnt > 0 &&*/ ( MercPtrs[gubBestToMakeSighting[ 0 ]]->bTeam == MercPtrs[gubBestToMakeSighting[ 1 ]]->bTeam ) || - ( (gubBestToMakeSighting[ 2 ] == NOBODY) || ( MercPtrs[gubBestToMakeSighting[ 0 ]]->bTeam == MercPtrs[gubBestToMakeSighting[ 2 ]]->bTeam ) ) + if ( /*gubBestToMakeSighting[ 0 ]->aiData.bOppCnt > 0 &&*/ ( gubBestToMakeSighting[ 0 ]->bTeam == gubBestToMakeSighting[ 1 ]->bTeam ) || + ( (gubBestToMakeSighting[ 2 ] == NOBODY) || ( gubBestToMakeSighting[ 0 ]->bTeam == gubBestToMakeSighting[ 2 ]->bTeam ) ) ) { - EnterCombatMode( MercPtrs[gubBestToMakeSighting[ 0 ]]->bTeam ); + EnterCombatMode( gubBestToMakeSighting[ 0 ]->bTeam ); } - else //if ( MercPtrs[gubBestToMakeSighting[ 1 ]]->aiData.bOppCnt > 0 ) // give turn to 2nd best but interrupt to 1st + else //if ( gubBestToMakeSighting[ 1 ]->aiData.bOppCnt > 0 ) // give turn to 2nd best but interrupt to 1st { DebugMsg( TOPIC_JA2, DBG_LEVEL_3, "Entering combat mode: turn for 2nd best, int for best" ); - EnterCombatMode( MercPtrs[gubBestToMakeSighting[ 1 ]]->bTeam ); + EnterCombatMode( gubBestToMakeSighting[ 1 ]->bTeam ); // 2nd guy loses control AddToIntList( gubBestToMakeSighting[ 1 ], FALSE, TRUE); // 1st guy gains control AddToIntList( gubBestToMakeSighting[ 0 ], TRUE, TRUE); // done - DoneAddingToIntList( MercPtrs[gubBestToMakeSighting[ 0 ]], TRUE, SIGHTINTERRUPT ); + DoneAddingToIntList( gubBestToMakeSighting[ 0 ], TRUE, SIGHTINTERRUPT ); } } } @@ -557,8 +555,8 @@ void HandleBestSightingPositionInRealtime( void ) { if ( gubBestToMakeSighting[ ubLoop ] != NOBODY ) { - MercPtrs[ gubBestToMakeSighting[ ubLoop ]]->aiData.bInterruptDuelPts = NO_INTERRUPT; - DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String( "RBSP: done, resetting points for %d to zilch", MercPtrs[ gubBestToMakeSighting[ ubLoop ] ]->ubID ) ); + gubBestToMakeSighting[ ubLoop ]->aiData.bInterruptDuelPts = NO_INTERRUPT; + DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String( "RBSP: done, resetting points for %d to zilch", gubBestToMakeSighting[ ubLoop ]->ubID ) ); } } @@ -583,7 +581,7 @@ void HandleBestSightingPositionInTurnbased( void ) if ( gubBestToMakeSighting[ 0 ] != NOBODY ) { - if ( MercPtrs[ gubBestToMakeSighting[ 0 ] ]->bTeam != gTacticalStatus.ubCurrentTeam ) + if ( gubBestToMakeSighting[ 0 ]->bTeam != gTacticalStatus.ubCurrentTeam ) { // interrupt! @@ -605,7 +603,7 @@ void HandleBestSightingPositionInTurnbased( void ) } } - else if ( MercPtrs[ gubBestToMakeSighting[ ubLoop ] ]->bTeam == gTacticalStatus.ubCurrentTeam ) + else if ( gubBestToMakeSighting[ ubLoop ]->bTeam == gTacticalStatus.ubCurrentTeam ) { fOk = TRUE; break; @@ -621,7 +619,7 @@ void HandleBestSightingPositionInTurnbased( void ) AddToIntList( gubBestToMakeSighting[ ubLoop2 ], TRUE, TRUE); } // done - DoneAddingToIntList( MercPtrs[ gubBestToMakeSighting[ ubLoop ] ], TRUE, SIGHTINTERRUPT ); + DoneAddingToIntList( gubBestToMakeSighting[ ubLoop ], TRUE, SIGHTINTERRUPT ); } } @@ -629,8 +627,8 @@ void HandleBestSightingPositionInTurnbased( void ) { if ( gubBestToMakeSighting[ ubLoop ] != NOBODY ) { - MercPtrs[ gubBestToMakeSighting[ ubLoop ]]->aiData.bInterruptDuelPts = NO_INTERRUPT; - DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String( "RBSP (TB): done, resetting points for %d to zilch", MercPtrs[ gubBestToMakeSighting[ ubLoop ] ]->ubID ) ); + gubBestToMakeSighting[ ubLoop ]->aiData.bInterruptDuelPts = NO_INTERRUPT; + DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String( "RBSP (TB): done, resetting points for %d to zilch", gubBestToMakeSighting[ ubLoop ]->ubID ) ); } } @@ -672,13 +670,13 @@ void InitSightArrays( void ) } } -void AddToShouldBecomeHostileOrSayQuoteList( UINT16 ubID ) +void AddToShouldBecomeHostileOrSayQuoteList( SoldierID ubID ) { UINT16 ubLoop; Assert( gubNumShouldBecomeHostileOrSayQuote < SHOULD_BECOME_HOSTILE_SIZE ); - if ( MercPtrs[ ubID ]->stats.bLife < OKLIFE ) + if ( ubID->stats.bLife < OKLIFE ) { return; } @@ -696,15 +694,15 @@ void AddToShouldBecomeHostileOrSayQuoteList( UINT16 ubID ) gubNumShouldBecomeHostileOrSayQuote++; } -UINT16 SelectSpeakerFromHostileOrSayQuoteList( void ) +SoldierID SelectSpeakerFromHostileOrSayQuoteList( void ) { - UINT16 ubProfileList[ SHOULD_BECOME_HOSTILE_SIZE ]; // NB list of merc IDs, not profiles! + SoldierID IDList[ SHOULD_BECOME_HOSTILE_SIZE ]; UINT8 ubLoop, ubNumProfiles = 0; SOLDIERTYPE * pSoldier; for ( ubLoop = 0; ubLoop < gubNumShouldBecomeHostileOrSayQuote; ubLoop++ ) { - pSoldier = MercPtrs[ gubShouldBecomeHostileOrSayQuote[ ubLoop ] ]; + pSoldier = gubShouldBecomeHostileOrSayQuote[ ubLoop ]; if ( pSoldier->ubProfile != NO_PROFILE ) { @@ -713,7 +711,7 @@ UINT16 SelectSpeakerFromHostileOrSayQuoteList( void ) if ( NPCHasUnusedHostileRecord( pSoldier->ubProfile, APPROACH_DECLARATION_OF_HOSTILITY ) ) { - ubProfileList[ ubNumProfiles ] = gubShouldBecomeHostileOrSayQuote[ ubLoop ]; + IDList[ ubNumProfiles ] = gubShouldBecomeHostileOrSayQuote[ ubLoop ]; ubNumProfiles++; } else @@ -731,7 +729,7 @@ UINT16 SelectSpeakerFromHostileOrSayQuoteList( void ) } else { - return( ubProfileList[ Random( ubNumProfiles ) ] ); + return(IDList[ Random( ubNumProfiles ) ] ); } } @@ -745,7 +743,8 @@ void CheckHostileOrSayQuoteList( void ) } else { - UINT16 ubSpeaker, ubLoop; + SoldierID ubSpeaker; + UINT16 ubLoop; SOLDIERTYPE * pSoldier; ubSpeaker = SelectSpeakerFromHostileOrSayQuoteList(); @@ -754,7 +753,7 @@ void CheckHostileOrSayQuoteList( void ) // make sure everyone on this list is hostile for ( ubLoop = 0; ubLoop < gubNumShouldBecomeHostileOrSayQuote; ubLoop++ ) { - pSoldier = MercPtrs[ gubShouldBecomeHostileOrSayQuote[ ubLoop ] ]; + pSoldier = gubShouldBecomeHostileOrSayQuote[ ubLoop ]; if ( pSoldier->aiData.bNeutral ) { MakeCivHostile(pSoldier); @@ -789,13 +788,13 @@ void CheckHostileOrSayQuoteList( void ) // stop everyone? // We want to make this guy visible to the player. - if ( MercPtrs[ ubSpeaker ]->bVisible != TRUE ) + if ( ubSpeaker->bVisible != TRUE ) { gbPublicOpplist[ gbPlayerNum ][ ubSpeaker ] = HEARD_THIS_TURN; - HandleSight( MercPtrs[ ubSpeaker ], SIGHT_LOOK | SIGHT_RADIO ); + HandleSight( ubSpeaker, SIGHT_LOOK | SIGHT_RADIO ); } // trigger hater - TriggerNPCWithIHateYouQuote( MercPtrs[ ubSpeaker ]->ubProfile ); + TriggerNPCWithIHateYouQuote( ubSpeaker->ubProfile ); } } } @@ -1743,8 +1742,8 @@ void AllTeamsLookForAll(UINT8 ubAllowInterrupts) InterruptsAllowed = TRUE; */ - // reset interrupt only guynum which may have been used - gubInterruptProvoker = NOBODY; + // reset interrupt only guynum which may have been used + gubInterruptProvoker = NOBODY; } @@ -5528,7 +5527,7 @@ UINT8 DoorOpeningNoise( SOLDIERTYPE *pSoldier ) return( ubDoorNoise ); } -void MakeNoise(UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubVolume, UINT8 ubNoiseType, STR16 zNoiseMessage ) +void MakeNoise(SoldierID ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubVolume, UINT8 ubNoiseType, STR16 zNoiseMessage ) { EV_S_NOISE SNoise; diff --git a/Tactical/opplist.h b/Tactical/opplist.h index 381d8f65..c49a8eab 100644 --- a/Tactical/opplist.h +++ b/Tactical/opplist.h @@ -139,7 +139,7 @@ void DebugSoldierPage4( ); UINT8 MovementNoise( SOLDIERTYPE *pSoldier ); UINT8 DoorOpeningNoise( SOLDIERTYPE *pSoldier ); -void MakeNoise(UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubVolume, UINT8 ubNoiseType, STR16 zNoiseMessage = NULL ); +void MakeNoise(SoldierID ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubVolume, UINT8 ubNoiseType, STR16 zNoiseMessage = NULL ); void OurNoise( UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubVolume, UINT8 ubNoiseType, STR16 zNoiseMessage = NULL ); void ResolveInterruptsVs( SOLDIERTYPE * pSoldier, UINT8 ubInterruptType); @@ -164,7 +164,7 @@ void CheckHostileOrSayQuoteList( void ); void InitOpplistForDoorOpening( void ); UINT8 DoorOpeningNoise( SOLDIERTYPE * pSoldier ); -void AddToShouldBecomeHostileOrSayQuoteList( UINT16 ubID ); +void AddToShouldBecomeHostileOrSayQuoteList( SoldierID ubID ); //extern INT8 gbLightSighting[1][16]; diff --git a/TacticalAI/PanicButtons.cpp b/TacticalAI/PanicButtons.cpp index dd64b504..61e8608f 100644 --- a/TacticalAI/PanicButtons.cpp +++ b/TacticalAI/PanicButtons.cpp @@ -13,13 +13,13 @@ void MakeClosestEnemyChosenOne() { - UINT32 cnt; - INT16 sPathCost, sShortestPath = 1000; - INT8 bOldKeys = -1; - UINT16 ubClosestEnemy = NOBODY; + UINT32 cnt; + INT16 sPathCost, sShortestPath = 1000; + INT8 bOldKeys = -1; + SoldierID ubClosestEnemy = NOBODY; SOLDIERTYPE * pSoldier; - INT8 bPanicTrigger; - INT32 sPanicTriggerGridNo; + INT8 bPanicTrigger; + INT32 sPanicTriggerGridNo; if ( ! (gTacticalStatus.fPanicFlags & PANIC_TRIGGERS_HERE) ) { @@ -162,7 +162,7 @@ void MakeClosestEnemyChosenOne() NumMessage("TEST MSG: The chosen one is ",TheChosenOne); #endif - pSoldier = MercPtrs[gTacticalStatus.ubTheChosenOne]; + pSoldier = gTacticalStatus.ubTheChosenOne; if ( pSoldier->aiData.bAlertStatus < STATUS_RED ) { pSoldier->aiData.bAlertStatus = STATUS_RED; diff --git a/TileEngine/Explosion Control.cpp b/TileEngine/Explosion Control.cpp index 74e67f99..7e1e1f4f 100644 --- a/TileEngine/Explosion Control.cpp +++ b/TileEngine/Explosion Control.cpp @@ -172,15 +172,15 @@ EXPLOSION_DATA gExpAniData[ NUM_EXP_TYPES ] = #define MAX_BOMB_QUEUE 40 ExplosionQueueElement gExplosionQueue[MAX_BOMB_QUEUE]; -UINT8 gubElementsOnExplosionQueue = 0; -BOOLEAN gfExplosionQueueActive = FALSE; +UINT8 gubElementsOnExplosionQueue = 0; +BOOLEAN gfExplosionQueueActive = FALSE; -BOOLEAN gfExplosionQueueMayHaveChangedSight = FALSE; -UINT16 gubPersonToSetOffExplosions = NOBODY; +BOOLEAN gfExplosionQueueMayHaveChangedSight = FALSE; +SoldierID gubPersonToSetOffExplosions = NOBODY; INT32 gsTempActionGridNo = NOWHERE; -extern UINT16 gubInterruptProvoker; +extern SoldierID gubInterruptProvoker; #define NUM_EXPLOSION_SLOTS 100 @@ -245,7 +245,7 @@ void RecountExplosions( void ) extern void HandleLoyaltyForDemolitionOfBuilding( SOLDIERTYPE *pSoldier, INT16 sPointsDmg ); // GENERATE EXPLOSION -void InternalIgniteExplosion( UINT16 ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGridNo, UINT16 usItem, BOOLEAN fLocate, INT8 bLevel, UINT8 ubDirection, OBJECTTYPE * pObj ) +void InternalIgniteExplosion( SoldierID ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGridNo, UINT16 usItem, BOOLEAN fLocate, INT8 bLevel, UINT8 ubDirection, OBJECTTYPE * pObj ) { #ifdef JA2BETAVERSION if (is_networked) { @@ -273,7 +273,7 @@ void InternalIgniteExplosion( UINT16 ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT3 // Let's check for the attacker first. if ( ubOwner != NOBODY ) { - OBJECTTYPE* pUsedGun = MercPtrs[ ubOwner ]->GetUsedWeapon( &MercPtrs [ ubOwner ]->inv[MercPtrs[ubOwner]->ubAttackingHand] ); + OBJECTTYPE* pUsedGun = ubOwner->GetUsedWeapon( &( ubOwner->inv[ ubOwner->ubAttackingHand ] ) ); ammotype = (*pUsedGun)[0]->data.gun.ubGunAmmoType; @@ -283,7 +283,7 @@ void InternalIgniteExplosion( UINT16 ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT3 } // Flugente: campaign stats - if ( MercPtrs[ ubOwner ]->bTeam == OUR_TEAM ) + if ( ubOwner->bTeam == OUR_TEAM ) { if ( Item[ usItem ].usItemClass & IC_EXPLOSV ) gCampaignStats.AddConsumption(CAMPAIGN_CONSUMED_EXPLOSIVES, (FLOAT)(Item[usItem].ubWeight) ); @@ -344,7 +344,7 @@ void InternalIgniteExplosion( UINT16 ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT3 UINT16 tmp; if ( Item[ usItem ].usItemClass & IC_EXPLOSV && ubOwner != NOBODY && ubOwner < NUM_PROFILES && InARoom( sGridNo, &tmp ) ) { - HandleLoyaltyForDemolitionOfBuilding( MercPtrs[ubOwner], Explosive[ Item[ usItem ].ubClassIndex ].ubDamage ); + HandleLoyaltyForDemolitionOfBuilding( ubOwner, Explosive[ Item[ usItem ].ubClassIndex ].ubDamage ); // Flugente: campaign stats gCurrentIncident.usIncidentFlags |= INCIDENT_BUILDINGS_DAMAGED; @@ -386,7 +386,7 @@ void InternalIgniteExplosion( UINT16 ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT3 } -void IgniteExplosion( UINT16 ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT8 ubDirection, OBJECTTYPE * pObj ) +void IgniteExplosion( SoldierID ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT8 ubDirection, OBJECTTYPE * pObj ) { InternalIgniteExplosion( ubOwner, sX, sY, sZ, sGridNo, usItem, TRUE, bLevel, ubDirection, pObj ); } @@ -1898,7 +1898,7 @@ BOOLEAN DamageSoldierFromBlast( UINT16 ubPerson, UINT16 ubOwner, INT32 sBombGrid return( TRUE ); } -BOOLEAN DishOutGasDamage( SOLDIERTYPE * pSoldier, EXPLOSIVETYPE * pExplosive, INT16 sSubsequent, BOOLEAN fRecompileMovementCosts, INT16 sWoundAmt, INT16 sBreathAmt, UINT16 ubOwner, BOOL fFromRemoteClient ) +BOOLEAN DishOutGasDamage( SOLDIERTYPE * pSoldier, EXPLOSIVETYPE * pExplosive, INT16 sSubsequent, BOOLEAN fRecompileMovementCosts, INT16 sWoundAmt, INT16 sBreathAmt, SoldierID ubOwner, BOOL fFromRemoteClient ) { // OJW - 20091028 if (is_networked && is_client) @@ -1916,7 +1916,7 @@ BOOLEAN DishOutGasDamage( SOLDIERTYPE * pSoldier, EXPLOSIVETYPE * pExplosive, IN } #ifdef JA2BETAVERSION CHAR tmpMPDbgString[512]; - sprintf(tmpMPDbgString,"DishOutGasDamage ( ubSoldierID : %i , ubExplosiveType : %i , sSubsequent : %i , recompileMoveCosts : %i , sWoundAmt : %i , sBreathAmt : %i , ubOwner : %i , fRemote : %i)\n", pSoldier->ubID , pExplosive->ubType , sSubsequent , fRecompileMovementCosts , sWoundAmt , sBreathAmt , ubOwner , fFromRemoteClient ); + sprintf(tmpMPDbgString,"DishOutGasDamage ( ubSoldierID : %i , ubExplosiveType : %i , sSubsequent : %i , recompileMoveCosts : %i , sWoundAmt : %i , sBreathAmt : %i , ubOwner : %i , fRemote : %i)\n", pSoldier->ubID.i , pExplosive->ubType , sSubsequent , fRecompileMovementCosts , sWoundAmt , sBreathAmt , ubOwner.i , fFromRemoteClient ); MPDebugMsg(tmpMPDbgString); #endif } @@ -2155,9 +2155,9 @@ BOOLEAN DishOutGasDamage( SOLDIERTYPE * pSoldier, EXPLOSIVETYPE * pExplosive, IN pSoldier->DoMercBattleSound( BATTLE_SOUND_HIT1 ); } - if ( ubOwner != NOBODY && MercPtrs[ ubOwner ]->bTeam == gbPlayerNum && pSoldier->bTeam != gbPlayerNum ) + if ( ubOwner != NOBODY && ubOwner->bTeam == gbPlayerNum && pSoldier->bTeam != gbPlayerNum ) { - ProcessImplicationsOfPCAttack( MercPtrs[ ubOwner ], &pSoldier, REASON_EXPLOSION ); + ProcessImplicationsOfPCAttack( ubOwner, &pSoldier, REASON_EXPLOSION ); } } return( fRecompileMovementCosts ); @@ -3800,7 +3800,7 @@ void AddBombToQueue( UINT32 uiWorldBombIndex, UINT32 uiTimeStamp, BOOL fFromRemo if (soldierID == NOBODY) soldierID = wi.object[0]->data.misc.ubBombOwner - 2; // undo the hack - if (IsOurSoldier(gubPersonToSetOffExplosions) || IsOurSoldier((SOLDIERTYPE*)soldierID)) + if (IsOurSoldier((SOLDIERTYPE*)gubPersonToSetOffExplosions) || IsOurSoldier((SOLDIERTYPE*)soldierID)) { // we set off the bomb (could be failed disarm) or we own it, tell the other clients we are setting it off send_detonate_explosive(iWorldIndex,gubPersonToSetOffExplosions); @@ -3827,7 +3827,7 @@ void AddBombToQueue( UINT32 uiWorldBombIndex, UINT32 uiTimeStamp, BOOL fFromRemo } // Flugente: activate everything connected to a tripwire in the surrounding if sGridNo on level bLevel with regard to the tripwire netwrok and hierarchy determined by ubFlag -BOOLEAN ActivateSurroundingTripwire( UINT16 ubID, INT32 sGridNo, INT8 bLevel, UINT32 ubFlag ) +BOOLEAN ActivateSurroundingTripwire( SoldierID ubID, INT32 sGridNo, INT8 bLevel, UINT32 ubFlag ) { UINT32 uiTimeStamp= GetJA2Clock(); BOOLEAN fFoundMine = FALSE; @@ -4285,9 +4285,9 @@ void HandleExplosionQueue( void ) // re-enable sight gTacticalStatus.uiFlags &= (~DISALLOW_SIGHT); - if ( gubPersonToSetOffExplosions != NOBODY && !(MercPtrs[ gubPersonToSetOffExplosions ]->flags.uiStatusFlags & SOLDIER_PC) ) + if ( gubPersonToSetOffExplosions != NOBODY && !(gubPersonToSetOffExplosions->flags.uiStatusFlags & SOLDIER_PC) ) { - FreeUpNPCFromPendingAction( MercPtrs[ gubPersonToSetOffExplosions ] ); + FreeUpNPCFromPendingAction( gubPersonToSetOffExplosions ); } if (gfExplosionQueueMayHaveChangedSight) @@ -4588,11 +4588,11 @@ void DecayBombTimers( void ) // ATE: CC black magic.... if ( (*pObj)[0]->data.misc.ubBombOwner > 1 ) { - gubPersonToSetOffExplosions = (UINT8) ((*pObj)[0]->data.misc.ubBombOwner - 2); + gubPersonToSetOffExplosions = ((*pObj)[0]->data.misc.ubBombOwner - 2); // SANDRO - merc records - detonating explosives - if ( MercPtrs[ gubPersonToSetOffExplosions ]->ubProfile != NO_PROFILE && MercPtrs[ gubPersonToSetOffExplosions ]->bTeam == gbPlayerNum ) + if ( gubPersonToSetOffExplosions->ubProfile != NO_PROFILE && gubPersonToSetOffExplosions->bTeam == gbPlayerNum ) { - gMercProfiles[ MercPtrs[ gubPersonToSetOffExplosions ]->ubProfile ].records.usExpDetonated++; + gMercProfiles[ gubPersonToSetOffExplosions->ubProfile ].records.usExpDetonated++; } } else @@ -4642,11 +4642,11 @@ void DecayBombTimers( void ) // ATE: CC black magic.... if ( (*pObj)[0]->data.misc.ubBombOwner > 1 ) { - gubPersonToSetOffExplosions = (UINT8) ((*pObj)[0]->data.misc.ubBombOwner - 2); + gubPersonToSetOffExplosions = ((*pObj)[0]->data.misc.ubBombOwner - 2); // SANDRO - merc records - detonating explosives - if ( MercPtrs[ gubPersonToSetOffExplosions ]->ubProfile != NO_PROFILE && MercPtrs[ gubPersonToSetOffExplosions ]->bTeam == gbPlayerNum ) + if ( gubPersonToSetOffExplosions->ubProfile != NO_PROFILE && gubPersonToSetOffExplosions->bTeam == gbPlayerNum ) { - gMercProfiles[ MercPtrs[ gubPersonToSetOffExplosions ]->ubProfile ].records.usExpDetonated++; + gMercProfiles[ gubPersonToSetOffExplosions->ubProfile ].records.usExpDetonated++; } } else @@ -4667,7 +4667,7 @@ void DecayBombTimers( void ) } } -void SetOffBombsByFrequency( UINT16 ubID, INT8 bFrequency ) +void SetOffBombsByFrequency( SoldierID ubID, INT8 bFrequency ) { UINT32 uiWorldBombIndex; UINT32 uiTimeStamp; @@ -4893,7 +4893,7 @@ void SetOffPanicBombs( UINT16 ubID, INT8 bPanicTrigger ) } } -BOOLEAN SetOffBombsInGridNo( UINT16 ubID, INT32 sGridNo, BOOLEAN fAllBombs, INT8 bLevel ) +BOOLEAN SetOffBombsInGridNo( SoldierID ubID, INT32 sGridNo, BOOLEAN fAllBombs, INT8 bLevel ) { UINT32 uiWorldBombIndex; UINT32 uiTimeStamp; @@ -4916,7 +4916,7 @@ BOOLEAN SetOffBombsInGridNo( UINT16 ubID, INT32 sGridNo, BOOLEAN fAllBombs, INT8 if ( !fAllBombs && ubID != NOBODY && ItemIsATMine(pObj->usItem)) { // if this is not a vehicle, not a robot and not a tank, don't activate - if ( !(MercPtrs[ubID]->flags.uiStatusFlags & SOLDIER_VEHICLE) && !AM_A_ROBOT( MercPtrs[ubID] ) && !ARMED_VEHICLE( MercPtrs[ubID] ) && !ENEMYROBOT( MercPtrs[ubID] ) ) + if ( !(ubID->flags.uiStatusFlags & SOLDIER_VEHICLE) && !AM_A_ROBOT( ubID ) && !ARMED_VEHICLE( ubID ) && !ENEMYROBOT( ubID ) ) continue; } @@ -4977,7 +4977,7 @@ BOOLEAN SetOffBombsInGridNo( UINT16 ubID, INT32 sGridNo, BOOLEAN fAllBombs, INT8 // SANDRO - merc records // only if we blew up somebody not in our team(no achievement for blowing our guys :)), only if owner exists and have profile - if ( (MercPtrs[ubID]->bTeam != gbPlayerNum) && ((*pObj)[0]->data.misc.ubBombOwner > 1) ) + if ( (ubID->bTeam != gbPlayerNum) && ((*pObj)[0]->data.misc.ubBombOwner > 1) ) { if ( MercPtrs[ ((*pObj)[0]->data.misc.ubBombOwner - 2) ]->ubProfile != NO_PROFILE && MercPtrs[ ((*pObj)[0]->data.misc.ubBombOwner - 2) ]->bTeam == gbPlayerNum ) gMercProfiles[ MercPtrs[ ((*pObj)[0]->data.misc.ubBombOwner - 2) ]->ubProfile ].records.usExpDetonated++; diff --git a/TileEngine/Explosion Control.h b/TileEngine/Explosion Control.h index b668dd86..dd6b3747 100644 --- a/TileEngine/Explosion Control.h +++ b/TileEngine/Explosion Control.h @@ -100,8 +100,8 @@ extern EXPLOSIONTYPE gExplosionData[ NUM_EXPLOSION_SLOTS ]; extern UINT8 gubElementsOnExplosionQueue; extern BOOLEAN gfExplosionQueueActive; -void IgniteExplosion( UINT16 ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT8 ubDirection = DIRECTION_IRRELEVANT, OBJECTTYPE * pObj =NULL ); -void InternalIgniteExplosion( UINT16 ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGridNo, UINT16 usItem, BOOLEAN fLocate, INT8 bLevel, UINT8 ubDirection = DIRECTION_IRRELEVANT, OBJECTTYPE * pObj =NULL ); +void IgniteExplosion( SoldierID ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT8 ubDirection = DIRECTION_IRRELEVANT, OBJECTTYPE * pObj =NULL ); +void InternalIgniteExplosion( SoldierID ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGridNo, UINT16 usItem, BOOLEAN fLocate, INT8 bLevel, UINT8 ubDirection = DIRECTION_IRRELEVANT, OBJECTTYPE * pObj =NULL ); void GenerateExplosion( EXPLOSION_PARAMS *pExpParams ); @@ -110,8 +110,8 @@ void GenerateExplosion( EXPLOSION_PARAMS *pExpParams ); void HandleExplosionWarningAnimations( ); void DecayBombTimers( void ); -void SetOffBombsByFrequency( UINT16 ubID, INT8 bFrequency ); -BOOLEAN SetOffBombsInGridNo( UINT16 ubID, INT32 sGridNo, BOOLEAN fAllBombs, INT8 bLevel ); +void SetOffBombsByFrequency( SoldierID ubID, INT8 bFrequency ); +BOOLEAN SetOffBombsInGridNo( SoldierID ubID, INT32 sGridNo, BOOLEAN fAllBombs, INT8 bLevel ); void ActivateSwitchInGridNo( UINT16 ubID, INT32 sGridNo ); void SetOffPanicBombs( UINT16 ubID, INT8 bPanicTrigger ); @@ -137,12 +137,12 @@ void RemoveActiveExplosionMarkers(); // OJW - 20091028 - Explosion damage sync BOOLEAN DamageSoldierFromBlast( UINT16 ubPerson, UINT16 ubOwner, INT32 sBombGridNo, INT16 sWoundAmt, INT16 sBreathAmt, UINT32 uiDist, UINT16 usItem, INT16 sSubsequent, BOOL fFromRemoteClient = FALSE ); -BOOLEAN DishOutGasDamage( SOLDIERTYPE * pSoldier, EXPLOSIVETYPE * pExplosive, INT16 sSubsequent, BOOLEAN fRecompileMovementCosts, INT16 sWoundAmt, INT16 sBreathAmt, UINT16 ubOwner, BOOL fFromRemoteClient = FALSE ); +BOOLEAN DishOutGasDamage( SOLDIERTYPE * pSoldier, EXPLOSIVETYPE * pExplosive, INT16 sSubsequent, BOOLEAN fRecompileMovementCosts, INT16 sWoundAmt, INT16 sBreathAmt, SoldierID ubOwner, BOOL fFromRemoteClient = FALSE ); void SpreadEffect( INT32 sGridNo, UINT8 ubRadius, UINT16 usItem, UINT16 ubOwner, BOOLEAN fSubsequent, INT8 bLevel, INT32 iSmokeEffectNum, BOOL fFromRemoteClient = FALSE, BOOL fNewSmokeEffect = FALSE ); void AddBombToQueue( UINT32 uiWorldBombIndex, UINT32 uiTimeStamp, BOOL fFromRemoteClient = FALSE ); // Flugente: activate everything connected to a tripwire in the surrounding if sGridNo on level bLevel with regard to the tripwire netwrok and hierarchy determined by ubFlag -BOOLEAN ActivateSurroundingTripwire( UINT16 ubID, INT32 sGridNo, INT8 bLevel, UINT32 ubFlag ); +BOOLEAN ActivateSurroundingTripwire( SoldierID ubID, INT32 sGridNo, INT8 bLevel, UINT32 ubFlag ); // Flugente: A special function for tripwire gun traps. Search if pObj has a gun attached. If so, fire a shot from that gun in a specific direction. Afterwards place the gun on the ground void CheckAndFireTripwireGun( OBJECTTYPE* pObj, INT32 sGridNo, INT8 bLevel, UINT16 ubId, UINT8 ubDirection ); From 274be524e678e679d8ceb2144cac26015843148f Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 17 Nov 2024 16:25:12 +0200 Subject: [PATCH 075/192] More functions converted to SoldierID --- Tactical/Animation Data.cpp | 20 ++++++------ Tactical/Animation Data.h | 10 +++--- Tactical/Interface Panels.cpp | 2 +- Tactical/Interface.cpp | 10 ++---- Tactical/Interface.h | 8 ++--- Tactical/Overhead.cpp | 24 +++++++------- Tactical/Overhead.h | 2 +- Tactical/opplist.cpp | 2 +- TileEngine/Explosion Control.cpp | 48 ++++++++++++++-------------- TileEngine/Explosion Control.h | 38 ++++++++++------------ TileEngine/structure.cpp | 54 ++++++++++++++++---------------- TileEngine/structure.h | 4 +-- 12 files changed, 107 insertions(+), 115 deletions(-) diff --git a/Tactical/Animation Data.cpp b/Tactical/Animation Data.cpp index 0a582d63..b50989f6 100644 --- a/Tactical/Animation Data.cpp +++ b/Tactical/Animation Data.cpp @@ -913,7 +913,7 @@ BOOLEAN DeInitAnimationSystem( ) -STRUCTURE_FILE_REF *InternalGetAnimationStructureRef( UINT16 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( UINT16 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( UINT16 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( UINT16 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; @@ -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; diff --git a/Tactical/Animation Data.h b/Tactical/Animation Data.h index 9d6dc7e7..79349537 100644 --- a/Tactical/Animation Data.h +++ b/Tactical/Animation Data.h @@ -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( UINT16 usSoldierID, UINT16 usSurfaceIndex, UINT16 usAnimState ); -STRUCTURE_FILE_REF *GetDefaultStructureRef( UINT16 usSoldierID ); +STRUCTURE_FILE_REF *GetAnimationStructureRef( SoldierID usSoldierID, UINT16 usSurfaceIndex, UINT16 usAnimState ); +STRUCTURE_FILE_REF *GetDefaultStructureRef( SoldierID usSoldierID ); // Profile data extern ANIM_PROF *gpAnimProfiles; diff --git a/Tactical/Interface Panels.cpp b/Tactical/Interface Panels.cpp index b0bd1677..e5663769 100644 --- a/Tactical/Interface Panels.cpp +++ b/Tactical/Interface Panels.cpp @@ -390,7 +390,7 @@ INT32 giSMZipperButton = -1; BOOLEAN gfSwitchPanel = FALSE; UINT8 gbNewPanel = SM_PANEL; -UINT16 gubNewPanelParam = 0; +SoldierID gubNewPanelParam = NOBODY; BOOLEAN gfUIStanceDifferent = FALSE; BOOLEAN gfAllDisabled = FALSE; diff --git a/Tactical/Interface.cpp b/Tactical/Interface.cpp index 01dcc0a0..11f920fd 100644 --- a/Tactical/Interface.cpp +++ b/Tactical/Interface.cpp @@ -661,10 +661,7 @@ void ShutdownCurrentPanel( ) - - - -void SetCurrentTacticalPanelCurrentMerc( UINT16 ubID ) +void SetCurrentTacticalPanelCurrentMerc( SoldierID ubID ) { SOLDIERTYPE *pSoldier; @@ -674,7 +671,7 @@ void SetCurrentTacticalPanelCurrentMerc( UINT16 ubID ) if ( gsCurInterfacePanel == SM_PANEL ) { // If we are not of merc bodytype, or am an epc, and going into inv, goto another.... - pSoldier = MercPtrs[ ubID ]; + pSoldier = ubID; if ( !IS_MERC_BODY_TYPE( pSoldier ) || AM_AN_EPC( pSoldier ) ) { @@ -693,10 +690,9 @@ void SetCurrentTacticalPanelCurrentMerc( UINT16 ubID ) SetTEAMPanelCurrentMerc( gusSelectedSoldier ); break; } - - } + void CreateCurrentTacticalPanelButtons( ) { switch( gsCurInterfacePanel ) diff --git a/Tactical/Interface.h b/Tactical/Interface.h index 07aa6068..e596305f 100644 --- a/Tactical/Interface.h +++ b/Tactical/Interface.h @@ -372,9 +372,9 @@ enum extern BOOLEAN gfSwitchPanel; extern BOOLEAN gfUIStanceDifferent; -extern UINT8 gbNewPanel; -extern UINT16 gubNewPanelParam; -extern INT16 gsCurInterfacePanel; +extern UINT8 gbNewPanel; +extern SoldierID gubNewPanelParam; +extern INT16 gsCurInterfacePanel; extern UINT32 guiRENDERBUFFER; extern UINT32 guiCLOSE; @@ -465,7 +465,7 @@ BOOLEAN DrawCTHIndicator(); void CreateCurrentTacticalPanelButtons( ); void RemoveCurrentTacticalPanelButtons( ); -void SetCurrentTacticalPanelCurrentMerc( UINT16 ubID ); +void SetCurrentTacticalPanelCurrentMerc( SoldierID ubID ); void SetCurrentInterfacePanel( UINT8 ubNewPanel ); BOOLEAN IsMercPortraitVisible( UINT16 ubSoldierID ); diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index 2a6bd403..6bd9f7c2 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -5082,7 +5082,7 @@ CHAR8 *GetSceneFilename( ) return( gzLevelFilenames[ gubCurrentScene ] ); } -extern BOOLEAN InternalOkayToAddStructureToWorld( INT32 sBaseGridNo, INT8 bLevel, DB_STRUCTURE_REF * pDBStructureRef, INT16 sExclusionID, BOOLEAN fAddingForReal, INT16 sSoldierID ); +extern BOOLEAN InternalOkayToAddStructureToWorld( INT32 sBaseGridNo, INT8 bLevel, DB_STRUCTURE_REF * pDBStructureRef, INT16 sExclusionID, BOOLEAN fAddingForReal, SoldierID sSoldierID ); // NB if making changes don't forget to update NewOKDestinationAndDirection BOOLEAN NewOKDestination( SOLDIERTYPE * pCurrSoldier, INT32 sGridNo, BOOLEAN fPeopleToo, INT8 bLevel ) @@ -5482,7 +5482,7 @@ INT32 FindAdjacentGridEx( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 *pubDirect UINT8 ubWallOrientation; BOOLEAN fCheckGivenGridNo = TRUE; UINT8 ubTestDirection; - EXITGRID ExitGrid; + EXITGRID ExitGrid; // Set default direction if (pubDirection) @@ -5551,7 +5551,7 @@ INT32 FindAdjacentGridEx( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 *pubDirect { if ( FindSoldier( sGridNo, &usSoldierIndex, &uiMercFlags, FIND_SOLDIER_GRIDNO ) ) { - SOLDIERTYPE *pTargetSoldier = MercPtrs[usSoldierIndex]; + SOLDIERTYPE *pTargetSoldier = usSoldierIndex; sGridNo = pTargetSoldier->sGridNo; if (CREATURE_OR_BLOODCAT(pTargetSoldier) || gAnimControl[pTargetSoldier->usAnimState].ubEndHeight == ANIM_PRONE) { @@ -5874,7 +5874,7 @@ INT32 FindNextToAdjacentGridEx( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 *pub { if ( FindSoldier( sGridNo, &usSoldierIndex, &uiMercFlags, FIND_SOLDIER_GRIDNO ) ) { - SOLDIERTYPE *pTargetSoldier = MercPtrs[usSoldierIndex]; + SOLDIERTYPE *pTargetSoldier = usSoldierIndex; sGridNo = pTargetSoldier->sGridNo; if (CREATURE_OR_BLOODCAT(pTargetSoldier) || gAnimControl[pTargetSoldier->usAnimState].ubEndHeight == ANIM_PRONE) { @@ -7307,7 +7307,7 @@ void RemoveCapturedEnemiesFromSectorInfo( INT16 sMapX, INT16 sMapY, INT8 bMapZ ) // HEADROCK HAM B2.8: Now also reveals equipment dropped by militia, if requirement is met. if ( pTeamSoldier->bTeam == ENEMY_TEAM || (gGameExternalOptions.ubMilitiaDropEquipment == 2 && pTeamSoldier->bTeam == MILITIA_TEAM) || - (gGameExternalOptions.ubMilitiaDropEquipment == 1 && pTeamSoldier->bTeam == MILITIA_TEAM && Menptr[pTeamSoldier->ubAttackerID].bTeam != OUR_TEAM) ) + (gGameExternalOptions.ubMilitiaDropEquipment == 1 && pTeamSoldier->bTeam == MILITIA_TEAM && pTeamSoldier->ubAttackerID->bTeam != OUR_TEAM) ) { //add a flag to the item so when all enemies are killed, we can run through and reveal all the enemies items usItemFlags |= WORLD_ITEM_DROPPED_FROM_ENEMY; @@ -7328,7 +7328,7 @@ void RemoveCapturedEnemiesFromSectorInfo( INT16 sMapX, INT16 sMapY, INT8 bMapZ ) // HEADROCK HAM B2.8: Militia will drop items only if allowed. if ( !(gGameExternalOptions.ubMilitiaDropEquipment == 0 && pTeamSoldier->bTeam == MILITIA_TEAM) && - !(gGameExternalOptions.ubMilitiaDropEquipment == 1 && pTeamSoldier->bTeam == MILITIA_TEAM && Menptr[pTeamSoldier->ubAttackerID].bTeam == OUR_TEAM) ) + !(gGameExternalOptions.ubMilitiaDropEquipment == 1 && pTeamSoldier->bTeam == MILITIA_TEAM && pTeamSoldier->ubAttackerID->bTeam == OUR_TEAM) ) { AddItemToPool( pTeamSoldier->sGridNo, pObj, bVisible, pTeamSoldier->pathing.bLevel, usItemFlags, -1 ); } @@ -7784,7 +7784,7 @@ BOOLEAN CheckForEndOfBattle( BOOLEAN fAnEnemyRetreated ) HandleGlobalLoyaltyEvent( GLOBAL_LOYALTY_BATTLE_WON, gWorldSectorX, gWorldSectorY, gbWorldSectorZ ); // Change music modes - if ( gfLastMercTalkedAboutKillingID == NOBODY || ( gfLastMercTalkedAboutKillingID != NOBODY && !( MercPtrs[ gfLastMercTalkedAboutKillingID ]->flags.uiStatusFlags & SOLDIER_MONSTER ) ) ) + if ( gfLastMercTalkedAboutKillingID == NOBODY || ( gfLastMercTalkedAboutKillingID != NOBODY && !( gfLastMercTalkedAboutKillingID->flags.uiStatusFlags & SOLDIER_MONSTER ) ) ) { #ifdef NEWMUSIC GlobalSoundID = MusicSoundValues[ SECTOR( gWorldSectorX, gWorldSectorY ) ].SoundTacticalVictory[gbWorldSectorZ]; @@ -7798,7 +7798,7 @@ BOOLEAN CheckForEndOfBattle( BOOLEAN fAnEnemyRetreated ) if (!is_networked) ShouldBeginAutoBandage( ); } - else if ( gfLastMercTalkedAboutKillingID != NOBODY && ( MercPtrs[ gfLastMercTalkedAboutKillingID ]->flags.uiStatusFlags & SOLDIER_MONSTER ) ) + else if ( gfLastMercTalkedAboutKillingID != NOBODY && ( gfLastMercTalkedAboutKillingID->flags.uiStatusFlags & SOLDIER_MONSTER ) ) { // OJW - 20081222 - dont auto-bandage if networked if (!is_networked) @@ -7820,11 +7820,11 @@ BOOLEAN CheckForEndOfBattle( BOOLEAN fAnEnemyRetreated ) { // OK, If we have just finished a battle with creatures........ play killed creature quote... // - if ( gfLastMercTalkedAboutKillingID != NOBODY && ( MercPtrs[ gfLastMercTalkedAboutKillingID ]->flags.uiStatusFlags & SOLDIER_MONSTER ) ) + if ( gfLastMercTalkedAboutKillingID != NOBODY && ( gfLastMercTalkedAboutKillingID->flags.uiStatusFlags & SOLDIER_MONSTER ) ) { } - else if ( gfLastMercTalkedAboutKillingID != NOBODY && ( MercPtrs[ gfLastMercTalkedAboutKillingID ]->ubBodyType == BLOODCAT ) ) + else if ( gfLastMercTalkedAboutKillingID != NOBODY && ( gfLastMercTalkedAboutKillingID->ubBodyType == BLOODCAT ) ) { SayBattleSoundFromAnyBodyInSector( BATTLE_SOUND_COOL1 ); } @@ -11529,9 +11529,9 @@ void TeamRestock(UINT8 bTeam) } // are we allowed to steal access this guy's inventory? -BOOLEAN AllowedToStealFromTeamMate( UINT16 ubID, UINT16 ubTargetID ) +BOOLEAN AllowedToStealFromTeamMate( SoldierID ubID, SoldierID ubTargetID ) { - if ( gGameExternalOptions.fAccessOtherMercInventories && ubID != ubTargetID && MercPtrs[ubID]->bTeam == MercPtrs[ubTargetID]->bTeam && !AM_AN_EPC(MercPtrs[ubTargetID]) && !IsVehicle(MercPtrs[ubTargetID]) ) + if ( gGameExternalOptions.fAccessOtherMercInventories && ubID != ubTargetID && ubID->bTeam == ubTargetID->bTeam && !AM_AN_EPC(ubTargetID) && !IsVehicle(ubTargetID) ) return TRUE; return FALSE; diff --git a/Tactical/Overhead.h b/Tactical/Overhead.h index ff6543e4..d001ad45 100644 --- a/Tactical/Overhead.h +++ b/Tactical/Overhead.h @@ -369,7 +369,7 @@ void TeamDropAll(UINT8 bTeam, BOOLEAN fForce = FALSE); void TeamRestock(UINT8 bTeam); // are we allowed to steal access this guy's inventory? -BOOLEAN AllowedToStealFromTeamMate( UINT16 ubID, UINT16 ubTargetID ); +BOOLEAN AllowedToStealFromTeamMate( SoldierID ubID, SoldierID ubTargetID ); // Flugente: is an soldier profile already used? BOOLEAN IsProfileInUse(UINT8 usTeam, INT8 aType, UINT16 aNr); diff --git a/Tactical/opplist.cpp b/Tactical/opplist.cpp index 63be9d2e..b13ed1b2 100644 --- a/Tactical/opplist.cpp +++ b/Tactical/opplist.cpp @@ -7672,7 +7672,7 @@ void CommunicateWatchedLoc( UINT16 ubID, INT32 sGridNo, INT8 bLevel, UINT8 ubPoi void IncrementWatchedLoc( UINT16 ubID, INT32 sGridNo, INT8 bLevel ) { - INT8 bPoint; + INT8 bPoint; bPoint = FindWatchedLoc( ubID, sGridNo, bLevel ); if (bPoint == -1) diff --git a/TileEngine/Explosion Control.cpp b/TileEngine/Explosion Control.cpp index 7e1e1f4f..a5a1ff84 100644 --- a/TileEngine/Explosion Control.cpp +++ b/TileEngine/Explosion Control.cpp @@ -69,7 +69,7 @@ BOOLEAN ExpAffect( INT32 sBombGridNo, INT32 sGridNo, UINT32 uiDist, UINT16 usIte UINT8 DetermineFlashbangEffect( SOLDIERTYPE *pSoldier, INT8 ubExplosionDir, BOOLEAN fInBuilding); // HEADROCK HAM 5.1: Explosion Fragments launcher -void FireFragments( UINT16 ubOwner, INT16 sX, INT16 sY, INT16 sZ, UINT16 usItem, UINT8 ubDirection = DIRECTION_IRRELEVANT ); +void FireFragments( SoldierID ubOwner, INT16 sX, INT16 sY, INT16 sZ, UINT16 usItem, UINT8 ubDirection = DIRECTION_IRRELEVANT ); // Flugente: shoot a gun without anyone operating it (used for makeshift traps wih guns) void FireFragmentsTrapGun( SOLDIERTYPE* pThrower, INT32 gridno, INT16 sZ, OBJECTTYPE* pObj, UINT8 ubDirection = NORTH ); @@ -394,16 +394,16 @@ void IgniteExplosion( SoldierID ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGr void GenerateExplosion( EXPLOSION_PARAMS *pExpParams ) { EXPLOSIONTYPE *pExplosion; - UINT32 uiFlags; - UINT8 ubOwner; - UINT8 ubTypeID; - INT16 sX; - INT16 sY; - INT16 sZ; - INT32 sGridNo; - UINT16 usItem; - INT32 iIndex; - INT8 bLevel; + UINT32 uiFlags; + SoldierID ubOwner; + UINT8 ubTypeID; + INT16 sX; + INT16 sY; + INT16 sZ; + INT32 sGridNo; + UINT16 usItem; + INT32 iIndex; + INT8 bLevel; // Assign param values uiFlags = pExpParams->uiFlags; @@ -449,17 +449,17 @@ void GenerateExplosion( EXPLOSION_PARAMS *pExpParams ) void GenerateExplosionFromExplosionPointer( EXPLOSIONTYPE *pExplosion ) { - UINT32 uiFlags; - UINT8 ubOwner; - UINT8 ubTypeID; - INT16 sX; - INT16 sY; - INT16 sZ; - INT32 sGridNo; - UINT16 usItem; - UINT8 ubTerrainType; - INT8 bLevel; - INT32 sSoundID; + UINT32 uiFlags; + SoldierID ubOwner; + UINT8 ubTypeID; + INT16 sX; + INT16 sY; + INT16 sZ; + INT32 sGridNo; + UINT16 usItem; + UINT8 ubTerrainType; + INT8 bLevel; + INT32 sSoundID; ANITILE_PARAMS AniParams; @@ -5004,7 +5004,7 @@ BOOLEAN SetOffBombsInGridNo( SoldierID ubID, INT32 sGridNo, BOOLEAN fAllBombs, I return( fFoundMine ); } -void ActivateSwitchInGridNo( UINT16 ubID, INT32 sGridNo ) +void ActivateSwitchInGridNo( SoldierID ubID, INT32 sGridNo ) { UINT32 uiWorldBombIndex; OBJECTTYPE * pObj; @@ -5430,7 +5430,7 @@ UINT8 DetermineFlashbangEffect( SOLDIERTYPE *pSoldier, INT8 ubExplosionDir, BOOL // HEADROCK HAM 5.1: This handles launching fragments out of an explosion. The number of fragments is read from // the Explosives.XML file, and they each have a set amount of damage and range as well. They are currently // fired at completely random trajectories. -void FireFragments( UINT16 ubOwner, INT16 sX, INT16 sY, INT16 sZ, UINT16 usItem, UINT8 ubDirection ) +void FireFragments( SoldierID ubOwner, INT16 sX, INT16 sY, INT16 sZ, UINT16 usItem, UINT8 ubDirection ) { // WANNE: Disable Fragments in a multiplayer game, because this can lead to crashes when stepping on mines, ... if (is_networked) diff --git a/TileEngine/Explosion Control.h b/TileEngine/Explosion Control.h index dd6b3747..029f55f8 100644 --- a/TileEngine/Explosion Control.h +++ b/TileEngine/Explosion Control.h @@ -13,20 +13,17 @@ // Explosion Data typedef struct { - UINT32 uiFlags; - - UINT16 ubOwner; - INT8 ubTypeID; - - UINT16 usItem; - - INT16 sX; // World X ( optional ) - INT16 sY; // World Y ( optional ) - INT16 sZ; // World Z ( optional ) - INT32 sGridNo; // World GridNo - BOOLEAN fLocate; - INT8 bLevel; // World level - UINT8 ubUnsed[1]; + UINT32 uiFlags; + SoldierID ubOwner; + INT8 ubTypeID; + UINT16 usItem; + INT16 sX; // World X ( optional ) + INT16 sY; // World Y ( optional ) + INT16 sZ; // World Z ( optional ) + INT32 sGridNo; // World GridNo + BOOLEAN fLocate; + INT8 bLevel; // World level + UINT8 ubUnsed[1]; } EXPLOSION_PARAMS; @@ -34,12 +31,11 @@ typedef struct typedef struct { EXPLOSION_PARAMS Params; - BOOLEAN fAllocated; - INT16 sCurrentFrame; - INT32 iID; - INT32 iLightID; - UINT8 ubUnsed[2]; - + BOOLEAN fAllocated; + INT16 sCurrentFrame; + INT32 iID; + INT32 iLightID; + UINT8 ubUnsed[2]; } EXPLOSIONTYPE; @@ -112,7 +108,7 @@ void HandleExplosionWarningAnimations( ); void DecayBombTimers( void ); void SetOffBombsByFrequency( SoldierID ubID, INT8 bFrequency ); BOOLEAN SetOffBombsInGridNo( SoldierID ubID, INT32 sGridNo, BOOLEAN fAllBombs, INT8 bLevel ); -void ActivateSwitchInGridNo( UINT16 ubID, INT32 sGridNo ); +void ActivateSwitchInGridNo( SoldierID ubID, INT32 sGridNo ); void SetOffPanicBombs( UINT16 ubID, INT8 bPanicTrigger ); void UpdateExplosionFrame( INT32 iIndex, INT16 sCurrentFrame ); diff --git a/TileEngine/structure.cpp b/TileEngine/structure.cpp index 150fdb01..bbbfde88 100644 --- a/TileEngine/structure.cpp +++ b/TileEngine/structure.cpp @@ -632,7 +632,7 @@ STRUCTURE * CreateStructureFromDB( DB_STRUCTURE_REF * pDBStructureRef, UINT8 ubT extern UINT16 gusTempDragBuildSoldierID; -BOOLEAN OkayToAddStructureToTile( INT32 sBaseGridNo, INT16 sCubeOffset, DB_STRUCTURE_REF * pDBStructureRef, UINT8 ubTileIndex, INT16 sExclusionID, BOOLEAN fAddingForReal = FALSE, INT16 sSoldierID = NOBODY ) +BOOLEAN OkayToAddStructureToTile( INT32 sBaseGridNo, INT16 sCubeOffset, DB_STRUCTURE_REF * pDBStructureRef, UINT8 ubTileIndex, INT16 sExclusionID, BOOLEAN fAddingForReal = FALSE, SoldierID sSoldierID = NOBODY ) { // Verifies whether a structure is blocked from being added to the map at a particular point DB_STRUCTURE * pDBStructure; @@ -646,15 +646,15 @@ BOOLEAN OkayToAddStructureToTile( INT32 sBaseGridNo, INT16 sCubeOffset, DB_STRUC BOOLEAN fIgnorePeople = (BOOLEAN)(sExclusionID == IGNORE_PEOPLE_STRUCTURE_ID); BOOLEAN fVehicleIgnoreObstacles = (BOOLEAN)(sExclusionID == VEHICLE_IGNORE_OBSTACLES_STRUCTURE_ID); - if( gGameExternalOptions.ubCarsRammingMaxStructureArmour && sSoldierID != NOBODY && MercPtrs[ sSoldierID ]->usSoldierFlagMask2 & SOLDIER_RAM_THROUGH_OBSTACLES ) + if( gGameExternalOptions.ubCarsRammingMaxStructureArmour && sSoldierID != NOBODY && sSoldierID->usSoldierFlagMask2 & SOLDIER_RAM_THROUGH_OBSTACLES ) { fVehicleIgnoreObstacles = TRUE; } - else if ( gGameExternalOptions.ubEnemyJeepsRammingMaxStructureArmour && sSoldierID != NOBODY && COMBAT_JEEP( MercPtrs[sSoldierID] ) ) + else if ( gGameExternalOptions.ubEnemyJeepsRammingMaxStructureArmour && sSoldierID != NOBODY && COMBAT_JEEP( sSoldierID ) ) { fVehicleIgnoreObstacles = TRUE; } - else if ( gGameExternalOptions.ubTanksRammingMaxStructureArmour && sSoldierID != NOBODY && TANK( MercPtrs[sSoldierID] ) ) + else if ( gGameExternalOptions.ubTanksRammingMaxStructureArmour && sSoldierID != NOBODY && TANK( sSoldierID ) ) { fVehicleIgnoreObstacles = TRUE; } @@ -736,25 +736,25 @@ BOOLEAN OkayToAddStructureToTile( INT32 sBaseGridNo, INT16 sCubeOffset, DB_STRUC // but not monsters and such (they can't fall down due to lack of animations) // also make sure AI won't flatten their allies if( !( pSoldier->flags.uiStatusFlags & ( SOLDIER_VEHICLE | SOLDIER_ROBOT | SOLDIER_MONSTER ) ) && - ((!ARMED_VEHICLE( MercPtrs[sSoldierID] ) && gGameExternalOptions.fAllowCarsDrivingOverPeople) || - (ARMED_VEHICLE( MercPtrs[sSoldierID] ) && gGameExternalOptions.fAllowTanksDrivingOverPeople)) && - ( MercPtrs[ sSoldierID ]->bTeam == gbPlayerNum || MercPtrs[ sSoldierID ]->bTeam != pSoldier->bTeam ) ) + ((!ARMED_VEHICLE( sSoldierID ) && gGameExternalOptions.fAllowCarsDrivingOverPeople) || + (ARMED_VEHICLE( sSoldierID ) && gGameExternalOptions.fAllowTanksDrivingOverPeople)) && + ( sSoldierID->bTeam == gbPlayerNum || sSoldierID->bTeam != pSoldier->bTeam ) ) { pExistingStructure = pExistingStructure->pNext; // damage people when driving on them if( fAddingForReal ) { - if ( TANK( MercPtrs[sSoldierID] ) ) + if ( TANK( sSoldierID ) ) { - pSoldier->EVENT_SoldierGotHit( 0, Random(10)+5, Random(200)+Random(200), MercPtrs[ sSoldierID ]->ubDirection, 0, sSoldierID, FIRE_WEAPON_VEHICLE_TRAUMA, 0, 0, pSoldier->sGridNo ); + pSoldier->EVENT_SoldierGotHit( 0, Random(10)+5, Random(200)+Random(200), sSoldierID->ubDirection, 0, sSoldierID, FIRE_WEAPON_VEHICLE_TRAUMA, 0, 0, pSoldier->sGridNo ); } - else if( gAnimControl[ pSoldier->usAnimState ].ubEndHeight == ANIM_PRONE && MercPtrs[ sSoldierID ]->IsFastMovement() ) + else if( gAnimControl[ pSoldier->usAnimState ].ubEndHeight == ANIM_PRONE && sSoldierID->IsFastMovement() ) { - pSoldier->EVENT_SoldierGotHit( 0, Random(5), Random(100)+Random(100), MercPtrs[ sSoldierID ]->ubDirection, 0, sSoldierID, FIRE_WEAPON_VEHICLE_TRAUMA, 0, 0, pSoldier->sGridNo ); + pSoldier->EVENT_SoldierGotHit( 0, Random(5), Random(100)+Random(100), sSoldierID->ubDirection, 0, sSoldierID, FIRE_WEAPON_VEHICLE_TRAUMA, 0, 0, pSoldier->sGridNo ); } else { - pSoldier->EVENT_SoldierGotHit( 0, Random(10)+5, Random(200)+Random(200), MercPtrs[ sSoldierID ]->ubDirection, 0, sSoldierID, FIRE_WEAPON_VEHICLE_TRAUMA, 0, 0, pSoldier->sGridNo ); + pSoldier->EVENT_SoldierGotHit( 0, Random(10)+5, Random(200)+Random(200), sSoldierID->ubDirection, 0, sSoldierID, FIRE_WEAPON_VEHICLE_TRAUMA, 0, 0, pSoldier->sGridNo ); } } continue; @@ -770,9 +770,9 @@ BOOLEAN OkayToAddStructureToTile( INT32 sBaseGridNo, INT16 sCubeOffset, DB_STRUC else { // only if structure is weak enough - if ( (!ARMED_VEHICLE( MercPtrs[sSoldierID] ) && gubMaterialArmour[pExistingStructure->pDBStructureRef->pDBStructure->ubArmour] < gGameExternalOptions.ubCarsRammingMaxStructureArmour) || - (COMBAT_JEEP( MercPtrs[sSoldierID] ) && gubMaterialArmour[pExistingStructure->pDBStructureRef->pDBStructure->ubArmour] < gGameExternalOptions.ubEnemyJeepsRammingMaxStructureArmour) || - (TANK( MercPtrs[sSoldierID] ) && gubMaterialArmour[pExistingStructure->pDBStructureRef->pDBStructure->ubArmour] < gGameExternalOptions.ubTanksRammingMaxStructureArmour) ) + if ( (!ARMED_VEHICLE( sSoldierID ) && gubMaterialArmour[pExistingStructure->pDBStructureRef->pDBStructure->ubArmour] < gGameExternalOptions.ubCarsRammingMaxStructureArmour) || + (COMBAT_JEEP( sSoldierID ) && gubMaterialArmour[pExistingStructure->pDBStructureRef->pDBStructure->ubArmour] < gGameExternalOptions.ubEnemyJeepsRammingMaxStructureArmour) || + (TANK( sSoldierID ) && gubMaterialArmour[pExistingStructure->pDBStructureRef->pDBStructure->ubArmour] < gGameExternalOptions.ubTanksRammingMaxStructureArmour) ) { // when not just plotting path, really destroy structure if( fAddingForReal ) @@ -911,7 +911,7 @@ BOOLEAN OkayToAddStructureToTile( INT32 sBaseGridNo, INT16 sCubeOffset, DB_STRUC { if( MercPtrs[ pExistingStructure->usStructureID ] != NULL && MercPtrs[ pExistingStructure->usStructureID ]->flags.uiStatusFlags & SOLDIER_VEHICLE ) { - if( MercPtrs[ sSoldierID ]->flags.fInNonintAnim == TRUE || gAnimControl[ MercPtrs[ sSoldierID ]->usAnimState ].ubEndHeight == ANIM_PRONE ) + if( sSoldierID->flags.fInNonintAnim == TRUE || gAnimControl[ sSoldierID->usAnimState ].ubEndHeight == ANIM_PRONE ) { pExistingStructure = pExistingStructure->pNext; continue; @@ -958,7 +958,7 @@ BOOLEAN OkayToAddStructureToTile( INT32 sBaseGridNo, INT16 sCubeOffset, DB_STRUC return( TRUE ); } -BOOLEAN InternalOkayToAddStructureToWorld( INT32 sBaseGridNo, INT8 bLevel, DB_STRUCTURE_REF * pDBStructureRef, INT16 sExclusionID, BOOLEAN fAddingForReal, INT16 sSoldierID ) +BOOLEAN InternalOkayToAddStructureToWorld( INT32 sBaseGridNo, INT8 bLevel, DB_STRUCTURE_REF * pDBStructureRef, INT16 sExclusionID, BOOLEAN fAddingForReal, SoldierID sSoldierID ) { UINT8 ubLoop; INT16 sCubeOffset; @@ -1001,7 +1001,7 @@ BOOLEAN InternalOkayToAddStructureToWorld( INT32 sBaseGridNo, INT8 bLevel, DB_ST return( TRUE ); } -BOOLEAN OkayToAddStructureToWorld( INT32 sBaseGridNo, INT8 bLevel, DB_STRUCTURE_REF * pDBStructureRef, INT16 sExclusionID, BOOLEAN fAddingForReal, INT16 sSoldierID ) +BOOLEAN OkayToAddStructureToWorld( INT32 sBaseGridNo, INT8 bLevel, DB_STRUCTURE_REF * pDBStructureRef, INT16 sExclusionID, BOOLEAN fAddingForReal, SoldierID sSoldierID ) { return( InternalOkayToAddStructureToWorld( sBaseGridNo, bLevel, pDBStructureRef, sExclusionID, fAddingForReal, sSoldierID ) ); } @@ -1036,15 +1036,15 @@ BOOLEAN AddStructureToTile( MAP_ELEMENT * pMapElement, STRUCTURE * pStructure, U STRUCTURE * InternalAddStructureToWorld( INT32 sBaseGridNo, INT8 bLevel, DB_STRUCTURE_REF * pDBStructureRef, LEVELNODE * pLevelNode ) { // Adds a complete structure to the world at a location plus all other locations covered by the structure - INT32 sGridNo; - STRUCTURE ** ppStructure; - STRUCTURE * pBaseStructure; - DB_STRUCTURE * pDBStructure; - DB_STRUCTURE_TILE ** ppTile; - UINT8 ubLoop; - UINT8 ubLoop2; - INT16 sBaseTileHeight=-1; - UINT16 usStructureID; + INT32 sGridNo; + STRUCTURE **ppStructure; + STRUCTURE *pBaseStructure; + DB_STRUCTURE *pDBStructure; + DB_STRUCTURE_TILE **ppTile; + UINT8 ubLoop; + UINT8 ubLoop2; + INT16 sBaseTileHeight=-1; + UINT16 usStructureID; CHECKF( pDBStructureRef ); CHECKF( pLevelNode ); diff --git a/TileEngine/structure.h b/TileEngine/structure.h index 2870deac..12dd50b1 100644 --- a/TileEngine/structure.h +++ b/TileEngine/structure.h @@ -37,7 +37,7 @@ BOOLEAN FreeStructureFile( STRUCTURE_FILE_REF * pStructureFile ); // // functions at the structure instance level // -BOOLEAN OkayToAddStructureToWorld( INT32 sBaseGridNo, INT8 bLevel, DB_STRUCTURE_REF * pDBStructureRef, INT16 sExclusionID, BOOLEAN fAddingForReal = FALSE, INT16 sSoldierID = NOBODY ); +BOOLEAN OkayToAddStructureToWorld( INT32 sBaseGridNo, INT8 bLevel, DB_STRUCTURE_REF * pDBStructureRef, INT16 sExclusionID, BOOLEAN fAddingForReal = FALSE, SoldierID sSoldierID = NOBODY ); // for the PTR argument of AddStructureToWorld, pass in a LEVELNODE * please! BOOLEAN AddStructureToWorld( INT32 sBaseGridNo, INT8 bLevel, DB_STRUCTURE_REF * pDBStructureRef, PTR pLevelN ); @@ -136,4 +136,4 @@ UINT8 StructureFlagToType( UINT32 uiFlag ); UINT32 GetStructureOpenSound( STRUCTURE *pStructure, BOOLEAN fClose ); -#endif \ No newline at end of file +#endif From 2e147d4bd767c8a4eeddeb3b0e3f218f7d523c67 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 17 Nov 2024 16:35:26 +0200 Subject: [PATCH 076/192] Convert to SoldierID --- Tactical/Overhead.cpp | 14 +++++++------- Tactical/Soldier Control.cpp | 4 ++-- Tactical/Soldier Control.h | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index 6bd9f7c2..db65278d 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -8799,7 +8799,7 @@ INT8 CalcSuppressionTolerance( SOLDIERTYPE * pSoldier ) extern void IncrementWatchedLoc(UINT16 ubID, INT32 sGridNo, INT8 bLevel); -void HandleSuppressionFire( UINT16 ubTargetedMerc, UINT16 ubCausedAttacker ) +void HandleSuppressionFire( SoldierID ubTargetedMerc, SoldierID ubCausedAttacker ) { /////////////////////////////////////////////////////////////////////////////// // @@ -8831,7 +8831,7 @@ void HandleSuppressionFire( UINT16 ubTargetedMerc, UINT16 ubCausedAttacker ) //////////////////////////////////////////////////////////////////////////////////////////////////// // SANDRO - modify suppression effectiveness based on weapon caliber (i.e. damage) INT16 sFinalSuppressionEffectiveness = gGameExternalOptions.sSuppressionEffectiveness; - pAttacker = MercPtrs[ubCausedAttacker]; + pAttacker = ubCausedAttacker; if (pAttacker && pAttacker->inv[pAttacker->ubAttackingHand].exists() && Item[pAttacker->inv[pAttacker->ubAttackingHand].usItem].usItemClass == IC_GUN) { OBJECTTYPE *pWeapon = &pAttacker->inv[pAttacker->ubAttackingHand]; @@ -9577,11 +9577,11 @@ SOLDIERTYPE *InternalReduceAttackBusyCount( ) // Strange as this may seem, this function returns a pointer to // the *target* in case the target has changed sides as a result // of being attacked - SOLDIERTYPE * pSoldier; - SOLDIERTYPE * pTarget; - BOOLEAN fEnterCombat = FALSE; - UINT32 cnt; - UINT16 ubID; + SOLDIERTYPE *pSoldier; + SOLDIERTYPE *pTarget; + BOOLEAN fEnterCombat = FALSE; + UINT32 cnt; + SoldierID ubID; // if ((gTacticalStatus.uiFlags & TURNBASED) && (gTacticalStatus.uiFlags & INCOMBAT)) diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index f7b40549..44ccf827 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -21415,12 +21415,12 @@ BOOLEAN SOLDIERTYPE::InPositionForTurncoatAttempt( UINT16 usID ) return FALSE; } -UINT8 SOLDIERTYPE::GetTurncoatConvinctionChance( UINT16 usID, INT16 sApproach ) +UINT8 SOLDIERTYPE::GetTurncoatConvinctionChance( SoldierID usID, INT16 sApproach ) { if ( usID >= NOBODY ) return 0; - SOLDIERTYPE* pSoldier = MercPtrs[usID]; + SOLDIERTYPE* pSoldier = usID; if ( !pSoldier || pSoldier->bTeam != ENEMY_TEAM ) diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index d4a5ccd6..3ccedd4e 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -2087,7 +2087,7 @@ public: // Flugente: turncoats BOOLEAN InPositionForTurncoatAttempt( UINT16 usID ); - UINT8 GetTurncoatConvinctionChance( UINT16 usID, INT16 usApproach ); + UINT8 GetTurncoatConvinctionChance( SoldierID usID, INT16 usApproach ); void AttemptToCreateTurncoat( UINT16 usID ); BOOLEAN OrderTurnCoatToSwitchSides( UINT16 usID ); void OrderAllTurnCoatToSwitchSides(); From f39078357be22f40fcb95bb9971c3515be5f5753 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 17 Nov 2024 16:39:13 +0200 Subject: [PATCH 077/192] Remove unused function parameters --- Tactical/Soldier Control.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index 44ccf827..e8b93737 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -1734,7 +1734,7 @@ void SoldierGotHitGunFire( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sD void SoldierGotHitBlade( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, UINT8 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation ); void SoldierGotHitPunch( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, UINT8 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation ); void SoldierGotHitExplosion( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, UINT8 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation ); -void SoldierGotHitVehicle( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, UINT8 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation ); +void SoldierGotHitVehicle( SOLDIERTYPE* pSoldier, UINT16 bDirection ); UINT8 CalcScreamVolume( SOLDIERTYPE * pSoldier, UINT8 ubCombinedLoss ); void PlaySoldierFootstepSound( SOLDIERTYPE *pSoldier ); void HandleSystemNewAISituation( SOLDIERTYPE *pSoldier, BOOLEAN fResetABC ); @@ -6144,7 +6144,7 @@ void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT1 // anv: soldier got rammed by vehicle if ( ubSpecial == FIRE_WEAPON_VEHICLE_TRAUMA ) { - SoldierGotHitVehicle( this, usWeaponIndex, sDamage, bDirection, sRange, ubAttackerID, ubSpecial, ubHitLocation ); + SoldierGotHitVehicle( this, bDirection ); return; } @@ -6895,7 +6895,7 @@ void SoldierGotHitPunch( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDam } -void SoldierGotHitVehicle( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, UINT8 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation ) +void SoldierGotHitVehicle(SOLDIERTYPE *pSoldier, UINT16 bDirection) { INT32 sNewGridNo = 0; // IF HERE AND GUY IS DEAD, RETURN! From 2e92da4e127d4108f435a5831fecb02ff95b75fd Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 17 Nov 2024 16:43:39 +0200 Subject: [PATCH 078/192] Convert to SoldierID --- Tactical/Animation Cache.cpp | 4 ++-- Tactical/Animation Cache.h | 4 ++-- Tactical/Soldier Control.cpp | 13 +++++++------ 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/Tactical/Animation Cache.cpp b/Tactical/Animation Cache.cpp index 3b320c60..ad1977f6 100644 --- a/Tactical/Animation Cache.cpp +++ b/Tactical/Animation Cache.cpp @@ -47,7 +47,7 @@ BOOLEAN InitAnimationCache( SoldierID usSoldierID, AnimationSurfaceCacheType *pA return( TRUE ); } -void DeleteAnimationCache( UINT16 usSoldierID, AnimationSurfaceCacheType *pAnimCache ) +void DeleteAnimationCache( SoldierID usSoldierID, AnimationSurfaceCacheType *pAnimCache ) { // Allocate entries if ( pAnimCache->usCachedSurfaces!= NULL ) @@ -146,7 +146,7 @@ BOOLEAN GetCachedAnimationSurface( UINT16 usSoldierID, AnimationSurfaceCacheType -void UnLoadCachedAnimationSurfaces( UINT16 usSoldierID, AnimationSurfaceCacheType *pAnimCache ) +void UnLoadCachedAnimationSurfaces( SoldierID usSoldierID, AnimationSurfaceCacheType *pAnimCache ) { UINT8 cnt; diff --git a/Tactical/Animation Cache.h b/Tactical/Animation Cache.h index a64063c9..cbba71c8 100644 --- a/Tactical/Animation Cache.h +++ b/Tactical/Animation Cache.h @@ -20,9 +20,9 @@ extern UINT32 guiCacheSize; BOOLEAN GetCachedAnimationSurface( UINT16 usSoldierID, AnimationSurfaceCacheType *pAnimCache, UINT16 usSurfaceIndex, UINT16 usCurrentAnimation ); BOOLEAN InitAnimationCache( SoldierID usSoldierID, AnimationSurfaceCacheType *pAnimCache ); -void DeleteAnimationCache( UINT16 usSoldierID, AnimationSurfaceCacheType *pAnimCache ); +void DeleteAnimationCache( SoldierID usSoldierID, AnimationSurfaceCacheType *pAnimCache ); void DetermineOptimumAnimationCacheSize( ); -void UnLoadCachedAnimationSurfaces( UINT16 usSoldierID, AnimationSurfaceCacheType *pAnimCache ); +void UnLoadCachedAnimationSurfaces( SoldierID usSoldierID, AnimationSurfaceCacheType *pAnimCache ); diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index e8b93737..dde70588 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -2820,9 +2820,10 @@ BOOLEAN SOLDIERTYPE::ChangeSoldierState( UINT16 usNewState, UINT16 usStartingAni // This function reevaluates the stance if the guy sees us! BOOLEAN ReevaluateEnemyStance( SOLDIERTYPE *pSoldier, UINT16 usAnimState ) { - INT32 cnt, iClosestEnemy = NOBODY; + INT32 cnt; + SoldierID iClosestEnemy = NOBODY; INT16 sTargetXPos, sTargetYPos; - BOOLEAN fReturnVal = FALSE; + BOOLEAN fReturnVal = FALSE; INT16 sDist, sClosestDist = 10000; // make the chosen one not turn to face us @@ -2875,21 +2876,21 @@ BOOLEAN ReevaluateEnemyStance( SOLDIERTYPE *pSoldier, UINT16 usAnimState ) if ( gGameExternalOptions.fNoEnemyAutoReadyWeapon == 0 ) { // Change to fire ready animation - ConvertGridNoToXY( MercPtrs[iClosestEnemy]->sGridNo, &sTargetXPos, &sTargetYPos ); + ConvertGridNoToXY( iClosestEnemy->sGridNo, &sTargetXPos, &sTargetYPos ); pSoldier->flags.fDontChargeReadyAPs = TRUE; // Ready weapon - fReturnVal = pSoldier->SoldierReadyWeapon( sTargetXPos, sTargetYPos, FALSE, AIDecideHipOrShoulderStance( pSoldier, MercPtrs[iClosestEnemy]->sGridNo ) ); + fReturnVal = pSoldier->SoldierReadyWeapon( sTargetXPos, sTargetYPos, FALSE, AIDecideHipOrShoulderStance( pSoldier, iClosestEnemy->sGridNo ) ); return(fReturnVal); } // this makes the soldier to only turn towards our direction, instead of raising his weapon else if ( gGameExternalOptions.fNoEnemyAutoReadyWeapon == 2 ) { - //ConvertGridNoToXY( MercPtrs[ iClosestEnemy ]->sGridNo, &sTargetXPos, &sTargetYPos ); + //ConvertGridNoToXY( iClosestEnemy->sGridNo, &sTargetXPos, &sTargetYPos ); //sFacingDir = GetDirectionFromXY( sXPos, sYPos, pSoldier ); - INT16 sFacingDir = GetDirectionToGridNoFromGridNo( pSoldier->sGridNo, MercPtrs[iClosestEnemy]->sGridNo ); + INT16 sFacingDir = GetDirectionToGridNoFromGridNo( pSoldier->sGridNo, iClosestEnemy->sGridNo ); if ( sFacingDir != pSoldier->ubDirection ) { From 9d62b9a37a054918a9462ceb16065191c12637b6 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 17 Nov 2024 16:46:57 +0200 Subject: [PATCH 079/192] Remove unused function parameters --- Tactical/Soldier Control.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index dde70588..84addbd3 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -1731,7 +1731,7 @@ UINT16 SelectFireAnimation( SOLDIERTYPE *pSoldier, UINT8 ubHeight ); void SelectFallAnimation( SOLDIERTYPE *pSoldier ); BOOLEAN FullStructAlone( INT32 sGridNo, UINT8 ubRadius ); void SoldierGotHitGunFire( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, UINT16 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation ); -void SoldierGotHitBlade( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, UINT8 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation ); +void SoldierGotHitBlade( SOLDIERTYPE* pSoldier, UINT8 ubHitLocation ); void SoldierGotHitPunch( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, UINT8 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation ); void SoldierGotHitExplosion( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, UINT8 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation ); void SoldierGotHitVehicle( SOLDIERTYPE* pSoldier, UINT16 bDirection ); @@ -6386,7 +6386,7 @@ void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT1 } if ( Item[usWeaponIndex].usItemClass & IC_BLADE ) { - SoldierGotHitBlade( this, usWeaponIndex, sDamage, bDirection, sRange, ubAttackerID, ubSpecial, ubHitLocation ); + SoldierGotHitBlade( this, ubHitLocation ); // anv: taunts are called from UseBlade() } // marke setting ammo explosions included here with 3rd 'or' including ubReason @@ -6813,11 +6813,10 @@ void SoldierGotHitExplosion( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 SoldierCollapse( pSoldier ); break; } - } -void SoldierGotHitBlade( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, UINT8 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation ) +void SoldierGotHitBlade( SOLDIERTYPE *pSoldier, UINT8 ubHitLocation ) { // Flugente: if hit in legs or torso, blood will be on our uniform - parts of the clothes cannot be worn anymore if ( ubHitLocation == AIM_SHOT_TORSO ) @@ -6856,7 +6855,6 @@ void SoldierGotHitBlade( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDam pSoldier->EVENT_InitNewSoldierAnim( GENERIC_HIT_PRONE, 0, FALSE ); break; } - } From 9acf9949524afd9b82f2dc3a21fb1b2e71e81c72 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 17 Nov 2024 16:50:01 +0200 Subject: [PATCH 080/192] Convert gusTempDragBuildSoldierID to SoldierID --- Tactical/Handle Items.cpp | 2 +- TileEngine/structure.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Tactical/Handle Items.cpp b/Tactical/Handle Items.cpp index 2a1a1ba5..56311613 100644 --- a/Tactical/Handle Items.cpp +++ b/Tactical/Handle Items.cpp @@ -7798,7 +7798,7 @@ BOOLEAN BuildStructFromName( INT32 sGridNo, INT8 sLevel, const char* aStr, UINT8 return FALSE; } -UINT16 gusTempDragBuildSoldierID = NOBODY; +SoldierID gusTempDragBuildSoldierID = NOBODY; BOOLEAN BuildStructDrag( INT32 sGridNo, INT8 sLevel, UINT32 uiTileType, UINT8 usIndex, UINT16 usSoldierID ) { diff --git a/TileEngine/structure.cpp b/TileEngine/structure.cpp index bbbfde88..8a2db1fb 100644 --- a/TileEngine/structure.cpp +++ b/TileEngine/structure.cpp @@ -630,7 +630,7 @@ STRUCTURE * CreateStructureFromDB( DB_STRUCTURE_REF * pDBStructureRef, UINT8 ubT return( pStructure ); } -extern UINT16 gusTempDragBuildSoldierID; +extern SoldierID gusTempDragBuildSoldierID; BOOLEAN OkayToAddStructureToTile( INT32 sBaseGridNo, INT16 sCubeOffset, DB_STRUCTURE_REF * pDBStructureRef, UINT8 ubTileIndex, INT16 sExclusionID, BOOLEAN fAddingForReal = FALSE, SoldierID sSoldierID = NOBODY ) { @@ -942,7 +942,7 @@ BOOLEAN OkayToAddStructureToTile( INT32 sBaseGridNo, INT16 sCubeOffset, DB_STRUC { // Flugente: we allow this if this structure is being dragged by a soldier, otherwise we can't move containers our of rooms (and are likely to unintenionally bar rooms) if (pExistingStructure->fFlags & STRUCTURE_OPENABLE - && !( gusTempDragBuildSoldierID != NOBODY && MercPtrs[gusTempDragBuildSoldierID]->sDragGridNo ) ) + && !( gusTempDragBuildSoldierID != NOBODY && gusTempDragBuildSoldierID->sDragGridNo ) ) { // don't allow two openable structures in the same tile or things will screw // up on an interface level From e9a13e12d8d6c8524e271b90bdf987587f93bbac Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 17 Nov 2024 17:11:03 +0200 Subject: [PATCH 081/192] Convert to SoldierID --- Multiplayer/client.cpp | 2 +- Tactical/Handle Items.cpp | 2 +- Tactical/Handle Items.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Multiplayer/client.cpp b/Multiplayer/client.cpp index e4d40437..4d967455 100644 --- a/Multiplayer/client.cpp +++ b/Multiplayer/client.cpp @@ -3793,7 +3793,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) { diff --git a/Tactical/Handle Items.cpp b/Tactical/Handle Items.cpp index 56311613..de09582e 100644 --- a/Tactical/Handle Items.cpp +++ b/Tactical/Handle Items.cpp @@ -7800,7 +7800,7 @@ BOOLEAN BuildStructFromName( INT32 sGridNo, INT8 sLevel, const char* aStr, UINT8 SoldierID gusTempDragBuildSoldierID = NOBODY; -BOOLEAN BuildStructDrag( INT32 sGridNo, INT8 sLevel, UINT32 uiTileType, UINT8 usIndex, UINT16 usSoldierID ) +BOOLEAN BuildStructDrag( INT32 sGridNo, INT8 sLevel, UINT32 uiTileType, UINT8 usIndex, SoldierID usSoldierID ) { // needs to be a valid location if ( TileIsOutOfBounds( sGridNo ) ) diff --git a/Tactical/Handle Items.h b/Tactical/Handle Items.h index 2f523798..596b889a 100644 --- a/Tactical/Handle Items.h +++ b/Tactical/Handle Items.h @@ -297,7 +297,7 @@ BOOLEAN IsDragStructurePresent( INT32 sGridNo, INT8 sLevel, UINT32& arusTileType void GetDragStructureXmlEntry( UINT32 ausTileType, UINT16 ausStructureNumber, int& arXmlVectorEntry ); BOOLEAN RemoveStructDrag( INT32 sGridNo, INT8 sLevel, UINT32 uiTileType ); void CorrectDragStructData( INT32 sGridNo, INT8 sLevel, UINT8 ausHitpoints, UINT8 ausDecalFlags ); -BOOLEAN BuildStructDrag( INT32 sGridNo, INT8 sLevel, UINT32 uiTileType, UINT8 usIndex, UINT16 usSoldierID ); +BOOLEAN BuildStructDrag( INT32 sGridNo, INT8 sLevel, UINT32 uiTileType, UINT8 usIndex, SoldierID usSoldierID ); void UpdateFortificationPossibleAmount(); void HandleFortificationUpdate(); From 06936b71c9c09fe28cef7b1f5d090809c321d2b3 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 17 Nov 2024 17:22:30 +0200 Subject: [PATCH 082/192] Convert to SoldierID Rearranged struct to optimize memory layout --- Utils/Event Pump.h | 180 ++++++++++++++++++++++----------------------- 1 file changed, 90 insertions(+), 90 deletions(-) diff --git a/Utils/Event Pump.h b/Utils/Event Pump.h index 232eb49b..bce66e43 100644 --- a/Utils/Event Pump.h +++ b/Utils/Event Pump.h @@ -59,170 +59,171 @@ typedef struct typedef struct { - UINT16 usSoldierID; - UINT32 uiUniqueId; - UINT16 usNewState; + UINT32 usTargetGridNo; // WANNE - MP: Used for manipulating the target grid no + UINT32 uiUniqueId; + SoldierID usSoldierID; + UINT16 usNewState; INT16 sXPos; INT16 sYPos; - UINT16 usStartingAniCode; - BOOLEAN fForce; - UINT8 usNewDirection;//hayden - UINT32 usTargetGridNo; // WANNE - MP: Used for manipulating the target grid no + UINT16 usStartingAniCode; + BOOLEAN fForce; + UINT8 usNewDirection;//hayden } EV_S_CHANGESTATE; typedef struct { - UINT16 usSoldierID; - UINT32 uiUniqueId; - INT32 usNewDestination; + SoldierID usSoldierID; + UINT32 uiUniqueId; + INT32 usNewDestination; } EV_S_CHANGEDEST; typedef struct { - UINT16 usSoldierID; - UINT32 uiUniqueId; - FLOAT dNewXPos; - FLOAT dNewYPos; + SoldierID usSoldierID; + UINT32 uiUniqueId; + FLOAT dNewXPos; + FLOAT dNewYPos; } EV_S_SETPOSITION; typedef struct { - UINT16 usSoldierID; - UINT32 uiUniqueId; - INT32 sDestGridNo; + UINT32 uiUniqueId; + INT32 sDestGridNo; + SoldierID usSoldierID; UINT16 usMovementAnim; } EV_S_GETNEWPATH; typedef struct { - UINT16 usSoldierID; - UINT32 uiUniqueId; + UINT32 uiUniqueId; + SoldierID usSoldierID; + } EV_S_BEGINTURN; typedef struct { - UINT16 usSoldierID; - UINT32 uiUniqueId; - UINT8 ubNewStance; + UINT32 uiUniqueId; + SoldierID usSoldierID; INT16 sXPos; INT16 sYPos; + UINT8 ubNewStance; } EV_S_CHANGESTANCE; typedef struct { - UINT16 usSoldierID; - UINT32 uiUniqueId; - UINT16 usNewDirection; + UINT32 uiUniqueId; + SoldierID usSoldierID; + UINT16 usNewDirection; } EV_S_SETDIRECTION; typedef struct { - UINT16 usSoldierID; - UINT32 uiUniqueId; - UINT16 usDesiredDirection; + UINT32 uiUniqueId; + SoldierID usSoldierID; + UINT16 usDesiredDirection; } EV_S_SETDESIREDDIRECTION; typedef struct { - UINT16 usSoldierID; - UINT32 uiUniqueId; - INT32 sTargetGridNo; - INT8 bTargetLevel; - INT8 bTargetCubeLevel; + UINT32 uiUniqueId; + INT32 sTargetGridNo; + SoldierID usSoldierID; + INT8 bTargetLevel; + INT8 bTargetCubeLevel; } EV_S_BEGINFIREWEAPON; typedef struct { - UINT16 usSoldierID; - UINT32 uiUniqueId; - INT32 sTargetGridNo; - INT8 bTargetLevel; - INT8 bTargetCubeLevel; + UINT32 uiUniqueId; + INT32 sTargetGridNo; + SoldierID usSoldierID; + INT8 bTargetLevel; + INT8 bTargetCubeLevel; } EV_S_FIREWEAPON; typedef struct { - UINT16 usSoldierID; - UINT32 uiUniqueId; - UINT16 usWeaponIndex; + UINT32 uiUniqueId; + INT32 iBullet; + SoldierID usSoldierID; + SoldierID ubAttackerID; + UINT16 usWeaponIndex; INT16 sDamage; INT16 sBreathLoss; - UINT16 usDirection; + UINT16 usDirection; INT16 sXPos; INT16 sYPos; INT16 sZPos; INT16 sRange; - UINT16 ubAttackerID; - BOOLEAN fHit; + BOOLEAN fHit; UINT8 ubSpecial; UINT8 ubLocation; - INT32 iBullet; - BOOLEAN fStopped; + BOOLEAN fStopped; } EV_S_WEAPONHIT; typedef struct { + INT32 iImpact; + INT32 iBullet; INT16 sXPos; INT16 sYPos; INT16 sZPos; - UINT16 usWeaponIndex; + UINT16 usWeaponIndex; INT16 bWeaponStatus; - UINT16 ubAttackerID; - UINT16 usStructureID; - INT32 iImpact; - INT32 iBullet; - BOOLEAN fStopped;//hayden + SoldierID ubAttackerID; + UINT16 usStructureID; + BOOLEAN fStopped;//hayden } EV_S_STRUCTUREHIT; typedef struct { - INT32 sGridNo; - UINT16 usStructureID; - BOOLEAN fBlowWindowSouth; - BOOLEAN fLargeForce; - UINT16 ubAttackerID; - INT32 iBullet; + INT32 sGridNo; + INT32 iBullet; + UINT16 usStructureID; + BOOLEAN fBlowWindowSouth; + BOOLEAN fLargeForce; + SoldierID ubAttackerID; } EV_S_WINDOWHIT; typedef struct { - UINT16 ubAttackerID; - INT32 iBullet; + INT32 iBullet; + SoldierID ubAttackerID; } EV_S_MISS; typedef struct { - UINT16 ubNoiseMaker; - INT32 sGridNo; - UINT8 bLevel; - UINT8 ubTerrType; - UINT8 ubVolume; - UINT8 ubNoiseType; - CHAR16 zNoiseMessage[320]; + INT32 sGridNo; + SoldierID ubNoiseMaker; + UINT8 bLevel; + UINT8 ubTerrType; + UINT8 ubVolume; + UINT8 ubNoiseType; + CHAR16 zNoiseMessage[320]; } EV_S_NOISE; typedef struct { - UINT16 usSoldierID; - UINT32 uiUniqueId; - UINT8 ubDirection; - INT32 sGridNo; + UINT32 uiUniqueId; + INT32 sGridNo; + SoldierID usSoldierID; INT16 sXPos; INT16 sYPos; - BOOLEAN fset; + UINT8 ubDirection; + BOOLEAN fset; } EV_S_STOP_MERC; @@ -230,35 +231,34 @@ typedef struct typedef struct { - UINT16 usSoldierID; -// UINT32 uiUniqueId; + SoldierID usSoldierID; +// UINT32 uiUniqueId; UINT16 usPathDataSize; // Size of Path - INT32 sAtGridNo; // Owner merc is at this tile when sending packet + INT32 sAtGridNo; // Owner merc is at this tile when sending packet UINT16 usCurrentPathIndex; // Index the owner of the merc is at when sending packet UINT16 usPathData[ MAX_PATH_LIST_SIZE ]; // make define // Next X tile to go to UINT16 ubNewState; // new movment Anim - INT32 sDestGridNo; -// INT8 bActionPoints; -// INT8 bBreath; // current breath value -// INT8 bDesiredDirection; - + INT32 sDestGridNo; +// INT8 bActionPoints; +// INT8 bBreath; // current breath value +// INT8 bDesiredDirection; // maybe send current action & breath points } EV_S_SENDPATHTONETWORK; typedef struct { - UINT16 usSoldierID; - //UINT32 uiUniqueId; - INT32 sAtGridNo; // Owner merc is at this tile when sending packet - INT8 bActionPoints; // current A.P. value - INT8 bBreath; // current breath value + INT32 sAtGridNo; // Owner merc is at this tile when sending packet + SoldierID usSoldierID; + //UINT32 uiUniqueId; + INT8 bActionPoints; // current A.P. value + INT8 bBreath; // current breath value //hayden - INT8 bLife; - INT8 bBleeding; - UINT16 usTactialTurnLimitCounter; - UINT16 usTactialTurnLimitMax; - UINT8 ubDirection; + INT8 bLife; + INT8 bBleeding; + UINT16 usTactialTurnLimitCounter; + UINT16 usTactialTurnLimitMax; + UINT8 ubDirection; UINT8 ubNewStance; } EV_S_UPDATENETWORKSOLDIER; From 74d752d45269b54846568390bd9f45e298e5d1d5 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 17 Nov 2024 18:15:36 +0200 Subject: [PATCH 083/192] More conversions to SoldierID --- Tactical/Handle UI.cpp | 4 +- Tactical/Handle UI.h | 2 +- Tactical/LOS.cpp | 2 +- Tactical/Soldier Control.cpp | 131 +++++++++++++++++------------------ Tactical/Soldier Control.h | 22 +++--- Tactical/TeamTurns.cpp | 18 ++--- Tactical/TeamTurns.h | 4 +- Tactical/Weapons.cpp | 26 +++---- Tactical/Weapons.h | 4 +- Tactical/faces.h | 2 +- TileEngine/physics.cpp | 6 +- TileEngine/physics.h | 6 +- TileEngine/worldman.cpp | 2 +- TileEngine/worldman.h | 4 +- 14 files changed, 115 insertions(+), 118 deletions(-) diff --git a/Tactical/Handle UI.cpp b/Tactical/Handle UI.cpp index cca15ed9..2ad4e76e 100644 --- a/Tactical/Handle UI.cpp +++ b/Tactical/Handle UI.cpp @@ -6378,9 +6378,9 @@ BOOLEAN IsValidTalkableNPCFromMouse( UINT16 * pubSoldierID, BOOLEAN fGive, BOOLE } -BOOLEAN IsValidTalkableNPC( UINT16 ubSoldierID, BOOLEAN fGive, BOOLEAN fAllowMercs, BOOLEAN fCheckCollapsed ) +BOOLEAN IsValidTalkableNPC( SoldierID ubSoldierID, BOOLEAN fGive, BOOLEAN fAllowMercs, BOOLEAN fCheckCollapsed ) { - SOLDIERTYPE *pSoldier = MercPtrs[ ubSoldierID ]; + SOLDIERTYPE *pSoldier = ubSoldierID; BOOLEAN fValidGuy = FALSE; if ( gusSelectedSoldier != NOBODY ) diff --git a/Tactical/Handle UI.h b/Tactical/Handle UI.h index b72930ae..22bd3fa4 100644 --- a/Tactical/Handle UI.h +++ b/Tactical/Handle UI.h @@ -335,7 +335,7 @@ BOOLEAN UIMouseOnValidAttackLocation( SOLDIERTYPE *pSoldier ); BOOLEAN UIOkForItemPickup( SOLDIERTYPE *pSoldier, INT32 sGridNo ); BOOLEAN IsValidTalkableNPCFromMouse( UINT16 * pubSoldierID, BOOLEAN fGive, BOOLEAN fAllowMercs, BOOLEAN fCheckCollapsed ); -BOOLEAN IsValidTalkableNPC( UINT16 ubSoldierID, BOOLEAN fGive, BOOLEAN fAllowMercs, BOOLEAN fCheckCollapsed ); +BOOLEAN IsValidTalkableNPC( SoldierID ubSoldierID, BOOLEAN fGive, BOOLEAN fAllowMercs, BOOLEAN fCheckCollapsed ); BOOLEAN HandleTalkInit( ); diff --git a/Tactical/LOS.cpp b/Tactical/LOS.cpp index 7c607510..9d9154c6 100644 --- a/Tactical/LOS.cpp +++ b/Tactical/LOS.cpp @@ -3436,7 +3436,7 @@ BOOLEAN BulletHitMerc( BULLET * pBullet, STRUCTURE * pStructure, BOOLEAN fIntend // be legal, but the bLevel May change... sNewGridNo = NewGridNo( pBullet->sGridNo, DirectionInc( gOppositeDirection[ SWeaponHit.usDirection ] ) ); - bSpewBloodLevel = MercPtrs[ SWeaponHit.usSoldierID ]->pathing.bLevel; + bSpewBloodLevel = SWeaponHit.usSoldierID->pathing.bLevel; fCanSpewBlood = TRUE; // If on anything other than bLevel of 0, we can pretty much freely spew blood diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index 84addbd3..37cf962a 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -1730,10 +1730,10 @@ void AdjustForFastTurnAnimation( SOLDIERTYPE *pSoldier ); UINT16 SelectFireAnimation( SOLDIERTYPE *pSoldier, UINT8 ubHeight ); void SelectFallAnimation( SOLDIERTYPE *pSoldier ); BOOLEAN FullStructAlone( INT32 sGridNo, UINT8 ubRadius ); -void SoldierGotHitGunFire( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, UINT16 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation ); +void SoldierGotHitGunFire( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, SoldierID ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation ); void SoldierGotHitBlade( SOLDIERTYPE* pSoldier, UINT8 ubHitLocation ); -void SoldierGotHitPunch( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, UINT8 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation ); -void SoldierGotHitExplosion( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, UINT8 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation ); +void SoldierGotHitPunch( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, SoldierID ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation ); +void SoldierGotHitExplosion( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, SoldierID ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation ); void SoldierGotHitVehicle( SOLDIERTYPE* pSoldier, UINT16 bDirection ); UINT8 CalcScreamVolume( SOLDIERTYPE * pSoldier, UINT8 ubCombinedLoss ); void PlaySoldierFootstepSound( SOLDIERTYPE *pSoldier ); @@ -6492,7 +6492,7 @@ void DoGenericHit( SOLDIERTYPE *pSoldier, UINT8 ubSpecial, INT16 bDirection ) } -void SoldierGotHitGunFire( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, UINT16 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation ) +void SoldierGotHitGunFire( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, SoldierID ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation ) { INT32 usNewGridNo; BOOLEAN fBlownAway = FALSE; @@ -6517,7 +6517,7 @@ void SoldierGotHitGunFire( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sD if ( Item[usWeaponIndex].usItemClass == IC_GUN ) ubDistMessy *= gItemSettings.fDistMessyModifierGun[Weapon[usWeaponIndex].ubWeaponType]; - if ( SpacesAway( pSoldier->sGridNo, Menptr[ubAttackerID].sGridNo ) <= ubDistMessy ) + if ( SpacesAway( pSoldier->sGridNo, ubAttackerID->sGridNo ) <= ubDistMessy ) { usNewGridNo = NewGridNo( pSoldier->sGridNo, (INT8)(DirectionInc( pSoldier->ubDirection )) ); @@ -6546,7 +6546,7 @@ void SoldierGotHitGunFire( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sD if ( Item[usWeaponIndex].usItemClass == IC_GUN ) ubDistMessy *= gItemSettings.fDistMessyModifierGun[Weapon[usWeaponIndex].ubWeaponType]; - if ( SpacesAway( pSoldier->sGridNo, Menptr[ubAttackerID].sGridNo ) <= ubDistMessy ) + if ( SpacesAway( pSoldier->sGridNo, ubAttackerID->sGridNo ) <= ubDistMessy ) { // possibly play torso explosion anim! @@ -6619,7 +6619,7 @@ void SoldierGotHitGunFire( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sD // Flugente: dynamic opinions if (gGameExternalOptions.fDynamicOpinions && ubAttackerID != NOBODY ) - HandleDynamicOpinionChange( MercPtrs[ubAttackerID], OPINIONEVENT_BRUTAL_GOOD, TRUE, TRUE ); + HandleDynamicOpinionChange( ubAttackerID, OPINIONEVENT_BRUTAL_GOOD, TRUE, TRUE ); return; } @@ -6634,7 +6634,7 @@ void SoldierGotHitGunFire( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sD // Flugente: dynamic opinions if (gGameExternalOptions.fDynamicOpinions && ubAttackerID != NOBODY ) - HandleDynamicOpinionChange( MercPtrs[ubAttackerID], OPINIONEVENT_BRUTAL_GOOD, TRUE, TRUE ); + HandleDynamicOpinionChange( ubAttackerID, OPINIONEVENT_BRUTAL_GOOD, TRUE, TRUE ); return; } @@ -6643,7 +6643,7 @@ void SoldierGotHitGunFire( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sD DoGenericHit( pSoldier, ubSpecial, bDirection ); } -void SoldierGotHitExplosion( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, UINT8 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation ) +void SoldierGotHitExplosion( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, SoldierID ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation ) { // Flugente: if hit in legs or torso, blood will be on our uniform - parts of the clothes cannot be worn anymore if ( ubHitLocation == AIM_SHOT_TORSO ) @@ -6858,7 +6858,7 @@ void SoldierGotHitBlade( SOLDIERTYPE *pSoldier, UINT8 ubHitLocation ) } -void SoldierGotHitPunch( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, UINT8 ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation ) +void SoldierGotHitPunch( SOLDIERTYPE *pSoldier, UINT16 usWeaponIndex, INT16 sDamage, UINT16 bDirection, UINT16 sRange, SoldierID ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation ) { // IF HERE AND GUY IS DEAD, RETURN! @@ -12507,9 +12507,9 @@ void SOLDIERTYPE::EVENT_SoldierBeginBladeAttack( INT32 sGridNo, UINT8 ubDirectio if ( this->flags.uiStatusFlags & SOLDIER_MONSTER ) { // Is there an unconscious guy at gridno...... - UINT16 ubTargetID = WhoIsThere2( sGridNo, this->bTargetLevel ); + SoldierID ubTargetID = WhoIsThere2( sGridNo, this->bTargetLevel ); - if ( ubTargetID != NOBODY && ((MercPtrs[ubTargetID]->stats.bLife < OKLIFE && MercPtrs[ubTargetID]->stats.bLife > 0) || (MercPtrs[ubTargetID]->bBreath < OKBREATH && MercPtrs[ubTargetID]->bCollapsed)) ) + if ( ubTargetID != NOBODY && ((ubTargetID->stats.bLife < OKLIFE && ubTargetID->stats.bLife > 0) || (ubTargetID->bBreath < OKBREATH && ubTargetID->bCollapsed)) ) { this->aiData.uiPendingActionData4 = ubTargetID; @@ -13140,13 +13140,12 @@ void SOLDIERTYPE::EVENT_SoldierBeginFirstAid( INT32 sGridNo, UINT8 ubDirection ) { SOLDIERTYPE *pTSoldier; //UINT32 uiMercFlags; - UINT16 usSoldierIndex; BOOLEAN fRefused = FALSE; - usSoldierIndex = WhoIsThere2( sGridNo, this->pathing.bLevel ); + SoldierID usSoldierIndex = WhoIsThere2( sGridNo, this->pathing.bLevel ); if ( usSoldierIndex != NOBODY ) { - pTSoldier = MercPtrs[usSoldierIndex]; + pTSoldier = usSoldierIndex; //SANDRO - hack! Find out if we are a doctor with medical bag trying to make a surgery this->fDoingSurgery = FALSE; @@ -13275,7 +13274,7 @@ void SOLDIERTYPE::EVENT_SoldierEnterVehicle( INT32 sGridNo, UINT8 ubDirection, U if ( FindSoldier( sGridNo, &usSoldierIndex, &uiMercFlags, FIND_SOLDIER_GRIDNO ) ) { - pTSoldier = MercPtrs[usSoldierIndex]; + pTSoldier = usSoldierIndex; // Enter vehicle... EnterVehicle( pTSoldier, this, ubSeatIndex ); @@ -13790,7 +13789,7 @@ void SOLDIERTYPE::InternalGivingSoldierCancelServices( BOOLEAN fPlayEndAnim ) // GET TARGET SOLDIER if ( this->ubServicePartner != NOBODY ) { - pTSoldier = MercPtrs[this->ubServicePartner]; + pTSoldier = this->ubServicePartner; // END SERVICE! pTSoldier->ubServiceCount--; @@ -14773,12 +14772,12 @@ BOOLEAN SOLDIERTYPE::IsWeaponMounted( void ) if ( !IsLocationSittable( nextGridNoinSight, 0 ) ) { // resting our gun on people is allowed sometimes - UINT16 usPersonID = WhoIsThere2( nextGridNoinSight, this->pathing.bLevel ); + SoldierID usPersonID = WhoIsThere2( nextGridNoinSight, this->pathing.bLevel ); if ( usPersonID == NOBODY ) applybipod = TRUE; else { - SOLDIERTYPE* pSoldier = MercPtrs[usPersonID]; + SOLDIERTYPE* pSoldier = usPersonID; // anv: vehicles don't mind if ( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) @@ -14797,7 +14796,7 @@ BOOLEAN SOLDIERTYPE::IsWeaponMounted( void ) // Flugente: dynamic opinions if (gGameExternalOptions.fDynamicOpinions) { - AddOpinionEvent(MercPtrs[usPersonID]->ubProfile, this->ubProfile, OPINIONEVENT_YOUMOUNTEDAGUNONMYBREASTS); + AddOpinionEvent(pSoldier->ubProfile, this->ubProfile, OPINIONEVENT_YOUMOUNTEDAGUNONMYBREASTS); } } } @@ -14847,12 +14846,12 @@ BOOLEAN SOLDIERTYPE::IsWeaponMounted( void ) if ( !IsLocationSittable( nextGridNoinSight, 0 ) ) { // resting our gun on people is allowed sometimes - UINT16 usPersonID = WhoIsThere2( nextGridNoinSight, this->pathing.bLevel ); + SoldierID usPersonID = WhoIsThere2( nextGridNoinSight, this->pathing.bLevel ); if ( usPersonID == NOBODY ) applybipod = TRUE; else { - SOLDIERTYPE* pSoldier = MercPtrs[usPersonID]; + SOLDIERTYPE* pSoldier = usPersonID; // anv: vehicles don't mind if ( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) @@ -14867,7 +14866,7 @@ BOOLEAN SOLDIERTYPE::IsWeaponMounted( void ) // Flugente: dynamic opinions if (gGameExternalOptions.fDynamicOpinions) { - AddOpinionEvent(MercPtrs[usPersonID]->ubProfile, this->ubProfile, OPINIONEVENT_YOUMOUNTEDAGUNONMYBREASTS); + AddOpinionEvent(pSoldier->ubProfile, this->ubProfile, OPINIONEVENT_YOUMOUNTEDAGUNONMYBREASTS); } } } @@ -15328,7 +15327,7 @@ BOOLEAN SOLDIERTYPE::IsFeedingExternal( UINT16 * pubId1, UINT16* pGunSlot1, UIN UINT16 lastslotforammo = MEDPOCK3POS; // for robots and AI-controlled soldiers (who don't have any LBE gear), we put a change in here so that ALL their slots are checked for ammo - if ( this->bTeam != gbPlayerNum || MercPtrs[this->ubID]->flags.uiStatusFlags & SOLDIER_ROBOT ) + if ( this->bTeam != gbPlayerNum || this->ubID->flags.uiStatusFlags & SOLDIER_ROBOT ) { firstslotforammo = HANDPOS; lastslotforammo = NUM_INV_SLOTS; @@ -15835,9 +15834,9 @@ BOOLEAN SOLDIERTYPE::EquipmentTooGood( BOOLEAN fCloselook ) // are we in covert mode? we need to have the correct flag set, and not wear anything suspicious, or behave in a suspicious way -BOOLEAN SOLDIERTYPE::SeemsLegit( UINT16 ubObserverID ) +BOOLEAN SOLDIERTYPE::SeemsLegit( SoldierID ubObserverID ) { - SOLDIERTYPE* pSoldier = MercPtrs[ubObserverID]; + SOLDIERTYPE* pSoldier = ubObserverID; if ( !pSoldier ) return TRUE; @@ -16123,7 +16122,7 @@ BOOLEAN SOLDIERTYPE::SeemsLegit( UINT16 ubObserverID ) } // do we recognize someone else as a combatant? -BOOLEAN SOLDIERTYPE::RecognizeAsCombatant( UINT16 ubTargetID ) +BOOLEAN SOLDIERTYPE::RecognizeAsCombatant( SoldierID ubTargetID ) { // this will only work with the new trait system if ( !gGameOptions.fNewTraitSystem ) @@ -16132,7 +16131,7 @@ BOOLEAN SOLDIERTYPE::RecognizeAsCombatant( UINT16 ubTargetID ) if ( ubTargetID == NOBODY ) return TRUE; - SOLDIERTYPE* pSoldier = MercPtrs[ubTargetID]; + SOLDIERTYPE* pSoldier = ubTargetID; if ( !pSoldier ) return TRUE; @@ -16462,12 +16461,12 @@ BOOLEAN SOLDIERTYPE::FreePrisoner( ) // we can only free people we are facing INT32 nextGridNoinSight = NewGridNo( this->sGridNo, DirectionInc( this->ubDirection ) ); - UINT16 target = WhoIsThere2( nextGridNoinSight, this->pathing.bLevel ); + SoldierID target = WhoIsThere2( nextGridNoinSight, this->pathing.bLevel ); // is there somebody? if ( target != NOBODY ) { - SOLDIERTYPE* pSoldier = MercPtrs[target]; + SOLDIERTYPE* pSoldier = target; // if he is captured, free him! // note that this would also work for prisoner civs that we spawn in our prisons. All needed would be commanding the AI to get there @@ -18860,7 +18859,7 @@ BOOLEAN SOLDIERTYPE::OrderArtilleryStrike( UINT32 usSectorNr, INT32 sTargetGridN // if he does not do so, active vox operators will be targetted. Who knows, the vox operator might be doing a heroic last stand for all we know... //BOOLEAN signalshellfired = FALSE; const UINT8 maxFiringMortarsAmount = 5; - UINT16 radiooperatorID = 0; + SoldierID radiooperatorID = 0; UINT8 mortaritemcnt = 0; UINT16 mortararray[maxFiringMortarsAmount] = { 0 }; @@ -19008,7 +19007,7 @@ BOOLEAN SOLDIERTYPE::OrderArtilleryStrike( UINT32 usSectorNr, INT32 sTargetGridN if ( radiooperatorID ) { - pSoldier = MercPtrs[radiooperatorID]; + pSoldier = radiooperatorID; // also drain the other guy's radio batteries pSoldier->UseRadio( ); @@ -19337,12 +19336,12 @@ BOOLEAN SOLDIERTYPE::AIDoctorFriend( ) // we can only free people we are facing INT32 nextGridNoinSight = NewGridNo( this->sGridNo, DirectionInc( this->ubDirection ) ); - UINT16 target = WhoIsThere2( nextGridNoinSight, this->pathing.bLevel ); + SoldierID target = WhoIsThere2( nextGridNoinSight, this->pathing.bLevel ); // is there somebody? if ( target != NOBODY ) { - SOLDIERTYPE* pSoldier = MercPtrs[target]; + SOLDIERTYPE* pSoldier = target; if ( pSoldier->bTeam != ENEMY_TEAM ) return FALSE; @@ -20517,13 +20516,13 @@ BOOLEAN SOLDIERTYPE::CanDragInPrinciple(BOOLEAN fCheckStance) return TRUE; } -BOOLEAN SOLDIERTYPE::CanDragPerson(UINT16 usID, BOOLEAN fCheckStance) +BOOLEAN SOLDIERTYPE::CanDragPerson(SoldierID usID, BOOLEAN fCheckStance) { if (!CanDragInPrinciple(fCheckStance)) return FALSE; // check whether this guy exists etc. - SOLDIERTYPE* pSoldier = MercPtrs[usID]; + SOLDIERTYPE* pSoldier = usID; if ( pSoldier && pSoldier->bActive && pSoldier->bInSector ) { @@ -20804,7 +20803,7 @@ BOOLEAN SOLDIERTYPE::IsDragging( bool aStopIfConditionNotSatisfied ) return FALSE; } -void SOLDIERTYPE::SetDragOrderPerson( UINT16 usID ) +void SOLDIERTYPE::SetDragOrderPerson( SoldierID usID ) { if ( CanDragPerson( usID ) ) { @@ -20825,16 +20824,16 @@ void SOLDIERTYPE::SetDragOrderPerson( UINT16 usID ) } } -void SOLDIERTYPE::SetDragOrderCorpse( UINT32 usID ) +void SOLDIERTYPE::SetDragOrderCorpse( UINT32 uiCorpseID ) { - if ( CanDragCorpse( usID ) ) + if ( CanDragCorpse( uiCorpseID ) ) { // sevenfm: if someone is dragging this corpse, cancel drag SOLDIERTYPE *pSoldier; for (UINT32 uiLoop = 0; uiLoop < guiNumMercSlots; uiLoop++) { pSoldier = MercPtrs[uiLoop]; - if (pSoldier && pSoldier->sDragCorpseID == usID) + if (pSoldier && pSoldier->sDragCorpseID == uiCorpseID) { pSoldier->CancelDrag(); } @@ -20842,7 +20841,7 @@ void SOLDIERTYPE::SetDragOrderCorpse( UINT32 usID ) CancelDrag(); - this->sDragCorpseID = usID; + this->sDragCorpseID = uiCorpseID; } } @@ -21014,7 +21013,7 @@ void SOLDIERTYPE::StopChatting() { ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, TacticalStr[DISTRACT_STOP_STR], this->GetName(), this->usChatPartnerID->GetName() ); - MercPtrs[this->usChatPartnerID]->usChatPartnerID = NOBODY; + this->usChatPartnerID->usChatPartnerID = NOBODY; this->usChatPartnerID = NOBODY; } } @@ -21372,7 +21371,7 @@ UINT8 SOLDIERTYPE::GetThiefEvadeDetectionChance() return totalvalue; } -BOOLEAN SOLDIERTYPE::InPositionForTurncoatAttempt( UINT16 usID ) +BOOLEAN SOLDIERTYPE::InPositionForTurncoatAttempt( SoldierID usID ) { if ( !gSkillTraitValues.fCOTurncoats || gbWorldSectorZ @@ -21387,7 +21386,7 @@ BOOLEAN SOLDIERTYPE::InPositionForTurncoatAttempt( UINT16 usID ) || usID == NOBODY ) return FALSE; - SOLDIERTYPE* pSoldier = MercPtrs[usID]; + SOLDIERTYPE* pSoldier = usID; if ( !pSoldier || pSoldier->bTeam != ENEMY_TEAM @@ -21543,12 +21542,12 @@ UINT8 SOLDIERTYPE::GetTurncoatConvinctionChance( SoldierID usID, INT16 sApproac return max( 0, min( 100, recruitrating - enemyresistancerating ) ); } -void SOLDIERTYPE::AttemptToCreateTurncoat( UINT16 usID ) +void SOLDIERTYPE::AttemptToCreateTurncoat( SoldierID usID ) { if ( usID >= NOBODY ) return; - SOLDIERTYPE* pSoldier = MercPtrs[usID]; + SOLDIERTYPE* pSoldier = usID; if ( !pSoldier || pSoldier->bTeam != ENEMY_TEAM @@ -21558,12 +21557,12 @@ void SOLDIERTYPE::AttemptToCreateTurncoat( UINT16 usID ) HandleTurncoatAttempt( pSoldier ); } -BOOLEAN SOLDIERTYPE::OrderTurnCoatToSwitchSides( UINT16 usID ) +BOOLEAN SOLDIERTYPE::OrderTurnCoatToSwitchSides( SoldierID usID ) { if ( usID >= NOBODY ) return FALSE; - SOLDIERTYPE* pSoldier = MercPtrs[usID]; + SOLDIERTYPE* pSoldier = usID; if (!pSoldier || pSoldier->bTeam != ENEMY_TEAM @@ -22545,12 +22544,12 @@ void SOLDIERTYPE::EVENT_SoldierHandcuffPerson( INT32 sGridNo, UINT8 ubDirection if ( !gGameExternalOptions.fAllowPrisonerSystem ) return; - UINT16 ubPerson = WhoIsThere2( sGridNo, this->pathing.bLevel ); + SoldierID ubPerson = WhoIsThere2( sGridNo, this->pathing.bLevel ); - if ( ubPerson != NOBODY && MercPtrs[ubPerson]->CanBeCaptured( ) ) + if ( ubPerson != NOBODY && ubPerson->CanBeCaptured( ) ) { // we found someone we can handcuff - SOLDIERTYPE* pSoldier = MercPtrs[ubPerson]; + SOLDIERTYPE* pSoldier = ubPerson; // check wether we will be successful BOOLEAN success = FALSE; @@ -22688,12 +22687,12 @@ void SOLDIERTYPE::EVENT_SoldierHandcuffPerson( INT32 sGridNo, UINT8 ubDirection void SOLDIERTYPE::EVENT_SoldierApplyItemToPerson( INT32 sGridNo, UINT8 ubDirection ) { - UINT16 ubPerson = WhoIsThere2( sGridNo, this->pathing.bLevel ); + SoldierID ubPerson = WhoIsThere2( sGridNo, this->pathing.bLevel ); if ( ubPerson != NOBODY ) { // we found someone - SOLDIERTYPE* pSoldier = MercPtrs[ubPerson]; + SOLDIERTYPE* pSoldier = ubPerson; OBJECTTYPE* pObj = &(this->inv[HANDPOS]); @@ -22824,12 +22823,12 @@ void SOLDIERTYPE::EVENT_SoldierApplyItemToPerson( INT32 sGridNo, UINT8 ubDirecti void SOLDIERTYPE::EVENT_SoldierTakeBloodFromPerson( INT32 sGridNo, UINT8 ubDirection ) { - UINT16 ubPerson = WhoIsThere2( sGridNo, this->pathing.bLevel ); + SoldierID ubPerson = WhoIsThere2( sGridNo, this->pathing.bLevel ); if ( ubPerson != NOBODY && ubPerson != this->ubID ) { // we found someone - SOLDIERTYPE* pSoldier = MercPtrs[ubPerson]; + SOLDIERTYPE* pSoldier = ubPerson; OBJECTTYPE* pObj = &( this->inv[HANDPOS] ); @@ -22895,12 +22894,12 @@ void SOLDIERTYPE::EVENT_SoldierTakeBloodFromPerson( INT32 sGridNo, UINT8 ubDirec void SOLDIERTYPE::EVENT_SoldierApplySplintToPerson( INT32 sGridNo, UINT8 ubDirection ) { - UINT16 ubPerson = WhoIsThere2( sGridNo, this->pathing.bLevel ); + SoldierID ubPerson = WhoIsThere2( sGridNo, this->pathing.bLevel ); if ( ubPerson != NOBODY && ubPerson != this->ubID ) { // we found someone - SOLDIERTYPE* pSoldier = MercPtrs[ubPerson]; + SOLDIERTYPE* pSoldier = ubPerson; OBJECTTYPE* pObj = &( this->inv[HANDPOS] ); @@ -22964,12 +22963,10 @@ void SOLDIERTYPE::EVENT_SoldierInteractiveAction( INT32 sGridNo, UINT16 usAction void SOLDIERTYPE::EVENT_SoldierBeginReloadRobot( INT32 sGridNo, UINT8 ubDirection, UINT8 ubMercSlot ) { - UINT16 ubPerson; - // Make sure we have a robot here.... - ubPerson = WhoIsThere2( sGridNo, this->pathing.bLevel ); + SoldierID ubPerson = WhoIsThere2( sGridNo, this->pathing.bLevel ); - if ( ubPerson != NOBODY && MercPtrs[ubPerson]->flags.uiStatusFlags & SOLDIER_ROBOT ) + if ( ubPerson != NOBODY && ubPerson->flags.uiStatusFlags & SOLDIER_ROBOT ) { // CHANGE DIRECTION AND GOTO ANIMATION NOW if (this->ubDirection != ubDirection) @@ -23195,18 +23192,18 @@ void AbandonBoxingDueToSurrenderCallback(UINT8 ubExitValue) } SOLDIERTYPE *pTMilitiaSoldier;//global pointer -BOOLEAN SOLDIERTYPE::PlayerSoldierStartTalking( UINT16 ubTargetID, BOOLEAN fValidate ) +BOOLEAN SOLDIERTYPE::PlayerSoldierStartTalking( SoldierID ubTargetID, BOOLEAN fValidate ) { - INT16 sFacingDir, sXPos, sYPos, sAPCost; - SOLDIERTYPE *pTSoldier; - UINT32 uiRange; + INT16 sFacingDir, sXPos, sYPos, sAPCost; + SOLDIERTYPE *pTSoldier; + UINT32 uiRange; if ( ubTargetID == NOBODY ) { return(FALSE); } - pTSoldier = MercPtrs[ubTargetID]; + pTSoldier = ubTargetID; // Check distance again, to be sure if ( fValidate ) @@ -23392,7 +23389,7 @@ BOOLEAN SOLDIERTYPE::IsValidSecondHandBurst( void ) { if ( this->bDoAutofire ) { - // if second gun cannot use atuofire mode + // if second gun cannot use autofire mode if ( !IsGunAutofireCapable( &this->inv[SECONDHANDPOS] ) ) { return(FALSE); diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index 3ccedd4e..81498083 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -1254,7 +1254,7 @@ public: UINT16 *pCurrentShade; UINT8 ubFadeLevel; UINT8 ubServiceCount; - UINT16 ubServicePartner; + SoldierID ubServicePartner; THROW_PARAMS *pThrowParams; INT8 bReverse; LEVELNODE *pLevelNode; @@ -1427,7 +1427,7 @@ public: INT8 bOldBattleSnd; INT32 iBurstSoundID; INT8 bSlotItemTakenFrom; - UINT16 ubAutoBandagingMedic; + SoldierID ubAutoBandagingMedic; SoldierID ubRobotRemoteHolderID; UINT32 uiTimeOfLastContractUpdate; INT8 bTypeOfLastContract; @@ -1808,7 +1808,7 @@ public: BOOLEAN CheckSoldierHitRoof( void ); BOOLEAN CheckForBreathCollapse( void ); - BOOLEAN PlayerSoldierStartTalking( UINT16 ubTargetID, BOOLEAN fValidate ); + BOOLEAN PlayerSoldierStartTalking( SoldierID ubTargetID, BOOLEAN fValidate ); BOOLEAN InternalIsValidStance( INT8 bDirection, INT8 bNewStance ); BOOLEAN IsValidSecondHandShot( void ); BOOLEAN IsValidSecondHandBurst( void ); @@ -1859,10 +1859,10 @@ public: BOOLEAN EquipmentTooGood( BOOLEAN fCloselook ); // does soldier ubObserverID recognize us as his enemy? - BOOLEAN SeemsLegit( UINT16 ubObserverID ); + BOOLEAN SeemsLegit( SoldierID ubObserverID ); // do we recognize someone else as a combatant? - BOOLEAN RecognizeAsCombatant(UINT16 ubTargetID); + BOOLEAN RecognizeAsCombatant(SoldierID ubTargetID); // loose covert property void LooseDisguise( void ); @@ -2053,12 +2053,12 @@ public: // Flugente: drag people BOOLEAN CanDragInPrinciple(BOOLEAN fCheckStance = FALSE); - BOOLEAN CanDragPerson(UINT16 usID, BOOLEAN fCheckStance = FALSE); + BOOLEAN CanDragPerson(SoldierID usID, BOOLEAN fCheckStance = FALSE); BOOLEAN CanDragCorpse(UINT16 usCorpseNum, BOOLEAN fCheckStance = FALSE); BOOLEAN CanDragStructure(INT32 sGridNo, BOOLEAN fCheckStance = FALSE); BOOLEAN IsDragging(bool aStopIfConditionNotSatisfied = true); - void SetDragOrderPerson( UINT16 usID ); - void SetDragOrderCorpse( UINT32 usID ); + void SetDragOrderPerson( SoldierID usID ); + void SetDragOrderCorpse( UINT32 uiCorpseID ); void SetDragOrderStructure( INT32 sGridNo ); void CancelDrag(); @@ -2086,10 +2086,10 @@ public: UINT8 GetThiefEvadeDetectionChance(); // Flugente: turncoats - BOOLEAN InPositionForTurncoatAttempt( UINT16 usID ); + BOOLEAN InPositionForTurncoatAttempt( SoldierID usID ); UINT8 GetTurncoatConvinctionChance( SoldierID usID, INT16 usApproach ); - void AttemptToCreateTurncoat( UINT16 usID ); - BOOLEAN OrderTurnCoatToSwitchSides( UINT16 usID ); + void AttemptToCreateTurncoat( SoldierID usID ); + BOOLEAN OrderTurnCoatToSwitchSides( SoldierID usID ); void OrderAllTurnCoatToSwitchSides(); // Flugente: exploration assignment diff --git a/Tactical/TeamTurns.cpp b/Tactical/TeamTurns.cpp index fd496bd5..49d53cfd 100644 --- a/Tactical/TeamTurns.cpp +++ b/Tactical/TeamTurns.cpp @@ -102,9 +102,9 @@ UINT16 gubOutOfTurnPersons = 0; #define REMOVE_LATEST_INTERRUPT_GUY() (DeleteFromIntList( (gubOutOfTurnPersons), TRUE )) #define INTERRUPTS_OVER (gubOutOfTurnPersons == 1) -INT16 InterruptOnlyGuynum = NOBODY; -BOOLEAN InterruptsAllowed = TRUE; -BOOLEAN gfHiddenInterrupt = FALSE; +SoldierID InterruptOnlyGuynum = NOBODY; +BOOLEAN InterruptsAllowed = TRUE; +BOOLEAN gfHiddenInterrupt = FALSE; UINT8 gubLastInterruptedGuy = 0; extern UINT16 gsWhoThrewRock; @@ -1797,7 +1797,7 @@ BOOLEAN StandardInterruptConditionsMet( SOLDIERTYPE * pSoldier, UINT16 ubOpponen } -INT8 CalcInterruptDuelPts( SOLDIERTYPE * pSoldier, UINT16 ubOpponentID, BOOLEAN fUseWatchSpots ) +INT8 CalcInterruptDuelPts( SOLDIERTYPE * pSoldier, SoldierID ubOpponentID, BOOLEAN fUseWatchSpots ) { INT32 iPoints; INT8 bLightLevel; @@ -1853,7 +1853,7 @@ INT8 CalcInterruptDuelPts( SOLDIERTYPE * pSoldier, UINT16 ubOpponentID, BOOLEAN if (fUseWatchSpots && !(pSoldier->usSoldierFlagMask2 & SOLDIER_TRAIT_FOCUS)) { // if this is a previously noted spot of enemies, give bonus points! - iPoints += GetWatchedLocPoints( pSoldier->ubID, MercPtrs[ ubOpponentID ]->sGridNo, MercPtrs[ ubOpponentID ]->pathing.bLevel ); + iPoints += GetWatchedLocPoints( pSoldier->ubID, ubOpponentID->sGridNo, ubOpponentID->pathing.bLevel ); } // LOSE one point for each 2 additional opponents he currently sees, above 2 @@ -1882,7 +1882,7 @@ INT8 CalcInterruptDuelPts( SOLDIERTYPE * pSoldier, UINT16 ubOpponentID, BOOLEAN // if soldier is still in shock from recent injuries, that penalizes him iPoints -= pSoldier->aiData.bShock; - ubDistance = (UINT8) PythSpacesAway( pSoldier->sGridNo, MercPtrs[ ubOpponentID ]->sGridNo ); + ubDistance = (UINT8) PythSpacesAway( pSoldier->sGridNo, ubOpponentID->sGridNo ); // if we are in combat mode - thus doing an interrupt rather than determine who gets first turn - // then give bonus @@ -1951,7 +1951,7 @@ INT8 CalcInterruptDuelPts( SOLDIERTYPE * pSoldier, UINT16 ubOpponentID, BOOLEAN INT16 range = PythSpacesAway( pSoldier->sFocusGridNo, pSoldier->sGridNo ); INT16 radius = gSkillTraitValues.ubSNFocusRadius * range / 20; - INT16 range_opponent = PythSpacesAway( pSoldier->sFocusGridNo, MercPtrs[ubOpponentID]->sGridNo ); + INT16 range_opponent = PythSpacesAway( pSoldier->sFocusGridNo, ubOpponentID->sGridNo ); if ( range_opponent <= radius ) iPoints += gSkillTraitValues.sSNFocusInterruptBonus; @@ -2034,7 +2034,7 @@ INT8 CalcInterruptDuelPts( SOLDIERTYPE * pSoldier, UINT16 ubOpponentID, BOOLEAN #endif if(is_networked) { - SOLDIERTYPE *pOpp = &Menptr[ubOpponentID]; + SOLDIERTYPE *pOpp = ubOpponentID; #ifdef JA2BETAVERSION ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_MPSYSTEM, L"Interrupt: '%s' vs '%s' = %d points.",pSoldier->name,pOpp->name, iPoints ); #endif @@ -2448,7 +2448,7 @@ void ResolveInterruptsVs( SOLDIERTYPE * pSoldier, UINT8 ubInterruptType) default: // interrupt is possible, run a duel DebugMsg( TOPIC_JA2INTERRUPT, DBG_LEVEL_3, "Calculating int duel pts for onlooker in ResolveInterruptsVs" ); - pSoldier->aiData.bInterruptDuelPts = CalcInterruptDuelPts(pSoldier,pOpponent->ubID,TRUE); + pSoldier->aiData.bInterruptDuelPts = CalcInterruptDuelPts(pSoldier, pOpponent->ubID, TRUE); fIntOccurs = InterruptDuel(pOpponent,pSoldier); #ifdef DEBUG_INTERRUPTS if (fIntOccurs) diff --git a/Tactical/TeamTurns.h b/Tactical/TeamTurns.h index a53c0489..828e445b 100644 --- a/Tactical/TeamTurns.h +++ b/Tactical/TeamTurns.h @@ -11,7 +11,7 @@ extern BOOLEAN gfHiddenTurnbased; #define INTERRUPT_QUEUED (gubOutOfTurnPersons > 0) extern BOOLEAN StandardInterruptConditionsMet( SOLDIERTYPE * pSoldier, UINT16 ubOpponentID, INT8 bOldOppList); -extern INT8 CalcInterruptDuelPts( SOLDIERTYPE * pSoldier, UINT16 ubOpponentID, BOOLEAN fUseWatchSpots ); +extern INT8 CalcInterruptDuelPts( SOLDIERTYPE * pSoldier, SoldierID ubOpponentID, BOOLEAN fUseWatchSpots ); extern void EndAITurn( void ); extern void DisplayHiddenInterrupt( SOLDIERTYPE * pSoldier ); extern BOOLEAN InterruptDuel( SOLDIERTYPE * pSoldier, SOLDIERTYPE * pOpponent); @@ -30,4 +30,4 @@ void EndTurnEvents( void ); BOOLEAN NPCFirstDraw( SOLDIERTYPE * pSoldier, SOLDIERTYPE * pTargetSoldier ); -#endif \ No newline at end of file +#endif diff --git a/Tactical/Weapons.cpp b/Tactical/Weapons.cpp index 4b2653c3..b2436930 100644 --- a/Tactical/Weapons.cpp +++ b/Tactical/Weapons.cpp @@ -5478,23 +5478,23 @@ BOOLEAN DoSpecialEffectAmmoMiss( UINT16 ubAttackerID, UINT16 usWeaponIndex, INT3 } -void WeaponHit( UINT16 usSoldierID, UINT16 usWeaponIndex, INT16 sDamage, INT16 sBreathLoss, UINT16 usDirection, INT16 sXPos, INT16 sYPos, INT16 sZPos, INT16 sRange, UINT16 ubAttackerID, BOOLEAN fHit, UINT8 ubSpecial, UINT8 ubHitLocation ) +void WeaponHit( SoldierID usSoldierID, UINT16 usWeaponIndex, INT16 sDamage, INT16 sBreathLoss, UINT16 usDirection, INT16 sXPos, INT16 sYPos, INT16 sZPos, INT16 sRange, SoldierID ubAttackerID, BOOLEAN fHit, UINT8 ubSpecial, UINT8 ubHitLocation ) { SOLDIERTYPE* pTargetSoldier = NULL; SOLDIERTYPE* pSoldier = NULL; - OBJECTTYPE* pObj = NULL; + OBJECTTYPE* pObj = NULL; // Get attacker if ( ubAttackerID != NOBODY ) { - pSoldier = MercPtrs[ ubAttackerID ]; + pSoldier = ubAttackerID; // Flugente: check for underbarrel weapons and use that object if necessary pObj = pSoldier->GetUsedWeapon( &pSoldier->inv[pSoldier->ubAttackingHand] ); } // Get Target - pTargetSoldier = MercPtrs[ usSoldierID ]; + pTargetSoldier = usSoldierID; MakeNoise( ubAttackerID, pTargetSoldier->sGridNo, pTargetSoldier->pathing.bLevel, gpWorldLevelData[pTargetSoldier->sGridNo].ubTerrainID, Weapon[ usWeaponIndex ].ubHitVolume, NOISE_BULLET_IMPACT ); @@ -5589,12 +5589,12 @@ void WeaponHit( UINT16 usSoldierID, UINT16 usWeaponIndex, INT16 sDamage, INT16 s } -void StructureHit( INT32 iBullet, UINT16 usWeaponIndex, INT16 bWeaponStatus, UINT16 ubAttackerID, UINT16 sXPos, INT16 sYPos, INT16 sZPos, UINT16 usStructureID, INT32 iImpact, BOOLEAN fStopped ) +void StructureHit( INT32 iBullet, UINT16 usWeaponIndex, INT16 bWeaponStatus, SoldierID ubAttackerID, UINT16 sXPos, INT16 sYPos, INT16 sZPos, UINT16 usStructureID, INT32 iImpact, BOOLEAN fStopped ) { BOOLEAN fDoMissForGun = FALSE; ANITILE *pNode; INT32 sGridNo; - INT8 bLevel; + INT8 bLevel; ANITILE_PARAMS AniParams; UINT16 usMissTileIndex, usMissTileType; STRUCTURE *pStructure = NULL; @@ -5610,9 +5610,9 @@ void StructureHit( INT32 iBullet, UINT16 usWeaponIndex, INT16 bWeaponStatus, UIN // Flugente: check for underbarrel weapons and use that object if necessary if ( ubAttackerID != NOBODY ) { - pObj = MercPtrs[ ubAttackerID ]->GetUsedWeapon( &MercPtrs [ ubAttackerID ]->inv[MercPtrs[ubAttackerID]->ubAttackingHand] ); + pObj = ubAttackerID->GetUsedWeapon( &ubAttackerID->inv[ubAttackerID->ubAttackingHand] ); - pAttacker = MercPtrs[ ubAttackerID ]; + pAttacker = ubAttackerID; } // HEADROCK HAM 5: Define differently for fragments @@ -5676,7 +5676,7 @@ void StructureHit( INT32 iBullet, UINT16 usWeaponIndex, INT16 bWeaponStatus, UIN // Get attacker if ( ubAttackerID != NOBODY ) - pSoldier = MercPtrs[ ubAttackerID ]; + pSoldier = ubAttackerID; UINT8 usDirection = DIRECTION_IRRELEVANT; if ( pSoldier ) @@ -5777,13 +5777,13 @@ void StructureHit( INT32 iBullet, UINT16 usWeaponIndex, INT16 bWeaponStatus, UIN case MGCLASS: // Guy has missed, play random sound - if ( ubAttackerID != NOBODY && MercPtrs[ ubAttackerID ]->bTeam == gbPlayerNum ) + if ( ubAttackerID != NOBODY && ubAttackerID->bTeam == gbPlayerNum ) { - if ( !MercPtrs[ ubAttackerID ]->bDoBurst ) + if ( !ubAttackerID->bDoBurst ) { if ( Random( 40 ) == 0 ) { - MercPtrs[ ubAttackerID ]->DoMercBattleSound( BATTLE_SOUND_CURSE1 ); + ubAttackerID->DoMercBattleSound( BATTLE_SOUND_CURSE1 ); } } } @@ -6046,7 +6046,7 @@ void StructureHit( INT32 iBullet, UINT16 usWeaponIndex, INT16 bWeaponStatus, UIN // ATE: Show misses...( if our team ) if ( gGameSettings.fOptions[ TOPTION_SHOW_MISSES ] ) { - if ( ubAttackerID != NOBODY && MercPtrs[ ubAttackerID ]->bTeam == gbPlayerNum ) + if ( ubAttackerID != NOBODY && ubAttackerID->bTeam == gbPlayerNum ) { LocateGridNo( sGridNo ); } diff --git a/Tactical/Weapons.h b/Tactical/Weapons.h index 657b34cf..958d8642 100644 --- a/Tactical/Weapons.h +++ b/Tactical/Weapons.h @@ -454,8 +454,8 @@ extern INT8 ArmourVersusExplosivesPercent( SOLDIERTYPE * pSoldier ); // Flugente: fire resistance INT16 ArmourVersusFirePercent( SOLDIERTYPE * pSoldier ); extern BOOLEAN FireWeapon( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo ); -extern void WeaponHit( UINT16 usSoldierID, UINT16 usWeaponIndex, INT16 sDamage, INT16 sBreathLoss, UINT16 usDirection, INT16 sXPos, INT16 sYPos, INT16 sZPos, INT16 sRange, UINT16 ubAttackerID, BOOLEAN fHit, UINT8 ubSpecial, UINT8 ubHitLocation ); -extern void StructureHit( INT32 iBullet, UINT16 usWeaponIndex, INT16 bWeaponStatus, UINT16 ubAttackerID, UINT16 sXPos, INT16 sYPos, INT16 sZPos, UINT16 usStructureID, INT32 iImpact, BOOLEAN fStopped ); +extern void WeaponHit( SoldierID usSoldierID, UINT16 usWeaponIndex, INT16 sDamage, INT16 sBreathLoss, UINT16 usDirection, INT16 sXPos, INT16 sYPos, INT16 sZPos, INT16 sRange, SoldierID ubAttackerID, BOOLEAN fHit, UINT8 ubSpecial, UINT8 ubHitLocation ); +extern void StructureHit( INT32 iBullet, UINT16 usWeaponIndex, INT16 bWeaponStatus, SoldierID ubAttackerID, UINT16 sXPos, INT16 sYPos, INT16 sZPos, UINT16 usStructureID, INT32 iImpact, BOOLEAN fStopped ); extern void WindowHit( INT32 sGridNo, UINT16 usStructureID, BOOLEAN fBlowWindowSouth, BOOLEAN fLargeForce ); // HEADROCK HAM 5.1: Moved to Bullets.h extern BOOLEAN InRange( SOLDIERTYPE *pSoldier, INT32 sGridNo ); diff --git a/Tactical/faces.h b/Tactical/faces.h index 4ecc2b6c..adfa524d 100644 --- a/Tactical/faces.h +++ b/Tactical/faces.h @@ -170,7 +170,7 @@ typedef struct BOOLEAN fOldShowHighlight; INT8 bOldAssignment; INT8 ubOldServiceCount; - UINT8 ubOldServicePartner; + SoldierID ubOldServicePartner; BOOLEAN fOldShowMoveHilight; UINT16 sMouthFrame; diff --git a/TileEngine/physics.cpp b/TileEngine/physics.cpp index ac3761b5..d4ac3b3f 100644 --- a/TileEngine/physics.cpp +++ b/TileEngine/physics.cpp @@ -214,7 +214,7 @@ void RecountObjectSlots(void) } -INT32 CreatePhysicalObject( OBJECTTYPE *pGameObj, real dLifeLength, real xPos, real yPos, real zPos, real xForce, real yForce, real zForce, UINT16 ubOwner, UINT8 ubActionCode, UINT32 uiActionData, BOOLEAN fTestObject ) +INT32 CreatePhysicalObject( OBJECTTYPE *pGameObj, real dLifeLength, real xPos, real yPos, real zPos, real xForce, real yForce, real zForce, SoldierID ubOwner, UINT8 ubActionCode, UINT32 uiActionData, BOOLEAN fTestObject ) { INT32 iObjectIndex; FLOAT mass; @@ -258,7 +258,7 @@ INT32 CreatePhysicalObject( OBJECTTYPE *pGameObj, real dLifeLength, real xPos, r pObject->Position.z = zPos; pObject->fVisible = TRUE; pObject->fTestObject = fTestObject; - pObject->ubOwner = ubOwner; + pObject->ubOwner = ubOwner; pObject->ubActionCode = ubActionCode; pObject->uiActionData = uiActionData; pObject->fDropItem = TRUE; @@ -546,7 +546,7 @@ BOOLEAN PhysicsUpdateLife( REAL_OBJECT *pObject, real DeltaTime ) { SOLDIERTYPE *pSoldier; - pSoldier = MercPtrs[ pObject->ubLastTargetTakenDamage ]; + pSoldier = pObject->ubLastTargetTakenDamage; bLevel = pSoldier->pathing.bLevel; } diff --git a/TileEngine/physics.h b/TileEngine/physics.h index 249334c8..17ed89ea 100644 --- a/TileEngine/physics.h +++ b/TileEngine/physics.h @@ -118,8 +118,8 @@ public: FLOAT dLifeSpan; BOOLEAN fFirstTimeMoved; INT32 sFirstGridNo; - UINT16 ubOwner; - UINT8 ubActionCode; + SoldierID ubOwner; + UINT8 ubActionCode; UINT32 uiActionData; BOOLEAN fDropItem; UINT32 uiNumTilesMoved; @@ -153,7 +153,7 @@ extern REAL_OBJECT ObjectSlots[ NUM_OBJECT_SLOTS ]; // OBJECT LIST STUFF -INT32 CreatePhysicalObject( OBJECTTYPE *pGameObj, real dLifeLength, real xPos, real yPos, real zPos, real xForce, real yForce, real zForce, UINT16 ubOwner, UINT8 ubActionCode, UINT32 uiActionData, BOOLEAN fTestObject ); +INT32 CreatePhysicalObject( OBJECTTYPE *pGameObj, real dLifeLength, real xPos, real yPos, real zPos, real xForce, real yForce, real zForce, SoldierID ubOwner, UINT8 ubActionCode, UINT32 uiActionData, BOOLEAN fTestObject ); BOOLEAN RemoveObjectSlot( INT32 iObject ); void RemoveAllPhysicsObjects( ); // OJW - 20091002 - mp explosives diff --git a/TileEngine/worldman.cpp b/TileEngine/worldman.cpp index 1a91a147..f5692f28 100644 --- a/TileEngine/worldman.cpp +++ b/TileEngine/worldman.cpp @@ -3750,7 +3750,7 @@ BOOLEAN IsRoofVisible2( INT32 sMapPos ) } -UINT16 WhoIsThere2( INT32 sGridNo, INT8 bLevel ) +SoldierID WhoIsThere2( INT32 sGridNo, INT8 bLevel ) { STRUCTURE * pStructure; diff --git a/TileEngine/worldman.h b/TileEngine/worldman.h index eed5ca67..83cdf308 100644 --- a/TileEngine/worldman.h +++ b/TileEngine/worldman.h @@ -128,7 +128,7 @@ BOOLEAN RemoveShadowFromLevelNode( INT32 iMapIndex, LEVELNODE *pNode ); BOOLEAN AddMercToHead( INT32 iMapIndex, SOLDIERTYPE *pSoldier, BOOLEAN fAddStructInfo ); BOOLEAN RemoveMerc( INT32 iMapIndex, SOLDIERTYPE *pSoldier, BOOLEAN fPlaceHolder ); -UINT16 WhoIsThere2( INT32 sGridNo, INT8 bLevel ); +SoldierID WhoIsThere2( INT32 sGridNo, INT8 bLevel ); BOOLEAN AddMercStructureInfo( INT32 sGridNo, SOLDIERTYPE *pSoldier ); BOOLEAN AddMercStructureInfoFromAnimSurface( INT32 sGridNo, SOLDIERTYPE *pSoldier, UINT16 usAnimSurface, UINT16 usAnimState ); BOOLEAN UpdateMercStructureInfo( SOLDIERTYPE *pSoldier ); @@ -179,4 +179,4 @@ BOOLEAN IsLegionLevel( INT32 sGridNo ); BOOLEAN FindStruct(INT32 sSpot, INT8 bLevel, UINT16 usIndex); BOOLEAN FindStructFlag(INT32 sSpot, INT8 bLevel, UINT32 uiFlag); -#endif \ No newline at end of file +#endif From 9532fbfe2ca83fa33034921e07d020b0c0a0cc7b Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 17 Nov 2024 19:41:34 +0200 Subject: [PATCH 084/192] Convert to SoldierID --- Strategic/mapscreen.cpp | 2 +- Tactical/Dialogue Control.cpp | 4 +- Tactical/Faces.cpp | 181 +++++++++++++++--------------- Tactical/ShopKeeper Interface.cpp | 10 +- Tactical/ShopKeeper Interface.h | 2 +- Tactical/faces.h | 26 ++--- 6 files changed, 112 insertions(+), 113 deletions(-) diff --git a/Strategic/mapscreen.cpp b/Strategic/mapscreen.cpp index 3fd0fa4e..082b7825 100644 --- a/Strategic/mapscreen.cpp +++ b/Strategic/mapscreen.cpp @@ -5434,7 +5434,7 @@ UINT32 MapScreenHandle(void) // make him continue talking - ContinueDialogue( MercPtrs[ gpCurrentTalkingFace->ubSoldierID ], FALSE ); + ContinueDialogue( gpCurrentTalkingFace->ubSoldierID, FALSE ); // reset diabled flag //gpCurrentTalkingFace->fDisabled = FALSE; diff --git a/Tactical/Dialogue Control.cpp b/Tactical/Dialogue Control.cpp index 75e5244a..a4739b70 100644 --- a/Tactical/Dialogue Control.cpp +++ b/Tactical/Dialogue Control.cpp @@ -1992,7 +1992,7 @@ BOOLEAN SpecialCharacterDialogueEventWithExtraParam( UINT32 uiSpecialEventFlag, } extern INT8 gbSelectedArmsDealerID; -extern UINT16 gusIDOfCivTrader; +extern SoldierID gusIDOfCivTrader; BOOLEAN ExecuteCharacterDialogue( UINT8 ubCharacterNum, UINT16 usQuoteNum, INT32 iFaceIndex, UINT8 bUIHandlerID, BOOLEAN fFromSoldier ) { @@ -2107,7 +2107,7 @@ BOOLEAN ExecuteCharacterDialogue( UINT8 ubCharacterNum, UINT16 usQuoteNum, INT32 && iFaceIndex == -1 && gusIDOfCivTrader != NOBODY ) { - SOLDIERTYPE* pShopkeeper = MercPtrs[gusIDOfCivTrader]; + SOLDIERTYPE* pShopkeeper = gusIDOfCivTrader; if ( pShopkeeper ) { diff --git a/Tactical/Faces.cpp b/Tactical/Faces.cpp index dadad4d6..a61a627f 100644 --- a/Tactical/Faces.cpp +++ b/Tactical/Faces.cpp @@ -129,7 +129,7 @@ INT32 InitSoldierFace( SOLDIERTYPE *pSoldier ) } -INT32 InitFace( UINT8 usMercProfileID, UINT16 ubSoldierID, UINT32 uiInitFlags ) +INT32 InitFace( UINT8 usMercProfileID, SoldierID ubSoldierID, UINT32 uiInitFlags ) { UINT32 uiBlinkFrequency; UINT32 uiExpressionFrequency; @@ -182,7 +182,7 @@ void SetPalettes(HVOBJECT *hVObject, UINT32 uiIndex) (*hVObject)->pShades[FLASH_PORTRAIT_GRAYSHADE] = Create16BPPPaletteShaded(Pal, 255, 255, 255, FALSE); } -INT32 InternalInitFace( UINT8 usMercProfileID, UINT16 ubSoldierID, UINT32 uiInitFlags, INT32 iFaceFileID, UINT32 uiBlinkFrequency, UINT32 uiExpressionFrequency ) +INT32 InternalInitFace( UINT8 usMercProfileID, SoldierID ubSoldierID, UINT32 uiInitFlags, INT32 iFaceFileID, UINT32 uiBlinkFrequency, UINT32 uiExpressionFrequency ) { FACETYPE *pFace; VOBJECT_DESC VObjectDesc; @@ -554,15 +554,14 @@ void DeleteFace( INT32 iFaceIndex ) } -void SetAutoFaceActiveFromSoldier( UINT32 uiDisplayBuffer, UINT32 uiRestoreBuffer, UINT16 ubSoldierID, UINT16 usFaceX, UINT16 usFaceY ) +void SetAutoFaceActiveFromSoldier( UINT32 uiDisplayBuffer, UINT32 uiRestoreBuffer, SoldierID ubSoldierID, UINT16 usFaceX, UINT16 usFaceY ) { - if( ubSoldierID == NOBODY ) + if( ubSoldierID >= NOBODY ) { return; } - SetAutoFaceActive( uiDisplayBuffer, uiRestoreBuffer, MercPtrs[ ubSoldierID ]->iFaceIndex, usFaceX, usFaceY ); - + SetAutoFaceActive( uiDisplayBuffer, uiRestoreBuffer, ubSoldierID->iFaceIndex, usFaceX, usFaceY ); } void GetFaceRelativeCoordinates( FACETYPE *pFace, UINT16 *pusEyesX, UINT16 *pusEyesY, UINT16 *pusMouthX, UINT16 *pusMouthY ) @@ -753,17 +752,17 @@ void InternalSetAutoFaceActive( UINT32 uiDisplayBuffer, UINT32 uiRestoreBuffer, // Are we a soldier? if ( pFace->ubSoldierID != NOBODY ) { - pFace->bOldSoldierLife = MercPtrs[ pFace->ubSoldierID ]->stats.bLife; + pFace->bOldSoldierLife = pFace->ubSoldierID->stats.bLife; } } -void SetAutoFaceInActiveFromSoldier( UINT16 ubSoldierID ) +void SetAutoFaceInActiveFromSoldier( SoldierID ubSoldierID ) { // Check for valid soldier CHECKV( ubSoldierID != NOBODY ); - SetAutoFaceInActive( MercPtrs[ ubSoldierID ]->iFaceIndex ); + SetAutoFaceInActive( ubSoldierID->iFaceIndex ); } @@ -795,7 +794,7 @@ void SetAutoFaceInActive(INT32 iFaceIndex ) // if ( pFace->ubSoldierID != NOBODY ) { - pSoldier = MercPtrs[ pFace->ubSoldierID ]; + pSoldier = pFace->ubSoldierID; // IF we are in tactical if ( pSoldier->bAssignment == iCurrentTacticalSquad && guiCurrentScreen == GAME_SCREEN ) @@ -948,11 +947,11 @@ void BlinkAutoFace( INT32 iFaceIndex ) // CHECK IF BUDDY IS DEAD, UNCONSCIOUS, ASLEEP, OR POW! if ( pFace->ubSoldierID != NOBODY ) { - uiFaceShade = GetFaceShade(MercPtrs[pFace->ubSoldierID], pFace, FALSE); + uiFaceShade = GetFaceShade(pFace->ubSoldierID, pFace, FALSE); - if ( ( MercPtrs[ pFace->ubSoldierID ]->stats.bLife < OKLIFE ) || - ( MercPtrs[ pFace->ubSoldierID ]->flags.fMercAsleep == TRUE ) || - ( MercPtrs[ pFace->ubSoldierID ]->bAssignment == ASSIGNMENT_POW ) ) + if ( ( pFace->ubSoldierID->stats.bLife < OKLIFE ) || + ( pFace->ubSoldierID->flags.fMercAsleep == TRUE ) || + ( pFace->ubSoldierID->bAssignment == ASSIGNMENT_POW ) ) { return; } @@ -1088,13 +1087,13 @@ void HandleFaceHilights( FACETYPE *pFace, UINT32 uiBuffer, INT16 sFaceX, INT16 s { if ( pFace->ubSoldierID != NOBODY ) { - if ( MercPtrs[ pFace->ubSoldierID ]->stats.bLife >= OKLIFE ) + if ( pFace->ubSoldierID->stats.bLife >= OKLIFE ) { // Lock buffer pDestBuf = LockVideoSurface( uiBuffer, &uiDestPitchBYTES ); SetClippingRegionAndImageWidth( uiDestPitchBYTES, sFaceX-2, sFaceY-1, sFaceX + pFace->usFaceWidth + 4, sFaceY + pFace->usFaceHeight + 4 ); - if ( MercPtrs[ pFace->ubSoldierID ]->bStealthMode ) + if ( pFace->ubSoldierID->bStealthMode ) { usLineColor = Get16BPPColor( FROMRGB( 158, 158, 12 ) ); } @@ -1237,7 +1236,7 @@ void MouthAutoFace( INT32 iFaceIndex ) // Set shade if (pFace->ubSoldierID != NOBODY) { - uiFaceShade = GetFaceShade(MercPtrs[pFace->ubSoldierID], pFace, FALSE); + uiFaceShade = GetFaceShade(pFace->ubSoldierID, pFace, FALSE); } HandleRenderFaceAdjustments( pFace, TRUE, FALSE, 0, pFace->usFaceX, pFace->usFaceY, pFace->usEyesX, pFace->usEyesY, uiFaceShade); @@ -1363,12 +1362,12 @@ UINT32 GetFaceShade(SOLDIERTYPE *pSoldier, FACETYPE *pFace, BOOLEAN fExternBlit) return FLASH_PORTRAIT_NOSHADE; } -BOOLEAN RenderAutoFaceFromSoldier( UINT16 ubSoldierID ) +BOOLEAN RenderAutoFaceFromSoldier( SoldierID ubSoldierID ) { // Check for valid soldier CHECKF( ubSoldierID != NOBODY ); - return( RenderAutoFace( MercPtrs[ ubSoldierID ]->iFaceIndex ) ); + return( RenderAutoFace( ubSoldierID->iFaceIndex ) ); } //---------------------------------------LEGION------------------------------- @@ -1629,16 +1628,16 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE // BLIT HATCH if ( pFace->ubSoldierID != NOBODY ) { - pSoldier = MercPtrs[ pFace->ubSoldierID ]; + pSoldier = pFace->ubSoldierID; UINT8 faceProfileId = gMercProfiles[pSoldier->ubProfile].ubFaceIndex; BOOLEAN isIMP = gMercProfiles[pSoldier->ubProfile].Type == PROFILETYPE_IMP; - if (gGameSettings.fOptions[TOPTION_SHOW_TACTICAL_FACE_GEAR] && MercPtrs[pFace->ubSoldierID]->stats.bLife > 0 && !(pFace->uiFlags & FACE_BIGFACE)) + if (gGameSettings.fOptions[TOPTION_SHOW_TACTICAL_FACE_GEAR] && pSoldier->stats.bLife > 0 && !(pFace->uiFlags & FACE_BIGFACE)) { - if (MercPtrs[pFace->ubSoldierID]->inv[HELMETPOS].usItem > 0) + if (pSoldier->inv[HELMETPOS].usItem > 0) { - uiFaceItemOne = MercPtrs[pFace->ubSoldierID]->inv[HELMETPOS].usItem; + uiFaceItemOne = pSoldier->inv[HELMETPOS].usItem; if (uiFaceItemOne != NONE && zNewFaceGear[uiFaceItemOne].Type == 1) //back { @@ -1648,17 +1647,17 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE // this section chooses the pictures for gas mask and NV goggles if the ini setting "SHOW_TACTICAL_FACE_GEAR" is TRUE // and the merc actually wears something to be shown - if (MercPtrs[pFace->ubSoldierID]->inv[HEAD1POS].usItem + MercPtrs[pFace->ubSoldierID]->inv[HEAD2POS].usItem > 0) + if (pSoldier->inv[HEAD1POS].usItem + pSoldier->inv[HEAD2POS].usItem > 0) { // WANNE: Removed the limitation // silversurfer: don't overwrite icons if they shall be shown! //if ( !gGameSettings.fOptions[ SHOW_TACTICAL_FACE_ICONS ] ) { - uiFaceItemOne = MercPtrs[pFace->ubSoldierID]->inv[HEAD1POS].usItem; - uiFaceItemTwo = MercPtrs[pFace->ubSoldierID]->inv[HEAD2POS].usItem; + uiFaceItemOne = pSoldier->inv[HEAD1POS].usItem; + uiFaceItemTwo = pSoldier->inv[HEAD2POS].usItem; - uiFaceOne = MercPtrs[pFace->ubSoldierID]->inv[HEAD1POS].usItem; - uiFaceTwo = MercPtrs[pFace->ubSoldierID]->inv[HEAD2POS].usItem; + uiFaceOne = pSoldier->inv[HEAD1POS].usItem; + uiFaceTwo = pSoldier->inv[HEAD2POS].usItem; // check first face slot if (uiFaceItemOne != NONE) @@ -1797,11 +1796,11 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE } } - if (MercPtrs[pFace->ubSoldierID]->inv[HELMETPOS].usItem > 0) + if (pSoldier->inv[HELMETPOS].usItem > 0) // dirty hack for IMPs because they don't have pictures for face gear - // && ( MercPtrs[ pFace->ubSoldierID ]->ubProfile < 51 || MercPtrs[ pFace->ubSoldierID ]->ubProfile > 56 ) + // && ( pSoldier->ubProfile < 51 || pSoldier->ubProfile > 56 ) { - uiFaceItemOne = MercPtrs[pFace->ubSoldierID]->inv[HELMETPOS].usItem; + uiFaceItemOne = pSoldier->inv[HELMETPOS].usItem; if (uiFaceItemOne != NONE) { @@ -1815,7 +1814,7 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE //------------------------------------end of tactical face gear----------------------------- } - if ( (MercPtrs[pFace->ubSoldierID]->stats.bLife < CONSCIOUSNESS || MercPtrs[pFace->ubSoldierID]->flags.fDeadPanel ) ) + if ( (pSoldier->stats.bLife < CONSCIOUSNESS || pSoldier->flags.fDeadPanel ) ) { // Blit Closed eyes here! BltVideoObjectFromIndex( uiRenderBuffer, pFace->uiVideoObject, 1, usEyesX, usEyesY, VO_BLT_SRCTRANSPARENCY, NULL ); @@ -1824,14 +1823,14 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE BltVideoObjectFromIndex( uiRenderBuffer, guiHATCH, 0, sFaceX, sFaceY, VO_BLT_SRCTRANSPARENCY, NULL ); } - if( MercPtrs[ pFace->ubSoldierID ]->flags.fMercAsleep == TRUE ) + if( pSoldier->flags.fMercAsleep == TRUE ) { // blit eyes closed BltVideoObjectFromIndex( uiRenderBuffer, pFace->uiVideoObject, 1, usEyesX, usEyesY, VO_BLT_SRCTRANSPARENCY, NULL ); } // Flugente: frozen soldiers are, well, frozen - if ( MercPtrs[pFace->ubSoldierID]->usSkillCooldown[SOLDIER_COOLDOWN_CRYO] ) + if ( pSoldier->usSkillCooldown[SOLDIER_COOLDOWN_CRYO] ) { // Blit Closed eyes here! BltVideoObjectFromIndex( uiRenderBuffer, pFace->uiVideoObject, 2, usEyesX, usEyesY, VO_BLT_SRCTRANSPARENCY, NULL ); @@ -1905,7 +1904,7 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE } - if ( MercPtrs[ pFace->ubSoldierID ]->bInSector && ( ( ( gTacticalStatus.ubCurrentTeam != OUR_TEAM ) || !OK_INTERRUPT_MERC( MercPtrs[ pFace->ubSoldierID ] ) ) && !gfHiddenInterrupt ) || ( ( gfSMDisableForItems && !gfInItemPickupMenu ) && gusSMCurrentMerc == pFace->ubSoldierID && gsCurInterfacePanel == SM_PANEL ) ) + if ( pSoldier->bInSector && ( ( ( gTacticalStatus.ubCurrentTeam != OUR_TEAM ) || !OK_INTERRUPT_MERC( pSoldier ) ) && !gfHiddenInterrupt ) || ( ( gfSMDisableForItems && !gfInItemPickupMenu ) && gusSMCurrentMerc == pSoldier && gsCurInterfacePanel == SM_PANEL ) ) { // Blit hatch! BltVideoObjectFromIndex( uiRenderBuffer, guiHATCH, 0, sFaceX, sFaceY, VO_BLT_SRCTRANSPARENCY, NULL ); @@ -1913,12 +1912,12 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE } // sevenfm: only show for alive soldiers, no face icons for big faces - if (MercPtrs[pFace->ubSoldierID]->stats.bLife > 0 && !(pFace->uiFlags & FACE_BIGFACE)) + if (pSoldier->stats.bLife > 0 && !(pFace->uiFlags & FACE_BIGFACE)) { // Check if a robot and is not controlled.... - if (MercPtrs[pFace->ubSoldierID]->flags.uiStatusFlags & SOLDIER_ROBOT) + if (pSoldier->flags.uiStatusFlags & SOLDIER_ROBOT) { - if (!MercPtrs[pFace->ubSoldierID]->CanRobotBeControlled()) + if (!pSoldier->CanRobotBeControlled()) { // Not controlled robot sIconIndex = 5; @@ -1926,7 +1925,7 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE } } - if (MercPtrs[pFace->ubSoldierID]->ControllingRobot()) + if (pSoldier->ControllingRobot()) { // controlling robot sIconIndex = 4; @@ -1939,10 +1938,10 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE // this section chooses the icons for face gear if the ini setting "SHOW_TACTICAL_FACE_ICONS" is TRUE // and the merc actually wears something to be shown if (gGameSettings.fOptions[TOPTION_SHOW_TACTICAL_FACE_ICONS] && - (MercPtrs[pFace->ubSoldierID]->inv[HEAD1POS].usItem + MercPtrs[pFace->ubSoldierID]->inv[HEAD2POS].usItem) > 0) + (pSoldier->inv[HEAD1POS].usItem + pSoldier->inv[HEAD2POS].usItem) > 0) { - uiFaceItemOne = MercPtrs[pFace->ubSoldierID]->inv[HEAD1POS].usItem; - uiFaceItemTwo = MercPtrs[pFace->ubSoldierID]->inv[HEAD2POS].usItem; + uiFaceItemOne = pSoldier->inv[HEAD1POS].usItem; + uiFaceItemTwo = pSoldier->inv[HEAD2POS].usItem; //MM: fixing the hardcoded craziness here... // check first face slot @@ -2050,20 +2049,20 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE } // If blind... - if (MercPtrs[pFace->ubSoldierID]->bBlindedCounter > 0) + if (pSoldier->bBlindedCounter > 0) { DoRightIcon(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons, 6); bNumRightIcons++; } // Flugente: add drug symbol if drugged (without alcohol) - if (MercDrugged(MercPtrs[pFace->ubSoldierID])) + if (MercDrugged(pSoldier)) { DoRightIcon(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons, 7); bNumRightIcons++; } - if (GetDrunkLevel(MercPtrs[pFace->ubSoldierID]) != SOBER) + if (GetDrunkLevel(pSoldier) != SOBER) { DoRightIcon(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons, 8); bNumRightIcons++; @@ -2072,13 +2071,13 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE // Flugente: food system - symbols used if hungry or thirsty if (UsingFoodSystem()) { - if (MercPtrs[pFace->ubSoldierID]->bDrinkLevel < FoodMoraleMods[FOOD_MERC_START_SHOW_HUNGER_SYMBOL].bThreshold) + if (pSoldier->bDrinkLevel < FoodMoraleMods[FOOD_MERC_START_SHOW_HUNGER_SYMBOL].bThreshold) { DoRightIcon(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons, 9); bNumRightIcons++; } - if (MercPtrs[pFace->ubSoldierID]->bFoodLevel < FoodMoraleMods[FOOD_MERC_START_SHOW_HUNGER_SYMBOL].bThreshold) + if (pSoldier->bFoodLevel < FoodMoraleMods[FOOD_MERC_START_SHOW_HUNGER_SYMBOL].bThreshold) { DoRightIcon(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons, 10); bNumRightIcons++; @@ -2094,7 +2093,7 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE UINT16 ubID2 = 0; UINT16 ubGunSlot2 = 0; UINT16 ubFaceSlot2 = 0; - if (MercPtrs[pFace->ubSoldierID]->IsFeedingExternal(&ubID1, &ubGunSlot1, &ubFaceSlot1, &ubID2, &ubGunSlot2, &ubFaceSlot2)) + if (pSoldier->IsFeedingExternal(&ubID1, &ubGunSlot1, &ubFaceSlot1, &ubID2, &ubGunSlot2, &ubFaceSlot2)) { DoRightIcon(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons, 11); bNumRightIcons++; @@ -2102,33 +2101,33 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE } // Flugente: add an icon if we are currently in disguise - if (MercPtrs[pFace->ubSoldierID]->usSoldierFlagMask & (SOLDIER_COVERT_CIV | SOLDIER_COVERT_SOLDIER)) + if (pSoldier->usSoldierFlagMask & (SOLDIER_COVERT_CIV | SOLDIER_COVERT_SOLDIER)) { DoRightIcon(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons, 12); bNumRightIcons++; } // Flugente: add an icon if we are performing a multi-turn action - if (MercPtrs[pFace->ubSoldierID]->GetMultiTurnAction() == MTA_HACK) + if (pSoldier->GetMultiTurnAction() == MTA_HACK) { DoRightIcon(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons, 30); bNumRightIcons++; } - else if (MercPtrs[pFace->ubSoldierID]->GetMultiTurnAction() > MTA_NONE) + else if (pSoldier->GetMultiTurnAction() > MTA_NONE) { DoRightIcon(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons, 14); bNumRightIcons++; } // Flugente: icons for radio operator actions (not the assignment) - if (MercPtrs[pFace->ubSoldierID]->bAssignment != RADIO_SCAN) + if (pSoldier->bAssignment != RADIO_SCAN) { - if (MercPtrs[pFace->ubSoldierID]->usSoldierFlagMask & (SOLDIER_RADIO_OPERATOR_SCANNING | SOLDIER_RADIO_OPERATOR_LISTENING)) + if (pSoldier->usSoldierFlagMask & (SOLDIER_RADIO_OPERATOR_SCANNING | SOLDIER_RADIO_OPERATOR_LISTENING)) { DoRightIcon(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons, 19); bNumRightIcons++; } - else if (MercPtrs[pFace->ubSoldierID]->usSoldierFlagMask & SOLDIER_RADIO_OPERATOR_JAMMING) + else if (pSoldier->usSoldierFlagMask & SOLDIER_RADIO_OPERATOR_JAMMING) { DoRightIcon(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons, 20); bNumRightIcons++; @@ -2136,9 +2135,9 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE } // Flugente: spotter - if (MercPtrs[pFace->ubSoldierID]->usSkillCounter[SOLDIER_COUNTER_SPOTTER] > 0) + if (pSoldier->usSkillCounter[SOLDIER_COUNTER_SPOTTER] > 0) { - if (MercPtrs[pFace->ubSoldierID]->IsSpotting()) + if (pSoldier->IsSpotting()) { DoRightIcon(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons, 24); bNumRightIcons++; @@ -2151,21 +2150,21 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE } // Flugente: focus trait - if (MercPtrs[pFace->ubSoldierID]->usSoldierFlagMask2 & SOLDIER_TRAIT_FOCUS) + if (pSoldier->usSoldierFlagMask2 & SOLDIER_TRAIT_FOCUS) { DoRightIcon(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons, 17); bNumRightIcons++; } // Flugente: disease - if (MercPtrs[pFace->ubSoldierID]->HasDisease(TRUE, FALSE, TRUE)) + if (pSoldier->HasDisease(TRUE, FALSE, TRUE)) { DoRightIcon(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons, 28); bNumRightIcons++; } // Flugente: drag stuff - if (MercPtrs[pFace->ubSoldierID]->IsDragging()) + if (pSoldier->IsDragging()) { DoRightIcon(uiRenderBuffer, pFace, sFaceX, sFaceY, bNumRightIcons, 31); ++bNumRightIcons; @@ -2178,7 +2177,7 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE case DOCTOR_MILITIA: sIconIndex_Assignment = 1; fDoIcon_Assignment = TRUE; - sPtsAvailable = CalculateHealingPointsForDoctor(MercPtrs[pFace->ubSoldierID], &usMaximumPts, FALSE); + sPtsAvailable = CalculateHealingPointsForDoctor(pSoldier, &usMaximumPts, FALSE); fShowCustomText = TRUE; @@ -2201,8 +2200,8 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE sIconIndex_Assignment = 2; fDoIcon_Assignment = TRUE; // show current health / maximum health - sPtsAvailable = MercPtrs[pFace->ubSoldierID]->stats.bLife; - usMaximumPts = MercPtrs[pFace->ubSoldierID]->stats.bLifeMax; + sPtsAvailable = pSoldier->stats.bLife; + usMaximumPts = pSoldier->stats.bLifeMax; fShowNumber = TRUE; fShowMaximum = TRUE; break; @@ -2218,27 +2217,27 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE fShowNumber = TRUE; fShowMaximum = TRUE; - switch (MercPtrs[pFace->ubSoldierID]->bAssignment) + switch (pSoldier->bAssignment) { case(TRAIN_SELF) : - sPtsAvailable = GetSoldierTrainingPts(MercPtrs[pFace->ubSoldierID], MercPtrs[pFace->ubSoldierID]->bTrainStat, &usMaximumPts); + sPtsAvailable = GetSoldierTrainingPts(pSoldier, pSoldier->bTrainStat, &usMaximumPts); break; case(TRAIN_BY_OTHER) : - sPtsAvailable = GetSoldierStudentPts(MercPtrs[pFace->ubSoldierID], MercPtrs[pFace->ubSoldierID]->bTrainStat, &usMaximumPts); + sPtsAvailable = GetSoldierStudentPts(pSoldier, pSoldier->bTrainStat, &usMaximumPts); break; case(TRAIN_TOWN) : case DRILL_MILITIA: - sPtsAvailable = GetTownTrainPtsForCharacter(MercPtrs[pFace->ubSoldierID], &usMaximumPts); + sPtsAvailable = GetTownTrainPtsForCharacter(pSoldier, &usMaximumPts); // divide both amounts by 10 to make the displayed numbers a little more user-palatable (smaller) sPtsAvailable = (sPtsAvailable + 5) / 10; usMaximumPts = (usMaximumPts + 5) / 10; break; case(TRAIN_TEAMMATE) : - sPtsAvailable = GetBonusTrainingPtsDueToInstructor(MercPtrs[pFace->ubSoldierID], NULL, MercPtrs[pFace->ubSoldierID]->bTrainStat, &usMaximumPts); + sPtsAvailable = GetBonusTrainingPtsDueToInstructor(pSoldier, NULL, pSoldier->bTrainStat, &usMaximumPts); break; case TRAIN_WORKERS: fShowMaximum = FALSE; - sPtsAvailable = GetTrainWorkerPts(MercPtrs[pFace->ubSoldierID]); + sPtsAvailable = GetTrainWorkerPts(pSoldier); break; } break; @@ -2249,24 +2248,24 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE fDoIcon_Assignment = TRUE; // Show repair points if merc has a toolkit in his hand. Otherwise show cleaning points. if (ItemIsToolkit(pSoldier->inv[HANDPOS].usItem)) - sPtsAvailable = CalculateRepairPointsForRepairman(MercPtrs[pFace->ubSoldierID], &usMaximumPts, FALSE); + sPtsAvailable = CalculateRepairPointsForRepairman(pSoldier, &usMaximumPts, FALSE); else - sPtsAvailable = CalculateCleaningPointsForRepairman(MercPtrs[pFace->ubSoldierID], &usMaximumPts); + sPtsAvailable = CalculateCleaningPointsForRepairman(pSoldier, &usMaximumPts); fShowNumber = TRUE; fShowMaximum = TRUE; // check if we are repairing a vehicle - if (Menptr[pFace->ubSoldierID].bVehicleUnderRepairID != -1) + if (pSoldier->bVehicleUnderRepairID != -1) { // reduce to a multiple of VEHICLE_REPAIR_POINTS_DIVISOR. This way skill too low will show up as 0 repair pts. sPtsAvailable -= (sPtsAvailable % VEHICLE_REPAIR_POINTS_DIVISOR); usMaximumPts -= (usMaximumPts % VEHICLE_REPAIR_POINTS_DIVISOR); } - else if (Menptr[pFace->ubSoldierID].flags.fFixingSAMSite) + else if (pSoldier->flags.fFixingSAMSite) { sPtsAvailable = (sPtsAvailable / SAM_SITE_REPAIR_DIVISOR); - INT16 sector = CALCULATE_STRATEGIC_INDEX(Menptr[pFace->ubSoldierID].sSectorX, Menptr[pFace->ubSoldierID].sSectorY); + INT16 sector = CALCULATE_STRATEGIC_INDEX(pSoldier->sSectorX, pSoldier->sSectorY); usMaximumPts = 100 - StrategicMap[sector].bSAMCondition; } @@ -2336,7 +2335,7 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE case DISEASE_DOCTOR_SECTOR: sIconIndex_Assignment = 1; fDoIcon_Assignment = TRUE; - sPtsAvailable = CalculateHealingPointsForDoctor(MercPtrs[pFace->ubSoldierID], &usMaximumPts, FALSE); + sPtsAvailable = CalculateHealingPointsForDoctor(pSoldier, &usMaximumPts, FALSE); fShowNumber = TRUE; fShowMaximum = TRUE; @@ -2348,15 +2347,15 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE case FORTIFICATION: sIconIndex_Assignment = 14; fDoIcon_Assignment = TRUE; - sPtsAvailable = (INT16)(MercPtrs[pFace->ubSoldierID]->GetConstructionPoints()); + sPtsAvailable = (INT16)(pSoldier->GetConstructionPoints()); fShowNumber = TRUE; fShowMaximum = TRUE; { - if (MercPtrs[pFace->ubSoldierID]->bSectorZ) + if (pSoldier->bSectorZ) { UNDERGROUND_SECTORINFO *pSectorInfo; - pSectorInfo = FindUnderGroundSector(MercPtrs[pFace->ubSoldierID]->sSectorX, MercPtrs[pFace->ubSoldierID]->sSectorY, MercPtrs[pFace->ubSoldierID]->bSectorZ); + pSectorInfo = FindUnderGroundSector(pSoldier->sSectorX, pSoldier->sSectorY, pSoldier->bSectorZ); if (pSectorInfo) usMaximumPts = (INT16)(pSectorInfo->dFortification_MaxPossible); @@ -2364,7 +2363,7 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE else { SECTORINFO *pSectorInfo; - pSectorInfo = &SectorInfo[SECTOR(MercPtrs[pFace->ubSoldierID]->sSectorX, MercPtrs[pFace->ubSoldierID]->sSectorY)]; + pSectorInfo = &SectorInfo[SECTOR(pSoldier->sSectorX, pSoldier->sSectorY)]; if (pSectorInfo) usMaximumPts = (INT16)(pSectorInfo->dFortification_MaxPossible); @@ -2384,8 +2383,8 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE } else { - bPtsAvailable = MercPtrs[pFace->ubSoldierID]->GetIntelGain(); - usMaximumPts = (UINT16)(MercPtrs[pFace->ubSoldierID]->GetUncoverRisk()); + bPtsAvailable = pSoldier->GetIntelGain(); + usMaximumPts = (UINT16)(pSoldier->GetUncoverRisk()); swprintf(sString, L"%4.2f/%d%%%%", bPtsAvailable, usMaximumPts); @@ -2397,7 +2396,7 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE sIconIndex_Assignment = 35; fDoIcon_Assignment = TRUE; fShowCustomText = TRUE; - bPtsAvailable = MercPtrs[pFace->ubSoldierID]->GetBurialPoints(&usMaximumPts); + bPtsAvailable = pSoldier->GetBurialPoints(&usMaximumPts); swprintf(sString, L"%3.1f/%d", bPtsAvailable, usMaximumPts); break; @@ -2406,8 +2405,8 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE sIconIndex_Assignment = 36; fDoIcon_Assignment = TRUE; fShowCustomText = TRUE; - sPtsAvailable = (INT16)MercPtrs[pFace->ubSoldierID]->GetAdministrationPoints(); - bPtsAvailable = GetAdministrationPercentage(MercPtrs[pFace->ubSoldierID]->sSectorX, MercPtrs[pFace->ubSoldierID]->sSectorY); + sPtsAvailable = (INT16)pSoldier->GetAdministrationPoints(); + bPtsAvailable = GetAdministrationPercentage(pSoldier->sSectorX, pSoldier->sSectorY); swprintf(sString, L"%d/%3.1f", sPtsAvailable, bPtsAvailable); break; @@ -2416,7 +2415,7 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE sIconIndex_Assignment = 34; fDoIcon_Assignment = TRUE; fShowCustomText = TRUE; - sPtsAvailable = (INT16)MercPtrs[pFace->ubSoldierID]->GetExplorationPoints(); + sPtsAvailable = (INT16)pSoldier->GetExplorationPoints(); // we only show our points, not how far we are with the task, lest the player deduct how many items there are to find in the first place swprintf( sString, L"%d", sPtsAvailable ); @@ -2424,14 +2423,14 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE } // Check for being serviced... - if (MercPtrs[pFace->ubSoldierID]->ubServicePartner != NOBODY) + if (pSoldier->ubServicePartner != NOBODY) { // Doctor... sIconIndex_Assignment = 1; fDoIcon_Assignment = TRUE; } - if (MercPtrs[pFace->ubSoldierID]->ubServiceCount != 0) + if (pSoldier->ubServiceCount != 0) { // Patient sIconIndex_Assignment = 2; @@ -2622,7 +2621,7 @@ BOOLEAN RenderAutoFace( INT32 iFaceIndex ) // Set shade if ( pFace->ubSoldierID != NOBODY ) { - uiFaceShade = GetFaceShade(MercPtrs[pFace->ubSoldierID], pFace, FALSE); + uiFaceShade = GetFaceShade(pFace->ubSoldierID, pFace, FALSE); SetFaceShade(pFace, uiFaceShade); } @@ -2655,12 +2654,12 @@ BOOLEAN RenderAutoFace( INT32 iFaceIndex ) } -BOOLEAN ExternRenderFaceFromSoldier( UINT32 uiBuffer, UINT16 ubSoldierID, INT16 sX, INT16 sY ) +BOOLEAN ExternRenderFaceFromSoldier( UINT32 uiBuffer, SoldierID ubSoldierID, INT16 sX, INT16 sY ) { // Check for valid soldier CHECKF( ubSoldierID != NOBODY ); - return( ExternRenderFace( uiBuffer, MercPtrs[ ubSoldierID ]->iFaceIndex, sX, sY ) ); + return( ExternRenderFace( uiBuffer, ubSoldierID->iFaceIndex, sX, sY ) ); } @@ -2686,7 +2685,7 @@ BOOLEAN ExternRenderFace( UINT32 uiBuffer, INT32 iFaceIndex, INT16 sX, INT16 sY UINT32 uiFaceShade = FLASH_PORTRAIT_NOSHADE; if ( pFace->ubSoldierID != NOBODY ) { - uiFaceShade = GetFaceShade(MercPtrs[pFace->ubSoldierID], pFace, TRUE); + uiFaceShade = GetFaceShade(pFace->ubSoldierID, pFace, TRUE); SetFaceShade(pFace, uiFaceShade); } @@ -2848,7 +2847,7 @@ void HandleAutoFaces( ) if ( pFace->ubSoldierID != NOBODY ) { // Get Life now - pSoldier = MercPtrs[ pFace->ubSoldierID ]; + pSoldier = pFace->ubSoldierID; bLife = pSoldier->stats.bLife; bInSector = pSoldier->bInSector; bAPs = pSoldier->bActionPoints; diff --git a/Tactical/ShopKeeper Interface.cpp b/Tactical/ShopKeeper Interface.cpp index 5e7b5ca6..553a2ad7 100644 --- a/Tactical/ShopKeeper Interface.cpp +++ b/Tactical/ShopKeeper Interface.cpp @@ -295,7 +295,7 @@ INT32 giSKIMessageBox=-1; INT8 gbSelectedArmsDealerID = -1; //Contains the enum value for the currently selected arms dealer // Flugente: while we're trading, store the ID of non-NPC dealers -UINT16 gusIDOfCivTrader = NOBODY; +SoldierID gusIDOfCivTrader = NOBODY; //the quote that is in progress, in certain circumstances, we don't want queuing of related but different quotes INT32 giShopKeepDialogueEventinProgress = - 1; @@ -770,7 +770,7 @@ BOOLEAN EnterShopKeeperInterface() SOLDIERTYPE* pShopkeeper = NULL; if ( gusIDOfCivTrader != NOBODY ) - pShopkeeper = MercPtrs[gusIDOfCivTrader]; + pShopkeeper = gusIDOfCivTrader; else pShopkeeper = FindSoldierByProfileID( armsDealerInfo[gbSelectedArmsDealerID].ubShopKeeperID, FALSE ); @@ -1027,7 +1027,7 @@ BOOLEAN EnterShopKeeperInterface() { //add the item back to the current PC into the slot it came from //ADB screw slot, slot is (used to be, before it was deleted) only ever, so autoplace it - AutoPlaceObject(&Menptr[ gpSMCurrentMerc->ubID ], &gItemToAdd.ItemObject, FALSE); + AutoPlaceObject(gpSMCurrentMerc->ubID, &gItemToAdd.ItemObject, FALSE); } //Clear the contents of the structure @@ -1472,7 +1472,7 @@ BOOLEAN RenderShopKeeperInterface() // Flugente: if this is a non-NPC dealer, we instead show their body in their current animation else if ( gusIDOfCivTrader != NOBODY ) { - SOLDIERTYPE* pSoldier = MercPtrs[gusIDOfCivTrader]; + SOLDIERTYPE* pSoldier = gusIDOfCivTrader; if ( pSoldier ) { @@ -2457,7 +2457,7 @@ void EnterShopKeeperInterfaceScreen( UINT8 ubArmsDealer ) } // Flugente: set up shopkeeper with a non-NPC -void EnterShopKeeperInterfaceScreen_NonNPC( INT8 ubArmsDealerID, UINT16 aMercID ) +void EnterShopKeeperInterfaceScreen_NonNPC( INT8 ubArmsDealerID, SoldierID aMercID ) { gusIDOfCivTrader = aMercID; diff --git a/Tactical/ShopKeeper Interface.h b/Tactical/ShopKeeper Interface.h index 549a0bea..af7565a0 100644 --- a/Tactical/ShopKeeper Interface.h +++ b/Tactical/ShopKeeper Interface.h @@ -97,7 +97,7 @@ bool RepairmanItemQsortCompare(INVENTORY_IN_SLOT& pInvSlot1, INVENTORY_IN_SLOT& void EnterShopKeeperInterfaceScreen( UINT8 ubArmsDealer ); // Flugente: set up shopkeeper with a non-NPC -void EnterShopKeeperInterfaceScreen_NonNPC( INT8 ubArmsDealerID, UINT16 aMercID ); +void EnterShopKeeperInterfaceScreen_NonNPC( INT8 ubArmsDealerID, SoldierID aMercID ); void EnableDisableShopkeeperButtons(UINT32 uiCurrentItemDescriptionScreen, int bpAction); diff --git a/Tactical/faces.h b/Tactical/faces.h index adfa524d..bb88eb38 100644 --- a/Tactical/faces.h +++ b/Tactical/faces.h @@ -104,7 +104,7 @@ typedef struct typedef struct { UINT32 uiFlags; // Basic flags - INT32 iID; + INT32 iID; BOOLEAN fAllocated; //Allocated or not BOOLEAN fTalking; //Set to true if face is talking ( can be sitting for user input to esc ) BOOLEAN fAnimatingTalking; // Set if the face is animating right now @@ -119,12 +119,12 @@ typedef struct BOOLEAN fFinishTalking; // A flag to indicate we want to delay after speech done - INT32 iVideoOverlay; // Value for video overlay ( not used too much ) + INT32 iVideoOverlay; // Value for video overlay ( not used too much ) UINT32 uiSoundID; // Sound ID if one being played - UINT16 ubSoldierID; // SoldierID if one specified - UINT8 ubCharacterNum; // Profile ID num + SoldierID ubSoldierID; // SoldierID if one specified + UINT8 ubCharacterNum; // Profile ID num UINT16 usFaceX; // X location to render face UINT16 usFaceY; // Y location to render face @@ -137,7 +137,7 @@ typedef struct BOOLEAN fDisplayTextOver; // Boolean indicating to display text on face BOOLEAN fOldDisplayTextOver; // OLD Boolean indicating to display text on face BOOLEAN fCanHandleInactiveNow; - wchar_t zDisplayText[ 30 ]; // String of text that can be displayed + wchar_t zDisplayText[ 30 ]; // String of text that can be displayed UINT16 usEyesX; UINT16 usEyesY; @@ -162,10 +162,10 @@ typedef struct UINT32 uiExpressionFrequency; UINT32 uiStopOverlayTimer; - UINT8 ubExpression; + UINT8 ubExpression; INT8 bOldSoldierLife; - INT16 bOldActionPoints; + INT16 bOldActionPoints; BOOLEAN fOldHandleUIHatch; BOOLEAN fOldShowHighlight; INT8 bOldAssignment; @@ -200,14 +200,14 @@ extern FACETYPE gFacesData[ NUM_FACE_SLOTS ]; // FACE HANDLING // // Faces are done like this: Call -INT32 InitFace( UINT8 usMercProfileID, UINT16 ubSoldierID, UINT32 uiInitFlags ); +INT32 InitFace( UINT8 usMercProfileID, SoldierID ubSoldierID, UINT32 uiInitFlags ); // The first parameter is the profile ID and the second is the soldier ID ( which for most cases // will be NOBODY if the face is not created from a SOLDIERTYPE ) // This function allocates a slot in the table for the face, loads it's STI file, sets some // values for X,Y locations of eyes from the profile. Does not mkae the face visible or anything like that // INternal init face, called if you don;t want to give a profile ID ( send NO_PROFILE ) for ID -INT32 InternalInitFace( UINT8 usMercProfileID, UINT16 ubSoldierID, UINT32 uiInitFlags, INT32 iFaceFileID, UINT32 uiBlinkFrequency, UINT32 uiExpressionFrequency ); +INT32 InternalInitFace( UINT8 usMercProfileID, SoldierID ubSoldierID, UINT32 uiInitFlags, INT32 iFaceFileID, UINT32 uiBlinkFrequency, UINT32 uiExpressionFrequency ); // Removes the face from the internal table, deletes any memory allocated if any. @@ -279,10 +279,10 @@ void HandleTalkingAutoFaces( ); // Same Functions but taking soldier ID first to get profile ID INT32 InitSoldierFace( SOLDIERTYPE *pSoldier ); void DeleteSoldierFace( SOLDIERTYPE *pSoldier ); -void SetAutoFaceActiveFromSoldier( UINT32 uiDisplayBuffer, UINT32 uiRestoreBuffer, UINT16 ubSoldierID, UINT16 usFaceX, UINT16 usFaceY ); -void SetAutoFaceInActiveFromSoldier( UINT16 ubSoldierID ); -BOOLEAN RenderAutoFaceFromSoldier( UINT16 ubSoldierID ); -BOOLEAN ExternRenderFaceFromSoldier( UINT32 uiBuffer, UINT16 ubSoldierID, INT16 sX, INT16 sY ); +void SetAutoFaceActiveFromSoldier( UINT32 uiDisplayBuffer, UINT32 uiRestoreBuffer, SoldierID ubSoldierID, UINT16 usFaceX, UINT16 usFaceY ); +void SetAutoFaceInActiveFromSoldier( SoldierID ubSoldierID ); +BOOLEAN RenderAutoFaceFromSoldier( SoldierID ubSoldierID ); +BOOLEAN ExternRenderFaceFromSoldier( UINT32 uiBuffer, SoldierID ubSoldierID, INT16 sX, INT16 sY ); From f50bdf99ccbc3deff6c222853ece99e33a4072d1 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 17 Nov 2024 20:41:09 +0200 Subject: [PATCH 085/192] Convert to SoldierID --- Multiplayer/client.cpp | 36 +++++++-------- Multiplayer/connect.h | 6 +-- Strategic/LuaInitNPCs.cpp | 4 +- Strategic/LuaInitNPCs.h | 2 +- Tactical/Faces.cpp | 4 +- Tactical/Handle Items.cpp | 86 +++++++++++++++++------------------ Tactical/Handle Items.h | 2 +- Tactical/Handle UI.cpp | 50 ++++++++++---------- Tactical/Handle UI.h | 18 ++++---- Tactical/Interface Items.cpp | 42 ++++++++--------- Tactical/Interface Items.h | 2 +- Tactical/Interface Panels.cpp | 22 ++++----- Tactical/Interface Panels.h | 12 ++--- Tactical/Item Types.h | 8 ++-- Tactical/Items.cpp | 8 ++-- Tactical/LOS.cpp | 2 +- Tactical/LOS.h | 4 +- Tactical/Overhead.h | 2 +- Tactical/Soldier Control.cpp | 33 +++++++------- Tactical/Soldier Control.h | 2 +- Tactical/Vehicles.cpp | 28 ++++++------ Tactical/Vehicles.h | 6 +-- 22 files changed, 188 insertions(+), 191 deletions(-) diff --git a/Multiplayer/client.cpp b/Multiplayer/client.cpp index 4d967455..f6c28480 100644 --- a/Multiplayer/client.cpp +++ b/Multiplayer/client.cpp @@ -388,16 +388,16 @@ typedef struct typedef struct { - UINT16 usSoldierID; - FLOAT dNewXPos; - FLOAT dNewYPos; + SoldierID usSoldierID; + FLOAT dNewXPos; + FLOAT dNewYPos; } gui_pos; typedef struct { - UINT16 usSoldierID; - INT16 usNewDirection; + SoldierID usSoldierID; + INT16 usNewDirection; } gui_dir; @@ -425,12 +425,12 @@ typedef struct typedef struct { - UINT16 ubID; + SoldierID ubID; INT8 bTeam; UINT16 gubOutOfTurnPersons; UINT16 gubOutOfTurnOrder[MAXMERCS]; BOOLEAN fMarkInterruptOccurred; - UINT16 Interrupted; + SoldierID Interrupted; } INT_STRUCT; typedef struct @@ -486,7 +486,7 @@ typedef struct float dZ; INT32 sGridNo; bool bWasDud; - UINT16 ubOwnerID; + SoldierID ubOwnerID; INT32 RealObjectID; // the local ID on the initiating client UINT32 uiPreRandomIndex; // send out our current pre-random index } grenade_result; @@ -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; - UINT16 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); @@ -1157,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; @@ -1916,7 +1916,7 @@ void send_interrupt (SOLDIERTYPE *pSoldier) memcpy(INT.gubOutOfTurnOrder, gubOutOfTurnOrder, sizeof(UINT16) * MAXMERCS); INT.gubOutOfTurnPersons = gubOutOfTurnPersons; - INT.Interrupted=gusSelectedSoldier+ubID_prefix; + INT.Interrupted = gusSelectedSoldier + ubID_prefix; if(INT.bTeam==0) { @@ -3030,11 +3030,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)) @@ -3343,11 +3343,11 @@ void recieveDETONATEEXPLOSIVE (RPCParameters *rpcParameters) } } -void send_disarm_explosive(UINT32 sGridNo, UINT32 uiWorldItem, UINT16 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 diff --git a/Multiplayer/connect.h b/Multiplayer/connect.h index e0975256..75f5d48b 100644 --- a/Multiplayer/connect.h +++ b/Multiplayer/connect.h @@ -112,14 +112,14 @@ 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, UINT16 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_grenade_result (float xPos, float yPos, float zPos, INT32 sGridNo, SoldierID ubOwnerID, INT32 iRealObjectID, bool bIsDud); void send_plant_explosive (UINT16 ubID,UINT16 usItem,UINT8 ubItemStatus,UINT16 usFlags, UINT32 sGridNo,UINT8 ubLevel, UINT32 uiWorldIndex); void send_detonate_explosive (UINT32 uiWorldIndex, UINT16 ubID); void send_spreadeffect ( INT32 sGridNo, UINT8 ubRadius, UINT16 usItem, UINT16 ubOwner, BOOLEAN fSubsequent, INT8 bLevel, INT32 iSmokeEffectID ); void send_newsmokeeffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT16 ubOwner, INT32 iSmokeEffectID); void send_gasdamage( SOLDIERTYPE * pSoldier, UINT16 usExplosiveClassID, INT16 sSubsequent, BOOLEAN fRecompileMovementCosts, INT16 sWoundAmt, INT16 sBreathAmt, SoldierID ubOwner ); void send_explosivedamage( UINT16 ubPerson, UINT16 ubOwner, INT32 sBombGridNo, INT16 sWoundAmt, INT16 sBreathAmt, UINT32 uiDist, UINT16 usItem, INT16 sSubsequent ); -void send_disarm_explosive(UINT32 sGridNo, UINT32 uiWorldIndex, UINT16 ubID); +void send_disarm_explosive(UINT32 sGridNo, UINT32 uiWorldIndex, SoldierID ubID); void OpenChatMsgBox(void); @@ -211,7 +211,7 @@ extern BOOLEAN fClientReceivedAllFiles; // sick of confusing myself :) // this one should be called before passing an ID off the client -inline UINT16 MPEncodeSoldierID( UINT16 ubID ) +inline SoldierID MPEncodeSoldierID( SoldierID ubID ) { if ( ubID < 20 ) return ubID + ubID_prefix; // soldier is ours diff --git a/Strategic/LuaInitNPCs.cpp b/Strategic/LuaInitNPCs.cpp index 84c9a86f..f8ad68eb 100644 --- a/Strategic/LuaInitNPCs.cpp +++ b/Strategic/LuaInitNPCs.cpp @@ -2717,7 +2717,7 @@ void LuaHandleSectorLiberation( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ, B void LuaHandleInteractiveActionResult( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ, - INT32 sGridNo, UINT8 bLevel, UINT16 ubId, + INT32 sGridNo, UINT8 bLevel, SoldierID ubId, UINT16 usActionType, INT32 sLuaactionid, INT32 difficulty, UINT16 skill ) { const char* filename = "scripts\\Overhead.lua"; @@ -2731,7 +2731,7 @@ void LuaHandleInteractiveActionResult( INT16 sSectorX, INT16 sSectorY, SGP_THROW_IFFALSE( _LS.L.EvalFile( filename ), _BS( "Cannot open file: " ) << filename << _BS::cget ); - LuaFunction( _LS.L, "HandleInteractiveActionResult" ).Param( sSectorX ).Param( sSectorY ).Param( bSectorZ ).Param( sGridNo ).Param( bLevel ).Param( ubId ).Param( usActionType ).Param( sLuaactionid ).Param( difficulty ).Param( skill ).Call( 10 ); + LuaFunction( _LS.L, "HandleInteractiveActionResult" ).Param( sSectorX ).Param( sSectorY ).Param( bSectorZ ).Param( sGridNo ).Param( bLevel ).Param( ubId.i ).Param( usActionType ).Param( sLuaactionid ).Param( difficulty ).Param( skill ).Call( 10 ); } void LuaRecruitRPCAdditionalHandling( UINT8 usProfile ) diff --git a/Strategic/LuaInitNPCs.h b/Strategic/LuaInitNPCs.h index 043c0fa1..4a78976d 100644 --- a/Strategic/LuaInitNPCs.h +++ b/Strategic/LuaInitNPCs.h @@ -62,7 +62,7 @@ extern BOOLEAN LuaHandleQuestCodeOnSector( INT16 sSectorX, INT16 sSectorY, INT8 void LuaHandleSectorLiberation( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ, BOOLEAN fFirstTime ); void LuaHandleInteractiveActionResult( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ, - INT32 sGridNo, UINT8 bLevel, UINT16 ubId, + 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 ); diff --git a/Tactical/Faces.cpp b/Tactical/Faces.cpp index a61a627f..97415f41 100644 --- a/Tactical/Faces.cpp +++ b/Tactical/Faces.cpp @@ -2087,10 +2087,10 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE // Flugente: are we supplying ammo to someone else? if (gGameExternalOptions.ubExternalFeeding > 0) { - UINT16 ubID1 = 0; + SoldierID ubID1 = NOBODY; UINT16 ubGunSlot1 = 0; UINT16 ubFaceSlot1 = 0; - UINT16 ubID2 = 0; + SoldierID ubID2 = NOBODY; UINT16 ubGunSlot2 = 0; UINT16 ubFaceSlot2 = 0; if (pSoldier->IsFeedingExternal(&ubID1, &ubGunSlot1, &ubFaceSlot1, &ubID2, &ubGunSlot2, &ubFaceSlot2)) diff --git a/Tactical/Handle Items.cpp b/Tactical/Handle Items.cpp index de09582e..d4a9abb9 100644 --- a/Tactical/Handle Items.cpp +++ b/Tactical/Handle Items.cpp @@ -239,20 +239,20 @@ BOOLEAN HandleCheckForBadChangeToGetThrough( SOLDIERTYPE *pSoldier, SOLDIERTYPE INT32 HandleItem( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel, UINT16 usHandItem, BOOLEAN fFromUI ) { - SOLDIERTYPE *pTargetSoldier = NULL; - UINT16 usSoldierIndex; - INT32 sTargetGridNo; - INT16 sAPCost; - INT32 sActionGridNo; - UINT8 ubDirection = 0; - INT32 sAdjustedGridNo; - BOOLEAN fDropBomb = FALSE; - BOOLEAN fAddingTurningCost = FALSE; - BOOLEAN fAddingRaiseGunCost = FALSE; - LEVELNODE *pIntNode; - STRUCTURE *pStructure; - UINT16 usRaiseGunCost = 0; - UINT16 usTurningCost = 0; + SOLDIERTYPE *pTargetSoldier = NULL; + SoldierID usSoldierIndex; + INT32 sTargetGridNo; + INT16 sAPCost; + INT32 sActionGridNo; + UINT8 ubDirection = 0; + INT32 sAdjustedGridNo; + BOOLEAN fDropBomb = FALSE; + BOOLEAN fAddingTurningCost = FALSE; + BOOLEAN fAddingRaiseGunCost = FALSE; + LEVELNODE *pIntNode; + STRUCTURE *pStructure; + UINT16 usRaiseGunCost = 0; + UINT16 usTurningCost = 0; //shadooow: automatically close EDB when opened and trying to use any weapon or action if (gfInItemDescBox) @@ -277,7 +277,7 @@ INT32 HandleItem( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel, UINT16 usHa //if ( FindSoldier( sGridNo, &usSoldierIndex, &uiMercFlags, FIND_SOLDIER_GRIDNO ) ) if ( ( usSoldierIndex = WhoIsThere2( sGridNo, bLevel ) ) != NOBODY ) { - pTargetSoldier = MercPtrs[ usSoldierIndex ]; + pTargetSoldier = usSoldierIndex; // anv: don't try to heal interactive spots if (fFromUI && Item[usHandItem].usItemClass != IC_MEDKIT) @@ -1394,11 +1394,11 @@ INT32 HandleItem( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel, UINT16 usHa } } - UINT16 ubPerson = WhoIsThere2(usMapPos, pSoldier->pathing.bLevel); + SoldierID ubPerson = WhoIsThere2(usMapPos, pSoldier->pathing.bLevel); // Flugente: apply misc items to other soldiers // sevenfm: check that target soldier is visible - if (ItemCanBeAppliedToOthers(usHandItem) && ubPerson != NOBODY && MercPtrs[ubPerson] && MercPtrs[ubPerson]->bVisible != 0) + if (ItemCanBeAppliedToOthers(usHandItem) && ubPerson != NOBODY && ubPerson->bVisible != 0) { // ATE: AI CANNOT GO THROUGH HERE! BOOLEAN fHadToUseCursorPos = FALSE; @@ -4292,9 +4292,8 @@ BOOLEAN DrawItemPoolList( ITEM_POOL *pItemPool, INT32 sGridNo, UINT8 bCommand, I if (gGameExternalOptions.gfShowBackpackOwner && Item[gWorldItems[pItemPool->iItemIndex].object.usItem].usItemClass == IC_LBEGEAR && LoadBearingEquipment[Item[gWorldItems[pItemPool->iItemIndex].object.usItem].ubClassIndex].lbeClass == BACKPACK && - gWorldItems[pItemPool->iItemIndex].soldierID != NOBODY && - MercPtrs[gWorldItems[pItemPool->iItemIndex].soldierID]) - swprintf(pStr, L"%s (%d) (%s)", ShortItemNames[gWorldItems[pTempItemPool->iItemIndex].object.usItem], gWorldItems[pTempItemPool->iItemIndex].object.ubNumberOfObjects, MercPtrs[gWorldItems[pItemPool->iItemIndex].soldierID]->GetName()); + gWorldItems[pItemPool->iItemIndex].soldierID != NOBODY) + swprintf(pStr, L"%s (%d) (%s)", ShortItemNames[gWorldItems[pTempItemPool->iItemIndex].object.usItem], gWorldItems[pTempItemPool->iItemIndex].object.ubNumberOfObjects, gWorldItems[pItemPool->iItemIndex].soldierID->GetName()); else swprintf( pStr, L"%s (%d)", ShortItemNames[ gWorldItems[ pTempItemPool->iItemIndex ].object.usItem ], gWorldItems[ pTempItemPool->iItemIndex ].object.ubNumberOfObjects ); } @@ -4303,9 +4302,8 @@ BOOLEAN DrawItemPoolList( ITEM_POOL *pItemPool, INT32 sGridNo, UINT8 bCommand, I if (gGameExternalOptions.gfShowBackpackOwner && Item[gWorldItems[pItemPool->iItemIndex].object.usItem].usItemClass == IC_LBEGEAR && LoadBearingEquipment[Item[gWorldItems[pItemPool->iItemIndex].object.usItem].ubClassIndex].lbeClass == BACKPACK && - gWorldItems[pItemPool->iItemIndex].soldierID != NOBODY && - MercPtrs[gWorldItems[pItemPool->iItemIndex].soldierID]) - swprintf(pStr, L"%s (%s)", ShortItemNames[gWorldItems[pTempItemPool->iItemIndex].object.usItem], MercPtrs[gWorldItems[pItemPool->iItemIndex].soldierID]->GetName()); + gWorldItems[pItemPool->iItemIndex].soldierID != NOBODY) + swprintf(pStr, L"%s (%s)", ShortItemNames[gWorldItems[pTempItemPool->iItemIndex].object.usItem], gWorldItems[pItemPool->iItemIndex].soldierID->GetName()); else swprintf( pStr, L"%s", ShortItemNames[ gWorldItems[ pTempItemPool->iItemIndex ].object.usItem ] ); } @@ -4413,9 +4411,8 @@ BOOLEAN DrawItemPoolList( ITEM_POOL *pItemPool, INT32 sGridNo, UINT8 bCommand, I if (gGameExternalOptions.gfShowBackpackOwner && Item[gWorldItems[pItemPool->iItemIndex].object.usItem].usItemClass == IC_LBEGEAR && LoadBearingEquipment[Item[gWorldItems[pItemPool->iItemIndex].object.usItem].ubClassIndex].lbeClass == BACKPACK && - gWorldItems[pItemPool->iItemIndex].soldierID != NOBODY && - MercPtrs[gWorldItems[pItemPool->iItemIndex].soldierID]) - swprintf(pStr, L"%s (%d) (%s)", ShortItemNames[gWorldItems[pItemPool->iItemIndex].object.usItem], gWorldItems[pItemPool->iItemIndex].object.ubNumberOfObjects, MercPtrs[gWorldItems[pItemPool->iItemIndex].soldierID]->GetName()); + gWorldItems[pItemPool->iItemIndex].soldierID != NOBODY) + swprintf(pStr, L"%s (%d) (%s)", ShortItemNames[gWorldItems[pItemPool->iItemIndex].object.usItem], gWorldItems[pItemPool->iItemIndex].object.ubNumberOfObjects, gWorldItems[pItemPool->iItemIndex].soldierID->GetName()); else swprintf( pStr, L"%s (%d)", ShortItemNames[ gWorldItems[ pItemPool->iItemIndex ].object.usItem ], gWorldItems[ pItemPool->iItemIndex ].object.ubNumberOfObjects ); } @@ -4424,9 +4421,8 @@ BOOLEAN DrawItemPoolList( ITEM_POOL *pItemPool, INT32 sGridNo, UINT8 bCommand, I if (gGameExternalOptions.gfShowBackpackOwner && Item[gWorldItems[pItemPool->iItemIndex].object.usItem].usItemClass == IC_LBEGEAR && LoadBearingEquipment[Item[gWorldItems[pItemPool->iItemIndex].object.usItem].ubClassIndex].lbeClass == BACKPACK && - gWorldItems[pItemPool->iItemIndex].soldierID != NOBODY && - MercPtrs[gWorldItems[pItemPool->iItemIndex].soldierID]) - swprintf(pStr, L"%s (%s)", ShortItemNames[gWorldItems[pItemPool->iItemIndex].object.usItem], MercPtrs[gWorldItems[pItemPool->iItemIndex].soldierID]->GetName()); + gWorldItems[pItemPool->iItemIndex].soldierID != NOBODY) + swprintf(pStr, L"%s (%s)", ShortItemNames[gWorldItems[pItemPool->iItemIndex].object.usItem], gWorldItems[pItemPool->iItemIndex].soldierID->GetName()); else swprintf( pStr, L"%s", ShortItemNames[ gWorldItems[ pItemPool->iItemIndex ].object.usItem ] ); } @@ -4814,12 +4810,12 @@ void RenderTopmostFlashingItems( ) BOOLEAN VerifyGiveItem( SOLDIERTYPE *pSoldier, SOLDIERTYPE **ppTargetSoldier ) { SOLDIERTYPE *pTSoldier; - UINT16 usSoldierIndex; + SoldierID usSoldierIndex; OBJECTTYPE *pObject; INT32 sGridNo; - UINT8 ubDirection; - UINT16 ubTargetMercID; + UINT8 ubDirection; + SoldierID ubTargetMercID; // DO SOME CHECKS IF WE CAN DO ANIMATION..... @@ -4828,7 +4824,7 @@ BOOLEAN VerifyGiveItem( SOLDIERTYPE *pSoldier, SOLDIERTYPE **ppTargetSoldier ) sGridNo = pSoldier->aiData.sPendingActionData2; ubDirection = pSoldier->aiData.bPendingActionData3; - ubTargetMercID = (UINT16)pSoldier->aiData.uiPendingActionData4; + ubTargetMercID = static_cast( pSoldier->aiData.uiPendingActionData4 ); usSoldierIndex = WhoIsThere2( sGridNo, pSoldier->pathing.bLevel ); @@ -4864,7 +4860,7 @@ BOOLEAN VerifyGiveItem( SOLDIERTYPE *pSoldier, SOLDIERTYPE **ppTargetSoldier ) if ( ubTargetMercID != NOBODY ) { - MercPtrs[ ubTargetMercID ]->flags.uiStatusFlags &= (~SOLDIER_ENGAGEDINACTION ); + ubTargetMercID->flags.uiStatusFlags &= (~SOLDIER_ENGAGEDINACTION ); } OBJECTTYPE::DeleteMe( &pSoldier->pTempObject ); @@ -5078,13 +5074,13 @@ void SoldierGiveItemFromAnimation( SOLDIERTYPE *pSoldier ) INT32 AdjustGridNoForItemPlacement( SOLDIERTYPE *pSoldier, INT32 sGridNo ) { - STRUCTURE *pStructure; - INT16 sDesiredLevel; - INT32 sActionGridNo; - BOOLEAN fStructFound = FALSE; - UINT8 ubDirection; - INT32 sAdjustedGridNo; - UINT16 ubTargetID; + STRUCTURE *pStructure; + INT16 sDesiredLevel; + INT32 sActionGridNo; + BOOLEAN fStructFound = FALSE; + UINT8 ubDirection; + INT32 sAdjustedGridNo; + SoldierID ubTargetID; sActionGridNo = sGridNo; @@ -9405,11 +9401,11 @@ void DoInteractiveAction( INT32 sGridNo, SOLDIERTYPE *pSoldier ) // handle the default result of an interactive action // This is called either if no lua action id is set, or by lua if this should happen as a supplement to whatever lua does -void DoInteractiveActionDefaultResult( INT32 sGridNo, UINT16 ubID, BOOLEAN aSuccess ) +void DoInteractiveActionDefaultResult( INT32 sGridNo, SoldierID ubID, BOOLEAN aSuccess ) { SOLDIERTYPE* pSoldier = NULL; if ( ubID != NOBODY ) - pSoldier = MercPtrs[ubID]; + pSoldier = ubID; // we need a valid soldier and a valid object if ( !pSoldier ) @@ -10457,9 +10453,9 @@ void TakePhoto(SOLDIERTYPE* pSoldier, INT32 sGridNo, INT8 bLevel ) InARoom( newgridno, &room ); // check if there is someone here - UINT16 ubid = WhoIsThere2( newgridno, bLevel ); + SoldierID ubid = WhoIsThere2( newgridno, bLevel ); - LuaAddPhotoData( gWorldSectorX, gWorldSectorY, gbWorldSectorZ, newgridno, bLevel, pSoldier->ubProfile, room, ( ubid == NOBODY ) ? NO_PROFILE : MercPtrs[ubid]->ubProfile ); + LuaAddPhotoData( gWorldSectorX, gWorldSectorY, gbWorldSectorZ, newgridno, bLevel, pSoldier->ubProfile, room, ( ubid == NOBODY ) ? NO_PROFILE : ubid->ubProfile ); } } } diff --git a/Tactical/Handle Items.h b/Tactical/Handle Items.h index 596b889a..b01e4b4a 100644 --- a/Tactical/Handle Items.h +++ b/Tactical/Handle Items.h @@ -329,7 +329,7 @@ extern ITEM_POOL *gpItemPool;//dnl ch26 210909 // Flugente: interactive actions void DoInteractiveAction( INT32 sGridNo, SOLDIERTYPE *pSoldier ); -void DoInteractiveActionDefaultResult( INT32 sGridNo, UINT16 ubID, BOOLEAN aSuccess ); +void DoInteractiveActionDefaultResult( INT32 sGridNo, SoldierID ubID, BOOLEAN aSuccess ); BOOLEAN SpendMoney( SOLDIERTYPE *pSoldier, UINT32 aAmount ); // character spends money - either from inventory or the account // Flugente: intel diff --git a/Tactical/Handle UI.cpp b/Tactical/Handle UI.cpp index 2ad4e76e..aa5c7910 100644 --- a/Tactical/Handle UI.cpp +++ b/Tactical/Handle UI.cpp @@ -429,41 +429,41 @@ INT16 guiCreateBadGuyIndex = 8; // FLAGS // These flags are set for a single frame execution and then are reset for the next iteration. -BOOLEAN gfUIDisplayActionPoints = FALSE; +BOOLEAN gfUIDisplayActionPoints = FALSE; BOOLEAN gfUIDisplayActionPointsInvalid = FALSE; BOOLEAN gfUIDisplayActionPointsBlack = FALSE; -BOOLEAN gfUIDisplayActionPointsCenter = FALSE; +BOOLEAN gfUIDisplayActionPointsCenter = FALSE; -INT16 gUIDisplayActionPointsOffY = 0; -INT16 gUIDisplayActionPointsOffX = 0; -BOOLEAN gfUIDoNotHighlightSelMerc = FALSE; -BOOLEAN gfUIHandleSelection = FALSE; -BOOLEAN gfUIHandleSelectionAboveGuy = FALSE; -BOOLEAN gfUIInDeadlock = FALSE; -UINT16 gUIDeadlockedSoldier = NOBODY; -BOOLEAN gfUIHandleShowMoveGrid = FALSE; +INT16 gUIDisplayActionPointsOffY = 0; +INT16 gUIDisplayActionPointsOffX = 0; +BOOLEAN gfUIDoNotHighlightSelMerc = FALSE; +BOOLEAN gfUIHandleSelection = FALSE; +BOOLEAN gfUIHandleSelectionAboveGuy = FALSE; +BOOLEAN gfUIInDeadlock = FALSE; +UINT16 gUIDeadlockedSoldier = NOBODY; +BOOLEAN gfUIHandleShowMoveGrid = FALSE; INT32 gsUIHandleShowMoveGridLocation = NOWHERE ; -BOOLEAN gfUIOverItemPool = FALSE; -INT32 gfUIOverItemPoolGridNo = 0; -INT16 gsCurrentActionPoints = 1; -BOOLEAN gfUIHandlePhysicsTrajectory = FALSE; -BOOLEAN gfUIMouseOnValidCatcher = FALSE; -UINT16 gubUIValidCatcherID = 0; +BOOLEAN gfUIOverItemPool = FALSE; +INT32 gfUIOverItemPoolGridNo = 0; +INT16 gsCurrentActionPoints = 1; +BOOLEAN gfUIHandlePhysicsTrajectory = FALSE; +BOOLEAN gfUIMouseOnValidCatcher = FALSE; +SoldierID gubUIValidCatcherID = NOBODY; -BOOLEAN gfUIConfirmExitArrows = FALSE; +BOOLEAN gfUIConfirmExitArrows = FALSE; -BOOLEAN gfUIShowCurIntTile = FALSE; +BOOLEAN gfUIShowCurIntTile = FALSE; -BOOLEAN gfUIWaitingForUserSpeechAdvance = FALSE; // Waiting for key input/mouse click to advance speech -BOOLEAN gfUIKeyCheatModeOn = FALSE; // Sets cool cheat keys on -BOOLEAN gfUIAllMoveOn = FALSE; // Sets to all move -BOOLEAN gfUICanBeginAllMoveCycle = FALSE; // GEts set so we know that the next right-click is a move-call inc\stead of a movement cycle through +BOOLEAN gfUIWaitingForUserSpeechAdvance = FALSE; // Waiting for key input/mouse click to advance speech +BOOLEAN gfUIKeyCheatModeOn = FALSE; // Sets cool cheat keys on +BOOLEAN gfUIAllMoveOn = FALSE; // Sets to all move +BOOLEAN gfUICanBeginAllMoveCycle = FALSE; // GEts set so we know that the next right-click is a move-call inc\stead of a movement cycle through -INT32 gsSelectedGridNo = 0; -INT16 gsSelectedLevel = I_GROUND_LEVEL; -INT16 gsSelectedGuy = NOBODY; +INT32 gsSelectedGridNo = 0; +INT16 gsSelectedLevel = I_GROUND_LEVEL; +INT16 gsSelectedGuy = NOBODY; BOOLEAN gfUIDisplayDamage = FALSE; INT8 gbDamage = 0; diff --git a/Tactical/Handle UI.h b/Tactical/Handle UI.h index 22bd3fa4..ce634e5c 100644 --- a/Tactical/Handle UI.h +++ b/Tactical/Handle UI.h @@ -181,7 +181,7 @@ extern UI_EVENT gEvents[ NUM_UI_EVENTS ]; extern UI_MODE gCurrentUIMode; extern UI_MODE gOldUIMode; extern UINT32 guiCurrentEvent; -extern INT16 gsSelectedLevel; +extern INT16 gsSelectedLevel; extern BOOLEAN gfPlotNewMovement; extern UINT32 guiPendingOverrideEvent; @@ -191,34 +191,34 @@ extern BOOLEAN gfUIDisplayActionPoints; extern BOOLEAN gfUIDisplayActionPointsInvalid; extern BOOLEAN gfUIDisplayActionPointsBlack; extern BOOLEAN gfUIDisplayActionPointsCenter; -extern INT16 gUIDisplayActionPointsOffY; -extern INT16 gUIDisplayActionPointsOffX; +extern INT16 gUIDisplayActionPointsOffY; +extern INT16 gUIDisplayActionPointsOffX; extern BOOLEAN gfUIDoNotHighlightSelMerc; extern UINT32 guiShowUPDownArrows; extern BOOLEAN gfUIHandleSelection; extern BOOLEAN gfUIHandleSelectionAboveGuy; -extern INT32 gsSelectedGridNo; -extern INT16 gsSelectedGuy; +extern INT32 gsSelectedGridNo; +extern INT16 gsSelectedGuy; extern BOOLEAN gfUIInDeadlock; extern UINT16 gUIDeadlockedSoldier; extern BOOLEAN gfUIMouseOnValidCatcher; -extern UINT16 gubUIValidCatcherID; +extern SoldierID gubUIValidCatcherID; extern BOOLEAN gUIUseReverse; extern BOOLEAN gfUIHandleShowMoveGrid; -extern INT32 gsUIHandleShowMoveGridLocation; +extern INT32 gsUIHandleShowMoveGridLocation; extern BOOLEAN gfUIDisplayDamage; extern INT8 gbDamage; -extern INT32 gsDamageGridNo; +extern INT32 gsDamageGridNo; extern BOOLEAN gfFontPopupDo; extern BOOLEAN gUITargetReady; extern BOOLEAN gUITargetShotWaiting; -extern INT32 gsUITargetShotGridNo; +extern INT32 gsUITargetShotGridNo; extern CHAR16 gzLocation[ 20 ]; extern BOOLEAN gfUIBodyHitLocation; diff --git a/Tactical/Interface Items.cpp b/Tactical/Interface Items.cpp index c6235487..cdd87caa 100644 --- a/Tactical/Interface Items.cpp +++ b/Tactical/Interface Items.cpp @@ -3548,7 +3548,7 @@ void DegradeNewlyAddedItems( ) // GET SOLDIER if ( gTeamPanel[ cnt2 ].fOccupied ) { - pSoldier = MercPtrs[ gTeamPanel[ cnt2 ].ubID ]; + pSoldier = gTeamPanel[ cnt2 ].ubID; UINT32 invsize = pSoldier->inv.size(); for ( UINT32 cnt = 0; cnt < invsize; ++cnt ) @@ -4434,7 +4434,7 @@ void INVRenderSteeringWheel( UINT32 uiBuffer, UINT32 uiSteeringWheelIndex, SOLDI return; } - pVehicle = GetSoldierStructureForVehicle ( MercPtrs[ pSoldier->ubID ]->iVehicleId ); + pVehicle = GetSoldierStructureForVehicle ( pSoldier->ubID->iVehicleId ); if ( pVehicle == NULL ) { @@ -8796,11 +8796,11 @@ void DrawItemTileCursor( ) /*CHRISL: For some reason it's possible that gpItemPointerSoldier is not correctly set when we come into this function, but we require it to be set for this function to work. So for now, let's set it using gusUIFullTargetID.*/ if(gpItemPointerSoldier->exists() == false) - gpItemPointerSoldier = MercPtrs[ gusUIFullTargetID ]; + gpItemPointerSoldier = gusUIFullTargetID; if ( gfUIFullTargetFound ) { // Force mouse position to guy... - usMapPos = MercPtrs[ gusUIFullTargetID ]->sGridNo; + usMapPos = gusUIFullTargetID->sGridNo; } gusCurMousePos = usMapPos; @@ -8871,7 +8871,7 @@ void DrawItemTileCursor( ) if ( gfUIFullTargetFound ) { // Get soldier - pSoldier = MercPtrs[ gusUIFullTargetID ]; + pSoldier = gusUIFullTargetID; // Are they on our team? // ATE: Can't be an EPC @@ -8881,7 +8881,7 @@ void DrawItemTileCursor( ) { // OK, on a valid pass gfUIMouseOnValidCatcher = 4; - gubUIValidCatcherID = gusUIFullTargetID; + gubUIValidCatcherID = gusUIFullTargetID; } else { @@ -8890,7 +8890,7 @@ void DrawItemTileCursor( ) { // OK, set global that this buddy can see catch... gfUIMouseOnValidCatcher = TRUE; - gubUIValidCatcherID = gusUIFullTargetID; + gubUIValidCatcherID = gusUIFullTargetID; } } } @@ -8927,7 +8927,7 @@ void DrawItemTileCursor( ) gubUIValidCatcherID = gusUIFullTargetID; // If this is a robot, change to say 'reload' - if ( MercPtrs[ gusUIFullTargetID ]->flags.uiStatusFlags & SOLDIER_ROBOT ) + if ( gusUIFullTargetID->flags.uiStatusFlags & SOLDIER_ROBOT ) { gfUIMouseOnValidCatcher = 3; } @@ -8947,9 +8947,9 @@ void DrawItemTileCursor( ) // Get AP cost - if ( MercPtrs[ gusUIFullTargetID ]->flags.uiStatusFlags & SOLDIER_ROBOT ) + if ( gusUIFullTargetID->flags.uiStatusFlags & SOLDIER_ROBOT ) { - sAPCost = GetAPsToReloadRobot( gpItemPointerSoldier, MercPtrs[ gusUIFullTargetID ] ); + sAPCost = GetAPsToReloadRobot( gpItemPointerSoldier, gusUIFullTargetID ); } else { @@ -9011,7 +9011,7 @@ void DrawItemTileCursor( ) { if ( gfUIMouseOnValidCatcher ) { - switch( gAnimControl[ MercPtrs[ gubUIValidCatcherID ]->usAnimState ].ubHeight ) + switch( gAnimControl[ gubUIValidCatcherID->usAnimState ].ubHeight ) { case ANIM_STAND: @@ -9029,7 +9029,7 @@ void DrawItemTileCursor( ) break; } - if ( MercPtrs[ gubUIValidCatcherID ]->pathing.bLevel > 0 ) + if ( gubUIValidCatcherID->pathing.bLevel > 0 ) { sEndZ = 0; } @@ -9135,9 +9135,9 @@ BOOLEAN HandleItemPointerClick( INT32 usMapPos ) if ( gfUIFullTargetFound ) { // Force mouse position to guy... - usMapPos = MercPtrs[ gusUIFullTargetID ]->sGridNo; + usMapPos = gusUIFullTargetID->sGridNo; - if ( gAnimControl[ MercPtrs[ gusUIFullTargetID ]->usAnimState ].uiFlags & ANIM_MOVING ) + if ( gAnimControl[ gusUIFullTargetID->usAnimState ].uiFlags & ANIM_MOVING ) { return( FALSE ); } @@ -9380,14 +9380,14 @@ BOOLEAN HandleItemPointerClick( INT32 usMapPos ) sGridNo = usMapPos; // Kaiden: Vehicle Inventory change - Commented the following If test: - //if ( sDist <= PASSING_ITEM_DISTANCE_OKLIFE && gfUIFullTargetFound && MercPtrs[ gusUIFullTargetID ]->bTeam == gbPlayerNum && !AM_AN_EPC( MercPtrs[ gusUIFullTargetID ] ) && !( MercPtrs[ gusUIFullTargetID ]->flags.uiStatusFlags & SOLDIER_VEHICLE ) ) + //if ( sDist <= PASSING_ITEM_DISTANCE_OKLIFE && gfUIFullTargetFound && gusUIFullTargetID->bTeam == gbPlayerNum && !AM_AN_EPC( gusUIFullTargetID ) && !( gusUIFullTargetID->flags.uiStatusFlags & SOLDIER_VEHICLE ) ) // And added this one instead: - if ( ( sDist <= PASSING_ITEM_DISTANCE_OKLIFE && gfUIFullTargetFound && MercPtrs[ gusUIFullTargetID ]->bTeam == gbPlayerNum && !AM_AN_EPC( MercPtrs[ gusUIFullTargetID ] ) ) && !( (!gGameExternalOptions.fVehicleInventory) && (MercPtrs[ gusUIFullTargetID ]->flags.uiStatusFlags & SOLDIER_VEHICLE) ) ) + if ( ( sDist <= PASSING_ITEM_DISTANCE_OKLIFE && gfUIFullTargetFound && gusUIFullTargetID->bTeam == gbPlayerNum && !AM_AN_EPC( gusUIFullTargetID ) ) && !( (!gGameExternalOptions.fVehicleInventory) && (gusUIFullTargetID->flags.uiStatusFlags & SOLDIER_VEHICLE) ) ) { // OK, do the transfer... { - pSoldier = MercPtrs[ gusUIFullTargetID ]; + pSoldier = gusUIFullTargetID; { // Change to inventory.... @@ -9489,7 +9489,7 @@ BOOLEAN HandleItemPointerClick( INT32 usMapPos ) // IF OVER OUR GUY... if ( gfUIFullTargetFound ) { - pSoldier = MercPtrs[ gusUIFullTargetID ]; + pSoldier = gusUIFullTargetID; // Kaiden: Vehicle Inventory change - Commented the following If Test: //if ( pSoldier->bTeam == gbPlayerNum && pSoldier->stats.bLife >= OKLIFE && !AM_AN_EPC( pSoldier ) && !( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) ) @@ -11483,9 +11483,9 @@ void RenderItemPickupMenu( ) Item[gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].object.usItem].usItemClass == IC_LBEGEAR && LoadBearingEquipment[Item[gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].object.usItem].ubClassIndex].lbeClass == BACKPACK && gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].soldierID != NOBODY && - MercPtrs[gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].soldierID]) + gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].soldierID) //swprintf(pStr, L"%s (%s)", ShortItemNames[pObject->usItem], MercPtrs[gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].soldierID]->GetName()); - swprintf(pStr, L"(%s)", MercPtrs[gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].soldierID]->GetName()); + swprintf(pStr, L"(%s)", gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].soldierID->GetName()); else swprintf( pStr, L"%s", ShortItemNames[ pObject->usItem ] ); } @@ -12757,7 +12757,7 @@ BOOLEAN LoadItemCursorFromSavedGame( HWFILE hFile ) } else { - gpItemPointerSoldier = MercPtrs[ SaveStruct.ubSoldierID ]; + gpItemPointerSoldier = SaveStruct.ubSoldierID; } // Inv slot diff --git a/Tactical/Interface Items.h b/Tactical/Interface Items.h index e08f44e3..05192f76 100644 --- a/Tactical/Interface Items.h +++ b/Tactical/Interface Items.h @@ -166,7 +166,7 @@ public: BOOLEAN Save(HWFILE hFile); BOOLEAN Load(HWFILE hFile); - UINT16 ubSoldierID; + SoldierID ubSoldierID; UINT8 ubInvSlot; BOOLEAN fCursorActive; OBJECTTYPE ItemPointerInfo; diff --git a/Tactical/Interface Panels.cpp b/Tactical/Interface Panels.cpp index e5663769..d606dfb7 100644 --- a/Tactical/Interface Panels.cpp +++ b/Tactical/Interface Panels.cpp @@ -569,7 +569,7 @@ void UpdateSelectedSoldier( UINT16 usSoldierID, BOOLEAN fSelect ); void CheckForFacePanelStartAnims( SOLDIERTYPE *pSoldier, INT16 sPanelX, INT16 sPanelY ); void HandleSoldierFaceFlash( SOLDIERTYPE *pSoldier, INT16 sFaceX, INT16 sFaceY ); -BOOLEAN PlayerExistsInSlot( UINT16 ubID ); +BOOLEAN PlayerExistsInSlot( SoldierID ubID ); void UpdateStatColor( UINT32 uiTimer, BOOLEAN fIncrease, BOOLEAN fDamaged, BOOLEAN fAugmented ); // SANDRO - added argument // Flugente - me too extern void UpdateItemHatches(); @@ -6812,7 +6812,7 @@ void TMClickSecondHandInvCallback( MOUSE_REGION * pRegion, INT32 iReason ) } -BOOLEAN PlayerExistsInSlot( UINT16 ubID ) +BOOLEAN PlayerExistsInSlot( SoldierID ubID ) { INT32 cnt; @@ -6870,17 +6870,17 @@ BOOLEAN RemovePlayerFromTeamSlotGivenMercID( UINT16 ubMercID ) } -void AddPlayerToInterfaceTeamSlot( UINT16 ubID ) +void AddPlayerToInterfaceTeamSlot( SoldierID ubID ) { INT32 cnt; // If we are a vehicle don't ever add..... - if ( MercPtrs[ ubID ]->flags.uiStatusFlags & SOLDIER_VEHICLE ) + if ( ubID->flags.uiStatusFlags & SOLDIER_VEHICLE ) { return; } - if ( !( MercPtrs[ ubID ]->flags.uiStatusFlags & ( SOLDIER_DRIVER | SOLDIER_PASSENGER ) ) ) + if ( !( ubID->flags.uiStatusFlags & ( SOLDIER_DRIVER | SOLDIER_PASSENGER ) ) ) { if ( !PlayerExistsInSlot( ubID ) ) { @@ -6899,7 +6899,7 @@ void AddPlayerToInterfaceTeamSlot( UINT16 ubID ) fInterfacePanelDirty = DIRTYLEVEL2; // Set ID to do open anim - MercPtrs[ ubID ]->flags.fUInewMerc = TRUE; + ubID->flags.fUInewMerc = TRUE; break; } @@ -6909,14 +6909,14 @@ void AddPlayerToInterfaceTeamSlot( UINT16 ubID ) else { // anv: for passengers, position on team panel will be linked with seat in vehicle - if ( MercPtrs[ ubID ]->flags.uiStatusFlags & ( SOLDIER_DRIVER | SOLDIER_PASSENGER ) ) + if ( ubID->flags.uiStatusFlags & ( SOLDIER_DRIVER | SOLDIER_PASSENGER ) ) { - SOLDIERTYPE *pVehicle = GetSoldierStructureForVehicle( MercPtrs[ ubID ]->iVehicleId ); + SOLDIERTYPE *pVehicle = GetSoldierStructureForVehicle( ubID->iVehicleId ); if( pVehicle != NULL ) { - for( UINT8 iCounter = 0; iCounter < gNewVehicle[ pVehicleList[ MercPtrs[ ubID ]->iVehicleId ].ubVehicleType ].iNewSeatingCapacities; iCounter++ ) + for( UINT8 iCounter = 0; iCounter < gNewVehicle[ pVehicleList[ ubID->iVehicleId ].ubVehicleType ].iNewSeatingCapacities; iCounter++ ) { - SOLDIERTYPE *pPassenger = pVehicleList[ MercPtrs[ ubID ]->iVehicleId ].pPassengers[ iCounter ]; + SOLDIERTYPE *pPassenger = pVehicleList[ ubID->iVehicleId ].pPassengers[ iCounter ]; if( pPassenger != NULL && pPassenger->ubID == ubID ) { gTeamPanel[ iCounter ].fOccupied = TRUE; @@ -6929,7 +6929,7 @@ void AddPlayerToInterfaceTeamSlot( UINT16 ubID ) fInterfacePanelDirty = DIRTYLEVEL2; // Set ID to do open anim - MercPtrs[ ubID ]->flags.fUInewMerc = TRUE; + ubID->flags.fUInewMerc = TRUE; return; } diff --git a/Tactical/Interface Panels.h b/Tactical/Interface Panels.h index e109ace3..95563cf2 100644 --- a/Tactical/Interface Panels.h +++ b/Tactical/Interface Panels.h @@ -83,11 +83,11 @@ SoldierID GetSMPanelCurrentMerc( ); void UpdateSMPanel( ); BOOLEAN InitTEAMSlots( ); -void AddPlayerToInterfaceTeamSlot( UINT16 ubID ); +void AddPlayerToInterfaceTeamSlot( SoldierID ubID ); BOOLEAN RemovePlayerFromInterfaceTeamSlot( UINT8 ubID ); BOOLEAN GetPlayerIDFromInterfaceTeamSlot( UINT8 ubPanelSlot, UINT16 * pubID ); void RemoveAllPlayersFromSlot( ); -BOOLEAN PlayerExistsInSlot( UINT16 ubID ); +BOOLEAN PlayerExistsInSlot( SoldierID ubID ); BOOLEAN RemovePlayerFromTeamSlotGivenMercID( UINT16 ubMercID ); void CheckForAndAddMercToTeamPanel( SOLDIERTYPE *pSoldier ); void CleanUpStack( OBJECTTYPE * pObj, OBJECTTYPE * pCursorObj ); @@ -105,7 +105,7 @@ void InitOldInventorySystem( ); // ATE TO BE MOVED TO INTERFACE_ITEMS.C extern INT8 gbNewItem[ NUM_INV_SLOTS ]; extern INT8 gbNewItemCycle[ NUM_INV_SLOTS ]; -extern UINT8 gubNewItemMerc; +extern UINT8 gubNewItemMerc; void ShowRadioLocator( SoldierID ubID, UINT8 ubLocatorSpeed ); void EndRadioLocator( UINT16 ubID ); @@ -118,12 +118,12 @@ extern BOOLEAN gfDisableTacticalPanelButtons; typedef struct { - UINT16 ubID; - BOOLEAN fOccupied; + SoldierID ubID; + BOOLEAN fOccupied; } TEAM_PANEL_SLOTS_TYPE; -extern TEAM_PANEL_SLOTS_TYPE gTeamPanel[ NUM_TEAM_SLOTS ]; +extern TEAM_PANEL_SLOTS_TYPE gTeamPanel[ NUM_TEAM_SLOTS ]; diff --git a/Tactical/Item Types.h b/Tactical/Item Types.h index 2034d16b..db414597 100644 --- a/Tactical/Item Types.h +++ b/Tactical/Item Types.h @@ -1,7 +1,7 @@ #ifndef ITEM_TYPES_H #define ITEM_TYPES_H -#include "types.h" +#include "Overhead Types.h" #include #include // THE_BOB : added for pocket popup definitions @@ -408,15 +408,15 @@ namespace ObjectDataStructs { struct OBJECT_BOMBS_AND_OTHER { // this is used by placed bombs, switches, and the action item INT16 bBombStatus; // % status - INT8 bDetonatorType; // timed, remote, or pressure-activated + INT8 bDetonatorType; // timed, remote, or pressure-activated UINT16 usBombItem; // the usItem of the bomb. union { INT8 bDelay; // >=0 values used only INT8 bFrequency; // >=0 values used only }; - UINT16 ubBombOwner; // side which placed the bomb - UINT8 bActionValue; // this is used by the ACTION_ITEM fake item + SoldierID ubBombOwner; // side which placed the bomb + UINT8 bActionValue; // this is used by the ACTION_ITEM fake item union { UINT8 ubTolerance; // tolerance value for panic triggers diff --git a/Tactical/Items.cpp b/Tactical/Items.cpp index cbcdfcd5..f17ed417 100644 --- a/Tactical/Items.cpp +++ b/Tactical/Items.cpp @@ -15287,10 +15287,10 @@ BOOLEAN ObjectIsExternalFeeder(SOLDIERTYPE* pSoldier, OBJECTTYPE * pObject) if ( !pSoldier || !pObject) return( FALSE ); - UINT16 usSoldierFeedingTarget1 = 0; + SoldierID usSoldierFeedingTarget1 = NOBODY; UINT16 usGunSlot1 = 0; UINT16 usAmmoSlot1 = 0; - UINT16 usSoldierFeedingTarget2 = 0; + SoldierID usSoldierFeedingTarget2 = NOBODY; UINT16 usGunSlot2 = 0; UINT16 usAmmoSlot2 = 0; if ( pSoldier->IsFeedingExternal(&usSoldierFeedingTarget1, &usGunSlot1, &usAmmoSlot1, &usSoldierFeedingTarget2, &usGunSlot2, &usAmmoSlot2) ) @@ -15345,10 +15345,10 @@ OBJECTTYPE* GetExternalFeedingObject(SOLDIERTYPE* pSoldier, OBJECTTYPE * pObject continue; // we check if that guy is feeding someone, and that someone is really us - UINT16 usTeamSoldierFeedingTarget1 = 0; + SoldierID usTeamSoldierFeedingTarget1 = NOBODY; UINT16 usGunSlot1 = 0; UINT16 usAmmoSlot1 = 0; - UINT16 usTeamSoldierFeedingTarget2 = 0; + SoldierID usTeamSoldierFeedingTarget2 = NOBODY; UINT16 usGunSlot2 = 0; UINT16 usAmmoSlot2 = 0; if ( pTeamSoldier->IsFeedingExternal(&usTeamSoldierFeedingTarget1, &usGunSlot1, &usAmmoSlot1, &usTeamSoldierFeedingTarget2, &usGunSlot2, &usAmmoSlot2) ) diff --git a/Tactical/LOS.cpp b/Tactical/LOS.cpp index 9d9154c6..fff95973 100644 --- a/Tactical/LOS.cpp +++ b/Tactical/LOS.cpp @@ -4390,7 +4390,7 @@ UINT8 SoldierToSoldierBodyPartChanceToGetThrough( SOLDIERTYPE * pStartSoldier, S return( ChanceToGetThrough( pStartSoldier, (FLOAT) sX, (FLOAT) sY, dEndZPos ) ); } -UINT8 SoldierToLocationChanceToGetThrough( SOLDIERTYPE * pStartSoldier, INT32 sGridNo, INT8 bLevel, INT8 bCubeLevel, UINT16 ubTargetID ) +UINT8 SoldierToLocationChanceToGetThrough( SOLDIERTYPE * pStartSoldier, INT32 sGridNo, INT8 bLevel, INT8 bCubeLevel, SoldierID ubTargetID ) { FLOAT dEndZPos; INT16 sXPos; diff --git a/Tactical/LOS.h b/Tactical/LOS.h index 01bd9679..a03b4216 100644 --- a/Tactical/LOS.h +++ b/Tactical/LOS.h @@ -152,7 +152,7 @@ UINT8 SoldierToSoldierChanceToGetThrough( SOLDIERTYPE * pStartSoldier, SOLDIERTY UINT8 SoldierToSoldierBodyPartChanceToGetThrough( SOLDIERTYPE * pStartSoldier, SOLDIERTYPE * pEndSoldier, UINT8 ubAimLocation ); UINT8 AISoldierToSoldierChanceToGetThrough( SOLDIERTYPE * pStartSoldier, SOLDIERTYPE * pEndSoldier ); UINT8 AISoldierToLocationChanceToGetThrough( SOLDIERTYPE * pStartSoldier, INT32 sGridNo, INT8 bLevel, INT8 bCubeLevel ); -UINT8 SoldierToLocationChanceToGetThrough( SOLDIERTYPE * pStartSoldier, INT32 sGridNo, INT8 bLevel, INT8 bCubeLevel, UINT16 ubTargetID ); +UINT8 SoldierToLocationChanceToGetThrough( SOLDIERTYPE * pStartSoldier, INT32 sGridNo, INT8 bLevel, INT8 bCubeLevel, SoldierID ubTargetID ); INT32 SoldierToLocationWindowTest( SOLDIERTYPE * pStartSoldier, INT32 sEndGridNo ); // sevenfm: AI LOS functions INT32 LOS_Raised(SOLDIERTYPE * pStartSoldier, SOLDIERTYPE * pEndSoldier, int iTileSightLimit = CALC_FROM_ALL_DIRS, UINT8 ubAimLocation = LOS_POS); @@ -261,4 +261,4 @@ void DamageRiotShield( SOLDIERTYPE* pSoldier, INT32& rsDamage, INT32& rsSecondar extern INT8 GetStealth(SOLDIERTYPE* pSoldier); extern INT8 GetSightAdjustmentBasedOnLBE(SOLDIERTYPE* pSoldier); -#endif \ No newline at end of file +#endif diff --git a/Tactical/Overhead.h b/Tactical/Overhead.h index d001ad45..e9a09bbb 100644 --- a/Tactical/Overhead.h +++ b/Tactical/Overhead.h @@ -128,7 +128,7 @@ struct TacticalStatusType BOOLEAN fCantGetThrough; INT32 sCantGetThroughGridNo; INT32 sCantGetThroughSoldierGridNo; - UINT16 ubCantGetThroughID; + SoldierID ubCantGetThroughID; BOOLEAN fDidGameJustStart; BOOLEAN fStatChangeCheatOn; UINT8 ubLastRequesterTargetID; diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index 37cf962a..79fd04e8 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -2285,14 +2285,13 @@ void SOLDIERTYPE::CalcNewActionPoints( void ) void SOLDIERTYPE::DoNinjaAttack( void ) { - //UINT32 uiMercFlags; - UINT16 usSoldierIndex; - SOLDIERTYPE *pTSoldier; - UINT8 ubTDirection; - UINT8 ubTargetStance; + //UINT32 uiMercFlags; + SOLDIERTYPE *pTSoldier; + UINT8 ubTDirection; + UINT8 ubTargetStance; - usSoldierIndex = WhoIsThere2( this->sTargetGridNo, this->pathing.bLevel ); + SoldierID usSoldierIndex = WhoIsThere2( this->sTargetGridNo, this->pathing.bLevel ); if ( usSoldierIndex != NOBODY ) { GetSoldier( &pTSoldier, usSoldierIndex ); @@ -9449,8 +9448,8 @@ void SOLDIERTYPE::BeginSoldierClimbUpRoof(void) return;//hayden disable climbing roof } - INT8 bNewDirection; - UINT16 ubWhoIsThere; + INT8 bNewDirection; + SoldierID ubWhoIsThere; if (FindHeigherLevel(this, this->sGridNo, this->ubDirection, &bNewDirection) && (this->pathing.bLevel == 0)) { @@ -9623,8 +9622,8 @@ void SOLDIERTYPE::BeginSoldierClimbWindow( void ) void SOLDIERTYPE::BeginSoldierClimbWall( void ) { - INT8 bNewDirection; - UINT16 ubWhoIsThere; + INT8 bNewDirection; + SoldierID ubWhoIsThere; if ( FindWallJumpDirection( this, this->sGridNo, this->ubDirection, &bNewDirection ) && (this->pathing.bLevel == 0) ) { @@ -9660,8 +9659,8 @@ void SOLDIERTYPE::BeginSoldierClimbWall( void ) void SOLDIERTYPE::BeginSoldierClimbWallUp( void ) { - INT8 bNewDirection; - UINT16 ubWhoIsThere; + INT8 bNewDirection; + SoldierID ubWhoIsThere; if ( FindLowerLevelWall( this, this->sGridNo, this->ubDirection, &bNewDirection ) && (this->pathing.bLevel > 0) ) { @@ -11309,8 +11308,8 @@ BOOLEAN SOLDIERTYPE::CheckSoldierHitRoof( void ) void SOLDIERTYPE::BeginSoldierClimbDownRoof(void) { - INT8 bNewDirection; - UINT16 ubWhoIsThere; + INT8 bNewDirection; + SoldierID ubWhoIsThere; if (FindLowerLevel(this, this->sGridNo, this->ubDirection, &bNewDirection) && (this->pathing.bLevel > 0)) { @@ -12469,7 +12468,7 @@ void SOLDIERTYPE::EVENT_SoldierBeginBladeAttack( INT32 sGridNo, UINT8 ubDirectio { SOLDIERTYPE *pTSoldier; //UINT32 uiMercFlags; - UINT16 usSoldierIndex; + SoldierID usSoldierIndex; UINT8 ubTDirection; ROTTING_CORPSE *pCorpse; @@ -12692,7 +12691,7 @@ void SOLDIERTYPE::EVENT_SoldierBeginPunchAttack( INT32 sGridNo, UINT8 ubDirectio BOOLEAN fMartialArtist = FALSE; SOLDIERTYPE *pTSoldier; //UINT32 uiMercFlags; - UINT16 usSoldierIndex; + SoldierID usSoldierIndex; UINT8 ubTDirection; UINT16 usItem; @@ -15148,7 +15147,7 @@ void SOLDIERTYPE::InventoryExplosion( void ) } // Flugente: do we currently provide ammo (pAmmoSlot) for someone else's (pubId) gun (pGunSlot)? -BOOLEAN SOLDIERTYPE::IsFeedingExternal( UINT16 * pubId1, UINT16* pGunSlot1, UINT16* pAmmoSlot1, UINT16 * pubId2, UINT16* pGunSlot2, UINT16* pAmmoSlot2 ) +BOOLEAN SOLDIERTYPE::IsFeedingExternal( SoldierID * pubId1, UINT16* pGunSlot1, UINT16* pAmmoSlot1, SoldierID * pubId2, UINT16* pGunSlot2, UINT16* pAmmoSlot2 ) { // make sure we have to check this... if ( gGameExternalOptions.ubExternalFeeding == 0 ) diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index 81498083..eebd00ee 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -1839,7 +1839,7 @@ public: void InventoryExplosion( void ); // Flugente: do we currently provide ammo (pAmmoSlot) for someone else's (pubId) gun (pGunSlot)? - BOOLEAN IsFeedingExternal(UINT16 * pubId1, UINT16* pGunSlot1, UINT16* pAmmoSlot1, UINT16 * pubId2, UINT16* pGunSlot2, UINT16* pAmmoSlot2); + BOOLEAN IsFeedingExternal(SoldierID * pubId1, UINT16* pGunSlot1, UINT16* pAmmoSlot1, SoldierID* pubId2, UINT16* pGunSlot2, UINT16* pAmmoSlot2); // Flugente: return first found object with a specific flag from our inventory OBJECTTYPE* GetObjectWithFlag( UINT64 aFlag ); diff --git a/Tactical/Vehicles.cpp b/Tactical/Vehicles.cpp index bf7c5f98..b4e6ad96 100644 --- a/Tactical/Vehicles.cpp +++ b/Tactical/Vehicles.cpp @@ -176,7 +176,7 @@ INT16 sVehicleInternalOrigArmorValues[ NUMBER_OF_TYPES_OF_VEHICLES ][ NUMBER_OF_ // set the driver of the vehicle -void SetDriver( INT32 iID, UINT16 ubID ); +void SetDriver( INT32 iID, SoldierID ubID ); //void RemoveSoldierFromVehicleBetweenSectors( pSoldier, iId ); @@ -1556,7 +1556,7 @@ SOLDIERTYPE *GetDriver( INT32 iID ) INT32 iCounter; if( pVehicleList[ iID ].ubDriver != NOBODY ) { - return( MercPtrs[ pVehicleList[ iID ].ubDriver ] ); + return( pVehicleList[ iID ].ubDriver ); } else { @@ -1573,25 +1573,27 @@ SOLDIERTYPE *GetDriver( INT32 iID ) } -void SetDriver( INT32 iID, UINT16 ubID ) +void SetDriver( INT32 iID, SoldierID ubID ) { // anv: first make sure previous driver won't be driver anymore - if( pVehicleList[ iID ].ubDriver != NOBODY && MercPtrs[ pVehicleList[ iID ].ubDriver ]->iVehicleId == iID ) + SOLDIERTYPE* prevDriver = pVehicleList[iID].ubDriver; + + if( prevDriver != NOBODY && prevDriver->iVehicleId == iID ) { - if( MercPtrs[ pVehicleList[ iID ].ubDriver ] ) + if( prevDriver ) { - MercPtrs[ pVehicleList[ iID ].ubDriver ]->flags.uiStatusFlags &= ~(SOLDIER_DRIVER); - if( GetSeatIndexFromSoldier( MercPtrs[ pVehicleList[ iID ].ubDriver ] ) != (-1) ) + prevDriver->flags.uiStatusFlags &= ~(SOLDIER_DRIVER); + if( GetSeatIndexFromSoldier( prevDriver ) != (-1) ) { - MercPtrs[ pVehicleList[ iID ].ubDriver ]->flags.uiStatusFlags |= SOLDIER_PASSENGER; + prevDriver->flags.uiStatusFlags |= SOLDIER_PASSENGER; } } } // set proper flags if( ubID != NOBODY ) { - MercPtrs[ ubID ]->flags.uiStatusFlags |= SOLDIER_DRIVER; - MercPtrs[ ubID ]->flags.uiStatusFlags &= ~(SOLDIER_PASSENGER); + ubID->flags.uiStatusFlags |= SOLDIER_DRIVER; + ubID->flags.uiStatusFlags &= ~(SOLDIER_PASSENGER); } pVehicleList[ iID ].ubDriver = ubID; } @@ -1821,7 +1823,7 @@ BOOLEAN ExitVehicle( SOLDIERTYPE *pSoldier ) } else { - UINT16 usTempSelectedSoldier = gusSelectedSoldier; + SoldierID usTempSelectedSoldier = gusSelectedSoldier; SetCurrentSquad( CurrentSquad(), TRUE ); @@ -1984,7 +1986,7 @@ void AddPassangersToTeamPanel( INT32 iId ) } -void VehicleTakeDamage( UINT8 ubID, UINT8 ubReason, INT16 sDamage, INT32 sGridNo, UINT16 ubAttackerID ) +void VehicleTakeDamage( UINT8 ubID, UINT8 ubReason, INT16 sDamage, INT32 sGridNo, SoldierID ubAttackerID ) { if ( ubReason != TAKE_DAMAGE_GAS_FIRE && ubReason != TAKE_DAMAGE_GAS_NOTFIRE ) { @@ -2013,7 +2015,7 @@ void VehicleTakeDamage( UINT8 ubID, UINT8 ubReason, INT16 sDamage, INT32 sGridNo } -void HandleCriticalHitForVehicleInLocation( UINT8 ubID, INT16 sDmg, INT32 sGridNo, UINT16 ubAttackerID ) +void HandleCriticalHitForVehicleInLocation( UINT8 ubID, INT16 sDmg, INT32 sGridNo, SoldierID ubAttackerID ) { // check state the armor was s'posed to be in vs. the current state..the difference / orig state is % chance // that a critical hit will occur diff --git a/Tactical/Vehicles.h b/Tactical/Vehicles.h index ceef6143..6cae9f84 100644 --- a/Tactical/Vehicles.h +++ b/Tactical/Vehicles.h @@ -289,7 +289,7 @@ typedef struct BOOLEAN fBetweenSectors; // between sectors? INT32 sGridNo; // location in tactical SOLDIERTYPE *pPassengers[ MAXPASSENGERS ]; - UINT16 ubDriver; + SoldierID ubDriver; INT16 sInternalHitLocations[ NUMBER_OF_EXTERNAL_HIT_LOCATIONS_ON_VEHICLE ]; INT16 sArmourType; INT16 sExternalArmorLocationsStatus[ NUMBER_OF_EXTERNAL_HIT_LOCATIONS_ON_VEHICLE ]; @@ -404,7 +404,7 @@ BOOLEAN SwapVehicleSeat( SOLDIERTYPE *pVehicle, SOLDIERTYPE *pSoldier, UINT8 ubS void AddPassangersToTeamPanel( INT32 iId ); -void VehicleTakeDamage( UINT8 ubID, UINT8 ubReason, INT16 sDamage, INT32 sGridNo , UINT16 ubAttackerID ); +void VehicleTakeDamage( UINT8 ubID, UINT8 ubReason, INT16 sDamage, INT32 sGridNo , SoldierID ubAttackerID ); // the soldiertype containing this tactical incarnation of this vehicle SOLDIERTYPE * GetSoldierStructureForVehicle( INT32 iId ); @@ -415,7 +415,7 @@ void AdjustVehicleAPs( SOLDIERTYPE *pSoldier, INT16 *pubPoints ); //INT16 GetOrigInternalArmorValueForVehicleInLocation( UINT8 ubID, UINT8 ubLocation ); // handle crit hit to vehicle in this location -void HandleCriticalHitForVehicleInLocation( UINT8 ubID, INT16 sDmg, INT32 sGridNo, UINT16 ubAttackerID ); +void HandleCriticalHitForVehicleInLocation( UINT8 ubID, INT16 sDmg, INT32 sGridNo, SoldierID ubAttackerID ); // ste up armor values for this vehicle void SetUpArmorForVehicle( UINT8 ubID ); From b9641d4c90759c9fffe1c1f955227349f093d9e7 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 17 Nov 2024 20:52:12 +0200 Subject: [PATCH 086/192] Convert to SoldierID --- Tactical/Overhead.cpp | 52 +++++++++++++++++++++---------------------- TacticalAI/AIMain.cpp | 9 +++----- TacticalAI/ai.h | 2 +- 3 files changed, 29 insertions(+), 34 deletions(-) diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index db65278d..77d5ea2b 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -1508,12 +1508,10 @@ BOOLEAN ExecuteOverhead( ) } else // otherwise determine our target position { - SOLDIERTYPE *pTarget; - UINT16 usSoldierIndex; - usSoldierIndex = WhoIsThere2( pSoldier->aiData.sPendingActionData2, pSoldier->pathing.bLevel ); + SoldierID usSoldierIndex = WhoIsThere2( pSoldier->aiData.sPendingActionData2, pSoldier->pathing.bLevel ); if ( usSoldierIndex != NOBODY ) { - pTarget = MercPtrs[ usSoldierIndex ]; + SOLDIERTYPE* pTarget = usSoldierIndex; // we always need to crouch to prone target if ( gAnimControl[ pTarget->usAnimState ].ubEndHeight == ANIM_PRONE ) @@ -3659,8 +3657,8 @@ void HandlePlayerTeamMemberDeath( SOLDIERTYPE *pSoldier ) { if ( pSoldier->ubAutoBandagingMedic != NOBODY ) { - DebugAI(AI_MSG_INFO, MercPtrs[pSoldier->ubAutoBandagingMedic], String("CancelAIAction: stop autobandaging in HandlePlayerTeamMemberDeath")); - CancelAIAction( MercPtrs[ pSoldier->ubAutoBandagingMedic ], TRUE ); + DebugAI(AI_MSG_INFO, pSoldier->ubAutoBandagingMedic, String("CancelAIAction: stop autobandaging in HandlePlayerTeamMemberDeath")); + CancelAIAction( pSoldier->ubAutoBandagingMedic, TRUE ); } } @@ -5087,7 +5085,7 @@ extern BOOLEAN InternalOkayToAddStructureToWorld( INT32 sBaseGridNo, INT8 bLevel // NB if making changes don't forget to update NewOKDestinationAndDirection BOOLEAN NewOKDestination( SOLDIERTYPE * pCurrSoldier, INT32 sGridNo, BOOLEAN fPeopleToo, INT8 bLevel ) { - UINT16 bPerson; + SoldierID bPerson; STRUCTURE *pStructure; INT16 sDesiredLevel; BOOLEAN fOKCheckStruct; @@ -5112,7 +5110,7 @@ BOOLEAN NewOKDestination( SOLDIERTYPE * pCurrSoldier, INT32 sGridNo, BOOLEAN fPe { if ( pCurrSoldier->bTeam == gbPlayerNum ) { - if ( ( Menptr[ bPerson ].bVisible >= 0) || ( gTacticalStatus.uiFlags & SHOW_ALL_MERCS ) ) + if ( ( bPerson->bVisible >= 0) || ( gTacticalStatus.uiFlags & SHOW_ALL_MERCS ) ) return( FALSE ); // if someone there it's NOT OK } else @@ -5234,7 +5232,7 @@ BOOLEAN NewOKDestination( SOLDIERTYPE * pCurrSoldier, INT32 sGridNo, BOOLEAN fPe // NB if making changes don't forget to update NewOKDestination INT16 NewOKDestinationAndDirection( SOLDIERTYPE * pCurrSoldier, INT32 sGridNo, INT8 bDirection, BOOLEAN fPeopleToo, INT8 bLevel ) { - UINT16 bPerson; + SoldierID bPerson; STRUCTURE *pStructure; INT16 sDesiredLevel; BOOLEAN fOKCheckStruct; @@ -5247,7 +5245,7 @@ INT16 NewOKDestinationAndDirection( SOLDIERTYPE * pCurrSoldier, INT32 sGridNo, I { if ( pCurrSoldier->bTeam == gbPlayerNum ) { - if ( ( Menptr[ bPerson ].bVisible >= 0) || ( gTacticalStatus.uiFlags & SHOW_ALL_MERCS ) ) + if ( ( bPerson->bVisible >= 0) || ( gTacticalStatus.uiFlags & SHOW_ALL_MERCS ) ) return( FALSE ); // if someone there it's NOT OK } else @@ -5845,7 +5843,7 @@ INT32 FindNextToAdjacentGridEx( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 *pub UINT8 ubWallOrientation; BOOLEAN fCheckGivenGridNo = TRUE; UINT8 ubTestDirection; - UINT16 ubWhoIsThere; + SoldierID ubWhoIsThere; // CHECK IF WE WANT TO FORCE GRIDNO TO PERSON if ( psAdjustedGridNo != NULL ) @@ -6151,7 +6149,7 @@ INT32 FindNextToAdjacentGridEx( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 *pub INT32 FindAdjacentPunchTarget( SOLDIERTYPE * pSoldier, SOLDIERTYPE * pTargetSoldier, INT32 * psAdjustedTargetGridNo, UINT8 * pubDirection ) { INT32 sSpot; - UINT16 ubGuyThere; + SoldierID ubGuyThere; for ( UINT8 cnt = 0; cnt < NUM_WORLD_DIRECTIONS; ++cnt ) { @@ -6221,13 +6219,13 @@ BOOLEAN UIOKMoveDestination( SOLDIERTYPE *pSoldier, INT32 usMapPos ) void HandleTeamServices( UINT8 ubTeamNum ) { - INT32 cnt; - SOLDIERTYPE *pTeamSoldier, *pTargetSoldier; - UINT32 uiPointsUsed; - UINT16 usSoldierIndex; - UINT16 usKitPts; - INT8 bSlot; - BOOLEAN fDone; + INT32 cnt; + SOLDIERTYPE *pTeamSoldier, *pTargetSoldier; + UINT32 uiPointsUsed; + SoldierID usSoldierIndex; + UINT16 usKitPts; + INT8 bSlot; + BOOLEAN fDone; // IF IT'S THE SELECTED GUY, MAKE ANOTHER SELECTED! cnt = gTacticalStatus.Team[ ubTeamNum ].bFirstID; @@ -6246,7 +6244,7 @@ void HandleTeamServices( UINT8 ubTeamNum ) usSoldierIndex = WhoIsThere2( pTeamSoldier->sTargetGridNo, pTeamSoldier->pathing.bLevel ); if ( usSoldierIndex != NOBODY ) { - pTargetSoldier = MercPtrs[ usSoldierIndex ]; + pTargetSoldier = usSoldierIndex; if ( pTargetSoldier->ubServiceCount ) { @@ -6313,11 +6311,11 @@ void HandleTeamServices( UINT8 ubTeamNum ) void HandlePlayerServices( SOLDIERTYPE *pTeamSoldier ) { SOLDIERTYPE *pTargetSoldier; - UINT32 uiPointsUsed; - UINT16 usSoldierIndex; - UINT16 usKitPts; - INT8 bSlot; - BOOLEAN fDone = FALSE; + UINT32 uiPointsUsed; + SoldierID usSoldierIndex; + UINT16 usKitPts; + INT8 bSlot; + BOOLEAN fDone = FALSE; if ( pTeamSoldier->stats.bLife >= OKLIFE && pTeamSoldier->bActive ) { @@ -6330,7 +6328,7 @@ void HandlePlayerServices( SOLDIERTYPE *pTeamSoldier ) if ( usSoldierIndex != NOBODY ) { - pTargetSoldier = MercPtrs[ usSoldierIndex ]; + pTargetSoldier = usSoldierIndex; if ( pTargetSoldier->ubServiceCount ) { @@ -11384,7 +11382,7 @@ void CheckChatPartners() { pSoldier = MercPtrs[ubLoop]; - if ( pSoldier && pSoldier->bVisible && pSoldier->usChatPartnerID != NOBODY && MercPtrs[pSoldier->usChatPartnerID]->bVisible ) + if ( pSoldier && pSoldier->bVisible && pSoldier->usChatPartnerID != NOBODY && pSoldier->usChatPartnerID->bVisible ) { INT16 sScreenX, sScreenY; diff --git a/TacticalAI/AIMain.cpp b/TacticalAI/AIMain.cpp index a0d63c71..f3970d1d 100644 --- a/TacticalAI/AIMain.cpp +++ b/TacticalAI/AIMain.cpp @@ -1254,13 +1254,10 @@ void FreeUpNPCFromPendingAction( SOLDIERTYPE *pSoldier ) } } -void FreeUpNPCFromAttacking(UINT16 ubID) +void FreeUpNPCFromAttacking(SoldierID ubID) { - SOLDIERTYPE *pSoldier; - - pSoldier = MercPtrs[ubID]; - ActionDone(pSoldier); - pSoldier->pathing.bNeedToLook = TRUE; + ActionDone(ubID); + ubID->pathing.bNeedToLook = TRUE; } void FreeUpNPCFromLoweringGun( SOLDIERTYPE *pSoldier ) diff --git a/TacticalAI/ai.h b/TacticalAI/ai.h index 5f1da394..a6603ae3 100644 --- a/TacticalAI/ai.h +++ b/TacticalAI/ai.h @@ -220,7 +220,7 @@ BOOLEAN FindRoofClimbingPoints( SOLDIERTYPE * pSoldier, INT16 sDesiredSpot ); INT32 FindSpotMaxDistFromOpponents(SOLDIERTYPE *pSoldier); INT32 FindSweetCoverSpot(SOLDIERTYPE *pSoldier); -void FreeUpNPCFromAttacking(UINT16 ubID); +void FreeUpNPCFromAttacking(SoldierID ubID); void FreeUpNPCFromPendingAction( SOLDIERTYPE * pSoldier ); void FreeUpNPCFromTurning(SOLDIERTYPE *pSoldier, INT8 bLook); void FreeUpNPCFromStanceChange(SOLDIERTYPE *pSoldier ); From b6e8b0c5ffd7ae78257d0de75f5122e00468f98a Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 17 Nov 2024 21:09:13 +0200 Subject: [PATCH 087/192] Convert to SoldierID --- Tactical/Soldier Control.cpp | 8 ++++---- Tactical/Weapons.cpp | 2 +- Tactical/Weapons.h | 2 +- TileEngine/LightEffects.cpp | 4 ++-- TileEngine/LightEffects.h | 8 ++++---- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index 79fd04e8..aa96c7e6 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -24132,8 +24132,8 @@ void SetSoldierPersonalLightLevel( SOLDIERTYPE *pSoldier ) void BeginSoldierClimbWallUp( SOLDIERTYPE *pSoldier ) { - INT8 bNewDirection; - UINT16 ubWhoIsThere; + INT8 bNewDirection; + SoldierID ubWhoIsThere; if ( FindLowerLevelWall( pSoldier, pSoldier->sGridNo, pSoldier->ubDirection, &bNewDirection ) && (pSoldier->pathing.bLevel > 0) ) { @@ -25356,10 +25356,10 @@ UINT16 GridNoSpotterCTHBonus( SOLDIERTYPE* pSniper, INT32 sGridNo, INT8 bTeam ) { BOOLEAN targetseen = FALSE; - UINT16 usID = WhoIsThere2( sGridNo, pSniper->bTargetLevel ); + SoldierID usID = WhoIsThere2( sGridNo, pSniper->bTargetLevel ); // is someone is at the sGridNo, check wether the spotter can see any part of him check wether head can be seen) - if ( usID != NOBODY && SoldierToSoldierLineOfSightTest( pSoldier, MercPtrs[usID], 0, NO_DISTANCE_LIMIT, AIM_SHOT_HEAD ) > 0 ) + if ( usID != NOBODY && SoldierToSoldierLineOfSightTest( pSoldier, usID, 0, NO_DISTANCE_LIMIT, AIM_SHOT_HEAD ) > 0 ) targetseen = TRUE; // otherwise check wether we can see the ground floor else if ( SoldierToVirtualSoldierLineOfSightTest( pSoldier, sGridNo, pSniper->pathing.bLevel, ANIM_PRONE, FALSE, NO_DISTANCE_LIMIT ) > 0 ) diff --git a/Tactical/Weapons.cpp b/Tactical/Weapons.cpp index b2436930..ebe43661 100644 --- a/Tactical/Weapons.cpp +++ b/Tactical/Weapons.cpp @@ -12144,7 +12144,7 @@ FLOAT CalcNewChanceToHitAimTraitBonus(SOLDIERTYPE *pSoldier, FLOAT fAimCap, FLOA extern BOOLEAN IsRoofPresentAtGridNo( INT32 sGridNo ); // Flugente: fire item from A to B (intended for mortarshells and launchable grenades) -BOOLEAN ArtilleryStrike( UINT16 usItem, UINT16 ubOwnerID, UINT32 usStartingGridNo, UINT32 usTargetMapPos ) +BOOLEAN ArtilleryStrike( UINT16 usItem, SoldierID ubOwnerID, UINT32 usStartingGridNo, UINT32 usTargetMapPos ) { FLOAT dForce, dDegrees; INT16 sDestX, sDestY, sSrcX, sSrcY; diff --git a/Tactical/Weapons.h b/Tactical/Weapons.h index 958d8642..650d18f3 100644 --- a/Tactical/Weapons.h +++ b/Tactical/Weapons.h @@ -536,7 +536,7 @@ FLOAT GetOverheatJamThreshold( OBJECTTYPE *pObj ); FLOAT GetOverheatDamageThresholdModifier( OBJECTTYPE *pObj ); FLOAT GetOverheatDamageThreshold( OBJECTTYPE *pObj ); -BOOLEAN ArtilleryStrike( UINT16 usItem, UINT16 ubOwnerID, UINT32 usStartingGridNo, UINT32 usTargetMapPos ); +BOOLEAN ArtilleryStrike( UINT16 usItem, SoldierID ubOwnerID, UINT32 usStartingGridNo, UINT32 usTargetMapPos ); // Flugente: functions for using several barrels at once UINT8 GetNextBarrelMode( UINT16 usItem, UINT8 aBarrelMode ); diff --git a/TileEngine/LightEffects.cpp b/TileEngine/LightEffects.cpp index ea734df8..cc51640e 100644 --- a/TileEngine/LightEffects.cpp +++ b/TileEngine/LightEffects.cpp @@ -537,7 +537,7 @@ void ResetLightEffects() } // Flugente: create and destroy light sources tied to a person -void CreatePersonalLight( INT32 sGridNo, UINT16 ubID ) +void CreatePersonalLight( INT32 sGridNo, SoldierID ubID ) { INT32 iLightIndex = NewLightEffectInternal( sGridNo, 0, 1 ); @@ -548,7 +548,7 @@ void CreatePersonalLight( INT32 sGridNo, UINT16 ubID ) } } -void RemovePersonalLights( UINT16 ubID ) +void RemovePersonalLights( SoldierID ubID ) { LIGHTEFFECT *pLight; diff --git a/TileEngine/LightEffects.h b/TileEngine/LightEffects.h index 869d2e82..00b9b603 100644 --- a/TileEngine/LightEffects.h +++ b/TileEngine/LightEffects.h @@ -25,7 +25,7 @@ typedef struct // Flugente: added variables necessary for dynamic (flash-)lighting INT32 flags; - UINT16 ubOwner; + SoldierID ubOwner; } LIGHTEFFECT; @@ -55,7 +55,7 @@ void ResetLightEffects(); BOOLEAN IsLightEffectAtTile( INT32 sGridNo ); // Flugente: create and destroy light sources tied to a person -void CreatePersonalLight( INT32 sGridNo, UINT16 ubID ); -void RemovePersonalLights( UINT16 ubID ); +void CreatePersonalLight( INT32 sGridNo, SoldierID ubID ); +void RemovePersonalLights(SoldierID ubID ); -#endif \ No newline at end of file +#endif From ef9aa1b027aa4c63ee8448a18ae752e636141fd4 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 17 Nov 2024 22:29:31 +0200 Subject: [PATCH 088/192] Convert to SoldierID --- Multiplayer/client.cpp | 36 ++++---- Multiplayer/connect.h | 12 +-- Tactical/Bullets.h | 66 +++++++-------- Tactical/Dialogue Control.cpp | 4 +- Tactical/Interface Dialogue.cpp | 20 ++--- Tactical/Items.cpp | 2 +- Tactical/Items.h | 2 +- Tactical/Ja25_Tactical.cpp | 24 +++--- Tactical/Ja25_Tactical.h | 4 +- Tactical/LOS.cpp | 85 ++++++++++--------- Tactical/LOS.h | 2 +- Tactical/Soldier Control.cpp | 4 +- Tactical/Soldier Control.h | 2 +- Tactical/TeamTurns.cpp | 6 +- Tactical/Weapons.cpp | 62 +++++++------- Tactical/Weapons.h | 2 +- Tactical/bullets.cpp | 6 +- TacticalAI/AIUtils.cpp | 20 ++--- TacticalAI/ai.h | 20 ++--- TileEngine/Explosion Control.cpp | 136 +++++++++++++++---------------- TileEngine/Explosion Control.h | 12 +-- TileEngine/SmokeEffects.cpp | 2 +- TileEngine/SmokeEffects.h | 4 +- TileEngine/Tile Animation.h | 100 +++++++++++------------ TileEngine/structure.cpp | 2 +- TileEngine/structure.h | 2 +- 26 files changed, 318 insertions(+), 319 deletions(-) diff --git a/Multiplayer/client.cpp b/Multiplayer/client.cpp index f6c28480..2b65f0fc 100644 --- a/Multiplayer/client.cpp +++ b/Multiplayer/client.cpp @@ -535,18 +535,18 @@ typedef struct typedef struct { - UINT8 ubDamageFunc; // 1 - gas damage , 2 - explosive damage - UINT16 ubSoldierID; - UINT16 usExplosiveClassID; - INT16 sSubsequent; - BOOL fRecompileMovementCosts; - INT16 sWoundAmt; - INT16 sBreathAmt; - UINT16 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]; @@ -2920,7 +2920,7 @@ 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, UINT16 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 @@ -3229,11 +3229,11 @@ void recievePLANTEXPLOSIVE (RPCParameters *rpcParameters) } } -void send_detonate_explosive (UINT32 uiWorldIndex, UINT16 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 @@ -3466,7 +3466,7 @@ void recieveDISARMEXPLOSIVE (RPCParameters *rpcParameters) } } -void send_spreadeffect ( INT32 sGridNo, UINT8 ubRadius, UINT16 usItem, UINT16 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; @@ -3551,7 +3551,7 @@ void recieveSPREADEFFECT (RPCParameters *rpcParameters) } } -void send_newsmokeeffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT16 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; @@ -3634,7 +3634,7 @@ void send_gasdamage( SOLDIERTYPE * pSoldier, UINT16 usExplosiveClassID, INT16 sS 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( UINT16 ubPerson, UINT16 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; diff --git a/Multiplayer/connect.h b/Multiplayer/connect.h index 75f5d48b..31fe44ea 100644 --- a/Multiplayer/connect.h +++ b/Multiplayer/connect.h @@ -111,19 +111,19 @@ 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, UINT16 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); void send_grenade_result (float xPos, float yPos, float zPos, INT32 sGridNo, SoldierID ubOwnerID, INT32 iRealObjectID, bool bIsDud); void send_plant_explosive (UINT16 ubID,UINT16 usItem,UINT8 ubItemStatus,UINT16 usFlags, UINT32 sGridNo,UINT8 ubLevel, UINT32 uiWorldIndex); -void send_detonate_explosive (UINT32 uiWorldIndex, UINT16 ubID); -void send_spreadeffect ( INT32 sGridNo, UINT8 ubRadius, UINT16 usItem, UINT16 ubOwner, BOOLEAN fSubsequent, INT8 bLevel, INT32 iSmokeEffectID ); -void send_newsmokeeffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT16 ubOwner, INT32 iSmokeEffectID); +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( UINT16 ubPerson, UINT16 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 ); void send_disarm_explosive(UINT32 sGridNo, UINT32 uiWorldIndex, SoldierID ubID); void OpenChatMsgBox(void); -INT8 FireBullet( UINT16 ubFirer, BULLET * pBullet, BOOLEAN fFake ); +INT8 FireBullet( SoldierID ubFirer, BULLET * pBullet, BOOLEAN fFake ); void reapplySETTINGS(); diff --git a/Tactical/Bullets.h b/Tactical/Bullets.h index 2cd3e602..2399d8d5 100644 --- a/Tactical/Bullets.h +++ b/Tactical/Bullets.h @@ -30,49 +30,49 @@ typedef struct LEVELNODE* pNodes[BULLET_TRACER_MAX_LENGTH]; //afp-end INT32 iBullet; - UINT16 ubFirerID; - UINT16 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( UINT16 ubFirerID, 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 \ No newline at end of file +#endif diff --git a/Tactical/Dialogue Control.cpp b/Tactical/Dialogue Control.cpp index a4739b70..296637c0 100644 --- a/Tactical/Dialogue Control.cpp +++ b/Tactical/Dialogue Control.cpp @@ -661,7 +661,7 @@ void HandleDialogue( ) SOLDIERTYPE *pSoldier; INT16 sPlayerGridNo; SoldierID ubPlayerID; - UINT8 ubQualifiedSoldierIDArray[ NUM_MERCS_WITH_NEW_QUOTES ]; + SoldierID ubQualifiedSoldierIDArray[ NUM_MERCS_WITH_NEW_QUOTES ]; UINT8 ubNumQualifiedMercs=0; UINT8 ubCnt=0; @@ -693,7 +693,7 @@ void HandleDialogue( ) //loop through all the mercs for( ubCnt=0; ubCntusQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_EXT_MORRIS; diff --git a/Tactical/Interface Dialogue.cpp b/Tactical/Interface Dialogue.cpp index d3d6263e..2ac44952 100644 --- a/Tactical/Interface Dialogue.cpp +++ b/Tactical/Interface Dialogue.cpp @@ -5206,10 +5206,10 @@ void CarmenLeavesSectorCallback( void ) void PerformJerryMiloAction301() { - UINT8 ubMercsPresent[NUM_MERCS_WITH_NEW_QUOTES]; + SoldierID ubMercsPresent[NUM_MERCS_WITH_NEW_QUOTES]; UINT8 usNumMercsPresent; SOLDIERTYPE *pSoldier=NULL; - UINT8 ubId; + SoldierID ubId; //Get the number and array of the new soldiers usNumMercsPresent = GetNumSoldierIdAndProfileIdOfTheNewMercsOnPlayerTeam( ubMercsPresent, NULL ); @@ -5219,7 +5219,7 @@ void PerformJerryMiloAction301() { ubId = ubMercsPresent[ cnt ]; - TacticalCharacterDialogue( MercPtrs[ubId], QUOTE_DEATH_RATE_REFUSAL ); + TacticalCharacterDialogue( ubId, QUOTE_DEATH_RATE_REFUSAL ); } //Trigger Jerry Milo's script record 11 ( call action 302 ) @@ -5231,8 +5231,8 @@ void PerformJerryMiloAction301() void PerformJerryMiloAction302() { - UINT8 ubMercsPresent[NUM_MERCS_WITH_NEW_QUOTES]; - UINT8 usNumMercsPresent; + SoldierID ubMercsPresent[NUM_MERCS_WITH_NEW_QUOTES]; + UINT8 usNumMercsPresent; //off jazz //Get the number and array of the new soldiers @@ -5384,11 +5384,11 @@ void HandleSpecificQuoteWhenLeavingNpcTalkMenu() void HaveQualifiedMercSayQuoteAboutNpcWhenLeavingTalkScreen( UINT8 ubNpcProfileID, UINT32 uiQuoteNum ) { - UINT8 usNumMercsPresent; - UINT8 SoldierIdArray[NUM_MERCS_WITH_NEW_QUOTES]; - UINT8 ValidSoldierIdArray[NUM_MERCS_WITH_NEW_QUOTES] = {0}; - UINT8 ubNumValidSoldiers=0; - UINT8 ubCnt; + UINT8 usNumMercsPresent; + SoldierID SoldierIdArray[NUM_MERCS_WITH_NEW_QUOTES]; + SoldierID ValidSoldierIdArray[NUM_MERCS_WITH_NEW_QUOTES] = {0}; + UINT8 ubNumValidSoldiers=0; + UINT8 ubCnt; SOLDIERTYPE *pSoldier=NULL; SOLDIERTYPE * pNPC; diff --git a/Tactical/Items.cpp b/Tactical/Items.cpp index f17ed417..70de1d87 100644 --- a/Tactical/Items.cpp +++ b/Tactical/Items.cpp @@ -9304,7 +9304,7 @@ void CheckEquipmentForFragileItemDamage( SOLDIERTYPE *pSoldier, INT32 iDamage ) } -BOOLEAN DamageItemOnGround( OBJECTTYPE * pObject, INT32 sGridNo, INT8 bLevel, INT32 iDamage, UINT16 ubOwner ) +BOOLEAN DamageItemOnGround( OBJECTTYPE * pObject, INT32 sGridNo, INT8 bLevel, INT32 iDamage, SoldierID ubOwner ) { #ifdef JA2BETAVERSION CHAR tmpMPDbgString[512]; diff --git a/Tactical/Items.h b/Tactical/Items.h index 2afff8f0..fe9465b1 100644 --- a/Tactical/Items.h +++ b/Tactical/Items.h @@ -296,7 +296,7 @@ UINT16 StandardGunListReplacement( UINT16 usGun ); UINT16 FindReplacementMagazine( UINT8 ubCalibre, UINT16 ubMagSize, UINT8 ubAmmoType); UINT16 FindReplacementMagazineIfNecessary( UINT16 usOldGun, UINT16 usOldAmmo, UINT16 usNewGun ); -BOOLEAN DamageItemOnGround( OBJECTTYPE * pObject, INT32 sGridNo, INT8 bLevel, INT32 iDamage, UINT16 ubOwner ); +BOOLEAN DamageItemOnGround( OBJECTTYPE * pObject, INT32 sGridNo, INT8 bLevel, INT32 iDamage, SoldierID ubOwner ); BOOLEAN CompatibleFaceItem( UINT16 usItem1, UINT16 usItem2 ); diff --git a/Tactical/Ja25_Tactical.cpp b/Tactical/Ja25_Tactical.cpp index 417dc46e..42cd8ba2 100644 --- a/Tactical/Ja25_Tactical.cpp +++ b/Tactical/Ja25_Tactical.cpp @@ -452,7 +452,7 @@ BOOLEAN IsSoldierQualifiedInitialHireMerc( SOLDIERTYPE *pSoldier ) } } -UINT8 GetNumSoldierIdAndProfileIdOfTheNewMercsOnPlayerTeam( UINT8 *pSoldierIdArray, UINT8 *pProfileIdArray ) +UINT8 GetNumSoldierIdAndProfileIdOfTheNewMercsOnPlayerTeam( SoldierID *pSoldierIdArray, UINT8 *pProfileIdArray ) { SOLDIERTYPE *pSoldier=NULL; UINT8 usNumMercsPresent=0; @@ -523,10 +523,10 @@ INT16 RandomProfileIdFromNewMercsOnPlayerTeam() } } -INT16 RandomSoldierIdFromNewMercsOnPlayerTeam() +SoldierID RandomSoldierIdFromNewMercsOnPlayerTeam() { - UINT8 usNumMercsPresent; - UINT8 SoldierIdArray[NUM_MERCS_WITH_NEW_QUOTES]; + UINT8 usNumMercsPresent; + SoldierID SoldierIdArray[NUM_MERCS_WITH_NEW_QUOTES]; //Get the number and array of the new soldiers usNumMercsPresent = GetNumSoldierIdAndProfileIdOfTheNewMercsOnPlayerTeam( SoldierIdArray, NULL ); @@ -536,20 +536,20 @@ INT16 RandomSoldierIdFromNewMercsOnPlayerTeam() if( usNumMercsPresent > 0 ) { //return a random merc from the array - return( (INT16)( SoldierIdArray[ Random( usNumMercsPresent ) ] )); + return( ( SoldierIdArray[ Random( usNumMercsPresent ) ] )); } else { - return( -1 ); + return( NOBODY ); } } UINT8 RandomArrayOfQualifiedMercs( UINT8 *pRandomSoldierIdArray ) { - UINT8 usNumMercsPresent; - UINT8 SoldierIdArray[NUM_MERCS_WITH_NEW_QUOTES]; - BOOLEAN UsedArray[NUM_MERCS_WITH_NEW_QUOTES]; - BOOLEAN fFound=FALSE; + UINT8 usNumMercsPresent; + SoldierID SoldierIdArray[NUM_MERCS_WITH_NEW_QUOTES]; + BOOLEAN UsedArray[NUM_MERCS_WITH_NEW_QUOTES]; + BOOLEAN fFound=FALSE; UINT8 ubRand; memset( UsedArray, 0, NUM_MERCS_WITH_NEW_QUOTES ); @@ -1060,8 +1060,8 @@ void HandlePlayingQuoteWhenHiringNpc( UINT8 ubProfile ) BOOLEAN SayQuoteFromAllNewHiredMercButDoGastonLast( UINT8 ubProfile, UINT32 uiQuoteNum ) { - UINT8 usNumMercsPresent; - UINT8 SoldierIdArray[NUM_MERCS_WITH_NEW_QUOTES]; + UINT8 usNumMercsPresent; + SoldierID SoldierIdArray[NUM_MERCS_WITH_NEW_QUOTES]; SOLDIERTYPE *pSoldier=NULL; //Get an array of the mercs on the team diff --git a/Tactical/Ja25_Tactical.h b/Tactical/Ja25_Tactical.h index a8b12371..b3c56725 100644 --- a/Tactical/Ja25_Tactical.h +++ b/Tactical/Ja25_Tactical.h @@ -37,8 +37,8 @@ typedef struct extern BOOLEAN gfFirstTimeInGameHeliCrash; INT16 RandomProfileIdFromNewMercsOnPlayerTeam(); -INT16 RandomSoldierIdFromNewMercsOnPlayerTeam(); -UINT8 GetNumSoldierIdAndProfileIdOfTheNewMercsOnPlayerTeam( UINT8 *pSoldierIdArray, UINT8 *pProfileIdArray ); +SoldierID RandomSoldierIdFromNewMercsOnPlayerTeam(); +UINT8 GetNumSoldierIdAndProfileIdOfTheNewMercsOnPlayerTeam( SoldierID *pSoldierIdArray, UINT8 *pProfileIdArray ); BOOLEAN IsSoldierQualifiedMerc( SOLDIERTYPE *pSoldier ); BOOLEAN IsSoldierQualifiedInitialHireMerc( SOLDIERTYPE *pSoldier ); BOOLEAN IsSoldierQualifiedMercForSeeingPowerGenFan( SOLDIERTYPE *pSoldier ); diff --git a/Tactical/LOS.cpp b/Tactical/LOS.cpp index fff95973..3513e580 100644 --- a/Tactical/LOS.cpp +++ b/Tactical/LOS.cpp @@ -2435,7 +2435,7 @@ INT32 SoldierTo3DLocationLineOfSightTest( SOLDIERTYPE * pStartSoldier, INT32 sGr { FLOAT dStartZPos, dEndZPos; INT16 sX, sY, sX2, sY2; - UINT16 ubTargetID; + SoldierID ubTargetID; BOOLEAN fOk; CHECKF( pStartSoldier ); @@ -2455,7 +2455,7 @@ INT32 SoldierTo3DLocationLineOfSightTest( SOLDIERTYPE * pStartSoldier, INT32 sGr if (ubTargetID != NOBODY) { // there's a merc there; do a soldier-to-soldier test - return( SoldierToSoldierLineOfSightTest( pStartSoldier, MercPtrs[ubTargetID], bAware, iTileSightLimit, LOS_POS, adjustForSight) ); + return( SoldierToSoldierLineOfSightTest( pStartSoldier, ubTargetID, bAware, iTileSightLimit, LOS_POS, adjustForSight) ); } // else... assume standing height dEndZPos = STANDING_LOS_POS + bLevel * HEIGHT_UNITS; @@ -4640,7 +4640,7 @@ void CalculateFiringIncrementsSimple( DOUBLE ddHorizAngle, DOUBLE ddVerticAngle, pBullet->qIncrZ = FloatToFixed( (FLOAT) ( sin( ddVerticAngle ) / sin( (PI/2) - ddVerticAngle ) * HEIGHTUNITS_PER_CELL ) );//dnl ch60 010913 } -INT8 FireBullet( UINT16 ubFirer, BULLET * pBullet, BOOLEAN fFake ) +INT8 FireBullet( SoldierID ubFirer, BULLET * pBullet, BOOLEAN fFake ) { //DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("FireBullet")); @@ -4654,7 +4654,7 @@ INT8 FireBullet( UINT16 ubFirer, BULLET * pBullet, BOOLEAN fFake ) pBullet->sGridNo = MAPROWCOLTOPOS( pBullet->iCurrTileY, pBullet->iCurrTileX ); if ( ubFirer != NOBODY ) - pBullet->pFirer = MercPtrs[ ubFirer ]; + pBullet->pFirer = ubFirer; else pBullet->pFirer = NULL; @@ -5775,7 +5775,7 @@ INT8 FireBulletGivenTarget( SOLDIERTYPE * pFirer, FLOAT dEndX, FLOAT dEndY, FLOA // Note that this function does not make provisions for Fake Firing. There is no need for it, and it would needlessly // complicate things anyway. // Also note we receive start coordinates from the bomb itself, because there's nowhere else to get them. -INT8 FireFragmentGivenTarget( UINT16 ubOwner, FLOAT dStartX, FLOAT dStartY, FLOAT dStartZ, FLOAT dEndX, FLOAT dEndY, FLOAT dEndZ, UINT16 usExplosiveItem ) +INT8 FireFragmentGivenTarget( SoldierID ubOwner, FLOAT dStartX, FLOAT dStartY, FLOAT dStartZ, FLOAT dEndX, FLOAT dEndY, FLOAT dEndZ, UINT16 usExplosiveItem ) { // Artificial... dStartZ++; @@ -6986,9 +6986,8 @@ INT8 ChanceToGetThrough(SOLDIERTYPE * pFirer, FLOAT dEndX, FLOAT dEndY, FLOAT dE void MoveBullet( INT32 iBullet ) { - BULLET *pBullet; - - FIXEDPT qLandHeight; + BULLET *pBullet; + FIXEDPT qLandHeight; INT32 iCurrAboveLevelZ; INT32 iCurrCubesAboveLevelZ; INT16 sDesiredLevel; @@ -6997,48 +6996,48 @@ void MoveBullet( INT32 iBullet ) INT32 iOldTileY; INT32 iOldCubesZ; - MAP_ELEMENT * pMapElement; - STRUCTURE * pStructure; - STRUCTURE * pRoofStructure = NULL; + MAP_ELEMENT *pMapElement; + STRUCTURE *pStructure; + STRUCTURE *pRoofStructure = NULL; - FIXEDPT qLastZ; + FIXEDPT qLastZ; - SOLDIERTYPE * pTarget; - UINT16 ubTargetID; - BOOLEAN fIntended; - BOOLEAN fStopped; - INT8 bOldLOSIndexX; - INT8 bOldLOSIndexY; + SOLDIERTYPE *pTarget; + SoldierID ubTargetID; + BOOLEAN fIntended; + BOOLEAN fStopped; + INT8 bOldLOSIndexX; + INT8 bOldLOSIndexY; - UINT32 uiTileInc = 0; - UINT32 uiTime; + UINT32 uiTileInc = 0; + UINT32 uiTime; - INT8 bDir; - INT32 iGridNo, iAdjGridNo; + INT8 bDir; + INT32 iGridNo, iAdjGridNo; - INT32 iRemainingImpact; + INT32 iRemainingImpact; - FIXEDPT qDistToTravelX; - FIXEDPT qDistToTravelY; - INT32 iStepsToTravelX; - INT32 iStepsToTravelY; - INT32 iStepsToTravel; + FIXEDPT qDistToTravelX; + FIXEDPT qDistToTravelY; + INT32 iStepsToTravelX; + INT32 iStepsToTravelY; + INT32 iStepsToTravel; - INT32 iNumLocalStructures; - INT32 iStructureLoop; - UINT32 uiChanceOfHit; + INT32 iNumLocalStructures; + INT32 iStructureLoop; + UINT32 uiChanceOfHit; - BOOLEAN fResolveHit; + BOOLEAN fResolveHit; - INT32 i; - BOOLEAN fGoingOver = FALSE; - BOOLEAN fHitStructure; + INT32 i; + BOOLEAN fGoingOver = FALSE; + BOOLEAN fHitStructure; - FIXEDPT qWallHeight; - FIXEDPT qWindowBottomHeight; - FIXEDPT qWindowTopHeight; + FIXEDPT qWallHeight; + FIXEDPT qWindowBottomHeight; + FIXEDPT qWindowTopHeight; - UINT16 lastriotshieldholder = NOBODY; // added by Flugente + SoldierID lastriotshieldholder = NOBODY; // added by Flugente pBullet = GetBulletPtr( iBullet ); @@ -7358,7 +7357,7 @@ void MoveBullet( INT32 iBullet ) ubTargetID = WhoIsThere2( iAdjGridNo, (INT8) sDesiredLevel ); if (ubTargetID != NOBODY) { - pTarget = MercPtrs[ ubTargetID ]; + pTarget = ubTargetID; if ( IS_MERC_BODY_TYPE( pTarget ) && (pBullet->ubFirerID == NOBODY || pBullet->pFirer->bSide != pTarget->bSide) ) { // buckshot has only a 1 in 2 chance of applying a suppression point @@ -9911,7 +9910,7 @@ UINT32 CalcCounterForceAccuracy(SOLDIERTYPE *pShooter, OBJECTTYPE *pWeapon, UINT // If we can't see the target, but buddies can see it, CF-Accuracy drops by 50% // If we can't see the target and neither can buddies, CF-Accuracy drops by 75% - UINT16 ubTargetID = WhoIsThere2( pShooter->sTargetGridNo, pShooter->bTargetLevel ); // Target ubID + SoldierID ubTargetID = WhoIsThere2( pShooter->sTargetGridNo, pShooter->bTargetLevel ); // Target ubID INT16 sDistVis = pShooter->GetMaxDistanceVisible(pShooter->sTargetGridNo, pShooter->bTargetLevel, CALC_FROM_ALL_DIRS ) * CELL_X_SIZE; gbForceWeaponNotReady = true; INT16 sDistVisNoScope = pShooter->GetMaxDistanceVisible(pShooter->sTargetGridNo, pShooter->bTargetLevel, CALC_FROM_ALL_DIRS ) * CELL_X_SIZE; @@ -9920,12 +9919,12 @@ UINT32 CalcCounterForceAccuracy(SOLDIERTYPE *pShooter, OBJECTTYPE *pWeapon, UINT INT32 iSightRange = 0; if (ubTargetID != NOBODY) - iSightRange = SoldierToSoldierLineOfSightTest( pShooter, MercPtrs[ubTargetID], TRUE, NO_DISTANCE_LIMIT, pShooter->bAimShotLocation, false ); + iSightRange = SoldierToSoldierLineOfSightTest( pShooter, ubTargetID, TRUE, NO_DISTANCE_LIMIT, pShooter->bAimShotLocation, false ); if (iSightRange == 0) { // didn't do a bodypart-based test or can't see specific body part aimed at iSightRange = SoldierTo3DLocationLineOfSightTest( pShooter, pShooter->sTargetGridNo, pShooter->bTargetLevel, pShooter->bTargetCubeLevel, TRUE, NO_DISTANCE_LIMIT, false ); } if (iSightRange == 0) { // Can't see the target but we still need to know what the sight range would be if we could so we can deal with cover penalties - iSightRange = SoldierToSoldierLineOfSightTest( pShooter, MercPtrs[ubTargetID], TRUE, NO_DISTANCE_LIMIT, pShooter->bAimShotLocation, false, true ); + iSightRange = SoldierToSoldierLineOfSightTest( pShooter, ubTargetID, TRUE, NO_DISTANCE_LIMIT, pShooter->bAimShotLocation, false, true ); } // Modify iSightRange for scope use diff --git a/Tactical/LOS.h b/Tactical/LOS.h index a03b4216..69e03f0e 100644 --- a/Tactical/LOS.h +++ b/Tactical/LOS.h @@ -69,7 +69,7 @@ INT8 FireBulletGivenTarget( SOLDIERTYPE * pFirer, FLOAT dEndX, FLOAT dEndY, FLOA // HEADROCK HAM 4: Changed the name of one argument to avoid confusion with the new CTH system. INT8 FireBulletGivenTargetNCTH( SOLDIERTYPE * pFirer, FLOAT dEndX, FLOAT dEndY, FLOAT dEndZ, UINT16 usHandItem, INT16 sApertureRatio, BOOLEAN fBuckshot, BOOLEAN fFake ); // HEADROCK HAM 5: Function for fragments ejected from an explosion. -INT8 FireFragmentGivenTarget( UINT16 ubOwner, FLOAT dStartX, FLOAT dStartY, FLOAT dStartZ, FLOAT dEndX, FLOAT dEndY, FLOAT dEndZ, UINT16 usExplosiveItem ); +INT8 FireFragmentGivenTarget( SoldierID ubOwner, FLOAT dStartX, FLOAT dStartY, FLOAT dStartZ, FLOAT dEndX, FLOAT dEndY, FLOAT dEndZ, UINT16 usExplosiveItem ); // Flugente: fire a shot from a gun that has no user (used for traps with attached guns) INT8 FireBulletGivenTargetTrapOnly( SOLDIERTYPE* pThrower, OBJECTTYPE* pObj, INT32 gridno, FLOAT dStartZ, FLOAT dEndX, FLOAT dEndY, FLOAT dEndZ, INT16 sHitBy); diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index aa96c7e6..a415b2e1 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -25194,13 +25194,13 @@ BOOLEAN MajorTrait( UINT8 uiSkillTraitNumber ) return FALSE; } -BOOLEAN GetRadioOperatorSignal( UINT8 usOwner, INT32* psTargetGridNo ) +BOOLEAN GetRadioOperatorSignal( SoldierID usOwner, INT32* psTargetGridNo ) { // get the 'real owner' if ( usOwner > 1 ) { // a merc planted this - if he's a radio operator, use his gridno - SOLDIERTYPE* pSoldier = MercPtrs[usOwner - 2]; + SOLDIERTYPE* pSoldier = (usOwner - 2); if ( pSoldier && pSoldier->CanUseRadio( FALSE ) && pSoldier->bActive && pSoldier->bInSector && (pSoldier->sSectorX == gWorldSectorX) && (pSoldier->sSectorY == gWorldSectorY) && (pSoldier->bSectorZ == gbWorldSectorZ) ) { diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index eebd00ee..158cb352 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -2227,7 +2227,7 @@ BOOLEAN DecideAltAnimForBigMerc( SOLDIERTYPE * pSoldier ); // added by Flugente BOOLEAN TwoStagedTrait( UINT8 uiSkillTraitNumber ); // determine if this (new) trait has two stages BOOLEAN MajorTrait( UINT8 uiSkillTraitNumber ); // determine if this is a major trait -BOOLEAN GetRadioOperatorSignal(UINT8 usOwner, INT32* psTargetGridNo); // retrieve the gridno of a radio operator who (or whose team) ordered an artillery strike +BOOLEAN GetRadioOperatorSignal( SoldierID usOwner, INT32* psTargetGridNo); // retrieve the gridno of a radio operator who (or whose team) ordered an artillery strike BOOLEAN IsValidArtilleryOrderSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ, UINT8 bTeam ); // can an artillery strike be ordered FROM this sector BOOLEAN SectorJammed(); BOOLEAN PlayerTeamIsScanning(); diff --git a/Tactical/TeamTurns.cpp b/Tactical/TeamTurns.cpp index 49d53cfd..975e4b19 100644 --- a/Tactical/TeamTurns.cpp +++ b/Tactical/TeamTurns.cpp @@ -114,10 +114,10 @@ typedef struct { UINT16 ubOutOfTurnPersons; - INT16 InterruptOnlyGuynum; + SoldierID InterruptOnlyGuynum; INT16 sWhoThrewRock; - BOOLEAN InterruptsAllowed; - BOOLEAN fHiddenInterrupt; + BOOLEAN InterruptsAllowed; + BOOLEAN fHiddenInterrupt; UINT8 ubLastInterruptedGuy; UINT8 ubFiller[16]; diff --git a/Tactical/Weapons.cpp b/Tactical/Weapons.cpp index ebe43661..8e527f79 100644 --- a/Tactical/Weapons.cpp +++ b/Tactical/Weapons.cpp @@ -2444,7 +2444,7 @@ BOOLEAN UseGunNCTH( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo ) //CHAR8 zBurstString[512]; UINT8 ubDirection; INT32 sNewGridNo; - UINT16 ubMerc; + SoldierID ubMerc; BOOLEAN fGonnaHit = FALSE; FLOAT dExpGain = 0; UINT32 uiDepreciateTest; @@ -2967,14 +2967,14 @@ BOOLEAN UseGunNCTH( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo ) if ( ubMerc != NOBODY ) { - if ( gAnimControl[ MercPtrs[ ubMerc ]->usAnimState ].ubHeight != ANIM_PRONE ) + if ( gAnimControl[ ubMerc->usAnimState ].ubHeight != ANIM_PRONE ) { // Increment attack counter... // gTacticalStatus.ubAttackBusyCount++; DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String("Incrementing Attack: Exaust from LAW", gTacticalStatus.ubAttackBusyCount ) ); DebugAttackBusy( "Incrementing Attack: Exaust from LAW\n" ); - MercPtrs[ ubMerc ]->EVENT_SoldierGotHit( MINI_GRENADE, 10, 200, pSoldier->ubDirection, 0, pSoldier->ubID, 0, ANIM_CROUCH, 0, sNewGridNo ); + ubMerc->EVENT_SoldierGotHit( MINI_GRENADE, 10, 200, pSoldier->ubDirection, 0, pSoldier->ubID, 0, ANIM_CROUCH, 0, sNewGridNo ); } } } @@ -3232,7 +3232,7 @@ BOOLEAN UseGun( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo ) // CHAR8 zBurstString[512]; UINT8 ubDirection; INT32 sNewGridNo; - UINT16 ubMerc; + SoldierID ubMerc; BOOLEAN fGonnaHit = FALSE; UINT16 usExpGain = 0; UINT32 uiDepreciateTest; @@ -3785,14 +3785,14 @@ BOOLEAN UseGun( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo ) if ( ubMerc != NOBODY ) { - if ( gAnimControl[ MercPtrs[ ubMerc ]->usAnimState ].ubHeight != ANIM_PRONE ) + if ( gAnimControl[ ubMerc->usAnimState ].ubHeight != ANIM_PRONE ) { // Increment attack counter... // gTacticalStatus.ubAttackBusyCount++; DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String("Incrementing Attack: Exaust from LAW", gTacticalStatus.ubAttackBusyCount ) ); DebugAttackBusy( "Incrementing Attack: Exaust from LAW\n" ); - MercPtrs[ ubMerc ]->EVENT_SoldierGotHit( MINI_GRENADE, 10, 200, pSoldier->ubDirection, 0, pSoldier->ubID, 0, ANIM_CROUCH, 0, sNewGridNo ); + ubMerc->EVENT_SoldierGotHit( MINI_GRENADE, 10, 200, pSoldier->ubDirection, 0, pSoldier->ubID, 0, ANIM_CROUCH, 0, sNewGridNo ); } } } @@ -4097,15 +4097,15 @@ BOOLEAN UseBlade( SOLDIERTYPE *pSoldier , INT32 sTargetGridNo ) PossiblyStartEnemyTaunt( pTargetSoldier, TAUNT_GOT_MISSED_BLADE, pSoldier->ubID ); // if it was another team shooting at someone under our control - if ( (pSoldier->bTeam != Menptr[ pTargetSoldier->ubID ].bTeam ) ) + if ( (pSoldier->bTeam != pTargetSoldier->ubID->bTeam ) ) { if (pTargetSoldier->bTeam == gbPlayerNum) { // AGILITY GAIN (10): Target avoids a knife attack // Snap: stat gains should match stat requirements - StatChange( MercPtrs[ pTargetSoldier->ubID ], DEXTAMT, 15, FALSE); - StatChange( MercPtrs[ pTargetSoldier->ubID ], AGILAMT, 5, FALSE); - StatChange( MercPtrs[ pTargetSoldier->ubID ], STRAMT, 5, FALSE); + StatChange( pTargetSoldier->ubID, DEXTAMT, 15, FALSE); + StatChange( pTargetSoldier->ubID, AGILAMT, 5, FALSE); + StatChange( pTargetSoldier->ubID, STRAMT, 5, FALSE); } } // 0verhaul: Another case that is handled by the animation transition system. @@ -4940,10 +4940,10 @@ BOOLEAN UseHandToHand( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo, BOOLEAN fStea BOOLEAN UseThrown( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo ) { - UINT32 uiHitChance; + UINT32 uiHitChance; INT8 bLoop; - UINT16 ubTargetID; - SOLDIERTYPE * pTargetSoldier; + SoldierID ubTargetID; + SOLDIERTYPE *pTargetSoldier; //INT16 sAPCost = 0;//dnl ch72 180913 uiHitChance = CalcThrownChanceToHit( pSoldier, sTargetGridNo, pSoldier->aiData.bAimTime, AIM_SHOT_TORSO ); @@ -4965,7 +4965,7 @@ BOOLEAN UseThrown( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo ) } else { - pTargetSoldier = MercPtrs[ ubTargetID ]; + pTargetSoldier = ubTargetID; } if ( pTargetSoldier && pTargetSoldier->bTeam == pSoldier->bTeam ) @@ -4987,7 +4987,7 @@ BOOLEAN UseThrown( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo ) pTargetSoldier = NULL; if ( ubTargetID != NOBODY ) { - pTargetSoldier = MercPtrs[ ubTargetID ]; + pTargetSoldier = ubTargetID; if ( pTargetSoldier->bTeam != pSoldier->bTeam ) { usNumTargets++; @@ -5315,7 +5315,7 @@ BOOLEAN UseLauncher( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo ) return( TRUE ); } -BOOLEAN DoSpecialEffectAmmoMiss( UINT16 ubAttackerID, UINT16 usWeaponIndex, INT32 sGridNo, INT16 sXPos, INT16 sYPos, INT16 sZPos, BOOLEAN fSoundOnly, BOOLEAN fFreeupAttacker, INT32 iBullet ) +BOOLEAN DoSpecialEffectAmmoMiss( SoldierID ubAttackerID, UINT16 usWeaponIndex, INT32 sGridNo, INT16 sXPos, INT16 sYPos, INT16 sZPos, BOOLEAN fSoundOnly, BOOLEAN fFreeupAttacker, INT32 iBullet ) { ANITILE_PARAMS AniParams; UINT8 ubAmmoType = 0; @@ -5324,7 +5324,7 @@ BOOLEAN DoSpecialEffectAmmoMiss( UINT16 ubAttackerID, UINT16 usWeaponIndex, INT3 // Flugente: check for underbarrel weapons and use that object if necessary if ( ubAttackerID != NOBODY ) { - OBJECTTYPE* pObj = MercPtrs[ ubAttackerID ]->GetUsedWeapon( &MercPtrs[ ubAttackerID ]->inv[ MercPtrs[ ubAttackerID ]->ubAttackingHand ] ); + OBJECTTYPE* pObj = ubAttackerID->GetUsedWeapon( &ubAttackerID->inv[ ubAttackerID->ubAttackingHand ] ); ubAmmoType = (*pObj)[0]->data.gun.ubGunAmmoType; usItem = (*pObj).usItem; @@ -6036,7 +6036,7 @@ void StructureHit( INT32 iBullet, UINT16 usWeaponIndex, INT16 bWeaponStatus, Sol // Set attacker ID pNode->usMissAnimationPlayed = usMissTileType; - pNode->ubAttackerMissed = ubAttackerID; + pNode->ubAttackerMissed = ubAttackerID; // Adjust for absolute positioning pNode->pLevelNode->uiFlags |= LEVELNODE_USEABSOLUTEPOS; pNode->pLevelNode->sRelativeX = sXPos; @@ -6278,7 +6278,7 @@ UINT32 CalcNewChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTi UINT16 usInHand; OBJECTTYPE * pInHand; INT16 sDistVis, sDistVisNoScope; - UINT16 ubTargetID; + SoldierID ubTargetID; bool fCantSeeTarget = false; FLOAT scopeRangeMod = 0.0f; @@ -6327,7 +6327,7 @@ UINT32 CalcNewChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTi if (ubTargetID != NOBODY && (pSoldier->aiData.bOppList[ubTargetID] == SEEN_CURRENTLY || gbPublicOpplist[pSoldier->bTeam][ubTargetID] == SEEN_CURRENTLY)) { - iSightRange = SoldierToSoldierLineOfSightTest( pSoldier, MercPtrs[ubTargetID], TRUE, NO_DISTANCE_LIMIT, pSoldier->bAimShotLocation, false ); + iSightRange = SoldierToSoldierLineOfSightTest( pSoldier, ubTargetID, TRUE, NO_DISTANCE_LIMIT, pSoldier->bAimShotLocation, false ); } if (iSightRange == 0) { @@ -6338,7 +6338,7 @@ UINT32 CalcNewChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTi { // Can't see the target but we still need to know what the sight range would be if we could so we can deal with cover penalties if (ubTargetID != NOBODY) - iSightRange = SoldierToSoldierLineOfSightTest( pSoldier, MercPtrs[ubTargetID], TRUE, NO_DISTANCE_LIMIT, pSoldier->bAimShotLocation, false, true ); + iSightRange = SoldierToSoldierLineOfSightTest( pSoldier, ubTargetID, TRUE, NO_DISTANCE_LIMIT, pSoldier->bAimShotLocation, false, true ); fCantSeeTarget = true; } @@ -6639,8 +6639,8 @@ UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime, INT16 bonusProgression[8] = {500,500,600,600,750,750,750,1000}; //Aiming progression UINT16 usInHand, usShockPenalty, MIN_RANGE_FOR_FULL_COWER, MAX_TARGET_COWERING_PENALTY; UINT16 iBulletsLeft, iTracersFired = 0, iBulletsPerTracer, iBulletsSinceLastTracer=0, iRoundsFiredPreviously; - INT8 bBandaged, maxClickBonus = 10, AIM_PENALTY_PER_TARGET_SHOCK; - UINT16 ubTargetID; + INT8 bBandaged, maxClickBonus = 10, AIM_PENALTY_PER_TARGET_SHOCK; + SoldierID ubTargetID; UINT8 bLightLevel, ubCoweringDivisor, ubAutoPenaltySinceLastTracer = 0; FLOAT maxBonus, aimTimeBonus, scopeRangeMod = 0.0f, iAimBonus; bool fCantSeeTarget = false, fCoverObscured = false; @@ -6685,7 +6685,7 @@ UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime, iScopeVisionRangeBonus = GetTotalVisionRangeBonus(pSoldier, bLightLevel); // not an actual range value, simply a modifier for range calculations if (ubTargetID != NOBODY && ( pSoldier->aiData.bOppList[ubTargetID] == SEEN_CURRENTLY || gbPublicOpplist[pSoldier->bTeam][ubTargetID] == SEEN_CURRENTLY ) ) - iSightRange = SoldierToSoldierLineOfSightTest( pSoldier, MercPtrs[ubTargetID], TRUE, NO_DISTANCE_LIMIT, pSoldier->bAimShotLocation, false ); + iSightRange = SoldierToSoldierLineOfSightTest( pSoldier, ubTargetID, TRUE, NO_DISTANCE_LIMIT, pSoldier->bAimShotLocation, false ); if (iSightRange == 0) { @@ -6698,7 +6698,7 @@ UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime, { // Can't see the target but we still need to know what the sight range would be if we could so we can deal with cover penalties if (ubTargetID != NOBODY) - iSightRange = SoldierToSoldierLineOfSightTest( pSoldier, MercPtrs[ubTargetID], TRUE, NO_DISTANCE_LIMIT, pSoldier->bAimShotLocation, false, true ); + iSightRange = SoldierToSoldierLineOfSightTest( pSoldier, ubTargetID, TRUE, NO_DISTANCE_LIMIT, pSoldier->bAimShotLocation, false, true ); fCantSeeTarget = true; fCoverObscured = false; } @@ -9061,7 +9061,7 @@ INT32 HTHImpact( SOLDIERTYPE * pSoldier, SOLDIERTYPE * pTarget, INT32 iHitBy, BO return( iImpact ); } -void ShotMiss( UINT16 ubAttackerID, INT32 iBullet ) +void ShotMiss( SoldierID ubAttackerID, INT32 iBullet ) { BOOLEAN fDoMissForGun = FALSE; SOLDIERTYPE* pAttacker = NULL; @@ -9070,7 +9070,7 @@ void ShotMiss( UINT16 ubAttackerID, INT32 iBullet ) if ( ubAttackerID == NOBODY ) return; - pAttacker = MercPtrs[ ubAttackerID ]; + pAttacker = ubAttackerID; if ( pAttacker->ubOppNum != NOBODY ) { @@ -9086,7 +9086,7 @@ void ShotMiss( UINT16 ubAttackerID, INT32 iBullet ) } } - switch( Weapon[ MercPtrs[ ubAttackerID ]->usAttackingWeapon ].ubWeaponClass ) + switch( Weapon[ ubAttackerID->usAttackingWeapon ].ubWeaponClass ) { case HANDGUNCLASS: case RIFLECLASS: @@ -9095,11 +9095,11 @@ void ShotMiss( UINT16 ubAttackerID, INT32 iBullet ) case MGCLASS: // Guy has missed, play random sound - if ( MercPtrs[ ubAttackerID ]->bTeam == gbPlayerNum ) + if ( ubAttackerID->bTeam == gbPlayerNum ) { if ( Random(40) == 0 ) { - MercPtrs[ ubAttackerID ]->DoMercBattleSound( BATTLE_SOUND_CURSE1 ); + ubAttackerID->DoMercBattleSound( BATTLE_SOUND_CURSE1 ); } } fDoMissForGun = TRUE; @@ -9142,7 +9142,7 @@ void ShotMiss( UINT16 ubAttackerID, INT32 iBullet ) // PLAY SOUND AND FLING DEBRIS // RANDOMIZE SOUND SYSTEM - if ( !DoSpecialEffectAmmoMiss( ubAttackerID, MercPtrs[ ubAttackerID ]->usAttackingWeapon, NOWHERE, 0, 0, 0, TRUE, TRUE, 0 ) ) + if ( !DoSpecialEffectAmmoMiss( ubAttackerID, ubAttackerID->usAttackingWeapon, NOWHERE, 0, 0, 0, TRUE, TRUE, 0 ) ) { PlayJA2Sample( MISS_1 + Random(8), RATE_11025, HIGHVOLUME, 1, MIDDLEPAN ); } diff --git a/Tactical/Weapons.h b/Tactical/Weapons.h index 650d18f3..8f6afb7e 100644 --- a/Tactical/Weapons.h +++ b/Tactical/Weapons.h @@ -459,7 +459,7 @@ extern void StructureHit( INT32 iBullet, UINT16 usWeaponIndex, INT16 bWeaponStat extern void WindowHit( INT32 sGridNo, UINT16 usStructureID, BOOLEAN fBlowWindowSouth, BOOLEAN fLargeForce ); // HEADROCK HAM 5.1: Moved to Bullets.h extern BOOLEAN InRange( SOLDIERTYPE *pSoldier, INT32 sGridNo ); -extern void ShotMiss( UINT16 ubAttackerID, INT32 iBullet ); +extern void ShotMiss( SoldierID ubAttackerID, INT32 iBullet ); extern UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime, UINT8 ubAimPos ); extern UINT32 CalcNewChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime, UINT8 ubAimPos ); extern UINT32 AICalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime, UINT8 ubAimPos, INT8 bTargetLevel, UINT16 usAnimState);//dnl ch59 180813 diff --git a/Tactical/bullets.cpp b/Tactical/bullets.cpp index 193cf9b9..0f904908 100644 --- a/Tactical/bullets.cpp +++ b/Tactical/bullets.cpp @@ -71,7 +71,7 @@ void RecountBullets(void) } -INT32 CreateBullet( UINT16 ubFirerID, BOOLEAN fFake, UINT16 usFlags,UINT16 fromItem ) +INT32 CreateBullet( SoldierID ubFirerID, BOOLEAN fFake, UINT16 usFlags,UINT16 fromItem ) { INT32 iBulletIndex; BULLET *pBullet; @@ -245,7 +245,7 @@ void LocateBullet( INT32 iBulletIndex ) // Check if a bad guy fired! if ( gBullets[ iBulletIndex ].ubFirerID != NOBODY ) { - if ( MercPtrs[ gBullets[ iBulletIndex ].ubFirerID ]->bSide == gbPlayerNum ) + if ( gBullets[ iBulletIndex ].ubFirerID->bSide == gbPlayerNum ) { if ( !gBullets[ iBulletIndex ].fLocated ) { @@ -633,7 +633,7 @@ BOOLEAN LoadBulletStructureFromSavedGameFile( HWFILE hFile ) //Set some parameters gBullets[usCnt].uiLastUpdate = 0; if( gBullets[usCnt].ubFirerID != NOBODY ) - gBullets[usCnt].pFirer = &Menptr[ gBullets[usCnt].ubFirerID ]; + gBullets[usCnt].pFirer = gBullets[usCnt].ubFirerID; else gBullets[usCnt].pFirer = NULL; diff --git a/TacticalAI/AIUtils.cpp b/TacticalAI/AIUtils.cpp index e8cd046b..4b4d0357 100644 --- a/TacticalAI/AIUtils.cpp +++ b/TacticalAI/AIUtils.cpp @@ -5670,7 +5670,7 @@ BOOLEAN DuskLight(void) return FALSE; } -BOOLEAN UsePersonalKnowledge(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID) +BOOLEAN UsePersonalKnowledge(SOLDIERTYPE *pSoldier, SoldierID ubOpponentID) { INT8 bPersonalKnowledge; INT8 bPublicKnowledge; @@ -5694,7 +5694,7 @@ BOOLEAN UsePersonalKnowledge(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID) return FALSE; } -INT8 Knowledge(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID) +INT8 Knowledge(SOLDIERTYPE *pSoldier, SoldierID ubOpponentID) { if (!pSoldier || ubOpponentID == NOBODY) { @@ -5709,7 +5709,7 @@ INT8 Knowledge(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID) return PublicKnowledge(pSoldier->bTeam, ubOpponentID); } -INT32 KnownLocation(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID) +INT32 KnownLocation(SOLDIERTYPE *pSoldier, SoldierID ubOpponentID) { if (!pSoldier || ubOpponentID == NOBODY) { @@ -5724,7 +5724,7 @@ INT32 KnownLocation(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID) return KnownPublicLocation(pSoldier->bTeam, ubOpponentID); } -INT8 KnownLevel(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID) +INT8 KnownLevel(SOLDIERTYPE *pSoldier, SoldierID ubOpponentID) { if (!pSoldier || ubOpponentID == NOBODY) { @@ -5739,7 +5739,7 @@ INT8 KnownLevel(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID) return KnownPublicLevel(pSoldier->bTeam, ubOpponentID); } -INT8 PersonalKnowledge(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID) +INT8 PersonalKnowledge(SOLDIERTYPE *pSoldier, SoldierID ubOpponentID) { if (!pSoldier || ubOpponentID == NOBODY) { @@ -5749,7 +5749,7 @@ INT8 PersonalKnowledge(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID) return pSoldier->aiData.bOppList[ubOpponentID]; } -INT32 KnownPersonalLocation(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID) +INT32 KnownPersonalLocation(SOLDIERTYPE *pSoldier, SoldierID ubOpponentID) { if (!pSoldier || ubOpponentID == NOBODY) { @@ -5763,7 +5763,7 @@ INT32 KnownPersonalLocation(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID) return gsLastKnownOppLoc[pSoldier->ubID][ubOpponentID]; } -INT8 KnownPersonalLevel(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID) +INT8 KnownPersonalLevel(SOLDIERTYPE *pSoldier, SoldierID ubOpponentID) { if (!pSoldier || ubOpponentID == NOBODY) { @@ -5773,7 +5773,7 @@ INT8 KnownPersonalLevel(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID) return gbLastKnownOppLevel[pSoldier->ubID][ubOpponentID]; } -INT8 PublicKnowledge(UINT8 bTeam, UINT16 ubOpponentID) +INT8 PublicKnowledge(UINT8 bTeam, SoldierID ubOpponentID) { if (bTeam >= MAXTEAMS || ubOpponentID == NOBODY) { @@ -5783,7 +5783,7 @@ INT8 PublicKnowledge(UINT8 bTeam, UINT16 ubOpponentID) return gbPublicOpplist[bTeam][ubOpponentID]; } -INT32 KnownPublicLocation(UINT8 bTeam, UINT16 ubOpponentID) +INT32 KnownPublicLocation(UINT8 bTeam, SoldierID ubOpponentID) { if (bTeam >= MAXTEAMS || ubOpponentID == NOBODY) { @@ -5797,7 +5797,7 @@ INT32 KnownPublicLocation(UINT8 bTeam, UINT16 ubOpponentID) return gsPublicLastKnownOppLoc[bTeam][ubOpponentID]; } -INT8 KnownPublicLevel(UINT8 bTeam, UINT16 ubOpponentID) +INT8 KnownPublicLevel(UINT8 bTeam, SoldierID ubOpponentID) { if (bTeam >= MAXTEAMS || ubOpponentID == NOBODY) { diff --git a/TacticalAI/ai.h b/TacticalAI/ai.h index a6603ae3..3d990d88 100644 --- a/TacticalAI/ai.h +++ b/TacticalAI/ai.h @@ -387,19 +387,19 @@ BOOLEAN AICheckSpecialRole(SOLDIERTYPE *pSoldier); // Knowledge functions // ************************************************************* -INT8 Knowledge(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID); -INT32 KnownLocation(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID); -INT8 KnownLevel(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID); +INT8 Knowledge(SOLDIERTYPE *pSoldier, SoldierID ubOpponentID); +INT32 KnownLocation(SOLDIERTYPE *pSoldier, SoldierID ubOpponentID); +INT8 KnownLevel(SOLDIERTYPE *pSoldier, SoldierID ubOpponentID); -BOOLEAN UsePersonalKnowledge(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID); +BOOLEAN UsePersonalKnowledge(SOLDIERTYPE *pSoldier, SoldierID ubOpponentID); -INT8 PersonalKnowledge(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID); -INT32 KnownPersonalLocation(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID); -INT8 KnownPersonalLevel(SOLDIERTYPE *pSoldier, UINT16 ubOpponentID); +INT8 PersonalKnowledge(SOLDIERTYPE *pSoldier, SoldierID ubOpponentID); +INT32 KnownPersonalLocation(SOLDIERTYPE *pSoldier, SoldierID ubOpponentID); +INT8 KnownPersonalLevel(SOLDIERTYPE *pSoldier, SoldierID ubOpponentID); -INT8 PublicKnowledge(UINT8 bTeam, UINT16 ubOpponentID); -INT32 KnownPublicLocation(UINT8 bTeam, UINT16 ubOpponentID); -INT8 KnownPublicLevel(UINT8 bTeam, UINT16 ubOpponentID); +INT8 PublicKnowledge(UINT8 bTeam, SoldierID ubOpponentID); +INT32 KnownPublicLocation(UINT8 bTeam, SoldierID ubOpponentID); +INT8 KnownPublicLevel(UINT8 bTeam, SoldierID ubOpponentID); #define MAX_FLANKS_RED 25 #define MAX_FLANKS_YELLOW 25 diff --git a/TileEngine/Explosion Control.cpp b/TileEngine/Explosion Control.cpp index a5a1ff84..5569c419 100644 --- a/TileEngine/Explosion Control.cpp +++ b/TileEngine/Explosion Control.cpp @@ -63,7 +63,7 @@ BOOLEAN HookerInRoom( UINT16 usRoom ); // MODULE FOR EXPLOSIONS // Spreads the effects of explosions... -BOOLEAN ExpAffect( INT32 sBombGridNo, INT32 sGridNo, UINT32 uiDist, UINT16 usItem, UINT16 ubOwner, INT16 sSubsequent, BOOLEAN *pfMercHit, INT8 bLevel, INT32 iSmokeEffectID ); +BOOLEAN ExpAffect( INT32 sBombGridNo, INT32 sGridNo, UINT32 uiDist, UINT16 usItem, SoldierID ubOwner, INT16 sSubsequent, BOOLEAN *pfMercHit, INT8 bLevel, INT32 iSmokeEffectID ); // Flashbang effect on soldier UINT8 DetermineFlashbangEffect( SOLDIERTYPE *pSoldier, INT8 ubExplosionDir, BOOLEAN fInBuilding); @@ -192,7 +192,7 @@ UINT32 guiNumExplosions = 0; INT32 GetFreeExplosion( void ); void RecountExplosions( void ); void GenerateExplosionFromExplosionPointer( EXPLOSIONTYPE *pExplosion ); -void HandleBuldingDestruction( INT32 sGridNo, UINT16 ubOwner ); +void HandleBuldingDestruction( INT32 sGridNo, SoldierID ubOwner ); #ifdef JA2UB //JA25 UB @@ -650,13 +650,13 @@ void HandleFencePartnerCheck( INT32 sStructGridNo ) INT8 ExplosiveDamageStructureAtGridNo( STRUCTURE * pCurrent, STRUCTURE **ppNextCurrent, INT32 sGridNo, INT16 sWoundAmt, UINT32 uiDist, - BOOLEAN *pfRecompileMovementCosts, BOOLEAN fOnlyWalls, BOOLEAN fSubSequentMultiTilesTransitionDamage, UINT16 ubOwner, INT8 bLevel, + BOOLEAN *pfRecompileMovementCosts, BOOLEAN fOnlyWalls, BOOLEAN fSubSequentMultiTilesTransitionDamage, SoldierID ubOwner, INT8 bLevel, UINT8 ubReason ) { #ifdef JA2BETAVERSION if (is_networked) { CHAR tmpMPDbgString[512]; - sprintf(tmpMPDbgString,"ExplosiveDamageStructureAtGridNo ( sGridNo : %i , sWoundAmt : %i , uiDist : %i , fRecompMoveCosts : %i , fOnlyWalls : %i , SubsMulTilTransDmg : %i , ubOwner : %i , bLevel : %i )\n", sGridNo, sWoundAmt , uiDist, (int)*pfRecompileMovementCosts , (int)fOnlyWalls , (int)fSubSequentMultiTilesTransitionDamage , ubOwner , bLevel ); + sprintf(tmpMPDbgString,"ExplosiveDamageStructureAtGridNo ( sGridNo : %i , sWoundAmt : %i , uiDist : %i , fRecompMoveCosts : %i , fOnlyWalls : %i , SubsMulTilTransDmg : %i , ubOwner : %i , bLevel : %i )\n", sGridNo, sWoundAmt , uiDist, (int)*pfRecompileMovementCosts , (int)fOnlyWalls , (int)fSubSequentMultiTilesTransitionDamage , ubOwner.i , bLevel ); MPDebugMsg(tmpMPDbgString); } #endif @@ -1329,14 +1329,14 @@ STRUCTURE *gStruct; void ExplosiveDamageGridNo( INT32 sGridNo, INT16 sWoundAmt, UINT32 uiDist, BOOLEAN *pfRecompileMovementCosts, - BOOLEAN fOnlyWalls, INT8 bMultiStructSpecialFlag, BOOLEAN fSubSequentMultiTilesTransitionDamage, UINT16 ubOwner, + BOOLEAN fOnlyWalls, INT8 bMultiStructSpecialFlag, BOOLEAN fSubSequentMultiTilesTransitionDamage, SoldierID ubOwner, INT8 bLevel, UINT8 ubReason ) { #ifdef JA2BETAVERSION if (is_networked) { CHAR tmpMPDbgString[512]; - sprintf(tmpMPDbgString,"ExplosiveDamageGridNo ( sGridNo : %i , sWoundAmt : %i , uiDist : %i , fRecompileMoveCosts : %i , fOnlyWalls : %i , MultiStructSpecialFlag : %i ,fSubsequentMultiTilesTransDmg : %i , ubOwner : %i , bLevel : %i )\n", sGridNo, sWoundAmt ,uiDist, (int)*pfRecompileMovementCosts , (int)fOnlyWalls , bMultiStructSpecialFlag , (int)fSubSequentMultiTilesTransitionDamage , ubOwner , bLevel ); + sprintf(tmpMPDbgString,"ExplosiveDamageGridNo ( sGridNo : %i , sWoundAmt : %i , uiDist : %i , fRecompileMoveCosts : %i , fOnlyWalls : %i , MultiStructSpecialFlag : %i ,fSubsequentMultiTilesTransDmg : %i , ubOwner : %i , bLevel : %i )\n", sGridNo, sWoundAmt ,uiDist, (int)*pfRecompileMovementCosts , (int)fOnlyWalls , bMultiStructSpecialFlag , (int)fSubSequentMultiTilesTransitionDamage , ubOwner.i , bLevel ); MPDebugMsg(tmpMPDbgString); } #endif @@ -1511,12 +1511,12 @@ void ExplosiveDamageGridNo( INT32 sGridNo, INT16 sWoundAmt, UINT32 uiDist, } -BOOLEAN DamageSoldierFromBlast( UINT16 ubPerson, UINT16 ubOwner, INT32 sBombGridNo, INT16 sWoundAmt, INT16 sBreathAmt, UINT32 uiDist, UINT16 usItem, INT16 sSubsequent, BOOL fFromRemoteClient ) +BOOLEAN DamageSoldierFromBlast( SoldierID ubPerson, SoldierID ubOwner, INT32 sBombGridNo, INT16 sWoundAmt, INT16 sBreathAmt, UINT32 uiDist, UINT16 usItem, INT16 sSubsequent, BOOL fFromRemoteClient ) { // OJW - 20091028 if (is_networked && is_client) { - SOLDIERTYPE* pSoldier = MercPtrs[ubPerson]; + SOLDIERTYPE* pSoldier = ubPerson; if (pSoldier != NULL) { // only the owner of a merc may send damage (as this takes into account equipped armor) @@ -1532,9 +1532,9 @@ BOOLEAN DamageSoldierFromBlast( UINT16 ubPerson, UINT16 ubOwner, INT32 sBombGrid } } #ifdef JA2BETAVERSION - CHAR tmpMPDbgString[512]; - sprintf(tmpMPDbgString,"DamageSoldierFromBlast ( ubPerson : %i , ubOwner : %i , sBombGridNo : %i , sWoundAmt : %i , sBreathAmt : %i , uiDist : %i , usItem : %i , sSubs : %i , fFromRemoteClient : %i )\n",ubPerson, ubOwner , sBombGridNo , sWoundAmt , sBreathAmt , uiDist , usItem , sSubsequent , fFromRemoteClient ); - MPDebugMsg(tmpMPDbgString); + CHAR tmpMPDbgString[512]; + sprintf(tmpMPDbgString,"DamageSoldierFromBlast ( ubPerson : %i , ubOwner : %i , sBombGridNo : %i , sWoundAmt : %i , sBreathAmt : %i , uiDist : %i , usItem : %i , sSubs : %i , fFromRemoteClient : %i )\n",ubPerson.i, ubOwner.i , sBombGridNo , sWoundAmt , sBreathAmt , uiDist , usItem , sSubsequent , fFromRemoteClient ); + MPDebugMsg(tmpMPDbgString); #endif } @@ -1547,7 +1547,7 @@ BOOLEAN DamageSoldierFromBlast( UINT16 ubPerson, UINT16 ubOwner, INT32 sBombGrid BOOLEAN fFlashbang = Explosive[Item[usItem].ubClassIndex].ubType == EXPLOSV_FLASHBANG; UINT16 usHalfExplosionRadius; - pSoldier = MercPtrs[ ubPerson ]; // someone is here, and they're gonna get hurt + pSoldier = ubPerson; // someone is here, and they're gonna get hurt if (!pSoldier->bActive || !pSoldier->bInSector || !pSoldier->stats.bLife ) return( FALSE ); @@ -1612,29 +1612,29 @@ BOOLEAN DamageSoldierFromBlast( UINT16 ubPerson, UINT16 ubOwner, INT32 sBombGrid // SANDRO - STOMP traits else { - if ( ubOwner < TOTAL_SOLDIERS && (MercPtrs[ ubOwner ] != NULL) && gGameOptions.fNewTraitSystem) + if ( ubOwner < TOTAL_SOLDIERS && gGameOptions.fNewTraitSystem) { // Demolitions damage bonus with bombs and mines - if ( HAS_SKILL_TRAIT( MercPtrs[ ubOwner ], DEMOLITIONS_NT ) && + if ( HAS_SKILL_TRAIT( ubOwner, DEMOLITIONS_NT ) && Explosive[Item[usItem].ubClassIndex].ubType == EXPLOSV_NORMAL && Item[usItem].usItemClass == IC_BOMB && (!ItemIsAttachment(usItem) || ItemIsMine(usItem))) { sNewWoundAmt = (INT16)(sNewWoundAmt * (100 + gSkillTraitValues.ubDEDamageOfBombsAndMines) / 100.0f + 0.5f); } // Heavy Weapons trait bonus damage to tanks - if ( HAS_SKILL_TRAIT( MercPtrs[ubOwner], HEAVY_WEAPONS_NT ) && (ARMED_VEHICLE( pSoldier ) || ENEMYROBOT( pSoldier )) && + if ( HAS_SKILL_TRAIT( ubOwner, HEAVY_WEAPONS_NT ) && (ARMED_VEHICLE( pSoldier ) || ENEMYROBOT( pSoldier )) && Explosive[Item[usItem].ubClassIndex].ubType == EXPLOSV_NORMAL ) { - sNewWoundAmt = (INT16)(sNewWoundAmt * (100 + gSkillTraitValues.ubHWDamageTanksBonusPercent * NUM_SKILL_TRAITS( MercPtrs[ ubOwner ], HEAVY_WEAPONS_NT )) / 100.0f + 0.5f); // +30% + sNewWoundAmt = (INT16)(sNewWoundAmt * (100 + gSkillTraitValues.ubHWDamageTanksBonusPercent * NUM_SKILL_TRAITS( ubOwner, HEAVY_WEAPONS_NT )) / 100.0f + 0.5f); // +30% } // Heavy Weapons trait bonus damage with rocket, grenade launchers and mortar - else if ( HAS_SKILL_TRAIT( MercPtrs[ ubOwner ], HEAVY_WEAPONS_NT ) && + else if ( HAS_SKILL_TRAIT( ubOwner, HEAVY_WEAPONS_NT ) && Explosive[Item[usItem].ubClassIndex].ubType == EXPLOSV_NORMAL && ((Item[usItem].usItemClass == IC_BOMB && ItemIsAttachment(usItem) && !ItemIsMine(usItem) ) || // mortar shells (Item[usItem].usItemClass == IC_GRENADE && (ItemIsGLgrenade(usItem) || ItemIsElectronic(usItem)) ) || // rockets for rocketlaunchers (I haven't found any other way) (Item[usItem].usItemClass == IC_LAUNCHER ) || ItemIsRocketLauncher(usItem) || ItemIsSingleShotRocketLauncher(usItem) ) ) { - sNewWoundAmt = (INT16)(sNewWoundAmt * (100 + gSkillTraitValues.ubHWDamageBonusPercentForHW * NUM_SKILL_TRAITS( MercPtrs[ ubOwner ], HEAVY_WEAPONS_NT )) / 100.0f + 0.5f); // +15% + sNewWoundAmt = (INT16)(sNewWoundAmt * (100 + gSkillTraitValues.ubHWDamageBonusPercentForHW * NUM_SKILL_TRAITS( ubOwner, HEAVY_WEAPONS_NT )) / 100.0f + 0.5f); // +15% } } @@ -1890,9 +1890,9 @@ BOOLEAN DamageSoldierFromBlast( UINT16 ubPerson, UINT16 ubOwner, INT32 sBombGrid pSoldier->ubMiscSoldierFlags |= SOLDIER_MISC_HURT_BY_EXPLOSION; - if ( ubOwner != NOBODY && MercPtrs[ ubOwner ]->bTeam == gbPlayerNum && pSoldier->bTeam != gbPlayerNum ) + if ( ubOwner != NOBODY && ubOwner->bTeam == gbPlayerNum && pSoldier->bTeam != gbPlayerNum ) { - ProcessImplicationsOfPCAttack( MercPtrs[ ubOwner ], &pSoldier, REASON_EXPLOSION ); + ProcessImplicationsOfPCAttack( ubOwner, &pSoldier, REASON_EXPLOSION ); } return( TRUE ); @@ -2163,7 +2163,7 @@ BOOLEAN DishOutGasDamage( SOLDIERTYPE * pSoldier, EXPLOSIVETYPE * pExplosive, IN return( fRecompileMovementCosts ); } -BOOLEAN ExpAffect( INT32 sBombGridNo, INT32 sGridNo, UINT32 uiDist, UINT16 usItem, UINT16 ubOwner, INT16 sSubsequent, BOOLEAN *pfMercHit, INT8 bLevel, INT32 iSmokeEffectID ) +BOOLEAN ExpAffect( INT32 sBombGridNo, INT32 sGridNo, UINT32 uiDist, UINT16 usItem, SoldierID ubOwner, INT16 sSubsequent, BOOLEAN *pfMercHit, INT8 bLevel, INT32 iSmokeEffectID ) { #ifdef JA2BETAVERSION if (is_networked) { @@ -2174,7 +2174,7 @@ BOOLEAN ExpAffect( INT32 sBombGridNo, INT32 sGridNo, UINT32 uiDist, UINT16 usIte #endif INT16 sWoundAmt = 0,sBreathAmt = 0, /* sNewWoundAmt = 0, sNewBreathAmt = 0, */ sStructDmgAmt; - UINT16 ubPerson; + SoldierID ubPerson; SOLDIERTYPE *pSoldier; EXPLOSIVETYPE *pExplosive; INT16 sX, sY; @@ -2533,7 +2533,7 @@ BOOLEAN ExpAffect( INT32 sBombGridNo, INT32 sGridNo, UINT32 uiDist, UINT16 usIte return( fRecompileMovementCosts ); } - pSoldier = MercPtrs[ ubPerson ]; // someone is here, and they're gonna get hurt + pSoldier = ubPerson; // someone is here, and they're gonna get hurt // silversurfer: Gas now only has an effect when the container had time to emit some. Initially it will do nothing. // This prevents the problem that we have to suffer two times without a chance to react (1st when the grenade hits our position, 2nd when our turn starts) @@ -2918,11 +2918,11 @@ void GetRayStopInfo( UINT32 uiNewSpot, UINT8 ubDir, INT8 bLevel, BOOLEAN fSmokeE -void SpreadEffect( INT32 sGridNo, UINT8 ubRadius, UINT16 usItem, UINT16 ubOwner, BOOLEAN fSubsequent, INT8 bLevel, INT32 iSmokeEffectID, BOOL fFromRemoteClient, BOOL fNewSmokeEffect ) +void SpreadEffect( INT32 sGridNo, UINT8 ubRadius, UINT16 usItem, SoldierID ubOwner, BOOLEAN fSubsequent, INT8 bLevel, INT32 iSmokeEffectID, BOOL fFromRemoteClient, BOOL fNewSmokeEffect ) { if (is_networked && is_client) { - SOLDIERTYPE* pAttacker = MercPtrs[ubOwner]; + SOLDIERTYPE* pAttacker = ubOwner; if (pAttacker != NULL) { if (IsOurSoldier(pAttacker) || (pAttacker->bTeam == 1 && is_server)) @@ -2932,7 +2932,7 @@ void SpreadEffect( INT32 sGridNo, UINT8 ubRadius, UINT16 usItem, UINT16 ubOwner, { // let all the other clients know we are spawning this effect // and align them with our random number generator - send_spreadeffect(sGridNo,ubRadius,usItem,ubOwner,fSubsequent,bLevel,iSmokeEffectID); + send_spreadeffect(sGridNo, ubRadius, usItem, ubOwner, fSubsequent, bLevel, iSmokeEffectID); } } else if (!fFromRemoteClient) @@ -3803,7 +3803,7 @@ void AddBombToQueue( UINT32 uiWorldBombIndex, UINT32 uiTimeStamp, BOOL fFromRemo if (IsOurSoldier((SOLDIERTYPE*)gubPersonToSetOffExplosions) || IsOurSoldier((SOLDIERTYPE*)soldierID)) { // we set off the bomb (could be failed disarm) or we own it, tell the other clients we are setting it off - send_detonate_explosive(iWorldIndex,gubPersonToSetOffExplosions); + send_detonate_explosive(iWorldIndex, gubPersonToSetOffExplosions); } else if (gWorldBombs[uiWorldBombIndex].bIsFromRemotePlayer && !fFromRemoteClient) { @@ -3932,10 +3932,10 @@ BOOLEAN ActivateSurroundingTripwire( SoldierID ubID, INT32 sGridNo, INT8 bLevel, // SANDRO - merc records // only if we blew up somebody not in our team(no achievement for blowing our guys :)), only if owner exists and have profile - if ( (MercPtrs[ubID]->bTeam != gbPlayerNum) && ((*pObj)[0]->data.misc.ubBombOwner > 1) ) + if ( (ubID->bTeam != gbPlayerNum) && ((*pObj)[0]->data.misc.ubBombOwner > 1) ) { - if ( MercPtrs[ ((*pObj)[0]->data.misc.ubBombOwner - 2) ]->ubProfile != NO_PROFILE && MercPtrs[ ((*pObj)[0]->data.misc.ubBombOwner - 2) ]->bTeam == gbPlayerNum ) - gMercProfiles[ MercPtrs[ ((*pObj)[0]->data.misc.ubBombOwner - 2) ]->ubProfile ].records.usExpDetonated++; + if ( ((*pObj)[0]->data.misc.ubBombOwner - 2)->ubProfile != NO_PROFILE && ((*pObj)[0]->data.misc.ubBombOwner - 2)->bTeam == gbPlayerNum ) + gMercProfiles[ ((*pObj)[0]->data.misc.ubBombOwner - 2)->ubProfile ].records.usExpDetonated++; } /*if (pObj->usItem != ACTION_ITEM || (*pObj)[0]->data.misc.bActionValue == ACTION_ITEM_BLOW_UP) @@ -3962,7 +3962,7 @@ BOOLEAN ActivateSurroundingTripwire( SoldierID ubID, INT32 sGridNo, INT8 bLevel, } // Flugente: A special function for tripwire gun traps. Search if pObj has a gun attached. If so, fire a shot from that gun in a specific direction. Afterwards place the gun on the ground -void CheckAndFireTripwireGun( OBJECTTYPE* pObj, INT32 sGridNo, INT8 bLevel, UINT16 ubId, UINT8 ubDirection ) +void CheckAndFireTripwireGun( OBJECTTYPE* pObj, INT32 sGridNo, INT8 bLevel, SoldierID ubId, UINT8 ubDirection ) { if ( !pObj ) return; @@ -3980,7 +3980,7 @@ void CheckAndFireTripwireGun( OBJECTTYPE* pObj, INT32 sGridNo, INT8 bLevel, UINT gTacticalStatus.uiFlags |= (DISALLOW_SIGHT | CHECK_SIGHT_AT_END_OF_ATTACK); } - FireFragmentsTrapGun( MercPtrs[ubId], sGridNo, 0, pObj, ubDirection ); + FireFragmentsTrapGun( ubId, sGridNo, 0, pObj, ubDirection ); // this is important... if not set, the game will remain in a loop gTacticalStatus.ubAttackBusyCount = 0; @@ -4055,11 +4055,11 @@ void HandleExplosionQueue( void ) if ( sSoundID > NO_ALT_SOUND ) PlayJA2Sample( sSoundID, RATE_11025, SoundVolume( HIGHVOLUME, sGridNo ), 1, SoundDir( sGridNo ) ); - UINT16 ubID = WhoIsThere2( sGridNo, ubLevel ); + SoldierID ubID = WhoIsThere2( sGridNo, ubLevel ); if ( ubID != NOBODY ) { - SOLDIERTYPE* pSoldier = MercPtrs[ubID]; + SOLDIERTYPE* pSoldier = ubID; INT16 damage = Explosive[Item[pObj->usItem].ubClassIndex].ubDamage * 0.67f + Random( Explosive[Item[pObj->usItem].ubClassIndex].ubDamage * 0.67f ); INT16 breathdamage = Explosive[Item[pObj->usItem].ubClassIndex].ubStunDamage * 0.67f + Random( Explosive[Item[pObj->usItem].ubClassIndex].ubStunDamage * 0.67f ); @@ -4172,7 +4172,7 @@ void HandleExplosionQueue( void ) INT16 sX, sY; ConvertGridNoToCenterCellXY(sGridNo, &sX, &sY); - fAttFound=HandleAttachedExplosions( (UINT8) ((*pObj)[0]->data.misc.ubBombOwner - 2), sX, sY, 0, + fAttFound = HandleAttachedExplosions( ((*pObj)[0]->data.misc.ubBombOwner - 2), sX, sY, 0, sGridNo, (*pObj)[0]->data.misc.usBombItem, FALSE, ubLevel, (*pObj)[0]->data.ubDirection, pObj); } } @@ -4219,7 +4219,7 @@ void HandleExplosionQueue( void ) // determine gridno to attack - smoke signal required. Otherwise, it is assumed the radio operator ordered the bombing of his OWN position // if we cannot even find a radio operator, all bets are off - target a random gridno // the usual +/- 2 shenanigans - UINT16 usOwner = NOBODY; + SoldierID usOwner = NOBODY; if ( (*pObj)[0]->data.misc.ubBombOwner > 1 ) usOwner = (*pObj)[0]->data.misc.ubBombOwner - 2; @@ -4251,7 +4251,7 @@ void HandleExplosionQueue( void ) // bomb objects only store the SIDE who placed the bomb! :-( if ( (*pObj)[0]->data.misc.ubBombOwner > 1 ) { - IgniteExplosion( (UINT8) ((*pObj)[0]->data.misc.ubBombOwner - 2), sX, sY, 0, sGridNo, (*pObj)[0]->data.misc.usBombItem, ubLevel, (*pObj)[0]->data.ubDirection, pObj); + IgniteExplosion( ((*pObj)[0]->data.misc.ubBombOwner - 2), sX, sY, 0, sGridNo, (*pObj)[0]->data.misc.usBombItem, ubLevel, (*pObj)[0]->data.ubDirection, pObj); } else { @@ -4704,12 +4704,12 @@ void SetOffBombsByFrequency( SoldierID ubID, INT8 bFrequency ) // SANDRO - added merc records and some exp if ( ((*pObj)[0]->data.misc.ubBombOwner) > 1 ) { - if ( MercPtrs[((*pObj)[0]->data.misc.ubBombOwner - 2)]->ubProfile != NO_PROFILE && - MercPtrs[((*pObj)[0]->data.misc.ubBombOwner - 2)]->bTeam == gbPlayerNum ) + if ( ((*pObj)[0]->data.misc.ubBombOwner - 2)->ubProfile != NO_PROFILE && + ((*pObj)[0]->data.misc.ubBombOwner - 2)->bTeam == gbPlayerNum ) { - gMercProfiles[MercPtrs[((*pObj)[0]->data.misc.ubBombOwner - 2)]->ubProfile].records.usExpDetonated++; + gMercProfiles[((*pObj)[0]->data.misc.ubBombOwner - 2)->ubProfile].records.usExpDetonated++; - StatChange( MercPtrs[((*pObj)[0]->data.misc.ubBombOwner - 2)], EXPLODEAMT, ( 5 ), FALSE ); + StatChange( ((*pObj)[0]->data.misc.ubBombOwner - 2), EXPLODEAMT, ( 5 ), FALSE ); } } @@ -4804,12 +4804,12 @@ void SetOffBombsByFrequency( SoldierID ubID, INT8 bFrequency ) // SANDRO - added merc records and some exp if ( ((*pObj)[0]->data.misc.ubBombOwner) > 1 ) { - if ( MercPtrs[((*pObj)[0]->data.misc.ubBombOwner - 2)]->ubProfile != NO_PROFILE && - MercPtrs[((*pObj)[0]->data.misc.ubBombOwner - 2)]->bTeam == gbPlayerNum ) + if ( ((*pObj)[0]->data.misc.ubBombOwner - 2)->ubProfile != NO_PROFILE && + ((*pObj)[0]->data.misc.ubBombOwner - 2)->bTeam == gbPlayerNum ) { - gMercProfiles[MercPtrs[((*pObj)[0]->data.misc.ubBombOwner - 2)]->ubProfile].records.usExpDetonated++; + gMercProfiles[((*pObj)[0]->data.misc.ubBombOwner - 2)->ubProfile].records.usExpDetonated++; - StatChange( MercPtrs[((*pObj)[0]->data.misc.ubBombOwner - 2)], EXPLODEAMT, ( 5 ), FALSE ); + StatChange( ((*pObj)[0]->data.misc.ubBombOwner - 2), EXPLODEAMT, ( 5 ), FALSE ); } } @@ -4979,8 +4979,8 @@ BOOLEAN SetOffBombsInGridNo( SoldierID ubID, INT32 sGridNo, BOOLEAN fAllBombs, I // only if we blew up somebody not in our team(no achievement for blowing our guys :)), only if owner exists and have profile if ( (ubID->bTeam != gbPlayerNum) && ((*pObj)[0]->data.misc.ubBombOwner > 1) ) { - if ( MercPtrs[ ((*pObj)[0]->data.misc.ubBombOwner - 2) ]->ubProfile != NO_PROFILE && MercPtrs[ ((*pObj)[0]->data.misc.ubBombOwner - 2) ]->bTeam == gbPlayerNum ) - gMercProfiles[ MercPtrs[ ((*pObj)[0]->data.misc.ubBombOwner - 2) ]->ubProfile ].records.usExpDetonated++; + if ( ((*pObj)[0]->data.misc.ubBombOwner - 2)->ubProfile != NO_PROFILE && ((*pObj)[0]->data.misc.ubBombOwner - 2)->bTeam == gbPlayerNum ) + gMercProfiles[ ((*pObj)[0]->data.misc.ubBombOwner - 2)->ubProfile ].records.usExpDetonated++; } /*if (pObj->usItem != ACTION_ITEM || (*pObj)[0]->data.misc.bActionValue == ACTION_ITEM_BLOW_UP) @@ -5305,7 +5305,7 @@ void UpdateSAMDoneRepair( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ ) // loop through civ team and find // anybody who is an NPC and // see if they get angry -void HandleBuldingDestruction( INT32 sGridNo, UINT16 ubOwner ) +void HandleBuldingDestruction( INT32 sGridNo, SoldierID ubOwner ) { SOLDIERTYPE * pSoldier; UINT16 cnt; @@ -5315,7 +5315,7 @@ void HandleBuldingDestruction( INT32 sGridNo, UINT16 ubOwner ) return; } - if ( MercPtrs[ ubOwner ]->bTeam != gbPlayerNum ) + if ( ubOwner->bTeam != gbPlayerNum ) { return; } @@ -5339,7 +5339,7 @@ void HandleBuldingDestruction( INT32 sGridNo, UINT16 ubOwner ) if ( DoesNPCOwnBuilding( pSoldier, sGridNo ) ) { - MakeNPCGrumpyForMinorOffense( pSoldier, MercPtrs[ ubOwner ] ); + MakeNPCGrumpyForMinorOffense( pSoldier, ubOwner ); } } } @@ -5624,9 +5624,9 @@ void HavePersonAtGridnoStop( UINT32 sGridNo ) SoldierID ubID = WhoIsThere2( sGridNo, 0 ); //is it a valid person - if ( (ubID != NOBODY) && (MercPtrs[ ubID ]->bTeam == gbPlayerNum) ) + if ( (ubID != NOBODY) && (ubID->bTeam == gbPlayerNum) ) { - SOLDIERTYPE *pSoldier = MercPtrs[ ubID ]; + SOLDIERTYPE *pSoldier = ubID; //Stop the merc pSoldier->EVENT_StopMerc( pSoldier->sGridNo, pSoldier->ubDirection ); @@ -5732,10 +5732,10 @@ void HandleDestructionOfPowerGenFan() // Have a qualified merc say a quote // //Get a random qualified merc to say the quote - INT16 bID = RandomSoldierIdFromNewMercsOnPlayerTeam(); - if( bID != -1 ) + SoldierID bID = RandomSoldierIdFromNewMercsOnPlayerTeam(); + if( bID != NOBODY ) { - DelayedMercQuote( Menptr[ bID ].ubProfile, QUOTE_ACCEPT_CONTRACT_RENEWAL, GetWorldTotalSeconds() + 2 ); + DelayedMercQuote( bID->ubProfile, QUOTE_ACCEPT_CONTRACT_RENEWAL, GetWorldTotalSeconds() + 2 ); } } @@ -5773,8 +5773,8 @@ void HandleSeeingFortifiedDoor( UINT32 sGridNo ) gJa25SaveStruct.uiJa25GeneralFlags |= JA_GF__PLAYER_HAS_SEEN_FORTIFIED_DOOR; //find out whos is the one walking across the trap - INT16 sID = WhoIsThere2( sGridNo, 0 ); - if( sID != NOBODY && IsSoldierQualifiedMerc( &Menptr[ sID ] ) ) + SoldierID sID = WhoIsThere2( sGridNo, 0 ); + if( sID != NOBODY && IsSoldierQualifiedMerc( sID ) ) { } else @@ -5783,10 +5783,10 @@ void HandleSeeingFortifiedDoor( UINT32 sGridNo ) sID = RandomSoldierIdFromNewMercsOnPlayerTeam(); } - if( sID != -1 ) + if( sID != NOBODY ) { //say the quote - TacticalCharacterDialogue( &Menptr[ sID ], QUOTE_LENGTH_OF_CONTRACT ); + TacticalCharacterDialogue( sID, QUOTE_LENGTH_OF_CONTRACT ); } } @@ -5801,11 +5801,11 @@ void HandleSwitchToOpenFortifiedDoor( UINT32 sGridNo ) //remeber that the switch to open the forified door on level 1, has been pulled gJa25SaveStruct.ubStatusOfFortifiedDoor = FD__OPEN; - INT16 bID = RandomSoldierIdFromNewMercsOnPlayerTeam(); + SoldierID bID = RandomSoldierIdFromNewMercsOnPlayerTeam(); - if( bID != -1 ) + if( bID != NOBODY ) { - TacticalCharacterDialogue( &Menptr[ bID ], QUOTE_COMMENT_BEFORE_HANG_UP ); + TacticalCharacterDialogue( bID, QUOTE_COMMENT_BEFORE_HANG_UP ); } } @@ -5834,7 +5834,7 @@ void HandleSeeingPowerGenFan( UINT32 sGridNo ) if( ubPerson != NOBODY ) { - pSoldier = &Menptr[ ubPerson ]; + pSoldier = ubPerson; //if the fan is stopped And is this merc is a qualified merc but Not a power gen fan qualified merc? if( IsSoldierQualifiedMerc( pSoldier ) && fFanIsStopped ) @@ -5886,7 +5886,7 @@ void HandleSeeingPowerGenFan( UINT32 sGridNo ) } #endif -void HandleBuddyExplosions(UINT8 ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGridNo, UINT16 usItem, BOOLEAN fLocate, INT8 bLevel, UINT8 ubDirection ) +void HandleBuddyExplosions(SoldierID ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGridNo, UINT16 usItem, BOOLEAN fLocate, INT8 bLevel, UINT8 ubDirection ) { // Flugente: Items can have secondary explosions if ( Item[usItem].usBuddyItem ) @@ -5907,7 +5907,7 @@ void HandleBuddyExplosions(UINT8 ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sG } // sevenfm: handle explosive items from attachments -BOOLEAN HandleAttachedExplosions(UINT8 ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGridNo, UINT16 usItem, BOOLEAN fLocate, INT8 bLevel, UINT8 ubDirection, OBJECTTYPE * pObj) +BOOLEAN HandleAttachedExplosions( SoldierID ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGridNo, UINT16 usItem, BOOLEAN fLocate, INT8 bLevel, UINT8 ubDirection, OBJECTTYPE * pObj) { BOOLEAN binderFound = FALSE; BOOLEAN detonator = FALSE; @@ -6264,10 +6264,10 @@ void RoofDestruction( INT32 sGridNo, BOOLEAN fWithExplosion ) // if there is anybody at the floor level, damage them with the debris // we have to do this BEFORE people drop down. It would otherwise be possible for a falling person to avoid this damage, depending on order of collapsing and possible gridno-shifts. - UINT16 ubId = WhoIsThere2( sGridNo, 0 ); + SoldierID ubId = WhoIsThere2( sGridNo, 0 ); if ( ubId != NOBODY ) { - pSoldier = MercPtrs[ubId]; + pSoldier = ubId; pSoldier->EVENT_StopMerc( pSoldier->sGridNo, pSoldier->ubDirection ); @@ -6283,7 +6283,7 @@ void RoofDestruction( INT32 sGridNo, BOOLEAN fWithExplosion ) ubId = WhoIsThere2( sGridNo, 1 ); if ( ubId != NOBODY ) { - pSoldier = MercPtrs[ubId]; + pSoldier = ubId; INT32 soldierdropoffgridno = sGridNo; if ( !IsLocationSittable( soldierdropoffgridno, FALSE ) ) diff --git a/TileEngine/Explosion Control.h b/TileEngine/Explosion Control.h index 029f55f8..d4c8e531 100644 --- a/TileEngine/Explosion Control.h +++ b/TileEngine/Explosion Control.h @@ -132,16 +132,16 @@ void RemoveActiveExplosionMarkers(); #define GASMASK_MIN_STATUS 70 // OJW - 20091028 - Explosion damage sync -BOOLEAN DamageSoldierFromBlast( UINT16 ubPerson, UINT16 ubOwner, INT32 sBombGridNo, INT16 sWoundAmt, INT16 sBreathAmt, UINT32 uiDist, UINT16 usItem, INT16 sSubsequent, BOOL fFromRemoteClient = FALSE ); +BOOLEAN DamageSoldierFromBlast( SoldierID ubPerson, SoldierID ubOwner, INT32 sBombGridNo, INT16 sWoundAmt, INT16 sBreathAmt, UINT32 uiDist, UINT16 usItem, INT16 sSubsequent, BOOL fFromRemoteClient = FALSE ); BOOLEAN DishOutGasDamage( SOLDIERTYPE * pSoldier, EXPLOSIVETYPE * pExplosive, INT16 sSubsequent, BOOLEAN fRecompileMovementCosts, INT16 sWoundAmt, INT16 sBreathAmt, SoldierID ubOwner, BOOL fFromRemoteClient = FALSE ); -void SpreadEffect( INT32 sGridNo, UINT8 ubRadius, UINT16 usItem, UINT16 ubOwner, BOOLEAN fSubsequent, INT8 bLevel, INT32 iSmokeEffectNum, BOOL fFromRemoteClient = FALSE, BOOL fNewSmokeEffect = FALSE ); +void SpreadEffect( INT32 sGridNo, UINT8 ubRadius, UINT16 usItem, SoldierID ubOwner, BOOLEAN fSubsequent, INT8 bLevel, INT32 iSmokeEffectNum, BOOL fFromRemoteClient = FALSE, BOOL fNewSmokeEffect = FALSE ); void AddBombToQueue( UINT32 uiWorldBombIndex, UINT32 uiTimeStamp, BOOL fFromRemoteClient = FALSE ); // Flugente: activate everything connected to a tripwire in the surrounding if sGridNo on level bLevel with regard to the tripwire netwrok and hierarchy determined by ubFlag BOOLEAN ActivateSurroundingTripwire( SoldierID ubID, INT32 sGridNo, INT8 bLevel, UINT32 ubFlag ); // Flugente: A special function for tripwire gun traps. Search if pObj has a gun attached. If so, fire a shot from that gun in a specific direction. Afterwards place the gun on the ground -void CheckAndFireTripwireGun( OBJECTTYPE* pObj, INT32 sGridNo, INT8 bLevel, UINT16 ubId, UINT8 ubDirection ); +void CheckAndFireTripwireGun( OBJECTTYPE* pObj, INT32 sGridNo, INT8 bLevel, SoldierID ubId, UINT8 ubDirection ); extern void ToggleActionItemsByFrequency( INT8 bFrequency ); extern void PerformItemAction( INT32 sGridNo, OBJECTTYPE * pObj ); @@ -166,15 +166,15 @@ extern void HandleSeeingFortifiedDoor( UINT32 sGridNo );//Ja25 UB void ExplosiveDamageGridNo( INT32 sGridNo, INT16 sWoundAmt, UINT32 uiDist, BOOLEAN *pfRecompileMovementCosts, - BOOLEAN fOnlyWalls, INT8 bMultiStructSpecialFlag, BOOLEAN fSubSequentMultiTilesTransitionDamage, UINT16 ubOwner, + BOOLEAN fOnlyWalls, INT8 bMultiStructSpecialFlag, BOOLEAN fSubSequentMultiTilesTransitionDamage, SoldierID ubOwner, INT8 bLevel, UINT8 ubReason ); // Flugente: handle secondary explosive effects -void HandleBuddyExplosions(UINT8 ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGridNo, UINT16 usItem, BOOLEAN fLocate, INT8 bLevel, UINT8 ubDirection ); +void HandleBuddyExplosions( SoldierID ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGridNo, UINT16 usItem, BOOLEAN fLocate, INT8 bLevel, UINT8 ubDirection ); // sevenfm: handle explosive items from attachments -BOOLEAN HandleAttachedExplosions(UINT8 ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGridNo, UINT16 usItem, BOOLEAN fLocate, INT8 bLevel, UINT8 ubDirection, OBJECTTYPE * pObj ); +BOOLEAN HandleAttachedExplosions( SoldierID ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 sGridNo, UINT16 usItem, BOOLEAN fLocate, INT8 bLevel, UINT8 ubDirection, OBJECTTYPE * pObj ); void CheckForBuriedBombsAndRemoveFlags( INT32 sGridNo, INT8 bLevel ); UINT16 CalcTotalVolatility(OBJECTTYPE * pObj); BOOLEAN FindBinderAttachment (OBJECTTYPE * pObj); diff --git a/TileEngine/SmokeEffects.cpp b/TileEngine/SmokeEffects.cpp index 0ee78b3f..a4bf340e 100644 --- a/TileEngine/SmokeEffects.cpp +++ b/TileEngine/SmokeEffects.cpp @@ -332,7 +332,7 @@ INT32 NewSmokeEffect( INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT16 ubOwner, return( iSmokeIndex ); } -INT32 NewSmokeEffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT16 ubOwner, BOOLEAN fFromRemoteClient, UINT8 ubDuration, UINT8 ubRadius, UINT8 ubGeneration) +INT32 NewSmokeEffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, SoldierID ubOwner, BOOLEAN fFromRemoteClient, UINT8 ubDuration, UINT8 ubRadius, UINT8 ubGeneration) { SMOKEEFFECT *pSmoke; INT32 iSmokeIndex; diff --git a/TileEngine/SmokeEffects.h b/TileEngine/SmokeEffects.h index 590f1d8a..5b899f3d 100644 --- a/TileEngine/SmokeEffects.h +++ b/TileEngine/SmokeEffects.h @@ -57,7 +57,7 @@ void AddSmokeEffectToTile( INT32 iSmokeEffectID, INT8 bType, INT32 sGridNo, INT8 void RemoveSmokeEffectFromTile( INT32 sGridNo, INT8 bLevel ); -INT32 NewSmokeEffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT16 ubOwner, BOOLEAN fFromRemoteClient = 0, UINT8 ubDuration = 0, UINT8 ubRadius = 0, UINT8 ubGeneration = 0); +INT32 NewSmokeEffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, SoldierID ubOwner, BOOLEAN fFromRemoteClient = 0, UINT8 ubDuration = 0, UINT8 ubRadius = 0, UINT8 ubGeneration = 0); BOOLEAN SaveSmokeEffectsToSaveGameFile( HWFILE hFile ); BOOLEAN LoadSmokeEffectsFromLoadGameFile( HWFILE hFile ); @@ -77,4 +77,4 @@ BOOLEAN CheckSmokeEffect(INT32 sGridNo, INT8 bLevel, INT8 bType); // find smoke effect on visible screen BOOLEAN FindVisibleSmokeEffect(INT8 bType); -#endif \ No newline at end of file +#endif diff --git a/TileEngine/Tile Animation.h b/TileEngine/Tile Animation.h index a428c77b..1a56eaba 100644 --- a/TileEngine/Tile Animation.h +++ b/TileEngine/Tile Animation.h @@ -38,70 +38,70 @@ typedef struct TAG_anitile { - struct TAG_anitile *pNext; - UINT32 uiFlags; // flags struct - UINT32 uiTimeLastUpdate; // Stuff for animated tiles + struct TAG_anitile *pNext; + UINT32 uiFlags; // flags struct + UINT32 uiTimeLastUpdate; // Stuff for animated tiles - LEVELNODE *pLevelNode; - UINT8 ubLevelID; - INT16 sCurrentFrame; - INT16 sStartFrame; - INT16 sDelay; - UINT16 usTileType; - UINT16 usNumFrames; + LEVELNODE *pLevelNode; + UINT8 ubLevelID; + INT16 sCurrentFrame; + INT16 sStartFrame; + INT16 sDelay; + UINT16 usTileType; + UINT16 usNumFrames; - UINT16 usMissAnimationPlayed; - UINT16 ubAttackerMissed; - INT16 sRelativeX; - INT16 sRelativeY; - INT16 sRelativeZ; - INT32 sGridNo; - UINT16 usTileIndex; + UINT16 usMissAnimationPlayed; + SoldierID ubAttackerMissed; + INT16 sRelativeX; + INT16 sRelativeY; + INT16 sRelativeZ; + INT32 sGridNo; + UINT16 usTileIndex; - UINT16 usCachedTileSubIndex; // sub Index - INT16 sCachedTileID; // Index into cached tile ID + UINT16 usCachedTileSubIndex; // sub Index + INT16 sCachedTileID; // Index into cached tile ID - UINT8 ubOwner; - UINT8 ubKeyFrame1; - UINT32 uiKeyFrame1Code; - UINT8 ubKeyFrame2; - UINT32 uiKeyFrame2Code; + UINT8 ubOwner; + UINT8 ubKeyFrame1; + UINT32 uiKeyFrame1Code; + UINT8 ubKeyFrame2; + UINT32 uiKeyFrame2Code; - UINT32 uiUserData; - UINT8 ubUserData2; - UINT32 uiUserData3; + UINT32 uiUserData; + UINT8 ubUserData2; + UINT32 uiUserData3; - INT8 bFrameCountAfterStart; - INT32 lightSprite; + INT8 bFrameCountAfterStart; + INT32 lightSprite; } ANITILE; typedef struct TAG_anitile_params { - UINT32 uiFlags; // flags struct - UINT8 ubLevelID; // Level ID for rendering layer - INT16 sStartFrame; // Start frame - INT16 sDelay; // Delay time - UINT16 usTileType; // Tile databse type ( optional ) - UINT16 usTileIndex; // Tile database index ( optional ) - INT16 sX; // World X ( optional ) - INT16 sY; // World Y ( optional ) - INT16 sZ; // World Z ( optional ) - INT32 sGridNo; // World GridNo + UINT32 uiFlags; // flags struct + UINT8 ubLevelID; // Level ID for rendering layer + INT16 sStartFrame; // Start frame + INT16 sDelay; // Delay time + UINT16 usTileType; // Tile databse type ( optional ) + UINT16 usTileIndex; // Tile database index ( optional ) + INT16 sX; // World X ( optional ) + INT16 sY; // World Y ( optional ) + INT16 sZ; // World Z ( optional ) + INT32 sGridNo; // World GridNo - LEVELNODE *pGivenLevelNode; // Levelnode for existing tile ( optional ) - CHAR8 zCachedFile[ 100 ]; // Filename for cached tile name ( optional ) + LEVELNODE *pGivenLevelNode; // Levelnode for existing tile ( optional ) + CHAR8 zCachedFile[ 100 ]; // Filename for cached tile name ( optional ) - UINT8 ubOwner; // UBID for the owner - UINT8 ubKeyFrame1; // Key frame 1 - UINT32 uiKeyFrame1Code; // Key frame code - UINT8 ubKeyFrame2; // Key frame 2 - UINT32 uiKeyFrame2Code; // Key frame code + UINT8 ubOwner; // UBID for the owner + UINT8 ubKeyFrame1; // Key frame 1 + UINT32 uiKeyFrame1Code; // Key frame code + UINT8 ubKeyFrame2; // Key frame 2 + UINT32 uiKeyFrame2Code; // Key frame code - UINT32 uiUserData; - UINT8 ubUserData2; - UINT32 uiUserData3; - INT32 lightSprite; + UINT32 uiUserData; + UINT8 ubUserData2; + UINT32 uiUserData3; + INT32 lightSprite; } ANITILE_PARAMS; diff --git a/TileEngine/structure.cpp b/TileEngine/structure.cpp index 8a2db1fb..6bad3e2f 100644 --- a/TileEngine/structure.cpp +++ b/TileEngine/structure.cpp @@ -1764,7 +1764,7 @@ BOOLEAN StructureDensity( STRUCTURE * pStructure, UINT8 * pubLevel0, UINT8 * pub return( TRUE ); } -INT8 DamageStructure( STRUCTURE * pStructure, UINT8 ubDamage, UINT8 ubReason, INT32 sGridNo, INT16 sX, INT16 sY, UINT16 ubOwner, INT32 sAntiMaterialImpact ) +INT8 DamageStructure( STRUCTURE * pStructure, UINT8 ubDamage, UINT8 ubReason, INT32 sGridNo, INT16 sX, INT16 sY, SoldierID ubOwner, INT32 sAntiMaterialImpact ) { // do damage to a structure; returns TRUE if the structure should be removed STRUCTURE *pBase; diff --git a/TileEngine/structure.h b/TileEngine/structure.h index 12dd50b1..b0a21599 100644 --- a/TileEngine/structure.h +++ b/TileEngine/structure.h @@ -91,7 +91,7 @@ STRUCTURE* GetTallestStructureOnGridnoDrag( INT32 sGridNo, INT8 bLevel ); // FUNCTIONS FOR DETERMINING STUFF THAT BLOCKS VIEW FOR TILE_bASED LOS INT8 GetBlockingStructureInfo( INT32 sGridNo, INT8 bDir, INT8 bNextDir, INT8 bLevel, INT8 *pStructHeight, STRUCTURE ** ppTallestStructure, BOOLEAN fWallsBlock ); -INT8 DamageStructure( STRUCTURE * pStructure, UINT8 ubDamage, UINT8 ubReason, INT32 sGridNo, INT16 sX, INT16 sY, UINT16 ubOwner, INT32 sAntiMaterialImpact = 0 ); +INT8 DamageStructure( STRUCTURE * pStructure, UINT8 ubDamage, UINT8 ubReason, INT32 sGridNo, INT16 sX, INT16 sY, SoldierID ubOwner, INT32 sAntiMaterialImpact = 0 ); // Material armour type enumeration enum From d149b6ffeae28a7d50ebe5503441113a48d43278 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 17 Nov 2024 22:39:58 +0200 Subject: [PATCH 089/192] Correct parameter order --- TileEngine/SmokeEffects.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TileEngine/SmokeEffects.cpp b/TileEngine/SmokeEffects.cpp index a4bf340e..2ea2d122 100644 --- a/TileEngine/SmokeEffects.cpp +++ b/TileEngine/SmokeEffects.cpp @@ -355,7 +355,7 @@ INT32 NewSmokeEffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, SoldierID ubOwne { // let all the other clients know we are spawning this effect // and align them with our random number generator - send_newsmokeeffect(sGridNo, usItem, ubOwner, bLevel, iSmokeIndex); + send_newsmokeeffect(sGridNo, usItem, bLevel, ubOwner, iSmokeIndex); } else if (!fFromRemoteClient) { From b74ccf3ddc78adba208b92eb0efd4ead91e7c0ca Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 17 Nov 2024 23:45:48 +0200 Subject: [PATCH 090/192] Convert to SoldierID --- Ja2/gamescreen.cpp | 10 +-- Ja2/gamescreen.h | 10 +-- Strategic/ASD.cpp | 2 +- Strategic/Assignments.cpp | 2 +- Strategic/Assignments.h | 4 +- Strategic/Auto Resolve.cpp | 4 +- Tactical/Handle UI.cpp | 122 ++++++++++++++-------------- Tactical/Handle UI.h | 8 +- Tactical/Interface Cursors.cpp | 2 +- Tactical/Interface Items.cpp | 44 +++++----- Tactical/Interface Panels.cpp | 6 +- Tactical/Interface Panels.h | 2 +- Tactical/Interface.cpp | 2 +- Tactical/Interface.h | 2 +- Tactical/Merc Entering.cpp | 76 ++++++++--------- Tactical/Merc Hiring.cpp | 4 +- Tactical/Merc Hiring.h | 2 +- Tactical/Overhead Types.h | 2 +- Tactical/Real Time Input.cpp | 4 +- Tactical/Soldier Control.h | 118 +++++++++++++-------------- Tactical/SoldierTooltips.cpp | 4 +- Tactical/Turn Based Input.cpp | 24 +++--- Tactical/UI Cursors.cpp | 36 ++++---- Tactical/UI Cursors.h | 4 +- Tactical/merc entering.h | 4 +- TacticalAI/AIInternals.h | 30 +++---- TacticalAI/AIList.cpp | 22 ++--- TacticalAI/AIList.h | 18 ++-- TacticalAI/AIMain.cpp | 34 ++++---- TacticalAI/Attacks.cpp | 54 ++++++------ TacticalAI/CreatureDecideAction.cpp | 4 +- TacticalAI/DecideAction.cpp | 8 +- TacticalAI/FindLocations.cpp | 10 +-- TacticalAI/Knowledge.cpp | 2 +- TacticalAI/Medical.cpp | 14 ++-- TacticalAI/NPC.cpp | 11 +-- TacticalAI/ai.h | 8 +- TileEngine/Explosion Control.cpp | 2 +- TileEngine/Explosion Control.h | 2 +- TileEngine/SmokeEffects.cpp | 2 +- TileEngine/SmokeEffects.h | 18 ++-- TileEngine/overhead map.cpp | 2 +- TileEngine/physics.cpp | 4 +- TileEngine/pits.cpp | 4 +- TileEngine/structure.cpp | 4 +- 45 files changed, 376 insertions(+), 375 deletions(-) diff --git a/Ja2/gamescreen.cpp b/Ja2/gamescreen.cpp index d95c5266..e4f9046d 100644 --- a/Ja2/gamescreen.cpp +++ b/Ja2/gamescreen.cpp @@ -108,10 +108,10 @@ INT32 giCounterPeriodOverlay = 0; BOOLEAN gfExitToNewSector = FALSE; //UINT8 gubNewSectorExitDirection; -BOOLEAN gfGameScreenLocateToSoldier = FALSE; -BOOLEAN gfEnteringMapScreen = FALSE; -UINT32 uiOldMouseCursor; -UINT16 gubPreferredInitialSelectedGuy = NOBODY; +BOOLEAN gfGameScreenLocateToSoldier = FALSE; +BOOLEAN gfEnteringMapScreen = FALSE; +UINT32 uiOldMouseCursor; +SoldierID gubPreferredInitialSelectedGuy = NOBODY; BOOLEAN gfTacticalIsModal = FALSE; MOUSE_REGION gTacticalDisableRegion; @@ -1038,7 +1038,7 @@ void TacticalScreenLocateToSoldier( ) 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 ); diff --git a/Ja2/gamescreen.h b/Ja2/gamescreen.h index 49a65019..11a0ccf3 100644 --- a/Ja2/gamescreen.h +++ b/Ja2/gamescreen.h @@ -1,7 +1,7 @@ #ifndef _GAMESCREEN_H #define _GAMESCREEN_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 UINT16 gubPreferredInitialSelectedGuy; +extern BOOLEAN gfGameScreenLocateToSoldier; +extern BOOLEAN gfEnteringMapScreen; +extern SoldierID gubPreferredInitialSelectedGuy; void EnterMapScreen( ); @@ -41,4 +41,4 @@ void InitHelicopterEntranceByMercs( void ); void InternalLeaveTacticalScreen( UINT32 uiNewScreen ); -#endif \ No newline at end of file +#endif diff --git a/Strategic/ASD.cpp b/Strategic/ASD.cpp index 41bad719..443c4d89 100644 --- a/Strategic/ASD.cpp +++ b/Strategic/ASD.cpp @@ -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 diff --git a/Strategic/Assignments.cpp b/Strategic/Assignments.cpp index 2a4aaec5..bed21b31 100644 --- a/Strategic/Assignments.cpp +++ b/Strategic/Assignments.cpp @@ -3776,7 +3776,7 @@ UINT32 CalculateSnitchInterrogationValue(SOLDIERTYPE *pSoldier, UINT16 *pusMaxPt } // 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 ) { // if nobody is here, nobody can fire FLOAT bestsamcth = 0.0f; diff --git a/Strategic/Assignments.h b/Strategic/Assignments.h index 03672ed7..fe5c2c05 100644 --- a/Strategic/Assignments.h +++ b/Strategic/Assignments.h @@ -318,7 +318,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); @@ -592,4 +592,4 @@ UINT8 CalcSoldierNeedForSleep( SOLDIERTYPE *pSoldier ); // Flugente: administration assignment FLOAT GetAdministrationPercentage( INT16 sX, INT16 sY ); -#endif \ No newline at end of file +#endif diff --git a/Strategic/Auto Resolve.cpp b/Strategic/Auto Resolve.cpp index 6613354a..e55eb561 100644 --- a/Strategic/Auto Resolve.cpp +++ b/Strategic/Auto Resolve.cpp @@ -3009,9 +3009,7 @@ void MercCellMouseClickCallback( MOUSE_REGION *reg, INT32 reason ) if( gpAR->pRobotCell ) { //if controller is retreating, make the robot retreat too. - UINT16 ubRobotControllerID; - - ubRobotControllerID = gpAR->pRobotCell->pSoldier->ubRobotRemoteHolderID; + SoldierID ubRobotControllerID = gpAR->pRobotCell->pSoldier->ubRobotRemoteHolderID; if( ubRobotControllerID == NOBODY ) { diff --git a/Tactical/Handle UI.cpp b/Tactical/Handle UI.cpp index aa5c7910..f07301e8 100644 --- a/Tactical/Handle UI.cpp +++ b/Tactical/Handle UI.cpp @@ -293,7 +293,7 @@ BOOLEAN gfResetUIMovementOptimization = FALSE; BOOLEAN gfResetUIItemCursorOptimization = FALSE; BOOLEAN gfBeginVehicleCursor = FALSE; INT32 gsOutOfRangeGridNo = NOWHERE; -UINT16 gubOutOfRangeMerc = NOBODY; +SoldierID gubOutOfRangeMerc = NOBODY; BOOLEAN gfOKForExchangeCursor = FALSE; UINT32 guiUIInterfaceSwapCursorsTime = 0; INT32 gsJumpOverGridNo = 0; @@ -463,29 +463,29 @@ BOOLEAN gfUICanBeginAllMoveCycle = FALSE; // GEts set so we know that the ne INT32 gsSelectedGridNo = 0; INT16 gsSelectedLevel = I_GROUND_LEVEL; -INT16 gsSelectedGuy = NOBODY; +SoldierID gsSelectedGuy = NOBODY; -BOOLEAN gfUIDisplayDamage = FALSE; -INT8 gbDamage = 0; -INT32 gsDamageGridNo = 0; +BOOLEAN gfUIDisplayDamage = FALSE; +INT8 gbDamage = 0; +INT32 gsDamageGridNo = 0; -BOOLEAN gfUIRefreshArrows = FALSE; +BOOLEAN gfUIRefreshArrows = FALSE; // Thse flags are not re-set after each frame -BOOLEAN gfPlotNewMovement = FALSE; -BOOLEAN gfPlotNewMovementNOCOST = FALSE; -UINT32 guiShowUPDownArrows = ARROWS_HIDE_UP | ARROWS_HIDE_DOWN; -INT8 gbAdjustStanceDiff = 0; -INT8 gbClimbID = 0; +BOOLEAN gfPlotNewMovement = FALSE; +BOOLEAN gfPlotNewMovementNOCOST = FALSE; +UINT32 guiShowUPDownArrows = ARROWS_HIDE_UP | ARROWS_HIDE_DOWN; +INT8 gbAdjustStanceDiff = 0; +INT8 gbClimbID = 0; -BOOLEAN gfUIShowExitEast = FALSE; -BOOLEAN gfUIShowExitWest = FALSE; -BOOLEAN gfUIShowExitNorth = FALSE; -BOOLEAN gfUIShowExitSouth = FALSE; -BOOLEAN gfUIShowExitExitGrid = FALSE; +BOOLEAN gfUIShowExitEast = FALSE; +BOOLEAN gfUIShowExitWest = FALSE; +BOOLEAN gfUIShowExitNorth = FALSE; +BOOLEAN gfUIShowExitSouth = FALSE; +BOOLEAN gfUIShowExitExitGrid = FALSE; -BOOLEAN gfUINewStateForIntTile = FALSE; +BOOLEAN gfUINewStateForIntTile = FALSE; BOOLEAN gfUIForceReExamineCursorData = FALSE; @@ -2210,7 +2210,7 @@ UINT32 UIHandleCMoveMerc( UI_EVENT *pUIEvent ) // anv: if we selected vehicle driver, move his vehicle if ( pSoldier->flags.uiStatusFlags & (SOLDIER_DRIVER ) ) { - pSoldier = GetSoldierStructureForVehicle( MercPtrs[ pSoldier->ubID ]->iVehicleId ); + pSoldier = GetSoldierStructureForVehicle( pSoldier->iVehicleId ); // anv: if shift is pressed, treat is as ram + move - flag has to be set for later add structure checks if ( _KeyDown( SHIFT ) ) { @@ -2981,7 +2981,7 @@ UINT32 UIHandleCAMercShoot( UI_EVENT *pUIEvent ) if ( gfUIFullTargetFound ) { // Get target soldier, if one exists - pTSoldier = MercPtrs[ gusUIFullTargetID ]; + pTSoldier = gusUIFullTargetID; } if ( pTSoldier != NULL ) @@ -3464,7 +3464,7 @@ BOOLEAN SelectedMercCanAffordMove( ) return( FALSE ); } -void GetMercClimbDirection( UINT16 ubSoldierID, BOOLEAN *pfGoDown, BOOLEAN *pfGoUp ) +void GetMercClimbDirection( SoldierID ubSoldierID, BOOLEAN *pfGoDown, BOOLEAN *pfGoUp ) { INT8 bNewDirection; SOLDIERTYPE *pSoldier; @@ -3625,11 +3625,11 @@ void ToggleLookCursorMode( UINT32 *puiNewEvent ) BOOLEAN UIHandleOnMerc( BOOLEAN fMovementMode ) { - SOLDIERTYPE *pSoldier; - UINT16 usSoldierIndex; - UINT32 uiMercFlags; - INT32 usMapPos; - BOOLEAN fFoundMerc = FALSE; + SOLDIERTYPE *pSoldier; + SoldierID usSoldierIndex; + UINT32 uiMercFlags; + INT32 usMapPos; + BOOLEAN fFoundMerc = FALSE; if( !GetMouseMapPos( &usMapPos) ) { @@ -3768,16 +3768,16 @@ BOOLEAN UIHandleOnMerc( BOOLEAN fMovementMode ) ErasePath( TRUE ); // Show cursor with highlight on selected merc - guiNewUICursor = NO_UICURSOR; + guiNewUICursor = NO_UICURSOR; // Show cursor with highlight - gfUIHandleSelection = ENEMY_GUY_SELECTION; - gsSelectedGridNo = pSoldier->sGridNo; - gsSelectedLevel = pSoldier->pathing.bLevel; + gfUIHandleSelection = ENEMY_GUY_SELECTION; + gsSelectedGridNo = pSoldier->sGridNo; + gsSelectedLevel = pSoldier->pathing.bLevel; } } - gfUIHandleSelectionAboveGuy = TRUE; - gsSelectedGuy = usSoldierIndex; + gfUIHandleSelectionAboveGuy = TRUE; + gsSelectedGuy = usSoldierIndex; } } else @@ -3838,9 +3838,9 @@ UINT32 UIHandleIETOnTerrain( UI_EVENT *pUIEvent ) } -void UIHandleSoldierStanceChange( UINT16 ubSoldierID, INT8 bNewStance ) +void UIHandleSoldierStanceChange( SoldierID ubSoldierID, INT8 bNewStance ) { - SOLDIERTYPE *pSoldier = MercPtrs[ ubSoldierID ]; + SOLDIERTYPE *pSoldier = ubSoldierID; if( pSoldier->flags.uiStatusFlags & ( SOLDIER_DRIVER | SOLDIER_PASSENGER ) ) { @@ -4058,7 +4058,7 @@ void GetCursorMovementFlags( UINT32 *puiCursorFlags ) BOOLEAN HandleUIMovementCursor( SOLDIERTYPE *pSoldier, UINT32 uiCursorFlags, INT32 usMapPos, UINT32 uiFlags ) { BOOLEAN fSetCursor = FALSE; - static UINT16 usTargetID = NOBODY; + static SoldierID usTargetID = NOBODY; static BOOLEAN fTargetFound = FALSE; BOOLEAN fTargetFoundAndLookingForOne = FALSE; @@ -4588,7 +4588,7 @@ INT8 DrawUIMovementPath( SOLDIERTYPE *pSoldier, INT32 usMapPos, UINT32 uiFlags ) // Check if we are on a target if ( gfUIFullTargetFound ) { - sActionGridNo = FindAdjacentGridEx( pSoldier, MercPtrs[ gusUIFullTargetID ]->sGridNo, &ubDirection, &sAdjustedGridNo, TRUE, FALSE ); + sActionGridNo = FindAdjacentGridEx( pSoldier, gusUIFullTargetID->sGridNo, &ubDirection, &sAdjustedGridNo, TRUE, FALSE ); if ( sActionGridNo == -1 ) { sActionGridNo = sAdjustedGridNo; @@ -4596,7 +4596,7 @@ INT8 DrawUIMovementPath( SOLDIERTYPE *pSoldier, INT32 usMapPos, UINT32 uiFlags ) ///////////////////////////////////////////////////////////////////////////////////////// // CHANGED BY SANDRO - REDUCE AP COST TO STEAL FOR MARTIAL ARTS AND HAND TO HAND NEW TRAITS - if (MercPtrs[ gusUIFullTargetID ]->bCollapsed && gGameExternalOptions.fEnhancedCloseCombatSystem) + if (gusUIFullTargetID->bCollapsed && gGameExternalOptions.fEnhancedCloseCombatSystem) { sAPCost += (GetBasicAPsToPickupItem( pSoldier )); // stealing from collapsed soldiers is treated differently } @@ -4641,7 +4641,7 @@ INT8 DrawUIMovementPath( SOLDIERTYPE *pSoldier, INT32 usMapPos, UINT32 uiFlags ) { if ( gfUIFullTargetFound ) { - sActionGridNo = FindAdjacentGridEx( pSoldier, MercPtrs[ gusUIFullTargetID ]->sGridNo, &ubDirection, &sAdjustedGridNo, TRUE, FALSE ); + sActionGridNo = FindAdjacentGridEx( pSoldier, gusUIFullTargetID->sGridNo, &ubDirection, &sAdjustedGridNo, TRUE, FALSE ); if (!TileIsOutOfBounds(sActionGridNo)) { @@ -4813,7 +4813,7 @@ BOOLEAN UIMouseOnValidAttackLocation( SOLDIERTYPE *pSoldier ) { if ( gfUIFullTargetFound ) { - usMapPos = MercPtrs[ gusUIFullTargetID ]->sGridNo; + usMapPos = gusUIFullTargetID->sGridNo; } if ( IsRepairableStructAtGridNo( usMapPos, NULL ) && pSoldier->pathing.bLevel == 0 ) @@ -4830,7 +4830,7 @@ BOOLEAN UIMouseOnValidAttackLocation( SOLDIERTYPE *pSoldier ) { if ( gfUIFullTargetFound ) { - usMapPos = MercPtrs[ gusUIFullTargetID ]->sGridNo; + usMapPos = gusUIFullTargetID->sGridNo; } if ( IsRefuelableStructAtGridNo( usMapPos, NULL ) && pSoldier->pathing.bLevel == 0 ) @@ -4847,7 +4847,7 @@ BOOLEAN UIMouseOnValidAttackLocation( SOLDIERTYPE *pSoldier ) { if ( gfUIFullTargetFound ) { - usMapPos = MercPtrs[ gusUIFullTargetID ]->sGridNo; + usMapPos = gusUIFullTargetID->sGridNo; } if ( pSoldier->pathing.bLevel == 0 ) @@ -4874,7 +4874,7 @@ BOOLEAN UIMouseOnValidAttackLocation( SOLDIERTYPE *pSoldier ) { if ( gfUIFullTargetFound ) { - usMapPos = MercPtrs[gusUIFullTargetID]->sGridNo; + usMapPos = gusUIFullTargetID->sGridNo; } UINT16 structindex; @@ -4893,7 +4893,7 @@ BOOLEAN UIMouseOnValidAttackLocation( SOLDIERTYPE *pSoldier ) { if ( gfUIFullTargetFound ) { - usMapPos = MercPtrs[ gusUIFullTargetID ]->sGridNo; + usMapPos = gusUIFullTargetID->sGridNo; return( TRUE ); } @@ -4916,7 +4916,7 @@ BOOLEAN UIMouseOnValidAttackLocation( SOLDIERTYPE *pSoldier ) { if ( gfUIFullTargetFound ) { - if ( pSoldier->ubID != gusUIFullTargetID && MercPtrs[gusUIFullTargetID]->IsValidBloodDonor() ) + if ( pSoldier->ubID != gusUIFullTargetID && gusUIFullTargetID->IsValidBloodDonor() ) return( TRUE ); } } @@ -4930,7 +4930,7 @@ BOOLEAN UIMouseOnValidAttackLocation( SOLDIERTYPE *pSoldier ) { if ( gfUIFullTargetFound ) { - if ( pSoldier->ubID != gusUIFullTargetID && MercPtrs[gusUIFullTargetID]->CanReceiveSplint() ) + if ( pSoldier->ubID != gusUIFullTargetID && gusUIFullTargetID->CanReceiveSplint() ) return( TRUE ); } } @@ -4944,7 +4944,7 @@ BOOLEAN UIMouseOnValidAttackLocation( SOLDIERTYPE *pSoldier ) { if ( gfUIFullTargetFound ) { - usMapPos = MercPtrs[ gusUIFullTargetID ]->sGridNo; + usMapPos = gusUIFullTargetID->sGridNo; return( TRUE ); } @@ -4998,7 +4998,7 @@ BOOLEAN UIMouseOnValidAttackLocation( SOLDIERTYPE *pSoldier ) } // IF a guy's here, chack if they need medical help! - pTSoldier = MercPtrs[ gusUIFullTargetID ]; + pTSoldier = gusUIFullTargetID; // If we are a vehicle... if ( ( pTSoldier->flags.uiStatusFlags & ( SOLDIER_VEHICLE | SOLDIER_ROBOT ) ) ) @@ -5578,12 +5578,12 @@ UINT32 UIHandleLCLook( UI_EVENT *pUIEvent ) UINT32 UIHandleTOnTerrain( UI_EVENT *pUIEvent ) { - SOLDIERTYPE *pSoldier; - UINT16 ubTargID; - UINT32 uiRange; - INT32 usMapPos; - BOOLEAN fValidTalkableGuy = FALSE; - INT32 sTargetGridNo; + SOLDIERTYPE *pSoldier; + SoldierID ubTargID; + UINT32 uiRange; + INT32 usMapPos; + BOOLEAN fValidTalkableGuy = FALSE; + INT32 sTargetGridNo; // Get soldier if ( !GetSoldier( &pSoldier, gusSelectedSoldier ) ) @@ -5616,7 +5616,7 @@ UINT32 UIHandleTOnTerrain( UI_EVENT *pUIEvent ) // Get distance away if ( fValidTalkableGuy ) { - sTargetGridNo = MercPtrs[ ubTargID ]->sGridNo; + sTargetGridNo = ubTargID->sGridNo; } uiRange = PythSpacesAway( pSoldier->sGridNo, sTargetGridNo ); @@ -6365,7 +6365,7 @@ UINT32 UIHandleLAEndLockOurTurn( UI_EVENT *pUIEvent ) -BOOLEAN IsValidTalkableNPCFromMouse( UINT16 * pubSoldierID, BOOLEAN fGive, BOOLEAN fAllowMercs, BOOLEAN fCheckCollapsed ) +BOOLEAN IsValidTalkableNPCFromMouse( SoldierID *pubSoldierID, BOOLEAN fGive, BOOLEAN fAllowMercs, BOOLEAN fCheckCollapsed ) { // Check if there is a guy here to talk to! if ( gfUIFullTargetFound ) @@ -6790,7 +6790,7 @@ INT8 UIHandleInteractiveTilesAndItemsOnTerrain( SOLDIERTYPE *pSoldier, INT32 usM // unless we are over our own vehicle, then we can call vehicle menu if( gfUIFullTargetFound ) { - pTSoldier = MercPtrs[ gusUIFullTargetID ]; + pTSoldier = gusUIFullTargetID; if( pSoldier->iVehicleId == pTSoldier->bVehicleID ) { guiNewUICursor = ENTER_VEHICLE_UICURSOR; @@ -6803,7 +6803,7 @@ INT8 UIHandleInteractiveTilesAndItemsOnTerrain( SOLDIERTYPE *pSoldier, INT32 usM if ( gfUIFullTargetFound ) { - pTSoldier = MercPtrs[ gusUIFullTargetID ]; + pTSoldier = gusUIFullTargetID; // anv: added condition - make sure we won't put vehicle in another vehicle if ( OK_ENTERABLE_VEHICLE( pTSoldier ) && pTSoldier->bVisible != -1 && !( pSoldier->flags.uiStatusFlags & ( SOLDIER_DRIVER | SOLDIER_PASSENGER | SOLDIER_VEHICLE ) ) ) @@ -7198,7 +7198,7 @@ BOOLEAN ValidQuickExchangePosition( ) // Check if we over a civ if ( gfUIFullTargetFound ) { - pOverSoldier = MercPtrs[ gusUIFullTargetID ]; + pOverSoldier = gusUIFullTargetID; //KM: Replaced this older if statement for the new one which allows exchanging with militia //if ( ( pOverSoldier->bSide != gbPlayerNum ) && pOverSoldier->aiData.bNeutral ) @@ -7265,7 +7265,7 @@ BOOLEAN IsValidJumpLocation( SOLDIERTYPE *pSoldier, INT32 sGridNo, BOOLEAN fChec INT32 sFourGrids[4], sDistance=0, sSpot, sInBetween, sInBetween2, iDoorGridNo; static const UINT8 sDirs[4] = { NORTH, EAST, SOUTH, WEST }; //INT32 cnt; - UINT16 ubGuyThere; + SoldierID ubGuyThere; UINT8 ubMovementCost, ubDirection; INT8 bTileHeight = 0; @@ -7370,7 +7370,7 @@ BOOLEAN IsValidJumpLocation( SOLDIERTYPE *pSoldier, INT32 sGridNo, BOOLEAN fChec ubGuyThere = WhoIsThere2( sInBetween, pSoldier->pathing.bLevel ); if ( ubGuyThere != NOBODY && ubGuyThere != pSoldier->ubID ) { - if ( gAnimControl[ MercPtrs[ ubGuyThere ]->usAnimState ].ubHeight != ANIM_PRONE ) + if ( gAnimControl[ ubGuyThere->usAnimState ].ubHeight != ANIM_PRONE ) { return( FALSE ); } @@ -7444,12 +7444,12 @@ BOOLEAN IsValidJumpLocation( SOLDIERTYPE *pSoldier, INT32 sGridNo, BOOLEAN fChec // If there's a guy on any of the two middle tiles, and he's not prone, we can't jump over him ubGuyThere = WhoIsThere2( sInBetween, pSoldier->pathing.bLevel ); - if ( ubGuyThere != NOBODY && ubGuyThere != pSoldier->ubID && gAnimControl[ MercPtrs[ ubGuyThere ]->usAnimState ].ubHeight != ANIM_PRONE ) + if ( ubGuyThere != NOBODY && ubGuyThere != pSoldier->ubID && gAnimControl[ ubGuyThere->usAnimState ].ubHeight != ANIM_PRONE ) { return( FALSE ); } ubGuyThere = WhoIsThere2( sInBetween2, pSoldier->pathing.bLevel ); - if ( ubGuyThere != NOBODY && ubGuyThere != pSoldier->ubID && gAnimControl[ MercPtrs[ ubGuyThere ]->usAnimState ].ubHeight != ANIM_PRONE ) + if ( ubGuyThere != NOBODY && ubGuyThere != pSoldier->ubID && gAnimControl[ ubGuyThere->usAnimState ].ubHeight != ANIM_PRONE ) { return( FALSE ); } diff --git a/Tactical/Handle UI.h b/Tactical/Handle UI.h index ce634e5c..eab79f68 100644 --- a/Tactical/Handle UI.h +++ b/Tactical/Handle UI.h @@ -198,7 +198,7 @@ extern UINT32 guiShowUPDownArrows; extern BOOLEAN gfUIHandleSelection; extern BOOLEAN gfUIHandleSelectionAboveGuy; extern INT32 gsSelectedGridNo; -extern INT16 gsSelectedGuy; +extern SoldierID gsSelectedGuy; extern BOOLEAN gfUIInDeadlock; extern UINT16 gUIDeadlockedSoldier; @@ -320,13 +320,13 @@ void AdjustSoldierCreationStartValues( ); BOOLEAN SelectedMercCanAffordAttack( ); BOOLEAN SelectedMercCanAffordMove( ); -void GetMercClimbDirection( UINT16 ubSoldierID, BOOLEAN *pfGoDown, BOOLEAN *pfGoUp ); +void GetMercClimbDirection( SoldierID ubSoldierID, BOOLEAN *pfGoDown, BOOLEAN *pfGoUp ); void ToggleHandCursorMode( UINT32 *puiNewEvent ); void ToggleTalkCursorMode( UINT32 *puiNewEvent ); void ToggleLookCursorMode( UINT32 *puiNewEvent ); -void UIHandleSoldierStanceChange( UINT16 ubSoldierID, INT8 bNewStance ); +void UIHandleSoldierStanceChange( SoldierID ubSoldierID, INT8 bNewStance ); void GetCursorMovementFlags( UINT32 *puiCursorFlags ); BOOLEAN HandleUIMovementCursor( SOLDIERTYPE *pSoldier, UINT32 uiCursorFlags, INT32 usMapPos, UINT32 uiFlags ); @@ -334,7 +334,7 @@ BOOLEAN UIMouseOnValidAttackLocation( SOLDIERTYPE *pSoldier ); BOOLEAN UIOkForItemPickup( SOLDIERTYPE *pSoldier, INT32 sGridNo ); -BOOLEAN IsValidTalkableNPCFromMouse( UINT16 * pubSoldierID, BOOLEAN fGive, BOOLEAN fAllowMercs, BOOLEAN fCheckCollapsed ); +BOOLEAN IsValidTalkableNPCFromMouse( SoldierID *pubSoldierID, BOOLEAN fGive, BOOLEAN fAllowMercs, BOOLEAN fCheckCollapsed ); BOOLEAN IsValidTalkableNPC( SoldierID ubSoldierID, BOOLEAN fGive, BOOLEAN fAllowMercs, BOOLEAN fCheckCollapsed ); BOOLEAN HandleTalkInit( ); diff --git a/Tactical/Interface Cursors.cpp b/Tactical/Interface Cursors.cpp index 386e086a..baf0ad0a 100644 --- a/Tactical/Interface Cursors.cpp +++ b/Tactical/Interface Cursors.cpp @@ -335,7 +335,7 @@ BOOLEAN DrawUICursor( ) // If we are over a target, jump to that.... if ( gfUIFullTargetFound ) { - gusTargetDropPos = MercPtrs[ gusUIFullTargetID ]->sGridNo; + gusTargetDropPos = gusUIFullTargetID->sGridNo; } // Put tile on the floor diff --git a/Tactical/Interface Items.cpp b/Tactical/Interface Items.cpp index cdd87caa..b3f56f6a 100644 --- a/Tactical/Interface Items.cpp +++ b/Tactical/Interface Items.cpp @@ -8773,23 +8773,23 @@ BOOLEAN SoldierCanSeeCatchComing( SOLDIERTYPE *pSoldier, INT32 sSrcGridNo ) void DrawItemTileCursor( ) { - INT32 usMapPos; - UINT16 usIndex; - UINT16 ubSoldierID; - INT16 sAPCost; - BOOLEAN fRecalc; - UINT32 uiCursorFlags; - INT32 sFinalGridNo; - UINT32 uiCursorId = CURSOR_ITEM_GOOD_THROW; - SOLDIERTYPE *pSoldier; - BOOLEAN fGiveItem = FALSE; - INT32 sActionGridNo; - UINT8 ubDirection; - static UINT32 uiOldCursorId = 0; - static UINT16 usOldMousePos = 0; - INT16 sEndZ = 0; - INT16 sDist; - INT8 bLevel; + INT32 usMapPos; + UINT16 usIndex; + SoldierID ubSoldierID; + INT16 sAPCost; + BOOLEAN fRecalc; + UINT32 uiCursorFlags; + INT32 sFinalGridNo; + UINT32 uiCursorId = CURSOR_ITEM_GOOD_THROW; + SOLDIERTYPE *pSoldier; + BOOLEAN fGiveItem = FALSE; + INT32 sActionGridNo; + UINT8 ubDirection; + static UINT32 uiOldCursorId = 0; + static UINT16 usOldMousePos = 0; + INT16 sEndZ = 0; + INT16 sDist; + INT8 bLevel; if (GetMouseMapPos( &usMapPos) ) { @@ -9120,15 +9120,15 @@ BOOLEAN HandleItemPointerClick( INT32 usMapPos ) } - UINT8 ubDirection; - UINT16 ubSoldierID; - UINT16 usItem; + UINT8 ubDirection; + SoldierID ubSoldierID; + UINT16 usItem; INT16 sAPCost; SOLDIERTYPE *pSoldier=NULL; UINT8 ubThrowActionCode=0; - UINT32 uiThrowActionData=0; + UINT32 uiThrowActionData=0; INT16 sEndZ = 0; - BOOLEAN fGiveItem = FALSE; + BOOLEAN fGiveItem = FALSE; INT32 sGridNo; INT16 sDist; diff --git a/Tactical/Interface Panels.cpp b/Tactical/Interface Panels.cpp index d606dfb7..40df6462 100644 --- a/Tactical/Interface Panels.cpp +++ b/Tactical/Interface Panels.cpp @@ -6403,10 +6403,10 @@ void ShowRadioLocator( SoldierID ubID, UINT8 ubLocatorSpeed ) } } -void EndRadioLocator( UINT16 ubID ) +void EndRadioLocator( SoldierID ubID ) { - MercPtrs[ ubID ]->flags.fFlashLocator = FALSE; - MercPtrs[ ubID ]->flags.fShowLocator = FALSE; + ubID->flags.fFlashLocator = FALSE; + ubID->flags.fShowLocator = FALSE; } diff --git a/Tactical/Interface Panels.h b/Tactical/Interface Panels.h index 95563cf2..8908aa30 100644 --- a/Tactical/Interface Panels.h +++ b/Tactical/Interface Panels.h @@ -108,7 +108,7 @@ extern INT8 gbNewItemCycle[ NUM_INV_SLOTS ]; extern UINT8 gubNewItemMerc; void ShowRadioLocator( SoldierID ubID, UINT8 ubLocatorSpeed ); -void EndRadioLocator( UINT16 ubID ); +void EndRadioLocator( SoldierID ubID ); extern MOUSE_REGION gSMPanelRegion; diff --git a/Tactical/Interface.cpp b/Tactical/Interface.cpp index 11f920fd..3d543bf6 100644 --- a/Tactical/Interface.cpp +++ b/Tactical/Interface.cpp @@ -1667,7 +1667,7 @@ void DrawCTHPixelToBuffer( UINT16 *pBuffer, UINT32 uiPitch, INT16 sLeft, INT16 s //QUOTE_SYSTEM_STRUCT soldierTTInfo; -void DrawSelectedUIAboveGuy( UINT16 usSoldierID ) +void DrawSelectedUIAboveGuy( SoldierID usSoldierID ) { SOLDIERTYPE *pSoldier; INT16 sXPos, sYPos; diff --git a/Tactical/Interface.h b/Tactical/Interface.h index e596305f..2d2f7d00 100644 --- a/Tactical/Interface.h +++ b/Tactical/Interface.h @@ -458,7 +458,7 @@ void HandleInterfaceBackgrounds( ); void BeginOverlayMessage( UINT32 uiFont, STR16 pFontString, ... ); void EndOverlayMessage( ); -void DrawSelectedUIAboveGuy( UINT16 usSoldierID ); +void DrawSelectedUIAboveGuy( SoldierID usSoldierID ); // HEADROCK HAM 4: Draw the CTH indicator, using values grabbed from the global CTH array BOOLEAN DrawCTHIndicator(); diff --git a/Tactical/Merc Entering.cpp b/Tactical/Merc Entering.cpp index ce3c7279..e657ad45 100644 --- a/Tactical/Merc Entering.cpp +++ b/Tactical/Merc Entering.cpp @@ -355,7 +355,7 @@ UINT8 ubHeliScripts[ NUM_HELI_STATES ][ MAX_HELI_SCRIPT ] = BOOLEAN gfHandleHeli = FALSE; -UINT16 gusHeliSeats[ MAX_MERC_IN_HELI ]; +SoldierID gusHeliSeats[ MAX_MERC_IN_HELI ]; INT8 gbNumHeliSeatsOccupied = 0; BOOLEAN gfFirstGuyDown = FALSE; @@ -392,7 +392,7 @@ void ResetHeliSeats( ) gbNumHeliSeatsOccupied = 0; } -void AddMercToHeli( UINT16 ubID ) +void AddMercToHeli( SoldierID ubID ) { if ( gbNumHeliSeatsOccupied < MAX_MERC_IN_HELI ) { @@ -502,21 +502,21 @@ void HandleHeliDrop( BOOLEAN fPlayer ) { // Add merc to sector #ifdef JA2UB - //MercPtrs[ gusHeliSeats[ cnt ] ]->ubStrategicInsertionCode = INSERTION_CODE_NORTH; - MercPtrs[ gusHeliSeats[ cnt ] ]->ubStrategicInsertionCode = INSERTION_CODE_GRIDNO; - MercPtrs[ gusHeliSeats[ cnt ] ]->usStrategicInsertionData = gGameUBOptions.LOCATEGRIDNO; + //gusHeliSeats[ cnt ]->ubStrategicInsertionCode = INSERTION_CODE_NORTH; + gusHeliSeats[ cnt ]->ubStrategicInsertionCode = INSERTION_CODE_GRIDNO; + gusHeliSeats[ cnt ]->usStrategicInsertionData = gGameUBOptions.LOCATEGRIDNO; #else - //MercPtrs[ gusHeliSeats[ cnt ] ]->ubStrategicInsertionCode = INSERTION_CODE_NORTH; - MercPtrs[ gusHeliSeats[ cnt ] ]->ubStrategicInsertionCode = INSERTION_CODE_GRIDNO; - MercPtrs[ gusHeliSeats[ cnt ] ]->usStrategicInsertionData = gGameExternalOptions.iInitialMercArrivalLocation; + //gusHeliSeats[ cnt ]->ubStrategicInsertionCode = INSERTION_CODE_NORTH; + gusHeliSeats[ cnt ]->ubStrategicInsertionCode = INSERTION_CODE_GRIDNO; + gusHeliSeats[ cnt ]->usStrategicInsertionData = gGameExternalOptions.iInitialMercArrivalLocation; #endif // HEADROCK HAM 3.5: Externalized! - UpdateMercInSector( MercPtrs[ gusHeliSeats[ cnt ] ], gGameExternalOptions.ubDefaultArrivalSectorX, gGameExternalOptions.ubDefaultArrivalSectorY, startingZ ); + UpdateMercInSector( gusHeliSeats[ cnt ], gGameExternalOptions.ubDefaultArrivalSectorX, gGameExternalOptions.ubDefaultArrivalSectorY, startingZ ); // Check for merc arrives quotes... - HandleMercArrivesQuotes( MercPtrs[ gusHeliSeats[ cnt ] ] ); + HandleMercArrivesQuotes( gusHeliSeats[ cnt ] ); - ScreenMsg( FONT_MCOLOR_WHITE, MSG_INTERFACE, TacticalStr[ MERC_HAS_ARRIVED_STR ], MercPtrs[ gusHeliSeats[ cnt ] ]->GetName() ); + ScreenMsg( FONT_MCOLOR_WHITE, MSG_INTERFACE, TacticalStr[ MERC_HAS_ARRIVED_STR ], gusHeliSeats[ cnt ]->GetName() ); } @@ -558,23 +558,23 @@ void HandleHeliDrop( BOOLEAN fPlayer ) { // Add merc to sector #ifdef JA2UB - //MercPtrs[ gusHeliSeats[ cnt ] ]->ubStrategicInsertionCode = INSERTION_CODE_NORTH; - MercPtrs[ gusHeliSeats[ cnt ] ]->ubStrategicInsertionCode = INSERTION_CODE_GRIDNO; - MercPtrs[ gusHeliSeats[ cnt ] ]->usStrategicInsertionData = gGameUBOptions.LOCATEGRIDNO; + //gusHeliSeats[ cnt ]->ubStrategicInsertionCode = INSERTION_CODE_NORTH; + gusHeliSeats[ cnt ]->ubStrategicInsertionCode = INSERTION_CODE_GRIDNO; + gusHeliSeats[ cnt ]->usStrategicInsertionData = gGameUBOptions.LOCATEGRIDNO; #else - //MercPtrs[ gusHeliSeats[ cnt ] ]->ubStrategicInsertionCode = INSERTION_CODE_NORTH; - MercPtrs[ gusHeliSeats[ cnt ] ]->ubStrategicInsertionCode = INSERTION_CODE_GRIDNO; + //gusHeliSeats[ cnt ]->ubStrategicInsertionCode = INSERTION_CODE_NORTH; + gusHeliSeats[ cnt ]->ubStrategicInsertionCode = INSERTION_CODE_GRIDNO; // sevenfm: if soldiers land into enemy sector, use gsGridNoSweetSpot - //MercPtrs[ gusHeliSeats[ cnt ] ]->usStrategicInsertionData = gGameExternalOptions.iInitialMercArrivalLocation; - MercPtrs[gusHeliSeats[cnt]]->usStrategicInsertionData = gsGridNoSweetSpot; + //gusHeliSeats[ cnt ]->usStrategicInsertionData = gGameExternalOptions.iInitialMercArrivalLocation; + gusHeliSeats[ cnt ]->usStrategicInsertionData = gsGridNoSweetSpot; #endif // HEADROCK HAM 3.5: Externalized! - UpdateMercInSector( MercPtrs[ gusHeliSeats[ cnt ] ], gGameExternalOptions.ubDefaultArrivalSectorX, gGameExternalOptions.ubDefaultArrivalSectorY, startingZ ); + UpdateMercInSector( gusHeliSeats[ cnt ], gGameExternalOptions.ubDefaultArrivalSectorX, gGameExternalOptions.ubDefaultArrivalSectorY, startingZ ); // Check for merc arrives quotes... - HandleMercArrivesQuotes( MercPtrs[ gusHeliSeats[ cnt ] ] ); + HandleMercArrivesQuotes( gusHeliSeats[ cnt ] ); - ScreenMsg( FONT_MCOLOR_WHITE, MSG_INTERFACE, TacticalStr[ MERC_HAS_ARRIVED_STR ], MercPtrs[ gusHeliSeats[ cnt ] ]->GetName() ); + ScreenMsg( FONT_MCOLOR_WHITE, MSG_INTERFACE, TacticalStr[ MERC_HAS_ARRIVED_STR ], gusHeliSeats[ cnt ]->GetName() ); } // Remove heli @@ -698,24 +698,24 @@ void HandleHeliDrop( BOOLEAN fPlayer ) { // Flugente: it is now possible to use airdrops with soldiers after they have arrived in Arulco. In that case, they might have an animation that breaks EVENT_InitNewSoldierAnim prematurely. // In the worst case, this can cause the game to be unable to finish the airdrop. For that reason, we set all those soldiers to the STANDING animation. - MercPtrs[ gusHeliSeats[ gbCurDrop ] ]->usAnimState = STANDING; - MercPtrs[ gusHeliSeats[ gbCurDrop ] ]->EVENT_InitNewSoldierAnim( HELIDROP, 0 , FALSE ); + gusHeliSeats[ gbCurDrop ]->usAnimState = STANDING; + gusHeliSeats[ gbCurDrop ]->EVENT_InitNewSoldierAnim( HELIDROP, 0 , FALSE ); // Change insertion code - MercPtrs[ gusHeliSeats[ gbCurDrop ] ]->ubStrategicInsertionCode = INSERTION_CODE_GRIDNO; - MercPtrs[ gusHeliSeats[ gbCurDrop ] ]->usStrategicInsertionData = gsGridNoSweetSpot; + gusHeliSeats[ gbCurDrop ]->ubStrategicInsertionCode = INSERTION_CODE_GRIDNO; + gusHeliSeats[ gbCurDrop ]->usStrategicInsertionData = gsGridNoSweetSpot; // HEADROCK HAM 3.5: Externalized! - UpdateMercInSector( MercPtrs[ gusHeliSeats[ gbCurDrop ] ], gGameExternalOptions.ubDefaultArrivalSectorX, gGameExternalOptions.ubDefaultArrivalSectorY, startingZ ); - //EVENT_SetSoldierPosition( MercPtrs[ gusHeliSeats[ gbCurDrop ] ], sWorldX, sWorldY ); + UpdateMercInSector( gusHeliSeats[ gbCurDrop ], gGameExternalOptions.ubDefaultArrivalSectorX, gGameExternalOptions.ubDefaultArrivalSectorY, startingZ ); + //EVENT_SetSoldierPosition( gusHeliSeats[ gbCurDrop ], sWorldX, sWorldY ); // IF the first guy down, set squad! if ( gfFirstGuyDown ) { gfFirstGuyDown = FALSE; - SetCurrentSquad( MercPtrs[ gusHeliSeats[ gbCurDrop ] ]->bAssignment, TRUE ); + SetCurrentSquad( gusHeliSeats[ gbCurDrop ]->bAssignment, TRUE ); } - ScreenMsg( FONT_MCOLOR_WHITE, MSG_INTERFACE, TacticalStr[ MERC_HAS_ARRIVED_STR ], MercPtrs[ gusHeliSeats[ gbCurDrop ] ]->GetName() ); + ScreenMsg( FONT_MCOLOR_WHITE, MSG_INTERFACE, TacticalStr[ MERC_HAS_ARRIVED_STR ], gusHeliSeats[ gbCurDrop ]->GetName() ); ++gbCurDrop; @@ -1024,7 +1024,7 @@ void HandleFirstHeliDropOfGame( ) CharacterDialogueWithSpecialEvent( 0, 0, 0, DIALOGUE_TACTICAL_UI , FALSE , FALSE , DIALOGUE_SPECIAL_EVENT_ENABLE_AI ,0, 0 ); } -UINT16 SpawnAirDropElite( INT32 sGridNo ) +SoldierID SpawnAirDropElite( INT32 sGridNo ) { SOLDIERTYPE *pSoldier; @@ -1076,7 +1076,7 @@ void InitiateEnemyAirDropSoldiers( INT32 sGridNo ) for ( int i = 0; i < 6; ++i ) { - UINT16 id = SpawnAirDropElite( gMapInformation.sSouthGridNo + i ); + SoldierID id = SpawnAirDropElite( gMapInformation.sSouthGridNo + i ); if ( id == NOBODY ) return; @@ -1192,23 +1192,23 @@ void HandleEnemyAirdrop( ) { // Flugente: it is now possible to use airdrops with soldiers after they have arrived in Arulco. In that case, they might have an animation that breaks EVENT_InitNewSoldierAnim prematurely. // In the worst case, this can cause the game to be unable to finish the airdrop. For that reason, we set all those soldiers to the STANDING aniamtion. - //MercPtrs[ gusHeliSeats[ gbCurDrop ] ]->usAnimState = STANDING; - MercPtrs[gusHeliSeats[gbCurDrop]]->EVENT_InitNewSoldierAnim( HELIDROP, 0, FALSE ); + //gusHeliSeats[ gbCurDrop ]->usAnimState = STANDING; + gusHeliSeats[gbCurDrop]->EVENT_InitNewSoldierAnim( HELIDROP, 0, FALSE ); // Change insertion code - MercPtrs[gusHeliSeats[gbCurDrop]]->ubStrategicInsertionCode = INSERTION_CODE_GRIDNO; - MercPtrs[gusHeliSeats[gbCurDrop]]->usStrategicInsertionData = gsGridNoSweetSpot; + gusHeliSeats[gbCurDrop]->ubStrategicInsertionCode = INSERTION_CODE_GRIDNO; + gusHeliSeats[gbCurDrop]->usStrategicInsertionData = gsGridNoSweetSpot; // HEADROCK HAM 3.5: Externalized! - UpdateMercInSector( MercPtrs[gusHeliSeats[gbCurDrop]], gWorldSectorX, gWorldSectorY, startingZ ); + UpdateMercInSector( gusHeliSeats[gbCurDrop], gWorldSectorX, gWorldSectorY, startingZ ); // IF the first guy down, set squad! if ( gfFirstGuyDown ) { gfFirstGuyDown = FALSE; - //SetCurrentSquad( MercPtrs[ gusHeliSeats[ gbCurDrop ] ]->bAssignment, TRUE ); + //SetCurrentSquad( gusHeliSeats[ gbCurDrop ]->bAssignment, TRUE ); } - ScreenMsg( FONT_MCOLOR_WHITE, MSG_INTERFACE, TacticalStr[MERC_HAS_ARRIVED_STR], MercPtrs[gusHeliSeats[gbCurDrop]]->GetName( ) ); + ScreenMsg( FONT_MCOLOR_WHITE, MSG_INTERFACE, TacticalStr[MERC_HAS_ARRIVED_STR], gusHeliSeats[gbCurDrop]->GetName( ) ); ++gbCurDrop; diff --git a/Tactical/Merc Hiring.cpp b/Tactical/Merc Hiring.cpp index 5df4fed2..92410d87 100644 --- a/Tactical/Merc Hiring.cpp +++ b/Tactical/Merc Hiring.cpp @@ -425,7 +425,7 @@ INT8 HireMerc( MERC_HIRE_STRUCT *pHireMerc) } -void MercArrivesCallback( UINT16 ubSoldierID ) +void MercArrivesCallback( SoldierID ubSoldierID ) { MERCPROFILESTRUCT *pMerc; SOLDIERTYPE *pSoldier; @@ -457,7 +457,7 @@ void MercArrivesCallback( UINT16 ubSoldierID ) // stop time compression until player restarts it StopTimeCompression(); - pSoldier = &Menptr[ ubSoldierID ]; + pSoldier = ubSoldierID; pMerc = &gMercProfiles[ pSoldier->ubProfile ]; diff --git a/Tactical/Merc Hiring.h b/Tactical/Merc Hiring.h index d083788d..a7366b48 100644 --- a/Tactical/Merc Hiring.h +++ b/Tactical/Merc Hiring.h @@ -46,7 +46,7 @@ extern INT16 gsMercArriveSectorY; INT8 HireMerc( MERC_HIRE_STRUCT *pHireMerc); -void MercArrivesCallback( UINT16 ubSoldierID ); +void MercArrivesCallback( SoldierID ubSoldierID ); BOOLEAN IsMercHireable( UINT8 ubMercID ); BOOLEAN IsMercDead( UINT8 ubMercID ); UINT16 NumberOfMercsOnPlayerTeam(); diff --git a/Tactical/Overhead Types.h b/Tactical/Overhead Types.h index 1807979a..d4ed672f 100644 --- a/Tactical/Overhead Types.h +++ b/Tactical/Overhead Types.h @@ -361,7 +361,7 @@ typedef CHAR8 PaletteRepID[ 30 ]; typedef struct { UINT8 ubType; - PaletteRepID ID; + PaletteRepID ID; UINT8 ubPaletteSize; UINT8 *r; UINT8 *g; diff --git a/Tactical/Real Time Input.cpp b/Tactical/Real Time Input.cpp index 9ba02699..10928e46 100644 --- a/Tactical/Real Time Input.cpp +++ b/Tactical/Real Time Input.cpp @@ -1489,7 +1489,7 @@ void GetRTMousePositionInput( UINT32 *puiNewEvent ) { if( gfUIFullTargetFound ) { - if ( IsValidTalkableNPC( gusUIFullTargetID, FALSE, FALSE, FALSE ) && !_KeyDown( SHIFT ) && !AM_AN_EPC( pSoldier ) && MercPtrs[ gusUIFullTargetID ]->bTeam != ENEMY_TEAM && !ValidQuickExchangePosition( ) ) + if ( IsValidTalkableNPC( gusUIFullTargetID, FALSE, FALSE, FALSE ) && !_KeyDown( SHIFT ) && !AM_AN_EPC( pSoldier ) && gusUIFullTargetID->bTeam != ENEMY_TEAM && !ValidQuickExchangePosition( ) ) { uiMoveTargetSoldierId = gusUIFullTargetID; *puiNewEvent = T_CHANGE_TO_TALKING; @@ -1536,7 +1536,7 @@ void GetRTMousePositionInput( UINT32 *puiNewEvent ) { guiUITargetSoldierId = gusUIFullTargetID; - if ( MercPtrs[ gusUIFullTargetID ]->bTeam != gbPlayerNum ) + if ( gusUIFullTargetID->bTeam != gbPlayerNum ) { fOnValidGuy = TRUE; } diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index 158cb352..473da2a0 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -788,65 +788,65 @@ public: void ConvertFrom_101_To_102(const OLDSOLDIERTYPE_101& src); public: // AI STUFF from before the changes to the memory structure - INT8 bOppList[MAX_NUM_SOLDIERS]; // AI knowledge database - INT8 bLastAction; - INT8 bAction; - INT32 usActionData; - INT8 bNextAction; - INT32 usNextActionData; - INT8 bActionInProgress; - INT8 bAlertStatus; - INT8 bOppCnt; - INT8 bNeutral; - INT8 bNewSituation; - INT8 bNextTargetLevel; - INT8 bOrders; - INT8 bAttitude; - INT8 bUnderFire; - INT8 bShock; - INT8 bUnderEscort; - INT8 bBypassToGreen; - UINT8 ubLastMercToRadio; - INT8 bDominantDir; // AI main direction to face... - INT8 bPatrolCnt; // number of patrol gridnos - INT8 bNextPatrolPnt; // index to next patrol gridno - INT32 sPatrolGrid[MAXPATROLGRIDS];// AI list for ptr->orders==PATROL - INT32 sNoiseGridno; - UINT8 ubNoiseVolume; - INT8 bLastAttackHit; - UINT16 ubXRayedBy; - FLOAT dHeightAdjustment; - INT8 bMorale; - INT8 bTeamMoraleMod; - INT8 bTacticalMoraleMod; - INT8 bStrategicMoraleMod; - INT8 bAIMorale; - UINT8 ubPendingAction; - UINT8 ubPendingActionAnimCount; - UINT32 uiPendingActionData1; - INT32 sPendingActionData2; - INT8 bPendingActionData3; - INT8 ubDoorHandleCode; - UINT32 uiPendingActionData4; - INT8 bInterruptDuelPts; - INT8 bPassedLastInterrupt; - INT16 bIntStartAPs; //100AP - INT8 bMoved; - INT8 bHunting; - UINT8 ubLastCall; - UINT16 ubCaller; - INT32 sCallerGridNo; - UINT8 bCallPriority; - INT8 bCallActedUpon; - INT8 bFrenzied; - INT8 bNormalSmell; - INT8 bMonsterSmell; - INT8 bMobility; - INT8 bRTPCombat; - INT8 fAIFlags; - INT16 bAimTime; //100AP - INT8 bShownAimTime; - UINT8 ubInterruptCounter[MAX_NUM_SOLDIERS]; // SANDRO - interrupt counter added + INT8 bOppList[MAX_NUM_SOLDIERS]; // AI knowledge database + INT8 bLastAction; + INT8 bAction; + INT32 usActionData; + INT8 bNextAction; + INT32 usNextActionData; + INT8 bActionInProgress; + INT8 bAlertStatus; + INT8 bOppCnt; + INT8 bNeutral; + INT8 bNewSituation; + INT8 bNextTargetLevel; + INT8 bOrders; + INT8 bAttitude; + INT8 bUnderFire; + INT8 bShock; + INT8 bUnderEscort; + INT8 bBypassToGreen; + UINT8 ubLastMercToRadio; + INT8 bDominantDir; // AI main direction to face... + INT8 bPatrolCnt; // number of patrol gridnos + INT8 bNextPatrolPnt; // index to next patrol gridno + INT32 sPatrolGrid[MAXPATROLGRIDS];// AI list for ptr->orders==PATROL + INT32 sNoiseGridno; + UINT8 ubNoiseVolume; + INT8 bLastAttackHit; + UINT16 ubXRayedBy; + FLOAT dHeightAdjustment; + INT8 bMorale; + INT8 bTeamMoraleMod; + INT8 bTacticalMoraleMod; + INT8 bStrategicMoraleMod; + INT8 bAIMorale; + UINT8 ubPendingAction; + UINT8 ubPendingActionAnimCount; + UINT32 uiPendingActionData1; + INT32 sPendingActionData2; + INT8 bPendingActionData3; + INT8 ubDoorHandleCode; + UINT32 uiPendingActionData4; + INT8 bInterruptDuelPts; + INT8 bPassedLastInterrupt; + INT16 bIntStartAPs; //100AP + INT8 bMoved; + INT8 bHunting; + UINT8 ubLastCall; + SoldierID ubCaller; + INT32 sCallerGridNo; + UINT8 bCallPriority; + INT8 bCallActedUpon; + INT8 bFrenzied; + INT8 bNormalSmell; + INT8 bMonsterSmell; + INT8 bMobility; + INT8 bRTPCombat; + INT8 fAIFlags; + INT16 bAimTime; //100AP + INT8 bShownAimTime; + UINT8 ubInterruptCounter[MAX_NUM_SOLDIERS]; // SANDRO - interrupt counter added }; class STRUCT_Flags//last edited at version 102 diff --git a/Tactical/SoldierTooltips.cpp b/Tactical/SoldierTooltips.cpp index ceb58df0..854a4141 100644 --- a/Tactical/SoldierTooltips.cpp +++ b/Tactical/SoldierTooltips.cpp @@ -133,7 +133,7 @@ void SoldierTooltip( SOLDIERTYPE* pSoldier ) { //CHRISL: Changed the second parameter to use the same information as the 'F' hotkey uses. //iRangeToTarget = GetRangeInCellCoordsFromGridNoDiff( gusSelectedSoldier->sGridNo, sSoldierGridNo ) / 10; - iRangeToTarget = GetRangeInCellCoordsFromGridNoDiff( gusSelectedSoldier->sGridNo, MercPtrs[ gusUIFullTargetID ]->sGridNo ) / 10; + iRangeToTarget = GetRangeInCellCoordsFromGridNoDiff( gusSelectedSoldier->sGridNo, gusUIFullTargetID->sGridNo ) / 10; } // WANNE: If we want to show the tooltip of milita and no merc is present in the sector else @@ -145,7 +145,7 @@ void SoldierTooltip( SOLDIERTYPE* pSoldier ) // SANDRO - don't use this if detail set to debug! if ( gGameExternalOptions.gfAllowUDTRange && gGameExternalOptions.ubSoldierTooltipDetailLevel != DL_Debug && !(gTacticalStatus.uiFlags & SHOW_ALL_MERCS) ) { - uiMaxTooltipDistance = (UINT32)( gusSelectedSoldier->GetMaxDistanceVisible(MercPtrs[ gusUIFullTargetID ]->sGridNo, 0, CALC_FROM_WANTED_DIR) * (gGameExternalOptions.ubUDTModifier)); + uiMaxTooltipDistance = (UINT32)( gusSelectedSoldier->GetMaxDistanceVisible(gusUIFullTargetID->sGridNo, 0, CALC_FROM_WANTED_DIR) * (gGameExternalOptions.ubUDTModifier)); uiMaxTooltipDistance /= 100; } //SCORE: Otherwise if we're using dynamics then do this diff --git a/Tactical/Turn Based Input.cpp b/Tactical/Turn Based Input.cpp index bdd31b7f..9fb928c1 100644 --- a/Tactical/Turn Based Input.cpp +++ b/Tactical/Turn Based Input.cpp @@ -573,7 +573,7 @@ void QueryTBLeftButton( UINT32 *puiNewEvent ) if ( gfUIFullTargetFound ) { // Select guy - if ( ( guiUIFullTargetFlags & SELECTED_MERC) && !( guiUIFullTargetFlags & UNCONSCIOUS_MERC ) && !( MercPtrs[ gusUIFullTargetID ]->flags.uiStatusFlags & SOLDIER_VEHICLE ) ) + if ( ( guiUIFullTargetFlags & SELECTED_MERC) && !( guiUIFullTargetFlags & UNCONSCIOUS_MERC ) && !( gusUIFullTargetID->flags.uiStatusFlags & SOLDIER_VEHICLE ) ) { *puiNewEvent = M_CHANGE_TO_ADJPOS_MODE; fIgnoreLeftUp = FALSE; @@ -1250,7 +1250,7 @@ void GetTBMousePositionInput( UINT32 *puiNewEvent ) if( gfUIFullTargetFound ) { // ATE: Don't do this automatically for enemies...... - if ( MercPtrs[ gusUIFullTargetID ]->bTeam != ENEMY_TEAM ) + if ( gusUIFullTargetID->bTeam != ENEMY_TEAM ) { uiMoveTargetSoldierId = gusUIFullTargetID; if ( IsValidTalkableNPC( gusUIFullTargetID, FALSE, FALSE, FALSE ) && !_KeyDown( SHIFT ) && !AM_AN_EPC( pSoldier ) && !ValidQuickExchangePosition( ) ) @@ -1280,7 +1280,7 @@ void GetTBMousePositionInput( UINT32 *puiNewEvent ) { guiUITargetSoldierId = gusUIFullTargetID; - if ( MercPtrs[ gusUIFullTargetID ]->bTeam != gbPlayerNum ) + if ( gusUIFullTargetID->bTeam != gbPlayerNum ) { fOnValidGuy = TRUE; //ddd turn off flag that indicates aim/autofire mode adjustment (aimed burst/auto) @@ -3593,7 +3593,7 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) if ( gfUIFullTargetFound ) { //Display the range to the target - DisplayRangeToTarget( gusSelectedSoldier, MercPtrs[gusUIFullTargetID]->sGridNo ); + DisplayRangeToTarget( gusSelectedSoldier, gusUIFullTargetID->sGridNo ); } else { @@ -4648,7 +4648,7 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) if ( gfUIFullTargetFound ) { // Get soldier... - pSoldier2 = MercPtrs[ gusUIFullTargetID ]; + pSoldier2 = gusUIFullTargetID; // Check if both OK.... if ( pSoldier1->stats.bLife >= OKLIFE && pSoldier2->ubID != gusSelectedSoldier ) @@ -5677,7 +5677,7 @@ INT8 CheckForAndHandleHandleVehicleInteractiveClick( SOLDIERTYPE *pSoldier, UINT if ( gfUIFullTargetFound ) { - pTSoldier = MercPtrs[ gusUIFullTargetID ]; + pTSoldier = gusUIFullTargetID; // anv: added condition - make sure we won't put vehicle in another vehicle if ( OK_ENTERABLE_VEHICLE( pTSoldier ) && pTSoldier->bVisible != -1 && OKUseVehicle( pTSoldier->ubProfile ) && !( pSoldier->flags.uiStatusFlags & ( SOLDIER_DRIVER | SOLDIER_PASSENGER | SOLDIER_VEHICLE ) ) ) @@ -5824,18 +5824,18 @@ void HandleHandCursorClick( INT32 usMapPos, UINT32 *puiNewEvent ) // Flugente: allow stealing if the other guy is an enemy, OR if we are on the same team if ( (( guiUIFullTargetFlags & ENEMY_MERC ) && !( guiUIFullTargetFlags & UNCONSCIOUS_MERC )) || (AllowedToStealFromTeamMate(pSoldier->ubID, (UINT8)gusUIFullTargetID) && guiUIFullTargetFlags & OWNED_MERC) ) { - sActionGridNo = FindAdjacentGridEx( pSoldier, MercPtrs[ gusUIFullTargetID ]->sGridNo, &ubDirection, &sAdjustedGridNo, TRUE, FALSE ); + sActionGridNo = FindAdjacentGridEx( pSoldier, gusUIFullTargetID->sGridNo, &ubDirection, &sAdjustedGridNo, TRUE, FALSE ); if ( sActionGridNo == -1 ) { sActionGridNo = sAdjustedGridNo; } // Steal! - sAPCost = GetAPsToStealItem( pSoldier, MercPtrs[ gusUIFullTargetID ], sActionGridNo ); // SANDRO - added target variable + sAPCost = GetAPsToStealItem( pSoldier, gusUIFullTargetID, sActionGridNo ); // SANDRO - added target variable if ( EnoughPoints( pSoldier, sAPCost, 0, TRUE ) ) { - MercStealFromMerc( pSoldier, MercPtrs[ gusUIFullTargetID ] ); + MercStealFromMerc( pSoldier, gusUIFullTargetID ); *puiNewEvent = A_CHANGE_TO_MOVE; @@ -5962,7 +5962,7 @@ void HandleHandCursorRightClick( INT32 usMapPos, UINT32 *puiNewEvent ) if( gfUIFullTargetFound ) { - pTSoldier = MercPtrs[ gusUIFullTargetID ]; + pTSoldier = gusUIFullTargetID; if( OK_ENTERABLE_VEHICLE( pTSoldier ) && pTSoldier->bVisible != -1 && OKUseVehicle( pTSoldier->ubProfile ) ) { // anv: if we are passengers, only show menu when clicking on vehicle we're in @@ -6058,10 +6058,10 @@ INT8 HandleMoveModeInteractiveClick( INT32 usMapPos, UINT32 *puiNewEvent ) if ( ValidQuickExchangePosition( ) ) { // Check if we can... - if ( CanExchangePlaces( pSoldier, MercPtrs[ gusUIFullTargetID ], TRUE ) ) + if ( CanExchangePlaces( pSoldier, gusUIFullTargetID, TRUE ) ) { gpExchangeSoldier1 = pSoldier; - gpExchangeSoldier2 = MercPtrs[ gusUIFullTargetID ]; + gpExchangeSoldier2 = gusUIFullTargetID; // Do message box... //DoMessageBox( MSG_BOX_BASIC_STYLE, TacticalStr[ EXCHANGE_PLACES_REQUESTER ], GAME_SCREEN, ( UINT8 )MSG_BOX_FLAG_YESNO, ExchangeMessageBoxCallBack, NULL ); diff --git a/Tactical/UI Cursors.cpp b/Tactical/UI Cursors.cpp index 6cdd0e3d..bfbc2e96 100644 --- a/Tactical/UI Cursors.cpp +++ b/Tactical/UI Cursors.cpp @@ -134,7 +134,7 @@ BOOLEAN GetMouseRecalcAndShowAPFlags( UINT32 *puiCursorFlags, BOOLEAN *pfShowAPs // FUNCTIONS FOR CURSOR DETERMINATION! -UINT8 GetProperItemCursor( UINT16 ubSoldierID, UINT16 ubItemIndex, INT32 usMapPos, BOOLEAN fActivated ) +UINT8 GetProperItemCursor( SoldierID ubSoldierID, UINT16 ubItemIndex, INT32 usMapPos, BOOLEAN fActivated ) { SOLDIERTYPE *pSoldier; UINT32 uiCursorFlags; @@ -144,7 +144,7 @@ UINT8 GetProperItemCursor( UINT16 ubSoldierID, UINT16 ubItemIndex, INT32 usMapPo UINT8 ubCursorID=0; UINT8 ubItemCursor = 0; - pSoldier = MercPtrs[ ubSoldierID ]; + pSoldier = ubSoldierID; fRecalc = GetMouseRecalcAndShowAPFlags( &uiCursorFlags, &fShowAPs ); @@ -159,7 +159,7 @@ UINT8 GetProperItemCursor( UINT16 ubSoldierID, UINT16 ubItemIndex, INT32 usMapPo // Calculate target gridno! if ( gfUIFullTargetFound ) { - sTargetGridNo = MercPtrs[ gusUIFullTargetID ]->sGridNo; + sTargetGridNo = gusUIFullTargetID->sGridNo; } else { @@ -573,7 +573,7 @@ UINT8 HandleActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT32 usMapPos, BOOLEA { if ( gusUIFullTargetID != NOBODY ) { - if ( SoldierToSoldierBodyPartChanceToGetThrough( pSoldier, MercPtrs[ gusUIFullTargetID ], pSoldier->bAimShotLocation ) < OK_CHANCE_TO_GET_THROUGH ) + if ( SoldierToSoldierBodyPartChanceToGetThrough( pSoldier, gusUIFullTargetID, pSoldier->bAimShotLocation ) < OK_CHANCE_TO_GET_THROUGH ) { gfCannotGetThrough = TRUE; } @@ -1556,7 +1556,7 @@ void DetermineCursorBodyLocation( UINT16 ubSoldierID, BOOLEAN fDisplay, BOOLEAN // Check if we can find a soldier here if ( gfUIFullTargetFound ) { - pTargetSoldier = MercPtrs[ gusUIFullTargetID ]; + pTargetSoldier = gusUIFullTargetID; if ( FindRelativeSoldierPosition( pTargetSoldier, &usFlags, gusMouseXPos, gusMouseYPos ) ) { @@ -1594,7 +1594,7 @@ void DetermineCursorBodyLocation( UINT16 ubSoldierID, BOOLEAN fDisplay, BOOLEAN { if ( gfUIFullTargetFound ) { - pTargetSoldier = MercPtrs[ gusUIFullTargetID ]; + pTargetSoldier = gusUIFullTargetID; if ( pTargetSoldier->ubBodyType == CROW ) { @@ -2583,7 +2583,7 @@ void HandleRightClickAdjustCursor( SOLDIERTYPE *pSoldier, INT32 usMapPos ) // 'snap' cursor to target tile.... if ( gfUIFullTargetFound ) { - usMapPos = MercPtrs[ gusUIFullTargetID ]->sGridNo; + usMapPos = gusUIFullTargetID->sGridNo; } @@ -2609,7 +2609,7 @@ void HandleRightClickAdjustCursor( SOLDIERTYPE *pSoldier, INT32 usMapPos ) if ( gfUIFullTargetFound ) { // Get target soldier, if one exists - pTSoldier = MercPtrs[ gusUIFullTargetID ]; + pTSoldier = gusUIFullTargetID; sGridNo = pTSoldier->sGridNo; bTargetLevel = pSoldier->pathing.bLevel; @@ -2727,7 +2727,7 @@ void HandleRightClickAdjustCursor( SOLDIERTYPE *pSoldier, INT32 usMapPos ) if ( gfUIFullTargetFound ) { // Get target soldier, if one exists - pTSoldier = MercPtrs[ gusUIFullTargetID ]; + pTSoldier = gusUIFullTargetID; sGridNo = pTSoldier->sGridNo; bTargetLevel = pSoldier->pathing.bLevel; @@ -3172,7 +3172,7 @@ void HandleWheelAdjustCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos, INT16 sDelta // 'snap' cursor to target tile.... if ( gfUIFullTargetFound ) { - sMapPos = MercPtrs[ gusUIFullTargetID ]->sGridNo; + sMapPos = gusUIFullTargetID->sGridNo; } switch( ubCursor ) @@ -3180,8 +3180,8 @@ void HandleWheelAdjustCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos, INT16 sDelta case TARGETCURS: // warn if bad chance to get through if ( gfUIFullTargetFound && - !HandleCheckForBadChangeToGetThrough( pSoldier, MercPtrs[ gusUIFullTargetID ], - MercPtrs[ gusUIFullTargetID ]->sGridNo , MercPtrs[ gusUIFullTargetID ]->pathing.bLevel ) ) + !HandleCheckForBadChangeToGetThrough( pSoldier, gusUIFullTargetID, + gusUIFullTargetID->sGridNo , gusUIFullTargetID->pathing.bLevel ) ) { return; } @@ -3370,7 +3370,7 @@ void HandleWheelAdjustCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos, INT16 sDelta // 'snap' cursor to target tile.... if ( gfUIFullTargetFound ) { - sMapPos = MercPtrs[ gusUIFullTargetID ]->sGridNo; + sMapPos = gusUIFullTargetID->sGridNo; } @@ -3442,7 +3442,7 @@ void HandleWheelAdjustCursor( SOLDIERTYPE *pSoldier, INT16 sMapPos, INT16 sDelta if ( gfUIFullTargetFound ) { // Get target soldier, if one exists - pTSoldier = MercPtrs[ gusUIFullTargetID ]; + pTSoldier = gusUIFullTargetID; sGridNo = pTSoldier->sGridNo; bTargetLevel = pSoldier->pathing.bLevel; @@ -3608,7 +3608,7 @@ void HandleWheelAdjustCursor( SOLDIERTYPE *pSoldier, INT32 sMapPos, INT32 sDelta // 'snap' cursor to target tile.... if ( gfUIFullTargetFound ) - sMapPos = MercPtrs[ gusUIFullTargetID ]->sGridNo; + sMapPos = gusUIFullTargetID->sGridNo; int aimlevelchange = 1; int maxAimCanAfford = 0; @@ -3681,7 +3681,7 @@ void HandleWheelAdjustCursor( SOLDIERTYPE *pSoldier, INT32 sMapPos, INT32 sDelta if ( gfUIFullTargetFound ) { // Get target soldier, if one exists - pTSoldier = MercPtrs[ gusUIFullTargetID ]; + pTSoldier = gusUIFullTargetID; sGridNo = pTSoldier->sGridNo; bTargetLevel = pSoldier->pathing.bLevel; @@ -3836,7 +3836,7 @@ void HandleWheelAdjustCursorWOAB( SOLDIERTYPE *pSoldier, INT32 sMapPos, INT32 sD // 'snap' cursor to target tile.... if ( gfUIFullTargetFound ) { - sMapPos = MercPtrs[ gusUIFullTargetID ]->sGridNo; + sMapPos = gusUIFullTargetID->sGridNo; } @@ -3908,7 +3908,7 @@ void HandleWheelAdjustCursorWOAB( SOLDIERTYPE *pSoldier, INT32 sMapPos, INT32 sD if ( gfUIFullTargetFound ) { // Get target soldier, if one exists - pTSoldier = MercPtrs[ gusUIFullTargetID ]; + pTSoldier = gusUIFullTargetID; sGridNo = pTSoldier->sGridNo; bTargetLevel = pSoldier->pathing.bLevel; diff --git a/Tactical/UI Cursors.h b/Tactical/UI Cursors.h index b20e97f3..415246c4 100644 --- a/Tactical/UI Cursors.h +++ b/Tactical/UI Cursors.h @@ -9,7 +9,7 @@ #define REFINE_KNIFE_2 (gGameExternalOptions.fEnhancedCloseCombatSystem ? gSkillTraitValues.ubModifierForAPsAddedOnAimedBladedAttackes*2 : 6) -UINT8 GetProperItemCursor( UINT16 ubSoldierID, UINT16 ubItemIndex, INT32 usMapPos, BOOLEAN fActivated ); +UINT8 GetProperItemCursor( SoldierID ubSoldierID, UINT16 ubItemIndex, INT32 usMapPos, BOOLEAN fActivated ); void DetermineCursorBodyLocation( UINT16 ubSoldierID, BOOLEAN fDisplay, BOOLEAN fRecalc ); void HandleLeftClickCursor( SOLDIERTYPE *pSoldier ); @@ -30,4 +30,4 @@ BOOLEAN GetMouseRecalcAndShowAPFlags( UINT32 *puiCursorFlags, BOOLEAN *pfShowAPs // based on how trained the shooter is. UINT32 ChanceToHitApproximation( SOLDIERTYPE * pSoldier, UINT32 uiChance ); -#endif \ No newline at end of file +#endif diff --git a/Tactical/merc entering.h b/Tactical/merc entering.h index 30b80744..28d0ec0e 100644 --- a/Tactical/merc entering.h +++ b/Tactical/merc entering.h @@ -4,7 +4,7 @@ extern BOOLEAN gfIngagedInDrop; void ResetHeliSeats( ); -void AddMercToHeli( UINT16 ubID ); +void AddMercToHeli( SoldierID ubID ); // Flugente: we might want to set the helicopter dropoff point without starting it at the same time void SetHelicopterDroppoint( INT32 sGridNo ); @@ -14,7 +14,7 @@ void StartHelicopterRun(); void HandleHeliDrop( BOOLEAN fPlayer = TRUE ); -UINT16 SpawnAirDropElite( INT32 sGridNo ); +SoldierID SpawnAirDropElite( INT32 sGridNo ); void InitiateEnemyAirDropSoldiers( INT32 sGridNo ); void HandleEnemyAirdrop( ); diff --git a/TacticalAI/AIInternals.h b/TacticalAI/AIInternals.h index b732cb5e..b3293287 100644 --- a/TacticalAI/AIInternals.h +++ b/TacticalAI/AIInternals.h @@ -130,20 +130,20 @@ typedef struct class ATTACKTYPE { public: - UINT8 ubPossible; // is this attack form possible - UINT16 ubOpponent; // which soldier is the victim + UINT8 ubPossible; // is this attack form possible + SoldierID ubOpponent; // which soldier is the victim //CHANGED STRUCTURE VALUE BY GOTTHARD 7/14/07 - INT16 ubAimTime; // how many extra APs to spend on aiming - INT16 ubChanceToReallyHit; // chance to hit * chance to get through cover + INT16 ubAimTime; // how many extra APs to spend on aiming + INT16 ubChanceToReallyHit; // chance to hit * chance to get through cover //END STRUCTURE CHANGE BY GOTTHARD 7/14/07 - INT16 ubAPCost; // how many APs the attack will use up - INT32 iAttackValue; // relative worthiness of this type of attack - INT32 sTarget; // target gridno of this attack - INT8 bTargetLevel; // target level of this attack - INT8 bWeaponIn; // the inv slot of the weapon in question - INT8 bScopeMode; // SANDRO: added for scope mode and alternative weapon holding - UINT8 ubStance; // recommended stance for attack - UINT8 ubFriendlyFireChance; // highest chance to hit someone of our guys //dnl ch61 180813 + INT16 ubAPCost; // how many APs the attack will use up + INT32 iAttackValue; // relative worthiness of this type of attack + INT32 sTarget; // target gridno of this attack + INT8 bTargetLevel; // target level of this attack + INT8 bWeaponIn; // the inv slot of the weapon in question + INT8 bScopeMode; // SANDRO: added for scope mode and alternative weapon holding + UINT8 ubStance; // recommended stance for attack + UINT8 ubFriendlyFireChance; // highest chance to hit someone of our guys //dnl ch61 180813 ATTACKTYPE(void){ InitAttackType(this); } void InitAttackType(ATTACKTYPE *pAttack); @@ -212,7 +212,7 @@ void CreatureDecideAlertStatus( SOLDIERTYPE *pCreature ); // sevenfm: void CheckTossSelfSmoke(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow); void CheckTossFriendSmoke(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow); -void CheckTossAt(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow, INT32 sTargetSpot, INT8 bTargetLevel, UINT16 ubOpponentID); +void CheckTossAt(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow, INT32 sTargetSpot, INT8 bTargetLevel, SoldierID ubOpponentID); INT32 FindTossSpotInDirection(INT32 sSpot, INT8 bLevel, INT32 sTargetSpot, BOOLEAN fCheckAdjacentDirections, BOOLEAN fCheckFarther); void CheckTossGrenadeAt(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow, INT32 sTargetSpot, INT8 bTargetLevel, UINT8 ubGrenadeType); @@ -254,7 +254,7 @@ INT32 InternalGoAsFarAsPossibleTowards(SOLDIERTYPE *pSoldier, INT32 sDesGrid, IN int LegalNPCDestination(SOLDIERTYPE *pSoldier, INT32 sGridno, UINT8 ubPathMode, UINT8 ubWaterOK, UINT8 fFlags); void LoadWeaponIfNeeded(SOLDIERTYPE *pSoldier); INT32 MostImportantNoiseHeard( SOLDIERTYPE *pSoldier, INT32 *piRetValue, BOOLEAN * pfClimbingNecessary, BOOLEAN * pfReachable ); -INT32 NPCConsiderInitiatingConv( SOLDIERTYPE * pNPC, UINT8 * pubDesiredMerc ); +INT32 NPCConsiderInitiatingConv( SOLDIERTYPE * pNPC, SoldierID * pubDesiredMerc ); void NPCDoesAct(SOLDIERTYPE *pSoldier); void NPCDoesNothing(SOLDIERTYPE *pSoldier); INT8 OKToAttack(SOLDIERTYPE *ptr, int target); @@ -318,7 +318,7 @@ BOOLEAN GetBestAoEGridNo(SOLDIERTYPE *pSoldier, INT32* pGridNo, INT16 aRadius, U // Get the ID of the farthest opponent we can see, with an optional minimum range // puID - ID of the farthest opponent pSoldier can see // sRange - only return true and give an idea if opponent found is further away than this -BOOLEAN GetFarthestOpponent(SOLDIERTYPE *pSoldier, UINT16 * puID, INT16 sRange); +BOOLEAN GetFarthestOpponent(SOLDIERTYPE *pSoldier, SoldierID *puID, INT16 sRange); // are there more allies than friends in adjacent sectors? BOOLEAN MoreFriendsThanEnemiesinNearbysectors(UINT8 ausTeam, INT16 aX, INT16 aY, INT8 aZ); diff --git a/TacticalAI/AIList.cpp b/TacticalAI/AIList.cpp index 618c643d..e91c48e1 100644 --- a/TacticalAI/AIList.cpp +++ b/TacticalAI/AIList.cpp @@ -46,7 +46,7 @@ void DeleteAIListEntry( AILIST * pEntry ) pEntry->pNext = NULL; } -UINT16 FindEmptyAIListEntry( void ) +SoldierID FindEmptyAIListEntry( void ) { UINT16 ubLoop; @@ -61,7 +61,7 @@ UINT16 FindEmptyAIListEntry( void ) return( AI_LIST_SIZE ); } -AILIST * CreateNewAIListEntry( UINT16 ubNewEntry, UINT16 ubID, INT8 bPriority ) +AILIST * CreateNewAIListEntry( UINT16 ubNewEntry, SoldierID ubID, INT8 bPriority ) { gAIList[ ubNewEntry ].ubID = ubID; gAIList[ ubNewEntry ].bPriority = bPriority; @@ -69,10 +69,10 @@ AILIST * CreateNewAIListEntry( UINT16 ubNewEntry, UINT16 ubID, INT8 bPriority ) return( &(gAIList[ ubNewEntry ]) ); } -UINT16 RemoveFirstAIListEntry( void ) +SoldierID RemoveFirstAIListEntry( void ) { AILIST *pOldFirstEntry; - UINT16 ubID; + SoldierID ubID; while ( gpFirstAIListEntry != NULL) { @@ -94,7 +94,7 @@ UINT16 RemoveFirstAIListEntry( void ) return( NOBODY ); } -void RemoveAIListEntryForID( UINT16 ubID ) +void RemoveAIListEntryForID( SoldierID ubID ) { AILIST * pEntry; AILIST * pPrevEntry; @@ -123,9 +123,9 @@ void RemoveAIListEntryForID( UINT16 ubID ) // none found, that's okay } -BOOLEAN InsertIntoAIList( UINT16 ubID, INT8 bPriority ) +BOOLEAN InsertIntoAIList( SoldierID ubID, INT8 bPriority ) { - UINT16 ubNewEntry; + SoldierID ubNewEntry; AILIST * pEntry, * pNewEntry, * pPrevEntry = NULL; ubNewEntry = FindEmptyAIListEntry(); @@ -276,15 +276,15 @@ BOOLEAN SatisfiesAIListConditions( SOLDIERTYPE * pSoldier, UINT16 * pubDoneCount return( TRUE ); } -BOOLEAN MoveToFrontOfAIList( UINT16 ubID ) +BOOLEAN MoveToFrontOfAIList( SoldierID ubID ) { // we'll have to fake this guy's alert status (in the list) to be the same as the current // front of the list INT8 bPriority; - UINT16 ubNewEntry; - AILIST * pNewEntry; + SoldierID ubNewEntry; + AILIST *pNewEntry; - if ( !SatisfiesAIListConditions( MercPtrs[ ubID ], NULL, FALSE ) ) + if ( !SatisfiesAIListConditions( ubID, NULL, FALSE ) ) { // can't do dat! return( FALSE ); diff --git a/TacticalAI/AIList.h b/TacticalAI/AIList.h index bb44ac29..49858a90 100644 --- a/TacticalAI/AIList.h +++ b/TacticalAI/AIList.h @@ -1,18 +1,18 @@ -#include "Types.h" +#include "Overhead Types.h" typedef struct AILIST { - UINT16 ubID; - INT8 bPriority; - UINT8 ubUnused; - struct AILIST * pNext; + SoldierID ubID; + INT8 bPriority; + UINT8 ubUnused; + struct AILIST *pNext; } AILIST; #define MAX_AI_PRIORITY 100 extern void ClearAIList( void ); -extern AILIST * CreateNewAIListEntry( UINT16 ubNewEntry, UINT16 ubID, INT8 bAlertStatus ); -extern BOOLEAN InsertIntoAIList( UINT16 ubID, INT8 bAlertStatus ); -extern UINT16 RemoveFirstAIListEntry( void ); +extern AILIST * CreateNewAIListEntry( UINT16 ubNewEntry, SoldierID ubID, INT8 bAlertStatus ); +extern BOOLEAN InsertIntoAIList( SoldierID ubID, INT8 bAlertStatus ); +extern SoldierID RemoveFirstAIListEntry( void ); extern BOOLEAN BuildAIListForTeam( INT8 bTeam ); -extern BOOLEAN MoveToFrontOfAIList( UINT16 ubID ); +extern BOOLEAN MoveToFrontOfAIList( SoldierID ubID ); diff --git a/TacticalAI/AIMain.cpp b/TacticalAI/AIMain.cpp index f3970d1d..f6d32bea 100644 --- a/TacticalAI/AIMain.cpp +++ b/TacticalAI/AIMain.cpp @@ -874,7 +874,7 @@ void HandleSoldierAI( SOLDIERTYPE *pSoldier ) // FIXME - this function is named void EndAIGuysTurn( SOLDIERTYPE *pSoldier ) { - UINT16 ubID; + SoldierID ubID; if (gfTurnBasedAI) { @@ -885,19 +885,19 @@ void EndAIGuysTurn( SOLDIERTYPE *pSoldier ) } // search for any player merc to say close call quote - for ( ubID = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; ubID <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubID++ ) + for ( ubID = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; ubID <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++ubID ) { - if ( OK_INSECTOR_MERC( MercPtrs[ ubID ] ) ) + if ( OK_INSECTOR_MERC( ubID ) ) { - if ( MercPtrs[ ubID ]->flags.fCloseCall ) + if ( ubID->flags.fCloseCall ) { - if ( !gTacticalStatus.fSomeoneHit && MercPtrs[ ubID ]->bNumHitsThisTurn == 0 && !(MercPtrs[ ubID ]->usQuoteSaidExtFlags & SOLDIER_QUOTE_SAID_EXT_CLOSE_CALL) && Random( 3 ) == 0 ) + if ( !gTacticalStatus.fSomeoneHit && ubID->bNumHitsThisTurn == 0 && !(ubID->usQuoteSaidExtFlags & SOLDIER_QUOTE_SAID_EXT_CLOSE_CALL) && Random( 3 ) == 0 ) { // say close call quote! - TacticalCharacterDialogue( MercPtrs[ ubID ], QUOTE_CLOSE_CALL ); - MercPtrs[ ubID ]->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_EXT_CLOSE_CALL; + TacticalCharacterDialogue( ubID, QUOTE_CLOSE_CALL ); + ubID->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_EXT_CLOSE_CALL; } - MercPtrs[ ubID ]->flags.fCloseCall = FALSE; + ubID->flags.fCloseCall = FALSE; } } } @@ -942,7 +942,7 @@ void EndAIGuysTurn( SOLDIERTYPE *pSoldier ) ubID = RemoveFirstAIListEntry(); if (ubID != NOBODY) { - StartNPCAI( MercPtrs[ ubID ] ); + StartNPCAI( ubID ); return; } @@ -1165,12 +1165,12 @@ INT32 FindAdjacentSpotBeside(SOLDIERTYPE *pSoldier, INT32 sGridNo) return(sCheapestDest); } -UINT16 GetMostThreateningOpponent( SOLDIERTYPE *pSoldier ) +SoldierID GetMostThreateningOpponent( SOLDIERTYPE *pSoldier ) { - UINT32 uiLoop; - INT32 iThreatVal,iMinThreat = 30000; - SOLDIERTYPE *pTargetSoldier; - UINT16 ubTargetSoldier = NOBODY; + UINT32 uiLoop; + INT32 iThreatVal,iMinThreat = 30000; + SOLDIERTYPE *pTargetSoldier; + SoldierID ubTargetSoldier = NOBODY; // Loop through all mercs @@ -1914,7 +1914,7 @@ INT8 ExecuteAction(SOLDIERTYPE *pSoldier) UINT16 usHandItem = pSoldier->inv[HANDPOS].usItem; INT8 bSlot; - UINT16 usSoldierIndex; // added by SANDRO + SoldierID usSoldierIndex; // added by SANDRO #ifdef TESTAICONTROL if (gfTurnBasedAI || gTacticalStatus.fAutoBandageMode) @@ -2594,7 +2594,7 @@ INT8 ExecuteAction(SOLDIERTYPE *pSoldier) usSoldierIndex = WhoIsThere2( pSoldier->aiData.usActionData, pSoldier->bTargetLevel); if ( usSoldierIndex != NOBODY ) { - MercStealFromMerc( pSoldier, MercPtrs[usSoldierIndex] ); + MercStealFromMerc( pSoldier, usSoldierIndex ); PossiblyStartEnemyTaunt( pSoldier, TAUNT_STEAL, usSoldierIndex ); } @@ -2628,7 +2628,7 @@ INT8 ExecuteAction(SOLDIERTYPE *pSoldier) case AI_ACTION_USE_SKILL: { - UINT16 ubID = WhoIsThere2( pSoldier->aiData.usActionData, 0 ); + SoldierID ubID = WhoIsThere2( pSoldier->aiData.usActionData, 0 ); BOOLEAN result = pSoldier->UseSkill(pSoldier->usAISkillUse, pSoldier->aiData.usActionData, ubID); diff --git a/TacticalAI/Attacks.cpp b/TacticalAI/Attacks.cpp index 25ea052a..703cc950 100644 --- a/TacticalAI/Attacks.cpp +++ b/TacticalAI/Attacks.cpp @@ -716,16 +716,16 @@ void CalcBestShot(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestShot) //dnl ch62 180813 ignore firing into breathless targets if there are targets in better condition // sevenfm: check that best opponent exists if (pBestShot->ubOpponent != NOBODY && - (Menptr[pBestShot->ubOpponent].bCollapsed || Menptr[pBestShot->ubOpponent].bBreathCollapsed) && - Menptr[pBestShot->ubOpponent].bBreath < OKBREATH - && Menptr[pBestShot->ubOpponent].bBreath < pOpponent->bBreath) + (pBestShot->ubOpponent->bCollapsed || pBestShot->ubOpponent->bBreathCollapsed) && + pBestShot->ubOpponent->bBreath < OKBREATH + && pBestShot->ubOpponent->bBreath < pOpponent->bBreath) { iPercentBetter = PERCENT_TO_IGNORE_THREAT; } // sevenfm: if best opponent is dying and new opponent is ok, use new opponent if (pBestShot->ubOpponent != NOBODY && - Menptr[pBestShot->ubOpponent].stats.bLife < OKLIFE && + pBestShot->ubOpponent->stats.bLife < OKLIFE && pOpponent->stats.bLife >= OKLIFE) { iPercentBetter = PERCENT_TO_IGNORE_THREAT; @@ -735,7 +735,7 @@ void CalcBestShot(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestShot) // guy is conscious at all if (iPercentBetter < -PERCENT_TO_IGNORE_THREAT && pBestShot->ubOpponent != NOBODY && - Menptr[pBestShot->ubOpponent].stats.bLife >= OKLIFE) + pBestShot->ubOpponent->stats.bLife >= OKLIFE) { // then stick with the older guy as the better target continue; @@ -753,7 +753,7 @@ void CalcBestShot(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestShot) // sevenfm: if new opponent is dying and best opponent is ok, ignore new opponent if (pBestShot->ubOpponent != NOBODY && - Menptr[pBestShot->ubOpponent].stats.bLife >= OKLIFE && + pBestShot->ubOpponent->stats.bLife >= OKLIFE && pOpponent->stats.bLife < OKLIFE) { //DebugShot(pSoldier, String("new opponent is dying, best opponent is ok - skip")); @@ -845,7 +845,8 @@ void CalcBestThrow(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow) INT32 sGridNo, sEndGridNo, sFriendTile[MAXMERCS], sOpponentTile[MAXMERCS]; INT8 bFriendLevel[MAXMERCS], bOpponentLevel[MAXMERCS]; INT32 iEstDamage; - UINT16 ubFriendCnt = 0,ubOpponentCnt = 0, ubOpponentID[MAXMERCS]; + UINT16 ubFriendCnt = 0, ubOpponentCnt = 0; + SoldierID ubOpponentID[MAXMERCS]; UINT8 ubMaxPossibleAimTime; INT16 sRawAPCost, sMinAPcost; UINT8 ubChanceToHit, ubChanceToGetThrough, ubChanceToReallyHit, ubFriendlyFireChance; @@ -1479,7 +1480,7 @@ void CalcBestThrow(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow) iThreatValue = iOppThreatValue[ubLoop2]; // estimate how much damage this tossed item would do to him - iEstDamage = EstimateThrowDamage(pSoldier,bPayloadPocket,MercPtrs[ubOpponentID[ubLoop2]],sGridNo); + iEstDamage = EstimateThrowDamage(pSoldier, bPayloadPocket, ubOpponentID[ubLoop2], sGridNo); if (usOppDist) { @@ -1492,7 +1493,7 @@ void CalcBestThrow(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow) iTotalThreatValue += (iThreatValue * iEstDamage); // only count opponents still standing worth shooting at (in range) - if (Menptr[ ubOpponentID[ubLoop2] ].stats.bLife >= OKLIFE) + if (ubOpponentID[ubLoop2]->stats.bLife >= OKLIFE) { ubOppsInRange++; if (usOppDist < 2) @@ -1599,7 +1600,7 @@ void CalcBestThrow(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow) // limit RPG use, unless can hit several enemies, shooting at tank or opponent is in a room if (ItemIsRocketLauncher(usInHand) && ubOppsInRange < 2 && - !ARMED_VEHICLE(MercPtrs[ubOpponentID[ubLoop]]) && + !ARMED_VEHICLE(ubOpponentID[ubLoop]) && (!InARoom(sOpponentTile[ubLoop], NULL) || pSoldier->bTeam != ENEMY_TEAM)) { continue; // next gridno @@ -1691,7 +1692,7 @@ void CalcBestThrow(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow) { ubMinChanceToReallyHit = 30; } - else if (EXPLOSIVE_GUN(usInHand) && !ARMED_VEHICLE(pSoldier) && (pBestThrow->ubOpponent == NOBODY || !ARMED_VEHICLE(MercPtrs[pBestThrow->ubOpponent]))) + else if (EXPLOSIVE_GUN(usInHand) && !ARMED_VEHICLE(pSoldier) && (pBestThrow->ubOpponent == NOBODY || !ARMED_VEHICLE(pBestThrow->ubOpponent))) { ubMinChanceToReallyHit = 80; } @@ -1916,7 +1917,7 @@ void CalcBestStab(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestStab, BOOLEAN fBladeAt // guy is conscious at all if (iPercentBetter < -PERCENT_TO_IGNORE_THREAT && pBestStab->ubOpponent != NOBODY && - Menptr[pBestStab->ubOpponent].stats.bLife >= OKLIFE) + pBestStab->ubOpponent->stats.bLife >= OKLIFE) { // then stick with the older guy as the better target continue; @@ -1937,12 +1938,12 @@ void CalcBestStab(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestStab, BOOLEAN fBladeAt // OOOF! That was a lot of work! But we've got a new best target! pBestStab->ubPossible = TRUE; pBestStab->ubOpponent = pOpponent->ubID; - pBestStab->ubAimTime = ubBestAimTime; - pBestStab->ubChanceToReallyHit = ubChanceToReallyHit; - pBestStab->sTarget = pOpponent->sGridNo; - pBestStab->bTargetLevel = pOpponent->pathing.bLevel; - pBestStab->iAttackValue = iAttackValue; - pBestStab->ubAPCost = ubMinAPCost + ubBestAimTime; + pBestStab->ubAimTime = ubBestAimTime; + pBestStab->ubChanceToReallyHit = ubChanceToReallyHit; + pBestStab->sTarget = pOpponent->sGridNo; + pBestStab->bTargetLevel = pOpponent->pathing.bLevel; + pBestStab->iAttackValue = iAttackValue; + pBestStab->ubAPCost = ubMinAPCost + ubBestAimTime; } } @@ -3480,7 +3481,8 @@ BOOLEAN GetBestAoEGridNo(SOLDIERTYPE *pSoldier, INT32* pGridNo, INT16 aRadius, U { UINT16 ubLoop, ubLoop2; INT32 sGridNo, sFriendTile[MAXMERCS], sOpponentTile[MAXMERCS], sTabooTile[MAXMERCS]; - UINT16 ubFriendCnt = 0,ubOpponentCnt = 0, ubTabooCnt = 0, ubOpponentID[MAXMERCS]; + UINT16 ubFriendCnt = 0, ubOpponentCnt = 0, ubTabooCnt = 0; + SoldierID ubOpponentID[MAXMERCS]; INT32 bMaxLeft,bMaxRight,bMaxUp,bMaxDown, i, j; INT8 bPersOL, bPublOL; SOLDIERTYPE *pFriend; @@ -3670,7 +3672,7 @@ BOOLEAN GetBestAoEGridNo(SOLDIERTYPE *pSoldier, INT32* pGridNo, INT16 aRadius, U // Get the ID of the farthest opponent we can see, with an optional minimum range // puID - ID of the farthest opponent pSoldier can see // sRange - only return an true and give an idea if opponent found is further away than this -BOOLEAN GetFarthestOpponent(SOLDIERTYPE *pSoldier, UINT16 * puID, INT16 sRange) +BOOLEAN GetFarthestOpponent(SOLDIERTYPE *pSoldier, SoldierID *puID, INT16 sRange) { INT32 sGridNo; UINT32 uiLoop; @@ -3885,13 +3887,13 @@ void CheckTossFriendSmoke(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow) INT8 bLevel = pSoldier->pathing.bLevel; // check all friends - SOLDIERTYPE * pFriend; - INT32 sClosestFriendSpot = NOWHERE; - INT8 bClosestFriendLevel = 0; - UINT16 ubClosestFriendID = NOBODY; + SOLDIERTYPE *pFriend; + INT32 sClosestFriendSpot = NOWHERE; + INT8 bClosestFriendLevel = 0; + SoldierID ubClosestFriendID = NOBODY; INT32 sFriendSpot; - INT8 bFriendLevel; + INT8 bFriendLevel; INT32 sClosestOpponent; @@ -3999,7 +4001,7 @@ void CheckTossFriendSmoke(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow) // check if we can toss grenade at spot, and prepare attack data // grenade should be in hand -void CheckTossAt(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow, INT32 sTargetSpot, INT8 bTargetLevel, UINT16 ubOpponentID) +void CheckTossAt(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow, INT32 sTargetSpot, INT8 bTargetLevel, SoldierID ubOpponentID) { UINT16 usInHand, usGrenade; INT32 iTossRange; diff --git a/TacticalAI/CreatureDecideAction.cpp b/TacticalAI/CreatureDecideAction.cpp index e453b321..9e01ff8e 100644 --- a/TacticalAI/CreatureDecideAction.cpp +++ b/TacticalAI/CreatureDecideAction.cpp @@ -1154,8 +1154,8 @@ INT8 CreatureDecideActionBlack( SOLDIERTYPE * pSoldier ) // if the selected opponent is not a threat (unconscious & !serviced) // (usually, this means all the guys we see our unconscious, but, on // rare occasions, we may not be able to shoot a healthy guy, too) - if ((Menptr[BestShot.ubOpponent].stats.bLife < OKLIFE) && - !Menptr[BestShot.ubOpponent].bService) + if ((BestShot.ubOpponent->stats.bLife < OKLIFE) && + !BestShot.ubOpponent->bService) { // if our attitude is NOT aggressive if (pSoldier->aiData.bAttitude != AGGRESSIVE) diff --git a/TacticalAI/DecideAction.cpp b/TacticalAI/DecideAction.cpp index 9b3a00ac..25f1016e 100644 --- a/TacticalAI/DecideAction.cpp +++ b/TacticalAI/DecideAction.cpp @@ -595,10 +595,10 @@ INT8 DecideActionBoxerEnteringRing(SOLDIERTYPE *pSoldier) INT8 DecideActionNamedNPC( SOLDIERTYPE * pSoldier ) { - INT32 sDesiredMercLoc; - UINT8 ubDesiredMercDir; - UINT8 ubDesiredMerc; - INT32 sDesiredMercDist; + INT32 sDesiredMercLoc; + UINT8 ubDesiredMercDir; + SoldierID ubDesiredMerc; + INT32 sDesiredMercDist; #ifdef DEBUGDECISIONS STR16 tempstr; #endif diff --git a/TacticalAI/FindLocations.cpp b/TacticalAI/FindLocations.cpp index 1b726e20..d87a4a08 100644 --- a/TacticalAI/FindLocations.cpp +++ b/TacticalAI/FindLocations.cpp @@ -119,7 +119,7 @@ void AICenterXY( INT32 sGridNo, FLOAT * pdX, FLOAT * pdY ) *pdY = (FLOAT) (sYPos * CELL_Y_SIZE + CELL_Y_SIZE / 2); } -INT8 CalcWorstCTGTForPosition( SOLDIERTYPE * pSoldier, UINT16 ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft ) +INT8 CalcWorstCTGTForPosition( SOLDIERTYPE * pSoldier, SoldierID ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft ) { // When considering a gridno for cover, we want to take into account cover if we // lie down, so we return the LOWEST chance to get through for that location. @@ -158,7 +158,7 @@ INT8 CalcWorstCTGTForPosition( SOLDIERTYPE * pSoldier, UINT16 ubOppID, INT32 sOp return( bWorstCTGT ); } -INT8 CalcAverageCTGTForPosition( SOLDIERTYPE * pSoldier, UINT16 ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft ) +INT8 CalcAverageCTGTForPosition( SOLDIERTYPE * pSoldier, SoldierID ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft ) { // When considering a gridno for cover, we want to take into account cover if we // lie down, so we return the LOWEST chance to get through for that location. @@ -192,7 +192,7 @@ INT8 CalcAverageCTGTForPosition( SOLDIERTYPE * pSoldier, UINT16 ubOppID, INT32 s } -INT8 CalcBestCTGT( SOLDIERTYPE *pSoldier, UINT16 ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft ) +INT8 CalcBestCTGT( SOLDIERTYPE *pSoldier, SoldierID ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft ) { // NOTE: CTGT stands for "ChanceToGetThrough..." @@ -592,7 +592,7 @@ INT32 CalcCoverValue(SOLDIERTYPE *pMe, INT32 sMyGridNo, INT32 iMyThreat, INT32 i UINT8 NumberOfTeamMatesAdjacent( SOLDIERTYPE * pSoldier, INT32 sGridNo ) { UINT8 ubLoop, ubCount; - UINT16 ubWhoIsThere; + SoldierID ubWhoIsThere; INT32 sTempGridNo; ubCount = 0; @@ -603,7 +603,7 @@ UINT8 NumberOfTeamMatesAdjacent( SOLDIERTYPE * pSoldier, INT32 sGridNo ) if ( sTempGridNo != sGridNo ) { ubWhoIsThere = WhoIsThere2( sTempGridNo, pSoldier->pathing.bLevel ); - if ( ubWhoIsThere != NOBODY && ubWhoIsThere != pSoldier->ubID && MercPtrs[ ubWhoIsThere ]->bTeam == pSoldier->bTeam ) + if ( ubWhoIsThere != NOBODY && ubWhoIsThere != pSoldier->ubID && ubWhoIsThere->bTeam == pSoldier->bTeam ) { ubCount++; } diff --git a/TacticalAI/Knowledge.cpp b/TacticalAI/Knowledge.cpp index c6e93a1f..74fafb00 100644 --- a/TacticalAI/Knowledge.cpp +++ b/TacticalAI/Knowledge.cpp @@ -200,7 +200,7 @@ INT32 MostImportantNoiseHeard( SOLDIERTYPE *pSoldier, INT32 *piRetValue, BOOLEAN if (*pbPublOL < NOT_HEARD_OR_SEEN) { // calculate how far this noise was, and its relative "importance" - iDistAway = SpacesAway(pSoldier->sGridNo,gsPublicLastKnownOppLoc[pSoldier->bTeam][pTemp->ubID]); + iDistAway = SpacesAway(pSoldier->sGridNo, gsPublicLastKnownOppLoc[pSoldier->bTeam][pTemp->ubID]); iNoiseValue = (*pbPublOL) * iDistAway; // always a negative number! if (iNoiseValue > iBestValue) diff --git a/TacticalAI/Medical.cpp b/TacticalAI/Medical.cpp index 5a46f6ee..35c2a334 100644 --- a/TacticalAI/Medical.cpp +++ b/TacticalAI/Medical.cpp @@ -42,7 +42,7 @@ BOOLEAN FindAutobandageClimbPoint( INT32 sDesiredGridNo, BOOLEAN fClimbUp ) BUILDING * pBuilding; UINT8 ubNumClimbSpots; UINT8 ubLoop; - UINT16 ubWhoIsThere; + SoldierID ubWhoIsThere; pBuilding = FindBuilding( sDesiredGridNo ); if (!pBuilding) @@ -55,12 +55,12 @@ BOOLEAN FindAutobandageClimbPoint( INT32 sDesiredGridNo, BOOLEAN fClimbUp ) for ( ubLoop = 0; ubLoop < ubNumClimbSpots; ubLoop++ ) { ubWhoIsThere = WhoIsThere2( pBuilding->sUpClimbSpots[ ubLoop ], 1 ); - if ( ubWhoIsThere != NOBODY && !CanCharacterAutoBandageTeammate( MercPtrs[ ubWhoIsThere ] ) ) + if ( ubWhoIsThere != NOBODY && !CanCharacterAutoBandageTeammate( ubWhoIsThere ) ) { continue; } ubWhoIsThere = WhoIsThere2( pBuilding->sDownClimbSpots[ ubLoop ], 0 ); - if ( ubWhoIsThere != NOBODY && !CanCharacterAutoBandageTeammate( MercPtrs[ ubWhoIsThere ] ) ) + if ( ubWhoIsThere != NOBODY && !CanCharacterAutoBandageTeammate( ubWhoIsThere ) ) { continue; } @@ -122,7 +122,7 @@ BOOLEAN CanAutoBandage( BOOLEAN fDoFullCheck ) UINT16 cnt; UINT16 ubMedics = 0, ubPatients = 0; SOLDIERTYPE * pSoldier; - static UINT16 ubIDForFullCheck = NOBODY; + static SoldierID ubIDForFullCheck = NOBODY; // run though the list of chars on team cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; @@ -311,7 +311,7 @@ INT8 FindBestPatient( SOLDIERTYPE * pSoldier, BOOLEAN * pfDoClimb ) { // only switch to this patient if our distance is closer than // the other medic's - pOtherMedic = MercPtrs[ pPatient->ubAutoBandagingMedic ]; + pOtherMedic = pPatient->ubAutoBandagingMedic; sOtherAdjacentGridNo = FindAdjacentGridEx( pOtherMedic, sPatientGridNo, &ubDirection, &sAdjustedGridNo, FALSE, FALSE ); if (sOtherAdjacentGridNo != -1) { @@ -379,8 +379,8 @@ INT8 FindBestPatient( SOLDIERTYPE * pSoldier, BOOLEAN * pfDoClimb ) if (pBestPatient->ubAutoBandagingMedic != NOBODY) { // cancel that medic - DebugAI(AI_MSG_INFO, MercPtrs[pBestPatient->ubAutoBandagingMedic], String("CancelAIAction: medic: find patient")); - CancelAIAction( MercPtrs[ pBestPatient->ubAutoBandagingMedic ], TRUE ); + DebugAI(AI_MSG_INFO, pBestPatient->ubAutoBandagingMedic, String("CancelAIAction: medic: find patient")); + CancelAIAction( pBestPatient->ubAutoBandagingMedic, TRUE ); } pBestPatient->ubAutoBandagingMedic = pSoldier->ubID; *pfDoClimb = FALSE; diff --git a/TacticalAI/NPC.cpp b/TacticalAI/NPC.cpp index 8ee54c8a..fcd67cb1 100644 --- a/TacticalAI/NPC.cpp +++ b/TacticalAI/NPC.cpp @@ -2557,12 +2557,13 @@ void Converse( UINT8 ubNPC, UINT8 ubMerc, INT8 bApproach, UINT32 uiApproachData } } -INT32 NPCConsiderInitiatingConv( SOLDIERTYPE * pNPC, UINT8 * pubDesiredMerc ) +INT32 NPCConsiderInitiatingConv( SOLDIERTYPE * pNPC, SoldierID * pubDesiredMerc ) { - INT32 sMyGridNo, sDist, sDesiredMercDist = 100; - UINT8 ubNPC; - UINT16 ubMerc, ubDesiredMerc = NOBODY; - UINT8 ubTalkDesire, ubHighestTalkDesire = 0; + INT32 sMyGridNo, sDist, sDesiredMercDist = 100; + UINT8 ubNPC; + UINT16 ubMerc; + SoldierID ubDesiredMerc = NOBODY; + UINT8 ubTalkDesire, ubHighestTalkDesire = 0; SOLDIERTYPE * pMerc; SOLDIERTYPE * pDesiredMerc = NULL; NPCQuoteInfo * pNPCQuoteInfoArray; diff --git a/TacticalAI/ai.h b/TacticalAI/ai.h index 3d990d88..70a211ec 100644 --- a/TacticalAI/ai.h +++ b/TacticalAI/ai.h @@ -228,7 +228,7 @@ void FreeUpNPCFromLoweringGun( SOLDIERTYPE *pSoldier ); void FreeUpNPCFromRoofClimb(SOLDIERTYPE *pSoldier ); UINT8 GetClosestOpponent( SOLDIERTYPE *pSoldier ); -UINT16 GetMostThreateningOpponent( SOLDIERTYPE *pSoldier ); +SoldierID GetMostThreateningOpponent( SOLDIERTYPE *pSoldier ); void HandleSoldierAI( SOLDIERTYPE *pSoldier ); void HandleInitialRedAlert( INT8 bTeam, UINT8 ubCommunicate); @@ -271,9 +271,9 @@ INT32 FindFlankingSpot(SOLDIERTYPE *pSoldier, INT32 sPos, INT8 bAction ); BOOLEAN CanClimbFromHere (SOLDIERTYPE * pSoldier, BOOLEAN fUp ); // HEADROCK HAM 3.6: Adding includes for A* cover calculations -INT8 CalcWorstCTGTForPosition( SOLDIERTYPE * pSoldier, UINT16 ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft ); -INT8 CalcBestCTGT( SOLDIERTYPE *pSoldier, UINT16 ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft ); -INT8 CalcAverageCTGTForPosition( SOLDIERTYPE * pSoldier, UINT16 ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft ); +INT8 CalcWorstCTGTForPosition( SOLDIERTYPE * pSoldier, SoldierID ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft ); +INT8 CalcBestCTGT( SOLDIERTYPE *pSoldier, SoldierID ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft ); +INT8 CalcAverageCTGTForPosition( SOLDIERTYPE * pSoldier, SoldierID ubOppID, INT32 sOppGridNo, INT8 bLevel, INT32 iMyAPsLeft ); UINT8 NumberOfTeamMatesAdjacent( SOLDIERTYPE * pSoldier, INT32 sGridNo ); // Flugente: get the id of the closest soldier (coser than x tiles) of a specific team with a specific flag that we can currently see diff --git a/TileEngine/Explosion Control.cpp b/TileEngine/Explosion Control.cpp index 5569c419..ee31dac1 100644 --- a/TileEngine/Explosion Control.cpp +++ b/TileEngine/Explosion Control.cpp @@ -4855,7 +4855,7 @@ void SetOffBombsByFrequency( SoldierID ubID, INT8 bFrequency ) } } -void SetOffPanicBombs( UINT16 ubID, INT8 bPanicTrigger ) +void SetOffPanicBombs( SoldierID ubID, INT8 bPanicTrigger ) { // need to turn off gridnos & flags in gTacticalStatus gTacticalStatus.sPanicTriggerGridNo[ bPanicTrigger ] = NOWHERE; diff --git a/TileEngine/Explosion Control.h b/TileEngine/Explosion Control.h index d4c8e531..466a3ca0 100644 --- a/TileEngine/Explosion Control.h +++ b/TileEngine/Explosion Control.h @@ -109,7 +109,7 @@ void DecayBombTimers( void ); void SetOffBombsByFrequency( SoldierID ubID, INT8 bFrequency ); BOOLEAN SetOffBombsInGridNo( SoldierID ubID, INT32 sGridNo, BOOLEAN fAllBombs, INT8 bLevel ); void ActivateSwitchInGridNo( SoldierID ubID, INT32 sGridNo ); -void SetOffPanicBombs( UINT16 ubID, INT8 bPanicTrigger ); +void SetOffPanicBombs( SoldierID ubID, INT8 bPanicTrigger ); void UpdateExplosionFrame( INT32 iIndex, INT16 sCurrentFrame ); void RemoveExplosionData( INT32 iIndex ); diff --git a/TileEngine/SmokeEffects.cpp b/TileEngine/SmokeEffects.cpp index 2ea2d122..91119d53 100644 --- a/TileEngine/SmokeEffects.cpp +++ b/TileEngine/SmokeEffects.cpp @@ -348,7 +348,7 @@ INT32 NewSmokeEffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, SoldierID ubOwne // OJW - 20091027 - Synchronizing smoke effect start for multiplayer if (is_networked && is_client) { - SOLDIERTYPE* pSoldier = MercPtrs[ubOwner]; + SOLDIERTYPE* pSoldier = ubOwner; if (pSoldier != NULL) { if (pSoldier->bTeam == 0 || (pSoldier->bTeam == 1 && is_server)) diff --git a/TileEngine/SmokeEffects.h b/TileEngine/SmokeEffects.h index 5b899f3d..ab4affe1 100644 --- a/TileEngine/SmokeEffects.h +++ b/TileEngine/SmokeEffects.h @@ -28,16 +28,16 @@ typedef struct TAG_SMOKE_EFFECT UINT8 ubDuration; // the number of turns gas will remain effective UINT8 ubRadius; // the current radius of the cloud in map tiles - UINT8 bFlags; // 0 - outdoors (fast spread), 1 - indoors (slow) + UINT8 bFlags; // 0 - outdoors (fast spread), 1 - indoors (slow) UINT8 bAge; // the number of turns gas has been around - BOOLEAN fAllocated; - INT8 bType; - UINT16 usItem; - UINT16 ubOwner; - UINT8 ubGeneration; - UINT32 uiTimeOfLastUpdate; - INT8 iMPTeamIndex; - INT32 iMPSmokeEffectID; + BOOLEAN fAllocated; + INT8 bType; + UINT16 usItem; + SoldierID ubOwner; + UINT8 ubGeneration; + UINT32 uiTimeOfLastUpdate; + INT8 iMPTeamIndex; + INT32 iMPSmokeEffectID; } SMOKEEFFECT; extern SMOKEEFFECT gSmokeEffectData[ NUM_SMOKE_EFFECT_SLOTS ]; diff --git a/TileEngine/overhead map.cpp b/TileEngine/overhead map.cpp index 9db3faca..14dd2f31 100644 --- a/TileEngine/overhead map.cpp +++ b/TileEngine/overhead map.cpp @@ -768,7 +768,7 @@ void HandleOverheadUI(void) { INT32 sMousePos = 0; InputAtom InputEvent; - UINT16 ubID; + SoldierID ubID; // CHECK FOR MOUSE OVER REGIONS... if(GetOverheadMouseGridNo(&sMousePos)) diff --git a/TileEngine/physics.cpp b/TileEngine/physics.cpp index d4ac3b3f..eb2179a8 100644 --- a/TileEngine/physics.cpp +++ b/TileEngine/physics.cpp @@ -2734,7 +2734,7 @@ void HandleArmedObjectImpact( REAL_OBJECT *pObject ) (*pObj)[0]->data.misc.bDelay = 1; // for non-player grenades, add turn so player could disarm grenade or run away - if ( pObject->ubOwner != NOBODY && MercPtrs[pObject->ubOwner]->bTeam != gbPlayerNum ) + if ( pObject->ubOwner != NOBODY && pObject->ubOwner->bTeam != gbPlayerNum ) { (*pObj)[0]->data.misc.bDelay++; } @@ -2762,7 +2762,7 @@ void HandleArmedObjectImpact( REAL_OBJECT *pObject ) if ( pObject->ubOwner != NOBODY && !fGoodStatus ) { - MercPtrs[ pObject->ubOwner ]->DoMercBattleSound( (INT8)( BATTLE_SOUND_CURSE1 ) ); + pObject->ubOwner->DoMercBattleSound( (INT8)( BATTLE_SOUND_CURSE1 ) ); } } } diff --git a/TileEngine/pits.cpp b/TileEngine/pits.cpp index a789e660..86f0e548 100644 --- a/TileEngine/pits.cpp +++ b/TileEngine/pits.cpp @@ -207,7 +207,7 @@ void RemoveAllPits() void SearchForOtherMembersWithinPitRadiusAndMakeThemFall( INT32 sGridNo, INT16 sRadius ) { INT32 x, y, sNewGridNo; - UINT16 ubID; + SoldierID ubID; SOLDIERTYPE *pSoldier; @@ -227,7 +227,7 @@ void SearchForOtherMembersWithinPitRadiusAndMakeThemFall( INT32 sGridNo, INT16 s { // OK, make guy fall... // Set data to look for exit grid.... - pSoldier = MercPtrs[ ubID ]; + pSoldier = ubID; pSoldier->aiData.uiPendingActionData4 = sNewGridNo; diff --git a/TileEngine/structure.cpp b/TileEngine/structure.cpp index 6bad3e2f..31d49000 100644 --- a/TileEngine/structure.cpp +++ b/TileEngine/structure.cpp @@ -1915,9 +1915,9 @@ INT8 DamageStructure( STRUCTURE * pStructure, UINT8 ubDamage, UINT8 ubReason, IN gpWorldLevelData[ tmpgridno ].uiFlags |= MAPELEMENT_STRUCTURE_DAMAGED; // handle structure revenge - damage to vehicle - to be resolved after movement - if ( ubOwner != NOBODY && MercPtrs[ubOwner] && !ARMED_VEHICLE( MercPtrs[ubOwner] ) ) + if ( ubOwner != NOBODY && !ARMED_VEHICLE( ubOwner ) ) { - MercPtrs[ubOwner]->SoldierTakeDelayedDamage(0, Random(max(0,(ubBaseArmour-10)/5)) + max(0,(ubBaseArmour-10)/5), 0, TAKE_DAMAGE_STRUCTURE_EXPLOSION, NOBODY, MercPtrs[ ubOwner ]->sGridNo, 0, TRUE); + ubOwner->SoldierTakeDelayedDamage(0, Random(max(0,(ubBaseArmour-10)/5)) + max(0,(ubBaseArmour-10)/5), 0, TAKE_DAMAGE_STRUCTURE_EXPLOSION, NOBODY, ubOwner->sGridNo, 0, TRUE); } // recompile = TRUE means that we destroyed something From 657097aa545a58e55d74e3690c8c60497e4420ad Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 17 Nov 2024 23:47:26 +0200 Subject: [PATCH 091/192] Remove unused global --- Tactical/Handle UI.cpp | 1 - Tactical/Handle UI.h | 1 - 2 files changed, 2 deletions(-) diff --git a/Tactical/Handle UI.cpp b/Tactical/Handle UI.cpp index f07301e8..c2c624ff 100644 --- a/Tactical/Handle UI.cpp +++ b/Tactical/Handle UI.cpp @@ -440,7 +440,6 @@ BOOLEAN gfUIDoNotHighlightSelMerc = FALSE; BOOLEAN gfUIHandleSelection = FALSE; BOOLEAN gfUIHandleSelectionAboveGuy = FALSE; BOOLEAN gfUIInDeadlock = FALSE; -UINT16 gUIDeadlockedSoldier = NOBODY; BOOLEAN gfUIHandleShowMoveGrid = FALSE; INT32 gsUIHandleShowMoveGridLocation = NOWHERE ; BOOLEAN gfUIOverItemPool = FALSE; diff --git a/Tactical/Handle UI.h b/Tactical/Handle UI.h index eab79f68..ff74b70c 100644 --- a/Tactical/Handle UI.h +++ b/Tactical/Handle UI.h @@ -200,7 +200,6 @@ extern BOOLEAN gfUIHandleSelectionAboveGuy; extern INT32 gsSelectedGridNo; extern SoldierID gsSelectedGuy; extern BOOLEAN gfUIInDeadlock; -extern UINT16 gUIDeadlockedSoldier; extern BOOLEAN gfUIMouseOnValidCatcher; extern SoldierID gubUIValidCatcherID; From f49013307f6396dd3589f75256f8dae0d9a64f0b Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 18 Nov 2024 01:01:57 +0200 Subject: [PATCH 092/192] Convert to SoldierID --- Laptop/insurance Contract.cpp | 4 +- Multiplayer/client.cpp | 95 +++++++++++------------ Multiplayer/connect.h | 6 +- Multiplayer/fresh_header.h | 12 +-- Strategic/Map Screen Interface.cpp | 8 +- Strategic/Merc Contract.cpp | 9 ++- Strategic/PreBattle Interface.cpp | 9 ++- Strategic/mapscreen.cpp | 14 ++-- Tactical/Handle Items.cpp | 4 +- Tactical/Handle Items.h | 4 +- Tactical/Interface Panels.cpp | 120 +++++++++++++++-------------- Tactical/Interface Panels.h | 6 +- Tactical/Item Types.cpp | 2 +- Tactical/Item Types.h | 4 +- Tactical/Turn Based Input.cpp | 4 +- Tactical/UI Cursors.cpp | 24 +++--- Tactical/UI Cursors.h | 2 +- Tactical/World Items.cpp | 9 ++- Tactical/World Items.h | 2 +- TileEngine/renderworld.cpp | 2 +- 20 files changed, 175 insertions(+), 165 deletions(-) diff --git a/Laptop/insurance Contract.cpp b/Laptop/insurance Contract.cpp index 0e23acc6..418df377 100644 --- a/Laptop/insurance Contract.cpp +++ b/Laptop/insurance Contract.cpp @@ -1461,8 +1461,8 @@ void InsuranceContractPayLifeInsuranceForDeadMerc( UINT16 ubPayoutID ) if( LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].ubSoldierID == Menptr[ 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 diff --git a/Multiplayer/client.cpp b/Multiplayer/client.cpp index 2b65f0fc..251f81f5 100644 --- a/Multiplayer/client.cpp +++ b/Multiplayer/client.cpp @@ -470,7 +470,7 @@ typedef struct float dForceY; float dForceZ; UINT32 sTargetGridNo; - UINT16 ubID; + SoldierID ubID; UINT8 ubActionCode; UINT32 uiActionData; UINT16 usItem; @@ -494,7 +494,7 @@ typedef struct typedef struct { UINT32 sGridNo; - UINT16 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 { - UINT16 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; - UINT16 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; - UINT16 ubOwner; + SoldierID ubOwner; BOOLEAN fSubsequent; INT8 bLevel; INT32 iSmokeEffectID; @@ -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; @@ -1019,7 +1019,7 @@ void send_dismiss(UINT16 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; @@ -1169,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; @@ -1195,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 ); } @@ -1899,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 ); @@ -1944,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 { @@ -1978,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(); } @@ -1994,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(); } @@ -2003,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 { @@ -2028,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 ); @@ -2049,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(); } @@ -2924,7 +2924,7 @@ void send_grenade (OBJECTTYPE *pGameObj, float dLifeLength, float xPos, float yP { 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)) @@ -2942,7 +2942,6 @@ 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; @@ -2965,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; @@ -3067,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 @@ -3128,7 +3127,7 @@ void recieveGRENADERESULT (RPCParameters *rpcParameters) } } -void send_plant_explosive (UINT16 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; @@ -3160,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 @@ -3297,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 @@ -3410,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 @@ -3439,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); @@ -3494,7 +3493,7 @@ void recieveSPREADEFFECT (RPCParameters *rpcParameters) sef->ubOwner = MPDecodeSoldierID(sef->ubOwner); - SOLDIERTYPE* pSoldier = MercPtrs[sef->ubOwner]; + SOLDIERTYPE* pSoldier = sef->ubOwner; if (pSoldier != NULL) { @@ -3579,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 @@ -3665,7 +3664,7 @@ void recieveEXPLOSIONDAMAGE (RPCParameters *rpcParameters) exp->ubAttackerID = MPDecodeSoldierID(exp->ubAttackerID); - SOLDIERTYPE* pSoldier = MercPtrs[exp->ubSoldierID]; + SOLDIERTYPE* pSoldier = exp->ubSoldierID; if (pSoldier != NULL) { @@ -3733,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; } @@ -3837,8 +3836,8 @@ 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; @@ -3852,7 +3851,7 @@ void send_death( SOLDIERTYPE *pSoldier ) 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; @@ -3951,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; @@ -4070,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; @@ -4093,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; @@ -4198,7 +4197,7 @@ BOOLEAN check_status (void)// any 'enemies' and clients left to fight ?? void UpdateSoldierToNetwork ( SOLDIERTYPE *pSoldier ) { //this send stats to other clients at intervals - UINT16 id = pSoldier->ubID; + SoldierID id = pSoldier->ubID; UINT32 time = GetJA2Clock(); if(id < 20 || (is_server && id <120)) @@ -4243,7 +4242,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; @@ -4424,7 +4423,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; @@ -4449,7 +4448,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 @@ -4725,14 +4724,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; @@ -4758,7 +4757,7 @@ void awardINT (RPCParameters *rpcParameters) { AIint* data= (AIint*)rpcParameters->input; - SOLDIERTYPE *pSoldier = MercPtrs[ data->ubID ]; + SOLDIERTYPE *pSoldier = data->ubID; StartInterrupt(); diff --git a/Multiplayer/connect.h b/Multiplayer/connect.h index 31fe44ea..349d524d 100644 --- a/Multiplayer/connect.h +++ b/Multiplayer/connect.h @@ -96,7 +96,7 @@ 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_hire( SoldierID iNewIndex, UINT8 ubCurrentSoldier, INT16 iTotalContractLength, BOOLEAN fCopyProfileItemsOver); void send_dismiss( UINT16 ubCurrentSoldierID); void send_gui_pos(SOLDIERTYPE *pSoldier, FLOAT dNewXPos, FLOAT dNewYPos); @@ -113,7 +113,7 @@ 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, 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 (UINT16 ubID,UINT16 usItem,UINT8 ubItemStatus,UINT16 usFlags, UINT32 sGridNo,UINT8 ubLevel, UINT32 uiWorldIndex); +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); @@ -220,7 +220,7 @@ inline SoldierID MPEncodeSoldierID( SoldierID ubID ) } // this one can be called anywhere, even if the ID was not "encoded" -inline UINT16 MPDecodeSoldierID( UINT16 ubID ) +inline SoldierID MPDecodeSoldierID( SoldierID ubID ) { if ( ubID >= ubID_prefix && ubID < (ubID_prefix + 7) ) return ubID - ubID_prefix; // soldier is ours diff --git a/Multiplayer/fresh_header.h b/Multiplayer/fresh_header.h index 46f90ec4..913bb035 100644 --- a/Multiplayer/fresh_header.h +++ b/Multiplayer/fresh_header.h @@ -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; @@ -65,4 +65,4 @@ BOOLEAN check_status (void); extern UINT16 NumEnemyInSector( ); extern UINT16 NumActiveAndConsciousTeamMembers( UINT8 ubTeam ); void send_heal (SOLDIERTYPE *pSoldier ); -void requestAIint(SOLDIERTYPE *pSoldier ); \ No newline at end of file +void requestAIint(SOLDIERTYPE *pSoldier ); diff --git a/Strategic/Map Screen Interface.cpp b/Strategic/Map Screen Interface.cpp index d23f06c1..8e51fa4c 100644 --- a/Strategic/Map Screen Interface.cpp +++ b/Strategic/Map Screen Interface.cpp @@ -2380,9 +2380,9 @@ void RandomMercInGroupSaysQuote( GROUP *pGroup, UINT16 usQuoteNum ) { PLAYERGROUP *pPlayer; SOLDIERTYPE *pSoldier; - UINT16 ubMercsInGroup[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ]; - UINT16 ubNumMercs = 0; - UINT16 ubChosenMerc; + SoldierID ubMercsInGroup[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ]; + UINT16 ubNumMercs = 0; + UINT16 ubChosenMerc; // if traversing tactically, don't do this, unless time compression was required for some reason (don't go to sector) @@ -2414,7 +2414,7 @@ void RandomMercInGroupSaysQuote( GROUP *pGroup, UINT16 usQuoteNum ) if ( ubNumMercs > 0 ) { ubChosenMerc = (UINT16)Random( ubNumMercs ); - pSoldier = MercPtrs[ ubMercsInGroup[ ubChosenMerc ] ]; + pSoldier = ubMercsInGroup[ ubChosenMerc ]; TacticalCharacterDialogue( pSoldier, usQuoteNum ); } diff --git a/Strategic/Merc Contract.cpp b/Strategic/Merc Contract.cpp index 983d3e20..c0f4e4e2 100644 --- a/Strategic/Merc Contract.cpp +++ b/Strategic/Merc Contract.cpp @@ -1416,7 +1416,7 @@ void FindOutIfAnyMercAboutToLeaveIsGonnaRenew( void ) SOLDIERTYPE *pSoldier = NULL, *pSoldierWhoWillQuit = NULL; INT32 iCounter= 0, iNumberOnTeam = 0; // WDS - make number of mercenaries, etc. be configurable - UINT16 ubPotentialMercs[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ] = { 0 }; + SoldierID ubPotentialMercs[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ] = { 0 }; UINT16 ubNumMercs = 0; UINT16 ubChosenMerc; @@ -1499,15 +1499,16 @@ void FindOutIfAnyMercAboutToLeaveIsGonnaRenew( void ) if ( ubNumMercs > 0 ) { 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; } } } diff --git a/Strategic/PreBattle Interface.cpp b/Strategic/PreBattle Interface.cpp index 36fd826a..5aed8f36 100644 --- a/Strategic/PreBattle Interface.cpp +++ b/Strategic/PreBattle Interface.cpp @@ -2558,15 +2558,16 @@ void CheckForRobotAndIfItsControlled( void ) // search for the robot on player's team for( 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 = MercPtrs[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; diff --git a/Strategic/mapscreen.cpp b/Strategic/mapscreen.cpp index 082b7825..0f563116 100644 --- a/Strategic/mapscreen.cpp +++ b/Strategic/mapscreen.cpp @@ -14656,7 +14656,7 @@ void SortListOfMercsInTeamPanel( BOOLEAN fRetainSelectedMercs, BOOLEAN fReverse INT32 iCounter = 0, iCounterA = 0; INT16 sEndSectorA, sEndSectorB; INT32 iExpiryTime, iExpiryTimeA; - UINT16 uiID, uiIDA; + SoldierID uiID, uiIDA; SOLDIERTYPE *pSelectedSoldier[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ]; SOLDIERTYPE *pCurrentSoldier = NULL; SOLDIERTYPE *pPreviousSelectedInfoChar = NULL; @@ -15859,7 +15859,7 @@ void CancelPathsOfAllSelectedCharacters() // if we've clicked on a selected valid character if( ( gCharactersList[ bCounter ].fValid == TRUE ) && IsEntryInSelectedListSet( bCounter ) ) { - pSoldier = MercPtrs[ gCharactersList[ bCounter ].usSolID ]; + pSoldier = gCharactersList[ bCounter ].usSolID; // and he has a route set if ( GetLengthOfMercPath( pSoldier ) > 0 ) @@ -16283,10 +16283,10 @@ void RandomAwakeSelectedMercConfirmsStrategicMove( void ) SOLDIERTYPE *pSoldier = NULL; INT32 iCounter; // WDS - make number of mercenaries, etc. be configurable - UINT16 ubSelectedMercID[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ]; - UINT16 ubSelectedMercIndex[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ]; - UINT16 ubNumMercs = 0; - UINT16 ubChosenMerc; + SoldierID ubSelectedMercID[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ]; + UINT16 ubSelectedMercIndex[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ]; + UINT16 ubNumMercs = 0; + UINT16 ubChosenMerc; for( iCounter = 0; iCounter < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS; iCounter++ ) @@ -16313,7 +16313,7 @@ void RandomAwakeSelectedMercConfirmsStrategicMove( void ) // select that merc so that when he speaks we're showing his portrait and not someone else ChangeSelectedInfoChar( ubSelectedMercIndex[ ubChosenMerc ], FALSE ); - MercPtrs[ ubSelectedMercID[ ubChosenMerc ] ]->DoMercBattleSound( BATTLE_SOUND_OK1 ); + ubSelectedMercID[ ubChosenMerc ]->DoMercBattleSound( BATTLE_SOUND_OK1 ); //TacticalCharacterDialogue( MercPtrs[ ubSelectedMercID[ ubChosenMerc ] ], ubQuoteNum ); } } diff --git a/Tactical/Handle Items.cpp b/Tactical/Handle Items.cpp index d4a9abb9..d95b6157 100644 --- a/Tactical/Handle Items.cpp +++ b/Tactical/Handle Items.cpp @@ -2953,12 +2953,12 @@ OBJECTTYPE* AddItemToPool( INT32 sGridNo, OBJECTTYPE *pObject, INT8 bVisible, UI return InternalAddItemToPool( &sGridNo, pObject, bVisible, ubLevel, usFlags, bRenderZHeightAboveLevel, soldierID, NULL ); } -OBJECTTYPE * AddItemToPoolAndGetIndex( INT32 sGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT16 soldierID, INT32 * piItemIndex ) +OBJECTTYPE * AddItemToPoolAndGetIndex( INT32 sGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, SoldierID soldierID, INT32 * piItemIndex ) { return( InternalAddItemToPool( &sGridNo, pObject, bVisible, ubLevel, usFlags, bRenderZHeightAboveLevel, soldierID, piItemIndex ) ); } -OBJECTTYPE* InternalAddItemToPool( INT32 *psGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT16 soldierID, INT32 * piItemIndex ) +OBJECTTYPE* InternalAddItemToPool( INT32 *psGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, SoldierID soldierID, INT32 * piItemIndex ) { ITEM_POOL *pItemPool; ITEM_POOL *pItemPoolTemp; diff --git a/Tactical/Handle Items.h b/Tactical/Handle Items.h index b01e4b4a..d43a42b5 100644 --- a/Tactical/Handle Items.h +++ b/Tactical/Handle Items.h @@ -195,8 +195,8 @@ void AllSoldiersLookforItems( BOOLEAN RevealRoofsAndItems ); void SoldierGetItemFromWorld( SOLDIERTYPE *pSoldier, INT32 iItemIndex, INT32 sGridNo, INT8 bZLevel, BOOLEAN *pfSelectionList ); OBJECTTYPE* AddItemToPool(INT32 sGridNo, OBJECTTYPE* pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT16 soldierID = -1); -OBJECTTYPE* AddItemToPoolAndGetIndex( INT32 sGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT16 soldierID, INT32 * piItemIndex ); -OBJECTTYPE* InternalAddItemToPool( INT32 *psGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT16 soldierID, INT32 * piItemIndex ); +OBJECTTYPE* AddItemToPoolAndGetIndex( INT32 sGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, SoldierID soldierID, INT32 * piItemIndex ); +OBJECTTYPE* InternalAddItemToPool( INT32 *psGridNo, OBJECTTYPE *pObject, INT8 bVisible, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, SoldierID soldierID, INT32 * piItemIndex ); INT32 AdjustGridNoForItemPlacement( SOLDIERTYPE *pSoldier, INT32 sGridNo ); BOOLEAN GetItemPool( INT32 usMapPos, ITEM_POOL **ppItemPool, UINT8 ubLevel ); diff --git a/Tactical/Interface Panels.cpp b/Tactical/Interface Panels.cpp index 40df6462..ae0ed4cc 100644 --- a/Tactical/Interface Panels.cpp +++ b/Tactical/Interface Panels.cpp @@ -3725,7 +3725,7 @@ void SMInvClickCallback( MOUSE_REGION * pRegion, INT32 iReason ) } else // item in cursor { - UINT16 ubSrcID, ubDestID; + SoldierID ubSrcID, ubDestID; BOOLEAN fOKToGo = FALSE; BOOLEAN fDeductPoints = FALSE; @@ -5277,7 +5277,7 @@ BOOLEAN InitializeTEAMPanel( ) { if ( gTeamPanel[ cnt ].ubID != NOBODY ) { - HandleMouseOverSoldierFaceForContMove( MercPtrs[ gTeamPanel[ cnt ].ubID ], TRUE ); + HandleMouseOverSoldierFaceForContMove( gTeamPanel[ cnt ].ubID, TRUE ); } } @@ -5352,7 +5352,7 @@ BOOLEAN ShutdownTEAMPanel( ) if ( gTeamPanel[ cnt ].ubID != NOBODY ) { - HandleMouseOverSoldierFaceForContMove( MercPtrs[ gTeamPanel[ cnt ].ubID ], FALSE ); + HandleMouseOverSoldierFaceForContMove( gTeamPanel[ cnt ].ubID, FALSE ); } } @@ -5416,7 +5416,7 @@ void RenderTEAMPanel( BOOLEAN fDirty ) } else { - pSoldier = MercPtrs[ gTeamPanel[ cnt ].ubID ]; + pSoldier = gTeamPanel[ cnt ].ubID; if ( pSoldier->flags.uiStatusFlags & ( SOLDIER_DRIVER ) ) { @@ -5520,7 +5520,7 @@ void RenderTEAMPanel( BOOLEAN fDirty ) // GET SOLDIER if ( gTeamPanel[ cnt ].fOccupied ) { - pSoldier = MercPtrs[ gTeamPanel[ cnt ].ubID ]; + pSoldier = gTeamPanel[ cnt ].ubID; // Update animations.... if ( pSoldier->flags.fClosePanel || pSoldier->flags.fClosePanelToDie ) @@ -6016,7 +6016,8 @@ void HandleMouseOverTeamFaceForContMove( BOOLEAN fOn ) void MercFacePanelMoveCallback( MOUSE_REGION * pRegion, INT32 iReason ) { - UINT16 ubID, ubSoldierID; + UINT16 ubID; + SoldierID ubSoldierID; SOLDIERTYPE *pSoldier; ubID = (UINT16) MSYS_GetRegionUserData( pRegion, 0 ); @@ -6040,7 +6041,7 @@ void MercFacePanelMoveCallback( MOUSE_REGION * pRegion, INT32 iReason ) return; } - pSoldier = MercPtrs[ ubSoldierID ]; + pSoldier = ubSoldierID; if ( !pSoldier->bActive ) { @@ -6062,7 +6063,8 @@ void MercFacePanelMoveCallback( MOUSE_REGION * pRegion, INT32 iReason ) void EnemyIndicatorClickCallback( MOUSE_REGION * pRegion, INT32 iReason ) { - UINT16 ubID, ubSoldierID; + UINT16 ubID; + SoldierID ubSoldierID; ubID = (UINT16) MSYS_GetRegionUserData( pRegion, 0 ); @@ -6085,7 +6087,7 @@ void EnemyIndicatorClickCallback( MOUSE_REGION * pRegion, INT32 iReason ) return; } - if ( !MercPtrs[ ubSoldierID ]->bActive ) + if ( !ubSoldierID->bActive ) { return; } @@ -6093,14 +6095,14 @@ void EnemyIndicatorClickCallback( MOUSE_REGION * pRegion, INT32 iReason ) if (iReason & MSYS_CALLBACK_REASON_LBUTTON_DWN) { - //if ( MercPtrs[ ubSoldierID ]->flags.uiStatusFlags & ( SOLDIER_DRIVER | SOLDIER_PASSENGER ) ) + //if ( ubSoldierID->flags.uiStatusFlags & ( SOLDIER_DRIVER | SOLDIER_PASSENGER ) ) //{ //} //else { SOLDIERTYPE *pSoldier; - pSoldier = MercPtrs[ ubSoldierID ]; + pSoldier = ubSoldierID; if ( pSoldier->aiData.bOppCnt > 0 ) { // Cycle.... @@ -6117,7 +6119,8 @@ void EnemyIndicatorClickCallback( MOUSE_REGION * pRegion, INT32 iReason ) void MercFacePanelCallback( MOUSE_REGION * pRegion, INT32 iReason ) { - UINT16 ubID, ubSoldierID; + UINT16 ubID; + SoldierID ubSoldierID; ubID = (UINT16) MSYS_GetRegionUserData( pRegion, 0 ); @@ -6155,12 +6158,12 @@ void MercFacePanelCallback( MOUSE_REGION * pRegion, INT32 iReason ) return; } - if ( !MercPtrs[ ubSoldierID ]->bActive ) + if ( !ubSoldierID->bActive ) { return; } - if (!OK_INTERRUPT_MERC(MercPtrs[ubSoldierID])) + if (!OK_INTERRUPT_MERC(ubSoldierID)) { return; } @@ -6169,10 +6172,10 @@ void MercFacePanelCallback( MOUSE_REGION * pRegion, INT32 iReason ) { if ( !gfInItemPickupMenu && gpItemPointer == NULL ) { - //if ( MercPtrs[ ubSoldierID ]->flags.uiStatusFlags & ( SOLDIER_DRIVER | SOLDIER_PASSENGER ) ) - //if ( MercPtrs[ ubSoldierID ]->flags.uiStatusFlags & ( SOLDIER_DRIVER ) ) + //if ( ubSoldierID->flags.uiStatusFlags & ( SOLDIER_DRIVER | SOLDIER_PASSENGER ) ) + //if ( ubSoldierID->flags.uiStatusFlags & ( SOLDIER_DRIVER ) ) //{ - // pVehicle = GetSoldierStructureForVehicle( MercPtrs[ ubSoldierID ]->iVehicleId ); + // pVehicle = GetSoldierStructureForVehicle( ubSoldierID->iVehicleId ); // HandleLocateSelectMerc( pVehicle->ubID, 0 ); //} @@ -6181,10 +6184,10 @@ void MercFacePanelCallback( MOUSE_REGION * pRegion, INT32 iReason ) if ( !InOverheadMap( ) ) { // If we can continue a move, do so! - if ( CheckForMercContMove( MercPtrs[ ubSoldierID ] ) ) + if ( CheckForMercContMove( ubSoldierID ) ) { // Continue - ContinueMercMovement( MercPtrs[ ubSoldierID ] ); + ContinueMercMovement( ubSoldierID ); ErasePath( TRUE ); } else @@ -6192,21 +6195,21 @@ void MercFacePanelCallback( MOUSE_REGION * pRegion, INT32 iReason ) // HEADROCK HAM 3.5: Shift-Click a merc's face will add him to the current selection. if (!(gTacticalStatus.uiFlags & INCOMBAT) && _KeyDown( SHIFT ) ) { - if ( ! (MercPtrs[ ubSoldierID ]->flags.uiStatusFlags & SOLDIER_MULTI_SELECTED ) ) + if ( ! (ubSoldierID->flags.uiStatusFlags & SOLDIER_MULTI_SELECTED ) ) { - if ( OK_CONTROLLABLE_MERC( MercPtrs[ ubSoldierID ] ) && !( MercPtrs[ ubSoldierID ]->flags.uiStatusFlags & ( SOLDIER_VEHICLE | SOLDIER_PASSENGER | SOLDIER_DRIVER ) ) ) + if ( OK_CONTROLLABLE_MERC( ubSoldierID ) && !( ubSoldierID->flags.uiStatusFlags & ( SOLDIER_VEHICLE | SOLDIER_PASSENGER | SOLDIER_DRIVER ) ) ) { - //ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s added", MercPtrs[ ubSoldierID ]->name ); + //ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s added", ubSoldierID->name ); gusSelectedSoldier->flags.uiStatusFlags |= SOLDIER_MULTI_SELECTED; - MercPtrs[ ubSoldierID ]->flags.uiStatusFlags |= SOLDIER_MULTI_SELECTED; + ubSoldierID->flags.uiStatusFlags |= SOLDIER_MULTI_SELECTED; EndMultiSoldierSelection( TRUE ); } } // A shift-click on a selected character will remove that character from the current selection. else { - //ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s removed", MercPtrs[ ubSoldierID ]->name ); - MercPtrs[ ubSoldierID ]->flags.uiStatusFlags &= (~SOLDIER_MULTI_SELECTED ); + //ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s removed", ubSoldierID->name ); + ubSoldierID->flags.uiStatusFlags &= (~SOLDIER_MULTI_SELECTED ); if (ubSoldierID != gusSelectedSoldier) { gusSelectedSoldier->flags.uiStatusFlags |= SOLDIER_MULTI_SELECTED; @@ -6216,7 +6219,7 @@ void MercFacePanelCallback( MOUSE_REGION * pRegion, INT32 iReason ) } else { - //ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s selected", MercPtrs[ ubSoldierID ]->name ); + //ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s selected", ubSoldierID->name ); HandleLocateSelectMerc( ubSoldierID, 0 ); } } @@ -6233,8 +6236,8 @@ void MercFacePanelCallback( MOUSE_REGION * pRegion, INT32 iReason ) if ( !InOverheadMap( ) ) { // Only if guy is not dead! - //if ( !( MercPtrs[ ubSoldierID ]->flags.uiStatusFlags & SOLDIER_DEAD ) && !AM_AN_EPC( MercPtrs[ ubSoldierID ] ) && !( MercPtrs[ ubSoldierID ]->flags.uiStatusFlags & ( SOLDIER_DRIVER | SOLDIER_PASSENGER ) ) ) - if ( !( MercPtrs[ ubSoldierID ]->flags.uiStatusFlags & SOLDIER_DEAD ) && !AM_AN_EPC( MercPtrs[ ubSoldierID ] ) ) + //if ( !( ubSoldierID->flags.uiStatusFlags & SOLDIER_DEAD ) && !AM_AN_EPC( ubSoldierID ) && !( ubSoldierID->flags.uiStatusFlags & ( SOLDIER_DRIVER | SOLDIER_PASSENGER ) ) ) + if ( !( ubSoldierID->flags.uiStatusFlags & SOLDIER_DEAD ) && !AM_AN_EPC( ubSoldierID ) ) { gfSwitchPanel = TRUE; gbNewPanel = SM_PANEL; @@ -6671,7 +6674,8 @@ void RenderSoldierTeamInv( SOLDIERTYPE *pSoldier, INT16 sX, INT16 sY, UINT8 ubPa void TMFirstHandInvCallback( MOUSE_REGION * pRegion, INT32 iReason ) { - UINT16 ubID, ubSoldierID; + UINT16 ubID; + SoldierID ubSoldierID; ubID = (UINT16) MSYS_GetRegionUserData( pRegion, 0 ); @@ -6694,7 +6698,7 @@ void TMFirstHandInvCallback( MOUSE_REGION * pRegion, INT32 iReason ) ubSoldierID = gTeamPanel[ ubID ].ubID; - if ( !MercPtrs[ ubSoldierID ]->bActive ) + if ( !ubSoldierID->bActive ) { return; } @@ -6721,7 +6725,8 @@ void TMFirstHandInvCallback( MOUSE_REGION * pRegion, INT32 iReason ) void TMClickFirstHandInvCallback( MOUSE_REGION * pRegion, INT32 iReason ) { - UINT16 ubID, ubSoldierID; + UINT16 ubID; + SoldierID ubSoldierID; UINT16 usOldHandItem; ubID = (UINT16) MSYS_GetRegionUserData( pRegion, 0 ); @@ -6739,9 +6744,9 @@ void TMClickFirstHandInvCallback( MOUSE_REGION * pRegion, INT32 iReason ) if (iReason == MSYS_CALLBACK_REASON_LBUTTON_UP ) { // anv: select vehicle by clicking on the steering wheel - //if ( MercPtrs[ ubSoldierID ]->flags.uiStatusFlags & SOLDIER_DRIVER ) + //if ( ubSoldierID->flags.uiStatusFlags & SOLDIER_DRIVER ) //{ - // SOLDIERTYPE *pVehicle = GetSoldierStructureForVehicle( MercPtrs[ ubSoldierID ]->iVehicleId ); + // SOLDIERTYPE *pVehicle = GetSoldierStructureForVehicle( ubSoldierID->iVehicleId ); // HandleLocateSelectMerc( pVehicle->ubID, 0 ); //} //else @@ -6753,12 +6758,12 @@ void TMClickFirstHandInvCallback( MOUSE_REGION * pRegion, INT32 iReason ) if (iReason == MSYS_CALLBACK_REASON_RBUTTON_UP ) { - if ( !AM_A_ROBOT( MercPtrs[ ubSoldierID ] ) ) + if ( !AM_A_ROBOT( ubSoldierID ) ) { - usOldHandItem = MercPtrs[ ubSoldierID ]->inv[HANDPOS].usItem; - //SwapOutHandItem( MercPtrs[ ubSoldierID ] ); - SwapHandItems( MercPtrs[ ubSoldierID ] ); - MercPtrs[ ubSoldierID ]->ReLoadSoldierAnimationDueToHandItemChange( usOldHandItem, MercPtrs[ ubSoldierID ]->inv[HANDPOS].usItem ); + usOldHandItem = ubSoldierID->inv[HANDPOS].usItem; + //SwapOutHandItem( ubSoldierID ); + SwapHandItems( ubSoldierID ); + ubSoldierID->ReLoadSoldierAnimationDueToHandItemChange( usOldHandItem, ubSoldierID->inv[HANDPOS].usItem ); fInterfacePanelDirty = DIRTYLEVEL2; } } @@ -6767,7 +6772,8 @@ void TMClickFirstHandInvCallback( MOUSE_REGION * pRegion, INT32 iReason ) void TMClickSecondHandInvCallback( MOUSE_REGION * pRegion, INT32 iReason ) { - UINT16 ubID, ubSoldierID; + UINT16 ubID; + SoldierID ubSoldierID; UINT16 usOldHandItem; ubID = (UINT16) MSYS_GetRegionUserData( pRegion, 0 ); @@ -6783,28 +6789,28 @@ void TMClickSecondHandInvCallback( MOUSE_REGION * pRegion, INT32 iReason ) if (iReason == MSYS_CALLBACK_REASON_LBUTTON_UP ) { - if ( MercPtrs[ ubSoldierID ]->flags.uiStatusFlags & ( SOLDIER_PASSENGER | SOLDIER_DRIVER ) ) + if ( ubSoldierID->flags.uiStatusFlags & ( SOLDIER_PASSENGER | SOLDIER_DRIVER ) ) { - ExitVehicle( MercPtrs[ ubSoldierID ] ); + ExitVehicle( ubSoldierID ); } - else if (UsingNewInventorySystem() && !AM_A_ROBOT(MercPtrs[ubSoldierID])) + else if (UsingNewInventorySystem() && !AM_A_ROBOT(ubSoldierID)) { - MercPtrs[ubSoldierID]->SwitchWeapons(); + ubSoldierID->SwitchWeapons(); } } if (iReason == MSYS_CALLBACK_REASON_RBUTTON_UP ) { - if ( MercPtrs[ ubSoldierID ]->flags.uiStatusFlags & ( SOLDIER_PASSENGER | SOLDIER_DRIVER ) ) + if ( ubSoldierID->flags.uiStatusFlags & ( SOLDIER_PASSENGER | SOLDIER_DRIVER ) ) { } else { - if ( !AM_A_ROBOT( MercPtrs[ ubSoldierID ] ) ) + if ( !AM_A_ROBOT( ubSoldierID ) ) { - usOldHandItem = MercPtrs[ ubSoldierID ]->inv[HANDPOS].usItem; - SwapHandItems( MercPtrs[ ubSoldierID ] ); - MercPtrs[ ubSoldierID ]->ReLoadSoldierAnimationDueToHandItemChange( usOldHandItem, MercPtrs[ ubSoldierID ]->inv[HANDPOS].usItem ); + usOldHandItem = ubSoldierID->inv[HANDPOS].usItem; + SwapHandItems( ubSoldierID ); + ubSoldierID->ReLoadSoldierAnimationDueToHandItemChange( usOldHandItem, ubSoldierID->inv[HANDPOS].usItem ); fInterfacePanelDirty = DIRTYLEVEL2; } } @@ -6831,7 +6837,7 @@ BOOLEAN PlayerExistsInSlot( SoldierID ubID ) } -INT8 GetTeamSlotFromPlayerID( UINT16 ubID ) +INT8 GetTeamSlotFromPlayerID( SoldierID ubID ) { INT8 cnt; @@ -6850,7 +6856,7 @@ INT8 GetTeamSlotFromPlayerID( UINT16 ubID ) } -BOOLEAN RemovePlayerFromTeamSlotGivenMercID( UINT16 ubMercID ) +BOOLEAN RemovePlayerFromTeamSlotGivenMercID( SoldierID ubMercID ) { INT32 cnt; @@ -6954,7 +6960,7 @@ BOOLEAN InitTEAMSlots( ) } -BOOLEAN GetPlayerIDFromInterfaceTeamSlot( UINT8 ubPanelSlot, UINT16 * pubID ) +BOOLEAN GetPlayerIDFromInterfaceTeamSlot( UINT8 ubPanelSlot, SoldierID * pubID ) { if ( ubPanelSlot >= gGameOptions.ubSquadSize ) { @@ -6992,14 +6998,14 @@ BOOLEAN RemovePlayerFromInterfaceTeamSlot( UINT8 ubPanelSlot ) if ( gTeamPanel[ ubPanelSlot ].fOccupied ) { - if ( !( MercPtrs[ gTeamPanel[ ubPanelSlot ].ubID ]->flags.uiStatusFlags & SOLDIER_DEAD ) ) + if ( !( gTeamPanel[ ubPanelSlot ].ubID->flags.uiStatusFlags & SOLDIER_DEAD ) ) { // Set Id to close - MercPtrs[ gTeamPanel[ ubPanelSlot ].ubID ]->flags.fUICloseMerc = TRUE; + gTeamPanel[ ubPanelSlot ].ubID->flags.fUICloseMerc = TRUE; } // Set face to inactive... - SetAutoFaceInActive( MercPtrs[ gTeamPanel[ ubPanelSlot ].ubID ]->iFaceIndex ); + SetAutoFaceInActive( gTeamPanel[ ubPanelSlot ].ubID->iFaceIndex ); gTeamPanel[ ubPanelSlot ].fOccupied = FALSE; @@ -7132,7 +7138,7 @@ void CleanUpStack( OBJECTTYPE * pObj, OBJECTTYPE * pCursorObj ) } } -UINT16 FindNextMercInTeamPanel( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLife, BOOLEAN fOnlyRegularMercs ) +SoldierID FindNextMercInTeamPanel( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLife, BOOLEAN fOnlyRegularMercs ) { INT32 cnt; INT32 bFirstID; @@ -7151,7 +7157,7 @@ UINT16 FindNextMercInTeamPanel( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLif if ( gTeamPanel[ cnt ].fOccupied ) { // Set Id to close - pTeamSoldier = MercPtrs[ gTeamPanel[ cnt ].ubID ]; + pTeamSoldier = gTeamPanel[ cnt ].ubID; if ( fOnlyRegularMercs ) { @@ -7211,7 +7217,7 @@ UINT16 FindNextMercInTeamPanel( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLif { if ( gTeamPanel[ cnt ].fOccupied ) { - pTeamSoldier = MercPtrs[ gTeamPanel[ cnt ].ubID ]; + pTeamSoldier = gTeamPanel[ cnt ].ubID; if ( fOnlyRegularMercs ) { diff --git a/Tactical/Interface Panels.h b/Tactical/Interface Panels.h index 8908aa30..78fe0367 100644 --- a/Tactical/Interface Panels.h +++ b/Tactical/Interface Panels.h @@ -85,10 +85,10 @@ void UpdateSMPanel( ); BOOLEAN InitTEAMSlots( ); void AddPlayerToInterfaceTeamSlot( SoldierID ubID ); BOOLEAN RemovePlayerFromInterfaceTeamSlot( UINT8 ubID ); -BOOLEAN GetPlayerIDFromInterfaceTeamSlot( UINT8 ubPanelSlot, UINT16 * pubID ); +BOOLEAN GetPlayerIDFromInterfaceTeamSlot( UINT8 ubPanelSlot, SoldierID * pubID ); void RemoveAllPlayersFromSlot( ); BOOLEAN PlayerExistsInSlot( SoldierID ubID ); -BOOLEAN RemovePlayerFromTeamSlotGivenMercID( UINT16 ubMercID ); +BOOLEAN RemovePlayerFromTeamSlotGivenMercID( SoldierID ubMercID ); void CheckForAndAddMercToTeamPanel( SOLDIERTYPE *pSoldier ); void CleanUpStack( OBJECTTYPE * pObj, OBJECTTYPE * pCursorObj ); @@ -149,7 +149,7 @@ void GoToMapScreenFromTactical( void ); void FinishAnySkullPanelAnimations( ); -UINT16 FindNextMercInTeamPanel( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLife, BOOLEAN fOnlyRegularMercs ); +SoldierID FindNextMercInTeamPanel( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLife, BOOLEAN fOnlyRegularMercs ); // CHRISL: New callback functions for backpack buttons BOOLEAN ChangeDropPackStatus(SOLDIERTYPE *pSoldier, BOOLEAN newStatus); diff --git a/Tactical/Item Types.cpp b/Tactical/Item Types.cpp index 7409cc2f..85e2af84 100644 --- a/Tactical/Item Types.cpp +++ b/Tactical/Item Types.cpp @@ -125,7 +125,7 @@ bool IsSlotASmallPocket(int slot) return false; } -void CreateLBE (OBJECTTYPE* pObj, UINT16 ubID, int numSubPockets) +void CreateLBE (OBJECTTYPE* pObj, SoldierID ubID, int numSubPockets) { int uniqueID; LBENODE* pLBE = NULL; diff --git a/Tactical/Item Types.h b/Tactical/Item Types.h index db414597..67600237 100644 --- a/Tactical/Item Types.h +++ b/Tactical/Item Types.h @@ -247,7 +247,7 @@ public: UINT32 lbeClass; UINT16 lbeIndex; - UINT16 ubID; + SoldierID ubID; BOOLEAN ZipperFlag; int uniqueID; UINT32 uiNodeChecksum; @@ -259,7 +259,7 @@ public: #define SIZEOF_LBENODE_POD (offsetof(LBENODE, endOfPOD)) bool checkLBEArrayIntegrity(bool verbose=false); // BOB: checks all worldItems for missing LBE info -void CreateLBE(OBJECTTYPE* pObj, UINT16 ubID, int numSubPockets); +void CreateLBE(OBJECTTYPE* pObj, SoldierID ubID, int numSubPockets); bool DestroyLBEIfEmpty(OBJECTTYPE* pObj, int stackIndex = 0); void DestroyLBE(OBJECTTYPE* pObj, int stackIndex = 0); void GetLBESlots(UINT32 LBEType, std::vector& LBESlots); diff --git a/Tactical/Turn Based Input.cpp b/Tactical/Turn Based Input.cpp index 9fb928c1..ff479b90 100644 --- a/Tactical/Turn Based Input.cpp +++ b/Tactical/Turn Based Input.cpp @@ -284,7 +284,7 @@ void ItemCreationCallBack( UINT8 ubResult ); void CheatCreateItem(); // silversurfer: added for merc portrait swapping in tactical void SwapMercPortraits ( SOLDIERTYPE *pSoldier, INT8 bDirection ); -extern INT8 GetTeamSlotFromPlayerID( UINT16 ubID ); +extern INT8 GetTeamSlotFromPlayerID( SoldierID ubID ); extern FACETYPE *gpCurrentTalkingFace; // Flugente: toggle display of enemy role indicators @@ -6257,7 +6257,7 @@ void ChangeCurrentSquad( INT32 iSquad ) void HandleSelectMercSlot( UINT8 ubPanelSlot, INT8 bCode ) { - UINT16 ubID; + SoldierID ubID; if ( GetPlayerIDFromInterfaceTeamSlot( ubPanelSlot, &ubID ) ) { diff --git a/Tactical/UI Cursors.cpp b/Tactical/UI Cursors.cpp index bfbc2e96..b4e81763 100644 --- a/Tactical/UI Cursors.cpp +++ b/Tactical/UI Cursors.cpp @@ -1420,7 +1420,7 @@ UINT8 HandleNonActivatedTargetCursor( SOLDIERTYPE *pSoldier, INT32 usMapPos , BO } -void DetermineCursorBodyLocation( UINT16 ubSoldierID, BOOLEAN fDisplay, BOOLEAN fRecalc ) +void DetermineCursorBodyLocation( SoldierID ubSoldierID, BOOLEAN fDisplay, BOOLEAN fRecalc ) { INT32 usMapPos; SOLDIERTYPE *pTargetSoldier = NULL, *pSoldier; @@ -1429,7 +1429,7 @@ void DetermineCursorBodyLocation( UINT16 ubSoldierID, BOOLEAN fDisplay, BOOLEAN BOOLEAN fOnGuy = FALSE; LEVELNODE *pNode; - pSoldier = MercPtrs[ ubSoldierID ]; + pSoldier = ubSoldierID; if ( gTacticalStatus.ubAttackBusyCount > 0 ) { @@ -2263,10 +2263,10 @@ UINT8 HandleBloodbagCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, BOOLEAN fActiv if ( HasItemFlag( ( &( pSoldier->inv[HANDPOS] ) )->usItem, EMPTY_BLOOD_BAG ) ) { // is there a person here? - UINT16 usSoldierIndex = WhoIsThere2( sGridNo, pSoldier->pathing.bLevel ); + SoldierID usSoldierIndex = WhoIsThere2( sGridNo, pSoldier->pathing.bLevel ); if ( usSoldierIndex != NOBODY ) { - if ( usSoldierIndex != pSoldier->ubID && MercPtrs[usSoldierIndex]->IsValidBloodDonor() ) + if ( usSoldierIndex != pSoldier->ubID && usSoldierIndex->IsValidBloodDonor() ) return BLOODBAG_GREY_UICURSOR; } } @@ -2298,10 +2298,10 @@ UINT8 HandleSplintCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, BOOLEAN fActivat } // is there a person here? - UINT16 usSoldierIndex = WhoIsThere2( sGridNo, pSoldier->pathing.bLevel ); + SoldierID usSoldierIndex = WhoIsThere2( sGridNo, pSoldier->pathing.bLevel ); if ( usSoldierIndex != NOBODY ) { - if ( usSoldierIndex != pSoldier->ubID && MercPtrs[usSoldierIndex]->CanReceiveSplint() ) + if ( usSoldierIndex != pSoldier->ubID && usSoldierIndex->CanReceiveSplint() ) return SPLINT_GREY_UICURSOR; } } @@ -2384,8 +2384,8 @@ UINT8 HandleHandcuffCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT32 uiCurso if ( HasItemFlag( (&(pSoldier->inv[HANDPOS]))->usItem, HANDCUFFS ) ) { // is there a person here? - UINT16 usSoldierIndex = WhoIsThere2( sGridNo, pSoldier->pathing.bLevel ); - if (usSoldierIndex != NOBODY && MercPtrs[usSoldierIndex] && MercPtrs[usSoldierIndex]->bVisible >= 0 && MercPtrs[usSoldierIndex]->CanBeCaptured()) + SoldierID usSoldierIndex = WhoIsThere2( sGridNo, pSoldier->pathing.bLevel ); + if (usSoldierIndex != NOBODY && usSoldierIndex->bVisible >= 0 && usSoldierIndex->CanBeCaptured()) { return( HANDCUFF_GREY_UICURSOR ); } @@ -2406,8 +2406,8 @@ UINT8 HandleApplyItemCursor(SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT32 uiCurso if (ItemCanBeAppliedToOthers((&(pSoldier->inv[HANDPOS]))->usItem)) { // is there a person here? - UINT16 ubPerson = WhoIsThere2(sGridNo, pSoldier->pathing.bLevel); - if (ubPerson != NOBODY && MercPtrs[ubPerson] && MercPtrs[ubPerson]->bVisible >= 0) + SoldierID ubPerson = WhoIsThere2(sGridNo, pSoldier->pathing.bLevel); + if (ubPerson != NOBODY && ubPerson->bVisible >= 0) { return(APPLYITEM_GREY_UICURSOR); } @@ -3022,8 +3022,8 @@ UINT8 GetActionModeCursor( SOLDIERTYPE *pSoldier ) if ( GetMouseMapPos( &usMapPos ) ) { // is there a person here? - UINT16 ubPerson = WhoIsThere2(usMapPos, pSoldier->pathing.bLevel); - if (ubPerson != NOBODY && MercPtrs[ubPerson] && MercPtrs[ubPerson]->bVisible >= 0) + SoldierID ubPerson = WhoIsThere2(usMapPos, pSoldier->pathing.bLevel); + if (ubPerson != NOBODY && ubPerson->bVisible >= 0) { ubCursor = APPLYITEMCURS; } diff --git a/Tactical/UI Cursors.h b/Tactical/UI Cursors.h index 415246c4..6723dd46 100644 --- a/Tactical/UI Cursors.h +++ b/Tactical/UI Cursors.h @@ -10,7 +10,7 @@ UINT8 GetProperItemCursor( SoldierID ubSoldierID, UINT16 ubItemIndex, INT32 usMapPos, BOOLEAN fActivated ); -void DetermineCursorBodyLocation( UINT16 ubSoldierID, BOOLEAN fDisplay, BOOLEAN fRecalc ); +void DetermineCursorBodyLocation( SoldierID ubSoldierID, BOOLEAN fDisplay, BOOLEAN fRecalc ); void HandleLeftClickCursor( SOLDIERTYPE *pSoldier ); void HandleRightClickAdjustCursor( SOLDIERTYPE *pSoldier, INT32 usMapPos ); diff --git a/Tactical/World Items.cpp b/Tactical/World Items.cpp index adcb9671..39238f14 100644 --- a/Tactical/World Items.cpp +++ b/Tactical/World Items.cpp @@ -610,7 +610,7 @@ void ResizeWorldItems(void)//dnl ch75 271013 #endif } -INT32 AddItemToWorld( INT32 sGridNo, OBJECTTYPE *pObject, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT8 bVisible, INT16 soldierID ) +INT32 AddItemToWorld( INT32 sGridNo, OBJECTTYPE *pObject, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT8 bVisible, SoldierID soldierID ) { UINT32 iItemIndex; INT32 iReturn; @@ -658,12 +658,15 @@ INT32 AddItemToWorld( INT32 sGridNo, OBJECTTYPE *pObject, UINT8 ubLevel, UINT16 { SOLDIERTYPE* pSoldier = NULL; - if (soldierID == -1) + if (soldierID == NOBODY) { if (gWorldItems[ iItemIndex ].object[0]->data.misc.ubBombOwner > 1) { soldierID = gWorldItems[ iItemIndex ].object[0]->data.misc.ubBombOwner - 2; // undo the hack - pSoldier = MercPtrs[ soldierID ]; + if ( soldierID < NOBODY ) + { + pSoldier = soldierID; + } } } diff --git a/Tactical/World Items.h b/Tactical/World Items.h index cd3ae1ee..03ae16f9 100644 --- a/Tactical/World Items.h +++ b/Tactical/World Items.h @@ -122,7 +122,7 @@ public: extern std::vector gWorldItems;//dnl ch75 261013 extern UINT32 guiNumWorldItems; -INT32 AddItemToWorld( INT32 sGridNo, OBJECTTYPE *pObject, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT8 bVisible, INT16 soldierID ); +INT32 AddItemToWorld( INT32 sGridNo, OBJECTTYPE *pObject, UINT8 ubLevel, UINT16 usFlags, INT8 bRenderZHeightAboveLevel, INT8 bVisible, SoldierID soldierID ); void RemoveItemFromWorld( INT32 iItemIndex ); INT32 FindWorldItem( UINT16 usItem ); diff --git a/TileEngine/renderworld.cpp b/TileEngine/renderworld.cpp index 52a575d8..755f4738 100644 --- a/TileEngine/renderworld.cpp +++ b/TileEngine/renderworld.cpp @@ -1106,7 +1106,7 @@ inline UINT16 * GetShadeTable(LEVELNODE * pNode, SOLDIERTYPE * pSoldier, SOLDIER } // Set shade // If a bad guy is highlighted - if (gfUIHandleSelectionAboveGuy == TRUE && MercPtrs[gsSelectedGuy]->bSide != gbPlayerNum) + if (gfUIHandleSelectionAboveGuy == TRUE && gsSelectedGuy->bSide != gbPlayerNum) { if (gsSelectedGuy == pSoldier->ubID) { From fa56a7ad6d408a0861e2bfbc95e76f718bc0f16e Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 18 Nov 2024 17:34:41 +0200 Subject: [PATCH 093/192] Update Scheduling.cpp --- Strategic/Scheduling.cpp | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/Strategic/Scheduling.cpp b/Strategic/Scheduling.cpp index 517ef586..ce263774 100644 --- a/Strategic/Scheduling.cpp +++ b/Strategic/Scheduling.cpp @@ -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 ); @@ -653,11 +653,11 @@ BOOLEAN SortSchedule( SCHEDULENODE *pSchedule ) BOOLEAN BumpAnyExistingMerc( INT32 sGridNo ) { - UINT16 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; + SoldierID 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++ ) + for ( uiLoop = pSoldier->ubID + 1; uiLoop <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ++uiLoop ) { - pSoldier2 = MercPtrs[ uiLoop ]; + pSoldier2 = uiLoop; if ( pSoldier2->bActive && pSoldier2->bInSector && pSoldier2->ubScheduleID != 0 ) { pSchedule = GetSchedule( pSoldier2->ubScheduleID ); From 66bd1e41c2894127afe8baef55b53d405e309e0e Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 18 Nov 2024 18:27:14 +0200 Subject: [PATCH 094/192] Correct loops --- Strategic/Scheduling.cpp | 6 +++--- TacticalAI/AIMain.cpp | 18 ++++++++++-------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/Strategic/Scheduling.cpp b/Strategic/Scheduling.cpp index ce263774..f9dad5da 100644 --- a/Strategic/Scheduling.cpp +++ b/Strategic/Scheduling.cpp @@ -1383,14 +1383,14 @@ void SecureSleepSpot( SOLDIERTYPE * pSoldier, UINT32 usSleepSpot ) { SOLDIERTYPE *pSoldier2; UINT32 usSleepSpot2; - SoldierID uiLoop; + 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 ) + for ( uiLoop = pSoldier->ubID + 1; uiLoop <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; uiLoop++ ) { - pSoldier2 = uiLoop; + pSoldier2 = MercPtrs[uiLoop]; if ( pSoldier2->bActive && pSoldier2->bInSector && pSoldier2->ubScheduleID != 0 ) { pSchedule = GetSchedule( pSoldier2->ubScheduleID ); diff --git a/TacticalAI/AIMain.cpp b/TacticalAI/AIMain.cpp index f6d32bea..90e7024b 100644 --- a/TacticalAI/AIMain.cpp +++ b/TacticalAI/AIMain.cpp @@ -874,7 +874,7 @@ void HandleSoldierAI( SOLDIERTYPE *pSoldier ) // FIXME - this function is named void EndAIGuysTurn( SOLDIERTYPE *pSoldier ) { - SoldierID ubID; + UINT16 ubID; if (gfTurnBasedAI) { @@ -887,17 +887,19 @@ void EndAIGuysTurn( SOLDIERTYPE *pSoldier ) // search for any player merc to say close call quote for ( ubID = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; ubID <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++ubID ) { - if ( OK_INSECTOR_MERC( ubID ) ) + SOLDIERTYPE *pMerc = MercPtrs[ubID]; + + if ( OK_INSECTOR_MERC( pMerc ) ) { - if ( ubID->flags.fCloseCall ) + if ( pMerc->flags.fCloseCall ) { - if ( !gTacticalStatus.fSomeoneHit && ubID->bNumHitsThisTurn == 0 && !(ubID->usQuoteSaidExtFlags & SOLDIER_QUOTE_SAID_EXT_CLOSE_CALL) && Random( 3 ) == 0 ) + if ( !gTacticalStatus.fSomeoneHit && pMerc->bNumHitsThisTurn == 0 && !(pMerc->usQuoteSaidExtFlags & SOLDIER_QUOTE_SAID_EXT_CLOSE_CALL) && Random( 3 ) == 0 ) { // say close call quote! - TacticalCharacterDialogue( ubID, QUOTE_CLOSE_CALL ); - ubID->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_EXT_CLOSE_CALL; + TacticalCharacterDialogue( pMerc, QUOTE_CLOSE_CALL ); + pMerc->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_EXT_CLOSE_CALL; } - ubID->flags.fCloseCall = FALSE; + pMerc->flags.fCloseCall = FALSE; } } } @@ -942,7 +944,7 @@ void EndAIGuysTurn( SOLDIERTYPE *pSoldier ) ubID = RemoveFirstAIListEntry(); if (ubID != NOBODY) { - StartNPCAI( ubID ); + StartNPCAI( MercPtrs[ ubID ] ); return; } From c75f57785e586a2cbf2bc69553d9873e65d18d15 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 18 Nov 2024 18:49:38 +0200 Subject: [PATCH 095/192] Guard against out of bounds access Can't trust a simple != check --- Tactical/Handle Items.cpp | 8 ++++---- Tactical/Interface Items.cpp | 3 +-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/Tactical/Handle Items.cpp b/Tactical/Handle Items.cpp index d95b6157..55679a76 100644 --- a/Tactical/Handle Items.cpp +++ b/Tactical/Handle Items.cpp @@ -4292,7 +4292,7 @@ BOOLEAN DrawItemPoolList( ITEM_POOL *pItemPool, INT32 sGridNo, UINT8 bCommand, I if (gGameExternalOptions.gfShowBackpackOwner && Item[gWorldItems[pItemPool->iItemIndex].object.usItem].usItemClass == IC_LBEGEAR && LoadBearingEquipment[Item[gWorldItems[pItemPool->iItemIndex].object.usItem].ubClassIndex].lbeClass == BACKPACK && - gWorldItems[pItemPool->iItemIndex].soldierID != NOBODY) + gWorldItems[pItemPool->iItemIndex].soldierID < NOBODY) swprintf(pStr, L"%s (%d) (%s)", ShortItemNames[gWorldItems[pTempItemPool->iItemIndex].object.usItem], gWorldItems[pTempItemPool->iItemIndex].object.ubNumberOfObjects, gWorldItems[pItemPool->iItemIndex].soldierID->GetName()); else swprintf( pStr, L"%s (%d)", ShortItemNames[ gWorldItems[ pTempItemPool->iItemIndex ].object.usItem ], gWorldItems[ pTempItemPool->iItemIndex ].object.ubNumberOfObjects ); @@ -4302,7 +4302,7 @@ BOOLEAN DrawItemPoolList( ITEM_POOL *pItemPool, INT32 sGridNo, UINT8 bCommand, I if (gGameExternalOptions.gfShowBackpackOwner && Item[gWorldItems[pItemPool->iItemIndex].object.usItem].usItemClass == IC_LBEGEAR && LoadBearingEquipment[Item[gWorldItems[pItemPool->iItemIndex].object.usItem].ubClassIndex].lbeClass == BACKPACK && - gWorldItems[pItemPool->iItemIndex].soldierID != NOBODY) + gWorldItems[pItemPool->iItemIndex].soldierID < NOBODY) swprintf(pStr, L"%s (%s)", ShortItemNames[gWorldItems[pTempItemPool->iItemIndex].object.usItem], gWorldItems[pItemPool->iItemIndex].soldierID->GetName()); else swprintf( pStr, L"%s", ShortItemNames[ gWorldItems[ pTempItemPool->iItemIndex ].object.usItem ] ); @@ -4411,7 +4411,7 @@ BOOLEAN DrawItemPoolList( ITEM_POOL *pItemPool, INT32 sGridNo, UINT8 bCommand, I if (gGameExternalOptions.gfShowBackpackOwner && Item[gWorldItems[pItemPool->iItemIndex].object.usItem].usItemClass == IC_LBEGEAR && LoadBearingEquipment[Item[gWorldItems[pItemPool->iItemIndex].object.usItem].ubClassIndex].lbeClass == BACKPACK && - gWorldItems[pItemPool->iItemIndex].soldierID != NOBODY) + gWorldItems[pItemPool->iItemIndex].soldierID < NOBODY) swprintf(pStr, L"%s (%d) (%s)", ShortItemNames[gWorldItems[pItemPool->iItemIndex].object.usItem], gWorldItems[pItemPool->iItemIndex].object.ubNumberOfObjects, gWorldItems[pItemPool->iItemIndex].soldierID->GetName()); else swprintf( pStr, L"%s (%d)", ShortItemNames[ gWorldItems[ pItemPool->iItemIndex ].object.usItem ], gWorldItems[ pItemPool->iItemIndex ].object.ubNumberOfObjects ); @@ -4421,7 +4421,7 @@ BOOLEAN DrawItemPoolList( ITEM_POOL *pItemPool, INT32 sGridNo, UINT8 bCommand, I if (gGameExternalOptions.gfShowBackpackOwner && Item[gWorldItems[pItemPool->iItemIndex].object.usItem].usItemClass == IC_LBEGEAR && LoadBearingEquipment[Item[gWorldItems[pItemPool->iItemIndex].object.usItem].ubClassIndex].lbeClass == BACKPACK && - gWorldItems[pItemPool->iItemIndex].soldierID != NOBODY) + gWorldItems[pItemPool->iItemIndex].soldierID < NOBODY) swprintf(pStr, L"%s (%s)", ShortItemNames[gWorldItems[pItemPool->iItemIndex].object.usItem], gWorldItems[pItemPool->iItemIndex].soldierID->GetName()); else swprintf( pStr, L"%s", ShortItemNames[ gWorldItems[ pItemPool->iItemIndex ].object.usItem ] ); diff --git a/Tactical/Interface Items.cpp b/Tactical/Interface Items.cpp index b3f56f6a..bbecd3c6 100644 --- a/Tactical/Interface Items.cpp +++ b/Tactical/Interface Items.cpp @@ -11482,8 +11482,7 @@ void RenderItemPickupMenu( ) !gfStealing && Item[gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].object.usItem].usItemClass == IC_LBEGEAR && LoadBearingEquipment[Item[gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].object.usItem].ubClassIndex].lbeClass == BACKPACK && - gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].soldierID != NOBODY && - gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].soldierID) + gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].soldierID < NOBODY) //swprintf(pStr, L"%s (%s)", ShortItemNames[pObject->usItem], MercPtrs[gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].soldierID]->GetName()); swprintf(pStr, L"(%s)", gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].soldierID->GetName()); else From e62684f0e1e681e16a3c5e34b230b5a786232d61 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 18 Nov 2024 18:50:20 +0200 Subject: [PATCH 096/192] Convert GetSoldierIDFromMercID() to SoldierID --- Tactical/Soldier Add.cpp | 4 ++-- Tactical/Soldier Add.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Tactical/Soldier Add.cpp b/Tactical/Soldier Add.cpp index ef769a86..a10c6cc2 100644 --- a/Tactical/Soldier Add.cpp +++ b/Tactical/Soldier Add.cpp @@ -1788,7 +1788,7 @@ BOOLEAN IsMercOnTeam(UINT8 ubMercID, BOOLEAN aAlreadyInCountry, BOOLEAN aAlive) // GetSoldierIDFromMercID() Gets the Soldier ID from the Merc Profile ID, else returns -1 -INT16 GetSoldierIDFromMercID(UINT8 ubMercID) +SoldierID GetSoldierIDFromMercID(UINT8 ubMercID) { SOLDIERTYPE *pTeamSoldier = NULL; @@ -1804,7 +1804,7 @@ INT16 GetSoldierIDFromMercID(UINT8 ubMercID) } } - return -1 ; + return NOBODY; } diff --git a/Tactical/Soldier Add.h b/Tactical/Soldier Add.h index 32aa90dd..3f67759a 100644 --- a/Tactical/Soldier Add.h +++ b/Tactical/Soldier Add.h @@ -41,8 +41,8 @@ BOOLEAN IsMercOnTeam( UINT8 ubMercID, BOOLEAN aAlreadyInCountry, BOOLEAN aAlive -// GetSoldierIDFromMercID() Gets the Soldier ID from the Merc Profile ID, else returns -1 -INT16 GetSoldierIDFromMercID(UINT8 ubMercID); +// GetSoldierIDFromMercID() Gets the Soldier ID from the Merc Profile ID, else returns NOBODY +SoldierID GetSoldierIDFromMercID(UINT8 ubMercID); INT32 FindGridNoFromSweetSpotWithStructData( SOLDIERTYPE *pSoldier, UINT16 usAnimState, INT32 sSweetGridNo, INT8 ubRadius, UINT8 *pubDirection, BOOLEAN fClosestToMerc ); From 07420ce2453c72043de7ece6c45adff98ab9ed7d Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 18 Nov 2024 21:42:13 +0200 Subject: [PATCH 097/192] Revert "Guard against out of bounds access" This reverts commit c75f57785e586a2cbf2bc69553d9873e65d18d15. --- Tactical/Handle Items.cpp | 8 ++++---- Tactical/Interface Items.cpp | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Tactical/Handle Items.cpp b/Tactical/Handle Items.cpp index 55679a76..d95b6157 100644 --- a/Tactical/Handle Items.cpp +++ b/Tactical/Handle Items.cpp @@ -4292,7 +4292,7 @@ BOOLEAN DrawItemPoolList( ITEM_POOL *pItemPool, INT32 sGridNo, UINT8 bCommand, I if (gGameExternalOptions.gfShowBackpackOwner && Item[gWorldItems[pItemPool->iItemIndex].object.usItem].usItemClass == IC_LBEGEAR && LoadBearingEquipment[Item[gWorldItems[pItemPool->iItemIndex].object.usItem].ubClassIndex].lbeClass == BACKPACK && - gWorldItems[pItemPool->iItemIndex].soldierID < NOBODY) + gWorldItems[pItemPool->iItemIndex].soldierID != NOBODY) swprintf(pStr, L"%s (%d) (%s)", ShortItemNames[gWorldItems[pTempItemPool->iItemIndex].object.usItem], gWorldItems[pTempItemPool->iItemIndex].object.ubNumberOfObjects, gWorldItems[pItemPool->iItemIndex].soldierID->GetName()); else swprintf( pStr, L"%s (%d)", ShortItemNames[ gWorldItems[ pTempItemPool->iItemIndex ].object.usItem ], gWorldItems[ pTempItemPool->iItemIndex ].object.ubNumberOfObjects ); @@ -4302,7 +4302,7 @@ BOOLEAN DrawItemPoolList( ITEM_POOL *pItemPool, INT32 sGridNo, UINT8 bCommand, I if (gGameExternalOptions.gfShowBackpackOwner && Item[gWorldItems[pItemPool->iItemIndex].object.usItem].usItemClass == IC_LBEGEAR && LoadBearingEquipment[Item[gWorldItems[pItemPool->iItemIndex].object.usItem].ubClassIndex].lbeClass == BACKPACK && - gWorldItems[pItemPool->iItemIndex].soldierID < NOBODY) + gWorldItems[pItemPool->iItemIndex].soldierID != NOBODY) swprintf(pStr, L"%s (%s)", ShortItemNames[gWorldItems[pTempItemPool->iItemIndex].object.usItem], gWorldItems[pItemPool->iItemIndex].soldierID->GetName()); else swprintf( pStr, L"%s", ShortItemNames[ gWorldItems[ pTempItemPool->iItemIndex ].object.usItem ] ); @@ -4411,7 +4411,7 @@ BOOLEAN DrawItemPoolList( ITEM_POOL *pItemPool, INT32 sGridNo, UINT8 bCommand, I if (gGameExternalOptions.gfShowBackpackOwner && Item[gWorldItems[pItemPool->iItemIndex].object.usItem].usItemClass == IC_LBEGEAR && LoadBearingEquipment[Item[gWorldItems[pItemPool->iItemIndex].object.usItem].ubClassIndex].lbeClass == BACKPACK && - gWorldItems[pItemPool->iItemIndex].soldierID < NOBODY) + gWorldItems[pItemPool->iItemIndex].soldierID != NOBODY) swprintf(pStr, L"%s (%d) (%s)", ShortItemNames[gWorldItems[pItemPool->iItemIndex].object.usItem], gWorldItems[pItemPool->iItemIndex].object.ubNumberOfObjects, gWorldItems[pItemPool->iItemIndex].soldierID->GetName()); else swprintf( pStr, L"%s (%d)", ShortItemNames[ gWorldItems[ pItemPool->iItemIndex ].object.usItem ], gWorldItems[ pItemPool->iItemIndex ].object.ubNumberOfObjects ); @@ -4421,7 +4421,7 @@ BOOLEAN DrawItemPoolList( ITEM_POOL *pItemPool, INT32 sGridNo, UINT8 bCommand, I if (gGameExternalOptions.gfShowBackpackOwner && Item[gWorldItems[pItemPool->iItemIndex].object.usItem].usItemClass == IC_LBEGEAR && LoadBearingEquipment[Item[gWorldItems[pItemPool->iItemIndex].object.usItem].ubClassIndex].lbeClass == BACKPACK && - gWorldItems[pItemPool->iItemIndex].soldierID < NOBODY) + gWorldItems[pItemPool->iItemIndex].soldierID != NOBODY) swprintf(pStr, L"%s (%s)", ShortItemNames[gWorldItems[pItemPool->iItemIndex].object.usItem], gWorldItems[pItemPool->iItemIndex].soldierID->GetName()); else swprintf( pStr, L"%s", ShortItemNames[ gWorldItems[ pItemPool->iItemIndex ].object.usItem ] ); diff --git a/Tactical/Interface Items.cpp b/Tactical/Interface Items.cpp index bbecd3c6..b3f56f6a 100644 --- a/Tactical/Interface Items.cpp +++ b/Tactical/Interface Items.cpp @@ -11482,7 +11482,8 @@ void RenderItemPickupMenu( ) !gfStealing && Item[gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].object.usItem].usItemClass == IC_LBEGEAR && LoadBearingEquipment[Item[gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].object.usItem].ubClassIndex].lbeClass == BACKPACK && - gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].soldierID < NOBODY) + gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].soldierID != NOBODY && + gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].soldierID) //swprintf(pStr, L"%s (%s)", ShortItemNames[pObject->usItem], MercPtrs[gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].soldierID]->GetName()); swprintf(pStr, L"(%s)", gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].soldierID->GetName()); else From d2388c76b87b69f5d1e62ad0a1c5605712950d31 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 18 Nov 2024 21:43:30 +0200 Subject: [PATCH 098/192] Modify SoldierID constructor to prevent invalid valuels --- Tactical/Overhead Types.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Tactical/Overhead Types.h b/Tactical/Overhead Types.h index d4ed672f..eb1a8571 100644 --- a/Tactical/Overhead Types.h +++ b/Tactical/Overhead Types.h @@ -388,7 +388,11 @@ typedef struct SoldierID inline operator UINT16() const { return i; } SoldierID(const UINT16 val = 0) : i(val) - {} + { + // Limit the maximum value to TOTAL_SOLDIERS. Anything beyond that is invalid + if ( i > TOTAL_SOLDIERS ) + i = TOTAL_SOLDIERS; + } SOLDIERTYPE* operator->() { return MercPtrs[i]; } const SOLDIERTYPE* operator->() const { return MercPtrs[i]; } From 3ddc4c2bbd17f06fe2a51d6103b842aff0e00e59 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 18 Nov 2024 22:24:55 +0200 Subject: [PATCH 099/192] Change to SoldierID --- Tactical/Animation Cache.cpp | 6 +++--- Tactical/Animation Cache.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Tactical/Animation Cache.cpp b/Tactical/Animation Cache.cpp index ad1977f6..6f62c86a 100644 --- a/Tactical/Animation Cache.cpp +++ b/Tactical/Animation Cache.cpp @@ -64,7 +64,7 @@ void DeleteAnimationCache( SoldierID usSoldierID, AnimationSurfaceCacheType *pAn } -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,7 +142,7 @@ BOOLEAN GetCachedAnimationSurface( UINT16 usSoldierID, AnimationSurfaceCacheType } return( TRUE ); - } +} diff --git a/Tactical/Animation Cache.h b/Tactical/Animation Cache.h index cbba71c8..635aa1ca 100644 --- a/Tactical/Animation Cache.h +++ b/Tactical/Animation Cache.h @@ -18,7 +18,7 @@ typedef struct extern UINT32 guiCacheSize; -BOOLEAN GetCachedAnimationSurface( UINT16 usSoldierID, AnimationSurfaceCacheType *pAnimCache, UINT16 usSurfaceIndex, UINT16 usCurrentAnimation ); +BOOLEAN GetCachedAnimationSurface( SoldierID usSoldierID, AnimationSurfaceCacheType *pAnimCache, UINT16 usSurfaceIndex, UINT16 usCurrentAnimation ); BOOLEAN InitAnimationCache( SoldierID usSoldierID, AnimationSurfaceCacheType *pAnimCache ); void DeleteAnimationCache( SoldierID usSoldierID, AnimationSurfaceCacheType *pAnimCache ); void DetermineOptimumAnimationCacheSize( ); From 38b710343a4487fe3f8fe6a58f8a0e331430a33d Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 18 Nov 2024 22:38:09 +0200 Subject: [PATCH 100/192] Fix incorrect function argument --- Tactical/Dialogue Control.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tactical/Dialogue Control.cpp b/Tactical/Dialogue Control.cpp index 296637c0..e6b12677 100644 --- a/Tactical/Dialogue Control.cpp +++ b/Tactical/Dialogue Control.cpp @@ -3118,7 +3118,7 @@ void HandleDialogueEnd( FACETYPE *pFace ) case QUOTE_UNDER_HEAVY_FIRE: case QUOTE_TAKEN_A_BREATING: if( pSoldier->ubPreviousAttackerID != NOBODY && !( pSoldier->ubPreviousAttackerID->bDeafenedCounter > 0 ) ) - PossiblyStartEnemyTaunt( pSoldier->ubPreviousAttackerID, TAUNT_RIPOSTE, gTacticalStatus.ubLastQuoteProfileNUm ); + PossiblyStartEnemyTaunt( pSoldier->ubPreviousAttackerID, TAUNT_RIPOSTE, pSoldier->ubID ); break; default: // select random enemy, who we see, who sees us and isn't deaf @@ -3132,7 +3132,7 @@ void HandleDialogueEnd( FACETYPE *pFace ) } } if( ubSeenEnemiesCnt > 0 ) - PossiblyStartEnemyTaunt( MercPtrs[ubSeenEnemies[ Random(ubSeenEnemiesCnt) ]], TAUNT_RIPOSTE, gTacticalStatus.ubLastQuoteProfileNUm ); + PossiblyStartEnemyTaunt( MercPtrs[ubSeenEnemies[ Random(ubSeenEnemiesCnt) ]], TAUNT_RIPOSTE, pSoldier->ubID ); } break; } From dd2c6f44b24bf7225a5ea2fb54e6e0123570a2e4 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 18 Nov 2024 22:38:28 +0200 Subject: [PATCH 101/192] Fix incorrect function arguments --- TileEngine/SmokeEffects.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TileEngine/SmokeEffects.cpp b/TileEngine/SmokeEffects.cpp index 91119d53..4d8bb9c2 100644 --- a/TileEngine/SmokeEffects.cpp +++ b/TileEngine/SmokeEffects.cpp @@ -211,7 +211,7 @@ INT32 NewSmokeEffect( INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT16 ubOwner, { // let all the other clients know we are spawning this effect // and align them with our random number generator - send_newsmokeeffect(sGridNo,usItem,ubOwner,bLevel,iSmokeIndex); + send_newsmokeeffect(sGridNo, usItem, bLevel, ubOwner, iSmokeIndex); } else if (!fFromRemoteClient) { From ca1112313ae8795c05088924b7ed94cc92f7737f Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 18 Nov 2024 23:11:41 +0200 Subject: [PATCH 102/192] Increase ubUserData2 from UINT8 to UINT16 --- TileEngine/Tile Animation.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/TileEngine/Tile Animation.h b/TileEngine/Tile Animation.h index 1a56eaba..b209a7d9 100644 --- a/TileEngine/Tile Animation.h +++ b/TileEngine/Tile Animation.h @@ -68,7 +68,7 @@ typedef struct TAG_anitile UINT32 uiKeyFrame2Code; UINT32 uiUserData; - UINT8 ubUserData2; + UINT16 ubUserData2; // NOTE: Expanded the type due to SoldierID UINT32 uiUserData3; INT8 bFrameCountAfterStart; @@ -99,7 +99,7 @@ typedef struct TAG_anitile_params UINT32 uiKeyFrame2Code; // Key frame code UINT32 uiUserData; - UINT8 ubUserData2; + UINT16 ubUserData2; // NOTE: Expanded the type due to SoldierID UINT32 uiUserData3; INT32 lightSprite; } ANITILE_PARAMS; From 9fb29cf4443f8f9238697bb46e858d65366f22be Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 18 Nov 2024 23:12:00 +0200 Subject: [PATCH 103/192] Remove UINT8 conversions --- TileEngine/Tile Animation.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/TileEngine/Tile Animation.cpp b/TileEngine/Tile Animation.cpp index 266bd856..ca2a6138 100644 --- a/TileEngine/Tile Animation.cpp +++ b/TileEngine/Tile Animation.cpp @@ -572,11 +572,11 @@ void UpdateAniTiles( ) { // Do sound.... // PlayJA2Sample( AIR_ESCAPING_1, RATE_11025, SoundVolume( HIGHVOLUME, pNode->sGridNo ), 1, SoundDir( pNode->sGridNo ) ); - NewSmokeEffect( pNode->sGridNo, (UINT16)pNode->uiUserData, gExplosionData[ pNode->uiUserData3 ].Params.bLevel, (UINT8)pNode->ubUserData2 ); + NewSmokeEffect( pNode->sGridNo, (UINT16)pNode->uiUserData, gExplosionData[ pNode->uiUserData3 ].Params.bLevel, pNode->ubUserData2 ); } else { - SpreadEffect( pNode->sGridNo, (UINT8)Explosive[ Item[ (UINT16)pNode->uiUserData ].ubClassIndex ].ubRadius, (UINT16)pNode->uiUserData, (UINT8)pNode->ubUserData2, FALSE, gExplosionData[ pNode->uiUserData3 ].Params.bLevel, -1 ); + SpreadEffect( pNode->sGridNo, (UINT8)Explosive[ Item[ (UINT16)pNode->uiUserData ].ubClassIndex ].ubRadius, (UINT16)pNode->uiUserData, pNode->ubUserData2, FALSE, gExplosionData[ pNode->uiUserData3 ].Params.bLevel, -1 ); } // Forfait any other animations this frame.... return; From e9e80800774d7f86a612443189d862831333acdf Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 18 Nov 2024 23:12:17 +0200 Subject: [PATCH 104/192] Update merccompare.cpp --- Laptop/merccompare.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Laptop/merccompare.cpp b/Laptop/merccompare.cpp index 413853d5..51c2fd94 100644 --- a/Laptop/merccompare.cpp +++ b/Laptop/merccompare.cpp @@ -433,12 +433,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 +452,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; From cd83fac928e685f8f522c507e0098bb7e44f89ec Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 18 Nov 2024 23:12:27 +0200 Subject: [PATCH 105/192] Update Air Raid.cpp --- Tactical/Air Raid.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tactical/Air Raid.cpp b/Tactical/Air Raid.cpp index 6b9f2ff9..cecc0852 100644 --- a/Tactical/Air Raid.cpp +++ b/Tactical/Air Raid.cpp @@ -107,7 +107,7 @@ typedef struct INT8 bLevel; INT8 bTeam; INT8 bSide; - UINT8 ubAttackerID; + SoldierID ubAttackerID; UINT16 usAttackingWeapon; FLOAT dXPos; FLOAT dYPos; From bc01bdb56da8c9102a6eebd1ba504d0827b6e039 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 18 Nov 2024 23:12:43 +0200 Subject: [PATCH 106/192] Convert to SoldierID --- Tactical/Handle UI.cpp | 2 +- Tactical/Handle UI.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Tactical/Handle UI.cpp b/Tactical/Handle UI.cpp index c2c624ff..b53d91ba 100644 --- a/Tactical/Handle UI.cpp +++ b/Tactical/Handle UI.cpp @@ -494,7 +494,7 @@ UINT8 GetAdjustedAnimHeight( UINT8 ubAnimHeight, INT8 bChange ); //-------------------------Legion 2 okno----------------------------------------------------------- -void GetMercOknoDirection( UINT8 ubSoldierID, BOOLEAN *pfGoDown, BOOLEAN *pfGoUp ) +void GetMercOknoDirection( SoldierID ubSoldierID, BOOLEAN *pfGoDown, BOOLEAN *pfGoUp ) { INT8 bNewDirection; SOLDIERTYPE *pSoldier; diff --git a/Tactical/Handle UI.h b/Tactical/Handle UI.h index ff74b70c..717ddc8c 100644 --- a/Tactical/Handle UI.h +++ b/Tactical/Handle UI.h @@ -379,6 +379,6 @@ void PreventFromTheFreezingBug(SOLDIERTYPE* pSoldier); void GetGridNoScreenXY( INT32 sGridNo, INT16 *pScreenX, INT16 *pScreenY ); //Legion by Jazz -void GetMercOknoDirection( UINT8 ubSoldierID, BOOLEAN *pfGoDown, BOOLEAN *pfGoUp ); +void GetMercOknoDirection( SoldierID ubSoldierID, BOOLEAN *pfGoDown, BOOLEAN *pfGoUp ); #endif From 9bbec030d8a1b5352beb2b2bcc477b5627dddf91 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 18 Nov 2024 23:14:03 +0200 Subject: [PATCH 107/192] Remove unnecessary casts --- Tactical/Overhead.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index 77d5ea2b..863b0864 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -1489,7 +1489,7 @@ BOOLEAN ExecuteOverhead( ) } else if ( pSoldier->aiData.ubPendingAction == MERC_TALK ) { - pSoldier->PlayerSoldierStartTalking( (UINT8)pSoldier->aiData.uiPendingActionData1, TRUE ); + pSoldier->PlayerSoldierStartTalking ( pSoldier->aiData.uiPendingActionData1, TRUE ); pSoldier->aiData.ubPendingAction = NO_PENDING_ACTION; } else if ( pSoldier->aiData.ubPendingAction == MERC_DROPBOMB ) @@ -3270,7 +3270,7 @@ void SelectNextAvailSoldier( SOLDIERTYPE *pSoldier ) if ( fSoldierFound ) { DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("SelectNextAvailSoldier: selectsoldier")); - SelectSoldier( (INT16)cnt, FALSE, FALSE ); + SelectSoldier( cnt, FALSE, FALSE ); } else { @@ -3755,7 +3755,7 @@ void HandlePlayerTeamMemberDeath( SOLDIERTYPE *pSoldier ) { if ( !fMissionFailed ) { - SelectSoldier( (INT16)iNewSelectedSoldier, FALSE, FALSE ); + SelectSoldier( iNewSelectedSoldier, FALSE, FALSE ); } else { @@ -4937,14 +4937,14 @@ SoldierID FindPrevActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLes // Check for bLife > 0 if ( pTeamSoldier->stats.bLife > 0 && pTeamSoldier->bActive && pTeamSoldier->bInSector && pTeamSoldier->bTeam == gbPlayerNum && ( pTeamSoldier->bAssignment < ON_DUTY || pTeamSoldier->bAssignment == VEHICLE ) && OK_INTERRUPT_MERC( pTeamSoldier ) && pSoldier->bAssignment == pTeamSoldier->bAssignment ) { - return( (UINT16)cnt ); + return( cnt ); } } else { if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && OK_INTERRUPT_MERC( pTeamSoldier ) && pSoldier->bAssignment == pTeamSoldier->bAssignment ) { - return( (UINT16)cnt ); + return( cnt ); } } } @@ -4967,14 +4967,14 @@ SoldierID FindPrevActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLes { if ( pTeamSoldier->stats.bLife > 0 && pTeamSoldier->bActive && pTeamSoldier->bInSector && pTeamSoldier->bTeam == gbPlayerNum && ( pTeamSoldier->bAssignment < ON_DUTY || pTeamSoldier->bAssignment == VEHICLE ) && OK_INTERRUPT_MERC( pTeamSoldier ) && pSoldier->bAssignment == pTeamSoldier->bAssignment ) { - return( (UINT16)cnt ); + return( cnt ); } } else { if ( OK_CONTROLLABLE_MERC( pTeamSoldier) && OK_INTERRUPT_MERC( pTeamSoldier ) && pSoldier->bAssignment == pTeamSoldier->bAssignment ) { - return( (UINT16)cnt ); + return( cnt ); } } } From 924ccd8815c2aa2a39915c75aefa7a937e2bd646 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 18 Nov 2024 23:14:22 +0200 Subject: [PATCH 108/192] Use ubID instead of cnt --- Tactical/Overhead.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index 863b0864..60bcd559 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -3474,10 +3474,8 @@ BOOLEAN ResetAllAnimationCache( ) { if ( pSoldier != NULL ) { - InitAnimationCache( cnt, &(pSoldier->AnimCache) ); - + InitAnimationCache( pSoldier->ubID, &(pSoldier->AnimCache) ); } - } return( TRUE ); From 883ceb2f6f8c5e30f9bfc2d12b0378e2480fb73c Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 18 Nov 2024 23:14:34 +0200 Subject: [PATCH 109/192] Convert to SoldierID --- Tactical/Overhead.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index 60bcd559..5ea1d763 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -3624,7 +3624,7 @@ void RebuildAllSoldierShadeTables( ) void HandlePlayerTeamMemberDeath( SOLDIERTYPE *pSoldier ) { INT32 cnt; - INT32 iNewSelectedSoldier = -1; + SoldierID iNewSelectedSoldier; SOLDIERTYPE *pTeamSoldier; BOOLEAN fMissionFailed = TRUE; INT8 bBuddyIndex; From 2387667a2306a4c67deca8239d17568ae7d43918 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 18 Nov 2024 23:20:04 +0200 Subject: [PATCH 110/192] Initialize SOLDIERTYPE SoldierIDs to NOBODY memset in initialize() function sets them all to zero --- Tactical/Soldier Control.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index a415b2e1..00b02419 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -1142,8 +1142,25 @@ void SOLDIERTYPE::initialize( ) // sevenfm:initialize additional data this->InitializeExtraData(); + + // Initialize all SoldierID fields to NOBODY. 0 is a valid value! + this->ubID = NOBODY; + this->ubOppNum = NOBODY; + this->ubAttackerID = NOBODY; + this->ubPreviousAttackerID = NOBODY; + this->ubServicePartner = NOBODY; + this->ubSuppressorID = NOBODY; + this->ubTargetID = NOBODY; + this->ubAutoBandagingMedic = NOBODY; + this->ubRobotRemoteHolderID = NOBODY; + this->ubCTGTTargetID = NOBODY; + this->bOverrideMoveSpeed = NOBODY; + this->ubNextToPreviousAttackerID = NOBODY; + this->usDragPersonID = NOBODY; + this->usChatPartnerID = NOBODY; } + bool SOLDIERTYPE::exists( ) { if ( this == NULL ) From df01708ac356c8b3b3113dd8b7eba9a2fa7fd490 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 18 Nov 2024 23:20:14 +0200 Subject: [PATCH 111/192] Update Soldier Control.cpp --- Tactical/Soldier Control.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index 00b02419..673fbdbf 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -18875,7 +18875,7 @@ BOOLEAN SOLDIERTYPE::OrderArtilleryStrike( UINT32 usSectorNr, INT32 sTargetGridN // if he does not do so, active vox operators will be targetted. Who knows, the vox operator might be doing a heroic last stand for all we know... //BOOLEAN signalshellfired = FALSE; const UINT8 maxFiringMortarsAmount = 5; - SoldierID radiooperatorID = 0; + SoldierID radiooperatorID = NOBODY; UINT8 mortaritemcnt = 0; UINT16 mortararray[maxFiringMortarsAmount] = { 0 }; From 327046925b4b33e0c6836be230652e846ad50e50 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 18 Nov 2024 23:20:42 +0200 Subject: [PATCH 112/192] Converto to SoldierID --- Tactical/TeamTurns.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tactical/TeamTurns.cpp b/Tactical/TeamTurns.cpp index 975e4b19..0b8c58e1 100644 --- a/Tactical/TeamTurns.cpp +++ b/Tactical/TeamTurns.cpp @@ -105,7 +105,7 @@ UINT16 gubOutOfTurnPersons = 0; SoldierID InterruptOnlyGuynum = NOBODY; BOOLEAN InterruptsAllowed = TRUE; BOOLEAN gfHiddenInterrupt = FALSE; -UINT8 gubLastInterruptedGuy = 0; +SoldierID gubLastInterruptedGuy = NOBODY; extern UINT16 gsWhoThrewRock; extern UINT8 gubSightFlags; @@ -118,7 +118,7 @@ typedef struct INT16 sWhoThrewRock; BOOLEAN InterruptsAllowed; BOOLEAN fHiddenInterrupt; - UINT8 ubLastInterruptedGuy; + SoldierID ubLastInterruptedGuy; UINT8 ubFiller[16]; } TEAM_TURN_SAVE_STRUCT; From b718b463c2125892c447cd1a524b4e473af856d1 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 18 Nov 2024 23:22:00 +0200 Subject: [PATCH 113/192] Use SoldierID --- TacticalAI/AIList.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TacticalAI/AIList.cpp b/TacticalAI/AIList.cpp index e91c48e1..a1700b3b 100644 --- a/TacticalAI/AIList.cpp +++ b/TacticalAI/AIList.cpp @@ -85,7 +85,7 @@ SoldierID RemoveFirstAIListEntry( void ) DeleteAIListEntry( pOldFirstEntry ); // make sure conditions still met - if ( SatisfiesAIListConditions( MercPtrs[ ubID ], NULL, FALSE ) ) + if ( SatisfiesAIListConditions( ubID, NULL, FALSE ) ) { return( ubID ); } From 1e16de30d7c17b64b35c1e923662bb906d065e5d Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 18 Nov 2024 23:22:19 +0200 Subject: [PATCH 114/192] Remove wrong cast --- Tactical/Turn Based Input.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tactical/Turn Based Input.cpp b/Tactical/Turn Based Input.cpp index ff479b90..58602825 100644 --- a/Tactical/Turn Based Input.cpp +++ b/Tactical/Turn Based Input.cpp @@ -5822,7 +5822,7 @@ void HandleHandCursorClick( INT32 usMapPos, UINT32 *puiNewEvent ) if ( gfUIFullTargetFound ) { // Flugente: allow stealing if the other guy is an enemy, OR if we are on the same team - if ( (( guiUIFullTargetFlags & ENEMY_MERC ) && !( guiUIFullTargetFlags & UNCONSCIOUS_MERC )) || (AllowedToStealFromTeamMate(pSoldier->ubID, (UINT8)gusUIFullTargetID) && guiUIFullTargetFlags & OWNED_MERC) ) + if ( (( guiUIFullTargetFlags & ENEMY_MERC ) && !( guiUIFullTargetFlags & UNCONSCIOUS_MERC )) || (AllowedToStealFromTeamMate(pSoldier->ubID, gusUIFullTargetID) && guiUIFullTargetFlags & OWNED_MERC) ) { sActionGridNo = FindAdjacentGridEx( pSoldier, gusUIFullTargetID->sGridNo, &ubDirection, &sAdjustedGridNo, TRUE, FALSE ); if ( sActionGridNo == -1 ) From 94a5972a8591061f165e65e0dcb126f3856f58d2 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 18 Nov 2024 23:38:00 +0200 Subject: [PATCH 115/192] Perform explicit casts from UINT8 to UINT16 for SoldierID --- Strategic/Scheduling.cpp | 2 +- Tactical/Interface Items.h | 2 +- Tactical/Item Types.cpp | 4 ++-- Tactical/Soldier Control.cpp | 26 +++++++++++++------------- TileEngine/physics.cpp | 8 ++++---- 5 files changed, 21 insertions(+), 21 deletions(-) diff --git a/Strategic/Scheduling.cpp b/Strategic/Scheduling.cpp index f9dad5da..cd9c43d8 100644 --- a/Strategic/Scheduling.cpp +++ b/Strategic/Scheduling.cpp @@ -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( src.ubSoldierID ); usFlags = src.usFlags; } return(*this); diff --git a/Tactical/Interface Items.h b/Tactical/Interface Items.h index 05192f76..a221e803 100644 --- a/Tactical/Interface Items.h +++ b/Tactical/Interface Items.h @@ -159,7 +159,7 @@ public: this->fCursorActive = src.fCursorActive; this->ItemPointerInfo = src.ItemPointerInfo; this->ubInvSlot = src.ubInvSlot; - this->ubSoldierID = src.ubSoldierID; + this->ubSoldierID = static_cast(src.ubSoldierID); return *this; } //could use a little tidying up diff --git a/Tactical/Item Types.cpp b/Tactical/Item Types.cpp index 85e2af84..db19977b 100644 --- a/Tactical/Item Types.cpp +++ b/Tactical/Item Types.cpp @@ -1566,7 +1566,7 @@ OBJECTTYPE& OBJECTTYPE::operator=(const OLD_OBJECTTYPE_101& src) (*this)[0]->data.misc.bDetonatorType = src.ugYucky.bDetonatorType; (*this)[0]->data.misc.usBombItem = src.ugYucky.usBombItem; (*this)[0]->data.misc.bDelay = src.ugYucky.bDelay; // includes bFrequency - (*this)[0]->data.misc.ubBombOwner = src.ugYucky.ubBombOwner; + (*this)[0]->data.misc.ubBombOwner = static_cast(src.ugYucky.ubBombOwner); (*this)[0]->data.misc.bActionValue = src.ugYucky.bActionValue; (*this)[0]->data.misc.ubTolerance = src.ugYucky.ubTolerance; // includes ubLocationID (*this)[0]->data.ubDirection = DIRECTION_IRRELEVANT; @@ -1658,7 +1658,7 @@ OBJECTTYPE& OBJECTTYPE::operator=(const OLD_OBJECTTYPE_101& src) (*this)[0]->data.misc.bDetonatorType = src.ugYucky.bDetonatorType; (*this)[0]->data.misc.usBombItem = src.ugYucky.usBombItem; (*this)[0]->data.misc.bDelay = src.ugYucky.bDelay; // includes bFrequency - (*this)[0]->data.misc.ubBombOwner = src.ugYucky.ubBombOwner; + (*this)[0]->data.misc.ubBombOwner = static_cast(src.ugYucky.ubBombOwner); (*this)[0]->data.misc.bActionValue = src.ugYucky.bActionValue; (*this)[0]->data.misc.ubTolerance = src.ugYucky.ubTolerance; // includes ubLocationID (*this)[0]->data.ubWireNetworkFlag = TRIPWIRE_NETWORK_OWNER_ENEMY; // it is always assumed that preplated traps are of hostile origin diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index 673fbdbf..136973d9 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -632,7 +632,7 @@ void STRUCT_AIData::ConvertFrom_101_To_102( const OLDSOLDIERTYPE_101& src ) this->bMoved = src.bMoved; this->bHunting = src.bHunting; this->ubLastCall = src.ubLastCall; - this->ubCaller = src.ubCaller; + this->ubCaller = static_cast( src.ubCaller ); this->sCallerGridNo = src.sCallerGridNo; this->bCallPriority = src.bCallPriority; this->bCallActedUpon = src.bCallActedUpon; @@ -694,7 +694,7 @@ SOLDIERTYPE& SOLDIERTYPE::operator=(const OLDSOLDIERTYPE_101& src) this->sLastTwoLocations[0] = src.sLastTwoLocations[0]; this->sLastTwoLocations[1] = src.sLastTwoLocations[1]; - this->ubID = src.ubID; + this->ubID = static_cast( src.ubID ); //this->bReserved1 = src.bReserved1; this->ubBodyType = src.ubBodyType; @@ -717,7 +717,7 @@ SOLDIERTYPE& SOLDIERTYPE::operator=(const OLDSOLDIERTYPE_101& src) this->ubWaitActionToDo = src.ubWaitActionToDo; this->ubInsertionDirection = src.ubInsertionDirection; this->bGunType = src.bGunType; - this->ubOppNum = src.ubOppNum; + this->ubOppNum = static_cast( src.ubOppNum ); this->bLastRenderVisibleValue = src.bLastRenderVisibleValue; this->ubAttackingHand = src.ubAttackingHand; this->sWeightCarriedAtTurnStart = src.sWeightCarriedAtTurnStart; @@ -756,8 +756,8 @@ SOLDIERTYPE& SOLDIERTYPE::operator=(const OLDSOLDIERTYPE_101& src) this->uiAIDelay = src.uiAIDelay; this->sReloadDelay = src.sReloadDelay; - this->ubAttackerID = src.ubAttackerID; - this->ubPreviousAttackerID = src.ubPreviousAttackerID; + this->ubAttackerID = static_cast( src.ubAttackerID ); + this->ubPreviousAttackerID = static_cast( src.ubPreviousAttackerID ); this->sInsertionGridNo = src.sInsertionGridNo; @@ -808,7 +808,7 @@ SOLDIERTYPE& SOLDIERTYPE::operator=(const OLDSOLDIERTYPE_101& src) this->pCurrentShade = src.pCurrentShade; this->ubFadeLevel = src.ubFadeLevel; this->ubServiceCount = src.ubServiceCount; - this->ubServicePartner = src.ubServicePartner; + this->ubServicePartner = static_cast( src.ubServicePartner ); this->pThrowParams = src.pThrowParams; this->bReverse = src.bReverse; this->pLevelNode = src.pLevelNode; @@ -931,7 +931,7 @@ SOLDIERTYPE& SOLDIERTYPE::operator=(const OLDSOLDIERTYPE_101& src) this->ubSoldierClass = src.ubSoldierClass; //admin, elite, troop (creature types?) this->ubAPsLostToSuppression = src.ubAPsLostToSuppression; - this->ubSuppressorID = src.ubSuppressorID; + this->ubSuppressorID = static_cast( src.ubSuppressorID ); this->ubDesiredSquadAssignment = src.ubDesiredSquadAssignment; this->ubNumTraversalsAllowedToMerge = src.ubNumTraversalsAllowedToMerge; @@ -946,7 +946,7 @@ SOLDIERTYPE& SOLDIERTYPE::operator=(const OLDSOLDIERTYPE_101& src) this->bBlockedByAnotherMercDirection = src.bBlockedByAnotherMercDirection; this->usAttackingWeapon = src.usAttackingWeapon; this->bWeaponMode = src.bWeaponMode; - this->ubTargetID = src.ubTargetID; + this->ubTargetID = static_cast( src.ubTargetID ); this->bAIScheduleProgress = src.bAIScheduleProgress; this->sOffWorldGridNo = src.sOffWorldGridNo; this->pAniTile = src.pAniTile; @@ -966,8 +966,8 @@ SOLDIERTYPE& SOLDIERTYPE::operator=(const OLDSOLDIERTYPE_101& src) this->bOldBattleSnd = src.bOldBattleSnd; this->iBurstSoundID = src.iBurstSoundID; this->bSlotItemTakenFrom = src.bSlotItemTakenFrom; - this->ubAutoBandagingMedic = src.ubAutoBandagingMedic; - this->ubRobotRemoteHolderID = src.ubRobotRemoteHolderID; + this->ubAutoBandagingMedic = static_cast( src.ubAutoBandagingMedic ); + this->ubRobotRemoteHolderID = static_cast( src.ubRobotRemoteHolderID ); this->uiTimeOfLastContractUpdate = src.uiTimeOfLastContractUpdate; this->bTypeOfLastContract = src.bTypeOfLastContract; this->bTurnsCollapsed = src.bTurnsCollapsed; @@ -1003,7 +1003,7 @@ SOLDIERTYPE& SOLDIERTYPE::operator=(const OLDSOLDIERTYPE_101& src) this->usValueGoneUp = src.usValueGoneUp; this->ubNumLocateCycles = src.ubNumLocateCycles; this->ubDelayedMovementFlags = src.ubDelayedMovementFlags; - this->ubCTGTTargetID = src.ubCTGTTargetID; + this->ubCTGTTargetID = static_cast( src.ubCTGTTargetID ); this->uiMercChecksum = src.uiMercChecksum; @@ -1027,7 +1027,7 @@ SOLDIERTYPE& SOLDIERTYPE::operator=(const OLDSOLDIERTYPE_101& src) this->pGroup = src.pGroup; this->ubLeaveHistoryCode = src.ubLeaveHistoryCode; - this->bOverrideMoveSpeed = src.bOverrideMoveSpeed; + this->bOverrideMoveSpeed = static_cast( src.bOverrideMoveSpeed ); this->uiTimeSoldierWillArrive = src.uiTimeSoldierWillArrive; this->bVehicleUnderRepairID = src.bVehicleUnderRepairID; @@ -1040,7 +1040,7 @@ SOLDIERTYPE& SOLDIERTYPE::operator=(const OLDSOLDIERTYPE_101& src) this->iTuringSoundID = src.iTuringSoundID; this->ubLastDamageReason = src.ubLastDamageReason; this->uiTimeSinceLastBleedGrunt = src.uiTimeSinceLastBleedGrunt; - this->ubNextToPreviousAttackerID = src.ubNextToPreviousAttackerID; + this->ubNextToPreviousAttackerID = static_cast( src.ubNextToPreviousAttackerID ); this->bDoAutofire = src.bDoAutofire; this->numFlanks = src.numFlanks; this->lastFlankSpot = src.lastFlankSpot; diff --git a/TileEngine/physics.cpp b/TileEngine/physics.cpp index eb2179a8..f05398c2 100644 --- a/TileEngine/physics.cpp +++ b/TileEngine/physics.cpp @@ -160,7 +160,7 @@ REAL_OBJECT& REAL_OBJECT::operator =(OLD_REAL_OBJECT_101 &src) this->dLifeSpan = src.dLifeSpan; this->fFirstTimeMoved = src.fFirstTimeMoved; this->sFirstGridNo = src.sFirstGridNo; - this->ubOwner = src.ubOwner; + this->ubOwner = static_cast(src.ubOwner); this->ubActionCode = src.ubActionCode; this->uiActionData = src.uiActionData; this->fDropItem = src.fDropItem; @@ -175,7 +175,7 @@ REAL_OBJECT& REAL_OBJECT::operator =(OLD_REAL_OBJECT_101 &src) this->fPotentialForDebug = src.fPotentialForDebug; this->sLevelNodeGridNo = src.sLevelNodeGridNo; this->iSoundID = src.iSoundID; - this->ubLastTargetTakenDamage = src.ubLastTargetTakenDamage; + this->ubLastTargetTakenDamage = static_cast(src.ubLastTargetTakenDamage); return *this; } @@ -1120,10 +1120,10 @@ BOOLEAN PhysicsCheckForCollisions( REAL_OBJECT *pObject, INT32 *piCollisionID ) { gTacticalStatus.ubAttackBusyCount++; DebugAttackBusy( String( "Incrementing attack busy because of delayed water explosion. Now %d\n", gTacticalStatus.ubAttackBusyCount ) ); - AniParams.ubKeyFrame1 = 11; + AniParams.ubKeyFrame1 = 11; AniParams.uiKeyFrame1Code = ANI_KEYFRAME_CHAIN_WATER_EXPLOSION; AniParams.uiUserData = pObject->Obj.usItem; - AniParams.ubUserData2 = pObject->ubOwner; + AniParams.ubUserData2 = pObject->ubOwner; } pNode = CreateAnimationTile( &AniParams ); From 191af4da49dff68cb3be738f1b66e5394986ce58 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 18 Nov 2024 23:38:43 +0200 Subject: [PATCH 116/192] Update SoldierID constructors --- Tactical/Overhead Types.h | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/Tactical/Overhead Types.h b/Tactical/Overhead Types.h index eb1a8571..2f0f548c 100644 --- a/Tactical/Overhead Types.h +++ b/Tactical/Overhead Types.h @@ -386,14 +386,31 @@ typedef struct SoldierID // Implicit conversion and constructor to provide compatibility with unchanged code // TODO: Remove once SoldierID is used everywhere and these are no longer needed inline operator UINT16() const { return i; } - SoldierID(const UINT16 val = 0) - : i(val) + + SoldierID(const UINT16 val = TOTAL_SOLDIERS) : i(val) + { + // Limit the maximum value to TOTAL_SOLDIERS. Anything beyond that is invalid + if ( i > TOTAL_SOLDIERS ) + i = TOTAL_SOLDIERS; + } + SoldierID ( const UINT32 val ) : i ( val ) + { + // Limit the maximum value to TOTAL_SOLDIERS. Anything beyond that is invalid + if ( i > TOTAL_SOLDIERS ) + i = TOTAL_SOLDIERS; + } + SoldierID ( const INT32 val ) : i ( val ) { // Limit the maximum value to TOTAL_SOLDIERS. Anything beyond that is invalid if ( i > TOTAL_SOLDIERS ) i = TOTAL_SOLDIERS; } + // No conversions from 8-bit integers! + SoldierID ( const UINT8 ) = delete; + SoldierID ( const INT8 ) = delete; + + SOLDIERTYPE* operator->() { return MercPtrs[i]; } const SOLDIERTYPE* operator->() const { return MercPtrs[i]; } inline operator SOLDIERTYPE* () { return MercPtrs[i]; } From 65c4cdd1d73f9b932d85fb4db7d0709d75d02b06 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 18 Nov 2024 23:43:13 +0200 Subject: [PATCH 117/192] Suppress compiler warnings by using SoldierID::i directly --- Multiplayer/client.cpp | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/Multiplayer/client.cpp b/Multiplayer/client.cpp index 251f81f5..79d30606 100644 --- a/Multiplayer/client.cpp +++ b/Multiplayer/client.cpp @@ -2948,7 +2948,7 @@ void send_grenade (OBJECTTYPE *pGameObj, float dLifeLength, float xPos, float yP #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 @@ -2974,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 @@ -3021,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 @@ -3120,7 +3120,7 @@ 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 @@ -3146,7 +3146,7 @@ void send_plant_explosive (SoldierID ubID,UINT16 usItem,UINT8 ubItemStatus,UINT1 #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 @@ -3221,7 +3221,7 @@ 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 @@ -3304,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 @@ -3417,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 @@ -3480,7 +3480,7 @@ void send_spreadeffect ( INT32 sGridNo, UINT8 ubRadius, UINT16 usItem, SoldierID #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 @@ -3502,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 @@ -3543,7 +3543,7 @@ 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 @@ -3564,7 +3564,7 @@ void send_newsmokeeffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, SoldierID ub #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 @@ -3586,7 +3586,7 @@ 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 @@ -3604,7 +3604,7 @@ 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 @@ -3626,7 +3626,7 @@ 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 @@ -3649,7 +3649,7 @@ void send_explosivedamage( SoldierID ubPerson, SoldierID ubOwner, INT32 sBombGri #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 @@ -3673,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 @@ -3698,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 From 47824c97a193846a8a045fb39f96ed4ede184d40 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 18 Nov 2024 23:58:04 +0200 Subject: [PATCH 118/192] Fix UB compilation --- Tactical/Interface Dialogue.cpp | 4 ++-- Tactical/Interface.cpp | 4 ++-- Tactical/Ja25_Tactical.cpp | 8 ++++---- Tactical/Ja25_Tactical.h | 2 +- Tactical/Overhead Types.h | 10 +++++----- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Tactical/Interface Dialogue.cpp b/Tactical/Interface Dialogue.cpp index 2ac44952..6bb0bf63 100644 --- a/Tactical/Interface Dialogue.cpp +++ b/Tactical/Interface Dialogue.cpp @@ -5484,7 +5484,7 @@ BOOLEAN IsMineEntranceInSectorI13AtThisGridNo( UINT32 sGridNo ) void HaveBiggensDetonatingExplosivesByTheMine() { SOLDIERTYPE *pSoldier = NULL; - UINT8 ubID=NOBODY; + SoldierID ubID = NOBODY; pSoldier = FindSoldierByProfileID( BIGGENS_UB , FALSE ); //BIGGENS if( pSoldier != NULL ) @@ -5638,7 +5638,7 @@ void HandleRaulBlowingHimselfUp() usItem = HAND_GRENADE; INT16 sX, sY; ConvertGridNoToCenterCellXY(pSoldier->sGridNo, &sX, &sY); - IgniteExplosion( RAUL_UB, sX, sY, 0, pSoldier->sGridNo, usItem, pSoldier->pathing.bLevel ); + IgniteExplosion( pSoldier->ubID, sX, sY, 0, pSoldier->sGridNo, usItem, pSoldier->pathing.bLevel ); SetJa25GeneralFlag( JA_GF__RAUL_BLOW_HIMSELF_UP ); } diff --git a/Tactical/Interface.cpp b/Tactical/Interface.cpp index 3d543bf6..615cec5a 100644 --- a/Tactical/Interface.cpp +++ b/Tactical/Interface.cpp @@ -4338,7 +4338,7 @@ void BtnDoorMenuCallback(GUI_BUTTON *btn,INT32 reason) if ( EnoughPoints( gOpenDoorMenu.pSoldier, APBPConstants[AP_EXPLODE_DOOR], APBPConstants[BP_EXPLODE_DOOR], FALSE ) ) { // Set UI - SetUIBusy( (UINT8)gOpenDoorMenu.pSoldier->ubID ); + SetUIBusy( gOpenDoorMenu.pSoldier->ubID ); InteractWithClosedDoor( gOpenDoorMenu.pSoldier, HANDLE_DOOR_EXPLODE ); } @@ -4397,7 +4397,7 @@ void BtnDoorMenuCallback(GUI_BUTTON *btn,INT32 reason) if ( EnoughPoints( gOpenDoorMenu.pSoldier, APBPConstants[AP_USE_CROWBAR], APBPConstants[BP_USE_CROWBAR], FALSE ) ) { // Set UI - SetUIBusy( (UINT8)gOpenDoorMenu.pSoldier->ubID ); + SetUIBusy( gOpenDoorMenu.pSoldier->ubID ); InteractWithClosedDoor( gOpenDoorMenu.pSoldier, HANDLE_DOOR_CROWBAR ); } diff --git a/Tactical/Ja25_Tactical.cpp b/Tactical/Ja25_Tactical.cpp index 42cd8ba2..a56d530e 100644 --- a/Tactical/Ja25_Tactical.cpp +++ b/Tactical/Ja25_Tactical.cpp @@ -544,7 +544,7 @@ SoldierID RandomSoldierIdFromNewMercsOnPlayerTeam() } } -UINT8 RandomArrayOfQualifiedMercs( UINT8 *pRandomSoldierIdArray ) +UINT8 RandomArrayOfQualifiedMercs( SoldierID *pRandomSoldierIdArray ) { UINT8 usNumMercsPresent; SoldierID SoldierIdArray[NUM_MERCS_WITH_NEW_QUOTES]; @@ -586,9 +586,9 @@ UINT8 RandomArrayOfQualifiedMercs( UINT8 *pRandomSoldierIdArray ) UINT8 Get3RandomQualifiedMercs( SoldierID *pSoldierId1, SoldierID *pSoldierId2, SoldierID *pSoldierId3 ) { - UINT8 usNumMercs; - UINT8 RandomSoldierIdArray[ NUM_MERCS_WITH_NEW_QUOTES ]; - UINT8 ubNumberDifMercsAssigned=0; + UINT8 usNumMercs; + SoldierID RandomSoldierIdArray[ NUM_MERCS_WITH_NEW_QUOTES ]; + UINT8 ubNumberDifMercsAssigned=0; usNumMercs = RandomArrayOfQualifiedMercs( RandomSoldierIdArray ); diff --git a/Tactical/Ja25_Tactical.h b/Tactical/Ja25_Tactical.h index b3c56725..5e5c6603 100644 --- a/Tactical/Ja25_Tactical.h +++ b/Tactical/Ja25_Tactical.h @@ -47,7 +47,7 @@ BOOLEAN SayQuoteFromAllNewHiredMercButDoGastonLast( UINT8 ubProfile, UINT32 uiQu //Pass in an array of size NUM_MERCS_WITH_NEW_QUOTES, array will be filled with //random soldier IDs of the qualified mercs -UINT8 RandomArrayOfQualifiedMercs( UINT8 *pRandomSoldierIdArray ); +UINT8 RandomArrayOfQualifiedMercs( SoldierID *pRandomSoldierIdArray ); extern UINT8 Get3RandomQualifiedMercs( SoldierID *pSoldierId1, SoldierID *pSoldierId2, SoldierID *pSoldierId3 ); diff --git a/Tactical/Overhead Types.h b/Tactical/Overhead Types.h index 2f0f548c..40d23a03 100644 --- a/Tactical/Overhead Types.h +++ b/Tactical/Overhead Types.h @@ -393,13 +393,13 @@ typedef struct SoldierID if ( i > TOTAL_SOLDIERS ) i = TOTAL_SOLDIERS; } - SoldierID ( const UINT32 val ) : i ( val ) + SoldierID( const UINT32 val ) : i( val ) { // Limit the maximum value to TOTAL_SOLDIERS. Anything beyond that is invalid if ( i > TOTAL_SOLDIERS ) i = TOTAL_SOLDIERS; } - SoldierID ( const INT32 val ) : i ( val ) + constexpr SoldierID( const INT32 val ) : i( val ) { // Limit the maximum value to TOTAL_SOLDIERS. Anything beyond that is invalid if ( i > TOTAL_SOLDIERS ) @@ -407,8 +407,8 @@ typedef struct SoldierID } // No conversions from 8-bit integers! - SoldierID ( const UINT8 ) = delete; - SoldierID ( const INT8 ) = delete; + SoldierID( const UINT8 ) = delete; + SoldierID( const INT8 ) = delete; SOLDIERTYPE* operator->() { return MercPtrs[i]; } @@ -488,5 +488,5 @@ inline SoldierID operator++(SoldierID lhs) } //TODO: Change this to constexpr after SoldierID is ready and the user defined constructor from uint16 is not needed anymore. -inline const SoldierID NOBODY{ TOTAL_SOLDIERS }; +inline constexpr SoldierID NOBODY{ TOTAL_SOLDIERS }; #endif From 18673f3a29fefe0e102012543dcac0d9c43dde15 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 18 Nov 2024 23:58:14 +0200 Subject: [PATCH 119/192] Remove compiler warning --- TileEngine/Explosion Control.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TileEngine/Explosion Control.cpp b/TileEngine/Explosion Control.cpp index ee31dac1..e8f6cc3e 100644 --- a/TileEngine/Explosion Control.cpp +++ b/TileEngine/Explosion Control.cpp @@ -250,7 +250,7 @@ void InternalIgniteExplosion( SoldierID ubOwner, INT16 sX, INT16 sY, INT16 sZ, I #ifdef JA2BETAVERSION if (is_networked) { CHAR tmpMPDbgString[512]; - sprintf(tmpMPDbgString,"InternalIgniteExplosion ( ubOwner : %i , sX : %i , sY : %i , sZ : %i , sGridNo : %i , usItem : %i , fLocate : %i , bLevel : %i , ubDirection : %i )\n",ubOwner, sX , sY , sZ , sGridNo , usItem , (int)fLocate , bLevel, ubDirection ); + sprintf(tmpMPDbgString,"InternalIgniteExplosion ( ubOwner : %i , sX : %i , sY : %i , sZ : %i , sGridNo : %i , usItem : %i , fLocate : %i , bLevel : %i , ubDirection : %i )\n",ubOwner.i, sX , sY , sZ , sGridNo , usItem , (int)fLocate , bLevel, ubDirection ); MPDebugMsg(tmpMPDbgString); } #endif From 3f448a62fb1a999b171f6ad037d734a6b234c087 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Tue, 19 Nov 2024 00:08:46 +0200 Subject: [PATCH 120/192] Remove unused functions --- Tactical/Overhead.cpp | 19 ------------------- Tactical/Overhead.h | 2 -- 2 files changed, 21 deletions(-) diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index 5ea1d763..21d70934 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -274,25 +274,6 @@ UINT32 guiNumMercSlots = 0; SOLDIERTYPE* AwaySlots[ TOTAL_SOLDIERS ]; UINT32 guiNumAwaySlots = 0; -SOLDIERTYPE* SoldierFromID(const SoldierID id) -{ - if (id >= TOTAL_SOLDIERS) - { - return nullptr; - } - - return &Menptr[id.i]; -} - -SOLDIERTYPE* SoldierFromID(const SoldierID id, SOLDIERTYPE* Array[TOTAL_SOLDIERS]) -{ - if (id >= TOTAL_SOLDIERS) - { - return nullptr; - } - - return Array[id.i]; -} // DEF: changed to have client wait for gPlayerNum assigned from host UINT8 gbPlayerNum = 0; diff --git a/Tactical/Overhead.h b/Tactical/Overhead.h index e9a09bbb..fea2d805 100644 --- a/Tactical/Overhead.h +++ b/Tactical/Overhead.h @@ -433,7 +433,5 @@ BOOLEAN IsCivFactionMemberAliveInSector( UINT8 usCivilianGroup ); BOOLEAN IsFreeSlotAvailable( int aTeam ); void AttemptToCapturePlayerSoldiers(); -SOLDIERTYPE* SoldierFromID(const SoldierID id); -SOLDIERTYPE* SoldierFromID(const SoldierID id, SOLDIERTYPE* Array[TOTAL_SOLDIERS]); #endif From 5b4be9bcdbf6e8e907c6967ae9782beac6afc0d8 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Tue, 19 Nov 2024 00:55:36 +0200 Subject: [PATCH 121/192] Convert to SoldierID --- Laptop/insurance Contract.cpp | 78 ++++++++++++++++++----------------- 1 file changed, 41 insertions(+), 37 deletions(-) diff --git a/Laptop/insurance Contract.cpp b/Laptop/insurance Contract.cpp index 418df377..ab97fb1b 100644 --- a/Laptop/insurance Contract.cpp +++ b/Laptop/insurance Contract.cpp @@ -166,8 +166,8 @@ void InsuranceContractUserTextFieldCallBack( UINT8 ubID, BOOLEAN fEntering ); INT8 CountInsurableMercs(); void DisableInsuranceContractNextPreviousbuttons(); void CreateDestroyInsuranceContractFormButtons( BOOLEAN fCreate); -void HandleAcceptButton( UINT16 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 ); - INT16 ubSoldierID = 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 ); - INT16 ubSoldierID = 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 ); - INT16 ubSoldierID = 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; @@ -1067,12 +1073,12 @@ void CreateDestroyInsuranceContractFormButtons( BOOLEAN fCreate) -void HandleAcceptButton( UINT16 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(); } @@ -1139,7 +1145,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 @@ -1458,7 +1464,7 @@ void EndInsuranceInvestigation( UINT16 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( LaptopSaveInfo.pLifeInsurancePayouts[ ubPayoutID ].ubSoldierID->bActive ) @@ -1552,14 +1558,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 From ff638a5473415fc3e8673c8e790e857e90dbdcce Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Tue, 19 Nov 2024 01:01:41 +0200 Subject: [PATCH 122/192] Convert to SoldierID --- Laptop/AimMembers.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Laptop/AimMembers.cpp b/Laptop/AimMembers.cpp index aa045033..74a83ee1 100644 --- a/Laptop/AimMembers.cpp +++ b/Laptop/AimMembers.cpp @@ -2397,9 +2397,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 ) @@ -2475,9 +2475,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 From 534ce662f3a155519a068149d675cd8efd36bc63 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Tue, 19 Nov 2024 01:08:26 +0200 Subject: [PATCH 123/192] Convert to SoldierID --- Laptop/personnel.cpp | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/Laptop/personnel.cpp b/Laptop/personnel.cpp index be713290..4f985494 100644 --- a/Laptop/personnel.cpp +++ b/Laptop/personnel.cpp @@ -326,7 +326,7 @@ void PersonnelPortraitCallback( MOUSE_REGION * pRegion, INT32 iReason ); void CreatePersonnelButtons( void ); void DeletePersonnelButtons( void ); void DisplayHeader( void ); -void DisplayCharName( INT32 iId, INT32 iSlot ); +void DisplayCharName( SoldierID iId, INT32 iSlot ); void DisplayCharStats(INT32 iId, INT32 iSlot); void DisplayCharPersonality( INT32 iId, INT32 iSlot ); void SetPersonnelButtonStates( void ); @@ -1268,7 +1268,7 @@ void DisplayHeader( void ) } -void DisplayCharName( INT32 iId, INT32 iSlot ) +void DisplayCharName( SoldierID Id, INT32 iSlot ) { // get merc's nickName, assignment, and sector location info INT16 sX, sY; @@ -1280,7 +1280,11 @@ void DisplayCharName( INT32 iId, INT32 iSlot ) sTownName[0] = L'\0'; - pSoldier=MercPtrs[iId]; + if ( Id == NOBODY ) + { + return; + } + pSoldier = Id; SetFont(CHAR_NAME_FONT); SetFontForeground(PERS_TEXT_FONT_COLOR); @@ -1291,16 +1295,16 @@ void DisplayCharName( INT32 iId, INT32 iSlot ) return; } - if( Menptr[iId].bAssignment == ASSIGNMENT_POW ) + if( pSoldier->bAssignment == ASSIGNMENT_POW ) { } - else if( Menptr[iId].bAssignment == IN_TRANSIT ) + else if( pSoldier->bAssignment == IN_TRANSIT ) { } else { // name of town, if any - bTownId = GetTownIdForSector( Menptr[iId].sSectorX, Menptr[iId].sSectorY ); + bTownId = GetTownIdForSector( pSoldier->sSectorX, pSoldier->sSectorY ); if( bTownId != BLANK_SECTOR ) { @@ -1313,12 +1317,12 @@ void DisplayCharName( INT32 iId, INT32 iSlot ) if( sTownName[0] != L'\0' ) { //nick name - town name - swprintf( sString, L"%s - %s", gMercProfiles[Menptr[iId].ubProfile].zNickname, sTownName ); + swprintf( sString, L"%s - %s", gMercProfiles[pSoldier->ubProfile].zNickname, sTownName ); } else { //nick name - swprintf( sString, L"%s", gMercProfiles[Menptr[iId].ubProfile].zNickname ); + swprintf( sString, L"%s", gMercProfiles[pSoldier->ubProfile].zNickname ); } @@ -1334,10 +1338,10 @@ void DisplayCharName( INT32 iId, INT32 iSlot ) //Display the mercs name mprintf( sX + iSlot*IMAGE_BOX_WIDTH, CHAR_NAME_Y, sString ); - if ( gGameExternalOptions.fUseXMLSquadNames && Menptr[iId].bAssignment < min(ON_DUTY, gSquadNameVector.size() ) ) - swprintf( sString, L"%s", gSquadNameVector[Menptr[iId].bAssignment].c_str() ); + if ( gGameExternalOptions.fUseXMLSquadNames && pSoldier->bAssignment < min(ON_DUTY, gSquadNameVector.size() ) ) + swprintf( sString, L"%s", gSquadNameVector[pSoldier->bAssignment].c_str() ); else - swprintf( sString, L"%s", pPersonnelAssignmentStrings[Menptr[iId].bAssignment]); + swprintf( sString, L"%s", pPersonnelAssignmentStrings[pSoldier->bAssignment]); // nick name - assignment FindFontCenterCoordinates(IMAGE_BOX_X-5,0,IMAGE_BOX_WIDTH + 90 , 0,sString,CHAR_NAME_FONT, &sX, &sY ); @@ -1356,36 +1360,36 @@ void DisplayCharName( INT32 iId, INT32 iSlot ) // //first get height of text to be displayed - iHeightOfText = DisplayWrappedString(IMAGE_BOX_X, (UINT16)(IMAGE_BOX_Y+IMAGE_FULL_NAME_OFFSET_Y), IMAGE_NAME_WIDTH, 1, PERS_FONT, PERS_FONT_COLOR, gMercProfiles[Menptr[iId].ubProfile].zName, 0, FALSE, CENTER_JUSTIFIED | DONT_DISPLAY_TEXT ); + iHeightOfText = DisplayWrappedString(IMAGE_BOX_X, (UINT16)(IMAGE_BOX_Y+IMAGE_FULL_NAME_OFFSET_Y), IMAGE_NAME_WIDTH, 1, PERS_FONT, PERS_FONT_COLOR, gMercProfiles[pSoldier->ubProfile].zName, 0, FALSE, CENTER_JUSTIFIED | DONT_DISPLAY_TEXT ); //if the string will rap if( ( iHeightOfText - 2 ) > GetFontHeight( PERS_FONT ) ) { //raise where we display it, and rap it - DisplayWrappedString(IMAGE_BOX_X, (UINT16)(IMAGE_BOX_Y+IMAGE_FULL_NAME_OFFSET_Y - GetFontHeight( PERS_FONT )), IMAGE_NAME_WIDTH, 1, PERS_FONT, PERS_FONT_COLOR, gMercProfiles[Menptr[iId].ubProfile].zName, 0, FALSE, CENTER_JUSTIFIED); + DisplayWrappedString(IMAGE_BOX_X, (UINT16)(IMAGE_BOX_Y+IMAGE_FULL_NAME_OFFSET_Y - GetFontHeight( PERS_FONT )), IMAGE_NAME_WIDTH, 1, PERS_FONT, PERS_FONT_COLOR, gMercProfiles[pSoldier->ubProfile].zName, 0, FALSE, CENTER_JUSTIFIED); } else { - DrawTextToScreen( gMercProfiles[Menptr[iId].ubProfile].zName, IMAGE_BOX_X, (UINT16)(IMAGE_BOX_Y+IMAGE_FULL_NAME_OFFSET_Y), IMAGE_NAME_WIDTH, PERS_FONT, PERS_FONT_COLOR, 0, FALSE, CENTER_JUSTIFIED ); + DrawTextToScreen( gMercProfiles[pSoldier->ubProfile].zName, IMAGE_BOX_X, (UINT16)(IMAGE_BOX_Y+IMAGE_FULL_NAME_OFFSET_Y), IMAGE_NAME_WIDTH, PERS_FONT, PERS_FONT_COLOR, 0, FALSE, CENTER_JUSTIFIED ); } /* Moved so the name of the town will be in the same line as the name - if( Menptr[iId].bAssignment == ASSIGNMENT_POW ) + if( pSoldier->bAssignment == ASSIGNMENT_POW ) { // FindFontCenterCoordinates(IMAGE_BOX_X-5,0,IMAGE_BOX_WIDTH, 0,pPOWStrings[ 1 ],CHAR_NAME_FONT, &sX, &sY ); // mprintf(sX+iSlot*IMAGE_BOX_WIDTH, CHAR_NAME_Y+20,pPOWStrings[ 1 ] ); } - else if( Menptr[iId].bAssignment == IN_TRANSIT ) + else if( pSoldier->bAssignment == IN_TRANSIT ) { return; } else { // name of town, if any - bTownId = GetTownIdForSector( Menptr[iId].sSectorX, Menptr[iId].sSectorY ); + bTownId = GetTownIdForSector( pSoldier->sSectorX, pSoldier->sSectorY ); if( bTownId != BLANK_SECTOR ) { From be5c4b16018ebf033787dcf996825a88c908a876 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Tue, 19 Nov 2024 21:41:07 +0200 Subject: [PATCH 124/192] Convert to SoldierID --- Laptop/personnel.cpp | 220 ++++++++++++++++++++----------------------- 1 file changed, 104 insertions(+), 116 deletions(-) diff --git a/Laptop/personnel.cpp b/Laptop/personnel.cpp index 4f985494..4a63b18a 100644 --- a/Laptop/personnel.cpp +++ b/Laptop/personnel.cpp @@ -388,7 +388,7 @@ void UpDateStateOfStartButton( void ); void HandlePersonnelKeyboard( void ); -void DisplayEmploymentinformation( INT32 iId, INT32 iSlot ); +void DisplayEmploymentinformation( SoldierID iId, INT32 iSlot ); @@ -6992,7 +6992,7 @@ BOOLEAN IsPastMercOther( INT32 iId ) } } -void DisplayEmploymentinformation( INT32 iId, INT32 iSlot ) +void DisplayEmploymentinformation( SoldierID iId, INT32 iSlot ) { INT32 iCounter=0; CHAR16 sString[50]; @@ -7011,73 +7011,74 @@ void DisplayEmploymentinformation( INT32 iId, INT32 iSlot ) } } - if( Menptr[iId].flags.uiStatusFlags & SOLDIER_VEHICLE ) + SOLDIERTYPE *pSoldier = iId; + const MERCPROFILESTRUCT *pMercProfile = &gMercProfiles[pSoldier->ubProfile]; + const STRUCT_Records *pRecords = &pMercProfile->records; + + if( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) { return; } // display the stats for a char - for(iCounter=0;iCounter ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC || pSoldier->ubProfile == SLAY ) + { + INT32 iTimeLeftOnContract = CalcTimeLeftOnMercContract( pSoldier ); + + //if the merc is in transit + if( pSoldier->bAssignment == IN_TRANSIT ) { - INT32 iTimeLeftOnContract = CalcTimeLeftOnMercContract( &Menptr[iId] ); - - //if the merc is in transit - if( Menptr[iId ].bAssignment == IN_TRANSIT ) + //and if the time left on the contract is greater than the contract time + if( iTimeLeftOnContract > (INT32)( pSoldier->iTotalContractLength * uiMinutesInDay ) ) { - //and if the ttime left on the cotract is greater then the contract time - if( iTimeLeftOnContract > (INT32)( Menptr[iId].iTotalContractLength * uiMinutesInDay ) ) - { - iTimeLeftOnContract = ( Menptr[iId].iTotalContractLength * uiMinutesInDay ); - } + iTimeLeftOnContract = ( pSoldier->iTotalContractLength * uiMinutesInDay ); } - // if there is going to be a both days and hours left on the contract - if( iTimeLeftOnContract / uiMinutesInDay ) - { - swprintf(sString, L"%d%s %d%s / %d%s",( iTimeLeftOnContract / uiMinutesInDay ), gpStrategicString[ STR_PB_DAYS_ABBREVIATION ], (iTimeLeftOnContract % uiMinutesInDay)/60, gpStrategicString[ STR_PB_HOURS_ABBREVIATION ], Menptr[iId].iTotalContractLength, gpStrategicString[ STR_PB_DAYS_ABBREVIATION ]); - mprintf((INT16)(pPersonnelScreenPoints[iCounter].x+(iSlot*TEXT_BOX_WIDTH)),pPersonnelScreenPoints[iCounter].y,pPersonnelScreenStrings[PRSNL_TXT_CURRENT_CONTRACT]); - } - - //else there is under a day left - else - { - //DEF: removed 2/7/99 - swprintf(sString, L"%d%s / %d%s", (iTimeLeftOnContract % uiMinutesInDay)/60, gpStrategicString[ STR_PB_HOURS_ABBREVIATION ], Menptr[iId].iTotalContractLength, gpStrategicString[ STR_PB_DAYS_ABBREVIATION ]); - mprintf((INT16)(pPersonnelScreenPoints[iCounter].x+(iSlot*TEXT_BOX_WIDTH)),pPersonnelScreenPoints[iCounter].y,pPersonnelScreenStrings[PRSNL_TXT_CURRENT_CONTRACT]); - } - } - else if( Menptr[iId].ubWhatKindOfMercAmI == MERC_TYPE__MERC) + + UINT32 days = iTimeLeftOnContract / uiMinutesInDay; + UINT32 hours = (iTimeLeftOnContract % uiMinutesInDay) / 60; + + // if there is going to be a both days and hours left on the contract + if( days > 0) { -// swprintf(sString, L"%d%s / %d%s",Menptr[iId].iTotalContractLength, gpStrategicString[ STR_PB_DAYS_ABBREVIATION ], ( GetWorldTotalMin( ) -Menptr[iId].iStartContractTime ) / ( 24 * 60 ), gpStrategicString[ STR_PB_DAYS_ABBREVIATION ] ); - - wcscpy( sString, gpStrategicString[ STR_PB_NOTAPPLICABLE_ABBREVIATION ] ); - mprintf((INT16)(pPersonnelScreenPoints[iCounter].x+(iSlot*TEXT_BOX_WIDTH)),pPersonnelScreenPoints[iCounter].y,pPersonnelScreenStrings[PRSNL_TXT_CURRENT_CONTRACT]); + swprintf( sString, L"%d%s %d%s / %d%s", days, gpStrategicString[STR_PB_DAYS_ABBREVIATION], hours, gpStrategicString[STR_PB_HOURS_ABBREVIATION], pSoldier->iTotalContractLength, gpStrategicString[STR_PB_DAYS_ABBREVIATION] ); + mprintf( x, y, pPersonnelScreenStrings[PRSNL_TXT_CURRENT_CONTRACT] ); } + + //else there is under a day left else { - wcscpy( sString, gpStrategicString[ STR_PB_NOTAPPLICABLE_ABBREVIATION ] ); - mprintf((INT16)(pPersonnelScreenPoints[iCounter].x+(iSlot*TEXT_BOX_WIDTH)),pPersonnelScreenPoints[iCounter].y,pPersonnelScreenStrings[PRSNL_TXT_CURRENT_CONTRACT]); + //DEF: removed 2/7/99 + swprintf(sString, L"%d%s / %d%s", hours, gpStrategicString[ STR_PB_HOURS_ABBREVIATION ], pSoldier->iTotalContractLength, gpStrategicString[ STR_PB_DAYS_ABBREVIATION ]); + mprintf( x, y, pPersonnelScreenStrings[PRSNL_TXT_CURRENT_CONTRACT] ); } + + } + else + { + wcscpy( sString, gpStrategicString[ STR_PB_NOTAPPLICABLE_ABBREVIATION ] ); + mprintf( x, y, pPersonnelScreenStrings[PRSNL_TXT_CURRENT_CONTRACT] ); + } #endif - FindFontRightCoordinates((INT16)(pPersonnelScreenPoints[iCounter].x+(iSlot*TEXT_BOX_WIDTH)+Prsnl_DATA_OffSetX),0,TEXT_BOX_WIDTH-20,0,sString, PERS_FONT, &sX, &sY); - mprintf(sX,pPersonnelScreenPoints[iCounter].y,sString); + FindFontRightCoordinates( (INT16)(x + Prsnl_DATA_OffSetX), 0, TEXT_BOX_WIDTH - 20, 0, sString, PERS_FONT, &sX, &sY ); + mprintf( sX, y, sString ); } break; @@ -7086,14 +7087,14 @@ void DisplayEmploymentinformation( INT32 iId, INT32 iSlot ) case 1: // total contract time served - mprintf((INT16)(pPersonnelScreenPoints[iCounter].x+(iSlot*TEXT_BOX_WIDTH)),pPersonnelScreenPoints[iCounter].y,pPersonnelScreenStrings[PRSNL_TXT_TOTAL_SERVICE]); + mprintf( x, y, pPersonnelScreenStrings[PRSNL_TXT_TOTAL_SERVICE] ); //./DEF 2/4/99: total service days used to be calced as 'days -1' - swprintf(sString, L"%d %s",gMercProfiles[Menptr[iId].ubProfile].usTotalDaysServed, gpStrategicString[ STR_PB_DAYS_ABBREVIATION ] ); + swprintf(sString, L"%d %s",pMercProfile->usTotalDaysServed, gpStrategicString[ STR_PB_DAYS_ABBREVIATION ] ); - FindFontRightCoordinates((INT16)(pPersonnelScreenPoints[iCounter].x+(iSlot*TEXT_BOX_WIDTH)+Prsnl_DATA_OffSetX),0,TEXT_BOX_WIDTH-20,0,sString, PERS_FONT, &sX, &sY); - mprintf(sX,pPersonnelScreenPoints[iCounter].y,sString); + FindFontRightCoordinates( (INT16)(x + Prsnl_DATA_OffSetX), 0, TEXT_BOX_WIDTH - 20, 0, sString, PERS_FONT, &sX, &sY ); + mprintf(sX,y,sString); break; // case 13: @@ -7101,16 +7102,16 @@ void DisplayEmploymentinformation( INT32 iId, INT32 iSlot ) // cost (PRSNL_TXT_TOTAL_COST) /* - if( Menptr[iId].ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC) + if( pSoldier->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC) { UINT32 uiDailyCost = 0; - if( Menptr[iId].bTypeOfLastContract == CONTRACT_EXTEND_2_WEEK ) + if( pSoldier->bTypeOfLastContract == CONTRACT_EXTEND_2_WEEK ) { // 2 week contract uiDailyCost = gMercProfiles[ Menptr[ iId ].ubProfile ].uiBiWeeklySalary / 14; } - else if( Menptr[iId].bTypeOfLastContract == CONTRACT_EXTEND_1_WEEK ) + else if( pSoldier->bTypeOfLastContract == CONTRACT_EXTEND_1_WEEK ) { // 1 week contract uiDailyCost = gMercProfiles[ Menptr[ iId ].ubProfile ].uiWeeklySalary / 7; @@ -7123,7 +7124,7 @@ void DisplayEmploymentinformation( INT32 iId, INT32 iSlot ) // swprintf( sString, L"%d",uiDailyCost * Menptr[ iId ].iTotalContractLength ); swprintf( sString, L"%d", gMercProfiles[ Menptr[ iId ].ubProfile ].uiTotalCostToDate ); } - else if( Menptr[iId].ubWhatKindOfMercAmI == MERC_TYPE__MERC) + else if( pSoldier->ubWhatKindOfMercAmI == MERC_TYPE__MERC) { // swprintf( sString, L"%d",gMercProfiles[ Menptr[ iId ].ubProfile ].sSalary * gMercProfiles[ Menptr[ iId ].ubProfile ].iMercMercContractLength ); swprintf( sString, L"%d", gMercProfiles[ Menptr[ iId ].ubProfile ].uiTotalCostToDate ); @@ -7136,7 +7137,7 @@ void DisplayEmploymentinformation( INT32 iId, INT32 iSlot ) swprintf( sString, L"%d", gMercProfiles[ Menptr[ iId ].ubProfile ].uiTotalCostToDate ); } */ - swprintf( sString, L"%d", gMercProfiles[ Menptr[ iId ].ubProfile ].uiTotalCostToDate ); + swprintf( sString, L"%d", pMercProfile->uiTotalCostToDate ); // insert commas and dollar sign InsertCommasForDollarFigure( sString ); @@ -7144,7 +7145,7 @@ void DisplayEmploymentinformation( INT32 iId, INT32 iSlot ) /* DEF:3/19/99: - if( Menptr[iId].ubWhatKindOfMercAmI == MERC_TYPE__MERC ) + if( pSoldier->ubWhatKindOfMercAmI == MERC_TYPE__MERC ) { swprintf( sStringA, L"%s", pPersonnelScreenStrings[ PRSNL_TXT_UNPAID_AMOUNT ] ); } @@ -7154,69 +7155,54 @@ DEF:3/19/99: swprintf( sStringA, L"%s", pPersonnelScreenStrings[ PRSNL_TXT_TOTAL_COST ] ); } - FindFontRightCoordinates((INT16)(pPersonnelScreenPoints[iCounter].x+(iSlot*TEXT_BOX_WIDTH)+Prsnl_DATA_OffSetX),0,TEXT_BOX_WIDTH-20,0,sString, PERS_FONT, &sX, &sY); - mprintf( (INT16)(pPersonnelScreenPoints[iCounter].x +(iSlot*TEXT_BOX_WIDTH) ),pPersonnelScreenPoints[ iCounter ].y,sStringA); + FindFontRightCoordinates( (INT16)(x + Prsnl_DATA_OffSetX), 0, TEXT_BOX_WIDTH - 20, 0, sString, PERS_FONT, &sX, &sY ); + mprintf( x, y, sStringA ); // print contract cost - mprintf( ( INT16 ) ( sX ) , pPersonnelScreenPoints[iCounter].y,sString); + mprintf( sX, y, sString ); - if( Menptr[iId].ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC) + if( pSoldier->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC) { - // daily rate - if( Menptr[iId].bTypeOfLastContract == CONTRACT_EXTEND_2_WEEK ) + if( pSoldier->bTypeOfLastContract == CONTRACT_EXTEND_2_WEEK ) { // 2 week contract - swprintf( sStringA, L"%d", gMercProfiles[Menptr[ iId ].ubProfile].uiBiWeeklySalary / 14 ); - InsertCommasForDollarFigure( sStringA ); + swprintf( sStringA, L"%d", pMercProfile->uiBiWeeklySalary / 14 ); + InsertCommasForDollarFigure( sStringA ); InsertDollarSignInToString( sStringA ); swprintf( sString, L"%s", sStringA ); } - else if( Menptr[iId].bTypeOfLastContract == CONTRACT_EXTEND_1_WEEK ) + else if( pSoldier->bTypeOfLastContract == CONTRACT_EXTEND_1_WEEK ) { // 1 week contract - swprintf( sStringA, L"%d", gMercProfiles[Menptr[ iId ].ubProfile].uiWeeklySalary / 7 ); - InsertCommasForDollarFigure( sStringA ); + swprintf( sStringA, L"%d", pMercProfile->uiWeeklySalary / 7 ); + InsertCommasForDollarFigure( sStringA ); InsertDollarSignInToString( sStringA ); swprintf( sString, L"%s", sStringA ); } else { - - swprintf( sStringA, L"%d", gMercProfiles[Menptr[ iId ].ubProfile].sSalary ); + // daily rate + swprintf( sStringA, L"%d", pMercProfile->sSalary ); InsertCommasForDollarFigure( sStringA ); - InsertDollarSignInToString( sStringA ); + InsertDollarSignInToString( sStringA ); swprintf( sString, L"%s", sStringA ); } } - else if( Menptr[iId].ubWhatKindOfMercAmI == MERC_TYPE__MERC) - { -//DEF: 99/2/7 -// swprintf( sStringA, L"%d", gMercProfiles[Menptr[ iId ].ubProfile].sSalary * Menptr[ iId ].iTotalContractLength); - swprintf( sStringA, L"%d", gMercProfiles[Menptr[ iId ].ubProfile].sSalary ); - InsertCommasForDollarFigure( sStringA ); - InsertDollarSignInToString( sStringA ); - swprintf( sString, L"%s", sStringA ); - } - else { - //Display a $0 amount -// swprintf( sString, L"0" ); -// InsertDollarSignInToString( sString ); - swprintf( sStringA, L"%d", gMercProfiles[Menptr[ iId ].ubProfile].sSalary ); + swprintf( sStringA, L"%d", pMercProfile->sSalary ); InsertCommasForDollarFigure( sStringA ); InsertDollarSignInToString( sStringA ); swprintf( sString, L"%s", sStringA ); } - FindFontRightCoordinates((INT16)(pPersonnelScreenPoints[iCounter].x+(iSlot*TEXT_BOX_WIDTH)+Prsnl_DATA_OffSetX),0,TEXT_BOX_WIDTH-20,0,sString, PERS_FONT, &sX, &sY); + FindFontRightCoordinates( (INT16)(x + Prsnl_DATA_OffSetX), 0, TEXT_BOX_WIDTH - 20, 0, sString, PERS_FONT, &sX, &sY ); -// iCounter++; iCounter++; - // now print daily rate - mprintf( ( INT16 )( sX ),pPersonnelScreenPoints[ iCounter+1 ].y,sString); - mprintf( (INT16)(pPersonnelScreenPoints[iCounter+1].x +(iSlot*TEXT_BOX_WIDTH) ),pPersonnelScreenPoints[ iCounter +1].y, pPersonnelScreenStrings[PRSNL_TXT_DAILY_COST]); + // now print daily rate + mprintf( sX, pPersonnelScreenPoints[iCounter + 1].y, sString ); + mprintf( pPersonnelScreenPoints[iCounter + 1].x + (iSlot * TEXT_BOX_WIDTH), pPersonnelScreenPoints[iCounter + 1].y, pPersonnelScreenStrings[PRSNL_TXT_DAILY_COST] ); break; @@ -7224,11 +7210,11 @@ DEF:3/19/99: // medical deposit //if its a merc merc, display the salary oweing - if( Menptr[iId].ubWhatKindOfMercAmI == MERC_TYPE__MERC ) + if( pSoldier->ubWhatKindOfMercAmI == MERC_TYPE__MERC ) { mprintf((INT16)(pPersonnelScreenPoints[iCounter-1].x+(iSlot*TEXT_BOX_WIDTH)),pPersonnelScreenPoints[iCounter-1].y,pPersonnelScreenStrings[PRSNL_TXT_UNPAID_AMOUNT]); - swprintf( sString, L"%d", gMercProfiles[Menptr[ iId ].ubProfile].sSalary * gMercProfiles[Menptr[ iId ].ubProfile ].iMercMercContractLength ); + swprintf( sString, L"%d", pMercProfile->sSalary * gMercProfiles[Menptr[ iId ].ubProfile ].iMercMercContractLength ); InsertCommasForDollarFigure( sString ); InsertDollarSignInToString( sString ); @@ -7239,7 +7225,7 @@ DEF:3/19/99: { mprintf((INT16)(pPersonnelScreenPoints[iCounter-1].x+(iSlot*TEXT_BOX_WIDTH)),pPersonnelScreenPoints[iCounter-1].y,pPersonnelScreenStrings[PRSNL_TXT_MED_DEPOSIT]); - swprintf(sString, L"%d",gMercProfiles[Menptr[iId].ubProfile].sMedicalDepositAmount); + swprintf(sString, L"%d",pMercProfile->sMedicalDepositAmount); // insert commas and dollar sign InsertCommasForDollarFigure( sString ); @@ -7259,7 +7245,7 @@ DEF:3/19/99: // kills mprintf((INT16)(pPersonnelScreenPoints[20].x+(iSlot*TEXT_BOX_WIDTH)),(pPersonnelScreenPoints[20].y - 12),pPersonnelScreenStrings[PRSNL_TXT_KILLS]); - swprintf(sString, L"%d",(gMercProfiles[Menptr[iId].ubProfile].records.usKillsElites + gMercProfiles[Menptr[iId].ubProfile].records.usKillsRegulars + gMercProfiles[Menptr[iId].ubProfile].records.usKillsAdmins + gMercProfiles[Menptr[iId].ubProfile].records.usKillsHostiles + gMercProfiles[Menptr[iId].ubProfile].records.usKillsCreatures + gMercProfiles[Menptr[iId].ubProfile].records.usKillsZombies + gMercProfiles[Menptr[iId].ubProfile].records.usKillsTanks + gMercProfiles[Menptr[iId].ubProfile].records.usKillsOthers)); + swprintf(sString, L"%d",(pRecords->usKillsElites + pRecords->usKillsRegulars + pRecords->usKillsAdmins + pRecords->usKillsHostiles + pRecords->usKillsCreatures + pRecords->usKillsZombies + pRecords->usKillsTanks + pRecords->usKillsOthers)); FindFontRightCoordinates((INT16)(pPersonnelScreenPoints[20].x+(iSlot*TEXT_BOX_WIDTH)),0,TEXT_BOX_WIDTH-20,0,sString, PERS_FONT, &sX, &sY); mprintf(sX,(pPersonnelScreenPoints[20].y - 12),sString); @@ -7278,13 +7264,13 @@ DEF:3/19/99: MSYS_AddRegion( &gSkillTraitHelpTextRegion[7] ); fAddedTraitRegion[7] = TRUE; // Assign the text - AssignPersonnelKillsHelpText( Menptr[iId].ubProfile ); + AssignPersonnelKillsHelpText( pSoldier->ubProfile ); break; case 15: // assists mprintf((INT16)(pPersonnelScreenPoints[21].x+(iSlot*TEXT_BOX_WIDTH)),(pPersonnelScreenPoints[21].y - 10),pPersonnelScreenStrings[PRSNL_TXT_ASSISTS]); - swprintf(sString, L"%d",(gMercProfiles[Menptr[iId].ubProfile].records.usAssistsMercs + gMercProfiles[Menptr[iId].ubProfile].records.usAssistsMilitia + gMercProfiles[Menptr[iId].ubProfile].records.usAssistsOthers)); + swprintf(sString, L"%d",(pRecords->usAssistsMercs + pRecords->usAssistsMilitia + pRecords->usAssistsOthers)); FindFontRightCoordinates((INT16)(pPersonnelScreenPoints[21].x+(iSlot*TEXT_BOX_WIDTH)),0,TEXT_BOX_WIDTH-20,0,sString, PERS_FONT, &sX, &sY); mprintf(sX,(pPersonnelScreenPoints[21].y - 10),sString); @@ -7302,19 +7288,21 @@ DEF:3/19/99: MSYS_AddRegion( &gSkillTraitHelpTextRegion[8] ); fAddedTraitRegion[8] = TRUE; // Assign the text - AssignPersonnelAssistsHelpText( Menptr[iId].ubProfile ); + AssignPersonnelAssistsHelpText( pSoldier->ubProfile ); break; case 16: + { // shots/hits - mprintf((INT16)(pPersonnelScreenPoints[22].x+(iSlot*TEXT_BOX_WIDTH)),(pPersonnelScreenPoints[22].y - 8),pPersonnelScreenStrings[PRSNL_TXT_HIT_PERCENTAGE]); - uiHits = ( UINT32 )gMercProfiles[Menptr[iId].ubProfile].records.usShotsHit; + mprintf( (INT16)(pPersonnelScreenPoints[22].x + (iSlot * TEXT_BOX_WIDTH)), (pPersonnelScreenPoints[22].y - 8), pPersonnelScreenStrings[PRSNL_TXT_HIT_PERCENTAGE] ); + uiHits = (UINT32)pRecords->usShotsHit; uiHits *= 100; // check we have shot at least once - if( (gMercProfiles[Menptr[iId].ubProfile].records.usShotsFired + gMercProfiles[Menptr[iId].ubProfile].records.usMissilesLaunched + gMercProfiles[Menptr[iId].ubProfile].records.usGrenadesThrown + gMercProfiles[Menptr[iId].ubProfile].records.usKnivesThrown + gMercProfiles[Menptr[iId].ubProfile].records.usBladeAttacks + gMercProfiles[Menptr[iId].ubProfile].records.usHtHAttacks) > 0 ) + UINT32 uiAttacks = pRecords->usShotsFired + pRecords->usMissilesLaunched + pRecords->usGrenadesThrown + pRecords->usKnivesThrown + pRecords->usBladeAttacks + pRecords->usHtHAttacks; + if ( uiAttacks > 0 ) { - uiHits /= ( UINT32 )(gMercProfiles[Menptr[iId].ubProfile].records.usShotsFired + gMercProfiles[Menptr[iId].ubProfile].records.usMissilesLaunched + gMercProfiles[Menptr[iId].ubProfile].records.usGrenadesThrown + gMercProfiles[Menptr[iId].ubProfile].records.usKnivesThrown + gMercProfiles[Menptr[iId].ubProfile].records.usBladeAttacks + gMercProfiles[Menptr[iId].ubProfile].records.usHtHAttacks); + uiHits /= uiAttacks; if ( uiHits > 100 ) uiHits = 100; } @@ -7325,32 +7313,32 @@ DEF:3/19/99: } - swprintf(sString, L"%d %%%%",uiHits); - FindFontRightCoordinates((INT16)(pPersonnelScreenPoints[22].x+(iSlot*TEXT_BOX_WIDTH)),0,TEXT_BOX_WIDTH-20,0,sString, PERS_FONT, &sX, &sY); - sX += StringPixLength( sSpecialCharacters[0], PERS_FONT ); - mprintf(sX,(pPersonnelScreenPoints[22].y - 8),sString); - - GetVideoObject(&hHandle, guiQMark); - BltVideoObject( FRAME_BUFFER, hHandle, 0,(pPersonnelScreenPoints[22].x + 148), ( pPersonnelScreenPoints[22].y - 9 ), VO_BLT_SRCTRANSPARENCY,NULL ); + swprintf( sString, L"%d %%%%", uiHits ); + FindFontRightCoordinates( (INT16)(pPersonnelScreenPoints[22].x + (iSlot * TEXT_BOX_WIDTH)), 0, TEXT_BOX_WIDTH - 20, 0, sString, PERS_FONT, &sX, &sY ); + sX += StringPixLength( sSpecialCharacters[0], PERS_FONT ); + mprintf( sX, (pPersonnelScreenPoints[22].y - 8), sString ); + + GetVideoObject( &hHandle, guiQMark ); + BltVideoObject( FRAME_BUFFER, hHandle, 0, (pPersonnelScreenPoints[22].x + 148), (pPersonnelScreenPoints[22].y - 9), VO_BLT_SRCTRANSPARENCY, NULL ); // Add specific region for fast help window - if( fAddedTraitRegion[9] ) + if ( fAddedTraitRegion[9] ) { MSYS_RemoveRegion( &gSkillTraitHelpTextRegion[9] ); } - MSYS_DefineRegion( &gSkillTraitHelpTextRegion[9], (UINT16)( pPersonnelScreenPoints[22].x + 147 ), (UINT16)( pPersonnelScreenPoints[22].y - 10 ), - (UINT16)( pPersonnelScreenPoints[22].x + 166 ), (UINT16)(pPersonnelScreenPoints[22].y + 1), MSYS_PRIORITY_HIGH, - MSYS_NO_CURSOR, MSYS_NO_CALLBACK, NULL ); + MSYS_DefineRegion( &gSkillTraitHelpTextRegion[9], (UINT16)(pPersonnelScreenPoints[22].x + 147), (UINT16)(pPersonnelScreenPoints[22].y - 10), + (UINT16)(pPersonnelScreenPoints[22].x + 166), (UINT16)(pPersonnelScreenPoints[22].y + 1), MSYS_PRIORITY_HIGH, + MSYS_NO_CURSOR, MSYS_NO_CALLBACK, NULL ); MSYS_AddRegion( &gSkillTraitHelpTextRegion[9] ); fAddedTraitRegion[9] = TRUE; // Assign the text - AssignPersonnelHitPercentageHelpText( Menptr[iId].ubProfile ); - + AssignPersonnelHitPercentageHelpText( pSoldier->ubProfile ); + } break; case 17: // Achievements mprintf((INT16)(pPersonnelScreenPoints[23].x+(iSlot*TEXT_BOX_WIDTH)),(pPersonnelScreenPoints[23].y - 6),pPersonnelScreenStrings[PRSNL_TXT_ACHIEVEMNTS]); - swprintf(sString, L"%d %%%%", CalculateMercsAchievementPercentage( Menptr[iId].ubProfile )); + swprintf(sString, L"%d %%%%", CalculateMercsAchievementPercentage( pSoldier->ubProfile )); FindFontRightCoordinates((INT16)(pPersonnelScreenPoints[23].x+(iSlot*TEXT_BOX_WIDTH)),0,TEXT_BOX_WIDTH-20,0,sString, PERS_FONT, &sX, &sY); sX += StringPixLength( sSpecialCharacters[0], PERS_FONT ); mprintf(sX,(pPersonnelScreenPoints[23].y - 6),sString); @@ -7369,13 +7357,13 @@ DEF:3/19/99: MSYS_AddRegion( &gSkillTraitHelpTextRegion[10] ); fAddedTraitRegion[10] = TRUE; // Assign the text - AssignPersonnelAchievementsHelpText( Menptr[iId].ubProfile ); + AssignPersonnelAchievementsHelpText( pSoldier->ubProfile ); break; case 18: // battles mprintf((INT16)(pPersonnelScreenPoints[24].x+(iSlot*TEXT_BOX_WIDTH)),(pPersonnelScreenPoints[24].y - 4),pPersonnelScreenStrings[PRSNL_TXT_BATTLES]); - swprintf(sString, L"%d",(gMercProfiles[Menptr[iId].ubProfile].records.usBattlesTactical + gMercProfiles[Menptr[iId].ubProfile].records.usBattlesAutoresolve)); + swprintf(sString, L"%d",(pRecords->usBattlesTactical + pRecords->usBattlesAutoresolve)); FindFontRightCoordinates((INT16)(pPersonnelScreenPoints[24].x+(iSlot*TEXT_BOX_WIDTH)),0,TEXT_BOX_WIDTH-20,0,sString, PERS_FONT, &sX, &sY); mprintf(sX,(pPersonnelScreenPoints[24].y - 4),sString); @@ -7393,13 +7381,13 @@ DEF:3/19/99: MSYS_AddRegion( &gSkillTraitHelpTextRegion[11] ); fAddedTraitRegion[11] = TRUE; // Assign the text - AssignPersonnelBattlesHelpText( Menptr[iId].ubProfile ); + AssignPersonnelBattlesHelpText( pSoldier->ubProfile ); break; case 19: // wounds mprintf((INT16)(pPersonnelScreenPoints[25].x+(iSlot*TEXT_BOX_WIDTH)),(pPersonnelScreenPoints[25].y - 2),pPersonnelScreenStrings[PRSNL_TXT_TIMES_WOUNDED]); - swprintf(sString, L"%d",(gMercProfiles[Menptr[iId].ubProfile].records.usTimesWoundedShot + gMercProfiles[Menptr[iId].ubProfile].records.usTimesWoundedStabbed + (gMercProfiles[Menptr[iId].ubProfile].records.usTimesWoundedPunched/2) + gMercProfiles[Menptr[iId].ubProfile].records.usTimesWoundedBlasted)); + swprintf(sString, L"%d",(pRecords->usTimesWoundedShot + pRecords->usTimesWoundedStabbed + (pRecords->usTimesWoundedPunched/2) + pRecords->usTimesWoundedBlasted)); FindFontRightCoordinates((INT16)(pPersonnelScreenPoints[25].x+(iSlot*TEXT_BOX_WIDTH)),0,TEXT_BOX_WIDTH-20,0,sString, PERS_FONT, &sX, &sY); mprintf(sX,(pPersonnelScreenPoints[25].y - 2),sString); @@ -7417,7 +7405,7 @@ DEF:3/19/99: MSYS_AddRegion( &gSkillTraitHelpTextRegion[12] ); fAddedTraitRegion[12] = TRUE; // Assign the text - AssignPersonnelWoundsHelpText( Menptr[iId].ubProfile ); + AssignPersonnelWoundsHelpText( pSoldier->ubProfile ); break; From 8b90c847381633f6e8f35be3239ca6fa1e0a052b Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Tue, 19 Nov 2024 23:20:45 +0200 Subject: [PATCH 125/192] Convert DisplayCharStats() to SoldierID Moved two repeated print calls to their own functions Removed compiler warning about exceeding stack size --- Laptop/personnel.cpp | 275 ++++++++++++--------------------- Tactical/Drugs And Alcohol.cpp | 2 +- Tactical/Drugs And Alcohol.h | 2 +- 3 files changed, 102 insertions(+), 177 deletions(-) diff --git a/Laptop/personnel.cpp b/Laptop/personnel.cpp index 4a63b18a..2afc4075 100644 --- a/Laptop/personnel.cpp +++ b/Laptop/personnel.cpp @@ -327,7 +327,7 @@ void CreatePersonnelButtons( void ); void DeletePersonnelButtons( void ); void DisplayHeader( void ); void DisplayCharName( SoldierID iId, INT32 iSlot ); -void DisplayCharStats(INT32 iId, INT32 iSlot); +void DisplayCharStats(SoldierID iId, INT32 iSlot); void DisplayCharPersonality( INT32 iId, INT32 iSlot ); void SetPersonnelButtonStates( void ); void CreateDestroyButtonsForPersonnelDepartures( void ); @@ -442,7 +442,7 @@ BOOLEAN fAddedTraitRegion[13] = { FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALS void AssignPersonnelCharacterTraitHelpText( UINT8 ubCharacterNumber ); void AssignPersonnelDisabilityHelpText( UINT8 ubDisabilityNumber ); -void AssignPersonnelMultipleDisabilityHelpText( SOLDIERTYPE* pSoldier ); +void AssignPersonnelMultipleDisabilityHelpText( const SOLDIERTYPE* pSoldier ); void AssignPersonnelKillsHelpText( INT32 ubProfile ); void AssignPersonnelAssistsHelpText( INT32 ubProfile ); void AssignPersonnelHitPercentageHelpText( INT32 ubProfile ); @@ -452,7 +452,7 @@ void AssignPersonnelWoundsHelpText( INT32 ubProfile ); INT8 CalculateMercsAchievementPercentage( INT32 ubProfile ); // Flugente: personality info -void AssignPersonalityHelpText( SOLDIERTYPE* pSoldier, MOUSE_REGION* pMouseregion ); +void AssignPersonalityHelpText( const SOLDIERTYPE* pSoldier, MOUSE_REGION* pMouseregion ); BOOLEAN fShowRecordsIfZero = TRUE; @@ -1402,16 +1402,34 @@ Moved so the name of the town will be in the same line as the name return; } +static void PrintStatChange(const INT16 change, const INT32 x, const INT32 y, const STR16 sString) +{ + if ( change ) + { + INT16 sX, sY; -void DisplayCharStats( INT32 iId, INT32 iSlot ) + swprintf( sString, change > 0 ? L"( +%d )" : L"( %d )", change ); + FindFontRightCoordinates( (INT16)(x + TEXT_BOX_WIDTH - 20 + TEXT_DELTA_OFFSET), 0, 30, 0, sString, PERS_FONT, &sX, &sY ); + mprintf( sX, y, sString ); + } +} + +static void PrintCharStatText(const INT32 x, const INT32 y, const INT32 iCounter, const STR16 sString) { - INT32 iCounter = 0; - CHAR16 sString[50]; - // CHAR16 sStringA[ 50 ]; INT16 sX, sY; - UINT32 uiHits = 0; - SOLDIERTYPE *pSoldier = &Menptr[iId]; - BOOLEAN fAmIaRobot = AM_A_ROBOT( pSoldier ); + mprintf( x, y, pPersonnelScreenStrings[iCounter] ); + FindFontRightCoordinates( x, 0, TEXT_BOX_WIDTH - 20, 0, sString, PERS_FONT, &sX, &sY ); + mprintf( sX, y, sString ); +} + +void DisplayCharStats( SoldierID iId, INT32 iSlot ) +{ + CHAR16 apStr[5000]; + CHAR16 sString[50]; + INT16 sX, sY; + const SOLDIERTYPE *pSoldier = iId; + const BOOLEAN fAmIaRobot = AM_A_ROBOT( pSoldier ); + const MERCPROFILESTRUCT *pMercProfile = &gMercProfiles[pSoldier->ubProfile]; // SANDRO - remove the regions for ( INT8 i = 0; i < 13; i++ ) @@ -1423,180 +1441,131 @@ void DisplayCharStats( INT32 iId, INT32 iSlot ) } } + if ( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) { return; } + // display the stats for a char - for ( iCounter = 0; iCounter bAssignment != ASSIGNMENT_POW ) { // Flugente: stats can have gone up or down, find out which - INT16 change = gMercProfiles[Menptr[iId].ubProfile].bLifeDelta - (INT16)(pSoldier->ubCriticalStatDamage[DAMAGED_STAT_HEALTH]); - - if ( change ) - { - swprintf( sString, change > 0 ? L"( +%d )" : L"( %d )", change ); - FindFontRightCoordinates( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH) + TEXT_BOX_WIDTH - 20 + TEXT_DELTA_OFFSET), 0, 30, 0, sString, PERS_FONT, &sX, &sY ); - mprintf( sX, pPersonnelScreenPoints[iCounter].y, sString ); - } - - swprintf( sString, L"%d/%d", Menptr[iId].stats.bLife, Menptr[iId].stats.bLifeMax ); + const INT16 change = pMercProfile->bLifeDelta - (INT16)(pSoldier->ubCriticalStatDamage[DAMAGED_STAT_HEALTH]); + PrintStatChange( change, x, y, sString ); + swprintf( sString, L"%d/%d", pSoldier->stats.bLife, pSoldier->stats.bLifeMax ); } else { swprintf( sString, pPOWStrings[1] ); } - mprintf( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH)), pPersonnelScreenPoints[iCounter].y, pPersonnelScreenStrings[PRSNL_TXT_HEALTH] ); - FindFontRightCoordinates( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH)), 0, TEXT_BOX_WIDTH - 20, 0, sString, PERS_FONT, &sX, &sY ); - mprintf( sX, pPersonnelScreenPoints[iCounter].y, sString ); + PrintCharStatText( x, y, iCounter, sString ); break; case 1: // agility if ( !fAmIaRobot ) { // Flugente: stats can have gone up or down, find out which - INT16 change = gMercProfiles[Menptr[iId].ubProfile].bAgilityDelta - (INT16)(pSoldier->ubCriticalStatDamage[DAMAGED_STAT_AGILITY]); - - if ( change ) - { - swprintf( sString, change > 0 ? L"( +%d )" : L"( %d )", change ); - FindFontRightCoordinates( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH) + TEXT_BOX_WIDTH - 20 + TEXT_DELTA_OFFSET), 0, 30, 0, sString, PERS_FONT, &sX, &sY ); - mprintf( sX, pPersonnelScreenPoints[iCounter].y, sString ); - } - - swprintf( sString, L"%d", Menptr[iId].stats.bAgility ); + INT16 change = pMercProfile->bAgilityDelta - (INT16)(pSoldier->ubCriticalStatDamage[DAMAGED_STAT_AGILITY]); + PrintStatChange( change, x, y, sString ); + swprintf( sString, L"%d", pSoldier->stats.bAgility ); } else { swprintf( sString, L"%s", gpStrategicString[STR_PB_NOTAPPLICABLE_ABBREVIATION] ); } - mprintf( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH)), pPersonnelScreenPoints[iCounter].y, pPersonnelScreenStrings[iCounter] ); - FindFontRightCoordinates( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH)), 0, TEXT_BOX_WIDTH - 20, 0, sString, PERS_FONT, &sX, &sY ); - mprintf( sX, pPersonnelScreenPoints[iCounter].y, sString ); + PrintCharStatText( x, y, iCounter, sString ); break; case 2: // dexterity if ( !fAmIaRobot ) { // Flugente: stats can have gone up or down, find out which - INT16 change = gMercProfiles[Menptr[iId].ubProfile].bDexterityDelta - (INT16)(pSoldier->ubCriticalStatDamage[DAMAGED_STAT_DEXTERITY]); - - if ( change ) - { - swprintf( sString, change > 0 ? L"( +%d )" : L"( %d )", change ); - FindFontRightCoordinates( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH) + TEXT_BOX_WIDTH - 20 + TEXT_DELTA_OFFSET), 0, 30, 0, sString, PERS_FONT, &sX, &sY ); - mprintf( sX, pPersonnelScreenPoints[iCounter].y, sString ); - } - - swprintf( sString, L"%d", Menptr[iId].stats.bDexterity ); + INT16 change = pMercProfile->bDexterityDelta - (INT16)(pSoldier->ubCriticalStatDamage[DAMAGED_STAT_DEXTERITY]); + PrintStatChange( change, x, y, sString ); + swprintf( sString, L"%d", pSoldier->stats.bDexterity ); } else { swprintf( sString, L"%s", gpStrategicString[STR_PB_NOTAPPLICABLE_ABBREVIATION] ); } - mprintf( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH)), pPersonnelScreenPoints[iCounter].y, pPersonnelScreenStrings[iCounter] ); - FindFontRightCoordinates( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH)), 0, TEXT_BOX_WIDTH - 20, 0, sString, PERS_FONT, &sX, &sY ); - mprintf( sX, pPersonnelScreenPoints[iCounter].y, sString ); + PrintCharStatText( x, y, iCounter, sString ); break; case 3: // strength if ( !fAmIaRobot ) { // Flugente: stats can have gone up or down, find out which - INT16 change = gMercProfiles[Menptr[iId].ubProfile].bStrengthDelta - (INT16)(pSoldier->ubCriticalStatDamage[DAMAGED_STAT_STRENGTH]); - - if ( change ) - { - swprintf( sString, change > 0 ? L"( +%d )" : L"( %d )", change ); - FindFontRightCoordinates( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH) + TEXT_BOX_WIDTH - 20 + TEXT_DELTA_OFFSET), 0, 30, 0, sString, PERS_FONT, &sX, &sY ); - mprintf( sX, pPersonnelScreenPoints[iCounter].y, sString ); - } - - swprintf( sString, L"%d", Menptr[iId].stats.bStrength ); + INT16 change = pMercProfile->bStrengthDelta - (INT16)(pSoldier->ubCriticalStatDamage[DAMAGED_STAT_STRENGTH]); + PrintStatChange( change, x, y, sString ); + swprintf( sString, L"%d", pSoldier->stats.bStrength ); } else { swprintf( sString, L"%s", gpStrategicString[STR_PB_NOTAPPLICABLE_ABBREVIATION] ); } - mprintf( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH)), pPersonnelScreenPoints[iCounter].y, pPersonnelScreenStrings[iCounter] ); - FindFontRightCoordinates( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH)), 0, TEXT_BOX_WIDTH - 20, 0, sString, PERS_FONT, &sX, &sY ); - mprintf( sX, pPersonnelScreenPoints[iCounter].y, sString ); + PrintCharStatText( x, y, iCounter, sString ); break; case 4: // leadership if ( !fAmIaRobot ) { // Flugente: stats can have gone up or down, find out which - INT16 change = gMercProfiles[Menptr[iId].ubProfile].bLeadershipDelta - (INT16)(pSoldier->ubCriticalStatDamage[DAMAGED_STAT_LEADERSHIP]); - - if ( change ) - { - swprintf( sString, change > 0 ? L"( +%d )" : L"( %d )", change ); - FindFontRightCoordinates( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH) + TEXT_BOX_WIDTH - 20 + TEXT_DELTA_OFFSET), 0, 30, 0, sString, PERS_FONT, &sX, &sY ); - mprintf( sX, pPersonnelScreenPoints[iCounter].y, sString ); - } - - swprintf( sString, L"%d", Menptr[iId].stats.bLeadership ); + INT16 change = pMercProfile->bLeadershipDelta - (INT16)(pSoldier->ubCriticalStatDamage[DAMAGED_STAT_LEADERSHIP]); + PrintStatChange( change, x, y, sString ); + swprintf( sString, L"%d", pSoldier->stats.bLeadership ); } else { swprintf( sString, L"%s", gpStrategicString[STR_PB_NOTAPPLICABLE_ABBREVIATION] ); } - mprintf( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH)), pPersonnelScreenPoints[iCounter].y, pPersonnelScreenStrings[iCounter] ); - FindFontRightCoordinates( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH)), 0, TEXT_BOX_WIDTH - 20, 0, sString, PERS_FONT, &sX, &sY ); - mprintf( sX, pPersonnelScreenPoints[iCounter].y, sString ); + PrintCharStatText( x, y, iCounter, sString ); break; case 5: // wisdom if ( !fAmIaRobot ) { // Flugente: stats can have gone up or down, find out which - INT16 change = gMercProfiles[Menptr[iId].ubProfile].bWisdomDelta - (INT16)(pSoldier->ubCriticalStatDamage[DAMAGED_STAT_WISDOM]); - - if ( change ) - { - swprintf( sString, change > 0 ? L"( +%d )" : L"( %d )", change ); - FindFontRightCoordinates( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH) + TEXT_BOX_WIDTH - 20 + TEXT_DELTA_OFFSET), 0, 30, 0, sString, PERS_FONT, &sX, &sY ); - mprintf( sX, pPersonnelScreenPoints[iCounter].y, sString ); - } - - swprintf( sString, L"%d", Menptr[iId].stats.bWisdom ); + INT16 change = pMercProfile->bWisdomDelta - (INT16)(pSoldier->ubCriticalStatDamage[DAMAGED_STAT_WISDOM]); + PrintStatChange( change, x, y, sString ); + swprintf( sString, L"%d", pSoldier->stats.bWisdom ); } else { swprintf( sString, L"%s", gpStrategicString[STR_PB_NOTAPPLICABLE_ABBREVIATION] ); } - mprintf( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH)), pPersonnelScreenPoints[iCounter].y, pPersonnelScreenStrings[iCounter] ); - FindFontRightCoordinates( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH)), 0, TEXT_BOX_WIDTH - 20, 0, sString, PERS_FONT, &sX, &sY ); - mprintf( sX, pPersonnelScreenPoints[iCounter].y, sString ); + PrintCharStatText( x, y, iCounter, sString ); break; case 6: // exper if ( !fAmIaRobot ) { - if ( gMercProfiles[Menptr[iId].ubProfile].bExpLevelDelta > 0 ) + if ( pMercProfile->bExpLevelDelta > 0 ) { - swprintf( sString, L"( %+d )", gMercProfiles[Menptr[iId].ubProfile].bExpLevelDelta ); - FindFontRightCoordinates( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH) + TEXT_BOX_WIDTH - 20 + TEXT_DELTA_OFFSET), 0, 30, 0, sString, PERS_FONT, &sX, &sY ); - mprintf( sX, pPersonnelScreenPoints[iCounter].y, sString ); + swprintf( sString, L"( %+d )", pMercProfile->bExpLevelDelta ); + FindFontRightCoordinates( (INT16)(x + TEXT_BOX_WIDTH - 20 + TEXT_DELTA_OFFSET), 0, 30, 0, sString, PERS_FONT, &sX, &sY ); + mprintf( sX, y, sString ); } //else //{ - swprintf( sString, L"%d", Menptr[iId].stats.bExpLevel ); + swprintf( sString, L"%d", pSoldier->stats.bExpLevel ); //} } else @@ -1605,109 +1574,71 @@ void DisplayCharStats( INT32 iId, INT32 iSlot ) } - mprintf( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH)), pPersonnelScreenPoints[iCounter].y, pPersonnelScreenStrings[iCounter] ); - FindFontRightCoordinates( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH)), 0, TEXT_BOX_WIDTH - 20, 0, sString, PERS_FONT, &sX, &sY ); - mprintf( sX, pPersonnelScreenPoints[iCounter].y, sString ); + PrintCharStatText( x, y, iCounter, sString ); break; case 7: //mrkmanship if ( !fAmIaRobot ) { // Flugente: stats can have gone up or down, find out which - INT16 change = gMercProfiles[Menptr[iId].ubProfile].bMarksmanshipDelta - (INT16)(pSoldier->ubCriticalStatDamage[DAMAGED_STAT_MARKSMANSHIP]); - - if ( change ) - { - swprintf( sString, change > 0 ? L"( +%d )" : L"( %d )", change ); - FindFontRightCoordinates( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH) + TEXT_BOX_WIDTH - 20 + TEXT_DELTA_OFFSET), 0, 30, 0, sString, PERS_FONT, &sX, &sY ); - mprintf( sX, pPersonnelScreenPoints[iCounter].y, sString ); - } - - swprintf( sString, L"%d", Menptr[iId].stats.bMarksmanship ); + INT16 change = pMercProfile->bMarksmanshipDelta - (INT16)(pSoldier->ubCriticalStatDamage[DAMAGED_STAT_MARKSMANSHIP]); + PrintStatChange( change, x, y, sString ); + swprintf( sString, L"%d", pSoldier->stats.bMarksmanship ); } else { swprintf( sString, L"%s", gpStrategicString[STR_PB_NOTAPPLICABLE_ABBREVIATION] ); } - mprintf( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH)), pPersonnelScreenPoints[iCounter].y, pPersonnelScreenStrings[iCounter] ); - FindFontRightCoordinates( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH)), 0, TEXT_BOX_WIDTH - 20, 0, sString, PERS_FONT, &sX, &sY ); - mprintf( sX, pPersonnelScreenPoints[iCounter].y, sString ); + PrintCharStatText( x, y, iCounter, sString ); break; case 8: // mech if ( !fAmIaRobot ) { // Flugente: stats can have gone up or down, find out which - INT16 change = gMercProfiles[Menptr[iId].ubProfile].bMechanicDelta - (INT16)(pSoldier->ubCriticalStatDamage[DAMAGED_STAT_MECHANICAL]); - - if ( change ) - { - swprintf( sString, change > 0 ? L"( +%d )" : L"( %d )", change ); - FindFontRightCoordinates( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH) + TEXT_BOX_WIDTH - 20 + TEXT_DELTA_OFFSET), 0, 30, 0, sString, PERS_FONT, &sX, &sY ); - mprintf( sX, pPersonnelScreenPoints[iCounter].y, sString ); - } - - swprintf( sString, L"%d", Menptr[iId].stats.bMechanical ); + INT16 change = pMercProfile->bMechanicDelta - (INT16)(pSoldier->ubCriticalStatDamage[DAMAGED_STAT_MECHANICAL]); + PrintStatChange( change, x, y, sString ); + swprintf( sString, L"%d", pSoldier->stats.bMechanical ); } else { swprintf( sString, L"%s", gpStrategicString[STR_PB_NOTAPPLICABLE_ABBREVIATION] ); } - mprintf( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH)), pPersonnelScreenPoints[iCounter].y, pPersonnelScreenStrings[iCounter] ); - FindFontRightCoordinates( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH)), 0, TEXT_BOX_WIDTH - 20, 0, sString, PERS_FONT, &sX, &sY ); - mprintf( sX, pPersonnelScreenPoints[iCounter].y, sString ); + PrintCharStatText( x, y, iCounter, sString ); break; case 9: // exp if ( !fAmIaRobot ) { // Flugente: stats can have gone up or down, find out which - INT16 change = gMercProfiles[Menptr[iId].ubProfile].bExplosivesDelta - (INT16)(pSoldier->ubCriticalStatDamage[DAMAGED_STAT_EXPLOSIVES]); - - if ( change ) - { - swprintf( sString, change > 0 ? L"( +%d )" : L"( %d )", change ); - FindFontRightCoordinates( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH) + TEXT_BOX_WIDTH - 20 + TEXT_DELTA_OFFSET), 0, 30, 0, sString, PERS_FONT, &sX, &sY ); - mprintf( sX, pPersonnelScreenPoints[iCounter].y, sString ); - } - - swprintf( sString, L"%d", Menptr[iId].stats.bExplosive ); + INT16 change = pMercProfile->bExplosivesDelta - (INT16)(pSoldier->ubCriticalStatDamage[DAMAGED_STAT_EXPLOSIVES]); + PrintStatChange( change, x, y, sString ); + swprintf( sString, L"%d", pSoldier->stats.bExplosive ); } else { swprintf( sString, L"%s", gpStrategicString[STR_PB_NOTAPPLICABLE_ABBREVIATION] ); } - mprintf( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH)), pPersonnelScreenPoints[iCounter].y, pPersonnelScreenStrings[iCounter] ); - FindFontRightCoordinates( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH)), 0, TEXT_BOX_WIDTH - 20, 0, sString, PERS_FONT, &sX, &sY ); - mprintf( sX, pPersonnelScreenPoints[iCounter].y, sString ); + PrintCharStatText( x, y, iCounter, sString ); break; case 10: // med if ( !fAmIaRobot ) { // Flugente: stats can have gone up or down, find out which - INT16 change = gMercProfiles[Menptr[iId].ubProfile].bMedicalDelta - (INT16)(pSoldier->ubCriticalStatDamage[DAMAGED_STAT_MEDICAL]); - - if ( change ) - { - swprintf( sString, change > 0 ? L"( +%d )" : L"( %d )", change ); - FindFontRightCoordinates( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH) + TEXT_BOX_WIDTH - 20 + TEXT_DELTA_OFFSET), 0, 30, 0, sString, PERS_FONT, &sX, &sY ); - mprintf( sX, pPersonnelScreenPoints[iCounter].y, sString ); - } - - swprintf( sString, L"%d", Menptr[iId].stats.bMedical ); + INT16 change = pMercProfile->bMedicalDelta - (INT16)(pSoldier->ubCriticalStatDamage[DAMAGED_STAT_MEDICAL]); + PrintStatChange( change, x, y, sString ); + swprintf( sString, L"%d", pSoldier->stats.bMedical ); } else { swprintf( sString, L"%s", gpStrategicString[STR_PB_NOTAPPLICABLE_ABBREVIATION] ); } - mprintf( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH)), pPersonnelScreenPoints[iCounter].y, pPersonnelScreenStrings[iCounter] ); - FindFontRightCoordinates( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH)), 0, TEXT_BOX_WIDTH - 20, 0, sString, PERS_FONT, &sX, &sY ); - mprintf( sX, pPersonnelScreenPoints[iCounter].y, sString ); + PrintCharStatText( x, y, iCounter, sString ); break; // Added by Flugente @@ -1717,15 +1648,15 @@ void DisplayCharStats( INT32 iId, INT32 iSlot ) // display background if (UsingBackGroundSystem()) { - UINT8 loc = 21; - UINT8 regionnr = 12; + const UINT8 loc = 21; + const UINT8 regionnr = 12; mprintf( (INT16)(pPersonnelScreenPoints[loc].x + (iSlot*TEXT_BOX_WIDTH)), (pPersonnelScreenPoints[loc].y + 15), pPersonnelRecordsHelpTexts[47] ); //L"Background:" - if ( !gMercProfiles[pSoldier->ubProfile].usBackground ) + if ( !pMercProfile->usBackground ) swprintf( sString, pwMiscSectorStrings[3] ); //L"unknown" else - swprintf( sString, zBackground[gMercProfiles[pSoldier->ubProfile].usBackground].szShortName ); + swprintf( sString, zBackground[pMercProfile->usBackground].szShortName ); FindFontRightCoordinates( (INT16)(pPersonnelScreenPoints[loc].x + (iSlot*TEXT_BOX_WIDTH)), 0, TEXT_BOX_WIDTH - 20, 0, sString, PERS_FONT, &sX, &sY ); mprintf( sX, (pPersonnelScreenPoints[loc].y + 15), sString ); @@ -1743,7 +1674,7 @@ void DisplayCharStats( INT32 iId, INT32 iSlot ) fAddedTraitRegion[regionnr] = TRUE; // Info about our background - AssignBackgroundHelpText( gMercProfiles[pSoldier->ubProfile].usBackground, &(gSkillTraitHelpTextRegion[12]) ); + AssignBackgroundHelpText( pMercProfile->usBackground, &(gSkillTraitHelpTextRegion[12]) ); } break; @@ -1752,8 +1683,8 @@ void DisplayCharStats( INT32 iId, INT32 iSlot ) case 17: // sexism, racism, nationalities etc. { - UINT8 loc = 22; - UINT8 regionnr = 8; + const UINT8 loc = 22; + const UINT8 regionnr = 8; mprintf( (INT16)(pPersonnelScreenPoints[loc].x + (iSlot*TEXT_BOX_WIDTH)), (pPersonnelScreenPoints[loc].y + 15), pPersonnelRecordsHelpTexts[48] ); //L"Personality:" @@ -1792,9 +1723,9 @@ void DisplayCharStats( INT32 iId, INT32 iSlot ) mprintf( (INT16)(pPersonnelScreenPoints[23].x + (iSlot*TEXT_BOX_WIDTH)), (pPersonnelScreenPoints[23].y + 15), pPersonnelRecordsHelpTexts[45] ); //L"Attitudes:" if ( gGameOptions.fNewTraitSystem ) - swprintf( sString, gzIMPCharacterTraitText[gMercProfiles[Menptr[iId].ubProfile].bCharacterTrait] ); + swprintf( sString, gzIMPCharacterTraitText[pMercProfile->bCharacterTrait] ); else - swprintf( sString, gzIMPAttitudesText[gMercProfiles[Menptr[iId].ubProfile].bAttitude] ); + swprintf( sString, gzIMPAttitudesText[pMercProfile->bAttitude] ); FindFontRightCoordinates( (INT16)(pPersonnelScreenPoints[23].x + (iSlot*TEXT_BOX_WIDTH)), 0, TEXT_BOX_WIDTH - 20, 0, sString, PERS_FONT, &sX, &sY ); mprintf( sX, (pPersonnelScreenPoints[23].y + 15), sString ); @@ -1819,7 +1750,7 @@ void DisplayCharStats( INT32 iId, INT32 iSlot ) // Only new traits have help text if ( gGameOptions.fNewTraitSystem ) - AssignPersonnelCharacterTraitHelpText( gMercProfiles[Menptr[iId].ubProfile].bCharacterTrait ); + AssignPersonnelCharacterTraitHelpText( pMercProfile->bCharacterTrait ); break; @@ -1864,7 +1795,7 @@ void DisplayCharStats( INT32 iId, INT32 iSlot ) // Assign the text if ( numdisabilities <= 1 ) - AssignPersonnelDisabilityHelpText( gMercProfiles[Menptr[iId].ubProfile].bDisability ); + AssignPersonnelDisabilityHelpText( pMercProfile->bDisability ); else AssignPersonnelMultipleDisabilityHelpText( pSoldier ); } @@ -1899,12 +1830,12 @@ void DisplayCharStats( INT32 iId, INT32 iSlot ) // we also get the number of lines (skills) to be displayed for ( UINT8 ubCnt = 1; ubCnt < NUM_SKILLTRAITS_NT; ubCnt++ ) { - if ( ProfileHasSkillTrait( Menptr[iId].ubProfile, ubCnt ) == 2 ) + if ( ProfileHasSkillTrait( pSoldier->ubProfile, ubCnt ) == 2 ) { ubTempSkillArray[bNumSkillTraits] = (ubCnt + NEWTRAIT_MERCSKILL_EXPERTOFFSET); bNumSkillTraits++; } - else if ( ProfileHasSkillTrait( Menptr[iId].ubProfile, ubCnt ) == 1 ) + else if ( ProfileHasSkillTrait( pSoldier->ubProfile, ubCnt ) == 1 ) { ubTempSkillArray[bNumSkillTraits] = ubCnt; bNumSkillTraits++; @@ -1930,7 +1861,6 @@ void DisplayCharStats( INT32 iId, INT32 iSlot ) fAddedTraitRegion[0] = TRUE; // Assign the text - CHAR16 apStr[5000]; swprintf( apStr, L"" ); AssignPersonnelSkillTraitHelpText( 0, FALSE, (gMercProfiles[iId].ubBodyType == REGMALE), apStr ); @@ -2003,9 +1933,8 @@ void DisplayCharStats( INT32 iId, INT32 iSlot ) if ( fExpert ) traitnr -= NEWTRAIT_MERCSKILL_EXPERTOFFSET; - CHAR16 apStr[5000]; swprintf( apStr, L"" ); - AssignPersonnelSkillTraitHelpText( traitnr, fExpert, (gMercProfiles[Menptr[iId].ubProfile].ubBodyType == REGMALE), apStr ); + AssignPersonnelSkillTraitHelpText( traitnr, fExpert, (pMercProfile->ubBodyType == REGMALE), apStr ); // Set region help text SetRegionFastHelpText( &(gSkillTraitHelpTextRegion[ubCnt]), apStr ); @@ -2046,8 +1975,8 @@ void DisplayCharStats( INT32 iId, INT32 iSlot ) else { INT8 bSkill1 = 0, bSkill2 = 0; - bSkill1 = gMercProfiles[Menptr[iId].ubProfile].bSkillTraits[0]; - bSkill2 = gMercProfiles[Menptr[iId].ubProfile].bSkillTraits[1]; + bSkill1 = pMercProfile->bSkillTraits[0]; + bSkill2 = pMercProfile->bSkillTraits[1]; //if the 2 skills are the same, add the '(expert)' at the end if ( bSkill1 == bSkill2 && bSkill1 != 0 ) @@ -2060,7 +1989,7 @@ void DisplayCharStats( INT32 iId, INT32 iSlot ) //Perform the potential overrun check if ( sX <= iMinimumX ) { - FindFontRightCoordinates( (INT16)(pPersonnelScreenPoints[iCounter].x + (iSlot*TEXT_BOX_WIDTH) + TEXT_BOX_WIDTH - 20 + TEXT_DELTA_OFFSET), 0, 30, 0, sString, PERS_FONT, &sX, &sY ); + FindFontRightCoordinates( (INT16)(x + TEXT_BOX_WIDTH - 20 + TEXT_DELTA_OFFSET), 0, 30, 0, sString, PERS_FONT, &sX, &sY ); sX = (INT16)max( sX, iMinimumX ); } @@ -2078,7 +2007,6 @@ void DisplayCharStats( INT32 iId, INT32 iSlot ) fAddedTraitRegion[0] = TRUE; // Assign the text - CHAR16 apStr[5000]; swprintf( apStr, L"" ); AssignPersonnelSkillTraitHelpText( bSkill1, TRUE, (gMercProfiles[iId].ubBodyType == REGMALE), apStr ); @@ -2112,7 +2040,6 @@ void DisplayCharStats( INT32 iId, INT32 iSlot ) fAddedTraitRegion[0] = TRUE; // Assign the text - CHAR16 apStr[5000]; swprintf( apStr, L"" ); AssignPersonnelSkillTraitHelpText( bSkill1, FALSE, (gMercProfiles[iId].ubBodyType == REGMALE), apStr ); @@ -2147,7 +2074,6 @@ void DisplayCharStats( INT32 iId, INT32 iSlot ) fAddedTraitRegion[1] = TRUE; // Assign the text - CHAR16 apStr[5000]; swprintf( apStr, L"" ); AssignPersonnelSkillTraitHelpText( bSkill2, FALSE, (gMercProfiles[iId].ubBodyType == REGMALE), apStr ); @@ -2178,7 +2104,6 @@ void DisplayCharStats( INT32 iId, INT32 iSlot ) fAddedTraitRegion[0] = TRUE; // Assign the text - CHAR16 apStr[5000]; swprintf( apStr, L"" ); AssignPersonnelSkillTraitHelpText( bSkill1, FALSE, (gMercProfiles[iId].ubBodyType == REGMALE), apStr ); @@ -8823,7 +8748,7 @@ void AssignPersonnelDisabilityHelpText( UINT8 ubDisabilityNumber ) SetRegionHelpEndCallback( &gSkillTraitHelpTextRegion[6], MSYS_NO_CALLBACK ); } -void AssignPersonnelMultipleDisabilityHelpText( SOLDIERTYPE* pSoldier ) +void AssignPersonnelMultipleDisabilityHelpText( const SOLDIERTYPE* pSoldier ) { CHAR16 apStr[1000]; @@ -9303,7 +9228,7 @@ INT8 CalculateMercsAchievementPercentage( INT32 ubProfile ) } // Flugente: personality info -void AssignPersonalityHelpText( SOLDIERTYPE* pSoldier, MOUSE_REGION* pMouseregion ) +void AssignPersonalityHelpText( const SOLDIERTYPE* pSoldier, MOUSE_REGION* pMouseregion ) { CHAR16 apStr[ 4500 ]; CHAR16 atStr[ 260 ]; diff --git a/Tactical/Drugs And Alcohol.cpp b/Tactical/Drugs And Alcohol.cpp index 0c7c281c..60a38884 100644 --- a/Tactical/Drugs And Alcohol.cpp +++ b/Tactical/Drugs And Alcohol.cpp @@ -319,7 +319,7 @@ INT8 GetDrunkLevel( SOLDIERTYPE *pSoldier ) } // does a merc have a disability/personality, or is he under drugs that simulate this? -BOOLEAN DoesMercHaveDisability( SOLDIERTYPE *pSoldier, UINT8 aVal ) +BOOLEAN DoesMercHaveDisability( const SOLDIERTYPE *pSoldier, UINT8 aVal ) { if ( pSoldier->ubProfile != NO_PROFILE ) { diff --git a/Tactical/Drugs And Alcohol.h b/Tactical/Drugs And Alcohol.h index 887a89b7..b0a7dce0 100644 --- a/Tactical/Drugs And Alcohol.h +++ b/Tactical/Drugs And Alcohol.h @@ -66,7 +66,7 @@ void HandleEndTurnDrugAdjustments_New( SOLDIERTYPE *pSoldier ); INT8 GetDrunkLevel( SOLDIERTYPE *pSoldier ); // does a merc have a disability/personality, or is he under drugs that simulate this? -BOOLEAN DoesMercHaveDisability( SOLDIERTYPE *pSoldier, UINT8 aVal ); +BOOLEAN DoesMercHaveDisability( const SOLDIERTYPE *pSoldier, UINT8 aVal ); BOOLEAN DoesMercHavePersonality( SOLDIERTYPE *pSoldier, UINT8 aVal ); //void HandleEndTurnDrugAdjustments( SOLDIERTYPE *pSoldier ); From 698176e8417fab03423a13c47a4dcc71cd3203fc Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Tue, 19 Nov 2024 23:33:11 +0200 Subject: [PATCH 126/192] Convert DisplayCharPersonality() to SoldierID --- Laptop/personnel.cpp | 55 ++++++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/Laptop/personnel.cpp b/Laptop/personnel.cpp index 2afc4075..f0b3e652 100644 --- a/Laptop/personnel.cpp +++ b/Laptop/personnel.cpp @@ -328,7 +328,7 @@ void DeletePersonnelButtons( void ); void DisplayHeader( void ); void DisplayCharName( SoldierID iId, INT32 iSlot ); void DisplayCharStats(SoldierID iId, INT32 iSlot); -void DisplayCharPersonality( INT32 iId, INT32 iSlot ); +void DisplayCharPersonality( SoldierID iId, INT32 iSlot ); void SetPersonnelButtonStates( void ); void CreateDestroyButtonsForPersonnelDepartures( void ); void LoadPersonnelScreenBackgroundGraphics( void ); @@ -2124,11 +2124,12 @@ void DisplayCharStats( SoldierID iId, INT32 iSlot ) } } -void DisplayCharPersonality(INT32 iId, INT32 iSlot) +void DisplayCharPersonality(SoldierID iId, INT32 iSlot) { INT32 iCounter=0; INT16 sX, sY; - SOLDIERTYPE *pSoldier = &Menptr[iId]; + SOLDIERTYPE *pSoldier = iId; + const MERCPROFILESTRUCT *pMercProfile = &gMercProfiles[pSoldier->ubProfile]; // SANDRO - remove the regions for( INT8 i = 0; i < 13; ++i ) @@ -2182,7 +2183,7 @@ void DisplayCharPersonality(INT32 iId, INT32 iSlot) ++region; } - if ( (gMercProfiles[pSoldier->ubProfile].ubMiscFlags3 & PROFILE_MISC_FLAG3_GOODGUY) ) + if ( (pMercProfile->ubMiscFlags3 & PROFILE_MISC_FLAG3_GOODGUY) ) { CHAR16 sStr1[200]; swprintf( sStr1, szLaptopStatText[LAPTOP_STAT_TEXT_GOOD_GUY] ); @@ -2215,7 +2216,7 @@ void DisplayCharPersonality(INT32 iId, INT32 iSlot) if (gGameExternalOptions.fMercGrowthModifiersEnabled) { - if (gMercProfiles[pSoldier->ubProfile].fRegresses) + if (pMercProfile->fRegresses) { CHAR16 sStr2[200]; swprintf(sStr2, szLaptopStatText[LAPTOP_STAT_TEXT_MERC_REGRESSES]); @@ -2236,9 +2237,9 @@ void DisplayCharPersonality(INT32 iId, INT32 iSlot) swprintf(statTxt, szLaptopStatText[LAPTOP_STAT_TEXT_HEALTH_SPEED]); mprintf((INT16)(pPersonnelScreenPoints[loc].x + (iSlot * TEXT_BOX_WIDTH)), (pPersonnelScreenPoints[loc].y + yOffset), statTxt); - if (gMercProfiles[pSoldier->ubProfile].bGrowthModifierLife <= THRESHOLD_FAST) + if (pMercProfile->bGrowthModifierLife <= THRESHOLD_FAST) swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_FAST]); - else if (gMercProfiles[pSoldier->ubProfile].bGrowthModifierLife >= THRESHOLD_SLOW) + else if (pMercProfile->bGrowthModifierLife >= THRESHOLD_SLOW) swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_SLOW]); else swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_AVERAGE]); @@ -2251,9 +2252,9 @@ void DisplayCharPersonality(INT32 iId, INT32 iSlot) swprintf(statTxt, szLaptopStatText[LAPTOP_STAT_TEXT_STRENGTH_SPEED]); mprintf((INT16)(pPersonnelScreenPoints[loc].x + (iSlot * TEXT_BOX_WIDTH)), (pPersonnelScreenPoints[loc].y + yOffset), statTxt); - if (gMercProfiles[pSoldier->ubProfile].bGrowthModifierStrength <= THRESHOLD_FAST) + if (pMercProfile->bGrowthModifierStrength <= THRESHOLD_FAST) swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_FAST]); - else if (gMercProfiles[pSoldier->ubProfile].bGrowthModifierStrength >= THRESHOLD_SLOW) + else if (pMercProfile->bGrowthModifierStrength >= THRESHOLD_SLOW) swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_SLOW]); else swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_AVERAGE]); @@ -2266,9 +2267,9 @@ void DisplayCharPersonality(INT32 iId, INT32 iSlot) swprintf(statTxt, szLaptopStatText[LAPTOP_STAT_TEXT_AGILITY_SPEED]); mprintf((INT16)(pPersonnelScreenPoints[loc].x + (iSlot * TEXT_BOX_WIDTH)), (pPersonnelScreenPoints[loc].y + yOffset), statTxt); - if (gMercProfiles[pSoldier->ubProfile].bGrowthModifierAgility <= THRESHOLD_FAST) + if (pMercProfile->bGrowthModifierAgility <= THRESHOLD_FAST) swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_FAST]); - else if (gMercProfiles[pSoldier->ubProfile].bGrowthModifierAgility >= THRESHOLD_SLOW) + else if (pMercProfile->bGrowthModifierAgility >= THRESHOLD_SLOW) swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_SLOW]); else swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_AVERAGE]); @@ -2281,9 +2282,9 @@ void DisplayCharPersonality(INT32 iId, INT32 iSlot) swprintf(statTxt, szLaptopStatText[LAPTOP_STAT_TEXT_DEXTERITY_SPEED]); mprintf((INT16)(pPersonnelScreenPoints[loc].x + (iSlot * TEXT_BOX_WIDTH)), (pPersonnelScreenPoints[loc].y + yOffset), statTxt); - if (gMercProfiles[pSoldier->ubProfile].bGrowthModifierDexterity <= THRESHOLD_FAST) + if (pMercProfile->bGrowthModifierDexterity <= THRESHOLD_FAST) swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_FAST]); - else if (gMercProfiles[pSoldier->ubProfile].bGrowthModifierDexterity >= THRESHOLD_SLOW) + else if (pMercProfile->bGrowthModifierDexterity >= THRESHOLD_SLOW) swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_SLOW]); else swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_AVERAGE]); @@ -2296,9 +2297,9 @@ void DisplayCharPersonality(INT32 iId, INT32 iSlot) swprintf(statTxt, szLaptopStatText[LAPTOP_STAT_TEXT_WISDOM_SPEED]); mprintf((INT16)(pPersonnelScreenPoints[loc].x + (iSlot * TEXT_BOX_WIDTH)), (pPersonnelScreenPoints[loc].y + yOffset), statTxt); - if (gMercProfiles[pSoldier->ubProfile].bGrowthModifierWisdom <= THRESHOLD_FAST) + if (pMercProfile->bGrowthModifierWisdom <= THRESHOLD_FAST) swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_FAST]); - else if (gMercProfiles[pSoldier->ubProfile].bGrowthModifierWisdom >= THRESHOLD_SLOW) + else if (pMercProfile->bGrowthModifierWisdom >= THRESHOLD_SLOW) swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_SLOW]); else swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_AVERAGE]); @@ -2311,9 +2312,9 @@ void DisplayCharPersonality(INT32 iId, INT32 iSlot) swprintf(statTxt, szLaptopStatText[LAPTOP_STAT_TEXT_MARKSMANSHIP_SPEED]); mprintf((INT16)(pPersonnelScreenPoints[loc].x + (iSlot * TEXT_BOX_WIDTH)), (pPersonnelScreenPoints[loc].y + yOffset), statTxt); - if (gMercProfiles[pSoldier->ubProfile].bGrowthModifierMarksmanship <= THRESHOLD_FAST) + if (pMercProfile->bGrowthModifierMarksmanship <= THRESHOLD_FAST) swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_FAST]); - else if (gMercProfiles[pSoldier->ubProfile].bGrowthModifierMarksmanship >= THRESHOLD_SLOW) + else if (pMercProfile->bGrowthModifierMarksmanship >= THRESHOLD_SLOW) swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_SLOW]); else swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_AVERAGE]); @@ -2326,9 +2327,9 @@ void DisplayCharPersonality(INT32 iId, INT32 iSlot) swprintf(statTxt, szLaptopStatText[LAPTOP_STAT_TEXT_EXPLOSIVES_SPEED]); mprintf((INT16)(pPersonnelScreenPoints[loc].x + (iSlot * TEXT_BOX_WIDTH)), (pPersonnelScreenPoints[loc].y + yOffset), statTxt); - if (gMercProfiles[pSoldier->ubProfile].bGrowthModifierExplosive <= THRESHOLD_FAST) + if (pMercProfile->bGrowthModifierExplosive <= THRESHOLD_FAST) swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_FAST]); - else if (gMercProfiles[pSoldier->ubProfile].bGrowthModifierExplosive >= THRESHOLD_SLOW) + else if (pMercProfile->bGrowthModifierExplosive >= THRESHOLD_SLOW) swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_SLOW]); else swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_AVERAGE]); @@ -2341,9 +2342,9 @@ void DisplayCharPersonality(INT32 iId, INT32 iSlot) swprintf(statTxt, szLaptopStatText[LAPTOP_STAT_TEXT_LEADERSHIP_SPEED]); mprintf((INT16)(pPersonnelScreenPoints[loc].x + (iSlot * TEXT_BOX_WIDTH)), (pPersonnelScreenPoints[loc].y + yOffset), statTxt); - if (gMercProfiles[pSoldier->ubProfile].bGrowthModifierLeadership <= THRESHOLD_FAST) + if (pMercProfile->bGrowthModifierLeadership <= THRESHOLD_FAST) swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_FAST]); - else if (gMercProfiles[pSoldier->ubProfile].bGrowthModifierLeadership >= THRESHOLD_SLOW) + else if (pMercProfile->bGrowthModifierLeadership >= THRESHOLD_SLOW) swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_SLOW]); else swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_AVERAGE]); @@ -2356,9 +2357,9 @@ void DisplayCharPersonality(INT32 iId, INT32 iSlot) swprintf(statTxt, szLaptopStatText[LAPTOP_STAT_TEXT_MEDICAL_SPEED]); mprintf((INT16)(pPersonnelScreenPoints[loc].x + (iSlot * TEXT_BOX_WIDTH)), (pPersonnelScreenPoints[loc].y + yOffset), statTxt); - if (gMercProfiles[pSoldier->ubProfile].bGrowthModifierMedical <= THRESHOLD_FAST) + if (pMercProfile->bGrowthModifierMedical <= THRESHOLD_FAST) swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_FAST]); - else if (gMercProfiles[pSoldier->ubProfile].bGrowthModifierMedical >= THRESHOLD_SLOW) + else if (pMercProfile->bGrowthModifierMedical >= THRESHOLD_SLOW) swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_SLOW]); else swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_AVERAGE]); @@ -2371,9 +2372,9 @@ void DisplayCharPersonality(INT32 iId, INT32 iSlot) swprintf(statTxt, szLaptopStatText[LAPTOP_STAT_TEXT_MECHANICAL_SPEED]); mprintf((INT16)(pPersonnelScreenPoints[loc].x + (iSlot * TEXT_BOX_WIDTH)), (pPersonnelScreenPoints[loc].y + yOffset), statTxt); - if (gMercProfiles[pSoldier->ubProfile].bGrowthModifierMechanical <= THRESHOLD_FAST) + if (pMercProfile->bGrowthModifierMechanical <= THRESHOLD_FAST) swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_FAST]); - else if (gMercProfiles[pSoldier->ubProfile].bGrowthModifierMechanical >= THRESHOLD_SLOW) + else if (pMercProfile->bGrowthModifierMechanical >= THRESHOLD_SLOW) swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_SLOW]); else swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_AVERAGE]); @@ -2386,9 +2387,9 @@ void DisplayCharPersonality(INT32 iId, INT32 iSlot) swprintf(statTxt, szLaptopStatText[LAPTOP_STAT_TEXT_EXPERIENCE_SPEED]); mprintf((INT16)(pPersonnelScreenPoints[loc].x + (iSlot * TEXT_BOX_WIDTH)), (pPersonnelScreenPoints[loc].y + yOffset), statTxt); - if (gMercProfiles[pSoldier->ubProfile].bGrowthModifierExpLevel <= THRESHOLD_FAST) + if (pMercProfile->bGrowthModifierExpLevel <= THRESHOLD_FAST) swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_FAST]); - else if (gMercProfiles[pSoldier->ubProfile].bGrowthModifierExpLevel >= THRESHOLD_SLOW) + else if (pMercProfile->bGrowthModifierExpLevel >= THRESHOLD_SLOW) swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_SLOW]); else swprintf(statTxt, L"%s", szLaptopStatText[LAPTOP_STAT_TEXT_AVERAGE]); From 648a50f1e8931b1ce82b142c9a879ecd11408f93 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 20 Nov 2024 00:01:35 +0200 Subject: [PATCH 127/192] Convert currentTeamList to SoldierID --- Laptop/personnel.cpp | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/Laptop/personnel.cpp b/Laptop/personnel.cpp index f0b3e652..4b513448 100644 --- a/Laptop/personnel.cpp +++ b/Laptop/personnel.cpp @@ -306,7 +306,7 @@ BOOLEAN fCreateRegionsForPastCurrentToggle = FALSE; // WDS - make number of mercenaries, etc. be configurable // List of ids of current team members, dea or alive -std::vector currentTeamList (CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS, -1); +SoldierID currentTeamList[CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS]; // The index of the last current team members int maxCurrentTeamIndex = -1; // The id of currently displayed merc @@ -319,7 +319,7 @@ void LoadPersonnelGraphics( void ); void RemovePersonnelGraphics( void ); void RenderPersonnel( void ); void RenderPersonnelStats(INT32 iId, INT32 iSlot); -void RenderPersonnelFace(INT32 iId, INT32 iSlot, BOOLEAN fDead, BOOLEAN fFired, BOOLEAN fOther ); +void RenderPersonnelFace(SoldierID iId, INT32 iSlot, BOOLEAN fDead, BOOLEAN fFired, BOOLEAN fOther ); void LeftButtonCallBack(GUI_BUTTON *btn,INT32 reason); void RightButtonCallBack(GUI_BUTTON *btn,INT32 reason); void PersonnelPortraitCallback( MOUSE_REGION * pRegion, INT32 iReason ); @@ -552,7 +552,7 @@ void EnterPersonnel( void ) // Clear out the current team list for (unsigned idx=0; idx < giMAXIMUM_NUMBER_OF_PLAYER_SLOTS; idx++) { - currentTeamList[idx] = -1; + currentTeamList[idx] = NOBODY; } // Fill in the current team list @@ -574,7 +574,7 @@ void EnterPersonnel( void ) } } - if (currentTeamList[0] >= 0) + if (currentTeamList[0] < NOBODY) currentTeamIndex = 0; else currentTeamIndex = -1; @@ -813,11 +813,11 @@ void RenderPersonnelStats( INT32 iId, INT32 iSlot ) // ID -> fortlaufende ID, und nicht die mercID // -> bei aktuellen Merc passt es // -> bei departed Merc wird die MercId anstatt der fortlaufenden ID bergeben!! -void RenderPersonnelFace(INT32 iId, INT32 iSlot, BOOLEAN fDead, BOOLEAN fFired, BOOLEAN fOther ) +void RenderPersonnelFace(SoldierID iId, INT32 iSlot, BOOLEAN fDead, BOOLEAN fFired, BOOLEAN fOther ) { // Get the profile id (from profileId or slotId) INT32 profileId = iId; - if (profileId == -1) + if (profileId == NOBODY) { profileId = MercPtrs[iSlot]->ubProfile; } @@ -2582,7 +2582,7 @@ void DisplayPicturesOfCurrentTeam( void ) return; } // if - SOLDIERTYPE *pSoldier = MercPtrs[currentTeamList[currentOnSreenIndex]]; + SOLDIERTYPE *pSoldier = currentTeamList[currentOnSreenIndex]; if ( pSoldier->ubProfile >= 0 ) { @@ -2639,7 +2639,7 @@ void PersonnelPortraitCallback( MOUSE_REGION * pRegion, INT32 iReason ) currentTeamIndex = iPortraitId + currentTeamFirstIndex; fReDrawScreenFlag = TRUE; // if the selected merc is valid, and they are a POW, change to the inventory display - if( currentTeamIndex != -1 && Menptr[currentTeamList[currentTeamIndex]].bAssignment == ASSIGNMENT_POW && gubPersonnelInfoState == PERSONNEL_INV_BTN ) { + if( currentTeamIndex != -1 && currentTeamList[currentTeamIndex]->bAssignment == ASSIGNMENT_POW && gubPersonnelInfoState == PERSONNEL_INV_BTN ) { gubPersonnelInfoState = PERSONNEL_STAT_BTN; } } else { @@ -2683,7 +2683,7 @@ void PersonnelPortraitCallback( MOUSE_REGION * pRegion, INT32 iReason ) guiSliderPosition = 0; //if the selected merc is valid, and they are a POW, change to the inventory display - if( currentTeamIndex != -1 && Menptr[currentTeamList[currentTeamIndex]].bAssignment == ASSIGNMENT_POW && gubPersonnelInfoState == PERSONNEL_INV_BTN) { + if( currentTeamIndex != -1 && currentTeamList[currentTeamIndex]->bAssignment == ASSIGNMENT_POW && gubPersonnelInfoState == PERSONNEL_INV_BTN) { gubPersonnelInfoState = PERSONNEL_STAT_BTN; } } @@ -3048,7 +3048,7 @@ INT32 GetNumberOfInventoryItemsOnCurrentMerc( void ) if (!fCurrentTeamMode) return( 0 ); - SOLDIERTYPE *pSoldier = &Menptr[currentTeamList[currentTeamIndex]]; + SOLDIERTYPE *pSoldier = currentTeamList[currentTeamIndex]; INT32 ubCount = 0; UINT8 invsize = pSoldier->inv.size(); @@ -6177,7 +6177,7 @@ void ATMOtherButtonCallback(GUI_BUTTON *btn,INT32 reason) if (fCurrentTeamMode && currentTeamIndex != -1) { // set soldier - pSoldier = MercPtrs[ currentTeamList[currentTeamIndex] ]; + pSoldier = currentTeamList[currentTeamIndex]; switch( iValue ) { case( OK_ATM ): @@ -6564,11 +6564,11 @@ void UpDateStateOfStartButton( void ) for ( int i = 0; i < PERSONNEL_NUM_BTN; ++i ) EnableButton( giPersonnelATMStartButton[ i ] ); - INT32 iId = currentTeamList[currentTeamIndex]; + SoldierID iId = currentTeamList[currentTeamIndex]; - if (iId != -1) + if (iId != NOBODY) { - if ( Menptr[ iId ].bAssignment == ASSIGNMENT_POW ) + if ( iId->bAssignment == ASSIGNMENT_POW ) { DisableButton( giPersonnelATMStartButton[ PERSONNEL_INV_BTN ] ); @@ -6612,7 +6612,7 @@ void DisplayAmountOnCurrentMerc( void ) pSoldier = NULL; } else { // set soldier - pSoldier = MercPtrs[ currentTeamList[currentTeamIndex] ]; + pSoldier = currentTeamList[currentTeamIndex]; } INT32 iFunds = GetFundsOnMerc( pSoldier ); @@ -6697,7 +6697,7 @@ void HandlePersonnelKeyboard( void ) guiSliderPosition = 0; //if the selected merc is valid, and they are a POW, change to the inventory display - if( currentTeamIndex != -1 && Menptr[currentTeamList[currentTeamIndex]].bAssignment == ASSIGNMENT_POW && gubPersonnelInfoState == PERSONNEL_INV_BTN) + if( currentTeamIndex != -1 && currentTeamList[currentTeamIndex]->bAssignment == ASSIGNMENT_POW && gubPersonnelInfoState == PERSONNEL_INV_BTN) gubPersonnelInfoState = PERSONNEL_EMPLOYMENT_BTN; fPausedReDrawScreenFlag = TRUE; @@ -6718,7 +6718,7 @@ void HandlePersonnelKeyboard( void ) guiSliderPosition = 0; //if the selected merc is valid, and they are a POW, change to the inventory display - if( currentTeamIndex != -1 && Menptr[currentTeamList[currentTeamIndex]].bAssignment == ASSIGNMENT_POW && gubPersonnelInfoState == PERSONNEL_INV_BTN) + if( currentTeamIndex != -1 && currentTeamList[currentTeamIndex]->bAssignment == ASSIGNMENT_POW && gubPersonnelInfoState == PERSONNEL_INV_BTN) gubPersonnelInfoState = PERSONNEL_STAT_BTN; fPausedReDrawScreenFlag = TRUE; From 2a52347198eef2c3cdbdb5a178b1cce1c237d0a9 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 20 Nov 2024 00:04:29 +0200 Subject: [PATCH 128/192] Update personnel.cpp --- Laptop/personnel.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Laptop/personnel.cpp b/Laptop/personnel.cpp index 4b513448..9da05def 100644 --- a/Laptop/personnel.cpp +++ b/Laptop/personnel.cpp @@ -371,7 +371,7 @@ INT32 GetTheStateOfDepartedMerc( INT32 iId ); void DisplayPersonnelTextOnTitleBar( void ); INT32 GetIdOfDepartedMercWithHighestStat( INT32 iStat ); INT32 GetIdOfDepartedMercWithLowestStat( INT32 iStat ); -void RenderInventoryForCharacter( INT32 iId, INT32 iSlot ); +void RenderInventoryForCharacter( SoldierID iId, INT32 iSlot ); void DisplayInventoryForSelectedChar( void ); INT32 GetNumberOfInventoryItemsOnCurrentMerc( void ); void CreateDestroyPersonnelInventoryScrollButtons( void ); @@ -2749,7 +2749,7 @@ void DisplayInventoryForSelectedChar( void ) } } -void RenderInventoryForCharacter( INT32 iId, INT32 iSlot ) +void RenderInventoryForCharacter( SoldierID iId, INT32 iSlot ) { UINT8 ubCounter = 0; SOLDIERTYPE *pSoldier; @@ -2786,7 +2786,7 @@ void RenderInventoryForCharacter( INT32 iId, INT32 iSlot ) // render the bar for the character RenderSliderBarForPersonnelInventory( ); - pSoldier = &Menptr[ iId ]; + pSoldier = iId; //if this is a robot, dont display any inventory if( AM_A_ROBOT( pSoldier ) ) @@ -7140,7 +7140,7 @@ DEF:3/19/99: { mprintf((INT16)(pPersonnelScreenPoints[iCounter-1].x+(iSlot*TEXT_BOX_WIDTH)),pPersonnelScreenPoints[iCounter-1].y,pPersonnelScreenStrings[PRSNL_TXT_UNPAID_AMOUNT]); - swprintf( sString, L"%d", pMercProfile->sSalary * gMercProfiles[Menptr[ iId ].ubProfile ].iMercMercContractLength ); + swprintf( sString, L"%d", pMercProfile->sSalary * pMercProfile->iMercMercContractLength ); InsertCommasForDollarFigure( sString ); InsertDollarSignInToString( sString ); From a670aff29c5dbe9d115beef39237c0c1b314a564 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 20 Nov 2024 00:13:25 +0200 Subject: [PATCH 129/192] Combine loops to check for medics and patients --- Tactical/Auto Bandage.cpp | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/Tactical/Auto Bandage.cpp b/Tactical/Auto Bandage.cpp index a87836e7..1f0f237b 100644 --- a/Tactical/Auto Bandage.cpp +++ b/Tactical/Auto Bandage.cpp @@ -553,7 +553,6 @@ void BeginAutoBandageCallBack( UINT8 bExitValue ) void SetUpAutoBandageUpdatePanel( void ) { - INT32 iNumberDoctoring = 0; INT32 iNumberPatienting = 0; INT32 iNumberOnTeam = 0; @@ -574,24 +573,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++; } } From 235ddfa782d222c6d1a4d62cc4980b42001dd62f Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 20 Nov 2024 00:22:34 +0200 Subject: [PATCH 130/192] Update Game Event Hook.cpp --- Strategic/Game Event Hook.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Strategic/Game Event Hook.cpp b/Strategic/Game Event Hook.cpp index 845c0b6a..241faf49 100644 --- a/Strategic/Game Event Hook.cpp +++ b/Strategic/Game Event Hook.cpp @@ -255,9 +255,10 @@ BOOLEAN ExecuteStrategicEvent( STRATEGICEVENT *pEvent ) 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: From c7e654a1d933dfc1189e1b45fbf82d39a0d4ce90 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 20 Nov 2024 00:28:38 +0200 Subject: [PATCH 131/192] Update Town Militia.cpp --- Strategic/Town Militia.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Strategic/Town Militia.cpp b/Strategic/Town Militia.cpp index 82c3e7df..62ec57e9 100644 --- a/Strategic/Town Militia.cpp +++ b/Strategic/Town Militia.cpp @@ -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! @@ -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 ) { @@ -1552,7 +1552,7 @@ void BuildListOfUnpaidTrainableSectors( UINT8 ubMilitiaType ) else { // handle for tactical - pSoldier = &Menptr[ gusUIFullTargetID ]; + pSoldier = gusUIFullTargetID; iCounter = 0; if (ubMilitiaType == TOWN_MILITIA) From aee7c23aa45f91555110dc52c2af80ec58ee205e Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 20 Nov 2024 00:35:29 +0200 Subject: [PATCH 132/192] Update Air Raid.cpp --- Tactical/Air Raid.cpp | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/Tactical/Air Raid.cpp b/Tactical/Air Raid.cpp index cecc0852..5066e3e0 100644 --- a/Tactical/Air Raid.cpp +++ b/Tactical/Air Raid.cpp @@ -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; SoldierID ubAttackerID; UINT16 usAttackingWeapon; - FLOAT dXPos; - FLOAT dYPos; - INT16 sX; - INT16 sY; + FLOAT dXPos; + FLOAT dYPos; + INT16 sX; + INT16 sY; INT32 sGridNo; @@ -1349,7 +1349,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 +1407,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; From cebd20f5d0c94b34536021193c9fd193d7ebacee Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 20 Nov 2024 00:47:51 +0200 Subject: [PATCH 133/192] Update ShopKeeper Interface.cpp --- Tactical/ShopKeeper Interface.cpp | 35 +++++++++++++------------------ 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/Tactical/ShopKeeper Interface.cpp b/Tactical/ShopKeeper Interface.cpp index 553a2ad7..d1245983 100644 --- a/Tactical/ShopKeeper Interface.cpp +++ b/Tactical/ShopKeeper Interface.cpp @@ -3665,12 +3665,10 @@ void DisplayPlayersOfferArea() //get an updated status from the amount in the pocket if( PlayersOfferArea[ sCnt ].bSlotIdInOtherLocation != -1 && PlayersOfferArea[ sCnt ].ubIdOfMercWhoOwnsTheItem != NO_PROFILE ) { - INT16 sSoldierID; + SoldierID sSoldierID = GetSoldierIDFromMercID( PlayersOfferArea[ sCnt ].ubIdOfMercWhoOwnsTheItem ); + Assert(sSoldierID != NOBODY); - sSoldierID = GetSoldierIDFromMercID( PlayersOfferArea[ sCnt ].ubIdOfMercWhoOwnsTheItem ); - Assert(sSoldierID != -1); - - PlayersOfferArea[ sCnt ].ItemObject[0]->data.money.uiMoneyAmount = Menptr[ sSoldierID ].inv[ PlayersOfferArea[ sCnt ].bSlotIdInOtherLocation ][0]->data.money.uiMoneyAmount; + PlayersOfferArea[ sCnt ].ItemObject[0]->data.money.uiMoneyAmount = sSoldierID->inv[ PlayersOfferArea[ sCnt ].bSlotIdInOtherLocation ][0]->data.money.uiMoneyAmount; PlayersOfferArea[ sCnt ].uiItemPrice = PlayersOfferArea[ sCnt ].ItemObject[0]->data.money.uiMoneyAmount; } } @@ -6489,23 +6487,21 @@ void ShopkeeperAddItemToPool( INT32 sGridNo, OBJECTTYPE *pObject, INT8 bVisible, void IfMercOwnedCopyItemToMercInv( INVENTORY_IN_SLOT *pInv ) { - INT16 sSoldierID; - //if the item picked up was in a previous location, and that location is on a merc's inventory if ( ( pInv->bSlotIdInOtherLocation != -1 ) && ( pInv->ubIdOfMercWhoOwnsTheItem != NO_PROFILE ) ) { // get soldier - sSoldierID = GetSoldierIDFromMercID( pInv->ubIdOfMercWhoOwnsTheItem ); - Assert( sSoldierID != -1 ); - Assert( CanMercInteractWithSelectedShopkeeper( MercPtrs[ sSoldierID ] ) ); + SoldierID sSoldierID = GetSoldierIDFromMercID( pInv->ubIdOfMercWhoOwnsTheItem ); + Assert( sSoldierID != NOBODY ); + Assert( CanMercInteractWithSelectedShopkeeper( sSoldierID ) ); // then it better be a valid slot # - Assert( pInv->bSlotIdInOtherLocation < (INT8)Menptr[ sSoldierID ].inv.size() ); + Assert( pInv->bSlotIdInOtherLocation < (INT8)(sSoldierID->inv.size()) ); // and it better have a valid merc who owned it Assert( pInv->ubIdOfMercWhoOwnsTheItem != NO_PROFILE ); //Copy the object back into that merc's original inventory slot - Menptr[ sSoldierID ].inv[ pInv->bSlotIdInOtherLocation ] = pInv->ItemObject; + sSoldierID->inv[ pInv->bSlotIdInOtherLocation ] = pInv->ItemObject; } } @@ -6521,15 +6517,15 @@ void IfMercOwnedRemoveItemFromMercInv2( UINT8 ubOwnerProfileId, INT16 bOwnerSlot { // and it better have a valid merc who owned it Assert( ubOwnerProfileId != NO_PROFILE ); - INT16 sSoldierID = GetSoldierIDFromMercID( ubOwnerProfileId ); - Assert( sSoldierID != -1 ); + SoldierID sSoldierID = GetSoldierIDFromMercID( ubOwnerProfileId ); + Assert( sSoldierID != NOBODY ); // then it better be a valid slot # - Assert( bOwnerSlotId < (INT8)Menptr[ sSoldierID ].inv.size() ); + Assert( bOwnerSlotId < (INT8)(sSoldierID->inv.size() )); - Assert( CanMercInteractWithSelectedShopkeeper( MercPtrs[ sSoldierID ] ) ); + Assert( CanMercInteractWithSelectedShopkeeper( sSoldierID ) ); //remove the object from that merc's original inventory slot - DeleteObj(&(Menptr[ sSoldierID ].inv[bOwnerSlotId])); + DeleteObj(&(sSoldierID->inv[bOwnerSlotId])); } } @@ -7087,9 +7083,8 @@ UINT32 EvaluateInvSlot( INVENTORY_IN_SLOT *pInvSlot ) //if the dealer is Micky if( gbSelectedArmsDealerID == ARMS_DEALER_MICKY ) { - INT16 sSoldierID; - sSoldierID = GetSoldierIDFromMercID( armsDealerInfo[ gbSelectedArmsDealerID ].ubShopKeeperID ); - if( ( sSoldierID != -1 ) && ( GetDrunkLevel( &Menptr[ sSoldierID ] ) == DRUNK ) ) + SoldierID sSoldierID = GetSoldierIDFromMercID( armsDealerInfo[ gbSelectedArmsDealerID ].ubShopKeeperID ); + if( ( sSoldierID != NOBODY ) && ( GetDrunkLevel( sSoldierID ) == DRUNK ) ) { //Micky is DRUNK, pays more! dPriceModifier = armsDealerInfo[ gbSelectedArmsDealerID ].dSellModifier; From cabb50a361fb471e4b7c86ce39f72ab2928d1a8a Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 20 Nov 2024 00:48:40 +0200 Subject: [PATCH 134/192] Update Game Event Hook.cpp --- Strategic/Game Event Hook.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Strategic/Game Event Hook.cpp b/Strategic/Game Event Hook.cpp index 241faf49..14d920d2 100644 --- a/Strategic/Game Event Hook.cpp +++ b/Strategic/Game Event Hook.cpp @@ -254,12 +254,14 @@ BOOLEAN ExecuteStrategicEvent( STRATEGICEVENT *pEvent ) MercsContractIsFinished( (UINT8) pEvent->uiParam ); break; case EVENT_ADDSOLDIER_TO_UPDATE_BOX: + { // if the grunt is currently active, add to update box SoldierID usID = pEvent->uiParam; - if( usID != NOBODY && usID->bActive ) + if ( usID != NOBODY && usID->bActive ) { AddSoldierToWaitingListQueue( usID ); } + } break; case EVENT_SET_MENU_REASON: AddReasonToWaitingListQueue( (UINT8) pEvent->uiParam ); From e4fe066da0aecf75aab0ffa88d4a8629d615bf9c Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 20 Nov 2024 19:56:30 +0200 Subject: [PATCH 135/192] Fix comment --- Tactical/Soldier Add.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tactical/Soldier Add.cpp b/Tactical/Soldier Add.cpp index a10c6cc2..61e4494c 100644 --- a/Tactical/Soldier Add.cpp +++ b/Tactical/Soldier Add.cpp @@ -1787,7 +1787,7 @@ BOOLEAN IsMercOnTeam(UINT8 ubMercID, BOOLEAN aAlreadyInCountry, BOOLEAN aAlive) } -// GetSoldierIDFromMercID() Gets the Soldier ID from the Merc Profile ID, else returns -1 +// GetSoldierIDFromMercID() Gets the Soldier ID from the Merc Profile ID, else returns NOBODY SoldierID GetSoldierIDFromMercID(UINT8 ubMercID) { SOLDIERTYPE *pTeamSoldier = NULL; From 8e4307b2fb5206d041c84e8ebba0e95ad317cbe4 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 20 Nov 2024 19:56:38 +0200 Subject: [PATCH 136/192] Use SoldierID --- Strategic/LuaInitNPCs.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Strategic/LuaInitNPCs.cpp b/Strategic/LuaInitNPCs.cpp index f8ad68eb..b99141c7 100644 --- a/Strategic/LuaInitNPCs.cpp +++ b/Strategic/LuaInitNPCs.cpp @@ -12034,7 +12034,7 @@ static int l_VisibleTown (lua_State *L) static int l_HireMerc(lua_State *L) { MERC_HIRE_STRUCT HireMercStruct; - INT16 sSoldierID = 0; + SoldierID sSoldierID = NOBODY; INT16 iTotalContract = 7; UINT32 iTimeTillMercArrives = 0; UINT8 n = lua_gettop(L); @@ -12071,8 +12071,8 @@ static int l_HireMerc(lua_State *L) if (!HireMerc(&HireMercStruct)) { sSoldierID = GetSoldierIDFromMercID(ubCurrentSoldier); - if (sSoldierID > -1) - Menptr[sSoldierID].bTypeOfLastContract = CONTRACT_EXTEND_1_WEEK; + if (sSoldierID != NOBODY) + sSoldierID->bTypeOfLastContract = CONTRACT_EXTEND_1_WEEK; gMercProfiles[ubCurrentSoldier].bMercStatus = MERC_OK; From bb1c63d4e8aebc16ac44f21ed4b00c5b314f7607 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 20 Nov 2024 20:12:05 +0200 Subject: [PATCH 137/192] Convert to SoldierID --- Strategic/Game Event Hook.cpp | 4 ++-- Strategic/Strategic Merc Handler.cpp | 12 ++++-------- Strategic/Strategic Merc Handler.h | 5 +++-- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/Strategic/Game Event Hook.cpp b/Strategic/Game Event Hook.cpp index 14d920d2..3a8b9df9 100644 --- a/Strategic/Game Event Hook.cpp +++ b/Strategic/Game Event Hook.cpp @@ -251,7 +251,7 @@ 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: { @@ -432,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: diff --git a/Strategic/Strategic Merc Handler.cpp b/Strategic/Strategic Merc Handler.cpp index e6cae0b5..f510e653 100644 --- a/Strategic/Strategic Merc Handler.cpp +++ b/Strategic/Strategic Merc Handler.cpp @@ -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( UINT16 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( UINT16 ubID ) } // ATE: Called for RPCs who should now complain about no pay... -void RPCWhineAboutNoPay( UINT16 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 ) diff --git a/Strategic/Strategic Merc Handler.h b/Strategic/Strategic Merc Handler.h index 2ea34e9f..4e878f2f 100644 --- a/Strategic/Strategic Merc Handler.h +++ b/Strategic/Strategic Merc Handler.h @@ -3,11 +3,12 @@ //forward declarations of common classes to eliminate includes class SOLDIERTYPE; +struct SoldierID; void StrategicHandlePlayerTeamMercDeath( SOLDIERTYPE *pSoldier ); void MercDailyUpdate(); -void MercsContractIsFinished( UINT16 ubID ); -void RPCWhineAboutNoPay( UINT16 ubID ); +void MercsContractIsFinished( SoldierID ubID ); +void RPCWhineAboutNoPay( SoldierID ubID ); void MercComplainAboutEquipment( UINT8 ubProfileID ); BOOLEAN SoldierHasWorseEquipmentThanUsedTo( SOLDIERTYPE *pSoldier ); void UpdateBuddyAndHatedCounters( void ); From d826491c83153d3662a253b7ffd272cf74b198a0 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 20 Nov 2024 20:26:50 +0200 Subject: [PATCH 138/192] Remove unused function parameter --- Multiplayer/client.cpp | 2 +- Multiplayer/connect.h | 2 +- Tactical/Soldier Create.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Multiplayer/client.cpp b/Multiplayer/client.cpp index 79d30606..efeb2479 100644 --- a/Multiplayer/client.cpp +++ b/Multiplayer/client.cpp @@ -1275,7 +1275,7 @@ UINT8 numenemyLAN( UINT8 ubSectorX, UINT8 ubSectorY ) return ubNumEnemies; } -void send_AI( SOLDIERCREATE_STRUCT *pCreateStruct, UINT16 * pubID ) +void send_AI( SOLDIERCREATE_STRUCT *pCreateStruct ) { AI_STRUCT send_inv; send_inv.standard_data = *pCreateStruct; diff --git a/Multiplayer/connect.h b/Multiplayer/connect.h index 349d524d..a85ea281 100644 --- a/Multiplayer/connect.h +++ b/Multiplayer/connect.h @@ -104,7 +104,7 @@ void send_gui_dir(SOLDIERTYPE *pSoldier, UINT16 usNewDirection); void send_EndTurn( UINT8 ubNextTeam ); -void send_AI( SOLDIERCREATE_STRUCT *pCreateStruct, UINT16 * pubID ); +void send_AI( SOLDIERCREATE_STRUCT *pCreateStruct ); void send_stop (EV_S_STOP_MERC *SStopMerc); diff --git a/Tactical/Soldier Create.cpp b/Tactical/Soldier Create.cpp index ae841fb4..a5e41fd7 100644 --- a/Tactical/Soldier Create.cpp +++ b/Tactical/Soldier Create.cpp @@ -603,7 +603,7 @@ SOLDIERTYPE* TacticalCreateSoldier( SOLDIERCREATE_STRUCT *pCreateStruct, UINT16 } if ( is_server && tbTeam > OUR_TEAM && tbTeam < PLAYER_PLAN ) { - send_AI(pCreateStruct,pubID); + send_AI(pCreateStruct); } if(is_client && !is_server && tfPP==1) { From dbc4135974b235faf43ea4c3b8a05ffa50dc033b Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 20 Nov 2024 20:27:03 +0200 Subject: [PATCH 139/192] Use SoldierID --- Ja2/SaveLoadGame.cpp | 8 +++---- Multiplayer/client.cpp | 8 +++---- Strategic/Auto Resolve.cpp | 2 +- Strategic/Quest Debug System.cpp | 2 +- Tactical/Handle UI Plan.cpp | 10 ++++----- Tactical/Merc Hiring.cpp | 2 +- Tactical/Rotting Corpses.cpp | 16 +++++++------- Tactical/Soldier Create.cpp | 38 ++++++++++++++++---------------- Tactical/Soldier Create.h | 2 +- Tactical/Soldier Init List.cpp | 4 ++-- Tactical/Soldier Profile.cpp | 18 +++++++-------- Tactical/Turn Based Input.cpp | 10 ++++----- 12 files changed, 60 insertions(+), 60 deletions(-) diff --git a/Ja2/SaveLoadGame.cpp b/Ja2/SaveLoadGame.cpp index a85ad173..34f283fe 100644 --- a/Ja2/SaveLoadGame.cpp +++ b/Ja2/SaveLoadGame.cpp @@ -6926,12 +6926,12 @@ BOOLEAN SaveSoldierStructure( HWFILE hFile ) BOOLEAN LoadSoldierStructure( HWFILE hFile ) { - UINT16 cnt; - UINT32 uiNumBytesRead=0; - UINT16 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 diff --git a/Multiplayer/client.cpp b/Multiplayer/client.cpp index efeb2479..e0fbc54a 100644 --- a/Multiplayer/client.cpp +++ b/Multiplayer/client.cpp @@ -1082,7 +1082,7 @@ void recieveHIRE(RPCParameters *rpcParameters) send_hire_struct* sHireMerc = (send_hire_struct*)rpcParameters->input; SOLDIERTYPE *pSoldier; - UINT16 iNewIndex; + SoldierID iNewIndex; SOLDIERCREATE_STRUCT MercCreateStruct; BOOLEAN fReturn = FALSE; @@ -1097,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; @@ -1290,7 +1290,7 @@ void send_AI( SOLDIERCREATE_STRUCT *pCreateStruct ) void recieveAI (RPCParameters *rpcParameters) { - UINT16 iNewIndex; + SoldierID iNewIndex; SOLDIERTYPE *pSoldier; AI_STRUCT* send_inv = (AI_STRUCT*)rpcParameters->input; @@ -1354,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 ); diff --git a/Strategic/Auto Resolve.cpp b/Strategic/Auto Resolve.cpp index e55eb561..cddd2e02 100644 --- a/Strategic/Auto Resolve.cpp +++ b/Strategic/Auto Resolve.cpp @@ -3749,7 +3749,7 @@ void CreateTempPlayerMerc() { SOLDIERCREATE_STRUCT MercCreateStruct; static INT32 iSoldierCount=0; - UINT16 ubID; + SoldierID ubID; //Init the merc create structure with basic information MercCreateStruct.bTeam = SOLDIER_CREATE_AUTO_TEAM; diff --git a/Strategic/Quest Debug System.cpp b/Strategic/Quest Debug System.cpp index 1cd77da1..3b937bb4 100644 --- a/Strategic/Quest Debug System.cpp +++ b/Strategic/Quest Debug System.cpp @@ -2995,7 +2995,7 @@ void AddNPCToGridNo( INT32 iGridNo ) { SOLDIERCREATE_STRUCT MercCreateStruct; INT16 sSectorX, sSectorY; - UINT16 ubID; + SoldierID ubID; GetCurrentWorldSector( &sSectorX, &sSectorY ); MercCreateStruct.bTeam = CIV_TEAM; diff --git a/Tactical/Handle UI Plan.cpp b/Tactical/Handle UI Plan.cpp index de94ba0a..3e2be46a 100644 --- a/Tactical/Handle UI Plan.cpp +++ b/Tactical/Handle UI Plan.cpp @@ -37,12 +37,12 @@ BOOLEAN BeginUIPlan( SOLDIERTYPE *pSoldier ) BOOLEAN AddUIPlan( INT32 sGridNo, UINT8 ubPlanID ) { SOLDIERTYPE *pPlanSoldier; - INT16 sXPos, sYPos; - INT16 sAPCost = 0; - INT8 bDirection; - INT32 iLoop; + INT16 sXPos, sYPos; + INT16 sAPCost = 0; + INT8 bDirection; + INT32 iLoop; SOLDIERCREATE_STRUCT MercCreateStruct; - UINT16 ubNewIndex; + SoldierID ubNewIndex; // Depeding on stance and direction facing, add guy! diff --git a/Tactical/Merc Hiring.cpp b/Tactical/Merc Hiring.cpp index 92410d87..5cdb9f00 100644 --- a/Tactical/Merc Hiring.cpp +++ b/Tactical/Merc Hiring.cpp @@ -127,7 +127,7 @@ UINT16 GetInitialHeliRandomTime(); INT8 HireMerc( MERC_HIRE_STRUCT *pHireMerc) { SOLDIERTYPE *pSoldier; - UINT16 iNewIndex; + SoldierID iNewIndex; UINT8 ubCurrentSoldier = pHireMerc->ubProfileID; MERCPROFILESTRUCT *pMerc; SOLDIERCREATE_STRUCT MercCreateStruct; diff --git a/Tactical/Rotting Corpses.cpp b/Tactical/Rotting Corpses.cpp index 0ca90c94..b1540460 100644 --- a/Tactical/Rotting Corpses.cpp +++ b/Tactical/Rotting Corpses.cpp @@ -1155,14 +1155,14 @@ INT16 FindNearestRottingCorpse( SOLDIERTYPE *pSoldier ) void AddCrowToCorpse( ROTTING_CORPSE *pCorpse ) { SOLDIERCREATE_STRUCT MercCreateStruct; - INT8 ubBodyType = CROW; - UINT16 iNewIndex; - INT32 sGridNo; - UINT8 ubDirection; - SOLDIERTYPE *pSoldier; + INT8 ubBodyType = CROW; + SoldierID iNewIndex; + INT32 sGridNo; + UINT8 ubDirection; + SOLDIERTYPE *pSoldier; //DBrot: More Rooms - //UINT8 ubRoomNum; - UINT16 usRoomNum; + //UINT8 ubRoomNum; + UINT16 usRoomNum; // No crows inside :( if ( InARoom( pCorpse->def.sGridNo, &usRoomNum ) ) { @@ -2918,7 +2918,7 @@ void CreateZombiefromCorpse( ROTTING_CORPSE * pCorpse, UINT16 usAnimState ) MercCreateStruct.fVisible = TRUE; - UINT16 iNewIndex; + SoldierID iNewIndex; if ( TacticalCreateSoldier( &MercCreateStruct, &iNewIndex ) ) { /* certain values have to be set afterwards - the alternative would be to edit each and every function that gets called from TacticalCreateSoldier() subsequently and diff --git a/Tactical/Soldier Create.cpp b/Tactical/Soldier Create.cpp index a5e41fd7..1a2be1a6 100644 --- a/Tactical/Soldier Create.cpp +++ b/Tactical/Soldier Create.cpp @@ -571,7 +571,7 @@ void DecideToAssignSniperOrders( SOLDIERCREATE_STRUCT * pp ) // For this reason, we add a little helper variable that stores such a sector. INT16 gsStrategicDiseaseOriginSector = -1; #pragma optimize("", off) -SOLDIERTYPE* TacticalCreateSoldier( SOLDIERCREATE_STRUCT *pCreateStruct, UINT16 * pubID ) +SOLDIERTYPE* TacticalCreateSoldier( SOLDIERCREATE_STRUCT *pCreateStruct, SoldierID *pubID ) { SOLDIERTYPE Soldier; INT32 cnt; @@ -3076,7 +3076,7 @@ SOLDIERTYPE* TacticalCreateAdministrator() { BASIC_SOLDIERCREATE_STRUCT bp; SOLDIERCREATE_STRUCT pp; - UINT16 ubID; + SoldierID ubID; SOLDIERTYPE * pSoldier; if( guiCurrentScreen == AUTORESOLVE_SCREEN && !gfPersistantPBI ) @@ -3109,7 +3109,7 @@ SOLDIERTYPE* TacticalCreateArmyTroop() { BASIC_SOLDIERCREATE_STRUCT bp; SOLDIERCREATE_STRUCT pp; - UINT16 ubID; + SoldierID ubID; SOLDIERTYPE * pSoldier; if( guiCurrentScreen == AUTORESOLVE_SCREEN && !gfPersistantPBI ) @@ -3143,7 +3143,7 @@ SOLDIERTYPE* TacticalCreateEliteEnemy() { BASIC_SOLDIERCREATE_STRUCT bp; SOLDIERCREATE_STRUCT pp; - UINT16 ubID; + SoldierID ubID; SOLDIERTYPE * pSoldier; if( guiCurrentScreen == AUTORESOLVE_SCREEN && !gfPersistantPBI ) @@ -3185,7 +3185,7 @@ SOLDIERTYPE* TacticalCreateEnemyTank() { BASIC_SOLDIERCREATE_STRUCT bp; SOLDIERCREATE_STRUCT pp; - UINT16 ubID; + SoldierID ubID; SOLDIERTYPE * pSoldier; if( guiCurrentScreen == AUTORESOLVE_SCREEN && !gfPersistantPBI ) @@ -3227,7 +3227,7 @@ SOLDIERTYPE* TacticalCreateEnemyJeep( ) { BASIC_SOLDIERCREATE_STRUCT bp; SOLDIERCREATE_STRUCT pp; - UINT16 ubID; + SoldierID ubID; SOLDIERTYPE * pSoldier; if ( guiCurrentScreen == AUTORESOLVE_SCREEN && !gfPersistantPBI ) @@ -3270,7 +3270,7 @@ SOLDIERTYPE* TacticalCreateEnemyRobot() { BASIC_SOLDIERCREATE_STRUCT bp; SOLDIERCREATE_STRUCT pp; - UINT16 ubID; + SoldierID ubID; SOLDIERTYPE * pSoldier; if ( guiCurrentScreen == AUTORESOLVE_SCREEN && !gfPersistantPBI ) @@ -3313,7 +3313,7 @@ SOLDIERTYPE* TacticalCreateZombie() { BASIC_SOLDIERCREATE_STRUCT bp; SOLDIERCREATE_STRUCT pp; - UINT16 ubID; + SoldierID ubID; SOLDIERTYPE * pSoldier; if( guiCurrentScreen == AUTORESOLVE_SCREEN && !gfPersistantPBI ) @@ -3387,7 +3387,7 @@ SOLDIERTYPE* TacticalCreateMilitia( UINT8 ubMilitiaClass, INT16 sX, INT16 sY ) { BASIC_SOLDIERCREATE_STRUCT bp; SOLDIERCREATE_STRUCT pp; - UINT16 ubID; + SoldierID ubID; SOLDIERTYPE * pSoldier; if (gpBattleGroup && @@ -3428,7 +3428,7 @@ SOLDIERTYPE* TacticalCreateCreature( INT8 bCreatureBodyType ) { BASIC_SOLDIERCREATE_STRUCT bp; SOLDIERCREATE_STRUCT pp; - UINT16 ubID; + SoldierID ubID; SOLDIERTYPE * pSoldier; if( guiCurrentScreen == AUTORESOLVE_SCREEN && !gfPersistantPBI ) @@ -3454,7 +3454,7 @@ SOLDIERTYPE* TacticalCreateArmedCivilian( UINT8 usSoldierClass ) { BASIC_SOLDIERCREATE_STRUCT bp; SOLDIERCREATE_STRUCT pp; - UINT16 ubID; + SoldierID ubID; SOLDIERTYPE * pSoldier = NULL; // this needs the covert ops trait, and thus the new trait system @@ -3503,9 +3503,9 @@ SOLDIERTYPE* TacticalCreateCivilian( INT32 sGridNo, UINT8 usCivilianGroup, INT8 if ( guiCurrentScreen == AUTORESOLVE_SCREEN ) return NULL; - UINT16 ubID = NOBODY; - SOLDIERTYPE* pSoldier = NULL; - SOLDIERCREATE_STRUCT MercCreateStruct; + SoldierID ubID = NOBODY; + SOLDIERTYPE* pSoldier = NULL; + SOLDIERCREATE_STRUCT MercCreateStruct; MercCreateStruct.initialize( ); MercCreateStruct.bTeam = CIV_TEAM; @@ -3602,7 +3602,7 @@ SOLDIERTYPE* TacticalCreateEnemyAssassin(UINT8 disguisetype) { BASIC_SOLDIERCREATE_STRUCT bp; SOLDIERCREATE_STRUCT pp; - UINT16 ubID; + SoldierID ubID; SOLDIERTYPE * pSoldier; // this needs the covert ops trait, and thus the new trait system @@ -3667,7 +3667,7 @@ SOLDIERTYPE* TacticalCreateBandit() { BASIC_SOLDIERCREATE_STRUCT bp; SOLDIERCREATE_STRUCT pp; - UINT16 ubID; + SoldierID ubID; SOLDIERTYPE * pSoldier; if ( guiCurrentScreen == AUTORESOLVE_SCREEN && !gfPersistantPBI ) @@ -3858,7 +3858,7 @@ void CreatePrisonerOfWar() } SOLDIERCREATE_STRUCT MercCreateStruct; - UINT16 ubID; + SoldierID ubID; static INT8 bPowBodyType = REGMALE; @@ -3940,7 +3940,7 @@ void CreateDownedPilot( ) while ( TileIsOutOfBounds( sGridNo ) || FindStructure( sGridNo, STRUCTURE_BLOCKSMOVES ) || TERRAIN_IS_WATER( gpWorldLevelData[sGridNo].ubTerrainID ) || GridNoNearPlayerMercs( sGridNo, 25 ) ); SOLDIERCREATE_STRUCT MercCreateStruct; - UINT16 ubID; + SoldierID ubID; MercCreateStruct.initialize( ); MercCreateStruct.bTeam = CIV_TEAM; @@ -4102,7 +4102,7 @@ void QuickCreateProfileMerc( INT8 bTeam, UINT8 ubProfileID ) // Create guy # X SOLDIERCREATE_STRUCT MercCreateStruct; INT16 sWorldX, sWorldY, sSectorX, sSectorY, sGridX, sGridY; - UINT16 ubID; + SoldierID ubID; INT32 usMapPos; if ( GetMouseXY( &sGridX, &sGridY ) ) diff --git a/Tactical/Soldier Create.h b/Tactical/Soldier Create.h index 03d42673..a7b5037c 100644 --- a/Tactical/Soldier Create.h +++ b/Tactical/Soldier Create.h @@ -460,7 +460,7 @@ void RandomizeNewSoldierStats( SOLDIERCREATE_STRUCT *pCreateStruct ); //Kris: //Modified return type from BOOLEAN to SOLDIERTYPE* -SOLDIERTYPE* TacticalCreateSoldier( SOLDIERCREATE_STRUCT *pCreateStruct, UINT16 * pubID ); +SOLDIERTYPE* TacticalCreateSoldier( SOLDIERCREATE_STRUCT *pCreateStruct, SoldierID *pubID ); //Randomly generated enemies used by strategic AI. SOLDIERTYPE* TacticalCreateAdministrator(); diff --git a/Tactical/Soldier Init List.cpp b/Tactical/Soldier Init List.cpp index 3db1f288..9568210e 100644 --- a/Tactical/Soldier Init List.cpp +++ b/Tactical/Soldier Init List.cpp @@ -582,7 +582,7 @@ BOOLEAN AddPlacementToWorld( SOLDIERINITNODE *curr, GROUP *pGroup = NULL ) UINT8 ubProfile; SOLDIERCREATE_STRUCT tempDetailedPlacement; SOLDIERTYPE *pSoldier; - UINT16 ubID; + SoldierID ubID; DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("AddPlacementToWorld")); // First check if this guy has a profile and if so check his location such that it matches! @@ -2659,7 +2659,7 @@ void AddProfilesUsingProfileInsertionData() if( !pSoldier ) { //Create a new soldier, as this one doesn't exist SOLDIERCREATE_STRUCT MercCreateStruct; - UINT16 ubID; + SoldierID ubID; //Set up the create struct so that we can properly create the profile soldier. MercCreateStruct.initialize(); diff --git a/Tactical/Soldier Profile.cpp b/Tactical/Soldier Profile.cpp index 449277c2..f5d9a379 100644 --- a/Tactical/Soldier Profile.cpp +++ b/Tactical/Soldier Profile.cpp @@ -1559,19 +1559,19 @@ SOLDIERTYPE * FindSoldierByProfileID( UINT8 ubProfileID, BOOLEAN fPlayerMercsOnl SOLDIERTYPE *ChangeSoldierTeam( SOLDIERTYPE *pSoldier, UINT8 ubTeam ) { - UINT16 ubID; - SOLDIERTYPE *pNewSoldier = NULL; + SoldierID ubID; + SOLDIERTYPE *pNewSoldier = NULL; SOLDIERCREATE_STRUCT MercCreateStruct; - UINT32 cnt; - INT32 sOldGridNo; + UINT32 cnt; + INT32 sOldGridNo; - UINT16 ubOldID; - UINT32 uiOldUniqueId; + SoldierID ubOldID; + UINT32 uiOldUniqueId; - UINT32 uiSlot; - SOLDIERTYPE *pGroupMember; + UINT32 uiSlot; + SOLDIERTYPE *pGroupMember; - BOOLEAN success; + BOOLEAN success; DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("ChangeSoldierTeam")); diff --git a/Tactical/Turn Based Input.cpp b/Tactical/Turn Based Input.cpp index 58602825..4572c033 100644 --- a/Tactical/Turn Based Input.cpp +++ b/Tactical/Turn Based Input.cpp @@ -5471,7 +5471,7 @@ void CreateNextCivType() MercCreateStruct.sInsertionGridNo = usMapPos; RandomizeNewSoldierStats( &MercCreateStruct ); - UINT16 iNewIndex; + SoldierID iNewIndex; if ( TacticalCreateSoldier( &MercCreateStruct, &iNewIndex ) ) { AddSoldierToSector( iNewIndex ); @@ -5518,7 +5518,7 @@ void CreateCow() MercCreateStruct.sInsertionGridNo = usMapPos; RandomizeNewSoldierStats( &MercCreateStruct ); - UINT16 iNewIndex; + SoldierID iNewIndex; if ( TacticalCreateSoldier( &MercCreateStruct, &iNewIndex ) ) { AddSoldierToSector( iNewIndex ); @@ -5547,7 +5547,7 @@ void CreateBloodCat() MercCreateStruct.sInsertionGridNo = usMapPos; RandomizeNewSoldierStats( &MercCreateStruct ); - UINT16 iNewIndex; + SoldierID iNewIndex; if ( TacticalCreateSoldier( &MercCreateStruct, &iNewIndex ) ) { AddSoldierToSector( iNewIndex ); @@ -5577,7 +5577,7 @@ void CreatePlayerControlledCow() RandomizeNewSoldierStats( &MercCreateStruct ); - UINT16 iNewIndex; + SoldierID iNewIndex; if ( TacticalCreateSoldier( &MercCreateStruct, &iNewIndex ) ) { AddSoldierToSector( iNewIndex ); @@ -5642,7 +5642,7 @@ void CreatePlayerControlledMonster() if ( GetMouseMapPos( &usMapPos ) ) { SOLDIERCREATE_STRUCT MercCreateStruct; - UINT16 iNewIndex; + SoldierID iNewIndex; MercCreateStruct.ubProfile = NO_PROFILE; MercCreateStruct.sSectorX = gWorldSectorX; From 8856813768dfacc9ae15116b469a64a06e36d245 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 20 Nov 2024 21:03:54 +0200 Subject: [PATCH 140/192] Lessen copy & paste --- Tactical/Auto Bandage.cpp | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/Tactical/Auto Bandage.cpp b/Tactical/Auto Bandage.cpp index 1f0f237b..4f2cd888 100644 --- a/Tactical/Auto Bandage.cpp +++ b/Tactical/Auto Bandage.cpp @@ -1024,7 +1024,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 @@ -1040,21 +1040,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 @@ -1073,21 +1076,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 From 3f4c94642e01d2bbe5a0cbc449334b4764de0aaf Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 20 Nov 2024 21:04:12 +0200 Subject: [PATCH 141/192] Fix compiler warnings --- Multiplayer/client.cpp | 6 +++--- Multiplayer/server.cpp | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Multiplayer/client.cpp b/Multiplayer/client.cpp index e0fbc54a..8e1229d4 100644 --- a/Multiplayer/client.cpp +++ b/Multiplayer/client.cpp @@ -3050,7 +3050,7 @@ void send_grenade_result (float xPos, float yPos, float zPos, INT32 sGridNo, Sol #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 @@ -3074,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 @@ -3167,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 diff --git a/Multiplayer/server.cpp b/Multiplayer/server.cpp index c1829415..7f5b4eba 100644 --- a/Multiplayer/server.cpp +++ b/Multiplayer/server.cpp @@ -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 } From 63fe0be512396e2a6b3dcfd0c45c1fc9f35acce7 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 20 Nov 2024 21:10:44 +0200 Subject: [PATCH 142/192] Use SoldierID Rename function parameter to make it clear it needs to be profileID Change the parameter type to UINT8 --- Strategic/Quest Debug System.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Strategic/Quest Debug System.cpp b/Strategic/Quest Debug System.cpp index 3b937bb4..589a853b 100644 --- a/Strategic/Quest Debug System.cpp +++ b/Strategic/Quest Debug System.cpp @@ -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 @@ -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,20 +3664,20 @@ void IncrementActiveDropDownBox( INT16 sIncrementValue ) } -INT16 IsMercInTheSector( UINT16 usMercID ) +SoldierID IsMercInTheSector( UINT8 ubMercProfileID ) { 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 ); } From 29354135dc1776338310c09b009741b2eb38af29 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 20 Nov 2024 21:14:10 +0200 Subject: [PATCH 143/192] Use SoldierID --- Editor/EditorMercs.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Editor/EditorMercs.cpp b/Editor/EditorMercs.cpp index d53bb201..7a82931a 100644 --- a/Editor/EditorMercs.cpp +++ b/Editor/EditorMercs.cpp @@ -559,7 +559,7 @@ void AddMercToWorld( INT32 iMapIndex ) if( IsLocationSittable( iMapIndex, gfRoofPlacement ) ) { - UINT16 ubID; + SoldierID ubID; INT16 sSectorX, sSectorY; SOLDIERINITNODE *pNode; @@ -3783,7 +3783,7 @@ void PasteMercPlacement( INT32 iMapIndex ) if( IsLocationSittable( iMapIndex, gfRoofPlacement ) ) { - UINT16 ubID; + SoldierID ubID; INT16 sSectorX, sSectorY; SOLDIERINITNODE *pNode; From 9d0ec49e88cb00db71ecd0a7372c20a77b84989e Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 20 Nov 2024 21:17:19 +0200 Subject: [PATCH 144/192] Use SoldierID --- Strategic/Strategic Movement.cpp | 18 +++++++++--------- Strategic/Strategic Movement.h | 6 +++--- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Strategic/Strategic Movement.cpp b/Strategic/Strategic Movement.cpp index 323f9100..426a8832 100644 --- a/Strategic/Strategic Movement.cpp +++ b/Strategic/Strategic Movement.cpp @@ -4310,12 +4310,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; @@ -4350,10 +4350,10 @@ BOOLEAN LoadPlayerGroupList( HWFILE hFile, GROUP **pGroup ) sTempID = GetSoldierIDFromMercID( pTemp->ubProfileID ); //Should never happen - Assert( sTempID != -1 ); - pTemp->ubID = (UINT16) sTempID; + Assert( sTempID != NOBODY ); + pTemp->ubID = sTempID; - pTemp->pSoldier = &Menptr[ pTemp->ubID ]; + pTemp->pSoldier = pTemp->ubID; pTemp->next = NULL; diff --git a/Strategic/Strategic Movement.h b/Strategic/Strategic Movement.h index 1acd86d3..6f29c969 100644 --- a/Strategic/Strategic Movement.h +++ b/Strategic/Strategic Movement.h @@ -52,10 +52,10 @@ typedef struct WAYPOINT typedef struct PLAYERGROUP { - UINT8 ubProfileID; //SAVE THIS VALUE ONLY. The others are temp (for quick access) - UINT16 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; From 65a8b4fd7712af6f2895c4cdf089ac71ec2831d0 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 20 Nov 2024 21:19:28 +0200 Subject: [PATCH 145/192] Use SoldierID --- Tactical/Merc Hiring.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Tactical/Merc Hiring.cpp b/Tactical/Merc Hiring.cpp index 5cdb9f00..9cc5525b 100644 --- a/Tactical/Merc Hiring.cpp +++ b/Tactical/Merc Hiring.cpp @@ -211,18 +211,18 @@ INT8 HireMerc( MERC_HIRE_STRUCT *pHireMerc) // make an objecttype CreateItem(LETTER, 100, &gTempObject); // Give it - fReturn = AutoPlaceObject( MercPtrs[iNewIndex], &gTempObject, FALSE ); + fReturn = AutoPlaceObject( iNewIndex, &gTempObject, FALSE ); // CHRISL: This condition should resolve the issue of the letter not being issued to the first merc if(!fReturn) { if (UsingNewInventorySystem()) { - (MercPtrs[iNewIndex]->inv[NUM_INV_SLOTS-1]) = gTempObject; + (iNewIndex->inv[NUM_INV_SLOTS-1]) = gTempObject; fReturn=TRUE; } else { - (MercPtrs[iNewIndex]->inv[SMALLPOCK8POS]) = gTempObject; + (iNewIndex->inv[SMALLPOCK8POS]) = gTempObject; fReturn = TRUE; } } @@ -239,7 +239,7 @@ INT8 HireMerc( MERC_HIRE_STRUCT *pHireMerc) //record how long the merc will be gone for pMerc->bMercStatus = (UINT8)pHireMerc->iTotalContractLength; - pSoldier = &Menptr[iNewIndex]; + pSoldier = iNewIndex; //Copy over insertion data.... pSoldier->ubStrategicInsertionCode = pHireMerc->ubInsertionCode; From 7fffcd295c2fe1dc81e118f30240ff685126a40b Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 20 Nov 2024 21:27:18 +0200 Subject: [PATCH 146/192] Simplify function --- Tactical/Overhead.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index 21d70934..76d72e56 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -8602,14 +8602,15 @@ BOOLEAN KillIncompacitatedEnemyInSector( ) { // KIll...... // SANDRO - if the soldier is bleeding out, consider this damage as done by the last attacker + SoldierID usAttacker = NOBODY; if ( pTeamSoldier->ubAttackerID != NOBODY ) - pTeamSoldier->SoldierTakeDamage( ANIM_CROUCH, pTeamSoldier->stats.bLife, 100, TAKE_DAMAGE_BLOODLOSS, pTeamSoldier->ubAttackerID, NOWHERE, 0, TRUE ); + usAttacker = pTeamSoldier->ubAttackerID; else if ( pTeamSoldier->ubPreviousAttackerID != NOBODY ) - pTeamSoldier->SoldierTakeDamage( ANIM_CROUCH, pTeamSoldier->stats.bLife, 100, TAKE_DAMAGE_BLOODLOSS, pTeamSoldier->ubPreviousAttackerID, NOWHERE, 0, TRUE ); + usAttacker = pTeamSoldier->ubPreviousAttackerID; else if ( pTeamSoldier->ubNextToPreviousAttackerID != NOBODY ) - pTeamSoldier->SoldierTakeDamage( ANIM_CROUCH, pTeamSoldier->stats.bLife, 100, TAKE_DAMAGE_BLOODLOSS, pTeamSoldier->ubNextToPreviousAttackerID, NOWHERE, 0, TRUE ); - else - pTeamSoldier->SoldierTakeDamage( ANIM_CROUCH, pTeamSoldier->stats.bLife, 100, TAKE_DAMAGE_BLOODLOSS, NOBODY, NOWHERE, 0, TRUE ); + usAttacker = pTeamSoldier->ubNextToPreviousAttackerID; + + pTeamSoldier->SoldierTakeDamage( ANIM_CROUCH, pTeamSoldier->stats.bLife, 100, TAKE_DAMAGE_BLOODLOSS, usAttacker, NOWHERE, 0, TRUE ); fReturnVal = TRUE; } From 58bfffff5519541a43945b378a6b87d0e962bc42 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 20 Nov 2024 21:27:46 +0200 Subject: [PATCH 147/192] Simplify if checks --- Tactical/Overhead.cpp | 71 +++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 37 deletions(-) diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index 76d72e56..0b28c4e0 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -6411,9 +6411,9 @@ void CommonEnterCombatModeCode( ) // Loop through all mercs and make go for ( pSoldier = Menptr, cnt = 0; cnt < TOTAL_SOLDIERS; pSoldier++, ++cnt ) { - if ( pSoldier && pSoldier->bActive ) + if ( pSoldier->bActive && pSoldier->bInSector ) { - if ( pSoldier->bInSector && pSoldier->ubBodyType != CROW ) + if ( pSoldier->ubBodyType != CROW ) { // Set some flags for quotes pSoldier->usQuoteSaidFlags &= (~SOLDIER_QUOTE_SAID_IN_SHIT ); @@ -6606,45 +6606,42 @@ void ExitCombatMode( ) // Loop through all mercs and make go for ( pSoldier = Menptr, cnt = 0; cnt < TOTAL_SOLDIERS; pSoldier++, cnt++ ) { - if ( pSoldier->bActive ) + if ( pSoldier->bActive && pSoldier->bInSector ) { - if ( pSoldier->bInSector ) + // Reset some flags + if ( pSoldier->flags.fNoAPToFinishMove && pSoldier->stats.bLife >= OKLIFE ) { - // Reset some flags - if ( pSoldier->flags.fNoAPToFinishMove && pSoldier->stats.bLife >= OKLIFE ) + pSoldier->AdjustNoAPToFinishMove( FALSE ); + + // ary-05/05/2009 : fix lower ready weapons + //previously "ready weapon" state was being dropped in a couple of cases + //the fix involves bypassing the reset animation state for the various "ready weapon" types + //since this is a reset animation function, we should be VERY specific about when and what we dont reset + + UINT16 test; + test = pSoldier->usAnimState; + if (!( test == AIM_RIFLE_STAND || test == AIM_RIFLE_CROUCH || + test == AIM_RIFLE_PRONE || test == AIM_DUAL_STAND || + test == AIM_DUAL_CROUCH || test == AIM_DUAL_PRONE + )) { - pSoldier->AdjustNoAPToFinishMove( FALSE ); - - // ary-05/05/2009 : fix lower ready weapons - //previously "ready weapon" state was being dropped in a couple of cases - //the fix involves bypassing the reset animation state for the various "ready weapon" types - //since this is a reset animation function, we should be VERY specific about when and what we dont reset - - UINT16 test; - test = pSoldier->usAnimState; - if (!( test == AIM_RIFLE_STAND || test == AIM_RIFLE_CROUCH || - test == AIM_RIFLE_PRONE || test == AIM_DUAL_STAND || - test == AIM_DUAL_CROUCH || test == AIM_DUAL_PRONE - )) - { - pSoldier->SoldierGotoStationaryStance( ); - } - } - - //Cancel pending events - pSoldier->usPendingAnimation = NO_PENDING_ANIMATION; - pSoldier->ubPendingDirection = NO_PENDING_DIRECTION; - pSoldier->aiData.ubPendingAction = NO_PENDING_ACTION; - - // Reset moved flag - pSoldier->aiData.bMoved = FALSE; - - // Set final destination - pSoldier->pathing.sFinalDestination = pSoldier->sGridNo; - - // remove AI controlled flag - pSoldier->flags.uiStatusFlags &= ~SOLDIER_UNDERAICONTROL; + pSoldier->SoldierGotoStationaryStance( ); + } } + + //Cancel pending events + pSoldier->usPendingAnimation = NO_PENDING_ANIMATION; + pSoldier->ubPendingDirection = NO_PENDING_DIRECTION; + pSoldier->aiData.ubPendingAction = NO_PENDING_ACTION; + + // Reset moved flag + pSoldier->aiData.bMoved = FALSE; + + // Set final destination + pSoldier->pathing.sFinalDestination = pSoldier->sGridNo; + + // remove AI controlled flag + pSoldier->flags.uiStatusFlags &= ~SOLDIER_UNDERAICONTROL; } } From 99703fa8b6a945aea01d60c5b94eda3427af7dc9 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 20 Nov 2024 21:52:28 +0200 Subject: [PATCH 148/192] Use SoldierID --- Tactical/opplist.cpp | 93 ++++++++++++++++++++++---------------------- Tactical/opplist.h | 4 +- 2 files changed, 48 insertions(+), 49 deletions(-) diff --git a/Tactical/opplist.cpp b/Tactical/opplist.cpp index b13ed1b2..0b05cb5a 100644 --- a/Tactical/opplist.cpp +++ b/Tactical/opplist.cpp @@ -70,12 +70,12 @@ extern void SetSoldierAniSpeed( SOLDIERTYPE *pSoldier ); // HEADROCK HAM 3.6: Moved to header //void MakeBloodcatsHostile( void ); -void OurNoise( UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubVolume, UINT8 ubNoiseType, STR16 zNoiseMessage ); -void TheirNoise(UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubVolume, UINT8 ubNoiseType, STR16 zNoiseMessage = NULL ); -void ProcessNoise(UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubBaseVolume, UINT8 ubNoiseType, STR16 zNoiseMessage = NULL ); +void OurNoise( SoldierID ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubVolume, UINT8 ubNoiseType, STR16 zNoiseMessage ); +void TheirNoise( SoldierID ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubVolume, UINT8 ubNoiseType, STR16 zNoiseMessage = NULL ); +void ProcessNoise( SoldierID ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubBaseVolume, UINT8 ubNoiseType, STR16 zNoiseMessage = NULL ); UINT8 CalcEffVolume(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel, UINT8 ubNoiseType, UINT8 ubBaseVolume, UINT8 ubTerrType1, UINT8 ubTerrType2); -void HearNoise(SOLDIERTYPE *pSoldier, UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubVolume, UINT8 ubNoiseType, UINT8 *ubSeen); -void TellPlayerAboutNoise(SOLDIERTYPE *pSoldier, UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubVolume, UINT8 ubNoiseType, UINT8 ubNoiseDir, STR16 zNoiseMessage = NULL ); +void HearNoise(SOLDIERTYPE *pSoldier, SoldierID ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubVolume, UINT8 ubNoiseType, UINT8 *ubSeen); +void TellPlayerAboutNoise(SOLDIERTYPE *pSoldier, SoldierID ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubVolume, UINT8 ubNoiseType, UINT8 ubNoiseDir, STR16 zNoiseMessage = NULL ); void OurTeamSeesSomeone( SOLDIERTYPE * pSoldier, INT8 bNumReRevealed, INT8 bNumNewEnemies ); void IncrementWatchedLoc( UINT16 ubID, INT32 sGridNo, INT8 bLevel ); @@ -5564,7 +5564,7 @@ void MakeNoise(SoldierID ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrT { if (ubNoiseMaker < TOTAL_SOLDIERS) { - if (Menptr[ubNoiseMaker].controller == Net.pnum) + if (ubNoiseMaker->controller == Net.pnum) { bWeControlNoise = TRUE; } @@ -5624,7 +5624,7 @@ void MakeNoise(SoldierID ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrT } -void OurNoise( UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubVolume, UINT8 ubNoiseType, STR16 zNoiseMessage ) +void OurNoise( SoldierID ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubVolume, UINT8 ubNoiseType, STR16 zNoiseMessage ) { #ifdef BYPASSNOISE return; @@ -5649,13 +5649,13 @@ void OurNoise( UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType // interrupts are possible, resolve them now (we're in control here) // (you can't interrupt NOBODY, even if you hear the noise) - ResolveInterruptsVs(MercPtrs[ubNoiseMaker],NOISEINTERRUPT); + ResolveInterruptsVs(ubNoiseMaker, NOISEINTERRUPT); } } -void TheirNoise(UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, +void TheirNoise( SoldierID ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubVolume, UINT8 ubNoiseType, STR16 zNoiseMessage ) { @@ -5686,7 +5686,7 @@ void TheirNoise(UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrTyp if (ubNoiseMaker < TOTAL_SOLDIERS) { /* - pSoldier = MercPtrs[ubNoiseMaker]; + pSoldier = ubNoiseMaker; //stopAction = TRUE; // prevent real-time events from passing us by MarkTime(&LoopTime); @@ -5716,7 +5716,7 @@ void TheirNoise(UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrTyp // else if noiseMaker's NOBODY, no opplist changes or interrupts are possible } -void ProcessNoise(UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubBaseVolume, UINT8 ubNoiseType, STR16 zNoiseMessage ) +void ProcessNoise( SoldierID ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubBaseVolume, UINT8 ubNoiseType, STR16 zNoiseMessage ) { SOLDIERTYPE *pSoldier; UINT16 bLoop; @@ -5726,7 +5726,7 @@ void ProcessNoise(UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrT UINT8 ubSourceTerrType; UINT16 ubSource; INT8 bTellPlayer = FALSE, bHeard, bSeen; - UINT16 ubHeardLoudestBy = NOBODY; + SoldierID ubHeardLoudestBy = NOBODY; UINT8 ubNoiseDir = 0xff, ubLoudestNoiseDir = 0xff; @@ -5749,8 +5749,8 @@ void ProcessNoise(UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrT if ((ubNoiseMaker < TOTAL_SOLDIERS) && (ubNoiseType != NOISE_EXPLOSION)) { // inactive/not in sector/dead soldiers, shouldn't be making noise! - if (!Menptr[ubNoiseMaker].bActive || !Menptr[ubNoiseMaker].bInSector || - Menptr[ubNoiseMaker].flags.uiStatusFlags & SOLDIER_DEAD) + if (!ubNoiseMaker->bActive || !ubNoiseMaker->bInSector || + ubNoiseMaker->flags.uiStatusFlags & SOLDIER_DEAD) { #ifdef BETAVERSION NumMessage("ProcessNoise: ERROR - Noisemaker is inactive/not in sector/dead, Guy #",ubNoiseMaker); @@ -5759,7 +5759,7 @@ void ProcessNoise(UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrT } // if he's out of life, and this isn't just his "dying scream" which is OK - if (!Menptr[ubNoiseMaker].stats.bLife && (ubNoiseType != NOISE_SCREAM)) + if (!ubNoiseMaker->stats.bLife && (ubNoiseType != NOISE_SCREAM)) { #ifdef BETAVERSION NumMessage("ProcessNoise: ERROR - Noisemaker is lifeless, Guy #",ubNoiseMaker); @@ -5824,7 +5824,7 @@ void ProcessNoise(UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrT // CJC: changed to if the side is the same side as the noise maker's! // CJC: changed back! - if (bTeam == Menptr[ubNoiseMaker].bTeam) + if (bTeam == ubNoiseMaker->bTeam) { continue; } @@ -5894,7 +5894,7 @@ void ProcessNoise(UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrT bTellPlayer = FALSE; } /* - else if ( (Menptr[ubNoiseMaker].bVisible == TRUE) && (bTeam == gbPlayerNum) ) + else if ( (ubNoiseMaker->bVisible == TRUE) && (bTeam == gbPlayerNum) ) { ScreenMsg( MSG_FONT_YELLOW, MSG_TESTVERSION, L"Handling noise from person not currently seen in player's public opplist" ); } @@ -5906,7 +5906,7 @@ void ProcessNoise(UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrT bTellPlayer = TRUE; } - if ( MercPtrs[ ubNoiseMaker ]->stats.bLife == 0 ) + if ( ubNoiseMaker->stats.bLife == 0 ) { // this guy is dead (just dying) so don't report to player bTellPlayer = FALSE; @@ -5964,7 +5964,7 @@ void ProcessNoise(UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrT } // screen out allied militia from hearing us - switch( MercPtrs[ ubNoiseMaker ]->bTeam ) + switch( ubNoiseMaker->bTeam ) { case OUR_TEAM: // if the listener is militia and still on our side, ignore noise from us @@ -5998,8 +5998,8 @@ void ProcessNoise(UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrT case MILITIA_TEAM: // if the noisemaker is militia and still on our side, ignore noise if we're listening // sevenfm: allow taunts from militia - if (pSoldier->bTeam == OUR_TEAM && MercPtrs[ubNoiseMaker]->bSide == 0 && (ubNoiseType != NOISE_VOICE || !gTauntsSettings.fTauntVoice)) - //if ( pSoldier->bTeam == OUR_TEAM && MercPtrs[ ubNoiseMaker ]->bSide == 0 ) + if (pSoldier->bTeam == OUR_TEAM && ubNoiseMaker->bSide == 0 && (ubNoiseType != NOISE_VOICE || !gTauntsSettings.fTauntVoice)) + //if ( pSoldier->bTeam == OUR_TEAM && ubNoiseMaker->bSide == 0 ) { continue; } @@ -6029,11 +6029,11 @@ void ProcessNoise(UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrT //if (gBloodcatPlacements[ ubSectorID ][ gGameOptions.ubDifficultyLevel-1 ].ubFactionAffiliation == QUEENS_CIV_GROUP) { // skip noises between army & bloodcats - if ( pSoldier->bTeam == ENEMY_TEAM && MercPtrs[ ubNoiseMaker ]->ubBodyType == BLOODCAT && MercPtrs[ ubNoiseMaker ]->bTeam == CREATURE_TEAM ) + if ( pSoldier->bTeam == ENEMY_TEAM && ubNoiseMaker->ubBodyType == BLOODCAT && ubNoiseMaker->bTeam == CREATURE_TEAM ) { continue; } - if ( pSoldier->bTeam == CREATURE_TEAM && pSoldier->ubBodyType == BLOODCAT && MercPtrs[ ubNoiseMaker ]->bTeam == ENEMY_TEAM ) + if ( pSoldier->bTeam == CREATURE_TEAM && pSoldier->ubBodyType == BLOODCAT && ubNoiseMaker->bTeam == ENEMY_TEAM ) { continue; } @@ -6041,7 +6041,7 @@ void ProcessNoise(UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrT else if (gBloodcatPlacements[ ubSectorID ][ DiffLevel-1 ].ubFactionAffiliation > NON_CIV_GROUP) //else if (gBloodcatPlacements[ ubSectorID ][ gGameOptions.ubDifficultyLevel-1 ].ubFactionAffiliation > NON_CIV_GROUP) { - if ( MercPtrs[ ubNoiseMaker ]->ubBodyType == BLOODCAT && MercPtrs[ ubNoiseMaker ]->bTeam == CREATURE_TEAM && pSoldier->bSide != gbPlayerNum) + if ( ubNoiseMaker->ubBodyType == BLOODCAT && ubNoiseMaker->bTeam == CREATURE_TEAM && pSoldier->bSide != gbPlayerNum) { // Target is a bloodcat. He can't be heard by civilians no matter what. { @@ -6051,7 +6051,7 @@ void ProcessNoise(UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrT else if ( pSoldier->bTeam == CREATURE_TEAM && pSoldier->ubBodyType == BLOODCAT ) { // Source is a bloodcat. He can only hear player-side soldiers, and only if hostile. - if ( MercPtrs[ ubNoiseMaker ]->bSide != gbPlayerNum || pSoldier->aiData.bNeutral ) + if ( ubNoiseMaker->bSide != gbPlayerNum || pSoldier->aiData.bNeutral ) { continue; } @@ -6149,7 +6149,7 @@ void ProcessNoise(UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrT else if(bTeam == OUR_TEAM && ubNoiseType == NOISE_CREAKING) { //shadooow: this will indicate doors not to make animation/sound of doors opening or closing - Menptr[ubNoiseMaker].ubDoorOpeningNoise = 0; + ubNoiseMaker->ubDoorOpeningNoise = 0; } // if the listening team is human-controlled AND // the noise's source is another soldier @@ -6358,7 +6358,7 @@ UINT8 CalcEffVolume(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel, UINT8 ubN -void HearNoise(SOLDIERTYPE *pSoldier, UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, +void HearNoise(SOLDIERTYPE *pSoldier, SoldierID ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubVolume, UINT8 ubNoiseType, UINT8 *ubSeen) { INT16 sNoiseX, sNoiseY; @@ -6389,14 +6389,14 @@ void HearNoise(SOLDIERTYPE *pSoldier, UINT16 ubNoiseMaker, INT32 sGridNo, INT8 b // is he close enough to see that gridno if he turns his head? // ignore muzzle flashes when turning head to see noise - if ( ubNoiseType == NOISE_GUNFIRE && ubNoiseMaker != NOBODY && MercPtrs[ ubNoiseMaker ]->flags.fMuzzleFlash ) + if ( ubNoiseType == NOISE_GUNFIRE && ubNoiseMaker != NOBODY && ubNoiseMaker->flags.fMuzzleFlash ) { ConvertGridNoToCenterCellXY(sGridNo, &sNoiseX, &sNoiseY); bDirection = atan8(pSoldier->sX,pSoldier->sY,sNoiseX,sNoiseY); if ( pSoldier->ubDirection != bDirection && pSoldier->ubDirection != gOneCDirection[ bDirection ] && pSoldier->ubDirection != gOneCCDirection[ bDirection ] ) { // temporarily turn off muzzle flash so DistanceVisible can be calculated without it - MercPtrs[ ubNoiseMaker ]->flags.fMuzzleFlash = FALSE; + ubNoiseMaker->flags.fMuzzleFlash = FALSE; fMuzzleFlash = TRUE; } } @@ -6406,7 +6406,7 @@ void HearNoise(SOLDIERTYPE *pSoldier, UINT16 ubNoiseMaker, INT32 sGridNo, INT8 b if ( fMuzzleFlash ) { // turn flash on again - MercPtrs[ ubNoiseMaker ]->flags.fMuzzleFlash = TRUE; + ubNoiseMaker->flags.fMuzzleFlash = TRUE; } if (PythSpacesAway(pSoldier->sGridNo,sGridNo) <= sDistVisible ) @@ -6448,7 +6448,7 @@ void HearNoise(SOLDIERTYPE *pSoldier, UINT16 ubNoiseMaker, INT32 sGridNo, INT8 b fprintf(OpplistFile,"HN: %s by %2d(g%4d,x%3d,y%3d) at %2d(g%4d,x%3d,y%3d), hTT=%d\n", (bSourceSeen) ? "SCS" : "FLR", pSoldier->guynum,pSoldier->sGridNo,pSoldier->sX,pSoldier->sY, - ubNoiseMaker,sGridNo,sNoiseX,sNoiseY, + ubNoiseMaker.i,sGridNo,sNoiseX,sNoiseY, bHadToTurn); #endif } @@ -6463,7 +6463,7 @@ void HearNoise(SOLDIERTYPE *pSoldier, UINT16 ubNoiseMaker, INT32 sGridNo, INT8 b if (bSourceSeen) { - ManSeesMan(pSoldier,MercPtrs[ubNoiseMaker],Menptr[ubNoiseMaker].sGridNo,Menptr[ubNoiseMaker].pathing.bLevel,HEARNOISE,CALLER_UNKNOWN); + ManSeesMan( pSoldier, ubNoiseMaker, ubNoiseMaker->sGridNo, ubNoiseMaker->pathing.bLevel, HEARNOISE, CALLER_UNKNOWN ); // if it's an AI soldier, he is not allowed to automatically radio any // noise heard, but manSeesMan has set his newOppCnt, so clear it here @@ -6519,15 +6519,14 @@ void HearNoise(SOLDIERTYPE *pSoldier, UINT16 ubNoiseMaker, INT32 sGridNo, INT8 b } // remember that the soldier has been heard and his new location - UpdatePersonal(pSoldier,ubNoiseMaker,HEARD_THIS_TURN,sGridNo, bLevel); + UpdatePersonal( pSoldier, ubNoiseMaker, HEARD_THIS_TURN, sGridNo, bLevel ); // sevenfm: increment watched location when soldier hears enemy if ((ubNoiseType == NOISE_GUNFIRE || ubNoiseType == NOISE_MOVEMENT || ubNoiseType == NOISE_SCREAM || ubNoiseType == NOISE_VOICE) && !TileIsOutOfBounds(sGridNo) && !(pSoldier->flags.uiStatusFlags & SOLDIER_PC) && !pSoldier->aiData.bNeutral && - MercPtrs[ubNoiseMaker] && - !MercPtrs[ubNoiseMaker]->aiData.bNeutral && + !ubNoiseMaker->aiData.bNeutral && !pSoldier->IsFlanking()) { // check that we can see enemy if we raise weapon @@ -6574,13 +6573,13 @@ void HearNoise(SOLDIERTYPE *pSoldier, UINT16 ubNoiseMaker, INT32 sGridNo, INT8 b } // FIRST REQUIRE MUTUAL HOSTILES! - if (!CONSIDERED_NEUTRAL( MercPtrs[ ubNoiseMaker ], pSoldier ) && !CONSIDERED_NEUTRAL( pSoldier, MercPtrs[ ubNoiseMaker ] ) && (pSoldier->bSide != MercPtrs[ ubNoiseMaker ]->bSide)) + if (!CONSIDERED_NEUTRAL( ubNoiseMaker, pSoldier ) && !CONSIDERED_NEUTRAL( pSoldier, ubNoiseMaker ) && (pSoldier->bSide != ubNoiseMaker->bSide)) { // regardless of whether the noisemaker (who's not NOBODY) was seen or not, // as long as listener meets minimum interrupt conditions if ( gfDelayResolvingBestSightingDueToDoor) { - if ( bSourceSeen && (!( (gTacticalStatus.uiFlags & TURNBASED) && ( gTacticalStatus.uiFlags & INCOMBAT ) ) || (gubSightFlags & SIGHTINTERRUPT && StandardInterruptConditionsMet(pSoldier,ubNoiseMaker,bOldOpplist)) ) ) + if ( bSourceSeen && (!( (gTacticalStatus.uiFlags & TURNBASED) && ( gTacticalStatus.uiFlags & INCOMBAT ) ) || (gubSightFlags & SIGHTINTERRUPT && StandardInterruptConditionsMet(pSoldier, ubNoiseMaker, bOldOpplist)) ) ) { // we should be adding this to the array for the AllTeamLookForAll to handle // since this is a door opening noise, add a bonus equal to half the door volume @@ -6591,7 +6590,7 @@ void HearNoise(SOLDIERTYPE *pSoldier, UINT16 ubNoiseMaker, INT32 sGridNo, INT8 b { // require the enemy not to be dying if we are the sighter; in other words, // always add for AI guys, and always add for people with life >= OKLIFE - if ( pSoldier->bTeam != gbPlayerNum || MercPtrs[ ubNoiseMaker ]->stats.bLife >= OKLIFE ) + if ( pSoldier->bTeam != gbPlayerNum || ubNoiseMaker->stats.bLife >= OKLIFE ) { ReevaluateBestSightingPosition( pSoldier, (UINT8) (ubPoints + (ubVolume / 2)) ); } @@ -6602,10 +6601,10 @@ void HearNoise(SOLDIERTYPE *pSoldier, UINT16 ubNoiseMaker, INT32 sGridNo, INT8 b { if ( (gTacticalStatus.uiFlags & TURNBASED) && ( gTacticalStatus.uiFlags & INCOMBAT ) ) { - if (StandardInterruptConditionsMet(pSoldier,ubNoiseMaker,bOldOpplist)) + if ( StandardInterruptConditionsMet( pSoldier, ubNoiseMaker, bOldOpplist ) ) { // he gets a chance to interrupt the noisemaker - pSoldier->aiData.bInterruptDuelPts = CalcInterruptDuelPts(pSoldier,ubNoiseMaker, TRUE ); + pSoldier->aiData.bInterruptDuelPts = CalcInterruptDuelPts( pSoldier, ubNoiseMaker, TRUE ); DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String( "Calculating int duel pts in noise code, %d has %d points", pSoldier->ubID, pSoldier->aiData.bInterruptDuelPts ) ); } else @@ -6712,7 +6711,7 @@ void HearNoise(SOLDIERTYPE *pSoldier, UINT16 ubNoiseMaker, INT32 sGridNo, INT8 b plan_lib->update_plan(pSoldier->bAIIndex, pSoldier, ai_input); } -void TellPlayerAboutNoise( SOLDIERTYPE *pSoldier, UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubVolume, UINT8 ubNoiseType, UINT8 ubNoiseDir, STR16 zNoiseMessage ) +void TellPlayerAboutNoise( SOLDIERTYPE *pSoldier, SoldierID ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubVolume, UINT8 ubNoiseType, UINT8 ubNoiseDir, STR16 zNoiseMessage ) { UINT8 ubVolumeIndex; @@ -6737,11 +6736,11 @@ void TellPlayerAboutNoise( SOLDIERTYPE *pSoldier, UINT16 ubNoiseMaker, INT32 sGr // display a message about a noise... // e.g. Sidney hears a loud splash from/to? the north. - if ( ubNoiseMaker != NOBODY && pSoldier->bTeam == gbPlayerNum && pSoldier->bTeam == Menptr[ubNoiseMaker].bTeam ) + if ( ubNoiseMaker != NOBODY && pSoldier->bTeam == gbPlayerNum && pSoldier->bTeam == ubNoiseMaker->bTeam ) { #ifdef JA2BETAVERSION ScreenMsg( MSG_FONT_RED, MSG_ERROR, L"ERROR! TAKE SCREEN CAPTURE AND TELL CAMFIELD NOW!" ); - ScreenMsg( MSG_FONT_RED, MSG_ERROR, L"%s (%d) heard noise from %s (%d), noise at %dL%d, type %d", pSoldier->name, pSoldier->ubID, Menptr[ubNoiseMaker].name, ubNoiseMaker, sGridNo, bLevel, ubNoiseType ); + ScreenMsg( MSG_FONT_RED, MSG_ERROR, L"%s (%d) heard noise from %s (%d), noise at %dL%d, type %d", pSoldier->name, pSoldier->ubID, ubNoiseMaker->name, ubNoiseMaker, sGridNo, bLevel, ubNoiseType ); #endif } @@ -6751,7 +6750,7 @@ void TellPlayerAboutNoise( SOLDIERTYPE *pSoldier, UINT16 ubNoiseMaker, INT32 sGr // information about direction etc. only displayed if we don't see noise maker // sevenfm: don't show noise messages from militia (if on our side) if (gbPublicOpplist[gbPlayerNum][ubNoiseMaker] != SEEN_CURRENTLY && pSoldier->aiData.bOppList[ubNoiseMaker] != SEEN_CURRENTLY && - !(MercPtrs[ubNoiseMaker]->bTeam == MILITIA_TEAM && MercPtrs[ubNoiseMaker]->bSide == 0)) + !(ubNoiseMaker->bTeam == MILITIA_TEAM && ubNoiseMaker->bSide == 0)) //if( gbPublicOpplist[gbPlayerNum][ubNoiseMaker] != SEEN_CURRENTLY && pSoldier->aiData.bOppList[ubNoiseMaker] != SEEN_CURRENTLY ) { if (bLevel == pSoldier->pathing.bLevel) @@ -6794,14 +6793,14 @@ void TellPlayerAboutNoise( SOLDIERTYPE *pSoldier, UINT16 ubNoiseMaker, INT32 sGr if (gbPublicOpplist[gbPlayerNum][ubNoiseMaker] == SEEN_CURRENTLY || pSoldier->aiData.bOppList[ubNoiseMaker] == SEEN_CURRENTLY) { if (gTauntsSettings.fTauntShowPopupBox == TRUE) - ShowTauntPopupBox(MercPtrs[ubNoiseMaker], zNoiseMessage); + ShowTauntPopupBox(ubNoiseMaker, zNoiseMessage); if (gTauntsSettings.fTauntShowInLog == TRUE) - ScreenMsg(FONT_GRAY2, MSG_INTERFACE, L"%s: %s", MercPtrs[ubNoiseMaker]->GetName(), zNoiseMessage); + ScreenMsg(FONT_GRAY2, MSG_INTERFACE, L"%s: %s", ubNoiseMaker->GetName(), zNoiseMessage); } else { if (gTauntsSettings.fTauntShowPopupBox == TRUE && gTauntsSettings.fTauntShowPopupBoxIfHeard == TRUE) - ShowTauntPopupBox(MercPtrs[ubNoiseMaker], zNoiseMessage); + ShowTauntPopupBox(ubNoiseMaker, zNoiseMessage); if (gTauntsSettings.fTauntShowInLog == TRUE && gTauntsSettings.fTauntShowInLogIfHeard == TRUE) ScreenMsg(FONT_GRAY2, MSG_INTERFACE, L"%s: %s", pTauntUnknownVoice[0], zNoiseMessage); } diff --git a/Tactical/opplist.h b/Tactical/opplist.h index c49a8eab..bce76a29 100644 --- a/Tactical/opplist.h +++ b/Tactical/opplist.h @@ -139,8 +139,8 @@ void DebugSoldierPage4( ); UINT8 MovementNoise( SOLDIERTYPE *pSoldier ); UINT8 DoorOpeningNoise( SOLDIERTYPE *pSoldier ); -void MakeNoise(SoldierID ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubVolume, UINT8 ubNoiseType, STR16 zNoiseMessage = NULL ); -void OurNoise( UINT16 ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubVolume, UINT8 ubNoiseType, STR16 zNoiseMessage = NULL ); +void MakeNoise( SoldierID ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubVolume, UINT8 ubNoiseType, STR16 zNoiseMessage = NULL ); +void OurNoise( SoldierID ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubVolume, UINT8 ubNoiseType, STR16 zNoiseMessage = NULL ); void ResolveInterruptsVs( SOLDIERTYPE * pSoldier, UINT8 ubInterruptType); From 845d784bff65a8f61eb8507d3b1410848326c9e4 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 20 Nov 2024 22:33:33 +0200 Subject: [PATCH 149/192] Use SoldierID --- Laptop/mercs.cpp | 5 +- Laptop/personnel.cpp | 146 +++++++++++++++++++------------------------ 2 files changed, 67 insertions(+), 84 deletions(-) diff --git a/Laptop/mercs.cpp b/Laptop/mercs.cpp index 0f96750a..b9428656 100644 --- a/Laptop/mercs.cpp +++ b/Laptop/mercs.cpp @@ -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 ) ) diff --git a/Laptop/personnel.cpp b/Laptop/personnel.cpp index 9da05def..775ff5f4 100644 --- a/Laptop/personnel.cpp +++ b/Laptop/personnel.cpp @@ -3724,11 +3724,10 @@ INT32 GetIdOfDepartedMercWithLowestStat( INT32 iStat ) } -INT32 GetIdOfMercWithHighestStat( INT32 iStat ) +SoldierID GetIdOfMercWithHighestStat( INT32 iStat ) { // will return the id value of the merc on the players team with highest in this stat - // -1 means error - INT32 iId = -1; + INT32 iId = NOBODY; INT32 iValue =0; SOLDIERTYPE *pTeamSoldier, *pSoldier; INT32 cnt=0; @@ -3847,11 +3846,10 @@ INT32 GetIdOfMercWithHighestStat( INT32 iStat ) return( iId ); } -INT32 GetIdOfMercWithLowestStat( INT32 iStat ) +SoldierID GetIdOfMercWithLowestStat( INT32 iStat ) { // will return the id value of the merc on the players team with highest in this stat - // -1 means error - INT32 iId = -1; + SoldierID iId = NOBODY; INT32 iValue =999999; SOLDIERTYPE *pTeamSoldier, *pSoldier; INT32 cnt=0; @@ -3924,7 +3922,7 @@ INT32 GetIdOfMercWithLowestStat( INT32 iStat ) break; case 6: // exper - if( pTeamSoldier->stats.bExpLevel <= iValue ) + if( pTeamSoldier->stats.bExpLevel <= iValue ) { iId = cnt; iValue = pTeamSoldier->stats.bExpLevel; @@ -4304,12 +4302,12 @@ void DisplayAverageStatValuesForCurrentTeam( void ) void DisplayLowestStatValuesForCurrentTeam( void ) { // will display the average values for stats for the current team - INT16 sX, sY; - INT32 iCounter = 0; - CHAR16 sString[ 32 ]; - INT32 iStat = 0; - INT32 iDepartedId=0; - INT32 iId = 0; + INT16 sX, sY; + INT32 iCounter = 0; + CHAR16 sString[ 32 ]; + INT32 iStat = 0; + INT32 iDepartedId = -1; + SoldierID iId; // set up font SetFont( FONT10ARIAL ); @@ -4338,7 +4336,7 @@ void DisplayLowestStatValuesForCurrentTeam( void ) { if (fCurrentTeamMode) { iId = GetIdOfMercWithLowestStat( iCounter ); - if( iId == -1 ) + if( iId == NOBODY ) continue; } else { iDepartedId = GetIdOfDepartedMercWithLowestStat( iCounter ); @@ -4354,11 +4352,7 @@ void DisplayLowestStatValuesForCurrentTeam( void ) } if (fCurrentTeamMode) { - // get name - /*if( iId == -1 ) - swprintf( sString, L"%s", pPOWStrings[1] ); - else*/ - swprintf( sString, L"%s", MercPtrs[ iId ]->GetName() ); + swprintf( sString, L"%s", iId->GetName() ); } else { // get name swprintf( sString, L"%s", gMercProfiles[ iDepartedId ].zNickname ); @@ -4370,10 +4364,7 @@ void DisplayLowestStatValuesForCurrentTeam( void ) case 0: // health if (fCurrentTeamMode) { - /*if( iId == -1 ) - iStat = -1; - else*/ - iStat = MercPtrs[ iId ]->stats.bLifeMax; + iStat = iId->stats.bLifeMax; } else { iStat = gMercProfiles[ iDepartedId ] . bLife; } @@ -4381,7 +4372,7 @@ void DisplayLowestStatValuesForCurrentTeam( void ) case 1: // agility if (fCurrentTeamMode) { - iStat = MercPtrs[ iId ]->stats.bAgility; + iStat = iId->stats.bAgility; } else { iStat = gMercProfiles[ iDepartedId ] . bAgility; } @@ -4389,7 +4380,7 @@ void DisplayLowestStatValuesForCurrentTeam( void ) case 2: // dexterity if (fCurrentTeamMode) { - iStat = MercPtrs[ iId ]->stats.bDexterity; + iStat = iId->stats.bDexterity; } else { iStat = gMercProfiles[ iDepartedId ] . bDexterity; } @@ -4397,7 +4388,7 @@ void DisplayLowestStatValuesForCurrentTeam( void ) case 3: // strength if (fCurrentTeamMode) { - iStat = MercPtrs[ iId ]->stats.bStrength; + iStat = iId->stats.bStrength; } else { iStat = gMercProfiles[ iDepartedId ] . bStrength; } @@ -4405,7 +4396,7 @@ void DisplayLowestStatValuesForCurrentTeam( void ) case 4: // leadership if (fCurrentTeamMode) { - iStat = MercPtrs[ iId ]->stats.bLeadership; + iStat = iId->stats.bLeadership; } else { iStat = gMercProfiles[ iDepartedId ] . bLeadership; } @@ -4413,7 +4404,7 @@ void DisplayLowestStatValuesForCurrentTeam( void ) case 5: // wisdom if (fCurrentTeamMode) { - iStat = MercPtrs[ iId ]->stats.bWisdom; + iStat = iId->stats.bWisdom; } else { iStat = gMercProfiles[ iDepartedId ] . bWisdom; } @@ -4421,7 +4412,7 @@ void DisplayLowestStatValuesForCurrentTeam( void ) case 6: // exper if (fCurrentTeamMode) { - iStat = MercPtrs[ iId ]->stats.bExpLevel; + iStat = iId->stats.bExpLevel; } else { iStat = gMercProfiles[ iDepartedId ] . bExpLevel; } @@ -4429,7 +4420,7 @@ void DisplayLowestStatValuesForCurrentTeam( void ) case 7: //mrkmanship if (fCurrentTeamMode) { - iStat = MercPtrs[ iId ]->stats.bMarksmanship; + iStat = iId->stats.bMarksmanship; } else { iStat = gMercProfiles[ iDepartedId ] . bMarksmanship; } @@ -4437,7 +4428,7 @@ void DisplayLowestStatValuesForCurrentTeam( void ) case 8: // mech if (fCurrentTeamMode) { - iStat = MercPtrs[ iId ]->stats.bMechanical; + iStat = iId->stats.bMechanical; } else { iStat = gMercProfiles[ iDepartedId ] . bMechanical; } @@ -4445,7 +4436,7 @@ void DisplayLowestStatValuesForCurrentTeam( void ) case 9: // exp if (fCurrentTeamMode) { - iStat = MercPtrs[ iId ]->stats.bExplosive; + iStat = iId->stats.bExplosive; } else { iStat = gMercProfiles[ iDepartedId ] . bExplosive; } @@ -4453,17 +4444,14 @@ void DisplayLowestStatValuesForCurrentTeam( void ) case 10: // med if (fCurrentTeamMode) { - iStat = MercPtrs[ iId ]->stats.bMedical; + iStat = iId->stats.bMedical; } else { iStat = gMercProfiles[ iDepartedId ] . bMedical; } break; - } + } - /*if( iStat == -1 ) - swprintf( sString, L"%s", pPOWStrings[1] ); - else*/ - swprintf( sString, L"%d", iStat ); + swprintf( sString, L"%d", iStat ); // right justify FindFontRightCoordinates( PERS_STAT_LOWEST_X, 0 ,PERS_STAT_LOWEST_WIDTH, 0 , sString, FONT10ARIAL , &sX, &sY ); @@ -4479,7 +4467,8 @@ void DisplayHighestStatValuesForCurrentTeam( void ) INT32 iCounter = 0; CHAR16 sString[ 32 ]; INT32 iStat = 0; - INT32 iId=0; + SoldierID iId; + INT32 iDepartedId = -1; // set up font SetFont( FONT10ARIAL ); @@ -4506,13 +4495,18 @@ void DisplayHighestStatValuesForCurrentTeam( void ) for( iCounter = 0; iCounter < 11; iCounter++ ) { - if (fCurrentTeamMode) + if ( fCurrentTeamMode ) + { iId = GetIdOfMercWithHighestStat( iCounter ); + if ( iId == NOBODY ) + continue; + } else - iId = GetIdOfDepartedMercWithHighestStat( iCounter ); - - if( iId == -1 ) - continue; + { + iDepartedId = GetIdOfDepartedMercWithHighestStat( iCounter ); + if ( iDepartedId == -1 ) + continue; + } // even or odd?..color black or yellow? if( iCounter % 2 == 0 ) @@ -4526,18 +4520,12 @@ void DisplayHighestStatValuesForCurrentTeam( void ) if (fCurrentTeamMode) { - // get name - /*if( iId == -1 ) - { - swprintf( sString, L"%s", pPOWStrings[1] ); - } - else*/ - swprintf( sString, L"%s", MercPtrs[ iId ]->GetName() ); + swprintf( sString, L"%s", iId->GetName() ); } else { // get name - swprintf( sString, L"%s", gMercProfiles[ iId ].zNickname ); + swprintf( sString, L"%s", gMercProfiles[ iDepartedId ].zNickname ); } // print name mprintf( PERS_STAT_HIGHEST_X, PERS_STAT_AVG_Y + ( iCounter + 1 ) * ( GetFontHeight( FONT10ARIAL ) + 3 ), sString ); @@ -4546,100 +4534,94 @@ void DisplayHighestStatValuesForCurrentTeam( void ) case 0: // health if (fCurrentTeamMode) { - /*if( iId == -1 ) - iStat = -1; - else*/ - iStat = MercPtrs[ iId ]->stats.bLifeMax; + iStat = iId->stats.bLifeMax; } else { - iStat = gMercProfiles[ iId ] . bLife; + iStat = gMercProfiles[ iDepartedId ] . bLife; } break; case 1: // agility if (fCurrentTeamMode) { - iStat = MercPtrs[ iId ]->stats.bAgility; + iStat = iId->stats.bAgility; } else { - iStat = gMercProfiles[ iId ] . bAgility; + iStat = gMercProfiles[ iDepartedId ] . bAgility; } break; case 2: // dexterity if (fCurrentTeamMode) { - iStat = MercPtrs[ iId ]->stats.bDexterity; + iStat = iId->stats.bDexterity; } else { - iStat = gMercProfiles[ iId ] . bDexterity; + iStat = gMercProfiles[ iDepartedId ] . bDexterity; } break; case 3: // strength if (fCurrentTeamMode) { - iStat = MercPtrs[ iId ]->stats.bStrength; + iStat = iId->stats.bStrength; } else { - iStat = gMercProfiles[ iId ] . bStrength; + iStat = gMercProfiles[ iDepartedId ] . bStrength; } break; case 4: // leadership if (fCurrentTeamMode) { - iStat = MercPtrs[ iId ]->stats.bLeadership; + iStat = iId->stats.bLeadership; } else { - iStat = gMercProfiles[ iId ] . bLeadership; + iStat = gMercProfiles[ iDepartedId ] . bLeadership; } break; case 5: // wisdom if (fCurrentTeamMode) { - iStat = MercPtrs[ iId ]->stats.bWisdom; + iStat = iId->stats.bWisdom; } else { - iStat = gMercProfiles[ iId ] . bWisdom; + iStat = gMercProfiles[ iDepartedId ] . bWisdom; } break; case 6: // exper if (fCurrentTeamMode) { - iStat = MercPtrs[ iId ]->stats.bExpLevel; + iStat = iId->stats.bExpLevel; } else { - iStat = gMercProfiles[ iId ] . bExpLevel; + iStat = gMercProfiles[ iDepartedId ] . bExpLevel; } break; case 7: //mrkmanship if (fCurrentTeamMode) { - iStat = MercPtrs[ iId ]->stats.bMarksmanship; + iStat = iId->stats.bMarksmanship; } else { - iStat = gMercProfiles[ iId ] . bMarksmanship; + iStat = gMercProfiles[ iDepartedId ] . bMarksmanship; } break; case 8: // mech if (fCurrentTeamMode) { - iStat = MercPtrs[ iId ]->stats.bMechanical; + iStat = iId->stats.bMechanical; } else { - iStat = gMercProfiles[ iId ] . bMechanical; + iStat = gMercProfiles[ iDepartedId ] . bMechanical; } break; case 9: // exp if (fCurrentTeamMode) { - iStat = MercPtrs[ iId ]->stats.bExplosive; + iStat = iId->stats.bExplosive; } else { - iStat = gMercProfiles[ iId ] . bExplosive; + iStat = gMercProfiles[ iDepartedId ] . bExplosive; } break; case 10: // med if (fCurrentTeamMode) { - iStat = MercPtrs[ iId ]->stats.bMedical; + iStat = iId->stats.bMedical; } else { - iStat = gMercProfiles[ iId ] . bMedical; + iStat = gMercProfiles[ iDepartedId ] . bMedical; } break; - } + } - /*if( iStat == -1 ) - swprintf( sString, L"%s", pPOWStrings[1] ); - else*/ - swprintf( sString, L"%d", iStat ); + swprintf( sString, L"%d", iStat ); // right justify FindFontRightCoordinates( PERS_STAT_HIGHEST_X, 0 ,PERS_STAT_LOWEST_WIDTH, 0 , sString, FONT10ARIAL , &sX, &sY ); From a50a6de1b5483e486003a863811f04f19d0b9c40 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 20 Nov 2024 22:34:30 +0200 Subject: [PATCH 150/192] Make fewer calls to MercPtrs --- Strategic/Auto Resolve.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/Strategic/Auto Resolve.cpp b/Strategic/Auto Resolve.cpp index cddd2e02..c5e0010f 100644 --- a/Strategic/Auto Resolve.cpp +++ b/Strategic/Auto Resolve.cpp @@ -1854,12 +1854,14 @@ void RenderAutoResolve() case BATTLE_CAPTURED: for( 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) && !AM_A_ROBOT( MercPtrs[ i ] ) ) + SOLDIERTYPE *pSoldier = MercPtrs[i]; + + 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 ); } } } @@ -5959,10 +5961,12 @@ void CheckForSoldiersWhoRetreatedIntoMilitiaHeldSectors() unsigned mercCnt = 0; for( int 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) && !AM_A_ROBOT( MercPtrs[ i ] ) ) + SOLDIERTYPE *pSoldier = MercPtrs[i]; + + 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; } From a9120ef984f30a0695ebd81b6b89938dfb43c56f Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 20 Nov 2024 22:35:55 +0200 Subject: [PATCH 151/192] Remove unused function --- Strategic/LuaInitNPCs.cpp | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/Strategic/LuaInitNPCs.cpp b/Strategic/LuaInitNPCs.cpp index b99141c7..ce76428c 100644 --- a/Strategic/LuaInitNPCs.cpp +++ b/Strategic/LuaInitNPCs.cpp @@ -2969,25 +2969,6 @@ SOLDIERTYPE * FindSoldierByProfileID2( UINT8 ubProfileID, BOOLEAN fPlayerMercsOn return( NULL ); } -BOOLEAN FindSoldier(SOLDIERTYPE **ppSoldier, UINT16 usSoldierIndex, BOOLEAN fPlayerMercsOnly) -{ - *ppSoldier = NULL; - - if (usSoldierIndex >= TOTAL_SOLDIERS) - { - return(FALSE); - } - - if (MercPtrs[usSoldierIndex]->bActive) - { - *ppSoldier = MercPtrs[usSoldierIndex]; - return(TRUE); - } - else - { - return(FALSE); - } -} //-------------------------------- From 1ec2867ced7484dfb158aae849d4e8e6b1939aa9 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 20 Nov 2024 22:59:56 +0200 Subject: [PATCH 152/192] Use SoldierID Fixed if conditions as well SOLDIERTYPE::ubProfile would never match with values above NOBODY --- Strategic/LuaInitNPCs.cpp | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/Strategic/LuaInitNPCs.cpp b/Strategic/LuaInitNPCs.cpp index ce76428c..e2c431e4 100644 --- a/Strategic/LuaInitNPCs.cpp +++ b/Strategic/LuaInitNPCs.cpp @@ -7562,12 +7562,11 @@ static int l_EVENT_InitNewSoldierAnim (lua_State *L) if ( lua_gettop(L) >= 3 ) { UINT16 ubTargetNPC = lua_tointeger(L,1); - //if (i == 2 ) BodyType = lua_tointeger(L,i); UINT32 ANIM = lua_tointeger(L,2); - INT32 cnt = lua_tointeger(L,3); - //if (i == 4 ) PlayerControl = lua_tointeger(L,i); + SoldierID solID = lua_tointeger(L,3); - if (ubTargetNPC > NOBODY) + // This is not my favorite, but now it will at least work. -Asdow + if (ubTargetNPC != NOBODY) { SOLDIERTYPE* pSoldier = FindSoldierByProfileID ( ubTargetNPC, TRUE ); if ( pSoldier )//&& pSoldier->ubBodyType == BodyType ) @@ -7576,10 +7575,10 @@ static int l_EVENT_InitNewSoldierAnim (lua_State *L) pSoldier->EVENT_InitNewSoldierAnim( ANIM, 0, TRUE ); } } - else if (ubTargetNPC == NOBODY) + else { - if ( MercPtrs[ cnt ]->bInSector ) - MercPtrs[ cnt ]->EVENT_InitNewSoldierAnim( ANIM, 0, TRUE ); + if ( solID != NOBODY && solID->bInSector ) + solID->EVENT_InitNewSoldierAnim( ANIM, 0, TRUE ); } } @@ -8049,12 +8048,12 @@ static int l_ChangeMercPtrsTeam (lua_State *L) { if ( lua_gettop(L) >= 2 ) { - UINT16 UID = lua_tointeger(L,1); + SoldierID UID = lua_tointeger(L,1); INT8 Side = lua_tointeger(L,2); - if ( MercPtrs[UID] && MercPtrs[ UID ]->bInSector && MercPtrs[ UID ]->bActive ) + if ( UID != NOBODY && UID->bInSector && UID->bActive ) { - MercPtrs[UID]->bSide = Side; + UID->bSide = Side; } } From 0dc2ceabb239c011fc0c08a68c73a7bbbbbeecbc Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Thu, 21 Nov 2024 19:48:54 +0200 Subject: [PATCH 153/192] Use SoldierID --- Strategic/LuaInitNPCs.cpp | 1049 ++++++++++++------------------------- 1 file changed, 338 insertions(+), 711 deletions(-) diff --git a/Strategic/LuaInitNPCs.cpp b/Strategic/LuaInitNPCs.cpp index e2c431e4..ee32f9e8 100644 --- a/Strategic/LuaInitNPCs.cpp +++ b/Strategic/LuaInitNPCs.cpp @@ -7617,7 +7617,7 @@ static int l_SetEnterCombatMode (lua_State *L) if ( lua_gettop(L) >= 2 ) { UINT16 group = lua_tointeger(L,1); - UINT16 ubID = lua_tointeger(L,2); + SoldierID ubID = lua_tointeger(L,2); if ( ubID == NOBODY ) return 0; @@ -7656,9 +7656,12 @@ static int l_MakeMercPtrsHostile (lua_State *L) { if ( lua_gettop(L) >= 1 ) { - UINT16 ubID = lua_tointeger(L,1); + SoldierID ubID = lua_tointeger(L,1); - MakeCivHostile(MercPtrs[ ubID ]); + if ( ubID != NOBODY ) + { + MakeCivHostile(ubID); + } } return 0; @@ -7741,13 +7744,13 @@ BOOLEAN Bool; if (i == 2 ) bNewSide = lua_tointeger(L,i); } - if ( MercPtrs[ ubID ]->bInSector && MercPtrs[ ubID ]->bActive ) + if ( ubID->bInSector && ubID->bActive ) Bool = TRUE; else Bool = FALSE; if ( Bool == TRUE ) - { pSoldier = MercPtrs[ ubID ]; + { pSoldier = ubID; if (pSoldier) { pSoldier->bSide = bNewSide; @@ -8450,20 +8453,17 @@ static int l_CreateItemInvOrFloor( lua_State *L ) { if ( lua_gettop( L ) >= 2 ) { - UINT16 ubID = lua_tointeger( L, 1 ); + SoldierID ubID = lua_tointeger( L, 1 ); UINT16 usItem = lua_tointeger( L, 2 ); - if ( ubID < TOTAL_SOLDIERS ) + if ( ubID != NOBODY) { - SOLDIERTYPE* pSoldier = MercPtrs[ubID]; - if ( pSoldier ) - { - CreateItem( usItem, 100, &gTempObject ); + SOLDIERTYPE* pSoldier = ubID; + CreateItem( usItem, 100, &gTempObject ); - if ( !AutoPlaceObject( pSoldier, &gTempObject, TRUE ) ) - { - AddItemToPool( pSoldier->sGridNo, &gTempObject, 1, pSoldier->pathing.bLevel, 0, -1 ); - } + if ( !AutoPlaceObject( pSoldier, &gTempObject, TRUE ) ) + { + AddItemToPool( pSoldier->sGridNo, &gTempObject, 1, pSoldier->pathing.bLevel, 0, -1 ); } } } @@ -8475,12 +8475,12 @@ static int l_DestroyOneItemInInventory( lua_State *L ) { if ( lua_gettop( L ) >= 2 ) { - UINT16 ubID = lua_tointeger( L, 1 ); + SoldierID ubID = lua_tointeger( L, 1 ); UINT16 usItem = lua_tointeger( L, 2 ); if ( ubID < TOTAL_SOLDIERS ) { - MercPtrs[ubID]->DestroyOneItemInInventory( usItem ); + ubID->DestroyOneItemInInventory( usItem ); } } @@ -8493,12 +8493,12 @@ static int l_HasItemInInventory( lua_State *L ) if ( lua_gettop( L ) >= 2 ) { - UINT16 ubID = lua_tointeger( L, 1 ); + SoldierID ubID = lua_tointeger( L, 1 ); UINT16 usItem = lua_tointeger( L, 2 ); if ( ubID < TOTAL_SOLDIERS ) { - Bool = MercPtrs[ubID]->HasItemInInventory( usItem ); + Bool = ubID->HasItemInInventory( usItem ); } } @@ -8509,36 +8509,25 @@ static int l_HasItemInInventory( lua_State *L ) static int l_CreateKeyProfInvAndAddItemToPool(lua_State *L) { - UINT8 n = lua_gettop(L); - int i; - OBJECTTYPE Object; - UINT8 ubNumberOfKeys; - UINT8 ubKeyIdValue; - UINT8 ubTargetNPC; - SOLDIERTYPE *pSoldier; - INT32 iWorldItem; - INT32 sGridNo; - UINT8 bLevel; - - for (i = 1; i <= n; i++) + if ( lua_gettop( L ) >= 5 ) { - if (i == 1) ubTargetNPC = lua_tointeger(L, i); - if (i == 2) ubNumberOfKeys = lua_tointeger(L, i); - if (i == 3) ubKeyIdValue = lua_tointeger(L, i); - if (i == 4) sGridNo = lua_tointeger(L, i); - if (i == 5) bLevel = lua_tointeger(L, i); + INT32 iWorldItem; + UINT8 ubTargetNPC = lua_tointeger( L, 1 ); + UINT8 ubNumberOfKeys = lua_tointeger( L, 2 ); + UINT8 ubKeyIdValue = lua_tointeger( L, 3 ); + INT32 sGridNo = lua_tointeger( L, 4 ); + UINT8 bLevel = lua_tointeger( L, 5 ); + + SOLDIERTYPE *pSoldier = FindSoldierByProfileID( ubTargetNPC, FALSE ); + + if ( pSoldier ) + { + OBJECTTYPE Key; + CreateKeyObject( &Key, ubNumberOfKeys, ubKeyIdValue ); + AutoPlaceObject( pSoldier, &Key, TRUE ); + AddItemToPoolAndGetIndex( sGridNo, &Key, -1, bLevel, 0, 0, -1, &iWorldItem ); + } } - - pSoldier = FindSoldierByProfileID(ubTargetNPC, FALSE); - - if (pSoldier) - { - OBJECTTYPE Key; - CreateKeyObject(&Key, ubNumberOfKeys, ubKeyIdValue); - AutoPlaceObject(pSoldier, &Key, TRUE); - AddItemToPoolAndGetIndex(sGridNo, &Key, -1, bLevel, 0, 0, -1, &iWorldItem); - } - return 0; } @@ -8928,145 +8917,111 @@ static int l_SetCivGroupHostile (lua_State *L) //Merc static int l_CheckMercPtrsAssignment (lua_State *L) { - UINT8 n = lua_gettop(L); - int i = 0; - - UINT32 ubID = 0; - - INT32 squad = 0; - - for (i= 1; i<=n; i++ ) + if ( lua_gettop( L ) >= 1 ) { - if (i == 1 ) ubID = lua_tointeger(L,i); + SoldierID ubID = lua_tointeger( L, 1 ); + + if ( ubID != NOBODY ) + { + INT32 squad = ubID->bAssignment; + + lua_pushinteger( L, squad ); + } } - - squad = MercPtrs[ ubID ]->bAssignment; - - lua_pushinteger(L, squad); - + return 1; } static int l_CheckMercPtrsActive (lua_State *L) { - UINT8 n = lua_gettop(L); - int i = 0; - - UINT32 ubID = 0; - - BOOLEAN Bool = FALSE; - - for (i= 1; i<=n; i++ ) + if ( lua_gettop( L ) >= 1 ) { - if (i == 1 ) ubID = lua_tointeger(L,i); + SoldierID ubID = lua_tointeger( L, 1 ); + BOOLEAN Bool = FALSE; + + if ( ubID != NOBODY && ubID->bActive ) + Bool = TRUE; + else + Bool = FALSE; + + lua_pushboolean( L, Bool ); } - - if ( MercPtrs[ ubID ]->bActive ) - Bool = TRUE; - else - Bool = FALSE; - - lua_pushboolean(L, Bool); - + return 1; } static int l_CheckMercPtsrInSector (lua_State *L) { - UINT8 n = lua_gettop(L); - int i = 0; - - UINT32 ubID = 0; - - BOOLEAN Bool = FALSE; - - for (i= 1; i<=n; i++ ) + if ( lua_gettop( L ) >= 1 ) { - if (i == 1 ) ubID = lua_tointeger(L,i); - } - - if ( MercPtrs[ ubID ]->bInSector ) - Bool = TRUE; - else - Bool = FALSE; - - lua_pushboolean(L, Bool); + SoldierID ubID = lua_tointeger( L, 1 ); + BOOLEAN Bool = FALSE; + if ( ubID != NOBODY && ubID->bInSector ) + Bool = TRUE; + else + Bool = FALSE; + + lua_pushboolean( L, Bool ); + } return 1; } static int l_GetMercPtsrProfileID (lua_State *L) { - UINT8 n = lua_gettop(L); - int i = 0; - - UINT32 ubID = 0; - - UINT8 profil = 0; - - for (i= 1; i<=n; i++ ) + if ( lua_gettop( L ) >= 1 ) { - if (i == 1 ) ubID = lua_tointeger(L,i); - } - - profil = MercPtrs[ ubID ]->ubProfile; - - lua_pushinteger(L, profil); + SoldierID ubID = lua_tointeger( L, 1 ); + if ( ubID != NOBODY ) + { + UINT8 profil = ubID->ubProfile; + lua_pushinteger( L, profil ); + } + } return 1; } static int l_CheckMercPtrsLife (lua_State *L) { - UINT8 n = lua_gettop(L); - int i = 0; - - UINT32 ubID = 0; - - UINT8 life = 0; - - for (i= 1; i<=n; i++ ) + if ( lua_gettop( L ) >= 1 ) { - if (i == 1 ) ubID = lua_tointeger(L,i); - } - - life = MercPtrs[ ubID ]->stats.bLife; - - lua_pushinteger(L, life); + SoldierID ubID = lua_tointeger( L, 1 ); + if ( ubID != NOBODY ) + { + INT8 life = ubID->stats.bLife; + + lua_pushinteger( L, life ); + } + } return 1; } static int l_SoldierGiveItem (lua_State *L) { - UINT8 n = lua_gettop(L); - int i = 0; - - UINT32 ubID1 = 0; - UINT32 ubID2 = 0; - -SOLDIERTYPE *pSoldier; -SOLDIERTYPE *pSoldier2; -BOOLEAN bol = FALSE; -UINT32 item; - for (i= 1; i<=n; i++ ) + if ( lua_gettop( L ) >= 3 ) { - if (i == 1 ) ubID1 = lua_tointeger(L,i); - if (i == 2 ) ubID2 = lua_tointeger(L,i); - if (i == 3 ) item = lua_tointeger(L,i); - } - + SOLDIERTYPE *pSoldier; + SOLDIERTYPE *pSoldier2; + BOOLEAN bol = FALSE; + + SoldierID ubID1 = lua_tointeger( L, 1 ); + SoldierID ubID2 = lua_tointeger( L, 2 ); + UINT32 item = lua_tointeger( L, 3 ); + + if ( ubID1 != NOBODY && ubID2 != NOBODY) + { pSoldier = FindSoldierByProfileID( ubID1, FALSE ); - pSoldier2 = FindSoldierByProfileID( ubID2, FALSE ); - - if ( !pSoldier || !pSoldier2 ) - bol = FALSE; - else - bol = TRUE; - - if ( bol == TRUE ) - { + + if ( !pSoldier || !pSoldier2 ) + bol = FALSE; + else + bol = TRUE; + + if ( bol == TRUE ) + { // Look for letter.... { INT8 bInvPos; @@ -9076,81 +9031,64 @@ UINT32 item; AssertMsg( bInvPos != NO_SLOT, "Interface Dialogue.C: Gift item does not exist in NPC." ); - SoldierGiveItem( pSoldier, pSoldier2, &(pSoldier->inv[ bInvPos ] ), bInvPos ); + SoldierGiveItem( pSoldier, pSoldier2, &(pSoldier->inv[bInvPos]), bInvPos ); } } - + } + } return 0; } static int l_CheckMercPtsrTeleportToSector (lua_State *L) { - UINT8 n = lua_gettop(L); - int i = 0; - - UINT32 ubID = 0; - - INT16 SectorX = 0; - INT16 SectorY = 0; - INT8 SectorZ = 0; - UINT32 GridNo = 0; - SOLDIERTYPE * pSoldier; - BOOLEAN Bool = FALSE; - - for (i= 1; i<=n; i++ ) + if ( lua_gettop( L ) >= 5 ) { - if (i == 1 ) SectorX = lua_tointeger(L,i); - if (i == 2 ) SectorY = lua_tointeger(L,i); - if (i == 3 ) SectorZ = lua_tointeger(L,i); - if (i == 4 ) GridNo = lua_tointeger(L,i); - if (i == 5 ) ubID = lua_tointeger(L,i); - } - - - if ( MercPtrs[ ubID ]->bInSector && MercPtrs[ ubID ]->bActive) - Bool = TRUE; - else - Bool = FALSE; - - if ( Bool == TRUE ) - { - pSoldier = MercPtrs[ ubID ]; + SoldierID ubID = NOBODY; + INT16 SectorX = 0; + INT16 SectorY = 0; + INT8 SectorZ = 0; + UINT32 GridNo = 0; + SOLDIERTYPE *pSoldier; - if (pSoldier) + SectorX = lua_tointeger( L, 1 ); + SectorY = lua_tointeger( L, 2 ); + SectorZ = lua_tointeger( L, 3 ); + GridNo = lua_tointeger( L, 4 ); + ubID = lua_tointeger( L, 5 ); + + + if ( ubID != NOBODY && ubID->bInSector && ubID->bActive ) { - pSoldier->sSectorX = SectorX; - pSoldier->sSectorY = SectorY; - pSoldier->bSectorZ = SectorZ; + pSoldier = ubID; - // Set gridno - pSoldier->ubStrategicInsertionCode = INSERTION_CODE_GRIDNO; - pSoldier->usStrategicInsertionData = GridNo; + if ( pSoldier ) + { + pSoldier->sSectorX = SectorX; + pSoldier->sSectorY = SectorY; + pSoldier->bSectorZ = SectorZ; + + // Set gridno + pSoldier->ubStrategicInsertionCode = INSERTION_CODE_GRIDNO; + pSoldier->usStrategicInsertionData = GridNo; + } } } - return 0; } static int l_GetMercPtrsGroup (lua_State *L) { - UINT8 n = lua_gettop(L); - int i = 0; - - UINT32 ubID = 0; - - UINT8 GroupID = 0; - - for (i= 1; i<=n; i++ ) + if ( lua_gettop( L ) >= 1 ) { - if (i == 1 ) ubID = lua_tointeger(L,i); + SoldierID ubID = lua_tointeger( L, 1 ); + + if ( ubID != NOBODY) + { + UINT8 GroupID = ubID->ubGroupID; + lua_pushinteger( L, GroupID ); + } } - - GroupID = MercPtrs[ ubID ]->ubGroupID; - - - lua_pushinteger(L, GroupID); - return 1; } @@ -9158,11 +9096,11 @@ static int l_WearGasMaskIfAvailable(lua_State *L) { if ( lua_gettop( L ) >= 1 ) { - UINT16 ubID = lua_tointeger( L, 1 ); + SoldierID ubID = lua_tointeger( L, 1 ); - if ( MercPtrs[ubID] && MercPtrs[ubID]->bInSector && MercPtrs[ubID]->bActive ) + if ( ubID != NOBODY && ubID->bInSector && ubID->bActive ) { - WearGasMaskIfAvailable( MercPtrs[ubID] ); + WearGasMaskIfAvailable( ubID ); } } @@ -9171,29 +9109,13 @@ static int l_WearGasMaskIfAvailable(lua_State *L) static int l_SetNewSituationMercPtsr(lua_State *L) { - UINT8 n = lua_gettop(L); - int i = 0; - UINT16 ubID = 0; - BOOLEAN Bool = FALSE; - SOLDIERTYPE * pSoldier; + if ( lua_gettop( L ) >= 1 ) + { + SoldierID ubID = lua_tointeger( L, 1 ); - for (i= 1; i<=n; i++ ) - { - if (i == 1 ) ubID = lua_tointeger(L,i); - } - - if ( MercPtrs[ ubID ]->bInSector && MercPtrs[ ubID ]->bActive) - Bool = TRUE; - else - Bool = FALSE; - - if ( Bool == TRUE ) - { - pSoldier = MercPtrs[ ubID ]; - - if (pSoldier) + if ( ubID != NOBODY && ubID->bInSector && ubID->bActive ) { - SetNewSituation(pSoldier); + SetNewSituation( ubID); } } @@ -9241,388 +9163,253 @@ static int l_gubPublicNoiseVolume(lua_State *L) static int l_AnimMercPtsrInSector (lua_State *L) { - UINT8 n = lua_gettop(L); - int i = 0; - - UINT32 ubID = 0,Anim = 0; - - BOOLEAN Bool = FALSE; - - for (i= 1; i<=n; i++ ) + if ( lua_gettop( L ) >= 2 ) { - if (i == 1 ) ubID = lua_tointeger(L,i); - if (i == 2 ) Anim = lua_tointeger(L,i); + SoldierID ubID = lua_tointeger( L, 1 ); + UINT16 Anim = lua_tointeger( L, 2 ); + + if ( ubID != NOBODY && ubID->bInSector ) + ubID->EVENT_InitNewSoldierAnim( Anim, 0, TRUE ); } - - if ( MercPtrs[ ubID ]->bInSector ) - Bool = TRUE; - else - Bool = FALSE; - - if ( Bool == TRUE ) - MercPtrs[ ubID ]->EVENT_InitNewSoldierAnim( Anim, 0, TRUE ); - return 0; } static int l_AnimMercPtsrfAIFlags(lua_State *L) { - UINT8 n = lua_gettop(L); - int i = 0; - UINT32 ubID = 0; - BOOLEAN Bool = FALSE; - - for (i= 1; i<=n; i++ ) + if ( lua_gettop( L ) >= 1 ) { - if (i == 1 ) ubID = lua_tointeger(L,i); + SoldierID ubID = lua_tointeger( L, 1 ); + + if ( ubID != NOBODY && ubID->bInSector ) + ubID->aiData.fAIFlags |= AI_HANDLE_EVERY_FRAME; } - - if ( MercPtrs[ ubID ]->bInSector ) - Bool = TRUE; - else - Bool = FALSE; - - if ( Bool == TRUE ) - MercPtrs[ ubID ]->aiData.fAIFlags |= AI_HANDLE_EVERY_FRAME; - return 0; } static int l_AnimMercPtsrusStrategicInsertionData(lua_State *L) { - UINT8 n = lua_gettop(L); - int i = 0; - UINT32 ubID = 0,GridNo = 0; - BOOLEAN Bool = FALSE; - - for (i= 1; i<=n; i++ ) + if ( lua_gettop( L ) >= 2 ) { - if (i == 1 ) ubID = lua_tointeger(L,i); - if (i == 2 ) GridNo = lua_tointeger(L,i); + SoldierID ubID = lua_tointeger( L, 1 ); + INT32 GridNo = lua_tointeger( L, 2 ); + + if ( ubID != NOBODY && ubID->bInSector ) + ubID->usStrategicInsertionData = GridNo; } - - if ( MercPtrs[ ubID ]->bInSector ) - Bool = TRUE; - else - Bool = FALSE; - - if ( Bool == TRUE ) - MercPtrs[ ubID ]->usStrategicInsertionData = GridNo; - return 0; } static int l_AnimMercPtsrubStrategicInsertionCode (lua_State *L) { - UINT8 n = lua_gettop(L); - int i = 0; - UINT32 ubID = 0,GridNo = 0; - BOOLEAN Bool = FALSE; - - for (i= 1; i<=n; i++ ) + if ( lua_gettop( L ) >= 2 ) { - if (i == 1 ) ubID = lua_tointeger(L,i); - if (i == 2 ) GridNo = lua_tointeger(L,i); + SoldierID ubID = lua_tointeger( L, 1 ); + INT32 GridNo = lua_tointeger( L, 2 ); + + + if ( ubID != NOBODY && ubID->bInSector ) + ubID->ubStrategicInsertionCode = GridNo; } - - if ( MercPtrs[ ubID ]->bInSector ) - Bool = TRUE; - else - Bool = FALSE; - - if ( Bool == TRUE ) - MercPtrs[ ubID ]->ubStrategicInsertionCode = GridNo; - return 0; } static int l_WhichBuddy (lua_State *L) { - UINT8 n = lua_gettop(L); - int i = 0; - UINT32 ubID1 = 0,ubID2 = 0,bBuddyIndex = 0; - BOOLEAN Bool = FALSE; - - for (i= 1; i<=n; i++ ) + if ( lua_gettop( L ) >= 2 ) { - if (i == 1 ) ubID1 = lua_tointeger(L,i); - if (i == 2 ) ubID2 = lua_tointeger(L,i); + INT8 bBuddyIndex; + + SoldierID ubID1 = lua_tointeger( L, 1 ); + SoldierID ubID2 = lua_tointeger( L, 2 ); + + + if ( (ubID1 != NOBODY && ubID1->bInSector) && (ubID2 != NOBODY && ubID2->bInSector) ) + bBuddyIndex = WhichBuddy( ubID1->ubProfile, ubID2->ubProfile ); + + lua_pushinteger( L, bBuddyIndex ); } - - if ( MercPtrs[ ubID1 ]->bInSector && MercPtrs[ ubID2 ]->bInSector ) - Bool = TRUE; - else - Bool = FALSE; - - if ( Bool == TRUE ) - bBuddyIndex = WhichBuddy( ubID1, ubID2 ); - - lua_pushinteger(L, bBuddyIndex); - return 1; } static int l_AnimMercPtsrsAbsoluteFinalDestination (lua_State *L) { - UINT8 n = lua_gettop(L); - int i = 0; - UINT32 ubID = 0,GridNo = 0; - BOOLEAN Bool = FALSE; - - for (i= 1; i<=n; i++ ) + if ( lua_gettop( L ) >= 2 ) { - if (i == 1 ) ubID = lua_tointeger(L,i); - if (i == 2 ) GridNo = lua_tointeger(L,i); + SoldierID ubID; + INT32 GridNo = NOWHERE; + + ubID = lua_tointeger( L, 1 ); + GridNo = lua_tointeger( L, 2 ); + + if ( ubID != NOBODY && ubID->bInSector && GridNo != NOWHERE) + ubID->sAbsoluteFinalDestination = GridNo; } - - if ( MercPtrs[ ubID ]->bInSector ) - Bool = TRUE; - else - Bool = FALSE; - - if ( Bool == TRUE ) - MercPtrs[ ubID ]->sAbsoluteFinalDestination = GridNo; - return 0; } static int l_AnimMercPtsrusNextActionData (lua_State *L) { - UINT8 n = lua_gettop(L); - int i = 0; - UINT32 ubID = 0,GridNo = 0; - BOOLEAN Bool = FALSE; - - for (i= 1; i<=n; i++ ) + if ( lua_gettop( L ) >= 2 ) { - if (i == 1 ) ubID = lua_tointeger(L,i); - if (i == 2 ) GridNo = lua_tointeger(L,i); + SoldierID ubID; + INT32 GridNo = NOWHERE; + + ubID = lua_tointeger( L, 1 ); + GridNo = lua_tointeger( L, 2 ); + + if ( ubID != NOBODY && ubID->bInSector && GridNo != NOWHERE ) + ubID->aiData.usNextActionData = GridNo; } - - if ( MercPtrs[ ubID ]->bInSector ) - Bool = TRUE; - else - Bool = FALSE; - - if ( Bool == TRUE ) - MercPtrs[ ubID ]->aiData.usNextActionData = GridNo; - return 0; } static int l_AnimMercPtsrbNextAction (lua_State *L) { - UINT8 n = lua_gettop(L); - int i = 0; - UINT32 ubID = 0,AI_ACTION = 0; - BOOLEAN Bool = FALSE; - - for (i= 1; i<=n; i++ ) + if ( lua_gettop( L ) >= 2 ) { - if (i == 1 ) ubID = lua_tointeger(L,i); - if (i == 2 ) AI_ACTION = lua_tointeger(L,i); + SoldierID ubID; + INT8 AI_ACTION = 0; + + ubID = lua_tointeger( L, 1 ); + AI_ACTION = lua_tointeger( L, 2 ); + + + if ( ubID != NOBODY && ubID->bInSector ) + ubID->aiData.bNextAction = AI_ACTION; } - - if ( MercPtrs[ ubID ]->bInSector ) - Bool = TRUE; - else - Bool = FALSE; - - if ( Bool == TRUE ) - MercPtrs[ ubID ]->aiData.bNextAction = AI_ACTION; - return 0; } static int l_SetSoldierBodyType (lua_State *L) { - UINT8 n = lua_gettop(L); - int i = 0; - UINT32 ubID = 0,Anim = 0; - BOOLEAN Bool = FALSE; - - for (i= 1; i<=n; i++ ) + if ( lua_gettop( L ) >= 2 ) { - if (i == 1 ) ubID = lua_tointeger(L,i); - if (i == 2 ) Anim = lua_tointeger(L,i); + SoldierID ubID; + UINT8 Anim = 0; + + ubID = lua_tointeger( L, 1 ); + Anim = lua_tointeger( L, 2 ); + + if ( ubID != NOBODY && ubID->bInSector && ubID->bActive ) + ubID->ubBodyType = Anim; } - - if ( MercPtrs[ ubID ]->bInSector && MercPtrs[ ubID ]->bActive ) - Bool = TRUE; - else - Bool = FALSE; - - if ( Bool == TRUE ) - MercPtrs[ ubID ]->ubBodyType = Anim; - return 0; } static int l_GetSoldierBodyType (lua_State *L) { - UINT8 n = lua_gettop(L); - int i = 0; - UINT32 ubID = 0,Anim = 0; - BOOLEAN Bool = FALSE; - - for (i= 1; i<=n; i++ ) + if ( lua_gettop( L ) >= 1 ) { - if (i == 1 ) ubID = lua_tointeger(L,i); + SoldierID ubID; + UINT8 Anim = 0; + + ubID = lua_tointeger( L, 1 ); + + if ( ubID != NOBODY && ubID->bInSector && ubID->bActive ) + Anim = ubID->ubBodyType; + + lua_pushinteger( L, Anim ); } - - if ( MercPtrs[ ubID ]->bInSector && MercPtrs[ ubID ]->bActive ) - Bool = TRUE; - else - Bool = FALSE; - - if ( Bool == TRUE ) - Anim = MercPtrs[ ubID ]->ubBodyType; - - lua_pushinteger(L, Anim); - return 1; } static int l_CheckSoldierBodyType (lua_State *L) { - UINT8 n = lua_gettop(L); - int i = 0; - UINT32 ubID = 0,Anim = 0; - BOOLEAN Bool = FALSE, Bool2 = FALSE; + if ( lua_gettop( L ) >= 2 ) + { + SoldierID ubID; + UINT8 Anim = 0; - for (i= 1; i<=n; i++ ) - { - if (i == 1 ) ubID = lua_tointeger(L,i); - if (i == 2 ) Anim = lua_tointeger(L,i); - } - - if ( MercPtrs[ ubID ]->bInSector && MercPtrs[ ubID ]->bActive ) - Bool = TRUE; - else - Bool = FALSE; - - if ( Bool == TRUE ) - { - if ( MercPtrs[ ubID ]->ubBodyType == Anim ) - Bool2 = TRUE; + ubID = lua_tointeger( L, 1 ); + Anim = lua_tointeger( L, 2 ); + + if ( ubID != NOBODY && ubID->bInSector && ubID->bActive && ubID->ubBodyType == Anim ) + { + lua_pushboolean( L, true ); + } else - Bool2 = FALSE; + { + lua_pushboolean( L, false ); + } } - - lua_pushboolean(L, Bool2); - return 1; } static int l_IS_CIV_BODY_TYPE (lua_State *L) { - UINT8 n = lua_gettop(L); - int i = 0; - UINT32 ubID = 0; - BOOLEAN Bool = FALSE; - - for (i= 1; i<=n; i++ ) + if ( lua_gettop( L ) >= 1 ) { - if (i == 1 ) ubID = lua_tointeger(L,i); + SoldierID ubID = lua_tointeger( L, 1 ); + + if ( ubID != NOBODY && ubID->bInSector && ubID->bActive && IS_CIV_BODY_TYPE( ubID ) ) + lua_pushboolean( L, true ); + else + lua_pushboolean( L, false ); } - - if ( MercPtrs[ ubID ]->bInSector && MercPtrs[ ubID ]->bActive && IS_CIV_BODY_TYPE (MercPtrs[ ubID ]) == TRUE ) - Bool = TRUE; - else - Bool = FALSE; - - lua_pushboolean(L, Bool); - return 1; } static int l_SetOffBombsInGridNo (lua_State *L) { - UINT8 n = lua_gettop(L); - int i = 0; - UINT16 ubID = 0; - INT32 sGridNo = 0; - BOOLEAN fAllBombs = FALSE; - INT8 bLevel = 0; - - for (i= 1; i<=n; i++ ) + if ( lua_gettop( L ) >= 4 ) { - if (i == 1 ) ubID = lua_tointeger(L,i); - if (i == 2 ) sGridNo = lua_tointeger(L,i); - if (i == 3 ) fAllBombs = lua_toboolean(L,i); - if (i == 4 ) bLevel = lua_tointeger(L,i); + SoldierID ubID = lua_tointeger( L, 1 ); + INT32 sGridNo = lua_tointeger( L, 2 ); + BOOLEAN fAllBombs = lua_toboolean( L, 3 ); + INT8 bLevel = lua_tointeger( L, 4 ); + + SetOffBombsInGridNo( ubID, sGridNo, fAllBombs, bLevel ); } - - SetOffBombsInGridNo( ubID, sGridNo, fAllBombs,bLevel ); return 0; } static int l_AnimMercPtsrSoldierGotHit (lua_State *L) { - UINT8 n = lua_gettop(L); - int i = 0; - UINT32 ubID = 0; - BOOLEAN Bool = FALSE; + if ( lua_gettop( L ) >= 1 ) + { + SoldierID ubID = lua_tointeger( L, 1 ); - for (i= 1; i<=n; i++ ) - { - if (i == 1 ) ubID = lua_tointeger(L,i); - //if (i == 2 ) Anim = lua_tointeger(L,i); - } - - if ( MercPtrs[ ubID ]->bInSector && MercPtrs[ ubID ]->bActive) - Bool = TRUE; - else - Bool = FALSE; - - if ( Bool == TRUE ) - { - if ( MercPtrs[ ubID ]->stats.bLife >= 0 ) + if ( ubID != NOBODY && ubID->bInSector && ubID->bActive ) { - MercPtrs[ ubID ]->EVENT_SoldierGotHit( 1, 100, 10, MercPtrs[ ubID ]->ubDirection, 320, NOBODY, FIRE_WEAPON_NO_SPECIAL, AIM_SHOT_TORSO, 0, NOWHERE ); + if ( ubID->stats.bLife >= 0 ) + { + ubID->EVENT_SoldierGotHit( 1, 100, 10, ubID->ubDirection, 320, NOBODY, FIRE_WEAPON_NO_SPECIAL, AIM_SHOT_TORSO, 0, NOWHERE ); + } } } - return 0; } -static int l_CheckMercPtsrubIDSeenubID2 (lua_State *L) +static int l_CheckMercPtsrubIDSeenubID2( lua_State *L ) { - UINT8 n = lua_gettop(L); - int i = 0; - UINT32 ubID = 0,ubID2 = 0; - UINT16 seen = 0; - - for (i= 1; i<=n; i++ ) + if ( lua_gettop( L ) >= 2 ) { - if (i == 1 ) ubID = lua_tointeger(L,i); - if (i == 2 ) ubID2 = lua_tointeger(L,i); + SoldierID ubID = lua_tointeger( L, 1 ); + SoldierID ubID2 = lua_tointeger( L, 2 ); + + if ( ubID != NOBODY && ubID2 != NOBODY ) + { + INT8 seen = ubID->aiData.bOppList[ubID2]; + lua_pushinteger( L, seen ); + } } - - seen = MercPtrs[ ubID ]->aiData.bOppList[ ubID2 ]; - - lua_pushinteger(L, seen); - return 1; } static int l_CheckMercPtrsInCivilianGroup (lua_State *L) { - UINT8 n = lua_gettop(L); - int i = 0; - UINT8 group = 0; - UINT32 ubID = 0; - - for (i= 1; i<=n; i++ ) + if ( lua_gettop( L ) >= 1 ) { - if (i == 1 ) ubID = lua_tointeger(L,i); + SoldierID ubID = lua_tointeger( L, 1 ); + + if ( ubID != NOBODY ) + { + UINT8 group = ubID->ubCivilianGroup; + lua_pushinteger( L, group ); + } } - - group = MercPtrs[ ubID ]->ubCivilianGroup; - - lua_pushinteger(L, group); return 1; } @@ -12350,286 +12137,126 @@ return 0; static int l_SetMercPtsrSectorZ(lua_State *L) { - - UINT16 ubID = 0; - BOOLEAN Bool = FALSE; - SOLDIERTYPE * pSoldier; - INT8 SectorZ; - if ( lua_gettop(L) >= 2 ) { - ubID = lua_tointeger(L,1); - SectorZ = lua_tointeger(L,2); + SoldierID ubID = lua_tointeger(L,1); + INT8 SectorZ = lua_tointeger(L,2); - if ( MercPtrs[ ubID ]->bInSector && MercPtrs[ ubID ]->bActive) - Bool = TRUE; - else - Bool = FALSE; - - if ( Bool == TRUE ) - { - pSoldier = MercPtrs[ ubID ]; - - if (pSoldier) + if ( ubID != NOBODY && ubID->bInSector && ubID->bActive) { - pSoldier->bSectorZ = SectorZ; + ubID->bSectorZ = SectorZ; } } - - } - return 0; } static int l_SetMercPtsrSectorX(lua_State *L) { - UINT16 ubID = 0; - BOOLEAN Bool = FALSE; - SOLDIERTYPE * pSoldier; - INT16 SectorX; + if ( lua_gettop( L ) >= 2 ) + { + SoldierID ubID = lua_tointeger( L, 1 ); + INT16 SectorX = lua_tointeger( L, 2 ); - if ( lua_gettop(L) >= 2 ) - { - ubID = lua_tointeger(L,1); - SectorX = lua_tointeger(L,2); - - if ( MercPtrs[ ubID ]->bInSector && MercPtrs[ ubID ]->bActive) - Bool = TRUE; - else - Bool = FALSE; - - if ( Bool == TRUE ) - { - pSoldier = MercPtrs[ ubID ]; - - if (pSoldier) + if ( ubID != NOBODY && ubID->bInSector && ubID->bActive ) { - pSoldier->sSectorX = SectorX; + ubID->sSectorX = SectorX; } } - - } - return 0; } static int l_SetMercPtsrSectorY(lua_State *L) { - - UINT16 ubID = 0; - BOOLEAN Bool = FALSE; - SOLDIERTYPE * pSoldier; - INT16 SectorY; - - if ( lua_gettop(L) >= 2 ) + if ( lua_gettop( L ) >= 2 ) { - ubID = lua_tointeger(L,1); - SectorY = lua_tointeger(L,2); - - if ( MercPtrs[ ubID ]->bInSector && MercPtrs[ ubID ]->bActive) - Bool = TRUE; - else - Bool = FALSE; - - if ( Bool == TRUE ) - { - pSoldier = MercPtrs[ ubID ]; - - if (pSoldier) + SoldierID ubID = lua_tointeger( L, 1 ); + INT16 SectorY = lua_tointeger( L, 2 ); + + if ( ubID != NOBODY && ubID->bInSector && ubID->bActive ) { - pSoldier->sSectorY = SectorY; + ubID->sSectorY = SectorY; } } - - } - return 0; } static int l_SetMercPtsrubGroupID(lua_State *L) { - - UINT16 ubID = 0; - BOOLEAN Bool = FALSE; - SOLDIERTYPE * pSoldier; - INT8 GroupID; - - if ( lua_gettop(L) >= 2 ) + if ( lua_gettop( L ) >= 2 ) { - ubID = lua_tointeger(L,1); - GroupID = lua_tointeger(L,2); - - if ( MercPtrs[ ubID ]->bInSector && MercPtrs[ ubID ]->bActive) - Bool = TRUE; - else - Bool = FALSE; - - if ( Bool == TRUE ) - { - pSoldier = MercPtrs[ ubID ]; - - if (pSoldier) - { - pSoldier->ubGroupID = GroupID; - } - } + SoldierID ubID = lua_tointeger( L, 1 ); + INT8 GroupID = lua_tointeger( L, 2 ); - + if ( ubID != NOBODY && ubID->bInSector && ubID->bActive ) + ubID->ubGroupID = GroupID; } return 0; } static int l_CheckMercPtsrSectorY(lua_State *L) { - - UINT16 ubID = 0; - BOOLEAN Bool = FALSE; - SOLDIERTYPE * pSoldier; - INT16 SectorY; - - if ( lua_gettop(L) >= 1 ) + if ( lua_gettop( L ) >= 1 ) { - ubID = lua_tointeger(L,1); - - if ( MercPtrs[ ubID ]->bInSector && MercPtrs[ ubID ]->bActive) - Bool = TRUE; - else - Bool = FALSE; - - if ( Bool == TRUE ) - { - pSoldier = MercPtrs[ ubID ]; - - if (pSoldier) - { - SectorY = pSoldier->sSectorY; - } - } - else - { - SectorY = 0; - } - - lua_pushinteger(L, SectorY); - - } + SoldierID ubID = lua_tointeger( L, 1 ); + INT16 SectorY = 0; + + if ( ubID != NOBODY && ubID->bInSector && ubID->bActive ) + SectorY = ubID->sSectorY; + + lua_pushinteger( L, SectorY ); + } return 1; } static int l_CheckMercPtsrSectorX(lua_State *L) { - - UINT16 ubID = 0; - BOOLEAN Bool = FALSE; - SOLDIERTYPE * pSoldier; - INT16 SectorX; - - if ( lua_gettop(L) >= 1 ) + if ( lua_gettop( L ) >= 1 ) { - ubID = lua_tointeger(L,1); + SoldierID ubID = lua_tointeger( L, 1 ); + INT16 SectorX = 0; - - if ( MercPtrs[ ubID ]->bInSector && MercPtrs[ ubID ]->bActive) - Bool = TRUE; - else - Bool = FALSE; - - if ( Bool == TRUE ) - { - pSoldier = MercPtrs[ ubID ]; - - if (pSoldier) + if ( ubID != NOBODY && ubID->bInSector && ubID->bActive ) { - SectorX = pSoldier->sSectorX; + SectorX = ubID->sSectorX; } - } - else - { - SectorX = 0; - } - - lua_pushinteger(L, SectorX); - - } + lua_pushinteger( L, SectorX ); + } return 1; } -static int l_CheckMercPtsrSectorZ(lua_State *L) +static int l_CheckMercPtsrSectorZ( lua_State *L ) { - UINT16 ubID = 0; - BOOLEAN Bool = FALSE; - SOLDIERTYPE * pSoldier; - INT16 SectorZ; - - if ( lua_gettop(L) >= 1 ) + if ( lua_gettop( L ) >= 1 ) { - ubID = lua_tointeger(L,1); + SoldierID ubID = lua_tointeger( L, 1 ); + INT8 SectorZ = 0; - - if ( MercPtrs[ ubID ]->bInSector && MercPtrs[ ubID ]->bActive) - Bool = TRUE; - else - Bool = FALSE; - - if ( Bool == TRUE ) - { - pSoldier = MercPtrs[ ubID ]; - - if (pSoldier) + if ( ubID != NOBODY && ubID->bInSector && ubID->bActive ) { - SectorZ = pSoldier->bSectorZ; + SectorZ = ubID->bSectorZ; } - } - else - { - SectorZ = 0; - } - - lua_pushinteger(L, SectorZ); + lua_pushinteger( L, SectorZ ); } - return 1; } static int l_CheckMercPtsrubGroupID(lua_State *L) { - UINT16 ubID = 0; - BOOLEAN Bool = FALSE; - SOLDIERTYPE * pSoldier; - UINT8 GroupID; - - if ( lua_gettop(L) >= 1 ) + if ( lua_gettop( L ) >= 1 ) { - ubID = lua_tointeger(L,1); - - if ( MercPtrs[ ubID ]->bInSector && MercPtrs[ ubID ]->bActive) - Bool = TRUE; - else - Bool = FALSE; - - if ( Bool == TRUE ) - { - pSoldier = MercPtrs[ ubID ]; - - if (pSoldier) - { - GroupID = pSoldier->ubGroupID; - } - else - { - GroupID = NUMBER_OF_SQUADS; - } - } - else - GroupID = NUMBER_OF_SQUADS; - - lua_pushinteger(L, GroupID); - - } + SoldierID ubID = lua_tointeger( L, 1 ); + UINT8 GroupID = NUMBER_OF_SQUADS; + if ( ubID != NOBODY && ubID->bInSector && ubID->bActive ) + { + GroupID = ubID->ubGroupID; + } + + lua_pushinteger( L, GroupID ); + } return 1; } From 67c808110425a930b9474a254ed7796eaa9c64a8 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Thu, 21 Nov 2024 21:29:28 +0200 Subject: [PATCH 154/192] Use SoldierID --- Strategic/Merc Contract.cpp | 8 ++++---- Strategic/Merc Contract.h | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Strategic/Merc Contract.cpp b/Strategic/Merc Contract.cpp index c0f4e4e2..848213e9 100644 --- a/Strategic/Merc Contract.cpp +++ b/Strategic/Merc Contract.cpp @@ -282,9 +282,9 @@ void EndCurrentContractRenewal( ) } } -void HandleMercIsWillingToRenew( UINT16 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( UINT16 ubID ) } -void HandleMercIsNotWillingToRenew( UINT16 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 ); diff --git a/Strategic/Merc Contract.h b/Strategic/Merc Contract.h index abfc0ec5..dd6ccf4f 100644 --- a/Strategic/Merc Contract.h +++ b/Strategic/Merc Contract.h @@ -68,8 +68,8 @@ void FindOutIfAnyMercAboutToLeaveIsGonnaRenew( void ); void BeginContractRenewalSequence( ); void HandleContractRenewalSequence( ); void EndCurrentContractRenewal( ); -void HandleMercIsWillingToRenew( UINT16 ubID ); -void HandleMercIsNotWillingToRenew( UINT16 ubID ); +void HandleMercIsWillingToRenew( SoldierID ubID ); +void HandleMercIsNotWillingToRenew( SoldierID ubID ); BOOLEAN ContractIsExpiring( SOLDIERTYPE *pSoldier ); UINT32 GetHourWhenContractDone( SOLDIERTYPE *pSoldier ); From 94f2e830e030741e12b6ed954f782346e6b8736d Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Thu, 21 Nov 2024 21:53:36 +0200 Subject: [PATCH 155/192] Lessen repetition --- Strategic/PreBattle Interface.cpp | 75 ++++++++++++++++--------------- Strategic/Queen Command.cpp | 8 ++-- 2 files changed, 45 insertions(+), 38 deletions(-) diff --git a/Strategic/PreBattle Interface.cpp b/Strategic/PreBattle Interface.cpp index 5aed8f36..73bb1cd8 100644 --- a/Strategic/PreBattle Interface.cpp +++ b/Strategic/PreBattle Interface.cpp @@ -602,9 +602,10 @@ void InitPreBattleInterface( GROUP *pBattleGroup, BOOLEAN fPersistantPBI ) guiNumInvolved = 0; for( 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 = MercPtrs[i]; + if( pSoldier->bActive && pSoldier->stats.bLife && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) ) { - if ( PlayerMercInvolvedInThisCombat( MercPtrs[ i ] ) ) + if ( PlayerMercInvolvedInThisCombat( pSoldier ) ) { // involved if( !ubGroupID ) @@ -613,13 +614,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 ); @@ -627,7 +628,7 @@ void InitPreBattleInterface( GROUP *pBattleGroup, BOOLEAN fPersistantPBI ) CalculateGroupRetreatSector( pTempGroup ); } } - else if( ubGroupID != MercPtrs[ i ]->ubGroupID ) + else if( ubGroupID != pSoldier->ubGroupID ) { fUsePluralVersion = TRUE; } @@ -635,23 +636,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 @@ -664,7 +665,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,14 +891,15 @@ void InitPreBattleInterface( GROUP *pBattleGroup, BOOLEAN fPersistantPBI ) { for( 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 = MercPtrs[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++; } } } @@ -1577,20 +1579,21 @@ void RenderPreBattleInterface() y = TOP_Y + TOP_Y_TEXT_BUFFER - bListOffset; for( 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 = MercPtrs[i]; + 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 @@ -1622,31 +1625,32 @@ void RenderPreBattleInterface() 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++ ) { - if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->stats.bLife && !(MercPtrs[ i ]->flags.uiStatusFlags & SOLDIER_VEHICLE) ) + SOLDIERTYPE *pSoldier = MercPtrs[i]; + 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); @@ -1814,10 +1818,11 @@ void RetreatMercsCallback( GUI_BUTTON *btn, INT32 reason ) // SANDRO - merc records - times retreated counter for( UINT16 i = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; i <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; i++ ) { - if ( MercPtrs[i]->bActive && MercPtrs[i]->stats.bLife >= OKLIFE ) + SOLDIERTYPE *pSoldier = MercPtrs[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++; } } ///////////////////////////////////////////////////////////////////////////////// diff --git a/Strategic/Queen Command.cpp b/Strategic/Queen Command.cpp index 487ee8fe..89a282dd 100644 --- a/Strategic/Queen Command.cpp +++ b/Strategic/Queen Command.cpp @@ -560,12 +560,14 @@ void EndTacticalBattleForEnemy() //severe loyalty blow. for( 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 = MercPtrs[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(UINT16 j = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; j <= gTacticalStatus.Team[ CREATURE_TEAM ].bLastID; ++i ) { - if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->bInSector && MercPtrs[ i ]->stats.bLife >= OKLIFE ) + SOLDIERTYPE *pEnemy = MercPtrs[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; From d687956cf1c084a3214d0709addc5c236c56ec23 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Thu, 21 Nov 2024 21:53:48 +0200 Subject: [PATCH 156/192] Remove unused function --- Strategic/Queen Command.cpp | 83 ------------------------------------- Strategic/Queen Command.h | 1 - 2 files changed, 84 deletions(-) diff --git a/Strategic/Queen Command.cpp b/Strategic/Queen Command.cpp index 89a282dd..1ee6eaef 100644 --- a/Strategic/Queen Command.cpp +++ b/Strategic/Queen Command.cpp @@ -2948,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 ) ) diff --git a/Strategic/Queen Command.h b/Strategic/Queen Command.h index ead2f97e..e2131429 100644 --- a/Strategic/Queen Command.h +++ b/Strategic/Queen Command.h @@ -46,7 +46,6 @@ void EndTacticalBattleForEnemy(); void ProcessQueenCmdImplicationsOfDeath( SOLDIERTYPE *pSoldier ); -void HandleEnemyStatusInCurrentMapBeforeLoadingNewMap(); BOOLEAN SaveUnderGroundSectorInfoToSaveGame( HWFILE hFile ); BOOLEAN LoadUnderGroundSectorInfoFromSavedGame( HWFILE hFile ); From 1ac5d153fb683d6f37168136847784b6e08013a8 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Thu, 21 Nov 2024 23:55:51 +0200 Subject: [PATCH 157/192] Correct inc/dec operator overloads --- Tactical/Overhead Types.h | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/Tactical/Overhead Types.h b/Tactical/Overhead Types.h index 40d23a03..65e6ec04 100644 --- a/Tactical/Overhead Types.h +++ b/Tactical/Overhead Types.h @@ -415,6 +415,16 @@ typedef struct SoldierID const SOLDIERTYPE* operator->() const { return MercPtrs[i]; } inline operator SOLDIERTYPE* () { return MercPtrs[i]; } inline operator const SOLDIERTYPE*() const { return MercPtrs[i]; } + inline SoldierID &operator++() + { + i++; + return *this; + } + inline SoldierID &operator--() + { + i--; + return *this; + } } SoldierID; inline bool operator==(const SoldierID lhs, const SoldierID rhs) { return lhs.i == rhs.i; } @@ -475,17 +485,6 @@ inline SoldierID operator+(const SoldierID lhs, const UINT16 rhs) { return Soldi inline SoldierID operator+(const unsigned int lhs, const SoldierID rhs) { return SoldierID{ static_cast(lhs + rhs.i) }; } inline SoldierID operator+(const INT16 lhs, const SoldierID rhs) { return SoldierID{ static_cast(lhs + rhs.i) }; } -inline SoldierID operator--(SoldierID lhs) -{ - lhs.i -= 1; - return lhs; -} - -inline SoldierID operator++(SoldierID lhs) -{ - lhs.i += 1; - return lhs; -} //TODO: Change this to constexpr after SoldierID is ready and the user defined constructor from uint16 is not needed anymore. inline constexpr SoldierID NOBODY{ TOTAL_SOLDIERS }; From 0d97e36c3456ed012dcd3e0324cd3aeb59707e49 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Thu, 21 Nov 2024 23:56:44 +0200 Subject: [PATCH 158/192] Use SoldierID --- Strategic/MilitiaIndividual.cpp | 5 +- Strategic/Quests.cpp | 13 +++-- Strategic/Strategic Movement.cpp | 31 +++++----- Strategic/Strategic Transport Groups.cpp | 33 ++++++----- Strategic/strategicmap.cpp | 73 +++++++++++++----------- Strategic/strategicmap.h | 10 ++-- Tactical/Interface Dialogue.cpp | 16 +++--- Tactical/Interface Items.cpp | 32 +++++------ Tactical/Interface Panels.cpp | 9 +-- Tactical/LOS.cpp | 22 +++---- Tactical/Morale.cpp | 3 +- Tactical/PATHAI.cpp | 4 +- Tactical/ShopKeeper Interface.cpp | 8 +-- Tactical/Soldier Ani.cpp | 31 +++++----- Tactical/Soldier Find.cpp | 8 +-- Tactical/Soldier Tile.cpp | 47 +++++++-------- Tactical/Squads.cpp | 11 ++-- Tactical/Strategic Exit GUI.cpp | 24 ++++---- Tactical/Tactical Save.cpp | 10 ++-- Tactical/TeamTurns.cpp | 19 +++--- Tactical/Turn Based Input.cpp | 4 +- Tactical/opplist.cpp | 9 +-- 22 files changed, 218 insertions(+), 204 deletions(-) diff --git a/Strategic/MilitiaIndividual.cpp b/Strategic/MilitiaIndividual.cpp index 28cd25af..d40759af 100644 --- a/Strategic/MilitiaIndividual.cpp +++ b/Strategic/MilitiaIndividual.cpp @@ -284,9 +284,10 @@ SOLDIERTYPE* GetUsedSoldierToIndividualMilitia( UINT32 aMilitiaId ) { for ( UINT32 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 = MercPtrs[cnt]; + if ( pSoldier && pSoldier->bActive && pSoldier->usIndividualMilitiaID == aMilitiaId ) { - return MercPtrs[cnt]; + return pSoldier; } } diff --git a/Strategic/Quests.cpp b/Strategic/Quests.cpp index 51e5b27a..c125bda6 100644 --- a/Strategic/Quests.cpp +++ b/Strategic/Quests.cpp @@ -1716,16 +1716,17 @@ void GiveQuestRewardPoint( INT16 sQuestSectorX, INT16 sQuestsSectorY, INT8 bExpR for ( UINT16 i = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; i <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; i++ ) { - 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 = MercPtrs[i]; + 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 ); } } } diff --git a/Strategic/Strategic Movement.cpp b/Strategic/Strategic Movement.cpp index 426a8832..8ebeaf87 100644 --- a/Strategic/Strategic Movement.cpp +++ b/Strategic/Strategic Movement.cpp @@ -5458,13 +5458,14 @@ BOOLEAN TestForBloodcatAmbush( GROUP *pGroup ) { for( UINT16 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 = MercPtrs[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++; } } } @@ -5943,13 +5944,14 @@ BOOLEAN ScoutIsPresentInSquad( INT16 ubSectorNumX, INT16 ubSectorNumY ) // 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++ ) { - 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 = MercPtrs[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; } @@ -5982,11 +5984,12 @@ BOOLEAN ConcealedMercInSector( INT16 ubSectorNumX, INT16 ubSectorNumY, BOOLEAN a for ( int 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 = MercPtrs[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; } diff --git a/Strategic/Strategic Transport Groups.cpp b/Strategic/Strategic Transport Groups.cpp index ccd981d0..5cc85f3d 100644 --- a/Strategic/Strategic Transport Groups.cpp +++ b/Strategic/Strategic Transport Groups.cpp @@ -224,27 +224,29 @@ void FillMapColoursForTransportGroups(INT32(&colorMap)[MAXIMUM_VALID_Y_COORDINAT std::map monitoredTowns; for( INT16 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 = MercPtrs[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(MercPtrs[i]->sSectorX, MercPtrs[i]->sSectorY)] = DETECTION_RANGE_SCOUT; + detectionMap[std::pair(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(MercPtrs[i]->sSectorX, MercPtrs[i]->sSectorY)] = DETECTION_RANGE_RADIO; + detectionMap[std::pair(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(MercPtrs[i]->sSectorX, MercPtrs[i]->sSectorY)] = DETECTION_RANGE_COVERT; - monitoredTowns[GetTownIdForSector(MercPtrs[i]->sSectorX, MercPtrs[i]->sSectorY)] = MonitoredSectorState::Monitored; + detectionMap[std::pair(pSoldier->sSectorX, pSoldier->sSectorY)] = DETECTION_RANGE_COVERT; + monitoredTowns[GetTownIdForSector(pSoldier->sSectorX, pSoldier->sSectorY)] = MonitoredSectorState::Monitored; } } } @@ -481,11 +483,12 @@ void UpdateTransportGroupInventory() std::set playerCalibres; for (INT16 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 = MercPtrs[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) { diff --git a/Strategic/strategicmap.cpp b/Strategic/strategicmap.cpp index cca5a3ee..b5908ecf 100644 --- a/Strategic/strategicmap.cpp +++ b/Strategic/strategicmap.cpp @@ -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; @@ -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 ); } } @@ -2967,9 +2970,10 @@ BOOLEAN EnterSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ ) { for ( i = gTacticalStatus.Team[CIV_TEAM].bFirstID; i <= gTacticalStatus.Team[CIV_TEAM].bLastID; i++ ) { - if ( MercPtrs[i]->bActive && MercPtrs[i]->bInSector ) + SOLDIERTYPE *pSoldier = MercPtrs[i]; + if ( pSoldier->bActive && pSoldier->bInSector ) { - SetupProfileInsertionDataForSoldier( MercPtrs[i] ); + SetupProfileInsertionDataForSoldier( pSoldier ); } } } @@ -4869,7 +4873,7 @@ 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; @@ -4894,7 +4898,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; @@ -6491,9 +6495,10 @@ BOOLEAN HandleDefiniteUnloadingOfWorld( UINT8 ubUnloadCode ) //@@@Evaluate for ( i = gTacticalStatus.Team[CIV_TEAM].bFirstID; i <= gTacticalStatus.Team[CIV_TEAM].bLastID; i++ ) { - if ( MercPtrs[i]->bActive && MercPtrs[i]->bInSector ) + SOLDIERTYPE *pSoldier = MercPtrs[i]; + if ( pSoldier->bActive && pSoldier->bInSector ) { - SetupProfileInsertionDataForSoldier( MercPtrs[i] ); + SetupProfileInsertionDataForSoldier( pSoldier ); } } @@ -6511,19 +6516,21 @@ BOOLEAN HandlePotentialBringUpAutoresolveToFinishBattle( int pSectorX, int pSect //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++ ) { - if ( MercPtrs[i]->bActive && MercPtrs[i]->stats.bLife ) + SOLDIERTYPE *pEnemy = MercPtrs[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++ ) { - if ( MercPtrs[i]->bActive && MercPtrs[i]->stats.bLife && MercPtrs[i]->bSide == OUR_TEAM ) + SOLDIERTYPE *pMilitia = MercPtrs[i]; + 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; @@ -6587,14 +6594,15 @@ BOOLEAN CheckAndHandleUnloadingOfCurrentWorld( ) { for ( 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 = MercPtrs[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 ); } } } @@ -6604,11 +6612,12 @@ BOOLEAN CheckAndHandleUnloadingOfCurrentWorld( ) { //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++ ) { //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 = MercPtrs[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 ) { return FALSE; } diff --git a/Strategic/strategicmap.h b/Strategic/strategicmap.h index e43191c5..1a74e8fc 100644 --- a/Strategic/strategicmap.h +++ b/Strategic/strategicmap.h @@ -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; diff --git a/Tactical/Interface Dialogue.cpp b/Tactical/Interface Dialogue.cpp index 6bb0bf63..a47e6402 100644 --- a/Tactical/Interface Dialogue.cpp +++ b/Tactical/Interface Dialogue.cpp @@ -3224,7 +3224,7 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum if ( pSoldier ) { INT32 sNearestPC; - UINT16 ubID; + SoldierID ubID; INT8 bMoneySlot; INT8 bEmptySlot; @@ -3235,7 +3235,7 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum ubID = WhoIsThere2( sNearestPC, 0 ); if (ubID != NOBODY) { - pSoldier2 = MercPtrs[ ubID ]; + pSoldier2 = ubID; } } @@ -3357,7 +3357,7 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum pSoldier = FindSoldierByProfileID( ubTargetNPC, FALSE ); if (pSoldier) { - UINT16 ubTargetID; + SoldierID ubTargetID; SOLDIERTYPE *pTarget; // Target a different merc.... @@ -3384,7 +3384,7 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum } else { - pTarget = MercPtrs[ ubTargetID ]; + pTarget = ubTargetID; } // Use a different approach.... @@ -3477,7 +3477,7 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum pSoldier = FindSoldierByProfileID( ubTargetNPC, FALSE ); if (pSoldier) { - UINT16 ubTargetID; + SoldierID ubTargetID; SOLDIERTYPE *pTarget; INT32 cnt; BOOLEAN fGoodTarget = FALSE; @@ -3491,7 +3491,7 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum } else { - pTarget = MercPtrs[ ubTargetID ]; + pTarget = ubTargetID; } pSoldier->aiData.uiPendingActionData4 = APPROACH_DONE_PUNCH_1; @@ -3901,7 +3901,7 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum if ( !gfInTalkPanel ) { INT32 sNearestPC; - UINT16 ubID; + SoldierID ubID; pSoldier = FindSoldierByProfileID( ubTargetNPC, FALSE ); if ( pSoldier ) @@ -3914,7 +3914,7 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum ubID = WhoIsThere2( sNearestPC, 0 ); if (ubID != NOBODY) { - pSoldier2 = MercPtrs[ ubID ]; + pSoldier2 = ubID; } } diff --git a/Tactical/Interface Items.cpp b/Tactical/Interface Items.cpp index b3f56f6a..ed3ee63b 100644 --- a/Tactical/Interface Items.cpp +++ b/Tactical/Interface Items.cpp @@ -9185,10 +9185,10 @@ BOOLEAN HandleItemPointerClick( INT32 usMapPos ) usItem = gpItemPointer->usItem; // If the target is a robot, - if ( MercPtrs[ ubSoldierID ]->flags.uiStatusFlags & SOLDIER_ROBOT ) + if ( ubSoldierID->flags.uiStatusFlags & SOLDIER_ROBOT ) { // Charge APs to reload robot! - sAPCost = GetAPsToReloadRobot( gpItemPointerSoldier, MercPtrs[ ubSoldierID ] ); + sAPCost = GetAPsToReloadRobot( gpItemPointerSoldier, ubSoldierID ); } else { @@ -9208,12 +9208,12 @@ BOOLEAN HandleItemPointerClick( INT32 usMapPos ) // } /* //if the user just clicked on an arms dealer - if( IsMercADealer( MercPtrs[ ubSoldierID ]->ubProfile ) ) + if( IsMercADealer( ubSoldierID->ubProfile ) ) { if ( EnoughPoints( gpItemPointerSoldier, sAPCost, 0, TRUE ) ) { //Enter the shopkeeper interface - EnterShopKeeperInterfaceScreen( MercPtrs[ ubSoldierID ]->ubProfile ); + EnterShopKeeperInterfaceScreen( ubSoldierID->ubProfile ); EndItemPointer( ); } @@ -9225,10 +9225,10 @@ BOOLEAN HandleItemPointerClick( INT32 usMapPos ) if ( EnoughPoints( gpItemPointerSoldier, sAPCost, 0, TRUE ) ) { // If we are a robot, check if this is proper item to reload! - if ( MercPtrs[ ubSoldierID ]->flags.uiStatusFlags & SOLDIER_ROBOT ) + if ( ubSoldierID->flags.uiStatusFlags & SOLDIER_ROBOT ) { // Check if we can reload robot.... - if ( IsValidAmmoToReloadRobot( MercPtrs[ ubSoldierID ], &gTempObject ) ) + if ( IsValidAmmoToReloadRobot( ubSoldierID, &gTempObject ) ) { INT32 sActionGridNo; UINT8 ubDirection; @@ -9236,7 +9236,7 @@ BOOLEAN HandleItemPointerClick( INT32 usMapPos ) // Walk up to him and reload! // See if we can get there to stab - sActionGridNo = FindAdjacentGridEx( gpItemPointerSoldier, MercPtrs[ ubSoldierID ]->sGridNo, &ubDirection, &sAdjustedGridNo, TRUE, FALSE ); + sActionGridNo = FindAdjacentGridEx( gpItemPointerSoldier, ubSoldierID->sGridNo, &ubDirection, &sAdjustedGridNo, TRUE, FALSE ); if ( sActionGridNo != -1 && gbItemPointerSrcSlot != NO_SLOT ) { @@ -9279,16 +9279,16 @@ BOOLEAN HandleItemPointerClick( INT32 usMapPos ) //if (gbItemPointerSrcSlot != NO_SLOT ) { // Give guy this item..... - SoldierGiveItem( gpItemPointerSoldier, MercPtrs[ ubSoldierID ], &gTempObject, gbItemPointerSrcSlot ); + SoldierGiveItem( gpItemPointerSoldier, ubSoldierID, &gTempObject, gbItemPointerSrcSlot ); gfDontChargeAPsToPickup = FALSE; EndItemPointer( ); // If we are giving it to somebody not on our team.... - if ( gMercProfiles[MercPtrs[ubSoldierID]->ubProfile].Type == PROFILETYPE_AIM || - gMercProfiles[MercPtrs[ubSoldierID]->ubProfile].Type == PROFILETYPE_MERC || - gMercProfiles[MercPtrs[ubSoldierID]->ubProfile].Type == PROFILETYPE_IMP - || RPC_RECRUITED( MercPtrs[ubSoldierID] ) ) + if ( gMercProfiles[ubSoldierID->ubProfile].Type == PROFILETYPE_AIM || + gMercProfiles[ubSoldierID->ubProfile].Type == PROFILETYPE_MERC || + gMercProfiles[ubSoldierID->ubProfile].Type == PROFILETYPE_IMP + || RPC_RECRUITED( ubSoldierID ) ) { } @@ -10533,7 +10533,7 @@ void ItemPopupRegionCallback( MOUSE_REGION * pRegion, INT32 iReason ) { UINT32 uiItemPos; UINT32 iItemCap; - INT32 ubID; + SoldierID ubID; CHAR16 sString[ 128 ]; uiItemPos = MSYS_GetRegionUserData( pRegion, 0 ); @@ -10625,11 +10625,11 @@ void ItemPopupRegionCallback( MOUSE_REGION * pRegion, INT32 iReason ) fTeamPanelDirty=TRUE; // remember which gridno the object came from - sObjectSourceGridNo = MercPtrs[ubID]->sGridNo; + sObjectSourceGridNo = ubID->sGridNo; // and who owned it last - gpItemPointerSoldier = MercPtrs[ubID]; + gpItemPointerSoldier = ubID; - ReevaluateItemHatches( MercPtrs[ubID], FALSE ); + ReevaluateItemHatches( ubID, FALSE ); } //Dirty interface diff --git a/Tactical/Interface Panels.cpp b/Tactical/Interface Panels.cpp index ae0ed4cc..8f039637 100644 --- a/Tactical/Interface Panels.cpp +++ b/Tactical/Interface Panels.cpp @@ -4513,17 +4513,18 @@ void BtnDropPackCallback(GUI_BUTTON *btn,INT32 reason) INT8 bAssignment = gpSMCurrentMerc->bAssignment; for( int x = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; x <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; x++ ) { + SOLDIERTYPE *pSoldier = MercPtrs[x]; /* Is DropPackFlag currently false and is there something in the backpack pocket? If so, we haven't dropped a pack yet and apparently want to*/ - if(MercPtrs[x]->bAssignment == bAssignment && MercPtrs[x]->inv[BPACKPOCKPOS].exists() == true && !MercPtrs[x]->flags.DropPackFlag) + if(pSoldier->bAssignment == bAssignment && pSoldier->inv[BPACKPOCKPOS].exists() == true && !pSoldier->flags.DropPackFlag) { - ChangeDropPackStatus(MercPtrs[x], TRUE); + ChangeDropPackStatus(pSoldier, TRUE); } /* Is DropPackFlag currently true, is nothing in the backpack pocket and have we dropped a pack? If so, we must want to retreive a backpack we previously dropped.*/ - else if(MercPtrs[x]->bAssignment == bAssignment && MercPtrs[x]->inv[BPACKPOCKPOS].exists() == false && MercPtrs[x]->flags.DropPackFlag) + else if(pSoldier->bAssignment == bAssignment && pSoldier->inv[BPACKPOCKPOS].exists() == false && pSoldier->flags.DropPackFlag) { - ChangeDropPackStatus(MercPtrs[x], FALSE); + ChangeDropPackStatus(pSoldier, FALSE); } } } diff --git a/Tactical/LOS.cpp b/Tactical/LOS.cpp index 3513e580..044e99fc 100644 --- a/Tactical/LOS.cpp +++ b/Tactical/LOS.cpp @@ -7223,8 +7223,10 @@ void MoveBullet( INT32 iBullet ) } else if (pStructure->fFlags & STRUCTURE_PERSON) { + SOLDIERTYPE *pSoldier = MercPtrs[pStructure->usStructureID]; + // HEADROCK HAM 5: Fragments can hit the shooter. - if ( MercPtrs[ pStructure->usStructureID ] != pBullet->pFirer || pBullet->fFragment == TRUE ) + if ( pSoldier != pBullet->pFirer || pBullet->fFragment == TRUE ) { // in actually moving the bullet, we consider only count friends as targets if the bullet is unaimed // (buckshot), if they are the intended target, or beyond the range of automatic friendly fire hits @@ -7243,13 +7245,13 @@ void MoveBullet( INT32 iBullet ) else if ( pBullet->pFirer->flags.uiStatusFlags & SOLDIER_MONSTER ) { // monsters firing will always accidentally hit people but never accidentally hit each other. - if ( !(MercPtrs[ pStructure->usStructureID ]->flags.uiStatusFlags & SOLDIER_MONSTER) ) + if ( !(pSoldier->flags.uiStatusFlags & SOLDIER_MONSTER) ) { gpLocalStructure[iNumLocalStructures] = pStructure; iNumLocalStructures++; } } - else if (MercPtrs[pStructure->usStructureID]->bVisible == TRUE && + else if (pSoldier->bVisible == TRUE && PositionAllowsHit(pBullet, pStructure) && (pBullet->fAimed && pBullet->iLoop > MIN_DIST_FOR_HIT_FRIENDS || !pBullet->fAimed && pBullet->iLoop > MIN_DIST_FOR_HIT_FRIENDS_UNAIMED || @@ -7261,16 +7263,16 @@ void MoveBullet( INT32 iBullet ) } // this might be a close call - if ( pBullet->ubFirerID != NOBODY && MercPtrs[ pStructure->usStructureID ]->bTeam == gbPlayerNum && pBullet->pFirer->bTeam != gbPlayerNum && sDesiredLevel == MercPtrs[ pStructure->usStructureID ]->pathing.bLevel ) + if ( pBullet->ubFirerID != NOBODY && pSoldier->bTeam == gbPlayerNum && pBullet->pFirer->bTeam != gbPlayerNum && sDesiredLevel == pSoldier->pathing.bLevel ) { - MercPtrs[ pStructure->usStructureID ]->flags.fCloseCall = TRUE; + pSoldier->flags.fCloseCall = TRUE; } - if ( IS_MERC_BODY_TYPE( MercPtrs[pStructure->usStructureID] ) ) + if ( IS_MERC_BODY_TYPE( pSoldier ) ) { // apply suppression, regardless of friendly or enemy // except if friendly, not within a few tiles of shooter - if (pBullet->ubFirerID == NOBODY || MercPtrs[pStructure->usStructureID]->bSide != pBullet->pFirer->bSide || pBullet->iLoop > gGameExternalOptions.usMinDistanceFriendlySuppression) + if (pBullet->ubFirerID == NOBODY || pSoldier->bSide != pBullet->pFirer->bSide || pBullet->iLoop > gGameExternalOptions.usMinDistanceFriendlySuppression) { // buckshot has only a 1 in 2 chance of applying a suppression point // HEADROCK HAM 5: For NCTH, make pellets as effective as any other bullet. @@ -7279,7 +7281,7 @@ void MoveBullet( INT32 iBullet ) if (!(pBullet->usFlags & BULLET_FLAG_BUCKSHOT) || Chance(gGameExternalOptions.ubBuckshotSuppressionEffectiveness)) { // bullet goes whizzing by this guy! - switch ( gAnimControl[ MercPtrs[pStructure->usStructureID]->usAnimState ].ubEndHeight ) + switch ( gAnimControl[ pSoldier->usAnimState ].ubEndHeight ) { case ANIM_PRONE: // two 1/4 chances of avoiding suppression pt - one below @@ -7296,8 +7298,8 @@ void MoveBullet( INT32 iBullet ) } // else fall through default: - MercPtrs[pStructure->usStructureID]->ubSuppressionPoints++; - MercPtrs[pStructure->usStructureID]->ubSuppressorID = pBullet->ubFirerID; + pSoldier->ubSuppressionPoints++; + pSoldier->ubSuppressorID = pBullet->ubFirerID; break; } } diff --git a/Tactical/Morale.cpp b/Tactical/Morale.cpp index 9ff5e12f..bd2924cb 100644 --- a/Tactical/Morale.cpp +++ b/Tactical/Morale.cpp @@ -315,7 +315,8 @@ void DecayTacticalMoraleModifiers( void ) fHandleNervous = TRUE; for ( ubLoop2 = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; ubLoop2 <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop2++ ) { - if ( MercPtrs[ ubLoop2 ] != pSoldier && MercPtrs[ ubLoop2 ]->bActive && MercPtrs[ ubLoop2 ]->sSectorX == pSoldier->sSectorX && MercPtrs[ ubLoop2 ]->sSectorY == pSoldier->sSectorY && MercPtrs[ ubLoop2 ]->bSectorZ == pSoldier->bSectorZ ) + SOLDIERTYPE *pSoldier = MercPtrs[ubLoop2]; + if ( pSoldier != pSoldier && pSoldier->bActive && pSoldier->sSectorX == pSoldier->sSectorX && pSoldier->sSectorY == pSoldier->sSectorY && pSoldier->bSectorZ == pSoldier->bSectorZ ) { // found someone! fHandleNervous = FALSE; diff --git a/Tactical/PATHAI.cpp b/Tactical/PATHAI.cpp index 478c4f1a..f564fe7f 100644 --- a/Tactical/PATHAI.cpp +++ b/Tactical/PATHAI.cpp @@ -2198,7 +2198,7 @@ INT32 FindBestPath(SOLDIERTYPE *s , INT32 sDestination, INT8 bLevel, INT16 usMov INT8 bLoopState = LOOPING_CLOCKWISE; //BOOLEAN fLoopForwards = FALSE; BOOLEAN fCheckedBehind = FALSE; - UINT16 ubMerc; + SoldierID ubMerc; INT32 iDestX,iDestY, iLocX, iLocY, dx, dy; INT32 newLoc,curLoc; //INT32 curY; @@ -3145,7 +3145,7 @@ if(!GridNoOnVisibleWorldTile(iDestination)) // sevenfm: for player mercs, ignore invisible opponents if (ubMerc < TOTAL_SOLDIERS && ubMerc != s->ubID && - (!(s->flags.uiStatusFlags & SOLDIER_PC) || MercPtrs[ubMerc]->bSide == s->bSide || MercPtrs[ubMerc]->aiData.bNeutral || MercPtrs[ubMerc]->bVisible >= 0 || SoldierToSoldierLineOfSightTest(s, MercPtrs[ubMerc], TRUE, CALC_FROM_ALL_DIRS))) + (!(s->flags.uiStatusFlags & SOLDIER_PC) || ubMerc->bSide == s->bSide || ubMerc->aiData.bNeutral || ubMerc->bVisible >= 0 || SoldierToSoldierLineOfSightTest(s, ubMerc, TRUE, CALC_FROM_ALL_DIRS))) //if ( ubMerc < TOTAL_SOLDIERS && ubMerc != s->ubID ) { goto NEXTDIR; diff --git a/Tactical/ShopKeeper Interface.cpp b/Tactical/ShopKeeper Interface.cpp index d1245983..67805e08 100644 --- a/Tactical/ShopKeeper Interface.cpp +++ b/Tactical/ShopKeeper Interface.cpp @@ -6537,9 +6537,7 @@ BOOLEAN SKITryToReturnInvToOwnerOrCurrentMerc( INVENTORY_IN_SLOT *pInv ) // if it does have an owner if( pInv->ubIdOfMercWhoOwnsTheItem != NO_PROFILE ) { - INT16 sSoldierID; - - sSoldierID = GetSoldierIDFromMercID( pInv->ubIdOfMercWhoOwnsTheItem ); + SoldierID sSoldierID = GetSoldierIDFromMercID( pInv->ubIdOfMercWhoOwnsTheItem ); // if that soldier is not in player's hire any longer if ( sSoldierID == -1 ) { @@ -6548,13 +6546,13 @@ BOOLEAN SKITryToReturnInvToOwnerOrCurrentMerc( INVENTORY_IN_SLOT *pInv ) // For owners of repaired items, this checks that owner is still hired, in sector, // on current squad, close enough to the shopkeeper, etc. - if ( !CanMercInteractWithSelectedShopkeeper( MercPtrs[ sSoldierID ] ) ) + if ( !CanMercInteractWithSelectedShopkeeper( sSoldierID ) ) { return(FALSE); } // Try to find a place to put in its owner's inventory (regardless of which merc is currently displayed!) - if ( SKITryToAddInvToMercsInventory( pInv, MercPtrs[ sSoldierID ] ) ) + if ( SKITryToAddInvToMercsInventory( pInv, sSoldierID ) ) { return( TRUE ); } diff --git a/Tactical/Soldier Ani.cpp b/Tactical/Soldier Ani.cpp index 51a097d5..b06980a4 100644 --- a/Tactical/Soldier Ani.cpp +++ b/Tactical/Soldier Ani.cpp @@ -3126,15 +3126,11 @@ BOOLEAN AdjustToNextAnimationFrame( SOLDIERTYPE *pSoldier ) // Reload robot.... { - UINT16 ubPerson; - SOLDIERTYPE *pRobot; + SoldierID ubPerson = WhoIsThere2( pSoldier->aiData.sPendingActionData2, pSoldier->pathing.bLevel ); - // Get pointer... - ubPerson = WhoIsThere2( pSoldier->aiData.sPendingActionData2, pSoldier->pathing.bLevel ); - - if ( ubPerson != NOBODY && MercPtrs[ ubPerson ]->flags.uiStatusFlags & SOLDIER_ROBOT ) + if ( ubPerson != NOBODY && ubPerson->flags.uiStatusFlags & SOLDIER_ROBOT ) { - pRobot = MercPtrs[ ubPerson ]; + SOLDIERTYPE *pRobot = ubPerson; ReloadGun( pRobot, &(pRobot->inv[ HANDPOS ] ), pSoldier->pTempObject ); @@ -3658,50 +3654,51 @@ void SayBuddyWitnessedQuoteFromKill( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, if ( ubNumMercs > 0 ) { ubChosenMerc = (UINT16)Random( ubNumMercs ); + SOLDIERTYPE *pChosen = MercPtrs[ubMercsInSector[ubChosenMerc]]; switch( bBuddyIndex[ ubChosenMerc ] ) { case 0: usQuoteNum = QUOTE_BUDDY_1_GOOD; - MercPtrs[ ubMercsInSector[ ubChosenMerc ] ]->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_BUDDY_1_WITNESSED; + pChosen->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_BUDDY_1_WITNESSED; break; case 1: usQuoteNum = QUOTE_BUDDY_2_GOOD; - MercPtrs[ ubMercsInSector[ ubChosenMerc ] ]->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_BUDDY_2_WITNESSED; + pChosen->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_BUDDY_2_WITNESSED; break; case 2: - if( MercPtrs[ ubMercsInSector[ ubChosenMerc ] ]->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC ) + if( pChosen->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC ) usQuoteNum = QUOTE_AIM_BUDDY_3_GOOD; else usQuoteNum = QUOTE_NON_AIM_BUDDY_3_GOOD; - MercPtrs[ ubMercsInSector[ ubChosenMerc ] ]->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_BUDDY_3_WITNESSED; + pChosen->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_BUDDY_3_WITNESSED; break; case 3: - if( MercPtrs[ ubMercsInSector[ ubChosenMerc ] ]->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC ) + if( pChosen->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC ) usQuoteNum = QUOTE_AIM_BUDDY_4_GOOD; else usQuoteNum = QUOTE_NON_AIM_BUDDY_4_GOOD; - MercPtrs[ ubMercsInSector[ ubChosenMerc ] ]->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_BUDDY_4_WITNESSED; + pChosen->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_BUDDY_4_WITNESSED; break; case 4: - if( MercPtrs[ ubMercsInSector[ ubChosenMerc ] ]->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC ) + if( pChosen->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC ) usQuoteNum = QUOTE_AIM_BUDDY_5_GOOD; else usQuoteNum = QUOTE_NON_AIM_BUDDY_5_GOOD; - MercPtrs[ ubMercsInSector[ ubChosenMerc ] ]->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_BUDDY_5_WITNESSED; + pChosen->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_BUDDY_5_WITNESSED; break; case 5: usQuoteNum = QUOTE_LEARNED_TO_LIKE_WITNESSED; - MercPtrs[ ubMercsInSector[ ubChosenMerc ] ]->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_BUDDY_6_WITNESSED; + pChosen->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_BUDDY_6_WITNESSED; break; } - TacticalCharacterDialogue( MercPtrs[ ubMercsInSector[ ubChosenMerc ] ], usQuoteNum ); + TacticalCharacterDialogue( pChosen, usQuoteNum ); buddyquoteused = TRUE; } diff --git a/Tactical/Soldier Find.cpp b/Tactical/Soldier Find.cpp index 50e6b05e..77d19f39 100644 --- a/Tactical/Soldier Find.cpp +++ b/Tactical/Soldier Find.cpp @@ -116,13 +116,13 @@ BOOLEAN SelectiveFindSoldierFromMouse( SoldierID *pusSoldierIndex, UINT32 *pMerc } -UINT32 GetSoldierFindFlags( const SoldierID ubID ) +UINT32 GetSoldierFindFlags( SoldierID ubID ) { UINT32 MercFlags = 0; SOLDIERTYPE *pSoldier; // Get pSoldier! - pSoldier = MercPtrs[ ubID ]; + pSoldier = ubID; // Find out and set flags if ( ubID == gusSelectedSoldier ) @@ -530,13 +530,13 @@ SOLDIERTYPE * SimpleFindSoldier( INT32 sGridNo, INT8 bLevel ) } else { - return( MercPtrs[ ubID ] ); + return( ubID ); } } BOOLEAN IsValidTargetMerc( SoldierID ubSoldierID ) { - SOLDIERTYPE *pSoldier = MercPtrs[ ubSoldierID ]; + SOLDIERTYPE *pSoldier = ubSoldierID; // CHECK IF ACTIVE! diff --git a/Tactical/Soldier Tile.cpp b/Tactical/Soldier Tile.cpp index 05be45f9..5b5172c2 100644 --- a/Tactical/Soldier Tile.cpp +++ b/Tactical/Soldier Tile.cpp @@ -96,8 +96,6 @@ void OutputDebugInfoForTurnBasedNextTileWaiting( SOLDIERTYPE * pSoldier ) void SetDelayedTileWaiting( SOLDIERTYPE *pSoldier, INT32 sCauseGridNo, INT8 bValue ) { - UINT16 ubPerson; - // Cancel AI Action // CancelAIAction( pSoldier, TRUE ); @@ -108,7 +106,7 @@ void SetDelayedTileWaiting( SOLDIERTYPE *pSoldier, INT32 sCauseGridNo, INT8 bVal // ATE: Now update realtime movement speed.... // check if guy exists here... - ubPerson = WhoIsThere2( sCauseGridNo, pSoldier->pathing.bLevel ); + SoldierID ubPerson = WhoIsThere2( sCauseGridNo, pSoldier->pathing.bLevel ); // There may not be anybody there, but it's reserved by them! if ( ( gpWorldLevelData[ sCauseGridNo ].uiFlags & MAPELEMENT_MOVEMENT_RESERVED ) ) @@ -119,7 +117,7 @@ void SetDelayedTileWaiting( SOLDIERTYPE *pSoldier, INT32 sCauseGridNo, INT8 bVal if ( ubPerson != NOBODY ) { // if they are our own team members ( both ) - if ( MercPtrs[ ubPerson ]->bTeam == gbPlayerNum && pSoldier->bTeam == gbPlayerNum ) + if ( ubPerson->bTeam == gbPlayerNum && pSoldier->bTeam == gbPlayerNum ) { // Here we have another guy.... save his stats so we can use them for // speed determinations.... @@ -205,7 +203,6 @@ void UnMarkMovementReserved( SOLDIERTYPE *pSoldier ) INT8 TileIsClear( SOLDIERTYPE *pSoldier, INT8 bDirection, INT32 sGridNo, INT8 bLevel ) { - UINT16 ubPerson; INT32 sTempDestGridNo; INT32 sNewGridNo; BOOLEAN fSwapInDoor = FALSE; @@ -225,7 +222,7 @@ INT8 TileIsClear( SOLDIERTYPE *pSoldier, INT8 bDirection, INT32 sGridNo, INT8 b return( MOVE_TILE_CLEAR ); } - ubPerson = WhoIsThere2( sGridNo, bLevel ); + SoldierID ubPerson = WhoIsThere2( sGridNo, bLevel ); if ( ubPerson != NOBODY ) @@ -243,7 +240,7 @@ INT8 TileIsClear( SOLDIERTYPE *pSoldier, INT8 bDirection, INT32 sGridNo, INT8 b // Are we only temporarily blocked? // Check if our final destination is = our gridno - if ( ( MercPtrs[ ubPerson ]->pathing.sFinalDestination == MercPtrs[ ubPerson ]->sGridNo ) ) + if ( ( ubPerson->pathing.sFinalDestination == ubPerson->sGridNo ) ) { return( MOVE_TILE_STATIONARY_BLOCKED ); } @@ -251,12 +248,12 @@ INT8 TileIsClear( SOLDIERTYPE *pSoldier, INT8 bDirection, INT32 sGridNo, INT8 b { // OK, if buddy who is blocking us is trying to move too... // And we are in opposite directions... - if ( MercPtrs[ ubPerson ]->flags.fBlockedByAnotherMerc && MercPtrs[ ubPerson ]->bBlockedByAnotherMercDirection == gOppositeDirection[ bDirection ] ) + if ( ubPerson->flags.fBlockedByAnotherMerc && ubPerson->bBlockedByAnotherMercDirection == gOppositeDirection[ bDirection ] ) { // OK, try and get a path around buddy.... // We have to temporarily make buddy stopped... - sTempDestGridNo = MercPtrs[ ubPerson ]->pathing.sFinalDestination; - MercPtrs[ ubPerson ]->pathing.sFinalDestination = MercPtrs[ ubPerson ]->sGridNo; + sTempDestGridNo = ubPerson->pathing.sFinalDestination; + ubPerson->pathing.sFinalDestination = ubPerson->sGridNo; if ( PlotPath( pSoldier, pSoldier->pathing.sFinalDestination, NO_COPYROUTE, NO_PLOT, TEMPORARY, pSoldier->usUIMovementMode, NOT_STEALTH, FORWARD, pSoldier->bActionPoints ) ) { @@ -264,7 +261,7 @@ INT8 TileIsClear( SOLDIERTYPE *pSoldier, INT8 bDirection, INT32 sGridNo, INT8 b // OK, make guy go here... pSoldier->EVENT_GetNewSoldierPath( pSoldier->pathing.sFinalDestination, pSoldier->usUIMovementMode ); // Restore final dest.... - MercPtrs[ ubPerson ]->pathing.sFinalDestination = sTempDestGridNo; + ubPerson->pathing.sFinalDestination = sTempDestGridNo; pSoldier->flags.fBlockedByAnotherMerc = FALSE; // Is the next tile blocked too? @@ -288,18 +285,18 @@ INT8 TileIsClear( SOLDIERTYPE *pSoldier, INT8 bDirection, INT32 sGridNo, INT8 b // Swap now! - MercPtrs[ ubPerson ]->flags.fBlockedByAnotherMerc = FALSE; + ubPerson->flags.fBlockedByAnotherMerc = FALSE; // Restore final dest.... - MercPtrs[ ubPerson ]->pathing.sFinalDestination = sTempDestGridNo; + ubPerson->pathing.sFinalDestination = sTempDestGridNo; // Swap merc positions..... - SwapMercPositions( pSoldier, MercPtrs[ ubPerson ] ); + SwapMercPositions( pSoldier, ubPerson ); // With these two guys swapped, they should try and continue on their way.... // Start them both again along their way... pSoldier->EVENT_GetNewSoldierPath( pSoldier->pathing.sFinalDestination, pSoldier->usUIMovementMode ); - MercPtrs[ ubPerson ]->EVENT_GetNewSoldierPath( MercPtrs[ ubPerson ]->pathing.sFinalDestination, MercPtrs[ ubPerson ]->usUIMovementMode ); + ubPerson->EVENT_GetNewSoldierPath( ubPerson->pathing.sFinalDestination, ubPerson->usUIMovementMode ); } } } @@ -311,14 +308,14 @@ INT8 TileIsClear( SOLDIERTYPE *pSoldier, INT8 bDirection, INT32 sGridNo, INT8 b //return( MOVE_TILE_STATIONARY_BLOCKED ); // ATE: OK, put some smartshere... // If we are waiting for more than a few times, change to stationary... - if ( MercPtrs[ ubPerson ]->flags.fDelayedMovement >= 105 ) + if ( ubPerson->flags.fDelayedMovement >= 105 ) { // Set to special 'I want to walk through people' value pSoldier->flags.fDelayedMovement = 150; return( MOVE_TILE_STATIONARY_BLOCKED ); } - if ( MercPtrs[ ubPerson ]->sGridNo == MercPtrs[ ubPerson ]->pathing.sFinalDestination ) + if ( ubPerson->sGridNo == ubPerson->pathing.sFinalDestination ) { return( MOVE_TILE_STATIONARY_BLOCKED ); } @@ -495,11 +492,11 @@ BOOLEAN HandleNextTile( SOLDIERTYPE *pSoldier, INT8 bDirection, INT32 sGridNo, I BOOLEAN HandleNextTileWaiting( SOLDIERTYPE *pSoldier ) { // Buddy is waiting to continue his path - INT8 bBlocked, bPathBlocked; + INT8 bBlocked, bPathBlocked; INT32 sCost; - INT32 sNewGridNo, sCheckGridNo; + INT32 sNewGridNo, sCheckGridNo; UINT8 ubDirection, bCauseDirection; - UINT16 ubPerson; + SoldierID ubPerson; UINT8 fFlags = 0; @@ -659,16 +656,16 @@ BOOLEAN HandleNextTileWaiting( SOLDIERTYPE *pSoldier ) ubPerson = WhoIsThere2( pSoldier->sDelayedMovementCauseGridNo, pSoldier->pathing.bLevel ); // if either on a mission from god, or two AI guys not on stationary... - if ( ubPerson != NOBODY && ( pSoldier->ubQuoteRecord != 0 || ( pSoldier->bTeam != gbPlayerNum && pSoldier->aiData.bOrders != STATIONARY && MercPtrs[ ubPerson ]->bTeam != gbPlayerNum && MercPtrs[ ubPerson ]->aiData.bOrders != STATIONARY ) || (pSoldier->bTeam == gbPlayerNum && gTacticalStatus.fAutoBandageMode && !(MercPtrs[ ubPerson ]->bTeam == CIV_TEAM && MercPtrs[ ubPerson ]->aiData.bOrders == STATIONARY ) ) ) ) + if ( ubPerson != NOBODY && ( pSoldier->ubQuoteRecord != 0 || ( pSoldier->bTeam != gbPlayerNum && pSoldier->aiData.bOrders != STATIONARY && ubPerson->bTeam != gbPlayerNum && ubPerson->aiData.bOrders != STATIONARY ) || (pSoldier->bTeam == gbPlayerNum && gTacticalStatus.fAutoBandageMode && !(ubPerson->bTeam == CIV_TEAM && ubPerson->aiData.bOrders == STATIONARY ) ) ) ) { // Swap now! - //MercPtrs[ ubPerson ]->flags.fBlockedByAnotherMerc = FALSE; + //ubPerson->flags.fBlockedByAnotherMerc = FALSE; // Restore final dest.... - //MercPtrs[ ubPerson ]->pathing.sFinalDestination = sTempDestGridNo; + //ubPerson->pathing.sFinalDestination = sTempDestGridNo; // Swap merc positions..... - SwapMercPositions( pSoldier, MercPtrs[ ubPerson ] ); + SwapMercPositions( pSoldier, ubPerson ); // With these two guys swapped, we should try to continue on our way.... pSoldier->flags.fDelayedMovement = FALSE; @@ -693,7 +690,7 @@ BOOLEAN HandleNextTileWaiting( SOLDIERTYPE *pSoldier ) pSoldier->pathing.bPathStored = TRUE; pSoldier->EVENT_GetNewSoldierPath( pSoldier->sAbsoluteFinalDestination, pSoldier->usUIMovementMode ); - //EVENT_GetNewSoldierPath( MercPtrs[ ubPerson ], MercPtrs[ ubPerson ]->pathing.sFinalDestination, MercPtrs[ ubPerson ]->usUIMovementMode ); + //EVENT_GetNewSoldierPath( ubPerson, ubPerson->pathing.sFinalDestination, ubPerson->usUIMovementMode ); } } diff --git a/Tactical/Squads.cpp b/Tactical/Squads.cpp index fe88875d..5b96f8a2 100644 --- a/Tactical/Squads.cpp +++ b/Tactical/Squads.cpp @@ -995,16 +995,13 @@ void RebuildCurrentSquad( void ) void ExamineCurrentSquadLights( void ) { - // rebuilds current squad to reset faces in tactical - UINT16 ubLoop; - // OK, we should add lights for any guy currently bInSector who is not bad OKLIFE... - ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( ; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++) + SoldierID usID = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; + for ( ; usID <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++usID) { - if ( MercPtrs[ ubLoop ]->bInSector && MercPtrs[ ubLoop ]->stats.bLife >= OKLIFE ) + if ( usID->bInSector && usID->stats.bLife >= OKLIFE ) { - MercPtrs[ ubLoop ]->PositionSoldierLight( ); + usID->PositionSoldierLight( ); } } diff --git a/Tactical/Strategic Exit GUI.cpp b/Tactical/Strategic Exit GUI.cpp index c8b87e8d..eb8192fc 100644 --- a/Tactical/Strategic Exit GUI.cpp +++ b/Tactical/Strategic Exit GUI.cpp @@ -119,7 +119,6 @@ BOOLEAN InternalInitSectorExitMenu( UINT8 ubDirection, INT32 sAdditionalData )// { UINT32 uiTraverseTimeInMinutes; SOLDIERTYPE *pSoldier; - INT32 i; SGPRect aRect; UINT16 usTextBoxWidth, usTextBoxHeight; INT32 usMapPos = 0; @@ -189,10 +188,10 @@ BOOLEAN InternalInitSectorExitMenu( UINT8 ubDirection, INT32 sAdditionalData )// if ( gTacticalStatus.uiFlags & INCOMBAT ) { - INT32 i, cnt = 0; - for( i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; i++ ) + INT32 cnt = 0; + for( SoldierID id = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; id <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++id ) { - if( OK_INSECTOR_MERC( MercPtrs[ i ] ) ) + if( OK_INSECTOR_MERC( id ) ) cnt++; } if( cnt != 1 ) @@ -220,13 +219,14 @@ BOOLEAN InternalInitSectorExitMenu( UINT8 ubDirection, INT32 sAdditionalData )// gExitDialog.ubNumPeopleOnSquad = NumberOfPlayerControllableMercsInSquad( gusSelectedSoldier->bAssignment ); //Determine - 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 ) { - pSoldier = MercPtrs[ i ]; - if( i == gusSelectedSoldier ) + if( id == gusSelectedSoldier ) { continue; } + + pSoldier = id; if( !pSoldier->flags.fBetweenSectors && pSoldier->sSectorX == gWorldSectorX && pSoldier->sSectorY == gWorldSectorY && pSoldier->bSectorZ == gbWorldSectorZ && pSoldier->stats.bLife >= OKLIFE && @@ -262,21 +262,21 @@ BOOLEAN InternalInitSectorExitMenu( UINT8 ubDirection, INT32 sAdditionalData )// //Assuming that the matching squad assignment is in the same sector. UINT16 ubNumMercs = 1; //selected soldier is a merc UINT16 ubNumEPCs = 0; - 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( i == gusSelectedSoldier ) + if( id == gusSelectedSoldier ) { continue; } - if( MercPtrs[ i ]->bAssignment == gusSelectedSoldier->bAssignment ) + if( id->bAssignment == gusSelectedSoldier->bAssignment ) { - if( AM_AN_EPC( MercPtrs[ i ] ) ) + if( AM_AN_EPC( id ) ) { ubNumEPCs++; //record the slot of the epc. If there are more than one EPCs, then //it doesn't matter. This is used in building the text message explaining //why the selected merc can't leave. This is how we extract the EPC's name. - gExitDialog.bSingleMoveWillIsolateEPC = (INT16)i; + gExitDialog.bSingleMoveWillIsolateEPC = id; } else { //We have more than one merc, so we will allow the selected merc to leave alone if diff --git a/Tactical/Tactical Save.cpp b/Tactical/Tactical Save.cpp index fc4562cb..852032d0 100644 --- a/Tactical/Tactical Save.cpp +++ b/Tactical/Tactical Save.cpp @@ -2556,11 +2556,13 @@ BOOLEAN SetSectorFlag( INT16 sMapX, INT16 sMapY, UINT8 bMapZ, UINT32 uiFlagToSet for ( UINT16 i = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; i <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; i++ ) { - if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->stats.bLife && !(MercPtrs[ i ]->flags.uiStatusFlags & SOLDIER_VEHICLE) && MercPtrs[ i ]->ubProfile != NO_PROFILE && - MercPtrs[ i ]->sSectorX == sMapX && MercPtrs[ i ]->sSectorY == sMapY && MercPtrs[ i ]->bSectorZ == bMapZ && !MercPtrs[ i ]->flags.fBetweenSectors && - MercPtrs[ i ]->bAssignment != IN_TRANSIT && MercPtrs[ i ]->bAssignment != ASSIGNMENT_DEAD ) + SOLDIERTYPE *pSoldier = MercPtrs[i]; + + if( pSoldier->bActive && pSoldier->stats.bLife && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) && pSoldier->ubProfile != NO_PROFILE && + pSoldier->sSectorX == sMapX && pSoldier->sSectorY == sMapY && pSoldier->bSectorZ == bMapZ && !pSoldier->flags.fBetweenSectors && + pSoldier->bAssignment != IN_TRANSIT && pSoldier->bAssignment != ASSIGNMENT_DEAD ) { - gMercProfiles[ MercPtrs[ i ]->ubProfile ].records.usSectorsDiscovered++; + gMercProfiles[ pSoldier->ubProfile ].records.usSectorsDiscovered++; } } } diff --git a/Tactical/TeamTurns.cpp b/Tactical/TeamTurns.cpp index 0b8c58e1..d67d782d 100644 --- a/Tactical/TeamTurns.cpp +++ b/Tactical/TeamTurns.cpp @@ -506,7 +506,7 @@ void BeginTeamTurn( UINT8 ubTeam ) { DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"BeginTeamTurn"); INT32 cnt; - UINT16 ubID; + SoldierID ubID; SOLDIERTYPE *pSoldier; //rain @@ -657,7 +657,7 @@ void BeginTeamTurn( UINT8 ubTeam ) { AddTopMessage( COMPUTER_TURN_MESSAGE, TeamTurnString[ ubTeam ] ); } - StartNPCAI( MercPtrs[ ubID ] ); + StartNPCAI( ubID ); /*if(is_server && !net_turn) send_EndTurn(ubTeam); if(net_turn == true) net_turn = false;*/ if(is_server) send_EndTurn(ubTeam); @@ -983,22 +983,23 @@ void StartInterrupt( void ) // report any close call quotes for us here for ( iCounter = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; iCounter <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; iCounter++ ) { - if ( OK_INSECTOR_MERC( MercPtrs[ iCounter ] ) ) + SOLDIERTYPE *pSoldier = MercPtrs[iCounter]; + + if ( OK_INSECTOR_MERC( pSoldier ) ) { - if ( MercPtrs[ iCounter ]->flags.fCloseCall ) + if ( pSoldier->flags.fCloseCall ) { - if ( MercPtrs[ iCounter ]->bNumHitsThisTurn == 0 && !(MercPtrs[ iCounter ]->usQuoteSaidExtFlags & SOLDIER_QUOTE_SAID_EXT_CLOSE_CALL) && Random( 3 ) == 0 ) + if ( pSoldier->bNumHitsThisTurn == 0 && !(pSoldier->usQuoteSaidExtFlags & SOLDIER_QUOTE_SAID_EXT_CLOSE_CALL) && Random( 3 ) == 0 ) { // say close call quote! - TacticalCharacterDialogue( MercPtrs[ iCounter ], QUOTE_CLOSE_CALL ); - MercPtrs[ iCounter ]->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_EXT_CLOSE_CALL; + TacticalCharacterDialogue( pSoldier, QUOTE_CLOSE_CALL ); + pSoldier->usQuoteSaidExtFlags |= SOLDIER_QUOTE_SAID_EXT_CLOSE_CALL; } - MercPtrs[ iCounter ]->flags.fCloseCall = FALSE; + pSoldier->flags.fCloseCall = FALSE; } } } } - } else { diff --git a/Tactical/Turn Based Input.cpp b/Tactical/Turn Based Input.cpp index 4572c033..84c4c2ce 100644 --- a/Tactical/Turn Based Input.cpp +++ b/Tactical/Turn Based Input.cpp @@ -4890,12 +4890,12 @@ BOOLEAN HandleCheckForExitArrowsInput( BOOLEAN fAdjustConfirm ) if( gMercProfiles[ gusSelectedSoldier->ubProfile ].bSex == MALE ) { //male singular swprintf( str, pExitingSectorHelpText[ EXIT_GUI_MERC_CANT_ISOLATE_EPC_HELPTEXT_MALE_SINGULAR ], gusSelectedSoldier->GetName(), - MercPtrs[ gbPotentiallyAbandonedEPCSlotID ]->GetName() ); + gbPotentiallyAbandonedEPCSlotID->GetName() ); } else { //female singular swprintf( str, pExitingSectorHelpText[ EXIT_GUI_MERC_CANT_ISOLATE_EPC_HELPTEXT_FEMALE_SINGULAR ], gusSelectedSoldier->GetName(), - MercPtrs[ gbPotentiallyAbandonedEPCSlotID ]->GetName() ); + gbPotentiallyAbandonedEPCSlotID->GetName() ); } } else diff --git a/Tactical/opplist.cpp b/Tactical/opplist.cpp index 0b05cb5a..3a880361 100644 --- a/Tactical/opplist.cpp +++ b/Tactical/opplist.cpp @@ -3151,7 +3151,7 @@ void UpdatePublic(UINT8 ubTeam, SoldierID ubID, INT8 bNewOpplist, INT32 sGridNo, // if soldier isn't aware of guynum, give him another chance to see if (pSoldier->aiData.bOppList[ubID] == NOT_HEARD_OR_SEEN) { - if (ManLooksForMan(pSoldier,MercPtrs[ubID],UPDATEPUBLIC)) + if ( ManLooksForMan( pSoldier, ubID, UPDATEPUBLIC ) ) // then he actually saw guynum because of our new public knowledge ubMadeDifference = TRUE; @@ -7624,16 +7624,17 @@ INT8 GetHighestWatchedLocPoints( UINT16 ubID ) } -void CommunicateWatchedLoc( UINT16 ubID, INT32 sGridNo, INT8 bLevel, UINT8 ubPoints ) +void CommunicateWatchedLoc( SoldierID ubID, INT32 sGridNo, INT8 bLevel, UINT8 ubPoints ) { UINT16 ubLoop; INT8 bTeam, bLoopPoint, bPoint; - bTeam = MercPtrs[ ubID ]->bTeam; + bTeam = ubID->bTeam; for ( ubLoop = gTacticalStatus.Team[ bTeam ].bFirstID; ubLoop <= gTacticalStatus.Team[ bTeam ].bLastID; ubLoop++ ) { - if ( ubLoop == ubID || MercPtrs[ ubLoop ]->bActive == FALSE || MercPtrs[ ubLoop ]->bInSector == FALSE || MercPtrs[ ubLoop ]->stats.bLife < OKLIFE ) + SOLDIERTYPE *pSoldier = MercPtrs[ubLoop]; + if ( ubLoop == ubID || pSoldier->bActive == FALSE || pSoldier->bInSector == FALSE || pSoldier->stats.bLife < OKLIFE ) { continue; } From d96040351445995a133a77c93e95bc949fb6019b Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Thu, 21 Nov 2024 23:56:57 +0200 Subject: [PATCH 159/192] Use SoldierID --- TacticalAI/AIInternals.h | 10 +++++----- TacticalAI/Attacks.cpp | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/TacticalAI/AIInternals.h b/TacticalAI/AIInternals.h index b3293287..2e049958 100644 --- a/TacticalAI/AIInternals.h +++ b/TacticalAI/AIInternals.h @@ -154,14 +154,14 @@ public: class UnderFire { private: - BOOLEAN fEnable; - UINT16 usUnderFireCnt; - UINT16 usUnderFireID[MAXUNDERFIRE]; - UINT8 ubUnderFireCTH[MAXUNDERFIRE]; + BOOLEAN fEnable; + UINT16 usUnderFireCnt; + SoldierID usUnderFireID[MAXUNDERFIRE]; + UINT8 ubUnderFireCTH[MAXUNDERFIRE]; public: UnderFire(void){ Clear(); fEnable = FALSE; } void Clear(void); - void Add(UINT16 usID, UINT8 ubCTH); + void Add(SoldierID usID, UINT8 ubCTH); void Enable(void){ fEnable=TRUE; } void Disable(void){ fEnable=FALSE; } UINT16 GetUnderFireCnt(void){ return(usUnderFireCnt); } diff --git a/TacticalAI/Attacks.cpp b/TacticalAI/Attacks.cpp index 703cc950..481c1f0a 100644 --- a/TacticalAI/Attacks.cpp +++ b/TacticalAI/Attacks.cpp @@ -3417,11 +3417,11 @@ UnderFire gUnderFire; void UnderFire::Clear(void) { usUnderFireCnt = 0; - memset(usUnderFireID, 0, sizeof(usUnderFireID)); + memset(usUnderFireID, TOTAL_SOLDIERS, sizeof(usUnderFireID)); memset(ubUnderFireCTH, 0, sizeof(ubUnderFireCTH)); } -void UnderFire::Add(UINT16 usID, UINT8 ubCTH) +void UnderFire::Add(SoldierID usID, UINT8 ubCTH) { if (!fEnable) return; @@ -3448,7 +3448,7 @@ UINT16 UnderFire::Count(INT8 bTeam) UINT16 cnt = 0; for (UINT16 i = 0; i < usUnderFireCnt; i++) { - if (MercPtrs[usUnderFireID[i]]->bTeam == bTeam) + if (usUnderFireID[i]->bTeam == bTeam) ++cnt; } return(cnt); @@ -3459,7 +3459,7 @@ UINT8 UnderFire::Chance(INT8 bTeam, INT8 bSide, BOOLEAN fCheckNeutral) UINT8 cth = 0; for (UINT16 i = 0; i < usUnderFireCnt; i++) { - if ((MercPtrs[usUnderFireID[i]]->bTeam == bTeam || MercPtrs[usUnderFireID[i]]->bSide == bSide || fCheckNeutral && MercPtrs[usUnderFireID[i]]->aiData.bNeutral) && + if ((usUnderFireID[i]->bTeam == bTeam || usUnderFireID[i]->bSide == bSide || fCheckNeutral && usUnderFireID[i]->aiData.bNeutral) && ubUnderFireCTH[i] > cth) { cth = ubUnderFireCTH[i]; From 24656f28107fb8d7a2453503de3a895046da1afa Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sat, 30 Nov 2024 15:20:18 +0200 Subject: [PATCH 160/192] Use SoldierID --- Strategic/ASD.cpp | 4 +- Tactical/Points.cpp | 8 +- Tactical/Real Time Input.cpp | 16 ++-- Tactical/Rotting Corpses.cpp | 2 +- Tactical/ShopKeeper Interface.cpp | 2 +- Tactical/Soldier Ani.cpp | 16 ++-- Tactical/TeamTurns.cpp | 4 +- Tactical/TeamTurns.h | 2 +- Tactical/Turn Based Input.cpp | 22 ++--- TacticalAI/AIUtils.cpp | 14 ++-- TacticalAI/DecideAction.cpp | 133 ++++++++++++++---------------- TacticalAI/ai.h | 8 +- 12 files changed, 113 insertions(+), 118 deletions(-) diff --git a/Strategic/ASD.cpp b/Strategic/ASD.cpp index 443c4d89..bd41dabc 100644 --- a/Strategic/ASD.cpp +++ b/Strategic/ASD.cpp @@ -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 ); } } } diff --git a/Tactical/Points.cpp b/Tactical/Points.cpp index 2ca80a77..7a63a973 100644 --- a/Tactical/Points.cpp +++ b/Tactical/Points.cpp @@ -2018,7 +2018,7 @@ void GetAPChargeForShootOrStabWRTGunRaises( SOLDIERTYPE *pSoldier, INT32 sGridNo // Given a gridno here, check if we are on a guy - if so - get his gridno if ( FindSoldier( sGridNo, &usTargID, &uiMercFlags, FIND_SOLDIER_GRIDNO ) ) { - sGridNo = MercPtrs[ usTargID ]->sGridNo; + sGridNo = usTargID->sGridNo; } ubDirection = (UINT8)GetDirectionFromGridNo( sGridNo, pSoldier ); @@ -2230,7 +2230,7 @@ INT16 MinAPsToShootOrStab(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 bAimTime, // Given a gridno here, check if we are on a guy - if so - get his gridno if ( FindSoldier( sGridNo, &usTargID, &uiMercFlags, FIND_SOLDIER_GRIDNO ) ) { - sGridNo = MercPtrs[ usTargID ]->sGridNo; + sGridNo = usTargID->sGridNo; } //usRange = GetRangeFromGridNoDiff( pSoldier->sGridNo, sGridNo ); } @@ -2473,12 +2473,12 @@ INT16 MinAPsToPunch(SOLDIERTYPE *pSoldier, INT32 sGridNo) // sevenfm: check enemy only if we have correct gridNo if( !TileIsOutOfBounds(sGridNo) ) { - UINT16 usTargID = WhoIsThere2(sGridNo, pSoldier->bTargetLevel); + SoldierID usTargID = WhoIsThere2(sGridNo, pSoldier->bTargetLevel); // Given a gridno here, check if we are on a guy - if so - get his gridno if(usTargID != NOBODY) { // Check if target is prone, if so, calc cost... - if(gAnimControl[MercPtrs[usTargID]->usAnimState].ubEndHeight == ANIM_PRONE) + if(gAnimControl[usTargID->usAnimState].ubEndHeight == ANIM_PRONE) bAPCost += GetAPsToChangeStance(pSoldier, ANIM_CROUCH); else bAPCost += GetAPsToChangeStance(pSoldier, ANIM_STAND); diff --git a/Tactical/Real Time Input.cpp b/Tactical/Real Time Input.cpp index 10928e46..02141ace 100644 --- a/Tactical/Real Time Input.cpp +++ b/Tactical/Real Time Input.cpp @@ -190,7 +190,7 @@ void QueryRTLeftButton( UINT32 *puiNewEvent ) static BOOLEAN fValidDoubleClickPossible = FALSE; static BOOLEAN fCanCheckForSpeechAdvance = FALSE; static INT32 sMoveClickGridNo = 0; - UINT16 usSubjectSoldier = gusSelectedSoldier; + SoldierID usSubjectSoldier = gusSelectedSoldier; // LEFT MOUSE BUTTON if ( gViewportRegion.uiFlags & MSYS_MOUSE_IN_AREA ) @@ -208,7 +208,7 @@ void QueryRTLeftButton( UINT32 *puiNewEvent ) } if ( gusSelectedSoldier->flags.uiStatusFlags & SOLDIER_DRIVER ) { - pVehicle = GetSoldierStructureForVehicle( MercPtrs[ usSubjectSoldier ]->iVehicleId ); + pVehicle = GetSoldierStructureForVehicle( usSubjectSoldier->iVehicleId ); usSubjectSoldier = pVehicle->ubID; } } @@ -313,7 +313,7 @@ void QueryRTLeftButton( UINT32 *puiNewEvent ) if ( usSubjectSoldier != NOBODY ) { - if ( ( fResult = UIOKMoveDestination( MercPtrs[ usSubjectSoldier ], usMapPos ) ) == 1 ) + if ( ( fResult = UIOKMoveDestination( usSubjectSoldier, usMapPos ) ) == 1 ) { if ( gsCurrentActionPoints != 0 ) { @@ -365,7 +365,7 @@ void QueryRTLeftButton( UINT32 *puiNewEvent ) if( FindSoldierFromMouse( &usSoldierIndex, &uiMercFlags ) ) { // Select guy - if ( (uiMercFlags & SELECTED_MERC) && !( uiMercFlags & UNCONSCIOUS_MERC ) && !( MercPtrs[ usSoldierIndex ]->flags.uiStatusFlags & SOLDIER_VEHICLE ) ) + if ( (uiMercFlags & SELECTED_MERC) && !( uiMercFlags & UNCONSCIOUS_MERC ) && !( usSoldierIndex->flags.uiStatusFlags & SOLDIER_VEHICLE ) ) { *puiNewEvent = M_CHANGE_TO_ADJPOS_MODE; } @@ -451,7 +451,7 @@ void QueryRTLeftButton( UINT32 *puiNewEvent ) //if ( gAnimControl[ gusSelectedSoldier->usAnimState ].uiFlags & ANIM_STATIONARY ) //if ( gusSelectedSoldier->usAnimState == WALKING ) { - MercPtrs[ usSubjectSoldier ]->flags.fUIMovementFast = TRUE; + usSubjectSoldier->flags.fUIMovementFast = TRUE; *puiNewEvent = C_MOVE_MERC; } } @@ -595,13 +595,13 @@ void QueryRTLeftButton( UINT32 *puiNewEvent ) if ( usSubjectSoldier != NOBODY ) { - if ( MercPtrs[ usSubjectSoldier ]->usAnimState != RUNNING ) + if ( usSubjectSoldier->usAnimState != RUNNING ) { *puiNewEvent = C_MOVE_MERC; } else { - MercPtrs[ usSubjectSoldier ]->flags.fUIMovementFast = 2; + usSubjectSoldier->flags.fUIMovementFast = 2; *puiNewEvent = C_MOVE_MERC; } } @@ -792,7 +792,7 @@ void QueryRTLeftButton( UINT32 *puiNewEvent ) if ( usSubjectSoldier != NOBODY ) { - if ( ( fResult = UIOKMoveDestination( MercPtrs[ usSubjectSoldier ], usMapPos ) ) == 1 ) + if ( ( fResult = UIOKMoveDestination( usSubjectSoldier, usMapPos ) ) == 1 ) { if ( gfUIAllMoveOn ) { diff --git a/Tactical/Rotting Corpses.cpp b/Tactical/Rotting Corpses.cpp index b1540460..7749051f 100644 --- a/Tactical/Rotting Corpses.cpp +++ b/Tactical/Rotting Corpses.cpp @@ -2924,7 +2924,7 @@ void CreateZombiefromCorpse( ROTTING_CORPSE * pCorpse, UINT16 usAnimState ) /* certain values have to be set afterwards - the alternative would be to edit each and every function that gets called from TacticalCreateSoldier() subsequently and * make an exception for zombies every time... */ - SOLDIERTYPE* pNewSoldier = MercPtrs[ iNewIndex ]; + SOLDIERTYPE* pNewSoldier = iNewIndex; pNewSoldier->bActionPoints = 60; pNewSoldier->bInitialActionPoints = 60; diff --git a/Tactical/ShopKeeper Interface.cpp b/Tactical/ShopKeeper Interface.cpp index 67805e08..1986893f 100644 --- a/Tactical/ShopKeeper Interface.cpp +++ b/Tactical/ShopKeeper Interface.cpp @@ -6625,7 +6625,7 @@ BOOLEAN CanMercInteractWithSelectedShopkeeper( SOLDIERTYPE *pSoldier ) Assert( gbSelectedArmsDealerID != -1 ); if ( gusIDOfCivTrader != NOBODY ) - pShopkeeper = MercPtrs[gusIDOfCivTrader]; + pShopkeeper = gusIDOfCivTrader; else pShopkeeper = FindSoldierByProfileID( armsDealerInfo[gbSelectedArmsDealerID].ubShopKeeperID, FALSE ); diff --git a/Tactical/Soldier Ani.cpp b/Tactical/Soldier Ani.cpp index b06980a4..2ef15f57 100644 --- a/Tactical/Soldier Ani.cpp +++ b/Tactical/Soldier Ani.cpp @@ -3299,17 +3299,17 @@ BOOLEAN AdjustToNextAnimationFrame( SOLDIERTYPE *pSoldier ) // REFUELING A VEHICLE // THE GAS_CAN IS IN THE MERCS MAIN HAND AT THIS TIME { - UINT16 ubPerson; - SOLDIERTYPE *pVehicle; - // Get pointer to vehicle... - ubPerson = WhoIsThere2( pSoldier->aiData.sPendingActionData2, pSoldier->pathing.bLevel ); - pVehicle = MercPtrs[ ubPerson ]; + SoldierID ubPerson = WhoIsThere2( pSoldier->aiData.sPendingActionData2, pSoldier->pathing.bLevel ); + if ( ubPerson != NOBODY ) + { + SOLDIERTYPE *pVehicle = ubPerson; - // this is a ubID for soldiertype.... - AddFuelToVehicle( pSoldier, pVehicle ); + // this is a ubID for soldiertype.... + AddFuelToVehicle( pSoldier, pVehicle ); - fInterfacePanelDirty = DIRTYLEVEL2; + fInterfacePanelDirty = DIRTYLEVEL2; + } } break; diff --git a/Tactical/TeamTurns.cpp b/Tactical/TeamTurns.cpp index d67d782d..964bbdf4 100644 --- a/Tactical/TeamTurns.cpp +++ b/Tactical/TeamTurns.cpp @@ -1496,7 +1496,7 @@ void EndInterrupt( BOOLEAN fMarkInterruptOccurred ) } -BOOLEAN StandardInterruptConditionsMet( SOLDIERTYPE * pSoldier, UINT16 ubOpponentID, INT8 bOldOppList) +BOOLEAN StandardInterruptConditionsMet( SOLDIERTYPE * pSoldier, SoldierID ubOpponentID, INT8 bOldOppList) { DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"StandardInterruptConditionsMet"); // UINT8 ubAniType; @@ -1540,7 +1540,7 @@ BOOLEAN StandardInterruptConditionsMet( SOLDIERTYPE * pSoldier, UINT16 ubOpponen return(FALSE); } - pOpponent = MercPtrs[ ubOpponentID ]; + pOpponent = ubOpponentID; } else // no opponent, so controller of 'ptr' makes the call instead { diff --git a/Tactical/TeamTurns.h b/Tactical/TeamTurns.h index 828e445b..d592ed02 100644 --- a/Tactical/TeamTurns.h +++ b/Tactical/TeamTurns.h @@ -10,7 +10,7 @@ extern BOOLEAN gfHiddenTurnbased; #define INTERRUPT_QUEUED (gubOutOfTurnPersons > 0) -extern BOOLEAN StandardInterruptConditionsMet( SOLDIERTYPE * pSoldier, UINT16 ubOpponentID, INT8 bOldOppList); +extern BOOLEAN StandardInterruptConditionsMet( SOLDIERTYPE * pSoldier, SoldierID ubOpponentID, INT8 bOldOppList); extern INT8 CalcInterruptDuelPts( SOLDIERTYPE * pSoldier, SoldierID ubOpponentID, BOOLEAN fUseWatchSpots ); extern void EndAITurn( void ); extern void DisplayHiddenInterrupt( SOLDIERTYPE * pSoldier ); diff --git a/Tactical/Turn Based Input.cpp b/Tactical/Turn Based Input.cpp index 84c4c2ce..f4c6c575 100644 --- a/Tactical/Turn Based Input.cpp +++ b/Tactical/Turn Based Input.cpp @@ -7233,12 +7233,12 @@ void SwapMercPortraits ( SOLDIERTYPE *pSoldier, INT8 bDirection ) if ( gpCurrentTalkingFace != NULL ) return; - UINT16 ubSourceMerc = gusSelectedSoldier; - UINT16 ubTargetMerc; + SoldierID ubSourceMerc = gusSelectedSoldier; + SoldierID ubTargetMerc; INT32 iSourceFace; INT32 iTargetFace; UINT8 ubGroupID = pSoldier->ubGroupID; - INT8 bOldPosition = GetTeamSlotFromPlayerID ( MercPtrs[ ubSourceMerc ]->ubID ); + INT8 bOldPosition = GetTeamSlotFromPlayerID ( ubSourceMerc ); INT8 bNewPosition = bOldPosition + bDirection; SOLDIERTYPE TempMenptr = Menptr[ ubSourceMerc ]; @@ -7266,15 +7266,15 @@ void SwapMercPortraits ( SOLDIERTYPE *pSoldier, INT8 bDirection ) ubTargetMerc = gTeamPanel[ bNewPosition ].ubID; // Hey, you're dead. I don't want to swap with you. - if ( MercPtrs[ubTargetMerc]->stats.bLife <= 0 ) + if ( ubTargetMerc->stats.bLife <= 0 ) { RebuildCurrentSquad( ); return; } // store face indexes - iSourceFace = MercPtrs[ ubSourceMerc ]->iFaceIndex; - iTargetFace = MercPtrs[ ubTargetMerc ]->iFaceIndex; + iSourceFace = ubSourceMerc->iFaceIndex; + iTargetFace = ubTargetMerc->iFaceIndex; FACETYPE TempFace = gFacesData[ iSourceFace ]; // swap the data @@ -7299,11 +7299,11 @@ void SwapMercPortraits ( SOLDIERTYPE *pSoldier, INT8 bDirection ) Menptr[ ubTargetMerc ].iFaceIndex = iTargetFace; // update group info - RemovePlayerFromGroup( ubGroupID, MercPtrs[ ubSourceMerc ] ); - RemovePlayerFromGroup( ubGroupID, MercPtrs[ ubTargetMerc ] ); - AddPlayerToGroup( ubGroupID, MercPtrs[ ubSourceMerc ] ); - AddPlayerToGroup( ubGroupID, MercPtrs[ ubTargetMerc ] ); - SortSquadByID( MercPtrs[ ubSourceMerc ]->bAssignment ); + RemovePlayerFromGroup( ubGroupID, ubSourceMerc ); + RemovePlayerFromGroup( ubGroupID, ubTargetMerc ); + AddPlayerToGroup( ubGroupID, ubSourceMerc ); + AddPlayerToGroup( ubGroupID, ubTargetMerc ); + SortSquadByID( ubSourceMerc->bAssignment ); RebuildCurrentSquad( ); // don't forget to renew selection of merc diff --git a/TacticalAI/AIUtils.cpp b/TacticalAI/AIUtils.cpp index 4b4d0357..8e1b8968 100644 --- a/TacticalAI/AIUtils.cpp +++ b/TacticalAI/AIUtils.cpp @@ -1378,7 +1378,7 @@ INT32 ClosestReachableDisturbance(SOLDIERTYPE *pSoldier, BOOLEAN * pfChangeLevel } -INT32 ClosestKnownOpponent(SOLDIERTYPE *pSoldier, INT32 * psGridNo, INT8 * pbLevel, UINT16 * pubOpponentID) +INT32 ClosestKnownOpponent(SOLDIERTYPE *pSoldier, INT32 * psGridNo, INT8 * pbLevel, SoldierID * pubOpponentID) { INT32 *psLastLoc,sGridNo, sClosestOpponent = NOWHERE; UINT32 uiLoop; @@ -3445,9 +3445,9 @@ INT32 CalcStraightThreatValue( SOLDIERTYPE *pEnemy ) } // Flugente: get the id of the closest soldier with a specific flag that we can currently see -UINT16 GetClosestFlaggedSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam, UINT32 aFlag, BOOLEAN fCheckSight ) +SoldierID GetClosestFlaggedSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam, UINT32 aFlag, BOOLEAN fCheckSight ) { - UINT16 id = NOBODY; + SoldierID id = NOBODY; UINT32 uiLoop; SOLDIERTYPE * pFriend; INT16 range = aRange; @@ -3498,9 +3498,9 @@ UINT16 GetClosestFlaggedSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 a } // get the id of the closest soldier (closer than x tiles) of a specific team that is wounded that we can currently see -UINT16 GetClosestWoundedSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam ) +SoldierID GetClosestWoundedSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam ) { - UINT16 id = NOBODY; + SoldierID id = NOBODY; UINT32 uiLoop; SOLDIERTYPE * pFriend; INT16 range = aRange; @@ -3547,9 +3547,9 @@ UINT16 GetClosestWoundedSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 a } // get the id of the closest medic (closer than x tiles) of a specific team -UINT16 GetClosestMedicSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam ) +SoldierID GetClosestMedicSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam ) { - UINT16 id = NOBODY; + SoldierID id = NOBODY; UINT32 uiLoop; SOLDIERTYPE * pFriend; INT16 range = aRange; diff --git a/TacticalAI/DecideAction.cpp b/TacticalAI/DecideAction.cpp index 25f1016e..578bfa29 100644 --- a/TacticalAI/DecideAction.cpp +++ b/TacticalAI/DecideAction.cpp @@ -933,7 +933,7 @@ INT8 DecideActionGreen(SOLDIERTYPE *pSoldier) // Flugente: if we see one of our buddies in handcuffs, its a clear sign of enemy activity! if ( gGameExternalOptions.fAllowPrisonerSystem && pSoldier->bTeam == ENEMY_TEAM && !gTacticalStatus.Team[pSoldier->bTeam].bAwareOfOpposition ) { - UINT16 ubPerson = GetClosestFlaggedSoldierID( pSoldier, 20, ENEMY_TEAM, SOLDIER_POW, TRUE ); + SoldierID ubPerson = GetClosestFlaggedSoldierID( pSoldier, 20, ENEMY_TEAM, SOLDIER_POW, TRUE ); if ( ubPerson != NOBODY ) { @@ -945,7 +945,7 @@ INT8 DecideActionGreen(SOLDIERTYPE *pSoldier) // if we are a doctor with medical gear, we might be able to help a wounded ally if ( pSoldier->CanMedicAI() ) { - UINT16 ubPerson = GetClosestWoundedSoldierID( pSoldier, gGameExternalOptions.sEnemyMedicsSearchRadius, pSoldier->bTeam); + SoldierID ubPerson = GetClosestWoundedSoldierID( pSoldier, gGameExternalOptions.sEnemyMedicsSearchRadius, pSoldier->bTeam); // are we ourselves the patient? if ( ubPerson == pSoldier->ubID ) @@ -962,10 +962,10 @@ INT8 DecideActionGreen(SOLDIERTYPE *pSoldier) } else if ( ubPerson != NOBODY ) { - if ( PythSpacesAway(pSoldier->sGridNo, MercPtrs[ubPerson]->sGridNo) < 2 ) + if ( PythSpacesAway(pSoldier->sGridNo, ubPerson->sGridNo) < 2 ) { // see if we are facing this person - UINT8 ubDesiredMercDir = GetDirectionFromCenterCellXYGridNo(pSoldier->sGridNo, MercPtrs[ubPerson]->sGridNo); + UINT8 ubDesiredMercDir = GetDirectionFromCenterCellXYGridNo(pSoldier->sGridNo, ubPerson->sGridNo); // if not already facing in that direction, if ( pSoldier->ubDirection != ubDesiredMercDir ) @@ -987,7 +987,7 @@ INT8 DecideActionGreen(SOLDIERTYPE *pSoldier) } else { - pSoldier->aiData.usActionData = InternalGoAsFarAsPossibleTowards(pSoldier, MercPtrs[ubPerson]->sGridNo, 20, AI_ACTION_SEEK_FRIEND, 0); + pSoldier->aiData.usActionData = InternalGoAsFarAsPossibleTowards(pSoldier, ubPerson->sGridNo, 20, AI_ACTION_SEEK_FRIEND, 0); if (!TileIsOutOfBounds(pSoldier->aiData.usActionData)) { @@ -999,13 +999,13 @@ INT8 DecideActionGreen(SOLDIERTYPE *pSoldier) // if we are not a medic, but are wounded, seek a medic else if ( pSoldier->iHealableInjury >= gGameExternalOptions.sEnemyMedicsWoundMinAmount ) { - UINT16 ubPerson = GetClosestMedicSoldierID( pSoldier, gGameExternalOptions.sEnemyMedicsSearchRadius / 2, pSoldier->bTeam); + SoldierID ubPerson = GetClosestMedicSoldierID( pSoldier, gGameExternalOptions.sEnemyMedicsSearchRadius / 2, pSoldier->bTeam); if ( ubPerson != NOBODY ) { - if ( PythSpacesAway(pSoldier->sGridNo, MercPtrs[ubPerson]->sGridNo) > 1 ) + if ( PythSpacesAway(pSoldier->sGridNo, ubPerson->sGridNo) > 1 ) { - pSoldier->aiData.usActionData = InternalGoAsFarAsPossibleTowards(pSoldier, MercPtrs[ubPerson]->sGridNo, 20, AI_ACTION_SEEK_FRIEND, 0); + pSoldier->aiData.usActionData = InternalGoAsFarAsPossibleTowards(pSoldier, ubPerson->sGridNo, 20, AI_ACTION_SEEK_FRIEND, 0); if (!TileIsOutOfBounds(pSoldier->aiData.usActionData)) { @@ -1019,14 +1019,14 @@ INT8 DecideActionGreen(SOLDIERTYPE *pSoldier) if ( pSoldier->usSoldierFlagMask & SOLDIER_BODYGUARD ) { // is VIP still alive? - UINT16 ubPerson = GetClosestFlaggedSoldierID( pSoldier, 100, pSoldier->bTeam, SOLDIER_VIP, FALSE ); + SoldierID ubPerson = GetClosestFlaggedSoldierID( pSoldier, 100, pSoldier->bTeam, SOLDIER_VIP, FALSE ); if ( ubPerson != NOBODY ) { // we want to stay close to him, but still be able to function properly... stay withing a 7-tile radius - if ( SpacesAway( pSoldier->sGridNo, MercPtrs[ubPerson]->sGridNo ) > 7 ) + if ( SpacesAway( pSoldier->sGridNo, ubPerson->sGridNo ) > 7 ) { - pSoldier->aiData.usActionData = InternalGoAsFarAsPossibleTowards( pSoldier, MercPtrs[ubPerson]->sGridNo, 20, AI_ACTION_SEEK_FRIEND, 0 ); + pSoldier->aiData.usActionData = InternalGoAsFarAsPossibleTowards( pSoldier, ubPerson->sGridNo, 20, AI_ACTION_SEEK_FRIEND, 0 ); if ( !TileIsOutOfBounds( pSoldier->aiData.usActionData ) ) { @@ -1655,18 +1655,18 @@ INT8 DecideActionYellow(SOLDIERTYPE *pSoldier) // Flugente: if we see one of our buddies captured, it is a clear sign of enemy activity! if ( gGameExternalOptions.fAllowPrisonerSystem && pSoldier->bTeam == ENEMY_TEAM ) { - UINT16 ubPerson = GetClosestFlaggedSoldierID( pSoldier, 20, ENEMY_TEAM, SOLDIER_POW, TRUE ); + SoldierID ubPerson = GetClosestFlaggedSoldierID( pSoldier, 20, ENEMY_TEAM, SOLDIER_POW, TRUE ); if ( ubPerson != NOBODY ) { // if we are close, we can release this guy // possible only if not handcuffed (binders can be opened, handcuffs not) - if ( !HasItemFlag( (&(MercPtrs[ubPerson]->inv[HANDPOS]))->usItem, HANDCUFFS ) ) + if ( !HasItemFlag( (&(ubPerson->inv[HANDPOS]))->usItem, HANDCUFFS ) ) { - if ( PythSpacesAway(pSoldier->sGridNo, MercPtrs[ubPerson]->sGridNo) < 2 ) + if ( PythSpacesAway(pSoldier->sGridNo, ubPerson->sGridNo) < 2 ) { // see if we are facing this person - UINT8 ubDesiredMercDir = GetDirectionFromCenterCellXYGridNo(pSoldier->sGridNo, MercPtrs[ubPerson]->sGridNo); + UINT8 ubDesiredMercDir = GetDirectionFromCenterCellXYGridNo(pSoldier->sGridNo, ubPerson->sGridNo); // if not already facing in that direction, if ( pSoldier->ubDirection != ubDesiredMercDir ) @@ -1680,7 +1680,7 @@ INT8 DecideActionYellow(SOLDIERTYPE *pSoldier) } else { - pSoldier->aiData.usActionData = InternalGoAsFarAsPossibleTowards(pSoldier, MercPtrs[ubPerson]->sGridNo, 20, AI_ACTION_SEEK_FRIEND, 0); + pSoldier->aiData.usActionData = InternalGoAsFarAsPossibleTowards(pSoldier, ubPerson->sGridNo, 20, AI_ACTION_SEEK_FRIEND, 0); if (!TileIsOutOfBounds(pSoldier->aiData.usActionData)) { @@ -1699,7 +1699,7 @@ INT8 DecideActionYellow(SOLDIERTYPE *pSoldier) // if we are a doctor with medical gear, we might be able to help a wounded ally if ( pSoldier->CanMedicAI() ) { - UINT16 ubPerson = GetClosestWoundedSoldierID( pSoldier, gGameExternalOptions.sEnemyMedicsSearchRadius, pSoldier->bTeam); + SoldierID ubPerson = GetClosestWoundedSoldierID( pSoldier, gGameExternalOptions.sEnemyMedicsSearchRadius, pSoldier->bTeam); // are we ourselves the patient? if ( ubPerson == pSoldier->ubID ) @@ -1716,10 +1716,10 @@ INT8 DecideActionYellow(SOLDIERTYPE *pSoldier) } else if ( ubPerson != NOBODY ) { - if ( PythSpacesAway(pSoldier->sGridNo, MercPtrs[ubPerson]->sGridNo) < 2 ) + if ( PythSpacesAway(pSoldier->sGridNo, ubPerson->sGridNo) < 2 ) { // see if we are facing this person - UINT8 ubDesiredMercDir = GetDirectionFromCenterCellXYGridNo(pSoldier->sGridNo, MercPtrs[ubPerson]->sGridNo); + UINT8 ubDesiredMercDir = GetDirectionFromCenterCellXYGridNo(pSoldier->sGridNo, ubPerson->sGridNo); // if not already facing in that direction, if ( pSoldier->ubDirection != ubDesiredMercDir ) @@ -1741,7 +1741,7 @@ INT8 DecideActionYellow(SOLDIERTYPE *pSoldier) } else { - pSoldier->aiData.usActionData = InternalGoAsFarAsPossibleTowards(pSoldier, MercPtrs[ubPerson]->sGridNo, 20, AI_ACTION_SEEK_FRIEND, 0); + pSoldier->aiData.usActionData = InternalGoAsFarAsPossibleTowards(pSoldier, ubPerson->sGridNo, 20, AI_ACTION_SEEK_FRIEND, 0); if (!TileIsOutOfBounds(pSoldier->aiData.usActionData)) { @@ -1753,13 +1753,13 @@ INT8 DecideActionYellow(SOLDIERTYPE *pSoldier) // if we are not a medic, but are wounded, seek a medic else if ( pSoldier->iHealableInjury >= gGameExternalOptions.sEnemyMedicsWoundMinAmount ) { - UINT16 ubPerson = GetClosestMedicSoldierID( pSoldier, gGameExternalOptions.sEnemyMedicsSearchRadius / 2, pSoldier->bTeam); + SoldierID ubPerson = GetClosestMedicSoldierID( pSoldier, gGameExternalOptions.sEnemyMedicsSearchRadius / 2, pSoldier->bTeam); if ( ubPerson != NOBODY ) { - if ( PythSpacesAway(pSoldier->sGridNo, MercPtrs[ubPerson]->sGridNo) > 1 ) + if ( PythSpacesAway(pSoldier->sGridNo, ubPerson->sGridNo) > 1 ) { - pSoldier->aiData.usActionData = InternalGoAsFarAsPossibleTowards(pSoldier, MercPtrs[ubPerson]->sGridNo, 20, AI_ACTION_SEEK_FRIEND, 0); + pSoldier->aiData.usActionData = InternalGoAsFarAsPossibleTowards(pSoldier, ubPerson->sGridNo, 20, AI_ACTION_SEEK_FRIEND, 0); if (!TileIsOutOfBounds(pSoldier->aiData.usActionData)) { @@ -1773,14 +1773,14 @@ INT8 DecideActionYellow(SOLDIERTYPE *pSoldier) if ( pSoldier->usSoldierFlagMask & SOLDIER_BODYGUARD ) { // is VIP still alive? - UINT16 ubPerson = GetClosestFlaggedSoldierID( pSoldier, 100, pSoldier->bTeam, SOLDIER_VIP, FALSE ); + SoldierID ubPerson = GetClosestFlaggedSoldierID( pSoldier, 100, pSoldier->bTeam, SOLDIER_VIP, FALSE ); if ( ubPerson != NOBODY ) { // we want to stay close to him, but still be able to function properly... stay withing a 7-tile radius - if ( SpacesAway( pSoldier->sGridNo, MercPtrs[ubPerson]->sGridNo ) > 7 ) + if ( SpacesAway( pSoldier->sGridNo, ubPerson->sGridNo ) > 7 ) { - pSoldier->aiData.usActionData = InternalGoAsFarAsPossibleTowards( pSoldier, MercPtrs[ubPerson]->sGridNo, 20, AI_ACTION_SEEK_FRIEND, 0 ); + pSoldier->aiData.usActionData = InternalGoAsFarAsPossibleTowards( pSoldier, ubPerson->sGridNo, 20, AI_ACTION_SEEK_FRIEND, 0 ); if ( !TileIsOutOfBounds( pSoldier->aiData.usActionData ) ) { @@ -2883,10 +2883,10 @@ INT8 DecideActionRed(SOLDIERTYPE *pSoldier) DebugAI(AI_MSG_INFO, pSoldier, String("prepare throw at spot %d level %d aimtime %d", BestThrow.sTarget, BestThrow.bTargetLevel, BestThrow.ubAimTime)); // start retreating for several turns - if (BestThrow.ubOpponent != NOBODY && !MercPtrs[BestThrow.ubOpponent]->IsFlanking()) + if (BestThrow.ubOpponent != NOBODY && !BestThrow.ubOpponent->IsFlanking()) { DebugAI(AI_MSG_INFO, pSoldier, String("start retreat counter for %d", BestThrow.ubOpponent)); - MercPtrs[BestThrow.ubOpponent]->RetreatCounterStart(2); + BestThrow.ubOpponent->RetreatCounterStart(2); } // if necessary, swap the usItem from holster into the hand position @@ -3028,8 +3028,7 @@ INT8 DecideActionRed(SOLDIERTYPE *pSoldier) // check valid target !TileIsOutOfBounds(BestShot.sTarget) && BestShot.ubOpponent != NOBODY && - MercPtrs[BestShot.ubOpponent] && - Chance(100 - MercPtrs[BestShot.ubOpponent]->ShockLevelPercent() / 2) && + Chance(100 - BestShot.ubOpponent->ShockLevelPercent() / 2) && // check weapon/ammo requirements IsGunAutofireCapable(&pSoldier->inv[BestShot.bWeaponIn]) && GetMagSize(&pSoldier->inv[BestShot.bWeaponIn]) >= gGameExternalOptions.ubAISuppressionMinimumMagSize && @@ -3046,16 +3045,16 @@ INT8 DecideActionRed(SOLDIERTYPE *pSoldier) !fCanBeSeen && NightLight() && CountFriendsFlankSameSpot(pSoldier, sClosestOpponent) && Chance(50) || ARMED_VEHICLE(pSoldier) || // tanks don't need cover ENEMYROBOT(pSoldier) || // robots don't try to be in cover - pSoldier->aiData.bUnderFire && (pSoldier->ubPreviousAttackerID == BestShot.ubOpponent || pSoldier->ubNextToPreviousAttackerID == BestShot.ubOpponent || MercPtrs[BestShot.ubOpponent]->sLastTarget == pSoldier->sGridNo) || // return fire + pSoldier->aiData.bUnderFire && (pSoldier->ubPreviousAttackerID == BestShot.ubOpponent || pSoldier->ubNextToPreviousAttackerID == BestShot.ubOpponent || BestShot.ubOpponent->sLastTarget == pSoldier->sGridNo) || // return fire Chance((BestShot.ubChanceToReallyHit + 100) / 2) || // 50% chance to fire without cover - //SoldierToSoldierLineOfSightTest(pSoldier, MercPtrs[BestShot.ubOpponent], TRUE, CALC_FROM_ALL_DIRS)) && // can see target after turning - LOS_Raised(pSoldier, MercPtrs[BestShot.ubOpponent], CALC_FROM_ALL_DIRS)) && // can see target after turning + //SoldierToSoldierLineOfSightTest(pSoldier, BestShot.ubOpponent, TRUE, CALC_FROM_ALL_DIRS)) && // can see target after turning + LOS_Raised(pSoldier, BestShot.ubOpponent, CALC_FROM_ALL_DIRS)) && // can see target after turning // reduce chance to shoot if target is beyond weapon range (AICheckIsMachinegunner(pSoldier) || ARMED_VEHICLE(pSoldier) || ENEMYROBOT(pSoldier) || AnyCoverAtSpot(pSoldier, pSoldier->sGridNo) || - pSoldier->aiData.bUnderFire && (pSoldier->ubPreviousAttackerID == BestShot.ubOpponent || pSoldier->ubNextToPreviousAttackerID == BestShot.ubOpponent || MercPtrs[BestShot.ubOpponent]->sLastTarget == pSoldier->sGridNo) || // return fire + pSoldier->aiData.bUnderFire && (pSoldier->ubPreviousAttackerID == BestShot.ubOpponent || pSoldier->ubNextToPreviousAttackerID == BestShot.ubOpponent || BestShot.ubOpponent->sLastTarget == pSoldier->sGridNo) || // return fire Chance(100 * (GunRange(&pSoldier->inv[BestShot.bWeaponIn], pSoldier) / CELL_X_SIZE) / PythSpacesAway(pSoldier->sGridNo, BestShot.sTarget))) && // check that we have spare ammo (fExtraClip || pSoldier->inv[BestShot.bWeaponIn][0]->data.gun.ubGunShotsLeft >= gGameExternalOptions.ubAISuppressionMinimumMagSize)) @@ -3149,7 +3148,7 @@ INT8 DecideActionRed(SOLDIERTYPE *pSoldier) DebugAI(AI_MSG_INFO, pSoldier, String("Change stance before shooting")); // show "suppression fire" message only if opponent cannot be seen after turning - if (!LOS_Raised(pSoldier, MercPtrs[BestShot.ubOpponent], CALC_FROM_ALL_DIRS)) + if (!LOS_Raised(pSoldier, BestShot.ubOpponent, CALC_FROM_ALL_DIRS)) ScreenMsg(FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, New113Message[MSG113_SUPPRESSIONFIRE]); return(AI_ACTION_CHANGE_STANCE); @@ -3159,7 +3158,7 @@ INT8 DecideActionRed(SOLDIERTYPE *pSoldier) pSoldier->aiData.usActionData = BestShot.sTarget; // show "suppression fire" message only if opponent cannot be seen after turning - if (!LOS_Raised(pSoldier, MercPtrs[BestShot.ubOpponent], CALC_FROM_ALL_DIRS)) + if (!LOS_Raised(pSoldier, BestShot.ubOpponent, CALC_FROM_ALL_DIRS)) ScreenMsg(FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, New113Message[MSG113_SUPPRESSIONFIRE]); return(AI_ACTION_FIRE_GUN); @@ -3281,18 +3280,18 @@ INT8 DecideActionRed(SOLDIERTYPE *pSoldier) // Flugente: if we see one of our buddies captured, it is a clear sign of enemy activity! if ( gGameExternalOptions.fAllowPrisonerSystem && pSoldier->bTeam == ENEMY_TEAM ) { - UINT16 ubPerson = GetClosestFlaggedSoldierID( pSoldier, 20, ENEMY_TEAM, SOLDIER_POW, TRUE ); + SoldierID ubPerson = GetClosestFlaggedSoldierID( pSoldier, 20, ENEMY_TEAM, SOLDIER_POW, TRUE ); if ( ubPerson != NOBODY ) { // if we are close, we can release this guy // possible only if not handcuffed (binders can be opened, handcuffs not) - if ( !HasItemFlag( (&(MercPtrs[ubPerson]->inv[HANDPOS]))->usItem, HANDCUFFS ) ) + if ( !HasItemFlag( (&(ubPerson->inv[HANDPOS]))->usItem, HANDCUFFS ) ) { - if ( PythSpacesAway(pSoldier->sGridNo, MercPtrs[ubPerson]->sGridNo) < 2 ) + if ( PythSpacesAway(pSoldier->sGridNo, ubPerson->sGridNo) < 2 ) { // see if we are facing this person - UINT8 ubDesiredMercDir = GetDirectionFromCenterCellXYGridNo(pSoldier->sGridNo, MercPtrs[ubPerson]->sGridNo); + UINT8 ubDesiredMercDir = GetDirectionFromCenterCellXYGridNo(pSoldier->sGridNo, ubPerson->sGridNo); // if not already facing in that direction, if ( pSoldier->ubDirection != ubDesiredMercDir ) @@ -3306,7 +3305,7 @@ INT8 DecideActionRed(SOLDIERTYPE *pSoldier) } else { - pSoldier->aiData.usActionData = InternalGoAsFarAsPossibleTowards(pSoldier, MercPtrs[ubPerson]->sGridNo, 20, AI_ACTION_SEEK_FRIEND, 0); + pSoldier->aiData.usActionData = InternalGoAsFarAsPossibleTowards(pSoldier, ubPerson->sGridNo, 20, AI_ACTION_SEEK_FRIEND, 0); if (!TileIsOutOfBounds(pSoldier->aiData.usActionData)) { @@ -3320,7 +3319,7 @@ INT8 DecideActionRed(SOLDIERTYPE *pSoldier) // if we are a doctor with medical gear, we might be able to help a wounded ally if ( pSoldier->CanMedicAI() ) { - UINT16 ubPerson = GetClosestWoundedSoldierID( pSoldier, gGameExternalOptions.sEnemyMedicsSearchRadius, pSoldier->bTeam); + SoldierID ubPerson = GetClosestWoundedSoldierID( pSoldier, gGameExternalOptions.sEnemyMedicsSearchRadius, pSoldier->bTeam); // are we ourselves the patient? if ( ubPerson == pSoldier->ubID ) @@ -3337,10 +3336,10 @@ INT8 DecideActionRed(SOLDIERTYPE *pSoldier) } else if ( ubPerson != NOBODY ) { - if ( PythSpacesAway(pSoldier->sGridNo, MercPtrs[ubPerson]->sGridNo) < 2 ) + if ( PythSpacesAway(pSoldier->sGridNo, ubPerson->sGridNo) < 2 ) { // see if we are facing this person - UINT8 ubDesiredMercDir = GetDirectionFromCenterCellXYGridNo(pSoldier->sGridNo, MercPtrs[ubPerson]->sGridNo); + UINT8 ubDesiredMercDir = GetDirectionFromCenterCellXYGridNo(pSoldier->sGridNo, ubPerson->sGridNo); // if not already facing in that direction, if ( pSoldier->ubDirection != ubDesiredMercDir ) @@ -3362,7 +3361,7 @@ INT8 DecideActionRed(SOLDIERTYPE *pSoldier) } else { - pSoldier->aiData.usActionData = InternalGoAsFarAsPossibleTowards(pSoldier, MercPtrs[ubPerson]->sGridNo, 20, AI_ACTION_SEEK_FRIEND, 0); + pSoldier->aiData.usActionData = InternalGoAsFarAsPossibleTowards(pSoldier, ubPerson->sGridNo, 20, AI_ACTION_SEEK_FRIEND, 0); if (!TileIsOutOfBounds(pSoldier->aiData.usActionData)) { @@ -3374,13 +3373,13 @@ INT8 DecideActionRed(SOLDIERTYPE *pSoldier) // if we are not a medic, but are wounded, seek a medic else if ( pSoldier->iHealableInjury >= gGameExternalOptions.sEnemyMedicsWoundMinAmount ) { - UINT16 ubPerson = GetClosestMedicSoldierID( pSoldier, gGameExternalOptions.sEnemyMedicsSearchRadius / 2, pSoldier->bTeam); + SoldierID ubPerson = GetClosestMedicSoldierID( pSoldier, gGameExternalOptions.sEnemyMedicsSearchRadius / 2, pSoldier->bTeam); if ( ubPerson != NOBODY ) { - if ( PythSpacesAway(pSoldier->sGridNo, MercPtrs[ubPerson]->sGridNo) > 1 ) + if ( PythSpacesAway(pSoldier->sGridNo, ubPerson->sGridNo) > 1 ) { - pSoldier->aiData.usActionData = InternalGoAsFarAsPossibleTowards(pSoldier, MercPtrs[ubPerson]->sGridNo, 20, AI_ACTION_SEEK_FRIEND, 0); + pSoldier->aiData.usActionData = InternalGoAsFarAsPossibleTowards(pSoldier, ubPerson->sGridNo, 20, AI_ACTION_SEEK_FRIEND, 0); if (!TileIsOutOfBounds(pSoldier->aiData.usActionData)) { @@ -3413,14 +3412,14 @@ INT8 DecideActionRed(SOLDIERTYPE *pSoldier) if ( pSoldier->usSoldierFlagMask & SOLDIER_BODYGUARD ) { // is VIP still alive? - UINT16 ubPerson = GetClosestFlaggedSoldierID( pSoldier, 100, pSoldier->bTeam, SOLDIER_VIP, FALSE ); + SoldierID ubPerson = GetClosestFlaggedSoldierID( pSoldier, 100, pSoldier->bTeam, SOLDIER_VIP, FALSE ); if ( ubPerson != NOBODY ) { // we want to stay close to him, but still be able to function properly... stay withing a 7-tile radius - if ( SpacesAway( pSoldier->sGridNo, MercPtrs[ubPerson]->sGridNo ) > 7 ) + if ( SpacesAway( pSoldier->sGridNo, ubPerson->sGridNo ) > 7 ) { - pSoldier->aiData.usActionData = InternalGoAsFarAsPossibleTowards( pSoldier, MercPtrs[ubPerson]->sGridNo, 20, AI_ACTION_SEEK_FRIEND, 0 ); + pSoldier->aiData.usActionData = InternalGoAsFarAsPossibleTowards( pSoldier, ubPerson->sGridNo, 20, AI_ACTION_SEEK_FRIEND, 0 ); if ( !TileIsOutOfBounds( pSoldier->aiData.usActionData ) ) { @@ -5764,10 +5763,9 @@ INT16 ubMinAPCost; (pSoldier->flags.uiStatusFlags & SOLDIER_BOXER) && SpacesAway(pSoldier->sGridNo, BestStab.sTarget) > 2 && BestStab.ubOpponent != NOBODY && - MercPtrs[BestStab.ubOpponent] && - AIDirection(pSoldier->sGridNo, MercPtrs[BestStab.ubOpponent]->sGridNo) != MercPtrs[BestStab.ubOpponent]->ubDirection && - AIDirection(pSoldier->sGridNo, MercPtrs[BestStab.ubOpponent]->sGridNo) != gOneCDirection[MercPtrs[BestStab.ubOpponent]->ubDirection] && - AIDirection(pSoldier->sGridNo, MercPtrs[BestStab.ubOpponent]->sGridNo) != gOneCCDirection[MercPtrs[BestStab.ubOpponent]->ubDirection] && + AIDirection(pSoldier->sGridNo, BestStab.ubOpponent->sGridNo) != BestStab.ubOpponent->ubDirection && + AIDirection(pSoldier->sGridNo, BestStab.ubOpponent->sGridNo) != gOneCDirection[BestStab.ubOpponent->ubDirection] && + AIDirection(pSoldier->sGridNo, BestStab.ubOpponent->sGridNo) != gOneCCDirection[BestStab.ubOpponent->ubDirection] && pSoldier->bInitialActionPoints >= 2 * MinAPsToAttack(pSoldier, pSoldier->sLastTarget, FALSE, 0, 0) + APBPConstants[AP_MOVEMENT_FLAT] + APBPConstants[AP_MODIFIER_WALK] && pSoldier->bActionPoints < BestStab.ubAPCost + MinAPsToAttack(pSoldier, pSoldier->sLastTarget, FALSE, 0, 0)) { @@ -5781,10 +5779,9 @@ INT16 ubMinAPCost; (pSoldier->flags.uiStatusFlags & SOLDIER_BOXER) && SpacesAway(pSoldier->sGridNo, BestStab.sTarget) > 1 && BestStab.ubOpponent != NOBODY && - MercPtrs[BestStab.ubOpponent] && - gAnimControl[MercPtrs[BestStab.ubOpponent]->usAnimState].ubEndHeight == ANIM_STAND && - MercPtrs[BestStab.ubOpponent]->bActionPoints > 0 && - Chance(EffectiveAgility(MercPtrs[BestStab.ubOpponent], FALSE) * (100 + MercPtrs[BestStab.ubOpponent]->bBreath) * EffectiveWisdom(pSoldier) / (100 * 200))) + gAnimControl[BestStab.ubOpponent->usAnimState].ubEndHeight == ANIM_STAND && + BestStab.ubOpponent->bActionPoints > 0 && + Chance(EffectiveAgility(BestStab.ubOpponent, FALSE) * (100 + BestStab.ubOpponent->bBreath) * EffectiveWisdom(pSoldier) / (100 * 200))) { // find closest spot around opponent, avoid front direction UINT8 ubMovementCost; @@ -5804,7 +5801,7 @@ INT16 ubMinAPCost; if (ubMovementCost < TRAVELCOST_BLOCKED && NewOKDestination(pSoldier, sTempGridNo, FALSE, pSoldier->pathing.bLevel) && - AIDirection(BestStab.sTarget, sTempGridNo) != MercPtrs[BestStab.ubOpponent]->ubDirection) + AIDirection(BestStab.sTarget, sTempGridNo) != BestStab.ubOpponent->ubDirection) { sPathCost = PlotPath(pSoldier, sTempGridNo, FALSE, FALSE, FALSE, DetermineMovementMode(pSoldier, AI_ACTION_GET_CLOSER), pSoldier->bStealthMode, pSoldier->bReverse, 0); if (TileIsOutOfBounds(sBestSpot) || sPathCost < sBestPathCost) @@ -5842,7 +5839,7 @@ INT16 ubMinAPCost; // SANDRO - added a chance to try to steal merc's gun from hands else { - if (AIDetermineStealingWeaponAttempt( pSoldier, MercPtrs[BestStab.ubOpponent] ) == TRUE) + if (AIDetermineStealingWeaponAttempt( pSoldier, BestStab.ubOpponent ) == TRUE) { ubBestAttackAction = AI_ACTION_STEAL_MOVE; DebugAI(AI_MSG_INFO, pSoldier, String("best action = move to steal weapon, iAttackValue = %d", BestStab.iAttackValue)); @@ -6832,13 +6829,11 @@ L_NEWAIM: { DebugAI(AI_MSG_TOPIC, pSoldier, String("[Make boxer close if possible]")); - UINT16 ubOpponentID; + SoldierID ubOpponentID; sClosestOpponent = ClosestKnownOpponent(pSoldier, NULL, NULL, &ubOpponentID); DebugAI(AI_MSG_INFO, pSoldier, String("boxer: found closest opponent [%d] at %d", ubOpponentID, sClosestOpponent)); - if (!TileIsOutOfBounds(sClosestOpponent) && - ubOpponentID != NOBODY && - MercPtrs[ubOpponentID]) + if ( !TileIsOutOfBounds(sClosestOpponent) && ubOpponentID != NOBODY ) { if (pSoldier->bActionPoints > 0) { @@ -6875,7 +6870,7 @@ L_NEWAIM: if (!TileIsOutOfBounds(pSoldier->aiData.usActionData) && (pSoldier->bBreath < OKBREATH || pSoldier->bBreath < pSoldier->bBreathMax && - pSoldier->bBreath < MercPtrs[ubOpponentID]->bBreath && + pSoldier->bBreath < ubOpponentID->bBreath && Chance((100 - pSoldier->bBreath) * (100 - pSoldier->bBreath) / (2 * 100 * 100)))) { DebugAI(AI_MSG_INFO, pSoldier, String("boxer: restore breath")); @@ -6899,7 +6894,7 @@ L_NEWAIM: } else if (pSoldier->bBreath < OKBREATH || pSoldier->bBreath < pSoldier->bBreathMax && - (pSoldier->bBreath < MercPtrs[ubOpponentID]->bBreath || !pSoldier->aiData.bLastAttackHit && pSoldier->TakenLargeHit())) + (pSoldier->bBreath < ubOpponentID->bBreath || !pSoldier->aiData.bLastAttackHit && pSoldier->TakenLargeHit())) { // maybe move away from opponent UINT8 ubOpponentDir = AIDirection(pSoldier->sGridNo, sClosestOpponent); @@ -8579,9 +8574,9 @@ INT8 ArmedVehicleDecideActionRed( SOLDIERTYPE *pSoldier) //&& Menptr[BestShot.ubOpponent].pathing.bLevel == 0 && pSoldier->aiData.bOrders != SNIPER && BestShot.ubFriendlyFireChance < 5 && - !MercPtrs[BestShot.ubOpponent]->IsCowering() && + !BestShot.ubOpponent->IsCowering() && !AICheckIsFlanking( pSoldier ) && - LocationToLocationLineOfSightTest( pSoldier->sGridNo, pSoldier->pathing.bLevel, MercPtrs[BestShot.ubOpponent]->sGridNo, MercPtrs[BestShot.ubOpponent]->pathing.bLevel, TRUE, NO_DISTANCE_LIMIT ) && + LocationToLocationLineOfSightTest( pSoldier->sGridNo, pSoldier->pathing.bLevel, BestShot.ubOpponent->sGridNo, BestShot.ubOpponent->pathing.bLevel, TRUE, NO_DISTANCE_LIMIT ) && //Weapon[pSoldier->inv[BestShot.bWeaponIn].usItem].ubWeaponType == GUN_LMG ) && //Weapon[usInHand].ubWeaponClass == MGCLASS (fExtraClip || pSoldier->inv[BestShot.bWeaponIn][0]->data.gun.ubGunShotsLeft > gGameExternalOptions.ubAISuppressionMinimumMagSize) ) { diff --git a/TacticalAI/ai.h b/TacticalAI/ai.h index 70a211ec..c3e7f404 100644 --- a/TacticalAI/ai.h +++ b/TacticalAI/ai.h @@ -175,7 +175,7 @@ void CheckForChangingOrders(SOLDIERTYPE *pSoldier ); INT8 ClosestPanicTrigger( SOLDIERTYPE * pSoldier ); -INT32 ClosestKnownOpponent(SOLDIERTYPE *pSoldier, INT32 * psGridNo, INT8 * pbLevel, UINT16 * pubOpponentID = NULL); +INT32 ClosestKnownOpponent(SOLDIERTYPE *pSoldier, INT32 * psGridNo, INT8 * pbLevel, SoldierID *pubOpponentID = NULL); INT32 ClosestPC( SOLDIERTYPE *pSoldier, INT32 * psDistance ); INT32 ClosestUnDisguisedPC( SOLDIERTYPE *pSoldier, INT32 * psDistance ); // Flugente: like ClosestPC(...), but does not account for covert or not visible mercs BOOLEAN CanAutoBandage( BOOLEAN fDoFullCheck ); @@ -277,13 +277,13 @@ INT8 CalcAverageCTGTForPosition( SOLDIERTYPE * pSoldier, SoldierID ubOppID, INT3 UINT8 NumberOfTeamMatesAdjacent( SOLDIERTYPE * pSoldier, INT32 sGridNo ); // Flugente: get the id of the closest soldier (coser than x tiles) of a specific team with a specific flag that we can currently see -UINT16 GetClosestFlaggedSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam, UINT32 aFlag, BOOLEAN fCheckSight = TRUE ); +SoldierID GetClosestFlaggedSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam, UINT32 aFlag, BOOLEAN fCheckSight = TRUE ); // get the id of the closest soldier (closer than x tiles) of a specific team that is wounded that we can currently see -UINT16 GetClosestWoundedSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam ); +SoldierID GetClosestWoundedSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam ); // get the id of the closest medic (closer than x tiles) of a specific team -UINT16 GetClosestMedicSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam ); +SoldierID GetClosestMedicSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam ); // sevenfm: BOOLEAN NightLight(void); From d244ef4c912aa1a08086a4b0a5d64ac0dc3d5379 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sat, 30 Nov 2024 15:25:48 +0200 Subject: [PATCH 161/192] use SoldierID --- Multiplayer/server.cpp | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/Multiplayer/server.cpp b/Multiplayer/server.cpp index 7f5b4eba..5ddd60f7 100644 --- a/Multiplayer/server.cpp +++ b/Multiplayer/server.cpp @@ -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) @@ -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) From 4645a09722b33ff01cd318bb0e41858287606141 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sat, 30 Nov 2024 16:07:36 +0200 Subject: [PATCH 162/192] Use SoldierID --- Tactical/DynamicDialogue.cpp | 10 ++--- Tactical/Soldier Control.cpp | 32 ++++++------- TacticalAI/Movement.cpp | 20 +++++---- TacticalAI/NPC.cpp | 8 ++-- TacticalAI/ai.h | 2 +- TileEngine/SmokeEffects.cpp | 4 +- TileEngine/Tactical Placement GUI.cpp | 65 ++++++++++++++------------- TileEngine/pits.cpp | 4 +- TileEngine/pits.h | 6 ++- 9 files changed, 79 insertions(+), 72 deletions(-) diff --git a/Tactical/DynamicDialogue.cpp b/Tactical/DynamicDialogue.cpp index 2767bed8..9df30c38 100644 --- a/Tactical/DynamicDialogue.cpp +++ b/Tactical/DynamicDialogue.cpp @@ -2001,14 +2001,14 @@ UINT8 GetFittingInterjectorProfile( UINT8 usEvent, UINT8 usProfileVictim, UINT8 if ( usEvent >= OPINIONEVENT_MAX ) return NO_PROFILE; - INT16 idVictim = GetSoldierIDFromMercID( usProfileVictim ); - INT16 idCause = GetSoldierIDFromMercID( usProfileCause ); + SoldierID idVictim = GetSoldierIDFromMercID( usProfileVictim ); + SoldierID idCause = GetSoldierIDFromMercID( usProfileCause ); - if ( idVictim < 0 || idCause < 0 ) + if ( idVictim == NOBODY || idCause == NOBODY ) return NO_PROFILE; - SOLDIERTYPE* pSoldierVictim = MercPtrs[idVictim]; - SOLDIERTYPE* pSoldierCause = MercPtrs[idCause]; + SOLDIERTYPE* pSoldierVictim = idVictim; + SOLDIERTYPE* pSoldierCause = idCause; if ( !pSoldierVictim || !pSoldierCause ) return NO_PROFILE; diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index 136973d9..bffbc8eb 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -24251,7 +24251,7 @@ BOOLEAN SOLDIERTYPE::CanStartDrag(void) for (UINT32 cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; cnt <= gTacticalStatus.Team[CIV_TEAM].bLastID; ++cnt) { if (cnt != this->ubID && - MercPtrs[cnt] && + cnt != NOBODY && MercPtrs[cnt]->sGridNo == sNewGridNo && this->CanDragPerson(cnt)) { @@ -24494,31 +24494,32 @@ UINT8 GetSquadleadersCountInVicinity( SOLDIERTYPE * pSoldier, BOOLEAN fWithHighe // loop through all soldiers around for ( cnt = gTacticalStatus.Team[pSoldier->bTeam].bFirstID; cnt <= gTacticalStatus.Team[pSoldier->bTeam].bLastID; cnt++ ) { + SOLDIERTYPE *pSquadLeader = MercPtrs[cnt]; // Get active conscious soldier - if ( MercPtrs[cnt] != pSoldier && MercPtrs[cnt]->bActive && //MercPtrs[ cnt ]->aiData.bShock < 20 && - MercPtrs[cnt]->stats.bLife >= OKLIFE && HAS_SKILL_TRAIT( MercPtrs[cnt], SQUADLEADER_NT ) ) + if ( pSquadLeader != pSoldier && pSquadLeader->bActive && //MercPtrs[ cnt ]->aiData.bShock < 20 && + pSquadLeader->stats.bLife >= OKLIFE && HAS_SKILL_TRAIT( pSquadLeader, SQUADLEADER_NT ) ) { // check if within distance // if both have extended ear, the distance is bigger and they don't need to sea each other // note that enemy always get the bonus if within distance, regardless of extended ears // Flugente: moved around arguments for speed reason if ( fDontCheckDistance || - (PythSpacesAway( pSoldier->sGridNo, MercPtrs[cnt]->sGridNo ) <= gSkillTraitValues.usSLRadiusNormal) || + (PythSpacesAway( pSoldier->sGridNo, pSquadLeader->sGridNo ) <= gSkillTraitValues.usSLRadiusNormal) || //((SoldierToVirtualSoldierLineOfSightTest( MercPtrs[ cnt ], pSoldier->sGridNo, pSoldier->pathing.bLevel, ANIM_STAND, TRUE, CALC_FROM_ALL_DIRS ) || //SoldierToVirtualSoldierLineOfSightTest( pSoldier, MercPtrs[ cnt ]->sGridNo, MercPtrs[ cnt ]->pathing.bLevel, ANIM_STAND, TRUE, CALC_FROM_ALL_DIRS ) ) && - ((pSoldier->bTeam == ENEMY_TEAM || (HasExtendedEarOn( pSoldier ) && HasExtendedEarOn( MercPtrs[cnt] ))) && PythSpacesAway( pSoldier->sGridNo, MercPtrs[cnt]->sGridNo ) <= gSkillTraitValues.usSLRadiusExtendedEar) + ((pSoldier->bTeam == ENEMY_TEAM || (HasExtendedEarOn( pSoldier ) && HasExtendedEarOn( pSquadLeader ))) && PythSpacesAway( pSoldier->sGridNo, pSquadLeader->sGridNo ) <= gSkillTraitValues.usSLRadiusExtendedEar) ) { // If checking for higher level SL // also count in already aquired level increses from other SLs if ( fWithHigherLevel ) { - if ( MercPtrs[cnt]->stats.bExpLevel > (pSoldier->stats.bExpLevel + (ubNumberSL*gSkillTraitValues.ubSLEffectiveLevelInRadius)) ) - ubNumberSL += min( (max( 0, (MercPtrs[cnt]->stats.bExpLevel - (pSoldier->stats.bExpLevel + (ubNumberSL*gSkillTraitValues.ubSLEffectiveLevelInRadius))) )), (NUM_SKILL_TRAITS( MercPtrs[cnt], SQUADLEADER_NT )) ); + if ( pSquadLeader->stats.bExpLevel > (pSoldier->stats.bExpLevel + (ubNumberSL*gSkillTraitValues.ubSLEffectiveLevelInRadius)) ) + ubNumberSL += min( (max( 0, (pSquadLeader->stats.bExpLevel - (pSoldier->stats.bExpLevel + (ubNumberSL*gSkillTraitValues.ubSLEffectiveLevelInRadius))) )), (NUM_SKILL_TRAITS( pSquadLeader, SQUADLEADER_NT )) ); } else { - ubNumberSL += NUM_SKILL_TRAITS( MercPtrs[cnt], SQUADLEADER_NT ); + ubNumberSL += NUM_SKILL_TRAITS( pSquadLeader, SQUADLEADER_NT ); } if ( ubNumberSL >= gSkillTraitValues.ubSLMaxBonuses ) @@ -24532,29 +24533,30 @@ UINT8 GetSquadleadersCountInVicinity( SOLDIERTYPE * pSoldier, BOOLEAN fWithHighe { for ( cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; cnt <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++cnt ) { + SOLDIERTYPE *pSquadLeader = MercPtrs[cnt]; // Get active conscious soldier - if ( MercPtrs[cnt] != pSoldier && MercPtrs[cnt]->bActive && //MercPtrs[ cnt ]->aiData.bShock < 20 && - MercPtrs[cnt]->stats.bLife >= OKLIFE && HAS_SKILL_TRAIT( MercPtrs[cnt], SQUADLEADER_NT ) ) + if ( pSquadLeader != pSoldier && pSquadLeader->bActive && //MercPtrs[ cnt ]->aiData.bShock < 20 && + pSquadLeader->stats.bLife >= OKLIFE && HAS_SKILL_TRAIT( pSquadLeader, SQUADLEADER_NT ) ) { // check if within distance // Flugente: moved around arguments for speed reason if ( fDontCheckDistance || - (PythSpacesAway( pSoldier->sGridNo, MercPtrs[cnt]->sGridNo ) <= gSkillTraitValues.usSLRadiusNormal) || + (PythSpacesAway( pSoldier->sGridNo, pSquadLeader->sGridNo ) <= gSkillTraitValues.usSLRadiusNormal) || //((SoldierToVirtualSoldierLineOfSightTest( MercPtrs[ cnt ], pSoldier->sGridNo, pSoldier->pathing.bLevel, ANIM_STAND, TRUE, CALC_FROM_ALL_DIRS ) || //SoldierToVirtualSoldierLineOfSightTest( pSoldier, MercPtrs[ cnt ]->sGridNo, MercPtrs[ cnt ]->pathing.bLevel, ANIM_STAND, TRUE, CALC_FROM_ALL_DIRS ) ) && - ((HasExtendedEarOn( MercPtrs[cnt] ) && PythSpacesAway( pSoldier->sGridNo, MercPtrs[cnt]->sGridNo ) <= gSkillTraitValues.usSLRadiusExtendedEar)) + ((HasExtendedEarOn( pSquadLeader ) && PythSpacesAway( pSoldier->sGridNo, pSquadLeader->sGridNo ) <= gSkillTraitValues.usSLRadiusExtendedEar)) ) { // If checking for higher level SL // also count in already aquired level increses from other SLs if ( fWithHigherLevel ) { - if ( MercPtrs[cnt]->stats.bExpLevel > (pSoldier->stats.bExpLevel + (ubNumberSL*gSkillTraitValues.ubSLEffectiveLevelInRadius)) ) - ubNumberSL += min( (max( 0, (MercPtrs[cnt]->stats.bExpLevel - (pSoldier->stats.bExpLevel + (ubNumberSL*gSkillTraitValues.ubSLEffectiveLevelInRadius))) )), (NUM_SKILL_TRAITS( MercPtrs[cnt], SQUADLEADER_NT )) ); + if ( pSquadLeader->stats.bExpLevel > (pSoldier->stats.bExpLevel + (ubNumberSL*gSkillTraitValues.ubSLEffectiveLevelInRadius)) ) + ubNumberSL += min( (max( 0, (pSquadLeader->stats.bExpLevel - (pSoldier->stats.bExpLevel + (ubNumberSL*gSkillTraitValues.ubSLEffectiveLevelInRadius))) )), (NUM_SKILL_TRAITS( pSquadLeader, SQUADLEADER_NT )) ); } else { - ubNumberSL += NUM_SKILL_TRAITS( MercPtrs[cnt], SQUADLEADER_NT ); + ubNumberSL += NUM_SKILL_TRAITS( pSquadLeader, SQUADLEADER_NT ); } if ( ubNumberSL >= gSkillTraitValues.ubSLMaxBonuses ) diff --git a/TacticalAI/Movement.cpp b/TacticalAI/Movement.cpp index ec5daaaf..08a974a8 100644 --- a/TacticalAI/Movement.cpp +++ b/TacticalAI/Movement.cpp @@ -881,12 +881,14 @@ void HaltMoveForSoldierOutOfPoints(SOLDIERTYPE *pSoldier) } } -void SetCivilianDestination(UINT8 ubWho, INT32 sGridNo) +void SetCivilianDestination(SoldierID ubWho, INT32 sGridNo) { - SOLDIERTYPE *pSoldier; + if ( ubWho == NOBODY ) + { + return; + } - - pSoldier = MercPtrs[ubWho]; + SOLDIERTYPE *pSoldier = ubWho; /* // if we control the civilian @@ -896,12 +898,12 @@ void SetCivilianDestination(UINT8 ubWho, INT32 sGridNo) // if the destination is different from what he has now if (pSoldier->aiData.usActionData != sGridNo) { - // store his new destination - pSoldier->aiData.usActionData = sGridNo; + // store his new destination + pSoldier->aiData.usActionData = sGridNo; - // and cancel any movement in progress that he was still engaged in - pSoldier->aiData.bAction = AI_ACTION_NONE; - pSoldier->aiData.bActionInProgress = FALSE; + // and cancel any movement in progress that he was still engaged in + pSoldier->aiData.bAction = AI_ACTION_NONE; + pSoldier->aiData.bActionInProgress = FALSE; } // only set the underEscort flag once you give him a destination diff --git a/TacticalAI/NPC.cpp b/TacticalAI/NPC.cpp index fcd67cb1..727d0e83 100644 --- a/TacticalAI/NPC.cpp +++ b/TacticalAI/NPC.cpp @@ -904,12 +904,12 @@ UINT8 CalcDesireToTalk( UINT8 ubNPC, UINT8 ubMerc, INT8 bApproach ) // SANDRO - bonus for communication with people for assertive people if ( gGameOptions.fNewTraitSystem && bApproach != APPROACH_THREATEN) { - INT16 id = GetSoldierIDFromMercID( ubMerc ); - if ( id > -1 ) + SoldierID id = GetSoldierIDFromMercID( ubMerc ); + if ( id != NOBODY ) { - if ( DoesMercHavePersonality( MercPtrs[id], CHAR_TRAIT_ASSERTIVE ) ) + if ( DoesMercHavePersonality( id, CHAR_TRAIT_ASSERTIVE ) ) iPersonalVal += 50; - else if ( DoesMercHavePersonality( MercPtrs[id], CHAR_TRAIT_MALICIOUS ) ) + else if ( DoesMercHavePersonality( id, CHAR_TRAIT_MALICIOUS ) ) iPersonalVal -= 50; } } diff --git a/TacticalAI/ai.h b/TacticalAI/ai.h index c3e7f404..72af7137 100644 --- a/TacticalAI/ai.h +++ b/TacticalAI/ai.h @@ -252,7 +252,7 @@ INT16 RandomFriendWithin(SOLDIERTYPE *pSoldier); INT16 RoamingRange(SOLDIERTYPE *pSoldier, INT32 *pFromGridNo); -void SetCivilianDestination(UINT8 ubWho, INT32 sGridNo); +void SetCivilianDestination(SoldierID ubWho, INT32 sGridNo); void SetNewSituation( SOLDIERTYPE * pSoldier ); UINT8 SoldierDifficultyLevel( SOLDIERTYPE * pSoldier ); diff --git a/TileEngine/SmokeEffects.cpp b/TileEngine/SmokeEffects.cpp index 4d8bb9c2..28170ec6 100644 --- a/TileEngine/SmokeEffects.cpp +++ b/TileEngine/SmokeEffects.cpp @@ -192,7 +192,7 @@ UINT16 FromSmokeTypeToWorldFlags( INT8 bType ) -INT32 NewSmokeEffect( INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT16 ubOwner, BOOL fFromRemoteClient ) +INT32 NewSmokeEffect( INT32 sGridNo, UINT16 usItem, INT8 bLevel, SoldierID ubOwner, BOOL fFromRemoteClient ) { SMOKEEFFECT *pSmoke; INT32 iSmokeIndex; @@ -222,7 +222,7 @@ INT32 NewSmokeEffect( INT32 sGridNo, UINT16 usItem, INT8 bLevel, UINT16 ubOwner, } #ifdef JA2BETAVERSION CHAR tmpMPDbgString[512]; - sprintf(tmpMPDbgString,"NewSmokeEffect ( sGridNo : %i , usItem : %i , ubOwner : %i , bLevel : %i , iSmokeEffectID : %i )\n",sGridNo, usItem , ubOwner , bLevel , iSmokeIndex ); + sprintf(tmpMPDbgString,"NewSmokeEffect ( sGridNo : %i , usItem : %i , ubOwner : %i , bLevel : %i , iSmokeEffectID : %i )\n",sGridNo, usItem , ubOwner.i , bLevel , iSmokeIndex ); MPDebugMsg(tmpMPDbgString); gfMPDebugOutputRandoms = true; #endif diff --git a/TileEngine/Tactical Placement GUI.cpp b/TileEngine/Tactical Placement GUI.cpp index 7b6c1daa..3c4fe0bd 100644 --- a/TileEngine/Tactical Placement GUI.cpp +++ b/TileEngine/Tactical Placement GUI.cpp @@ -327,15 +327,15 @@ void InitTacticalPlacementGUI() giPlacements = 0; for( i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++i ) { - - if( MercPtrs[ i ]->bActive && !MercPtrs[ i ]->flags.fBetweenSectors && - CurrentBattleSectorIs( MercPtrs[i]->sSectorX, MercPtrs[i]->sSectorY, MercPtrs[i]->bSectorZ ) && - !( MercPtrs[ i ]->flags.uiStatusFlags & ( SOLDIER_VEHICLE ) ) && // ATE Ignore vehicles - MercPtrs[ i ]->bAssignment != ASSIGNMENT_POW && - MercPtrs[ i ]->bAssignment != ASSIGNMENT_MINIEVENT && - MercPtrs[ i ]->bAssignment != ASSIGNMENT_REBELCOMMAND && - !( MercPtrs[i]->usSoldierFlagMask2 & SOLDIER_CONCEALINSERTION ) && - MercPtrs[ i ]->bAssignment != IN_TRANSIT ) + SOLDIERTYPE *pSoldier = MercPtrs[i]; + if( pSoldier->bActive && !pSoldier->flags.fBetweenSectors && + CurrentBattleSectorIs( pSoldier->sSectorX, pSoldier->sSectorY, pSoldier->bSectorZ ) && + !( pSoldier->flags.uiStatusFlags & ( SOLDIER_VEHICLE ) ) && // ATE Ignore vehicles + pSoldier->bAssignment != ASSIGNMENT_POW && + pSoldier->bAssignment != ASSIGNMENT_MINIEVENT && + pSoldier->bAssignment != ASSIGNMENT_REBELCOMMAND && + !( pSoldier->usSoldierFlagMask2 & SOLDIER_CONCEALINSERTION ) && + pSoldier->bAssignment != IN_TRANSIT ) { ++giPlacements; } @@ -347,58 +347,59 @@ void InitTacticalPlacementGUI() giPlacements = 0; for( i = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; i <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++i ) { - if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->stats.bLife && !MercPtrs[ i ]->flags.fBetweenSectors && - CurrentBattleSectorIs( MercPtrs[i]->sSectorX, MercPtrs[i]->sSectorY, MercPtrs[i]->bSectorZ ) && - MercPtrs[ i ]->bAssignment != ASSIGNMENT_POW && - MercPtrs[ i ]->bAssignment != ASSIGNMENT_MINIEVENT && - MercPtrs[ i ]->bAssignment != ASSIGNMENT_REBELCOMMAND && - !( MercPtrs[i]->usSoldierFlagMask2 & SOLDIER_CONCEALINSERTION ) && - MercPtrs[ i ]->bAssignment != IN_TRANSIT && - !( MercPtrs[ i ]->flags.uiStatusFlags & ( SOLDIER_VEHICLE ) ) ) // ATE Ignore vehicles + SOLDIERTYPE *pSoldier = MercPtrs[i]; + if( pSoldier->bActive && pSoldier->stats.bLife && !pSoldier->flags.fBetweenSectors && + CurrentBattleSectorIs( pSoldier->sSectorX, pSoldier->sSectorY, pSoldier->bSectorZ ) && + pSoldier->bAssignment != ASSIGNMENT_POW && + pSoldier->bAssignment != ASSIGNMENT_MINIEVENT && + pSoldier->bAssignment != ASSIGNMENT_REBELCOMMAND && + !( pSoldier->usSoldierFlagMask2 & SOLDIER_CONCEALINSERTION ) && + pSoldier->bAssignment != IN_TRANSIT && + !( pSoldier->flags.uiStatusFlags & ( SOLDIER_VEHICLE ) ) ) // ATE Ignore vehicles { // Flugente: if options allow it and we entered this sector - in combat - via helicopter, then allow us free selection of our entry point, and drop us from the helicopter - if ( MercPtrs[ i ]->bTeam == gbPlayerNum && (gGameExternalOptions.ubSkyriderHotLZ == 1 || gGameExternalOptions.ubSkyriderHotLZ == 3) && MercPtrs[ i ]->usSoldierFlagMask & SOLDIER_AIRDROP ) + if ( pSoldier->bTeam == gbPlayerNum && (gGameExternalOptions.ubSkyriderHotLZ == 1 || gGameExternalOptions.ubSkyriderHotLZ == 3) && pSoldier->usSoldierFlagMask & SOLDIER_AIRDROP ) { - AddMercToHeli( MercPtrs[ i ]->ubID ); + AddMercToHeli( pSoldier->ubID ); DisableButton(iTPButtons[SPREAD_BUTTON]); gMercPlacement[ giPlacements ].ubStrategicInsertionCode = INSERTION_CODE_CHOPPER; - MercPtrs[ i ]->ubStrategicInsertionCode = INSERTION_CODE_CHOPPER; + pSoldier->ubStrategicInsertionCode = INSERTION_CODE_CHOPPER; gfCenter = TRUE; } if ( GetEnemyEncounterCode() == ENEMY_AMBUSH_DEPLOYMENT_CODE ) { gMercPlacement[giPlacements].ubStrategicInsertionCode = INSERTION_CODE_CENTER; - MercPtrs[i]->ubStrategicInsertionCode = INSERTION_CODE_CENTER; + pSoldier->ubStrategicInsertionCode = INSERTION_CODE_CENTER; gfCenter = TRUE; } // WANNE - MP: Check if the desired insertion direction is valid on the map. If not, choose another entry direction! if (is_networked) { - MercPtrs[ i ]->ubStrategicInsertionCode = GetValidInsertionDirectionForMP(MercPtrs[ i ]->ubStrategicInsertionCode); + pSoldier->ubStrategicInsertionCode = GetValidInsertionDirectionForMP(pSoldier->ubStrategicInsertionCode); } // ATE: If we are in a vehicle - remove ourselves from it! - //if ( MercPtrs[ i ]->flags.uiStatusFlags & ( SOLDIER_DRIVER | SOLDIER_PASSENGER ) ) + //if ( pSoldier->flags.uiStatusFlags & ( SOLDIER_DRIVER | SOLDIER_PASSENGER ) ) //{ - // RemoveSoldierFromVehicle( MercPtrs[ i ], MercPtrs[ i ]->bVehicleID ); + // RemoveSoldierFromVehicle( pSoldier, pSoldier->bVehicleID ); //} - if( MercPtrs[ i ]->ubStrategicInsertionCode == INSERTION_CODE_PRIMARY_EDGEINDEX || - MercPtrs[ i ]->ubStrategicInsertionCode == INSERTION_CODE_SECONDARY_EDGEINDEX ) + if( pSoldier->ubStrategicInsertionCode == INSERTION_CODE_PRIMARY_EDGEINDEX || + pSoldier->ubStrategicInsertionCode == INSERTION_CODE_SECONDARY_EDGEINDEX ) { - MercPtrs[ i ]->ubStrategicInsertionCode = (UINT8)MercPtrs[ i ]->usStrategicInsertionData; + pSoldier->ubStrategicInsertionCode = (UINT8)pSoldier->usStrategicInsertionData; } - gMercPlacement[ giPlacements ].pSoldier = MercPtrs[ i ]; - gMercPlacement[ giPlacements ].ubStrategicInsertionCode = MercPtrs[ i ]->ubStrategicInsertionCode; + gMercPlacement[ giPlacements ].pSoldier = pSoldier; + gMercPlacement[ giPlacements ].ubStrategicInsertionCode = pSoldier->ubStrategicInsertionCode; gMercPlacement[ giPlacements ].fPlaced = FALSE; // WANNE: We always want to have edgepoints - CheckForValidMapEdge( &MercPtrs[ i ]->ubStrategicInsertionCode ); + CheckForValidMapEdge( &pSoldier->ubStrategicInsertionCode ); // Flugente: campaign stats - switch( MercPtrs[ i ]->ubStrategicInsertionCode ) + switch( pSoldier->ubStrategicInsertionCode ) { case INSERTION_CODE_NORTH: gCurrentIncident.usIncidentFlags |= INCIDENT_ATTACKDIR_NORTH; @@ -415,7 +416,7 @@ void InitTacticalPlacementGUI() } // WANNE - MP: Center - if (is_networked && MercPtrs[ i ]->ubStrategicInsertionCode == INSERTION_CODE_CENTER) + if (is_networked && pSoldier->ubStrategicInsertionCode == INSERTION_CODE_CENTER) { gfCenter = TRUE; } diff --git a/TileEngine/pits.cpp b/TileEngine/pits.cpp index 86f0e548..6b8de13e 100644 --- a/TileEngine/pits.cpp +++ b/TileEngine/pits.cpp @@ -237,9 +237,9 @@ void SearchForOtherMembersWithinPitRadiusAndMakeThemFall( INT32 sGridNo, INT16 s } } -void HandleFallIntoPitFromAnimation( UINT16 ubID ) +void HandleFallIntoPitFromAnimation( SoldierID ubID ) { - SOLDIERTYPE *pSoldier = MercPtrs[ ubID ]; + SOLDIERTYPE *pSoldier = ubID; EXITGRID ExitGrid; INT32 sPitGridNo; // OK, get exit grid... diff --git a/TileEngine/pits.h b/TileEngine/pits.h index 5050fe6f..b9a81154 100644 --- a/TileEngine/pits.h +++ b/TileEngine/pits.h @@ -1,6 +1,8 @@ #ifndef __PITS_H #define __PITS_H +#include "overhead types.h" + void Add3X3Pit( INT32 iMapIndex ); void Add5X5Pit( INT32 iMapIndex ); void Remove3X3Pit( INT32 iMapIndex ); @@ -14,7 +16,7 @@ void RemoveAllPits(); extern BOOLEAN gfShowPits; extern BOOLEAN gfLoadPitsWithoutArming; -void HandleFallIntoPitFromAnimation( UINT16 ubID ); +void HandleFallIntoPitFromAnimation( SoldierID ubID ); -#endif \ No newline at end of file +#endif From 66f5156f03a8952c30dd4d95489ed66f3bb89e21 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sat, 30 Nov 2024 16:52:18 +0200 Subject: [PATCH 163/192] Use SoldierID --- Tactical/Auto Bandage.cpp | 98 ++++++++++++++++-------------------- Tactical/Auto Bandage.h | 4 +- Tactical/DynamicDialogue.cpp | 8 +-- Tactical/Overhead.h | 4 +- 4 files changed, 52 insertions(+), 62 deletions(-) diff --git a/Tactical/Auto Bandage.cpp b/Tactical/Auto Bandage.cpp index 4f2cd888..c6b76901 100644 --- a/Tactical/Auto Bandage.cpp +++ b/Tactical/Auto Bandage.cpp @@ -89,10 +89,8 @@ 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 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; - UINT16 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); @@ -1235,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 ) @@ -1251,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; } } } @@ -1280,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 ) @@ -1329,7 +1318,7 @@ void HandleRetreatBandaging() needhelpinsector = TRUE; sX = pSoldier->sSectorX; sY = pSoldier->sSectorY; - possiblepatient = cnt; + possiblepatient = ID; } } } @@ -1338,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 diff --git a/Tactical/Auto Bandage.h b/Tactical/Auto Bandage.h index 796e9dff..ebcdbc88 100644 --- a/Tactical/Auto Bandage.h +++ b/Tactical/Auto Bandage.h @@ -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 \ No newline at end of file +#endif diff --git a/Tactical/DynamicDialogue.cpp b/Tactical/DynamicDialogue.cpp index 9df30c38..6b197ae3 100644 --- a/Tactical/DynamicDialogue.cpp +++ b/Tactical/DynamicDialogue.cpp @@ -1749,11 +1749,11 @@ void HandleDynamicOpinionOnContractExtension( UINT8 ubCode, UINT8 usProfile ) oldcontract -= 14 * 1440; // someones contract got extended. Other mercs who have less time on their contract will be annoyed by this, as they feel they should have been paid first - SOLDIERTYPE* pSoldier = NULL; - UINT16 bMercID = gTacticalStatus.Team[gbPlayerNum].bFirstID; - UINT16 bLastTeamID = gTacticalStatus.Team[gbPlayerNum].bLastID; - for ( pSoldier = MercPtrs[bMercID]; bMercID <= bLastTeamID; ++bMercID, pSoldier++ ) + SoldierID bMercID = gTacticalStatus.Team[gbPlayerNum].bFirstID; + SoldierID bLastTeamID = gTacticalStatus.Team[gbPlayerNum].bLastID; + for ( ; bMercID <= bLastTeamID; ++bMercID ) { + SOLDIERTYPE *pSoldier = bMercID; if ( pSoldier->bActive && pSoldier->ubProfile != NO_PROFILE && pSoldier->ubProfile != usProfile && !(pSoldier->bAssignment == IN_TRANSIT || pSoldier->bAssignment == ASSIGNMENT_DEAD) ) diff --git a/Tactical/Overhead.h b/Tactical/Overhead.h index fea2d805..87b5034a 100644 --- a/Tactical/Overhead.h +++ b/Tactical/Overhead.h @@ -23,8 +23,8 @@ enum // TACTICAL ENGINE STATUS FLAGS typedef struct { - UINT16 bFirstID; - UINT16 bLastID; + SoldierID bFirstID; + SoldierID bLastID; COLORVAL RadarColor; INT8 bSide; INT16 bMenInSector; From 5bbbec18bbbab2fe90ce5e6c383460d6df9d31cc Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sat, 30 Nov 2024 17:06:11 +0200 Subject: [PATCH 164/192] Use SoldierID --- Ja2/SaveLoadGame.cpp | 38 ++++++++++++++++++++------------------ Ja2/gamescreen.cpp | 30 +++++++++++------------------- Strategic/strategicmap.cpp | 10 +++++----- 3 files changed, 36 insertions(+), 42 deletions(-) diff --git a/Ja2/SaveLoadGame.cpp b/Ja2/SaveLoadGame.cpp index 34f283fe..18270276 100644 --- a/Ja2/SaveLoadGame.cpp +++ b/Ja2/SaveLoadGame.cpp @@ -6731,9 +6731,9 @@ BOOLEAN LoadSavedGame( int ubSavedGameID ) // player team character fixes SOLDIERTYPE *pTeamSoldier; - for (UINT16 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. @@ -9277,20 +9277,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 ); } } } @@ -9511,18 +9511,19 @@ void GetBestPossibleSectorXYZValues( INT16 *psSectorX, INT16 *psSectorY, INT8 *p } else { - UINT16 sSoldierCnt; + SoldierID sSoldierCnt; + SoldierID bLastTeamID; SOLDIERTYPE *pSoldier; - UINT16 bLastTeamID; - BOOLEAN fFoundAMerc=FALSE; + 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 ) { @@ -9546,8 +9547,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 diff --git a/Ja2/gamescreen.cpp b/Ja2/gamescreen.cpp index e4f9046d..89b01fb7 100644 --- a/Ja2/gamescreen.cpp +++ b/Ja2/gamescreen.cpp @@ -1030,10 +1030,7 @@ void DisableFPSOverlay( BOOLEAN fEnable ) void TacticalScreenLocateToSoldier( ) { - INT32 cnt; - SOLDIERTYPE *pSoldier; - UINT16 bLastTeamID; - BOOLEAN fPreferedGuyUsed = FALSE; + BOOLEAN fPreferedGuyUsed = FALSE; if ( gubPreferredInitialSelectedGuy != NOBODY ) { @@ -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; - UINT16 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 ); } - } diff --git a/Strategic/strategicmap.cpp b/Strategic/strategicmap.cpp index b5908ecf..ff7e2edc 100644 --- a/Strategic/strategicmap.cpp +++ b/Strategic/strategicmap.cpp @@ -7541,16 +7541,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 ) { @@ -7581,8 +7580,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 ) { From 2eb16c583c82fddf842a76f64ee1698aaf237b28 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sat, 30 Nov 2024 17:18:04 +0200 Subject: [PATCH 165/192] Use SoldierID --- Laptop/insurance Contract.cpp | 66 ++++++++++++++--------------------- Laptop/laptop.cpp | 6 ++-- Laptop/merccompare.cpp | 51 ++++++++++++--------------- Laptop/personnel.cpp | 7 ++-- 4 files changed, 57 insertions(+), 73 deletions(-) diff --git a/Laptop/insurance Contract.cpp b/Laptop/insurance Contract.cpp index ab97fb1b..c031f41f 100644 --- a/Laptop/insurance Contract.cpp +++ b/Laptop/insurance Contract.cpp @@ -163,7 +163,7 @@ 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( SoldierID ubSoldierID, UINT8 ubFormID ); @@ -943,20 +943,17 @@ void SelectInsuranceContractRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason } } -INT8 CountInsurableMercs() +UINT16 CountInsurableMercs() { - UINT16 cnt; - SOLDIERTYPE *pSoldier; - UINT16 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++; } @@ -1094,33 +1091,29 @@ void HandleAcceptButton( SoldierID 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; } } } @@ -1254,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++; } } @@ -1787,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; } diff --git a/Laptop/laptop.cpp b/Laptop/laptop.cpp index 00c2f161..9809622f 100644 --- a/Laptop/laptop.cpp +++ b/Laptop/laptop.cpp @@ -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 ) ) ) { diff --git a/Laptop/merccompare.cpp b/Laptop/merccompare.cpp index 51c2fd94..4219df61 100644 --- a/Laptop/merccompare.cpp +++ b/Laptop/merccompare.cpp @@ -340,13 +340,12 @@ BOOLEAN EnterMercCompareAnalyze() // We fill two dropdowns with all mercs on our team std::vector > 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::getInstance( ).SetEntries( mercvector ); @@ -976,17 +975,16 @@ BOOLEAN EnterMercCompareMatrix( ) // create a map of all current squads with at least 2 members std::map 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 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::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::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; diff --git a/Laptop/personnel.cpp b/Laptop/personnel.cpp index 775ff5f4..65aabfe2 100644 --- a/Laptop/personnel.cpp +++ b/Laptop/personnel.cpp @@ -558,10 +558,11 @@ void EnterPersonnel( void ) // Fill in the current team list maxCurrentTeamIndex = -1; SOLDIERTYPE *pTeamSoldier = MercPtrs[ 0 ]; - for (int idx = gTacticalStatus.Team[ pTeamSoldier->bTeam ].bFirstID; + for (SoldierID idx = gTacticalStatus.Team[ pTeamSoldier->bTeam ].bFirstID; idx <= gTacticalStatus.Team[ pTeamSoldier->bTeam ].bLastID; - ++idx) { - pTeamSoldier = MercPtrs[ idx ]; + ++idx) + { + pTeamSoldier = idx; // WANNE: Bugfix: Also show the roboter in ther personnel screen. This bug was introduced in revision 2498, when Many Mercenary was included. //if ((pTeamSoldier->bActive) && From c2b1ac01098cb80811a72895cd8ffc7055b1c19c Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sat, 30 Nov 2024 18:29:17 +0200 Subject: [PATCH 166/192] use SoldierID --- Strategic/AI Viewer.cpp | 7 +- Strategic/Assignments.cpp | 182 ++++++++++++++++++-------------------- Tactical/End Game.cpp | 9 +- 3 files changed, 92 insertions(+), 106 deletions(-) diff --git a/Strategic/AI Viewer.cpp b/Strategic/AI Viewer.cpp index 9f2006f0..ddb07bc7 100644 --- a/Strategic/AI Viewer.cpp +++ b/Strategic/AI Viewer.cpp @@ -649,7 +649,7 @@ void RenderInfoInSector() { UINT8 ubSectorX, ubSectorY; UINT16 ubMercs=0, ubActive=0, ubUnconcious=0, ubCollapsed=0; - INT32 i, xp, yp; + 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 ) diff --git a/Strategic/Assignments.cpp b/Strategic/Assignments.cpp index bed21b31..ffb5db4f 100644 --- a/Strategic/Assignments.cpp +++ b/Strategic/Assignments.cpp @@ -1223,16 +1223,16 @@ BOOLEAN IsAnythingAroundForSoldierToClean( SOLDIERTYPE * pSoldier ) } // now the other merc's stuff - for(UINT16 teamIndex = gTacticalStatus.Team[gbPlayerNum].bFirstID; teamIndex <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++teamIndex) + for(SoldierID teamMember = gTacticalStatus.Team[gbPlayerNum].bFirstID; teamMember <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++teamMember) { // Ignore self, mercs in other sectors, etc. - if (CanCharacterRepairAnotherSoldiersStuff(pSoldier, MercPtrs[teamIndex])) + if (CanCharacterRepairAnotherSoldiersStuff(pSoldier, teamMember)) { // Iterate over all pocket slots and add items in need of repair for (UINT8 pocketIndex = HANDPOS; pocketIndex < NUM_INV_SLOTS; ++pocketIndex) { - const OBJECTTYPE* pObj = &(const_cast(MercPtrs[teamIndex])->inv[pocketIndex]); + const OBJECTTYPE* pObj = &(const_cast(MercPtrs[teamMember])->inv[pocketIndex]); if(pObj == NULL || pObj->ubNumberOfObjects == NOTHING || pObj->usItem == NOTHING) continue; @@ -1337,18 +1337,16 @@ BOOLEAN DoesCharacterHaveAnyItemsToRepair( SOLDIERTYPE *pSoldier, INT8 bHighestP if ( bHighestPass != - 1 ) { // now look for items to repair on other mercs - for( UINT16 bLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; bLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++bLoop ) + for( SoldierID OtherSoldier = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; OtherSoldier <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++OtherSoldier ) { - SOLDIERTYPE* pOtherSoldier = MercPtrs[ bLoop ]; - - if ( CanCharacterRepairAnotherSoldiersStuff( pSoldier, pOtherSoldier ) ) + if ( CanCharacterRepairAnotherSoldiersStuff( pSoldier, OtherSoldier ) ) { // okay, seems like a candidate! Check if he has anything that needs unjamming or repairs // CHRISL: Changed to dynamically determine max inventory locations. for ( bPocket = HANDPOS; bPocket < NUM_INV_SLOTS; ++bPocket ) { // the object a weapon? and jammed? - if ( ( Item[ pOtherSoldier->inv[ bPocket ].usItem ].usItemClass == IC_GUN ) && ( pOtherSoldier->inv[ bPocket ][0]->data.gun.bGunAmmoStatus < 0 ) ) + if ( ( Item[ OtherSoldier->inv[ bPocket ].usItem ].usItemClass == IC_GUN ) && ( OtherSoldier->inv[ bPocket ][0]->data.gun.bGunAmmoStatus < 0 ) ) { return( TRUE ); } @@ -1356,7 +1354,7 @@ BOOLEAN DoesCharacterHaveAnyItemsToRepair( SOLDIERTYPE *pSoldier, INT8 bHighestP // repair everyone's hands and armor slots first, then headgear, and pockets last for ( ubPassType = REPAIR_HANDS_AND_ARMOR; ubPassType <= ( UINT8 ) bHighestPass; ubPassType++ ) { - if (FindRepairableItemOnOtherSoldier( pSoldier, pOtherSoldier, ubPassType )) { + if (FindRepairableItemOnOtherSoldier( pSoldier, OtherSoldier, ubPassType )) { return( TRUE ); } } @@ -2054,17 +2052,16 @@ BOOLEAN DoesSectorMercIsInHaveSufficientLoyaltyToTrainMilitia( SOLDIERTYPE *pSol INT8 CountMilitiaTrainersInSoldiersSector( SOLDIERTYPE * pSoldier, UINT8 ubMilitiaType ) { - INT8 bCount = 0; + INT8 bCount = 0; AssertNotNIL(pSoldier); - for ( UINT16 bLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; bLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++bLoop ) + for ( SoldierID OtherSoldier = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; OtherSoldier <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++OtherSoldier ) { - SOLDIERTYPE* pOtherSoldier = MercPtrs[ bLoop ]; - if ( pSoldier != pOtherSoldier && pOtherSoldier->bActive && pOtherSoldier->stats.bLife >= OKLIFE && pOtherSoldier->sSectorX == pSoldier->sSectorX && pOtherSoldier->sSectorY == pSoldier->sSectorY && pSoldier->bSectorZ == pOtherSoldier->bSectorZ ) + if ( pSoldier != OtherSoldier && OtherSoldier->bActive && OtherSoldier->stats.bLife >= OKLIFE && OtherSoldier->sSectorX == pSoldier->sSectorX && OtherSoldier->sSectorY == pSoldier->sSectorY && pSoldier->bSectorZ == OtherSoldier->bSectorZ ) { // Count depends on Militia Type requested - if (ubMilitiaType == TOWN_MILITIA && pOtherSoldier->bAssignment == TRAIN_TOWN ) + if (ubMilitiaType == TOWN_MILITIA && OtherSoldier->bAssignment == TRAIN_TOWN ) { ++bCount; } @@ -3638,15 +3635,13 @@ UINT32 CalculateAllGuardsValueInPrison( INT16 sMapX, INT16 sMapY, INT8 bZ ) UINT32 prisonguardvalue = 0; // count any mercs found here, and sum up their guard values - SOLDIERTYPE *pSoldier = NULL; - UINT32 uiCnt = 0; - UINT32 firstid = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; - UINT32 lastid = gTacticalStatus.Team[ OUR_TEAM ].bLastID; - for ( uiCnt = firstid, pSoldier = MercPtrs[ uiCnt ]; uiCnt <= lastid; ++uiCnt, ++pSoldier) + SoldierID Soldier = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; + SoldierID lastid = gTacticalStatus.Team[ OUR_TEAM ].bLastID; + for ( ; Soldier <= lastid; ++Soldier) { - if( pSoldier->bActive && ( pSoldier->sSectorX == sMapX ) && ( pSoldier->sSectorY == sMapY ) && ( pSoldier->bSectorZ == bZ) ) + if( Soldier->bActive && ( Soldier->sSectorX == sMapX ) && ( Soldier->sSectorY == sMapY ) && ( Soldier->bSectorZ == bZ) ) { - prisonguardvalue += CalculatePrisonGuardValue(pSoldier ); + prisonguardvalue += CalculatePrisonGuardValue( Soldier ); } } @@ -3661,15 +3656,13 @@ UINT32 CalculateAllSnitchesGuardValueInPrison( INT16 sMapX, INT16 sMapY, INT8 bZ UINT32 prisonguardvalue = 0; // count any mercs found here, and sum up their guard values - SOLDIERTYPE *pSoldier = NULL; - UINT32 uiCnt = 0; - UINT32 firstid = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; - UINT32 lastid = gTacticalStatus.Team[ OUR_TEAM ].bLastID; - for ( uiCnt = firstid, pSoldier = MercPtrs[ uiCnt ]; uiCnt <= lastid; ++uiCnt, ++pSoldier) + SoldierID Soldier = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; + SoldierID lastid = gTacticalStatus.Team[ OUR_TEAM ].bLastID; + for ( ; Soldier <= lastid; ++Soldier) { - if( pSoldier->bActive && ( pSoldier->sSectorX == sMapX ) && ( pSoldier->sSectorY == sMapY ) && ( pSoldier->bSectorZ == bZ) && pSoldier->flags.fMercAsleep == FALSE ) + if( Soldier->bActive && ( Soldier->sSectorX == sMapX ) && ( Soldier->sSectorY == sMapY ) && ( Soldier->bSectorZ == bZ) && Soldier->flags.fMercAsleep == FALSE ) { - prisonguardvalue += CalculateSnitchGuardValue(pSoldier ); + prisonguardvalue += CalculateSnitchGuardValue(Soldier ); } } @@ -3684,16 +3677,14 @@ UINT32 CalculateAllGuardsNumberInPrison( INT16 sMapX, INT16 sMapY, INT8 bZ ) UINT8 numprisonguards = 0; // count any mercs found here - SOLDIERTYPE *pSoldier = NULL; - UINT32 uiCnt = 0; - UINT32 firstid = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; - UINT32 lastid = gTacticalStatus.Team[ OUR_TEAM ].bLastID; - for ( uiCnt = firstid, pSoldier = MercPtrs[ uiCnt ]; uiCnt <= lastid; ++uiCnt, ++pSoldier) + SoldierID Soldier = gTacticalStatus.Team[OUR_TEAM].bFirstID; + SoldierID lastid = gTacticalStatus.Team[OUR_TEAM].bLastID; + for ( ; Soldier <= lastid; ++Soldier) { - if( pSoldier->bActive && ( pSoldier->sSectorX == sMapX ) && ( pSoldier->sSectorY == sMapY ) && ( pSoldier->bSectorZ == bZ) && pSoldier->flags.fMercAsleep == FALSE ) + if( Soldier->bActive && ( Soldier->sSectorX == sMapX ) && ( Soldier->sSectorY == sMapY ) && ( Soldier->bSectorZ == bZ) && Soldier->flags.fMercAsleep == FALSE ) { // anv: undercover snitches don't count as guards as they don't guard in traditional sense - if ( !(pSoldier->bAssignment == FACILITY_PRISON_SNITCH) ) + if ( !(Soldier->bAssignment == FACILITY_PRISON_SNITCH) ) ++numprisonguards; } } @@ -5483,12 +5474,12 @@ void HandleRepairBySoldier( SOLDIERTYPE *pSoldier ) // first our own stuff CollectCleanableItems(pSoldier, pSoldier, itemsToClean); // then other mercs' stuff - for(UINT16 teamIndex = gTacticalStatus.Team[gbPlayerNum].bFirstID; teamIndex <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++teamIndex) + for(SoldierID teamMember = gTacticalStatus.Team[gbPlayerNum].bFirstID; teamMember <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++teamMember) { // Ignore self, mercs in other sectors, etc. - if (CanCharacterRepairAnotherSoldiersStuff(pSoldier, MercPtrs[teamIndex])) + if (CanCharacterRepairAnotherSoldiersStuff(pSoldier, teamMember)) // silversurfer: This function now needs the guy that does the repairs and the one that owns the stuff. - CollectCleanableItems(pSoldier, MercPtrs[teamIndex], itemsToClean); + CollectCleanableItems(pSoldier, teamMember, itemsToClean); } while (!itemsToClean.empty() && ubCleaningPtsLeft > 0) @@ -5528,12 +5519,12 @@ void HandleRepairBySoldier( SOLDIERTYPE *pSoldier ) // silversurfer: Looks strange? It's not. This function now needs the guy that does the repairs and the one that owns the stuff. CollectRepairableItems(pSoldier, pSoldier, itemsToFix); - for(UINT16 teamIndex = gTacticalStatus.Team[gbPlayerNum].bFirstID; teamIndex <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++teamIndex) + for(SoldierID teamMember = gTacticalStatus.Team[gbPlayerNum].bFirstID; teamMember <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++teamMember) { // Ignore self, mercs in other sectors, etc. - if (CanCharacterRepairAnotherSoldiersStuff(pSoldier, MercPtrs[teamIndex])) + if (CanCharacterRepairAnotherSoldiersStuff(pSoldier, teamMember)) // silversurfer: This function now needs the guy that does the repairs and the one that owns the stuff. - CollectRepairableItems(pSoldier, MercPtrs[teamIndex], itemsToFix); + CollectRepairableItems(pSoldier, teamMember, itemsToFix); } // Step through items, starting with the highest priority item @@ -6708,17 +6699,15 @@ void HandleStrategicDiseaseAndBurial() // Flugente: handle militia command void HandleMilitiaCommand() { - SOLDIERTYPE *pSoldier = NULL; - UINT32 uiCnt = 0; - UINT32 firstid = gTacticalStatus.Team[gbPlayerNum].bFirstID; - UINT32 lastid = gTacticalStatus.Team[gbPlayerNum].bLastID; - for ( uiCnt = firstid, pSoldier = MercPtrs[ uiCnt ]; uiCnt <= lastid; ++uiCnt, ++pSoldier) + SoldierID soldier = gTacticalStatus.Team[gbPlayerNum].bFirstID; + SoldierID lastid = gTacticalStatus.Team[gbPlayerNum].bLastID; + for ( ; soldier <= lastid; ++soldier) { - if( pSoldier && pSoldier->bAssignment == FACILITY_STRATEGIC_MILITIA_MOVEMENT && pSoldier->flags.fMercAsleep == FALSE ) + if( soldier->bAssignment == FACILITY_STRATEGIC_MILITIA_MOVEMENT && soldier->flags.fMercAsleep == FALSE ) { // every commander gets a bit of leadership and wisdom - StatChange( pSoldier, LDRAMT, 2, TRUE ); - StatChange( pSoldier, WISDOMAMT, 1, TRUE ); + StatChange( soldier, LDRAMT, 2, TRUE ); + StatChange( soldier, WISDOMAMT, 1, TRUE ); } } } @@ -6741,12 +6730,11 @@ void HandleSpyAssignments() std::vector vector_uncoveredmercs; FLOAT intelgained = 0.0f; - SOLDIERTYPE *pSoldier = NULL; - UINT32 uiCnt = 0; - UINT32 firstid = gTacticalStatus.Team[gbPlayerNum].bFirstID; - UINT32 lastid = gTacticalStatus.Team[gbPlayerNum].bLastID; - for ( uiCnt = firstid, pSoldier = MercPtrs[uiCnt]; uiCnt <= lastid; ++uiCnt, ++pSoldier ) + SoldierID id = gTacticalStatus.Team[gbPlayerNum].bFirstID; + SoldierID lastid = gTacticalStatus.Team[gbPlayerNum].bLastID; + for ( ; id <= lastid; ++id) { + SOLDIERTYPE *pSoldier = id; if ( pSoldier ) { if ( SPY_LOCATION( pSoldier->bAssignment ) ) @@ -6781,7 +6769,7 @@ void HandleSpyAssignments() { // if we are already in hiding, we will be uncovered if ( pSoldier->usSkillCooldown[SOLDIER_COOLDOWN_INTEL_PENALTY] > 10 ) - vector_uncoveredmercs.push_back( uiCnt ); + vector_uncoveredmercs.push_back( id ); // we get a penalty, and a chance to be uncovered pSoldier->usSkillCooldown[SOLDIER_COOLDOWN_INTEL_PENALTY] += 20 + Random( 30 ); @@ -6845,16 +6833,14 @@ struct admintmpstruct UINT16 GetNumberofAdministratableMercs( INT16 sX, INT16 sY ) { UINT16 num = 0; - UINT8 townid_origin = GetTownIdForSector( sX, sY ); - SOLDIERTYPE *pSoldier = NULL; - UINT32 uiCnt = 0; - UINT32 firstid = gTacticalStatus.Team[gbPlayerNum].bFirstID; - UINT32 lastid = gTacticalStatus.Team[gbPlayerNum].bLastID; - for ( uiCnt = firstid, pSoldier = MercPtrs[uiCnt]; uiCnt <= lastid; ++uiCnt, ++pSoldier ) + SoldierID id = gTacticalStatus.Team[gbPlayerNum].bFirstID; + SoldierID lastid = gTacticalStatus.Team[gbPlayerNum].bLastID; + for ( ; id <= lastid; ++id ) { - if ( pSoldier + SOLDIERTYPE *pSoldier = id; + if ( pSoldier && !pSoldier->flags.fMercAsleep && !pSoldier->bSectorZ && EnoughTimeOnAssignment( pSoldier ) @@ -6887,12 +6873,11 @@ FLOAT GetAdministrationPercentage( INT16 sX, INT16 sY ) data.townid = GetTownIdForSector( sX, sY ); // loop over all soldiers with this assignment, determine percentage applied, determine how much of total that is, award exp points - SOLDIERTYPE *pSoldier = NULL; - UINT32 uiCnt = 0; - UINT32 firstid = gTacticalStatus.Team[gbPlayerNum].bFirstID; - UINT32 lastid = gTacticalStatus.Team[gbPlayerNum].bLastID; - for ( uiCnt = firstid, pSoldier = MercPtrs[uiCnt]; uiCnt <= lastid; ++uiCnt, ++pSoldier ) + SoldierID id = gTacticalStatus.Team[gbPlayerNum].bFirstID; + SoldierID lastid = gTacticalStatus.Team[gbPlayerNum].bLastID; + for ( ; id <= lastid; ++id ) { + SOLDIERTYPE *pSoldier = id; if ( pSoldier && pSoldier->bAssignment == ADMINISTRATION && !pSoldier->flags.fMercAsleep && EnoughTimeOnAssignment( pSoldier ) ) { // sum up the points for towns, if not a town, for sectors @@ -6918,12 +6903,11 @@ void HandleAdministrationAssignments() std::vector helpervec; // loop over all soldiers with this assignment, determine percentage applied, determine how much of total that is, award exp points - SOLDIERTYPE *pSoldier = NULL; - UINT32 uiCnt = 0; - UINT32 firstid = gTacticalStatus.Team[gbPlayerNum].bFirstID; - UINT32 lastid = gTacticalStatus.Team[gbPlayerNum].bLastID; - for ( uiCnt = firstid, pSoldier = MercPtrs[uiCnt]; uiCnt <= lastid; ++uiCnt, ++pSoldier ) + SoldierID id = gTacticalStatus.Team[gbPlayerNum].bFirstID; + const SoldierID lastid = gTacticalStatus.Team[gbPlayerNum].bLastID; + for ( ; id <= lastid; ++id ) { + SOLDIERTYPE *pSoldier = id; if ( pSoldier && pSoldier->bAssignment == ADMINISTRATION && !pSoldier->flags.fMercAsleep && EnoughTimeOnAssignment( pSoldier ) ) { // sum up the points for towns, if not a town, for sectors @@ -6967,8 +6951,10 @@ void HandleAdministrationAssignments() } } - for ( uiCnt = firstid, pSoldier = MercPtrs[uiCnt]; uiCnt <= lastid; ++uiCnt, ++pSoldier ) + id = gTacticalStatus.Team[gbPlayerNum].bFirstID; + for ( ; id <= lastid; ++id ) { + SOLDIERTYPE *pSoldier = id; if ( pSoldier && pSoldier->bAssignment == ADMINISTRATION && !pSoldier->flags.fMercAsleep && EnoughTimeOnAssignment( pSoldier ) ) { UINT8 sector = SECTOR( pSoldier->sSectorX, pSoldier->sSectorY ); @@ -7010,12 +6996,11 @@ void HandleAdministrationAssignments() // Flugente: handle exploration assignments void HandleExplorationAssignments() { - SOLDIERTYPE *pSoldier = NULL; - UINT32 uiCnt = 0; - UINT32 firstid = gTacticalStatus.Team[gbPlayerNum].bFirstID; - UINT32 lastid = gTacticalStatus.Team[gbPlayerNum].bLastID; - for ( uiCnt = firstid, pSoldier = MercPtrs[uiCnt]; uiCnt <= lastid; ++uiCnt, ++pSoldier ) + SoldierID id = gTacticalStatus.Team[gbPlayerNum].bFirstID; + const SoldierID lastid = gTacticalStatus.Team[gbPlayerNum].bLastID; + for ( ; id <= lastid; ++id ) { + SOLDIERTYPE *pSoldier = id; if ( pSoldier && pSoldier->bAssignment == EXPLORATION && !pSoldier->flags.fMercAsleep && EnoughTimeOnAssignment( pSoldier ) ) { UINT32 pts = pSoldier->GetExplorationPoints(); @@ -7099,13 +7084,13 @@ void HandleExplorationAssignments() void HandleMiniEventAssignments() { - SOLDIERTYPE *pSoldier = NULL; - UINT32 uiCnt = 0; - const UINT32 firstid = gTacticalStatus.Team[gbPlayerNum].bFirstID; - const UINT32 lastid = gTacticalStatus.Team[gbPlayerNum].bLastID; + SoldierID id = gTacticalStatus.Team[gbPlayerNum].bFirstID; + const SoldierID lastid = gTacticalStatus.Team[gbPlayerNum].bLastID; - for ( uiCnt = firstid, pSoldier = MercPtrs[uiCnt]; uiCnt <= lastid; ++uiCnt, ++pSoldier ) + for ( ; id <= lastid; ++id ) { + SOLDIERTYPE *pSoldier = id; + if ( pSoldier && pSoldier->bAssignment == ASSIGNMENT_MINIEVENT && EnoughTimeOnAssignment( pSoldier ) ) { if (--pSoldier->ubHoursRemainingOnMiniEvent == 0) @@ -8802,12 +8787,11 @@ void HandleEquipmentMove( INT16 sMapX, INT16 sMapY, INT8 bZ ) if ( (gWorldSectorX == sMapX) && (gWorldSectorY == sMapY) && (gbWorldSectorZ == bZ) ) sDropOffGridNo = gMapInformation.sCenterGridNo; - SOLDIERTYPE *pSoldier = NULL; - UINT32 uiCnt = 0; - UINT32 firstid = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; - UINT32 lastid = gTacticalStatus.Team[ OUR_TEAM ].bLastID; - for ( uiCnt = firstid, pSoldier = MercPtrs[ uiCnt ]; uiCnt <= lastid; ++uiCnt, ++pSoldier) + SoldierID id = gTacticalStatus.Team[gbPlayerNum].bFirstID; + const SoldierID lastid = gTacticalStatus.Team[gbPlayerNum].bLastID; + for ( ; id <= lastid; ++id ) { + SOLDIERTYPE *pSoldier = id; if( pSoldier->bActive && ( pSoldier->sSectorX == sMapX ) && ( pSoldier->sSectorY == sMapY ) && ( pSoldier->bSectorZ == bZ) && pSoldier->flags.fMercAsleep == FALSE ) { if( ( pSoldier->bAssignment == MOVE_EQUIPMENT ) && ( EnoughTimeOnAssignment( pSoldier ) ) ) @@ -9048,8 +9032,11 @@ void HandleEquipmentMove( INT16 sMapX, INT16 sMapY, INT8 bZ ) // award a bit of experience to the movers UINT16 itemsperperson = moveditems / pair.first; UINT16 weightperperson = movedweight / pair.first; - for ( uiCnt = firstid, pSoldier = MercPtrs[ uiCnt ]; uiCnt <= lastid; ++uiCnt, ++pSoldier) + + SoldierID id = gTacticalStatus.Team[gbPlayerNum].bFirstID; + for ( ; id <= lastid; ++id) { + SOLDIERTYPE *pSoldier = id; if( pSoldier->bActive && ( pSoldier->sSectorX == sMapX ) && ( pSoldier->sSectorY == sMapY ) && ( pSoldier->bSectorZ == bZ) && pSoldier->flags.fMercAsleep == FALSE ) { if( ( pSoldier->bAssignment == MOVE_EQUIPMENT ) && ( EnoughTimeOnAssignment( pSoldier ) ) ) @@ -9074,12 +9061,11 @@ void HandleTrainWorkers() { INT32 totalworkersadded = 0; - SOLDIERTYPE *pSoldier = NULL; - UINT32 uiCnt = 0; - UINT32 firstid = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; - UINT32 lastid = gTacticalStatus.Team[ OUR_TEAM ].bLastID; - for ( uiCnt = firstid, pSoldier = MercPtrs[ uiCnt ]; uiCnt <= lastid; ++uiCnt, ++pSoldier) + SoldierID id = gTacticalStatus.Team[OUR_TEAM].bFirstID; + const SoldierID lastid = gTacticalStatus.Team[OUR_TEAM].bLastID; + for ( ; id <= lastid; ++id) { + SOLDIERTYPE *pSoldier = id; if( pSoldier->bActive && !pSoldier->bSectorZ && !pSoldier->flags.fMercAsleep ) { if( ( pSoldier->bAssignment == TRAIN_WORKERS ) && ( EnoughTimeOnAssignment( pSoldier ) ) ) @@ -9507,13 +9493,13 @@ void HandleHealingByNaturalCauses( SOLDIERTYPE *pSoldier ) // SANDRO - experimental - increase health regeneration of soldiers when doctors are around if ( gGameOptions.fNewTraitSystem ) { - SOLDIERTYPE * pMedic = NULL; - UINT16 cnt; UINT16 bRegenerationBonus = 0; - cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; - for ( pMedic = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++cnt, pMedic++) + SoldierID id = gTacticalStatus.Team[OUR_TEAM].bFirstID; + const SoldierID lastid = gTacticalStatus.Team[OUR_TEAM].bLastID; + for ( ; id <= lastid; ++id ) { + SOLDIERTYPE *pMedic = id; if ( !(pMedic->bActive) || !(pMedic->bInSector) || ( pMedic->flags.uiStatusFlags & SOLDIER_VEHICLE ) || (pMedic->bAssignment == VEHICLE ) ) { continue; // NEXT!!! diff --git a/Tactical/End Game.cpp b/Tactical/End Game.cpp index d937d62e..795ec9cc 100644 --- a/Tactical/End Game.cpp +++ b/Tactical/End Game.cpp @@ -175,8 +175,7 @@ void BeginHandleDeidrannaDeath( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, INT8 void HandleDeidrannaDeath( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, INT8 bLevel ) { SOLDIERTYPE *pTeamSoldier; - INT32 cnt; - UINT16 ubKillerSoldierID = NOBODY; + SoldierID ubKillerSoldierID = NOBODY; // Start victory music here... SetMusicMode( MUSIC_TACTICAL_VICTORY ); @@ -189,11 +188,13 @@ void HandleDeidrannaDeath( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, INT8 bLev // STEP 1 ) START ALL QUOTES GOING! // OK - loop through all witnesses and see if they want to say something abou this... - cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; + SoldierID cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; // run through list - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt,pTeamSoldier++ ) + for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt ) { + pTeamSoldier = cnt; + if ( cnt != ubKillerSoldierID ) { if ( OK_INSECTOR_MERC( pTeamSoldier ) && !( pTeamSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) && !AM_AN_EPC( pTeamSoldier ) ) From 79b57c326e205239c2d433808053de4eae3e2962 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sat, 30 Nov 2024 18:29:55 +0200 Subject: [PATCH 167/192] Move check for surgery into its own function --- Strategic/Assignments.cpp | 201 ++++++++++++++------------------------ 1 file changed, 71 insertions(+), 130 deletions(-) diff --git a/Strategic/Assignments.cpp b/Strategic/Assignments.cpp index ffb5db4f..3df48d31 100644 --- a/Strategic/Assignments.cpp +++ b/Strategic/Assignments.cpp @@ -13754,6 +13754,75 @@ void PrisonerMenuBtnCallback( MOUSE_REGION * pRegion, INT32 iReason ) } } +static void CheckForSurgery(SOLDIERTYPE *pSoldier) +{ + if ( pSoldier->iHealableInjury >= 100 && gGameOptions.fNewTraitSystem ) // if we can heal at least one life point + { + SOLDIERTYPE *pBestMedic = NULL; + INT8 bSlot; + + // Find the best doctor + SoldierID id = gTacticalStatus.Team[OUR_TEAM].bFirstID; + const SoldierID lastid = gTacticalStatus.Team[OUR_TEAM].bLastID; + for ( ; id <= lastid; ++id ) + { + SOLDIERTYPE *pMedic = id; + if ( !(pMedic->bActive) || !(pMedic->bInSector) || (pMedic->flags.uiStatusFlags & SOLDIER_VEHICLE) || (pMedic->bAssignment == VEHICLE) ) + continue; // is nowhere around! + + if ( (pSoldier->ubID == pMedic->ubID) || !IS_DOCTOR( pMedic->bAssignment ) ) + continue; // cannot make surgery on self or not on the right assignment! + + bSlot = FindMedKit( pMedic ); + if ( bSlot == NO_SLOT ) + continue;// no medical kit! + + if ( pMedic->stats.bLife >= OKLIFE && !(pMedic->bCollapsed) && pMedic->stats.bMedical > 0 && (NUM_SKILL_TRAITS( pMedic, DOCTOR_NT ) >= gSkillTraitValues.ubDONumberTraitsNeededForSurgery) ) + { + if ( pBestMedic != NULL ) + { + if ( NUM_SKILL_TRAITS( pMedic, DOCTOR_NT ) > NUM_SKILL_TRAITS( pBestMedic, DOCTOR_NT ) ) + pBestMedic = pMedic; + } + else + { + pBestMedic = pMedic; + } + } + } + + if ( pBestMedic != NULL ) + { + CHAR16 zStr[200]; + pAutomaticSurgeryDoctor = pBestMedic; + pAutomaticSurgeryPatient = pSoldier; + + INT32 healwithout_bloodbag = pAutomaticSurgeryPatient->iHealableInjury * (gSkillTraitValues.ubDOSurgeryHealPercentBase + gSkillTraitValues.ubDOSurgeryHealPercentOnTop * NUM_SKILL_TRAITS( pAutomaticSurgeryDoctor, DOCTOR_NT )) / 10000; + + // Flugente: check whether we have a bloodbag we can use + INT32 healwith_bloodbag = -1; + if ( gSkillTraitValues.ubDOSurgeryHealPercentBloodbag > 0 && pAutomaticSurgeryDoctor->GetObjectWithItemFlag( BLOOD_BAG ) != NULL ) + healwith_bloodbag = pAutomaticSurgeryPatient->iHealableInjury * (gSkillTraitValues.ubDOSurgeryHealPercentBase + gSkillTraitValues.ubDOSurgeryHealPercentBloodbag + gSkillTraitValues.ubDOSurgeryHealPercentOnTop * NUM_SKILL_TRAITS( pAutomaticSurgeryDoctor, DOCTOR_NT )) / 10000; + + if ( healwith_bloodbag > healwithout_bloodbag ) + { + swprintf( zStr, New113Message[MSG113_SURGERY_BEFORE_DOCTOR_ASSIGNMENT_BLOODBAG], pAutomaticSurgeryPatient->GetName(), healwithout_bloodbag, healwith_bloodbag ); + + wcscpy( gzUserDefinedButton[0], New113Message[MSG113_BLOODBAGOPTIONS_YESSTAR] ); + wcscpy( gzUserDefinedButton[1], New113Message[MSG113_BLOODBAGOPTIONS_YES] ); + wcscpy( gzUserDefinedButton[2], New113Message[MSG113_BLOODBAGOPTIONS_NO] ); + wcscpy( gzUserDefinedButton[3], New113Message[MSG113_BLOODBAGOPTIONS_NO] ); + DoMapMessageBox( MSG_BOX_BASIC_STYLE, zStr, MAP_SCREEN, (MSG_BOX_FLAG_GENERIC_FOUR_BUTTONS | MSG_BOX_BUTTONS_HORIZONTAL_ORIENTATION), SurgeryBeforePatientingRequesterCallback ); + } + else + { + swprintf( zStr, New113Message[MSG113_SURGERY_BEFORE_PATIENT_ASSIGNMENT] ); + DoMapMessageBox( MSG_BOX_BASIC_STYLE, zStr, MAP_SCREEN, MSG_BOX_FLAG_YESNO, SurgeryBeforePatientingRequesterCallback ); + } + } + } +} + void AssignmentMenuBtnCallback( MOUSE_REGION * pRegion, INT32 iReason ) { // btn callback handler for assignment region @@ -13832,71 +13901,7 @@ void AssignmentMenuBtnCallback( MOUSE_REGION * pRegion, INT32 iReason ) ///////////////////////////////////////////////////////////////////////////////////////// // SANDRO - added check for surgery - if( pSoldier->iHealableInjury >= 100 && gGameOptions.fNewTraitSystem ) // if we can heal at least one life point - { - SOLDIERTYPE * pMedic = NULL; - SOLDIERTYPE * pBestMedic = NULL; - UINT16 cnt; - INT8 bSlot; - - // Find the best doctor - cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; - for ( pMedic = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; cnt++,pMedic++) - { - if ( !(pMedic->bActive) || !(pMedic->bInSector) || ( pMedic->flags.uiStatusFlags & SOLDIER_VEHICLE ) || (pMedic->bAssignment == VEHICLE ) ) - continue; // is nowhere around! - - if ( (pSoldier->ubID == pMedic->ubID) || !IS_DOCTOR(pMedic->bAssignment) ) - continue; // cannot make surgery on self or not on the right assignment! - - bSlot = FindMedKit( pMedic ); - if (bSlot == NO_SLOT) - continue;// no medical kit! - - if (pMedic->stats.bLife >= OKLIFE && !(pMedic->bCollapsed) && pMedic->stats.bMedical > 0 && ( NUM_SKILL_TRAITS( pMedic, DOCTOR_NT ) >= gSkillTraitValues.ubDONumberTraitsNeededForSurgery )) - { - if (pBestMedic != NULL) - { - if (NUM_SKILL_TRAITS( pMedic, DOCTOR_NT ) > NUM_SKILL_TRAITS( pBestMedic, DOCTOR_NT )) - pBestMedic = pMedic; - } - else - { - pBestMedic = pMedic; - } - } - } - - if (pBestMedic != NULL) - { - CHAR16 zStr[200]; - pAutomaticSurgeryDoctor = pBestMedic; - pAutomaticSurgeryPatient = pSoldier; - - INT32 healwithout_bloodbag = pAutomaticSurgeryPatient->iHealableInjury * ( gSkillTraitValues.ubDOSurgeryHealPercentBase + gSkillTraitValues.ubDOSurgeryHealPercentOnTop * NUM_SKILL_TRAITS( pAutomaticSurgeryDoctor, DOCTOR_NT ) ) / 10000; - - // Flugente: check whether we have a bloodbag we can use - INT32 healwith_bloodbag = -1; - if ( gSkillTraitValues.ubDOSurgeryHealPercentBloodbag > 0 && pAutomaticSurgeryDoctor->GetObjectWithItemFlag( BLOOD_BAG ) != NULL ) - healwith_bloodbag = pAutomaticSurgeryPatient->iHealableInjury * ( gSkillTraitValues.ubDOSurgeryHealPercentBase + gSkillTraitValues.ubDOSurgeryHealPercentBloodbag + gSkillTraitValues.ubDOSurgeryHealPercentOnTop * NUM_SKILL_TRAITS( pAutomaticSurgeryDoctor, DOCTOR_NT ) ) / 10000; - - if ( healwith_bloodbag > healwithout_bloodbag ) - { - swprintf( zStr, New113Message[MSG113_SURGERY_BEFORE_DOCTOR_ASSIGNMENT_BLOODBAG], pAutomaticSurgeryPatient->GetName(), healwithout_bloodbag, healwith_bloodbag ); - - wcscpy( gzUserDefinedButton[0], New113Message[MSG113_BLOODBAGOPTIONS_YESSTAR] ); - wcscpy( gzUserDefinedButton[1], New113Message[MSG113_BLOODBAGOPTIONS_YES] ); - wcscpy( gzUserDefinedButton[2], New113Message[MSG113_BLOODBAGOPTIONS_NO] ); - wcscpy( gzUserDefinedButton[3], New113Message[MSG113_BLOODBAGOPTIONS_NO] ); - DoMapMessageBox( MSG_BOX_BASIC_STYLE, zStr, MAP_SCREEN, ( MSG_BOX_FLAG_GENERIC_FOUR_BUTTONS | MSG_BOX_BUTTONS_HORIZONTAL_ORIENTATION ), SurgeryBeforePatientingRequesterCallback ); - } - else - { - swprintf( zStr, New113Message[MSG113_SURGERY_BEFORE_PATIENT_ASSIGNMENT] ); - DoMapMessageBox( MSG_BOX_BASIC_STYLE, zStr, MAP_SCREEN, MSG_BOX_FLAG_YESNO, SurgeryBeforePatientingRequesterCallback ); - } - } - } + CheckForSurgery( pSoldier ); ///////////////////////////////////////////////////////////////////////////////////////// } break; @@ -14114,71 +14119,7 @@ void AssignmentMenuBtnCallback( MOUSE_REGION * pRegion, INT32 iReason ) ///////////////////////////////////////////////////////////////////////////////////////// // SANDRO - added check for surgery - if( pSoldier->iHealableInjury >= 100 && gGameOptions.fNewTraitSystem ) // if we can heal at least one life point - { - SOLDIERTYPE * pMedic = NULL; - SOLDIERTYPE * pBestMedic = NULL; - UINT16 cnt; - INT8 bSlot; - - // Find the best doctor - cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; - for ( pMedic = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; cnt++,pMedic++) - { - if ( !(pMedic->bActive) || !(pMedic->bInSector) || ( pMedic->flags.uiStatusFlags & SOLDIER_VEHICLE ) || (pMedic->bAssignment == VEHICLE ) ) - continue; // is nowhere around! - - if ( (pSoldier->ubID == pMedic->ubID) || !IS_DOCTOR(pMedic->bAssignment) ) - continue; // cannot make surgery on self or not on the right assignment! - - bSlot = FindMedKit( pMedic ); - if (bSlot == NO_SLOT) - continue;// no medical kit! - - if (pMedic->stats.bLife >= OKLIFE && !(pMedic->bCollapsed) && pMedic->stats.bMedical > 0 && ( NUM_SKILL_TRAITS( pMedic, DOCTOR_NT ) >= gSkillTraitValues.ubDONumberTraitsNeededForSurgery )) - { - if (pBestMedic != NULL) - { - if (NUM_SKILL_TRAITS( pMedic, DOCTOR_NT ) > NUM_SKILL_TRAITS( pBestMedic, DOCTOR_NT )) - pBestMedic = pMedic; - } - else - { - pBestMedic = pMedic; - } - } - } - - if (pBestMedic != NULL) - { - CHAR16 zStr[200]; - pAutomaticSurgeryDoctor = pBestMedic; - pAutomaticSurgeryPatient = pSoldier; - - INT32 healwithout_bloodbag = pAutomaticSurgeryPatient->iHealableInjury * ( gSkillTraitValues.ubDOSurgeryHealPercentBase + gSkillTraitValues.ubDOSurgeryHealPercentOnTop * NUM_SKILL_TRAITS( pAutomaticSurgeryDoctor, DOCTOR_NT ) ) / 10000; - - // Flugente: check whether we have a bloodbag we can use - INT32 healwith_bloodbag = -1; - if ( gSkillTraitValues.ubDOSurgeryHealPercentBloodbag > 0 && pAutomaticSurgeryDoctor->GetObjectWithItemFlag( BLOOD_BAG ) != NULL ) - healwith_bloodbag = pAutomaticSurgeryPatient->iHealableInjury * ( gSkillTraitValues.ubDOSurgeryHealPercentBase + gSkillTraitValues.ubDOSurgeryHealPercentBloodbag + gSkillTraitValues.ubDOSurgeryHealPercentOnTop * NUM_SKILL_TRAITS( pAutomaticSurgeryDoctor, DOCTOR_NT ) ) / 10000; - - if ( healwith_bloodbag > healwithout_bloodbag ) - { - swprintf( zStr, New113Message[MSG113_SURGERY_BEFORE_DOCTOR_ASSIGNMENT_BLOODBAG], pAutomaticSurgeryPatient->GetName(), healwithout_bloodbag, healwith_bloodbag ); - - wcscpy( gzUserDefinedButton[0], New113Message[MSG113_BLOODBAGOPTIONS_YESSTAR] ); - wcscpy( gzUserDefinedButton[1], New113Message[MSG113_BLOODBAGOPTIONS_YES] ); - wcscpy( gzUserDefinedButton[2], New113Message[MSG113_BLOODBAGOPTIONS_NO] ); - wcscpy( gzUserDefinedButton[3], New113Message[MSG113_BLOODBAGOPTIONS_NO] ); - DoMapMessageBox( MSG_BOX_BASIC_STYLE, zStr, MAP_SCREEN, ( MSG_BOX_FLAG_GENERIC_FOUR_BUTTONS | MSG_BOX_BUTTONS_HORIZONTAL_ORIENTATION ), SurgeryBeforePatientingRequesterCallback ); - } - else - { - swprintf( zStr, New113Message[MSG113_SURGERY_BEFORE_PATIENT_ASSIGNMENT] ); - DoMapMessageBox( MSG_BOX_BASIC_STYLE, zStr, MAP_SCREEN, MSG_BOX_FLAG_YESNO, SurgeryBeforePatientingRequesterCallback ); - } - } - } + CheckForSurgery( pSoldier ); ///////////////////////////////////////////////////////////////////////////////////////// } break; From de56f653ec7a65d8bff86d11de174219a3c9092f Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sat, 30 Nov 2024 23:47:00 +0200 Subject: [PATCH 168/192] Use SoldierID --- Laptop/personnel.cpp | 68 +++++++++++---------- Strategic/Assignments.cpp | 33 ++++++----- Strategic/Auto Resolve.cpp | 30 ++++++---- Strategic/Creature Spreading.cpp | 13 ++-- Strategic/Game Init.cpp | 15 ++--- Strategic/Hourly Update.cpp | 48 +++++++-------- Strategic/LuaInitNPCs.cpp | 23 ++++---- Strategic/Map Screen Interface Map.cpp | 12 ++-- Strategic/Map Screen Interface.cpp | 5 +- Strategic/Merc Contract.cpp | 12 ++-- Strategic/MilitiaIndividual.cpp | 37 ++++++------ Strategic/MiniEvents.cpp | 16 ++--- Strategic/PreBattle Interface.cpp | 27 ++++----- Strategic/Queen Command.cpp | 60 +++++++++---------- Strategic/Quests.cpp | 15 +++-- Strategic/Rebel Command.cpp | 28 ++++----- Strategic/Strategic AI.cpp | 12 ++-- Strategic/Strategic Merc Handler.cpp | 32 +++++----- Strategic/Strategic Movement.cpp | 14 ++--- Strategic/Strategic Town Loyalty.cpp | 17 +++--- Strategic/Strategic Transport Groups.cpp | 16 ++--- Strategic/mapscreen.cpp | 29 ++++----- Strategic/strategic.cpp | 6 +- Strategic/strategicmap.cpp | 71 +++++++++++----------- Tactical/Air Raid.cpp | 26 ++++---- Tactical/Boxing.cpp | 7 +-- Tactical/Campaign.cpp | 12 ++-- Tactical/Dialogue Control.cpp | 38 ++++++------ Tactical/DisplayCover.cpp | 5 +- Tactical/Drugs And Alcohol.cpp | 10 ++-- Tactical/DynamicDialogue.cpp | 75 +++++++++++++----------- Tactical/DynamicDialogue.h | 2 +- Tactical/End Game.cpp | 26 ++++---- Tactical/Enemy Soldier Save.cpp | 9 ++- Tactical/Food.cpp | 15 +++-- Tactical/Handle Doors.cpp | 4 +- Tactical/Handle Items.cpp | 11 ++-- Tactical/Handle UI.cpp | 36 ++++++------ 38 files changed, 454 insertions(+), 461 deletions(-) diff --git a/Laptop/personnel.cpp b/Laptop/personnel.cpp index 65aabfe2..239b48ef 100644 --- a/Laptop/personnel.cpp +++ b/Laptop/personnel.cpp @@ -9122,81 +9122,85 @@ void AssignPersonnelWoundsHelpText( INT32 ubProfile ) INT8 CalculateMercsAchievementPercentage( INT32 ubProfile ) { SOLDIERTYPE *pTeamSoldier; - INT32 cnt=0; UINT32 uiMercPoints, uiMercPercentage; unsigned long ulTotalMercPoints = 0; // run through active soldiers - for ( cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++) + SoldierID id = gTacticalStatus.Team[gbPlayerNum].bFirstID; + const SoldierID lastid = gTacticalStatus.Team[gbPlayerNum].bLastID; + for ( ; id <= lastid; ++id) { - pTeamSoldier = MercPtrs[cnt]; + pTeamSoldier = id; // Only count stats of merc (not vehicles) if ( !( pTeamSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) && !AM_A_ROBOT( pTeamSoldier ) ) { if( pTeamSoldier->bActive && pTeamSoldier->stats.bLife > 0 && pTeamSoldier->ubProfile != 0 ) { + const STRUCT_Records &records = gMercProfiles[pTeamSoldier->ubProfile].records; + // get total value of all mercs, adjust by importance ulTotalMercPoints += - ( gMercProfiles[ pTeamSoldier->ubProfile ].records.usLocksPicked ) + ( records.usLocksPicked ) + - ( gMercProfiles[ pTeamSoldier->ubProfile ].records.usLocksBreached ) + ( records.usLocksBreached ) + - ( gMercProfiles[ pTeamSoldier->ubProfile ].records.usTrapsRemoved *3/2) + ( records.usTrapsRemoved *3/2) + - ( gMercProfiles[ pTeamSoldier->ubProfile ].records.usExpDetonated *3/2) + ( records.usExpDetonated *3/2) + - ( gMercProfiles[ pTeamSoldier->ubProfile ].records.usItemsRepaired /2) + ( records.usItemsRepaired /2) + - ( gMercProfiles[ pTeamSoldier->ubProfile ].records.usItemsCombined *2) + ( records.usItemsCombined *2) + - ( gMercProfiles[ pTeamSoldier->ubProfile ].records.usItemsStolen ) + ( records.usItemsStolen ) + - ( gMercProfiles[ pTeamSoldier->ubProfile ].records.usMercsBandaged *3/4) + ( records.usMercsBandaged *3/4) + - ( gMercProfiles[ pTeamSoldier->ubProfile ].records.usSurgeriesMade *3/2) + ( records.usSurgeriesMade *3/2) + - ( gMercProfiles[ pTeamSoldier->ubProfile ].records.usNPCsDiscovered *4/3) + ( records.usNPCsDiscovered *4/3) + - ( gMercProfiles[ pTeamSoldier->ubProfile ].records.usSectorsDiscovered ) + ( records.usSectorsDiscovered ) + - ( gMercProfiles[ pTeamSoldier->ubProfile ].records.usMilitiaTrained /4) + ( records.usMilitiaTrained /4) + - ( gMercProfiles[ pTeamSoldier->ubProfile ].records.ubQuestsHandled *2) + ( records.ubQuestsHandled *2) + - (gMercProfiles[pTeamSoldier->ubProfile].records.usInterrogations); + ( records.usInterrogations); } } } // Now get points of our mercs - uiMercPoints = - ( gMercProfiles[ ubProfile ].records.usLocksPicked ) + const STRUCT_Records &records = gMercProfiles[ubProfile].records; + uiMercPoints = + ( records.usLocksPicked ) + - ( gMercProfiles[ ubProfile ].records.usLocksBreached ) + ( records.usLocksBreached ) + - ( gMercProfiles[ ubProfile ].records.usTrapsRemoved *3/2) + ( records.usTrapsRemoved *3/2) + - ( gMercProfiles[ ubProfile ].records.usExpDetonated *3/2) + ( records.usExpDetonated *3/2) + - ( gMercProfiles[ ubProfile ].records.usItemsRepaired /2) + ( records.usItemsRepaired /2) + - ( gMercProfiles[ ubProfile ].records.usItemsCombined *2) + ( records.usItemsCombined *2) + - ( gMercProfiles[ ubProfile ].records.usItemsStolen ) + ( records.usItemsStolen ) + - ( gMercProfiles[ ubProfile ].records.usMercsBandaged *3/4) + ( records.usMercsBandaged *3/4) + - ( gMercProfiles[ ubProfile ].records.usSurgeriesMade *3/2) + ( records.usSurgeriesMade *3/2) + - ( gMercProfiles[ ubProfile ].records.usNPCsDiscovered *4/3) + ( records.usNPCsDiscovered *4/3) + - ( gMercProfiles[ ubProfile ].records.usSectorsDiscovered ) + ( records.usSectorsDiscovered ) + - ( gMercProfiles[ ubProfile ].records.usMilitiaTrained /4) + ( records.usMilitiaTrained /4) + - ( gMercProfiles[ ubProfile ].records.ubQuestsHandled *2) + ( records.ubQuestsHandled *2) + - ( gMercProfiles[ubProfile].records.usInterrogations ); + ( records.usInterrogations ); // Calculate percentage if( ulTotalMercPoints != 0 ) diff --git a/Strategic/Assignments.cpp b/Strategic/Assignments.cpp index 3df48d31..afac13f5 100644 --- a/Strategic/Assignments.cpp +++ b/Strategic/Assignments.cpp @@ -18407,12 +18407,12 @@ BOOLEAN HandleSelectedMercsBeingPutAsleep( BOOLEAN fWakeUp, BOOLEAN fDisplayWarn BOOLEAN IsAnyOneOnPlayersTeamOnThisAssignment( INT8 bAssignment ) { - SOLDIERTYPE *pSoldier = NULL; - - for( INT32 iCounter = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; iCounter <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++iCounter ) + SoldierID id = gTacticalStatus.Team[OUR_TEAM].bFirstID; + SoldierID lastid = gTacticalStatus.Team[OUR_TEAM].bLastID; + for( ; id <= lastid; ++id) { // get the current soldier - pSoldier = &Menptr[ iCounter ]; + SOLDIERTYPE *pSoldier = id; // active? if( pSoldier->bActive == FALSE ) @@ -18443,7 +18443,6 @@ void RebuildAssignmentsBox( void ) void BandageBleedingDyingPatientsBeingTreated( ) { - INT32 iCounter = 0; SOLDIERTYPE *pSoldier = NULL; SOLDIERTYPE *pDoctor = NULL; INT32 iKitSlot; @@ -18452,10 +18451,10 @@ void BandageBleedingDyingPatientsBeingTreated( ) UINT32 uiKitPtsUsed; BOOLEAN fSomeoneStillBleedingDying = FALSE; - for( iCounter = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; iCounter <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; iCounter++ ) + for( SoldierID id = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; id <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++id ) { // get the soldier - pSoldier = &Menptr[ iCounter ]; + pSoldier = id; // check if the soldier is currently active? if( pSoldier->bActive == FALSE ) @@ -19601,9 +19600,11 @@ void RepairItemsOnOthers( SOLDIERTYPE *pSoldier, UINT8 *pubRepairPtsLeft ) fSomethingWasRepairedThisPass = FALSE; // look for jammed guns on other soldiers in sector and unjam them - for( bLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; bLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++bLoop ) + SoldierID id = gTacticalStatus.Team[gbPlayerNum].bFirstID; + const SoldierID lastid = gTacticalStatus.Team[gbPlayerNum].bLastID; + for ( ; id <= lastid; ++id ) { - pOtherSoldier = MercPtrs[ bLoop ]; + pOtherSoldier = id; // check character is valid, alive, same sector, not between, has inventory, etc. if ( CanCharacterRepairAnotherSoldiersStuff( pSoldier, pOtherSoldier ) ) @@ -19621,9 +19622,11 @@ void RepairItemsOnOthers( SOLDIERTYPE *pSoldier, UINT8 *pubRepairPtsLeft ) pBestOtherSoldier = NULL; // now look for items to repair on other mercs - for( bLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; bLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++bLoop ) + SoldierID id = gTacticalStatus.Team[gbPlayerNum].bFirstID; + const SoldierID lastid = gTacticalStatus.Team[gbPlayerNum].bLastID; + for ( ; id <= lastid; ++id ) { - pOtherSoldier = MercPtrs[ bLoop ]; + pOtherSoldier = id; // check character is valid, alive, same sector, not between, has inventory, etc. if ( CanCharacterRepairAnotherSoldiersStuff( pSoldier, pOtherSoldier ) ) @@ -22806,11 +22809,11 @@ BOOLEAN MercStaffsMilitaryHQ() return TRUE; SOLDIERTYPE *pSoldier = NULL; - UINT32 uiCnt = 0; - UINT32 firstid = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; - UINT32 lastid = gTacticalStatus.Team[ OUR_TEAM ].bLastID; - for ( uiCnt = firstid, pSoldier = MercPtrs[ uiCnt ]; uiCnt <= lastid; ++uiCnt, ++pSoldier) + SoldierID id = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; + SoldierID lastid = gTacticalStatus.Team[ OUR_TEAM ].bLastID; + for ( ; id <= lastid; ++id) { + pSoldier = id; if( pSoldier && pSoldier->bAssignment == FACILITY_STRATEGIC_MILITIA_MOVEMENT && pSoldier->flags.fMercAsleep == FALSE ) { return TRUE; diff --git a/Strategic/Auto Resolve.cpp b/Strategic/Auto Resolve.cpp index c5e0010f..f19dd2c9 100644 --- a/Strategic/Auto Resolve.cpp +++ b/Strategic/Auto Resolve.cpp @@ -1852,11 +1852,14 @@ 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 ) { - SOLDIERTYPE *pSoldier = MercPtrs[i]; + SOLDIERTYPE *pSoldier = id; - if( pSoldier->bActive && pSoldier->stats.bLife && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) && !AM_A_ROBOT( pSoldier ) ) + 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( pSoldier ) ) { @@ -1866,17 +1869,18 @@ void RenderAutoResolve() } } 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 ); @@ -5959,9 +5963,11 @@ 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 ) { - SOLDIERTYPE *pSoldier = MercPtrs[i]; + SOLDIERTYPE *pSoldier = id; if( pSoldier->bActive && pSoldier->stats.bLife && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) && !AM_A_ROBOT( pSoldier ) ) { diff --git a/Strategic/Creature Spreading.cpp b/Strategic/Creature Spreading.cpp index 1bd1c033..e55ca1f2 100644 --- a/Strategic/Creature Spreading.cpp +++ b/Strategic/Creature Spreading.cpp @@ -1676,9 +1676,9 @@ void DetermineCreatureTownCompositionBasedOnTacticalInformation( UINT16 *pubNumC *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 ) @@ -1712,9 +1712,9 @@ void DetermineOtherCreatureTownCompositionBasedOnTacticalInformation( UINT16* pu *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() ) @@ -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 && diff --git a/Strategic/Game Init.cpp b/Strategic/Game Init.cpp index c47c0578..250cb79f 100644 --- a/Strategic/Game Init.cpp +++ b/Strategic/Game Init.cpp @@ -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 ); } diff --git a/Strategic/Hourly Update.cpp b/Strategic/Hourly Update.cpp index f6e3386e..b6b91ef9 100644 --- a/Strategic/Hourly Update.cpp +++ b/Strategic/Hourly Update.cpp @@ -361,18 +361,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 ) ) ) { @@ -484,9 +484,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 ) { @@ -612,12 +612,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 ) { @@ -647,9 +647,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 ) { @@ -664,9 +664,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 ) @@ -760,9 +760,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 @@ -794,9 +794,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 diff --git a/Strategic/LuaInitNPCs.cpp b/Strategic/LuaInitNPCs.cpp index ee32f9e8..5a0141f2 100644 --- a/Strategic/LuaInitNPCs.cpp +++ b/Strategic/LuaInitNPCs.cpp @@ -2953,17 +2953,14 @@ SOLDIERTYPE * FindSoldierByProfileID_( UINT8 ubProfileID ) SOLDIERTYPE * FindSoldierByProfileID2( UINT8 ubProfileID, BOOLEAN fPlayerMercsOnly ) { - UINT16 cnt2, ubLoopLimit; - SOLDIERTYPE * pSoldier; + SoldierID soldier = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; + SoldierID lastid = gTacticalStatus.Team[CIV_TEAM].bLastID; - ubLoopLimit = gTacticalStatus.Team[CIV_TEAM].bLastID; - - cnt2 = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; - for ( pSoldier = MercPtrs[ cnt2 ]; cnt2 <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; cnt2++ ,pSoldier++) + for ( ; soldier <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ++soldier) { - if ( pSoldier->bActive && pSoldier->bInSector ) + if ( soldier->bActive && soldier->bInSector ) { - return( pSoldier ); + return( soldier ); } } return( NULL ); @@ -5977,7 +5974,6 @@ return 0; static int l_ActionInProgress(lua_State *L) { - UINT16 cnt2; SOLDIERTYPE * pSoldier; if (lua_gettop(L) >= 2) @@ -5995,9 +5991,10 @@ static int l_ActionInProgress(lua_State *L) } else { - cnt2 = gTacticalStatus.Team[CIV_TEAM].bFirstID; - for (pSoldier = MercPtrs[cnt2]; cnt2 <= gTacticalStatus.Team[CIV_TEAM].bLastID; cnt2++, pSoldier++) + SoldierID cnt2 = gTacticalStatus.Team[CIV_TEAM].bFirstID; + for ( ; cnt2 <= gTacticalStatus.Team[CIV_TEAM].bLastID; ++cnt2) { + pSoldier = cnt2; if (pSoldier->bActive && pSoldier->bInSector && pSoldier->ubProfile == NO_PROFILE) { pSoldier->aiData.bActionInProgress = ExecuteAction(pSoldier); @@ -7623,9 +7620,9 @@ static int l_SetEnterCombatMode (lua_State *L) return 0; SOLDIERTYPE* pGoon = NULL; - for ( UINT16 ubLoop = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; ubLoop <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ubLoop++ ) + for ( SoldierID ubLoop = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; ubLoop <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ++ubLoop) { - pGoon = MercPtrs[ ubLoop ]; + pGoon = ubLoop; if ( pGoon->ubCivilianGroup == group && pGoon->bActive && pGoon->bInSector && pGoon->stats.bLife >= OKLIFE && pGoon->aiData.bOppList[ ubID ] == SEEN_CURRENTLY ) { MakeCivHostile(pGoon); diff --git a/Strategic/Map Screen Interface Map.cpp b/Strategic/Map Screen Interface Map.cpp index 41e11cda..46332334 100644 --- a/Strategic/Map Screen Interface Map.cpp +++ b/Strategic/Map Screen Interface Map.cpp @@ -6948,19 +6948,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 ) diff --git a/Strategic/Map Screen Interface.cpp b/Strategic/Map Screen Interface.cpp index 8e51fa4c..42c65f78 100644 --- a/Strategic/Map Screen Interface.cpp +++ b/Strategic/Map Screen Interface.cpp @@ -6173,7 +6173,7 @@ BOOLEAN CanCharacterMoveInStrategic( SOLDIERTYPE *pSoldier, INT8 *pbErrorNumber ( !pSoldier->flags.fBetweenSectors ) && gMercProfiles[ ELDIN ].bMercStatus != MERC_IS_DEAD ) { //DBrot: More Rooms - UINT16 /*ubRoom,*/ cnt; + SoldierID /*ubRoom,*/ cnt; UINT16 usRoom; SOLDIERTYPE * pSoldier2; @@ -6181,8 +6181,9 @@ BOOLEAN CanCharacterMoveInStrategic( SOLDIERTYPE *pSoldier, INT8 *pbErrorNumber { cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( pSoldier2 = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++,pSoldier2++) + for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt) { + pSoldier2 = cnt; if ( pSoldier2->bActive ) { if ( FindObj( pSoldier2, CHALICE ) != ITEM_NOT_FOUND ) diff --git a/Strategic/Merc Contract.cpp b/Strategic/Merc Contract.cpp index 848213e9..c8a85fdd 100644 --- a/Strategic/Merc Contract.cpp +++ b/Strategic/Merc Contract.cpp @@ -742,16 +742,12 @@ BOOLEAN WillMercRenew( SOLDIERTYPE *pSoldier, BOOLEAN fSayQuote ) void HandleBuddiesReactionToFiringMerc(SOLDIERTYPE *pFiredSoldier, INT8 bMoraleEvent ) { - UINT16 bMercID; - UINT16 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 && diff --git a/Strategic/MilitiaIndividual.cpp b/Strategic/MilitiaIndividual.cpp index d40759af..bc950bf8 100644 --- a/Strategic/MilitiaIndividual.cpp +++ b/Strategic/MilitiaIndividual.cpp @@ -282,9 +282,9 @@ 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 ) { - SOLDIERTYPE *pSoldier = MercPtrs[cnt]; + SOLDIERTYPE *pSoldier = cnt; if ( pSoldier && pSoldier->bActive && pSoldier->usIndividualMilitiaID == aMilitiaId ) { return pSoldier; @@ -300,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 ) ) { @@ -326,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 ) ) { @@ -696,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; @@ -853,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 ) ) diff --git a/Strategic/MiniEvents.cpp b/Strategic/MiniEvents.cpp index 88516ea3..21e4660e 100644 --- a/Strategic/MiniEvents.cpp +++ b/Strategic/MiniEvents.cpp @@ -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); diff --git a/Strategic/PreBattle Interface.cpp b/Strategic/PreBattle Interface.cpp index 73bb1cd8..30d8f540 100644 --- a/Strategic/PreBattle Interface.cpp +++ b/Strategic/PreBattle Interface.cpp @@ -296,7 +296,6 @@ FLOAT gAmbushRadiusModifier = 1.0f; void InitPreBattleInterface( GROUP *pBattleGroup, BOOLEAN fPersistantPBI ) { VOBJECT_DESC VObjectDesc; - INT32 i; UINT8 ubGroupID = 0; UINT16 ubNumStationaryEnemies = 0; UINT16 ubNumMobileEnemies = 0; @@ -600,9 +599,9 @@ 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 ) { - SOLDIERTYPE *pSoldier = MercPtrs[i]; + SOLDIERTYPE *pSoldier = i; if( pSoldier->bActive && pSoldier->stats.bLife && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) ) { if ( PlayerMercInvolvedInThisCombat( pSoldier ) ) @@ -889,9 +888,9 @@ 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 ) { - SOLDIERTYPE *pSoldier = MercPtrs[i]; + SOLDIERTYPE *pSoldier = i; if( pSoldier->bActive && pSoldier->stats.bLife && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) ) { if ( PlayerMercInvolvedInThisCombat( pSoldier ) && pSoldier->ubProfile != NO_PROFILE ) @@ -1577,9 +1576,9 @@ 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) { - SOLDIERTYPE *pSoldier = MercPtrs[i]; + SOLDIERTYPE *pSoldier = id; if( pSoldier->bActive && pSoldier->stats.bLife && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) ) { if( PlayerMercInvolvedInThisCombat( pSoldier ) ) @@ -1623,9 +1622,9 @@ 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 ) { - SOLDIERTYPE *pSoldier = MercPtrs[i]; + SOLDIERTYPE *pSoldier = id; if( pSoldier->bActive && pSoldier->stats.bLife && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) ) { if( !PlayerMercInvolvedInThisCombat(pSoldier) ) @@ -1816,9 +1815,9 @@ void RetreatMercsCallback( GUI_BUTTON *btn, INT32 reason ) { ///////////////////////////////////////////////////////////////////////////////// // SANDRO - merc records - times retreated counter - for( UINT16 i = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; i <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; i++ ) + for( SoldierID i = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; i <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++i ) { - SOLDIERTYPE *pSoldier = MercPtrs[i]; + SOLDIERTYPE *pSoldier = i; if ( pSoldier->bActive && pSoldier->stats.bLife >= OKLIFE ) { if ( PlayerMercInvolvedInThisCombat( pSoldier ) && pSoldier->ubProfile != NO_PROFILE ) @@ -2558,12 +2557,10 @@ 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 ) { - SOLDIERTYPE *pSoldier = 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. diff --git a/Strategic/Queen Command.cpp b/Strategic/Queen Command.cpp index 1ee6eaef..0841d470 100644 --- a/Strategic/Queen Command.cpp +++ b/Strategic/Queen Command.cpp @@ -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; @@ -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) && @@ -505,7 +506,6 @@ void GetNumberOfEnemiesInSector( INT16 sSectorX, INT16 sSectorY, UINT16 *pubNumA void EndTacticalBattleForEnemy() { GROUP *pGroup; - INT32 i; //Clear enemies in battle for all stationary groups in the sector. if( gbWorldSectorZ > 0 ) @@ -558,15 +558,15 @@ 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 ) { - SOLDIERTYPE *pSoldier = MercPtrs[i]; + 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(UINT16 j = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; j <= gTacticalStatus.Team[ CREATURE_TEAM ].bLastID; ++i ) + for( SoldierID j = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; j <= gTacticalStatus.Team[ CREATURE_TEAM ].bLastID; ++j ) { - SOLDIERTYPE *pEnemy = MercPtrs[j]; + 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 ); @@ -583,9 +583,9 @@ UINT16 NumFreeSlots( UINT8 ubTeam ) 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; } @@ -2106,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++; @@ -2123,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++; @@ -2135,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 ) ) { @@ -2969,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 ) @@ -2990,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 ) @@ -3001,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 ) @@ -3012,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 ) diff --git a/Strategic/Quests.cpp b/Strategic/Quests.cpp index c125bda6..3606eca6 100644 --- a/Strategic/Quests.cpp +++ b/Strategic/Quests.cpp @@ -394,7 +394,7 @@ BOOLEAN PCInSameRoom( UINT8 ubProfileID ) //DBrot: More Rooms //UINT8 ubRoom; UINT16 usRoom; - UINT16 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 ) { - UINT16 bLoop; 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,9 +1713,9 @@ 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 ( UINT16 i = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; i <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; i++ ) + for ( SoldierID i = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; i <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++i ) { - SOLDIERTYPE *pSoldier = MercPtrs[i]; + SOLDIERTYPE *pSoldier = i; 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 ) diff --git a/Strategic/Rebel Command.cpp b/Strategic/Rebel Command.cpp index 1688ea83..67e32bec 100644 --- a/Strategic/Rebel Command.cpp +++ b/Strategic/Rebel Command.cpp @@ -2178,9 +2178,9 @@ BOOLEAN SetupMissionAgentBox(UINT16 x, UINT16 y, INT8 index) // temp/fixme std::vector mercs; - 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) { - SOLDIERTYPE* pSoldier = MercPtrs[i]; + SOLDIERTYPE* pSoldier = i; if (pSoldier && pSoldier->bActive && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) @@ -2823,9 +2823,9 @@ void PrepareMission(INT8 index) // confirmation popup std::vector mercs; - 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) { - SOLDIERTYPE* pSoldier = MercPtrs[i]; + SOLDIERTYPE* pSoldier = i; if (pSoldier && pSoldier->bActive && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) @@ -2988,9 +2988,9 @@ void PrepareMission(INT8 index) if (!evt.sentGenericRebelAgent) { - 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) { - SOLDIERTYPE* pSoldier = MercPtrs[i]; + SOLDIERTYPE* pSoldier = i; if (pSoldier->ubProfile == evt.mercProfileId) { TakeSoldierOutOfVehicle(pSoldier); @@ -4908,9 +4908,9 @@ void HandleStrategicEvent(const UINT32 eventParam) // make sure the merc's still on our team BOOLEAN foundMerc = FALSE; - 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) { - const SOLDIERTYPE* pSoldier = MercPtrs[i]; + const SOLDIERTYPE* pSoldier = i; if (pSoldier->ubProfile == evt1.mercProfileId && pSoldier->bActive) { @@ -4979,9 +4979,9 @@ void HandleStrategicEvent(const UINT32 eventParam) if (!evt1.sentGenericRebelAgent) { - 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) { - SOLDIERTYPE* pSoldier = MercPtrs[i]; + SOLDIERTYPE* pSoldier = i; if (pSoldier->ubProfile == evt1.mercProfileId) { if (mission == RCAM_FORGE_TRANSPORT_ORDERS) @@ -5006,9 +5006,9 @@ void HandleStrategicEvent(const UINT32 eventParam) { if (!evt1.sentGenericRebelAgent && foundMerc) { - 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) { - SOLDIERTYPE* pSoldier = MercPtrs[i]; + SOLDIERTYPE* pSoldier = i; if (pSoldier->ubProfile == evt1.mercProfileId) { // mission failed! we tried, give some pity exp @@ -5028,9 +5028,9 @@ void HandleStrategicEvent(const UINT32 eventParam) if (!evt1.sentGenericRebelAgent && foundMerc) { - 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) { - SOLDIERTYPE* pSoldier = MercPtrs[i]; + SOLDIERTYPE* pSoldier = i; if (pSoldier->ubProfile == evt1.mercProfileId) { // merc ready for reassignment diff --git a/Strategic/Strategic AI.cpp b/Strategic/Strategic AI.cpp index 8fbed770..91f80588 100644 --- a/Strategic/Strategic AI.cpp +++ b/Strategic/Strategic AI.cpp @@ -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) @@ -4107,13 +4106,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; } } diff --git a/Strategic/Strategic Merc Handler.cpp b/Strategic/Strategic Merc Handler.cpp index f510e653..8f8a0790 100644 --- a/Strategic/Strategic Merc Handler.cpp +++ b/Strategic/Strategic Merc Handler.cpp @@ -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; - UINT16 bLastTeamID; + SoldierID id; + SoldierID bLastTeamID; 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; + id = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; bLastTeamID = gTacticalStatus.Team[ gbPlayerNum ].bLastID; //loop though all the mercs - for ( pSoldier = MercPtrs[ cnt ]; cnt <= bLastTeamID; ++cnt,++pSoldier) + for ( ; id <= bLastTeamID; ++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 <= bLastTeamID; ++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 ]); @@ -900,7 +900,7 @@ void MercComplainAboutEquipment( UINT8 ubProfile ) void UpdateBuddyAndHatedCounters( void ) { - UINT16 bMercID, bOtherID, bLastTeamID; + SoldierID bMercID, bOtherID, bLastTeamID; INT32 iLoop; UINT8 ubOtherProfileID; SOLDIERTYPE *pSoldier; @@ -913,8 +913,9 @@ void UpdateBuddyAndHatedCounters( void ) 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 @@ -931,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 ) @@ -1248,15 +1249,16 @@ void UpdateBuddyAndHatedCounters( void ) void HourlyCamouflageUpdate( void ) { - UINT16 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 diff --git a/Strategic/Strategic Movement.cpp b/Strategic/Strategic Movement.cpp index 8ebeaf87..09c9ff0c 100644 --- a/Strategic/Strategic Movement.cpp +++ b/Strategic/Strategic Movement.cpp @@ -5456,9 +5456,9 @@ 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 ) { - SOLDIERTYPE *pSoldier = MercPtrs[i]; + SOLDIERTYPE *pSoldier = i; if( pSoldier->bActive && pSoldier->stats.bLife && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) ) { 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 ) @@ -5939,12 +5939,10 @@ 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 ) { - SOLDIERTYPE *pSoldier = MercPtrs[i]; + SOLDIERTYPE *pSoldier = i; if( pSoldier->bActive && pSoldier->stats.bLife >= OKLIFE && pSoldier->sSectorX == ubSectorNumX && @@ -5982,9 +5980,9 @@ 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 ) { - SOLDIERTYPE *pSoldier = MercPtrs[i]; + SOLDIERTYPE *pSoldier = i; if ( pSoldier->bActive && pSoldier->stats.bLife >= OKLIFE && SPY_LOCATION( pSoldier->bAssignment ) ) { if ( pSoldier->sSectorX == ubSectorNumX && pSoldier->sSectorY == ubSectorNumY && pSoldier->bSectorZ == 10 ) diff --git a/Strategic/Strategic Town Loyalty.cpp b/Strategic/Strategic Town Loyalty.cpp index 44fc5f1f..e9fdea1b 100644 --- a/Strategic/Strategic Town Loyalty.cpp +++ b/Strategic/Strategic Town Loyalty.cpp @@ -679,7 +679,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; @@ -789,10 +788,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 ) { @@ -2129,13 +2128,12 @@ BOOLEAN DidFirstBattleTakePlaceInThisTown( INT8 bTownId ) UINT32 PlayerStrength( void ) { - UINT16 ubLoop; - SOLDIERTYPE * pSoldier; + 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)) ) @@ -2151,13 +2149,12 @@ UINT32 PlayerStrength( void ) UINT32 EnemyStrength( void ) { - UINT16 ubLoop; 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 diff --git a/Strategic/Strategic Transport Groups.cpp b/Strategic/Strategic Transport Groups.cpp index 5cc85f3d..e385d6b5 100644 --- a/Strategic/Strategic Transport Groups.cpp +++ b/Strategic/Strategic Transport Groups.cpp @@ -222,9 +222,9 @@ void FillMapColoursForTransportGroups(INT32(&colorMap)[MAXIMUM_VALID_Y_COORDINAT // build map of detection sectors + ranges std::map, INT8> detectionMap; std::map 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 ) { - SOLDIERTYPE *pSoldier = MercPtrs[i]; + SOLDIERTYPE *pSoldier = i; if( pSoldier->bActive && pSoldier->stats.bLife >= OKLIFE && @@ -448,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 @@ -481,9 +481,9 @@ void UpdateTransportGroupInventory() { // let's be nice to the player and only drop ammo for guns their mercs have in inventory std::set 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) { - SOLDIERTYPE *pSoldier = MercPtrs[i]; + SOLDIERTYPE *pSoldier = i; if (pSoldier->bActive && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE)) { for (int j = 0 ; j < pSoldier->inv.size(); ++j) @@ -602,9 +602,9 @@ void UpdateTransportGroupInventory() // cache the initial jeep count of every group we find std::map 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>::iterator groupIter = transportGroupIdToSoldierMap.find(pSoldier->ubGroupID); if (groupIter != transportGroupIdToSoldierMap.end()) diff --git a/Strategic/mapscreen.cpp b/Strategic/mapscreen.cpp index 0f563116..d283a09a 100644 --- a/Strategic/mapscreen.cpp +++ b/Strategic/mapscreen.cpp @@ -12864,12 +12864,12 @@ void ReBuildCharactersList( void ) gCharactersList[ sCount ].usSolID = NOBODY; } - // fills array with pressence of player controlled characters - for ( INT32 cnt=gTacticalStatus.Team[ OUR_TEAM ].bFirstID; cnt <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; cnt++) + // fills array with presence of player controlled characters + for ( SoldierID soldier = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; soldier <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++soldier ) { - if(Menptr[ cnt ].bActive == 1) + if( soldier->bActive ) { - AddCharacter( &Menptr[ cnt ] ); + AddCharacter( soldier ); } } @@ -16029,19 +16029,15 @@ void MakeMapModesSuitableForDestPlotting( INT8 bCharNumber ) BOOLEAN AnyMovableCharsInOrBetweenThisSector( 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; + SoldierID id = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; + SoldierID iLastId = gTacticalStatus.Team[ OUR_TEAM ].bLastID; - for( iCounter = iFirstId; iCounter <= iLastId; iCounter++ ) + for( ; id <= iLastId; ++id) { // get the soldier - pSoldier = &Menptr[ iCounter ]; + pSoldier = id; // is the soldier active if( pSoldier->bActive == FALSE ) @@ -17629,12 +17625,11 @@ BOOLEAN CanGiveStrategicMilitiaMoveOrder( INT16 sMapX, INT16 sMapY ) // 3. they are a radio operator in an adjacent sector // 4. they are a radio operator in a sector adjacent to the militia's town // 5. they are a radio operator in a town adjacent to the militia's sector - SOLDIERTYPE *pSoldier = NULL; - UINT32 uiCnt = 0; - UINT32 firstid = gTacticalStatus.Team[OUR_TEAM].bFirstID; - UINT32 lastid = gTacticalStatus.Team[OUR_TEAM].bLastID; - for ( uiCnt = firstid, pSoldier = MercPtrs[uiCnt]; uiCnt <= lastid; ++uiCnt, ++pSoldier ) + SoldierID id = gTacticalStatus.Team[OUR_TEAM].bFirstID; + SoldierID lastid = gTacticalStatus.Team[OUR_TEAM].bLastID; + for ( ; id <= lastid; ++id) { + SOLDIERTYPE *pSoldier = id; if ( pSoldier && pSoldier->bActive && pSoldier->stats.bLife >= OKLIFE ) { BOOLEAN fRadioOperator = pSoldier->CanUseRadio( FALSE ); diff --git a/Strategic/strategic.cpp b/Strategic/strategic.cpp index 09513662..a4f662fe 100644 --- a/Strategic/strategic.cpp +++ b/Strategic/strategic.cpp @@ -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 ); diff --git a/Strategic/strategicmap.cpp b/Strategic/strategicmap.cpp index ff7e2edc..191fb0ad 100644 --- a/Strategic/strategicmap.cpp +++ b/Strategic/strategicmap.cpp @@ -2429,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( ); @@ -2698,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; - UINT16 cnt; SOLDIERTYPE * pSoldier; // are we in a mine sector, on the surface? @@ -2783,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 ); } @@ -2951,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]; @@ -2968,9 +2966,9 @@ 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 ) { - SOLDIERTYPE *pSoldier = MercPtrs[i]; + SOLDIERTYPE *pSoldier = i; if ( pSoldier->bActive && pSoldier->bInSector ) { SetupProfileInsertionDataForSoldier( pSoldier ); @@ -3099,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; @@ -3129,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 ) @@ -3954,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; @@ -3972,11 +3969,12 @@ void JumpIntoAdjacentSector( UINT8 ubTacticalDirection, UINT8 ubJumpCode, INT32 { // 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( ) ) { @@ -4214,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) { @@ -4833,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; @@ -4876,11 +4874,12 @@ BOOLEAN OKForSectorExit( INT8 bExitDirection, INT32 usAdditionalData, UINT32 *pu 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( ))) ) @@ -5157,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 @@ -5170,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 ) && @@ -6430,8 +6430,6 @@ BOOLEAN IsSectorRoad( INT16 sSectorX, INT16 sSectorY ) BOOLEAN HandleDefiniteUnloadingOfWorld( UINT8 ubUnloadCode ) { - INT32 i; - // clear tactical queue ClearEventQueue( ); @@ -6493,9 +6491,9 @@ 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 ) { - SOLDIERTYPE *pSoldier = MercPtrs[i]; + SOLDIERTYPE *pSoldier = i; if ( pSoldier->bActive && pSoldier->bInSector ) { SetupProfileInsertionDataForSoldier( pSoldier ); @@ -6514,18 +6512,18 @@ 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 ) { - SOLDIERTYPE *pEnemy = MercPtrs[i]; + SOLDIERTYPE *pEnemy = i; if ( pEnemy->bActive && pEnemy->stats.bLife ) { 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 ) { - SOLDIERTYPE *pMilitia = MercPtrs[i]; + SOLDIERTYPE *pMilitia = j; if ( pMilitia->bActive && pMilitia->stats.bLife && pMilitia->bSide == OUR_TEAM ) { if ( pMilitia->sSectorX == pSectorX && @@ -6567,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. @@ -6592,9 +6589,9 @@ 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 - SOLDIERTYPE *pSoldier = 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 ( pSoldier->sSectorX == gWorldSectorX && @@ -6610,9 +6607,9 @@ 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 - SOLDIERTYPE *pSoldier = 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 ( pSoldier->sSectorX == gWorldSectorX && diff --git a/Tactical/Air Raid.cpp b/Tactical/Air Raid.cpp index 5066e3e0..e498c89b 100644 --- a/Tactical/Air Raid.cpp +++ b/Tactical/Air Raid.cpp @@ -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 ) { @@ -309,18 +309,18 @@ INT32 PickLocationNearAnyMercInSector( ) 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 ) ) @@ -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 ) { @@ -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; diff --git a/Tactical/Boxing.cpp b/Tactical/Boxing.cpp index b48a4447..d667d93f 100644 --- a/Tactical/Boxing.cpp +++ b/Tactical/Boxing.cpp @@ -478,8 +478,6 @@ BOOLEAN AnotherFightPossible( void ) // a player has at least OKLIFE + 5 life // and at least one fight HAS occurred - UINT16 ubLoop; - SOLDIERTYPE * pSoldier; 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 ) { diff --git a/Tactical/Campaign.cpp b/Tactical/Campaign.cpp index 9fa4b48e..a488fda3 100644 --- a/Tactical/Campaign.cpp +++ b/Tactical/Campaign.cpp @@ -1836,13 +1836,9 @@ void TestDumpStatChanges(void) void AwardExperienceBonusToActiveSquad( UINT8 ubExpBonusType ) { - UINT16 usXPs = 0; - UINT16 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 ) ) diff --git a/Tactical/Dialogue Control.cpp b/Tactical/Dialogue Control.cpp index e6b12677..0534fb05 100644 --- a/Tactical/Dialogue Control.cpp +++ b/Tactical/Dialogue Control.cpp @@ -1759,9 +1759,10 @@ void AdditionalTacticalCharacterDialogue_AllInSector(INT16 aSectorX, INT16 aSect UINT16 usEventNr, UINT32 aData1, UINT32 aData2, UINT32 aData3, INT32 aAroundGridno, INT32 aRadius ) { SOLDIERTYPE* pSoldier; - int cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID; - for ( 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; if ( pSoldier->stats.bLife >= OKLIFE && pSoldier->bActive && pSoldier->ubProfile != ausIgnoreProfile && pSoldier->sSectorX == aSectorX && pSoldier->sSectorY == aSectorY && pSoldier->bSectorZ == aSectorZ && @@ -3122,10 +3123,10 @@ void HandleDialogueEnd( FACETYPE *pFace ) break; default: // select random enemy, who we see, who sees us and isn't deaf - for(UINT16 cnt = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; cnt <= gTacticalStatus.Team[ ENEMY_TEAM ].bLastID ; cnt++ ) + for( SoldierID cnt = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; cnt <= gTacticalStatus.Team[ ENEMY_TEAM ].bLastID ; ++cnt ) { - if( MercPtrs[cnt] != NULL && MercPtrs[cnt]->aiData.bOppList[pSoldier->ubID] == SEEN_CURRENTLY - && MercPtrs[pSoldier->ubID]->aiData.bOppList[cnt] == SEEN_CURRENTLY && !( MercPtrs[cnt]->bDeafenedCounter > 0 ) ) + if( cnt->aiData.bOppList[pSoldier->ubID] == SEEN_CURRENTLY + && pSoldier->ubID->aiData.bOppList[cnt] == SEEN_CURRENTLY && !( cnt->bDeafenedCounter > 0 ) ) { ubSeenEnemies[ubSeenEnemiesCnt] = cnt; ubSeenEnemiesCnt++; @@ -3297,16 +3298,16 @@ void SayQuoteFromAnyBodyInSector( UINT16 usQuoteNum ) UINT16 ubNumMercs = 0; UINT16 ubChosenMerc; SOLDIERTYPE *pTeamSoldier; - INT32 cnt; // Loop through all our guys and randomly say one from someone in our sector // set up soldier ptr as first element in mercptrs list - cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; + SoldierID id = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; // run through list - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++,pTeamSoldier++ ) + for ( ; id <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++id ) { + pTeamSoldier = id; // Add guy if he's a candidate... if ( OK_INSECTOR_MERC( pTeamSoldier ) && !AM_AN_EPC( pTeamSoldier ) && !( pTeamSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) && !(AM_A_ROBOT( pTeamSoldier )) && !pTeamSoldier->flags.fMercAsleep ) { @@ -3329,7 +3330,7 @@ void SayQuoteFromAnyBodyInSector( UINT16 usQuoteNum ) #endif } - ubMercsInSector[ ubNumMercs ] = (UINT16)cnt; + ubMercsInSector[ ubNumMercs ] = (UINT16)id; ubNumMercs++; } } @@ -3342,7 +3343,7 @@ void SayQuoteFromAnyBodyInSector( UINT16 usQuoteNum ) // If we are air raid, AND red exists somewhere... if ( usQuoteNum == QUOTE_AIR_RAID ) { - for ( cnt = 0; cnt < ubNumMercs; cnt++ ) + for ( UINT16 cnt = 0; cnt < ubNumMercs; cnt++ ) { if ( ubMercsInSector[ cnt ] == 11 ) { @@ -3366,16 +3367,16 @@ void SayQuoteFromAnyBodyInThisSector( INT16 sSectorX, INT16 sSectorY, INT8 bSect UINT16 ubNumMercs = 0; UINT16 ubChosenMerc; SOLDIERTYPE *pTeamSoldier; - INT32 cnt; // Loop through all our guys and randomly say one from someone in our sector // set up soldier ptr as first element in mercptrs list - cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; + SoldierID cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; // run through list - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++,pTeamSoldier++ ) + for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt ) { + pTeamSoldier = cnt; if ( pTeamSoldier->bActive ) { // Add guy if he's a candidate... @@ -3419,16 +3420,16 @@ void SayQuoteFromNearbyMercInSector( INT32 sGridNo, INT8 bDistance, UINT16 usQuo UINT16 ubNumMercs = 0; UINT16 ubChosenMerc; SOLDIERTYPE *pTeamSoldier; - INT32 cnt; // Loop through all our guys and randomly say one from someone in our sector // set up soldier ptr as first element in mercptrs list - cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; + SoldierID cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; // run through list - 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... if ( OK_INSECTOR_MERC( pTeamSoldier ) && PythSpacesAway( sGridNo, pTeamSoldier->sGridNo ) < bDistance && !AM_AN_EPC( pTeamSoldier ) && !( pTeamSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) && !(AM_A_ROBOT( pTeamSoldier )) && !pTeamSoldier->flags.fMercAsleep && SoldierTo3DLocationLineOfSightTest( pTeamSoldier, sGridNo, 0, 0, TRUE ) ) @@ -3464,14 +3465,15 @@ void SayQuote58FromNearbyMercInSector( INT32 sGridNo, INT8 bDistance, UINT16 usQ UINT16 ubNumMercs = 0; UINT16 ubChosenMerc; SOLDIERTYPE *pTeamSoldier; - INT32 cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID; + SoldierID cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID; // Loop through all our guys and randomly say one from someone in our sector // set up soldier ptr as first element in mercptrs list // run through list - 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... if ( OK_INSECTOR_MERC( pTeamSoldier ) && PythSpacesAway( sGridNo, pTeamSoldier->sGridNo ) < bDistance && !AM_AN_EPC( pTeamSoldier ) && !( pTeamSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) && !(AM_A_ROBOT( pTeamSoldier )) && !pTeamSoldier->flags.fMercAsleep && SoldierTo3DLocationLineOfSightTest( pTeamSoldier, sGridNo, 0, 0, TRUE ) ) diff --git a/Tactical/DisplayCover.cpp b/Tactical/DisplayCover.cpp index 40f674f1..852375d0 100644 --- a/Tactical/DisplayCover.cpp +++ b/Tactical/DisplayCover.cpp @@ -711,9 +711,10 @@ void CalculateCover() if (gTacticalStatus.fAtLeastOneGuyOnMultiSelect) // view of selected mercs { // OK, loop through all guys who are 'multi-selected' and - INT32 cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID; - for (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; if (pSoldier->bActive && pSoldier->bInSector) { if (pSoldier->flags.uiStatusFlags & SOLDIER_MULTI_SELECTED) diff --git a/Tactical/Drugs And Alcohol.cpp b/Tactical/Drugs And Alcohol.cpp index 60a38884..db33d4ae 100644 --- a/Tactical/Drugs And Alcohol.cpp +++ b/Tactical/Drugs And Alcohol.cpp @@ -407,16 +407,16 @@ BOOLEAN MercDrugged( SOLDIERTYPE *pSoldier ) void HourlyDrugUpdate( ) { - for ( UINT16 ubID = gTacticalStatus.Team[OUR_TEAM].bFirstID; ubID <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++ubID ) + for ( SoldierID ubID = gTacticalStatus.Team[OUR_TEAM].bFirstID; ubID <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++ubID ) { // every hour, we lower our alcohol counter - if ( MercPtrs[ubID]->newdrugs.drinkstaken > 0.0f ) + if ( ubID->newdrugs.drinkstaken > 0.0f ) { - MercPtrs[ubID]->newdrugs.drinkstaken = max( 0.0, MercPtrs[ubID]->newdrugs.drinkstaken - 0.15f ); + ubID->newdrugs.drinkstaken = max( 0.0, ubID->newdrugs.drinkstaken - 0.15f ); - if ( MercPtrs[ubID]->newdrugs.drinkstaken <= 0.0f ) + if ( ubID->newdrugs.drinkstaken <= 0.0f ) { - MercPtrs[ubID]->usSoldierFlagMask2 &= ~SOLDIER_HUNGOVER; + ubID->usSoldierFlagMask2 &= ~SOLDIER_HUNGOVER; } } } diff --git a/Tactical/DynamicDialogue.cpp b/Tactical/DynamicDialogue.cpp index 6b197ae3..62af182d 100644 --- a/Tactical/DynamicDialogue.cpp +++ b/Tactical/DynamicDialogue.cpp @@ -1632,11 +1632,11 @@ void HandleDynamicOpinionsDailyRefresh( ) RolloverDynamicOpinions( usProfileA ); } - SOLDIERTYPE* pSoldier = NULL; - UINT16 bMercID = gTacticalStatus.Team[gbPlayerNum].bFirstID; - UINT16 bLastTeamID = gTacticalStatus.Team[gbPlayerNum].bLastID; - for ( pSoldier = MercPtrs[bMercID]; bMercID <= bLastTeamID; ++bMercID, pSoldier++ ) + SoldierID bMercID = gTacticalStatus.Team[gbPlayerNum].bFirstID; + SoldierID bLastTeamID = gTacticalStatus.Team[gbPlayerNum].bLastID; + for ( ; bMercID <= bLastTeamID; ++bMercID ) { + SOLDIERTYPE* pSoldier = bMercID; if ( pSoldier->bActive && pSoldier->ubProfile != NO_PROFILE && !(pSoldier->bAssignment == IN_TRANSIT || AM_A_ROBOT(pSoldier) || pSoldier->bAssignment == ASSIGNMENT_DEAD) ) @@ -1672,11 +1672,11 @@ void RolloverDynamicOpinions( UINT8 usProfileA ) // check wether other people are friends with someone else we hate. All persons must be in Arulco void CheckForFriendsofHated( SOLDIERTYPE* pSoldier ) { - UINT16 bMercID, bOtherID, bThirdID, bLastTeamID; - INT8 bOpinion = -1; - INT8 bSecondOpinion = -1; - SOLDIERTYPE* pOtherSoldier; - SOLDIERTYPE* pThirdSoldier; + SoldierID bMercID, bOtherID, bThirdID, bLastTeamID; + INT8 bOpinion = -1; + INT8 bSecondOpinion = -1; + SOLDIERTYPE *pOtherSoldier; + SOLDIERTYPE *pThirdSoldier; // make sure we ourselves aren't in transit if ( !pSoldier->bActive || pSoldier->ubProfile == NO_PROFILE || AM_A_ROBOT(pSoldier) || pSoldier->bAssignment == IN_TRANSIT || pSoldier->bAssignment == ASSIGNMENT_DEAD ) @@ -1687,8 +1687,9 @@ void CheckForFriendsofHated( SOLDIERTYPE* pSoldier ) // loop through all other mercs bOtherID = gTacticalStatus.Team[gbPlayerNum].bFirstID; - for ( pOtherSoldier = MercPtrs[bOtherID]; bOtherID <= bLastTeamID; ++bOtherID, pOtherSoldier++ ) + for ( ; bOtherID <= bLastTeamID; ++bOtherID ) { + pOtherSoldier = bOtherID; // skip past ourselves and all inactive mercs if ( bOtherID != bMercID && pOtherSoldier->bActive && pOtherSoldier->ubProfile != NO_PROFILE && !(pOtherSoldier->bAssignment == IN_TRANSIT || @@ -1702,8 +1703,9 @@ void CheckForFriendsofHated( SOLDIERTYPE* pSoldier ) // there is someone in our team that we hate. We dislike his friends somewhat, purely because they like our foe // loop through all other mercs bThirdID = gTacticalStatus.Team[gbPlayerNum].bFirstID; - for ( pThirdSoldier = MercPtrs[bThirdID]; bThirdID <= bLastTeamID; ++bThirdID, pThirdSoldier++ ) + for ( ; bThirdID <= bLastTeamID; ++bThirdID ) { + pThirdSoldier = bThirdID; // skip past ourselves and all inactive mercs if ( bThirdID != bMercID && bThirdID != bOtherID && pThirdSoldier->bActive && pThirdSoldier->ubProfile != NO_PROFILE && !(pThirdSoldier->bAssignment == IN_TRANSIT || @@ -1843,11 +1845,11 @@ void HandleDynamicOpinionTeamDrinking( SOLDIERTYPE* pSoldier ) if ( !pSoldier || pSoldier->ubProfile == NO_PROFILE || AM_A_ROBOT(pSoldier) || pSoldier->newdrugs.drinkstaken <= 0.0 ) return; - SOLDIERTYPE* pTeamSoldier = NULL; - UINT16 bMercID = gTacticalStatus.Team[gbPlayerNum].bFirstID; - UINT16 bLastTeamID = gTacticalStatus.Team[gbPlayerNum].bLastID; - for ( pTeamSoldier = MercPtrs[bMercID]; bMercID <= bLastTeamID; ++bMercID, pTeamSoldier++ ) + SoldierID bMercID = gTacticalStatus.Team[gbPlayerNum].bFirstID; + SoldierID bLastTeamID = gTacticalStatus.Team[gbPlayerNum].bLastID; + for ( ; bMercID <= bLastTeamID; ++bMercID) { + SOLDIERTYPE* pTeamSoldier = bMercID; // everybody other merc in the same sector can get updated if they are drugged too if ( pTeamSoldier->bActive && pTeamSoldier->ubProfile != NO_PROFILE && pTeamSoldier->ubProfile != pSoldier->ubProfile && pTeamSoldier->sSectorX == pSoldier->sSectorX && pTeamSoldier->sSectorY == pSoldier->sSectorY && pTeamSoldier->bSectorZ == pSoldier->bSectorZ && @@ -1902,11 +1904,11 @@ void HandleDynamicOpinionTeaching( SOLDIERTYPE* pSoldier, UINT8 ubStat ) break; } - SOLDIERTYPE* pTeamSoldier = NULL; - UINT16 bMercID = gTacticalStatus.Team[gbPlayerNum].bFirstID; - UINT16 bLastTeamID = gTacticalStatus.Team[gbPlayerNum].bLastID; - for ( pTeamSoldier = MercPtrs[bMercID]; bMercID <= bLastTeamID; ++bMercID, pTeamSoldier++ ) + SoldierID bMercID = gTacticalStatus.Team[gbPlayerNum].bFirstID; + SoldierID bLastTeamID = gTacticalStatus.Team[gbPlayerNum].bLastID; + for ( ; bMercID <= bLastTeamID; ++bMercID) { + SOLDIERTYPE* pTeamSoldier = bMercID; // award event for every trainer in this sector if ( pTeamSoldier->bActive && pTeamSoldier->ubProfile != NO_PROFILE && pTeamSoldier->ubProfile != pSoldier->ubProfile && pTeamSoldier->sSectorX == pSoldier->sSectorX && pTeamSoldier->sSectorY == pSoldier->sSectorY && pTeamSoldier->bSectorZ == pSoldier->bSectorZ && @@ -1939,16 +1941,16 @@ UINT32 GetSoldierLeaderRating( SOLDIERTYPE* pSoldier ) } -UINT16 GetBestMercLeaderInSector( INT16 sX, INT16 sY, INT8 sZ ) +SoldierID GetBestMercLeaderInSector( INT16 sX, INT16 sY, INT8 sZ ) { - UINT32 highestrating = 0; - UINT16 bestid = NOBODY; + UINT32 highestrating = 0; + SoldierID bestid = NOBODY; + SoldierID bMercID = gTacticalStatus.Team[gbPlayerNum].bFirstID; + SoldierID bLastTeamID = gTacticalStatus.Team[gbPlayerNum].bLastID; - SOLDIERTYPE* pSoldier = NULL; - UINT16 bMercID = gTacticalStatus.Team[gbPlayerNum].bFirstID; - UINT16 bLastTeamID = gTacticalStatus.Team[gbPlayerNum].bLastID; - for ( pSoldier = MercPtrs[bMercID]; bMercID <= bLastTeamID; ++bMercID, ++pSoldier ) + for ( ; bMercID <= bLastTeamID; ++bMercID ) { + SOLDIERTYPE* pSoldier = bMercID; // everybody other merc in the same sector gets annoyed if ( pSoldier->bActive && pSoldier->ubProfile != NO_PROFILE && pSoldier->sSectorX == sX && pSoldier->sSectorY == sY && pSoldier->bSectorZ == sZ && @@ -1971,10 +1973,11 @@ UINT8 GetRandomMercInSectorNotInList( INT16 sX, INT16 sY, INT8 sZ, std::vector resultvector; SOLDIERTYPE* pTeamSoldier = NULL; - UINT16 bMercID = gTacticalStatus.Team[gbPlayerNum].bFirstID; - UINT16 bLastTeamID = gTacticalStatus.Team[gbPlayerNum].bLastID; - for ( pTeamSoldier = MercPtrs[bMercID]; bMercID <= bLastTeamID; ++bMercID, ++pTeamSoldier ) + SoldierID bMercID = gTacticalStatus.Team[gbPlayerNum].bFirstID; + SoldierID bLastTeamID = gTacticalStatus.Team[gbPlayerNum].bLastID; + for ( ; bMercID <= bLastTeamID; ++bMercID ) { + pTeamSoldier = bMercID; // everybody other merc in the same sector gets annoyed if ( pTeamSoldier->bActive && pTeamSoldier->ubProfile != NO_PROFILE && pTeamSoldier->sSectorX == sX && pTeamSoldier->sSectorY == sY && pTeamSoldier->bSectorZ == sZ && @@ -2017,10 +2020,11 @@ UINT8 GetFittingInterjectorProfile( UINT8 usEvent, UINT8 usProfileVictim, UINT8 std::vector profilevector; SOLDIERTYPE* pTeamSoldier = NULL; - UINT16 bMercID = gTacticalStatus.Team[pSoldierVictim->bTeam].bFirstID; - UINT16 bLastTeamID = gTacticalStatus.Team[pSoldierVictim->bTeam].bLastID; - for ( pTeamSoldier = MercPtrs[bMercID]; bMercID <= bLastTeamID; ++bMercID, pTeamSoldier++ ) + SoldierID bMercID = gTacticalStatus.Team[pSoldierVictim->bTeam].bFirstID; + SoldierID bLastTeamID = gTacticalStatus.Team[pSoldierVictim->bTeam].bLastID; + for ( ; bMercID <= bLastTeamID; ++bMercID ) { + pTeamSoldier = bMercID; // only people that are here if ( !pTeamSoldier->bActive || pTeamSoldier->bAssignment == IN_TRANSIT || pTeamSoldier->bAssignment == ASSIGNMENT_DEAD || pTeamSoldier->bAssignment == ASSIGNMENT_POW || pTeamSoldier->bAssignment == ASSIGNMENT_MINIEVENT || pTeamSoldier->bAssignment == ASSIGNMENT_REBELCOMMAND ) continue; @@ -2156,10 +2160,11 @@ void HandleDynamicOpinionChange( SOLDIERTYPE* pSoldier, UINT8 usEvent, BOOLEAN f UINT8 usEventUsed; // it is possible that the individual event is switched SOLDIERTYPE* pTeamSoldier = NULL; - UINT16 bMercID = gTacticalStatus.Team[gbPlayerNum].bFirstID; - UINT16 bLastTeamID = gTacticalStatus.Team[gbPlayerNum].bLastID; - for ( pTeamSoldier = MercPtrs[bMercID]; bMercID <= bLastTeamID; ++bMercID, pTeamSoldier++ ) + 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->ubProfile != NO_PROFILE && pTeamSoldier->ubProfile != pSoldier->ubProfile && diff --git a/Tactical/DynamicDialogue.h b/Tactical/DynamicDialogue.h index 262fde2b..92896a50 100644 --- a/Tactical/DynamicDialogue.h +++ b/Tactical/DynamicDialogue.h @@ -480,7 +480,7 @@ void HandleDynamicOpinionTeaching( SOLDIERTYPE* pSoldier, UINT8 ubStat ); // some events require a 'leader' - merc the team will regard as the one being in charge, and subsequently being praised or damned for the way things develop UINT32 GetSoldierLeaderRating( SOLDIERTYPE* pSoldier ); -UINT16 GetBestMercLeaderInSector( INT16 sX, INT16 sY, INT8 sZ ); +SoldierID GetBestMercLeaderInSector( INT16 sX, INT16 sY, INT8 sZ ); // get id of a random merc in a sector, provided one exists UINT8 GetRandomMercInSectorNotInList( INT16 sX, INT16 sY, INT8 sZ, std::vector aTaboo, BOOLEAN fImpOnly ); diff --git a/Tactical/End Game.cpp b/Tactical/End Game.cpp index 795ec9cc..919ed80b 100644 --- a/Tactical/End Game.cpp +++ b/Tactical/End Game.cpp @@ -240,15 +240,16 @@ void DoneFadeInKilledQueen( void ) void DoneFadeOutKilledQueen( void ) { - INT32 cnt; + SoldierID cnt; SOLDIERTYPE *pSoldier, *pTeamSoldier; // For one, loop through our current squad and move them over 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; // Are we in this sector, On the current squad? if ( pSoldier->bActive && pSoldier->stats.bLife >= OKLIFE && pSoldier->bInSector && pSoldier->bAssignment == CurrentSquad( ) ) { @@ -272,8 +273,9 @@ void DoneFadeOutKilledQueen( void ) cnt = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; // look for all mercs on the same team, - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ ENEMY_TEAM ].bLastID; cnt++,pTeamSoldier++) + for ( ; cnt <= gTacticalStatus.Team[ ENEMY_TEAM ].bLastID; ++cnt ) { + pSoldier = cnt; // Are we active and in sector..... if ( pTeamSoldier->bActive ) { @@ -350,7 +352,7 @@ void HandleDoneLastKilledQueenQuote( ) void EndQueenDeathEndgameBeginEndCimenatic( ) { - INT32 cnt; + SoldierID cnt; SOLDIERTYPE *pSoldier; // Start end cimimatic.... @@ -360,8 +362,9 @@ void EndQueenDeathEndgameBeginEndCimenatic( ) 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; // Are we in this sector, On the current squad? if ( pSoldier->bActive && pSoldier->stats.bLife >= OKLIFE && !AM_AN_EPC( pSoldier ) ) { @@ -633,7 +636,7 @@ void FadeOutToLaptopOnEndGame( void ) void BeginHandleQueenBitchDeath( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, INT8 bLevel ) { SOLDIERTYPE *pTeamSoldier; - INT32 cnt; + SoldierID cnt; gpKillerSoldier = pKillerSoldier; @@ -654,8 +657,9 @@ void BeginHandleQueenBitchDeath( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, INT cnt = gTacticalStatus.Team[ CREATURE_TEAM ].bFirstID; // look for all mercs on the same team, - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ CREATURE_TEAM ].bLastID; cnt++,pTeamSoldier++) + for ( ; cnt <= gTacticalStatus.Team[ CREATURE_TEAM ].bLastID; ++cnt ) { + pTeamSoldier = cnt; // Are we active and ALIVE and in sector..... if ( pTeamSoldier->bActive && pTeamSoldier->stats.bLife > 0 ) { @@ -679,8 +683,7 @@ void BeginHandleQueenBitchDeath( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, INT void HandleQueenBitchDeath( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, INT8 bLevel ) { SOLDIERTYPE *pTeamSoldier; - INT32 cnt; - UINT16 ubKillerSoldierID = NOBODY; + SoldierID ubKillerSoldierID = NOBODY; // Start victory music here... SetMusicMode( MUSIC_TACTICAL_VICTORY ); @@ -693,13 +696,14 @@ void HandleQueenBitchDeath( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, INT8 bLe // STEP 1 ) START ALL QUOTES GOING! // OK - loop through all witnesses and see if they want to say something abou this... - cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; + SoldierID cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; // run through list - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++,pTeamSoldier++ ) + for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt ) { if ( cnt != ubKillerSoldierID ) { + pTeamSoldier = cnt; if ( OK_INSECTOR_MERC( pTeamSoldier ) && !( pTeamSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) && !AM_AN_EPC( pTeamSoldier ) ) { if ( QuoteExp[ pTeamSoldier->ubProfile ].QuoteExpWitnessQueenBugDeath ) diff --git a/Tactical/Enemy Soldier Save.cpp b/Tactical/Enemy Soldier Save.cpp index 2fdfa34f..2874685d 100644 --- a/Tactical/Enemy Soldier Save.cpp +++ b/Tactical/Enemy Soldier Save.cpp @@ -1395,7 +1395,6 @@ BOOLEAN NewWayOfSavingEnemyAndCivliansToTempFile( INT16 sSectorX, INT16 sSectorY { SOLDIERINITNODE *curr; SOLDIERTYPE *pSoldier; - INT32 i; INT32 slots = 0; UINT32 uiNumBytesWritten; UINT32 uiTimeStamp; @@ -1428,9 +1427,9 @@ BOOLEAN NewWayOfSavingEnemyAndCivliansToTempFile( INT16 sSectorX, INT16 sSectorY //STEP ONE: Prep the soldiers for saving... //modify the map's soldier init list to reflect the changes to the members still alive... - for( i = gTacticalStatus.Team[ ubStartID ].bFirstID; i <= gTacticalStatus.Team[ ubEndID ].bLastID; i++ ) + for( SoldierID i = gTacticalStatus.Team[ ubStartID ].bFirstID; i <= gTacticalStatus.Team[ ubEndID ].bLastID; ++i ) { - pSoldier = MercPtrs[ i ]; + pSoldier = i; //make sure the person is active, alive, in the sector, and is not a profiled person if( pSoldier && pSoldier->bActive /*&& pSoldier->bInSector*/ && pSoldier->stats.bLife && pSoldier->ubProfile == NO_PROFILE ) @@ -1584,9 +1583,9 @@ BOOLEAN NewWayOfSavingEnemyAndCivliansToTempFile( INT16 sSectorX, INT16 sSectorY return TRUE; } - for( i = gTacticalStatus.Team[ ubStartID ].bFirstID; i <= gTacticalStatus.Team[ ubEndID ].bLastID; i++ ) + for( SoldierID i = gTacticalStatus.Team[ ubStartID ].bFirstID; i <= gTacticalStatus.Team[ ubEndID ].bLastID; ++i ) { - pSoldier = MercPtrs[ i ]; + pSoldier = i; // CJC: note that bInSector is not required; the civ could be offmap! if( pSoldier->bActive /*&& pSoldier->bInSector*/ && pSoldier->stats.bLife ) { diff --git a/Tactical/Food.cpp b/Tactical/Food.cpp index 02d36567..709510f4 100644 --- a/Tactical/Food.cpp +++ b/Tactical/Food.cpp @@ -763,15 +763,16 @@ void EatFromInventory( SOLDIERTYPE *pSoldier, BOOLEAN fcanteensonly ) void HourlyFoodUpdate( void ) { - UINT16 bMercID, bLastTeamID; + SoldierID bMercID, bLastTeamID; SOLDIERTYPE * pSoldier = NULL; bMercID = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; bLastTeamID = gTacticalStatus.Team[ gbPlayerNum ].bLastID; // loop through all mercs to calculate their morale - for ( pSoldier = MercPtrs[ bMercID ]; bMercID <= bLastTeamID; ++bMercID, ++pSoldier) + for ( ; bMercID <= bLastTeamID; ++bMercID ) { + pSoldier = bMercID; //if the merc is active, and in Arulco if ( pSoldier && pSoldier->bActive && !AM_AN_EPC(pSoldier) && pSoldier->ubProfile != ROBOT && !IsVehicle(pSoldier) && !(pSoldier->bAssignment == IN_TRANSIT || pSoldier->bAssignment == ASSIGNMENT_DEAD ) ) { @@ -829,15 +830,16 @@ void SectorFillCanteens( void ) addtemperature = FOOD_WATER_POISONOUS_TEMPERATURE; // first step: fill all canteens in inventories - UINT16 bMercID, bLastTeamID; + SoldierID bMercID, bLastTeamID; SOLDIERTYPE * pSoldier = NULL; 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 the merc is in this sector if ( pSoldier->bActive && pSoldier->ubProfile != NO_PROFILE && pSoldier->bInSector && ( pSoldier->sSectorX == gWorldSectorX ) && ( pSoldier->sSectorY == gWorldSectorY ) && ( pSoldier->bSectorZ == gbWorldSectorZ) ) { @@ -903,15 +905,16 @@ void SectorFillCanteens( void ) INT32 drumsize = Food[Item[pWaterDrum->usItem].foodtype].bDrinkPoints; // first step: fill all canteens in inventories - UINT16 bMercID, bLastTeamID; + SoldierID bMercID, bLastTeamID; SOLDIERTYPE * pSoldier = NULL; 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 the merc is in this sector if ( pSoldier->bActive && pSoldier->ubProfile != NO_PROFILE && pSoldier->bInSector && ( pSoldier->sSectorX == gWorldSectorX ) && ( pSoldier->sSectorY == gWorldSectorY ) && ( pSoldier->bSectorZ == gbWorldSectorZ) ) { diff --git a/Tactical/Handle Doors.cpp b/Tactical/Handle Doors.cpp index c5b74bb1..52704cfc 100644 --- a/Tactical/Handle Doors.cpp +++ b/Tactical/Handle Doors.cpp @@ -439,9 +439,9 @@ void ProcessImplicationsOfPCMessingWithDoor( SOLDIERTYPE * pSoldier ) if ( (InARoom( pSoldier->sGridNo, &usRoom ) && IN_BROTHEL( usRoom )) || (gWorldSectorX == 5 && gWorldSectorY == MAP_ROW_D && gbWorldSectorZ == 0 && (pSoldier->sGridNo == gModSettings.iBrothelDoor1 || pSoldier->sGridNo == gModSettings.iBrothelDoor2 || pSoldier->sGridNo == gModSettings.iBrothelDoor3 ) ) )//11010,11177,11176 { // see if a kingpin goon can see us - for (UINT16 ubLoop = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; ubLoop <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ubLoop++ ) + for ( SoldierID ubLoop = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; ubLoop <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ++ubLoop ) { - pGoon = MercPtrs[ ubLoop ]; + pGoon = ubLoop; if ( pGoon->ubCivilianGroup == KINGPIN_CIV_GROUP && pGoon->bActive && pGoon->bInSector && pGoon->stats.bLife >= OKLIFE && pGoon->aiData.bOppList[ pSoldier->ubID ] == SEEN_CURRENTLY ) { MakeCivHostile(pGoon); diff --git a/Tactical/Handle Items.cpp b/Tactical/Handle Items.cpp index d95b6157..d58980fe 100644 --- a/Tactical/Handle Items.cpp +++ b/Tactical/Handle Items.cpp @@ -5389,15 +5389,16 @@ void UpdateGear() if ( (guiCurrentScreen != GAME_SCREEN && guiCurrentScreen != MSG_BOX_SCREEN) ) return; - UINT16 bMercID, bLastTeamID; + SoldierID bMercID, bLastTeamID; SOLDIERTYPE* pSoldier = NULL; 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 the merc is in this sector if ( pSoldier->bActive && pSoldier->bInSector && (pSoldier->sSectorX == gWorldSectorX) && (pSoldier->sSectorY == gWorldSectorY) && (pSoldier->bSectorZ == gbWorldSectorZ) ) { @@ -6735,7 +6736,7 @@ void CheckForPickedOwnership( void ) UINT8 ubProfile; UINT8 ubCivGroup; SOLDIERTYPE * pSoldier; - UINT16 ubLoop; + SoldierID ubLoop; // LOOP THROUGH LIST TO FIND NODE WE WANT GetItemPool( gsTempGridNo, &pItemPool, gpTempSoldier->pathing.bLevel ); @@ -6762,9 +6763,9 @@ void CheckForPickedOwnership( void ) pItemPool = pItemPool->pNext; continue; } - for ( ubLoop = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; ubLoop <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ubLoop++ ) + for ( ubLoop = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; ubLoop <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ++ubLoop ) { - pSoldier = MercPtrs[ ubLoop ]; + pSoldier = ubLoop; if ( pSoldier && pSoldier->ubCivilianGroup == ubCivGroup ) { TestPotentialOwner( pSoldier ); diff --git a/Tactical/Handle UI.cpp b/Tactical/Handle UI.cpp index b53d91ba..aba46b8a 100644 --- a/Tactical/Handle UI.cpp +++ b/Tactical/Handle UI.cpp @@ -1403,15 +1403,16 @@ UINT32 UIHandleEndTurn( UI_EVENT *pUIEvent ) // WANNE: Ignore, so the game can continue ... } - INT32 tcnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; + SoldierID tcnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; SOLDIERTYPE *tS; INT16 sXOffset, sYOffset; INT32 sGridNo; UINT16 usSightLimit=0; - for ( tS = MercPtrs[ tcnt ]; tcnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++tcnt, tS++ ) + for ( ; tcnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++tcnt ) { + tS = tcnt; if ( tS->stats.bLife >= OKLIFE && tS->sGridNo != NOWHERE && tS->bInSector ) { //loop through all the gridnos that we are interested in @@ -2113,17 +2114,17 @@ UINT32 UIHandleCWait( UI_EVENT *pUIEvent ) // SelectedMercCanAffordMove UINT32 UIHandleCMoveMerc( UI_EVENT *pUIEvent ) { - INT32 usMapPos; - SOLDIERTYPE *pSoldier; - INT32 sDestGridNo; - INT32 sActionGridNo; - STRUCTURE *pStructure; - UINT8 ubDirection = 0xff; - BOOLEAN fAllMove; - UINT16 bLoop; - LEVELNODE *pIntTile; - INT32 sIntTileGridNo; - BOOLEAN fOldFastMove; + INT32 usMapPos; + SOLDIERTYPE *pSoldier; + INT32 sDestGridNo; + INT32 sActionGridNo; + STRUCTURE *pStructure; + UINT8 ubDirection = 0xff; + BOOLEAN fAllMove; + SoldierID bLoop; + LEVELNODE *pIntTile; + INT32 sIntTileGridNo; + BOOLEAN fOldFastMove; if ( gusSelectedSoldier != NOBODY ) { @@ -2144,13 +2145,14 @@ UINT32 UIHandleCMoveMerc( UI_EVENT *pUIEvent ) // Loop through all mercs and make go! // TODO: Only our squad! - for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID, pSoldier=MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++, pSoldier++) + for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++bLoop ) { + pSoldier = bLoop; if ( OK_CONTROLLABLE_MERC( pSoldier ) && pSoldier->bAssignment == CurrentSquad( ) && !pSoldier->flags.fMercAsleep ) { - // If we can't be controlled, returninvalid... - if ( pSoldier->flags.uiStatusFlags & SOLDIER_ROBOT ) - { + // If we can't be controlled, returninvalid... + if ( pSoldier->flags.uiStatusFlags & SOLDIER_ROBOT ) + { if ( !pSoldier->CanRobotBeControlled( ) ) { continue; From 4e8c5fa9ab9595f40e29cbe55e60cc019320408c Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sat, 30 Nov 2024 23:50:17 +0200 Subject: [PATCH 169/192] Remove unused function & globals --- Tactical/Handle UI.cpp | 32 -------------------------------- Tactical/Handle UI.h | 4 ---- TileEngine/worlddef.cpp | 2 -- 3 files changed, 38 deletions(-) diff --git a/Tactical/Handle UI.cpp b/Tactical/Handle UI.cpp index aba46b8a..fcae5d59 100644 --- a/Tactical/Handle UI.cpp +++ b/Tactical/Handle UI.cpp @@ -423,9 +423,6 @@ BOOLEAN gRubberBandActive = FALSE; BOOLEAN gfIgnoreOnSelectedGuy = FALSE; BOOLEAN gfViewPortAdjustedForSouth = FALSE; -INT16 guiCreateGuyIndex = 0; -// Temp values for placing bad guys -INT16 guiCreateBadGuyIndex = 8; // FLAGS // These flags are set for a single frame execution and then are reset for the next iteration. @@ -3304,35 +3301,6 @@ void HandleObjectHighlighting( ) } -void AdjustSoldierCreationStartValues( ) -{ - INT32 cnt; - SOLDIERTYPE *pSoldier; - - cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - guiCreateGuyIndex = (INT16)cnt; - - for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; pSoldier++, ++cnt ) - { - if ( !pSoldier->bActive ) - { - guiCreateGuyIndex = (INT16)cnt; - break; - } - } - - cnt = gTacticalStatus.Team[ gbPlayerNum ].bLastID + 1; - guiCreateBadGuyIndex = (INT16)cnt; - - for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ LAST_TEAM ].bLastID; pSoldier++, ++cnt ) - { - if ( !pSoldier->bActive && cnt > gTacticalStatus.Team[ gbPlayerNum ].bLastID ) - { - guiCreateBadGuyIndex = (INT16)cnt; - break; - } - } -} BOOLEAN SelectedMercCanAffordAttack( ) { diff --git a/Tactical/Handle UI.h b/Tactical/Handle UI.h index 717ddc8c..acfc4cab 100644 --- a/Tactical/Handle UI.h +++ b/Tactical/Handle UI.h @@ -292,9 +292,6 @@ void HandleObjectHighlighting( ); extern BOOLEAN gfUIForceReExamineCursorData; -extern INT16 guiCreateGuyIndex; -extern INT16 guiCreateBadGuyIndex; - // WANNE: Calculate the APs to turn around INT16 APsToTurnAround(SOLDIERTYPE *pSoldier, INT32 sAdjustedGridNo); @@ -315,7 +312,6 @@ void GetRTMousePositionInput( UINT32 *puiNewEvent ); void QueryRTLeftButton( UINT32 *puiNewEvent ); void QueryRTRightButton( UINT32 *puiNewEvent ); -void AdjustSoldierCreationStartValues( ); BOOLEAN SelectedMercCanAffordAttack( ); BOOLEAN SelectedMercCanAffordMove( ); diff --git a/TileEngine/worlddef.cpp b/TileEngine/worlddef.cpp index 2b78ad20..d8a44a4b 100644 --- a/TileEngine/worlddef.cpp +++ b/TileEngine/worlddef.cpp @@ -3294,7 +3294,6 @@ BOOLEAN LoadWorld(const STR8 puiFilename, FLOAT* pMajorMapVersion, UINT8* pMinor if(gusSelectedSoldier->bActive == FALSE) gusSelectedSoldier = NOBODY; } - AdjustSoldierCreationStartValues(); RenderProgressBar(0, 60); InvalidateWorldRedundency(); // SAVE FILENAME @@ -3327,7 +3326,6 @@ BOOLEAN NewWorld( INT32 nMapRows, INT32 nMapCols ) UINT16 NewIndex; INT32 cnt; - AdjustSoldierCreationStartValues( ); TrashWorld(); From e59d915e58267ec6f50a275973ebd34152819d73 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 1 Dec 2024 00:20:41 +0200 Subject: [PATCH 170/192] Use SoldierID --- Tactical/Handle UI.cpp | 66 ++++++++++++++++++--------------- Tactical/Interface Dialogue.cpp | 48 +++++++++++++----------- Tactical/Interface Panels.cpp | 17 ++++----- Tactical/Interface.cpp | 6 +-- Tactical/Items.cpp | 7 ++-- Tactical/Keys.cpp | 52 +++++++++++++------------- Tactical/Merc Hiring.cpp | 27 +++++++------- Tactical/Militia Control.cpp | 53 ++++++++++++++------------ Tactical/Morale.cpp | 17 +++++---- 9 files changed, 158 insertions(+), 135 deletions(-) diff --git a/Tactical/Handle UI.cpp b/Tactical/Handle UI.cpp index fcae5d59..f6ed976f 100644 --- a/Tactical/Handle UI.cpp +++ b/Tactical/Handle UI.cpp @@ -5503,9 +5503,9 @@ BOOLEAN MakeSoldierTurn( SOLDIERTYPE *pSoldier, INT16 sXPos, INT16 sYPos ) UINT32 UIHandleLCLook( UI_EVENT *pUIEvent ) { - INT16 sXPos, sYPos; - SOLDIERTYPE *pSoldier; - INT32 cnt; + INT16 sXPos, sYPos; + SOLDIERTYPE *pSoldier; + SoldierID cnt; if ( !GetMouseXY( &sXPos, &sYPos ) ) { return( GAME_SCREEN ); @@ -5515,8 +5515,9 @@ UINT32 UIHandleLCLook( UI_EVENT *pUIEvent ) { // OK, loop through all guys who are 'multi-selected' and cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++, pSoldier++ ) + for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt ) { + pSoldier = cnt; if ( pSoldier->bActive && pSoldier->bInSector ) { if ( pSoldier->flags.uiStatusFlags & SOLDIER_MULTI_SELECTED ) @@ -5820,10 +5821,10 @@ void GetGridNoScreenXY( INT32 sGridNo, INT16 *pScreenX, INT16 *pScreenY ) void EndMultiSoldierSelection( BOOLEAN fAcknowledge ) { - SOLDIERTYPE * pSoldier; - INT32 cnt; - SOLDIERTYPE *pFirstSoldier = NULL; - BOOLEAN fSelectedSoldierInBatch = FALSE; + SOLDIERTYPE *pSoldier; + SoldierID cnt; + SOLDIERTYPE *pFirstSoldier = NULL; + BOOLEAN fSelectedSoldierInBatch = FALSE; gTacticalStatus.fAtLeastOneGuyOnMultiSelect = FALSE; @@ -5833,8 +5834,9 @@ void EndMultiSoldierSelection( BOOLEAN fAcknowledge ) // check if our currently selected guy is among the // lucky few.. if not, change to a guy who is... cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++, pSoldier++ ) + for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt ) { + pSoldier = cnt; if ( pSoldier->bActive && pSoldier->bInSector ) { if ( pSoldier->flags.uiStatusFlags & SOLDIER_MULTI_SELECTED ) @@ -5879,15 +5881,16 @@ BOOLEAN StopRubberBandedMercFromMoving(void) } SOLDIERTYPE *pSoldier; - INT32 cnt; + SoldierID cnt; BOOLEAN fFound = FALSE; // OK, loop through all guys who are 'multi-selected' and // check if our currently selected guy is among the // lucky few.. if not, change to a guy who is... cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++, pSoldier++ ) + for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt ) { + pSoldier = cnt; if ( pSoldier->bActive && pSoldier->bInSector ) { if ( pSoldier->flags.uiStatusFlags & SOLDIER_MULTI_SELECTED ) @@ -5923,10 +5926,10 @@ void EndRubberBanding( ) BOOLEAN HandleMultiSelectionMove( INT32 sDestGridNo ) { - SOLDIERTYPE * pSoldier; - INT32 cnt; - BOOLEAN fAtLeastOneMultiSelect = FALSE; - BOOLEAN fMoveFast = FALSE; + SOLDIERTYPE *pSoldier; + SoldierID cnt; + BOOLEAN fAtLeastOneMultiSelect = FALSE; + BOOLEAN fMoveFast = FALSE; // OK, loop through all guys who are 'multi-selected' and // Make them move.... @@ -5935,8 +5938,9 @@ BOOLEAN HandleMultiSelectionMove( INT32 sDestGridNo ) gfGetNewPathThroughPeople = TRUE; cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++, pSoldier++ ) + for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt ) { + pSoldier = cnt; if ( pSoldier->bActive && pSoldier->bInSector ) { if ( pSoldier->flags.uiStatusFlags & SOLDIER_MULTI_SELECTED ) @@ -5958,8 +5962,9 @@ BOOLEAN HandleMultiSelectionMove( INT32 sDestGridNo ) INT32 highestY = 0; cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++, pSoldier++ ) + for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt ) { + pSoldier = cnt; if ( pSoldier->bActive && pSoldier->bInSector ) { if ( pSoldier->flags.uiStatusFlags & SOLDIER_MULTI_SELECTED ) @@ -5978,8 +5983,9 @@ BOOLEAN HandleMultiSelectionMove( INT32 sDestGridNo ) INT32 centerY = (highestY + lowestY)/2; cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++, pSoldier++ ) + for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt ) { + pSoldier = cnt; if ( pSoldier->bActive && pSoldier->bInSector ) { if ( pSoldier->flags.uiStatusFlags & SOLDIER_MULTI_SELECTED ) @@ -6068,9 +6074,10 @@ void ResetMultiSelection( ) { // OK, loop through all guys who are 'multi-selected' and // Make them move.... - INT32 cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for (SOLDIERTYPE* pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt, pSoldier++ ) + SoldierID cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; + for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt ) { + SOLDIERTYPE *pSoldier = cnt; if ( pSoldier && pSoldier->bActive && pSoldier->bInSector ) { if ( pSoldier->flags.uiStatusFlags & SOLDIER_MULTI_SELECTED ) @@ -6087,12 +6094,12 @@ void ResetMultiSelection( ) UINT32 UIHandleRubberBandOnTerrain( UI_EVENT *pUIEvent ) { - SOLDIERTYPE * pSoldier; - INT32 cnt; - INT16 sScreenX, sScreenY; - INT32 iTemp; - SGPRect aRect; - BOOLEAN fAtLeastOne = FALSE; + SOLDIERTYPE *pSoldier; + SoldierID cnt; + INT16 sScreenX, sScreenY; + INT32 iTemp; + SGPRect aRect; + BOOLEAN fAtLeastOne = FALSE; guiNewUICursor = NO_UICURSOR; //SetCurrentCursorFromDatabase( VIDEO_NO_CURSOR ); @@ -6120,8 +6127,9 @@ UINT32 UIHandleRubberBandOnTerrain( UI_EVENT *pUIEvent ) // ATE:Check at least for one guy that's in point! cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt, pSoldier++ ) + for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt ) { + pSoldier = cnt; // Check if this guy is OK to control.... if ( OK_CONTROLLABLE_MERC( pSoldier ) && !( pSoldier->flags.uiStatusFlags & ( SOLDIER_VEHICLE | SOLDIER_PASSENGER | SOLDIER_DRIVER ) ) ) { @@ -6148,9 +6156,9 @@ UINT32 UIHandleRubberBandOnTerrain( UI_EVENT *pUIEvent ) // ATE: Now loop through our guys and see if any fit! cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt, pSoldier++ ) + for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt ) { - + pSoldier = cnt; // Check if this guy is OK to control.... if ( OK_CONTROLLABLE_MERC( pSoldier ) && !( pSoldier->flags.uiStatusFlags & ( SOLDIER_VEHICLE | SOLDIER_PASSENGER | SOLDIER_DRIVER ) ) ) { diff --git a/Tactical/Interface Dialogue.cpp b/Tactical/Interface Dialogue.cpp index a47e6402..65fbf560 100644 --- a/Tactical/Interface Dialogue.cpp +++ b/Tactical/Interface Dialogue.cpp @@ -1818,16 +1818,16 @@ void HandleFactForNPCUnescorted( UINT8 ubNPC ) void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum ) { - INT32 cnt; - SOLDIERTYPE *pSoldier, *pSoldier2; - INT8 bNumDone = 0; - INT32 sGridNo = NOWHERE, sAdjustedGridNo; - INT8 bItemIn; - UINT8 ubDesiredMercDir; - EXITGRID ExitGrid; - INT32 iRandom = 0; - UINT8 ubMineIndex; - INT16 sX, sY, sX2, sY2; + SoldierID cnt; + SOLDIERTYPE *pSoldier, *pSoldier2; + INT8 bNumDone = 0; + INT32 sGridNo = NOWHERE, sAdjustedGridNo; + INT8 bItemIn; + UINT8 ubDesiredMercDir; + EXITGRID ExitGrid; + INT32 iRandom = 0; + UINT8 ubMineIndex; + INT16 sX, sY, sX2, sY2; pSoldier2 = NULL; //ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Handling %s, action %d at %ld", gMercProfiles[ ubTargetNPC ].zNickname, usActionCode, GetJA2Clock() ); @@ -1880,8 +1880,9 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum // Squad here to search for... // 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; // Are we in this sector, On the current squad? if ( pSoldier->bActive && pSoldier->stats.bLife >= OKLIFE && pSoldier->bInSector && pSoldier->bAssignment == CurrentSquad( ) ) { @@ -2170,8 +2171,9 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum 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; // Are we in this sector, On the current squad? if ( pSoldier->bActive && pSoldier->stats.bLife >= OKLIFE && pSoldier->bInSector ) { @@ -3726,8 +3728,9 @@ void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum { //HOSPITAL_PATIENT_DISTANCE cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++,pSoldier++) + for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt ) { + pSoldier = cnt; // Are we in this sector, On the current squad? if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife > 0 && (pSoldier->stats.bLife < pSoldier->stats.bLifeMax || NumberOfDamagedStats(pSoldier) > 0) && pSoldier->bAssignment != ASSIGNMENT_HOSPITAL && PythSpacesAway( pSoldier->sGridNo, pSoldier2->sGridNo ) < HOSPITAL_PATIENT_DISTANCE ) { @@ -4578,9 +4581,9 @@ UINT32 CalcMedicalCost( UINT8 ubId ) INT32 sGridNo = pNPC->sGridNo; - for ( UINT32 cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++cnt ) + for ( SoldierID cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++cnt ) { - pSoldier = MercPtrs[ cnt ]; + pSoldier = cnt; if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife > 0 && pSoldier->bAssignment != ASSIGNMENT_HOSPITAL ) { if ( pSoldier->stats.bLife < pSoldier->stats.bLifeMax || NumberOfDamagedStats(pSoldier) > 0) @@ -4850,13 +4853,14 @@ void DialogueMessageBoxCallBack( UINT8 ubExitValue ) { // He tried to lie..... // Find the best conscious merc with a chance.... - UINT16 cnt; - SOLDIERTYPE * pLier = NULL; - SOLDIERTYPE * pSoldier; + SoldierID cnt; + SOLDIERTYPE *pLier = NULL; + SOLDIERTYPE *pSoldier; cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++,pSoldier++ ) + for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt ) { + pSoldier = cnt; if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife >= OKLIFE && pSoldier->bBreath >= OKBREATH ) { if (!pLier || (EffectiveWisdom( pSoldier ) + EffectiveLeadership( pSoldier ) > EffectiveWisdom( pLier ) + EffectiveLeadership( pSoldier ) ) ) @@ -5016,13 +5020,13 @@ void DoneFadeInActionBasement( ) { // Start conversation, etc SOLDIERTYPE *pSoldier, *pNPCSoldier; - INT32 cnt; // Look for someone to talk to // look for all mercs on the same team, - cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( 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; // Are we in this sector, On the current squad? if ( pSoldier->bActive && pSoldier->stats.bLife >= OKLIFE && pSoldier->bInSector && pSoldier->bAssignment == CurrentSquad( ) ) { diff --git a/Tactical/Interface Panels.cpp b/Tactical/Interface Panels.cpp index 8f039637..b723ab93 100644 --- a/Tactical/Interface Panels.cpp +++ b/Tactical/Interface Panels.cpp @@ -591,7 +591,7 @@ void CheckForDisabledForGiveItem( ) INT16 sDist; INT32 sDestGridNo; INT8 bDestLevel; - INT32 cnt; + SoldierID cnt; SOLDIERTYPE *pSoldier; SoldierID ubSrcSoldier; @@ -614,8 +614,9 @@ void CheckForDisabledForGiveItem( ) { // Go through each merc and see if there is one closeby.... cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++,pSoldier++) + for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt ) { + pSoldier = cnt; if ( pSoldier->bActive && pSoldier->stats.bLife >= OKLIFE && !( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) && !AM_A_ROBOT( pSoldier ) && pSoldier->bInSector && IsMercOnCurrentSquad( pSoldier ) ) { sDist = PythSpacesAway( gpSMCurrentMerc->sGridNo, pSoldier->sGridNo ); @@ -4511,9 +4512,9 @@ void BtnDropPackCallback(GUI_BUTTON *btn,INT32 reason) if ( _KeyDown( SHIFT ) ) { INT8 bAssignment = gpSMCurrentMerc->bAssignment; - for( int x = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; x <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; x++ ) + for( SoldierID x = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; x <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++x ) { - SOLDIERTYPE *pSoldier = MercPtrs[x]; + SOLDIERTYPE *pSoldier = x; /* Is DropPackFlag currently false and is there something in the backpack pocket? If so, we haven't dropped a pack yet and apparently want to*/ if(pSoldier->bAssignment == bAssignment && pSoldier->inv[BPACKPOCKPOS].exists() == true && !pSoldier->flags.DropPackFlag) @@ -6437,13 +6438,12 @@ void CheckForFacePanelStartAnims( SOLDIERTYPE *pSoldier, INT16 sPanelX, INT16 sP void FinishAnySkullPanelAnimations( ) { SOLDIERTYPE *pTeamSoldier; - INT32 cnt2; - - cnt2 = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; + SoldierID cnt2 = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; // run through list - for ( pTeamSoldier = MercPtrs[ cnt2 ]; cnt2 <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt2++,pTeamSoldier++ ) + for ( ; cnt2 <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt2 ) { + pTeamSoldier = cnt2; if ( pTeamSoldier->bActive && pTeamSoldier->stats.bLife == 0 ) { if ( pTeamSoldier->flags.fUIdeadMerc || pTeamSoldier->flags.fClosePanelToDie ) @@ -6455,7 +6455,6 @@ void FinishAnySkullPanelAnimations( ) } } } - } void HandlePanelFaceAnimations( SOLDIERTYPE *pSoldier ) diff --git a/Tactical/Interface.cpp b/Tactical/Interface.cpp index 615cec5a..b25d4c7a 100644 --- a/Tactical/Interface.cpp +++ b/Tactical/Interface.cpp @@ -5209,7 +5209,6 @@ void UpdateEnemyUIBar( ) void InitPlayerUIBar( BOOLEAN fInterrupt ) { SOLDIERTYPE *pTeamSoldier; - INT32 cnt = 0; INT16 bNumOK = 0, bNumNotOK = 0; if ( !gGameOptions.fTurnTimeLimit ) @@ -5235,11 +5234,12 @@ void InitPlayerUIBar( BOOLEAN fInterrupt ) gTacticalStatus.usTactialTurnLimitCounter = 0; // IF IT'S THE SELECTED GUY, MAKE ANOTHER SELECTED! - cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; + SoldierID cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; // look for all mercs on the same team, - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++,pTeamSoldier++) + for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt ) { + pTeamSoldier = cnt; // Are we active and in sector..... if ( pTeamSoldier->bActive && pTeamSoldier->bInSector ) { diff --git a/Tactical/Items.cpp b/Tactical/Items.cpp index 70de1d87..c88fd215 100644 --- a/Tactical/Items.cpp +++ b/Tactical/Items.cpp @@ -15332,10 +15332,11 @@ OBJECTTYPE* GetExternalFeedingObject(SOLDIERTYPE* pSoldier, OBJECTTYPE * pObject // loop over other members of our team in this sector. This includes ourself, as our gun can be fed from a belt in our inventory SOLDIERTYPE* pTeamSoldier = NULL; - INT32 cnt = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID; - INT32 lastid = gTacticalStatus.Team[ pSoldier->bTeam ].bLastID; - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt < lastid; ++cnt, ++pTeamSoldier) + SoldierID cnt = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID; + SoldierID lastid = gTacticalStatus.Team[ pSoldier->bTeam ].bLastID; + for ( ; cnt < lastid; ++cnt ) { + pTeamSoldier = cnt; // check if teamsoldier exists in this sector if ( !pTeamSoldier || !pTeamSoldier->bActive || !pTeamSoldier->bInSector || pTeamSoldier->stats.bLife < OKLIFE || pTeamSoldier->sSectorX != pSoldier->sSectorX || pTeamSoldier->sSectorY != pSoldier->sSectorY || pTeamSoldier->bSectorZ != pSoldier->bSectorZ ) continue; diff --git a/Tactical/Keys.cpp b/Tactical/Keys.cpp index b8dc66e4..38171f5f 100644 --- a/Tactical/Keys.cpp +++ b/Tactical/Keys.cpp @@ -1390,11 +1390,11 @@ DOOR_STATUS *GetDoorStatus( INT32 sGridNo ) BOOLEAN AllMercsLookForDoor( INT32 sGridNo, BOOLEAN fUpdateValue ) { - INT32 cnt, cnt2; - INT8 bDirs[ 8 ] = { NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST }; - SOLDIERTYPE *pSoldier; - DOOR_STATUS *pDoorStatus; - INT32 usNewGridNo; + INT32 cnt2; + INT8 bDirs[ 8 ] = { NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST }; + SOLDIERTYPE *pSoldier; + DOOR_STATUS *pDoorStatus; + INT32 usNewGridNo; // Get door pDoorStatus = GetDoorStatus( sGridNo ); @@ -1405,11 +1405,12 @@ BOOLEAN AllMercsLookForDoor( INT32 sGridNo, BOOLEAN fUpdateValue ) } // IF IT'S THE SELECTED GUY, MAKE ANOTHER SELECTED! - 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; // ATE: Ok, lets check for some basic things here! if ( pSoldier->stats.bLife >= OKLIFE && !TileIsOutOfBounds(pSoldier->sGridNo) && pSoldier->bActive && pSoldier->bInSector ) { @@ -2070,11 +2071,10 @@ BOOLEAN LoadKeyTableFromSaveedGameFile( HWFILE hFile, UINT32 uiSaveGameVersion ) void ExamineDoorsOnEnteringSector( ) { - INT32 cnt; - DOOR_STATUS *pDoorStatus; - SOLDIERTYPE *pSoldier; - BOOLEAN fOK = FALSE; - INT8 bTownId; + DOOR_STATUS *pDoorStatus; + SOLDIERTYPE *pSoldier; + BOOLEAN fOK = FALSE; + INT8 bTownId; // OK, only do this if conditions are met.... // If this is any omerta tow, don't do it... @@ -2093,10 +2093,11 @@ void ExamineDoorsOnEnteringSector( ) // there is at least one human being in that sector. // check for civ - cnt = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; + SoldierID cnt = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; // look for all mercs on the same team, - for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ LAST_TEAM ].bLastID; cnt++ ,pSoldier++ ) + for ( ; cnt <= gTacticalStatus.Team[ LAST_TEAM ].bLastID; ++cnt ) { + pSoldier = cnt; if ( pSoldier->bActive ) { if ( pSoldier->bInSector ) @@ -2110,7 +2111,7 @@ void ExamineDoorsOnEnteringSector( ) // Let's do it! if ( fOK ) { - for ( cnt = 0; cnt < gubNumDoorStatus; cnt++ ) + for ( UINT8 cnt = 0; cnt < gubNumDoorStatus; cnt++ ) { pDoorStatus = &( gpDoorStatus[ cnt ] ); @@ -2126,12 +2127,11 @@ void ExamineDoorsOnEnteringSector( ) void HandleDoorsChangeWhenEnteringSectorCurrentlyLoaded( ) { - INT32 cnt; - DOOR_STATUS *pDoorStatus; - SOLDIERTYPE *pSoldier; - BOOLEAN fOK = FALSE; - INT32 iNumNewMercs = 0; - INT8 bTownId; + DOOR_STATUS *pDoorStatus; + SOLDIERTYPE *pSoldier; + BOOLEAN fOK = FALSE; + INT32 iNumNewMercs = 0; + INT8 bTownId; // OK, only do this if conditions are met.... @@ -2145,7 +2145,7 @@ void HandleDoorsChangeWhenEnteringSectorCurrentlyLoaded( ) // 1 ) there is at least one human being in that sector. // check for civ - cnt = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; + SoldierID cnt = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; // Check time... if ( ( GetWorldTotalMin( ) - gTacticalStatus.uiTimeSinceLastInTactical ) < 30 ) @@ -2154,8 +2154,9 @@ void HandleDoorsChangeWhenEnteringSectorCurrentlyLoaded( ) } // look for all mercs on the same team, - for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ LAST_TEAM ].bLastID; cnt++ ,pSoldier++ ) + for ( ; cnt <= gTacticalStatus.Team[ LAST_TEAM ].bLastID; ++cnt ) { + pSoldier = cnt; if ( pSoldier->bActive && pSoldier->bInSector ) { fOK = TRUE; @@ -2165,8 +2166,9 @@ void HandleDoorsChangeWhenEnteringSectorCurrentlyLoaded( ) // Loop through our team now.... cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++ ,pSoldier++ ) + for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt ) { + pSoldier = cnt; if ( pSoldier->bActive && pSoldier->bInSector && gbMercIsNewInThisSector[ cnt ] ) { iNumNewMercs++; @@ -2182,7 +2184,7 @@ void HandleDoorsChangeWhenEnteringSectorCurrentlyLoaded( ) // Let's do it! if ( fOK ) { - for ( cnt = 0; cnt < gubNumDoorStatus; cnt++ ) + for ( UINT8 cnt = 0; cnt < gubNumDoorStatus; cnt++ ) { pDoorStatus = &( gpDoorStatus[ cnt ] ); diff --git a/Tactical/Merc Hiring.cpp b/Tactical/Merc Hiring.cpp index 9cc5525b..a1db1e9d 100644 --- a/Tactical/Merc Hiring.cpp +++ b/Tactical/Merc Hiring.cpp @@ -673,10 +673,10 @@ BOOLEAN IsTheSoldierAliveAndConcious( SOLDIERTYPE *pSoldier ) UINT16 NumberOfMercsOnPlayerTeam() { - UINT16 cnt; - SOLDIERTYPE *pSoldier; - UINT16 bLastTeamID; - UINT16 ubCount=0; + SoldierID cnt; + SOLDIERTYPE *pSoldier; + SoldierID bLastTeamID; + UINT16 ubCount=0; // Set locator to first merc cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; @@ -685,8 +685,9 @@ UINT16 NumberOfMercsOnPlayerTeam() if (! MercPtrs[cnt]) return 0; - for ( pSoldier = MercPtrs[ cnt ]; cnt <= bLastTeamID; cnt++,pSoldier++) + for ( ; cnt <= bLastTeamID; ++cnt ) { + pSoldier = cnt; AssertNotNIL(pSoldier); //if the is active, and is not a vehicle @@ -702,9 +703,9 @@ UINT16 NumberOfMercsOnPlayerTeam() void HandleMercArrivesQuotes( SOLDIERTYPE *pSoldier ) { - UINT16 cnt, usLastTeamID; - INT8 bHated; - SOLDIERTYPE *pTeamSoldier; + SoldierID cnt, usLastTeamID; + INT8 bHated; + SOLDIERTYPE *pTeamSoldier; #ifdef JA2UB //if we are at the begining of the game going through the initial heli scequence if( pSoldier->fWaitingToGetupFromJA25Start ) @@ -730,8 +731,9 @@ void HandleMercArrivesQuotes( SOLDIERTYPE *pSoldier ) cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; usLastTeamID = gTacticalStatus.Team[ gbPlayerNum ].bLastID; //loop though all the mercs - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= usLastTeamID; ++cnt, ++pTeamSoldier) + for ( ; cnt <= usLastTeamID; ++cnt ) { + pTeamSoldier = cnt; if ( pTeamSoldier->bActive ) { if ( pTeamSoldier->ubWhatKindOfMercAmI == MERC_TYPE__AIM_MERC ) @@ -819,14 +821,13 @@ UINT32 GetMercArrivalTimeOfDay( ) void UpdateAnyInTransitMercsWithGlobalArrivalSector( ) { - INT32 cnt; SOLDIERTYPE *pSoldier; - - 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 ( pSoldier->bActive ) { if ( pSoldier->bAssignment == IN_TRANSIT ) diff --git a/Tactical/Militia Control.cpp b/Tactical/Militia Control.cpp index e5fad2d8..0986c867 100644 --- a/Tactical/Militia Control.cpp +++ b/Tactical/Militia Control.cpp @@ -176,12 +176,11 @@ void ResetMilitia() void RemoveMilitiaFromTactical() { SOLDIERINITNODE *curr; - INT32 i; - for( i = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID; i <= gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; i++ ) + for( SoldierID id = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID; id <= gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; ++id ) { - if( MercPtrs[ i ]->bActive ) + if( id->bActive ) { - TacticalRemoveSoldier( MercPtrs[ i ]->ubID ); + TacticalRemoveSoldier( id ); } } curr = gSoldierInitHead; @@ -327,7 +326,6 @@ void PrepareMilitiaForTactical( BOOLEAN fPrepareAll) void HandleMilitiaPromotions( void ) { - UINT16 cnt; SOLDIERTYPE* pTeamSoldier; gbGreenToElitePromotions = 0; @@ -335,10 +333,11 @@ void HandleMilitiaPromotions( void ) gbRegToElitePromotions = 0; gbMilitiaPromotions = 0; - cnt = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID; + SoldierID cnt = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID; - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; ++cnt, ++pTeamSoldier) + for ( ; cnt <= gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; ++cnt ) { + pTeamSoldier = cnt; if ( pTeamSoldier->bActive && pTeamSoldier->bInSector && pTeamSoldier->stats.bLife > 0 ) { // Flugente: take care of promotions and individual militia update @@ -1422,13 +1421,14 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason ) case( MILCON_MENU_ALL_ATTACK ): if (fAllowSectorOrder) { - UINT16 cnt; + SoldierID cnt; SOLDIERTYPE *pTeamSoldier; cnt = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID; - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; cnt++, pTeamSoldier++) + for ( ; cnt <= gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; ++cnt ) { + pTeamSoldier = cnt; if ( (pTeamSoldier->bActive) && (pTeamSoldier->bInSector) && (pTeamSoldier->stats.bLife >= OKLIFE) ) { // sevenfm: stop any AI @@ -1459,13 +1459,14 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason ) case( MILCON_MENU_ALL_HOLD ): if (fAllowSectorOrder) { - UINT16 cnt; + SoldierID cnt; SOLDIERTYPE *pTeamSoldier; cnt = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID; - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; cnt++, pTeamSoldier++) + for ( ; cnt <= gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; ++cnt ) { + pTeamSoldier = cnt; if ( (pTeamSoldier->bActive) && (pTeamSoldier->bInSector) && (pTeamSoldier->stats.bLife >= OKLIFE) ) { // sevenfm: stop any AI @@ -1495,14 +1496,15 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason ) case( MILCON_MENU_ALL_RETREAT ): if (fAllowSectorOrder) { - UINT16 cnt; + SoldierID cnt; INT16 sActionGridNo; SOLDIERTYPE *pTeamSoldier; cnt = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID; - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; cnt++, pTeamSoldier++) + for ( ; cnt <= gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; ++cnt ) { + pTeamSoldier = cnt; if ( (pTeamSoldier->bActive) && (pTeamSoldier->bInSector) && (pTeamSoldier->stats.bLife >= OKLIFE) ) { // sevenfm: stop any AI @@ -1558,15 +1560,16 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason ) case( MILCON_MENU_ALL_COMETOME ): if (fAllowSectorOrder) { - UINT16 cnt; + SoldierID cnt; UINT8 ubDirection; INT32 sActionGridNo, sGridNo, sAdjustedGridNo; SOLDIERTYPE *pTeamSoldier; cnt = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID; - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; cnt++, pTeamSoldier++) + for ( ; cnt <= gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; ++cnt ) { + pTeamSoldier = cnt; if ( (pTeamSoldier->bActive) && (pTeamSoldier->bInSector) && (pTeamSoldier->stats.bLife >= OKLIFE) ) { // sevenfm: stop any AI @@ -1615,14 +1618,15 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason ) case( MILCON_MENU_ALL_SPREAD ): if (fAllowSectorOrder) { - UINT16 cnt; + SoldierID cnt; INT32 sActionGridNo; SOLDIERTYPE *pTeamSoldier; cnt = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID; - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; cnt++, pTeamSoldier++) + for ( ; cnt <= gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; ++cnt ) { + pTeamSoldier = cnt; if ( (pTeamSoldier->bActive) && (pTeamSoldier->bInSector) && (pTeamSoldier->stats.bLife >= OKLIFE) ) { // sevenfm: stop any AI @@ -1668,13 +1672,14 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason ) case( MILCON_MENU_ALL_GETDOWN ): if (fAllowSectorOrder) { - UINT16 cnt; + SoldierID cnt; SOLDIERTYPE *pTeamSoldier; cnt = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID; - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; cnt++, pTeamSoldier++) + for ( ; cnt <= gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; ++cnt ) { + pTeamSoldier = cnt; if ( (pTeamSoldier->bActive) && (pTeamSoldier->bInSector) && (pTeamSoldier->stats.bLife >= OKLIFE) ) { // sevenfm: stop any AI @@ -1706,13 +1711,14 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason ) case( MILCON_MENU_ALL_CROUCH ): if (fAllowSectorOrder) { - UINT16 cnt; + SoldierID cnt; SOLDIERTYPE *pTeamSoldier; cnt = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID; - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; ++cnt, ++pTeamSoldier) + for ( ; cnt <= gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; ++cnt ) { + pTeamSoldier = cnt; if ( (pTeamSoldier->bActive) && (pTeamSoldier->bInSector) && (pTeamSoldier->stats.bLife >= OKLIFE) ) { // sevenfm: stop any AI @@ -1744,15 +1750,16 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason ) case( MILCON_MENU_ALL_TAKE_COVER ): if (fAllowSectorOrder) { - UINT16 cnt; + SoldierID cnt; INT16 sActionGridNo; INT32 iDummy; SOLDIERTYPE *pTeamSoldier; cnt = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID; - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; cnt++, pTeamSoldier++) + for ( ; cnt <= gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; ++cnt ) { + pTeamSoldier = cnt; if ( (pTeamSoldier->bActive) && (pTeamSoldier->bInSector) && (pTeamSoldier->stats.bLife >= OKLIFE) ) { // sevenfm: stop any AI diff --git a/Tactical/Morale.cpp b/Tactical/Morale.cpp index bd2924cb..6a3fcc85 100644 --- a/Tactical/Morale.cpp +++ b/Tactical/Morale.cpp @@ -253,12 +253,13 @@ void DecayStrategicMorale( SOLDIERTYPE * pSoldier ) void DecayTacticalMoraleModifiers( void ) { SOLDIERTYPE * pSoldier; - UINT16 ubLoop, ubLoop2; + SoldierID ubLoop, ubLoop2; BOOLEAN fHandleNervous; ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( pSoldier = MercPtrs[ ubLoop ]; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++, pSoldier++ ) + for ( ; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++ubLoop ) { + pSoldier = ubLoop; //if the merc is active, in Arulco // CJC: decay modifiers while asleep! or POW! if ( pSoldier->bActive && pSoldier->ubProfile != NO_PROFILE && @@ -313,10 +314,10 @@ void DecayTacticalMoraleModifiers( void ) { // look for anyone else in same sector fHandleNervous = TRUE; - for ( ubLoop2 = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; ubLoop2 <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop2++ ) + for ( ubLoop2 = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; ubLoop2 <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++ubLoop2 ) { - SOLDIERTYPE *pSoldier = MercPtrs[ubLoop2]; - if ( pSoldier != pSoldier && pSoldier->bActive && pSoldier->sSectorX == pSoldier->sSectorX && pSoldier->sSectorY == pSoldier->sSectorY && pSoldier->bSectorZ == pSoldier->bSectorZ ) + SOLDIERTYPE *pSoldier2 = ubLoop2; + if ( pSoldier2 != pSoldier && pSoldier2->bActive && pSoldier2->sSectorX == pSoldier->sSectorX && pSoldier2->sSectorY == pSoldier->sSectorY && pSoldier2->bSectorZ == pSoldier->bSectorZ ) { // found someone! fHandleNervous = FALSE; @@ -361,11 +362,11 @@ void DecayTacticalMoraleModifiers( void ) void DecayStrategicMoraleModifiers( void ) { SOLDIERTYPE * pSoldier; - UINT16 ubLoop; + SoldierID ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( pSoldier = MercPtrs[ ubLoop ]; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++, pSoldier++ ) + for ( ; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++ubLoop ) { + pSoldier = ubLoop; //if the merc is active, in Arulco // CJC: decay modifiers while asleep! or POW! if ( pSoldier->bActive && pSoldier->ubProfile != NO_PROFILE && From bfb724eab9088460cebb207295e2cd72d01cc2d1 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 1 Dec 2024 18:23:52 +0200 Subject: [PATCH 171/192] Use SoldierID --- Laptop/BobbyRGuns.cpp | 17 +- Multiplayer/client.cpp | 13 +- Strategic/Quests.cpp | 4 +- Strategic/Strategic Merc Handler.cpp | 8 +- Tactical/Morale.cpp | 116 ++--- Tactical/Overhead.cpp | 419 +++++++++--------- Tactical/Overhead.h | 2 +- Tactical/Real Time Input.cpp | 92 ++-- Tactical/Rotting Corpses.cpp | 18 +- Tactical/ShopKeeper Interface.cpp | 5 +- Tactical/SkillCheck.cpp | 6 +- Tactical/SkillMenu.cpp | 14 +- Tactical/Soldier Add.cpp | 16 +- Tactical/Soldier Ani.cpp | 15 +- Tactical/Soldier Control.cpp | 137 +++--- Tactical/Soldier Create.cpp | 28 +- Tactical/Soldier Init List.cpp | 18 +- Tactical/Soldier Profile.cpp | 13 +- Tactical/Strategic Exit GUI.cpp | 6 +- Tactical/Tactical Save.cpp | 34 +- Tactical/Tactical Turns.cpp | 17 +- Tactical/TeamTurns.cpp | 177 ++++---- Tactical/Turn Based Input.cpp | 584 +++++++++++++------------- Tactical/Vehicles.cpp | 14 +- Tactical/opplist.cpp | 315 +++++++------- TacticalAI/AIMain.cpp | 17 +- TacticalAI/AIUtils.cpp | 95 ++--- TacticalAI/Attacks.cpp | 4 +- TacticalAI/CreatureDecideAction.cpp | 14 +- TacticalAI/DecideAction.cpp | 4 +- TacticalAI/Knowledge.cpp | 12 +- TacticalAI/Medical.cpp | 28 +- TacticalAI/NPC.cpp | 12 +- TileEngine/Explosion Control.cpp | 32 +- TileEngine/Isometric Utils.cpp | 7 +- TileEngine/Tactical Placement GUI.cpp | 14 +- 36 files changed, 1165 insertions(+), 1162 deletions(-) diff --git a/Laptop/BobbyRGuns.cpp b/Laptop/BobbyRGuns.cpp index 26d2c43a..64e8281f 100644 --- a/Laptop/BobbyRGuns.cpp +++ b/Laptop/BobbyRGuns.cpp @@ -3719,26 +3719,27 @@ void OutOfStockMessageBoxCallBack( UINT8 bExitValue ) UINT8 CheckPlayersInventoryForGunMatchingGivenAmmoID( INT16 sItemID ) { UINT8 ubItemCount=0; - UINT16 ubMercCount; UINT8 ubPocketCount; - UINT16 ubFirstID = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; - UINT16 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; ubPocketCountinv[ 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; } diff --git a/Multiplayer/client.cpp b/Multiplayer/client.cpp index 8e1229d4..be5de69f 100644 --- a/Multiplayer/client.cpp +++ b/Multiplayer/client.cpp @@ -4102,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; @@ -4112,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++; @@ -4331,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 ); } diff --git a/Strategic/Quests.cpp b/Strategic/Quests.cpp index 3606eca6..4010cf5b 100644 --- a/Strategic/Quests.cpp +++ b/Strategic/Quests.cpp @@ -1713,9 +1713,9 @@ 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 ( SoldierID i = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; i <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++i ) + for ( SoldierID id = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; id <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++id ) { - SOLDIERTYPE *pSoldier = i; + 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 ) diff --git a/Strategic/Strategic Merc Handler.cpp b/Strategic/Strategic Merc Handler.cpp index 8f8a0790..e5c3daea 100644 --- a/Strategic/Strategic Merc Handler.cpp +++ b/Strategic/Strategic Merc Handler.cpp @@ -185,7 +185,7 @@ void StrategicHandlePlayerTeamMercDeath( SOLDIERTYPE *pSoldier ) void MercDailyUpdate() { SoldierID id; - SoldierID bLastTeamID; + SoldierID lastid; SOLDIERTYPE *pSoldier; //SOLDIERTYPE *pQuitList[ 21 ]; MERCPROFILESTRUCT *pProfile; @@ -218,10 +218,10 @@ void MercDailyUpdate() AddSameDayStrategicEvent( EVENT_BEGIN_CONTRACT_RENEWAL_SEQUENCE, MERC_ARRIVE_TIME_SLOT_3, 0 ); id = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - bLastTeamID = gTacticalStatus.Team[ gbPlayerNum ].bLastID; + lastid = gTacticalStatus.Team[ gbPlayerNum ].bLastID; //loop though all the mercs - for ( ; id <= bLastTeamID; ++id) + for ( ; id <= lastid; ++id) { pSoldier = id; //if the merc is active @@ -376,7 +376,7 @@ void MercDailyUpdate() } //reset the counter - for ( id = 0; id <= bLastTeamID; ++id ) + for ( id = 0; id <= lastid; ++id ) { pSoldier = id; //if the merc is active diff --git a/Tactical/Morale.cpp b/Tactical/Morale.cpp index 6a3fcc85..3031cae1 100644 --- a/Tactical/Morale.cpp +++ b/Tactical/Morale.cpp @@ -728,9 +728,9 @@ void HandleMoraleEventForSoldier( SOLDIERTYPE * pSoldier, INT8 bMoraleEvent ) void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, INT16 sMapY, INT8 bMapZ ) { - UINT16 ubLoop; - SOLDIERTYPE * pTeamSoldier; - MERCPROFILESTRUCT * pProfile; + SoldierID id; + SOLDIERTYPE *pTeamSoldier; + MERCPROFILESTRUCT *pProfile; gfSomeoneSaidMoraleQuote = FALSE; @@ -778,9 +778,10 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I case MORALE_BATTLE_WON: // affects everyone to varying degrees - ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( pTeamSoldier = MercPtrs[ ubLoop ]; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++, pTeamSoldier++ ) + id = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; + for ( ; id <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++id ) { + pTeamSoldier = id; if ( pTeamSoldier->bActive ) { if ( SOLDIER_IN_SECTOR( pTeamSoldier, sMapX, sMapY, bMapZ ) ) @@ -797,9 +798,10 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I break; case MORALE_RAN_AWAY: // affects everyone to varying degrees - ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( pTeamSoldier = MercPtrs[ ubLoop ]; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++, pTeamSoldier++ ) + id = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; + for ( ; id <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++id ) { + pTeamSoldier = id; if ( pTeamSoldier->bActive ) { // CJC: adding to SOLDIER_IN_SECTOR check special stuff because the old sector values might @@ -869,9 +871,10 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I case MORALE_MONSTER_QUEEN_KILLED: case MORALE_DEIDRANNA_KILLED: // affects everyone, everywhere - ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( pTeamSoldier = MercPtrs[ ubLoop ]; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++, pTeamSoldier++ ) + id = gTacticalStatus.Team[gbPlayerNum].bFirstID; + for ( ; id <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++id ) { + pTeamSoldier = id; if ( pTeamSoldier->bActive ) { if ( gGameOptions.fNewTraitSystem && bMoraleEvent != MORALE_DEIDRANNA_KILLED) @@ -898,9 +901,10 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I case MORALE_GREAT_MORALE: case MORALE_AIRSTRIKE: // affects every in sector - ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( pTeamSoldier = MercPtrs[ ubLoop ]; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++, pTeamSoldier++ ) + id = gTacticalStatus.Team[gbPlayerNum].bFirstID; + for ( ; id <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++id ) { + pTeamSoldier = id; if ( pTeamSoldier->bActive && SOLDIER_IN_SECTOR( pTeamSoldier, sMapX, sMapY, bMapZ ) ) { HandleMoraleEventForSoldier( pTeamSoldier, bMoraleEvent ); @@ -913,9 +917,10 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I Assert( pSoldier ); // affects everyone - ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( pTeamSoldier = MercPtrs[ ubLoop ]; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++, pTeamSoldier++ ) + id = gTacticalStatus.Team[gbPlayerNum].bFirstID; + for ( ; id <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++id ) { + pTeamSoldier = id; if ( pTeamSoldier->bActive ) { HandleMoraleEventForSoldier( pTeamSoldier, bMoraleEvent ); @@ -927,9 +932,10 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I Assert( pSoldier ); // affects everyone, in sector differently than not, extra bonuses if it's a buddy or hated merc - ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( pTeamSoldier = MercPtrs[ ubLoop ]; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++, pTeamSoldier++ ) + id = gTacticalStatus.Team[gbPlayerNum].bFirstID; + for ( ; id <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++id ) { + pTeamSoldier = id; if ( pTeamSoldier->bActive && pTeamSoldier->ubProfile != NO_PROFILE) { pProfile = &(gMercProfiles[ pTeamSoldier->ubProfile ]); @@ -982,9 +988,10 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I // female mercs get unhappy based on how sexist they are (=hate men) // gentlemen males get unhappy too - ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( pTeamSoldier = MercPtrs[ ubLoop ]; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++, pTeamSoldier++ ) + id = gTacticalStatus.Team[gbPlayerNum].bFirstID; + for ( ; id <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++id ) { + pTeamSoldier = id; if ( pTeamSoldier->bActive && pTeamSoldier->ubProfile != NO_PROFILE ) { if ( WhichHated( pTeamSoldier->ubProfile, pSoldier->ubProfile ) != -1 ) @@ -1044,9 +1051,10 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I case MORALE_ENEMYGROUP_COWARD: // affects coward in sector - ubLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; - for ( pTeamSoldier = MercPtrs[ubLoop]; ubLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ubLoop++, pTeamSoldier++ ) + id = gTacticalStatus.Team[gbPlayerNum].bFirstID; + for ( ; id <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++id ) { + pTeamSoldier = id; if ( pTeamSoldier->bActive && (pTeamSoldier->sSectorX == sMapX) && (pTeamSoldier->sSectorY == sMapY) && (pTeamSoldier->bSectorZ == bMapZ) ) { if ( DoesMercHavePersonality( pTeamSoldier, CHAR_TRAIT_COWARD ) ) @@ -1142,27 +1150,28 @@ void HandleMoraleEvent( SOLDIERTYPE *pSoldier, INT8 bMoraleEvent, INT16 sMapX, I void HourlyMoraleUpdate( void ) { - UINT16 bMercID, bOtherID, bLastTeamID; - INT8 bActualTeamOpinion; - INT8 bTeamMoraleModChange, bTeamMoraleModDiff; - INT8 bOpinion=-1; - INT32 iTotalOpinions; - INT8 bNumTeamMembers; - INT8 bHighestTeamLeadership = 0; - SOLDIERTYPE * pSoldier; - SOLDIERTYPE * pOtherSoldier; - MERCPROFILESTRUCT * pProfile; - BOOLEAN fSameGroupOnly; - static INT8 bStrategicMoraleUpdateCounter = 0; - BOOLEAN fFoundHated = FALSE; - INT8 bHated; + SoldierID bMercID, bOtherID, bLastTeamID; + INT8 bActualTeamOpinion; + INT8 bTeamMoraleModChange, bTeamMoraleModDiff; + INT8 bOpinion=-1; + INT32 iTotalOpinions; + INT8 bNumTeamMembers; + INT8 bHighestTeamLeadership = 0; + SOLDIERTYPE *pSoldier; + SOLDIERTYPE *pOtherSoldier; + MERCPROFILESTRUCT *pProfile; + BOOLEAN fSameGroupOnly; + static INT8 bStrategicMoraleUpdateCounter = 0; + BOOLEAN fFoundHated = FALSE; + INT8 bHated; bMercID = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; bLastTeamID = gTacticalStatus.Team[ gbPlayerNum ].bLastID; // loop through all mercs to calculate their morale - for ( pSoldier = MercPtrs[ bMercID ]; bMercID <= bLastTeamID; ++bMercID,pSoldier++) + for ( ; bMercID <= bLastTeamID; ++bMercID ) { + pSoldier = bMercID; //if the merc is active, in Arulco, and conscious, not POW if ( pSoldier->bActive && pSoldier->ubProfile != NO_PROFILE && !(pSoldier->bAssignment == IN_TRANSIT || @@ -1194,8 +1203,9 @@ void HourlyMoraleUpdate( void ) // loop through all other mercs bOtherID = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( pOtherSoldier = MercPtrs[ bOtherID ]; bOtherID <= bLastTeamID; bOtherID++,pOtherSoldier++) + for ( ; bOtherID <= bLastTeamID; ++bOtherID ) { + pOtherSoldier = bOtherID; // skip past ourselves and all inactive mercs if (bOtherID != bMercID && pOtherSoldier->bActive && pOtherSoldier->ubProfile != NO_PROFILE && !(pOtherSoldier->bAssignment == IN_TRANSIT || @@ -1345,13 +1355,12 @@ void HourlyMoraleUpdate( void ) void HandleSnitchCheck( void ) { - UINT16 bMercID, bOtherID; - INT8 bOpinion = -1; - UINT16 bLastTeamID; - SOLDIERTYPE* pSoldier; - SOLDIERTYPE* pOtherSoldier; - MERCPROFILESTRUCT* pProfile; - BOOLEAN fSameGroupOnly; + SoldierID bMercID, bOtherID, bLastTeamID; + INT8 bOpinion = -1; + SOLDIERTYPE *pSoldier; + SOLDIERTYPE *pOtherSoldier; + MERCPROFILESTRUCT *pProfile; + BOOLEAN fSameGroupOnly; // anv: save merc id and his negative morale event for snitches std::vector snitcheventvector; @@ -1359,8 +1368,9 @@ void HandleSnitchCheck( void ) bLastTeamID = gTacticalStatus.Team[gbPlayerNum].bLastID; // loop through all mercs to calculate their morale - for ( pSoldier = MercPtrs[bMercID]; bMercID <= bLastTeamID; ++bMercID, pSoldier++ ) + for ( ; bMercID <= bLastTeamID; ++bMercID ) { + pSoldier = bMercID; //if the merc is active, in Arulco, not POW, not a vehicle if ( pSoldier && pSoldier->bActive && pSoldier->ubProfile != NO_PROFILE && !(pSoldier->bAssignment == IN_TRANSIT || @@ -1383,8 +1393,9 @@ void HandleSnitchCheck( void ) } // loop through all other mercs bOtherID = gTacticalStatus.Team[gbPlayerNum].bFirstID; - for ( pOtherSoldier = MercPtrs[bOtherID]; bOtherID <= bLastTeamID; ++bOtherID, pOtherSoldier++ ) + for ( ; bOtherID <= bLastTeamID; ++bOtherID ) { + pOtherSoldier = bOtherID; // skip past ourselves and all inactive mercs if ( bOtherID != bMercID && pOtherSoldier && pOtherSoldier->bActive && pOtherSoldier->ubProfile != NO_PROFILE && !(pOtherSoldier->bAssignment == IN_TRANSIT || @@ -1558,7 +1569,7 @@ void HandleSnitchesReports( std::vector& aVec ) void RememberSnitchableEvent( UINT8 ubTargetProfile, UINT8 ubSecondaryTargetProfile, BOOLEAN fSameGroupOnly, UINT8 ubEventType, std::vector& aVec ) { - UINT16 bSnitchID; + SoldierID bSnitchID; INT16 sSnitchingChance = 0; UINT8 ubSnitchProfile; SOLDIERTYPE * pSnitch; @@ -1570,8 +1581,9 @@ void RememberSnitchableEvent( UINT8 ubTargetProfile, UINT8 ubSecondaryTargetProf // loop through all other mercs bSnitchID = gTacticalStatus.Team[gbPlayerNum].bFirstID; - for ( pSnitch = MercPtrs[bSnitchID]; bSnitchID <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++bSnitchID, pSnitch++ ) + for ( ; bSnitchID <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++bSnitchID ) { + pSnitch = bSnitchID; ubSnitchProfile = pSnitch->ubProfile; // skip past ourselves and all inactive mercs if ( ProfileHasSkillTrait( ubSnitchProfile, SNITCH_NT ) && @@ -1703,10 +1715,10 @@ void DailyMoraleUpdate(SOLDIERTYPE *pSoldier) // Added by SANDRO BOOLEAN IsShowOffNearBy( SOLDIERTYPE * pSoldier ) { - UINT32 uiLoop; - SOLDIERTYPE * pTeammate; - BOOLEAN fOneException = FALSE; - BOOLEAN fYesHeIs = FALSE; + SoldierID uiLoop; + SOLDIERTYPE *pTeammate; + BOOLEAN fOneException = FALSE; + BOOLEAN fYesHeIs = FALSE; if (!pSoldier) { @@ -1717,9 +1729,9 @@ BOOLEAN IsShowOffNearBy( SOLDIERTYPE * pSoldier ) return( FALSE ); } - for ( uiLoop = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID; uiLoop <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID; uiLoop++) + for ( uiLoop = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID; uiLoop <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID; ++uiLoop ) { - pTeammate = MercPtrs[ uiLoop ]; + pTeammate = uiLoop; if ( pTeammate == NULL ) { continue; diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index 0b28c4e0..789a4b80 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -2276,14 +2276,13 @@ BOOLEAN HandleGotoNewGridNo( SOLDIERTYPE *pSoldier, BOOLEAN *pfKeepMoving, BOOLE // IF not in combat, stop them all if ( !( gTacticalStatus.uiFlags & INCOMBAT ) ) { - INT32 cnt2; - SOLDIERTYPE *pSoldier2; - - cnt2 = gTacticalStatus.Team[ gbPlayerNum ].bLastID; + SOLDIERTYPE *pSoldier2; + SoldierID id = gTacticalStatus.Team[ gbPlayerNum ].bLastID; // look for all mercs on the same team, - for ( pSoldier2 = MercPtrs[ cnt2 ]; cnt2 >= gTacticalStatus.Team[ gbPlayerNum ].bFirstID; cnt2-- ,pSoldier2-- ) + for ( ; id >= gTacticalStatus.Team[ gbPlayerNum ].bFirstID; --id ) { + pSoldier2 = id; if ( pSoldier2->bActive ) { pSoldier2->EVENT_StopMerc( pSoldier2->sGridNo, pSoldier2->ubDirection ); @@ -2983,14 +2982,13 @@ BOOLEAN HandleAtNewGridNo( SOLDIERTYPE *pSoldier, BOOLEAN *pfKeepMoving ) // IF not in combat, stop them all if ( !( gTacticalStatus.uiFlags & INCOMBAT ) ) { - INT32 cnt2; - SOLDIERTYPE *pSoldier2; - - cnt2 = gTacticalStatus.Team[ gbPlayerNum ].bLastID; + SOLDIERTYPE *pSoldier2; + SoldierID cnt2 = gTacticalStatus.Team[ gbPlayerNum ].bLastID; // look for all mercs on the same team, - for ( pSoldier2 = MercPtrs[ cnt2 ]; cnt2 >= gTacticalStatus.Team[ gbPlayerNum ].bFirstID; cnt2-- ,pSoldier2-- ) + for ( ; cnt2 >= gTacticalStatus.Team[ gbPlayerNum ].bFirstID; --cnt2 ) { + pSoldier2 = cnt2; if ( pSoldier2->bActive ) { pSoldier2->EVENT_StopMerc( pSoldier2->sGridNo, pSoldier2->ubDirection ); @@ -3230,17 +3228,17 @@ BOOLEAN HandleAtNewGridNo( SOLDIERTYPE *pSoldier, BOOLEAN *pfKeepMoving ) void SelectNextAvailSoldier( SOLDIERTYPE *pSoldier ) { - INT32 cnt; SOLDIERTYPE *pTeamSoldier; BOOLEAN fSoldierFound = FALSE; DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("SelectNextAvailSoldier")); // IF IT'S THE SELECTED GUY, MAKE ANOTHER SELECTED! - cnt = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID; + SoldierID id = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID; // look for all mercs on the same team, - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID; cnt++,pTeamSoldier++) + for ( ; id <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID; ++id ) { + pTeamSoldier = id; if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) ) { fSoldierFound = TRUE; @@ -3251,7 +3249,7 @@ void SelectNextAvailSoldier( SOLDIERTYPE *pSoldier ) if ( fSoldierFound ) { DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("SelectNextAvailSoldier: selectsoldier")); - SelectSoldier( cnt, FALSE, FALSE ); + SelectSoldier( id, FALSE, FALSE ); } else { @@ -3604,7 +3602,7 @@ void RebuildAllSoldierShadeTables( ) void HandlePlayerTeamMemberDeath( SOLDIERTYPE *pSoldier ) { - INT32 cnt; + SoldierID cnt; SoldierID iNewSelectedSoldier; SOLDIERTYPE *pTeamSoldier; BOOLEAN fMissionFailed = TRUE; @@ -3619,8 +3617,9 @@ void HandlePlayerTeamMemberDeath( SOLDIERTYPE *pSoldier ) cnt = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID; // look for all mercs on the same team, - 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 && pTeamSoldier->bInSector ) { iNewSelectedSoldier = cnt; @@ -3643,8 +3642,9 @@ void HandlePlayerTeamMemberDeath( SOLDIERTYPE *pSoldier ) // see if this was the friend of a living merc cnt = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID; - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID; cnt++,pTeamSoldier++) + for ( ; cnt <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID; ++cnt ) { + pTeamSoldier = cnt; if ( pTeamSoldier->bActive && pTeamSoldier->bInSector && pTeamSoldier->stats.bLife >= OKLIFE ) { bBuddyIndex = WhichBuddy( pTeamSoldier->ubProfile, pSoldier->ubProfile ); @@ -4245,19 +4245,18 @@ void HandleNPCTeamMemberDeath( SOLDIERTYPE *pSoldierOld ) CheckForEndOfBattle( FALSE ); } -UINT16 LastActiveTeamMember( UINT16 ubTeam ) +SoldierID LastActiveTeamMember( UINT16 ubTeam ) { - INT32 cnt; SOLDIERTYPE *pSoldier; - - cnt = gTacticalStatus.Team[ ubTeam ].bLastID; + SoldierID cnt = gTacticalStatus.Team[ ubTeam ].bLastID; // look for all mercs on the same team, - for ( pSoldier = MercPtrs[ cnt ]; cnt >= gTacticalStatus.Team[ ubTeam ].bFirstID; cnt-- ,pSoldier--) + for ( ; cnt >= gTacticalStatus.Team[ ubTeam ].bFirstID; --cnt) { + pSoldier = cnt; if ( pSoldier->bActive ) { - return( (UINT16)cnt ); + return( cnt ); } } @@ -4479,9 +4478,10 @@ void MakeCivHostile(SOLDIERTYPE *pSoldier) // rehandle sight for everybody SOLDIERTYPE* pTeamSoldier; - UINT16 iLoop = gTacticalStatus.Team[OUR_TEAM].bFirstID; - for ( pTeamSoldier = MercPtrs[iLoop]; iLoop <= gTacticalStatus.Team[CIV_TEAM].bLastID; ++iLoop, ++pTeamSoldier ) + SoldierID iLoop = gTacticalStatus.Team[OUR_TEAM].bFirstID; + for ( ; iLoop <= gTacticalStatus.Team[CIV_TEAM].bLastID; ++iLoop ) { + pTeamSoldier = iLoop; if ( pTeamSoldier->bActive && pTeamSoldier->bInSector && pTeamSoldier->stats.bLife > 0 ) { RecalculateOppCntsDueToNoLongerNeutral( pTeamSoldier ); @@ -4522,16 +4522,16 @@ UINT8 CivilianGroupMembersChangeSidesWithinProximity( SOLDIERTYPE * pAttacked ) { SOLDIERTYPE * pSoldier; UINT8 ubFirstProfile = NO_PROFILE; - UINT16 cnt; if ( pAttacked->ubCivilianGroup == NON_CIV_GROUP ) { return( pAttacked->ubProfile ); } - cnt = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; - for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; cnt++ ,pSoldier++ ) + SoldierID cnt = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; + for ( ; cnt <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ++cnt ) { + pSoldier = cnt; if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife && pSoldier->aiData.bNeutral ) { if ( pSoldier->ubCivilianGroup == pAttacked->ubCivilianGroup && pSoldier->ubBodyType != COW ) @@ -4565,7 +4565,6 @@ SOLDIERTYPE * CivilianGroupMemberChangesSides( SOLDIERTYPE * pAttacked ) SOLDIERTYPE * pNew; SOLDIERTYPE * pNewAttacked = pAttacked; SOLDIERTYPE * pSoldier; - UINT16 cnt; UINT8 ubFirstProfile = NO_PROFILE; if ( pAttacked->ubCivilianGroup == NON_CIV_GROUP ) @@ -4575,9 +4574,10 @@ SOLDIERTYPE * CivilianGroupMemberChangesSides( SOLDIERTYPE * pAttacked ) } // remove anyone (rebels) on our team and put them back in the civ team - cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; - for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; cnt++ ,pSoldier++) + SoldierID cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; + for ( ; cnt <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++cnt ) { + pSoldier = cnt; if (pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife) { if (pSoldier->ubCivilianGroup == pAttacked->ubCivilianGroup) @@ -4658,15 +4658,15 @@ SOLDIERTYPE * CivilianGroupMemberChangesSides( SOLDIERTYPE * pAttacked ) void CivilianGroupChangesSides( UINT8 ubCivilianGroup ) { // change civ group side due to external event (wall blowing up) - INT32 cnt; SOLDIERTYPE *pSoldier; gTacticalStatus.fCivGroupHostile[ ubCivilianGroup ] = CIV_GROUP_HOSTILE; // now change sides for anyone on the civ team - cnt = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; - for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; cnt++ ,pSoldier++) + SoldierID cnt = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; + for ( ; cnt <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ++cnt ) { + pSoldier = cnt; if (pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife && pSoldier->aiData.bNeutral) { if ( pSoldier->ubCivilianGroup == ubCivilianGroup && pSoldier->ubBodyType != COW ) @@ -4696,13 +4696,13 @@ void CivilianGroupChangesSides( UINT8 ubCivilianGroup ) void HickCowAttacked( SOLDIERTYPE * pNastyGuy, SOLDIERTYPE * pTarget ) { - INT32 cnt; - SOLDIERTYPE * pSoldier; + SOLDIERTYPE *pSoldier; // now change sides for anyone on the civ team - cnt = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; - for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; cnt++ ,pSoldier++) + SoldierID cnt = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; + for ( ; cnt <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ++cnt ) { + pSoldier = cnt; if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife && pSoldier->aiData.bNeutral && pSoldier->ubCivilianGroup == HICKS_CIV_GROUP ) { if ( SoldierToSoldierLineOfSightTest( pSoldier, pNastyGuy, TRUE ) ) @@ -4717,7 +4717,6 @@ void HickCowAttacked( SOLDIERTYPE * pNastyGuy, SOLDIERTYPE * pTarget ) void MilitiaChangesSides( ) { // make all the militia change sides - INT32 cnt; SOLDIERTYPE *pSoldier; if ( gTacticalStatus.Team[ MILITIA_TEAM ].bMenInSector == 0 ) @@ -4726,9 +4725,10 @@ void MilitiaChangesSides( ) } // remove anyone (rebels) on our team and put them back in the civ team - 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; + for ( ; cnt <= gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; ++cnt ) { + pSoldier = cnt; if (pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife) { if ( (gWorldSectorX == 0 && gWorldSectorY == 0) || !NumNonPlayerTeamMembersInSector( gWorldSectorX, gWorldSectorY, ENEMY_TEAM ) ) @@ -4757,15 +4757,14 @@ gTacticalStatus.fCivGroupHostile[ ubLoop ] = CIV_GROUP_HOSTILE; UINT16 NumActiveAndConsciousTeamMembers( UINT8 ubTeam ) { - INT32 cnt; SOLDIERTYPE *pSoldier; UINT16 ubCount = 0; - - cnt = gTacticalStatus.Team[ ubTeam ].bFirstID; + SoldierID cnt = gTacticalStatus.Team[ ubTeam ].bFirstID; // look for all mercs on the same team, - for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ ubTeam ].bLastID; cnt++,pSoldier++) + for ( ; cnt <= gTacticalStatus.Team[ ubTeam ].bLastID; ++cnt ) { + pSoldier = cnt; if ( OK_CONTROLLABLE_MERC( pSoldier) ) { ubCount++; @@ -4778,16 +4777,14 @@ UINT16 NumActiveAndConsciousTeamMembers( UINT8 ubTeam ) SoldierID FindNextActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLife, BOOLEAN fOnlyRegularMercs ) { - UINT16 bLastTeamID; - UINT16 cnt; SOLDIERTYPE *pTeamSoldier; - - cnt = pSoldier->ubID + 1; - bLastTeamID = gTacticalStatus.Team[ pSoldier->bTeam ].bLastID; + SoldierID cnt = pSoldier->ubID + 1; + SoldierID bLastTeamID = gTacticalStatus.Team[ pSoldier->bTeam ].bLastID; // look for all mercs on the same team, - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= bLastTeamID; cnt++,pTeamSoldier++) + for ( ; cnt <= bLastTeamID; ++cnt ) { + pTeamSoldier = cnt; if ( fOnlyRegularMercs ) { if ( pTeamSoldier->bActive && ( AM_AN_EPC( pTeamSoldier ) || AM_A_ROBOT( pTeamSoldier ) ) ) @@ -4817,8 +4814,9 @@ SoldierID FindNextActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLes cnt = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID; bLastTeamID = pSoldier->ubID; - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= bLastTeamID; cnt++,pTeamSoldier++) + for ( ; cnt <= bLastTeamID; ++cnt ) { + pTeamSoldier = cnt; if ( fOnlyRegularMercs ) { if ( pTeamSoldier->bActive && ( AM_AN_EPC( pTeamSoldier ) || AM_A_ROBOT( pTeamSoldier ) ) ) @@ -4892,17 +4890,16 @@ SOLDIERTYPE *FindNextActiveSquad( SOLDIERTYPE *pSoldier ) SoldierID FindPrevActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLife, BOOLEAN fOnlyRegularMercs ) { - UINT16 bLastTeamID; - INT32 cnt; SOLDIERTYPE *pTeamSoldier; // loop back - bLastTeamID = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID; - cnt = pSoldier->ubID - 1; + SoldierID bLastTeamID = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID; + SoldierID cnt = pSoldier->ubID - 1; - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt >= bLastTeamID; cnt--,pTeamSoldier-- ) + for ( ; cnt >= bLastTeamID; --cnt ) { + pTeamSoldier = cnt; if ( fOnlyRegularMercs ) { if ( AM_AN_EPC( pTeamSoldier ) || AM_A_ROBOT( pTeamSoldier ) ) @@ -4932,8 +4929,9 @@ SoldierID FindPrevActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLes cnt = gTacticalStatus.Team[ pSoldier->bTeam ].bLastID; // look for all mercs on the same team, - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt >= bLastTeamID; cnt--,pTeamSoldier-- ) + for ( ; cnt >= bLastTeamID; --cnt ) { + pTeamSoldier = cnt; if ( fOnlyRegularMercs ) { if ( AM_AN_EPC( pTeamSoldier ) || AM_A_ROBOT( pTeamSoldier ) ) @@ -4966,16 +4964,16 @@ SoldierID FindPrevActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLes BOOLEAN CheckForPlayerTeamInMissionExit( ) { - INT32 cnt; SOLDIERTYPE *pSoldier; UINT16 bGuysIn = 0; // End the turn of player charactors - 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 ( pSoldier->bActive && pSoldier->stats.bLife >= OKLIFE ) { if ( pSoldier->flags.fInMissionExitNode ) @@ -5420,23 +5418,23 @@ BOOLEAN IsLocationSittableExcludingPeople( INT32 iMapIndex, BOOLEAN fOnRoof ) } -BOOLEAN TeamMemberNear(INT8 bTeam, INT32 sGridNo, INT32 iRange) +BOOLEAN TeamMemberNear( INT8 bTeam, INT32 sGridNo, INT32 iRange ) { - UINT16 bLoop; - SOLDIERTYPE * pSoldier; + SOLDIERTYPE *pSoldier; - for (bLoop=gTacticalStatus.Team[bTeam].bFirstID, pSoldier=MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[bTeam].bLastID; ++bLoop, pSoldier++) - { - if (pSoldier->bActive && pSoldier->bInSector && (pSoldier->stats.bLife >= OKLIFE) && !( pSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) ) - { - if (PythSpacesAway(pSoldier->sGridNo,sGridNo) <= iRange) - { - return(TRUE); - } - } - } + for ( SoldierID bLoop = gTacticalStatus.Team[bTeam].bFirstID; bLoop <= gTacticalStatus.Team[bTeam].bLastID; ++bLoop ) + { + pSoldier = bLoop; + if ( pSoldier->bActive && pSoldier->bInSector && (pSoldier->stats.bLife >= OKLIFE) && !(pSoldier->flags.uiStatusFlags & SOLDIER_GASSED) ) + { + if ( PythSpacesAway( pSoldier->sGridNo, sGridNo ) <= iRange ) + { + return(TRUE); + } + } + } - return(FALSE); + return(FALSE); } INT32 FindAdjacentGridEx( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 *pubDirection, INT32 *psAdjustedGridNo, BOOLEAN fForceToPerson, BOOLEAN fDoor, bool allow_diagonal ) @@ -6198,7 +6196,6 @@ BOOLEAN UIOKMoveDestination( SOLDIERTYPE *pSoldier, INT32 usMapPos ) void HandleTeamServices( UINT8 ubTeamNum ) { - INT32 cnt; SOLDIERTYPE *pTeamSoldier, *pTargetSoldier; UINT32 uiPointsUsed; SoldierID usSoldierIndex; @@ -6207,11 +6204,12 @@ void HandleTeamServices( UINT8 ubTeamNum ) BOOLEAN fDone; // IF IT'S THE SELECTED GUY, MAKE ANOTHER SELECTED! - cnt = gTacticalStatus.Team[ ubTeamNum ].bFirstID; + SoldierID cnt = gTacticalStatus.Team[ ubTeamNum ].bFirstID; // look for all mercs on the same team, - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ ubTeamNum ].bLastID; ++cnt, pTeamSoldier++) + for ( ; cnt <= gTacticalStatus.Team[ ubTeamNum ].bLastID; ++cnt ) { + pTeamSoldier = cnt; if ( pTeamSoldier->stats.bLife >= OKLIFE && pTeamSoldier->bActive && pTeamSoldier->bInSector ) { fDone = FALSE; @@ -6502,7 +6500,6 @@ void CommonEnterCombatModeCode( ) void EnterCombatMode( UINT8 ubStartingTeam ) { - UINT32 cnt; SOLDIERTYPE *pTeamSoldier; DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"EnterCombatMode"); @@ -6547,8 +6544,9 @@ void EnterCombatMode( UINT8 ubStartingTeam ) { DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"EnterCombatMode continuing... nobody selected"); // OK, look through and find one.... - for ( cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID, pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt, pTeamSoldier++ ) + for ( SoldierID cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt ) { + pTeamSoldier = cnt; if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->aiData.bOppCnt > 0 ) { DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"EnterCombatMode continuing... select soldier"); @@ -6755,9 +6753,8 @@ extern SoldierID gfLastMercTalkedAboutKillingID; BOOLEAN SoldierHasSeenEnemiesLastFewTurns( SOLDIERTYPE *pTeamSoldier ) { - INT32 cnt2; - SOLDIERTYPE *pSoldier; - INT32 cnt; + SOLDIERTYPE *pSoldier; + INT32 cnt; for ( cnt = 0; cnt < MAXTEAMS; cnt++ ) { @@ -6766,9 +6763,10 @@ BOOLEAN SoldierHasSeenEnemiesLastFewTurns( SOLDIERTYPE *pTeamSoldier ) { // check this team for possible enemies - cnt2 = gTacticalStatus.Team[ cnt ].bFirstID; - for ( pSoldier = MercPtrs[ cnt2 ]; cnt2 <= gTacticalStatus.Team[ cnt ].bLastID; cnt2++, pSoldier++ ) + SoldierID cnt2 = gTacticalStatus.Team[ cnt ].bFirstID; + for ( ; cnt2 <= gTacticalStatus.Team[ cnt ].bLastID; ++cnt2 ) { + pSoldier = cnt2; if ( pSoldier->bActive && pSoldier->bInSector && ( pSoldier->bTeam == gbPlayerNum || pSoldier->stats.bLife >= OKLIFE ) ) { if ( !CONSIDERED_NEUTRAL( pTeamSoldier, pSoldier ) && ( pTeamSoldier->bSide != pSoldier->bSide ) ) @@ -6867,16 +6865,16 @@ void SayBattleSoundFromAnyBodyInSector( INT32 iBattleSnd ) UINT16 ubNumMercs = 0; UINT16 ubChosenMerc; SOLDIERTYPE *pTeamSoldier; - INT32 cnt; // Loop through all our guys and randomly say one from someone in our sector // set up soldier ptr as first element in mercptrs list - cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; + SoldierID cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; // run through list - 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... if ( OK_INSECTOR_MERC( pTeamSoldier ) && !AM_AN_EPC( pTeamSoldier ) && !( pTeamSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) && !(AM_A_ROBOT( pTeamSoldier )) && !pTeamSoldier->flags.fMercAsleep ) { @@ -6888,11 +6886,10 @@ void SayBattleSoundFromAnyBodyInSector( INT32 iBattleSnd ) // If we are > 0 if ( ubNumMercs > 0 ) { - ubChosenMerc = (UINT16)Random( ubNumMercs ); + ubChosenMerc = ubMercsInSector[ (UINT16)Random( ubNumMercs ) ]; MercPtrs[ ubChosenMerc ]->DoMercBattleSound( (UINT8)iBattleSnd ); } - } @@ -7514,12 +7511,13 @@ BOOLEAN CheckForEndOfBattle( BOOLEAN fAnEnemyRetreated ) if (fBattleLost) { // sevenfm: count alive/dead/not covert mercs in sector/retreating from sector - UINT16 ubLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; + SoldierID ubLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; BOOLEAN fFoundNotCovertMerc = FALSE; BOOLEAN fFoundAliveMerc = FALSE; BOOLEAN fFoundDeadMerc = FALSE; - for (pTeamSoldier = MercPtrs[ubLoop]; ubLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ubLoop++, pTeamSoldier++) + for (; ubLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++ubLoop ) { + pTeamSoldier = ubLoop; if (pTeamSoldier->bActive) { if (pTeamSoldier->bInSector || @@ -7833,9 +7831,10 @@ BOOLEAN CheckForEndOfBattle( BOOLEAN fAnEnemyRetreated ) // 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; @@ -7865,8 +7864,9 @@ BOOLEAN CheckForEndOfBattle( BOOLEAN fAnEnemyRetreated ) // Loop through all civs and restore them to peaceful status cnt = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; - 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; @@ -8172,12 +8172,12 @@ void CycleVisibleEnemiesBackward( SOLDIERTYPE *pSrcSoldier ) UINT32 CountNonVehiclesOnPlayerTeam( ) { - UINT32 cnt; - SOLDIERTYPE *pSoldier; - UINT32 bNumber = 0; + SOLDIERTYPE *pSoldier; + UINT32 bNumber = 0; - for ( cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID, pSoldier = MercPtrs[ cnt ]; cnt <= (UINT32)( gTacticalStatus.Team[ gbPlayerNum ].bLastID ); cnt++, pSoldier++ ) + for ( SoldierID cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt ) { + pSoldier = cnt; if ( pSoldier->bActive && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) ) { bNumber++; @@ -8185,7 +8185,6 @@ UINT32 CountNonVehiclesOnPlayerTeam( ) } return( bNumber ); - } @@ -8415,18 +8414,18 @@ UINT16 NumCapableEnemyInSector( ) BOOLEAN CheckForLosingEndOfBattle( ) { SOLDIERTYPE *pTeamSoldier; - INT32 cnt = 0; - UINT16 bNumDead = 0, bNumNotOK = 0, bNumInBattle = 0, bNumNotOKRealMercs = 0; - BOOLEAN fMadeCorpse; - BOOLEAN fDoCapture = FALSE; - BOOLEAN fOnlyEPCsLeft = TRUE; - BOOLEAN fMilitiaInSector = FALSE; + UINT16 bNumDead = 0, bNumNotOK = 0, bNumInBattle = 0, bNumNotOKRealMercs = 0; + BOOLEAN fMadeCorpse; + BOOLEAN fDoCapture = FALSE; + BOOLEAN fOnlyEPCsLeft = TRUE; + BOOLEAN fMilitiaInSector = FALSE; // ATE: Check for MILITIA - we won't lose if we have some..... - 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->bSide == gbPlayerNum ) { if ( pTeamSoldier->stats.bLife >= OKLIFE ) @@ -8443,8 +8442,9 @@ BOOLEAN CheckForLosingEndOfBattle( ) cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; // look for all mercs on the same team, - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++,pTeamSoldier++) + for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt ) { + pTeamSoldier = cnt; // Are we active and in sector..... if ( pTeamSoldier->bActive && pTeamSoldier->bInSector && !( pTeamSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) ) { @@ -8529,8 +8529,9 @@ BOOLEAN CheckForLosingEndOfBattle( ) // IF IT'S THE SELECTED GUY, MAKE ANOTHER SELECTED! cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++,pTeamSoldier++) + for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt ) { + pTeamSoldier = cnt; // Are we active and in sector..... if ( pTeamSoldier->bActive && pTeamSoldier->bInSector ) { @@ -9555,7 +9556,6 @@ SOLDIERTYPE *InternalReduceAttackBusyCount( ) SOLDIERTYPE *pSoldier; SOLDIERTYPE *pTarget; BOOLEAN fEnterCombat = FALSE; - UINT32 cnt; SoldierID ubID; @@ -9604,14 +9604,13 @@ SOLDIERTYPE *InternalReduceAttackBusyCount( ) } else { - for (cnt = gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bFirstID; - cnt <= gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bLastID; - cnt++) + for ( SoldierID id = gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bFirstID; + id <= gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bLastID; + ++id) { - if (MercPtrs[ cnt ] && - MercPtrs[ cnt ]->flags.uiStatusFlags & SOLDIER_UNDERAICONTROL) + if (id != NOBODY && id->flags.uiStatusFlags & SOLDIER_UNDERAICONTROL) { - pSoldier = MercPtrs[ cnt ]; + pSoldier = id; break; } } @@ -9712,14 +9711,12 @@ SOLDIERTYPE *InternalReduceAttackBusyCount( ) { // Loop through our team, make guys who can see this fly away.... { - UINT32 cnt; - SOLDIERTYPE *pTeamSoldier; - UINT8 ubTeam; + SOLDIERTYPE *pTeamSoldier; + UINT8 ubTeam = pTarget->bTeam; - ubTeam = pTarget->bTeam; - - for ( cnt = gTacticalStatus.Team[ ubTeam ].bFirstID, pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ ubTeam ].bLastID; cnt++, pTeamSoldier++ ) + for ( SoldierID cnt = gTacticalStatus.Team[ ubTeam ].bFirstID; cnt <= gTacticalStatus.Team[ ubTeam ].bLastID; ++cnt ) { + pTeamSoldier = cnt; if ( pTeamSoldier->bActive && pTeamSoldier->bInSector ) { if ( pTeamSoldier->ubBodyType == CROW ) @@ -9859,15 +9856,16 @@ SOLDIERTYPE *InternalReduceAttackBusyCount( ) if ( gTacticalStatus.uiFlags & CHECK_SIGHT_AT_END_OF_ATTACK ) { - UINT16 ubLoop; + SoldierID ubLoop; SOLDIERTYPE * pSightSoldier; AllTeamsLookForAll( FALSE ); // call fov code ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( pSightSoldier = MercPtrs[ ubLoop ]; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++, pSightSoldier++ ) + for ( ; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++ubLoop ) { + pSightSoldier = ubLoop; if ( pSightSoldier->bActive && pSightSoldier->bInSector ) { RevealRoofsAndItems( pSightSoldier, TRUE, FALSE, pSightSoldier->pathing.bLevel, FALSE ); @@ -9936,7 +9934,7 @@ SOLDIERTYPE *InternalReduceAttackBusyCount( ) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Reset various flags and values that should be 0 once the action is overwith - for (cnt = 0; cnt < guiNumMercSlots; cnt++) + for (UINT32 cnt = 0; cnt < guiNumMercSlots; cnt++) { pSoldier = MercSlots[ cnt ]; if ( pSoldier ) @@ -10241,9 +10239,9 @@ void EndBattleWithUnconsciousGuysCallback( UINT8 bExitValue ) void InitializeTacticalStatusAtBattleStart( ) { - INT8 bLoop; - INT32 cnt; - SOLDIERTYPE * pSoldier; + INT8 bLoop; + SoldierID cnt; + SOLDIERTYPE *pSoldier; gTacticalStatus.ubArmyGuysKilled = 0; gTacticalStatus.bOriginalSizeOfEnemyForce = 0; @@ -10257,10 +10255,10 @@ void InitializeTacticalStatusAtBattleStart( ) gTacticalStatus.ubPanicTolerance[ bLoop ] = 0; } - for( cnt = 0; cnt < MAXTEAMS; cnt++ ) + for( bLoop = 0; bLoop < MAXTEAMS; bLoop++ ) { - gTacticalStatus.Team[ cnt ].ubLastMercToRadio = NOBODY; - gTacticalStatus.Team[ cnt ].bAwareOfOpposition = FALSE; + gTacticalStatus.Team[ bLoop ].ubLastMercToRadio = NOBODY; + gTacticalStatus.Team[ bLoop ].bAwareOfOpposition = FALSE; } gTacticalStatus.ubTheChosenOne = NOBODY; @@ -10268,19 +10266,18 @@ void InitializeTacticalStatusAtBattleStart( ) ClearIntList(); // make sure none of our guys have leftover shock values etc - for ( cnt = gTacticalStatus.Team[ 0 ].bFirstID; cnt <= gTacticalStatus.Team[ 0 ].bLastID; cnt++ ) + for ( cnt = gTacticalStatus.Team[ 0 ].bFirstID; cnt <= gTacticalStatus.Team[ 0 ].bLastID; ++cnt ) { - pSoldier = MercPtrs[ cnt ]; + pSoldier = cnt; pSoldier->aiData.bShock = 0; pSoldier->bTilesMoved = 0; } // loop through everyone; clear misc flags - for ( cnt = 0; cnt <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; cnt++ ) + for ( cnt = 0; cnt <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ++cnt ) { - MercPtrs[ cnt ]->ubMiscSoldierFlags = 0; + cnt->ubMiscSoldierFlags = 0; } - } @@ -10329,16 +10326,15 @@ void CaptureTimerCallback( ) void DoPOWPathChecks( ) { - INT32 iLoop; SOLDIERTYPE *pSoldier; BOOLEAN is_this_tixa = (gWorldSectorX == gModSettings.ubTixaPrisonSectorX && gWorldSectorY == gModSettings.ubTixaPrisonSectorY); // loop through all mercs on our team and if they are POWs in sector, do POW path check and // put on a squad if available - for ( iLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; iLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; iLoop++ ) + for ( SoldierID iLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; iLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++iLoop ) { - pSoldier = MercPtrs[ iLoop ]; + pSoldier = iLoop; if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->bAssignment == ASSIGNMENT_POW ) { @@ -10378,7 +10374,6 @@ void DoPOWPathChecks( ) BOOLEAN HostileCiviliansPresent( ) { - INT32 iLoop; SOLDIERTYPE * pSoldier; if ( gTacticalStatus.Team[ CIV_TEAM ].bTeamActive == FALSE ) @@ -10386,9 +10381,9 @@ BOOLEAN HostileCiviliansPresent( ) return( FALSE ); } - for ( iLoop = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; iLoop <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; iLoop++ ) + for ( SoldierID iLoop = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; iLoop <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ++iLoop ) { - pSoldier = MercPtrs[ iLoop ]; + pSoldier = iLoop; if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife > 0 && !pSoldier->aiData.bNeutral ) { @@ -10401,17 +10396,16 @@ BOOLEAN HostileCiviliansPresent( ) BOOLEAN HostileCiviliansWithGunsPresent( ) { - INT32 iLoop; - SOLDIERTYPE * pSoldier; + SOLDIERTYPE *pSoldier; if ( gTacticalStatus.Team[ CIV_TEAM ].bTeamActive == FALSE ) { return( FALSE ); } - for ( iLoop = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; iLoop <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; iLoop++ ) + for ( SoldierID iLoop = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; iLoop <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ++iLoop ) { - pSoldier = MercPtrs[ iLoop ]; + pSoldier = iLoop; if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife > 0 && !pSoldier->aiData.bNeutral ) { @@ -10428,17 +10422,16 @@ BOOLEAN HostileCiviliansWithGunsPresent( ) BOOLEAN HostileBloodcatsPresent( ) { - INT32 iLoop; - SOLDIERTYPE * pSoldier; + SOLDIERTYPE *pSoldier; if ( gTacticalStatus.Team[ CREATURE_TEAM ].bTeamActive == FALSE ) { return( FALSE ); } - for ( iLoop = gTacticalStatus.Team[ CREATURE_TEAM ].bFirstID; iLoop <= gTacticalStatus.Team[ CREATURE_TEAM ].bLastID; iLoop++ ) + for ( SoldierID iLoop = gTacticalStatus.Team[ CREATURE_TEAM ].bFirstID; iLoop <= gTacticalStatus.Team[ CREATURE_TEAM ].bLastID; ++iLoop ) { - pSoldier = MercPtrs[ iLoop ]; + pSoldier = iLoop; //KM : Aug 11, 1999 -- Patch fix: Removed the check for bNeutral. Bloodcats automatically become hostile // on site. Because the check used to be there, it was possible to get into a 2nd battle elsewhere @@ -10454,17 +10447,16 @@ BOOLEAN HostileBloodcatsPresent( ) BOOLEAN HostileZombiesPresent( ) { - INT32 iLoop; - SOLDIERTYPE * pSoldier; + SOLDIERTYPE *pSoldier; if ( gTacticalStatus.Team[ CREATURE_TEAM ].bTeamActive == FALSE ) { return( FALSE ); } - for ( iLoop = gTacticalStatus.Team[ CREATURE_TEAM ].bFirstID; iLoop <= gTacticalStatus.Team[ CREATURE_TEAM ].bLastID; ++iLoop ) + for ( SoldierID iLoop = gTacticalStatus.Team[ CREATURE_TEAM ].bFirstID; iLoop <= gTacticalStatus.Team[ CREATURE_TEAM ].bLastID; ++iLoop ) { - pSoldier = MercPtrs[ iLoop ]; + pSoldier = iLoop; if ( pSoldier && pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife > 0 && pSoldier->IsZombie( ) ) { @@ -10484,9 +10476,9 @@ BOOLEAN HostileCreaturesPresent() return( FALSE ); } - for ( INT32 iLoop = gTacticalStatus.Team[CREATURE_TEAM].bFirstID; iLoop <= gTacticalStatus.Team[CREATURE_TEAM].bLastID; ++iLoop ) + for ( SoldierID iLoop = gTacticalStatus.Team[CREATURE_TEAM].bFirstID; iLoop <= gTacticalStatus.Team[CREATURE_TEAM].bLastID; ++iLoop ) { - pSoldier = MercPtrs[iLoop]; + pSoldier = iLoop; if ( pSoldier && pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife > 0 ) { @@ -10505,7 +10497,6 @@ void HandleCreatureTenseQuote( ) UINT16 ubNumMercs = 0; UINT16 ubChosenMerc; SOLDIERTYPE *pTeamSoldier; - INT32 cnt; INT32 uiTime; @@ -10523,11 +10514,12 @@ void HandleCreatureTenseQuote( ) gTacticalStatus.uiCreatureTenseQuoteLastUpdate = uiTime; // set up soldier ptr as first element in mercptrs list - cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; + SoldierID cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; // run through list - 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... if ( OK_INSECTOR_MERC( pTeamSoldier ) && !AM_AN_EPC( pTeamSoldier ) && !( pTeamSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) && !(AM_A_ROBOT( pTeamSoldier )) && !pTeamSoldier->flags.fMercAsleep ) { @@ -10652,9 +10644,9 @@ INT8 CheckStatusNearbyFriendlies( SOLDIERTYPE *pSoldier ) INT8 bLevelDifference = 0; // Run through each friendly. - for ( UINT16 iCounter = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID ; iCounter <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID ; iCounter ++ ) + for ( SoldierID iCounter = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID ; iCounter <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID ; ++iCounter ) { - pLeader = MercPtrs[ iCounter ]; + pLeader = iCounter; // Make sure that character is alive, not too shocked, and conscious, and of higher experience level // than the character being suppressed. if (pLeader != pSoldier && pLeader->bActive && pLeader->aiData.bShock < pLeader->stats.bLeadership/5 && @@ -10744,9 +10736,9 @@ INT8 CheckStatusNearbyFriendliesSimple(SOLDIERTYPE *pSoldier) } // Run through each friendly. - for (UINT16 ubFriend = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID ; ubFriend <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID ; ubFriend ++) + for ( SoldierID ubFriend = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID ; ubFriend <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID ; ++ubFriend) { - pFriend = MercPtrs[ ubFriend ]; + pFriend = ubFriend; // Make sure that character is alive and active if (pFriend && @@ -11065,10 +11057,11 @@ void AttemptToCapturePlayerSoldiers() BeginCaptureSquence(); const UINT8 currentPOWs = gStrategicStatus.ubNumCapturedForRescue; // Do capture - UINT32 i = gTacticalStatus.Team[gbPlayerNum].bFirstID; - UINT32 const lastID = gTacticalStatus.Team[gbPlayerNum].bLastID; - for (SOLDIERTYPE* pSoldier = MercPtrs[i]; i <= lastID; ++i, ++pSoldier) + SoldierID i = gTacticalStatus.Team[gbPlayerNum].bFirstID; + SoldierID const lastID = gTacticalStatus.Team[gbPlayerNum].bLastID; + for ( ; i <= lastID; ++i ) { + SOLDIERTYPE *pSoldier = i; // Are we active and in sector if (pSoldier->bActive && pSoldier->bInSector && pSoldier->bAssignment != ASSIGNMENT_POW) { @@ -11100,10 +11093,11 @@ void AttemptToCapturePlayerSoldiers() // If we have any remaining active mercs in sector after capture, give them a chance to escape from the clutches of Deidranna's soldiers! bool activeMercs = false; - UINT32 i = gTacticalStatus.Team[gbPlayerNum].bFirstID; - UINT32 lastId = gTacticalStatus.Team[gbPlayerNum].bLastID; - for (SOLDIERTYPE* pSoldier = MercPtrs[i]; i <= lastId; ++i, ++pSoldier) + SoldierID i = gTacticalStatus.Team[gbPlayerNum].bFirstID; + SoldierID lastId = gTacticalStatus.Team[gbPlayerNum].bLastID; + for ( ; i <= lastId; ++i ) { + SOLDIERTYPE *pSoldier = i; // Are we active and in sector const bool inSector = (pSoldier->sSectorX == gWorldSectorX && pSoldier->sSectorY == gWorldSectorY && pSoldier->bSectorZ == gbWorldSectorZ); if (pSoldier->bActive && inSector && pSoldier->stats.bLife >= OKLIFE && pSoldier->bAssignment != ASSIGNMENT_POW) @@ -11126,7 +11120,6 @@ void AttemptToCapturePlayerSoldiers() void PrisonerSurrenderMessageBoxCallBack( UINT8 ubExitValue ) { SOLDIERTYPE *pSoldier = NULL; - UINT32 uiCnt=0; BOOLEAN success = FALSE; if ( ubExitValue == 1 ) @@ -11148,10 +11141,11 @@ void PrisonerSurrenderMessageBoxCallBack( UINT8 ubExitValue ) UINT32 enemysidestrength = 0; // player team - UINT32 firstid = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - UINT32 lastid = gTacticalStatus.Team[ gbPlayerNum ].bLastID; - for ( uiCnt = firstid, pSoldier = MercPtrs[ uiCnt ]; uiCnt <= lastid; ++uiCnt, ++pSoldier) + SoldierID id = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; + SoldierID lastid = gTacticalStatus.Team[ gbPlayerNum ].bLastID; + for ( ; id <= lastid; ++id ) { + pSoldier = id; if( pSoldier->bActive && ( pSoldier->sSectorX == gWorldSectorX ) && ( pSoldier->sSectorY == gWorldSectorY ) && ( pSoldier->bSectorZ == gbWorldSectorZ) ) { // if we are disguised as a civilian, the enemy does not take us into the equation - he does not consider us @@ -11167,10 +11161,11 @@ void PrisonerSurrenderMessageBoxCallBack( UINT8 ubExitValue ) } // militia team - firstid = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID; + id = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID; lastid = gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; - for ( uiCnt = firstid, pSoldier = MercPtrs[ uiCnt ]; uiCnt <= lastid; ++uiCnt, ++pSoldier) + for ( ; id <= lastid; ++id ) { + pSoldier = id; if( pSoldier->bActive && ( pSoldier->sSectorX == gWorldSectorX ) && ( pSoldier->sSectorY == gWorldSectorY ) && ( pSoldier->bSectorZ == gbWorldSectorZ) ) { playersidestrength += pSoldier->GetSurrenderStrength(); @@ -11190,10 +11185,12 @@ void PrisonerSurrenderMessageBoxCallBack( UINT8 ubExitValue ) BOOLEAN fNoSurrender = FALSE; // shadooow: rewritten to only check soldiers from the same team - firstid = gTacticalStatus.Team[pSoldierToSurrender->bTeam].bFirstID; + SoldierID firstid = gTacticalStatus.Team[pSoldierToSurrender->bTeam].bFirstID; lastid = gTacticalStatus.Team[pSoldierToSurrender->bTeam].bLastID; - for (uiCnt = firstid, pSoldier = MercPtrs[uiCnt]; uiCnt <= lastid; ++uiCnt, ++pSoldier) + + for (SoldierID id = firstid; id <= lastid; ++id ) { + pSoldier = id; if (pSoldier->bActive && (pSoldier->sSectorX == gWorldSectorX) && (pSoldier->sSectorY == gWorldSectorY) && (pSoldier->bSectorZ == gbWorldSectorZ)) { if (pSoldierToSurrender->bTeam == CIV_TEAM) @@ -11233,8 +11230,9 @@ void PrisonerSurrenderMessageBoxCallBack( UINT8 ubExitValue ) if ( !fNoSurrender && playersidestrength >= gGameExternalOptions.fSurrenderMultiplier * enemysidestrength ) { // it is enough to simply set all soldiers to captured - for ( uiCnt = firstid, pSoldier = MercPtrs[ uiCnt ]; uiCnt <= lastid; ++uiCnt, ++pSoldier) + for ( SoldierID id = firstid; id <= lastid; ++id ) { + pSoldier = id; if( pSoldier->bActive && ( pSoldier->sSectorX == gWorldSectorX ) && ( pSoldier->sSectorY == gWorldSectorY ) && ( pSoldier->bSectorZ == gbWorldSectorZ) ) { // can this guy be captured? @@ -11355,9 +11353,9 @@ void CheckChatPartners() SOLDIERTYPE* pSoldier = NULL; - for ( int 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 && pSoldier->bVisible && pSoldier->usChatPartnerID != NOBODY && pSoldier->usChatPartnerID->bVisible ) { @@ -11448,11 +11446,11 @@ void TeamDropAll(UINT8 bTeam, BOOLEAN fForce) #endif SOLDIERTYPE *pSoldier; - UINT32 uiCnt = 0; - UINT32 firstid = gTacticalStatus.Team[ bTeam ].bFirstID; - UINT32 lastid = gTacticalStatus.Team[ bTeam ].bLastID; - for ( uiCnt = firstid, pSoldier = MercPtrs[ uiCnt ]; uiCnt <= lastid; ++uiCnt, ++pSoldier) + SoldierID id = gTacticalStatus.Team[ bTeam ].bFirstID; + SoldierID lastid = gTacticalStatus.Team[ bTeam ].bLastID; + for ( ; id <= lastid; ++id ) { + pSoldier = id; // if soldier is in the current sector, drop all equipment (that has the TAKEN_BY_MILITIA-flag set) if( pSoldier->bActive && ( pSoldier->sSectorX == gWorldSectorX ) && ( pSoldier->sSectorY == gWorldSectorY ) && ( pSoldier->bSectorZ == gbWorldSectorZ) ) { @@ -11479,11 +11477,11 @@ void TeamRestock(UINT8 bTeam) #endif SOLDIERTYPE *pSoldier; - UINT32 uiCnt = 0; - UINT32 firstid = gTacticalStatus.Team[ bTeam ].bFirstID; - UINT32 lastid = gTacticalStatus.Team[ bTeam ].bLastID; - for ( uiCnt = firstid, pSoldier = MercPtrs[ uiCnt ]; uiCnt <= lastid; ++uiCnt, ++pSoldier) + SoldierID id = gTacticalStatus.Team[ bTeam ].bFirstID; + SoldierID lastid = gTacticalStatus.Team[ bTeam ].bLastID; + for ( ; id <= lastid; ++id ) { + pSoldier = id; if( pSoldier->bActive && ( pSoldier->sSectorX == gWorldSectorX ) && ( pSoldier->sSectorY == gWorldSectorY ) && ( pSoldier->bSectorZ == gbWorldSectorZ) ) { // the function fills a createstruct, so create one @@ -11539,9 +11537,9 @@ BOOLEAN IsProfileInUse(UINT8 usTeam, INT8 aType, UINT16 aNr) } SOLDIERTYPE* pSoldier = NULL; - for( INT32 i = gTacticalStatus.Team[ usTeam ].bFirstID; i <= gTacticalStatus.Team[ usTeam ].bLastID; ++i ) + for( SoldierID i = gTacticalStatus.Team[ usTeam ].bFirstID; i <= gTacticalStatus.Team[ usTeam ].bLastID; ++i ) { - pSoldier = MercPtrs[ i ]; + pSoldier = i; if ( pSoldier && pSoldier->ubSoldierClass == searchedclass && pSoldier->usSoldierProfile == aNr ) return TRUE; @@ -11665,13 +11663,13 @@ INT8 CalcEffectiveShockLevel( SOLDIERTYPE * pSoldier ) // Flugente: count number of enemy officers UINT16 HighestEnemyOfficersInSector( UINT8& aType ) { - SOLDIERTYPE* pSoldier; - INT32 cnt = 0; - UINT16 num = 0; - UINT8 type = OFFICER_NONE; + SOLDIERTYPE *pSoldier; + UINT16 num = 0; + UINT8 type = OFFICER_NONE; - for ( cnt = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID, pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[ ENEMY_TEAM ].bLastID; pSoldier++, ++cnt ) + for ( SoldierID cnt = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; cnt <= gTacticalStatus.Team[ ENEMY_TEAM ].bLastID; ++cnt ) { + pSoldier = cnt; if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife > 0 ) { // count officers, but do not count those that we have already captured @@ -11691,12 +11689,12 @@ UINT16 HighestEnemyOfficersInSector( UINT8& aType ) // count all soldiers in the current sector that have a specific flag set UINT16 NumSoldiersWithFlagInSector( UINT8 aTeam, UINT32 aFlag ) { - SOLDIERTYPE* pSoldier; - INT32 cnt = 0; - UINT16 num = 0; + SOLDIERTYPE *pSoldier; + UINT16 num = 0; - for ( cnt = gTacticalStatus.Team[aTeam].bFirstID, pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[aTeam].bLastID; pSoldier++, ++cnt ) + for ( SoldierID cnt = gTacticalStatus.Team[aTeam].bFirstID; cnt <= gTacticalStatus.Team[aTeam].bLastID; ++cnt ) { + pSoldier = cnt; if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife > 0 ) { if ( pSoldier->usSoldierFlagMask & aFlag ) @@ -11711,12 +11709,12 @@ UINT16 NumSoldiersWithFlagInSector( UINT8 aTeam, UINT32 aFlag ) UINT16 NumSoldiersofClassWithFlag2InSector( UINT8 aTeam, UINT8 aSoldierClass, UINT32 aFlag ) { - SOLDIERTYPE* pSoldier; - INT32 cnt = 0; - UINT16 num = 0; + SOLDIERTYPE *pSoldier; + UINT16 num = 0; - for ( cnt = gTacticalStatus.Team[aTeam].bFirstID, pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[aTeam].bLastID; pSoldier++, ++cnt ) + for ( SoldierID cnt = gTacticalStatus.Team[aTeam].bFirstID; cnt <= gTacticalStatus.Team[aTeam].bLastID; ++cnt ) { + pSoldier = cnt; if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife > 0 ) { if ( (pSoldier->usSoldierFlagMask2 & aFlag) @@ -12002,11 +12000,12 @@ BOOLEAN IsCivFactionMemberAliveInSector( UINT8 usCivilianGroup ) SOLDIERTYPE *pSoldier = NULL; // IF IT'S THE SELECTED GUY, MAKE ANOTHER SELECTED! - UINT16 cnt = gTacticalStatus.Team[CIV_TEAM].bFirstID; + SoldierID cnt = gTacticalStatus.Team[CIV_TEAM].bFirstID; // look for all mercs on the same team, - for ( pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[CIV_TEAM].bLastID; ++cnt, ++pSoldier ) + for ( ; cnt <= gTacticalStatus.Team[CIV_TEAM].bLastID; ++cnt ) { + pSoldier = cnt; if ( pSoldier->bActive && (pSoldier->sSectorX == gWorldSectorX) && (pSoldier->sSectorY == gWorldSectorY) && (pSoldier->bSectorZ == gbWorldSectorZ) ) { if ( pSoldier->ubCivilianGroup == usCivilianGroup && pSoldier->stats.bLife > 0 ) @@ -12017,15 +12016,15 @@ BOOLEAN IsCivFactionMemberAliveInSector( UINT8 usCivilianGroup ) return FALSE; } -BOOLEAN IsFreeSlotAvailable( int aTeam ) +BOOLEAN IsFreeSlotAvailable( int aTeam ) { SOLDIERTYPE *pSoldier; - INT32 cnt = gTacticalStatus.Team[aTeam].bFirstID; + SoldierID cnt = gTacticalStatus.Team[aTeam].bFirstID; // run through list - for ( pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[aTeam].bLastID; ++cnt, ++pSoldier ) + for ( ; cnt <= gTacticalStatus.Team[aTeam].bLastID; ++cnt ) { - if ( !pSoldier->bActive ) + if ( !cnt->bActive ) { return TRUE; } diff --git a/Tactical/Overhead.h b/Tactical/Overhead.h index 87b5034a..f611474b 100644 --- a/Tactical/Overhead.h +++ b/Tactical/Overhead.h @@ -238,7 +238,7 @@ void SlideToLocation( INT32 sDestGridNo ); void RebuildAllSoldierShadeTables( ); void HandlePlayerTeamMemberDeath( SOLDIERTYPE *pSoldier ); -UINT16 LastActiveTeamMember( UINT16 ubTeam ); +SoldierID LastActiveTeamMember( UINT16 ubTeam ); BOOLEAN SoldierOnVisibleWorldTile( SOLDIERTYPE *pSoldier ); SoldierID FindNextActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLife, BOOLEAN fOnlyRegularMercs ); diff --git a/Tactical/Real Time Input.cpp b/Tactical/Real Time Input.cpp index 02141ace..4c97f6b2 100644 --- a/Tactical/Real Time Input.cpp +++ b/Tactical/Real Time Input.cpp @@ -2143,55 +2143,57 @@ void HandleMouseRTX1Button( UINT32 *puiNewEvent ) void HandleMouseRTX2Button( UINT32 *puiNewEvent ) { - if ( _KeyDown( ALT ) ) - AutoReload( gusSelectedSoldier ); - else - // Toggle squad's stealth mode..... - // For each guy on squad... + if ( _KeyDown( ALT ) ) + AutoReload( gusSelectedSoldier ); + else + // Toggle squad's stealth mode..... + // For each guy on squad... + { + SOLDIERTYPE *pTeamSoldier; + SoldierID bLoop; + BOOLEAN fStealthOn = FALSE; + + // Check if at least one guy is on stealth.... + for ( bLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++bLoop ) + { + pTeamSoldier = bLoop; + if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad() ) { - SOLDIERTYPE *pTeamSoldier; - INT16 bLoop; - BOOLEAN fStealthOn = FALSE; - - // Check if at least one guy is on stealth.... - for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID, pTeamSoldier=MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++, pTeamSoldier++) + if ( pTeamSoldier->bStealthMode ) { - if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad( ) ) - { - if ( pTeamSoldier->bStealthMode ) - { - fStealthOn = TRUE; - } - } - } - - fStealthOn = !fStealthOn; - - for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID, pTeamSoldier=MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++, pTeamSoldier++) - { - if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad( ) && !AM_A_ROBOT( pTeamSoldier ) ) - { - if ( gpSMCurrentMerc != NULL && bLoop == gpSMCurrentMerc->ubID ) - { - gfUIStanceDifferent = TRUE; - } - - pTeamSoldier->bStealthMode = fStealthOn; - } - } - - fInterfacePanelDirty = DIRTYLEVEL2; - - // OK, display message - if ( fStealthOn ) - { - ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, pMessageStrings[ MSG_SQUAD_ON_STEALTHMODE ] ); - } - else - { - ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, pMessageStrings[ MSG_SQUAD_OFF_STEALTHMODE ] ); + fStealthOn = TRUE; } } + } + + fStealthOn = !fStealthOn; + + for ( bLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++bLoop ) + { + pTeamSoldier = bLoop; + if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad() && !AM_A_ROBOT( pTeamSoldier ) ) + { + if ( gpSMCurrentMerc != NULL && bLoop == gpSMCurrentMerc->ubID ) + { + gfUIStanceDifferent = TRUE; + } + + pTeamSoldier->bStealthMode = fStealthOn; + } + } + + fInterfacePanelDirty = DIRTYLEVEL2; + + // OK, display message + if ( fStealthOn ) + { + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, pMessageStrings[MSG_SQUAD_ON_STEALTHMODE] ); + } + else + { + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, pMessageStrings[MSG_SQUAD_OFF_STEALTHMODE] ); + } + } } // sevenfm: common functionality diff --git a/Tactical/Rotting Corpses.cpp b/Tactical/Rotting Corpses.cpp index 7749051f..c6c3ce0b 100644 --- a/Tactical/Rotting Corpses.cpp +++ b/Tactical/Rotting Corpses.cpp @@ -1272,11 +1272,11 @@ void HandleRottingCorpses( ) // ATE: Check for multiple crows..... // Couint how many we have now... { - UINT16 bLoop; SOLDIERTYPE * pSoldier; - for ( bLoop=gTacticalStatus.Team[ CIV_TEAM ].bFirstID, pSoldier=MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; bLoop++, pSoldier++) + for ( SoldierID bLoop=gTacticalStatus.Team[ CIV_TEAM ].bFirstID; bLoop <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ++bLoop ) { + pSoldier = bLoop; if (pSoldier->bActive && pSoldier->bInSector && (pSoldier->stats.bLife >= OKLIFE) && !( pSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) ) { if ( pSoldier->ubBodyType == CROW ) @@ -1344,8 +1344,7 @@ void MakeCorpseVisible( SOLDIERTYPE *pSoldier, ROTTING_CORPSE *pCorpse ) void AllMercsOnTeamLookForCorpse( ROTTING_CORPSE *pCorpse, INT8 bTeam ) { - INT32 cnt; - SOLDIERTYPE *pSoldier; + SOLDIERTYPE *pSoldier; INT32 sGridNo; // If this cump is already visible, return @@ -1360,13 +1359,14 @@ void AllMercsOnTeamLookForCorpse( ROTTING_CORPSE *pCorpse, INT8 bTeam ) } // IF IT'S THE SELECTED GUY, MAKE ANOTHER SELECTED! - cnt = gTacticalStatus.Team[ bTeam ].bFirstID; + SoldierID cnt = gTacticalStatus.Team[ bTeam ].bFirstID; sGridNo = pCorpse->def.sGridNo; // look for all mercs on the same team, - for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ bTeam ].bLastID; cnt++,pSoldier++ ) + for ( ; cnt <= gTacticalStatus.Team[ bTeam ].bLastID; ++cnt ) { + pSoldier = cnt; // ATE: Ok, lets check for some basic things here! if ( pSoldier->stats.bLife >= OKLIFE && !TileIsOutOfBounds(pSoldier->sGridNo) && pSoldier->bActive && pSoldier->bInSector ) { @@ -2526,7 +2526,6 @@ void LookForAndMayCommentOnSeeingCorpse( SOLDIERTYPE *pSoldier, INT32 sGridNo, U { ROTTING_CORPSE *pCorpse; INT8 bToleranceThreshold = 0; - INT32 cnt; SOLDIERTYPE *pTeamSoldier; if ( QuoteExp[ pSoldier->ubProfile ].QuoteExpHeadShotOnly == 1 ) @@ -2567,11 +2566,12 @@ void LookForAndMayCommentOnSeeingCorpse( SOLDIERTYPE *pSoldier, INT32 sGridNo, U if ( Random( 2 ) == 1 ) { // IF IT'S THE SELECTED GUY, MAKE ANOTHER SELECTED! - cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; + SoldierID cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; // look for all mercs on the same team, - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++,pTeamSoldier++ ) + for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt ) { + pTeamSoldier = cnt; // ATE: Ok, lets check for some basic things here! if ( pTeamSoldier->stats.bLife >= OKLIFE && !TileIsOutOfBounds(pTeamSoldier->sGridNo) && pTeamSoldier->bActive && pTeamSoldier->bInSector ) { diff --git a/Tactical/ShopKeeper Interface.cpp b/Tactical/ShopKeeper Interface.cpp index 1986893f..17f255b5 100644 --- a/Tactical/ShopKeeper Interface.cpp +++ b/Tactical/ShopKeeper Interface.cpp @@ -759,7 +759,6 @@ UINT32 ShopKeeperScreenShutdown() BOOLEAN EnterShopKeeperInterface() { VOBJECT_DESC VObjectDesc; - UINT16 ubCnt; CHAR8 zTemp[32]; VSURFACE_DESC vs_desc; @@ -886,9 +885,9 @@ BOOLEAN EnterShopKeeperInterface() //Create an array of all mercs (anywhere!) currently in the player's employ, and load their small faces // This is to support showing of repair item owner's faces even when they're not in the sector, as long as they still work for player gubNumberMercsInArray = 0; - for( ubCnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; ubCnt <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++ubCnt ) + for( SoldierID ubCnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; ubCnt <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++ubCnt ) { - pSoldier = MercPtrs[ ubCnt ]; + pSoldier = ubCnt; if( pSoldier->bActive && ( pSoldier->ubProfile != NO_PROFILE ) && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) && !AM_A_ROBOT( pSoldier ) ) diff --git a/Tactical/SkillCheck.cpp b/Tactical/SkillCheck.cpp index cff7ad4e..30773c78 100644 --- a/Tactical/SkillCheck.cpp +++ b/Tactical/SkillCheck.cpp @@ -339,7 +339,6 @@ INT32 SkillCheck( SOLDIERTYPE * pSoldier, INT8 bReason, INT8 bChanceMod ) INT32 iSkill; INT32 iChance, iReportChance; INT32 iRoll, iMadeItBy; - INT32 iLoop; SOLDIERTYPE * pTeamSoldier; INT8 bBuddyIndex; BOOLEAN fForceDamnSound = FALSE; @@ -946,9 +945,10 @@ INT32 SkillCheck( SOLDIERTYPE * pSoldier, INT8 bReason, INT8 bChanceMod ) if (iRoll < iChance) { // If a buddy of this merc is standing around nearby, they'll make a positive comment. - iLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( pTeamSoldier = MercPtrs[ iLoop ]; iLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; iLoop++,pTeamSoldier++ ) + SoldierID iLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; + for ( ; iLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++iLoop ) { + pTeamSoldier = iLoop; if ( OK_INSECTOR_MERC( pTeamSoldier ) ) { if ( SpacesAway( pSoldier->sGridNo, pTeamSoldier->sGridNo ) < 15 ) diff --git a/Tactical/SkillMenu.cpp b/Tactical/SkillMenu.cpp index 0b4cdaf7..18a175ae 100644 --- a/Tactical/SkillMenu.cpp +++ b/Tactical/SkillMenu.cpp @@ -784,17 +784,17 @@ SoldierSelection::Setup( UINT32 aVal ) // pretty simple: we find every soldier in a radius around the target position and add him to the list // loop through all soldiers around - for ( UINT32 cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID ; cnt <= gTacticalStatus.Team[ CIV_TEAM ].bLastID ; ++cnt ) + for ( SoldierID id = gTacticalStatus.Team[ OUR_TEAM ].bFirstID ; id <= gTacticalStatus.Team[ CIV_TEAM ].bLastID ; ++id ) { - INT32 iRange = GetRangeInCellCoordsFromGridNoDiff( sTraitsMenuTargetGridNo, MercPtrs[ cnt ]->sGridNo ); + INT32 iRange = GetRangeInCellCoordsFromGridNoDiff( sTraitsMenuTargetGridNo, id->sGridNo ); if ( iRange < 100 ) { - if ( cnt != pSoldier->ubID ) + if ( id != pSoldier->ubID ) { - swprintf( pStr, L"%s", MercPtrs[ cnt ]->GetName() ); + swprintf( pStr, L"%s", id->GetName() ); - pOption = new POPUP_OPTION(&std::wstring( pStr ), new popupCallbackFunction( &Wrapper_Function_SoldierSelection, cnt ) ); + pOption = new POPUP_OPTION(&std::wstring( pStr ), new popupCallbackFunction( &Wrapper_Function_SoldierSelection, id ) ); // grey out if no artillery can be called from this sector if ( 0 ) @@ -865,11 +865,11 @@ DragSelection::Setup( UINT32 aVal ) // pretty simple: we find every soldier in a radius around the target position and add him to the list // loop through all soldiers around - for ( UINT32 cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; cnt <= gTacticalStatus.Team[CIV_TEAM].bLastID; ++cnt ) + for ( SoldierID cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; cnt <= gTacticalStatus.Team[CIV_TEAM].bLastID; ++cnt ) { if ( cnt != pSoldier->ubID && pSoldier->CanDragPerson(cnt) ) { - swprintf( pStr, L"%s", MercPtrs[cnt]->GetName( ) ); + swprintf( pStr, L"%s", cnt->GetName( ) ); pOption = new POPUP_OPTION( &std::wstring( pStr ), new popupCallbackFunction( &Wrapper_Function_DragSelection, cnt ) ); diff --git a/Tactical/Soldier Add.cpp b/Tactical/Soldier Add.cpp index 61e4494c..ac65d912 100644 --- a/Tactical/Soldier Add.cpp +++ b/Tactical/Soldier Add.cpp @@ -1761,16 +1761,14 @@ void AddSoldierToSectorGridNo( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubDir // IsMercOnTeam() checks to see if the passed in Merc Profile ID is currently on the player's team BOOLEAN IsMercOnTeam(UINT8 ubMercID, BOOLEAN aAlreadyInCountry, BOOLEAN aAlive) { - UINT16 cnt; - UINT16 ubLastTeamID; SOLDIERTYPE *pTeamSoldier; - - cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; - ubLastTeamID = gTacticalStatus.Team[ OUR_TEAM ].bLastID; + SoldierID cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; + SoldierID ubLastTeamID = gTacticalStatus.Team[ OUR_TEAM ].bLastID; // look for all mercs on the same team, - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= ubLastTeamID; ++cnt, pTeamSoldier++) + for ( ; cnt <= ubLastTeamID; ++cnt ) { + pTeamSoldier = cnt; if ( pTeamSoldier->ubProfile == ubMercID && pTeamSoldier->bActive ) { if ( aAlreadyInCountry && pTeamSoldier->bAssignment == IN_TRANSIT ) @@ -1791,12 +1789,12 @@ BOOLEAN IsMercOnTeam(UINT8 ubMercID, BOOLEAN aAlreadyInCountry, BOOLEAN aAlive) SoldierID GetSoldierIDFromMercID(UINT8 ubMercID) { SOLDIERTYPE *pTeamSoldier = NULL; - - UINT16 cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; + SoldierID cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; // look for all mercs on the same team, - for ( pTeamSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++cnt, ++pTeamSoldier ) + for ( ; cnt <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++cnt ) { + pTeamSoldier = cnt; if ( pTeamSoldier->ubProfile == ubMercID ) { if( pTeamSoldier->bActive ) diff --git a/Tactical/Soldier Ani.cpp b/Tactical/Soldier Ani.cpp index 2ef15f57..be1e866d 100644 --- a/Tactical/Soldier Ani.cpp +++ b/Tactical/Soldier Ani.cpp @@ -3559,7 +3559,6 @@ void SayBuddyWitnessedQuoteFromKill( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, UINT16 ubNumMercs = 0; UINT16 ubChosenMerc; SOLDIERTYPE *pTeamSoldier; - INT32 cnt; UINT16 usQuoteNum; BOOLEAN buddyquoteused = FALSE; @@ -3570,11 +3569,12 @@ void SayBuddyWitnessedQuoteFromKill( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, return; // set up soldier ptr as first element in mercptrs list - cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; + SoldierID cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; // run through list - 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... if ( OK_INSECTOR_MERC( pTeamSoldier ) && !AM_AN_EPC( pTeamSoldier ) && !( pTeamSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) && !(AM_A_ROBOT( pTeamSoldier )) && !pTeamSoldier->flags.fMercAsleep && !TileIsOutOfBounds(pTeamSoldier->sGridNo) && pTeamSoldier->ubProfile != pKillerSoldier->ubProfile ) @@ -3709,8 +3709,9 @@ void SayBuddyWitnessedQuoteFromKill( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, { cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID; - for ( pTeamSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++cnt, ++pTeamSoldier ) + for ( ; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++cnt ) { + pTeamSoldier = cnt; // we do not exclude the buddies from above. If we get to this point, it might have been a buddy that already said his line. In that case additional dialogue might play other ones // Add guy if he's a candidate... @@ -3742,7 +3743,6 @@ void SayBuddyWitnessedQuoteFromKill( SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, void HandleKilledQuote( SOLDIERTYPE *pKilledSoldier, SOLDIERTYPE *pKillerSoldier, INT32 sGridNo, INT8 bLevel ) { SOLDIERTYPE *pTeamSoldier; - INT32 cnt; // WDS - make number of mercenaries, etc. be configurable std::vector ubMercsInSector (CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS, 0); UINT16 ubNumMercs = 0; @@ -3802,11 +3802,12 @@ void HandleKilledQuote( SOLDIERTYPE *pKilledSoldier, SOLDIERTYPE *pKillerSoldier if ( fDoSomeoneElse ) { // Check if a person is here that has this quote.... - cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; + SoldierID cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; // run through list - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++,pTeamSoldier++ ) + for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt ) { + pTeamSoldier = cnt; if ( cnt != pKillerSoldier->ubID ) { if ( OK_INSECTOR_MERC( pTeamSoldier ) && !( pTeamSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) && !AM_AN_EPC( pTeamSoldier ) ) diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index bffbc8eb..8235157c 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -2836,7 +2836,6 @@ BOOLEAN SOLDIERTYPE::ChangeSoldierState( UINT16 usNewState, UINT16 usStartingAni // This function reevaluates the stance if the guy sees us! BOOLEAN ReevaluateEnemyStance( SOLDIERTYPE *pSoldier, UINT16 usAnimState ) { - INT32 cnt; SoldierID iClosestEnemy = NOBODY; INT16 sTargetXPos, sTargetYPos; BOOLEAN fReturnVal = FALSE; @@ -2871,7 +2870,7 @@ BOOLEAN ReevaluateEnemyStance( SOLDIERTYPE *pSoldier, UINT16 usAnimState ) if ( pSoldier->aiData.bOppCnt > 0 ) { // Pick a guy this buddy sees and turn towards them! - for ( 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 ) { if ( pSoldier->aiData.bOppList[cnt] == SEEN_CURRENTLY ) { @@ -12260,16 +12259,13 @@ BOOLEAN SOLDIERTYPE::MercInHighWater( void ) void RevivePlayerTeam( ) { - INT32 cnt; - SOLDIERTYPE *pSoldier; - // End the turn of player charactors - cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID; + SoldierID id = gTacticalStatus.Team[gbPlayerNum].bFirstID; // look for all mercs on the same team, - for ( pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; cnt++, pSoldier++ ) + for ( ; id <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++id ) { - pSoldier->ReviveSoldier( ); + id->ReviveSoldier( ); } } @@ -15221,10 +15217,11 @@ BOOLEAN SOLDIERTYPE::IsFeedingExternal( SoldierID * pubId1, UINT16* pGunSlot1, INT32 nextGridNoinSight = NewGridNo( this->sGridNo, DirectionInc( this->ubDirection ) ); SOLDIERTYPE* pTeamSoldier = NULL; - INT32 cnt = gTacticalStatus.Team[this->bTeam].bFirstID; - INT32 lastid = gTacticalStatus.Team[this->bTeam].bLastID; - for ( pTeamSoldier = MercPtrs[cnt]; cnt < lastid; ++cnt, ++pTeamSoldier ) + SoldierID cnt = gTacticalStatus.Team[this->bTeam].bFirstID; + SoldierID lastid = gTacticalStatus.Team[this->bTeam].bLastID; + for ( ; cnt < lastid; ++cnt ) { + pTeamSoldier = cnt; // check if teamsoldier exists in this sector if ( !pTeamSoldier || !pTeamSoldier->bActive || !pTeamSoldier->bInSector || pTeamSoldier->sSectorX != this->sSectorX || pTeamSoldier->sSectorY != this->sSectorY || pTeamSoldier->bSectorZ != this->bSectorZ ) continue; @@ -16234,9 +16231,10 @@ void SOLDIERTYPE::LooseDisguise( void ) // rehandle sight for everybody SOLDIERTYPE* pSoldier; - UINT16 iLoop = gTacticalStatus.Team[OUR_TEAM].bFirstID; - for ( pSoldier = MercPtrs[iLoop]; iLoop <= gTacticalStatus.Team[CIV_TEAM].bLastID; ++iLoop, ++pSoldier ) + SoldierID iLoop = gTacticalStatus.Team[OUR_TEAM].bFirstID; + for ( ; iLoop <= gTacticalStatus.Team[CIV_TEAM].bLastID; ++iLoop ) { + pSoldier = iLoop; if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife > 0 ) { RecalculateOppCntsDueToNoLongerNeutral( pSoldier ); @@ -18880,10 +18878,11 @@ BOOLEAN SOLDIERTYPE::OrderArtilleryStrike( UINT32 usSectorNr, INT32 sTargetGridN UINT16 mortararray[maxFiringMortarsAmount] = { 0 }; SOLDIERTYPE* pSoldier = NULL; - INT32 cnt = gTacticalStatus.Team[bTeam].bFirstID; - INT32 lastid = gTacticalStatus.Team[bTeam].bLastID; - for ( pSoldier = MercPtrs[cnt]; (cnt < lastid) && (mortaritemcnt < maxFiringMortarsAmount); ++cnt, ++pSoldier ) + SoldierID cnt = gTacticalStatus.Team[bTeam].bFirstID; + SoldierID lastid = gTacticalStatus.Team[bTeam].bLastID; + for ( ; (cnt < lastid) && (mortaritemcnt < maxFiringMortarsAmount); ++cnt ) { + pSoldier = cnt; // check if soldier exists in this sector if ( !pSoldier || !pSoldier->bActive || pSoldier->sSectorX != sSectorX || pSoldier->sSectorY != sSectorY || pSoldier->bSectorZ != bSectorZ || pSoldier->bAssignment > ON_DUTY ) continue; @@ -18924,8 +18923,9 @@ BOOLEAN SOLDIERTYPE::OrderArtilleryStrike( UINT32 usSectorNr, INT32 sTargetGridN // second loop: check for all mortar shells and 'fire' them cnt = gTacticalStatus.Team[bTeam].bFirstID; - for ( pSoldier = MercPtrs[cnt]; cnt < lastid; ++cnt, ++pSoldier ) + for ( ; cnt < lastid; ++cnt ) { + pSoldier = cnt; // check if soldier exists in this sector if ( !pSoldier || !pSoldier->bActive || pSoldier->sSectorX != sSectorX || pSoldier->sSectorY != sSectorY || pSoldier->bSectorZ != bSectorZ || pSoldier->bAssignment > ON_DUTY ) continue; @@ -21602,15 +21602,16 @@ BOOLEAN SOLDIERTYPE::OrderTurnCoatToSwitchSides( SoldierID usID ) void SOLDIERTYPE::OrderAllTurnCoatToSwitchSides() { SOLDIERTYPE *pSoldier; - INT32 cnt = gTacticalStatus.Team[ENEMY_TEAM].bFirstID; + SoldierID cnt = gTacticalStatus.Team[ENEMY_TEAM].bFirstID; // rftr: force the player to enter turn-based combat. this function already includes a check to see if we're already in combat, so no harm calling this. // this also prevents a hang when activating a sector with 100% turncoats EnterCombatMode(OUR_TEAM); // run through list - for ( pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[ENEMY_TEAM].bLastID; ++cnt, ++pSoldier ) + for ( ; cnt <= gTacticalStatus.Team[ENEMY_TEAM].bLastID; ++cnt ) { + pSoldier = cnt; if ( pSoldier->bActive && pSoldier->bInSector ) { if ( pSoldier->usSoldierFlagMask2 & SOLDIER_TURNCOAT ) @@ -23687,16 +23688,15 @@ void SOLDIERTYPE::UpdateRobotControllerGivenRobot( void ) //the original function passed in pRobot, not pSoldier SOLDIERTYPE *pRobot = this; SOLDIERTYPE *pTeamSoldier; - INT32 cnt = 0; - // Loop through guys and look for a controller! // set up soldier ptr as first element in mercptrs list - cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID; + SoldierID cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID; - // run through list - for ( pTeamSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; cnt++, pTeamSoldier++ ) + // Loop through guys and look for a controller! + for ( ; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++cnt ) { + pTeamSoldier = cnt; if ( pTeamSoldier->bActive ) { if ( pTeamSoldier->ControllingRobot( ) ) @@ -23714,7 +23714,6 @@ void SOLDIERTYPE::UpdateRobotControllerGivenRobot( void ) void SOLDIERTYPE::UpdateRobotControllerGivenController( void ) { SOLDIERTYPE *pTeamSoldier; - INT32 cnt = 0; // First see if are still controlling the robot if ( !this->ControllingRobot( ) ) @@ -23723,11 +23722,12 @@ void SOLDIERTYPE::UpdateRobotControllerGivenController( void ) } // set up soldier ptr as first element in mercptrs list - cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID; + SoldierID cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID; // Loop through guys to find the robot.... - for ( pTeamSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; cnt++, pTeamSoldier++ ) + for ( ; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++cnt ) { + pTeamSoldier = cnt; if ( pTeamSoldier->bActive && (pTeamSoldier->flags.uiStatusFlags & SOLDIER_ROBOT) ) { pTeamSoldier->ubRobotRemoteHolderID = this->ubID; @@ -23923,11 +23923,11 @@ void PlayStealthySoldierFootstepSound( SOLDIERTYPE *pSoldier ) void CrowsFlyAway( UINT8 ubTeam ) { - UINT32 cnt; SOLDIERTYPE *pTeamSoldier; - for ( cnt = gTacticalStatus.Team[ubTeam].bFirstID, pTeamSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[ubTeam].bLastID; cnt++, pTeamSoldier++ ) + for ( SoldierID cnt = gTacticalStatus.Team[ubTeam].bFirstID; cnt <= gTacticalStatus.Team[ubTeam].bLastID; ++cnt ) { + pTeamSoldier = cnt; if ( pTeamSoldier->bActive && pTeamSoldier->bInSector ) { if ( pTeamSoldier->ubBodyType == CROW && pTeamSoldier->usAnimState != CROW_FLY ) @@ -23943,7 +23943,6 @@ void CrowsFlyAway( UINT8 ubTeam ) #ifdef JA2BETAVERSION void DebugValidateSoldierData( ) { - UINT32 cnt; SOLDIERTYPE *pSoldier; CHAR16 sString[1024]; BOOLEAN fProblemDetected = FALSE; @@ -23960,9 +23959,10 @@ void DebugValidateSoldierData( ) uiFrameCount = 0; // Loop through our team... - cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID; - for ( 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; if ( pSoldier->bActive ) { // OK, first check for alive people @@ -24048,7 +24048,6 @@ void SOLDIERTYPE::BeginTyingToFall( void ) void SOLDIERTYPE::SetSoldierAsUnderAiControl( void ) { SOLDIERTYPE *pSoldier = NULL; - INT32 cnt; //this is silly, but left over from when pSoldierToSet was passed in as a parameter if ( this == NULL ) @@ -24057,9 +24056,10 @@ void SOLDIERTYPE::SetSoldierAsUnderAiControl( void ) } // Loop through ALL teams... - cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; - for ( pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[LAST_TEAM].bLastID; cnt++, pSoldier++ ) + SoldierID cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; + for ( ; cnt <= gTacticalStatus.Team[LAST_TEAM].bLastID; ++cnt ) { + pSoldier = cnt; if ( pSoldier->bActive ) { pSoldier->flags.uiStatusFlags &= ~SOLDIER_UNDERAICONTROL; @@ -24096,12 +24096,12 @@ void HandlePlayerTogglingLightEffects( BOOLEAN fToggleValue ) void EnableDisableSoldierLightEffects( BOOLEAN fEnableLights ) { SOLDIERTYPE *pSoldier = NULL; - INT32 cnt; // Loop through player teams... - cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; - for ( pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[OUR_TEAM].bLastID; cnt++, pSoldier++ ) + SoldierID cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; + for ( ; cnt <= gTacticalStatus.Team[OUR_TEAM].bLastID; ++cnt ) { + pSoldier = cnt; //if the soldier is in the sector if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife >= OKLIFE ) { @@ -24248,11 +24248,11 @@ BOOLEAN SOLDIERTYPE::CanStartDrag(void) if (!TileIsOutOfBounds(sNewGridNo) && sNewGridNo != this->sGridNo) { // soldiers - for (UINT32 cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; cnt <= gTacticalStatus.Team[CIV_TEAM].bLastID; ++cnt) + for ( SoldierID cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; cnt <= gTacticalStatus.Team[CIV_TEAM].bLastID; ++cnt) { if (cnt != this->ubID && cnt != NOBODY && - MercPtrs[cnt]->sGridNo == sNewGridNo && + cnt->sGridNo == sNewGridNo && this->CanDragPerson(cnt)) { return TRUE; @@ -24312,11 +24312,11 @@ void SOLDIERTYPE::StartDrag(void) if (!TileIsOutOfBounds(sNewGridNo) && sNewGridNo != this->sGridNo) { // soldiers - for (UINT32 cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; cnt <= gTacticalStatus.Team[CIV_TEAM].bLastID; ++cnt) + for ( SoldierID cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; cnt <= gTacticalStatus.Team[CIV_TEAM].bLastID; ++cnt) { if (cnt != this->ubID && - MercPtrs[cnt] && - MercPtrs[cnt]->sGridNo == sNewGridNo && + cnt != NOBODY && + cnt->sGridNo == sNewGridNo && this->CanDragPerson(cnt)) { SetDragOrderPerson(cnt); @@ -24488,13 +24488,12 @@ INT8 NUM_SKILL_TRAITS( SOLDIERTYPE * pSoldier, UINT8 uiSkillTraitNumber ) UINT8 GetSquadleadersCountInVicinity( SOLDIERTYPE * pSoldier, BOOLEAN fWithHigherLevel, BOOLEAN fDontCheckDistance ) { - UINT16 cnt = 0; UINT8 ubNumberSL = 0; // loop through all soldiers around - for ( cnt = gTacticalStatus.Team[pSoldier->bTeam].bFirstID; cnt <= gTacticalStatus.Team[pSoldier->bTeam].bLastID; cnt++ ) + for ( SoldierID cnt = gTacticalStatus.Team[pSoldier->bTeam].bFirstID; cnt <= gTacticalStatus.Team[pSoldier->bTeam].bLastID; ++cnt ) { - SOLDIERTYPE *pSquadLeader = MercPtrs[cnt]; + SOLDIERTYPE *pSquadLeader = cnt; // Get active conscious soldier if ( pSquadLeader != pSoldier && pSquadLeader->bActive && //MercPtrs[ cnt ]->aiData.bShock < 20 && pSquadLeader->stats.bLife >= OKLIFE && HAS_SKILL_TRAIT( pSquadLeader, SQUADLEADER_NT ) ) @@ -24531,9 +24530,9 @@ UINT8 GetSquadleadersCountInVicinity( SOLDIERTYPE * pSoldier, BOOLEAN fWithHighe // special loop for militia - they can get a bonus from our mercs if ( pSoldier->bTeam == MILITIA_TEAM && ubNumberSL < gSkillTraitValues.ubSLMaxBonuses ) { - for ( 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 *pSquadLeader = MercPtrs[cnt]; + SOLDIERTYPE *pSquadLeader = cnt; // Get active conscious soldier if ( pSquadLeader != pSoldier && pSquadLeader->bActive && //MercPtrs[ cnt ]->aiData.bShock < 20 && pSquadLeader->stats.bLife >= OKLIFE && HAS_SKILL_TRAIT( pSquadLeader, SQUADLEADER_NT ) ) @@ -24981,7 +24980,7 @@ BOOLEAN ResolvePendingInterrupt( SOLDIERTYPE * pSoldier, UINT8 ubInterruptType ) if ( gGameExternalOptions.fAllowCollectiveInterrupts ) { SOLDIERTYPE *pTeammate; - UINT16 uCnt2 = 0, usColIntChance = 0; + UINT16 usColIntChance = 0; UINT8 ubOriginalInterruptersCount = ubInterruptersFound, uCnt3 = 0; BOOLEAN fAlreadyIn; @@ -24989,9 +24988,10 @@ BOOLEAN ResolvePendingInterrupt( SOLDIERTYPE * pSoldier, UINT8 ubInterruptType ) { pInterrupter = MercPtrs[ubaInterruptersList[uCnt]]; - uCnt2 = gTacticalStatus.Team[pInterrupter->bTeam].bFirstID; - for ( pTeammate = MercPtrs[uCnt2]; uCnt2 <= gTacticalStatus.Team[pInterrupter->bTeam].bLastID; uCnt2++, pTeammate++ ) + SoldierID uCnt2 = gTacticalStatus.Team[pInterrupter->bTeam].bFirstID; + for ( ; uCnt2 <= gTacticalStatus.Team[pInterrupter->bTeam].bLastID; ++uCnt2 ) { + pTeammate = uCnt2; if ( pTeammate == NULL ) continue; // not valid if ( pTeammate->bTeam != pInterrupter->bTeam ) @@ -25236,10 +25236,11 @@ BOOLEAN GetRadioOperatorSignal( SoldierID usOwner, INT32* psTargetGridNo ) bTeam = ENEMY_TEAM; SOLDIERTYPE* pSoldier = NULL; - INT32 cnt = gTacticalStatus.Team[bTeam].bFirstID; - INT32 lastid = gTacticalStatus.Team[bTeam].bLastID; - for ( pSoldier = MercPtrs[cnt]; cnt < lastid; ++cnt, ++pSoldier ) + SoldierID cnt = gTacticalStatus.Team[bTeam].bFirstID; + SoldierID lastid = gTacticalStatus.Team[bTeam].bLastID; + for ( ; cnt < lastid; ++cnt ) { + pSoldier = cnt; if ( pSoldier && pSoldier->CanUseRadio( FALSE ) && pSoldier->bActive && pSoldier->bInSector && (pSoldier->sSectorX == gWorldSectorX) && (pSoldier->sSectorY == gWorldSectorY) && (pSoldier->bSectorZ == gbWorldSectorZ) ) { *psTargetGridNo = pSoldier->sGridNo; @@ -25306,10 +25307,11 @@ BOOLEAN IsValidArtilleryOrderSector( INT16 sSectorX, INT16 sSectorY, INT8 bSecto BOOLEAN activeradio = FALSE; BOOLEAN mortarfound = FALSE; SOLDIERTYPE* pSoldier = NULL; - INT32 cnt = gTacticalStatus.Team[bTeam].bFirstID; - INT32 lastid = gTacticalStatus.Team[bTeam].bLastID; - for ( pSoldier = MercPtrs[cnt]; cnt < lastid; ++cnt, ++pSoldier ) + SoldierID cnt = gTacticalStatus.Team[bTeam].bFirstID; + SoldierID lastid = gTacticalStatus.Team[bTeam].bLastID; + for ( ; cnt < lastid; ++cnt ) { + pSoldier = cnt; // check if soldier exists in this sector, and is on duty if ( !pSoldier || !pSoldier->bActive || pSoldier->sSectorX != sSectorX || pSoldier->sSectorY != sSectorY || pSoldier->bSectorZ != bSectorZ || pSoldier->bAssignment > ON_DUTY ) continue; @@ -25332,10 +25334,11 @@ BOOLEAN SectorJammed( ) { // check every soldier: are we jamming frequencies? SOLDIERTYPE* pSoldier = NULL; - INT32 cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; - INT32 lastid = MAX_NUM_SOLDIERS; - for ( pSoldier = MercPtrs[cnt]; cnt < lastid; ++cnt, ++pSoldier ) + SoldierID cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; + SoldierID lastid = MAX_NUM_SOLDIERS; + for ( ; cnt < lastid; ++cnt ) { + pSoldier = cnt; if ( pSoldier->sSectorX == gWorldSectorX && pSoldier->sSectorY == gWorldSectorY && pSoldier->bSectorZ == gbWorldSectorZ && pSoldier->stats.bLife > 0 && pSoldier->IsJamming( ) ) return TRUE; } @@ -25347,10 +25350,11 @@ BOOLEAN PlayerTeamIsScanning( ) { // check every soldier: are we jamming frequencies? SOLDIERTYPE* pSoldier = NULL; - INT32 cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; - INT32 lastid = gTacticalStatus.Team[OUR_TEAM].bLastID; - for ( pSoldier = MercPtrs[cnt]; cnt < lastid; ++cnt, ++pSoldier ) + SoldierID cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; + SoldierID lastid = gTacticalStatus.Team[OUR_TEAM].bLastID; + for ( ; cnt < lastid; ++cnt ) { + pSoldier = cnt; if ( pSoldier->sSectorX == gWorldSectorX && pSoldier->sSectorY == gWorldSectorY && pSoldier->bSectorZ == gbWorldSectorZ && pSoldier->stats.bLife > 0 && pSoldier->IsScanning( ) ) return TRUE; } @@ -25364,10 +25368,11 @@ UINT16 GridNoSpotterCTHBonus( SOLDIERTYPE* pSniper, INT32 sGridNo, INT8 bTeam ) UINT16 bestvalue = 0; SOLDIERTYPE* pSoldier = NULL; - INT32 cnt = gTacticalStatus.Team[bTeam].bFirstID; - INT32 lastid = gTacticalStatus.Team[bTeam].bLastID; - for ( pSoldier = MercPtrs[cnt]; cnt < lastid; ++cnt, ++pSoldier ) + SoldierID cnt = gTacticalStatus.Team[bTeam].bFirstID; + SoldierID lastid = gTacticalStatus.Team[bTeam].bLastID; + for ( ; cnt < lastid; ++cnt ) { + pSoldier = cnt; if ( pSoldier != pSniper && pSoldier->sSectorX == gWorldSectorX && pSoldier->sSectorY == gWorldSectorY && pSoldier->bSectorZ == gbWorldSectorZ && pSoldier->IsSpotting( ) && PythSpacesAway( pSoldier->sGridNo, pSniper->sGridNo ) <= gGameExternalOptions.usSpotterRange diff --git a/Tactical/Soldier Create.cpp b/Tactical/Soldier Create.cpp index 1a2be1a6..4d84b470 100644 --- a/Tactical/Soldier Create.cpp +++ b/Tactical/Soldier Create.cpp @@ -574,7 +574,6 @@ INT16 gsStrategicDiseaseOriginSector = -1; SOLDIERTYPE* TacticalCreateSoldier( SOLDIERCREATE_STRUCT *pCreateStruct, SoldierID *pubID ) { SOLDIERTYPE Soldier; - INT32 cnt; SOLDIERTYPE *pTeamSoldier; BOOLEAN fGuyAvail = FALSE; UINT16 bLastTeamID; @@ -761,7 +760,7 @@ SOLDIERTYPE* TacticalCreateSoldier( SOLDIERCREATE_STRUCT *pCreateStruct, Soldier if( guiCurrentScreen != AUTORESOLVE_SCREEN ) { - cnt = gTacticalStatus.Team[ Soldier.bTeam ].bFirstID; + SoldierID cnt = gTacticalStatus.Team[ Soldier.bTeam ].bFirstID; // ATE: If we are a vehicle, and a player, start at a different slot ( 2 - max ) if( Soldier.ubBodyType == HUMVEE || @@ -778,8 +777,9 @@ SOLDIERTYPE* TacticalCreateSoldier( SOLDIERCREATE_STRUCT *pCreateStruct, Soldier bLastTeamID = gTacticalStatus.Team[ Soldier.bTeam ].bLastID; // look for all mercs on the same team, - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= bLastTeamID; cnt++,pTeamSoldier++) + for ( ; cnt <= bLastTeamID; ++cnt ) { + pTeamSoldier = cnt; if ( !pTeamSoldier->bActive ) { fGuyAvail = TRUE; @@ -794,7 +794,7 @@ SOLDIERTYPE* TacticalCreateSoldier( SOLDIERCREATE_STRUCT *pCreateStruct, Soldier } // OK, set ID - Soldier.ubID = (UINT16)cnt; + Soldier.ubID = cnt; *pubID = Soldier.ubID; } @@ -3031,7 +3031,7 @@ void ForceSoldierProfileID( SOLDIERTYPE *pSoldier, UINT8 ubProfileID ) SOLDIERTYPE* ReserveTacticalSoldierForAutoresolve( UINT8 ubSoldierClass ) { - INT32 i, iStart, iEnd; + SoldierID i, iStart, iEnd; SOLDIERTYPE *pSoldier; //This code looks for a soldier of specified type that currently exists in tactical and //returns the pointer to that soldier. This is used when copying the exact status of @@ -3049,13 +3049,13 @@ SOLDIERTYPE* ReserveTacticalSoldierForAutoresolve( UINT8 ubSoldierClass ) iEnd = gTacticalStatus.Team[ CREATURE_TEAM ].bLastID; } for( i = iStart; i <= iEnd; ++i ) - { - if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->bInSector && MercPtrs[ i ]->stats.bLife && !TileIsOutOfBounds(MercPtrs[ i ]->sGridNo)) + { + if( i->bActive && i->bInSector && i->stats.bLife && !TileIsOutOfBounds(i->sGridNo)) { - if( MercPtrs[ i ]->ubSoldierClass == ubSoldierClass ) + if( i->ubSoldierClass == ubSoldierClass ) { //reserve this soldier - MercPtrs[ i ]->sGridNo = NOWHERE; + i->sGridNo = NOWHERE; //Allocate and copy the soldier pSoldier = new SOLDIERTYPE(*MercPtrs[i]); //(SOLDIERTYPE*)MemAlloc( SIZEOF_SOLDIERTYPE ); @@ -3348,7 +3348,7 @@ SOLDIERTYPE* TacticalCreateZombie() SOLDIERTYPE* ReserveTacticalMilitiaSoldierForAutoresolve( UINT8 ubSoldierClass ) { - INT32 i, iStart, iEnd; + SoldierID i, iStart, iEnd; SOLDIERTYPE *pSoldier; // For description look original ReserveTacticalSoldierForAutoresolve() @@ -3356,14 +3356,14 @@ SOLDIERTYPE* ReserveTacticalMilitiaSoldierForAutoresolve( UINT8 ubSoldierClass ) iStart = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID; iEnd = gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; - for( i = iStart; i <= iEnd; i++ ) + for( i = iStart; i <= iEnd; ++i ) { - if( MercPtrs[ i ]->bActive && MercPtrs[ i ]->bInSector && MercPtrs[ i ]->stats.bLife && !TileIsOutOfBounds(MercPtrs[ i ]->sGridNo)) + if( i->bActive && i->bInSector && i->stats.bLife && !TileIsOutOfBounds(i->sGridNo)) { - if( MercPtrs[ i ]->ubSoldierClass == ubSoldierClass ) + if( i->ubSoldierClass == ubSoldierClass ) { //reserve this soldier - MercPtrs[ i ]->sGridNo = NOWHERE; + i->sGridNo = NOWHERE; //Allocate and copy the soldier pSoldier = new SOLDIERTYPE(*MercPtrs[i]); //(SOLDIERTYPE*)MemAlloc( SIZEOF_SOLDIERTYPE ); diff --git a/Tactical/Soldier Init List.cpp b/Tactical/Soldier Init List.cpp index 9568210e..e0a02013 100644 --- a/Tactical/Soldier Init List.cpp +++ b/Tactical/Soldier Init List.cpp @@ -1891,9 +1891,9 @@ void AddSoldierInitListMilitia( UINT16 ubNumGreen, UINT16 ubNumRegs, UINT16 ubNu { // determine how many militia have already been created in this sector (this can also have happened in another function), so count all active ones UINT16 tacticalmilitia = 0; - for ( UINT16 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]->bInSector && MercPtrs[i]->bActive ) + if ( i->bInSector && i->bActive ) ++tacticalmilitia; } @@ -3205,10 +3205,11 @@ void SectorAddAssassins( INT16 sMapX, INT16 sMapY, INT16 sMapZ ) // count current number of civilians UINT16 numberofcivs = 0; SOLDIERTYPE* pTeamSoldier = NULL; - INT32 cnt = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; - INT32 lastid = gTacticalStatus.Team[ CIV_TEAM ].bLastID; - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt < lastid; ++cnt, ++pTeamSoldier) + SoldierID cnt = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; + SoldierID lastid = gTacticalStatus.Team[ CIV_TEAM ].bLastID; + for ( ; cnt < lastid; ++cnt ) { + pTeamSoldier = cnt; // check if teamsoldier exists in this sector if ( pTeamSoldier && pTeamSoldier->bActive && pTeamSoldier->bInSector && pTeamSoldier->sSectorX == sMapX && pTeamSoldier->sSectorY == sMapY && pTeamSoldier->bSectorZ == sMapZ ) ++numberofcivs; @@ -3276,10 +3277,11 @@ void SectorAddPrisonersofWar( INT16 sMapX, INT16 sMapY, INT16 sMapZ ) UINT16 numberofcivs = 0; UINT16 numberofpows = 0; SOLDIERTYPE* pTeamSoldier = NULL; - INT32 cnt = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; - INT32 lastid = gTacticalStatus.Team[ CIV_TEAM ].bLastID; - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt < lastid; ++cnt, ++pTeamSoldier) + SoldierID cnt = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; + SoldierID lastid = gTacticalStatus.Team[ CIV_TEAM ].bLastID; + for ( ; cnt < lastid; ++cnt ) { + pTeamSoldier = cnt; // check if teamsoldier exists in this sector if ( pTeamSoldier && pTeamSoldier->bActive && pTeamSoldier->bInSector && pTeamSoldier->sSectorX == sMapX && pTeamSoldier->sSectorY == sMapY && pTeamSoldier->bSectorZ == sMapZ ) ++numberofcivs; diff --git a/Tactical/Soldier Profile.cpp b/Tactical/Soldier Profile.cpp index f5d9a379..f1afe93f 100644 --- a/Tactical/Soldier Profile.cpp +++ b/Tactical/Soldier Profile.cpp @@ -2717,11 +2717,10 @@ void OverwriteMercOpinionsWithXMLData( UINT32 uiLoop ) // SANDRO - added function INT8 CheckMercsNearForCharTraits( UINT8 ubProfileID, INT8 bCharTraitID ) { - INT8 bNumber = 0; - UINT32 uiLoop; - SOLDIERTYPE * pSoldier; - SOLDIERTYPE * pTeammate; - BOOLEAN fOnlyOneException = FALSE; + INT8 bNumber = 0; + SOLDIERTYPE * pSoldier; + SOLDIERTYPE *pTeammate; + BOOLEAN fOnlyOneException = FALSE; pSoldier = FindSoldierByProfileID( ubProfileID, FALSE ); if (!pSoldier || !( pSoldier->bActive ) || !( pSoldier->bInSector ) ) @@ -2729,9 +2728,9 @@ INT8 CheckMercsNearForCharTraits( UINT8 ubProfileID, INT8 bCharTraitID ) return( -1 ); } - for ( uiLoop = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID; uiLoop <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID; uiLoop++) + for ( SoldierID uiLoop = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID; uiLoop <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID; ++uiLoop ) { - pTeammate = MercPtrs[ uiLoop ]; + pTeammate = uiLoop; if ( pTeammate == NULL ) { continue; diff --git a/Tactical/Strategic Exit GUI.cpp b/Tactical/Strategic Exit GUI.cpp index eb8192fc..d87eb3b7 100644 --- a/Tactical/Strategic Exit GUI.cpp +++ b/Tactical/Strategic Exit GUI.cpp @@ -397,17 +397,17 @@ void DoneFadeInWarp( void ) void DoneFadeOutWarpCallback( void ) { - INT32 cnt; SOLDIERTYPE *pSoldier; // Warp! // Set insertion data... - 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; // Are we in this sector, On the current squad? if ( pSoldier->bActive && pSoldier->stats.bLife >= OKLIFE && pSoldier->bInSector ) { diff --git a/Tactical/Tactical Save.cpp b/Tactical/Tactical Save.cpp index 852032d0..9efc1edf 100644 --- a/Tactical/Tactical Save.cpp +++ b/Tactical/Tactical Save.cpp @@ -119,7 +119,7 @@ void SaveNPCInformationToProfileStruct( ); BOOLEAN DoesTempFileExistsForMap( UINT32 uiType, INT16 sMapX, INT16 sMapY, INT8 bMapZ ); -INT16 GetSoldierIDFromAnyMercID(UINT8 ubMercID); +SoldierID GetSoldierIDFromAnyMercID(UINT8 ubMercID); BOOLEAN SetUnderGroundSectorFlag( INT16 sSectorX, INT16 sSectorY, UINT8 ubSectorZ, UINT32 uiFlagToSet ); @@ -1131,7 +1131,6 @@ BOOLEAN SaveCurrentSectorsInformationToTempItemFile( ) void HandleAllReachAbleItemsInTheSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ ) { // find out which items in the list are reachable - UINT32 uiCounter = 0; UINT8 ubDir, ubMovementCost; BOOLEAN fReachable = FALSE; INT32 sGridNo = NOWHERE, sGridNo2 = NOWHERE; @@ -1179,9 +1178,9 @@ void HandleAllReachAbleItemsInTheSector( INT16 sSectorX, INT16 sSectorY, INT8 bS { sGridNo2 = gMapInformation.sIsolatedGridNo; - for( uiCounter = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; uiCounter <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++uiCounter ) + for( SoldierID uiCounter = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; uiCounter <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++uiCounter ) { - pSoldier = MercPtrs[ uiCounter ]; + pSoldier = uiCounter; if ( pSoldier && pSoldier->bActive && pSoldier->stats.bLife > 0 && pSoldier->sSectorX == sSectorX && pSoldier->sSectorY == sSectorY && pSoldier->bSectorZ == bSectorZ ) { if ( FindBestPath( pSoldier, sGridNo2, pSoldier->pathing.bLevel, WALKING, NO_COPYROUTE, 0 ) ) @@ -1200,7 +1199,7 @@ void HandleAllReachAbleItemsInTheSector( INT16 sSectorX, INT16 sSectorY, INT8 bS GlobalItemsReachableTest( sGridNo, sGridNo2 ); - for( uiCounter = 0; uiCounter < guiNumWorldItems; ++uiCounter ) + for( UINT32 uiCounter = 0; uiCounter < guiNumWorldItems; ++uiCounter ) { // reset reachablity fReachable = FALSE; @@ -2130,29 +2129,26 @@ BOOLEAN DoesTempFileExistsForMap( UINT32 uiType, INT16 sMapX, INT16 sMapY, INT8 } -INT16 GetSoldierIDFromAnyMercID(UINT8 ubMercID) +SoldierID GetSoldierIDFromAnyMercID(UINT8 ubMercID) { - UINT16 cnt; - UINT16 ubLastTeamID; SOLDIERTYPE *pTeamSoldier; + SoldierID cnt = gTacticalStatus.Team[OUR_TEAM].bFirstID; + SoldierID ubLastTeamID = TOTAL_SOLDIERS; - cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; - - ubLastTeamID = TOTAL_SOLDIERS; - - // look for all mercs on the same team, - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= ubLastTeamID; cnt++,pTeamSoldier++) + // look for all mercs on the same team, + for ( ; cnt <= ubLastTeamID; ++cnt ) { - if( pTeamSoldier->bActive ) + pTeamSoldier = cnt; + if ( pTeamSoldier->bActive ) { if ( pTeamSoldier->ubProfile == ubMercID ) { - return( cnt ); + return(cnt); } } } - return( -1 ); + return(NOBODY); } @@ -2554,9 +2550,9 @@ BOOLEAN SetSectorFlag( INT16 sMapX, INT16 sMapY, UINT8 bMapZ, UINT32 uiFlagToSet UpdateLastDayOfPlayerActivity( (UINT16) GetWorldDay() ); } - for ( UINT16 i = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; i <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; i++ ) + for ( SoldierID id = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; id <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++id ) { - SOLDIERTYPE *pSoldier = MercPtrs[i]; + SOLDIERTYPE *pSoldier = id; if( pSoldier->bActive && pSoldier->stats.bLife && !(pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE) && pSoldier->ubProfile != NO_PROFILE && pSoldier->sSectorX == sMapX && pSoldier->sSectorY == sMapY && pSoldier->bSectorZ == bMapZ && !pSoldier->flags.fBetweenSectors && diff --git a/Tactical/Tactical Turns.cpp b/Tactical/Tactical Turns.cpp index 98f33558..38ec44fa 100644 --- a/Tactical/Tactical Turns.cpp +++ b/Tactical/Tactical Turns.cpp @@ -46,7 +46,6 @@ void HandleRPCDescription( ) UINT16 ubNumMercs = 0; UINT16 ubChosenMerc = 0; SOLDIERTYPE *pTeamSoldier; - INT32 cnt2; BOOLEAN fSAMSite = FALSE; @@ -97,12 +96,13 @@ void HandleRPCDescription( ) // OK, count how many rpc guys we have.... // set up soldier ptr as first element in mercptrs list - cnt2 = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; + SoldierID cnt2 = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; if (gTacticalStatus.ubGuideDescriptionToUse != 100) { // run through list - for ( pTeamSoldier = MercPtrs[cnt2]; cnt2 <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++cnt2, pTeamSoldier++ ) + for ( ; cnt2 <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++cnt2 ) { + pTeamSoldier = cnt2; // Add guy if he's a candidate... if ( RPC_RECRUITED( pTeamSoldier ) ) { @@ -137,8 +137,9 @@ void HandleRPCDescription( ) { // run through list cnt2 = gTacticalStatus.Team[gbPlayerNum].bFirstID; - for ( pTeamSoldier = MercPtrs[cnt2]; cnt2 <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++cnt2, pTeamSoldier++ ) + for ( ; cnt2 <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++cnt2 ) { + pTeamSoldier = cnt2; if ( pTeamSoldier->stats.bLife >= OKLIFE && pTeamSoldier->bActive && pTeamSoldier->sSectorX == gTacticalStatus.bGuideDescriptionSectorX && pTeamSoldier->sSectorY == gTacticalStatus.bGuideDescriptionSectorY && pTeamSoldier->bSectorZ == gbWorldSectorZ && @@ -154,7 +155,6 @@ void HandleRPCDescription( ) void HandleTacticalEndTurn( ) { - UINT32 cnt; SOLDIERTYPE *pSoldier; UINT32 uiTime; static UINT32 uiTimeSinceLastStrategicUpdate = 0; @@ -239,9 +239,10 @@ void HandleTacticalEndTurn( ) BeginLoggingForBleedMeToos( TRUE ); - cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( 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; if ( pSoldier->bActive && pSoldier->stats.bLife > 0 && !( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) ) { // Handle everything from getting breath back, to bleeding, etc @@ -275,7 +276,7 @@ void HandleTacticalEndTurn( ) // OK, loop through the mercs to perform 'end turn' events on each... // We're looping through only mercs in tactical engine, ignoring our mercs // because they were done earilier... - for ( cnt = 0; cnt < guiNumMercSlots; cnt++ ) + for ( UINT32 cnt = 0; cnt < guiNumMercSlots; cnt++ ) { pSoldier = MercSlots[ cnt ]; diff --git a/Tactical/TeamTurns.cpp b/Tactical/TeamTurns.cpp index 964bbdf4..efac8945 100644 --- a/Tactical/TeamTurns.cpp +++ b/Tactical/TeamTurns.cpp @@ -136,8 +136,7 @@ void ClearIntList( void ) BOOLEAN BloodcatsPresent( void ) { - INT32 iLoop; - SOLDIERTYPE * pSoldier; + SOLDIERTYPE *pSoldier; DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"BloodcatsPresent"); if ( gTacticalStatus.Team[ CREATURE_TEAM ].bTeamActive == FALSE ) @@ -145,9 +144,9 @@ BOOLEAN BloodcatsPresent( void ) return( FALSE ); } - for ( iLoop = gTacticalStatus.Team[ CREATURE_TEAM ].bFirstID; iLoop <= gTacticalStatus.Team[ CREATURE_TEAM ].bLastID; iLoop++ ) + for ( SoldierID iLoop = gTacticalStatus.Team[ CREATURE_TEAM ].bFirstID; iLoop <= gTacticalStatus.Team[ CREATURE_TEAM ].bLastID; ++iLoop ) { - pSoldier = MercPtrs[ iLoop ]; + pSoldier = iLoop; if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife > 0 && pSoldier->ubBodyType == BLOODCAT ) { @@ -160,7 +159,6 @@ BOOLEAN BloodcatsPresent( void ) void StartPlayerTeamTurn( BOOLEAN fDoBattleSnd, BOOLEAN fEnteringCombatMode ) { - INT32 cnt; DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"StartPlayerTeamTurn"); // SOLDIERTYPE *pSoldier; // EV_S_BEGINTURN SBeginTurn; @@ -178,8 +176,6 @@ void StartPlayerTeamTurn( BOOLEAN fDoBattleSnd, BOOLEAN fEnteringCombatMode ) // make sure set properly in gTacticalStatus: gTacticalStatus.ubCurrentTeam = OUR_TEAM; - cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - InitPlayerUIBar( FALSE ); if ( gTacticalStatus.uiFlags & TURNBASED ) @@ -197,6 +193,7 @@ void StartPlayerTeamTurn( BOOLEAN fDoBattleSnd, BOOLEAN fEnteringCombatMode ) // ATE: Commented out - looks like this message is called earlier for our team // look for all mercs on the same team, + //SoldierID cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; //for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++,pSoldier++) //{ // if ( pSoldier->bActive && pSoldier->stats.bLife > 0 ) @@ -302,7 +299,6 @@ void EndTurn( UINT8 ubNextTeam ) { DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"EndTurn"); SOLDIERTYPE * pSoldier; - INT32 cnt; //Check for enemy pooling (add enemies if there happens to be more than the max in the //current battle. If one or more slots have freed up, we can add them now. @@ -344,9 +340,10 @@ void EndTurn( UINT8 ubNextTeam ) FreezeInterfaceForEnemyTurn(); // Loop through all mercs and set to moved - cnt = gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bFirstID; - for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bLastID; cnt++,pSoldier++) + SoldierID cnt = gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bFirstID; + for ( ; cnt <= gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bLastID; ++cnt ) { + pSoldier = cnt; if ( pSoldier->bActive ) { pSoldier->aiData.bMoved = TRUE; @@ -380,7 +377,6 @@ void EndAITurn( void ) { DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"EndAITurn"); SOLDIERTYPE * pSoldier; - INT32 cnt; // Remove any deadlock message EndDeadlockMsg( ); @@ -395,9 +391,10 @@ void EndAITurn( void ) } else { - cnt = gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bFirstID; - for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bLastID; cnt++,pSoldier++) + SoldierID cnt = gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bFirstID; + for ( ; cnt <= gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bLastID; ++cnt ) { + pSoldier = cnt; if ( pSoldier->bActive ) { pSoldier->aiData.bMoved = TRUE; @@ -417,7 +414,6 @@ void EndAllAITurns( void ) DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"EndAllAITurns"); // warp turn to the player's turn SOLDIERTYPE * pSoldier; - INT32 cnt; // Remove any deadlock message EndDeadlockMsg( ); @@ -428,9 +424,10 @@ void EndAllAITurns( void ) if ( gTacticalStatus.ubCurrentTeam != gbPlayerNum ) { - cnt = gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bFirstID; - for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bLastID; cnt++,pSoldier++) + SoldierID id = gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bFirstID; + for ( ; id <= gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bLastID; ++id ) { + pSoldier = id; if ( pSoldier->bActive ) { pSoldier->aiData.bMoved = TRUE; @@ -463,9 +460,10 @@ void EndTurnEvents( void ) DecaySmokeEffects( GetWorldTotalSeconds( ) ); SOLDIERTYPE* pSoldier = NULL; - UINT32 cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt, ++pSoldier) + SoldierID id = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; + for ( ; id <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++id ) { + pSoldier = id; if ( pSoldier->bActive && pSoldier->stats.bLife > 0 )//&& !( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) && !( AM_A_ROBOT( pSoldier ) ) ) { // Flugente: update multi-turn actions @@ -505,8 +503,6 @@ BOOLEAN LightningEndOfTurn( UINT8 ubTeam ); void BeginTeamTurn( UINT8 ubTeam ) { DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"BeginTeamTurn"); - INT32 cnt; - SoldierID ubID; SOLDIERTYPE *pSoldier; //rain @@ -573,9 +569,10 @@ void BeginTeamTurn( UINT8 ubTeam ) // decay team's public opplist DecayPublicOpplist( ubTeam ); - cnt = gTacticalStatus.Team[ ubTeam ].bFirstID; - for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ ubTeam ].bLastID; cnt++,pSoldier++) + SoldierID id = gTacticalStatus.Team[ ubTeam ].bFirstID; + for ( ; id <= gTacticalStatus.Team[ ubTeam ].bLastID; ++id ) { + pSoldier = id; if ( pSoldier->bActive && pSoldier->stats.bLife > 0) { // decay personal opplist, and refresh APs and BPs @@ -644,7 +641,7 @@ void BeginTeamTurn( UINT8 ubTeam ) if ( BuildAIListForTeam( ubTeam ) ) { - ubID = RemoveFirstAIListEntry(); + SoldierID ubID = RemoveFirstAIListEntry(); if (ubID != NOBODY) { // Dirty panel interface! @@ -810,12 +807,12 @@ BOOLEAN EveryoneInInterruptListOnSameTeam( void ) void StartInterrupt( void ) { - UINT16 ubFirstInterrupter; - INT8 bTeam; - SOLDIERTYPE * pSoldier; - SOLDIERTYPE * pTempSoldier; - UINT16 ubInterrupter; - INT32 cnt; + INT8 bTeam; + SOLDIERTYPE *pSoldier; + SOLDIERTYPE *pTempSoldier; + SoldierID ubFirstInterrupter; + SoldierID ubInterrupter; + INT32 cnt; DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"StartInterrupt"); ubFirstInterrupter = LATEST_INTERRUPT_GUY; @@ -837,9 +834,9 @@ void StartInterrupt( void ) gTacticalStatus.fInterruptOccurred = TRUE; - cnt = 0; - for ( pTempSoldier = MercPtrs[ cnt ]; cnt < MAX_NUM_SOLDIERS; cnt++,pTempSoldier++) + for ( SoldierID id = 0; id < MAX_NUM_SOLDIERS; ++id ) { + pTempSoldier = id; if ( pTempSoldier->bActive ) { pTempSoldier->bMovedPriorToInterrupt = pTempSoldier->aiData.bMoved; @@ -862,7 +859,7 @@ void StartInterrupt( void ) //while( 1 ) for( iCounter = 0; iCounter < MAX_NUM_SOLDIERS; iCounter++ ) { - MercPtrs[ubInterrupter]->aiData.bMoved = FALSE; + ubInterrupter->aiData.bMoved = FALSE; DebugMsg( TOPIC_JA2INTERRUPT, DBG_LEVEL_3, String("INTERRUPT: popping %d off of the interrupt queue", ubInterrupter ) ); REMOVE_LATEST_INTERRUPT_GUY(); @@ -873,7 +870,7 @@ void StartInterrupt( void ) { continue; } - else if (MercPtrs[ubInterrupter]->bTeam != bTeam) + else if (ubInterrupter->bTeam != bTeam) { break; } @@ -891,7 +888,7 @@ void StartInterrupt( void ) handleInterrupt = FALSE; // build string in separate loop here, want to linearly process squads... - SOLDIERTYPE *pInterruptedSoldier = MercPtrs[ubInterrupter]; + SOLDIERTYPE *pInterruptedSoldier = ubInterrupter; for ( iSquad = 0; iSquad < NUMBER_OF_SQUADS; iSquad++ ) { for ( iCounter = 0; iCounter < NUMBER_OF_SOLDIERS_PER_SQUAD; iCounter++ ) @@ -981,9 +978,9 @@ void StartInterrupt( void ) PlayJA2Sample( ENDTURN_1, RATE_11025, MIDVOLUME, 1, MIDDLEPAN ); // report any close call quotes for us here - for ( iCounter = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; iCounter <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; iCounter++ ) + for ( SoldierID id = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; id <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++id ) { - SOLDIERTYPE *pSoldier = MercPtrs[iCounter]; + SOLDIERTYPE *pSoldier = id; if ( OK_INSECTOR_MERC( pSoldier ) ) { @@ -1022,7 +1019,7 @@ void StartInterrupt( void ) UINT16 usCounter; for( usCounter = 0; usCounter < MAX_NUM_SOLDIERS; usCounter++ ) { - MercPtrs[ubInterrupter]->aiData.bMoved = FALSE; + ubInterrupter->aiData.bMoved = FALSE; DebugMsg( TOPIC_JA2INTERRUPT, DBG_LEVEL_3, String("INTERRUPT: popping %d off of the interrupt queue", ubInterrupter ) ); @@ -1033,7 +1030,7 @@ void StartInterrupt( void ) { continue; } - else if (MercPtrs[ubInterrupter]->bTeam != bTeam) + else if (ubInterrupter->bTeam != bTeam) { break; } @@ -1047,12 +1044,12 @@ void StartInterrupt( void ) BuildAIListForTeam( bTeam ); // set to the new first interrupter - cnt = RemoveFirstAIListEntry(); + SoldierID id = RemoveFirstAIListEntry(); // sevenfm: RemoveFirstAIListEntry() can return NOBODY - if( cnt != NOBODY ) + if( id != NOBODY ) { - pTempSoldier = MercPtrs[ cnt ]; + pTempSoldier = id; // sevenfm: don't do anything if pTempSoldier is NULL if( pTempSoldier != NULL ) @@ -1117,16 +1114,15 @@ void StartInterrupt( void ) void EndInterrupt( BOOLEAN fMarkInterruptOccurred ) { - UINT16 ubInterruptedSoldier; - SOLDIERTYPE * pSoldier; - SOLDIERTYPE * pTempSoldier; - INT32 cnt; - BOOLEAN fFound; - INT16 ubMinAPsToAttack; + SoldierID ubInterruptedSoldier; + SOLDIERTYPE *pSoldier; + SOLDIERTYPE *pTempSoldier; + BOOLEAN fFound; + INT16 ubMinAPsToAttack; DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,"EndInterrupt"); - for ( cnt = gubOutOfTurnPersons; cnt > 0; cnt-- ) + for ( UINT16 cnt = gubOutOfTurnPersons; cnt > 0; cnt-- ) { DebugMsg( TOPIC_JA2INTERRUPT, DBG_LEVEL_3, String("ENDINT: Q position %d: %d", cnt, gubOutOfTurnOrder[ cnt ] ) ); } @@ -1144,9 +1140,10 @@ void EndInterrupt( BOOLEAN fMarkInterruptOccurred ) } // Loop through all mercs and see if any passed on this interrupt - cnt = gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bFirstID; - for ( pTempSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bLastID; cnt++,pTempSoldier++) + SoldierID id = gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bFirstID; + for ( ; id <= gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bLastID; ++id ) { + pTempSoldier = id; if ( pTempSoldier->bActive && pTempSoldier->bInSector && !pTempSoldier->aiData.bMoved && (pTempSoldier->bActionPoints == pTempSoldier->aiData.bIntStartAPs)) { ubMinAPsToAttack = MinAPsToAttack( pTempSoldier, pTempSoldier->sLastTarget, FALSE, 0 ); @@ -1163,58 +1160,58 @@ void EndInterrupt( BOOLEAN fMarkInterruptOccurred ) // resume interrupted interrupt //hayden - if (!is_networked) + if ( !is_networked ) { StartInterrupt(); - } - else + } + else { - UINT16 nubFirstInterrupter; - INT8 nbTeam; - SOLDIERTYPE * npSoldier; - + SoldierID nubFirstInterrupter; + INT8 nbTeam; + SOLDIERTYPE *npSoldier; + nubFirstInterrupter = LATEST_INTERRUPT_GUY; - npSoldier = MercPtrs[nubFirstInterrupter]; + npSoldier = nubFirstInterrupter; nbTeam = npSoldier->bTeam; - + //pSoldier is interrupted //but its not available //needs calculating //npSoldier,nbTeam is interruptor //hayden #ifdef BETAVERSION - ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"unchecked interrupt call area:(resume interrupted interrupt)..."); + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"unchecked interrupt call area:(resume interrupted interrupt)..." ); #endif - - if ((nbTeam > 0) && (nbTeam <6 ) && is_server) // AI interrupt resume and im server + + if ( (nbTeam > 0) && (nbTeam < 6) && is_server ) // AI interrupt resume and im server { send_interrupt( npSoldier ); StartInterrupt(); - ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Continuing interrupt with %s and AI", TeamNameStrings[npSoldier->bTeam]);//tried to use pSoldier, but its not available. find another way to get correct team + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Continuing interrupt with %s and AI", TeamNameStrings[npSoldier->bTeam] );//tried to use pSoldier, but its not available. find another way to get correct team } - else if(is_server && gTacticalStatus.ubCurrentTeam == 1)// resume AI interrupted and im server + else if ( is_server && gTacticalStatus.ubCurrentTeam == 1 )// resume AI interrupted and im server { //hayden send_interrupt( npSoldier ); - if(nbTeam !=0) - intAI(npSoldier); - else - StartInterrupt(); - - ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Continuing interrupt of AI by %s", TeamNameStrings[npSoldier->bTeam]); + if ( nbTeam != 0 ) + intAI( npSoldier ); + else + StartInterrupt(); + + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Continuing interrupt of AI by %s", TeamNameStrings[npSoldier->bTeam] ); } - + #ifdef INTERRUPT_MP_DEADLOCK_FIX //its our turn//else// pure client awarding interrupt resume //its our turn - else if(gTacticalStatus.ubCurrentTeam == 0) + else if ( gTacticalStatus.ubCurrentTeam == 0 ) #else // pure client awarding interrupt resume else #endif { - ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Continuing interrupt with %s", TeamNameStrings[npSoldier->bTeam]);//this can be simplified if above comment is implemented + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Continuing interrupt with %s", TeamNameStrings[npSoldier->bTeam] );//this can be simplified if above comment is implemented //ClearIntList(); //hayden//may need more work. StartInterrupt(); @@ -1228,11 +1225,11 @@ void EndInterrupt( BOOLEAN fMarkInterruptOccurred ) DebugMsg( TOPIC_JA2INTERRUPT, DBG_LEVEL_3, String("INTERRUPT: interrupt over, %d's team regains control", ubInterruptedSoldier ) ); - pSoldier = MercPtrs[ubInterruptedSoldier]; + pSoldier = ubInterruptedSoldier; - cnt = 0; - for ( pTempSoldier = MercPtrs[ cnt ]; cnt < MAX_NUM_SOLDIERS; cnt++,pTempSoldier++) + for ( SoldierID id = 0; id < MAX_NUM_SOLDIERS; ++id) { + pTempSoldier = id; if ( pTempSoldier->bActive ) { // AI guys only here... @@ -1371,9 +1368,10 @@ void EndInterrupt( BOOLEAN fMarkInterruptOccurred ) fFound = FALSE; // rebuild list for this team if anyone on the team is still available - cnt = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; - for ( pTempSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bLastID; cnt++,pTempSoldier++) + SoldierID id = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; + for ( ; id <= gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bLastID; ++id ) { + pTempSoldier = id; if ( pTempSoldier->bActive && pTempSoldier->bInSector && pTempSoldier->stats.bLife >= OKLIFE ) { fFound = TRUE; @@ -1390,16 +1388,16 @@ void EndInterrupt( BOOLEAN fMarkInterruptOccurred ) { // now bubble up everyone left in the interrupt queue, starting // at the front of the array - for (cnt = 1; cnt <= gubOutOfTurnPersons; cnt++) + for (UINT16 cnt = 1; cnt <= gubOutOfTurnPersons; cnt++) { MoveToFrontOfAIList( gubOutOfTurnOrder[ cnt ] ); } - cnt = RemoveFirstAIListEntry(); - if (cnt != NOBODY) + SoldierID id = RemoveFirstAIListEntry(); + if (id != NOBODY) { fFound = TRUE; - StartNPCAI( MercPtrs[ cnt ] ); + StartNPCAI( id ); } } @@ -2382,7 +2380,7 @@ void ResolveInterruptsVs( SOLDIERTYPE * pSoldier, UINT8 ubInterruptType) { DebugMsg (TOPIC_JA2INTERRUPT,DBG_LEVEL_3,String("ResolveInterruptsVs: Soldier ID = %d, APs = %d (interrupt type = %d)",pSoldier->ubID,pSoldier->bActionPoints, ubInterruptType)); UINT8 ubTeam; - UINT16 ubOpp; + SoldierID ubOpp; UINT16 ubIntCnt; UINT16 ubIntList[MAXMERCS]; UINT8 ubIntDiff[MAXMERCS]; @@ -2404,9 +2402,9 @@ void ResolveInterruptsVs( SOLDIERTYPE * pSoldier, UINT8 ubInterruptType) // WDS fix broken interrupts (I hope...) if (/*gTacticalStatus.Team[ubTeam].bTeamActive &&*/ (gTacticalStatus.Team[ubTeam].bSide != pSoldier->bSide) && ubTeam != CIV_TEAM) { - for ( ubOpp = gTacticalStatus.Team[ ubTeam ].bFirstID; ubOpp <= gTacticalStatus.Team[ ubTeam ].bLastID; ubOpp++) + for ( ubOpp = gTacticalStatus.Team[ ubTeam ].bFirstID; ubOpp <= gTacticalStatus.Team[ ubTeam ].bLastID; ++ubOpp) { - pOpponent = MercPtrs[ubOpp]; + pOpponent = ubOpp; AssertNotNIL(pOpponent); if ( pOpponent->bActive && pOpponent->bInSector && (pOpponent->stats.bLife >= OKLIFE) && (pOpponent->bBreath >= OKBREATH) && !(pOpponent->bCollapsed) ) { @@ -2519,17 +2517,16 @@ void ResolveInterruptsVs( SOLDIERTYPE * pSoldier, UINT8 ubInterruptType) { // if anyone on this team is under AI control, remove // their AI control flag and put them on the queue instead of this guy - for ( ubLoop = gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bFirstID; ubLoop <= gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bLastID; ubLoop++ ) + for ( SoldierID id = gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bFirstID; id <= gTacticalStatus.Team[ gTacticalStatus.ubCurrentTeam ].bLastID; ++id) { - if ( (MercPtrs[ ubLoop ]->flags.uiStatusFlags & SOLDIER_UNDERAICONTROL) ) + if ( id->flags.uiStatusFlags & SOLDIER_UNDERAICONTROL) { // this guy lost control - MercPtrs[ ubLoop ]->flags.uiStatusFlags &= (~SOLDIER_UNDERAICONTROL); - AddToIntList( ubLoop, FALSE, TRUE); + id->flags.uiStatusFlags &= (~SOLDIER_UNDERAICONTROL); + AddToIntList( id, FALSE, TRUE); break; } } - } else { diff --git a/Tactical/Turn Based Input.cpp b/Tactical/Turn Based Input.cpp index f4c6c575..4a3a2b37 100644 --- a/Tactical/Turn Based Input.cpp +++ b/Tactical/Turn Based Input.cpp @@ -2209,9 +2209,10 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) // sevenfm: unready weapon for all selected if (!fFound) { - UINT16 cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID; - for (SOLDIERTYPE *pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; cnt++, pSoldier++) + SoldierID cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID; + for (; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++cnt ) { + SOLDIERTYPE *pSoldier = cnt; if (pSoldier->bActive && pSoldier->bInSector && pSoldier->flags.uiStatusFlags & SOLDIER_MULTI_SELECTED && WeaponReady(pSoldier)) { pSoldier->InternalSoldierReadyWeapon(pSoldier->ubDirection, TRUE, FALSE); @@ -4125,14 +4126,16 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) // swap sungoggles and nightgoggles / put on gas masks case 'N': - SOLDIERTYPE *pTeamSoldier; - UINT16 bLoop; + { + SOLDIERTYPE *pTeamSoldier; + SoldierID id; // emergency command: everybody in this sector puts on gasmasks if ( fAlt ) { - for ( bLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID, pTeamSoldier = MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++, pTeamSoldier++ ) + for ( id = gTacticalStatus.Team[gbPlayerNum].bFirstID; id <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++id ) { + pTeamSoldier = id; if ( !AM_A_ROBOT( pTeamSoldier ) && pTeamSoldier->stats.bLife >= OKLIFE && (pTeamSoldier->sSectorX == gWorldSectorX) && (pTeamSoldier->sSectorY == gWorldSectorY) && (pTeamSoldier->bSectorZ == gbWorldSectorZ) ) { WearGasMaskIfAvailable( pTeamSoldier ); @@ -4149,37 +4152,39 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) { BOOLEAN fToNightVision; - for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID, pTeamSoldier=MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++, pTeamSoldier++) + for ( id = gTacticalStatus.Team[gbPlayerNum].bFirstID; id <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++id ) { - if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad( ) && !AM_A_ROBOT( pTeamSoldier ) ) + pTeamSoldier = id; + if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad() && !AM_A_ROBOT( pTeamSoldier ) ) { if ( pTeamSoldier->inv[HEAD1POS].exists() || pTeamSoldier->inv[HEAD2POS].exists() ) { - fToNightVision = ( Item[pTeamSoldier->inv[HEAD1POS].usItem].brightlightvisionrangebonus > 0 || Item[pTeamSoldier->inv[HEAD2POS].usItem].brightlightvisionrangebonus > 0 ); + fToNightVision = (Item[pTeamSoldier->inv[HEAD1POS].usItem].brightlightvisionrangebonus > 0 || Item[pTeamSoldier->inv[HEAD2POS].usItem].brightlightvisionrangebonus > 0); break; } - if ( bLoop == gTacticalStatus.Team[gbPlayerNum].bLastID ) + if ( id == gTacticalStatus.Team[gbPlayerNum].bLastID ) { // Default to night or day based on game hour fToNightVision = NightTime(); } } } - for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID, pTeamSoldier=MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++, pTeamSoldier++) + for ( id = gTacticalStatus.Team[gbPlayerNum].bFirstID; id <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++id ) { + pTeamSoldier = id; // HEADROCK HAM 3.5: When this INI setting is enabled, ALL mercs in the current sector will do a goggle swap. - if (gGameExternalOptions.fGoggleSwapAffectsAllMercsInSector) + if ( gGameExternalOptions.fGoggleSwapAffectsAllMercsInSector ) { if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->sSectorX == gWorldSectorX && pTeamSoldier->sSectorY == gWorldSectorY && pTeamSoldier->bSectorZ == gbWorldSectorZ && !AM_A_ROBOT( pTeamSoldier ) ) { - SwapGogglesUniformly(pTeamSoldier, fToNightVision); + SwapGogglesUniformly( pTeamSoldier, fToNightVision ); } } else { - if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad( ) && !AM_A_ROBOT( pTeamSoldier ) ) + if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad() && !AM_A_ROBOT( pTeamSoldier ) ) { - SwapGogglesUniformly(pTeamSoldier, fToNightVision); + SwapGogglesUniformly( pTeamSoldier, fToNightVision ); } } } @@ -4189,7 +4194,7 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) HandleTBSwapGoogles(); } break; - + } case 'n': if ( !AreInMeanwhile() ) { @@ -6271,7 +6276,6 @@ void HandleSelectMercSlot( UINT8 ubPanelSlot, INT8 bCode ) void TestMeanWhile( INT32 iID ) { MEANWHILE_DEFINITION MeanwhileDef; - INT32 cnt; SOLDIERTYPE *pSoldier; MeanwhileDef.sSectorX = gModSettings.ubMeanwhilePalaceSectorX; //3 @@ -6288,10 +6292,11 @@ void TestMeanWhile( INT32 iID ) // Loop through our mercs and set gridnos once some found..... // look for all mercs on the same team, - 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 ) { + pSoldier = cnt; // Are we a POW in this sector? if ( pSoldier->bActive && pSoldier->bInSector ) { @@ -6363,16 +6368,16 @@ void HandleStanceChangeFromUIKeys( UINT8 ubAnimHeight ) { // If we have multiple guys selected, make all change stance! SOLDIERTYPE * pSoldier; - INT32 cnt; if ( gTacticalStatus.fAtLeastOneGuyOnMultiSelect && !( gTacticalStatus.uiFlags & INCOMBAT ) ) { // OK, loop through all guys who are 'multi-selected' and // check if our currently selected guy is amoung the // lucky few.. if not, change to a guy who is... - cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( 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; if ( pSoldier->bActive && pSoldier->bInSector ) { if ( pSoldier->flags.uiStatusFlags & SOLDIER_MULTI_SELECTED ) @@ -6485,16 +6490,16 @@ void HandleStealthChangeFromUIKeys( ) { // If we have multiple guys selected, make all change stance! SOLDIERTYPE * pSoldier; - INT32 cnt; if ( gTacticalStatus.fAtLeastOneGuyOnMultiSelect && !( gTacticalStatus.uiFlags & INCOMBAT ) ) { // OK, loop through all guys who are 'multi-selected' and // check if our currently selected guy is amoung the // lucky few.. if not, change to a guy who is... - cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( 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; if ( pSoldier->bActive && !AM_A_ROBOT( pSoldier ) && pSoldier->bInSector ) { if ( pSoldier->flags.uiStatusFlags & SOLDIER_MULTI_SELECTED ) @@ -7682,12 +7687,13 @@ void HandleTBToggleStealthAll( void ) // Toggle squad's stealth mode..... // For each guy on squad... SOLDIERTYPE *pTeamSoldier; - UINT16 bLoop; + SoldierID bLoop; BOOLEAN fStealthOn = FALSE; // Check if at least one guy is on stealth.... - for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID, pTeamSoldier=MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++, pTeamSoldier++) + for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++bLoop ) { + pTeamSoldier = bLoop; if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad( ) ) { if ( pTeamSoldier->bStealthMode ) @@ -7697,8 +7703,9 @@ void HandleTBToggleStealthAll( void ) fStealthOn = !fStealthOn; - for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID, pTeamSoldier=MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++, pTeamSoldier++) + for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++bLoop ) { + pTeamSoldier = bLoop; if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad( ) && !AM_A_ROBOT( pTeamSoldier ) ) { if ( gpSMCurrentMerc != NULL && bLoop == gpSMCurrentMerc->ubID ) @@ -7715,6 +7722,7 @@ void HandleTBToggleStealthAll( void ) else ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, pMessageStrings[ MSG_SQUAD_OFF_STEALTHMODE ] ); } + void HandleTBToggleFireMode( void ) { // toggle fire mode @@ -7722,23 +7730,23 @@ void HandleTBToggleFireMode( void ) ( ( gsCurInterfacePanel != SM_PANEL ) || ( ButtonList[ iSMPanelButtons[ BURSTMODE_BUTTON ] ]->uiFlags & BUTTON_ENABLED ) ) ) SetBurstMode(); } + void HandleTBSelectAllMercs( void ) { - SOLDIERTYPE * pSoldier; - INT32 cnt; - - cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++, pSoldier++ ) - { - + SOLDIERTYPE *pSoldier; + SoldierID cnt = gTacticalStatus.Team[gbPlayerNum].bFirstID; + for ( ; cnt <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++cnt ) + { + pSoldier = cnt; // Check if this guy is OK to control.... - if ( OK_CONTROLLABLE_MERC( pSoldier ) && !( pSoldier->flags.uiStatusFlags & ( SOLDIER_VEHICLE | SOLDIER_PASSENGER | SOLDIER_DRIVER ) ) ) + if ( OK_CONTROLLABLE_MERC( pSoldier ) && !(pSoldier->flags.uiStatusFlags & (SOLDIER_VEHICLE | SOLDIER_PASSENGER | SOLDIER_DRIVER)) ) { pSoldier->flags.uiStatusFlags |= SOLDIER_MULTI_SELECTED; - } - } + } + } EndMultiSoldierSelection( TRUE ); } + void HandleTBCycleThroughKnownEnemies( void ) { if ( gTacticalStatus.uiFlags & TURNBASED && (gTacticalStatus.uiFlags & INCOMBAT) ) @@ -7747,6 +7755,7 @@ void HandleTBCycleThroughKnownEnemies( void ) CycleThroughKnownEnemies( ); } } + void HandleTBCycleThroughKnownEnemiesBackward( void ) { if ( gTacticalStatus.uiFlags & TURNBASED && (gTacticalStatus.uiFlags & INCOMBAT) ) @@ -7755,6 +7764,7 @@ void HandleTBCycleThroughKnownEnemiesBackward( void ) CycleThroughKnownEnemies( TRUE ); } } + void HandleTBCycleThroughVisibleEnemies( void ) { SOLDIERTYPE *pSoldier; @@ -7848,10 +7858,10 @@ void HandleTBSwapSidearm( void ) void HandleTBSwapGoogles( void ) { SOLDIERTYPE *pTeamSoldier; - UINT16 bLoop; - for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID, pTeamSoldier=MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++, pTeamSoldier++) + for ( SoldierID bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++bLoop ) { + pTeamSoldier = bLoop; // HEADROCK HAM 3.5: When this INI setting is enabled, ALL mercs in the current sector will do a goggle swap. if (gGameExternalOptions.fGoggleSwapAffectsAllMercsInSector) { @@ -7945,270 +7955,270 @@ void HandleTBReload( void ) } void HandleTBReloadAll( void ) { - if (! ( gTacticalStatus.fEnemyInSector ) ) + if ( !(gTacticalStatus.fEnemyInSector) ) + { + SOLDIERTYPE *pTeamSoldier; + SoldierID bLoop; + UINT16 bullets; + OBJECTTYPE *pGun, *pAmmo, *pAmmoMags; + + // Search for soldier + for ( bLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++bLoop ) + { + pTeamSoldier = bLoop; + if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad() && !AM_A_ROBOT( pTeamSoldier ) ) + { + // Search for gun in soldier inventory + UINT32 invsize = pTeamSoldier->inv.size(); + for ( UINT32 bLoop2 = 0; bLoop2 < invsize; ++bLoop2 ) { - SOLDIERTYPE *pTeamSoldier; - UINT16 bLoop; - UINT16 bullets; - OBJECTTYPE *pGun, *pAmmo, *pAmmoMags; - - // Search for soldier - for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID, pTeamSoldier=MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++, pTeamSoldier++) + if ( (Item[pTeamSoldier->inv[bLoop2].usItem].usItemClass & (IC_GUN | IC_LAUNCHER)) ) { - if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad( ) && !AM_A_ROBOT( pTeamSoldier ) ) + pGun = &(pTeamSoldier->inv[bLoop2]); + + UINT16 gunmagsize = GetMagSize( pGun ); + + //if magazine is not full + if ( (*pGun)[0]->data.gun.ubGunShotsLeft < gunmagsize ) { - // Search for gun in soldier inventory - UINT32 invsize = pTeamSoldier->inv.size(); - for (UINT32 bLoop2 = 0; bLoop2 < invsize; ++bLoop2) + // Search for ammo in sector + for ( UINT32 uiLoop = 0; uiLoop < guiNumWorldItems; ++uiLoop ) { - if ( (Item[pTeamSoldier->inv[bLoop2].usItem].usItemClass & (IC_GUN | IC_LAUNCHER)) ) + if ( (gWorldItems[uiLoop].bVisible == TRUE) && (gWorldItems[uiLoop].fExists) && (gWorldItems[uiLoop].usFlags & WORLD_ITEM_REACHABLE) && !(gWorldItems[uiLoop].usFlags & WORLD_ITEM_ARMED_BOMB) )//item exists, is reachable, is visible and is not trapped { - pGun = &(pTeamSoldier->inv[bLoop2]); - - UINT16 gunmagsize = GetMagSize( pGun ); - - //if magazine is not full - if ( (*pGun)[0]->data.gun.ubGunShotsLeft < gunmagsize ) + if ( (Item[gWorldItems[uiLoop].object.usItem].usItemClass & IC_AMMO) ) // the item is ammo { - // Search for ammo in sector - for ( UINT32 uiLoop = 0; uiLoop < guiNumWorldItems; ++uiLoop ) + pAmmo = &(gWorldItems[uiLoop].object); + + if ( CompatibleAmmoForGun( pAmmo, pGun ) ) // can use the ammo with this gun { - if ( (gWorldItems[ uiLoop ].bVisible == TRUE) && (gWorldItems[ uiLoop ].fExists) && (gWorldItems[ uiLoop ].usFlags & WORLD_ITEM_REACHABLE) && !(gWorldItems[ uiLoop ].usFlags & WORLD_ITEM_ARMED_BOMB) )//item exists, is reachable, is visible and is not trapped + // same ammo type in gun and magazine + if ( Magazine[Item[(*pGun)[0]->data.gun.usGunAmmoItem].ubClassIndex].ubAmmoType == Magazine[Item[pAmmo->usItem].ubClassIndex].ubAmmoType ) { - if ( ( Item[ gWorldItems[ uiLoop ].object.usItem ].usItemClass & IC_AMMO ) ) // the item is ammo - { - pAmmo = &( gWorldItems[ uiLoop ].object ); - - if ( CompatibleAmmoForGun( pAmmo, pGun ) ) // can use the ammo with this gun - { - // same ammo type in gun and magazine - if ( Magazine[Item[(*pGun)[0]->data.gun.usGunAmmoItem].ubClassIndex].ubAmmoType == Magazine[Item[pAmmo->usItem].ubClassIndex].ubAmmoType ) - { - ReloadGun( pTeamSoldier, pGun, pAmmo ); - } - - if ((*pAmmo)[0]->data.ubShotsLeft == 0) - { - RemoveItemFromPool( gWorldItems[ uiLoop ].sGridNo, uiLoop, gWorldItems[ uiLoop ].ubLevel ); - } - - // if gun is full, we can stop this - if ( (*pGun)[0]->data.gun.ubGunShotsLeft >= gunmagsize ) - break; - } - } + ReloadGun( pTeamSoldier, pGun, pAmmo ); } + + if ( (*pAmmo)[0]->data.ubShotsLeft == 0 ) + { + RemoveItemFromPool( gWorldItems[uiLoop].sGridNo, uiLoop, gWorldItems[uiLoop].ubLevel ); + } + + // if gun is full, we can stop this + if ( (*pGun)[0]->data.gun.ubGunShotsLeft >= gunmagsize ) + break; } } - //CHRISL: if not enough ammo in sector, reload using ammo carried in inventory - if ( (*pGun)[0]->data.gun.ubGunShotsLeft < gunmagsize ) - { - AutoReload( pTeamSoldier ); - } } } } - } - - //MM: loop thru the soldiers again (lazy copy/paste :p). could do it all at once, but then there may not be enough ammo from the world items to fill everyone's guns first - for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID, pTeamSoldier=MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; bLoop++, pTeamSoldier++) - { - if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad( ) && !AM_A_ROBOT( pTeamSoldier ) ) + //CHRISL: if not enough ammo in sector, reload using ammo carried in inventory + if ( (*pGun)[0]->data.gun.ubGunShotsLeft < gunmagsize ) { - // Search for ammo in soldier inventory - UINT32 invsize = pTeamSoldier->inv.size(); - for (UINT32 bLoop2 = 0; bLoop2 < invsize; ++bLoop2) - { - if ( Item[pTeamSoldier->inv[bLoop2].usItem].usItemClass & IC_AMMO ) - { - pAmmoMags = &(pTeamSoldier->inv[bLoop2]); - - for ( UINT16 stackMag = 0; stackMag < (*pAmmoMags).ubNumberOfObjects; stackMag++ ) - { - if ( (*pAmmoMags)[stackMag]->data.ubShotsLeft < Magazine[Item[pAmmoMags->usItem].ubClassIndex].ubMagSize ) - { - // Search for ammo in sector - for ( UINT32 uiLoop = 0; uiLoop < guiNumWorldItems; ++uiLoop ) - { - if ( (gWorldItems[ uiLoop ].bVisible == TRUE) && (gWorldItems[ uiLoop ].fExists) && (gWorldItems[ uiLoop ].usFlags & WORLD_ITEM_REACHABLE) && !(gWorldItems[ uiLoop ].usFlags & WORLD_ITEM_ARMED_BOMB) )//item exists, is reachable, is visible and is not trapped - { - if ( ( Item[ gWorldItems[ uiLoop ].object.usItem ].usItemClass & IC_AMMO ) ) // the item is ammo - { - pAmmo = &( gWorldItems[ uiLoop ].object ); - - if ( Magazine[Item[pAmmoMags->usItem].ubClassIndex].ubCalibre == Magazine[Item[pAmmo->usItem].ubClassIndex].ubCalibre ) // same calibre - { - // same ammo type - if ( Magazine[Item[pAmmoMags->usItem].ubClassIndex].ubAmmoType == Magazine[Item[pAmmo->usItem].ubClassIndex].ubAmmoType ) - { - bullets = Magazine[Item[pAmmoMags->usItem].ubClassIndex].ubMagSize - (*pAmmoMags)[stackMag]->data.ubShotsLeft; - - if ((*pAmmo)[0]->data.ubShotsLeft < bullets) - bullets = (*pAmmo)[0]->data.ubShotsLeft; - - (*pAmmoMags)[stackMag]->data.ubShotsLeft += bullets; - (*pAmmo)[0]->data.ubShotsLeft -= bullets; - - fCharacterInfoPanelDirty = TRUE; - fInterfacePanelDirty = DIRTYLEVEL2; - } - - if ((*pAmmo)[0]->data.ubShotsLeft == 0) - { - RemoveItemFromPool( gWorldItems[ uiLoop ].sGridNo, uiLoop, gWorldItems[ uiLoop ].ubLevel ); - } - } - } - } - } - - //MM: if magazines still are partly empty, look through inventory for boxes and crates - if ( (*pAmmoMags)[stackMag]->data.ubShotsLeft < Magazine[Item[pAmmoMags->usItem].ubClassIndex].ubMagSize ) - { - UINT32 invsize = pTeamSoldier->inv.size(); - for (UINT32 uiLoop = 0; uiLoop < invsize; ++uiLoop) - { - if ( (Item[pTeamSoldier->inv[uiLoop].usItem].usItemClass & IC_AMMO) && Magazine[Item[pTeamSoldier->inv[uiLoop].usItem].ubClassIndex].ubMagType >= AMMO_BOX ) - { - pAmmo = &(pTeamSoldier->inv[uiLoop]); - - if ( Magazine[Item[pAmmoMags->usItem].ubClassIndex].ubCalibre == Magazine[Item[pAmmo->usItem].ubClassIndex].ubCalibre ) // same calibre - { - // same ammo type - if ( Magazine[Item[pAmmoMags->usItem].ubClassIndex].ubAmmoType == Magazine[Item[pAmmo->usItem].ubClassIndex].ubAmmoType ) - { - bullets = Magazine[Item[pAmmoMags->usItem].ubClassIndex].ubMagSize - (*pAmmoMags)[stackMag]->data.ubShotsLeft; - - if ((*pAmmo)[0]->data.ubShotsLeft < bullets) - bullets = (*pAmmo)[0]->data.ubShotsLeft; - - (*pAmmoMags)[stackMag]->data.ubShotsLeft += bullets; - (*pAmmo)[0]->data.ubShotsLeft -= bullets; - - fCharacterInfoPanelDirty = TRUE; - fInterfacePanelDirty = DIRTYLEVEL2; - } - - if ((*pAmmo)[0]->data.ubShotsLeft == 0) - DeleteObj(pAmmo); - } - } - } - } - } - } - - if (IsWeaponAttached(pGun, IC_GUN)) - { - OBJECTTYPE *pGun2 = FindAttachedWeapon(pGun, IC_GUN); - - UINT16 gunmagsize2 = GetMagSize( pGun2 ); - - if ( (*pGun2)[0]->data.gun.ubGunShotsLeft < gunmagsize2 ) - { - // Search for ammo in sector - for ( UINT32 uiLoop = 0; uiLoop < guiNumWorldItems; ++uiLoop ) - { - if ( (gWorldItems[ uiLoop ].bVisible == TRUE) && (gWorldItems[ uiLoop ].fExists) && (gWorldItems[ uiLoop ].usFlags & WORLD_ITEM_REACHABLE) && !(gWorldItems[ uiLoop ].usFlags & WORLD_ITEM_ARMED_BOMB) )//item exists, is reachable, is visible and is not trapped - { - if ( ( Item[ gWorldItems[ uiLoop ].object.usItem ].usItemClass & IC_AMMO ) ) // the item is ammo - { - pAmmo = &( gWorldItems[ uiLoop ].object ); - - if ( CompatibleAmmoForGun( pAmmo, pGun2 ) ) // can use the ammo with this gun - { - // same ammo type in gun and magazine - if ( Magazine[Item[(*pGun2)[0]->data.gun.usGunAmmoItem].ubClassIndex].ubAmmoType == Magazine[Item[pAmmo->usItem].ubClassIndex].ubAmmoType ) - { - ReloadGun( pTeamSoldier, pGun2, pAmmo ); - } - - if ((*pAmmo)[0]->data.ubShotsLeft == 0) - { - RemoveItemFromPool( gWorldItems[ uiLoop ].sGridNo, uiLoop, gWorldItems[ uiLoop ].ubLevel ); - } - - // if gun is full, we can stop this - if ( (*pGun2)[0]->data.gun.ubGunShotsLeft >= gunmagsize2 ) - break; - } - } - } - } - } - - //CHRISL: if not enough ammo in sector, reload using ammo carried in inventory - if ( (*pGun2)[0]->data.gun.ubGunShotsLeft < gunmagsize2 ) - { - AutoReload( pTeamSoldier ); - } - } - } - } + AutoReload( pTeamSoldier ); } } } - else + } + } + + //MM: loop thru the soldiers again (lazy copy/paste :p). could do it all at once, but then there may not be enough ammo from the world items to fill everyone's guns first + for ( bLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++bLoop ) + { + pTeamSoldier = bLoop; + if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad() && !AM_A_ROBOT( pTeamSoldier ) ) + { + // Search for ammo in soldier inventory + UINT32 invsize = pTeamSoldier->inv.size(); + for ( UINT32 bLoop2 = 0; bLoop2 < invsize; ++bLoop2 ) { - SOLDIERTYPE *pTeamSoldier; - UINT16 bLoop; - OBJECTTYPE *pGun, *pAmmo; - - for (bLoop=gTacticalStatus.Team[gbPlayerNum].bFirstID, pTeamSoldier=MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++bLoop, pTeamSoldier++) + if ( Item[pTeamSoldier->inv[bLoop2].usItem].usItemClass & IC_AMMO ) { - if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad( ) && !AM_A_ROBOT( pTeamSoldier ) ) - { - if ( (Item[pTeamSoldier->inv[HANDPOS].usItem].usItemClass & (IC_GUN | IC_LAUNCHER) ) ) - { - if ( ( gTacticalStatus.uiFlags & INCOMBAT ) ) - { - // Flugente: check for underbarrel weapons and use that object if necessary - pGun = pTeamSoldier->GetUsedWeapon( &(pTeamSoldier->inv[HANDPOS]) ); + pAmmoMags = &(pTeamSoldier->inv[bLoop2]); - //magazine is not full - if ( (*pGun)[0]->data.gun.ubGunShotsLeft < GetMagSize( pGun ) ) + for ( UINT16 stackMag = 0; stackMag < (*pAmmoMags).ubNumberOfObjects; stackMag++ ) + { + if ( (*pAmmoMags)[stackMag]->data.ubShotsLeft < Magazine[Item[pAmmoMags->usItem].ubClassIndex].ubMagSize ) + { + // Search for ammo in sector + for ( UINT32 uiLoop = 0; uiLoop < guiNumWorldItems; ++uiLoop ) + { + if ( (gWorldItems[uiLoop].bVisible == TRUE) && (gWorldItems[uiLoop].fExists) && (gWorldItems[uiLoop].usFlags & WORLD_ITEM_REACHABLE) && !(gWorldItems[uiLoop].usFlags & WORLD_ITEM_ARMED_BOMB) )//item exists, is reachable, is visible and is not trapped { - AutoReload( pTeamSoldier ); + if ( (Item[gWorldItems[uiLoop].object.usItem].usItemClass & IC_AMMO) ) // the item is ammo + { + pAmmo = &(gWorldItems[uiLoop].object); + + if ( Magazine[Item[pAmmoMags->usItem].ubClassIndex].ubCalibre == Magazine[Item[pAmmo->usItem].ubClassIndex].ubCalibre ) // same calibre + { + // same ammo type + if ( Magazine[Item[pAmmoMags->usItem].ubClassIndex].ubAmmoType == Magazine[Item[pAmmo->usItem].ubClassIndex].ubAmmoType ) + { + bullets = Magazine[Item[pAmmoMags->usItem].ubClassIndex].ubMagSize - (*pAmmoMags)[stackMag]->data.ubShotsLeft; + + if ( (*pAmmo)[0]->data.ubShotsLeft < bullets ) + bullets = (*pAmmo)[0]->data.ubShotsLeft; + + (*pAmmoMags)[stackMag]->data.ubShotsLeft += bullets; + (*pAmmo)[0]->data.ubShotsLeft -= bullets; + + fCharacterInfoPanelDirty = TRUE; + fInterfacePanelDirty = DIRTYLEVEL2; + } + + if ( (*pAmmo)[0]->data.ubShotsLeft == 0 ) + { + RemoveItemFromPool( gWorldItems[uiLoop].sGridNo, uiLoop, gWorldItems[uiLoop].ubLevel ); + } + } + } } } - else + + //MM: if magazines still are partly empty, look through inventory for boxes and crates + if ( (*pAmmoMags)[stackMag]->data.ubShotsLeft < Magazine[Item[pAmmoMags->usItem].ubClassIndex].ubMagSize ) { - // Search for gun in soldier inventory UINT32 invsize = pTeamSoldier->inv.size(); - for (UINT32 bLoop2 = 0; bLoop2 < invsize; ++bLoop2) + for ( UINT32 uiLoop = 0; uiLoop < invsize; ++uiLoop ) { - if ( (Item[pTeamSoldier->inv[bLoop2].usItem].usItemClass & (IC_GUN | IC_LAUNCHER)) ) + if ( (Item[pTeamSoldier->inv[uiLoop].usItem].usItemClass & IC_AMMO) && Magazine[Item[pTeamSoldier->inv[uiLoop].usItem].ubClassIndex].ubMagType >= AMMO_BOX ) { - pGun = &(pTeamSoldier->inv[bLoop2]); + pAmmo = &(pTeamSoldier->inv[uiLoop]); - UINT16 gunmagsize = GetMagSize( pGun ); - - //if magazine is not full - if ( (*pGun)[0]->data.gun.ubGunShotsLeft < gunmagsize ) + if ( Magazine[Item[pAmmoMags->usItem].ubClassIndex].ubCalibre == Magazine[Item[pAmmo->usItem].ubClassIndex].ubCalibre ) // same calibre { - // Search for ammo in soldier inventory - for ( UINT32 uiLoop = 0; uiLoop < invsize; ++uiLoop ) + // same ammo type + if ( Magazine[Item[pAmmoMags->usItem].ubClassIndex].ubAmmoType == Magazine[Item[pAmmo->usItem].ubClassIndex].ubAmmoType ) { - if ( (Item[pTeamSoldier->inv[uiLoop].usItem].usItemClass & IC_AMMO ) ) // the item is ammo - { - pAmmo = &(pTeamSoldier->inv[uiLoop]); + bullets = Magazine[Item[pAmmoMags->usItem].ubClassIndex].ubMagSize - (*pAmmoMags)[stackMag]->data.ubShotsLeft; - if ( CompatibleAmmoForGun( pAmmo, pGun ) ) // can use the ammo with this gun - { - // same ammo type in gun and magazine - if ( Magazine[Item[(*pGun)[0]->data.gun.usGunAmmoItem].ubClassIndex].ubAmmoType == Magazine[Item[pAmmo->usItem].ubClassIndex].ubAmmoType ) - { - ReloadGun( pTeamSoldier, pGun, pAmmo ); + if ( (*pAmmo)[0]->data.ubShotsLeft < bullets ) + bullets = (*pAmmo)[0]->data.ubShotsLeft; - fCharacterInfoPanelDirty = TRUE; - fInterfacePanelDirty = DIRTYLEVEL2; + (*pAmmoMags)[stackMag]->data.ubShotsLeft += bullets; + (*pAmmo)[0]->data.ubShotsLeft -= bullets; - // if gun is full, we can stop this - if ( (*pGun)[0]->data.gun.ubGunShotsLeft >= gunmagsize ) - break; - } - } - } + fCharacterInfoPanelDirty = TRUE; + fInterfacePanelDirty = DIRTYLEVEL2; + } + + if ( (*pAmmo)[0]->data.ubShotsLeft == 0 ) + DeleteObj( pAmmo ); + } + } + } + } + } + } + + if ( IsWeaponAttached( pGun, IC_GUN ) ) + { + OBJECTTYPE *pGun2 = FindAttachedWeapon( pGun, IC_GUN ); + + UINT16 gunmagsize2 = GetMagSize( pGun2 ); + + if ( (*pGun2)[0]->data.gun.ubGunShotsLeft < gunmagsize2 ) + { + // Search for ammo in sector + for ( UINT32 uiLoop = 0; uiLoop < guiNumWorldItems; ++uiLoop ) + { + if ( (gWorldItems[uiLoop].bVisible == TRUE) && (gWorldItems[uiLoop].fExists) && (gWorldItems[uiLoop].usFlags & WORLD_ITEM_REACHABLE) && !(gWorldItems[uiLoop].usFlags & WORLD_ITEM_ARMED_BOMB) )//item exists, is reachable, is visible and is not trapped + { + if ( (Item[gWorldItems[uiLoop].object.usItem].usItemClass & IC_AMMO) ) // the item is ammo + { + pAmmo = &(gWorldItems[uiLoop].object); + + if ( CompatibleAmmoForGun( pAmmo, pGun2 ) ) // can use the ammo with this gun + { + // same ammo type in gun and magazine + if ( Magazine[Item[(*pGun2)[0]->data.gun.usGunAmmoItem].ubClassIndex].ubAmmoType == Magazine[Item[pAmmo->usItem].ubClassIndex].ubAmmoType ) + { + ReloadGun( pTeamSoldier, pGun2, pAmmo ); + } + + if ( (*pAmmo)[0]->data.ubShotsLeft == 0 ) + { + RemoveItemFromPool( gWorldItems[uiLoop].sGridNo, uiLoop, gWorldItems[uiLoop].ubLevel ); + } + + // if gun is full, we can stop this + if ( (*pGun2)[0]->data.gun.ubGunShotsLeft >= gunmagsize2 ) + break; + } + } + } + } + } + + //CHRISL: if not enough ammo in sector, reload using ammo carried in inventory + if ( (*pGun2)[0]->data.gun.ubGunShotsLeft < gunmagsize2 ) + { + AutoReload( pTeamSoldier ); + } + } + } + } + } + } + } + else + { + SOLDIERTYPE *pTeamSoldier; + SoldierID bLoop; + OBJECTTYPE *pGun, *pAmmo; + + for ( bLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; bLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++bLoop ) + { + pTeamSoldier = bLoop; + if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && pTeamSoldier->bAssignment == CurrentSquad() && !AM_A_ROBOT( pTeamSoldier ) ) + { + if ( (Item[pTeamSoldier->inv[HANDPOS].usItem].usItemClass & (IC_GUN | IC_LAUNCHER)) ) + { + if ( (gTacticalStatus.uiFlags & INCOMBAT) ) + { + // Flugente: check for underbarrel weapons and use that object if necessary + pGun = pTeamSoldier->GetUsedWeapon( &(pTeamSoldier->inv[HANDPOS]) ); + + //magazine is not full + if ( (*pGun)[0]->data.gun.ubGunShotsLeft < GetMagSize( pGun ) ) + { + AutoReload( pTeamSoldier ); + } + } + else + { + // Search for gun in soldier inventory + UINT32 invsize = pTeamSoldier->inv.size(); + for ( UINT32 bLoop2 = 0; bLoop2 < invsize; ++bLoop2 ) + { + if ( (Item[pTeamSoldier->inv[bLoop2].usItem].usItemClass & (IC_GUN | IC_LAUNCHER)) ) + { + pGun = &(pTeamSoldier->inv[bLoop2]); + + UINT16 gunmagsize = GetMagSize( pGun ); + + //if magazine is not full + if ( (*pGun)[0]->data.gun.ubGunShotsLeft < gunmagsize ) + { + // Search for ammo in soldier inventory + for ( UINT32 uiLoop = 0; uiLoop < invsize; ++uiLoop ) + { + if ( (Item[pTeamSoldier->inv[uiLoop].usItem].usItemClass & IC_AMMO) ) // the item is ammo + { + pAmmo = &(pTeamSoldier->inv[uiLoop]); + + if ( CompatibleAmmoForGun( pAmmo, pGun ) ) // can use the ammo with this gun + { + // same ammo type in gun and magazine + if ( Magazine[Item[(*pGun)[0]->data.gun.usGunAmmoItem].ubClassIndex].ubAmmoType == Magazine[Item[pAmmo->usItem].ubClassIndex].ubAmmoType ) + { + ReloadGun( pTeamSoldier, pGun, pAmmo ); + + fCharacterInfoPanelDirty = TRUE; + fInterfacePanelDirty = DIRTYLEVEL2; + + // if gun is full, we can stop this + if ( (*pGun)[0]->data.gun.ubGunShotsLeft >= gunmagsize ) + break; } } } @@ -8218,6 +8228,9 @@ void HandleTBReloadAll( void ) } } } + } + } + } } void HandleTBShowCover( void ) @@ -8311,9 +8324,9 @@ void HandleTBBackpacks(void) bool backpackDropped = false; SOLDIERTYPE* pTeamSoldier; - for (UINT16 ubLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; ubLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ubLoop++) + for ( SoldierID ubLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; ubLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++ubLoop ) { - pTeamSoldier = MercPtrs[ubLoop]; + pTeamSoldier = ubLoop; if (OK_CONTROLLABLE_MERC(pTeamSoldier) && pTeamSoldier->flags.DropPackFlag) { @@ -8336,31 +8349,30 @@ void HandleTBBackpacks(void) void HandleTBDropBackpacks( void ) { //if( UsingNewInventorySystem() && gusSelectedSoldier != NOBODY ) - if( UsingNewInventorySystem() ) + if ( UsingNewInventorySystem() ) { //SOLDIERTYPE *pSoldier = gusSelectedSoldier; - SOLDIERTYPE *pTeamSoldier; - UINT16 ubLoop; + SOLDIERTYPE *pTeamSoldier; INT16 sAPCost = APBPConstants[AP_BACK_PACK]; INT32 iBPCost = APBPConstants[BP_BACK_PACK]; - 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 ) { - pTeamSoldier=MercPtrs[ ubLoop ]; + pTeamSoldier = ubLoop; - if( OK_CONTROLLABLE_MERC( pTeamSoldier ) && + if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && OK_INTERRUPT_MERC( pTeamSoldier ) && !AM_A_ROBOT( pTeamSoldier ) && - EnoughPoints(pTeamSoldier, sAPCost, iBPCost, FALSE) && + EnoughPoints( pTeamSoldier, sAPCost, iBPCost, FALSE ) && //pTeamSoldier->bAssignment == pSoldier->bAssignment && pTeamSoldier->bAssignment < ON_DUTY && pTeamSoldier->inv[BPACKPOCKPOS].exists() && !pTeamSoldier->flags.DropPackFlag ) - { - if( ChangeDropPackStatus(pTeamSoldier, TRUE) ) + { + if ( ChangeDropPackStatus( pTeamSoldier, TRUE ) ) { - ScreenMsg(FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, NewInvMessage[NIV_SOLDIER_DROP], pTeamSoldier->GetName()); + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, NewInvMessage[NIV_SOLDIER_DROP], pTeamSoldier->GetName() ); } } } @@ -8378,14 +8390,13 @@ void HandleTBPickUpBackpacks( void ) { //SOLDIERTYPE *pSoldier = gusSelectedSoldier; SOLDIERTYPE *pTeamSoldier; - UINT16 ubLoop; INT16 sAPCost = APBPConstants[AP_BACK_PACK]; INT32 iBPCost = APBPConstants[BP_BACK_PACK]; - 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 ) { - pTeamSoldier=MercPtrs[ubLoop]; + pTeamSoldier = ubLoop; if( OK_CONTROLLABLE_MERC( pTeamSoldier ) && OK_INTERRUPT_MERC( pTeamSoldier ) && @@ -9602,7 +9613,6 @@ void HandleTBPickUpBackpacks(BOOLEAN fAll) { SOLDIERTYPE* pSoldier = NULL; SOLDIERTYPE* pTeamSoldier; - UINT16 ubLoop; if (gusSelectedSoldier != NOBODY) { @@ -9612,9 +9622,9 @@ void HandleTBPickUpBackpacks(BOOLEAN fAll) INT16 sAPCost = APBPConstants[AP_BACK_PACK]; INT32 iBPCost = APBPConstants[BP_BACK_PACK]; - 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 ) { - pTeamSoldier = MercPtrs[ubLoop]; + pTeamSoldier = ubLoop; if (pTeamSoldier && OK_CONTROLLABLE_MERC(pTeamSoldier) && diff --git a/Tactical/Vehicles.cpp b/Tactical/Vehicles.cpp index b4e6ad96..14aa0e10 100644 --- a/Tactical/Vehicles.cpp +++ b/Tactical/Vehicles.cpp @@ -1718,15 +1718,15 @@ BOOLEAN EnterVehicle( SOLDIERTYPE *pVehicle, SOLDIERTYPE *pSoldier, UINT8 ubSeat SOLDIERTYPE *GetVehicleSoldierPointerFromPassenger( SOLDIERTYPE *pSrcSoldier ) { - UINT32 cnt; - SOLDIERTYPE *pSoldier; + SOLDIERTYPE *pSoldier; // End the turn of player charactors - 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 ( pSoldier->bActive && pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE ) { // Check ubID.... @@ -2906,14 +2906,12 @@ BOOLEAN SoldierMustDriveVehicle( SOLDIERTYPE *pSoldier, INT32 iVehicleId, BOOLEA BOOLEAN OnlythisCanDriveVehicle( SOLDIERTYPE *pthis, INT32 iVehicleId ) { - INT32 iCounter = 0; SOLDIERTYPE *pSoldier = NULL; - - for( iCounter = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; iCounter <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; iCounter++ ) + for( SoldierID id = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; id <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++id ) { // get the current soldier - pSoldier = &Menptr[ iCounter ]; + pSoldier = id; // skip checking THIS soldier, we wanna know about everyone else if ( pSoldier == pthis ) diff --git a/Tactical/opplist.cpp b/Tactical/opplist.cpp index 3a880361..b528e648 100644 --- a/Tactical/opplist.cpp +++ b/Tactical/opplist.cpp @@ -989,61 +989,61 @@ void HandleSight(SOLDIERTYPE *pSoldier, UINT8 ubSightFlags) void OurTeamRadiosRandomlyAbout(UINT16 ubAbout) { - INT32 iLoop; - // WDS - make number of mercenaries, etc. be configurable -INT16 radioCnt = 0,radioMan[CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS]; - SOLDIERTYPE *pSoldier; + // WDS - make number of mercenaries, etc. be configurable + INT16 radioCnt = 0,radioMan[CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS]; + SOLDIERTYPE *pSoldier; -// Temporary for opplist synching - disable random order radioing + // Temporary for opplist synching - disable random order radioing #ifdef RECORDOPPLIST - for (iLoop = Status.team[Net.pnum].guystart,ourPtr = MercPtrs[iLoop]; iLoop < Status.team[Net.pnum].guyend; iLoop++,ourPtr++) + for (iLoop = Status.team[Net.pnum].guystart,ourPtr = MercPtrs[iLoop]; iLoop < Status.team[Net.pnum].guyend; iLoop++,ourPtr++) { - // if this merc is active, in this sector, and well enough to look - if (pSoldier->active && pSoldier->bInSector && (pSoldier->stats.bLife >= OKLIFE)) - { - RadioSightings(pSoldier,ubAbout,pSoldier->bTeam); - pSoldier->bNewOppCnt = 0; - } + // if this merc is active, in this sector, and well enough to look + if (pSoldier->active && pSoldier->bInSector && (pSoldier->stats.bLife >= OKLIFE)) + { + RadioSightings(pSoldier,ubAbout,pSoldier->bTeam); + pSoldier->bNewOppCnt = 0; + } } - return; + return; #endif - // All mercs on our local team check if they should radio about him - iLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; + // All mercs on our local team check if they should radio about him + SoldierID id = gTacticalStatus.Team[gbPlayerNum].bFirstID; - // make a list of all of our team's mercs - for (pSoldier = MercPtrs[iLoop]; iLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; iLoop++,pSoldier++) + // make a list of all of our team's mercs + for ( ; id <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++id ) { - // if this merc is active, in this sector, and well enough to look - if (pSoldier->bActive && pSoldier->bInSector && (pSoldier->stats.bLife >= OKLIFE)) - // put him on our list, and increment the counter - radioMan[radioCnt++] = (INT16)iLoop; + pSoldier = id; + // if this merc is active, in this sector, and well enough to look + if (pSoldier->bActive && pSoldier->bInSector && (pSoldier->stats.bLife >= OKLIFE)) + // put him on our list, and increment the counter + radioMan[radioCnt++] = (INT16)id; } - // now RANDOMLY handle each of the mercs on our list, until none remain - // (this is all being done ONLY so that the mercs in the earliest merc - // slots do not arbitrarily get the bulk of the sighting speech quote - // action, while the later ones almost never pipe up, and is NOT - // strictly necessary, but a nice improvement over original JA) - while (radioCnt) + // now RANDOMLY handle each of the mercs on our list, until none remain + // (this is all being done ONLY so that the mercs in the earliest merc + // slots do not arbitrarily get the bulk of the sighting speech quote + // action, while the later ones almost never pipe up, and is NOT + // strictly necessary, but a nice improvement over original JA) + while (radioCnt) { - // pick a merc from one of the remaining slots at random - iLoop = Random(radioCnt); + // pick a merc from one of the remaining slots at random + INT16 iLoop = Random(radioCnt); - // handle radioing for that merc - RadioSightings(MercPtrs[radioMan[iLoop]],ubAbout,MercPtrs[radioMan[iLoop]]->bTeam); - Menptr[radioMan[iLoop]].bNewOppCnt = 0; + // handle radioing for that merc + RadioSightings( MercPtrs[radioMan[iLoop]], ubAbout, MercPtrs[radioMan[iLoop]]->bTeam ); + Menptr[radioMan[iLoop]].bNewOppCnt = 0; - // unless it WAS the last used slot that we happened to pick - if (iLoop != (radioCnt - 1)) - // move the contents of the last slot into the one just handled - radioMan[iLoop] = radioMan[radioCnt - 1]; + // unless it WAS the last used slot that we happened to pick + if (iLoop != (radioCnt - 1)) + // move the contents of the last slot into the one just handled + radioMan[iLoop] = radioMan[radioCnt - 1]; - radioCnt--; + radioCnt--; } } @@ -1058,71 +1058,69 @@ INT16 radioCnt = 0,radioMan[CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS]; INT16 TeamNoLongerSeesMan( UINT8 ubTeam, SOLDIERTYPE *pOpponent, UINT16 ubExcludeID, INT8 bIteration ) { - UINT16 bLoop; SOLDIERTYPE *pMate; - - - bLoop = gTacticalStatus.Team[ubTeam].bFirstID; + SoldierID bLoop = gTacticalStatus.Team[ubTeam].bFirstID; // look for all mercs on the same team, check opplists for this soldier - for (pMate = MercPtrs[bLoop]; bLoop <= gTacticalStatus.Team[ubTeam].bLastID; ++bLoop,pMate++) + for ( ; bLoop <= gTacticalStatus.Team[ubTeam].bLastID; ++bLoop ) { + pMate = bLoop; // if this "teammate" is me, myself, or I (whom we want to exclude) - if (bLoop == ubExcludeID) - continue; // skip to next teammate, I KNOW I don't see him... + if ( bLoop == ubExcludeID ) + continue; // skip to next teammate, I KNOW I don't see him... - // if this merc is not on the same team - if (pMate->bTeam != ubTeam) - continue; // skip him, he's no teammate at all! + // if this merc is not on the same team + if ( pMate->bTeam != ubTeam ) + continue; // skip him, he's no teammate at all! - // if this merc is not active, at base, on assignment, dead, unconscious - if (!pMate->bActive || !pMate->bInSector || (pMate->stats.bLife < OKLIFE)) - continue; // next merc + // if this merc is not active, at base, on assignment, dead, unconscious + if ( !pMate->bActive || !pMate->bInSector || (pMate->stats.bLife < OKLIFE) ) + continue; // next merc - // if this teammate currently sees this opponent - if (pMate->aiData.bOppList[pOpponent->ubID] == SEEN_CURRENTLY) - return(FALSE); // that's all I need to know, get out of here + // if this teammate currently sees this opponent + if ( pMate->aiData.bOppList[pOpponent->ubID] == SEEN_CURRENTLY ) + return(FALSE); // that's all I need to know, get out of here } -/* comm by ddd -#ifdef WE_SEE_WHAT_MILITIA_SEES_AND_VICE_VERSA - if ( bIteration == 0 ) + /* comm by ddd + #ifdef WE_SEE_WHAT_MILITIA_SEES_AND_VICE_VERSA + if ( bIteration == 0 ) + { + if ( ubTeam == gbPlayerNum && gTacticalStatus.Team[ MILITIA_TEAM ].bTeamActive ) + { + // check militia team as well + return( TeamNoLongerSeesMan( MILITIA_TEAM, pOpponent, ubExcludeID, 1 ) ); + } + else if ( ubTeam == MILITIA_TEAM && gTacticalStatus.Team[ gbPlayerNum ].bTeamActive ) + { + // check player team as well + return( TeamNoLongerSeesMan( gbPlayerNum, pOpponent, ubExcludeID, 1 ) ); + } + } + #endif + */ + //ddd + if ( gGameExternalOptions.bWeSeeWhatMilitiaSeesAndViceVersa ) { - if ( ubTeam == gbPlayerNum && gTacticalStatus.Team[ MILITIA_TEAM ].bTeamActive ) + if ( bIteration == 0 ) { - // check militia team as well - return( TeamNoLongerSeesMan( MILITIA_TEAM, pOpponent, ubExcludeID, 1 ) ); + if ( ubTeam == gbPlayerNum && gTacticalStatus.Team[MILITIA_TEAM].bTeamActive ) + { + // check militia team as well + return(TeamNoLongerSeesMan( MILITIA_TEAM, pOpponent, ubExcludeID, 1 )); + } + else if ( ubTeam == MILITIA_TEAM && gTacticalStatus.Team[gbPlayerNum].bTeamActive ) + { + // check player team as well + return(TeamNoLongerSeesMan( gbPlayerNum, pOpponent, ubExcludeID, 1 )); + } } - else if ( ubTeam == MILITIA_TEAM && gTacticalStatus.Team[ gbPlayerNum ].bTeamActive ) - { - // check player team as well - return( TeamNoLongerSeesMan( gbPlayerNum, pOpponent, ubExcludeID, 1 ) ); - } - } -#endif -*/ -//ddd -if(gGameExternalOptions.bWeSeeWhatMilitiaSeesAndViceVersa) -{ - if ( bIteration == 0 ) - { - if ( ubTeam == gbPlayerNum && gTacticalStatus.Team[ MILITIA_TEAM ].bTeamActive ) - { - // check militia team as well - return( TeamNoLongerSeesMan( MILITIA_TEAM, pOpponent, ubExcludeID, 1 ) ); - } - else if ( ubTeam == MILITIA_TEAM && gTacticalStatus.Team[ gbPlayerNum ].bTeamActive ) - { - // check player team as well - return( TeamNoLongerSeesMan( gbPlayerNum, pOpponent, ubExcludeID, 1 ) ); - } - } -} -//ddd + } + //ddd - // none of my friends is currently seeing the guy, so return success - return(TRUE); + // none of my friends is currently seeing the guy, so return success + return(TRUE); } INT16 DistanceSmellable( SOLDIERTYPE *pSoldier, SOLDIERTYPE * pSubject ) @@ -1524,12 +1522,11 @@ void TurnOffEveryonesMuzzleFlashes( void ) void TurnOffTeamsMuzzleFlashes( UINT8 ubTeam ) { - UINT16 ubLoop; SOLDIERTYPE * pSoldier; - for (ubLoop = gTacticalStatus.Team[ ubTeam ].bFirstID; ubLoop <= gTacticalStatus.Team[ ubTeam ].bLastID; ubLoop++) + for ( SoldierID ubLoop = gTacticalStatus.Team[ ubTeam ].bFirstID; ubLoop <= gTacticalStatus.Team[ ubTeam ].bLastID; ++ubLoop ) { - pSoldier = MercPtrs[ ubLoop ]; + pSoldier = ubLoop; if ( pSoldier->flags.fMuzzleFlash ) { @@ -1638,15 +1635,14 @@ void InitOpplistForDoorOpening( void ) void AllTeamsLookForAll(UINT8 ubAllowInterrupts) { - UINT32 uiLoop; - SOLDIERTYPE *pSoldier; + SOLDIERTYPE *pSoldier; - if( ( gTacticalStatus.uiFlags & LOADING_SAVED_GAME ) ) + if ( (gTacticalStatus.uiFlags & LOADING_SAVED_GAME) ) { return; } - if (ubAllowInterrupts || !(gTacticalStatus.uiFlags & INCOMBAT) ) + if ( ubAllowInterrupts || !(gTacticalStatus.uiFlags & INCOMBAT) ) { gubBestToMakeSightingSize = BEST_SIGHTING_ARRAY_SIZE_ALL_TEAMS_LOOK_FOR_ALL; if ( gfDelayResolvingBestSightingDueToDoor ) @@ -1661,20 +1657,20 @@ void AllTeamsLookForAll(UINT8 ubAllowInterrupts) } } - for (uiLoop = 0; uiLoop < guiNumMercSlots; uiLoop++) + for ( UINT16 uiLoop = 0; uiLoop < guiNumMercSlots; ++uiLoop ) { - pSoldier = MercSlots[ uiLoop ]; + pSoldier = MercSlots[uiLoop]; if ( pSoldier != NULL && pSoldier->stats.bLife >= OKLIFE ) { - HandleSight(pSoldier,SIGHT_LOOK); // no radio or interrupts yet + HandleSight( pSoldier, SIGHT_LOOK ); // no radio or interrupts yet } } // the player team now radios about all sightings - for ( uiLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; uiLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; uiLoop++ ) + for ( SoldierID uiLoop = gTacticalStatus.Team[gbPlayerNum].bFirstID; uiLoop <= gTacticalStatus.Team[gbPlayerNum].bLastID; ++uiLoop ) { - HandleSight( MercPtrs[ uiLoop ], SIGHT_RADIO ); // looking was done above + HandleSight( uiLoop, SIGHT_RADIO ); // looking was done above } if ( !(gTacticalStatus.uiFlags & INCOMBAT) ) @@ -1698,52 +1694,52 @@ void AllTeamsLookForAll(UINT8 ubAllowInterrupts) gubBestToMakeSightingSize = BEST_SIGHTING_ARRAY_SIZE_INCOMBAT; } - /* + /* - // do this here as well as in overhead so the looks/interrupts are combined! + // do this here as well as in overhead so the looks/interrupts are combined! - // if a door was recently opened/closed (doesn't matter if we could see it) - // this is done here so we can first handle everyone looking through the - // door, and deal with the resulting opplist changes, interrupts, etc. - if ( !TileIsOutOfBounds(Status.doorCreakedGridno)) - { - // opening/closing a door makes a bit of noise (constant volume) - MakeNoise(Status.doorCreakedGuynum,Status.doorCreakedGridno,TTypeList[Grid[Status.doorCreakedGridno].land],DOOR_NOISE_VOLUME,NOISE_CREAKING,EXPECTED_NOSEND); + // if a door was recently opened/closed (doesn't matter if we could see it) + // this is done here so we can first handle everyone looking through the + // door, and deal with the resulting opplist changes, interrupts, etc. + if ( !TileIsOutOfBounds(Status.doorCreakedGridno)) + { + // opening/closing a door makes a bit of noise (constant volume) + MakeNoise(Status.doorCreakedGuynum,Status.doorCreakedGridno,TTypeList[Grid[Status.doorCreakedGridno].land],DOOR_NOISE_VOLUME,NOISE_CREAKING,EXPECTED_NOSEND); - Status.doorCreakedGridno = NOWHERE; - Status.doorCreakedGuynum = NOBODY; - } + Status.doorCreakedGridno = NOWHERE; + Status.doorCreakedGuynum = NOBODY; + } - // all soldiers now radio their findings (NO interrupts permitted this early!) - // NEW: our entire team must radio first, so that they radio about EVERYBODY - // rather radioing about individuals one a a time (repeats see 1 enemy quote) - for (cnt = Status.team[Net.pnum].guystart,ptr = MercPtrs[cnt]; cnt < Status.team[Net.pnum].guyend; cnt++,ptr++) - { - if (ptr->active && ptr->in_sector && (ptr->life >= OKLIFE)) - HandleSight(ptr,SIGHT_RADIO); // looking was done above - } + // all soldiers now radio their findings (NO interrupts permitted this early!) + // NEW: our entire team must radio first, so that they radio about EVERYBODY + // rather radioing about individuals one a a time (repeats see 1 enemy quote) + for (cnt = Status.team[Net.pnum].guystart,ptr = MercPtrs[cnt]; cnt < Status.team[Net.pnum].guyend; cnt++,ptr++) + { + if (ptr->active && ptr->in_sector && (ptr->life >= OKLIFE)) + HandleSight(ptr,SIGHT_RADIO); // looking was done above + } - for (cnt = 0,ptr = Menptr; cnt < MAXMERCS; cnt++,ptr++) - { - if (ptr->active && ptr->in_sector && (ptr->life >= OKLIFE) && !PTR_OURTEAM) - HandleSight(ptr,SIGHT_RADIO); // looking was done above - } + for (cnt = 0,ptr = Menptr; cnt < MAXMERCS; cnt++,ptr++) + { + if (ptr->active && ptr->in_sector && (ptr->life >= OKLIFE) && !PTR_OURTEAM) + HandleSight(ptr,SIGHT_RADIO); // looking was done above + } - // if interrupts were allowed - if (allowInterrupts) - // resolve interrupts against the selected character (others disallowed) - HandleSight(MercPtrs[Status.allLookCharacter],SIGHT_INTERRUPT); + // if interrupts were allowed + if (allowInterrupts) + // resolve interrupts against the selected character (others disallowed) + HandleSight(MercPtrs[Status.allLookCharacter],SIGHT_INTERRUPT); - // revert to normal interrupt operation - InterruptOnlyGuynum = NOBODY; - InterruptsAllowed = TRUE; - */ + // revert to normal interrupt operation + InterruptOnlyGuynum = NOBODY; + InterruptsAllowed = TRUE; + */ - // reset interrupt only guynum which may have been used - gubInterruptProvoker = NOBODY; + // reset interrupt only guynum which may have been used + gubInterruptProvoker = NOBODY; } @@ -3115,7 +3111,7 @@ void RemoveManAsTarget(SOLDIERTYPE *pSoldier) void UpdatePublic(UINT8 ubTeam, SoldierID ubID, INT8 bNewOpplist, INT32 sGridNo, INT8 bLevel) { - INT32 cnt; + SoldierID cnt; UINT8 ubTeamMustLookAgain = FALSE, ubMadeDifference = FALSE; SOLDIERTYPE *pSoldier; INT8* pbPublOL = &(gbPublicOpplist[ubTeam][ubID]); @@ -3143,8 +3139,9 @@ void UpdatePublic(UINT8 ubTeam, SoldierID ubID, INT8 bNewOpplist, INT32 sGridNo, // then everyone on team who's not aware of guynum must look for him cnt = gTacticalStatus.Team[ubTeam].bFirstID; - for (pSoldier = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[ubTeam].bLastID; ++cnt, pSoldier++) + for ( ; cnt <= gTacticalStatus.Team[ubTeam].bLastID; ++cnt ) { + pSoldier = cnt; // if this soldier is active, in this sector, and well enough to look if (pSoldier->bActive && pSoldier->bInSector && (pSoldier->stats.bLife >= OKLIFE) && !( pSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) ) { @@ -5719,7 +5716,6 @@ void TheirNoise( SoldierID ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTer void ProcessNoise( SoldierID ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubTerrType, UINT8 ubBaseVolume, UINT8 ubNoiseType, STR16 zNoiseMessage ) { SOLDIERTYPE *pSoldier; - UINT16 bLoop; UINT8 bTeam; UINT8 ubLoudestEffVolume, ubEffVolume; // UINT8 ubPlayVolume; @@ -5923,8 +5919,9 @@ void ProcessNoise( SoldierID ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubT ubHeardLoudestBy = NOBODY; // All mercs on this team check if they are eligible to hear this noise - for (bLoop = gTacticalStatus.Team[bTeam].bFirstID,pSoldier = Menptr + bLoop; bLoop <= gTacticalStatus.Team[bTeam].bLastID; bLoop++,pSoldier++) + for ( SoldierID bLoop = gTacticalStatus.Team[bTeam].bFirstID; bLoop <= gTacticalStatus.Team[bTeam].bLastID; ++bLoop ) { + pSoldier = bLoop; // if this "listener" is inactive, or in no condition to care if (!pSoldier->bActive || !pSoldier->bInSector || pSoldier->flags.uiStatusFlags & SOLDIER_DEAD || (pSoldier->stats.bLife < OKLIFE) || pSoldier->ubBodyType == LARVAE_MONSTER) { @@ -7439,15 +7436,15 @@ void NoticeUnseenAttacker( SOLDIERTYPE * pAttacker, SOLDIERTYPE * pDefender, INT void CheckForAlertWhenEnemyDies( SOLDIERTYPE * pDyingSoldier ) { - UINT16 ubID; + SoldierID ubID; SOLDIERTYPE * pSoldier; INT8 bDir; INT16 sDistAway, sDistVisible; - for ( ubID = gTacticalStatus.Team[ pDyingSoldier->bTeam ].bFirstID; ubID <= gTacticalStatus.Team[ pDyingSoldier->bTeam ].bLastID; ubID++ ) + for ( ubID = gTacticalStatus.Team[ pDyingSoldier->bTeam ].bFirstID; ubID <= gTacticalStatus.Team[ pDyingSoldier->bTeam ].bLastID; ++ubID ) { - pSoldier = MercPtrs[ ubID ]; + pSoldier = ubID; if ( pSoldier->bActive && pSoldier->bInSector && (pSoldier != pDyingSoldier) && (pSoldier->stats.bLife >= OKLIFE) && (pSoldier->aiData.bAlertStatus < STATUS_RED ) ) { @@ -7470,22 +7467,20 @@ void CheckForAlertWhenEnemyDies( SOLDIERTYPE * pDyingSoldier ) } } } - } - } BOOLEAN ArmyKnowsOfPlayersPresence( void ) { - UINT16 ubID; + SoldierID ubID; SOLDIERTYPE * pSoldier; // if anyone is still left... if (gTacticalStatus.Team[ ENEMY_TEAM ].bTeamActive && gTacticalStatus.Team[ ENEMY_TEAM ].bMenInSector > 0 ) { - for ( ubID = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; ubID <= gTacticalStatus.Team[ ENEMY_TEAM ].bLastID; ubID++ ) + for ( ubID = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; ubID <= gTacticalStatus.Team[ ENEMY_TEAM ].bLastID; ++ubID ) { - pSoldier = MercPtrs[ ubID ]; + pSoldier = ubID; if ( pSoldier->bActive && pSoldier->bInSector && (pSoldier->stats.bLife >= OKLIFE) && (pSoldier->aiData.bAlertStatus >= STATUS_RED ) ) { @@ -7498,19 +7493,19 @@ BOOLEAN ArmyKnowsOfPlayersPresence( void ) BOOLEAN MercSeesCreature( SOLDIERTYPE * pSoldier ) { - UINT16 ubID; + SoldierID ubID; - if (pSoldier->aiData.bOppCnt > 0) + if ( pSoldier->aiData.bOppCnt > 0 ) { - for ( ubID = gTacticalStatus.Team[ CREATURE_TEAM ].bFirstID; ubID <= gTacticalStatus.Team[ CREATURE_TEAM ].bLastID; ubID++ ) + for ( ubID = gTacticalStatus.Team[CREATURE_TEAM].bFirstID; ubID <= gTacticalStatus.Team[CREATURE_TEAM].bLastID; ++ubID ) { - if ( (pSoldier->aiData.bOppList[ ubID ] == SEEN_CURRENTLY) && (MercPtrs[ ubID ]->flags.uiStatusFlags & SOLDIER_MONSTER) ) + if ( (pSoldier->aiData.bOppList[ubID] == SEEN_CURRENTLY) && (ubID->flags.uiStatusFlags & SOLDIER_MONSTER) ) { - return( TRUE ); + return(TRUE); } } } - return( FALSE ); + return(FALSE); } @@ -7626,14 +7621,14 @@ INT8 GetHighestWatchedLocPoints( UINT16 ubID ) void CommunicateWatchedLoc( SoldierID ubID, INT32 sGridNo, INT8 bLevel, UINT8 ubPoints ) { - UINT16 ubLoop; + SoldierID ubLoop; INT8 bTeam, bLoopPoint, bPoint; bTeam = ubID->bTeam; - for ( ubLoop = gTacticalStatus.Team[ bTeam ].bFirstID; ubLoop <= gTacticalStatus.Team[ bTeam ].bLastID; ubLoop++ ) + for ( ubLoop = gTacticalStatus.Team[ bTeam ].bFirstID; ubLoop <= gTacticalStatus.Team[ bTeam ].bLastID; ++ubLoop ) { - SOLDIERTYPE *pSoldier = MercPtrs[ubLoop]; + SOLDIERTYPE *pSoldier = ubLoop; if ( ubLoop == ubID || pSoldier->bActive == FALSE || pSoldier->bInSector == FALSE || pSoldier->stats.bLife < OKLIFE ) { continue; @@ -7784,13 +7779,13 @@ void DecayWatchedLocs( INT8 bTeam ) void MakeBloodcatsHostile( void ) { - INT32 iLoop; - SOLDIERTYPE * pSoldier; + SOLDIERTYPE *pSoldier; + SoldierID id = gTacticalStatus.Team[ CREATURE_TEAM ].bFirstID; - iLoop = gTacticalStatus.Team[ CREATURE_TEAM ].bFirstID; - - for (pSoldier = MercPtrs[iLoop]; iLoop <= gTacticalStatus.Team[ CREATURE_TEAM ].bLastID; ++iLoop, ++pSoldier ) + for ( ; id <= gTacticalStatus.Team[ CREATURE_TEAM ].bLastID; ++id ) { + pSoldier = id; + if ( pSoldier->ubBodyType == BLOODCAT && pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife > 0 ) { SetSoldierNonNeutral( pSoldier ); diff --git a/TacticalAI/AIMain.cpp b/TacticalAI/AIMain.cpp index 90e7024b..51ea4558 100644 --- a/TacticalAI/AIMain.cpp +++ b/TacticalAI/AIMain.cpp @@ -874,8 +874,6 @@ void HandleSoldierAI( SOLDIERTYPE *pSoldier ) // FIXME - this function is named void EndAIGuysTurn( SOLDIERTYPE *pSoldier ) { - UINT16 ubID; - if (gfTurnBasedAI) { if (gTacticalStatus.uiFlags & PLAYER_TEAM_DEAD) @@ -885,9 +883,9 @@ void EndAIGuysTurn( SOLDIERTYPE *pSoldier ) } // search for any player merc to say close call quote - for ( ubID = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; ubID <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++ubID ) + for ( SoldierID ubID = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; ubID <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++ubID ) { - SOLDIERTYPE *pMerc = MercPtrs[ubID]; + SOLDIERTYPE *pMerc = ubID; if ( OK_INSECTOR_MERC( pMerc ) ) { @@ -941,10 +939,10 @@ void EndAIGuysTurn( SOLDIERTYPE *pSoldier ) #endif // find the next AI guy - ubID = RemoveFirstAIListEntry(); + SoldierID ubID = RemoveFirstAIListEntry(); if (ubID != NOBODY) { - StartNPCAI( MercPtrs[ ubID ] ); + StartNPCAI( ubID ); return; } @@ -1119,14 +1117,13 @@ void StartNPCAI(SOLDIERTYPE *pSoldier) BOOLEAN DestNotSpokenFor(SOLDIERTYPE *pSoldier, INT32 sGridNo) { - INT32 cnt; SOLDIERTYPE *pOurTeam; - - cnt = gTacticalStatus.Team[pSoldier->bTeam].bFirstID; + SoldierID cnt = gTacticalStatus.Team[pSoldier->bTeam].bFirstID; // make a list of all of our team's mercs - for (pOurTeam = MercPtrs[cnt]; cnt <= gTacticalStatus.Team[pSoldier->bTeam].bLastID; cnt++,pOurTeam++) + for ( ; cnt <= gTacticalStatus.Team[pSoldier->bTeam].bLastID; ++cnt ) { + pOurTeam = cnt; if ( pOurTeam->bActive ) { if (pOurTeam->sGridNo == sGridNo || pOurTeam->aiData.usActionData == sGridNo) diff --git a/TacticalAI/AIUtils.cpp b/TacticalAI/AIUtils.cpp index 8e1b8968..5ed40f53 100644 --- a/TacticalAI/AIUtils.cpp +++ b/TacticalAI/AIUtils.cpp @@ -1703,18 +1703,17 @@ INT32 ClosestPC( SOLDIERTYPE *pSoldier, INT32 * psDistance ) // NOTE: skips EPCs! - UINT16 ubLoop; SOLDIERTYPE *pTargetSoldier; INT32 sMinDist = WORLD_MAX; INT32 sDist; INT32 sGridNo = NOWHERE; // Loop through all mercs on player team - ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; + SoldierID ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( ; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++) + for ( ; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++ubLoop) { - pTargetSoldier = Menptr + ubLoop; + pTargetSoldier = ubLoop; if (!pTargetSoldier->bActive || !pTargetSoldier->bInSector) { @@ -1762,17 +1761,16 @@ INT32 ClosestUnDisguisedPC( SOLDIERTYPE *pSoldier, INT32 * psDistance ) // used by NPCs... find the closest PC // NOTE: skips EPCs! - UINT16 ubLoop; SOLDIERTYPE *pTargetSoldier; INT32 sMinDist = WORLD_MAX; INT32 sDist; INT32 sGridNo = NOWHERE; // Loop through all mercs on player team - ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( ; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++) + SoldierID ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; + for ( ; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++ubLoop ) { - pTargetSoldier = Menptr + ubLoop; + pTargetSoldier = ubLoop; if (!pTargetSoldier->bActive || !pTargetSoldier->bInSector) continue; @@ -2021,7 +2019,6 @@ INT16 EstimatePathCostToLocation( SOLDIERTYPE * pSoldier, INT32 sDestGridNo, INT BOOLEAN GuySawEnemy( SOLDIERTYPE * pSoldier, UINT8 ubMax ) { UINT8 ubTeamLoop; - UINT16 ubIDLoop; SOLDIERTYPE *pOpponent; for ( ubTeamLoop = 0; ubTeamLoop < MAXTEAMS; ++ubTeamLoop ) @@ -2032,9 +2029,9 @@ BOOLEAN GuySawEnemy( SOLDIERTYPE * pSoldier, UINT8 ubMax ) if ( gTacticalStatus.Team[ ubTeamLoop ].bSide != pSoldier->bSide ) { // consider guys in this team, which isn't on our side - for ( ubIDLoop = gTacticalStatus.Team[ ubTeamLoop ].bFirstID; ubIDLoop <= gTacticalStatus.Team[ ubTeamLoop ].bLastID; ++ubIDLoop ) + for ( SoldierID ubIDLoop = gTacticalStatus.Team[ ubTeamLoop ].bFirstID; ubIDLoop <= gTacticalStatus.Team[ ubTeamLoop ].bLastID; ++ubIDLoop ) { - pOpponent = MercPtrs[ubIDLoop]; + pOpponent = ubIDLoop; // if this merc is inactive, at base, on assignment, or dead if (!pOpponent) @@ -2174,15 +2171,14 @@ INT32 ClosestReachableFriendInTrouble(SOLDIERTYPE *pSoldier, BOOLEAN * pfClimbin INT16 DistanceToClosestFriend( SOLDIERTYPE * pSoldier ) { // find the distance to the closest person on the same team - UINT16 ubLoop; SOLDIERTYPE *pTargetSoldier; INT16 sMinDist = 1000; INT16 sDist; // Loop through all mercs on player team - ubLoop = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID; + SoldierID ubLoop = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID; - for ( ; ubLoop <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID; ubLoop++ ) + for ( ; ubLoop <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID; ++ubLoop ) { if (ubLoop == pSoldier->ubID) { @@ -2190,7 +2186,7 @@ INT16 DistanceToClosestFriend( SOLDIERTYPE * pSoldier ) continue; } - pTargetSoldier = Menptr + ubLoop; + pTargetSoldier = ubLoop; if ( pSoldier->bActive && pSoldier->bInSector ) { @@ -3167,12 +3163,11 @@ INT32 RangeChangeDesire( SOLDIERTYPE * pSoldier ) BOOLEAN ArmySeesOpponents( void ) { - INT32 cnt; SOLDIERTYPE * pSoldier; - for ( cnt = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; cnt <= gTacticalStatus.Team[ ENEMY_TEAM ].bLastID; cnt++ ) + for ( SoldierID cnt = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; cnt <= gTacticalStatus.Team[ ENEMY_TEAM ].bLastID; ++cnt ) { - pSoldier = MercPtrs[ cnt ]; + pSoldier = cnt; if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife >= OKLIFE && pSoldier->aiData.bOppCnt > 0 ) { @@ -3306,7 +3301,7 @@ INT16 AssessTacticalSituation( INT8 bTeam ) BOOLEAN TeamSeesOpponent( INT8 bTeam, SOLDIERTYPE * pOpponent ) { SOLDIERTYPE * pSoldier; - UINT16 cnt; + SoldierID cnt; // This assertion can be safely removed, assuming the program does what it should. It simply checks // whether the "opponent" is on the same team being checked. That should be avoided when calling this @@ -3316,9 +3311,9 @@ BOOLEAN TeamSeesOpponent( INT8 bTeam, SOLDIERTYPE * pOpponent ) // We're checking Merc/Militia visibility if (bTeam == OUR_TEAM || bTeam == MILITIA_TEAM ) { - for ( cnt = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID; cnt <= gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; cnt++ ) + for ( cnt = gTacticalStatus.Team[ MILITIA_TEAM ].bFirstID; cnt <= gTacticalStatus.Team[ MILITIA_TEAM ].bLastID; ++cnt ) { - pSoldier = MercPtrs[ cnt ]; + pSoldier = cnt; if (pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife >= OKLIFE) { @@ -3328,9 +3323,9 @@ BOOLEAN TeamSeesOpponent( INT8 bTeam, SOLDIERTYPE * pOpponent ) return ( TRUE ); } } - for ( cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; cnt <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; cnt++ ) + for ( cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; cnt <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++cnt ) { - pSoldier = MercPtrs[ cnt ]; + pSoldier = cnt; if (pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife >= OKLIFE) { @@ -3349,9 +3344,9 @@ BOOLEAN TeamSeesOpponent( INT8 bTeam, SOLDIERTYPE * pOpponent ) // Check enemy visibility else if (bTeam == ENEMY_TEAM) { - for ( cnt = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; cnt <= gTacticalStatus.Team[ ENEMY_TEAM ].bLastID; cnt++ ) + for ( cnt = gTacticalStatus.Team[ ENEMY_TEAM ].bFirstID; cnt <= gTacticalStatus.Team[ ENEMY_TEAM ].bLastID; ++cnt ) { - pSoldier = MercPtrs[ cnt ]; + pSoldier = cnt; if (pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife >= OKLIFE) { @@ -3448,14 +3443,13 @@ INT32 CalcStraightThreatValue( SOLDIERTYPE *pEnemy ) SoldierID GetClosestFlaggedSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam, UINT32 aFlag, BOOLEAN fCheckSight ) { SoldierID id = NOBODY; - UINT32 uiLoop; SOLDIERTYPE * pFriend; INT16 range = aRange; // go through each soldier, looking for "friends" (soldiers on same team) - for (uiLoop = gTacticalStatus.Team[ auTeam ].bFirstID; uiLoop <= gTacticalStatus.Team[ auTeam ].bLastID; ++uiLoop) + for ( SoldierID uiLoop = gTacticalStatus.Team[ auTeam ].bFirstID; uiLoop <= gTacticalStatus.Team[ auTeam ].bLastID; ++uiLoop) { - pFriend = MercPtrs[ uiLoop ]; + pFriend = uiLoop; // if this merc is inactive, not in sector, or dead if (!pFriend) @@ -3501,14 +3495,13 @@ SoldierID GetClosestFlaggedSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT SoldierID GetClosestWoundedSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam ) { SoldierID id = NOBODY; - UINT32 uiLoop; SOLDIERTYPE * pFriend; INT16 range = aRange; // go through each soldier, looking for "friends" (soldiers on same team) - for (uiLoop = gTacticalStatus.Team[ auTeam ].bFirstID; uiLoop <= gTacticalStatus.Team[ auTeam ].bLastID; ++uiLoop) + for ( SoldierID uiLoop = gTacticalStatus.Team[ auTeam ].bFirstID; uiLoop <= gTacticalStatus.Team[ auTeam ].bLastID; ++uiLoop) { - pFriend = MercPtrs[ uiLoop ]; + pFriend = uiLoop; // if this merc is inactive, not in sector, or dead if (!pFriend) @@ -3550,14 +3543,13 @@ SoldierID GetClosestWoundedSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT SoldierID GetClosestMedicSoldierID( SOLDIERTYPE * pSoldier, INT16 aRange, UINT8 auTeam ) { SoldierID id = NOBODY; - UINT32 uiLoop; SOLDIERTYPE * pFriend; INT16 range = aRange; // go through each soldier, looking for "friends" (soldiers on same team) - for (uiLoop = gTacticalStatus.Team[ auTeam ].bFirstID; uiLoop <= gTacticalStatus.Team[ auTeam ].bLastID; ++uiLoop) + for ( SoldierID uiLoop = gTacticalStatus.Team[ auTeam ].bFirstID; uiLoop <= gTacticalStatus.Team[ auTeam ].bLastID; ++uiLoop) { - pFriend = MercPtrs[ uiLoop ]; + pFriend = uiLoop; // if this merc is inactive, not in sector, or dead if (!pFriend) @@ -3622,9 +3614,9 @@ UINT16 CountFriendsInDirection( SOLDIERTYPE *pSoldier, INT32 sTargetGridNo ) ubMyDir = GetDirectionFromCenterCellXYGridNo(sTargetGridNo, pSoldier->sGridNo); // Run through each friendly. - for ( UINT16 iCounter = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID ; iCounter <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID ; iCounter ++ ) + for ( SoldierID iCounter = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID ; iCounter <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID ; ++iCounter ) { - pFriend = MercPtrs[ iCounter ]; + pFriend = iCounter; ubFriendDir = GetDirectionFromCenterCellXYGridNo(sTargetGridNo, pFriend->sGridNo); if (pFriend != pSoldier && @@ -3654,9 +3646,9 @@ UINT16 CountNearbyFriends( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubDistanc return 0; // Run through each friendly. - for ( UINT16 iCounter = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID ; iCounter <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID ; iCounter ++ ) + for ( SoldierID iCounter = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID ; iCounter <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID ; ++iCounter ) { - pFriend = MercPtrs[ iCounter ]; + pFriend = iCounter; // Make sure that character is alive, not too shocked, and conscious, and of higher experience level // than the character being suppressed. if (pFriend != pSoldier && pFriend->bActive && pFriend->stats.bLife >= OKLIFE && @@ -3963,9 +3955,9 @@ BOOLEAN WeAttack(INT8 bTeam) SOLDIERTYPE * pFriend; // Run through each friendly. - for (UINT16 iCounter = gTacticalStatus.Team[bTeam].bFirstID; iCounter <= gTacticalStatus.Team[bTeam].bLastID; iCounter++) + for ( SoldierID iCounter = gTacticalStatus.Team[bTeam].bFirstID; iCounter <= gTacticalStatus.Team[bTeam].bLastID; ++iCounter ) { - pFriend = MercPtrs[iCounter]; + pFriend = iCounter; if (pFriend && pFriend->bActive && @@ -3987,9 +3979,9 @@ UINT8 CountNearbyFriendsLastAttackHit( SOLDIERTYPE *pSoldier, INT32 sGridNo, UIN UINT8 ubFriendCount = 0; // Run through each friendly. - for ( UINT16 iCounter = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID ; iCounter <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID ; iCounter ++ ) + for ( SoldierID iCounter = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID ; iCounter <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID ; ++iCounter ) { - pFriend = MercPtrs[ iCounter ]; + pFriend = iCounter; if (pFriend != pSoldier && pFriend->bActive && @@ -4027,9 +4019,9 @@ UINT8 CountFriendsFlankSameSpot(SOLDIERTYPE *pSoldier, INT32 sSpot) } // Run through each friendly. - for (UINT16 iCounter = gTacticalStatus.Team[pSoldier->bTeam].bFirstID; iCounter <= gTacticalStatus.Team[pSoldier->bTeam].bLastID; iCounter++) + for ( SoldierID iCounter = gTacticalStatus.Team[pSoldier->bTeam].bFirstID; iCounter <= gTacticalStatus.Team[pSoldier->bTeam].bLastID; ++iCounter ) { - pFriend = MercPtrs[iCounter]; + pFriend = iCounter; if (pFriend && pFriend != pSoldier && @@ -4109,9 +4101,9 @@ UINT8 CountFriendsBlack( SOLDIERTYPE *pSoldier, INT32 sClosestOpponent ) } // Run through each friendly. - for ( UINT16 iCounter = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID ; iCounter <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID ; iCounter ++ ) + for ( SoldierID iCounter = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID ; iCounter <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID ; ++iCounter ) { - pFriend = MercPtrs[ iCounter ]; + pFriend = iCounter; // Make sure that character is alive, not too shocked, and conscious if (pFriend != pSoldier && @@ -4148,9 +4140,9 @@ UINT16 CountTeamUnderAttack(INT8 bTeam, INT32 sGridNo, INT16 sDistance) return 0; // Run through each friendly. - for (UINT16 iCounter = gTacticalStatus.Team[bTeam].bFirstID; iCounter <= gTacticalStatus.Team[bTeam].bLastID; iCounter++) + for ( SoldierID iCounter = gTacticalStatus.Team[bTeam].bFirstID; iCounter <= gTacticalStatus.Team[bTeam].bLastID; ++iCounter ) { - pFriend = MercPtrs[iCounter]; + pFriend = iCounter; if (pFriend && pFriend->bActive && @@ -4400,9 +4392,9 @@ UINT16 CountTeamSeeSoldier( INT8 bTeam, SOLDIERTYPE *pSoldier ) if ( bTeam >= MAXTEAMS ) return 0; - for ( UINT16 cnt = gTacticalStatus.Team[bTeam].bFirstID; cnt <= gTacticalStatus.Team[bTeam].bLastID; ++cnt ) + for ( SoldierID cnt = gTacticalStatus.Team[bTeam].bFirstID; cnt <= gTacticalStatus.Team[bTeam].bLastID; ++cnt ) { - pFriend = MercPtrs[cnt]; + pFriend = cnt; if ( pFriend->bActive && pFriend->bInSector && @@ -4844,7 +4836,6 @@ UINT16 CountSeenEnemiesLastTurn( SOLDIERTYPE* pSoldier ) CHECKF(pSoldier); UINT8 ubTeamLoop; - UINT16 ubIDLoop; UINT16 cnt = 0; for( ubTeamLoop = 0; ubTeamLoop < MAXTEAMS; ubTeamLoop++ ) @@ -4855,7 +4846,7 @@ UINT16 CountSeenEnemiesLastTurn( SOLDIERTYPE* pSoldier ) if( gTacticalStatus.Team[ ubTeamLoop ].bSide != pSoldier->bSide ) { // consider guys in this team, which isn't on our side - for( ubIDLoop = gTacticalStatus.Team[ ubTeamLoop ].bFirstID; ubIDLoop <= gTacticalStatus.Team[ ubTeamLoop ].bLastID; ubIDLoop++ ) + for( SoldierID ubIDLoop = gTacticalStatus.Team[ ubTeamLoop ].bFirstID; ubIDLoop <= gTacticalStatus.Team[ ubTeamLoop ].bLastID; ++ubIDLoop ) { // if this guy SAW an enemy recently... if( pSoldier->aiData.bOppList[ ubIDLoop ] >= SEEN_CURRENTLY && diff --git a/TacticalAI/Attacks.cpp b/TacticalAI/Attacks.cpp index 481c1f0a..74bc3548 100644 --- a/TacticalAI/Attacks.cpp +++ b/TacticalAI/Attacks.cpp @@ -3903,9 +3903,9 @@ void CheckTossFriendSmoke(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow) UINT8 ubDirection; // Run through each friendly. - for (UINT16 iCounter = gTacticalStatus.Team[pSoldier->bTeam].bFirstID; iCounter <= gTacticalStatus.Team[pSoldier->bTeam].bLastID; iCounter++) + for ( SoldierID iCounter = gTacticalStatus.Team[pSoldier->bTeam].bFirstID; iCounter <= gTacticalStatus.Team[pSoldier->bTeam].bLastID; ++iCounter) { - pFriend = MercPtrs[iCounter]; + pFriend = iCounter; // check that friend is alive and needs cover if (pFriend && diff --git a/TacticalAI/CreatureDecideAction.cpp b/TacticalAI/CreatureDecideAction.cpp index 9e01ff8e..ec03cc31 100644 --- a/TacticalAI/CreatureDecideAction.cpp +++ b/TacticalAI/CreatureDecideAction.cpp @@ -66,11 +66,11 @@ INT8 gbHuntCallPriority[NUM_CREATURE_CALLS] = void CreatureCall( SOLDIERTYPE * pCaller ) { UINT8 ubCallerType=0; - UINT16 ubReceiver; - INT8 bFullPriority; - INT8 bPriority; - SOLDIERTYPE * pReceiver; - UINT16 usDistToCaller; + SoldierID ubReceiver; + INT8 bFullPriority; + INT8 bPriority; + SOLDIERTYPE *pReceiver; + UINT16 usDistToCaller; // communicate call to all creatures on map through ultrasonics gTacticalStatus.Team[pCaller->bTeam].bAwareOfOpposition = TRUE; @@ -121,9 +121,9 @@ void CreatureCall( SOLDIERTYPE * pCaller ) } - for (ubReceiver = gTacticalStatus.Team[ pCaller->bTeam ].bFirstID; ubReceiver <= gTacticalStatus.Team[ pCaller->bTeam ].bLastID; ubReceiver++) + for (ubReceiver = gTacticalStatus.Team[ pCaller->bTeam ].bFirstID; ubReceiver <= gTacticalStatus.Team[ pCaller->bTeam ].bLastID; ++ubReceiver ) { - pReceiver = MercPtrs[ubReceiver]; + pReceiver = ubReceiver; if (pReceiver->bActive && pReceiver->bInSector && (pReceiver->stats.bLife >= OKLIFE) && (pReceiver != pCaller) && (pReceiver->aiData.bAlertStatus < STATUS_BLACK)) { if (pReceiver->ubBodyType != LARVAE_MONSTER && pReceiver->ubBodyType != INFANT_MONSTER && pReceiver->ubBodyType != QUEENMONSTER) diff --git a/TacticalAI/DecideAction.cpp b/TacticalAI/DecideAction.cpp index 578bfa29..ddddd888 100644 --- a/TacticalAI/DecideAction.cpp +++ b/TacticalAI/DecideAction.cpp @@ -754,9 +754,9 @@ INT8 DecideActionGreen(SOLDIERTYPE *pSoldier) { // WANNE: This should fix the bug if any merc are still under PC control. This could happen after boxing in SAN MONA. SOLDIERTYPE *pTeamSoldier; - for (UINT16 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; if (pTeamSoldier->flags.uiStatusFlags & SOLDIER_PCUNDERAICONTROL) pTeamSoldier->flags.uiStatusFlags &= (~SOLDIER_PCUNDERAICONTROL); diff --git a/TacticalAI/Knowledge.cpp b/TacticalAI/Knowledge.cpp index 74fafb00..06739f4b 100644 --- a/TacticalAI/Knowledge.cpp +++ b/TacticalAI/Knowledge.cpp @@ -21,7 +21,6 @@ void CallAvailableEnemiesTo( INT32 sGridNo ) void CallAvailableTeamEnemiesTo( INT32 sGridNo, INT8 bTeam ) { - INT32 iLoop2; SOLDIERTYPE * pSoldier; // All enemy teams become aware of a very important "noise" coming from here! @@ -36,9 +35,10 @@ void CallAvailableTeamEnemiesTo( INT32 sGridNo, INT8 bTeam ) gubPublicNoiseVolume[bTeam] = MAX_MISC_NOISE_DURATION; // new situation for everyone; - iLoop2 = gTacticalStatus.Team[ bTeam ].bFirstID; - for ( pSoldier = MercPtrs[iLoop2]; iLoop2 <= gTacticalStatus.Team[ bTeam ].bLastID; iLoop2++, pSoldier++ ) + SoldierID iLoop2 = gTacticalStatus.Team[ bTeam ].bFirstID; + for ( ; iLoop2 <= gTacticalStatus.Team[ bTeam ].bLastID; ++iLoop2 ) { + pSoldier = iLoop2; if (pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife >= OKLIFE) { SetNewSituation( pSoldier ); @@ -54,7 +54,6 @@ void CallAvailableKingpinMenTo( INT32 sGridNo ) // like call all enemies, but only affects civgroup KINGPIN guys with // NO PROFILE - INT32 iLoop2; SOLDIERTYPE * pSoldier; // All enemy teams become aware of a very important "noise" coming from here! @@ -67,9 +66,10 @@ void CallAvailableKingpinMenTo( INT32 sGridNo ) // new situation for everyone... - iLoop2 = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; - for ( pSoldier = MercPtrs[iLoop2]; iLoop2 <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; iLoop2++, pSoldier++ ) + SoldierID iLoop2 = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; + for ( ; iLoop2 <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ++iLoop2 ) { + pSoldier = iLoop2; if (pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife >= OKLIFE && pSoldier->ubCivilianGroup == KINGPIN_CIV_GROUP && pSoldier->ubProfile == NO_PROFILE) { SetNewSituation( pSoldier ); diff --git a/TacticalAI/Medical.cpp b/TacticalAI/Medical.cpp index 35c2a334..56a5b202 100644 --- a/TacticalAI/Medical.cpp +++ b/TacticalAI/Medical.cpp @@ -72,7 +72,6 @@ BOOLEAN FindAutobandageClimbPoint( INT32 sDesiredGridNo, BOOLEAN fClimbUp ) BOOLEAN FullPatientCheck( SOLDIERTYPE * pPatient ) { - UINT16 cnt; SOLDIERTYPE * pSoldier; if ( CanCharacterAutoBandageTeammate( pPatient ) ) @@ -90,9 +89,10 @@ BOOLEAN FullPatientCheck( SOLDIERTYPE * pPatient ) else { // run though the list of chars on team - cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( 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; // can this character help out? if ( CanCharacterAutoBandageTeammate( pSoldier ) == TRUE ) { @@ -119,17 +119,16 @@ BOOLEAN FullPatientCheck( SOLDIERTYPE * pPatient ) BOOLEAN CanAutoBandage( BOOLEAN fDoFullCheck ) { // returns false if we should stop being in auto-bandage mode - UINT16 cnt; UINT16 ubMedics = 0, ubPatients = 0; SOLDIERTYPE * pSoldier; static SoldierID ubIDForFullCheck = NOBODY; // run though the list of chars on team - cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++,pSoldier++) + SoldierID cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; + for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt) { // can this character help out? - if( CanCharacterAutoBandageTeammate( pSoldier ) == TRUE ) + if( CanCharacterAutoBandageTeammate( cnt ) == TRUE ) { // yep, up the number of medics in sector ubMedics++; @@ -143,8 +142,9 @@ BOOLEAN CanAutoBandage( BOOLEAN fDoFullCheck ) } cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt++,pSoldier++) + for ( ; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++cnt ) { + pSoldier = cnt; // can this character be helped out by a teammate? if ( CanCharacterBeAutoBandagedByTeammate( pSoldier ) == TRUE ) { @@ -227,7 +227,6 @@ BOOLEAN CanCharacterBeAutoBandagedByTeammate( SOLDIERTYPE *pSoldier ) INT8 FindBestPatient( SOLDIERTYPE * pSoldier, BOOLEAN * pfDoClimb ) { - UINT16 cnt; UINT8 cnt2; INT32 bBestPriority = 0, sBestAdjGridNo = NOWHERE; INT32 sPatientGridNo = NOWHERE, sBestPatientGridNo = NOWHERE; @@ -244,9 +243,10 @@ INT8 FindBestPatient( SOLDIERTYPE * pSoldier, BOOLEAN * pfDoClimb ) gubGlobalPathFlags = PATH_THROUGH_PEOPLE; // search for someone who needs aid - cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; - for ( pPatient = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; cnt++,pPatient++) + SoldierID cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; + for ( ; cnt <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++cnt ) { + pPatient = cnt; if ( !(pPatient->bActive) || !(pPatient->bInSector) ) { continue; // NEXT!!! @@ -475,13 +475,13 @@ INT8 DecideAutoBandage( SOLDIERTYPE * pSoldier ) BOOLEAN DoctorIsPresent( SOLDIERTYPE * pPatient, BOOLEAN fOnDoctorAssignmentCheck ) { SOLDIERTYPE * pMedic = NULL; - UINT16 cnt; INT8 bSlot; BOOLEAN fDoctorHasBeenFound = FALSE; - cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; - for ( pMedic = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; cnt++,pMedic++) + SoldierID cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; + for ( ; cnt <= gTacticalStatus.Team[ OUR_TEAM ].bLastID; ++cnt ) { + pMedic = cnt; if ( !(pMedic->bActive) || !(pMedic->bInSector) || ( pMedic->flags.uiStatusFlags & SOLDIER_VEHICLE ) || (pMedic->bAssignment == VEHICLE ) ) { // is nowhere around! diff --git a/TacticalAI/NPC.cpp b/TacticalAI/NPC.cpp index 727d0e83..fe48412c 100644 --- a/TacticalAI/NPC.cpp +++ b/TacticalAI/NPC.cpp @@ -2913,7 +2913,6 @@ void TriggerClosestMercWhoCanSeeNPC( UINT8 ubNPC, NPCQuoteInfo *pQuotePtr ) UINT16 ubNumMercs = 0; UINT16 ubChosenMerc; SOLDIERTYPE *pTeamSoldier, *pSoldier; - INT32 cnt; // First get pointer to NPC pSoldier = FindSoldierByProfileID( ubNPC, FALSE ); @@ -2921,11 +2920,12 @@ void TriggerClosestMercWhoCanSeeNPC( UINT8 ubNPC, NPCQuoteInfo *pQuotePtr ) // Loop through all our guys and randomly say one from someone in our sector // set up soldier ptr as first element in mercptrs list - cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; + SoldierID cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; // run through list - 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... if ( OK_INSECTOR_MERC( pTeamSoldier ) && pTeamSoldier->aiData.bOppList[ pSoldier->ubID ] == SEEN_CURRENTLY ) { @@ -3649,7 +3649,6 @@ void TriggerFriendWithHostileQuote( UINT8 ubNPC ) UINT16 ubNumMercsAvailable = 0, ubChosenMerc; SOLDIERTYPE * pTeamSoldier; SOLDIERTYPE * pSoldier; - INT32 cnt; INT8 bTeam; // First get pointer to NPC @@ -3663,11 +3662,12 @@ void TriggerFriendWithHostileQuote( UINT8 ubNPC ) // Loop through all our guys and find one to yell // set up soldier ptr as first element in mercptrs list - cnt = gTacticalStatus.Team[ bTeam ].bFirstID; + SoldierID cnt = gTacticalStatus.Team[ bTeam ].bFirstID; // run through list - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ bTeam ].bLastID; cnt++,pTeamSoldier++ ) + for ( ; cnt <= gTacticalStatus.Team[ bTeam ].bLastID; ++cnt ) { + pTeamSoldier = cnt; // Add guy if he's a candidate... if ( pTeamSoldier->bActive && pSoldier->bInSector && pTeamSoldier->stats.bLife >= OKLIFE && pTeamSoldier->bBreath >= OKBREATH && pTeamSoldier->aiData.bOppCnt > 0 && pTeamSoldier->ubProfile != NO_PROFILE ) { diff --git a/TileEngine/Explosion Control.cpp b/TileEngine/Explosion Control.cpp index e8f6cc3e..d64a7526 100644 --- a/TileEngine/Explosion Control.cpp +++ b/TileEngine/Explosion Control.cpp @@ -3283,13 +3283,12 @@ void BillyBlocksDoorCallback( void ) BOOLEAN HookerInRoom( UINT16 usRoom ) { //DBrot: More Rooms - UINT16 ubLoop;//, ubTempRoom; UINT16 usTempRoom; SOLDIERTYPE * pSoldier; - for ( ubLoop = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; ubLoop <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ubLoop++ ) + for ( SoldierID ubLoop = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; ubLoop <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ++ubLoop ) { - pSoldier = MercPtrs[ ubLoop ]; + pSoldier = ubLoop; if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife >= OKLIFE && pSoldier->aiData.bNeutral && pSoldier->ubBodyType == MINICIV ) { @@ -4292,7 +4291,7 @@ void HandleExplosionQueue( void ) if (gfExplosionQueueMayHaveChangedSight) { - UINT16 ubLoop; + SoldierID ubLoop; SOLDIERTYPE * pTeamSoldier; // set variable so we may at least have someone to resolve interrupts vs @@ -4301,8 +4300,9 @@ void HandleExplosionQueue( void ) // call fov code ubLoop = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; - for ( pTeamSoldier = MercPtrs[ ubLoop ]; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ubLoop++, pTeamSoldier++ ) + for ( ; ubLoop <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++ubLoop ) { + pTeamSoldier = ubLoop; if ( pTeamSoldier->bActive && pTeamSoldier->bInSector ) { RevealRoofsAndItems( pTeamSoldier, TRUE, FALSE, pTeamSoldier->pathing.bLevel, FALSE ); @@ -4442,17 +4442,17 @@ void HandleExplosionWarningAnimations( ) // soldiers if (!fShow) { - for (UINT32 ubID = gTacticalStatus.Team[OUR_TEAM].bFirstID; ubID <= gTacticalStatus.Team[CIV_TEAM].bLastID; ++ubID) + for ( SoldierID ubID = gTacticalStatus.Team[OUR_TEAM].bFirstID; ubID <= gTacticalStatus.Team[CIV_TEAM].bLastID; ++ubID) { if (ubID != pSoldier->ubID && - MercPtrs[ubID] && - MercPtrs[ubID]->sGridNo == sSpot && - MercPtrs[ubID]->bVisible == TRUE && - MercPtrs[ubID]->pathing.bLevel == bLevel && - gAnimControl[MercPtrs[ubID]->usAnimState].ubEndHeight == ANIM_PRONE && - !Water(MercPtrs[ubID]->sGridNo, MercPtrs[ubID]->pathing.bLevel) && + ubID != NOBODY && + ubID->sGridNo == sSpot && + ubID->bVisible == TRUE && + ubID->pathing.bLevel == bLevel && + gAnimControl[ubID->usAnimState].ubEndHeight == ANIM_PRONE && + !Water(ubID->sGridNo, ubID->pathing.bLevel) && pSoldier->ubBodyType <= REGFEMALE && - (MercPtrs[ubID]->bTeam == pSoldier->bTeam || MercPtrs[ubID]->IsUnconscious() || MercPtrs[ubID]->stats.bLife < OKLIFE)) + (ubID->bTeam == pSoldier->bTeam || ubID->IsUnconscious() || ubID->stats.bLife < OKLIFE)) { fShow = TRUE; } @@ -5308,7 +5308,6 @@ void UpdateSAMDoneRepair( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ ) void HandleBuldingDestruction( INT32 sGridNo, SoldierID ubOwner ) { SOLDIERTYPE * pSoldier; - UINT16 cnt; if ( ubOwner == NOBODY ) { @@ -5324,9 +5323,10 @@ void HandleBuldingDestruction( INT32 sGridNo, SoldierID ubOwner ) if ( sGridNo == NOWHERE || !InARoom( sGridNo, NULL ) ) return; - cnt = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; - for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; cnt++ ,pSoldier++ ) + SoldierID cnt = gTacticalStatus.Team[ CIV_TEAM ].bFirstID; + for ( ; cnt <= gTacticalStatus.Team[ CIV_TEAM ].bLastID; ++cnt ) { + pSoldier = cnt; if ( pSoldier->bActive && pSoldier->bInSector && pSoldier->stats.bLife && pSoldier->aiData.bNeutral ) { if ( pSoldier->ubProfile != NO_PROFILE ) diff --git a/TileEngine/Isometric Utils.cpp b/TileEngine/Isometric Utils.cpp index 51d8a986..82bf2859 100644 --- a/TileEngine/Isometric Utils.cpp +++ b/TileEngine/Isometric Utils.cpp @@ -1336,10 +1336,11 @@ INT32 RandomGridNo() BOOLEAN GridNoNearPlayerMercs( INT32 sGridNo, INT16 sRadius ) { SOLDIERTYPE* pTeamSoldier = NULL; - INT32 cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; - INT32 lastid = gTacticalStatus.Team[ OUR_TEAM ].bLastID; - for ( pTeamSoldier = MercPtrs[ cnt ]; cnt < lastid; ++cnt, ++pTeamSoldier) + SoldierID cnt = gTacticalStatus.Team[ OUR_TEAM ].bFirstID; + SoldierID lastid = gTacticalStatus.Team[ OUR_TEAM ].bLastID; + for ( ; cnt < lastid; ++cnt ) { + pTeamSoldier = cnt; if ( pTeamSoldier && pTeamSoldier->bActive && pTeamSoldier->bInSector ) { if ( PythSpacesAway(sGridNo, pTeamSoldier->sGridNo) < sRadius ) diff --git a/TileEngine/Tactical Placement GUI.cpp b/TileEngine/Tactical Placement GUI.cpp index 3c4fe0bd..0735de88 100644 --- a/TileEngine/Tactical Placement GUI.cpp +++ b/TileEngine/Tactical Placement GUI.cpp @@ -227,7 +227,7 @@ void InitTacticalPlacementGUI() { islocked=0;//hayden VOBJECT_DESC VObjectDesc; - INT32 i, xp, yp; + INT32 xp, yp; UINT8 ubFaceIndex; gfTacticalPlacementGUIActive = TRUE; gfTacticalPlacementGUIDirty = TRUE; @@ -325,9 +325,9 @@ void InitTacticalPlacementGUI() //First pass: Count the number of mercs that are going to be placed by the player. // This determines the size of the array we will allocate. giPlacements = 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 ) { - SOLDIERTYPE *pSoldier = MercPtrs[i]; + SOLDIERTYPE *pSoldier = i; if( pSoldier->bActive && !pSoldier->flags.fBetweenSectors && CurrentBattleSectorIs( pSoldier->sSectorX, pSoldier->sSectorY, pSoldier->bSectorZ ) && !( pSoldier->flags.uiStatusFlags & ( SOLDIER_VEHICLE ) ) && // ATE Ignore vehicles @@ -345,9 +345,9 @@ void InitTacticalPlacementGUI() Assert( gMercPlacement ); //Second pass: Assign the mercs to their respective slots. giPlacements = 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 ) { - SOLDIERTYPE *pSoldier = MercPtrs[i]; + SOLDIERTYPE *pSoldier = i; if( pSoldier->bActive && pSoldier->stats.bLife && !pSoldier->flags.fBetweenSectors && CurrentBattleSectorIs( pSoldier->sSectorX, pSoldier->sSectorY, pSoldier->bSectorZ ) && pSoldier->bAssignment != ASSIGNMENT_POW && @@ -426,7 +426,7 @@ void InitTacticalPlacementGUI() } //add all the faces now - for( i = 0; i < giPlacements; ++i ) + for( INT32 i = 0; i < giPlacements; ++i ) { VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE; @@ -483,7 +483,7 @@ void InitTacticalPlacementGUI() { ButtonList[ iTPButtons[ GROUP_BUTTON ] ]->uiFlags |= BUTTON_CLICKED_ON; - for( i = 0; i < giPlacements; ++i ) + for( INT32 i = 0; i < giPlacements; ++i ) { //go from the currently selected soldier to the end if( !gMercPlacement[ i ].fPlaced ) { //Found an unplaced merc. Select him. From 1013531a7f5eac0fafc86b6f1c55846b472508a3 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 1 Dec 2024 21:17:23 +0200 Subject: [PATCH 172/192] Remove #pragma optimize("", off) calls --- Tactical/Civ Quotes.cpp | 2 -- Tactical/Soldier Control.cpp | 4 ++-- Tactical/Soldier Create.cpp | 3 +-- Tactical/Turn Based Input.cpp | 5 +++-- Tactical/Weapons.cpp | 3 +-- 5 files changed, 7 insertions(+), 10 deletions(-) diff --git a/Tactical/Civ Quotes.cpp b/Tactical/Civ Quotes.cpp index 01dfd72a..589c8643 100644 --- a/Tactical/Civ Quotes.cpp +++ b/Tactical/Civ Quotes.cpp @@ -1093,7 +1093,6 @@ BOOLEAN LoadCivQuotesFromLoadGameFile( HWFILE hFile ) return( TRUE ); } //-------------------------------------------------------------- -#pragma optimize("", off) // anv: start enemy taunt with probabilty depending on taunt settings void PossiblyStartEnemyTaunt( SOLDIERTYPE *pCiv, TAUNTTYPE iTauntType, SoldierID uiTargetID ) { @@ -1308,7 +1307,6 @@ void PossiblyStartEnemyTaunt( SOLDIERTYPE *pCiv, TAUNTTYPE iTauntType, SoldierID StartEnemyTaunt( pCiv, iTauntType, pTarget ); } -#pragma optimize("", on) // SANDRO - soldier taunts void StartEnemyTaunt( SOLDIERTYPE *pCiv, TAUNTTYPE iTauntType, SOLDIERTYPE *pTarget ) diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index 8235157c..30547a63 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -5714,7 +5714,6 @@ UINT16 PickSoldierReadyAnimation( SOLDIERTYPE *pSoldier, BOOLEAN fEndReady, BOOL // extern SOLDIERTYPE * FreeUpAttackerGivenTarget( UINT8 ubID, UINT8 ubTargetID ); // extern SOLDIERTYPE * ReduceAttackBusyGivenTarget( UINT8 ubID, UINT8 ubTargetID ); -#pragma optimize("", off) // ATE: THIS FUNCTION IS USED FOR ALL SOLDIER TAKE DAMAGE FUNCTIONS! void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT16 sBreathLoss, UINT16 bDirection, UINT16 sRange, SoldierID ubAttackerID, UINT8 ubSpecial, UINT8 ubHitLocation, INT16 sSubsequent, INT32 sLocationGrid ) { @@ -6425,7 +6424,8 @@ void SOLDIERTYPE::EVENT_SoldierGotHit( UINT16 usWeaponIndex, INT16 sDamage, INT1 // anv: taunts are called from UseHandToHand() } } -#pragma optimize("", on) + + UINT8 CalcScreamVolume( SOLDIERTYPE * pSoldier, UINT8 ubCombinedLoss ) { // NB explosions are so loud they should drown out screams diff --git a/Tactical/Soldier Create.cpp b/Tactical/Soldier Create.cpp index 4d84b470..478b3f9d 100644 --- a/Tactical/Soldier Create.cpp +++ b/Tactical/Soldier Create.cpp @@ -570,7 +570,6 @@ void DecideToAssignSniperOrders( SOLDIERCREATE_STRUCT * pp ) // This causes an issue if someone enters a sector from an adjacent sector - they should be affected by their point of origin, not the current sector // For this reason, we add a little helper variable that stores such a sector. INT16 gsStrategicDiseaseOriginSector = -1; -#pragma optimize("", off) SOLDIERTYPE* TacticalCreateSoldier( SOLDIERCREATE_STRUCT *pCreateStruct, SoldierID *pubID ) { SOLDIERTYPE Soldier; @@ -1267,7 +1266,7 @@ SOLDIERTYPE* TacticalCreateSoldier( SOLDIERCREATE_STRUCT *pCreateStruct, Soldier return pSoldier; } } -#pragma optimize("", on) + BOOLEAN TacticalCopySoldierFromProfile( SOLDIERTYPE *pSoldier, SOLDIERCREATE_STRUCT *pCreateStruct ) { diff --git a/Tactical/Turn Based Input.cpp b/Tactical/Turn Based Input.cpp index 4a3a2b37..bc141fb2 100644 --- a/Tactical/Turn Based Input.cpp +++ b/Tactical/Turn Based Input.cpp @@ -5399,7 +5399,8 @@ void SetScopeMode( INT32 usMapPos ) ManLooksForOtherTeams( gusSelectedSoldier ); } } -#pragma optimize("", off) + + void ObliterateSector() { INT32 cnt; @@ -5433,7 +5434,7 @@ void ObliterateSector() } } } -#pragma optimize("", on) + void RandomizeMercProfile() { diff --git a/Tactical/Weapons.cpp b/Tactical/Weapons.cpp index 8e527f79..85f3b54c 100644 --- a/Tactical/Weapons.cpp +++ b/Tactical/Weapons.cpp @@ -6257,7 +6257,7 @@ BOOLEAN InRange( SOLDIERTYPE *pSoldier, INT32 sGridNo ) return( FALSE ); } -#pragma optimize("", off) + UINT32 CalcNewChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime, UINT8 ubAimPos ) { @@ -6612,7 +6612,6 @@ UINT32 CalcNewChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTi return ((INT32)fFinalChance); } -#pragma optimize("", on) UINT32 CalcChanceToHitGun(SOLDIERTYPE *pSoldier, INT32 sGridNo, INT16 ubAimTime, UINT8 ubAimPos ) From d0dbb9afb1c0420d93a149f8a73930aec5ee8f98 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 1 Dec 2024 21:37:52 +0200 Subject: [PATCH 173/192] Remove unused function --- Tactical/Overhead.cpp | 8 -------- Tactical/Overhead.h | 1 - 2 files changed, 9 deletions(-) diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index 789a4b80..13dfe11a 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -11728,14 +11728,6 @@ UINT16 NumSoldiersofClassWithFlag2InSector( UINT8 aTeam, UINT8 aSoldierClass, UI return num; } -INT32 GetClosestSoldierWithFlag( UINT8 aTeam, UINT32 aFlag ) -{ - INT32 sBestGridNo = NOWHERE; - - - - return sBestGridNo; -} // Flugente: VIP targets // can a new VIP be created? diff --git a/Tactical/Overhead.h b/Tactical/Overhead.h index f611474b..fc89d207 100644 --- a/Tactical/Overhead.h +++ b/Tactical/Overhead.h @@ -405,7 +405,6 @@ UINT16 HighestEnemyOfficersInSector(UINT8& aType); // count all soldiers in the current sector that have a specific flag set UINT16 NumSoldiersWithFlagInSector(UINT8 aTeam, UINT32 aFlag); UINT16 NumSoldiersofClassWithFlag2InSector( UINT8 aTeam, UINT8 aSoldierClass, UINT32 aFlag ); -INT32 GetClosestSoldierWithFlag( UINT8 aTeam, UINT32 aFlag ); // Flugente: VIP targets // can a new VIP be created? From abe6877d909791e743a7b12df01246999a6fa1b6 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 1 Dec 2024 21:51:56 +0200 Subject: [PATCH 174/192] Delete VS project files Remnant from the initial branch commit --- Strategic/Strategic_VS2019.vcxproj.user | 4 ---- lua/lua_VS2019.vcxproj.user | 4 ---- 2 files changed, 8 deletions(-) delete mode 100644 Strategic/Strategic_VS2019.vcxproj.user delete mode 100644 lua/lua_VS2019.vcxproj.user diff --git a/Strategic/Strategic_VS2019.vcxproj.user b/Strategic/Strategic_VS2019.vcxproj.user deleted file mode 100644 index 88a55094..00000000 --- a/Strategic/Strategic_VS2019.vcxproj.user +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/lua/lua_VS2019.vcxproj.user b/lua/lua_VS2019.vcxproj.user deleted file mode 100644 index 88a55094..00000000 --- a/lua/lua_VS2019.vcxproj.user +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file From ffccdfa6544927af573a04e67bedc65ad2393a0e Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 4 Dec 2024 00:18:22 +0200 Subject: [PATCH 175/192] Fix Tactical Placement GUI for increased teamsizes Requires new file OverheadInterface_scrollarea.sti in Gamedir/Data/Interface/ --- TileEngine/Tactical Placement GUI.cpp | 442 ++++++++++++++++++++++++-- 1 file changed, 415 insertions(+), 27 deletions(-) diff --git a/TileEngine/Tactical Placement GUI.cpp b/TileEngine/Tactical Placement GUI.cpp index 0735de88..3cacddd5 100644 --- a/TileEngine/Tactical Placement GUI.cpp +++ b/TileEngine/Tactical Placement GUI.cpp @@ -40,14 +40,20 @@ typedef struct MERCPLACEMENT { SOLDIERTYPE *pSoldier; - UINT32 uiVObjectID; - MOUSE_REGION region; - UINT8 ubStrategicInsertionCode; - BOOLEAN fPlaced; + UINT32 uiVObjectID; + MOUSE_REGION region; + UINT8 ubStrategicInsertionCode; + BOOLEAN fPlaced; }MERCPLACEMENT; MERCPLACEMENT *gMercPlacement = NULL; +UINT8 gfirstMercIndex = 0; // Index into gMercPlacement for the first visible merc face that is rendered +UINT16 gFacePanelXStart; // Defines the area for mouse wheel scrolling +UINT16 gFacePanelXEnd; +UINT16 gFacePanelYStart; +UINT16 gFacePanelYEnd; + enum { DONE_BUTTON, @@ -219,7 +225,314 @@ void CheckForValidMapEdge( UINT8 *pubStrategicInsertionCode ) } } -//#endif + +static UINT8 MaxRenderedFaces() +{ + // Based on OverheadInterface.sti files + if ( iResolution >= _640x480 && iResolution < _800x600 ) + { + return 20; + } + else if ( iResolution < _1024x768 ) + { + return 26; + } + else + { + return 34; + } +} + +static void InitializeMercScrollArea() +{ + // Based on OverheadInterface.sti files + gFacePanelXStart = 88 + xResOffset; + gFacePanelXEnd = SCREEN_WIDTH - xResOffset; + gFacePanelYStart = SCREEN_HEIGHT - 120; + gFacePanelYEnd = SCREEN_HEIGHT; +} + + +UINT32 gTacticalPlacementGUIPrevNextButtons[2]; +UINT32 gTacticalPlacementGUIPrevNextButtonImages[2]; +UINT32 gTacticalPlacementGUISliderBar; +MOUSE_REGION gTacticalPlacementGUISliderBarRegion; +UINT16 gScrollAreaXStart; +UINT16 gScrollAreaXEnd; +UINT16 gScrollAreaYStart; +UINT16 gScrollAreaYEnd; +UINT32 gScrollAreaGfx; + +static void IncreaseMercIndex() +{ + if ( gfirstMercIndex < (giPlacements - MaxRenderedFaces()) ) + { + if ( gfirstMercIndex + MaxRenderedFaces() >= giPlacements - 1 ) + { + gfirstMercIndex += 1; + } + else + { + gfirstMercIndex += 2; + } + gfTacticalPlacementGUIDirty = TRUE; + } +} + +static void DecreaseMercIndex() +{ + if ( gfirstMercIndex > 0 ) + { + if ( gfirstMercIndex == 1 ) + { + gfirstMercIndex -= 1; + } + else + { + gfirstMercIndex -= 2; + } + gfTacticalPlacementGUIDirty = TRUE; + } +} + +static void BtnTacticalPlacementNextCallback( GUI_BUTTON *btn, INT32 reason ) +{ + + if ( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN ) + { + gfTacticalPlacementGUIDirty = TRUE; + btn->uiFlags |= (BUTTON_CLICKED_ON); + } + else if ( reason & MSYS_CALLBACK_REASON_LBUTTON_UP ) + { + if ( btn->uiFlags & BUTTON_CLICKED_ON ) + { + btn->uiFlags &= ~(BUTTON_CLICKED_ON); + + IncreaseMercIndex(); + } + } +} + +static void BtnTacticalPlacementPrevCallback( GUI_BUTTON *btn, INT32 reason ) +{ + + if ( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN ) + { + gfTacticalPlacementGUIDirty = TRUE; + btn->uiFlags |= (BUTTON_CLICKED_ON); + } + else if ( reason & MSYS_CALLBACK_REASON_LBUTTON_UP ) + { + if ( btn->uiFlags & BUTTON_CLICKED_ON ) + { + btn->uiFlags &= ~(BUTTON_CLICKED_ON); + + DecreaseMercIndex(); + } + } +} + + +static void InitializeMercScrollButtons() +{ + UINT16 xPrev, xNext, y; + // Button locations based on OverheadInterface.sti files + xNext = SCREEN_WIDTH - 17 - xResOffset; + xPrev = 89 + xResOffset; + y = SCREEN_HEIGHT - 19; + + // time compression buttons + gTacticalPlacementGUIPrevNextButtonImages[0] = LoadButtonImage( "INTERFACE\\map_screen_bottom_arrows.sti", 10, 1, -1, 3, -1 ); + gTacticalPlacementGUIPrevNextButtonImages[1] = LoadButtonImage( "INTERFACE\\map_screen_bottom_arrows.sti", 9, 0, -1, 2, -1 ); + + + gTacticalPlacementGUIPrevNextButtons[0] = QuickCreateButton( gTacticalPlacementGUIPrevNextButtonImages[0], xNext, y, + BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 2, + (GUI_CALLBACK)BtnGenericMouseMoveButtonCallback, (GUI_CALLBACK)BtnTacticalPlacementNextCallback ); + + gTacticalPlacementGUIPrevNextButtons[1] = QuickCreateButton( gTacticalPlacementGUIPrevNextButtonImages[1], xPrev, y, + BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST - 2, + (GUI_CALLBACK)BtnGenericMouseMoveButtonCallback, (GUI_CALLBACK)BtnTacticalPlacementPrevCallback ); + + + SetButtonCursor( gTacticalPlacementGUIPrevNextButtons[0], MSYS_NO_CURSOR ); + SetButtonCursor( gTacticalPlacementGUIPrevNextButtons[1], MSYS_NO_CURSOR ); +} + +static void LoadSliderBar( void ) +{ + VOBJECT_DESC VObjectDesc; + + VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE; + sprintf( VObjectDesc.ImageFile, "INTERFACE\\map_screen_bottom_arrows.sti" ); + if ( !AddVideoObject( &VObjectDesc, &gTacticalPlacementGUISliderBar ) ) + { + AssertMsg( 0, "Failed to load Interface\\map_screen_bottom_arrows.sti" ); + } + + + sprintf( VObjectDesc.ImageFile, "INTERFACE\\OverheadInterface_scrollarea.sti" ); + if ( !AddVideoObject( &VObjectDesc, &gScrollAreaGfx ) ) + { + AssertMsg( 0, "Failed to load Interface\\OverheadInterface_scrollarea.sti" ); + } +} + + +static void TacticalPlacementScrollBarCallBack( MOUSE_REGION *pRegion, INT32 iReason ) +{ + POINT MousePos; + UINT16 desiredMercIndex; + const UINT8 sliderWidth = 11; + const UINT16 sliderBarRange = gScrollAreaXEnd - gScrollAreaXStart - sliderWidth; + + if ( iReason & MSYS_CALLBACK_REASON_INIT ) + { + return; + } + + + if ( iReason & (MSYS_CALLBACK_REASON_LBUTTON_DWN | MSYS_CALLBACK_REASON_LBUTTON_REPEAT) ) + { + // region is supposed to be disabled if there aren't enough messages to scroll. Formulas assume this + if ( giPlacements > MaxRenderedFaces() ) + { + // where is the mouse? + GetCursorPos( &MousePos ); + ScreenToClient( ghWindow, &MousePos ); // In window coords! + + const UINT16 ubMouseXOffset = (UINT16)MousePos.x - gScrollAreaXStart; + + // if clicking in the top 5 pixels of the slider bar + if ( ubMouseXOffset < (sliderWidth / 2) ) + { + // scroll all the way to the top + desiredMercIndex = 0; + } + // if clicking in the bottom 6 pixels of the slider bar + else if ( ubMouseXOffset >= ((gScrollAreaXEnd - gScrollAreaXStart) - (sliderWidth / 2)) ) + { + // scroll all the way to the bottom + desiredMercIndex = giPlacements - MaxRenderedFaces(); + } + else + { + // somewhere in between + const UINT16 desiredSliderOffset = ubMouseXOffset - (sliderWidth / 2); + + Assert( desiredSliderOffset <= sliderBarRange ); + + // calculate what the index should be to place the slider at this offset (round fractions of .5+ up) + desiredMercIndex = ((desiredSliderOffset * (giPlacements - MaxRenderedFaces())) + (sliderBarRange / 2)) / sliderBarRange; + } + + // if it's a change + if ( desiredMercIndex != gfirstMercIndex ) + { + gfirstMercIndex = desiredMercIndex; + gfTacticalPlacementGUIDirty = TRUE; + } + } + } +} + + +static void CreateTacticalPlacementGUIScrollBarRegion( void ) +{ + // Locations based on OverheadInterface.sti files + gScrollAreaXStart = 104 + xResOffset; + gScrollAreaXEnd = SCREEN_WIDTH - 18 - xResOffset; + gScrollAreaYStart = SCREEN_HEIGHT - 19; + gScrollAreaYEnd = gScrollAreaYStart + 11; //SLIDER_HEIGHT / SLIDER_WIDTH in Map Screen Interface Bottom.cpp; + + MSYS_DefineRegion( &gTacticalPlacementGUISliderBarRegion, + gScrollAreaXStart, + gScrollAreaYStart, + gScrollAreaXEnd, + gScrollAreaYEnd, + MSYS_PRIORITY_HIGHEST, MSYS_NO_CURSOR, MSYS_NO_CALLBACK, TacticalPlacementScrollBarCallBack + ); +} + + +static void DisplayTacticalPlacementSlider() +{ + // will display the scroll bar icon + HVOBJECT hHandle; + + // only show the slider if there are more messages than will fit on screen + if ( giPlacements > MaxRenderedFaces() ) + { + // Slider bar area graphics + UINT16 imageIndex; + if ( (iResolution >= _640x480 && iResolution < _800x600) ) + { + imageIndex = 0; + } + else if ( iResolution < _1024x768 ) + { + imageIndex = 1; + } + else + { + imageIndex = 2; + } + + GetVideoObject( &hHandle, gScrollAreaGfx ); + BltVideoObject( FRAME_BUFFER, hHandle, imageIndex, gScrollAreaXStart, gScrollAreaYStart, VO_BLT_SRCTRANSPARENCY, NULL ); + + + // calculate where slider should be positioned + UINT8 sliderWidth = 11; + UINT16 sliderBarRange = gScrollAreaXEnd - gScrollAreaXStart - sliderWidth; + UINT16 ubSliderOffset = (sliderBarRange * gfirstMercIndex) / (giPlacements - MaxRenderedFaces()); + + GetVideoObject( &hHandle, gTacticalPlacementGUISliderBar ); + BltVideoObject( FRAME_BUFFER, hHandle, 8, gScrollAreaXStart + ubSliderOffset, gScrollAreaYStart + 1 , VO_BLT_SRCTRANSPARENCY, NULL ); + } +} + + +static void EnableDisableTacticalPlacementScrollButtonsAndRegions( void ) +{ + // if no scrolling required, or already showing the first merc + if ( (giPlacements <= MaxRenderedFaces()) || (gfirstMercIndex == 0) ) + { + DisableButton( gTacticalPlacementGUIPrevNextButtons[1] ); + ButtonList[gTacticalPlacementGUIPrevNextButtons[1]]->uiFlags &= ~(BUTTON_CLICKED_ON); + } + else + { + EnableButton( gTacticalPlacementGUIPrevNextButtons[1] ); + ShowButton( gTacticalPlacementGUIPrevNextButtons[1] ); + } + + // if no scrolling required, or already showing the last merc + if ( giPlacements <= MaxRenderedFaces() || + ((gfirstMercIndex + MaxRenderedFaces()) >= giPlacements) ) + { + DisableButton( gTacticalPlacementGUIPrevNextButtons[0] ); + ButtonList[gTacticalPlacementGUIPrevNextButtons[0]]->uiFlags &= ~(BUTTON_CLICKED_ON); + } + else + { + EnableButton( gTacticalPlacementGUIPrevNextButtons[0] ); + ShowButton( gTacticalPlacementGUIPrevNextButtons[0] ); + } + + if ( giPlacements <= MaxRenderedFaces()) + { + MSYS_DisableRegion( &gTacticalPlacementGUISliderBarRegion ); + HideButton( gTacticalPlacementGUIPrevNextButtons[0] ); + HideButton( gTacticalPlacementGUIPrevNextButtons[1] ); + } + else + { + MSYS_EnableRegion( &gTacticalPlacementGUISliderBarRegion ); + } +} + extern BOOLEAN gfTacticalDoHeliRun; @@ -233,6 +546,7 @@ void InitTacticalPlacementGUI() gfTacticalPlacementGUIDirty = TRUE; gfValidLocationsChanged = TRUE; gfTacticalPlacementFirstTime = TRUE; + gfirstMercIndex = 0; // WANNE - MP: Center gfCenter = FALSE; @@ -247,6 +561,10 @@ void InitTacticalPlacementGUI() //Enter overhead map GoIntoOverheadMap(); + MSYS_DisableRegion( &gRadarRegion ); // So it doesn't interfere with selecting mercs + InitializeMercScrollArea(); + LoadSliderBar(); + //Load the images VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE; @@ -473,7 +791,7 @@ void InitTacticalPlacementGUI() } //yp = (i % 2) ? 412 : 361; - MSYS_DefineRegion( &gMercPlacement[ i ].region, (UINT16)xp, (UINT16)yp, (UINT16)(xp + 54), (UINT16)(yp + 62), MSYS_PRIORITY_HIGH, 0, MercMoveCallback, MercClickCallback ); + MSYS_DefineRegion( &gMercPlacement[ i ].region, (UINT16)xp, (UINT16)yp, (UINT16)(xp + 54), (UINT16)(yp + 51), MSYS_PRIORITY_HIGH, 0, MercMoveCallback, MercClickCallback ); } if(!is_client) @@ -497,6 +815,9 @@ void InitTacticalPlacementGUI() } } } + + InitializeMercScrollButtons(); + CreateTacticalPlacementGUIScrollBarRegion(); } // WANNE - MP: This method checks, if the desired entry direction (N, E, S, W) on the map is valid. If not it chooses the next valid diretion @@ -610,6 +931,15 @@ UINT8 GetValidInsertionDirectionForMP(UINT8 currentInsertionPoint) return validInsertionDirection; } + +static void DisableFaceMouseRegions() +{ + for ( size_t i = 0; i < giPlacements; i++ ) + { + MSYS_DisableRegion( &gMercPlacement[i].region ); + } +} + void RenderTacticalPlacementGUI() { INT32 i, xp, yp, width, height; @@ -620,26 +950,31 @@ void RenderTacticalPlacementGUI() CHAR16 str[ 128 ]; UINT8 *pDestBuf; UINT8 ubColor; + const UINT8 maxFaces = MaxRenderedFaces(); if( gfTacticalPlacementFirstTime ) { gfTacticalPlacementFirstTime = FALSE; DisableScrollMessages(); } + EnableDisableTacticalPlacementScrollButtonsAndRegions(); //Check to make sure that if we have a hilighted merc (not selected) and the mouse has moved out //of it's region, then we will clear the hilighted ID, and refresh the display. if( !gfTacticalPlacementGUIDirty && gbHilightedMercID != -1 ) { - xp = xResOffset + 91 + (gbHilightedMercID / 2) * 54; + // Shift the index so we render the faces at the right locations + UINT8 highlightedMercIndex = gbHilightedMercID - gfirstMercIndex; - if (gbHilightedMercID % 2) + xp = xResOffset + 91 + (highlightedMercIndex / 2) * 54; + + if ( highlightedMercIndex % 2) { - yp = SCREEN_HEIGHT - 68; + yp = SCREEN_HEIGHT - 71; } else { - yp = SCREEN_HEIGHT - 119; + yp = SCREEN_HEIGHT - 122; } //yp = (gbHilightedMercID % 2) ? 412 : 361; @@ -657,33 +992,46 @@ void RenderTacticalPlacementGUI() if( gfTacticalPlacementGUIDirty ) { BltVideoObjectFromIndex( FRAME_BUFFER, giOverheadPanelImage, 0, xResOffset, SCREEN_HEIGHT - 160, VO_BLT_SRCTRANSPARENCY, 0 ); - InvalidateRegion( 0 + xResOffset, SCREEN_HEIGHT - 160, 320 + xResOffset, SCREEN_HEIGHT ); + InvalidateRegion( 0 + xResOffset, SCREEN_HEIGHT - 160, SCREEN_WIDTH, SCREEN_HEIGHT ); gfTacticalPlacementGUIDirty = FALSE; MarkButtonsDirty(); //DisableHilightsAndHelpText(); //RenderButtons(); //EnableHilightsAndHelpText(); - for( i = 0; i < giPlacements; ++i ) + + DisableFaceMouseRegions(); + UINT8 end = min(giPlacements, gfirstMercIndex + maxFaces); + for( UINT8 j = gfirstMercIndex; j < end; ++j ) { //Render the mercs - pSoldier = gMercPlacement[ i ].pSoldier; - + pSoldier = gMercPlacement[ j ].pSoldier; + + // Shift the index so we render the faces at the right locations + i = j - gfirstMercIndex; + xp = xResOffset + 95 + (i / 2) * 54; if (i % 2) { - yp = SCREEN_HEIGHT - 58; + yp = SCREEN_HEIGHT - 61; } else { - yp = SCREEN_HEIGHT - 109; + yp = SCREEN_HEIGHT - 112; } + // Shift the mouse region as well + gMercPlacement[j].region.RegionTopLeftX = xp; + gMercPlacement[j].region.RegionTopLeftY = yp; + gMercPlacement[j].region.RegionBottomRightX = xp + 54; + gMercPlacement[j].region.RegionBottomRightY = yp + 51; + MSYS_EnableRegion( &gMercPlacement[j].region ); + //yp = (i % 2) ? 422 : 371; ColorFillVideoSurfaceArea( FRAME_BUFFER, xp+36, yp+2, xp+44, yp+30, 0 ); BltVideoObjectFromIndex( FRAME_BUFFER, giMercPanelImage, 0, xp, yp, VO_BLT_SRCTRANSPARENCY, NULL ); - BltVideoObjectFromIndex( FRAME_BUFFER, gMercPlacement[ i ].uiVObjectID, 0, xp+2, yp+2, VO_BLT_SRCTRANSPARENCY, NULL ); + BltVideoObjectFromIndex( FRAME_BUFFER, gMercPlacement[ j ].uiVObjectID, 0, xp+2, yp+2, VO_BLT_SRCTRANSPARENCY, NULL ); //HEALTH BAR if( !pSoldier->stats.bLife ) @@ -725,6 +1073,8 @@ void RenderTacticalPlacementGUI() //Shade out the part of the tactical map that isn't considered placable. BlitBufferToBuffer(FRAME_BUFFER, guiSAVEBUFFER, 0, SCREEN_HEIGHT - 160, SCREEN_WIDTH, 160); + + DisplayTacticalPlacementSlider(); } if( gfValidLocationsChanged ) @@ -1054,31 +1404,35 @@ void RenderTacticalPlacementGUI() UnLockVideoSurface( FRAME_BUFFER ); } - for( i = 0; i < giPlacements; ++i ) + UINT8 end = min( giPlacements, gfirstMercIndex + maxFaces ); + for ( UINT8 j = gfirstMercIndex; j < end; ++j ) { - //Render the merc's names - pSoldier = gMercPlacement[ i ].pSoldier; + //Render the mercs + pSoldier = gMercPlacement[j].pSoldier; + + // Shift the index so we render the faces at the right locations + i = j - gfirstMercIndex; xp = xResOffset + 95 + (i / 2) * 54; if (i % 2) { - yp = SCREEN_HEIGHT - 58; + yp = SCREEN_HEIGHT - 61; } else { - yp = SCREEN_HEIGHT - 109; + yp = SCREEN_HEIGHT - 112; } //yp = (i % 2) ? 422 : 371; //NAME - if( gubDefaultButton == GROUP_BUTTON && gMercPlacement[ i ].pSoldier->ubGroupID == gubSelectedGroupID || - gubDefaultButton != GROUP_BUTTON && i == gbSelectedMercID ) + if( gubDefaultButton == GROUP_BUTTON && gMercPlacement[ j ].pSoldier->ubGroupID == gubSelectedGroupID || + gubDefaultButton != GROUP_BUTTON && j == gbSelectedMercID ) { ubColor = FONT_YELLOW; } - else if( gubDefaultButton == GROUP_BUTTON && gMercPlacement[ i ].pSoldier->ubGroupID == gubHilightedGroupID || - gubDefaultButton != GROUP_BUTTON && i == gbHilightedMercID ) + else if( gubDefaultButton == GROUP_BUTTON && gMercPlacement[ j ].pSoldier->ubGroupID == gubHilightedGroupID || + gubDefaultButton != GROUP_BUTTON && j == gbHilightedMercID ) { ubColor = FONT_WHITE; } @@ -1091,7 +1445,7 @@ void RenderTacticalPlacementGUI() SetFontShadow( 141 ); //Render the question mark over the face if the merc hasn't yet been placed. - if( gMercPlacement[ i ].fPlaced ) + if( gMercPlacement[ j ].fPlaced ) { RegisterBackgroundRect( BGND_FLAG_SINGLE, NULL, (INT16)(xp + 16), (INT16)(yp + 14), (INT16)(xp + 24), (INT16)(yp + 22) ); } @@ -1166,6 +1520,29 @@ void lockui (bool unlock) //lock onluck ui for lan //hayden } } +static void HandleMouseWheelScroll( void ) +{ + // Scroll through pages with regular mouse wheel + SGPPoint MousePos; + GetMousePos( &MousePos ); + const auto x = MousePos.iX; + const auto y = MousePos.iY; + if ( (gFacePanelXStart < x && x < gFacePanelXEnd) && (gFacePanelYStart < y && y < gFacePanelYEnd) ) + { + const auto Wheelstate = _WheelValue * (gGameSettings.fOptions[TOPTION_INVERT_WHEEL] ? -1 : 1); + if ( Wheelstate < 0 ) + { + IncreaseMercIndex(); + } + else if ( Wheelstate > 0 ) + { + DecreaseMercIndex(); + } + _WheelValue = 0; + } +} + + void TacticalPlacementHandle() { InputAtom InputEvent; @@ -1331,6 +1708,7 @@ void TacticalPlacementHandle() } ScrollOverheadMap();//dnl ch45 021009 + HandleMouseWheelScroll(); } void KillTacticalPlacementGUI() @@ -1365,6 +1743,16 @@ void KillTacticalPlacementGUI() MSYS_RemoveRegion( &gMercPlacement[ i ].region ); } + for ( size_t i = 0; i < 2; i++ ) + { + UnloadButtonImage( gTacticalPlacementGUIPrevNextButtonImages[i] ); + RemoveButton( gTacticalPlacementGUIPrevNextButtons[i] ); + } + MSYS_RemoveRegion( &gTacticalPlacementGUISliderBarRegion ); + DeleteVideoObjectFromIndex( gTacticalPlacementGUISliderBar ); + DeleteVideoObjectFromIndex( gScrollAreaGfx ); + + if( gsCurInterfacePanel < 0 || gsCurInterfacePanel >= NUM_UI_PANELS ) gsCurInterfacePanel = TEAM_PANEL; From 20a33893d997bb0eff754237e7087631f61cd6fb Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 4 Dec 2024 20:49:53 +0200 Subject: [PATCH 176/192] Fix Teamlist for smaller resolutions Merc names were being printed past the end of teamlist area --- Strategic/mapscreen.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Strategic/mapscreen.cpp b/Strategic/mapscreen.cpp index d283a09a..15eda907 100644 --- a/Strategic/mapscreen.cpp +++ b/Strategic/mapscreen.cpp @@ -5351,7 +5351,7 @@ UINT32 MapScreenHandle(void) else maxNumberOfMercVisibleInStrategyList = 51; } - else if (iResolution < _1024x768) + else if ( iResolution >= _800x600 && iResolution < _1024x768) { maxNumberOfMercVisibleInStrategyList = 34; } From 07320ba99665f40c68aca94566adb2248eb0aa9d Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 9 Apr 2025 21:33:28 +0300 Subject: [PATCH 177/192] Limit TeamList mouseregions to correct amount --- Strategic/mapscreen.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Strategic/mapscreen.cpp b/Strategic/mapscreen.cpp index 15eda907..52e9deb0 100644 --- a/Strategic/mapscreen.cpp +++ b/Strategic/mapscreen.cpp @@ -10968,7 +10968,7 @@ void CreateMouseRegionsForTeamList( void ) // will create mouse regions for assignments, path plotting, character info selection // the info region...is the background for the list itself // OJW - MP - int max_rows = giMAXIMUM_NUMBER_OF_PLAYER_SLOTS; + int max_rows = maxNumberOfMercVisibleInStrategyList; if (is_networked) max_rows = 7; // check this value is correct / unhardcode it From ec4dc8b058fbd55583f06e53c90e72609d3146ba Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 9 Apr 2025 23:10:32 +0300 Subject: [PATCH 178/192] Provide gMapViewRegion through mapscreen.h --- Strategic/Map Screen Interface Map Inventory.cpp | 2 -- Strategic/mapscreen.h | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Strategic/Map Screen Interface Map Inventory.cpp b/Strategic/Map Screen Interface Map Inventory.cpp index cdfe41bd..ee7caaf2 100644 --- a/Strategic/Map Screen Interface Map Inventory.cpp +++ b/Strategic/Map Screen Interface Map Inventory.cpp @@ -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++ ) { diff --git a/Strategic/mapscreen.h b/Strategic/mapscreen.h index ac0b53e5..efbad087 100644 --- a/Strategic/mapscreen.h +++ b/Strategic/mapscreen.h @@ -123,6 +123,8 @@ struct UILayout_CharList int widthTimeRemaining; }; +extern MOUSE_REGION gMapViewRegion; + extern BOOLEAN fCharacterInfoPanelDirty; extern BOOLEAN fTeamPanelDirty; extern BOOLEAN fMapPanelDirty; From da3c3bace8bb15237449a20ef6817ecf09e21c84 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Wed, 9 Apr 2025 23:11:11 +0300 Subject: [PATCH 179/192] Use mouse position for squad movement popup box initial location --- Strategic/Map Screen Interface.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Strategic/Map Screen Interface.cpp b/Strategic/Map Screen Interface.cpp index 42c65f78..2c4b1051 100644 --- a/Strategic/Map Screen Interface.cpp +++ b/Strategic/Map Screen Interface.cpp @@ -3683,7 +3683,7 @@ void SetUpMovingListsForSector( INT16 sSectorX, INT16 sSectorY, INT16 sSectorZ ) void CreatePopUpBoxForMovementBox( void ) { - SGPPoint MovePosition = { UI_MAP.ViewRegion.x + UI_MAP.ViewRegion.width / 2, UI_MAP.ViewRegion.y + 100 }; + SGPPoint MovePosition = { gMapViewRegion.MouseXPos, gMapViewRegion.MouseYPos }; SGPPoint Position; SGPRect Dimensions; @@ -4186,7 +4186,7 @@ void MoveMenuMvtCallback(MOUSE_REGION * pRegion, INT32 iReason ) if (iReason & MSYS_CALLBACK_REASON_GAIN_MOUSE ) { // highlight string - HighLightBoxLine( ghMoveBox, iValue ); + HighLightBoxLine( ghMoveBox, iValue ); } else if (iReason & MSYS_CALLBACK_REASON_LOST_MOUSE ) { From 865288e6227d6c792637d172d949f627cdf3b5c9 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 13 Apr 2025 18:00:01 +0300 Subject: [PATCH 180/192] Implement multicolumn popupbox Mainly aimed for strategic movement popup box to accommodate increased team sizes --- Strategic/Map Screen Interface.cpp | 511 ++++++++++-- Utils/PopUpBox.cpp | 1220 ++++++++++++++++++---------- Utils/PopUpBox.h | 24 +- 3 files changed, 1246 insertions(+), 509 deletions(-) diff --git a/Strategic/Map Screen Interface.cpp b/Strategic/Map Screen Interface.cpp index 2c4b1051..ecca6342 100644 --- a/Strategic/Map Screen Interface.cpp +++ b/Strategic/Map Screen Interface.cpp @@ -1,4 +1,4 @@ - #include "Map Screen Interface.h" +#include "Map Screen Interface.h" #include "string.h" #include "Map Screen Interface Map.h" #include "Render Dirty.h" @@ -127,7 +127,7 @@ INT32 iUpdateBoxWaitingList[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ]; FASTHELPREGION pFastHelpMapScreenList[ MAX_MAPSCREEN_FAST_HELP ]; // the move menu region -MOUSE_REGION gMoveMenuRegion[ MAX_POPUP_BOX_STRING_COUNT ]; +MOUSE_REGION gMoveMenuRegion[ MAX_POPUP_BOX_COLUMNS*MAX_POPUP_BOX_STRING_COUNT ]; MOUSE_REGION gMapScreenHelpTextMask; @@ -3685,79 +3685,79 @@ void CreatePopUpBoxForMovementBox( void ) { SGPPoint MovePosition = { gMapViewRegion.MouseXPos, gMapViewRegion.MouseYPos }; SGPPoint Position; - SGPRect Dimensions; + SGPRect Dimensions = { 0,0, 100, 95 }; // create the pop up box and mouse regions for movement list // create basic box - CreatePopUpBox(&ghMoveBox, AssignmentDimensions, MovePosition, ( POPUP_BOX_FLAG_CLIP_TEXT|POPUP_BOX_FLAG_RESIZE )); + CreatePopUpBox( &ghMoveBox, Dimensions, MovePosition, (POPUP_BOX_FLAG_CLIP_TEXT | POPUP_BOX_FLAG_RESIZE) ); - // which buffer will box render to - SetBoxBuffer(ghMoveBox, FRAME_BUFFER); + // which buffer will box render to + SetBoxBuffer( ghMoveBox, FRAME_BUFFER ); - // border type? - SetBorderType(ghMoveBox,guiPOPUPBORDERS); + // border type? + SetBorderType( ghMoveBox, guiPOPUPBORDERS ); - // background texture - SetBackGroundSurface(ghMoveBox, guiPOPUPTEX); + // background texture + SetBackGroundSurface( ghMoveBox, guiPOPUPTEX ); - // margin sizes - SetMargins( ghMoveBox, 6, 6, 4, 4 ); + // margin sizes + SetMargins( ghMoveBox, 6, 6, 4, 4 ); - // space between lines - SetLineSpace(ghMoveBox, 2); + // space between lines + SetLineSpace( ghMoveBox, 2 ); - // set current box to this one - SetCurrentBox( ghMoveBox ); + // set current box to this one + SetCurrentBox( ghMoveBox ); - // add strings - AddStringsToMoveBox( ); + // add strings + AddStringsToMoveBox(); + // set font type + SetBoxFont( ghMoveBox, MAP_SCREEN_FONT ); - // set font type - SetBoxFont(ghMoveBox, MAP_SCREEN_FONT); + // set highlight color + SetBoxHighLight( ghMoveBox, FONT_WHITE ); - // set highlight color - SetBoxHighLight(ghMoveBox, FONT_WHITE); + // unhighlighted color + SetBoxForeground( ghMoveBox, FONT_LTGREEN ); - // unhighlighted color - SetBoxForeground(ghMoveBox, FONT_LTGREEN); + // make the header line WHITE + SetBoxLineForeground( ghMoveBox, 0, FONT_WHITE ); - // make the header line WHITE - SetBoxLineForeground( ghMoveBox, 0, FONT_WHITE ); - - // make the done and cancel lines YELLOW - SetBoxLineForeground( ghMoveBox, GetNumberOfLinesOfTextInBox( ghMoveBox ) - 1, FONT_YELLOW ); + // make the done and cancel lines YELLOW + SetBoxLineForeground( ghMoveBox, GetNumberOfLinesOfTextInBox( ghMoveBox ) - 1, FONT_YELLOW ); if ( IsAnythingSelectedForMoving() ) { SetBoxLineForeground( ghMoveBox, GetNumberOfLinesOfTextInBox( ghMoveBox ) - 2, FONT_YELLOW ); } - // background color - SetBoxBackground(ghMoveBox, FONT_BLACK); + // background color + SetBoxBackground( ghMoveBox, FONT_BLACK ); - // shaded color..for darkened text - SetBoxShade( ghMoveBox, FONT_BLACK ); + // shaded color..for darkened text + SetBoxShade( ghMoveBox, FONT_BLACK ); - SetBoxSecondColumnForeground(ghMoveBox, FONT_LTGREEN); - SetBoxSecondColumnBackground(ghMoveBox, FONT_BLACK); - SetBoxSecondColumnHighLight(ghMoveBox, FONT_WHITE); - SetBoxSecondColumnShade(ghMoveBox, FONT_BLACK); - SetBoxSecondColumnFont(ghMoveBox, MAP_SCREEN_FONT); - SetBoxSecondColumnMinimumOffset(ghMoveBox, 1); - SetBoxSecondColumnOffsetAdjustment(ghMoveBox, -50); + for ( size_t i = 1; i < MAX_POPUP_BOX_COLUMNS; i++ ) + { + SetBoxColumnForeground( ghMoveBox, FONT_LTGREEN, i ); + SetBoxColumnBackground( ghMoveBox, FONT_BLACK, i ); + SetBoxColumnHighLight( ghMoveBox, FONT_WHITE, i ); + SetBoxColumnShade( ghMoveBox, FONT_BLACK, i ); + SetBoxColumnFont( ghMoveBox, MAP_SCREEN_FONT, i ); + } - // resize box to text - ResizeBoxToText( ghMoveBox ); + ResizeBoxToText( ghMoveBox ); - GetBoxPosition( ghMoveBox, &Position); + GetBoxPosition( ghMoveBox, &Position ); GetBoxSize( ghMoveBox, &Dimensions ); + // adjust position to try to keep it in the map area as best as possible if ( Position.iX + Dimensions.iRight >= (UI_MAP.ViewRegion.x + UI_MAP.ViewRegion.width) ) { - Position.iX = max(UI_MAP.ViewRegion.x, (UI_MAP.ViewRegion.x + UI_MAP.ViewRegion.width) - Dimensions.iRight ); + Position.iX = max( UI_MAP.ViewRegion.x, (UI_MAP.ViewRegion.x + UI_MAP.ViewRegion.width) - Dimensions.iRight ); SetBoxPosition( ghMoveBox, Position ); } @@ -3769,6 +3769,7 @@ void CreatePopUpBoxForMovementBox( void ) } +UINT32 gColumnEntries[MAX_POPUP_BOX_COLUMNS]; void AddStringsToMoveBox( void ) { @@ -3776,9 +3777,15 @@ void AddStringsToMoveBox( void ) CHAR16 sString[ 128 ], sStringB[ 128 ]; UINT32 hStringHandle; BOOLEAN fFirstOne = TRUE; - const INT32 firstColumnMaxEntries = 4 * gGameOptions.ubSquadSize; + const INT32 columnMaxEntries = 5 * gGameOptions.ubSquadSize; INT32 entries = 0; bool isFirstColumnFull = false; + bool secondColumnFull = false; + bool thirdColumnFull = false; + for ( size_t i = 0; i < MAX_POPUP_BOX_COLUMNS; i++ ) + { + gColumnEntries[i] = 0; + } // set the current box SetCurrentBox( ghMoveBox ); @@ -3786,24 +3793,31 @@ void AddStringsToMoveBox( void ) // clear all the strings out of the box RemoveAllCurrentBoxStrings(); - // add title GetShortSectorString( sSelMapX, sSelMapY, sStringB ); swprintf( sString, L"%s %s", pMovementMenuStrings[ 0 ], sStringB ); - AddMonoString(&hStringHandle, sString ); - AddSecondColumnMonoString(&hStringHandle, L""); - + AddStringToBoxColumn(&hStringHandle, sString, 0 ); + // Add empty lines to other columns + for ( size_t i = 1; i < MAX_POPUP_BOX_COLUMNS; i++ ) + { + AddStringToBoxColumn( &hStringHandle, L"", i); + } // blank line - AddMonoString(&hStringHandle, L"" ); - AddSecondColumnMonoString(&hStringHandle, L""); + for ( size_t i = 0; i < MAX_POPUP_BOX_COLUMNS; i++ ) + { + AddStringToBoxColumn( &hStringHandle, L"", i ); + } // add Select all line if (giNumberOfSquadsInSectorMoving > 1) { swprintf(sString, L"%s", pMovementMenuStrings[4]); - AddMonoString(&hStringHandle, sString); - AddSecondColumnMonoString(&hStringHandle, L""); + AddStringToBoxColumn( &hStringHandle, sString, 0 ); + for ( size_t i = 1; i < MAX_POPUP_BOX_COLUMNS; i++ ) + { + AddStringToBoxColumn( &hStringHandle, L"", i ); + } } @@ -3825,13 +3839,25 @@ void AddStringsToMoveBox( void ) else swprintf( sString, L"%s", pSquadMenuStrings[iSquadMovingList[ iCount ] ] ); } + // Determine which column to add if (!isFirstColumnFull) { - AddMonoString(&hStringHandle, sString); + AddStringToBoxColumn( &hStringHandle, sString, 0 ); + } + else if ( !secondColumnFull ) + { + AddStringToBoxColumn( &hStringHandle, sString, 1 ); + gColumnEntries[1] += 1; + } + else if ( !thirdColumnFull ) + { + AddStringToBoxColumn( &hStringHandle, sString, 2 ); + gColumnEntries[2] += 1; } else { - AddMonoStringToSecondColumn(&hStringHandle, sString ); + AddStringToBoxColumn( &hStringHandle, sString, 3 ); + gColumnEntries[3] += 1; } entries += 1; @@ -3850,21 +3876,41 @@ void AddStringsToMoveBox( void ) swprintf( sString, L" %s", pSoldierMovingList[ iCountB ]->name ); } - if (!isFirstColumnFull) + if ( !isFirstColumnFull ) { - AddMonoString(&hStringHandle, sString); + AddStringToBoxColumn( &hStringHandle, sString, 0 ); + } + else if ( !secondColumnFull ) + { + AddStringToBoxColumn( &hStringHandle, sString, 1 ); + gColumnEntries[1] += 1; + } + else if ( !thirdColumnFull ) + { + AddStringToBoxColumn( &hStringHandle, sString, 2 ); + gColumnEntries[2] += 1; } else { - AddMonoStringToSecondColumn(&hStringHandle, sString); + AddStringToBoxColumn( &hStringHandle, sString, 3 ); + gColumnEntries[3] += 1; } entries += 1; } } - if (entries > firstColumnMaxEntries) + if (entries > columnMaxEntries && !isFirstColumnFull) { isFirstColumnFull = true; + gColumnEntries[0] = entries; + } + else if ( entries - gColumnEntries[0] > columnMaxEntries && !secondColumnFull ) + { + secondColumnFull = true; + } + else if ( entries - gColumnEntries[0] - gColumnEntries[1] > columnMaxEntries && !thirdColumnFull ) + { + thirdColumnFull = true; } } @@ -3875,15 +3921,33 @@ void AddStringsToMoveBox( void ) // add this vehicle if( fVehicleIsMoving[ iCount ] ) { - // swprintf( sString, L"*%s*", pVehicleStrings[ pVehicleList[ iVehicleMovingList[ iCount ] ].ubVehicleType ] ); swprintf( sString, L"*%s*", gNewVehicle[ pVehicleList[ iVehicleMovingList[ iCount ] ].ubVehicleType ].NewVehicleStrings ); } else { - // swprintf( sString, L"%s", pVehicleStrings[ pVehicleList[ iVehicleMovingList[ iCount ] ].ubVehicleType ] ); swprintf( sString, L"%s", gNewVehicle[ pVehicleList[ iVehicleMovingList[ iCount ] ].ubVehicleType ].NewVehicleStrings); } - AddMonoString(&hStringHandle, sString ); + + if ( !isFirstColumnFull ) + { + AddStringToBoxColumn( &hStringHandle, sString, 0 ); + } + else if ( !secondColumnFull ) + { + AddStringToBoxColumn( &hStringHandle, sString, 1 ); + gColumnEntries[1] += 1; + } + else if ( !thirdColumnFull ) + { + AddStringToBoxColumn( &hStringHandle, sString, 2 ); + gColumnEntries[2] += 1; + } + else + { + AddStringToBoxColumn( &hStringHandle, sString, 3 ); + gColumnEntries[3] += 1; + } + entries += 1; // now add all the grunts in it for( iCountB = 0; iCountB < giNumberOfSoldiersInSectorMoving; iCountB++ ) @@ -3899,9 +3963,44 @@ void AddStringsToMoveBox( void ) { swprintf( sString, L" %s", pSoldierMovingList[ iCountB ]->name ); } - AddMonoString(&hStringHandle, sString ); + + if ( !isFirstColumnFull ) + { + AddStringToBoxColumn( &hStringHandle, sString, 0 ); + } + else if ( !secondColumnFull ) + { + AddStringToBoxColumn( &hStringHandle, sString, 1 ); + gColumnEntries[1] += 1; + } + else if ( !thirdColumnFull ) + { + AddStringToBoxColumn( &hStringHandle, sString, 2 ); + gColumnEntries[2] += 1; + } + else + { + AddStringToBoxColumn( &hStringHandle, sString, 3 ); + gColumnEntries[3] += 1; + } + entries += 1; } } + + + if ( entries > columnMaxEntries && !isFirstColumnFull ) + { + isFirstColumnFull = true; + gColumnEntries[0] = entries; + } + else if ( entries - gColumnEntries[0] > columnMaxEntries && !secondColumnFull ) + { + secondColumnFull = true; + } + else if ( entries - gColumnEntries[0] - gColumnEntries[1] > columnMaxEntries && !thirdColumnFull ) + { + thirdColumnFull = true; + } } @@ -3999,7 +4098,6 @@ void BuildMouseRegionsForMoveBox( void ) SetCurrentBox( ghMoveBox ); - // box heading MSYS_DefineRegion( &gMoveMenuRegion[ iCounter ], ( INT16 )( iBoxXPosition ), ( INT16 )( iBoxYPosition + iFontHeight * iCounter ), ( INT16 )( iBoxXPosition + iBoxWidth ), ( INT16 )( iBoxYPosition + iFontHeight * ( iCounter + 1 ) ), MSYS_PRIORITY_HIGHEST, MSYS_NO_CURSOR, MSYS_NO_CALLBACK, MSYS_NO_CALLBACK ); @@ -4024,67 +4122,303 @@ void BuildMouseRegionsForMoveBox( void ) // calc total number of "moving" lines in the box iTotalNumberOfLines = giNumberOfSoldiersInSectorMoving + giNumberOfSquadsInSectorMoving + giNumberOfVehiclesInSectorMoving; - // add the blank lines + // add the blank line iTotalNumberOfLines += iCounter; // now add the strings + const UINT32 firstColumnWidth = GetBoxSecondColumnCurrentOffset( ghMoveBox ); + bool firstColumnFull = false; + bool secondColumnFull = false; + bool thirdColumnFull = false; + INT32 entries = 0; + // Take into account any possible entries in the columnns after 1st for entries that come after squads + const UINT32 rowOffset = gColumnEntries[1] + gColumnEntries[2] + gColumnEntries[3]; + while( iCounter < iTotalNumberOfLines ) { // define regions for squad lines for( iCount = 0; iCount < giNumberOfSquadsInSectorMoving; iCount++ ) { - MSYS_DefineRegion( &gMoveMenuRegion[ iCounter ], ( INT16 )( iBoxXPosition ), ( INT16 )( iBoxYPosition + iFontHeight * iCounter ), ( INT16 )( iBoxXPosition + iBoxWidth ), ( INT16 )( iBoxYPosition + iFontHeight * ( iCounter + 1 ) ), MSYS_PRIORITY_HIGHEST, - MSYS_NO_CURSOR, MoveMenuMvtCallback, MoveMenuBtnCallback ); + // First column coordinates + UINT16 tlx = iBoxXPosition; + UINT16 tly = iBoxYPosition + iFontHeight * iCounter; + UINT16 brx = iBoxXPosition + firstColumnWidth; + UINT16 bry = iBoxYPosition + iFontHeight * (iCounter + 1); + + if ( thirdColumnFull ) + { + tlx = iBoxXPosition + 3 * firstColumnWidth; + brx = tlx + firstColumnWidth; + tly = iBoxYPosition + iFontHeight * (iCounter - (gColumnEntries[0] + gColumnEntries[1] + gColumnEntries[2])); + bry = iBoxYPosition + iFontHeight * (iCounter + 1 - (gColumnEntries[0] + gColumnEntries[1] + gColumnEntries[2])); + } + else if ( secondColumnFull ) + { + tlx = iBoxXPosition + 2*firstColumnWidth; + brx = tlx + firstColumnWidth; + tly = iBoxYPosition + iFontHeight * (iCounter - (gColumnEntries[0] + gColumnEntries[1])); + bry = iBoxYPosition + iFontHeight * (iCounter + 1 - (gColumnEntries[0] + gColumnEntries[1])); + } + else if ( firstColumnFull ) + { + tlx = iBoxXPosition + firstColumnWidth; + brx = tlx + firstColumnWidth; + tly = iBoxYPosition + iFontHeight * (iCounter - gColumnEntries[0]); + bry = iBoxYPosition + iFontHeight * (iCounter + 1 - gColumnEntries[0]); + } + + MSYS_DefineRegion( &gMoveMenuRegion[iCounter], tlx, tly, brx, bry, MSYS_PRIORITY_HIGHEST, + MSYS_NO_CURSOR, MoveMenuMvtCallback, MoveMenuBtnCallback ); // set user defines - MSYS_SetRegionUserData( &gMoveMenuRegion[ iCounter ], 0, iCounter ); + if ( thirdColumnFull ) + { + MSYS_SetRegionUserData( &gMoveMenuRegion[iCounter], 0, iCounter - gColumnEntries[0] - gColumnEntries[1] - gColumnEntries[2] ); + MSYS_SetRegionUserData( &gMoveMenuRegion[iCounter], 3, 3 ); // Column index + } + else if ( secondColumnFull ) + { + MSYS_SetRegionUserData( &gMoveMenuRegion[iCounter], 0, iCounter - gColumnEntries[0] - gColumnEntries[1]); + MSYS_SetRegionUserData( &gMoveMenuRegion[iCounter], 3, 2 ); + } + else if ( firstColumnFull ) + { + MSYS_SetRegionUserData( &gMoveMenuRegion[iCounter], 0, iCounter - gColumnEntries[0] ); + MSYS_SetRegionUserData( &gMoveMenuRegion[iCounter], 3, 1 ); + } + else + { + MSYS_SetRegionUserData( &gMoveMenuRegion[iCounter], 0, iCounter ); + MSYS_SetRegionUserData( &gMoveMenuRegion[iCounter], 3, 0 ); + } + MSYS_SetRegionUserData( &gMoveMenuRegion[ iCounter ], 1, SQUAD_REGION ); MSYS_SetRegionUserData( &gMoveMenuRegion[ iCounter ], 2, iCount ); - iCounter++; + + iCounter++; + entries += 1; + + // Squad soldiers for( iCountB = 0; iCountB < giNumberOfSoldiersInSectorMoving; iCountB++ ) { if( pSoldierMovingList[ iCountB ]->bAssignment == iSquadMovingList[ iCount ] ) { - MSYS_DefineRegion( &gMoveMenuRegion[ iCounter ], ( INT16 )( iBoxXPosition ), ( INT16 )( iBoxYPosition + iFontHeight * iCounter ), ( INT16 )( iBoxXPosition + iBoxWidth ), ( INT16 )( iBoxYPosition + iFontHeight * ( iCounter + 1 ) ), MSYS_PRIORITY_HIGHEST, - MSYS_NO_CURSOR, MoveMenuMvtCallback, MoveMenuBtnCallback ); + tlx = iBoxXPosition; + tly = iBoxYPosition + iFontHeight * iCounter; + brx = iBoxXPosition + firstColumnWidth; + bry = iBoxYPosition + iFontHeight * (iCounter + 1); + + if ( thirdColumnFull ) + { + tlx = iBoxXPosition + 3 * firstColumnWidth; + brx = tlx + firstColumnWidth; + tly = iBoxYPosition + iFontHeight * (iCounter - (gColumnEntries[0] + gColumnEntries[1] + gColumnEntries[2])); + bry = iBoxYPosition + iFontHeight * (iCounter + 1 - (gColumnEntries[0] + gColumnEntries[1] + gColumnEntries[2])); + } + else if ( secondColumnFull ) + { + tlx = iBoxXPosition + 2 * firstColumnWidth; + brx = tlx + firstColumnWidth; + tly = iBoxYPosition + iFontHeight * (iCounter - (gColumnEntries[0] + gColumnEntries[1])); + bry = iBoxYPosition + iFontHeight * (iCounter + 1 - (gColumnEntries[0] + gColumnEntries[1])); + } + else if ( firstColumnFull ) + { + tlx = iBoxXPosition + firstColumnWidth; + brx = tlx + firstColumnWidth; + tly = iBoxYPosition + iFontHeight * (iCounter - gColumnEntries[0]); + bry = iBoxYPosition + iFontHeight * (iCounter + 1 - gColumnEntries[0]); + } + + + MSYS_DefineRegion( &gMoveMenuRegion[iCounter], tlx, tly, brx, bry, MSYS_PRIORITY_HIGHEST, + MSYS_NO_CURSOR, MoveMenuMvtCallback, MoveMenuBtnCallback ); // set user defines - MSYS_SetRegionUserData( &gMoveMenuRegion[ iCounter ], 0, iCounter ); + if ( thirdColumnFull ) + { + MSYS_SetRegionUserData( &gMoveMenuRegion[iCounter], 0, iCounter - gColumnEntries[0] - gColumnEntries[1] - gColumnEntries[2] ); + MSYS_SetRegionUserData( &gMoveMenuRegion[iCounter], 3, 3 ); + } + else if ( secondColumnFull ) + { + MSYS_SetRegionUserData( &gMoveMenuRegion[iCounter], 0, iCounter - gColumnEntries[0] - gColumnEntries[1] ); + MSYS_SetRegionUserData( &gMoveMenuRegion[iCounter], 3, 2 ); + } + else if ( firstColumnFull ) + { + MSYS_SetRegionUserData( &gMoveMenuRegion[iCounter], 0, iCounter - gColumnEntries[0] ); + MSYS_SetRegionUserData( &gMoveMenuRegion[iCounter], 3, 1 ); + } + else + { + MSYS_SetRegionUserData( &gMoveMenuRegion[iCounter], 0, iCounter ); + MSYS_SetRegionUserData( &gMoveMenuRegion[iCounter], 3, 0 ); + } MSYS_SetRegionUserData( &gMoveMenuRegion[ iCounter ], 1, SOLDIER_REGION ); MSYS_SetRegionUserData( &gMoveMenuRegion[ iCounter ], 2, iCountB ); + + iCounter++; + entries += 1; } } + + if ( entries >= gColumnEntries[0] + gColumnEntries[1] + gColumnEntries[2] && gColumnEntries[2] > 0 ) + { + thirdColumnFull = true; + } + else if ( entries >= gColumnEntries[0] + gColumnEntries[1] && gColumnEntries[1] > 0 ) + { + secondColumnFull = true; + } + else if ( entries >= gColumnEntries[0] && gColumnEntries[0] > 0 ) + { + firstColumnFull = true; + } } + + // Vehicles for( iCount = 0; iCount < giNumberOfVehiclesInSectorMoving; iCount++ ) { // define regions for vehicle lines - MSYS_DefineRegion( &gMoveMenuRegion[ iCounter ], ( INT16 )( iBoxXPosition ), ( INT16 )( iBoxYPosition + iFontHeight * iCounter ), ( INT16 )( iBoxXPosition + iBoxWidth ), ( INT16 )( iBoxYPosition + iFontHeight * ( iCounter + 1 ) ), MSYS_PRIORITY_HIGHEST, - MSYS_NO_CURSOR, MoveMenuMvtCallback, MoveMenuBtnCallback ); + UINT16 tlx = iBoxXPosition; + UINT16 tly = iBoxYPosition + iFontHeight * (iCounter); + UINT16 brx = iBoxXPosition + iBoxWidth; + UINT16 bry = iBoxYPosition + iFontHeight * (iCounter + 1); + + if ( thirdColumnFull ) + { + tlx = iBoxXPosition + 3 * firstColumnWidth; + brx = tlx + firstColumnWidth; + tly = iBoxYPosition + iFontHeight * (iCounter - (gColumnEntries[0] + gColumnEntries[1] + gColumnEntries[2])); + bry = iBoxYPosition + iFontHeight * (iCounter + 1 - (gColumnEntries[0] + gColumnEntries[1] + gColumnEntries[2])); + } + else if ( secondColumnFull ) + { + tlx = iBoxXPosition + 2 * firstColumnWidth; + brx = tlx + firstColumnWidth; + tly = iBoxYPosition + iFontHeight * (iCounter - (gColumnEntries[0] + gColumnEntries[1])); + bry = iBoxYPosition + iFontHeight * (iCounter + 1 - (gColumnEntries[0] + gColumnEntries[1])); + } + else if ( firstColumnFull ) + { + tlx = iBoxXPosition + firstColumnWidth; + brx = tlx + firstColumnWidth; + tly = iBoxYPosition + iFontHeight * (iCounter - gColumnEntries[0]); + bry = iBoxYPosition + iFontHeight * (iCounter + 1 - gColumnEntries[0]); + } + + MSYS_DefineRegion( &gMoveMenuRegion[iCounter], tlx, tly, brx, bry, MSYS_PRIORITY_HIGHEST, + MSYS_NO_CURSOR, MoveMenuMvtCallback, MoveMenuBtnCallback ); // set user defines - MSYS_SetRegionUserData( &gMoveMenuRegion[ iCounter ], 0, iCounter ); + if ( thirdColumnFull ) + { + MSYS_SetRegionUserData( &gMoveMenuRegion[iCounter], 0, iCounter - gColumnEntries[0] - gColumnEntries[1] - gColumnEntries[2] ); + MSYS_SetRegionUserData( &gMoveMenuRegion[iCounter], 3, 3 ); + } + else if ( secondColumnFull ) + { + MSYS_SetRegionUserData( &gMoveMenuRegion[iCounter], 0, iCounter - gColumnEntries[0] - gColumnEntries[1] ); + MSYS_SetRegionUserData( &gMoveMenuRegion[iCounter], 3, 2 ); + } + else if ( firstColumnFull ) + { + MSYS_SetRegionUserData( &gMoveMenuRegion[iCounter], 0, iCounter - gColumnEntries[0] ); + MSYS_SetRegionUserData( &gMoveMenuRegion[iCounter], 3, 1 ); + } + else + { + MSYS_SetRegionUserData( &gMoveMenuRegion[iCounter], 0, iCounter ); + MSYS_SetRegionUserData( &gMoveMenuRegion[iCounter], 3, 0 ); + } + MSYS_SetRegionUserData( &gMoveMenuRegion[ iCounter ], 1, VEHICLE_REGION ); MSYS_SetRegionUserData( &gMoveMenuRegion[ iCounter ], 2, iCount ); iCounter++; + entries += 1; + // Soldiers inside a vehicle for( iCountB = 0; iCountB < giNumberOfSoldiersInSectorMoving; iCountB++ ) { if( ( pSoldierMovingList[ iCountB ]->bAssignment == VEHICLE ) &&( pSoldierMovingList[ iCountB ]->iVehicleId == iVehicleMovingList[ iCount ] ) ) { - MSYS_DefineRegion( &gMoveMenuRegion[ iCounter ], ( INT16 )( iBoxXPosition ), ( INT16 )( iBoxYPosition + iFontHeight * iCounter ), ( INT16 )( iBoxXPosition + iBoxWidth ), ( INT16 )( iBoxYPosition + iFontHeight * ( iCounter + 1 ) ), MSYS_PRIORITY_HIGHEST, - MSYS_NO_CURSOR, MoveMenuMvtCallback, MoveMenuBtnCallback ); + tlx = iBoxXPosition; + tly = iBoxYPosition + iFontHeight * iCounter; + brx = iBoxXPosition + firstColumnWidth; + bry = iBoxYPosition + iFontHeight * (iCounter + 1); + + if ( thirdColumnFull ) + { + tlx = iBoxXPosition + 3 * firstColumnWidth; + brx = tlx + firstColumnWidth; + tly = iBoxYPosition + iFontHeight * (iCounter - (gColumnEntries[0] + gColumnEntries[1] + gColumnEntries[2])); + bry = iBoxYPosition + iFontHeight * (iCounter + 1 - (gColumnEntries[0] + gColumnEntries[1] + gColumnEntries[2])); + } + else if ( secondColumnFull ) + { + tlx = iBoxXPosition + 2 * firstColumnWidth; + brx = tlx + firstColumnWidth; + tly = iBoxYPosition + iFontHeight * (iCounter - (gColumnEntries[0] + gColumnEntries[1])); + bry = iBoxYPosition + iFontHeight * (iCounter + 1 - (gColumnEntries[0] + gColumnEntries[1])); + } + else if ( firstColumnFull ) + { + tlx = iBoxXPosition + firstColumnWidth; + brx = tlx + firstColumnWidth; + tly = iBoxYPosition + iFontHeight * (iCounter - gColumnEntries[0]); + bry = iBoxYPosition + iFontHeight * (iCounter + 1 - gColumnEntries[0]); + } + + + MSYS_DefineRegion( &gMoveMenuRegion[iCounter], tlx, tly, brx, bry, MSYS_PRIORITY_HIGHEST, + MSYS_NO_CURSOR, MoveMenuMvtCallback, MoveMenuBtnCallback ); // set user defines - MSYS_SetRegionUserData( &gMoveMenuRegion[ iCounter ], 0, iCounter ); + if ( thirdColumnFull ) + { + MSYS_SetRegionUserData( &gMoveMenuRegion[iCounter], 0, iCounter - gColumnEntries[0] - gColumnEntries[1] - gColumnEntries[2] ); + MSYS_SetRegionUserData( &gMoveMenuRegion[iCounter], 3, 3 ); + } + else if ( secondColumnFull ) + { + MSYS_SetRegionUserData( &gMoveMenuRegion[iCounter], 0, iCounter - gColumnEntries[0] - gColumnEntries[1] ); + MSYS_SetRegionUserData( &gMoveMenuRegion[iCounter], 3, 2 ); + } + else if ( firstColumnFull ) + { + MSYS_SetRegionUserData( &gMoveMenuRegion[iCounter], 0, iCounter - gColumnEntries[0] ); + MSYS_SetRegionUserData( &gMoveMenuRegion[iCounter], 3, 1 ); + } + else + { + MSYS_SetRegionUserData( &gMoveMenuRegion[iCounter], 0, iCounter ); + MSYS_SetRegionUserData( &gMoveMenuRegion[iCounter], 3, 0 ); + } + MSYS_SetRegionUserData( &gMoveMenuRegion[ iCounter ], 1, SOLDIER_REGION ); MSYS_SetRegionUserData( &gMoveMenuRegion[ iCounter ], 2, iCountB ); iCounter++; + entries += 1; } } + + if ( entries >= gColumnEntries[0] + gColumnEntries[1] + gColumnEntries[2] && gColumnEntries[2] > 0 ) + { + thirdColumnFull = true; + } + else if ( entries >= gColumnEntries[0] + gColumnEntries[1] && gColumnEntries[1] > 0 ) + { + secondColumnFull = true; + } + else if ( entries >= gColumnEntries[0] && gColumnEntries[0] > 0 ) + { + firstColumnFull = true; + } } @@ -4097,7 +4431,7 @@ void BuildMouseRegionsForMoveBox( void ) // this line gets place only once... if( !fDefinedOtherRegion ) { - MSYS_DefineRegion( &gMoveMenuRegion[ iCounter ], ( INT16 )( iBoxXPosition ), ( INT16 )( iBoxYPosition + iFontHeight * iCounter ), ( INT16 )( iBoxXPosition + iBoxWidth ), ( INT16 )( iBoxYPosition + iFontHeight * ( iCounter + 1 ) ), MSYS_PRIORITY_HIGHEST, + MSYS_DefineRegion( &gMoveMenuRegion[ iCounter ], ( INT16 )( iBoxXPosition ), ( INT16 )( iBoxYPosition + iFontHeight * (iCounter - rowOffset) ), ( INT16 )( iBoxXPosition + firstColumnWidth), ( INT16 )( iBoxYPosition + iFontHeight * ( iCounter + 1 - rowOffset) ), MSYS_PRIORITY_HIGHEST, MSYS_NO_CURSOR, MoveMenuMvtCallback, MoveMenuBtnCallback ); // set user defines @@ -4109,7 +4443,7 @@ void BuildMouseRegionsForMoveBox( void ) fDefinedOtherRegion = TRUE; } - MSYS_DefineRegion( &gMoveMenuRegion[ iCounter ], ( INT16 )( iBoxXPosition ), ( INT16 )( iBoxYPosition + iFontHeight * iCounter ), ( INT16 )( iBoxXPosition + iBoxWidth ), ( INT16 )( iBoxYPosition + iFontHeight * ( iCounter + 1 ) ), MSYS_PRIORITY_HIGHEST, + MSYS_DefineRegion( &gMoveMenuRegion[ iCounter ], ( INT16 )( iBoxXPosition ), ( INT16 )( iBoxYPosition + iFontHeight * (iCounter - rowOffset) ), ( INT16 )( iBoxXPosition + firstColumnWidth), ( INT16 )( iBoxYPosition + iFontHeight * ( iCounter + 1 - rowOffset) ), MSYS_PRIORITY_HIGHEST, MSYS_NO_CURSOR, MoveMenuMvtCallback, MoveMenuBtnCallback ); // set user defines @@ -4123,7 +4457,7 @@ void BuildMouseRegionsForMoveBox( void ) // blank line - MSYS_DefineRegion( &gMoveMenuRegion[ iCounter ], ( INT16 )( iBoxXPosition ), ( INT16 )( iBoxYPosition + iFontHeight * iCounter ), ( INT16 )( iBoxXPosition + iBoxWidth ), ( INT16 )( iBoxYPosition + iFontHeight * ( iCounter + 1 ) ), MSYS_PRIORITY_HIGHEST, + MSYS_DefineRegion( &gMoveMenuRegion[ iCounter ], ( INT16 )( iBoxXPosition ), ( INT16 )( iBoxYPosition + iFontHeight * (iCounter - rowOffset) ), ( INT16 )( iBoxXPosition + iBoxWidth ), ( INT16 )( iBoxYPosition + iFontHeight * ( iCounter + 1 - rowOffset ) ), MSYS_PRIORITY_HIGHEST, MSYS_NO_CURSOR, MSYS_NO_CALLBACK, MSYS_NO_CALLBACK ); iCounter++; @@ -4131,7 +4465,7 @@ void BuildMouseRegionsForMoveBox( void ) if ( IsAnythingSelectedForMoving() ) { // DONE line - MSYS_DefineRegion( &gMoveMenuRegion[ iCounter ], ( INT16 )( iBoxXPosition ), ( INT16 )( iBoxYPosition + iFontHeight * iCounter ), ( INT16 )( iBoxXPosition + iBoxWidth ), ( INT16 )( iBoxYPosition + iFontHeight * ( iCounter + 1 ) ), MSYS_PRIORITY_HIGHEST, + MSYS_DefineRegion( &gMoveMenuRegion[ iCounter ], ( INT16 )( iBoxXPosition ), ( INT16 )( iBoxYPosition + iFontHeight * (iCounter - rowOffset) ), ( INT16 )( iBoxXPosition + iBoxWidth ), ( INT16 )( iBoxYPosition + iFontHeight * ( iCounter + 1 - rowOffset ) ), MSYS_PRIORITY_HIGHEST, MSYS_NO_CURSOR, MoveMenuMvtCallback, MoveMenuBtnCallback ); // set user defines @@ -4143,13 +4477,13 @@ void BuildMouseRegionsForMoveBox( void ) else { // blank line - MSYS_DefineRegion( &gMoveMenuRegion[ iCounter ], ( INT16 )( iBoxXPosition ), ( INT16 )( iBoxYPosition + iFontHeight * iCounter ), ( INT16 )( iBoxXPosition + iBoxWidth ), ( INT16 )( iBoxYPosition + iFontHeight * ( iCounter + 1 ) ), MSYS_PRIORITY_HIGHEST, + MSYS_DefineRegion( &gMoveMenuRegion[ iCounter ], ( INT16 )( iBoxXPosition ), ( INT16 )( iBoxYPosition + iFontHeight * (iCounter - rowOffset) ), ( INT16 )( iBoxXPosition + iBoxWidth ), ( INT16 )( iBoxYPosition + iFontHeight * ( iCounter + 1 - rowOffset) ), MSYS_PRIORITY_HIGHEST, MSYS_NO_CURSOR, MSYS_NO_CALLBACK, MSYS_NO_CALLBACK ); iCounter++; } // CANCEL line - MSYS_DefineRegion( &gMoveMenuRegion[ iCounter ], ( INT16 )( iBoxXPosition ), ( INT16 )( iBoxYPosition + iFontHeight * iCounter ), ( INT16 )( iBoxXPosition + iBoxWidth ), ( INT16 )( iBoxYPosition + iFontHeight * ( iCounter + 1 ) ), MSYS_PRIORITY_HIGHEST, + MSYS_DefineRegion( &gMoveMenuRegion[ iCounter ], ( INT16 )( iBoxXPosition ), ( INT16 )( iBoxYPosition + iFontHeight * (iCounter - rowOffset) ), ( INT16 )( iBoxXPosition + iBoxWidth ), ( INT16 )( iBoxYPosition + iFontHeight * ( iCounter + 1 - rowOffset ) ), MSYS_PRIORITY_HIGHEST, MSYS_NO_CURSOR, MoveMenuMvtCallback, MoveMenuBtnCallback ); // set user defines @@ -4161,10 +4495,10 @@ void BuildMouseRegionsForMoveBox( void ) void ClearMouseRegionsForMoveBox( void ) { - INT32 iCounter = 0; - + UINT32 iCounter = 0; + UINT32 lines = GetTotalNumberOfLinesOfTextInBox( ghMoveBox ); // run through list of mouse regions - for( iCounter = 0; iCounter < ( INT32 )(GetNumberOfLinesOfTextInBox( ghMoveBox ) + GetNumberOfSecondaryLinesOfTextInBox(ghMoveBox)); iCounter++) + for( iCounter = 0; iCounter < lines; iCounter++) { // remove this region MSYS_RemoveRegion( &gMoveMenuRegion[ iCounter ] ); @@ -4182,11 +4516,12 @@ void MoveMenuMvtCallback(MOUSE_REGION * pRegion, INT32 iReason ) iValue = MSYS_GetRegionUserData( pRegion, 0 ); + INT32 column = MSYS_GetRegionUserData( pRegion, 3 ); if (iReason & MSYS_CALLBACK_REASON_GAIN_MOUSE ) { // highlight string - HighLightBoxLine( ghMoveBox, iValue ); + HighLightBoxLine( ghMoveBox, iValue, column ); } else if (iReason & MSYS_CALLBACK_REASON_LOST_MOUSE ) { diff --git a/Utils/PopUpBox.cpp b/Utils/PopUpBox.cpp index cc1225cd..168cad0a 100644 --- a/Utils/PopUpBox.cpp +++ b/Utils/PopUpBox.cpp @@ -1,4 +1,4 @@ - #include "PopUpBox.h" +#include "PopUpBox.h" #include "sysutil.h" @@ -18,13 +18,14 @@ BOOLEAN DrawBoxText(UINT32 uiCounter); void RemoveCurrentBoxPrimaryText( INT32 hStringHandle ); void RemoveCurrentBoxSecondaryText( INT32 hStringHandle ); +void RemoveCurrentBoxText( INT32 hStringHandle, UINT8 column ); void InitPopUpBoxList() { - memset(&PopUpBoxList, 0, sizeof(PopUpBoxPt)); - return; + memset( &PopUpBoxList, 0, sizeof( PopUpBoxPt ) ); + return; } @@ -113,10 +114,17 @@ BOOLEAN CreatePopUpBox(INT32 *phBoxHandle, SGPRect Dimensions, SGPPoint Position SetBoxSize(iCount, Dimensions); SetBoxFlags(iCount, uiFlags); - for(iCounter=0; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++) + for ( UINT8 col = 0; col < MAX_POPUP_BOX_COLUMNS; ++col ) { - PopUpBoxList[iCount]->Text[iCounter]=NULL; - PopUpBoxList[iCount]->pSecondColumnString[iCounter]=NULL; + for ( iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; ++iCounter) + { + PopUpBoxList[iCount]->Text[col][iCounter] = NULL; + } + } + + for ( iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++ ) + { + PopUpBoxList[iCount]->pSecondColumnString[iCounter] = NULL; } SetCurrentBox(iCount); @@ -179,18 +187,18 @@ void ShadeStringInBox( INT32 hBoxHandle, INT32 iLineNumber ) { // shade iLineNumber Line in box indexed by hBoxHandle - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[ hBoxHandle ] ); + Assert( PopUpBoxList[hBoxHandle] ); - if( PopUpBoxList[hBoxHandle]->Text[iLineNumber]!=NULL) + if ( PopUpBoxList[hBoxHandle]->Text[0][iLineNumber] != NULL ) { // set current box SetCurrentBox( hBoxHandle ); // shade line - PopUpBoxList[hBoxHandle]->Text[iLineNumber]->fShadeFlag = TRUE; + PopUpBoxList[hBoxHandle]->Text[0][iLineNumber]->fShadeFlag = TRUE; } } @@ -203,13 +211,13 @@ void UnShadeStringInBox( INT32 hBoxHandle, INT32 iLineNumber ) Assert( PopUpBoxList[ hBoxHandle ] ); - if( PopUpBoxList[hBoxHandle]->Text[iLineNumber]!=NULL) + if( PopUpBoxList[hBoxHandle]->Text[0][iLineNumber]!=NULL) { // set current box SetCurrentBox( hBoxHandle ); // shade line - PopUpBoxList[hBoxHandle]->Text[iLineNumber]->fShadeFlag = FALSE; + PopUpBoxList[hBoxHandle]->Text[0][iLineNumber]->fShadeFlag = FALSE; } } @@ -223,13 +231,13 @@ void SecondaryShadeStringInBox( INT32 hBoxHandle, INT32 iLineNumber ) Assert( PopUpBoxList[ hBoxHandle ] ); - if( PopUpBoxList[hBoxHandle]->Text[iLineNumber]!=NULL) + if( PopUpBoxList[hBoxHandle]->Text[0][iLineNumber]!=NULL) { // set current box SetCurrentBox( hBoxHandle ); // shade line - PopUpBoxList[hBoxHandle]->Text[iLineNumber]->fSecondaryShadeFlag = TRUE; + PopUpBoxList[hBoxHandle]->Text[0][iLineNumber]->fSecondaryShadeFlag = TRUE; } } @@ -242,13 +250,13 @@ void UnSecondaryShadeStringInBox( INT32 hBoxHandle, INT32 iLineNumber ) Assert( PopUpBoxList[ hBoxHandle ] ); - if( PopUpBoxList[hBoxHandle]->Text[iLineNumber]!=NULL) + if( PopUpBoxList[hBoxHandle]->Text[0][iLineNumber]!=NULL) { // set current box SetCurrentBox( hBoxHandle ); // shade line - PopUpBoxList[hBoxHandle]->Text[iLineNumber]->fSecondaryShadeFlag = FALSE; + PopUpBoxList[hBoxHandle]->Text[0][iLineNumber]->fSecondaryShadeFlag = FALSE; } } @@ -342,52 +350,50 @@ void SetBackGroundSurface(INT32 hBoxHandle, INT32 iBackGroundSurfaceIndex) // adds a FIRST column string to the CURRENT popup box -void AddMonoString(UINT32 *hStringHandle, STR16 pString) +void AddMonoString( UINT32 *hStringHandle, STR16 pString ) { - STR16 pLocalString=NULL; - POPUPSTRINGPTR pStringSt=NULL; - INT32 iCounter=0; + STR16 pLocalString = NULL; + POPUPSTRINGPTR pStringSt = NULL; + INT32 iCounter = 0; - if ( ( guiCurrentBox < 0 ) || ( guiCurrentBox >= MAX_POPUP_BOX_COUNT ) ) + if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[guiCurrentBox] != NULL ); + Assert( PopUpBoxList[guiCurrentBox] != NULL ); - // find first free slot in list - for( iCounter = 0; ( iCounter < MAX_POPUP_BOX_STRING_COUNT ) && ( PopUpBoxList[guiCurrentBox]->Text[iCounter] != NULL ); iCounter++ ); + // find first free slot in list + for ( iCounter = 0; (iCounter < MAX_POPUP_BOX_STRING_COUNT) && (PopUpBoxList[guiCurrentBox]->Text[0][iCounter] != NULL); iCounter++ ); - if ( iCounter >= MAX_POPUP_BOX_STRING_COUNT ) - { - // using too many text lines, or not freeing them up properly - Assert(0); + if ( iCounter >= MAX_POPUP_BOX_STRING_COUNT ) + { + // using too many text lines, or not freeing them up properly + Assert( 0 ); + return; + } + + pStringSt = (POPUPSTRING *)(MemAlloc( sizeof( POPUPSTRING ) )); + if ( pStringSt == NULL ) + return; + + pLocalString = (STR16)MemAlloc( (wcslen( pString ) + 1) * sizeof( CHAR16 ) ); + if ( pLocalString == NULL ) + return; + + wcscpy( pLocalString, pString ); + + RemoveCurrentBoxPrimaryText( iCounter ); + + PopUpBoxList[guiCurrentBox]->Text[0][iCounter] = pStringSt; + PopUpBoxList[guiCurrentBox]->Text[0][iCounter]->fColorFlag = FALSE; + PopUpBoxList[guiCurrentBox]->Text[0][iCounter]->pString = pLocalString; + PopUpBoxList[guiCurrentBox]->Text[0][iCounter]->fShadeFlag = FALSE; + PopUpBoxList[guiCurrentBox]->Text[0][iCounter]->fHighLightFlag = FALSE; + PopUpBoxList[guiCurrentBox]->Text[0][iCounter]->fSecondaryShadeFlag = FALSE; + + *hStringHandle = iCounter; + PopUpBoxList[guiCurrentBox]->fUpdated = FALSE; return; - } - - pStringSt=(POPUPSTRING *)(MemAlloc(sizeof(POPUPSTRING))); - if (pStringSt == NULL) - return; - - pLocalString=(STR16)MemAlloc((wcslen(pString)+1)*sizeof(CHAR16)); - if (pLocalString == NULL) - return; - - wcscpy(pLocalString, pString); - - RemoveCurrentBoxPrimaryText( iCounter ); - - PopUpBoxList[guiCurrentBox]->Text[iCounter]=pStringSt; - PopUpBoxList[guiCurrentBox]->Text[iCounter]->fColorFlag=FALSE; - PopUpBoxList[guiCurrentBox]->Text[iCounter]->pString=pLocalString; - PopUpBoxList[guiCurrentBox]->Text[iCounter]->fShadeFlag = FALSE; - PopUpBoxList[guiCurrentBox]->Text[iCounter]->fHighLightFlag = FALSE; - PopUpBoxList[guiCurrentBox]->Text[iCounter]->fSecondaryShadeFlag = FALSE; - - *hStringHandle=iCounter; - - PopUpBoxList[guiCurrentBox]->fUpdated = FALSE; - - return; } @@ -405,7 +411,7 @@ void AddSecondColumnMonoString( UINT32 *hStringHandle, STR16 pString ) Assert( PopUpBoxList[guiCurrentBox] != NULL ); // find the LAST USED text string index - for( iCounter = 0; ( iCounter + 1 < MAX_POPUP_BOX_STRING_COUNT ) && ( PopUpBoxList[guiCurrentBox]->Text[ iCounter + 1 ] != NULL ); iCounter++ ); + for( iCounter = 0; ( iCounter + 1 < MAX_POPUP_BOX_STRING_COUNT ) && ( PopUpBoxList[guiCurrentBox]->Text[0][ iCounter + 1 ] != NULL ); iCounter++ ); if ( iCounter >= MAX_POPUP_BOX_STRING_COUNT ) { @@ -483,6 +489,98 @@ void AddMonoStringToSecondColumn(UINT32* hStringHandle, STR16 pString) return; } +// Adds a string to the first available slot in the column +void AddStringToBoxColumn( UINT32 *hStringHandle, STR16 pString, UINT8 column ) +{ + STR16 pLocalString = NULL; + POPUPSTRINGPTR pStringSt = NULL; + INT32 iCounter = 0; + + + if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) || column >= MAX_POPUP_BOX_COLUMNS ) + return; + + Assert( PopUpBoxList[guiCurrentBox] != NULL ); + + // find first free slot in list + for ( iCounter = 0; (iCounter < MAX_POPUP_BOX_STRING_COUNT) && (PopUpBoxList[guiCurrentBox]->Text[column][iCounter] != NULL); iCounter++ ); + + if ( iCounter >= MAX_POPUP_BOX_STRING_COUNT ) + { + // using too many text lines, or not freeing them up properly + Assert( 0 ); + return; + } + + pStringSt = (POPUPSTRING *)(MemAlloc( sizeof( POPUPSTRING ) )); + if ( pStringSt == NULL ) + return; + + pLocalString = (STR16)MemAlloc( (wcslen( pString ) + 1) * sizeof( CHAR16 ) ); + if ( pLocalString == NULL ) + return; + + wcscpy( pLocalString, pString ); + + RemoveCurrentBoxText( iCounter, column ); + + PopUpBoxList[guiCurrentBox]->Text[column][iCounter] = pStringSt; + PopUpBoxList[guiCurrentBox]->Text[column][iCounter]->fColorFlag = FALSE; + PopUpBoxList[guiCurrentBox]->Text[column][iCounter]->pString = pLocalString; + PopUpBoxList[guiCurrentBox]->Text[column][iCounter]->fShadeFlag = FALSE; + PopUpBoxList[guiCurrentBox]->Text[column][iCounter]->fHighLightFlag = FALSE; + PopUpBoxList[guiCurrentBox]->Text[column][iCounter]->fSecondaryShadeFlag = FALSE; + + *hStringHandle = iCounter; + PopUpBoxList[guiCurrentBox]->fUpdated = FALSE; + return; +} + +// Adds string to the current popup box column besides first. !!! String's position is the LAST used position in the 1st column !!! +void AddColumnMonoString( UINT32 *hStringHandle, STR16 pString, UINT8 column ) +{ + STR16 pLocalString = NULL; + POPUPSTRINGPTR pStringSt = NULL; + INT32 iCounter = 0; + + + if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) || column < 1 || column >= MAX_POPUP_BOX_COLUMNS) + return; + + Assert( PopUpBoxList[guiCurrentBox] != NULL ); + + // find the LAST USED text string index + for ( iCounter = 0; (iCounter + 1 < MAX_POPUP_BOX_STRING_COUNT) && (PopUpBoxList[guiCurrentBox]->Text[0][iCounter + 1] != NULL); iCounter++ ); + + if ( iCounter >= MAX_POPUP_BOX_STRING_COUNT ) + { + // using too many text lines, or not freeing them up properly + Assert( 0 ); + return; + } + + pStringSt = (POPUPSTRING *)(MemAlloc( sizeof( POPUPSTRING ) )); + if ( pStringSt == NULL ) + return; + + pLocalString = (STR16)MemAlloc( (wcslen( pString ) + 1) * sizeof( CHAR16 ) ); + if ( pLocalString == NULL ) + return; + + wcscpy( pLocalString, pString ); + + RemoveCurrentBoxText( iCounter, column ); + + PopUpBoxList[guiCurrentBox]->Text[column][iCounter] = pStringSt; + PopUpBoxList[guiCurrentBox]->Text[column][iCounter]->fColorFlag = FALSE; + PopUpBoxList[guiCurrentBox]->Text[column][iCounter]->pString = pLocalString; + PopUpBoxList[guiCurrentBox]->Text[column][iCounter]->fShadeFlag = FALSE; + PopUpBoxList[guiCurrentBox]->Text[column][iCounter]->fHighLightFlag = FALSE; + + *hStringHandle = iCounter; + return; +} + // Adds a COLORED first column string to the CURRENT box void AddColorString(INT32 *hStringHandle, STR16 pString) @@ -498,7 +596,7 @@ void AddColorString(INT32 *hStringHandle, STR16 pString) Assert( PopUpBoxList[guiCurrentBox] != NULL ); // find first free slot in list - for( iCounter = 0; ( iCounter < MAX_POPUP_BOX_STRING_COUNT ) && ( PopUpBoxList[guiCurrentBox]->Text[iCounter] != NULL ); iCounter++ ); + for( iCounter = 0; ( iCounter < MAX_POPUP_BOX_STRING_COUNT ) && ( PopUpBoxList[guiCurrentBox]->Text[0][iCounter] != NULL ); iCounter++ ); if ( iCounter >= MAX_POPUP_BOX_STRING_COUNT ) { @@ -519,9 +617,9 @@ void AddColorString(INT32 *hStringHandle, STR16 pString) RemoveCurrentBoxPrimaryText( iCounter ); - PopUpBoxList[guiCurrentBox]->Text[iCounter]=pStringSt; - PopUpBoxList[guiCurrentBox]->Text[iCounter]->fColorFlag=TRUE; - PopUpBoxList[guiCurrentBox]->Text[iCounter]->pString=pLocalString; + PopUpBoxList[guiCurrentBox]->Text[0][iCounter]=pStringSt; + PopUpBoxList[guiCurrentBox]->Text[0][iCounter]->fColorFlag=TRUE; + PopUpBoxList[guiCurrentBox]->Text[0][iCounter]->pString=pLocalString; *hStringHandle=iCounter; @@ -550,9 +648,9 @@ void ResizeBoxForSecondStrings( INT32 hBoxHandle ) // check string sizes for( iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++ ) { - if( pBox->Text[ iCounter ] ) + if( pBox->Text[0][ iCounter ] ) { - uiThisWidth = uiBaseWidth + StringPixLength( pBox->Text[ iCounter ]->pString, pBox->Text[ iCounter ]->uiFont ); + uiThisWidth = uiBaseWidth + StringPixLength( pBox->Text[0][ iCounter ]->pString, pBox->Text[0][ iCounter ]->uiFont ); if( uiThisWidth > pBox->uiSecondColumnCurrentOffset ) { @@ -562,6 +660,52 @@ void ResizeBoxForSecondStrings( INT32 hBoxHandle ) } } +static void ResizeStrategicMvtBoxForSecondStrings( INT32 hBoxHandle ) +{ + INT32 iCounter = 0; + PopUpBoxPt pBox; + UINT32 uiBaseWidth, uiThisWidth; + + + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) + return; + + pBox = (PopUpBoxList[hBoxHandle]); + Assert( pBox ); + + // Determine last line for next loop + UINT8 last = MAX_POPUP_BOX_STRING_COUNT; + for ( iCounter = 1; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++ ) + { + if ( pBox->Text[0][iCounter] == nullptr ) + { + // Do not consider the last blank, "cancel" & "Plot Travel route" lines + last = iCounter - 3; + break; + } + } + + uiBaseWidth = pBox->uiLeftMargin + pBox->uiSecondColumnMinimunOffset; + + // check string sizes, skip title line + for ( iCounter = 1; iCounter < last; iCounter++ ) + { + if ( pBox->Text[0][iCounter] ) + { + uiThisWidth = uiBaseWidth + StringPixLength( pBox->Text[0][iCounter]->pString, pBox->Text[0][iCounter]->uiFont ); + + if ( uiThisWidth > pBox->uiSecondColumnCurrentOffset ) + { + // Maintain width if something is selected and the '*' characters have been added + if ( wcsncmp( pBox->Text[0][iCounter]->pString, L" *", 3 ) == 0 ) + { + uiThisWidth -= 10; + } + pBox->uiSecondColumnCurrentOffset = uiThisWidth; + } + } + } +} UINT32 GetNumberOfLinesOfTextInBox( INT32 hBoxHandle ) @@ -575,7 +719,7 @@ UINT32 GetNumberOfLinesOfTextInBox( INT32 hBoxHandle ) // check string size for( iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++ ) { - if( PopUpBoxList[ hBoxHandle ]->Text[ iCounter ] == NULL ) + if( PopUpBoxList[ hBoxHandle ]->Text[0][ iCounter ] == NULL ) { break; } @@ -605,29 +749,51 @@ UINT32 GetNumberOfSecondaryLinesOfTextInBox(INT32 hBoxHandle) return(iCounter); } - - -void SetBoxFont(INT32 hBoxHandle, UINT32 uiFont) +UINT32 GetTotalNumberOfLinesOfTextInBox( INT32 hBoxHandle ) { - UINT32 uiCounter; + UINT32 lines = 0; + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) + return(0); - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) + // count number of lines + // check string size + for ( size_t i = 0; i < MAX_POPUP_BOX_COLUMNS; i++ ) + { + for ( INT32 iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++ ) + { + if ( PopUpBoxList[hBoxHandle]->Text[i][iCounter] == NULL ) + { + break; + } + lines += 1; + } + } + + return(lines); +} + + +void SetBoxFont( INT32 hBoxHandle, UINT32 uiFont ) +{ + UINT32 uiCounter; + + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; - for ( uiCounter = 0; uiCounter < MAX_POPUP_BOX_STRING_COUNT; uiCounter++ ) - { - if ( PopUpBoxList[hBoxHandle]->Text[uiCounter] != NULL) + for ( uiCounter = 0; uiCounter < MAX_POPUP_BOX_STRING_COUNT; uiCounter++ ) { - PopUpBoxList[hBoxHandle]->Text[uiCounter]->uiFont=uiFont; + if ( PopUpBoxList[hBoxHandle]->Text[0][uiCounter] != NULL ) + { + PopUpBoxList[hBoxHandle]->Text[0][uiCounter]->uiFont = uiFont; + } } - } - // set up the 2nd column font - SetBoxSecondColumnFont( hBoxHandle, uiFont ); + // set up the 2nd column font + SetBoxSecondColumnFont( hBoxHandle, uiFont ); - PopUpBoxList[hBoxHandle]->fUpdated = FALSE; + PopUpBoxList[hBoxHandle]->fUpdated = FALSE; - return; + return; } void SetBoxSecondColumnMinimumOffset( INT32 hBoxHandle, UINT32 uiWidth ) @@ -657,36 +823,55 @@ void SetBoxSecondColumnOffsetAdjustment(INT32 hBoxHandle, INT16 x) return; } -void SetBoxSecondColumnFont(INT32 hBoxHandle, UINT32 uiFont) +void SetBoxSecondColumnFont( INT32 hBoxHandle, UINT32 uiFont ) { - UINT32 iCounter=0; + UINT32 iCounter = 0; - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; - for( iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++ ) - { - if( PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter] ) + for ( iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++ ) { - PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter]->uiFont=uiFont; + if ( PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter] ) + { + PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter]->uiFont = uiFont; + } } - } - PopUpBoxList[hBoxHandle]->fUpdated = FALSE; + PopUpBoxList[hBoxHandle]->fUpdated = FALSE; - return; + return; } +void SetBoxColumnFont( INT32 hBoxHandle, UINT32 uiFont, UINT8 column ) +{ + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) + return; + + for ( UINT32 uiCounter = 0; uiCounter < MAX_POPUP_BOX_STRING_COUNT; uiCounter++ ) + { + if ( PopUpBoxList[hBoxHandle]->Text[column][uiCounter] != NULL ) + { + PopUpBoxList[hBoxHandle]->Text[column][uiCounter]->uiFont = uiFont; + } + } + + PopUpBoxList[hBoxHandle]->fUpdated = FALSE; + return; +} + + + UINT32 GetBoxFont( INT32 hBoxHandle ) { if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) return( 0 ); Assert( PopUpBoxList[ hBoxHandle ] ); - Assert( PopUpBoxList[ hBoxHandle ]->Text[ 0 ] ); + Assert( PopUpBoxList[ hBoxHandle ]->Text[0][ 0 ] ); // return font id of first line of text of box - return( PopUpBoxList[hBoxHandle]->Text[ 0 ]->uiFont ); + return( PopUpBoxList[hBoxHandle]->Text[0][ 0 ]->uiFont ); } @@ -697,9 +882,9 @@ void SetBoxLineForeground( INT32 iBox, INT32 iStringValue, UINT8 ubColor ) return; Assert( PopUpBoxList[ iBox ] ); - Assert( PopUpBoxList[ iBox ]->Text[iStringValue] ); + Assert( PopUpBoxList[ iBox ]->Text[0][iStringValue] ); - PopUpBoxList[iBox]->Text[iStringValue]->ubForegroundColor=ubColor; + PopUpBoxList[iBox]->Text[0][iStringValue]->ubForegroundColor=ubColor; return; } @@ -714,9 +899,9 @@ void SetBoxSecondaryShade( INT32 iBox, UINT8 ubColor ) for ( uiCounter = 0; uiCounter < MAX_POPUP_BOX_STRING_COUNT; uiCounter++ ) { - if (PopUpBoxList[iBox]->Text[uiCounter]!=NULL) + if (PopUpBoxList[iBox]->Text[0][uiCounter]!=NULL) { - PopUpBoxList[iBox]->Text[uiCounter]->ubSecondaryShade=ubColor; + PopUpBoxList[iBox]->Text[0][uiCounter]->ubSecondaryShade=ubColor; } } return; @@ -731,9 +916,9 @@ void SetPopUpStringFont(INT32 hStringHandle, UINT32 uiFont) return; Assert( PopUpBoxList[guiCurrentBox] != NULL ); - Assert( PopUpBoxList[guiCurrentBox]->Text[hStringHandle] ); + Assert( PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle] ); - PopUpBoxList[guiCurrentBox]->Text[hStringHandle]->uiFont=uiFont; + PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle]->uiFont=uiFont; return; } @@ -752,114 +937,114 @@ void SetPopUpSecondColumnStringFont(INT32 hStringHandle, UINT32 uiFont) -void SetStringSecondaryShade(INT32 hStringHandle, UINT8 ubColor) +void SetStringSecondaryShade( INT32 hStringHandle, UINT8 ubColor ) { - if ( ( guiCurrentBox < 0 ) || ( guiCurrentBox >= MAX_POPUP_BOX_COUNT ) ) + if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[guiCurrentBox] != NULL ); - Assert( PopUpBoxList[guiCurrentBox]->Text[hStringHandle] ); + Assert( PopUpBoxList[guiCurrentBox] != NULL ); + Assert( PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle] ); - PopUpBoxList[guiCurrentBox]->Text[hStringHandle]->ubSecondaryShade=ubColor; - return; + PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle]->ubSecondaryShade = ubColor; + return; } -void SetStringForeground(INT32 hStringHandle, UINT8 ubColor) +void SetStringForeground( INT32 hStringHandle, UINT8 ubColor ) { - if ( ( guiCurrentBox < 0 ) || ( guiCurrentBox >= MAX_POPUP_BOX_COUNT ) ) + if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[guiCurrentBox] != NULL ); - Assert( PopUpBoxList[guiCurrentBox]->Text[hStringHandle] ); + Assert( PopUpBoxList[guiCurrentBox] != NULL ); + Assert( PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle] ); - PopUpBoxList[guiCurrentBox]->Text[hStringHandle]->ubForegroundColor=ubColor; - return; + PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle]->ubForegroundColor = ubColor; + return; } -void SetStringBackground(INT32 hStringHandle, UINT8 ubColor) +void SetStringBackground( INT32 hStringHandle, UINT8 ubColor ) { - if ( ( guiCurrentBox < 0 ) || ( guiCurrentBox >= MAX_POPUP_BOX_COUNT ) ) + if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[guiCurrentBox] != NULL ); - Assert( PopUpBoxList[guiCurrentBox]->Text[hStringHandle] ); + Assert( PopUpBoxList[guiCurrentBox] != NULL ); + Assert( PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle] ); - PopUpBoxList[guiCurrentBox]->Text[hStringHandle]->ubBackgroundColor=ubColor; - return; + PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle]->ubBackgroundColor = ubColor; + return; } -void SetStringHighLight(INT32 hStringHandle, UINT8 ubColor) +void SetStringHighLight( INT32 hStringHandle, UINT8 ubColor ) { - if ( ( guiCurrentBox < 0 ) || ( guiCurrentBox >= MAX_POPUP_BOX_COUNT ) ) + if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[guiCurrentBox] != NULL ); - Assert( PopUpBoxList[guiCurrentBox]->Text[hStringHandle] ); + Assert( PopUpBoxList[guiCurrentBox] != NULL ); + Assert( PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle] ); - PopUpBoxList[guiCurrentBox]->Text[hStringHandle]->ubHighLight=ubColor; - return; + PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle]->ubHighLight = ubColor; + return; } -void SetStringShade(INT32 hStringHandle, UINT8 ubShade) +void SetStringShade( INT32 hStringHandle, UINT8 ubShade ) { - if ( ( guiCurrentBox < 0 ) || ( guiCurrentBox >= MAX_POPUP_BOX_COUNT ) ) + if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[guiCurrentBox] != NULL ); - Assert( PopUpBoxList[guiCurrentBox]->Text[hStringHandle] ); + Assert( PopUpBoxList[guiCurrentBox] != NULL ); + Assert( PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle] ); - PopUpBoxList[guiCurrentBox]->Text[hStringHandle]->ubShade=ubShade; - return; + PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle]->ubShade = ubShade; + return; } -void SetStringSecondColumnForeground(INT32 hStringHandle, UINT8 ubColor) +void SetStringSecondColumnForeground( INT32 hStringHandle, UINT8 ubColor ) { - if ( ( guiCurrentBox < 0 ) || ( guiCurrentBox >= MAX_POPUP_BOX_COUNT ) ) + if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[guiCurrentBox] != NULL ); - Assert( PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle] ); + Assert( PopUpBoxList[guiCurrentBox] != NULL ); + Assert( PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle] ); - PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle]->ubForegroundColor=ubColor; - return; + PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle]->ubForegroundColor = ubColor; + return; } -void SetStringSecondColumnBackground(INT32 hStringHandle, UINT8 ubColor) +void SetStringSecondColumnBackground( INT32 hStringHandle, UINT8 ubColor ) { - if ( ( guiCurrentBox < 0 ) || ( guiCurrentBox >= MAX_POPUP_BOX_COUNT ) ) + if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[guiCurrentBox] != NULL ); - Assert( PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle] ); + Assert( PopUpBoxList[guiCurrentBox] != NULL ); + Assert( PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle] ); - PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle]->ubBackgroundColor=ubColor; - return; + PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle]->ubBackgroundColor = ubColor; + return; } -void SetStringSecondColumnHighLight(INT32 hStringHandle, UINT8 ubColor) +void SetStringSecondColumnHighLight( INT32 hStringHandle, UINT8 ubColor ) { - if ( ( guiCurrentBox < 0 ) || ( guiCurrentBox >= MAX_POPUP_BOX_COUNT ) ) + if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[guiCurrentBox] != NULL ); - Assert( PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle] ); + Assert( PopUpBoxList[guiCurrentBox] != NULL ); + Assert( PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle] ); - PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle]->ubHighLight=ubColor; - return; + PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle]->ubHighLight = ubColor; + return; } -void SetStringSecondColumnShade(INT32 hStringHandle, UINT8 ubShade) +void SetStringSecondColumnShade( INT32 hStringHandle, UINT8 ubShade ) { - if ( ( guiCurrentBox < 0 ) || ( guiCurrentBox >= MAX_POPUP_BOX_COUNT ) ) + if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[guiCurrentBox] != NULL ); - Assert( PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle] ); + Assert( PopUpBoxList[guiCurrentBox] != NULL ); + Assert( PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle] ); - PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle]->ubShade=ubShade; - return; + PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle]->ubShade = ubShade; + return; } @@ -875,9 +1060,9 @@ void SetBoxForeground(INT32 hBoxHandle, UINT8 ubColor) for ( uiCounter = 0; uiCounter < MAX_POPUP_BOX_STRING_COUNT; uiCounter++ ) { - if (PopUpBoxList[hBoxHandle]->Text[uiCounter]!=NULL) + if (PopUpBoxList[hBoxHandle]->Text[0][uiCounter]!=NULL) { - PopUpBoxList[hBoxHandle]->Text[uiCounter]->ubForegroundColor=ubColor; + PopUpBoxList[hBoxHandle]->Text[0][uiCounter]->ubForegroundColor=ubColor; } } return; @@ -894,9 +1079,9 @@ void SetBoxBackground(INT32 hBoxHandle, UINT8 ubColor) for ( uiCounter = 0; uiCounter < MAX_POPUP_BOX_STRING_COUNT; uiCounter++ ) { - if (PopUpBoxList[hBoxHandle]->Text[uiCounter]!=NULL) + if (PopUpBoxList[hBoxHandle]->Text[0][uiCounter]!=NULL) { - PopUpBoxList[hBoxHandle]->Text[uiCounter]->ubBackgroundColor=ubColor; + PopUpBoxList[hBoxHandle]->Text[0][uiCounter]->ubBackgroundColor=ubColor; } } return; @@ -913,9 +1098,9 @@ void SetBoxHighLight(INT32 hBoxHandle, UINT8 ubColor) for ( uiCounter = 0; uiCounter < MAX_POPUP_BOX_STRING_COUNT; uiCounter++ ) { - if (PopUpBoxList[hBoxHandle]->Text[uiCounter]!=NULL) + if (PopUpBoxList[hBoxHandle]->Text[0][uiCounter]!=NULL) { - PopUpBoxList[hBoxHandle]->Text[uiCounter]->ubHighLight=ubColor; + PopUpBoxList[hBoxHandle]->Text[0][uiCounter]->ubHighLight=ubColor; } } return; @@ -932,105 +1117,194 @@ void SetBoxShade(INT32 hBoxHandle, UINT8 ubColor) for ( uiCounter = 0; uiCounter < MAX_POPUP_BOX_STRING_COUNT; uiCounter++ ) { - if (PopUpBoxList[hBoxHandle]->Text[uiCounter]!=NULL) + if (PopUpBoxList[hBoxHandle]->Text[0][uiCounter]!=NULL) { - PopUpBoxList[hBoxHandle]->Text[uiCounter]->ubShade=ubColor; + PopUpBoxList[hBoxHandle]->Text[0][uiCounter]->ubShade=ubColor; } } return; } -void SetBoxSecondColumnForeground(INT32 hBoxHandle, UINT8 ubColor) +void SetBoxSecondColumnForeground( INT32 hBoxHandle, UINT8 ubColor ) { - UINT32 iCounter=0; + UINT32 iCounter = 0; - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; Assert( PopUpBoxList[hBoxHandle] != NULL ); - for( iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++ ) - { - if( PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter] ) + for ( iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++ ) { - PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter]->ubForegroundColor=ubColor; + if ( PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter] ) + { + PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter]->ubForegroundColor = ubColor; + } } - } - return; -} - -void SetBoxSecondColumnBackground(INT32 hBoxHandle, UINT8 ubColor) -{ - UINT32 iCounter=0; - - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) - return; - - Assert( PopUpBoxList[hBoxHandle] != NULL ); - - for( iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++ ) - { - if( PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter] ) - { - PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter]->ubBackgroundColor=ubColor; - } - } - - return; -} - -void SetBoxSecondColumnHighLight(INT32 hBoxHandle, UINT8 ubColor) -{ - UINT32 iCounter=0; - - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) - return; - - Assert( PopUpBoxList[hBoxHandle] != NULL ); - - for( iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++ ) - { - if( PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter] ) - { - PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter]->ubHighLight=ubColor; - } - } - - return; -} - -void SetBoxSecondColumnShade(INT32 hBoxHandle, UINT8 ubColor) -{ - UINT32 iCounter=0; - - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) - return; - - Assert( PopUpBoxList[hBoxHandle] != NULL ); - - for( iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++ ) - { - if( PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter] ) - { - PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter]->ubShade=ubColor; - } - } - return; -} - - -void HighLightLine(INT32 hStringHandle) -{ - if ( ( guiCurrentBox < 0 ) || ( guiCurrentBox >= MAX_POPUP_BOX_COUNT ) ) - return; - - Assert( PopUpBoxList[guiCurrentBox] != NULL ); - - if(!PopUpBoxList[guiCurrentBox]->Text[hStringHandle]) return; - PopUpBoxList[guiCurrentBox]->Text[hStringHandle]->fHighLightFlag=TRUE; - return; +} + +void SetBoxSecondColumnBackground( INT32 hBoxHandle, UINT8 ubColor ) +{ + UINT32 iCounter = 0; + + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) + return; + + Assert( PopUpBoxList[hBoxHandle] != NULL ); + + for ( iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++ ) + { + if ( PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter] ) + { + PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter]->ubBackgroundColor = ubColor; + } + } + + return; +} + +void SetBoxSecondColumnHighLight( INT32 hBoxHandle, UINT8 ubColor ) +{ + UINT32 iCounter = 0; + + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) + return; + + Assert( PopUpBoxList[hBoxHandle] != NULL ); + + for ( iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++ ) + { + if ( PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter] ) + { + PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter]->ubHighLight = ubColor; + } + } + + return; +} + +void SetBoxSecondColumnShade( INT32 hBoxHandle, UINT8 ubColor ) +{ + UINT32 iCounter = 0; + + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) + return; + + Assert( PopUpBoxList[hBoxHandle] != NULL ); + + for ( iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++ ) + { + if ( PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter] ) + { + PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter]->ubShade = ubColor; + } + } + return; +} + + +void SetBoxColumnForeground( INT32 hBoxHandle, UINT8 ubColor, UINT8 column ) +{ + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) + return; + + auto box = PopUpBoxList[hBoxHandle]; + Assert( box != NULL ); + + for ( UINT32 uiCounter = 0; uiCounter < MAX_POPUP_BOX_STRING_COUNT; uiCounter++ ) + { + if ( box->Text[column][uiCounter] != NULL ) + { + box->Text[column][uiCounter]->ubForegroundColor = ubColor; + } + } + return; +} + +void SetBoxColumnBackground( INT32 hBoxHandle, UINT8 ubColor, UINT8 column ) +{ + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) + return; + + auto box = PopUpBoxList[hBoxHandle]; + Assert( box != NULL ); + + for ( UINT32 uiCounter = 0; uiCounter < MAX_POPUP_BOX_STRING_COUNT; uiCounter++ ) + { + if ( box->Text[column][uiCounter] != NULL ) + { + box->Text[column][uiCounter]->ubBackgroundColor = ubColor; + } + } + return; +} + +void SetBoxColumnHighLight( INT32 hBoxHandle, UINT8 ubColor, UINT8 column ) +{ + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) + return; + + auto box = PopUpBoxList[hBoxHandle]; + Assert( box != NULL ); + + for ( UINT32 uiCounter = 0; uiCounter < MAX_POPUP_BOX_STRING_COUNT; uiCounter++ ) + { + if ( box->Text[column][uiCounter] != NULL ) + { + box->Text[column][uiCounter]->ubHighLight = ubColor; + } + } + return; +} + +void SetBoxColumnShade( INT32 hBoxHandle, UINT8 ubColor, UINT8 column ) +{ + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) + return; + + auto box = PopUpBoxList[hBoxHandle]; + Assert( box != NULL ); + + for ( UINT32 uiCounter = 0; uiCounter < MAX_POPUP_BOX_STRING_COUNT; uiCounter++ ) + { + if ( box->Text[column][uiCounter] != NULL ) + { + box->Text[column][uiCounter]->ubShade = ubColor; + } + } + return; +} + + + +void HighLightLine( INT32 hStringHandle, UINT8 column ) +{ + if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) + return; + + auto box = PopUpBoxList[guiCurrentBox]; + Assert( box != NULL ); + + if ( !box->Text[column][hStringHandle] ) + return; + box->Text[column][hStringHandle]->fHighLightFlag = TRUE; + return; +} + +void HighLight2ndLine( INT32 hStringHandle ) +{ + if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) + return; + + auto box = PopUpBoxList[guiCurrentBox]; + Assert( box != NULL ); + + if ( !box->pSecondColumnString[hStringHandle] ) + return; + box->pSecondColumnString[hStringHandle]->fHighLightFlag = TRUE; + return; } BOOLEAN GetShadeFlag( INT32 hStringHandle ) @@ -1040,10 +1314,10 @@ BOOLEAN GetShadeFlag( INT32 hStringHandle ) Assert( PopUpBoxList[guiCurrentBox] != NULL ); - if(!PopUpBoxList[guiCurrentBox]->Text[hStringHandle]) + if(!PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle]) return( FALSE ); - return( PopUpBoxList[guiCurrentBox]->Text[hStringHandle]->fShadeFlag); + return( PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle]->fShadeFlag); } BOOLEAN GetSecondaryShadeFlag( INT32 hStringHandle ) @@ -1053,27 +1327,42 @@ BOOLEAN GetSecondaryShadeFlag( INT32 hStringHandle ) Assert( PopUpBoxList[guiCurrentBox] != NULL ); - if(!PopUpBoxList[guiCurrentBox]->Text[hStringHandle]) + if(!PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle]) return( FALSE ); - return( PopUpBoxList[guiCurrentBox]->Text[hStringHandle]->fSecondaryShadeFlag ); + return( PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle]->fSecondaryShadeFlag ); } -void HighLightBoxLine( INT32 hBoxHandle, INT32 iLineNumber ) +void HighLightBoxLine( INT32 hBoxHandle, INT32 iLineNumber, UINT8 column ) { if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) return; // highlight iLineNumber Line in box indexed by hBoxHandle - if( PopUpBoxList[hBoxHandle]->Text[iLineNumber]!=NULL) + if( PopUpBoxList[hBoxHandle]->Text[column][iLineNumber]!=NULL) { // set current box SetCurrentBox( hBoxHandle ); // highlight line - HighLightLine( iLineNumber ); + HighLightLine( iLineNumber, column ); + } + + return; +} + +void HighLight2ndBoxLine( INT32 hBoxHandle, INT32 iLineNumber ) +{ + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) + return; + + // highlight iLineNumber Line in box indexed by hBoxHandle + if ( PopUpBoxList[hBoxHandle]->pSecondColumnString[iLineNumber] != NULL ) + { + SetCurrentBox( hBoxHandle ); + HighLight2ndLine( iLineNumber ); } return; @@ -1084,9 +1373,9 @@ BOOLEAN GetBoxShadeFlag( INT32 hBoxHandle, INT32 iLineNumber ) if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) return(FALSE); - if( PopUpBoxList[hBoxHandle]->Text[iLineNumber]!=NULL) + if( PopUpBoxList[hBoxHandle]->Text[0][iLineNumber]!=NULL) { - return( PopUpBoxList[hBoxHandle]->Text[iLineNumber]->fShadeFlag ); + return( PopUpBoxList[hBoxHandle]->Text[0][iLineNumber]->fShadeFlag ); } @@ -1098,40 +1387,50 @@ BOOLEAN GetBoxSecondaryShadeFlag( INT32 hBoxHandle, INT32 iLineNumber ) if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) return(FALSE); - if( PopUpBoxList[hBoxHandle]->Text[iLineNumber]!=NULL) + if( PopUpBoxList[hBoxHandle]->Text[0][iLineNumber]!=NULL) { - return( PopUpBoxList[hBoxHandle]->Text[iLineNumber]->fSecondaryShadeFlag ); + return( PopUpBoxList[hBoxHandle]->Text[0][iLineNumber]->fSecondaryShadeFlag ); } return( FALSE ); } -void UnHighLightLine(INT32 hStringHandle) +void UnHighLightLine( INT32 hStringHandle ) { - if ( ( guiCurrentBox < 0 ) || ( guiCurrentBox >= MAX_POPUP_BOX_COUNT ) ) + if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[guiCurrentBox] != NULL ); + Assert( PopUpBoxList[guiCurrentBox] != NULL ); - if(!PopUpBoxList[guiCurrentBox]->Text[hStringHandle]) + if ( !PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle] ) + return; + PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle]->fHighLightFlag = FALSE; return; - PopUpBoxList[guiCurrentBox]->Text[hStringHandle]->fHighLightFlag=FALSE; - return; } -void UnHighLightBox(INT32 hBoxHandle) +void UnHighLightBox( INT32 hBoxHandle ) { - INT32 iCounter=0; + INT32 iCounter = 0; - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; - for(iCounter=0; iCounter Text[iCounter]) - PopUpBoxList[hBoxHandle]->Text[iCounter]->fHighLightFlag=FALSE; - } + auto box = PopUpBoxList[hBoxHandle]; + for ( size_t i = 0; i < MAX_POPUP_BOX_COLUMNS; i++ ) + { + for ( iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++ ) + { + if ( box->Text[i][iCounter] ) + box->Text[i][iCounter]->fHighLightFlag = FALSE; + } + } + + for ( iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++ ) + { + if ( box->pSecondColumnString[iCounter] ) + box->pSecondColumnString[iCounter]->fHighLightFlag = FALSE; + } } void UnHighLightSecondColumnLine(INT32 hStringHandle) @@ -1180,7 +1479,7 @@ void RemoveOneCurrentBoxString(INT32 hStringHandle, BOOLEAN fFillGaps) // shuffle all strings down a slot to fill in the gap for ( uiCounter = hStringHandle; uiCounter < ( MAX_POPUP_BOX_STRING_COUNT - 1 ); uiCounter++ ) { - PopUpBoxList[guiCurrentBox]->Text[uiCounter]=PopUpBoxList[guiCurrentBox]->Text[uiCounter+1]; + PopUpBoxList[guiCurrentBox]->Text[0][uiCounter]=PopUpBoxList[guiCurrentBox]->Text[0][uiCounter+1]; PopUpBoxList[guiCurrentBox]->pSecondColumnString[uiCounter]=PopUpBoxList[guiCurrentBox]->pSecondColumnString[uiCounter+1]; } } @@ -1189,39 +1488,43 @@ void RemoveOneCurrentBoxString(INT32 hStringHandle, BOOLEAN fFillGaps) } - void RemoveAllCurrentBoxStrings( void ) { UINT32 uiCounter; - if ( ( guiCurrentBox < 0 ) || ( guiCurrentBox >= MAX_POPUP_BOX_COUNT ) ) + if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) || !PopUpBoxList[guiCurrentBox] ) return; - for(uiCounter=0; uiCounter = MAX_POPUP_BOX_COUNT ) ) + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; - GetCurrentBox(&hOldBoxHandle); - SetCurrentBox(hBoxHandle); + GetCurrentBox( &hOldBoxHandle ); + SetCurrentBox( hBoxHandle ); - RemoveAllCurrentBoxStrings(); + RemoveAllCurrentBoxStrings(); - MemFree(PopUpBoxList[hBoxHandle]); - PopUpBoxList[hBoxHandle]=NULL; + MemFree( PopUpBoxList[hBoxHandle] ); + PopUpBoxList[hBoxHandle] = NULL; - if(hOldBoxHandle !=hBoxHandle) - SetCurrentBox(hOldBoxHandle); + if ( hOldBoxHandle != hBoxHandle ) + SetCurrentBox( hOldBoxHandle ); - return; + return; } @@ -1288,15 +1591,15 @@ void DisplayBoxes(UINT32 uiBuffer) void DisplayOnePopupBox( UINT32 uiIndex, UINT32 uiBuffer ) { - if ( ( uiIndex < 0 ) || ( uiIndex >= MAX_POPUP_BOX_COUNT ) ) + if ( (uiIndex < 0) || (uiIndex >= MAX_POPUP_BOX_COUNT) ) return; - if ( PopUpBoxList[ uiIndex ] != NULL ) + if ( PopUpBoxList[uiIndex] != NULL ) { - if( ( PopUpBoxList[ uiIndex ]->uiBuffer == uiBuffer) && ( PopUpBoxList[ uiIndex ]->fShowBox ) ) + if ( (PopUpBoxList[uiIndex]->uiBuffer == uiBuffer) && (PopUpBoxList[uiIndex]->fShowBox) ) { - DrawBox( uiIndex ); - DrawBoxText( uiIndex ); + DrawBox( uiIndex ); + DrawBoxText( uiIndex ); } } } @@ -1356,7 +1659,7 @@ BOOLEAN DrawBox(UINT32 uiCounter) usTopX=(UINT16)PopUpBoxList[uiCounter]->Position.iX; usTopY=(UINT16)PopUpBoxList[uiCounter]->Position.iY; - usWidth=((UINT16)(PopUpBoxList[uiCounter]->Dimensions.iRight-PopUpBoxList[uiCounter]->Dimensions.iLeft + PopUpBoxList[uiCounter]->usSecondColumnOffsetAdjustment)); + usWidth = ((UINT16)(PopUpBoxList[uiCounter]->Dimensions.iRight - PopUpBoxList[uiCounter]->Dimensions.iLeft + PopUpBoxList[uiCounter]->usSecondColumnOffsetAdjustment)); usHeight=((UINT16)(PopUpBoxList[uiCounter]->Dimensions.iBottom-PopUpBoxList[uiCounter]->Dimensions.iTop)); //CHRISL: Adjust position for screen limits @@ -1440,171 +1743,224 @@ BOOLEAN DrawBox(UINT32 uiCounter) -BOOLEAN DrawBoxText(UINT32 uiCounter) +BOOLEAN DrawBoxText( UINT32 uiCounter ) { - UINT32 uiCount=0; - INT16 uX, uY; - CHAR16 sString[100]; + UINT32 uiCount = 0; + INT16 uX, uY; + CHAR16 sString[100]; - if ( ( uiCounter < 0 ) || ( uiCounter >= MAX_POPUP_BOX_COUNT ) ) + if ( (uiCounter < 0) || (uiCounter >= MAX_POPUP_BOX_COUNT) ) return(FALSE); + Assert( PopUpBoxList[uiCounter] != NULL ); - Assert( PopUpBoxList[uiCounter] != NULL ); - - //clip text? - if(PopUpBoxList[uiCounter]->uiFlags & POPUP_BOX_FLAG_CLIP_TEXT) - { - SetFontDestBuffer(PopUpBoxList[uiCounter]->uiBuffer,PopUpBoxList[uiCounter]->Position.iX+PopUpBoxList[uiCounter]->uiLeftMargin-1, PopUpBoxList[uiCounter]->Position.iY+PopUpBoxList[uiCounter]->uiTopMargin, PopUpBoxList[uiCounter]->Position.iX+PopUpBoxList[uiCounter]->Dimensions.iRight-PopUpBoxList[uiCounter]->uiRightMargin,PopUpBoxList[uiCounter]->Position.iY+PopUpBoxList[uiCounter]->Dimensions.iBottom-PopUpBoxList[uiCounter]->uiBottomMargin, FALSE); - } - - for(uiCount=0; uiCount Text[uiCount]) + auto box = PopUpBoxList[uiCounter]; + //clip text? + if ( box->uiFlags & POPUP_BOX_FLAG_CLIP_TEXT ) { - // set font - SetFont(PopUpBoxList[uiCounter]->Text[uiCount]->uiFont); + const auto x1 = box->Position.iX + box->uiLeftMargin - 1; + const auto y1 = box->Position.iY + box->uiTopMargin; + const auto x2 = box->Position.iX + box->Dimensions.iRight - box->uiRightMargin; + const auto y2 = box->Position.iY + box->Dimensions.iBottom - box->uiBottomMargin; + SetFontDestBuffer( box->uiBuffer, x1, y1, x2, y2, FALSE ); + } - // are we highlighting?...shading?..or neither - if( ( PopUpBoxList[ uiCounter ]->Text[ uiCount ]->fHighLightFlag == FALSE )&&( PopUpBoxList[ uiCounter ]->Text[ uiCount ]->fShadeFlag == FALSE) &&( PopUpBoxList[ uiCounter ]->Text[ uiCount ]->fSecondaryShadeFlag == FALSE ) ) - { - // neither - SetFontForeground(PopUpBoxList[uiCounter]->Text[uiCount]->ubForegroundColor); - } - else if( ( PopUpBoxList[ uiCounter ]->Text[ uiCount ]->fHighLightFlag == TRUE ) ) - { - // highlight - SetFontForeground(PopUpBoxList[uiCounter]->Text[uiCount]->ubHighLight); - } - else if( ( PopUpBoxList[ uiCounter ]->Text[ uiCount ]->fSecondaryShadeFlag == TRUE ) ) - { - SetFontForeground(PopUpBoxList[uiCounter]->Text[uiCount]->ubSecondaryShade); - } - else - { - //shading - SetFontForeground(PopUpBoxList[uiCounter]->Text[uiCount]->ubShade); - } + for ( size_t i = 0; i < MAX_POPUP_BOX_COLUMNS; i++ ) + { - // set background - SetFontBackground(PopUpBoxList[uiCounter]->Text[uiCount]->ubBackgroundColor); - - // copy string - wcsncpy(sString, PopUpBoxList[uiCounter]->Text[uiCount]->pString, wcslen(PopUpBoxList[uiCounter]->Text[uiCount]->pString)+1); - - // centering? - if(PopUpBoxList[uiCounter]->uiFlags & POPUP_BOX_FLAG_CENTER_TEXT) + for ( uiCount = 0; uiCount < MAX_POPUP_BOX_STRING_COUNT; uiCount++ ) { - FindFontCenterCoordinates(((INT16)(PopUpBoxList[uiCounter]->Position.iX+PopUpBoxList[uiCounter]->uiLeftMargin)),((INT16)(PopUpBoxList[uiCounter]->Position.iY+uiCount*GetFontHeight(PopUpBoxList[uiCounter]->Text[uiCount]->uiFont)+PopUpBoxList[uiCounter]->uiTopMargin+uiCount*PopUpBoxList[uiCounter]->uiLineSpace)),((INT16)(PopUpBoxList[uiCounter]->Dimensions.iRight-(PopUpBoxList[uiCounter]->uiRightMargin+PopUpBoxList[uiCounter]->uiLeftMargin+2))),((INT16)GetFontHeight(PopUpBoxList[uiCounter]->Text[uiCount]->uiFont)),(sString),((INT32)PopUpBoxList[uiCounter]->Text[uiCount]->uiFont) ,&uX, &uY); - } - else - { - uX=((INT16)(PopUpBoxList[uiCounter]->Position.iX+PopUpBoxList[uiCounter]->uiLeftMargin)); - uY=((INT16)(PopUpBoxList[uiCounter]->Position.iY+uiCount*GetFontHeight(PopUpBoxList[uiCounter]->Text[uiCount]->uiFont)+PopUpBoxList[uiCounter]->uiTopMargin+uiCount*PopUpBoxList[uiCounter]->uiLineSpace)); - } + auto entry = box->Text[i][uiCount]; + // there is text in this line? + if ( entry ) + { + // set font + SetFont( entry->uiFont ); - // print - mprintf(uX,uY,PopUpBoxList[uiCounter]->Text[uiCount]->pString); + // are we highlighting?...shading?..or neither + if ( (entry->fHighLightFlag == FALSE) && (entry->fShadeFlag == FALSE) && (entry->fSecondaryShadeFlag == FALSE) ) + { + // neither + SetFontForeground( entry->ubForegroundColor ); + } + else if ( (entry->fHighLightFlag == TRUE) ) + { + // highlight + SetFontForeground( entry->ubHighLight ); + } + else if ( (entry->fSecondaryShadeFlag == TRUE) ) + { + SetFontForeground( entry->ubSecondaryShade ); + } + else + { + //shading + SetFontForeground( entry->ubShade ); + } + + // set background + SetFontBackground( entry->ubBackgroundColor ); + + // copy string + wcsncpy( sString, entry->pString, wcslen( entry->pString ) + 1 ); + + // centering? + if ( box->uiFlags & POPUP_BOX_FLAG_CENTER_TEXT ) + { + INT16 sLeft = box->Position.iX + box->uiLeftMargin; + INT16 sTop = box->Position.iY + uiCount * GetFontHeight( entry->uiFont ) + box->uiTopMargin + uiCount * box->uiLineSpace; + INT16 sWidth = box->Dimensions.iRight - (box->uiRightMargin + box->uiLeftMargin + 2); + INT16 sHeight = GetFontHeight( entry->uiFont ); + FindFontCenterCoordinates( sLeft, sTop, sWidth, sHeight, (sString), ((INT32)entry->uiFont), &uX, &uY ); + } + else + { + uX = box->Position.iX + box->uiLeftMargin + box->uiSecondColumnCurrentOffset*i; + uY = ((INT16)(box->Position.iY + uiCount * GetFontHeight( entry->uiFont ) + box->uiTopMargin + uiCount * box->uiLineSpace)); + } + + // print + mprintf( uX, uY, entry->pString ); + } + } + } + + for ( uiCount = 0; uiCount < MAX_POPUP_BOX_STRING_COUNT; uiCount++ ) + { + // there is secondary text in this line? + if ( box->pSecondColumnString[uiCount] ) + { + // set font + SetFont( box->pSecondColumnString[uiCount]->uiFont ); + + // are we highlighting?...shading?..or neither + if ( (box->pSecondColumnString[uiCount]->fHighLightFlag == FALSE) && (box->pSecondColumnString[uiCount]->fShadeFlag == FALSE) ) + { + // neither + SetFontForeground( box->pSecondColumnString[uiCount]->ubForegroundColor ); + } + else if ( (box->pSecondColumnString[uiCount]->fHighLightFlag == TRUE) ) + { + // highlight + SetFontForeground( box->pSecondColumnString[uiCount]->ubHighLight ); + } + else + { + //shading + SetFontForeground( box->pSecondColumnString[uiCount]->ubShade ); + } + + // set background + SetFontBackground( box->pSecondColumnString[uiCount]->ubBackgroundColor ); + + // copy string + wcsncpy( sString, box->pSecondColumnString[uiCount]->pString, wcslen( box->pSecondColumnString[uiCount]->pString ) + 1 ); + + // centering? + if ( box->uiFlags & POPUP_BOX_FLAG_CENTER_TEXT ) + { + FindFontCenterCoordinates( ((INT16)(box->Position.iX + box->uiLeftMargin)), ((INT16)(box->Position.iY + uiCount * GetFontHeight( box->pSecondColumnString[uiCount]->uiFont ) + box->uiTopMargin + uiCount * box->uiLineSpace)), ((INT16)(box->Dimensions.iRight - (box->uiRightMargin + box->uiLeftMargin + 2))), ((INT16)GetFontHeight( box->pSecondColumnString[uiCount]->uiFont )), (sString), ((INT32)box->pSecondColumnString[uiCount]->uiFont), &uX, &uY ); + } + else + { + uX = ((INT16)(box->Position.iX + box->uiLeftMargin + box->uiSecondColumnCurrentOffset + box->usSecondColumnOffsetAdjustment)); + uY = ((INT16)(box->Position.iY + uiCount * GetFontHeight( box->pSecondColumnString[uiCount]->uiFont ) + box->uiTopMargin + uiCount * box->uiLineSpace)); + } + + // print + mprintf( uX, uY, box->pSecondColumnString[uiCount]->pString ); + } } - // there is secondary text in this line? - if(PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]) + if ( box->uiBuffer != guiSAVEBUFFER ) { - // set font - SetFont(PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->uiFont); - - // are we highlighting?...shading?..or neither - if( ( PopUpBoxList[ uiCounter ]->pSecondColumnString[ uiCount ]->fHighLightFlag == FALSE )&&( PopUpBoxList[ uiCounter ]->pSecondColumnString[ uiCount ]->fShadeFlag == FALSE) ) - { - // neither - SetFontForeground(PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->ubForegroundColor); - } - else if( ( PopUpBoxList[ uiCounter ]->pSecondColumnString[ uiCount ]->fHighLightFlag == TRUE ) ) - { - // highlight - SetFontForeground(PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->ubHighLight); - } - else - { - //shading - SetFontForeground(PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->ubShade); - } - - // set background - SetFontBackground(PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->ubBackgroundColor); - - // copy string - wcsncpy(sString, PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->pString, wcslen(PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->pString)+1); - - // centering? - if(PopUpBoxList[uiCounter]->uiFlags & POPUP_BOX_FLAG_CENTER_TEXT) - { - FindFontCenterCoordinates(((INT16)(PopUpBoxList[uiCounter]->Position.iX+PopUpBoxList[uiCounter]->uiLeftMargin)),((INT16)(PopUpBoxList[uiCounter]->Position.iY+uiCount*GetFontHeight(PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->uiFont)+PopUpBoxList[uiCounter]->uiTopMargin+uiCount*PopUpBoxList[uiCounter]->uiLineSpace)),((INT16)(PopUpBoxList[uiCounter]->Dimensions.iRight-(PopUpBoxList[uiCounter]->uiRightMargin+PopUpBoxList[uiCounter]->uiLeftMargin+2))),((INT16)GetFontHeight(PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->uiFont)),(sString),((INT32)PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->uiFont) ,&uX, &uY); - } - else - { - uX=((INT16)(PopUpBoxList[uiCounter]->Position.iX+PopUpBoxList[uiCounter]->uiLeftMargin + PopUpBoxList[uiCounter]->uiSecondColumnCurrentOffset + PopUpBoxList[uiCounter]->usSecondColumnOffsetAdjustment)); - uY=((INT16)(PopUpBoxList[uiCounter]->Position.iY+uiCount*GetFontHeight(PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->uiFont)+PopUpBoxList[uiCounter]->uiTopMargin+uiCount*PopUpBoxList[uiCounter]->uiLineSpace)); - } - - // print - mprintf(uX,uY,PopUpBoxList[uiCounter]->pSecondColumnString[uiCount]->pString); - } - } - - - if( PopUpBoxList[uiCounter]->uiBuffer != guiSAVEBUFFER ) - { - InvalidateRegion( PopUpBoxList[uiCounter]->Position.iX+PopUpBoxList[uiCounter]->uiLeftMargin-1, PopUpBoxList[uiCounter]->Position.iY+PopUpBoxList[uiCounter]->uiTopMargin, PopUpBoxList[uiCounter]->Position.iX+PopUpBoxList[uiCounter]->Dimensions.iRight-PopUpBoxList[uiCounter]->uiRightMargin,PopUpBoxList[uiCounter]->Position.iY+PopUpBoxList[uiCounter]->Dimensions.iBottom-PopUpBoxList[uiCounter]->uiBottomMargin ); + InvalidateRegion( box->Position.iX + box->uiLeftMargin - 1, box->Position.iY + box->uiTopMargin, box->Position.iX + box->Dimensions.iRight - box->uiRightMargin, box->Position.iY + box->Dimensions.iBottom - box->uiBottomMargin ); } - SetFontDestBuffer(FRAME_BUFFER, 0,0,SCREEN_WIDTH, SCREEN_HEIGHT,FALSE); + SetFontDestBuffer( FRAME_BUFFER, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, FALSE ); - return TRUE; + return TRUE; } -void ResizeBoxToText(INT32 hBoxHandle) +void ResizeBoxToText( INT32 hBoxHandle ) { // run through lines of text in box and size box width to longest line plus margins // height is sum of getfontheight of each line+ spacing - INT32 iWidth=0; - INT32 iHeight=0; - INT32 iCurrString=0; + INT32 iWidth = 0; + INT32 iHeight = 0; + INT32 iCurrString = 0; INT32 iSecondColumnLength = 0; - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; - if(!PopUpBoxList[hBoxHandle]) + if ( !PopUpBoxList[hBoxHandle] ) return; - ResizeBoxForSecondStrings( hBoxHandle ); + if ( hBoxHandle == ghMoveBox ) + { + ResizeStrategicMvtBoxForSecondStrings( hBoxHandle ); + } + else + { + ResizeBoxForSecondStrings( hBoxHandle ); + } - iHeight=PopUpBoxList[hBoxHandle]->uiTopMargin+PopUpBoxList[hBoxHandle]->uiBottomMargin; + auto box = PopUpBoxList[hBoxHandle]; + const UINT32 margins = box->uiLeftMargin + box->uiRightMargin; + + iHeight = box->uiTopMargin + box->uiBottomMargin; for ( iCurrString = 0; iCurrString < MAX_POPUP_BOX_STRING_COUNT; iCurrString++ ) { - if ( PopUpBoxList[hBoxHandle]->Text[iCurrString] != NULL) + if ( box->Text[0][iCurrString] != NULL ) { - if( PopUpBoxList[hBoxHandle]->pSecondColumnString[iCurrString] != NULL ) + + if ( box->Text[3][iCurrString] != NULL && wcscmp( box->Text[3][iCurrString]->pString, L"") != 0) { - iSecondColumnLength = StringPixLength( PopUpBoxList[hBoxHandle]->pSecondColumnString[iCurrString]->pString,PopUpBoxList[ hBoxHandle]->pSecondColumnString[ iCurrString ]->uiFont ); - if( PopUpBoxList[hBoxHandle]->uiSecondColumnCurrentOffset + iSecondColumnLength + PopUpBoxList[hBoxHandle]->uiLeftMargin+PopUpBoxList[hBoxHandle]->uiRightMargin > ( ( UINT32 ) iWidth ) ) + iSecondColumnLength = StringPixLength( box->Text[3][iCurrString]->pString, box->Text[3][iCurrString]->uiFont ); + if ( 3*box->uiSecondColumnCurrentOffset + iSecondColumnLength + margins > iWidth ) { - iWidth = PopUpBoxList[hBoxHandle]->uiSecondColumnCurrentOffset + iSecondColumnLength + PopUpBoxList[hBoxHandle]->uiLeftMargin+PopUpBoxList[hBoxHandle]->uiRightMargin; + iWidth = 3*box->uiSecondColumnCurrentOffset + iSecondColumnLength + margins; + } + } + else if ( box->Text[2][iCurrString] != NULL && wcscmp( box->Text[2][iCurrString]->pString, L"" ) != 0 ) + { + iSecondColumnLength = StringPixLength( box->Text[2][iCurrString]->pString, box->Text[2][iCurrString]->uiFont ); + if ( 2*box->uiSecondColumnCurrentOffset + iSecondColumnLength + margins > iWidth ) + { + iWidth = 2*box->uiSecondColumnCurrentOffset + iSecondColumnLength + margins; + } + } + else if ( box->Text[1][iCurrString] != NULL && wcscmp( box->Text[1][iCurrString]->pString, L"" ) != 0 ) + { + iSecondColumnLength = StringPixLength( box->Text[1][iCurrString]->pString, box->Text[1][iCurrString]->uiFont ); + if ( box->uiSecondColumnCurrentOffset + iSecondColumnLength + margins > iWidth ) + { + iWidth = box->uiSecondColumnCurrentOffset + iSecondColumnLength + margins; } } - if( ( StringPixLength(PopUpBoxList[hBoxHandle]->Text[iCurrString]->pString,PopUpBoxList[hBoxHandle]->Text[iCurrString]->uiFont ) + PopUpBoxList[hBoxHandle]->uiLeftMargin+PopUpBoxList[hBoxHandle]->uiRightMargin ) > ( (UINT32) iWidth ) ) - iWidth=StringPixLength(PopUpBoxList[hBoxHandle]->Text[iCurrString]->pString,PopUpBoxList[hBoxHandle]->Text[iCurrString]->uiFont ) + PopUpBoxList[hBoxHandle]->uiLeftMargin+PopUpBoxList[hBoxHandle]->uiRightMargin; + + if ( box->pSecondColumnString[iCurrString] != NULL ) + { + iSecondColumnLength = StringPixLength( box->pSecondColumnString[iCurrString]->pString, box->pSecondColumnString[iCurrString]->uiFont ); + if ( box->uiSecondColumnCurrentOffset + iSecondColumnLength + margins > iWidth ) + { + iWidth = box->uiSecondColumnCurrentOffset + iSecondColumnLength + margins; + } + } + + INT32 iFirstColumnLength = StringPixLength( box->Text[0][iCurrString]->pString, box->Text[0][iCurrString]->uiFont ) + margins; + if ( iFirstColumnLength > iWidth ) + iWidth = iFirstColumnLength; //vertical - iHeight+=GetFontHeight(PopUpBoxList[hBoxHandle]->Text[iCurrString]->uiFont)+PopUpBoxList[hBoxHandle]->uiLineSpace; + iHeight += GetFontHeight( box->Text[0][iCurrString]->uiFont ) + box->uiLineSpace; } else { @@ -1614,14 +1970,14 @@ void ResizeBoxToText(INT32 hBoxHandle) } // Flugente we shouldn't have added more popup options than we can display anyway, but I have no idea where to stop that, so at least we can fix this - PopUpBoxList[hBoxHandle]->Dimensions.iBottom = min( iHeight, SCREEN_HEIGHT - PopUpBoxList[hBoxHandle]->Position.iY); - PopUpBoxList[hBoxHandle]->Dimensions.iRight = min( iWidth, SCREEN_WIDTH - PopUpBoxList[hBoxHandle]->Position.iX ); + box->Dimensions.iBottom = min( iHeight, SCREEN_HEIGHT - box->Position.iY ); + box->Dimensions.iRight = min( iWidth, SCREEN_WIDTH - box->Position.iX ); // Constrain popup box height to background graphics max height. Otherwise we get blue graphics glitches - const auto popupBoxHeight = PopUpBoxList[hBoxHandle]->Dimensions.iBottom - PopUpBoxList[hBoxHandle]->Dimensions.iTop; - if (popupBoxHeight > 480) + const auto popupBoxHeight = box->Dimensions.iBottom - box->Dimensions.iTop; + if ( popupBoxHeight > 480 ) { - PopUpBoxList[hBoxHandle]->Dimensions.iBottom = PopUpBoxList[hBoxHandle]->Dimensions.iTop + 480; + box->Dimensions.iBottom = box->Dimensions.iTop + 480; } } @@ -1666,7 +2022,6 @@ void HideAllBoxes( void ) } - void RemoveCurrentBoxPrimaryText( INT32 hStringHandle ) { if ( ( guiCurrentBox < 0 ) || ( guiCurrentBox >= MAX_POPUP_BOX_COUNT ) ) @@ -1676,15 +2031,15 @@ void RemoveCurrentBoxPrimaryText( INT32 hStringHandle ) Assert( hStringHandle < MAX_POPUP_BOX_STRING_COUNT ); // remove & release primary text - if(PopUpBoxList[guiCurrentBox]->Text[hStringHandle] != NULL) + if(PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle] != NULL) { - if ( PopUpBoxList[guiCurrentBox]->Text[hStringHandle]->pString ) + if ( PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle]->pString ) { - MemFree(PopUpBoxList[guiCurrentBox]->Text[hStringHandle]->pString); + MemFree(PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle]->pString); } - MemFree(PopUpBoxList[guiCurrentBox]->Text[hStringHandle]); - PopUpBoxList[guiCurrentBox]->Text[hStringHandle]=NULL; + MemFree(PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle]); + PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle]=NULL; } } @@ -1708,3 +2063,34 @@ void RemoveCurrentBoxSecondaryText( INT32 hStringHandle ) PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle]=NULL; } } + +void RemoveCurrentBoxText( INT32 hStringHandle, UINT8 column ) +{ + if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) || column >= MAX_POPUP_BOX_COLUMNS ) + return; + + Assert( PopUpBoxList[guiCurrentBox] != NULL ); + Assert( hStringHandle < MAX_POPUP_BOX_STRING_COUNT ); + + // remove & release text + auto textColumn = PopUpBoxList[guiCurrentBox]->Text[column]; + + if ( textColumn[hStringHandle] != NULL ) + { + if ( textColumn[hStringHandle]->pString ) + { + MemFree( textColumn[hStringHandle]->pString ); + } + + MemFree( textColumn[hStringHandle] ); + textColumn[hStringHandle] = NULL; + } +} + +UINT32 GetBoxSecondColumnCurrentOffset( INT32 hBoxHandle ) +{ + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) + return 0; + + return PopUpBoxList[hBoxHandle]->uiSecondColumnCurrentOffset; +} diff --git a/Utils/PopUpBox.h b/Utils/PopUpBox.h index 4f3b6dd7..a140b179 100644 --- a/Utils/PopUpBox.h +++ b/Utils/PopUpBox.h @@ -9,6 +9,7 @@ #define MAX_POPUP_BOX_COUNT 32 #define MAX_POPUP_BOX_STRING_COUNT 128 // worst case = 45: move menu with 20 soldiers, each on different squad + overhead +#define MAX_POPUP_BOX_COLUMNS 4 // PopUpBox Flags #define POPUP_BOX_FLAG_CLIP_TEXT 1 @@ -51,7 +52,8 @@ struct popupbox{ BOOLEAN fUpdated; BOOLEAN fShowBox; - POPUPSTRINGPTR Text[ MAX_POPUP_BOX_STRING_COUNT ]; + POPUPSTRINGPTR Text[MAX_POPUP_BOX_COLUMNS][ MAX_POPUP_BOX_STRING_COUNT ]; + // TODO Remove pSecondColumnString POPUPSTRINGPTR pSecondColumnString[ MAX_POPUP_BOX_STRING_COUNT ]; }; @@ -76,6 +78,8 @@ void SetBoxPosition(INT32 hBoxHandle,SGPPoint Position); void GetBoxPosition( INT32 hBoxHandle, SGPPoint *Position ); UINT32 GetNumberOfLinesOfTextInBox( INT32 hBoxHandle ); UINT32 GetNumberOfSecondaryLinesOfTextInBox(INT32 hBoxHandle); +UINT32 GetTotalNumberOfLinesOfTextInBox( INT32 hBoxHandle ); +UINT32 GetBoxSecondColumnCurrentOffset( INT32 hBoxHandle ); void SetBoxSize( INT32 hBoxHandle, SGPRect Dimensions ); void GetBoxSize( INT32 hBoxHandle, SGPRect *Dimensions ); void SetBoxFlags( INT32 hBoxHandle, UINT32 uiFlags); @@ -96,8 +100,10 @@ void SetBoxHighLight(INT32 hBoxHandle, UINT8 ubColor); void SetBoxShade(INT32 hBoxHandle, UINT8 ubColor); void ShadeStringInBox( INT32 hBoxHandle, INT32 iLineNumber ); void UnShadeStringInBox( INT32 hBoxHandle, INT32 iLineNumber ); -void HighLightLine(INT32 hStringHandle); -void HighLightBoxLine( INT32 hBoxHandle, INT32 iLineNumber ); +void HighLightLine( INT32 hStringHandle, UINT8 column ); +void HighLight2ndLine( INT32 hStringHandle ); +void HighLightBoxLine( INT32 hBoxHandle, INT32 iLineNumber, UINT8 column = 0 ); +void HighLight2ndBoxLine( INT32 hBoxHandle, INT32 iLineNumber ); void UnHighLightLine(INT32 hStringHandle); void UnHighLightBox(INT32 hBoxHandle); void RemoveOneCurrentBoxString(INT32 hStringHandle, BOOLEAN fFillGaps); @@ -110,6 +116,9 @@ void DisplayOnePopupBox( UINT32 uiIndex, UINT32 uiBuffer ); void SetCurrentBox(INT32 hBoxHandle); void GetCurrentBox(INT32 *hBoxHandle); +void AddStringToBoxColumn( UINT32 *hStringHandle, STR16 pString, UINT8 column ); +void AddColumnMonoString( UINT32 *hStringHandle, STR16 pString, UINT8 column ); + // resize this box to the text it contains void ResizeBoxToText(INT32 hBoxHandle); @@ -162,6 +171,13 @@ void SetBoxSecondColumnShade(INT32 hBoxHandle, UINT8 ubColor); // Manual adjustment for 2nd column offset, eg. when 1st column has a title text that's wider than the rest and you want to move 2nd column texts towards the 1st column some. void SetBoxSecondColumnOffsetAdjustment(INT32 hBoxHandle, INT16 x); +// Set attributes by column +void SetBoxColumnForeground( INT32 hBoxHandle, UINT8 ubColor, UINT8 column ); +void SetBoxColumnBackground( INT32 hBoxHandle, UINT8 ubColor, UINT8 column ); +void SetBoxColumnHighLight( INT32 hBoxHandle, UINT8 ubColor, UINT8 column ); +void SetBoxColumnShade( INT32 hBoxHandle, UINT8 ubColor, UINT8 column ); +void SetBoxColumnFont( INT32 hBoxHandle, UINT32 uiFont, UINT8 column ); + // secondary shades for boxes void UnSecondaryShadeStringInBox( INT32 hBoxHandle, INT32 iLineNumber ); @@ -172,4 +188,4 @@ void SetBoxSecondaryShade( INT32 iBox, UINT8 ubColor ); // min width for box void SpecifyBoxMinWidth( INT32 hBoxHandle, INT32 iMinWidth ); -#endif \ No newline at end of file +#endif From 36a84ffe5937f0e1b474953f9ff6d26388cbe7e4 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Sun, 13 Apr 2025 21:37:14 +0300 Subject: [PATCH 181/192] Remove pSecondColumnString * Use the new columns added to Text instead * Changed most functions to allow choosing a column * Removed unneeded SecondColumn specific functions to lessen code duplication * Lots of formatting changes to Popupbox.cpp, indentation was messed up in majority of the functions --- .../Map Screen Interface TownMine Info.cpp | 11 +- Strategic/Map Screen Interface.cpp | 42 +- Utils/PopUpBox.cpp | 1262 ++++++----------- Utils/PopUpBox.h | 48 +- 4 files changed, 508 insertions(+), 855 deletions(-) diff --git a/Strategic/Map Screen Interface TownMine Info.cpp b/Strategic/Map Screen Interface TownMine Info.cpp index 17294d0a..6fd9748c 100644 --- a/Strategic/Map Screen Interface TownMine Info.cpp +++ b/Strategic/Map Screen Interface TownMine Info.cpp @@ -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 diff --git a/Strategic/Map Screen Interface.cpp b/Strategic/Map Screen Interface.cpp index ecca6342..4812b167 100644 --- a/Strategic/Map Screen Interface.cpp +++ b/Strategic/Map Screen Interface.cpp @@ -3796,27 +3796,27 @@ void AddStringsToMoveBox( void ) // add title GetShortSectorString( sSelMapX, sSelMapY, sStringB ); swprintf( sString, L"%s %s", pMovementMenuStrings[ 0 ], sStringB ); - AddStringToBoxColumn(&hStringHandle, sString, 0 ); + AddMonoString(&hStringHandle, sString, 0 ); // Add empty lines to other columns for ( size_t i = 1; i < MAX_POPUP_BOX_COLUMNS; i++ ) { - AddStringToBoxColumn( &hStringHandle, L"", i); + AddMonoString( &hStringHandle, L"", i); } // blank line for ( size_t i = 0; i < MAX_POPUP_BOX_COLUMNS; i++ ) { - AddStringToBoxColumn( &hStringHandle, L"", i ); + AddMonoString( &hStringHandle, L"", i ); } // add Select all line if (giNumberOfSquadsInSectorMoving > 1) { swprintf(sString, L"%s", pMovementMenuStrings[4]); - AddStringToBoxColumn( &hStringHandle, sString, 0 ); + AddMonoString( &hStringHandle, sString, 0 ); for ( size_t i = 1; i < MAX_POPUP_BOX_COLUMNS; i++ ) { - AddStringToBoxColumn( &hStringHandle, L"", i ); + AddMonoString( &hStringHandle, L"", i ); } } @@ -3842,21 +3842,21 @@ void AddStringsToMoveBox( void ) // Determine which column to add if (!isFirstColumnFull) { - AddStringToBoxColumn( &hStringHandle, sString, 0 ); + AddMonoString( &hStringHandle, sString, 0 ); } else if ( !secondColumnFull ) { - AddStringToBoxColumn( &hStringHandle, sString, 1 ); + AddMonoString( &hStringHandle, sString, 1 ); gColumnEntries[1] += 1; } else if ( !thirdColumnFull ) { - AddStringToBoxColumn( &hStringHandle, sString, 2 ); + AddMonoString( &hStringHandle, sString, 2 ); gColumnEntries[2] += 1; } else { - AddStringToBoxColumn( &hStringHandle, sString, 3 ); + AddMonoString( &hStringHandle, sString, 3 ); gColumnEntries[3] += 1; } entries += 1; @@ -3878,21 +3878,21 @@ void AddStringsToMoveBox( void ) if ( !isFirstColumnFull ) { - AddStringToBoxColumn( &hStringHandle, sString, 0 ); + AddMonoString( &hStringHandle, sString, 0 ); } else if ( !secondColumnFull ) { - AddStringToBoxColumn( &hStringHandle, sString, 1 ); + AddMonoString( &hStringHandle, sString, 1 ); gColumnEntries[1] += 1; } else if ( !thirdColumnFull ) { - AddStringToBoxColumn( &hStringHandle, sString, 2 ); + AddMonoString( &hStringHandle, sString, 2 ); gColumnEntries[2] += 1; } else { - AddStringToBoxColumn( &hStringHandle, sString, 3 ); + AddMonoString( &hStringHandle, sString, 3 ); gColumnEntries[3] += 1; } entries += 1; @@ -3930,21 +3930,21 @@ void AddStringsToMoveBox( void ) if ( !isFirstColumnFull ) { - AddStringToBoxColumn( &hStringHandle, sString, 0 ); + AddMonoString( &hStringHandle, sString, 0 ); } else if ( !secondColumnFull ) { - AddStringToBoxColumn( &hStringHandle, sString, 1 ); + AddMonoString( &hStringHandle, sString, 1 ); gColumnEntries[1] += 1; } else if ( !thirdColumnFull ) { - AddStringToBoxColumn( &hStringHandle, sString, 2 ); + AddMonoString( &hStringHandle, sString, 2 ); gColumnEntries[2] += 1; } else { - AddStringToBoxColumn( &hStringHandle, sString, 3 ); + AddMonoString( &hStringHandle, sString, 3 ); gColumnEntries[3] += 1; } entries += 1; @@ -3966,21 +3966,21 @@ void AddStringsToMoveBox( void ) if ( !isFirstColumnFull ) { - AddStringToBoxColumn( &hStringHandle, sString, 0 ); + AddMonoString( &hStringHandle, sString, 0 ); } else if ( !secondColumnFull ) { - AddStringToBoxColumn( &hStringHandle, sString, 1 ); + AddMonoString( &hStringHandle, sString, 1 ); gColumnEntries[1] += 1; } else if ( !thirdColumnFull ) { - AddStringToBoxColumn( &hStringHandle, sString, 2 ); + AddMonoString( &hStringHandle, sString, 2 ); gColumnEntries[2] += 1; } else { - AddStringToBoxColumn( &hStringHandle, sString, 3 ); + AddMonoString( &hStringHandle, sString, 3 ); gColumnEntries[3] += 1; } entries += 1; diff --git a/Utils/PopUpBox.cpp b/Utils/PopUpBox.cpp index 168cad0a..b0bd06a4 100644 --- a/Utils/PopUpBox.cpp +++ b/Utils/PopUpBox.cpp @@ -1,5 +1,5 @@ #include "PopUpBox.h" - #include "sysutil.h" +#include "sysutil.h" #define BORDER_WIDTH 16 @@ -13,8 +13,8 @@ #define BOTTOM_RIGHT_CORNER 3 -BOOLEAN DrawBox(UINT32 uiCounter); -BOOLEAN DrawBoxText(UINT32 uiCounter); +BOOLEAN DrawBox( UINT32 uiCounter ); +BOOLEAN DrawBoxText( UINT32 uiCounter ); void RemoveCurrentBoxPrimaryText( INT32 hStringHandle ); void RemoveCurrentBoxSecondaryText( INT32 hStringHandle ); @@ -29,105 +29,101 @@ void InitPopUpBoxList() } -void InitPopUpBox(INT32 hBoxHandle) +void InitPopUpBox( INT32 hBoxHandle ) { - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[ hBoxHandle ] ); - memset(PopUpBoxList[hBoxHandle], 0, sizeof(PopUpBo)); + Assert( PopUpBoxList[hBoxHandle] ); + memset( PopUpBoxList[hBoxHandle], 0, sizeof( PopUpBo ) ); } -void SetLineSpace(INT32 hBoxHandle, UINT32 uiLineSpace) +void SetLineSpace( INT32 hBoxHandle, UINT32 uiLineSpace ) { - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[ hBoxHandle ] ); - PopUpBoxList[hBoxHandle]->uiLineSpace=uiLineSpace; - return; + Assert( PopUpBoxList[hBoxHandle] ); + PopUpBoxList[hBoxHandle]->uiLineSpace = uiLineSpace; + return; } UINT32 GetLineSpace( INT32 hBoxHandle ) { - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) - return( 0 ); + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) + return(0); - Assert( PopUpBoxList[ hBoxHandle ] ); + Assert( PopUpBoxList[hBoxHandle] ); // return number of pixels between lines for this box - return( PopUpBoxList[hBoxHandle]->uiLineSpace ); + return(PopUpBoxList[hBoxHandle]->uiLineSpace); } void SpecifyBoxMinWidth( INT32 hBoxHandle, INT32 iMinWidth ) { - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[ hBoxHandle ] ); + auto box = PopUpBoxList[hBoxHandle]; + Assert( box ); - PopUpBoxList[hBoxHandle]->uiBoxMinWidth = iMinWidth; + box->uiBoxMinWidth = iMinWidth; // check if the box is currently too small - if( PopUpBoxList[hBoxHandle]->Dimensions.iRight < iMinWidth ) + if ( box->Dimensions.iRight < iMinWidth ) { - PopUpBoxList[hBoxHandle]->Dimensions.iRight = iMinWidth; + box->Dimensions.iRight = iMinWidth; } return; } -BOOLEAN CreatePopUpBox(INT32 *phBoxHandle, SGPRect Dimensions, SGPPoint Position, UINT32 uiFlags) +BOOLEAN CreatePopUpBox( INT32 *phBoxHandle, SGPRect Dimensions, SGPPoint Position, UINT32 uiFlags ) { - INT32 iCounter=0; - INT32 iCount=0; - PopUpBoxPt pBox=NULL; + INT32 iCounter = 0; + INT32 iCount = 0; + PopUpBoxPt pBox = NULL; // find first free box - for(iCounter=0; ( iCounter < MAX_POPUP_BOX_COUNT ) && ( PopUpBoxList[iCounter] != NULL ); iCounter++); + for ( iCounter = 0; (iCounter < MAX_POPUP_BOX_COUNT) && (PopUpBoxList[iCounter] != NULL); iCounter++ ); - if( iCounter >= MAX_POPUP_BOX_COUNT ) + if ( iCounter >= MAX_POPUP_BOX_COUNT ) { // ran out of available popup boxes - probably not freeing them up right! - Assert(0); + Assert( 0 ); return FALSE; } - iCount=iCounter; - *phBoxHandle=iCount; + iCount = iCounter; + *phBoxHandle = iCount; - pBox= (PopUpBoxPt) MemAlloc(sizeof(PopUpBo)); - if (pBox == NULL) + pBox = (PopUpBoxPt)MemAlloc( sizeof( PopUpBo ) ); + if ( pBox == NULL ) { return FALSE; } - PopUpBoxList[iCount]=pBox; + PopUpBoxList[iCount] = pBox; - InitPopUpBox(iCount); - SetBoxPosition(iCount, Position); - SetBoxSize(iCount, Dimensions); - SetBoxFlags(iCount, uiFlags); + InitPopUpBox( iCount ); + SetBoxPosition( iCount, Position ); + SetBoxSize( iCount, Dimensions ); + SetBoxFlags( iCount, uiFlags ); for ( UINT8 col = 0; col < MAX_POPUP_BOX_COLUMNS; ++col ) { - for ( iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; ++iCounter) + for ( iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; ++iCounter ) { PopUpBoxList[iCount]->Text[col][iCounter] = NULL; } } - for ( iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++ ) - { - PopUpBoxList[iCount]->pSecondColumnString[iCounter] = NULL; - } - - SetCurrentBox(iCount); + SetCurrentBox( iCount ); SpecifyBoxMinWidth( iCount, 0 ); SetBoxSecondColumnMinimumOffset( iCount, 0 ); SetBoxSecondColumnCurrentOffset( iCount, 0 ); @@ -138,35 +134,37 @@ BOOLEAN CreatePopUpBox(INT32 *phBoxHandle, SGPRect Dimensions, SGPPoint Position } -void SetBoxFlags( INT32 hBoxHandle, UINT32 uiFlags) +void SetBoxFlags( INT32 hBoxHandle, UINT32 uiFlags ) { - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[ hBoxHandle ] ); + auto box = PopUpBoxList[hBoxHandle]; + Assert( box ); - PopUpBoxList[hBoxHandle]->uiFlags=uiFlags; - PopUpBoxList[hBoxHandle]->fUpdated = FALSE; + box->uiFlags = uiFlags; + box->fUpdated = FALSE; - return; + return; } -void SetMargins(INT32 hBoxHandle, UINT32 uiLeft, UINT32 uiTop, UINT32 uiBottom, UINT32 uiRight) +void SetMargins( INT32 hBoxHandle, UINT32 uiLeft, UINT32 uiTop, UINT32 uiBottom, UINT32 uiRight ) { - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[ hBoxHandle ] ); + auto box = PopUpBoxList[hBoxHandle]; + Assert( box ); - PopUpBoxList[hBoxHandle]->uiLeftMargin=uiLeft; - PopUpBoxList[hBoxHandle]->uiRightMargin=uiRight; - PopUpBoxList[hBoxHandle]->uiTopMargin=uiTop; - PopUpBoxList[hBoxHandle]->uiBottomMargin=uiBottom; + box->uiLeftMargin = uiLeft; + box->uiRightMargin = uiRight; + box->uiTopMargin = uiTop; + box->uiBottomMargin = uiBottom; - PopUpBoxList[hBoxHandle]->fUpdated = FALSE; + box->fUpdated = FALSE; - return; + return; } @@ -174,183 +172,192 @@ UINT32 GetTopMarginSize( INT32 hBoxHandle ) { // return size of top margin, for mouse region offsets - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) - return( 0 ); + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) + return(0); - Assert( PopUpBoxList[ hBoxHandle ] ); + Assert( PopUpBoxList[hBoxHandle] ); - return( PopUpBoxList[hBoxHandle]->uiTopMargin ); + return(PopUpBoxList[hBoxHandle]->uiTopMargin); } -void ShadeStringInBox( INT32 hBoxHandle, INT32 iLineNumber ) +void ShadeStringInBox( INT32 hBoxHandle, INT32 iLineNumber, UINT8 column ) { // shade iLineNumber Line in box indexed by hBoxHandle if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[hBoxHandle] ); + auto box = PopUpBoxList[hBoxHandle]; + Assert( box ); - if ( PopUpBoxList[hBoxHandle]->Text[0][iLineNumber] != NULL ) + if ( box->Text[column][iLineNumber] != NULL ) { // set current box SetCurrentBox( hBoxHandle ); // shade line - PopUpBoxList[hBoxHandle]->Text[0][iLineNumber]->fShadeFlag = TRUE; + box->Text[column][iLineNumber]->fShadeFlag = TRUE; } } -void UnShadeStringInBox( INT32 hBoxHandle, INT32 iLineNumber ) +void UnShadeStringInBox( INT32 hBoxHandle, INT32 iLineNumber, UINT8 column ) { // unshade iLineNumber in box indexed by hBoxHandle - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[ hBoxHandle ] ); + auto box = PopUpBoxList[hBoxHandle]; + Assert( box ); - if( PopUpBoxList[hBoxHandle]->Text[0][iLineNumber]!=NULL) + if ( box->Text[column][iLineNumber] != NULL ) { // set current box SetCurrentBox( hBoxHandle ); // shade line - PopUpBoxList[hBoxHandle]->Text[0][iLineNumber]->fShadeFlag = FALSE; + box->Text[column][iLineNumber]->fShadeFlag = FALSE; } } -void SecondaryShadeStringInBox( INT32 hBoxHandle, INT32 iLineNumber ) +void SecondaryShadeStringInBox( INT32 hBoxHandle, INT32 iLineNumber, UINT8 column ) { // shade iLineNumber Line in box indexed by hBoxHandle - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[ hBoxHandle ] ); + auto box = PopUpBoxList[hBoxHandle]; + Assert( box ); - if( PopUpBoxList[hBoxHandle]->Text[0][iLineNumber]!=NULL) + if ( box->Text[column][iLineNumber] != NULL ) { // set current box SetCurrentBox( hBoxHandle ); // shade line - PopUpBoxList[hBoxHandle]->Text[0][iLineNumber]->fSecondaryShadeFlag = TRUE; + box->Text[column][iLineNumber]->fSecondaryShadeFlag = TRUE; } } -void UnSecondaryShadeStringInBox( INT32 hBoxHandle, INT32 iLineNumber ) +void UnSecondaryShadeStringInBox( INT32 hBoxHandle, INT32 iLineNumber, UINT8 column ) { // unshade iLineNumber in box indexed by hBoxHandle - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[ hBoxHandle ] ); + auto box = PopUpBoxList[hBoxHandle]; + Assert( box ); - if( PopUpBoxList[hBoxHandle]->Text[0][iLineNumber]!=NULL) + if ( box->Text[column][iLineNumber] != NULL ) { // set current box SetCurrentBox( hBoxHandle ); // shade line - PopUpBoxList[hBoxHandle]->Text[0][iLineNumber]->fSecondaryShadeFlag = FALSE; + box->Text[column][iLineNumber]->fSecondaryShadeFlag = FALSE; } } -void SetBoxBuffer(INT32 hBoxHandle, UINT32 uiBuffer) +void SetBoxBuffer( INT32 hBoxHandle, UINT32 uiBuffer ) { - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[ hBoxHandle ] ); + auto box = PopUpBoxList[hBoxHandle]; + Assert( box ); - PopUpBoxList[hBoxHandle]->uiBuffer=uiBuffer; + box->uiBuffer = uiBuffer; - PopUpBoxList[hBoxHandle]->fUpdated = FALSE; + box->fUpdated = FALSE; } -void SetBoxPosition( INT32 hBoxHandle,SGPPoint Position ) +void SetBoxPosition( INT32 hBoxHandle, SGPPoint Position ) { - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[ hBoxHandle ] ); + auto box = PopUpBoxList[hBoxHandle]; + Assert( box ); - PopUpBoxList[hBoxHandle]->Position.iX=Position.iX; - PopUpBoxList[hBoxHandle]->Position.iY=Position.iY; + box->Position.iX = Position.iX; + box->Position.iY = Position.iY; - PopUpBoxList[hBoxHandle]->fUpdated = FALSE; + box->fUpdated = FALSE; } void GetBoxPosition( INT32 hBoxHandle, SGPPoint *Position ) { - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[ hBoxHandle ] ); + auto box = PopUpBoxList[hBoxHandle]; + Assert( box ); - Position->iX = PopUpBoxList[hBoxHandle]->Position.iX; - Position->iY = PopUpBoxList[hBoxHandle]->Position.iY; + Position->iX = box->Position.iX; + Position->iY = box->Position.iY; } -void SetBoxSize(INT32 hBoxHandle,SGPRect Dimensions) +void SetBoxSize( INT32 hBoxHandle, SGPRect Dimensions ) { - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[ hBoxHandle ] ); + auto box = PopUpBoxList[hBoxHandle]; + Assert( box ); - PopUpBoxList[hBoxHandle]->Dimensions.iLeft=Dimensions.iLeft; - PopUpBoxList[hBoxHandle]->Dimensions.iBottom=Dimensions.iBottom; - PopUpBoxList[hBoxHandle]->Dimensions.iRight=Dimensions.iRight; - PopUpBoxList[hBoxHandle]->Dimensions.iTop=Dimensions.iTop; + box->Dimensions.iLeft = Dimensions.iLeft; + box->Dimensions.iBottom = Dimensions.iBottom; + box->Dimensions.iRight = Dimensions.iRight; + box->Dimensions.iTop = Dimensions.iTop; - PopUpBoxList[hBoxHandle]->fUpdated = FALSE; + box->fUpdated = FALSE; } void GetBoxSize( INT32 hBoxHandle, SGPRect *Dimensions ) { - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[ hBoxHandle ] ); + auto box = PopUpBoxList[hBoxHandle]; + Assert( box ); - Dimensions->iLeft = PopUpBoxList[hBoxHandle]->Dimensions.iLeft; - Dimensions->iBottom = PopUpBoxList[hBoxHandle]->Dimensions.iBottom; - Dimensions->iRight = PopUpBoxList[hBoxHandle]->Dimensions.iRight; - Dimensions->iTop = PopUpBoxList[hBoxHandle]->Dimensions.iTop; + Dimensions->iLeft = box->Dimensions.iLeft; + Dimensions->iBottom = box->Dimensions.iBottom; + Dimensions->iRight = box->Dimensions.iRight; + Dimensions->iTop = box->Dimensions.iTop; } -void SetBorderType(INT32 hBoxHandle, INT32 iBorderObjectIndex) +void SetBorderType( INT32 hBoxHandle, INT32 iBorderObjectIndex ) { - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[ hBoxHandle ] ); - PopUpBoxList[hBoxHandle]->iBorderObjectIndex=iBorderObjectIndex; + Assert( PopUpBoxList[hBoxHandle] ); + PopUpBoxList[hBoxHandle]->iBorderObjectIndex = iBorderObjectIndex; } -void SetBackGroundSurface(INT32 hBoxHandle, INT32 iBackGroundSurfaceIndex) +void SetBackGroundSurface( INT32 hBoxHandle, INT32 iBackGroundSurfaceIndex ) { - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[ hBoxHandle ] ); - PopUpBoxList[hBoxHandle]->iBackGroundSurface=iBackGroundSurfaceIndex; + Assert( PopUpBoxList[hBoxHandle] ); + PopUpBoxList[hBoxHandle]->iBackGroundSurface = iBackGroundSurfaceIndex; } -// adds a FIRST column string to the CURRENT popup box -void AddMonoString( UINT32 *hStringHandle, STR16 pString ) +// Adds a string to the first available slot in the column +void AddMonoString( UINT32 *hStringHandle, STR16 pString, UINT8 column ) { STR16 pLocalString = NULL; POPUPSTRINGPTR pStringSt = NULL; @@ -360,10 +367,11 @@ void AddMonoString( UINT32 *hStringHandle, STR16 pString ) if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[guiCurrentBox] != NULL ); + auto box = PopUpBoxList[guiCurrentBox]; + Assert( box != NULL ); // find first free slot in list - for ( iCounter = 0; (iCounter < MAX_POPUP_BOX_STRING_COUNT) && (PopUpBoxList[guiCurrentBox]->Text[0][iCounter] != NULL); iCounter++ ); + for ( iCounter = 0; (iCounter < MAX_POPUP_BOX_STRING_COUNT) && (box->Text[column][iCounter] != NULL); iCounter++ ); if ( iCounter >= MAX_POPUP_BOX_STRING_COUNT ) { @@ -382,17 +390,17 @@ void AddMonoString( UINT32 *hStringHandle, STR16 pString ) wcscpy( pLocalString, pString ); - RemoveCurrentBoxPrimaryText( iCounter ); + RemoveCurrentBoxText( iCounter, column ); - PopUpBoxList[guiCurrentBox]->Text[0][iCounter] = pStringSt; - PopUpBoxList[guiCurrentBox]->Text[0][iCounter]->fColorFlag = FALSE; - PopUpBoxList[guiCurrentBox]->Text[0][iCounter]->pString = pLocalString; - PopUpBoxList[guiCurrentBox]->Text[0][iCounter]->fShadeFlag = FALSE; - PopUpBoxList[guiCurrentBox]->Text[0][iCounter]->fHighLightFlag = FALSE; - PopUpBoxList[guiCurrentBox]->Text[0][iCounter]->fSecondaryShadeFlag = FALSE; + box->Text[column][iCounter] = pStringSt; + box->Text[column][iCounter]->fColorFlag = FALSE; + box->Text[column][iCounter]->pString = pLocalString; + box->Text[column][iCounter]->fShadeFlag = FALSE; + box->Text[column][iCounter]->fHighLightFlag = FALSE; + box->Text[column][iCounter]->fSecondaryShadeFlag = FALSE; *hStringHandle = iCounter; - PopUpBoxList[guiCurrentBox]->fUpdated = FALSE; + box->fUpdated = FALSE; return; } @@ -400,232 +408,97 @@ void AddMonoString( UINT32 *hStringHandle, STR16 pString ) // Adds string to the current popup box 2nd column. !!! String's position is the LAST used position in the 1st column !!! void AddSecondColumnMonoString( UINT32 *hStringHandle, STR16 pString ) { - STR16 pLocalString=NULL; - POPUPSTRINGPTR pStringSt=NULL; - INT32 iCounter=0; + STR16 pLocalString = NULL; + POPUPSTRINGPTR pStringSt = NULL; + INT32 iCounter = 0; - if ( ( guiCurrentBox < 0 ) || ( guiCurrentBox >= MAX_POPUP_BOX_COUNT ) ) + if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[guiCurrentBox] != NULL ); + auto box = PopUpBoxList[guiCurrentBox]; + Assert( box != NULL ); // find the LAST USED text string index - for( iCounter = 0; ( iCounter + 1 < MAX_POPUP_BOX_STRING_COUNT ) && ( PopUpBoxList[guiCurrentBox]->Text[0][ iCounter + 1 ] != NULL ); iCounter++ ); + for ( iCounter = 0; (iCounter + 1 < MAX_POPUP_BOX_STRING_COUNT) && (box->Text[0][iCounter + 1] != NULL); iCounter++ ); if ( iCounter >= MAX_POPUP_BOX_STRING_COUNT ) { // using too many text lines, or not freeing them up properly - Assert(0); + Assert( 0 ); return; } - pStringSt=(POPUPSTRING *)(MemAlloc(sizeof(POPUPSTRING))); - if (pStringSt == NULL) + pStringSt = (POPUPSTRING *)(MemAlloc( sizeof( POPUPSTRING ) )); + if ( pStringSt == NULL ) return; - pLocalString=(STR16)MemAlloc((wcslen(pString)+1)*sizeof(CHAR16)); - if (pLocalString == NULL) + pLocalString = (STR16)MemAlloc( (wcslen( pString ) + 1) * sizeof( CHAR16 ) ); + if ( pLocalString == NULL ) return; - wcscpy(pLocalString, pString); + wcscpy( pLocalString, pString ); RemoveCurrentBoxSecondaryText( iCounter ); - PopUpBoxList[guiCurrentBox]->pSecondColumnString[iCounter]=pStringSt; - PopUpBoxList[guiCurrentBox]->pSecondColumnString[iCounter]->fColorFlag=FALSE; - PopUpBoxList[guiCurrentBox]->pSecondColumnString[iCounter]->pString=pLocalString; - PopUpBoxList[guiCurrentBox]->pSecondColumnString[iCounter]->fShadeFlag = FALSE; - PopUpBoxList[guiCurrentBox]->pSecondColumnString[iCounter]->fHighLightFlag = FALSE; - - *hStringHandle=iCounter; - - return; -} - -// Adds a string to the first available slot in the second column -void AddMonoStringToSecondColumn(UINT32* hStringHandle, STR16 pString) -{ - STR16 pLocalString = NULL; - POPUPSTRINGPTR pStringSt = NULL; - INT32 iCounter = 0; - - - if ((guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT)) - return; - - Assert(PopUpBoxList[guiCurrentBox] != NULL); - - // find the free text string index in 2nd column - for (iCounter = 0; (iCounter < MAX_POPUP_BOX_STRING_COUNT) && (PopUpBoxList[guiCurrentBox]->pSecondColumnString[iCounter] != NULL); iCounter++); - - if (iCounter >= MAX_POPUP_BOX_STRING_COUNT) - { - // using too many text lines, or not freeing them up properly - Assert(0); - return; - } - - pStringSt = (POPUPSTRING*)(MemAlloc(sizeof(POPUPSTRING))); - if (pStringSt == NULL) - return; - - pLocalString = (STR16)MemAlloc((wcslen(pString) + 1) * sizeof(CHAR16)); - if (pLocalString == NULL) - return; - - wcscpy(pLocalString, pString); - - RemoveCurrentBoxSecondaryText(iCounter); - - PopUpBoxList[guiCurrentBox]->pSecondColumnString[iCounter] = pStringSt; - PopUpBoxList[guiCurrentBox]->pSecondColumnString[iCounter]->fColorFlag = FALSE; - PopUpBoxList[guiCurrentBox]->pSecondColumnString[iCounter]->pString = pLocalString; - PopUpBoxList[guiCurrentBox]->pSecondColumnString[iCounter]->fShadeFlag = FALSE; - PopUpBoxList[guiCurrentBox]->pSecondColumnString[iCounter]->fHighLightFlag = FALSE; + box->Text[1][iCounter] = pStringSt; + box->Text[1][iCounter]->fColorFlag = FALSE; + box->Text[1][iCounter]->pString = pLocalString; + box->Text[1][iCounter]->fShadeFlag = FALSE; + box->Text[1][iCounter]->fHighLightFlag = FALSE; + box->Text[1][iCounter]->fSecondaryShadeFlag = FALSE; *hStringHandle = iCounter; return; } -// Adds a string to the first available slot in the column -void AddStringToBoxColumn( UINT32 *hStringHandle, STR16 pString, UINT8 column ) -{ - STR16 pLocalString = NULL; - POPUPSTRINGPTR pStringSt = NULL; - INT32 iCounter = 0; - - - if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) || column >= MAX_POPUP_BOX_COLUMNS ) - return; - - Assert( PopUpBoxList[guiCurrentBox] != NULL ); - - // find first free slot in list - for ( iCounter = 0; (iCounter < MAX_POPUP_BOX_STRING_COUNT) && (PopUpBoxList[guiCurrentBox]->Text[column][iCounter] != NULL); iCounter++ ); - - if ( iCounter >= MAX_POPUP_BOX_STRING_COUNT ) - { - // using too many text lines, or not freeing them up properly - Assert( 0 ); - return; - } - - pStringSt = (POPUPSTRING *)(MemAlloc( sizeof( POPUPSTRING ) )); - if ( pStringSt == NULL ) - return; - - pLocalString = (STR16)MemAlloc( (wcslen( pString ) + 1) * sizeof( CHAR16 ) ); - if ( pLocalString == NULL ) - return; - - wcscpy( pLocalString, pString ); - - RemoveCurrentBoxText( iCounter, column ); - - PopUpBoxList[guiCurrentBox]->Text[column][iCounter] = pStringSt; - PopUpBoxList[guiCurrentBox]->Text[column][iCounter]->fColorFlag = FALSE; - PopUpBoxList[guiCurrentBox]->Text[column][iCounter]->pString = pLocalString; - PopUpBoxList[guiCurrentBox]->Text[column][iCounter]->fShadeFlag = FALSE; - PopUpBoxList[guiCurrentBox]->Text[column][iCounter]->fHighLightFlag = FALSE; - PopUpBoxList[guiCurrentBox]->Text[column][iCounter]->fSecondaryShadeFlag = FALSE; - - *hStringHandle = iCounter; - PopUpBoxList[guiCurrentBox]->fUpdated = FALSE; - return; -} - -// Adds string to the current popup box column besides first. !!! String's position is the LAST used position in the 1st column !!! -void AddColumnMonoString( UINT32 *hStringHandle, STR16 pString, UINT8 column ) -{ - STR16 pLocalString = NULL; - POPUPSTRINGPTR pStringSt = NULL; - INT32 iCounter = 0; - - - if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) || column < 1 || column >= MAX_POPUP_BOX_COLUMNS) - return; - - Assert( PopUpBoxList[guiCurrentBox] != NULL ); - - // find the LAST USED text string index - for ( iCounter = 0; (iCounter + 1 < MAX_POPUP_BOX_STRING_COUNT) && (PopUpBoxList[guiCurrentBox]->Text[0][iCounter + 1] != NULL); iCounter++ ); - - if ( iCounter >= MAX_POPUP_BOX_STRING_COUNT ) - { - // using too many text lines, or not freeing them up properly - Assert( 0 ); - return; - } - - pStringSt = (POPUPSTRING *)(MemAlloc( sizeof( POPUPSTRING ) )); - if ( pStringSt == NULL ) - return; - - pLocalString = (STR16)MemAlloc( (wcslen( pString ) + 1) * sizeof( CHAR16 ) ); - if ( pLocalString == NULL ) - return; - - wcscpy( pLocalString, pString ); - - RemoveCurrentBoxText( iCounter, column ); - - PopUpBoxList[guiCurrentBox]->Text[column][iCounter] = pStringSt; - PopUpBoxList[guiCurrentBox]->Text[column][iCounter]->fColorFlag = FALSE; - PopUpBoxList[guiCurrentBox]->Text[column][iCounter]->pString = pLocalString; - PopUpBoxList[guiCurrentBox]->Text[column][iCounter]->fShadeFlag = FALSE; - PopUpBoxList[guiCurrentBox]->Text[column][iCounter]->fHighLightFlag = FALSE; - - *hStringHandle = iCounter; - return; -} - // Adds a COLORED first column string to the CURRENT box -void AddColorString(INT32 *hStringHandle, STR16 pString) +void AddColorString( INT32 *hStringHandle, STR16 pString, UINT8 column ) { - STR16 pLocalString; - POPUPSTRINGPTR pStringSt=NULL; - INT32 iCounter=0; + STR16 pLocalString; + POPUPSTRINGPTR pStringSt = NULL; + INT32 iCounter = 0; - if ( ( guiCurrentBox < 0 ) || ( guiCurrentBox >= MAX_POPUP_BOX_COUNT ) ) + if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[guiCurrentBox] != NULL ); + auto box = PopUpBoxList[guiCurrentBox]; + Assert( box != NULL ); - // find first free slot in list - for( iCounter = 0; ( iCounter < MAX_POPUP_BOX_STRING_COUNT ) && ( PopUpBoxList[guiCurrentBox]->Text[0][iCounter] != NULL ); iCounter++ ); + // find first free slot in list + for ( iCounter = 0; (iCounter < MAX_POPUP_BOX_STRING_COUNT) && (box->Text[column][iCounter] != NULL); iCounter++ ); + + if ( iCounter >= MAX_POPUP_BOX_STRING_COUNT ) + { + // using too many text lines, or not freeing them up properly + Assert( 0 ); + return; + } + + pStringSt = (POPUPSTRING *)(MemAlloc( sizeof( POPUPSTRING ) )); + if ( pStringSt == NULL ) + return; + + pLocalString = (STR16)MemAlloc( (wcslen( pString ) + 1) * sizeof( CHAR16 ) ); + if ( pLocalString == NULL ) + return; + + wcscpy( pLocalString, pString ); + + RemoveCurrentBoxText( iCounter, column ); + + box->Text[column][iCounter] = pStringSt; + box->Text[column][iCounter]->fColorFlag = TRUE; + box->Text[column][iCounter]->pString = pLocalString; + + *hStringHandle = iCounter; + + box->fUpdated = FALSE; - if ( iCounter >= MAX_POPUP_BOX_STRING_COUNT ) - { - // using too many text lines, or not freeing them up properly - Assert(0); return; - } - - pStringSt=(POPUPSTRING *)(MemAlloc(sizeof(POPUPSTRING))); - if (pStringSt == NULL) - return; - - pLocalString=(STR16)MemAlloc((wcslen(pString)+1)*sizeof(CHAR16)); - if (pLocalString == NULL) - return; - - wcscpy(pLocalString, pString); - - RemoveCurrentBoxPrimaryText( iCounter ); - - PopUpBoxList[guiCurrentBox]->Text[0][iCounter]=pStringSt; - PopUpBoxList[guiCurrentBox]->Text[0][iCounter]->fColorFlag=TRUE; - PopUpBoxList[guiCurrentBox]->Text[0][iCounter]->pString=pLocalString; - - *hStringHandle=iCounter; - - PopUpBoxList[guiCurrentBox]->fUpdated = FALSE; - - return; } @@ -637,22 +510,22 @@ void ResizeBoxForSecondStrings( INT32 hBoxHandle ) UINT32 uiBaseWidth, uiThisWidth; - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; - pBox = ( PopUpBoxList[ hBoxHandle ] ); + pBox = (PopUpBoxList[hBoxHandle]); Assert( pBox ); uiBaseWidth = pBox->uiLeftMargin + pBox->uiSecondColumnMinimunOffset; // check string sizes - for( iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++ ) + for ( iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++ ) { - if( pBox->Text[0][ iCounter ] ) + if ( pBox->Text[0][iCounter] ) { - uiThisWidth = uiBaseWidth + StringPixLength( pBox->Text[0][ iCounter ]->pString, pBox->Text[0][ iCounter ]->uiFont ); + uiThisWidth = uiBaseWidth + StringPixLength( pBox->Text[0][iCounter]->pString, pBox->Text[0][iCounter]->uiFont ); - if( uiThisWidth > pBox->uiSecondColumnCurrentOffset ) + if ( uiThisWidth > pBox->uiSecondColumnCurrentOffset ) { pBox->uiSecondColumnCurrentOffset = uiThisWidth; } @@ -708,39 +581,18 @@ static void ResizeStrategicMvtBoxForSecondStrings( INT32 hBoxHandle ) } -UINT32 GetNumberOfLinesOfTextInBox( INT32 hBoxHandle ) +UINT32 GetNumberOfLinesOfTextInBox( INT32 hBoxHandle, UINT8 column ) { INT32 iCounter = 0; - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) - return( 0 ); - - // count number of lines - // check string size - for( iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++ ) - { - if( PopUpBoxList[ hBoxHandle ]->Text[0][ iCounter ] == NULL ) - { - break; - } - } - - return( iCounter ); -} - - -UINT32 GetNumberOfSecondaryLinesOfTextInBox(INT32 hBoxHandle) -{ - INT32 iCounter = 0; - - if ((hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT)) + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return(0); // count number of lines // check string size - for (iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++) + for ( iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++ ) { - if (PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter] == NULL) + if ( PopUpBoxList[hBoxHandle]->Text[column][iCounter] == NULL ) { break; } @@ -749,6 +601,7 @@ UINT32 GetNumberOfSecondaryLinesOfTextInBox(INT32 hBoxHandle) return(iCounter); } + UINT32 GetTotalNumberOfLinesOfTextInBox( INT32 hBoxHandle ) { UINT32 lines = 0; @@ -780,17 +633,17 @@ void SetBoxFont( INT32 hBoxHandle, UINT32 uiFont ) if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; - for ( uiCounter = 0; uiCounter < MAX_POPUP_BOX_STRING_COUNT; uiCounter++ ) + for ( size_t i = 0; i < MAX_POPUP_BOX_COLUMNS; i++ ) { - if ( PopUpBoxList[hBoxHandle]->Text[0][uiCounter] != NULL ) + for ( uiCounter = 0; uiCounter < MAX_POPUP_BOX_STRING_COUNT; uiCounter++ ) { - PopUpBoxList[hBoxHandle]->Text[0][uiCounter]->uiFont = uiFont; + if ( PopUpBoxList[hBoxHandle]->Text[i][uiCounter] != NULL ) + { + PopUpBoxList[hBoxHandle]->Text[i][uiCounter]->uiFont = uiFont; + } } } - // set up the 2nd column font - SetBoxSecondColumnFont( hBoxHandle, uiFont ); - PopUpBoxList[hBoxHandle]->fUpdated = FALSE; return; @@ -798,7 +651,7 @@ void SetBoxFont( INT32 hBoxHandle, UINT32 uiFont ) void SetBoxSecondColumnMinimumOffset( INT32 hBoxHandle, UINT32 uiWidth ) { - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; PopUpBoxList[hBoxHandle]->uiSecondColumnMinimunOffset = uiWidth; @@ -807,41 +660,13 @@ void SetBoxSecondColumnMinimumOffset( INT32 hBoxHandle, UINT32 uiWidth ) void SetBoxSecondColumnCurrentOffset( INT32 hBoxHandle, UINT32 uiCurrentOffset ) { - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; PopUpBoxList[hBoxHandle]->uiSecondColumnCurrentOffset = uiCurrentOffset; return; } -void SetBoxSecondColumnOffsetAdjustment(INT32 hBoxHandle, INT16 x) -{ - if ((hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT)) - return; - - PopUpBoxList[hBoxHandle]->usSecondColumnOffsetAdjustment = x; - return; -} - -void SetBoxSecondColumnFont( INT32 hBoxHandle, UINT32 uiFont ) -{ - UINT32 iCounter = 0; - - if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) - return; - - for ( iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++ ) - { - if ( PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter] ) - { - PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter]->uiFont = uiFont; - } - } - - PopUpBoxList[hBoxHandle]->fUpdated = FALSE; - - return; -} void SetBoxColumnFont( INT32 hBoxHandle, UINT32 uiFont, UINT8 column ) { @@ -864,27 +689,27 @@ void SetBoxColumnFont( INT32 hBoxHandle, UINT32 uiFont, UINT8 column ) UINT32 GetBoxFont( INT32 hBoxHandle ) { - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) - return( 0 ); + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) + return(0); - Assert( PopUpBoxList[ hBoxHandle ] ); - Assert( PopUpBoxList[ hBoxHandle ]->Text[0][ 0 ] ); + Assert( PopUpBoxList[hBoxHandle] ); + Assert( PopUpBoxList[hBoxHandle]->Text[0][0] ); // return font id of first line of text of box - return( PopUpBoxList[hBoxHandle]->Text[0][ 0 ]->uiFont ); + return(PopUpBoxList[hBoxHandle]->Text[0][0]->uiFont); } // set the foreground color of this string in this pop up box void SetBoxLineForeground( INT32 iBox, INT32 iStringValue, UINT8 ubColor ) { - if ( ( iBox < 0 ) || ( iBox >= MAX_POPUP_BOX_COUNT ) ) + if ( (iBox < 0) || (iBox >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[ iBox ] ); - Assert( PopUpBoxList[ iBox ]->Text[0][iStringValue] ); + Assert( PopUpBoxList[iBox] ); + Assert( PopUpBoxList[iBox]->Text[0][iStringValue] ); - PopUpBoxList[iBox]->Text[0][iStringValue]->ubForegroundColor=ubColor; + PopUpBoxList[iBox]->Text[0][iStringValue]->ubForegroundColor = ubColor; return; } @@ -892,16 +717,16 @@ void SetBoxSecondaryShade( INT32 iBox, UINT8 ubColor ) { UINT32 uiCounter; - if ( ( iBox < 0 ) || ( iBox >= MAX_POPUP_BOX_COUNT ) ) + if ( (iBox < 0) || (iBox >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[ iBox ] ); + Assert( PopUpBoxList[iBox] ); for ( uiCounter = 0; uiCounter < MAX_POPUP_BOX_STRING_COUNT; uiCounter++ ) { - if (PopUpBoxList[iBox]->Text[0][uiCounter]!=NULL) + if ( PopUpBoxList[iBox]->Text[0][uiCounter] != NULL ) { - PopUpBoxList[iBox]->Text[0][uiCounter]->ubSecondaryShade=ubColor; + PopUpBoxList[iBox]->Text[0][uiCounter]->ubSecondaryShade = ubColor; } } return; @@ -909,30 +734,31 @@ void SetBoxSecondaryShade( INT32 iBox, UINT8 ubColor ) // The following functions operate on the CURRENT box - -void SetPopUpStringFont(INT32 hStringHandle, UINT32 uiFont) +void SetPopUpStringFont( INT32 hStringHandle, UINT32 uiFont ) { - if ( ( guiCurrentBox < 0 ) || ( guiCurrentBox >= MAX_POPUP_BOX_COUNT ) ) + if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[guiCurrentBox] != NULL ); - Assert( PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle] ); + auto box = PopUpBoxList[guiCurrentBox]; + Assert( box != NULL ); + Assert( box->Text[0][hStringHandle] ); - PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle]->uiFont=uiFont; - return; + box->Text[0][hStringHandle]->uiFont = uiFont; + return; } -void SetPopUpSecondColumnStringFont(INT32 hStringHandle, UINT32 uiFont) +void SetPopUpSecondColumnStringFont( INT32 hStringHandle, UINT32 uiFont ) { - if ( ( guiCurrentBox < 0 ) || ( guiCurrentBox >= MAX_POPUP_BOX_COUNT ) ) + if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[guiCurrentBox] != NULL ); - Assert( PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle] ); + auto box = PopUpBoxList[guiCurrentBox]; + Assert( box != NULL ); + Assert( box->Text[1][hStringHandle] ); - PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle]->uiFont=uiFont; - return; + box->Text[1][hStringHandle]->uiFont = uiFont; + return; } @@ -942,10 +768,11 @@ void SetStringSecondaryShade( INT32 hStringHandle, UINT8 ubColor ) if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[guiCurrentBox] != NULL ); - Assert( PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle] ); + auto box = PopUpBoxList[guiCurrentBox]; + Assert( box != NULL ); + Assert( box->Text[0][hStringHandle] ); - PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle]->ubSecondaryShade = ubColor; + box->Text[0][hStringHandle]->ubSecondaryShade = ubColor; return; } @@ -954,10 +781,11 @@ void SetStringForeground( INT32 hStringHandle, UINT8 ubColor ) if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[guiCurrentBox] != NULL ); - Assert( PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle] ); + auto box = PopUpBoxList[guiCurrentBox]; + Assert( box != NULL ); + Assert( box->Text[0][hStringHandle] ); - PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle]->ubForegroundColor = ubColor; + box->Text[0][hStringHandle]->ubForegroundColor = ubColor; return; } @@ -966,10 +794,11 @@ void SetStringBackground( INT32 hStringHandle, UINT8 ubColor ) if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[guiCurrentBox] != NULL ); - Assert( PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle] ); + auto box = PopUpBoxList[guiCurrentBox]; + Assert( box != NULL ); + Assert( box->Text[0][hStringHandle] ); - PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle]->ubBackgroundColor = ubColor; + box->Text[0][hStringHandle]->ubBackgroundColor = ubColor; return; } @@ -978,10 +807,11 @@ void SetStringHighLight( INT32 hStringHandle, UINT8 ubColor ) if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[guiCurrentBox] != NULL ); - Assert( PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle] ); + auto box = PopUpBoxList[guiCurrentBox]; + Assert( box != NULL ); + Assert( box->Text[0][hStringHandle] ); - PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle]->ubHighLight = ubColor; + box->Text[0][hStringHandle]->ubHighLight = ubColor; return; } @@ -991,10 +821,11 @@ void SetStringShade( INT32 hStringHandle, UINT8 ubShade ) if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[guiCurrentBox] != NULL ); - Assert( PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle] ); + auto box = PopUpBoxList[guiCurrentBox]; + Assert( box != NULL ); + Assert( box->Text[0][hStringHandle] ); - PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle]->ubShade = ubShade; + box->Text[0][hStringHandle]->ubShade = ubShade; return; } @@ -1003,10 +834,11 @@ void SetStringSecondColumnForeground( INT32 hStringHandle, UINT8 ubColor ) if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[guiCurrentBox] != NULL ); - Assert( PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle] ); + auto box = PopUpBoxList[guiCurrentBox]; + Assert( box != NULL ); + Assert( box->Text[1][hStringHandle] ); - PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle]->ubForegroundColor = ubColor; + box->Text[1][hStringHandle]->ubForegroundColor = ubColor; return; } @@ -1015,10 +847,11 @@ void SetStringSecondColumnBackground( INT32 hStringHandle, UINT8 ubColor ) if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[guiCurrentBox] != NULL ); - Assert( PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle] ); + auto box = PopUpBoxList[guiCurrentBox]; + Assert( box != NULL ); + Assert( box->Text[1][hStringHandle] ); - PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle]->ubBackgroundColor = ubColor; + box->Text[1][hStringHandle]->ubBackgroundColor = ubColor; return; } @@ -1027,10 +860,11 @@ void SetStringSecondColumnHighLight( INT32 hStringHandle, UINT8 ubColor ) if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[guiCurrentBox] != NULL ); - Assert( PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle] ); + auto box = PopUpBoxList[guiCurrentBox]; + Assert( box != NULL ); + Assert( box->Text[1][hStringHandle] ); - PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle]->ubHighLight = ubColor; + box->Text[1][hStringHandle]->ubHighLight = ubColor; return; } @@ -1040,171 +874,95 @@ void SetStringSecondColumnShade( INT32 hStringHandle, UINT8 ubShade ) if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[guiCurrentBox] != NULL ); - Assert( PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle] ); + auto box = PopUpBoxList[guiCurrentBox]; + Assert( box != NULL ); + Assert( box->Text[1][hStringHandle] ); - PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle]->ubShade = ubShade; + box->Text[1][hStringHandle]->ubShade = ubShade; return; } -void SetBoxForeground(INT32 hBoxHandle, UINT8 ubColor) +void SetBoxForeground( INT32 hBoxHandle, UINT8 ubColor ) { UINT32 uiCounter; - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) - return; - - Assert( PopUpBoxList[hBoxHandle] != NULL ); - - for ( uiCounter = 0; uiCounter < MAX_POPUP_BOX_STRING_COUNT; uiCounter++ ) - { - if (PopUpBoxList[hBoxHandle]->Text[0][uiCounter]!=NULL) - { - PopUpBoxList[hBoxHandle]->Text[0][uiCounter]->ubForegroundColor=ubColor; - } - } - return; -} - -void SetBoxBackground(INT32 hBoxHandle, UINT8 ubColor) -{ - UINT32 uiCounter; - - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) - return; - - Assert( PopUpBoxList[hBoxHandle] != NULL ); - - for ( uiCounter = 0; uiCounter < MAX_POPUP_BOX_STRING_COUNT; uiCounter++ ) - { - if (PopUpBoxList[hBoxHandle]->Text[0][uiCounter]!=NULL) - { - PopUpBoxList[hBoxHandle]->Text[0][uiCounter]->ubBackgroundColor=ubColor; - } - } - return; -} - -void SetBoxHighLight(INT32 hBoxHandle, UINT8 ubColor) -{ - UINT32 uiCounter; - - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) - return; - - Assert( PopUpBoxList[hBoxHandle] != NULL ); - - for ( uiCounter = 0; uiCounter < MAX_POPUP_BOX_STRING_COUNT; uiCounter++ ) - { - if (PopUpBoxList[hBoxHandle]->Text[0][uiCounter]!=NULL) - { - PopUpBoxList[hBoxHandle]->Text[0][uiCounter]->ubHighLight=ubColor; - } - } - return; -} - -void SetBoxShade(INT32 hBoxHandle, UINT8 ubColor) -{ - UINT32 uiCounter; - - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) - return; - - Assert( PopUpBoxList[hBoxHandle] != NULL ); - - for ( uiCounter = 0; uiCounter < MAX_POPUP_BOX_STRING_COUNT; uiCounter++ ) - { - if (PopUpBoxList[hBoxHandle]->Text[0][uiCounter]!=NULL) - { - PopUpBoxList[hBoxHandle]->Text[0][uiCounter]->ubShade=ubColor; - } - } - return; -} - -void SetBoxSecondColumnForeground( INT32 hBoxHandle, UINT8 ubColor ) -{ - UINT32 iCounter = 0; - if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; Assert( PopUpBoxList[hBoxHandle] != NULL ); - for ( iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++ ) + for ( uiCounter = 0; uiCounter < MAX_POPUP_BOX_STRING_COUNT; uiCounter++ ) { - if ( PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter] ) + if ( PopUpBoxList[hBoxHandle]->Text[0][uiCounter] != NULL ) { - PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter]->ubForegroundColor = ubColor; + PopUpBoxList[hBoxHandle]->Text[0][uiCounter]->ubForegroundColor = ubColor; } } - return; } -void SetBoxSecondColumnBackground( INT32 hBoxHandle, UINT8 ubColor ) +void SetBoxBackground( INT32 hBoxHandle, UINT8 ubColor ) { - UINT32 iCounter = 0; + UINT32 uiCounter; if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; Assert( PopUpBoxList[hBoxHandle] != NULL ); - for ( iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++ ) + for ( uiCounter = 0; uiCounter < MAX_POPUP_BOX_STRING_COUNT; uiCounter++ ) { - if ( PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter] ) + if ( PopUpBoxList[hBoxHandle]->Text[0][uiCounter] != NULL ) { - PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter]->ubBackgroundColor = ubColor; + PopUpBoxList[hBoxHandle]->Text[0][uiCounter]->ubBackgroundColor = ubColor; } } - return; } -void SetBoxSecondColumnHighLight( INT32 hBoxHandle, UINT8 ubColor ) +void SetBoxHighLight( INT32 hBoxHandle, UINT8 ubColor ) { - UINT32 iCounter = 0; + UINT32 uiCounter; if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; Assert( PopUpBoxList[hBoxHandle] != NULL ); - for ( iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++ ) + for ( uiCounter = 0; uiCounter < MAX_POPUP_BOX_STRING_COUNT; uiCounter++ ) { - if ( PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter] ) + if ( PopUpBoxList[hBoxHandle]->Text[0][uiCounter] != NULL ) { - PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter]->ubHighLight = ubColor; + PopUpBoxList[hBoxHandle]->Text[0][uiCounter]->ubHighLight = ubColor; } } - return; } -void SetBoxSecondColumnShade( INT32 hBoxHandle, UINT8 ubColor ) +void SetBoxShade( INT32 hBoxHandle, UINT8 ubColor ) { - UINT32 iCounter = 0; + UINT32 uiCounter; if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; Assert( PopUpBoxList[hBoxHandle] != NULL ); - for ( iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++ ) + for ( uiCounter = 0; uiCounter < MAX_POPUP_BOX_STRING_COUNT; uiCounter++ ) { - if ( PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter] ) + if ( PopUpBoxList[hBoxHandle]->Text[0][uiCounter] != NULL ) { - PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter]->ubShade = ubColor; + PopUpBoxList[hBoxHandle]->Text[0][uiCounter]->ubShade = ubColor; } } return; } + + void SetBoxColumnForeground( INT32 hBoxHandle, UINT8 ubColor, UINT8 column ) { if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) @@ -1293,55 +1051,44 @@ void HighLightLine( INT32 hStringHandle, UINT8 column ) return; } -void HighLight2ndLine( INT32 hStringHandle ) + +BOOLEAN GetShadeFlag( INT32 hStringHandle ) { if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) - return; + return(FALSE); auto box = PopUpBoxList[guiCurrentBox]; Assert( box != NULL ); - if ( !box->pSecondColumnString[hStringHandle] ) - return; - box->pSecondColumnString[hStringHandle]->fHighLightFlag = TRUE; - return; -} - -BOOLEAN GetShadeFlag( INT32 hStringHandle ) -{ - if ( ( guiCurrentBox < 0 ) || ( guiCurrentBox >= MAX_POPUP_BOX_COUNT ) ) + if ( !box->Text[0][hStringHandle] ) return(FALSE); - Assert( PopUpBoxList[guiCurrentBox] != NULL ); - - if(!PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle]) - return( FALSE ); - - return( PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle]->fShadeFlag); + return(box->Text[0][hStringHandle]->fShadeFlag); } BOOLEAN GetSecondaryShadeFlag( INT32 hStringHandle ) { - if ( ( guiCurrentBox < 0 ) || ( guiCurrentBox >= MAX_POPUP_BOX_COUNT ) ) + if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) return(FALSE); - Assert( PopUpBoxList[guiCurrentBox] != NULL ); + auto box = PopUpBoxList[guiCurrentBox]; + Assert( box != NULL ); - if(!PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle]) - return( FALSE ); + if ( !box->Text[0][hStringHandle] ) + return(FALSE); - return( PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle]->fSecondaryShadeFlag ); + return(box->Text[0][hStringHandle]->fSecondaryShadeFlag); } void HighLightBoxLine( INT32 hBoxHandle, INT32 iLineNumber, UINT8 column ) { - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; // highlight iLineNumber Line in box indexed by hBoxHandle - if( PopUpBoxList[hBoxHandle]->Text[column][iLineNumber]!=NULL) + if ( PopUpBoxList[hBoxHandle]->Text[column][iLineNumber] != NULL ) { // set current box SetCurrentBox( hBoxHandle ); @@ -1353,122 +1100,103 @@ void HighLightBoxLine( INT32 hBoxHandle, INT32 iLineNumber, UINT8 column ) return; } -void HighLight2ndBoxLine( INT32 hBoxHandle, INT32 iLineNumber ) -{ - if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) - return; - - // highlight iLineNumber Line in box indexed by hBoxHandle - if ( PopUpBoxList[hBoxHandle]->pSecondColumnString[iLineNumber] != NULL ) - { - SetCurrentBox( hBoxHandle ); - HighLight2ndLine( iLineNumber ); - } - - return; -} BOOLEAN GetBoxShadeFlag( INT32 hBoxHandle, INT32 iLineNumber ) { - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return(FALSE); - if( PopUpBoxList[hBoxHandle]->Text[0][iLineNumber]!=NULL) + if ( PopUpBoxList[hBoxHandle]->Text[0][iLineNumber] != NULL ) { - return( PopUpBoxList[hBoxHandle]->Text[0][iLineNumber]->fShadeFlag ); + return(PopUpBoxList[hBoxHandle]->Text[0][iLineNumber]->fShadeFlag); } - return( FALSE ); + return(FALSE); } BOOLEAN GetBoxSecondaryShadeFlag( INT32 hBoxHandle, INT32 iLineNumber ) { - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return(FALSE); - if( PopUpBoxList[hBoxHandle]->Text[0][iLineNumber]!=NULL) + if ( PopUpBoxList[hBoxHandle]->Text[0][iLineNumber] != NULL ) { - return( PopUpBoxList[hBoxHandle]->Text[0][iLineNumber]->fSecondaryShadeFlag ); + return(PopUpBoxList[hBoxHandle]->Text[0][iLineNumber]->fSecondaryShadeFlag); } - return( FALSE ); + return(FALSE); } -void UnHighLightLine( INT32 hStringHandle ) +void UnHighLightLine( INT32 hStringHandle, UINT8 column ) { if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[guiCurrentBox] != NULL ); + auto box = PopUpBoxList[guiCurrentBox]; + Assert( box != NULL ); - if ( !PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle] ) + if ( !box->Text[column][hStringHandle] ) return; - PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle]->fHighLightFlag = FALSE; + box->Text[column][hStringHandle]->fHighLightFlag = FALSE; return; } void UnHighLightBox( INT32 hBoxHandle ) { - INT32 iCounter = 0; - if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; auto box = PopUpBoxList[hBoxHandle]; for ( size_t i = 0; i < MAX_POPUP_BOX_COLUMNS; i++ ) { - for ( iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++ ) + for ( INT32 iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++ ) { if ( box->Text[i][iCounter] ) box->Text[i][iCounter]->fHighLightFlag = FALSE; } } +} + +void UnHighLightSecondColumnLine( INT32 hStringHandle ) +{ + if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) + return; + + auto box = PopUpBoxList[guiCurrentBox]; + Assert( box != NULL ); + + if ( !box->Text[1][hStringHandle] ) + return; + + box->Text[1][hStringHandle]->fHighLightFlag = FALSE; + return; +} + +void UnHighLightSecondColumnBox( INT32 hBoxHandle ) +{ + INT32 iCounter = 0; + + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) + return; for ( iCounter = 0; iCounter < MAX_POPUP_BOX_STRING_COUNT; iCounter++ ) { - if ( box->pSecondColumnString[iCounter] ) - box->pSecondColumnString[iCounter]->fHighLightFlag = FALSE; + if ( PopUpBoxList[hBoxHandle]->Text[1][iCounter] ) + PopUpBoxList[hBoxHandle]->Text[1][iCounter]->fHighLightFlag = FALSE; } } -void UnHighLightSecondColumnLine(INT32 hStringHandle) +void RemoveOneCurrentBoxString( INT32 hStringHandle, BOOLEAN fFillGaps ) { - if ( ( guiCurrentBox < 0 ) || ( guiCurrentBox >= MAX_POPUP_BOX_COUNT ) ) + UINT32 uiCounter = 0; + + if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[guiCurrentBox] != NULL ); - - if(!PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle]) - return; - - PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle]->fHighLightFlag=FALSE; - return; -} - -void UnHighLightSecondColumnBox(INT32 hBoxHandle) -{ - INT32 iCounter=0; - - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) - return; - - for(iCounter=0; iCounter pSecondColumnString[iCounter]) - PopUpBoxList[hBoxHandle]->pSecondColumnString[iCounter]->fHighLightFlag=FALSE; - } -} - -void RemoveOneCurrentBoxString(INT32 hStringHandle, BOOLEAN fFillGaps) -{ - UINT32 uiCounter=0; - - if ( ( guiCurrentBox < 0 ) || ( guiCurrentBox >= MAX_POPUP_BOX_COUNT ) ) - return; - - Assert( PopUpBoxList[guiCurrentBox] != NULL ); + auto box = PopUpBoxList[guiCurrentBox]; + Assert( box != NULL ); Assert( hStringHandle < MAX_POPUP_BOX_STRING_COUNT ); RemoveCurrentBoxPrimaryText( hStringHandle ); @@ -1477,27 +1205,25 @@ void RemoveOneCurrentBoxString(INT32 hStringHandle, BOOLEAN fFillGaps) if ( fFillGaps ) { // shuffle all strings down a slot to fill in the gap - for ( uiCounter = hStringHandle; uiCounter < ( MAX_POPUP_BOX_STRING_COUNT - 1 ); uiCounter++ ) + for ( uiCounter = hStringHandle; uiCounter < (MAX_POPUP_BOX_STRING_COUNT - 1); uiCounter++ ) { - PopUpBoxList[guiCurrentBox]->Text[0][uiCounter]=PopUpBoxList[guiCurrentBox]->Text[0][uiCounter+1]; - PopUpBoxList[guiCurrentBox]->pSecondColumnString[uiCounter]=PopUpBoxList[guiCurrentBox]->pSecondColumnString[uiCounter+1]; + box->Text[0][uiCounter] = box->Text[0][uiCounter + 1]; + box->Text[1][uiCounter] = box->Text[1][uiCounter + 1]; } } - PopUpBoxList[guiCurrentBox]->fUpdated = FALSE; + box->fUpdated = FALSE; } void RemoveAllCurrentBoxStrings( void ) { - UINT32 uiCounter; - if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) || !PopUpBoxList[guiCurrentBox] ) return; for ( size_t i = 0; i < MAX_POPUP_BOX_COLUMNS; i++ ) { - for ( uiCounter = 0; uiCounter < MAX_POPUP_BOX_STRING_COUNT; uiCounter++ ) + for ( UINT32 uiCounter = 0; uiCounter < MAX_POPUP_BOX_STRING_COUNT; uiCounter++ ) { RemoveCurrentBoxText( uiCounter, i ); } @@ -1529,14 +1255,14 @@ void RemoveBox( INT32 hBoxHandle ) -void ShowBox(INT32 hBoxHandle) +void ShowBox( INT32 hBoxHandle ) { - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; - if( PopUpBoxList[hBoxHandle] != NULL ) + if ( PopUpBoxList[hBoxHandle] != NULL ) { - if( PopUpBoxList[hBoxHandle]->fShowBox == FALSE ) + if ( PopUpBoxList[hBoxHandle]->fShowBox == FALSE ) { PopUpBoxList[hBoxHandle]->fShowBox = TRUE; PopUpBoxList[hBoxHandle]->fUpdated = FALSE; @@ -1544,14 +1270,14 @@ void ShowBox(INT32 hBoxHandle) } } -void HideBox(INT32 hBoxHandle) +void HideBox( INT32 hBoxHandle ) { - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; - if( PopUpBoxList[hBoxHandle] != NULL ) + if ( PopUpBoxList[hBoxHandle] != NULL ) { - if( PopUpBoxList[hBoxHandle]->fShowBox == TRUE ) + if ( PopUpBoxList[hBoxHandle]->fShowBox == TRUE ) { PopUpBoxList[hBoxHandle]->fShowBox = FALSE; PopUpBoxList[hBoxHandle]->fUpdated = FALSE; @@ -1561,27 +1287,27 @@ void HideBox(INT32 hBoxHandle) -void SetCurrentBox(INT32 hBoxHandle) +void SetCurrentBox( INT32 hBoxHandle ) { - if ( ( hBoxHandle < 0 ) || ( hBoxHandle >= MAX_POPUP_BOX_COUNT ) ) + if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) return; guiCurrentBox = hBoxHandle; } -void GetCurrentBox(INT32 *hBoxHandle) +void GetCurrentBox( INT32 *hBoxHandle ) { *hBoxHandle = guiCurrentBox; } -void DisplayBoxes(UINT32 uiBuffer) +void DisplayBoxes( UINT32 uiBuffer ) { UINT32 uiCounter; - for( uiCounter=0; uiCounter < MAX_POPUP_BOX_COUNT; uiCounter++ ) + for ( uiCounter = 0; uiCounter < MAX_POPUP_BOX_COUNT; uiCounter++ ) { DisplayOnePopupBox( uiCounter, uiBuffer ); } @@ -1609,75 +1335,75 @@ void DisplayOnePopupBox( UINT32 uiIndex, UINT32 uiBuffer ) // force an update of this box void ForceUpDateOfBox( UINT32 uiIndex ) { - if ( ( uiIndex < 0 ) || ( uiIndex >= MAX_POPUP_BOX_COUNT ) ) + if ( (uiIndex < 0) || (uiIndex >= MAX_POPUP_BOX_COUNT) ) return; - if( PopUpBoxList[ uiIndex ] != NULL ) + if ( PopUpBoxList[uiIndex] != NULL ) { - PopUpBoxList[ uiIndex ]->fUpdated = FALSE; + PopUpBoxList[uiIndex]->fUpdated = FALSE; } } -BOOLEAN DrawBox(UINT32 uiCounter) +BOOLEAN DrawBox( UINT32 uiCounter ) { // will build pop up box in usTopX, usTopY with dimensions usWidth and usHeight UINT32 uiNumTilesWide; UINT32 uiNumTilesHigh; - UINT32 uiCount=0; + UINT32 uiCount = 0; HVOBJECT hBoxHandle; HVSURFACE hSrcVSurface; UINT32 uiDestPitchBYTES; UINT32 uiSrcPitchBYTES; - UINT16 *pDestBuf; - UINT8 *pSrcBuf; + UINT16 *pDestBuf; + UINT8 *pSrcBuf; SGPRect clip; UINT16 usTopX, usTopY; UINT16 usWidth, usHeight; - if ( ( uiCounter < 0 ) || ( uiCounter >= MAX_POPUP_BOX_COUNT ) ) + if ( (uiCounter < 0) || (uiCounter >= MAX_POPUP_BOX_COUNT) ) return(FALSE); - - Assert( PopUpBoxList[uiCounter] != NULL ); + auto box = PopUpBoxList[uiCounter]; + Assert( box != NULL ); // only update if we need to - if( PopUpBoxList[uiCounter]->fUpdated == TRUE ) + if ( box->fUpdated == TRUE ) { - return( FALSE ); + return(FALSE); } - PopUpBoxList[uiCounter]->fUpdated = TRUE; + box->fUpdated = TRUE; - if( PopUpBoxList[uiCounter]->uiFlags & POPUP_BOX_FLAG_RESIZE ) + if ( box->uiFlags & POPUP_BOX_FLAG_RESIZE ) { - ResizeBoxToText(uiCounter); + ResizeBoxToText( uiCounter ); } - usTopX=(UINT16)PopUpBoxList[uiCounter]->Position.iX; - usTopY=(UINT16)PopUpBoxList[uiCounter]->Position.iY; - usWidth = ((UINT16)(PopUpBoxList[uiCounter]->Dimensions.iRight - PopUpBoxList[uiCounter]->Dimensions.iLeft + PopUpBoxList[uiCounter]->usSecondColumnOffsetAdjustment)); - usHeight=((UINT16)(PopUpBoxList[uiCounter]->Dimensions.iBottom-PopUpBoxList[uiCounter]->Dimensions.iTop)); + usTopX = (UINT16)box->Position.iX; + usTopY = (UINT16)box->Position.iY; + usWidth = ((UINT16)(box->Dimensions.iRight - box->Dimensions.iLeft)); + usHeight = ((UINT16)(box->Dimensions.iBottom - box->Dimensions.iTop)); //CHRISL: Adjust position for screen limits - if((usTopX + usWidth) > SCREEN_WIDTH && usTopX > ((usTopX + usWidth) - SCREEN_WIDTH)) + if ( (usTopX + usWidth) > SCREEN_WIDTH && usTopX > ((usTopX + usWidth) - SCREEN_WIDTH) ) { usTopX -= ((usTopX + usWidth) - SCREEN_WIDTH); - PopUpBoxList[uiCounter]->Position.iX -= (PopUpBoxList[uiCounter]->Position.iX - usTopX); + box->Position.iX -= (box->Position.iX - usTopX); } - if((usTopY + usHeight) > SCREEN_HEIGHT && usTopY > ((usTopY + usHeight) - SCREEN_HEIGHT)) + if ( (usTopY + usHeight) > SCREEN_HEIGHT && usTopY > ((usTopY + usHeight) - SCREEN_HEIGHT) ) { usTopY -= ((usTopY + usHeight) - SCREEN_HEIGHT); - PopUpBoxList[uiCounter]->Position.iY -= (PopUpBoxList[uiCounter]->Position.iY - usTopY); + box->Position.iY -= (box->Position.iY - usTopY); } // check if we have a min width, if so then update box for such - if( ( PopUpBoxList[uiCounter]->uiBoxMinWidth ) && ( usWidth < PopUpBoxList[uiCounter]->uiBoxMinWidth ) ) + if ( (box->uiBoxMinWidth) && (usWidth < box->uiBoxMinWidth) ) { - usWidth = ( INT16 )( PopUpBoxList[uiCounter]->uiBoxMinWidth ); + usWidth = (INT16)(box->uiBoxMinWidth); } // make sure it will fit on screen! @@ -1685,56 +1411,56 @@ BOOLEAN DrawBox(UINT32 uiCounter) Assert( usTopY + usHeight <= SCREEN_HEIGHT ); // subtract 4 because the 2 2-pixel corners are handled separately - uiNumTilesWide=((usWidth-4)/BORDER_WIDTH); - uiNumTilesHigh=((usHeight-4)/BORDER_HEIGHT); + uiNumTilesWide = ((usWidth - 4) / BORDER_WIDTH); + uiNumTilesHigh = ((usHeight - 4) / BORDER_HEIGHT); - clip.iLeft=0; - clip.iRight=clip.iLeft+usWidth; - clip.iTop=0; - clip.iBottom=clip.iTop+usHeight; + clip.iLeft = 0; + clip.iRight = clip.iLeft + usWidth; + clip.iTop = 0; + clip.iBottom = clip.iTop + usHeight; // blit in texture first, then borders // blit in surface - pDestBuf = (UINT16*)LockVideoSurface(PopUpBoxList[uiCounter]->uiBuffer, &uiDestPitchBYTES); - CHECKF( GetVideoSurface( &hSrcVSurface, PopUpBoxList[uiCounter]->iBackGroundSurface) ); - pSrcBuf = LockVideoSurface( PopUpBoxList[uiCounter]->iBackGroundSurface, &uiSrcPitchBYTES); - Blt8BPPDataSubTo16BPPBuffer( pDestBuf, uiDestPitchBYTES, hSrcVSurface, pSrcBuf,uiSrcPitchBYTES,usTopX,usTopY, &clip); - UnLockVideoSurface( PopUpBoxList[uiCounter]->iBackGroundSurface); - UnLockVideoSurface(PopUpBoxList[uiCounter]->uiBuffer); - GetVideoObject(&hBoxHandle, PopUpBoxList[uiCounter]->iBorderObjectIndex); + pDestBuf = (UINT16 *)LockVideoSurface( box->uiBuffer, &uiDestPitchBYTES ); + CHECKF( GetVideoSurface( &hSrcVSurface, box->iBackGroundSurface ) ); + pSrcBuf = LockVideoSurface( box->iBackGroundSurface, &uiSrcPitchBYTES ); + Blt8BPPDataSubTo16BPPBuffer( pDestBuf, uiDestPitchBYTES, hSrcVSurface, pSrcBuf, uiSrcPitchBYTES, usTopX, usTopY, &clip ); + UnLockVideoSurface( box->iBackGroundSurface ); + UnLockVideoSurface( box->uiBuffer ); + GetVideoObject( &hBoxHandle, box->iBorderObjectIndex ); // blit in 4 corners (they're 2x2 pixels) - BltVideoObject(PopUpBoxList[uiCounter]->uiBuffer, hBoxHandle, TOP_LEFT_CORNER,usTopX,usTopY, VO_BLT_SRCTRANSPARENCY, NULL ); - BltVideoObject(PopUpBoxList[uiCounter]->uiBuffer, hBoxHandle, TOP_RIGHT_CORNER,usTopX+usWidth-2,usTopY, VO_BLT_SRCTRANSPARENCY, NULL ); - BltVideoObject(PopUpBoxList[uiCounter]->uiBuffer, hBoxHandle, BOTTOM_RIGHT_CORNER,usTopX+usWidth-2,usTopY+usHeight-2, VO_BLT_SRCTRANSPARENCY, NULL ); - BltVideoObject(PopUpBoxList[uiCounter]->uiBuffer, hBoxHandle, BOTTOM_LEFT_CORNER,usTopX,usTopY+usHeight-2, VO_BLT_SRCTRANSPARENCY, NULL ); + BltVideoObject( box->uiBuffer, hBoxHandle, TOP_LEFT_CORNER, usTopX, usTopY, VO_BLT_SRCTRANSPARENCY, NULL ); + BltVideoObject( box->uiBuffer, hBoxHandle, TOP_RIGHT_CORNER, usTopX + usWidth - 2, usTopY, VO_BLT_SRCTRANSPARENCY, NULL ); + BltVideoObject( box->uiBuffer, hBoxHandle, BOTTOM_RIGHT_CORNER, usTopX + usWidth - 2, usTopY + usHeight - 2, VO_BLT_SRCTRANSPARENCY, NULL ); + BltVideoObject( box->uiBuffer, hBoxHandle, BOTTOM_LEFT_CORNER, usTopX, usTopY + usHeight - 2, VO_BLT_SRCTRANSPARENCY, NULL ); // blit in edges - if (uiNumTilesWide > 0) + if ( uiNumTilesWide > 0 ) { // full pieces - for (uiCount=0; uiCount uiBuffer, hBoxHandle, TOP_EDGE, usTopX+2+(uiCount*BORDER_WIDTH),usTopY, VO_BLT_SRCTRANSPARENCY, NULL ); - BltVideoObject(PopUpBoxList[uiCounter]->uiBuffer, hBoxHandle, BOTTOM_EDGE,usTopX+2+(uiCount*BORDER_WIDTH),usTopY+usHeight-2, VO_BLT_SRCTRANSPARENCY, NULL ); + BltVideoObject( box->uiBuffer, hBoxHandle, TOP_EDGE, usTopX + 2 + (uiCount * BORDER_WIDTH), usTopY, VO_BLT_SRCTRANSPARENCY, NULL ); + BltVideoObject( box->uiBuffer, hBoxHandle, BOTTOM_EDGE, usTopX + 2 + (uiCount * BORDER_WIDTH), usTopY + usHeight - 2, VO_BLT_SRCTRANSPARENCY, NULL ); } // partial pieces - BltVideoObject(PopUpBoxList[uiCounter]->uiBuffer, hBoxHandle, TOP_EDGE, usTopX+usWidth-2-BORDER_WIDTH,usTopY, VO_BLT_SRCTRANSPARENCY, NULL ); - BltVideoObject(PopUpBoxList[uiCounter]->uiBuffer, hBoxHandle, BOTTOM_EDGE,usTopX+usWidth-2-BORDER_WIDTH,usTopY+usHeight-2, VO_BLT_SRCTRANSPARENCY, NULL ); + BltVideoObject( box->uiBuffer, hBoxHandle, TOP_EDGE, usTopX + usWidth - 2 - BORDER_WIDTH, usTopY, VO_BLT_SRCTRANSPARENCY, NULL ); + BltVideoObject( box->uiBuffer, hBoxHandle, BOTTOM_EDGE, usTopX + usWidth - 2 - BORDER_WIDTH, usTopY + usHeight - 2, VO_BLT_SRCTRANSPARENCY, NULL ); } - if (uiNumTilesHigh > 0) + if ( uiNumTilesHigh > 0 ) { // full pieces - for (uiCount=0; uiCount uiBuffer, hBoxHandle, SIDE_EDGE,usTopX, usTopY+2+(uiCount*BORDER_HEIGHT), VO_BLT_SRCTRANSPARENCY, NULL ); - BltVideoObject(PopUpBoxList[uiCounter]->uiBuffer, hBoxHandle, SIDE_EDGE,usTopX+usWidth-2,usTopY+2+(uiCount*BORDER_HEIGHT), VO_BLT_SRCTRANSPARENCY, NULL ); + BltVideoObject( box->uiBuffer, hBoxHandle, SIDE_EDGE, usTopX, usTopY + 2 + (uiCount * BORDER_HEIGHT), VO_BLT_SRCTRANSPARENCY, NULL ); + BltVideoObject( box->uiBuffer, hBoxHandle, SIDE_EDGE, usTopX + usWidth - 2, usTopY + 2 + (uiCount * BORDER_HEIGHT), VO_BLT_SRCTRANSPARENCY, NULL ); } // partial pieces - BltVideoObject(PopUpBoxList[uiCounter]->uiBuffer, hBoxHandle, SIDE_EDGE,usTopX, usTopY+usHeight-2-BORDER_HEIGHT, VO_BLT_SRCTRANSPARENCY, NULL ); - BltVideoObject(PopUpBoxList[uiCounter]->uiBuffer, hBoxHandle, SIDE_EDGE,usTopX+usWidth-2,usTopY+usHeight-2-BORDER_HEIGHT, VO_BLT_SRCTRANSPARENCY, NULL ); + BltVideoObject( box->uiBuffer, hBoxHandle, SIDE_EDGE, usTopX, usTopY + usHeight - 2 - BORDER_HEIGHT, VO_BLT_SRCTRANSPARENCY, NULL ); + BltVideoObject( box->uiBuffer, hBoxHandle, SIDE_EDGE, usTopX + usWidth - 2, usTopY + usHeight - 2 - BORDER_HEIGHT, VO_BLT_SRCTRANSPARENCY, NULL ); } InvalidateRegion( usTopX, usTopY, usTopX + usWidth, usTopY + usHeight ); @@ -1753,9 +1479,9 @@ BOOLEAN DrawBoxText( UINT32 uiCounter ) if ( (uiCounter < 0) || (uiCounter >= MAX_POPUP_BOX_COUNT) ) return(FALSE); - Assert( PopUpBoxList[uiCounter] != NULL ); - auto box = PopUpBoxList[uiCounter]; + Assert( box != NULL ); + //clip text? if ( box->uiFlags & POPUP_BOX_FLAG_CLIP_TEXT ) { @@ -1768,7 +1494,6 @@ BOOLEAN DrawBoxText( UINT32 uiCounter ) for ( size_t i = 0; i < MAX_POPUP_BOX_COLUMNS; i++ ) { - for ( uiCount = 0; uiCount < MAX_POPUP_BOX_STRING_COUNT; uiCount++ ) { auto entry = box->Text[i][uiCount]; @@ -1816,7 +1541,7 @@ BOOLEAN DrawBoxText( UINT32 uiCounter ) } else { - uX = box->Position.iX + box->uiLeftMargin + box->uiSecondColumnCurrentOffset*i; + uX = box->Position.iX + box->uiLeftMargin + box->uiSecondColumnCurrentOffset * i; uY = ((INT16)(box->Position.iY + uiCount * GetFontHeight( entry->uiFont ) + box->uiTopMargin + uiCount * box->uiLineSpace)); } @@ -1826,53 +1551,6 @@ BOOLEAN DrawBoxText( UINT32 uiCounter ) } } - for ( uiCount = 0; uiCount < MAX_POPUP_BOX_STRING_COUNT; uiCount++ ) - { - // there is secondary text in this line? - if ( box->pSecondColumnString[uiCount] ) - { - // set font - SetFont( box->pSecondColumnString[uiCount]->uiFont ); - - // are we highlighting?...shading?..or neither - if ( (box->pSecondColumnString[uiCount]->fHighLightFlag == FALSE) && (box->pSecondColumnString[uiCount]->fShadeFlag == FALSE) ) - { - // neither - SetFontForeground( box->pSecondColumnString[uiCount]->ubForegroundColor ); - } - else if ( (box->pSecondColumnString[uiCount]->fHighLightFlag == TRUE) ) - { - // highlight - SetFontForeground( box->pSecondColumnString[uiCount]->ubHighLight ); - } - else - { - //shading - SetFontForeground( box->pSecondColumnString[uiCount]->ubShade ); - } - - // set background - SetFontBackground( box->pSecondColumnString[uiCount]->ubBackgroundColor ); - - // copy string - wcsncpy( sString, box->pSecondColumnString[uiCount]->pString, wcslen( box->pSecondColumnString[uiCount]->pString ) + 1 ); - - // centering? - if ( box->uiFlags & POPUP_BOX_FLAG_CENTER_TEXT ) - { - FindFontCenterCoordinates( ((INT16)(box->Position.iX + box->uiLeftMargin)), ((INT16)(box->Position.iY + uiCount * GetFontHeight( box->pSecondColumnString[uiCount]->uiFont ) + box->uiTopMargin + uiCount * box->uiLineSpace)), ((INT16)(box->Dimensions.iRight - (box->uiRightMargin + box->uiLeftMargin + 2))), ((INT16)GetFontHeight( box->pSecondColumnString[uiCount]->uiFont )), (sString), ((INT32)box->pSecondColumnString[uiCount]->uiFont), &uX, &uY ); - } - else - { - uX = ((INT16)(box->Position.iX + box->uiLeftMargin + box->uiSecondColumnCurrentOffset + box->usSecondColumnOffsetAdjustment)); - uY = ((INT16)(box->Position.iY + uiCount * GetFontHeight( box->pSecondColumnString[uiCount]->uiFont ) + box->uiTopMargin + uiCount * box->uiLineSpace)); - } - - // print - mprintf( uX, uY, box->pSecondColumnString[uiCount]->pString ); - } - } - if ( box->uiBuffer != guiSAVEBUFFER ) { @@ -1892,7 +1570,7 @@ void ResizeBoxToText( INT32 hBoxHandle ) INT32 iWidth = 0; INT32 iHeight = 0; INT32 iCurrString = 0; - INT32 iSecondColumnLength = 0; + INT32 iColumnLength = 0; if ( (hBoxHandle < 0) || (hBoxHandle >= MAX_POPUP_BOX_COUNT) ) @@ -1912,49 +1590,40 @@ void ResizeBoxToText( INT32 hBoxHandle ) auto box = PopUpBoxList[hBoxHandle]; const UINT32 margins = box->uiLeftMargin + box->uiRightMargin; - iHeight = box->uiTopMargin + box->uiBottomMargin; + const auto columnOffset = box->uiSecondColumnCurrentOffset; for ( iCurrString = 0; iCurrString < MAX_POPUP_BOX_STRING_COUNT; iCurrString++ ) { if ( box->Text[0][iCurrString] != NULL ) { - if ( box->Text[3][iCurrString] != NULL && wcscmp( box->Text[3][iCurrString]->pString, L"") != 0) + if ( box->Text[3][iCurrString] != NULL && wcscmp( box->Text[3][iCurrString]->pString, L"" ) != 0 ) { - iSecondColumnLength = StringPixLength( box->Text[3][iCurrString]->pString, box->Text[3][iCurrString]->uiFont ); - if ( 3*box->uiSecondColumnCurrentOffset + iSecondColumnLength + margins > iWidth ) + iColumnLength = StringPixLength( box->Text[3][iCurrString]->pString, box->Text[3][iCurrString]->uiFont ); + if ( 3 * columnOffset + iColumnLength + margins > iWidth ) { - iWidth = 3*box->uiSecondColumnCurrentOffset + iSecondColumnLength + margins; + iWidth = 3 * columnOffset + iColumnLength + margins; } } else if ( box->Text[2][iCurrString] != NULL && wcscmp( box->Text[2][iCurrString]->pString, L"" ) != 0 ) { - iSecondColumnLength = StringPixLength( box->Text[2][iCurrString]->pString, box->Text[2][iCurrString]->uiFont ); - if ( 2*box->uiSecondColumnCurrentOffset + iSecondColumnLength + margins > iWidth ) + iColumnLength = StringPixLength( box->Text[2][iCurrString]->pString, box->Text[2][iCurrString]->uiFont ); + if ( 2 * columnOffset + iColumnLength + margins > iWidth ) { - iWidth = 2*box->uiSecondColumnCurrentOffset + iSecondColumnLength + margins; + iWidth = 2 * columnOffset + iColumnLength + margins; } } else if ( box->Text[1][iCurrString] != NULL && wcscmp( box->Text[1][iCurrString]->pString, L"" ) != 0 ) { - iSecondColumnLength = StringPixLength( box->Text[1][iCurrString]->pString, box->Text[1][iCurrString]->uiFont ); - if ( box->uiSecondColumnCurrentOffset + iSecondColumnLength + margins > iWidth ) + iColumnLength = StringPixLength( box->Text[1][iCurrString]->pString, box->Text[1][iCurrString]->uiFont ); + if ( columnOffset + iColumnLength + margins > iWidth ) { - iWidth = box->uiSecondColumnCurrentOffset + iSecondColumnLength + margins; + iWidth = columnOffset + iColumnLength + margins; } } - if ( box->pSecondColumnString[iCurrString] != NULL ) - { - iSecondColumnLength = StringPixLength( box->pSecondColumnString[iCurrString]->pString, box->pSecondColumnString[iCurrString]->uiFont ); - if ( box->uiSecondColumnCurrentOffset + iSecondColumnLength + margins > iWidth ) - { - iWidth = box->uiSecondColumnCurrentOffset + iSecondColumnLength + margins; - } - } - INT32 iFirstColumnLength = StringPixLength( box->Text[0][iCurrString]->pString, box->Text[0][iCurrString]->uiFont ) + margins; if ( iFirstColumnLength > iWidth ) iWidth = iFirstColumnLength; @@ -1984,15 +1653,15 @@ void ResizeBoxToText( INT32 hBoxHandle ) BOOLEAN IsBoxShown( UINT32 uiHandle ) { - if ( ( uiHandle < 0 ) || ( uiHandle >= MAX_POPUP_BOX_COUNT ) ) + if ( (uiHandle < 0) || (uiHandle >= MAX_POPUP_BOX_COUNT) ) return(FALSE); - if( PopUpBoxList[ uiHandle ] == NULL ) + if ( PopUpBoxList[uiHandle] == NULL ) { - return ( FALSE ); + return (FALSE); } - return( PopUpBoxList[ uiHandle ]->fShowBox ); + return(PopUpBoxList[uiHandle]->fShowBox); } @@ -2001,7 +1670,7 @@ void MarkAllBoxesAsAltered( void ) INT32 iCounter = 0; // mark all boxes as altered - for( iCounter = 0; iCounter < MAX_POPUP_BOX_COUNT; iCounter++ ) + for ( iCounter = 0; iCounter < MAX_POPUP_BOX_COUNT; iCounter++ ) { ForceUpDateOfBox( iCounter ); } @@ -2015,7 +1684,7 @@ void HideAllBoxes( void ) INT32 iCounter = 0; // hide all the boxes that are shown - for(iCounter=0; iCounter < MAX_POPUP_BOX_COUNT; iCounter++) + for ( iCounter = 0; iCounter < MAX_POPUP_BOX_COUNT; iCounter++ ) { HideBox( iCounter ); } @@ -2024,43 +1693,45 @@ void HideAllBoxes( void ) void RemoveCurrentBoxPrimaryText( INT32 hStringHandle ) { - if ( ( guiCurrentBox < 0 ) || ( guiCurrentBox >= MAX_POPUP_BOX_COUNT ) ) + if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[guiCurrentBox] != NULL ); + auto box = PopUpBoxList[guiCurrentBox]; + Assert( box != NULL ); Assert( hStringHandle < MAX_POPUP_BOX_STRING_COUNT ); // remove & release primary text - if(PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle] != NULL) + if ( box->Text[0][hStringHandle] != NULL ) { - if ( PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle]->pString ) + if ( box->Text[0][hStringHandle]->pString ) { - MemFree(PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle]->pString); + MemFree( box->Text[0][hStringHandle]->pString ); } - MemFree(PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle]); - PopUpBoxList[guiCurrentBox]->Text[0][hStringHandle]=NULL; + MemFree( box->Text[0][hStringHandle] ); + box->Text[0][hStringHandle] = NULL; } } void RemoveCurrentBoxSecondaryText( INT32 hStringHandle ) { - if ( ( guiCurrentBox < 0 ) || ( guiCurrentBox >= MAX_POPUP_BOX_COUNT ) ) + if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) ) return; - Assert( PopUpBoxList[guiCurrentBox] != NULL ); + auto box = PopUpBoxList[guiCurrentBox]; + Assert( box != NULL ); Assert( hStringHandle < MAX_POPUP_BOX_STRING_COUNT ); // remove & release secondary strings - if(PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle] != NULL) + if ( box->Text[1][hStringHandle] != NULL ) { - if ( PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle]->pString ) + if ( box->Text[1][hStringHandle]->pString ) { - MemFree(PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle]->pString); + MemFree( box->Text[1][hStringHandle]->pString ); } - MemFree(PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle]); - PopUpBoxList[guiCurrentBox]->pSecondColumnString[hStringHandle]=NULL; + MemFree( box->Text[1][hStringHandle] ); + box->Text[1][hStringHandle] = NULL; } } @@ -2069,11 +1740,12 @@ void RemoveCurrentBoxText( INT32 hStringHandle, UINT8 column ) if ( (guiCurrentBox < 0) || (guiCurrentBox >= MAX_POPUP_BOX_COUNT) || column >= MAX_POPUP_BOX_COLUMNS ) return; - Assert( PopUpBoxList[guiCurrentBox] != NULL ); + auto box = PopUpBoxList[guiCurrentBox]; + Assert( box != NULL ); Assert( hStringHandle < MAX_POPUP_BOX_STRING_COUNT ); // remove & release text - auto textColumn = PopUpBoxList[guiCurrentBox]->Text[column]; + auto textColumn = box->Text[column]; if ( textColumn[hStringHandle] != NULL ) { diff --git a/Utils/PopUpBox.h b/Utils/PopUpBox.h index a140b179..f1b4ded7 100644 --- a/Utils/PopUpBox.h +++ b/Utils/PopUpBox.h @@ -47,14 +47,11 @@ struct popupbox{ UINT32 uiBuffer; UINT32 uiSecondColumnMinimunOffset; UINT32 uiSecondColumnCurrentOffset; - INT16 usSecondColumnOffsetAdjustment; UINT32 uiBoxMinWidth; BOOLEAN fUpdated; BOOLEAN fShowBox; POPUPSTRINGPTR Text[MAX_POPUP_BOX_COLUMNS][ MAX_POPUP_BOX_STRING_COUNT ]; - // TODO Remove pSecondColumnString - POPUPSTRINGPTR pSecondColumnString[ MAX_POPUP_BOX_STRING_COUNT ]; }; typedef struct popupbox PopUpBo; @@ -76,8 +73,7 @@ UINT32 GetLineSpace( INT32 hBoxHandle ); void SetBoxBuffer(INT32 hBoxHandle, UINT32 uiBuffer); void SetBoxPosition(INT32 hBoxHandle,SGPPoint Position); void GetBoxPosition( INT32 hBoxHandle, SGPPoint *Position ); -UINT32 GetNumberOfLinesOfTextInBox( INT32 hBoxHandle ); -UINT32 GetNumberOfSecondaryLinesOfTextInBox(INT32 hBoxHandle); +UINT32 GetNumberOfLinesOfTextInBox( INT32 hBoxHandle, UINT8 column = 0 ); UINT32 GetTotalNumberOfLinesOfTextInBox( INT32 hBoxHandle ); UINT32 GetBoxSecondColumnCurrentOffset( INT32 hBoxHandle ); void SetBoxSize( INT32 hBoxHandle, SGPRect Dimensions ); @@ -85,8 +81,8 @@ void GetBoxSize( INT32 hBoxHandle, SGPRect *Dimensions ); void SetBoxFlags( INT32 hBoxHandle, UINT32 uiFlags); void SetBorderType(INT32 hBoxHandle,INT32 BorderObjectIndex); void SetBackGroundSurface(INT32 hBoxHandle, INT32 BackGroundSurfaceIndex); -void AddMonoString(UINT32 *hStringHandle, STR16 pString); -void AddColorString(INT32 *hStringHandle, STR16 pString); +void AddMonoString(UINT32 *hStringHandle, STR16 pString, UINT8 column = 0); +void AddColorString(INT32 *hStringHandle, STR16 pString, UINT8 column = 0); void SetPopUpStringFont(INT32 hStringHandle, UINT32 uiFont); void SetBoxFont(INT32 hBoxHandle, UINT32 uiFont); UINT32 GetBoxFont( INT32 hBoxHandle ); @@ -98,13 +94,11 @@ void SetBoxForeground(INT32 hBoxHandle, UINT8 ubColor); void SetBoxBackground(INT32 hBoxHandle, UINT8 ubColor); void SetBoxHighLight(INT32 hBoxHandle, UINT8 ubColor); void SetBoxShade(INT32 hBoxHandle, UINT8 ubColor); -void ShadeStringInBox( INT32 hBoxHandle, INT32 iLineNumber ); -void UnShadeStringInBox( INT32 hBoxHandle, INT32 iLineNumber ); -void HighLightLine( INT32 hStringHandle, UINT8 column ); -void HighLight2ndLine( INT32 hStringHandle ); +void ShadeStringInBox( INT32 hBoxHandle, INT32 iLineNumber, UINT8 column = 0 ); +void UnShadeStringInBox( INT32 hBoxHandle, INT32 iLineNumber, UINT8 column = 0 ); +void HighLightLine( INT32 hStringHandle, UINT8 column = 0 ); void HighLightBoxLine( INT32 hBoxHandle, INT32 iLineNumber, UINT8 column = 0 ); -void HighLight2ndBoxLine( INT32 hBoxHandle, INT32 iLineNumber ); -void UnHighLightLine(INT32 hStringHandle); +void UnHighLightLine(INT32 hStringHandle, UINT8 column = 0); void UnHighLightBox(INT32 hBoxHandle); void RemoveOneCurrentBoxString(INT32 hStringHandle, BOOLEAN fFillGaps); void RemoveAllCurrentBoxStrings( void ); @@ -116,9 +110,6 @@ void DisplayOnePopupBox( UINT32 uiIndex, UINT32 uiBuffer ); void SetCurrentBox(INT32 hBoxHandle); void GetCurrentBox(INT32 *hBoxHandle); -void AddStringToBoxColumn( UINT32 *hStringHandle, STR16 pString, UINT8 column ); -void AddColumnMonoString( UINT32 *hStringHandle, STR16 pString, UINT8 column ); - // resize this box to the text it contains void ResizeBoxToText(INT32 hBoxHandle); @@ -147,10 +138,6 @@ void HideAllBoxes( void ); // add the second column monocrome string void AddSecondColumnMonoString( UINT32 *hStringHandle, STR16 pString ); -void AddMonoStringToSecondColumn(UINT32* hStringHandle, STR16 pString); - -// set the 2nd column font for this box -void SetBoxSecondColumnFont(INT32 hBoxHandle, UINT32 uiFont); // set the minimum offset void SetBoxSecondColumnMinimumOffset( INT32 hBoxHandle, UINT32 uiWidth ); @@ -164,24 +151,17 @@ void SetStringSecondColumnHighLight(INT32 hStringHandle, UINT8 ubColor); void SetStringSecondColumnShade(INT32 hStringHandle, UINT8 ubShade); // now on a box wide basis, one if recomened to use this function after adding all the strings..rather than on an individual basis -void SetBoxSecondColumnForeground(INT32 hBoxHandle, UINT8 ubColor); -void SetBoxSecondColumnBackground(INT32 hBoxHandle, UINT8 ubColor); -void SetBoxSecondColumnHighLight(INT32 hBoxHandle, UINT8 ubColor); -void SetBoxSecondColumnShade(INT32 hBoxHandle, UINT8 ubColor); -// Manual adjustment for 2nd column offset, eg. when 1st column has a title text that's wider than the rest and you want to move 2nd column texts towards the 1st column some. -void SetBoxSecondColumnOffsetAdjustment(INT32 hBoxHandle, INT16 x); - // Set attributes by column -void SetBoxColumnForeground( INT32 hBoxHandle, UINT8 ubColor, UINT8 column ); -void SetBoxColumnBackground( INT32 hBoxHandle, UINT8 ubColor, UINT8 column ); -void SetBoxColumnHighLight( INT32 hBoxHandle, UINT8 ubColor, UINT8 column ); -void SetBoxColumnShade( INT32 hBoxHandle, UINT8 ubColor, UINT8 column ); -void SetBoxColumnFont( INT32 hBoxHandle, UINT32 uiFont, UINT8 column ); +void SetBoxColumnForeground( INT32 hBoxHandle, UINT8 ubColor, UINT8 column = 0 ); +void SetBoxColumnBackground( INT32 hBoxHandle, UINT8 ubColor, UINT8 column = 0 ); +void SetBoxColumnHighLight( INT32 hBoxHandle, UINT8 ubColor, UINT8 column = 0 ); +void SetBoxColumnShade( INT32 hBoxHandle, UINT8 ubColor, UINT8 column = 0 ); +void SetBoxColumnFont( INT32 hBoxHandle, UINT32 uiFont, UINT8 column = 0 ); // secondary shades for boxes -void UnSecondaryShadeStringInBox( INT32 hBoxHandle, INT32 iLineNumber ); -void SecondaryShadeStringInBox( INT32 hBoxHandle, INT32 iLineNumber ); +void UnSecondaryShadeStringInBox( INT32 hBoxHandle, INT32 iLineNumber, UINT8 column = 0 ); +void SecondaryShadeStringInBox( INT32 hBoxHandle, INT32 iLineNumber, UINT8 column = 0 ); void SetBoxSecondaryShade( INT32 iBox, UINT8 ubColor ); From 1a8db5d15bc88ae81ba60ac9d980bc6ac4728cd3 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 27 Jun 2025 19:57:49 +0300 Subject: [PATCH 182/192] More conversions to SoldierID --- .../src/AbstractPlanFactory.cpp | 2 +- Tactical/Overhead.cpp | 174 ++++++++---------- Tactical/Overhead.h | 2 +- Tactical/Soldier Control.cpp | 2 +- Tactical/Soldier Control.h | 2 +- Tactical/TeamTurns.cpp | 4 +- Tactical/opplist.cpp | 16 +- TacticalAI/AIUtils.cpp | 11 +- TacticalAI/NPC.cpp | 8 +- TacticalAI/ai.h | 4 +- TileEngine/SmokeEffects.cpp | 2 +- TileEngine/overhead map.cpp | 9 +- 12 files changed, 111 insertions(+), 125 deletions(-) diff --git a/ModularizedTacticalAI/src/AbstractPlanFactory.cpp b/ModularizedTacticalAI/src/AbstractPlanFactory.cpp index f22c4c8a..accd9113 100644 --- a/ModularizedTacticalAI/src/AbstractPlanFactory.cpp +++ b/ModularizedTacticalAI/src/AbstractPlanFactory.cpp @@ -39,7 +39,7 @@ namespace AI if(i.event_type_ == AIInputData::auditive_event) return os<<"sound: "<ubID<<" was seen at "<ubID.i<<" was seen at "<bTeam = (INT8) cnt; + cnt2->bTeam = (INT8) cnt; } } @@ -3962,7 +3961,7 @@ void HandleNPCTeamMemberDeath( SOLDIERTYPE *pSoldierOld ) #ifdef JA2UB if ( pSoldierOld->ubProfile == MORRIS_UB ) { - INT16 bSoldierID; + SoldierID bSoldierID; SOLDIERTYPE* pOther = FindSoldierByProfileID( MORRIS_UB, FALSE ); if ( pOther ) { @@ -3975,10 +3974,10 @@ void HandleNPCTeamMemberDeath( SOLDIERTYPE *pSoldierOld ) bSoldierID = RandomSoldierIdFromNewMercsOnPlayerTeam(); //if there is any - if( bSoldierID != -1 ) + if( bSoldierID != NOBODY ) { //say the MORRIS dead quote - TacticalCharacterDialogue( &Menptr[ bSoldierID ], QUOTE_LEARNED_TO_HATE_ON_TEAM_WONT_RENEW ); + TacticalCharacterDialogue( bSoldierID, QUOTE_LEARNED_TO_HATE_ON_TEAM_WONT_RENEW ); } } // Ja25no queen @@ -6860,10 +6859,8 @@ BOOLEAN WeSawSomeoneThisTurn( ) void SayBattleSoundFromAnyBodyInSector( INT32 iBattleSnd ) { // WDS - make number of mercenaries, etc. be configurable - // UINT8 ubMercsInSector[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ] = { 0 }; - std::vector ubMercsInSector (CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS, 0); + SoldierID ubMercsInSector[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ] = {}; UINT16 ubNumMercs = 0; - UINT16 ubChosenMerc; SOLDIERTYPE *pTeamSoldier; // Loop through all our guys and randomly say one from someone in our sector @@ -6878,7 +6875,7 @@ void SayBattleSoundFromAnyBodyInSector( INT32 iBattleSnd ) // Add guy if he's a candidate... if ( OK_INSECTOR_MERC( pTeamSoldier ) && !AM_AN_EPC( pTeamSoldier ) && !( pTeamSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) && !(AM_A_ROBOT( pTeamSoldier )) && !pTeamSoldier->flags.fMercAsleep ) { - ubMercsInSector[ ubNumMercs ] = (UINT16)cnt; + ubMercsInSector[ ubNumMercs ] = cnt; ubNumMercs++; } } @@ -6886,9 +6883,9 @@ void SayBattleSoundFromAnyBodyInSector( INT32 iBattleSnd ) // If we are > 0 if ( ubNumMercs > 0 ) { - ubChosenMerc = ubMercsInSector[ (UINT16)Random( ubNumMercs ) ]; + SoldierID ubChosenMerc = ubMercsInSector[ (UINT16)Random( ubNumMercs ) ]; - MercPtrs[ ubChosenMerc ]->DoMercBattleSound( (UINT8)iBattleSnd ); + ubChosenMerc->DoMercBattleSound( (UINT8)iBattleSnd ); } } @@ -7945,10 +7942,9 @@ BOOLEAN CheckForEndOfBattle( BOOLEAN fAnEnemyRetreated ) void CycleThroughKnownEnemies( BOOLEAN backward ) { // static to indicate last position we were at: - SOLDIERTYPE *pSoldier; - static BOOLEAN fFirstTime = TRUE; - static UINT16 usStartToLook; - UINT32 cnt; + static BOOLEAN fFirstTime = TRUE; + static SoldierID usStartToLook; + SoldierID enemy; BOOLEAN fEnemyBehindStartLook = FALSE; BOOLEAN fEnemiesFound = FALSE; @@ -7959,30 +7955,31 @@ void CycleThroughKnownEnemies( BOOLEAN backward ) if(backward) usStartToLook = TOTAL_SOLDIERS; else - usStartToLook = gTacticalStatus.Team[ gbPlayerNum ].bLastID; + usStartToLook = gTacticalStatus.Team[ gbPlayerNum ].bLastID; } - if(backward) - for ( cnt = TOTAL_SOLDIERS-1 , pSoldier = MercPtrs[ cnt ]; cnt >= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt--, pSoldier-- ) + if (backward) + { + for ( enemy = TOTAL_SOLDIERS-1; enemy >= gTacticalStatus.Team[ gbPlayerNum ].bLastID; --enemy ) { // try to find first active, OK enemy - if ( pSoldier->bActive && pSoldier->bInSector && !pSoldier->aiData.bNeutral && (pSoldier->bSide != gbPlayerNum) && (pSoldier->stats.bLife > 0) ) + if ( enemy->bActive && enemy->bInSector && !enemy->aiData.bNeutral && (enemy->bSide != gbPlayerNum) && (enemy->stats.bLife > 0) ) { - if ( pSoldier->bVisible != -1 ) + if ( enemy->bVisible != -1 ) { fEnemiesFound = TRUE; // If we are < ok start, this is the one! - if ( cnt < usStartToLook ) + if ( enemy < usStartToLook ) { - usStartToLook = (UINT16)cnt; + usStartToLook = enemy; // Locate to! //LocateSoldier( pSoldier->ubID, 1 ); //ATE: Change to Slide To... - SlideTo( pSoldier->ubID, SETANDREMOVEPREVIOUSLOCATOR ); + SlideTo( enemy, SETANDREMOVEPREVIOUSLOCATOR ); return; } else @@ -7992,31 +7989,34 @@ void CycleThroughKnownEnemies( BOOLEAN backward ) } } } + } else - for ( cnt = gTacticalStatus.Team[ gbPlayerNum ].bLastID, pSoldier = MercPtrs[ cnt ]; cnt < TOTAL_SOLDIERS; cnt++, pSoldier++ ) { - // try to find first active, OK enemy - if ( pSoldier->bActive && pSoldier->bInSector && !pSoldier->aiData.bNeutral && (pSoldier->bSide != gbPlayerNum) && (pSoldier->stats.bLife > 0) ) + for ( enemy = gTacticalStatus.Team[gbPlayerNum].bLastID; enemy < TOTAL_SOLDIERS; ++enemy ) { - if ( pSoldier->bVisible != -1 ) + // try to find first active, OK enemy + if ( enemy->bActive && enemy->bInSector && !enemy->aiData.bNeutral && (enemy->bSide != gbPlayerNum) && (enemy->stats.bLife > 0) ) { - fEnemiesFound = TRUE; - - // If we are > ok start, this is the one! - if ( cnt > usStartToLook ) + if (enemy->bVisible != -1) { - usStartToLook = (UINT16)cnt; + fEnemiesFound = TRUE; - // Locate to! - //LocateSoldier( pSoldier->ubID, 1 ); + // If we are > ok start, this is the one! + if (enemy > usStartToLook) + { + usStartToLook = enemy; - //ATE: Change to Slide To... - SlideTo( pSoldier->ubID, SETANDREMOVEPREVIOUSLOCATOR ); - return; - } - else - { - fEnemyBehindStartLook = TRUE; + // Locate to! + //LocateSoldier( pSoldier->ubID, 1 ); + + //ATE: Change to Slide To... + SlideTo(enemy, SETANDREMOVEPREVIOUSLOCATOR); + return; + } + else + { + fEnemyBehindStartLook = TRUE; + } } } } @@ -8038,39 +8038,34 @@ void CycleThroughKnownEnemies( BOOLEAN backward ) } else { - usStartToLook = gTacticalStatus.Team[ gbPlayerNum ].bLastID; - - CycleThroughKnownEnemies( ); - } + usStartToLook = gTacticalStatus.Team[ gbPlayerNum ].bLastID; + CycleThroughKnownEnemies( ); + } } } void CycleVisibleEnemies( SOLDIERTYPE *pSrcSoldier ) { - // static to indicate last position we were at: - SOLDIERTYPE *pSoldier; - UINT16 usStartToLook; - UINT32 cnt; + SoldierID enemy; + SoldierID usStartToLook = gTacticalStatus.Team[ gbPlayerNum ].bLastID; - usStartToLook = gTacticalStatus.Team[ gbPlayerNum ].bLastID; - - for ( cnt = gTacticalStatus.Team[ gbPlayerNum ].bLastID, pSoldier = MercPtrs[ cnt ]; cnt < TOTAL_SOLDIERS; cnt++, pSoldier++ ) + for ( enemy = gTacticalStatus.Team[ gbPlayerNum ].bLastID; enemy < TOTAL_SOLDIERS; ++enemy ) { // try to find first active, OK enemy - if ( pSoldier->bActive && pSoldier->bInSector && !pSoldier->aiData.bNeutral && (pSoldier->bSide != gbPlayerNum) && (pSoldier->stats.bLife > 0) ) + if ( enemy->bActive && enemy->bInSector && !enemy->aiData.bNeutral && (enemy->bSide != gbPlayerNum) && (enemy->stats.bLife > 0) ) { - if ( pSrcSoldier->aiData.bOppList[ pSoldier->ubID ] == SEEN_CURRENTLY ) + if ( pSrcSoldier->aiData.bOppList[ enemy ] == SEEN_CURRENTLY ) { // If we are > ok start, this is the one! - if ( cnt > pSrcSoldier->ubLastEnemyCycledID ) + if ( enemy > pSrcSoldier->ubLastEnemyCycledID ) { - pSrcSoldier->ubLastEnemyCycledID = (UINT16)cnt; + pSrcSoldier->ubLastEnemyCycledID = enemy; //ATE: Change to Slide To... - SlideTo( pSoldier->ubID, SETANDREMOVEPREVIOUSLOCATOR ); + SlideTo( enemy, SETANDREMOVEPREVIOUSLOCATOR ); - ChangeInterfaceLevel( pSoldier->pathing.bLevel ); + ChangeInterfaceLevel( enemy->pathing.bLevel ); return; } } @@ -8082,58 +8077,51 @@ void CycleVisibleEnemies( SOLDIERTYPE *pSrcSoldier ) usStartToLook = gTacticalStatus.Team[ gbPlayerNum ].bLastID; - for ( cnt = gTacticalStatus.Team[ gbPlayerNum ].bLastID, pSoldier = MercPtrs[ cnt ]; cnt < TOTAL_SOLDIERS; cnt++, pSoldier++ ) + for ( enemy = gTacticalStatus.Team[ gbPlayerNum ].bLastID; enemy < TOTAL_SOLDIERS; ++enemy ) { // try to find first active, OK enemy - if ( pSoldier->bActive && pSoldier->bInSector && !pSoldier->aiData.bNeutral && (pSoldier->bSide != gbPlayerNum) && (pSoldier->stats.bLife > 0) ) + if (enemy->bActive && enemy->bInSector && !enemy->aiData.bNeutral && (enemy->bSide != gbPlayerNum) && (enemy->stats.bLife > 0) ) { - if ( pSrcSoldier->aiData.bOppList[ pSoldier->ubID ] == SEEN_CURRENTLY ) + if ( pSrcSoldier->aiData.bOppList[ enemy ] == SEEN_CURRENTLY ) { // If we are > ok start, this is the one! - if ( cnt > pSrcSoldier->ubLastEnemyCycledID ) + if ( enemy > pSrcSoldier->ubLastEnemyCycledID ) { - pSrcSoldier->ubLastEnemyCycledID = (UINT16)cnt; + pSrcSoldier->ubLastEnemyCycledID = enemy; //ATE: Change to Slide To... - SlideTo( pSoldier->ubID, SETANDREMOVEPREVIOUSLOCATOR ); + SlideTo(enemy, SETANDREMOVEPREVIOUSLOCATOR ); - ChangeInterfaceLevel( pSoldier->pathing.bLevel ); + ChangeInterfaceLevel( enemy->pathing.bLevel ); return; } } } } - - } void CycleVisibleEnemiesBackward( SOLDIERTYPE *pSrcSoldier ) { - // static to indicate last position we were at: - SOLDIERTYPE *pSoldier; - UINT16 usStartToLook; - UINT32 cnt; + SoldierID enemy; + SoldierID usStartToLook = gTacticalStatus.Team[ gbPlayerNum ].bLastID; - usStartToLook = gTacticalStatus.Team[ gbPlayerNum ].bLastID; - -// for ( cnt = gTacticalStatus.Team[ gbPlayerNum ].bLastID, pSoldier = MercPtrs[ cnt ]; cnt < TOTAL_SOLDIERS; cnt++, pSoldier++ ) - for ( cnt = TOTAL_SOLDIERS-1, pSoldier = MercPtrs[ cnt ]; cnt >= gTacticalStatus.Team[ gbPlayerNum ].bLastID ; cnt--, pSoldier-- ) + for ( enemy = TOTAL_SOLDIERS-1; enemy >= gTacticalStatus.Team[ gbPlayerNum ].bLastID ; --enemy ) { // try to find first active, OK enemy - if ( pSoldier->bActive && pSoldier->bInSector && !pSoldier->aiData.bNeutral && (pSoldier->bSide != gbPlayerNum) && (pSoldier->stats.bLife > 0) ) + if ( enemy->bActive && enemy->bInSector && !enemy->aiData.bNeutral && (enemy->bSide != gbPlayerNum) && (enemy->stats.bLife > 0) ) { - if ( pSrcSoldier->aiData.bOppList[ pSoldier->ubID ] == SEEN_CURRENTLY ) + if ( pSrcSoldier->aiData.bOppList[ enemy ] == SEEN_CURRENTLY ) { // If we are > ok start, this is the one! - if ( cnt < pSrcSoldier->ubLastEnemyCycledID ) + if ( enemy < pSrcSoldier->ubLastEnemyCycledID ) { - pSrcSoldier->ubLastEnemyCycledID = (UINT16)cnt; + pSrcSoldier->ubLastEnemyCycledID = enemy; //ATE: Change to Slide To... - SlideTo( pSoldier->ubID, SETANDREMOVEPREVIOUSLOCATOR ); + SlideTo( enemy, SETANDREMOVEPREVIOUSLOCATOR ); - ChangeInterfaceLevel( pSoldier->pathing.bLevel ); + ChangeInterfaceLevel( enemy->pathing.bLevel ); return; } } @@ -8145,24 +8133,23 @@ void CycleVisibleEnemiesBackward( SOLDIERTYPE *pSrcSoldier ) usStartToLook = gTacticalStatus.Team[ gbPlayerNum ].bLastID; - //for ( cnt = gTacticalStatus.Team[ gbPlayerNum ].bLastID, pSoldier = MercPtrs[ cnt ]; cnt >= 0; cnt--, pSoldier-- ) - for ( cnt = TOTAL_SOLDIERS-1, pSoldier = MercPtrs[ cnt ]; cnt >= gTacticalStatus.Team[ gbPlayerNum ].bLastID; cnt--, pSoldier-- ) + for ( enemy = TOTAL_SOLDIERS-1; enemy >= gTacticalStatus.Team[ gbPlayerNum ].bLastID; --enemy ) { // try to find first active, OK enemy - if ( pSoldier->bActive && pSoldier->bInSector && !pSoldier->aiData.bNeutral && (pSoldier->bSide != gbPlayerNum) && (pSoldier->stats.bLife > 0) ) + if ( enemy->bActive && enemy->bInSector && !enemy->aiData.bNeutral && (enemy->bSide != gbPlayerNum) && (enemy->stats.bLife > 0) ) { - if ( pSrcSoldier->aiData.bOppList[ pSoldier->ubID ] == SEEN_CURRENTLY ) + if ( pSrcSoldier->aiData.bOppList[ enemy ] == SEEN_CURRENTLY ) { // If we are > ok start, this is the one! - if ( cnt < pSrcSoldier->ubLastEnemyCycledID ) + if ( enemy < pSrcSoldier->ubLastEnemyCycledID ) { - pSrcSoldier->ubLastEnemyCycledID = (UINT16)cnt; + pSrcSoldier->ubLastEnemyCycledID = enemy; //ATE: Change to Slide To... - SlideTo( pSoldier->ubID, SETANDREMOVEPREVIOUSLOCATOR ); + SlideTo( enemy, SETANDREMOVEPREVIOUSLOCATOR ); - ChangeInterfaceLevel( pSoldier->pathing.bLevel ); + ChangeInterfaceLevel( enemy->pathing.bLevel ); return; } } @@ -10492,8 +10479,7 @@ BOOLEAN HostileCreaturesPresent() void HandleCreatureTenseQuote( ) { // WDS - make number of mercenaries, etc. be configurable - // UINT8 ubMercsInSector[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ] = { 0 }; - std::vector ubMercsInSector (CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS, 0); + SoldierID ubMercsInSector[ CODE_MAXIMUM_NUMBER_OF_PLAYER_SLOTS ] = {}; UINT16 ubNumMercs = 0; UINT16 ubChosenMerc; SOLDIERTYPE *pTeamSoldier; @@ -10523,7 +10509,7 @@ void HandleCreatureTenseQuote( ) // Add guy if he's a candidate... if ( OK_INSECTOR_MERC( pTeamSoldier ) && !AM_AN_EPC( pTeamSoldier ) && !( pTeamSoldier->flags.uiStatusFlags & SOLDIER_GASSED ) && !(AM_A_ROBOT( pTeamSoldier )) && !pTeamSoldier->flags.fMercAsleep ) { - ubMercsInSector[ ubNumMercs ] = (UINT16)cnt; + ubMercsInSector[ ubNumMercs ] = cnt; ubNumMercs++; } } @@ -10533,7 +10519,7 @@ void HandleCreatureTenseQuote( ) { ubChosenMerc = (UINT16)Random( ubNumMercs ); - DoCreatureTensionQuote ( MercPtrs[ ubMercsInSector[ ubChosenMerc ] ] ); + DoCreatureTensionQuote ( ubMercsInSector[ ubChosenMerc ] ); } // Adjust delay.... diff --git a/Tactical/Overhead.h b/Tactical/Overhead.h index fc89d207..114c4053 100644 --- a/Tactical/Overhead.h +++ b/Tactical/Overhead.h @@ -69,7 +69,7 @@ struct TacticalStatusType INT8 fPanicFlags; INT32 sPanicTriggerGridNoUnused; INT16 sHandGrid; - UINT16 ubSpottersCalledForBy; + SoldierID ubSpottersCalledForBy; SoldierID ubTheChosenOne; UINT32 uiTimeOfLastInput; UINT32 uiTimeSinceDemoOn; diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index 30547a63..be63bdff 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -992,7 +992,7 @@ SOLDIERTYPE& SOLDIERTYPE::operator=(const OLDSOLDIERTYPE_101& src) this->bRegenBoostersUsedToday = src.bRegenBoostersUsedToday; this->bNumPelletsHitBy = src.bNumPelletsHitBy; this->sSkillCheckGridNo = src.sSkillCheckGridNo; - this->ubLastEnemyCycledID = src.ubLastEnemyCycledID; + this->ubLastEnemyCycledID = static_cast( src.ubLastEnemyCycledID ); this->ubPrevSectorID = src.ubPrevSectorID; this->ubNumTilesMovesSinceLastForget = src.ubNumTilesMovesSinceLastForget; diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index 473da2a0..3bba03d3 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -1453,7 +1453,7 @@ public: INT8 bRegenBoostersUsedToday; // Flugente: not used anymore! INT8 bNumPelletsHitBy; INT32 sSkillCheckGridNo; - UINT16 ubLastEnemyCycledID; + SoldierID ubLastEnemyCycledID; UINT8 ubPrevSectorID; UINT8 ubNumTilesMovesSinceLastForget; diff --git a/Tactical/TeamTurns.cpp b/Tactical/TeamTurns.cpp index efac8945..48488f6d 100644 --- a/Tactical/TeamTurns.cpp +++ b/Tactical/TeamTurns.cpp @@ -107,7 +107,7 @@ BOOLEAN InterruptsAllowed = TRUE; BOOLEAN gfHiddenInterrupt = FALSE; SoldierID gubLastInterruptedGuy = NOBODY; -extern UINT16 gsWhoThrewRock; +extern SoldierID gsWhoThrewRock; extern UINT8 gubSightFlags; typedef struct @@ -115,7 +115,7 @@ typedef struct UINT16 ubOutOfTurnPersons; SoldierID InterruptOnlyGuynum; - INT16 sWhoThrewRock; + SoldierID sWhoThrewRock; BOOLEAN InterruptsAllowed; BOOLEAN fHiddenInterrupt; SoldierID ubLastInterruptedGuy; diff --git a/Tactical/opplist.cpp b/Tactical/opplist.cpp index b528e648..3d61980b 100644 --- a/Tactical/opplist.cpp +++ b/Tactical/opplist.cpp @@ -248,7 +248,7 @@ INT8 gbSmellStrength[3] = }; -UINT16 gsWhoThrewRock = NOBODY; +SoldierID gsWhoThrewRock = NOBODY; // % values of sighting distance at various light levels //DBrot: use gGameExternalOptions.ubBrightnessVisionMod instead @@ -1056,7 +1056,7 @@ void OurTeamRadiosRandomlyAbout(UINT16 ubAbout) -INT16 TeamNoLongerSeesMan( UINT8 ubTeam, SOLDIERTYPE *pOpponent, UINT16 ubExcludeID, INT8 bIteration ) +INT16 TeamNoLongerSeesMan( UINT8 ubTeam, SOLDIERTYPE *pOpponent, SoldierID ubExcludeID, INT8 bIteration ) { SOLDIERTYPE *pMate; SoldierID bLoop = gTacticalStatus.Team[ubTeam].bFirstID; @@ -1833,7 +1833,7 @@ void HandleManNoLongerSeen( SOLDIERTYPE * pSoldier, SOLDIERTYPE * pOpponent, INT { // check if I was the only one who was seeing this guy (exlude ourselves) // THIS MUST HAPPEN EVEN FOR ENEMIES, TO MAKE THEIR PUBLIC opplist DECAY! - if (TeamNoLongerSeesMan(pSoldier->bTeam,pOpponent,pSoldier->ubID, 0 )) + if (TeamNoLongerSeesMan(pSoldier->bTeam, pOpponent, pSoldier->ubID, 0)) { #ifdef TESTOPPLIST DebugMsg( TOPIC_JA2OPPLIST, DBG_LEVEL_3, String( "TeamNoLongerSeesMan: ID %d(%S) to ID %d",pSoldier->ubID,pSoldier->name,pOpponent->ubID) ); @@ -5720,7 +5720,7 @@ void ProcessNoise( SoldierID ubNoiseMaker, INT32 sGridNo, INT8 bLevel, UINT8 ubT UINT8 ubLoudestEffVolume, ubEffVolume; // UINT8 ubPlayVolume; UINT8 ubSourceTerrType; - UINT16 ubSource; + SoldierID ubSource; INT8 bTellPlayer = FALSE, bHeard, bSeen; SoldierID ubHeardLoudestBy = NOBODY; UINT8 ubNoiseDir = 0xff, ubLoudestNoiseDir = 0xff; @@ -7718,9 +7718,9 @@ void SetWatchedLocAsUsed( UINT16 ubID, INT32 sGridNo, INT8 bLevel ) BOOLEAN WatchedLocLocationIsEmpty( INT32 sGridNo, INT8 bLevel, INT8 bTeam ) { // look to see if there is anyone near the watched loc who is not on this team - UINT16 ubID; - INT32 sTempGridNo; - INT16 sX, sY; + SoldierID ubID; + INT32 sTempGridNo; + INT16 sX, sY; for ( sY = -WATCHED_LOC_RADIUS; sY <= WATCHED_LOC_RADIUS; sY++ ) { @@ -7732,7 +7732,7 @@ BOOLEAN WatchedLocLocationIsEmpty( INT32 sGridNo, INT8 bLevel, INT8 bTeam ) continue; } ubID = WhoIsThere2( sTempGridNo, bLevel ); - if ( ubID != NOBODY && MercPtrs[ ubID ]->bTeam != bTeam ) + if ( ubID != NOBODY && ubID->bTeam != bTeam ) { return( FALSE ); } diff --git a/TacticalAI/AIUtils.cpp b/TacticalAI/AIUtils.cpp index 5ed40f53..e320e442 100644 --- a/TacticalAI/AIUtils.cpp +++ b/TacticalAI/AIUtils.cpp @@ -830,7 +830,8 @@ INT16 RandomFriendWithin(SOLDIERTYPE *pSoldier) { UINT32 uiLoop; UINT16 usMaxDist; - UINT16 ubFriendCount, ubFriendIDs[MAXMERCS], ubFriendID; + UINT16 ubFriendCount; + SoldierID ubFriendIDs[MAXMERCS], ubFriendID; UINT8 ubDirection; UINT8 ubDirsLeft; BOOLEAN fDirChecked[8]; @@ -5929,14 +5930,14 @@ INT32 RandomizeOpponentLocation(INT32 sSpot, SOLDIERTYPE *pOpponent, INT16 sMaxD } // first call PrepareThreatlist to make threat list -UINT16 ClosestKnownThreatID(SOLDIERTYPE *pSoldier, UINT32 uiThreatCnt) +SoldierID ClosestKnownThreatID(SOLDIERTYPE *pSoldier, UINT32 uiThreatCnt) { CHECKF(pSoldier); UINT32 uiLoop; INT32 sClosestOpponent = NOWHERE; INT32 iRange, iClosestRange; - UINT16 ubClosestOpponentID = NOBODY; + SoldierID ubClosestOpponentID = NOBODY; // use global defined threat list for (uiLoop = 0; uiLoop < uiThreatCnt; uiLoop++) @@ -5959,14 +5960,14 @@ UINT16 ClosestKnownThreatID(SOLDIERTYPE *pSoldier, UINT32 uiThreatCnt) } // first call PrepareThreatlist to make threat list -UINT16 ClosestSeenThreatID(SOLDIERTYPE *pSoldier, UINT32 uiThreatCnt, UINT8 ubMax) +SoldierID ClosestSeenThreatID(SOLDIERTYPE *pSoldier, UINT32 uiThreatCnt, UINT8 ubMax) { CHECKF(pSoldier); UINT32 uiLoop; INT32 sClosestOpponent = NOWHERE; INT32 iRange, iClosestRange; - UINT16 ubClosestOpponentID = NOBODY; + SoldierID ubClosestOpponentID = NOBODY; // use global defined threat list for (uiLoop = 0; uiLoop < uiThreatCnt; uiLoop++) diff --git a/TacticalAI/NPC.cpp b/TacticalAI/NPC.cpp index fe48412c..a6960b64 100644 --- a/TacticalAI/NPC.cpp +++ b/TacticalAI/NPC.cpp @@ -2909,7 +2909,7 @@ BOOLEAN PCDoesFirstAidOnNPC( UINT8 ubNPC ) void TriggerClosestMercWhoCanSeeNPC( UINT8 ubNPC, NPCQuoteInfo *pQuotePtr ) { // Loop through all mercs, gather closest mercs who can see and trigger one! - UINT16 ubMercsInSector[CODE_MAXIMUM_NUMBER_OF_PLAYER_MERCS] = { 0 }; //std::vector would probably be better here + SoldierID ubMercsInSector[CODE_MAXIMUM_NUMBER_OF_PLAYER_MERCS] = {}; //std::vector would probably be better here UINT16 ubNumMercs = 0; UINT16 ubChosenMerc; SOLDIERTYPE *pTeamSoldier, *pSoldier; @@ -2929,7 +2929,7 @@ void TriggerClosestMercWhoCanSeeNPC( UINT8 ubNPC, NPCQuoteInfo *pQuotePtr ) // Add guy if he's a candidate... if ( OK_INSECTOR_MERC( pTeamSoldier ) && pTeamSoldier->aiData.bOppList[ pSoldier->ubID ] == SEEN_CURRENTLY ) { - ubMercsInSector[ ubNumMercs ] = (UINT16)cnt; + ubMercsInSector[ ubNumMercs ] = cnt; ubNumMercs++; } } @@ -2945,11 +2945,11 @@ void TriggerClosestMercWhoCanSeeNPC( UINT8 ubNPC, NPCQuoteInfo *pQuotePtr ) // If 64, do something special if ( pQuotePtr->ubTriggerNPCRec == QUOTE_RESPONSE_TO_MIGUEL_SLASH_QUOTE_MERC_OR_RPC_LETGO ) { - TacticalCharacterDialogueWithSpecialEvent( MercPtrs[ ubMercsInSector[ ubChosenMerc ] ], pQuotePtr->ubTriggerNPCRec, DIALOGUE_SPECIAL_EVENT_PCTRIGGERNPC, 57, 6 ); + TacticalCharacterDialogueWithSpecialEvent( ubMercsInSector[ ubChosenMerc ], pQuotePtr->ubTriggerNPCRec, DIALOGUE_SPECIAL_EVENT_PCTRIGGERNPC, 57, 6 ); } else { - TacticalCharacterDialogue( MercPtrs[ ubMercsInSector[ ubChosenMerc ] ], pQuotePtr->ubTriggerNPCRec ); + TacticalCharacterDialogue( ubMercsInSector[ ubChosenMerc ], pQuotePtr->ubTriggerNPCRec ); } } diff --git a/TacticalAI/ai.h b/TacticalAI/ai.h index 72af7137..3dd5ca2a 100644 --- a/TacticalAI/ai.h +++ b/TacticalAI/ai.h @@ -315,8 +315,8 @@ BOOLEAN AICheckIsFlanking( SOLDIERTYPE *pSoldier ); INT8 CalcMoraleNew(SOLDIERTYPE *pSoldier); UINT32 PrepareThreatlist(SOLDIERTYPE *pSoldier); -UINT16 ClosestSeenThreatID(SOLDIERTYPE *pSoldier, UINT32 uiThreatCnt, UINT8 ubMax = SEEN_CURRENTLY); // first call PrepareThreatlist to make threat list -UINT16 ClosestKnownThreatID(SOLDIERTYPE *pSoldier, UINT32 uiThreatCnt); // first call PrepareThreatlist to make threat list +SoldierID ClosestSeenThreatID(SOLDIERTYPE *pSoldier, UINT32 uiThreatCnt, UINT8 ubMax = SEEN_CURRENTLY); // first call PrepareThreatlist to make threat list +SoldierID ClosestKnownThreatID(SOLDIERTYPE *pSoldier, UINT32 uiThreatCnt); // first call PrepareThreatlist to make threat list BOOLEAN ProneSightCoverAtSpot(SOLDIERTYPE *pSoldier, INT32 sSpot, BOOLEAN fUnlimited); BOOLEAN SightCoverAtSpot(SOLDIERTYPE *pSoldier, INT32 sSpot, BOOLEAN fUnlimited); diff --git a/TileEngine/SmokeEffects.cpp b/TileEngine/SmokeEffects.cpp index 28170ec6..04bc9726 100644 --- a/TileEngine/SmokeEffects.cpp +++ b/TileEngine/SmokeEffects.cpp @@ -204,7 +204,7 @@ INT32 NewSmokeEffect( INT32 sGridNo, UINT16 usItem, INT8 bLevel, SoldierID ubOwn // OJW - 20091027 - Syncronising smoke effect start for multiplayer if (is_networked && is_client) { - SOLDIERTYPE* pSoldier = MercPtrs[ubOwner]; + SOLDIERTYPE* pSoldier = ubOwner; if (pSoldier != NULL) { if (pSoldier->bTeam == 0 || (pSoldier->bTeam == 1 && is_server)) diff --git a/TileEngine/overhead map.cpp b/TileEngine/overhead map.cpp index 14dd2f31..df808584 100644 --- a/TileEngine/overhead map.cpp +++ b/TileEngine/overhead map.cpp @@ -1378,11 +1378,10 @@ void RenderOverheadOverlays() { UINT32 uiDestPitchBYTES; WORLDITEM *pWorldItem; - UINT32 i; SOLDIERTYPE *pSoldier; HVOBJECT hVObject; INT16 sX, sY; - UINT16 end; + SoldierID id, end; UINT16 usLineColor=0; UINT8 *pDestBuf; UINT8 ubPassengers = 0; @@ -1416,10 +1415,10 @@ void RenderOverheadOverlays() || RebelCommand::ShowApproximateEnemyLocations()) marklastenemy = TRUE; - for( i = 0; i < end; ++i ) + for( id = 0; id < end; ++id ) { //First, check to see if the soldier exists and is in the sector. - pSoldier = MercPtrs[ i ]; + pSoldier = id; if( !pSoldier->bActive || !pSoldier->bInSector ) continue; //Soldier is here. Calculate his screen position based on his current gridno. @@ -1695,7 +1694,7 @@ void RenderOverheadOverlays() FLOAT radius_inner = radius - thickness / 2; FLOAT radius_outer = radius + thickness / 2; - for( i = 0 ; i < guiNumWorldItems; ++i ) + for( UINT32 i = 0 ; i < guiNumWorldItems; ++i ) { pWorldItem = &gWorldItems[ i ]; if( !pWorldItem || !pWorldItem->fExists ) From b3b3270e1e5ae3e4cd425e9bb74cfd94ed7eb6f8 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 27 Jun 2025 19:59:01 +0300 Subject: [PATCH 183/192] Adjust constructors --- Tactical/Overhead Types.h | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Tactical/Overhead Types.h b/Tactical/Overhead Types.h index 65e6ec04..02845695 100644 --- a/Tactical/Overhead Types.h +++ b/Tactical/Overhead Types.h @@ -387,13 +387,13 @@ typedef struct SoldierID // TODO: Remove once SoldierID is used everywhere and these are no longer needed inline operator UINT16() const { return i; } - SoldierID(const UINT16 val = TOTAL_SOLDIERS) : i(val) + constexpr SoldierID(const UINT16 val = TOTAL_SOLDIERS) : i(val) { // Limit the maximum value to TOTAL_SOLDIERS. Anything beyond that is invalid if ( i > TOTAL_SOLDIERS ) i = TOTAL_SOLDIERS; } - SoldierID( const UINT32 val ) : i( val ) + constexpr SoldierID( const UINT32 val ) : i( val ) { // Limit the maximum value to TOTAL_SOLDIERS. Anything beyond that is invalid if ( i > TOTAL_SOLDIERS ) @@ -402,7 +402,7 @@ typedef struct SoldierID constexpr SoldierID( const INT32 val ) : i( val ) { // Limit the maximum value to TOTAL_SOLDIERS. Anything beyond that is invalid - if ( i > TOTAL_SOLDIERS ) + if ( i > TOTAL_SOLDIERS || i < 0) i = TOTAL_SOLDIERS; } @@ -486,6 +486,5 @@ inline SoldierID operator+(const unsigned int lhs, const SoldierID rhs) { return inline SoldierID operator+(const INT16 lhs, const SoldierID rhs) { return SoldierID{ static_cast(lhs + rhs.i) }; } -//TODO: Change this to constexpr after SoldierID is ready and the user defined constructor from uint16 is not needed anymore. inline constexpr SoldierID NOBODY{ TOTAL_SOLDIERS }; #endif From 9d1e9e894835acf95eded054b1a3ef98e5694fcc Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 27 Jun 2025 20:28:15 +0300 Subject: [PATCH 184/192] Fix line highlighting --- Strategic/Map Screen Interface.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/Strategic/Map Screen Interface.cpp b/Strategic/Map Screen Interface.cpp index 4812b167..4b3c4479 100644 --- a/Strategic/Map Screen Interface.cpp +++ b/Strategic/Map Screen Interface.cpp @@ -4469,7 +4469,12 @@ void BuildMouseRegionsForMoveBox( void ) MSYS_NO_CURSOR, MoveMenuMvtCallback, MoveMenuBtnCallback ); // set user defines - MSYS_SetRegionUserData( &gMoveMenuRegion[ iCounter ], 0, iCounter ); + auto rowIndex = iCounter; + if (firstColumnFull) + { + rowIndex -= rowOffset; + } + MSYS_SetRegionUserData( &gMoveMenuRegion[ iCounter ], 0, rowIndex); MSYS_SetRegionUserData( &gMoveMenuRegion[ iCounter ], 1, DONE_REGION ); MSYS_SetRegionUserData( &gMoveMenuRegion[ iCounter ], 2, 0 ); iCounter++; @@ -4487,7 +4492,12 @@ void BuildMouseRegionsForMoveBox( void ) MSYS_NO_CURSOR, MoveMenuMvtCallback, MoveMenuBtnCallback ); // set user defines - MSYS_SetRegionUserData( &gMoveMenuRegion[ iCounter ], 0, iCounter ); + auto rowIndex = iCounter; + if (firstColumnFull) + { + rowIndex -= rowOffset; + } + MSYS_SetRegionUserData(&gMoveMenuRegion[iCounter], 0, rowIndex); MSYS_SetRegionUserData( &gMoveMenuRegion[ iCounter ], 1, CANCEL_REGION ); MSYS_SetRegionUserData( &gMoveMenuRegion[ iCounter ], 2, 0 ); iCounter++; From 56dc0088b6a725d72cc8b9c6fd47321efd7e02a3 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Thu, 7 Aug 2025 23:46:09 +0300 Subject: [PATCH 185/192] Fix underflow in loop --- Tactical/Overhead.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index 936f8ebc..f3495a11 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -4896,7 +4896,7 @@ SoldierID FindPrevActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLes SoldierID bLastTeamID = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID; SoldierID cnt = pSoldier->ubID - 1; - for ( ; cnt >= bLastTeamID; --cnt ) + for ( ; cnt > bLastTeamID; --cnt ) { pTeamSoldier = cnt; if ( fOnlyRegularMercs ) @@ -4928,7 +4928,7 @@ SoldierID FindPrevActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLes cnt = gTacticalStatus.Team[ pSoldier->bTeam ].bLastID; // look for all mercs on the same team, - for ( ; cnt >= bLastTeamID; --cnt ) + for ( ; cnt > bLastTeamID; --cnt ) { pTeamSoldier = cnt; if ( fOnlyRegularMercs ) From 9b83d6a3bc01677281929b1c657f2f876159d756 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 8 Aug 2025 16:39:52 +0300 Subject: [PATCH 186/192] Increase squad amount to 40 --- Laptop/IMP Gear.cpp | 8 ++--- Strategic/Assignments.h | 20 +++++++++++ Tactical/Squads.h | 22 +++++++++++- Utils/_ChineseText.cpp | 80 +++++++++++++++++++++++++++++++++++++++++ Utils/_DutchText.cpp | 80 +++++++++++++++++++++++++++++++++++++++++ Utils/_EnglishText.cpp | 80 +++++++++++++++++++++++++++++++++++++++++ Utils/_FrenchText.cpp | 80 +++++++++++++++++++++++++++++++++++++++++ Utils/_GermanText.cpp | 80 +++++++++++++++++++++++++++++++++++++++++ Utils/_ItalianText.cpp | 60 +++++++++++++++++++++++++++++++ Utils/_PolishText.cpp | 80 +++++++++++++++++++++++++++++++++++++++++ Utils/_RussianText.cpp | 80 +++++++++++++++++++++++++++++++++++++++++ 11 files changed, 665 insertions(+), 5 deletions(-) diff --git a/Laptop/IMP Gear.cpp b/Laptop/IMP Gear.cpp index 0d84fb2f..af3dba56 100644 --- a/Laptop/IMP Gear.cpp +++ b/Laptop/IMP Gear.cpp @@ -269,7 +269,7 @@ void IMPGearDisplay( ) gIMPGearGun1 = currentWeapon; std::vector > 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 > 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 > 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 } diff --git a/Strategic/Assignments.h b/Strategic/Assignments.h index fe5c2c05..ad54843b 100644 --- a/Strategic/Assignments.h +++ b/Strategic/Assignments.h @@ -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, diff --git a/Tactical/Squads.h b/Tactical/Squads.h index 904cc5db..a4a145c2 100644 --- a/Tactical/Squads.h +++ b/Tactical/Squads.h @@ -30,6 +30,26 @@ enum{ EIGTHTEENTH_SQUAD, NINTEENTH_SQUAD, TWENTYTH_SQUAD, + SQUAD_TWENTYONE, + SQUAD_TWENTYTWO, + SQUAD_TWENTYTHREE, + SQUAD_TWENTYFOUR, + SQUAD_TWENTYFIVE, + SQUAD_TWENTYSIX, + SQUAD_TWENTYSEVEN, + SQUAD_TWENTYEIGHT, + SQUAD_TWENTYNINE, + SQUAD_THIRTY, + SQUAD_THIRTYONE, + SQUAD_THIRTYTWO, + SQUAD_THIRTYTHREE, + SQUAD_THIRTYFOUR, + SQUAD_THIRTYFIVE, + SQUAD_THIRTYSIX, + SQUAD_THIRTYSEVEN, + SQUAD_THIRTYEIGHT, + SQUAD_THIRTYNINE, + SQUAD_FOURTY, NUMBER_OF_SQUADS, }; @@ -175,4 +195,4 @@ void CheckSquadMovementGroups( void ); //SQUAD10: Check for squads that are oversized at current resolution and move them to another squad void FixOversizedSquadsInSector( void ); -#endif \ No newline at end of file +#endif diff --git a/Utils/_ChineseText.cpp b/Utils/_ChineseText.cpp index 30fd7ce4..923dcc50 100644 --- a/Utils/_ChineseText.cpp +++ b/Utils/_ChineseText.cpp @@ -2433,6 +2433,26 @@ STR16 pAssignmentStrings[] = L"第18小队", L"第19小队", L"第20小队", + L"第21小队", + L"第22小队", + L"第23小队", + L"第24小队", + L"第25小队", + L"第26小队", + L"第27小队", + L"第28小队", + L"第29小队", + L"第30小队", + L"第31小队", + L"第32小队", + L"第33小队", + L"第34小队", + L"第35小队", + L"第36小队", + L"第37小队", + L"第38小队", + L"第39小队", + L"第40小队", L"编队",// on active duty L"医生",// administering medical aid L"病人", // getting medical aid @@ -2545,6 +2565,26 @@ STR16 pPersonnelAssignmentStrings[] = L"第18小队", L"第19小队", L"第20小队", + L"第21小队", + L"第22小队", + L"第23小队", + L"第24小队", + L"第25小队", + L"第26小队", + L"第27小队", + L"第28小队", + L"第29小队", + L"第30小队", + L"第31小队", + L"第32小队", + L"第33小队", + L"第34小队", + L"第35小队", + L"第36小队", + L"第37小队", + L"第38小队", + L"第39小队", + L"第40小队", L"编队", L"医生", L"病人", @@ -2615,6 +2655,26 @@ STR16 pLongAssignmentStrings[] = L"第18小队", L"第19小队", L"第20小队", + L"第21小队", + L"第22小队", + L"第23小队", + L"第24小队", + L"第25小队", + L"第26小队", + L"第27小队", + L"第28小队", + L"第29小队", + L"第30小队", + L"第31小队", + L"第32小队", + L"第33小队", + L"第34小队", + L"第35小队", + L"第36小队", + L"第37小队", + L"第38小队", + L"第39小队", + L"第40小队", L"编队", L"医生", L"病人", @@ -3064,6 +3124,26 @@ STR16 pSquadMenuStrings[] = L"第18小队", L"第19小队", L"第20小队", + L"第21小队", + L"第22小队", + L"第23小队", + L"第24小队", + L"第25小队", + L"第26小队", + L"第27小队", + L"第28小队", + L"第29小队", + L"第30小队", + L"第31小队", + L"第32小队", + L"第33小队", + L"第34小队", + L"第35小队", + L"第36小队", + L"第37小队", + L"第38小队", + L"第39小队", + L"第40小队", L"取消", }; diff --git a/Utils/_DutchText.cpp b/Utils/_DutchText.cpp index 4c56a70b..a4b8fd8f 100644 --- a/Utils/_DutchText.cpp +++ b/Utils/_DutchText.cpp @@ -2432,6 +2432,26 @@ STR16 pAssignmentStrings[] = L"Team 18", L"Team 19", L"Team 20", + L"Team 21", + L"Team 22", + L"Team 23", + L"Team 24", + L"Team 25", + L"Team 26", + L"Team 27", + L"Team 28", + L"Team 29", + L"Team 30", + L"Team 31", + L"Team 32", + L"Team 33", + L"Team 34", + L"Team 35", + L"Team 36", + L"Team 37", + L"Team 38", + L"Team 39", + L"Team 40", L"Dienst", // on active duty L"Dokter", // administering medical aid L"Patiënt", // getting medical aid @@ -2544,6 +2564,26 @@ STR16 pPersonnelAssignmentStrings[] = L"Team 18", L"Team 19", L"Team 20", + L"Team 21", + L"Team 22", + L"Team 23", + L"Team 24", + L"Team 25", + L"Team 26", + L"Team 27", + L"Team 28", + L"Team 29", + L"Team 30", + L"Team 31", + L"Team 32", + L"Team 33", + L"Team 34", + L"Team 35", + L"Team 36", + L"Team 37", + L"Team 38", + L"Team 39", + L"Team 40", L"Dienst", // on active duty L"Dokter", // administering medical aid L"Patiënt", // getting medical aid @@ -2614,6 +2654,26 @@ STR16 pLongAssignmentStrings[] = L"Team 18", L"Team 19", L"Team 20", + L"Team 21", + L"Team 22", + L"Team 23", + L"Team 24", + L"Team 25", + L"Team 26", + L"Team 27", + L"Team 28", + L"Team 29", + L"Team 30", + L"Team 31", + L"Team 32", + L"Team 33", + L"Team 34", + L"Team 35", + L"Team 36", + L"Team 37", + L"Team 38", + L"Team 39", + L"Team 40", L"Dienst", // on active duty L"Dokter", // administering medical aid L"Patiënt", // getting medical aid @@ -3065,6 +3125,26 @@ STR16 pSquadMenuStrings[] = L"Team 18", L"Team 19", L"Team 20", + L"Team 21", + L"Team 22", + L"Team 23", + L"Team 24", + L"Team 25", + L"Team 26", + L"Team 27", + L"Team 28", + L"Team 29", + L"Team 30", + L"Team 31", + L"Team 32", + L"Team 33", + L"Team 34", + L"Team 35", + L"Team 36", + L"Team 37", + L"Team 38", + L"Team 39", + L"Team 40", L"Stop", }; diff --git a/Utils/_EnglishText.cpp b/Utils/_EnglishText.cpp index 820bef40..5d9d07a4 100644 --- a/Utils/_EnglishText.cpp +++ b/Utils/_EnglishText.cpp @@ -2433,6 +2433,26 @@ STR16 pAssignmentStrings[] = L"Squad 18", L"Squad 19", L"Squad 20", + L"Squad 21", + L"Squad 22", + L"Squad 23", + L"Squad 24", + L"Squad 25", + L"Squad 26", + L"Squad 27", + L"Squad 28", + L"Squad 29", + L"Squad 30", + L"Squad 31", + L"Squad 32", + L"Squad 33", + L"Squad 34", + L"Squad 35", + L"Squad 36", + L"Squad 37", + L"Squad 38", + L"Squad 39", + L"Squad 40", L"On Duty", // on active duty L"Doctor", // administering medical aid L"Patient", // getting medical aid @@ -2545,6 +2565,26 @@ STR16 pPersonnelAssignmentStrings[] = L"Squad 18", L"Squad 19", L"Squad 20", + L"Squad 21", + L"Squad 22", + L"Squad 23", + L"Squad 24", + L"Squad 25", + L"Squad 26", + L"Squad 27", + L"Squad 28", + L"Squad 29", + L"Squad 30", + L"Squad 31", + L"Squad 32", + L"Squad 33", + L"Squad 34", + L"Squad 35", + L"Squad 36", + L"Squad 37", + L"Squad 38", + L"Squad 39", + L"Squad 40", L"On Duty", L"Doctor", L"Patient", @@ -2615,6 +2655,26 @@ STR16 pLongAssignmentStrings[] = L"Squad 18", L"Squad 19", L"Squad 20", + L"Squad 21", + L"Squad 22", + L"Squad 23", + L"Squad 24", + L"Squad 25", + L"Squad 26", + L"Squad 27", + L"Squad 28", + L"Squad 29", + L"Squad 30", + L"Squad 31", + L"Squad 32", + L"Squad 33", + L"Squad 34", + L"Squad 35", + L"Squad 36", + L"Squad 37", + L"Squad 38", + L"Squad 39", + L"Squad 40", L"On Duty", L"Doctor", L"Patient", @@ -3064,6 +3124,26 @@ STR16 pSquadMenuStrings[] = L"Squad 18", L"Squad 19", L"Squad 20", + L"Squad 21", + L"Squad 22", + L"Squad 23", + L"Squad 24", + L"Squad 25", + L"Squad 26", + L"Squad 27", + L"Squad 28", + L"Squad 29", + L"Squad 30", + L"Squad 31", + L"Squad 32", + L"Squad 33", + L"Squad 34", + L"Squad 35", + L"Squad 36", + L"Squad 37", + L"Squad 38", + L"Squad 39", + L"Squad 40", L"Cancel", }; diff --git a/Utils/_FrenchText.cpp b/Utils/_FrenchText.cpp index 77fc295f..60a785b6 100644 --- a/Utils/_FrenchText.cpp +++ b/Utils/_FrenchText.cpp @@ -2441,6 +2441,26 @@ STR16 pAssignmentStrings[] = L"Esc. 18", L"Esc. 19", L"Esc. 20", + L"Esc. 21", + L"Esc. 22", + L"Esc. 23", + L"Esc. 24", + L"Esc. 25", + L"Esc. 26", + L"Esc. 27", + L"Esc. 28", + L"Esc. 29", + L"Esc. 30", + L"Esc. 31", + L"Esc. 32", + L"Esc. 33", + L"Esc. 34", + L"Esc. 35", + L"Esc. 36", + L"Esc. 37", + L"Esc. 38", + L"Esc. 39", + L"Esc. 40", L"Service", // on active duty L"Docteur", // administering medical aid L"Patient(e)", // getting medical aid @@ -2553,6 +2573,26 @@ STR16 pPersonnelAssignmentStrings[] = L"Esc. 18", L"Esc. 19", L"Esc. 20", + L"Esc. 21", + L"Esc. 22", + L"Esc. 23", + L"Esc. 24", + L"Esc. 25", + L"Esc. 26", + L"Esc. 27", + L"Esc. 28", + L"Esc. 29", + L"Esc. 30", + L"Esc. 31", + L"Esc. 32", + L"Esc. 33", + L"Esc. 34", + L"Esc. 35", + L"Esc. 36", + L"Esc. 37", + L"Esc. 38", + L"Esc. 39", + L"Esc. 40", L"Service", L"Docteur", L"Patient", @@ -2623,6 +2663,26 @@ STR16 pLongAssignmentStrings[] = L"Esc. 18", L"Esc. 19", L"Esc. 20", + L"Esc. 21", + L"Esc. 22", + L"Esc. 23", + L"Esc. 24", + L"Esc. 25", + L"Esc. 26", + L"Esc. 27", + L"Esc. 28", + L"Esc. 29", + L"Esc. 30", + L"Esc. 31", + L"Esc. 32", + L"Esc. 33", + L"Esc. 34", + L"Esc. 35", + L"Esc. 36", + L"Esc. 37", + L"Esc. 38", + L"Esc. 39", + L"Esc. 40", L"Service", L"Docteur", L"Patient", @@ -3072,6 +3132,26 @@ STR16 pSquadMenuStrings[] = L"Esc. 18", L"Esc. 19", L"Esc. 20", + L"Esc. 21", + L"Esc. 22", + L"Esc. 23", + L"Esc. 24", + L"Esc. 25", + L"Esc. 26", + L"Esc. 27", + L"Esc. 28", + L"Esc. 29", + L"Esc. 30", + L"Esc. 31", + L"Esc. 32", + L"Esc. 33", + L"Esc. 34", + L"Esc. 35", + L"Esc. 36", + L"Esc. 37", + L"Esc. 38", + L"Esc. 39", + L"Esc. 40", L"Annuler", }; diff --git a/Utils/_GermanText.cpp b/Utils/_GermanText.cpp index 62bc2deb..c6eb5f45 100644 --- a/Utils/_GermanText.cpp +++ b/Utils/_GermanText.cpp @@ -2472,6 +2472,26 @@ STR16 pAssignmentStrings[] = L"Trupp 18", L"Trupp 19", L"Trupp 20", + L"Trupp 21", + L"Trupp 22", + L"Trupp 23", + L"Trupp 24", + L"Trupp 25", + L"Trupp 26", + L"Trupp 27", + L"Trupp 28", + L"Trupp 29", + L"Trupp 30", + L"Trupp 31", + L"Trupp 32", + L"Trupp 33", + L"Trupp 34", + L"Trupp 35", + L"Trupp 36", + L"Trupp 37", + L"Trupp 38", + L"Trupp 39", + L"Trupp 40", L"Dienst", // on active duty L"Doktor", // administering medical aid L"Patient", // getting medical aid @@ -2580,6 +2600,26 @@ STR16 pPersonnelAssignmentStrings[] = L"Trupp 18", L"Trupp 19", L"Trupp 20", + L"Trupp 21", + L"Trupp 22", + L"Trupp 23", + L"Trupp 24", + L"Trupp 25", + L"Trupp 26", + L"Trupp 27", + L"Trupp 28", + L"Trupp 29", + L"Trupp 30", + L"Trupp 31", + L"Trupp 32", + L"Trupp 33", + L"Trupp 34", + L"Trupp 35", + L"Trupp 36", + L"Trupp 37", + L"Trupp 38", + L"Trupp 39", + L"Trupp 40", L"Dienst", L"Doktor", L"Patient", @@ -2648,6 +2688,26 @@ STR16 pLongAssignmentStrings[] = L"Trupp 18", L"Trupp 19", L"Trupp 20", + L"Trupp 21", + L"Trupp 22", + L"Trupp 23", + L"Trupp 24", + L"Trupp 25", + L"Trupp 26", + L"Trupp 27", + L"Trupp 28", + L"Trupp 29", + L"Trupp 30", + L"Trupp 31", + L"Trupp 32", + L"Trupp 33", + L"Trupp 34", + L"Trupp 35", + L"Trupp 36", + L"Trupp 37", + L"Trupp 38", + L"Trupp 39", + L"Trupp 40", L"Dienst", L"Doktor", L"Patient", @@ -3093,6 +3153,26 @@ STR16 pSquadMenuStrings[] = L"Trupp 18", L"Trupp 19", L"Trupp 20", + L"Trupp 21", + L"Trupp 22", + L"Trupp 23", + L"Trupp 24", + L"Trupp 25", + L"Trupp 26", + L"Trupp 27", + L"Trupp 28", + L"Trupp 29", + L"Trupp 30", + L"Trupp 31", + L"Trupp 32", + L"Trupp 33", + L"Trupp 34", + L"Trupp 35", + L"Trupp 36", + L"Trupp 37", + L"Trupp 38", + L"Trupp 39", + L"Trupp 40", L"Abbrechen", }; diff --git a/Utils/_ItalianText.cpp b/Utils/_ItalianText.cpp index 1968ae29..a65c4ae3 100644 --- a/Utils/_ItalianText.cpp +++ b/Utils/_ItalianText.cpp @@ -2539,6 +2539,26 @@ STR16 pPersonnelAssignmentStrings[] = L"Squadra 18", L"Squadra 19", L"Squadra 20", + L"Squadra 21", + L"Squadra 22", + L"Squadra 23", + L"Squadra 24", + L"Squadra 25", + L"Squadra 26", + L"Squadra 27", + L"Squadra 28", + L"Squadra 29", + L"Squadra 30", + L"Squadra 31", + L"Squadra 32", + L"Squadra 33", + L"Squadra 34", + L"Squadra 35", + L"Squadra 36", + L"Squadra 37", + L"Squadra 38", + L"Squadra 39", + L"Squadra 40", L"In servizio", L"Dottore", L"Paziente", @@ -2609,6 +2629,26 @@ STR16 pLongAssignmentStrings[] = L"Squadra 18", L"Squadra 19", L"Squadra 20", + L"Squadra 21", + L"Squadra 22", + L"Squadra 23", + L"Squadra 24", + L"Squadra 25", + L"Squadra 26", + L"Squadra 27", + L"Squadra 28", + L"Squadra 29", + L"Squadra 30", + L"Squadra 31", + L"Squadra 32", + L"Squadra 33", + L"Squadra 34", + L"Squadra 35", + L"Squadra 36", + L"Squadra 37", + L"Squadra 38", + L"Squadra 39", + L"Squadra 40", L"In servizio", L"Dottore", L"Paziente", @@ -3060,6 +3100,26 @@ STR16 pSquadMenuStrings[] = L"Squadra 18", L"Squadra 19", L"Squadra 20", + L"Squadra 21", + L"Squadra 22", + L"Squadra 23", + L"Squadra 24", + L"Squadra 25", + L"Squadra 26", + L"Squadra 27", + L"Squadra 28", + L"Squadra 29", + L"Squadra 30", + L"Squadra 31", + L"Squadra 32", + L"Squadra 33", + L"Squadra 34", + L"Squadra 35", + L"Squadra 36", + L"Squadra 37", + L"Squadra 38", + L"Squadra 39", + L"Squadra 40", L"Annulla", }; diff --git a/Utils/_PolishText.cpp b/Utils/_PolishText.cpp index 379f3f5a..3285ad37 100644 --- a/Utils/_PolishText.cpp +++ b/Utils/_PolishText.cpp @@ -2439,6 +2439,26 @@ STR16 pAssignmentStrings[] = L"Oddz. 18", L"Oddz. 19", L"Oddz. 20", + L"Oddz. 21", + L"Oddz. 22", + L"Oddz. 23", + L"Oddz. 24", + L"Oddz. 25", + L"Oddz. 26", + L"Oddz. 27", + L"Oddz. 28", + L"Oddz. 29", + L"Oddz. 30", + L"Oddz. 31", + L"Oddz. 32", + L"Oddz. 33", + L"Oddz. 34", + L"Oddz. 35", + L"Oddz. 36", + L"Oddz. 37", + L"Oddz. 38", + L"Oddz. 39", + L"Oddz. 40", L"Służba", // on active duty L"Lekarz", // administering medical aid L"Pacjent", // getting medical aid @@ -2551,6 +2571,26 @@ STR16 pPersonnelAssignmentStrings[] = L"Oddz. 18", L"Oddz. 19", L"Oddz. 20", + L"Oddz. 21", + L"Oddz. 22", + L"Oddz. 23", + L"Oddz. 24", + L"Oddz. 25", + L"Oddz. 26", + L"Oddz. 27", + L"Oddz. 28", + L"Oddz. 29", + L"Oddz. 30", + L"Oddz. 31", + L"Oddz. 32", + L"Oddz. 33", + L"Oddz. 34", + L"Oddz. 35", + L"Oddz. 36", + L"Oddz. 37", + L"Oddz. 38", + L"Oddz. 39", + L"Oddz. 40", L"Służba", L"Lekarz", L"Pacjent", @@ -2621,6 +2661,26 @@ STR16 pLongAssignmentStrings[] = L"Oddział 18", L"Oddział 19", L"Oddział 20", + L"Oddział 21", + L"Oddział 22", + L"Oddział 23", + L"Oddział 24", + L"Oddział 25", + L"Oddział 26", + L"Oddział 27", + L"Oddział 28", + L"Oddział 29", + L"Oddział 30", + L"Oddział 31", + L"Oddział 32", + L"Oddział 33", + L"Oddział 34", + L"Oddział 35", + L"Oddział 36", + L"Oddział 37", + L"Oddział 38", + L"Oddział 39", + L"Oddział 40", L"Służba", L"Lekarz", L"Pacjent", @@ -3070,6 +3130,26 @@ STR16 pSquadMenuStrings[] = L"Oddział 18", L"Oddział 19", L"Oddział 20", + L"Oddział 21", + L"Oddział 22", + L"Oddział 23", + L"Oddział 24", + L"Oddział 25", + L"Oddział 26", + L"Oddział 27", + L"Oddział 28", + L"Oddział 29", + L"Oddział 30", + L"Oddział 31", + L"Oddział 32", + L"Oddział 33", + L"Oddział 34", + L"Oddział 35", + L"Oddział 36", + L"Oddział 37", + L"Oddział 38", + L"Oddział 39", + L"Oddział 40", L"Anuluj", }; diff --git a/Utils/_RussianText.cpp b/Utils/_RussianText.cpp index 9b9b99e2..bea56f5e 100644 --- a/Utils/_RussianText.cpp +++ b/Utils/_RussianText.cpp @@ -2433,6 +2433,26 @@ STR16 pAssignmentStrings[] = L"Отряд 18", L"Отряд 19", L"Отряд 20", + L"Отряд 21", + L"Отряд 22", + L"Отряд 23", + L"Отряд 24", + L"Отряд 25", + L"Отряд 26", + L"Отряд 27", + L"Отряд 28", + L"Отряд 29", + L"Отряд 30", + L"Отряд 31", + L"Отряд 32", + L"Отряд 33", + L"Отряд 34", + L"Отряд 35", + L"Отряд 36", + L"Отряд 37", + L"Отряд 38", + L"Отряд 39", + L"Отряд 40", L"На службе", // on active duty L"Медик", // administering medical aid L"Пациент", // getting medical aid @@ -2545,6 +2565,26 @@ STR16 pPersonnelAssignmentStrings[] = L"Отряд 18", L"Отряд 19", L"Отряд 20", + L"Отряд 21", + L"Отряд 22", + L"Отряд 23", + L"Отряд 24", + L"Отряд 25", + L"Отряд 26", + L"Отряд 27", + L"Отряд 28", + L"Отряд 29", + L"Отряд 30", + L"Отряд 31", + L"Отряд 32", + L"Отряд 33", + L"Отряд 34", + L"Отряд 35", + L"Отряд 36", + L"Отряд 37", + L"Отряд 38", + L"Отряд 39", + L"Отряд 40", L"На службе", L"Медик", L"Пациент", @@ -2615,6 +2655,26 @@ STR16 pLongAssignmentStrings[] = L"Отряд 18", L"Отряд 19", L"Отряд 20", + L"Отряд 21", + L"Отряд 22", + L"Отряд 23", + L"Отряд 24", + L"Отряд 25", + L"Отряд 26", + L"Отряд 27", + L"Отряд 28", + L"Отряд 29", + L"Отряд 30", + L"Отряд 31", + L"Отряд 32", + L"Отряд 33", + L"Отряд 34", + L"Отряд 35", + L"Отряд 36", + L"Отряд 37", + L"Отряд 38", + L"Отряд 39", + L"Отряд 40", L"На службе", L"Медик", L"Пациент", @@ -3064,6 +3124,26 @@ STR16 pSquadMenuStrings[] = L"Отряд 18", L"Отряд 19", L"Отряд 20", + L"Отряд 21", + L"Отряд 22", + L"Отряд 23", + L"Отряд 24", + L"Отряд 25", + L"Отряд 26", + L"Отряд 27", + L"Отряд 28", + L"Отряд 29", + L"Отряд 30", + L"Отряд 31", + L"Отряд 32", + L"Отряд 33", + L"Отряд 34", + L"Отряд 35", + L"Отряд 36", + L"Отряд 37", + L"Отряд 38", + L"Отряд 39", + L"Отряд 40", L"Отмена", }; From d078a3439f1241b53b00ec58548201af0e7d2a93 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 8 Aug 2025 17:01:13 +0300 Subject: [PATCH 187/192] Fix squad movement popupbox for increased squads --- Strategic/Map Screen Interface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Strategic/Map Screen Interface.cpp b/Strategic/Map Screen Interface.cpp index 4b3c4479..0e85e45a 100644 --- a/Strategic/Map Screen Interface.cpp +++ b/Strategic/Map Screen Interface.cpp @@ -3777,7 +3777,7 @@ void AddStringsToMoveBox( void ) CHAR16 sString[ 128 ], sStringB[ 128 ]; UINT32 hStringHandle; BOOLEAN fFirstOne = TRUE; - const INT32 columnMaxEntries = 5 * gGameOptions.ubSquadSize; + const INT32 columnMaxEntries = 40; INT32 entries = 0; bool isFirstColumnFull = false; bool secondColumnFull = false; From 63f614f957f087fce4cafa4b7f342763bd74f2a3 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 8 Aug 2025 17:41:40 +0300 Subject: [PATCH 188/192] Add FLAGS64 typedef --- sgp/Types.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sgp/Types.h b/sgp/Types.h index 6c304ad3..a0b14a31 100644 --- a/sgp/Types.h +++ b/sgp/Types.h @@ -52,7 +52,8 @@ typedef CHAR16 * STR16; // flags (individual bits used) typedef unsigned char FLAGS8; typedef unsigned short FLAGS16; -typedef unsigned long FLAGS32; +typedef unsigned long FLAGS32; +typedef UINT64 FLAGS64; // other typedef unsigned char BOOLEAN; typedef void * PTR; From c78f8faefc19efb6071770bbc55ac6b6e2f9080b Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 8 Aug 2025 17:41:51 +0300 Subject: [PATCH 189/192] Whitespace changes --- sgp/Types.h | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/sgp/Types.h b/sgp/Types.h index a0b14a31..5ccea912 100644 --- a/sgp/Types.h +++ b/sgp/Types.h @@ -29,38 +29,38 @@ // HEY WIZARDRY DUDES, JA2 ISN'T THE ONLY PROGRAM WE COMPILE! :-) -typedef unsigned int UINT32; -typedef signed __int64 INT64; // WANNE - BMP: Used for Big Maps -typedef signed int INT32; +typedef unsigned int UINT32; +typedef signed __int64 INT64; // WANNE - BMP: Used for Big Maps +typedef signed int INT32; typedef unsigned __int64 UINT64; //typedef unsigned long long UINT128; //Madd: Doing away with this redundant type // integers typedef unsigned char UINT8; -typedef signed char INT8; +typedef signed char INT8; typedef unsigned short UINT16; typedef signed short INT16; // floats typedef float FLOAT; typedef double DOUBLE; // strings -typedef char CHAR8; -typedef wchar_t CHAR16; -typedef CHAR8 * STR; -typedef CHAR8 * STR8; -typedef CHAR16 * STR16; +typedef char CHAR8; +typedef wchar_t CHAR16; +typedef CHAR8 * STR; +typedef CHAR8 * STR8; +typedef CHAR16 * STR16; // flags (individual bits used) -typedef unsigned char FLAGS8; +typedef unsigned char FLAGS8; typedef unsigned short FLAGS16; typedef unsigned long FLAGS32; typedef UINT64 FLAGS64; // other -typedef unsigned char BOOLEAN; -typedef void * PTR; +typedef unsigned char BOOLEAN; +typedef void * PTR; typedef unsigned short HNDL; -typedef UINT8 BYTE; -typedef CHAR8 STRING512[512]; -typedef UINT32 HWFILE; +typedef UINT8 BYTE; +typedef CHAR8 STRING512[512]; +typedef UINT32 HWFILE; #define SGPFILENAME_LEN 100 typedef CHAR8 SGPFILENAME[SGPFILENAME_LEN]; From b7bfd8a2eb94e9f10fd22c5bbb6387ab20e18ac3 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 8 Aug 2025 17:42:25 +0300 Subject: [PATCH 190/192] Use FLAGS64 for flagmasks --- Tactical/Item Types.h | 4 ++-- Tactical/Items.cpp | 6 +++--- Tactical/Items.h | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Tactical/Item Types.h b/Tactical/Item Types.h index 67600237..98f57ded 100644 --- a/Tactical/Item Types.h +++ b/Tactical/Item Types.h @@ -1052,8 +1052,8 @@ typedef struct UINT64 nasLayoutClass; UINT64 ulAvailableAttachmentPoint; UINT64 ulAttachmentPoint; - UINT64 usItemFlag; // bitflags to store various item properties (better than introducing 64 BOOLEAN values). If I only had thought of this earlier.... - UINT64 usItemFlag2; // bitflags to store various item properties + FLAGS64 usItemFlag; // bitflags to store various item properties (better than introducing 64 BOOLEAN values). If I only had thought of this earlier.... + FLAGS64 usItemFlag2; // bitflags to store various item properties UINT32 uiIndex; UINT32 usItemClass; diff --git a/Tactical/Items.cpp b/Tactical/Items.cpp index c88fd215..645ba111 100644 --- a/Tactical/Items.cpp +++ b/Tactical/Items.cpp @@ -15249,18 +15249,18 @@ void CheckBombSpecifics( OBJECTTYPE * pObj, INT8* detonatortype, INT8* setting, } // Flugente: check for specific flags -BOOLEAN HasItemFlag( UINT16 usItem, UINT64 aFlag ) +BOOLEAN HasItemFlag( UINT16 usItem, FLAGS64 aFlag ) { return( (Item[usItem].usItemFlag & aFlag) != 0 ); } -BOOLEAN HasItemFlag2(UINT16 usItem, UINT64 aFlag) +BOOLEAN HasItemFlag2(UINT16 usItem, FLAGS64 aFlag) { return((Item[usItem].usItemFlag2 & aFlag) != 0); } // Flugente: get first item number that has this flag. Use with caution, as we search in all items -BOOLEAN GetFirstItemWithFlag( UINT16* pusItem, UINT64 aFlag ) +BOOLEAN GetFirstItemWithFlag( UINT16* pusItem, FLAGS64 aFlag ) { UINT16 i; for ( i = 1; i < gMAXITEMS_READ; ++i ) diff --git a/Tactical/Items.h b/Tactical/Items.h index fe9465b1..9b533363 100644 --- a/Tactical/Items.h +++ b/Tactical/Items.h @@ -566,11 +566,11 @@ UINT64 GetAvailableAttachmentPoint ( OBJECTTYPE * pObject, UINT8 subObject ); void CheckBombSpecifics( OBJECTTYPE * pObj, INT8* detonatortype, INT8* setting, INT8* defusefrequency ); // Flugente: check for specific flags -BOOLEAN HasItemFlag(UINT16 usItem, UINT64 aFlag); -BOOLEAN HasItemFlag2(UINT16 usItem, UINT64 aFlag); +BOOLEAN HasItemFlag(UINT16 usItem, FLAGS64 aFlag); +BOOLEAN HasItemFlag2(UINT16 usItem, FLAGS64 aFlag); // Flugente: get first item number that has this flag. Use with caution, as we search in all items -BOOLEAN GetFirstItemWithFlag( UINT16* pusItem, UINT64 aFlag ); +BOOLEAN GetFirstItemWithFlag( UINT16* pusItem, FLAGS64 aFlag ); // Flugente: check if this object is currently fed from an external source (belts in inventory, other mercs) BOOLEAN ObjectIsBeingFedExternal(SOLDIERTYPE* pSoldier, OBJECTTYPE * pObject); From fd9611ae0407c909bfccc1a5968aba4cced50365 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 8 Aug 2025 18:38:53 +0300 Subject: [PATCH 191/192] Remove compiler warnings --- Tactical/Civ Quotes.cpp | 2 +- Tactical/Items.cpp | 2 +- Tactical/LOS.cpp | 6 +++--- Tactical/Soldier Control.cpp | 6 +++--- TacticalAI/AIMain.cpp | 11 +++++------ TileEngine/Explosion Control.cpp | 4 ++-- TileEngine/SmokeEffects.cpp | 2 +- TileEngine/physics.cpp | 2 +- 8 files changed, 17 insertions(+), 18 deletions(-) diff --git a/Tactical/Civ Quotes.cpp b/Tactical/Civ Quotes.cpp index 589c8643..418b1443 100644 --- a/Tactical/Civ Quotes.cpp +++ b/Tactical/Civ Quotes.cpp @@ -2308,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); diff --git a/Tactical/Items.cpp b/Tactical/Items.cpp index a6a0923d..b0a4ce8b 100644 --- a/Tactical/Items.cpp +++ b/Tactical/Items.cpp @@ -9316,7 +9316,7 @@ BOOLEAN DamageItemOnGround( OBJECTTYPE * pObject, INT32 sGridNo, INT8 bLevel, IN { #ifdef JA2BETAVERSION CHAR tmpMPDbgString[512]; - sprintf(tmpMPDbgString,"DamageItemOnGround ( usItem : %i , sGridNo : %i , bLevel : %i , iDamage : %i , ubOwner : %i )\n",pObject->usItem, sGridNo , bLevel , iDamage , ubOwner ); + sprintf(tmpMPDbgString,"DamageItemOnGround ( usItem : %i , sGridNo : %i , bLevel : %i , iDamage : %i , ubOwner : %i )\n",pObject->usItem, sGridNo , bLevel , iDamage , ubOwner.i ); MPDebugMsg(tmpMPDbgString); #endif diff --git a/Tactical/LOS.cpp b/Tactical/LOS.cpp index 044e99fc..230df008 100644 --- a/Tactical/LOS.cpp +++ b/Tactical/LOS.cpp @@ -5639,7 +5639,7 @@ INT8 FireBulletGivenTarget( SOLDIERTYPE * pFirer, FLOAT dEndX, FLOAT dEndY, FLOA fprintf(OutFile, "{ % 9.8f , % 9.8f , % 9.8f , % 9.8f }, //DEBUG: merc %4d fired pellet %4d of %4d using method %4d %12s with SpreadPattern %4d %s\n", ddRawHorizAngle, ddRawVerticAngle, ddHorizAngle, ddVerticAngle, - pFirer->ubID, ubLoop, ubShots, + pFirer->ubID.i, ubLoop, ubShots, gpSpreadPattern[ubSpreadIndex].method, gSpreadPatternMethodNames[gpSpreadPattern[ubSpreadIndex].method], ubSpreadIndex, gpSpreadPattern[ubSpreadIndex].Name ); @@ -6284,7 +6284,7 @@ INT8 FireBulletGivenTargetTrapOnly( SOLDIERTYPE* pThrower, OBJECTTYPE* pObj, INT fprintf(OutFile, "{ % 9.8f , % 9.8f , % 9.8f , % 9.8f }, //DEBUG: merc %4d fired pellet %4d of %4d using method %4d %12s with SpreadPattern %4d %s\n", ddRawHorizAngle, ddRawVerticAngle, ddHorizAngle, ddVerticAngle, - NOBODY, ubLoop, ubShots, + NOBODY.i, ubLoop, ubShots, gpSpreadPattern[ubSpreadIndex].method, gSpreadPatternMethodNames[gpSpreadPattern[ubSpreadIndex].method], ubSpreadIndex, gpSpreadPattern[ubSpreadIndex].Name ); @@ -6834,7 +6834,7 @@ INT8 FireBulletGivenTarget_NoObjectNoSoldier( UINT16 usItem, UINT8 ammotype, UIN fprintf( OutFile, "{ % 9.8f , % 9.8f , % 9.8f , % 9.8f }, //DEBUG: merc %4d fired pellet %4d of %4d using method %4d %12s with SpreadPattern %4d %s\n", ddRawHorizAngle, ddRawVerticAngle, ddHorizAngle, ddVerticAngle, - NOBODY, ubLoop, ubShots, + NOBODY.i, ubLoop, ubShots, gpSpreadPattern[ubSpreadIndex].method, gSpreadPatternMethodNames[gpSpreadPattern[ubSpreadIndex].method], ubSpreadIndex, gpSpreadPattern[ubSpreadIndex].Name ); diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index 5341dad7..1d7d0b6e 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -23977,13 +23977,13 @@ void DebugValidateSoldierData( ) !(pSoldier->flags.uiStatusFlags & (SOLDIER_DRIVER | SOLDIER_PASSENGER)) ) { // This is bad! - swprintf( sString, L"Soldier Data Error: Soldier %d is alive but has a zero group ID.", cnt ); + swprintf( sString, L"Soldier Data Error: Soldier %d is alive but has a zero group ID.", cnt.i ); fProblemDetected = TRUE; } else if ( (pSoldier->ubGroupID != 0) && (GetGroup( pSoldier->ubGroupID ) == NULL) ) { // This is bad! - swprintf( sString, L"Soldier Data Error: Soldier %d has an invalid group ID of %d.", cnt, pSoldier->ubGroupID ); + swprintf( sString, L"Soldier Data Error: Soldier %d has an invalid group ID of %d.", cnt.i, pSoldier->ubGroupID ); fProblemDetected = TRUE; } } @@ -24003,7 +24003,7 @@ void DebugValidateSoldierData( ) (pSoldier->sSectorY <= 0) || (pSoldier->sSectorY >= 17) || (pSoldier->bSectorZ < 0) || (pSoldier->bSectorZ > (SPY_LOCATION( pSoldier->bAssignment ) ? 13 : 3) ) ) ) { - swprintf( sString, L"Soldier Data Error: Soldier %d is located at %d/%d/%d.", cnt, pSoldier->sSectorX, pSoldier->sSectorY, pSoldier->bSectorZ ); + swprintf( sString, L"Soldier Data Error: Soldier %d is located at %d/%d/%d.", cnt.i, pSoldier->sSectorX, pSoldier->sSectorY, pSoldier->bSectorZ ); fProblemDetected = TRUE; } } diff --git a/TacticalAI/AIMain.cpp b/TacticalAI/AIMain.cpp index 51ea4558..c342c478 100644 --- a/TacticalAI/AIMain.cpp +++ b/TacticalAI/AIMain.cpp @@ -235,7 +235,7 @@ void DebugAI( INT8 bMsgType, SOLDIERTYPE *pSoldier, STR szOutput, INT8 bAction ) sprintf(msg, ""); - sprintf(buf, "[%d] (%d)", pSoldier->ubID, pSoldier->sGridNo); + sprintf(buf, "[%d] (%d)", pSoldier->ubID.i, pSoldier->sGridNo); strcat(msg, buf); if (pSoldier->ubProfile != NO_PROFILE) @@ -301,7 +301,7 @@ void DebugAI( INT8 bMsgType, SOLDIERTYPE *pSoldier, STR szOutput, INT8 bAction ) } // also log to individual file for selected soldier - sprintf(buf, "Logs\\AI_Decisions [%d].txt", pSoldier->ubID); + sprintf(buf, "Logs\\AI_Decisions [%d].txt", pSoldier->ubID.i); if ((DebugFile = fopen(buf, "a+t")) != NULL) { if (bMsgType == AI_MSG_START) @@ -697,19 +697,18 @@ void HandleSoldierAI( SOLDIERTYPE *pSoldier ) // FIXME - this function is named // ATE: Display message that deadlock occured... LiveMessage( "Breaking Deadlock" ); - ScreenMsg(FONT_MCOLOR_LTRED, MSG_INTERFACE, L"Aborting AI deadlock for [%d] %s %s data %d", pSoldier->ubID, pSoldier->GetName(), utf8_to_wstring(std::string(szAction[pSoldier->aiData.bAction])), pSoldier->aiData.usActionData); + ScreenMsg(FONT_MCOLOR_LTRED, MSG_INTERFACE, L"Aborting AI deadlock for [%d] %s %s data %d", pSoldier->ubID.i, pSoldier->GetName(), utf8_to_wstring(std::string(szAction[pSoldier->aiData.bAction])), pSoldier->aiData.usActionData); DebugAI(String("Aborting AI deadlock for [%d] %s data %d", pSoldier->ubID, szAction[pSoldier->aiData.bAction], pSoldier->aiData.usActionData)); #ifdef JA2TESTVERSION // display deadlock message gfUIInDeadlock = TRUE; - gUIDeadlockedSoldier = pSoldier->ubID; - DebugAI( String("DEADLOCK soldier %d action %s ABC %d", pSoldier->ubID, gzActionStr[pSoldier->aiData.bAction], gTacticalStatus.ubAttackBusyCount ) ); + DebugAI( String("DEADLOCK soldier %d action %s ABC %d", pSoldier->ubID.i, gzActionStr[pSoldier->aiData.bAction], gTacticalStatus.ubAttackBusyCount ) ); #else // If we are in beta version, also report message! #ifdef JA2BETAVERSION - ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_ERROR, L"Aborting AI deadlock for %d. Please sent DEBUG.TXT file and SAVE.", pSoldier->ubID ); + ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_ERROR, L"Aborting AI deadlock for %d. Please sent DEBUG.TXT file and SAVE.", pSoldier->ubID.i ); #endif // just abort EndAIDeadlock(); diff --git a/TileEngine/Explosion Control.cpp b/TileEngine/Explosion Control.cpp index d64a7526..03b88c2a 100644 --- a/TileEngine/Explosion Control.cpp +++ b/TileEngine/Explosion Control.cpp @@ -2168,7 +2168,7 @@ BOOLEAN ExpAffect( INT32 sBombGridNo, INT32 sGridNo, UINT32 uiDist, UINT16 usIte #ifdef JA2BETAVERSION if (is_networked) { CHAR tmpMPDbgString[512]; - sprintf(tmpMPDbgString,"ExpAffect ( sBombGridNo : %i , sGridNo : %i , uiDist : %i , usItem : %i , ubOwner : %i , sSubsequent : %i , fMercHit : %i , bLevel : %i , iSmokeEffectID : %i )\n",sBombGridNo, sGridNo , uiDist , usItem , ubOwner , sSubsequent , (int)*pfMercHit , bLevel , iSmokeEffectID ); + sprintf(tmpMPDbgString,"ExpAffect ( sBombGridNo : %i , sGridNo : %i , uiDist : %i , usItem : %i , ubOwner : %i , sSubsequent : %i , fMercHit : %i , bLevel : %i , iSmokeEffectID : %i )\n",sBombGridNo, sGridNo , uiDist , usItem , ubOwner.i , sSubsequent , (int)*pfMercHit , bLevel , iSmokeEffectID ); MPDebugMsg(tmpMPDbgString); } #endif @@ -2953,7 +2953,7 @@ void SpreadEffect( INT32 sGridNo, UINT8 ubRadius, UINT16 usItem, SoldierID ubOwn } #ifdef JA2BETAVERSION CHAR tmpMPDbgString[512]; - sprintf(tmpMPDbgString,"SpreadEffect ( sGridNo : %i , ubRadius : %i , usItem : %i , ubOwner : %i , fSubsequent : %i , bLevel : %i , iSmokeEffectID : %i , fFromRemote : %i , fNewSmoke : %i )\n",sGridNo, ubRadius , usItem , ubOwner , (int)fSubsequent , bLevel , iSmokeEffectID , fFromRemoteClient , fNewSmokeEffect ); + sprintf(tmpMPDbgString,"SpreadEffect ( sGridNo : %i , ubRadius : %i , usItem : %i , ubOwner : %i , fSubsequent : %i , bLevel : %i , iSmokeEffectID : %i , fFromRemote : %i , fNewSmoke : %i )\n",sGridNo, ubRadius , usItem , ubOwner.i , (int)fSubsequent , bLevel , iSmokeEffectID , fFromRemoteClient , fNewSmokeEffect ); MPDebugMsg(tmpMPDbgString); gfMPDebugOutputRandoms = true; #endif diff --git a/TileEngine/SmokeEffects.cpp b/TileEngine/SmokeEffects.cpp index 04bc9726..2828b22e 100644 --- a/TileEngine/SmokeEffects.cpp +++ b/TileEngine/SmokeEffects.cpp @@ -366,7 +366,7 @@ INT32 NewSmokeEffect(INT32 sGridNo, UINT16 usItem, INT8 bLevel, SoldierID ubOwne } #ifdef JA2BETAVERSION CHAR tmpMPDbgString[512]; - sprintf(tmpMPDbgString, "NewSmokeEffect ( sGridNo : %i , usItem : %i , ubOwner : %i , bLevel : %i , iSmokeEffectID : %i )\n", sGridNo, usItem, ubOwner, bLevel, iSmokeIndex); + sprintf(tmpMPDbgString, "NewSmokeEffect ( sGridNo : %i , usItem : %i , ubOwner : %i , bLevel : %i , iSmokeEffectID : %i )\n", sGridNo, usItem, ubOwner.i, bLevel, iSmokeIndex); MPDebugMsg(tmpMPDbgString); gfMPDebugOutputRandoms = true; #endif diff --git a/TileEngine/physics.cpp b/TileEngine/physics.cpp index f05398c2..b4af4896 100644 --- a/TileEngine/physics.cpp +++ b/TileEngine/physics.cpp @@ -2188,7 +2188,7 @@ BOOLEAN CalculateLaunchItemChanceToGetThrough( SOLDIERTYPE *pSoldier, OBJECTTYPE if ( pSoldier->sGridNo == sGridNo ) { - printf("Warning! Soldier #%d attempted to launch item at himself\n", pSoldier->ubID); + printf("Warning! Soldier #%d attempted to launch item at himself\n", pSoldier->ubID.i); return FALSE; } // Ge7t basic launch params... From f3194718e4d385967c01af8baa8eb82941cd57b3 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Fri, 8 Aug 2025 21:21:48 +0300 Subject: [PATCH 192/192] Remove useless check for savegame version ITS breaks save games. --- Ja2/SaveLoadGame.cpp | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/Ja2/SaveLoadGame.cpp b/Ja2/SaveLoadGame.cpp index 1674d28a..251f600a 100644 --- a/Ja2/SaveLoadGame.cpp +++ b/Ja2/SaveLoadGame.cpp @@ -1980,17 +1980,7 @@ 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; - if (guiCurrentSaveGameVersion >= INCREASED_TEAMSIZES) - { - numBytesRead = ReadFieldByField(hFile, &this->ubID, sizeof(ubID), sizeof(UINT16), numBytesRead); - } - else - { - numBytesRead = ReadFieldByField(hFile, &this->ubID, sizeof(ubID), sizeof(UINT8), numBytesRead); - // Read and discard bReserved1 so numBytesRead matches the struct size later - UINT8 bReserved1 = 0; - numBytesRead = ReadFieldByField(hFile, &bReserved1, sizeof(bReserved1), sizeof(UINT8), numBytesRead); - } + 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);