From f20b9fbbde9525a66312bd77a126562924c88fad Mon Sep 17 00:00:00 2001 From: fallenoak Date: Mon, 29 Dec 2025 22:16:08 -0600 Subject: [PATCH] feat(glue): implement Script_SetCharCustomizeBackground --- src/glue/CCharacterCreation.cpp | 31 +++++++++++++++++++++++++++ src/glue/CCharacterCreation.hpp | 1 + src/glue/CCharacterCreationScript.cpp | 12 ++++++++++- 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/glue/CCharacterCreation.cpp b/src/glue/CCharacterCreation.cpp index 8a17380..84ae672 100644 --- a/src/glue/CCharacterCreation.cpp +++ b/src/glue/CCharacterCreation.cpp @@ -3,6 +3,7 @@ #include "component/Types.hpp" #include "db/Db.hpp" #include "glue/CGlueLoading.hpp" +#include "model/CM2Shared.hpp" #include "object/client/Player_C.hpp" #include "ui/simple/CSimpleModelFFX.hpp" @@ -208,6 +209,36 @@ void CCharacterCreation::ResetCharCustomizeInfo() { CGlueLoading::StartLoad(CCharacterCreation::s_character, true); } +void CCharacterCreation::SetCharCustomizeModel(const char* filename) { + if (!CCharacterCreation::s_charCustomizeFrame || !filename || !*filename) { + return; + } + + auto existingModel = CCharacterCreation::s_charCustomizeFrame->m_model; + + if (existingModel && !SStrCmpI(existingModel->m_shared->m_filePath, filename)) { + return; + } + + CCharacterCreation::s_charCustomizeFrame->SetModel(filename); + auto customizeModel = CCharacterCreation::s_charCustomizeFrame->m_model; + + // TODO inlined? + if (customizeModel) { + // TODO lighting stuff + customizeModel->IsDrawable(1, 1); + } + + // TODO inlined? + if (customizeModel) { + auto characterModel = CCharacterCreation::s_character->m_data.model; + + if (characterModel) { + characterModel->AttachToParent(customizeModel, 0, nullptr, 0); + } + } +} + void CCharacterCreation::SetSelectedClass(int32_t classID) { if (!CCharacterCreation::IsClassValid(classID)) { return; diff --git a/src/glue/CCharacterCreation.hpp b/src/glue/CCharacterCreation.hpp index d3a55b9..6a3f185 100644 --- a/src/glue/CCharacterCreation.hpp +++ b/src/glue/CCharacterCreation.hpp @@ -30,6 +30,7 @@ class CCharacterCreation { static void Initialize(); static bool IsClassValid(int32_t classID); static void ResetCharCustomizeInfo(); + static void SetCharCustomizeModel(const char* filename); static void SetSelectedClass(int32_t classID); }; diff --git a/src/glue/CCharacterCreationScript.cpp b/src/glue/CCharacterCreationScript.cpp index 3568b4a..943f25a 100644 --- a/src/glue/CCharacterCreationScript.cpp +++ b/src/glue/CCharacterCreationScript.cpp @@ -30,7 +30,17 @@ int32_t Script_SetCharCustomizeFrame(lua_State* L) { } int32_t Script_SetCharCustomizeBackground(lua_State* L) { - WHOA_UNIMPLEMENTED(0); + if (!lua_isstring(L, 1)) { + luaL_error(L, "Usage: SetCharCustomizeBackground(\"filename\")"); + + return 0; + } + + auto filename = lua_tostring(L, 1); + + CCharacterCreation::SetCharCustomizeModel(filename); + + return 0; } int32_t Script_ResetCharCustomize(lua_State* L) {