Initial AP save data
This commit is contained in:
@@ -69,6 +69,7 @@ typedef enum { // Pre-existing IDs for save sections in base code
|
||||
SECTION_ID_ENTRANCES,
|
||||
SECTION_ID_SCENES,
|
||||
SECTION_ID_TRACKER_DATA,
|
||||
SECTION_ID_ARCHIPELAGO,
|
||||
SECTION_ID_MAX
|
||||
} SaveFuncIDs;
|
||||
|
||||
@@ -168,9 +169,24 @@ typedef struct ShipBossRushSaveContextData {
|
||||
u8 options[BR_OPTIONS_MAX];
|
||||
} ShipBossRushSaveContextData;
|
||||
|
||||
typedef struct ArchipelagoLocationData {
|
||||
char itemName[100];
|
||||
char locationName[100];
|
||||
char playerName[17];
|
||||
u8 itemType;
|
||||
} ArchipelagoLocationData;
|
||||
|
||||
typedef struct ShipArchipelagoSaveContextData {
|
||||
char roomHash[100];
|
||||
char slotName[17];
|
||||
u32 lastReceivedItemIndex;
|
||||
ArchipelagoLocationData locations[RC_MAX];
|
||||
} ShipArchipelagoSaveContextData;
|
||||
|
||||
typedef union ShipQuestSpecificSaveContextData {
|
||||
ShipRandomizerSaveContextData randomizer;
|
||||
ShipBossRushSaveContextData bossRush;
|
||||
ShipArchipelagoSaveContextData archipelago;
|
||||
} ShipQuestSpecificSaveContextData;
|
||||
|
||||
typedef struct ShipQuestSaveContextData {
|
||||
@@ -178,20 +194,6 @@ typedef struct ShipQuestSaveContextData {
|
||||
ShipQuestSpecificSaveContextData data;
|
||||
} ShipQuestSaveContextData;
|
||||
|
||||
typedef struct ArchipelagoLocationData {
|
||||
char itemName[100];
|
||||
char locationName[100];
|
||||
char playerName[17];
|
||||
u8 flags;
|
||||
} ArchipelagoLocationData;
|
||||
|
||||
typedef struct ArchipelagoData {
|
||||
char roomHash[100];
|
||||
char slotName[17];
|
||||
u32 lastReceivedItemIndex;
|
||||
ArchipelagoLocationData locations[RC_MAX];
|
||||
} ArchipelagoData;
|
||||
|
||||
typedef struct ShipSaveContextData {
|
||||
u16 pendingSale;
|
||||
u16 pendingSaleMod;
|
||||
@@ -199,7 +201,6 @@ typedef struct ShipSaveContextData {
|
||||
SohStats stats;
|
||||
FaroresWindData backupFW;
|
||||
ShipQuestSaveContextData quest;
|
||||
ArchipelagoData apData;
|
||||
u8 maskMemory;
|
||||
u8 filenameLanguage;
|
||||
//TODO: Move non-rando specific flags to a new sohInf and move the remaining randomizerInf to ShipRandomizerSaveContextData
|
||||
|
||||
@@ -12,6 +12,13 @@
|
||||
#include "soh/Enhancements/randomizer/static_data.h"
|
||||
#include "soh/Enhancements/game-interactor/GameInteractor.h"
|
||||
#include "soh/ShipInit.hpp"
|
||||
#include "soh/SaveManager.h"
|
||||
|
||||
extern "C" {
|
||||
#include "variables.h"
|
||||
#include "macros.h"
|
||||
extern PlayState* gPlayState;
|
||||
}
|
||||
|
||||
ArchipelagoClient::ArchipelagoClient() {
|
||||
std::string uuid = ap_get_uuid("uuid");
|
||||
@@ -201,6 +208,26 @@ const char* ArchipelagoClient::GetConnectionStatus() {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void LoadArchipelagoData() {
|
||||
SaveManager::Instance->LoadCharArray("roomHash", gSaveContext.ship.quest.data.archipelago.roomHash,
|
||||
ARRAY_COUNT(gSaveContext.ship.quest.data.archipelago.roomHash));
|
||||
SaveManager::Instance->LoadData("lastReceivedItemIndex", gSaveContext.ship.quest.data.archipelago.lastReceivedItemIndex);
|
||||
}
|
||||
|
||||
void SaveArchipelagoData(SaveContext* saveContext, int sectionID, bool fullSave) {
|
||||
SaveManager::Instance->SaveData("roomHash", saveContext->ship.quest.data.archipelago.roomHash);
|
||||
SaveManager::Instance->SaveData("lastReceivedItemIndex",
|
||||
saveContext->ship.quest.data.archipelago.lastReceivedItemIndex);
|
||||
}
|
||||
|
||||
void InitArchipelagoData(bool isDebug) {
|
||||
SohUtils::CopyStringToCharArray(gSaveContext.ship.quest.data.archipelago.roomHash, "",
|
||||
ARRAY_COUNT(gSaveContext.ship.quest.data.archipelago.roomHash));
|
||||
|
||||
gSaveContext.ship.quest.data.archipelago.lastReceivedItemIndex = 0;
|
||||
}
|
||||
|
||||
// Implement this properly once we have some kind of indication within a save file wether the player is in a normal
|
||||
// rando save or an archipelago one.
|
||||
#define IS_ARCHIPELAGO true
|
||||
|
||||
@@ -80,3 +80,6 @@ class ArchipelagoClient{
|
||||
|
||||
};
|
||||
|
||||
void LoadArchipelagoData();
|
||||
void SaveArchipelagoData(SaveContext* saveContext, int sectionID, bool fullSave);
|
||||
void InitArchipelagoData(bool isDebug);
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "soh/SohGui/UIWidgets.hpp"
|
||||
#include "soh/SohGui/SohGui.hpp"
|
||||
#include "soh/Network/Archipelago/ArchipelagoConsoleWindow.h"
|
||||
#include "soh/SaveManager.h"
|
||||
|
||||
void ArchipelagoSettingsWindow::DrawElement() {
|
||||
ArchipelagoClient& AP_client = ArchipelagoClient::GetInstance();
|
||||
@@ -66,3 +67,10 @@ void ArchipelagoSettingsWindow::DrawElement() {
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
void ArchipelagoSettingsWindow::InitElement() {
|
||||
SaveManager::Instance->AddLoadFunction("archipelagoData", 1, LoadArchipelagoData);
|
||||
SaveManager::Instance->AddSaveFunction("archipelagoData", 1, SaveArchipelagoData, true,
|
||||
SECTION_PARENT_NONE);
|
||||
SaveManager::Instance->AddInitFunction(InitArchipelagoData);
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ class ArchipelagoSettingsWindow final : public Ship::GuiWindow {
|
||||
~ArchipelagoSettingsWindow() {};
|
||||
|
||||
protected:
|
||||
void InitElement() override {};
|
||||
void InitElement() override;
|
||||
void DrawElement() override;
|
||||
void UpdateElement() override {};
|
||||
};
|
||||
|
||||
@@ -113,6 +113,7 @@ SaveManager::SaveManager() {
|
||||
coreSectionIDsByName["entrances"] = SECTION_ID_ENTRANCES;
|
||||
coreSectionIDsByName["scenes"] = SECTION_ID_SCENES;
|
||||
coreSectionIDsByName["trackerData"] = SECTION_ID_TRACKER_DATA;
|
||||
coreSectionIDsByName["archipelagoData"] = SECTION_ID_ARCHIPELAGO;
|
||||
AddLoadFunction("base", 1, LoadBaseVersion1);
|
||||
AddLoadFunction("base", 2, LoadBaseVersion2);
|
||||
AddLoadFunction("base", 3, LoadBaseVersion3);
|
||||
|
||||
Reference in New Issue
Block a user