diff --git a/data/dynos.c.h b/data/dynos.c.h index 29122a82..e6d0ade0 100644 --- a/data/dynos.c.h +++ b/data/dynos.c.h @@ -26,6 +26,7 @@ int dynos_pack_get_count(void); const char* dynos_pack_get_name(s32 index); bool dynos_pack_get_enabled(s32 index); void dynos_pack_set_enabled(s32 index, bool value); +void dynos_pack_init(void); void dynos_generate_packs(const char* directory); // -- geos -- // diff --git a/data/dynos.cpp.h b/data/dynos.cpp.h index 8be11195..86687139 100644 --- a/data/dynos.cpp.h +++ b/data/dynos.cpp.h @@ -452,6 +452,7 @@ struct ActorGfx { struct PackData { s32 mIndex; bool mEnabled; + bool mEnabledSet; SysPath mPath; String mDisplayName; Array> mGfxData; @@ -730,6 +731,7 @@ void DynOS_Pack_SetEnabled(PackData* aPack, bool aEnabled); PackData* DynOS_Pack_GetFromIndex(s32 aIndex); PackData* DynOS_Pack_GetFromPath(const SysPath& aPath); PackData* DynOS_Pack_Add(const SysPath& aPath); +void DynOS_Pack_Init(); Pair* DynOS_Pack_GetActor(PackData* aPackData, const char* aActorName); void DynOS_Pack_AddActor(PackData* aPackData, const char* aActorName, GfxData* aGfxData); diff --git a/data/dynos_c.cpp b/data/dynos_c.cpp index 37c5e6ca..491f5de2 100644 --- a/data/dynos_c.cpp +++ b/data/dynos_c.cpp @@ -75,6 +75,10 @@ void dynos_pack_set_enabled(s32 index, bool value) { } } +void dynos_pack_init(void) { + DynOS_Pack_Init(); +} + void dynos_generate_packs(const char* directory) { DynOS_Gfx_GeneratePacks(directory); } diff --git a/data/dynos_mgr_pack.cpp b/data/dynos_mgr_pack.cpp index c2645722..d289008d 100644 --- a/data/dynos_mgr_pack.cpp +++ b/data/dynos_mgr_pack.cpp @@ -64,6 +64,7 @@ s32 DynOS_Pack_GetCount() { void DynOS_Pack_SetEnabled(PackData* aPack, bool aEnabled) { if (aPack == NULL) { return; } aPack->mEnabled = aEnabled; + aPack->mEnabledSet = true; if (aEnabled) { for (auto& pair : aPack->mGfxData) { @@ -121,11 +122,20 @@ PackData* DynOS_Pack_Add(const SysPath& aPath) { } _Pack->mDisplayName = cpath; - DynOS_Pack_SetEnabled(_Pack, true); + _Pack->mEnabled = true; + _Pack->mEnabledSet = false; return _Pack; } +void DynOS_Pack_Init() { + for (auto& pack : DynosPacks()) { + if (!pack.mEnabledSet) { + DynOS_Pack_SetEnabled(&pack, pack.mEnabled); + } + } +} + Pair* DynOS_Pack_GetActor(PackData* aPackData, const char* aActorName) { if (aPackData == NULL || aActorName == NULL) { return NULL; diff --git a/src/pc/pc_main.c b/src/pc/pc_main.c index d39767ed..939ef018 100644 --- a/src/pc/pc_main.c +++ b/src/pc/pc_main.c @@ -222,6 +222,8 @@ void main_func(void) { mods_init(); configfile_load(configfile_name()); + dynos_pack_init(); + if (configPlayerModel >= CT_MAX) { configPlayerModel = 0; } if (configPlayerPalette >= PALETTE_MAX) { configPlayerPalette = 0; }