diff --git a/Source/Contents/AdventureGuideMgr.cpp b/Source/Contents/AdventureGuideMgr.cpp new file mode 100644 index 0000000..59295be --- /dev/null +++ b/Source/Contents/AdventureGuideMgr.cpp @@ -0,0 +1,23 @@ +#include "Contents/AdventureGuideMgr.h" + +// GLOBAL: gl_24502 +CAdventureGuideMgr* g_adventureGuideMgr; + +// OFFSET: 0x00660F70 +// FUNCTION: fn_05222 +CAdventureGuideMgr::CAdventureGuideMgr() : m_initialized(true) { +} + +// OFFSET: 0x006629D0 +// FUNCTION: fn_05227 +CAdventureGuideMgr::~CAdventureGuideMgr() { +} + +// OFFSET: 0x00663680 +// FUNCTION: fn_05235 +void CAdventureGuideMgr::Destroy() { + if (g_adventureGuideMgr) { + delete g_adventureGuideMgr; + g_adventureGuideMgr = nullptr; + } +} diff --git a/Source/Contents/AdventureGuideMgr.h b/Source/Contents/AdventureGuideMgr.h new file mode 100644 index 0000000..aa20a75 --- /dev/null +++ b/Source/Contents/AdventureGuideMgr.h @@ -0,0 +1,106 @@ +#ifndef RAGNAROK_SOURCE_CONTENTS_ADVENTUREGUIDEMGR_H +#define RAGNAROK_SOURCE_CONTENTS_ADVENTUREGUIDEMGR_H + +#include "Script/LuaInstance.h" + +#include +#include +#include +#include +#include +#include + +struct AdventureGuideDetail { + /* 0000 */ int unknown_0000; + /* 0004 */ int unknown_0004; + /* 0008 */ int unknown_0008; + /* 000C */ std::string text; +}; + +struct AdventureGuideIntro { + /* 0000 */ int unknown_0000; + /* 0004 */ std::string title; + /* 001C */ std::string text; + /* 0034 */ std::map details; +}; + +struct AdventureGuideText { + /* 0000 */ std::string first; + /* 0018 */ std::string second; +}; + +struct AdventureGuideEpisode { + /* 0000 */ std::string name; + /* 0018 */ int order; + /* 001C */ int unknown_001C; + /* 0020 */ std::vector values; +}; + +struct AdventureGuideContents { + /* 0000 */ std::uint8_t unknown_0000; + /* 0004 */ int unknown_0004; + /* 0008 */ int unknown_0008; + /* 000C */ int unknown_000C; + /* 0010 */ std::string first; + /* 0028 */ std::string second; + /* 0040 */ std::vector values; +}; + +struct AdventureGuideEntry { + /* 0000 */ std::uint8_t unknown_0000; + /* 0001 */ std::uint8_t unknown_0001; + /* 0002 */ std::uint8_t unknown_0002; + /* 0004 */ int unknown_0004; + /* 0008 */ int unknown_0008; + /* 000C */ std::string text; + /* 0024 */ std::vector values; +}; + +// VTABLE: vt_00350 +class CAdventureGuideMgr { +public: + static void Destroy(); + + /* 0004 */ CLuaInstance m_lua; + /* 000C */ std::map m_intros; + /* 0014 */ std::string unknown_0014; + /* 002C */ std::map unknown_002C; + /* 0034 */ std::list m_episodes; + /* 003C */ std::map> unknown_003C; + /* 0044 */ std::map> unknown_0044; + /* 004C */ std::map> unknown_004C; + /* 0054 */ std::map> unknown_0054; + /* 005C */ std::map> unknown_005C; + /* 0064 */ bool m_initialized; + + CAdventureGuideMgr(); + virtual ~CAdventureGuideMgr(); +}; + +extern CAdventureGuideMgr* g_adventureGuideMgr; + +#if defined(_WIN32) && !defined(_WIN64) +static_assert(sizeof(AdventureGuideDetail) == 0x24); +static_assert(sizeof(AdventureGuideIntro) == 0x3C); +static_assert(offsetof(AdventureGuideIntro, details) == 0x34); +static_assert(sizeof(AdventureGuideText) == 0x30); +static_assert(sizeof(AdventureGuideEpisode) == 0x2C); +static_assert(offsetof(AdventureGuideEpisode, order) == 0x18); +static_assert(offsetof(AdventureGuideEpisode, values) == 0x20); +static_assert(sizeof(AdventureGuideContents) == 0x4C); +static_assert(offsetof(AdventureGuideContents, values) == 0x40); +static_assert(sizeof(AdventureGuideEntry) == 0x30); +static_assert(offsetof(AdventureGuideEntry, text) == 0xC); +static_assert(offsetof(AdventureGuideEntry, values) == 0x24); +static_assert(offsetof(CAdventureGuideMgr, m_lua) == 0x4); +static_assert(offsetof(CAdventureGuideMgr, m_intros) == 0xC); +static_assert(offsetof(CAdventureGuideMgr, unknown_0014) == 0x14); +static_assert(offsetof(CAdventureGuideMgr, unknown_002C) == 0x2C); +static_assert(offsetof(CAdventureGuideMgr, m_episodes) == 0x34); +static_assert(offsetof(CAdventureGuideMgr, unknown_003C) == 0x3C); +static_assert(offsetof(CAdventureGuideMgr, unknown_0054) == 0x54); +static_assert(offsetof(CAdventureGuideMgr, m_initialized) == 0x64); +static_assert(sizeof(CAdventureGuideMgr) == 0x68); +#endif + +#endif diff --git a/data/compile.json b/data/compile.json index 8b443cf..806034a 100644 --- a/data/compile.json +++ b/data/compile.json @@ -274,6 +274,7 @@ "Source/Contents/Actors/RenderObject.cpp": 4, "Source/Contents/Actors/RenderObjectState.cpp": 4, "Source/Contents/Actors/SpriteDrawingPolicy.cpp": 4, + "Source/Contents/AdventureGuideMgr.cpp": 4, "Source/Contents/Async/AsyncWorkMgr.cpp": 4, "Source/Contents/Async/AsyncWorkRecycleObjectPoolMgr.cpp": 4, "Source/Contents/Camera/CameraFrame.cpp": 3,