diff --git a/src/OpenSHC/AI/AIV/AIV.hpp b/src/OpenSHC/AI/AIV/AIVSpec.hpp similarity index 97% rename from src/OpenSHC/AI/AIV/AIV.hpp rename to src/OpenSHC/AI/AIV/AIVSpec.hpp index 7bc88d1..bb463a5 100644 --- a/src/OpenSHC/AI/AIV/AIV.hpp +++ b/src/OpenSHC/AI/AIV/AIVSpec.hpp @@ -18,7 +18,7 @@ namespace AI { #pragma pack(push, 1) // SIZE: 0x00006D98 - typedef struct AIV { + typedef struct AIVSpec { int playerID; // 0x00000000 length: 4 int aiType; // 0x00000004 length: 4 diff --git a/src/OpenSHC/AI/AIVState.func.hpp b/src/OpenSHC/AI/AIVState.func.hpp index a5bad73..d6d17b9 100644 --- a/src/OpenSHC/AI/AIVState.func.hpp +++ b/src/OpenSHC/AI/AIVState.func.hpp @@ -35,7 +35,7 @@ namespace AI { syncAIPlayerNamesAndBuildIntervals; MACRO_FUNCTION_RESOLVER( - int (AIVState::*)(int), false, Address::SHC_3BB0A8C1_0x004ECEF0, &AIVState::setupAIVMetadata) + int (AIVState::*)(int), true, Address::SHC_3BB0A8C1_0x004ECEF0, &AIVState::setupAIVMetadata) setupAIVMetadata; MACRO_FUNCTION_RESOLVER(void (AIVState::*)(int, int, int), false, Address::SHC_3BB0A8C1_0x004ECF70, diff --git a/src/OpenSHC/AI/AIVState.hpp b/src/OpenSHC/AI/AIVState.hpp index 659c99d..0557ce3 100644 --- a/src/OpenSHC/AI/AIVState.hpp +++ b/src/OpenSHC/AI/AIVState.hpp @@ -10,12 +10,12 @@ #include "OpenSHC/AI/AIGridComputationResourceTypeInt.hpp" #include "OpenSHC/AI/AIMapExtraInfo.hpp" -#include "OpenSHC/AI/AIV/AIV.hpp" #include "OpenSHC/AI/AIV/AIVBuildingType2Int.hpp" #include "OpenSHC/AI/AIV/AIVBuildingType2Short.hpp" +#include "OpenSHC/AI/AIV/AIVSpec.hpp" #include "OpenSHC/Commands/CommandBuildingTypeInt.hpp" #include "OpenSHC/Game/Player/PlayerID.hpp" -#include "OpenSHC/Map/HeatMap1114.hpp" +#include "OpenSHC/Map/HeatMap.hpp" #include "OpenSHC/WindowsHelper/Enums/BOOLEnum.hpp" namespace OpenSHC { @@ -23,12 +23,12 @@ namespace AI { using OpenSHC::AI::AIGridComputationResourceTypeInt; using OpenSHC::AI::AIMapExtraInfo; - using OpenSHC::AI::AIV::AIV; using OpenSHC::AI::AIV::AIVBuildingType2Int; using OpenSHC::AI::AIV::AIVBuildingType2Short; + using OpenSHC::AI::AIV::AIVSpec; using OpenSHC::Commands::CommandBuildingTypeInt; using OpenSHC::Game::Player::PlayerID; - using OpenSHC::Map::HeatMap1114; + using OpenSHC::Map::HeatMap; using OpenSHC::WindowsHelper::Enums::BOOLEnum; #pragma pack(push, 1) @@ -37,7 +37,7 @@ namespace AI { class AIVState { public: int totalSteps; // 0x00000000 length: 4 - AIV SEC_AIVS[9]; // 0x00000004 length: 252504 + AIVSpec SEC_AIVS[9]; // 0x00000004 length: 252504 int DAT_AIVFileHash[16][8]; // 0x0003DA5C length: 512 int DAT_AIVFilePresent[16][8]; // 0x0003DC5C length: 512 byte DAT_ReceivedAIVFileHash[9][512]; // 0x0003DE5C length: 4608 @@ -61,7 +61,7 @@ namespace AI { undefined4 buildingCounter; // 0x0005CA0C length: 4 undefined4 invalidTileCounter; // 0x0005CA10 length: 4 AIMapExtraInfo mapExtraInfo; // 0x0005CA14 length: 816 - HeatMap1114 SEC_HeatMaps[80][80]; // 0x0005CD44 length: 307200 + HeatMap SEC_HeatMaps[80][80]; // 0x0005CD44 length: 307200 int visitCount; // 0x000A7D44 length: 4 undefined4 _valueAIndex; // 0x000A7D48 length: 4 undefined4 _valueBIndex; // 0x000A7D4C length: 4 diff --git a/src/OpenSHC/AI/AIVState/setupAIVMetadata.cpp b/src/OpenSHC/AI/AIVState/setupAIVMetadata.cpp new file mode 100644 index 0000000..072b11f --- /dev/null +++ b/src/OpenSHC/AI/AIVState/setupAIVMetadata.cpp @@ -0,0 +1,39 @@ +#include "OpenSHC/AI/AICState.func.hpp" +#include "OpenSHC/AI/AIVState.hpp" +#include "OpenSHC/Globals/DAT_AICState.hpp" +#include "OpenSHC/Globals/DAT_GameState.hpp" + +namespace OpenSHC { +namespace AI { + + // FUNCTION: STRONGHOLDCRUSADER 0x004ECEF0 + int AIVState::setupAIVMetadata(int playerID) + { + int aivID = 1; + AIVSpec* pSlot = &this->SEC_AIVS[1]; + do { + if (pSlot->playerID == 0) { + this->SEC_AIVS[aivID].playerID = playerID; + + int aiType = DAT_GameState::ptr->playerDataArray[playerID].aiType; + this->SEC_AIVS[aivID].aiType = aiType; + + this->SEC_AIVS[aivID].currentStepGoal = 0; + this->SEC_AIVS[aivID].aivPoorCounter = 0; + this->SEC_AIVS[aivID].aivSubType = 0; + + this->SEC_AIVS[aivID].aivPoorLimit_OR_AIC_buildInterval + = MACRO_CALL_MEMBER(AICState_Func::getAIBuildInterval, DAT_AICState::ptr)(playerID); + + this->aivCount = this->aivCount + 1; + + return aivID; + } + aivID = aivID + 1; + pSlot = pSlot + 1; + } while (aivID < 9); + return 0; + } + +} +} diff --git a/status/addresses-SHC-3BB0A8C1.txt b/status/addresses-SHC-3BB0A8C1.txt index f1a6853..c8f0bae 100644 --- a/status/addresses-SHC-3BB0A8C1.txt +++ b/status/addresses-SHC-3BB0A8C1.txt @@ -18496,7 +18496,7 @@ SHC_3BB0A8C1_0x004ECDB0 | 0.0% | Pending SHC_3BB0A8C1_0x004ECDE0 | 0.0% | Pending SHC_3BB0A8C1_0x004ECDF0 | 0.0% | Pending SHC_3BB0A8C1_0x004ECE60 | 0.0% | Pending -SHC_3BB0A8C1_0x004ECEF0 | 0.0% | Pending +SHC_3BB0A8C1_0x004ECEF0 | 100.0% | Reimplemented SHC_3BB0A8C1_0x004ECF70 | 0.0% | Pending SHC_3BB0A8C1_0x004ECFE0 | 0.0% | Pending SHC_3BB0A8C1_0x004ED070 | 0.0% | Pending