diff --git a/src/glue/CCharacterSelection.cpp b/src/glue/CCharacterSelection.cpp index d32b260..b19e1d4 100644 --- a/src/glue/CCharacterSelection.cpp +++ b/src/glue/CCharacterSelection.cpp @@ -1,3 +1,31 @@ #include "glue/CCharacterSelection.hpp" +#include "model/CM2Shared.hpp" +#include "ui/CSimpleModelFFX.hpp" TSGrowableArray CCharacterSelection::s_characterList; +CSimpleModelFFX* CCharacterSelection::s_modelFrame; + +void CCharacterSelection::SetBackgroundModel(const char* modelPath) { + if (!CCharacterSelection::s_modelFrame || !modelPath || !*modelPath) { + return; + } + + auto model = CCharacterSelection::s_modelFrame->m_model; + + // Check if already set + if (model && !SStrCmpI(modelPath, model->m_shared->m_filePath, STORM_MAX_STR)) { + return; + } + + CCharacterSelection::s_modelFrame->SetModel(modelPath); + + // TODO BYTE1(CCharacterSelection::m_modelFrame->simplemodelffx_dword510[3]) = 1; + + model = CCharacterSelection::s_modelFrame->m_model; + + if (model) { + // TODO lighting callback + arg + + model->IsDrawable(1, 1); + } +} diff --git a/src/glue/CCharacterSelection.hpp b/src/glue/CCharacterSelection.hpp index f4e766e..cfb3d7c 100644 --- a/src/glue/CCharacterSelection.hpp +++ b/src/glue/CCharacterSelection.hpp @@ -3,6 +3,8 @@ #include +class CSimpleModelFFX; + struct CharacterSelectionDisplay { // TODO }; @@ -11,6 +13,10 @@ class CCharacterSelection { public: // Static variables static TSGrowableArray s_characterList; + static CSimpleModelFFX* s_modelFrame; + + // Static functions + static void SetBackgroundModel(const char* modelPath); }; #endif diff --git a/src/glue/CMakeLists.txt b/src/glue/CMakeLists.txt index 264ea69..faabf6a 100644 --- a/src/glue/CMakeLists.txt +++ b/src/glue/CMakeLists.txt @@ -15,6 +15,7 @@ target_link_libraries(glue db event gx + model net sound ui diff --git a/src/ui/ScriptFunctionsCharSelect.cpp b/src/ui/ScriptFunctionsCharSelect.cpp index 5354497..8408ec3 100644 --- a/src/ui/ScriptFunctionsCharSelect.cpp +++ b/src/ui/ScriptFunctionsCharSelect.cpp @@ -1,17 +1,37 @@ #include "ui/ScriptFunctions.hpp" #include "db/Db.hpp" #include "glue/CCharacterSelection.hpp" +#include "ui/CSimpleModelFFX.hpp" #include "ui/Types.hpp" #include "util/Lua.hpp" #include "util/Unimplemented.hpp" #include int32_t Script_SetCharSelectModelFrame(lua_State* L) { - WHOA_UNIMPLEMENTED(); + if (!lua_isstring(L, 1)) { + return luaL_error(L, "Usage: SetCharSelectModelFrame(\"frameName\")"); + } + + auto type = CSimpleModel::GetObjectType(); + auto name = lua_tolstring(L, 1, nullptr); + auto frame = CScriptObject::GetScriptObjectByName(name, type); + + if (frame) { + CCharacterSelection::s_modelFrame = static_cast(frame); + } + + return 0; } int32_t Script_SetCharSelectBackground(lua_State* L) { - WHOA_UNIMPLEMENTED(); + if (!lua_isstring(L, 1)) { + return luaL_error(L, "Usage: SetCharSelectBackground(\"filename\")"); + } + + auto modelPath = lua_tolstring(L, 1, nullptr); + CCharacterSelection::SetBackgroundModel(modelPath); + + return 0; } int32_t Script_GetCharacterListUpdate(lua_State* L) {