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_ENTRANCES,
|
||||||
SECTION_ID_SCENES,
|
SECTION_ID_SCENES,
|
||||||
SECTION_ID_TRACKER_DATA,
|
SECTION_ID_TRACKER_DATA,
|
||||||
|
SECTION_ID_ARCHIPELAGO,
|
||||||
SECTION_ID_MAX
|
SECTION_ID_MAX
|
||||||
} SaveFuncIDs;
|
} SaveFuncIDs;
|
||||||
|
|
||||||
@@ -168,9 +169,24 @@ typedef struct ShipBossRushSaveContextData {
|
|||||||
u8 options[BR_OPTIONS_MAX];
|
u8 options[BR_OPTIONS_MAX];
|
||||||
} ShipBossRushSaveContextData;
|
} 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 {
|
typedef union ShipQuestSpecificSaveContextData {
|
||||||
ShipRandomizerSaveContextData randomizer;
|
ShipRandomizerSaveContextData randomizer;
|
||||||
ShipBossRushSaveContextData bossRush;
|
ShipBossRushSaveContextData bossRush;
|
||||||
|
ShipArchipelagoSaveContextData archipelago;
|
||||||
} ShipQuestSpecificSaveContextData;
|
} ShipQuestSpecificSaveContextData;
|
||||||
|
|
||||||
typedef struct ShipQuestSaveContextData {
|
typedef struct ShipQuestSaveContextData {
|
||||||
@@ -178,20 +194,6 @@ typedef struct ShipQuestSaveContextData {
|
|||||||
ShipQuestSpecificSaveContextData data;
|
ShipQuestSpecificSaveContextData data;
|
||||||
} ShipQuestSaveContextData;
|
} 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 {
|
typedef struct ShipSaveContextData {
|
||||||
u16 pendingSale;
|
u16 pendingSale;
|
||||||
u16 pendingSaleMod;
|
u16 pendingSaleMod;
|
||||||
@@ -199,7 +201,6 @@ typedef struct ShipSaveContextData {
|
|||||||
SohStats stats;
|
SohStats stats;
|
||||||
FaroresWindData backupFW;
|
FaroresWindData backupFW;
|
||||||
ShipQuestSaveContextData quest;
|
ShipQuestSaveContextData quest;
|
||||||
ArchipelagoData apData;
|
|
||||||
u8 maskMemory;
|
u8 maskMemory;
|
||||||
u8 filenameLanguage;
|
u8 filenameLanguage;
|
||||||
//TODO: Move non-rando specific flags to a new sohInf and move the remaining randomizerInf to ShipRandomizerSaveContextData
|
//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/randomizer/static_data.h"
|
||||||
#include "soh/Enhancements/game-interactor/GameInteractor.h"
|
#include "soh/Enhancements/game-interactor/GameInteractor.h"
|
||||||
#include "soh/ShipInit.hpp"
|
#include "soh/ShipInit.hpp"
|
||||||
|
#include "soh/SaveManager.h"
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
#include "variables.h"
|
||||||
|
#include "macros.h"
|
||||||
|
extern PlayState* gPlayState;
|
||||||
|
}
|
||||||
|
|
||||||
ArchipelagoClient::ArchipelagoClient() {
|
ArchipelagoClient::ArchipelagoClient() {
|
||||||
std::string uuid = ap_get_uuid("uuid");
|
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
|
// 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.
|
// rando save or an archipelago one.
|
||||||
#define IS_ARCHIPELAGO true
|
#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/UIWidgets.hpp"
|
||||||
#include "soh/SohGui/SohGui.hpp"
|
#include "soh/SohGui/SohGui.hpp"
|
||||||
#include "soh/Network/Archipelago/ArchipelagoConsoleWindow.h"
|
#include "soh/Network/Archipelago/ArchipelagoConsoleWindow.h"
|
||||||
|
#include "soh/SaveManager.h"
|
||||||
|
|
||||||
void ArchipelagoSettingsWindow::DrawElement() {
|
void ArchipelagoSettingsWindow::DrawElement() {
|
||||||
ArchipelagoClient& AP_client = ArchipelagoClient::GetInstance();
|
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() {};
|
~ArchipelagoSettingsWindow() {};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void InitElement() override {};
|
void InitElement() override;
|
||||||
void DrawElement() override;
|
void DrawElement() override;
|
||||||
void UpdateElement() override {};
|
void UpdateElement() override {};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -113,6 +113,7 @@ SaveManager::SaveManager() {
|
|||||||
coreSectionIDsByName["entrances"] = SECTION_ID_ENTRANCES;
|
coreSectionIDsByName["entrances"] = SECTION_ID_ENTRANCES;
|
||||||
coreSectionIDsByName["scenes"] = SECTION_ID_SCENES;
|
coreSectionIDsByName["scenes"] = SECTION_ID_SCENES;
|
||||||
coreSectionIDsByName["trackerData"] = SECTION_ID_TRACKER_DATA;
|
coreSectionIDsByName["trackerData"] = SECTION_ID_TRACKER_DATA;
|
||||||
|
coreSectionIDsByName["archipelagoData"] = SECTION_ID_ARCHIPELAGO;
|
||||||
AddLoadFunction("base", 1, LoadBaseVersion1);
|
AddLoadFunction("base", 1, LoadBaseVersion1);
|
||||||
AddLoadFunction("base", 2, LoadBaseVersion2);
|
AddLoadFunction("base", 2, LoadBaseVersion2);
|
||||||
AddLoadFunction("base", 3, LoadBaseVersion3);
|
AddLoadFunction("base", 3, LoadBaseVersion3);
|
||||||
|
|||||||
Reference in New Issue
Block a user