From e24431928c0e9b1be04144775fda35e55d566678 Mon Sep 17 00:00:00 2001 From: Sonic The <109289447+SonicTheHedgeHog64@users.noreply.github.com> Date: Sat, 22 Feb 2025 15:44:53 -0600 Subject: [PATCH] Lvl Macros (#678) for dynos levels that use the normal macros --- data/dynos.cpp.h | 2 ++ data/dynos_bin_behavior.cpp | 6 ++++ data/dynos_bin_lvl.cpp | 6 ++++ data/dynos_bin_pointer.cpp | 12 ++++++++ data/dynos_mgr_builtin.cpp | 56 ++++++++++++++++++++++++++++++++++++- 5 files changed, 81 insertions(+), 1 deletion(-) diff --git a/data/dynos.cpp.h b/data/dynos.cpp.h index a48df3969..a498cf3e1 100644 --- a/data/dynos.cpp.h +++ b/data/dynos.cpp.h @@ -849,6 +849,8 @@ const char* DynOS_Builtin_Actor_GetFromData(const GeoLayout* aData); const GeoLayout* DynOS_Builtin_Actor_GetFromIndex(s32 aIndex); const char* DynOS_Builtin_Actor_GetNameFromIndex(s32 aIndex); s32 DynOS_Builtin_Actor_GetCount(); +const MacroObject* DynOS_Builtin_LvlMacro_GetFromName(const char* aDataName); +const char* DynOS_Builtin_LvlMacro_GetFromData(const MacroObject* aData); const GeoLayout* DynOS_Builtin_LvlGeo_GetFromName(const char* aDataName); const char* DynOS_Builtin_LvlGeo_GetFromData(const GeoLayout* aData); const Collision* DynOS_Builtin_Col_GetFromName(const char* aDataName); diff --git a/data/dynos_bin_behavior.cpp b/data/dynos_bin_behavior.cpp index 248acfced..39f991cde 100644 --- a/data/dynos_bin_behavior.cpp +++ b/data/dynos_bin_behavior.cpp @@ -1919,6 +1919,12 @@ static BehaviorScript ParseBehaviorScriptSymbolArgInternal(GfxData *aGfxData, Da return (BehaviorScript)builtinActor; } + // Built-in Lvl Macros + auto builtinLvlMacro = DynOS_Builtin_LvlMacro_GetFromName(_Arg.begin()); + if (builtinLvlMacro != NULL) { + return (BehaviorScript)builtinLvlMacro; + } + // Built-in Lvl Geos auto builtinGeo = DynOS_Builtin_LvlGeo_GetFromName(_Arg.begin()); if (builtinGeo != NULL) { diff --git a/data/dynos_bin_lvl.cpp b/data/dynos_bin_lvl.cpp index c991c8d63..9cc76cb1a 100644 --- a/data/dynos_bin_lvl.cpp +++ b/data/dynos_bin_lvl.cpp @@ -495,6 +495,12 @@ static LevelScript ParseLevelScriptSymbolArgInternal(GfxData* aGfxData, DataNode return (LevelScript)builtinActor; } + // Built-in Lvl Macros + auto builtinLvlMacro = DynOS_Builtin_LvlMacro_GetFromName(_Arg.begin()); + if (builtinLvlMacro != NULL) { + return (LevelScript)builtinLvlMacro; + } + // Built-in Lvl Geos auto builtinGeo = DynOS_Builtin_LvlGeo_GetFromName(_Arg.begin()); if (builtinGeo != NULL) { diff --git a/data/dynos_bin_pointer.cpp b/data/dynos_bin_pointer.cpp index fae27bdba..b23d475e8 100644 --- a/data/dynos_bin_pointer.cpp +++ b/data/dynos_bin_pointer.cpp @@ -136,6 +136,12 @@ static PointerData GetDataFromPointer(const void* aPtr, GfxData* aGfxData) { return { builtinActor, 0 }; } + // Built-in Level Macros + auto builtinLvlMacro = DynOS_Builtin_LvlMacro_GetFromData((const MacroObject*)aPtr); + if (builtinLvlMacro != NULL) { + return { builtinLvlMacro, 0 }; + } + // Built-in Lvl Geos auto builtinGeo = DynOS_Builtin_LvlGeo_GetFromData((const GeoLayout*)aPtr); if (builtinGeo != NULL) { @@ -404,6 +410,12 @@ static void *GetPointerFromData(GfxData *aGfxData, const String &aPtrName, u32 a return (void*)builtinActor; } + // Built-in Lvl Macros + auto builtinLvlMacro = DynOS_Builtin_LvlMacro_GetFromName(aPtrName.begin()); + if (builtinLvlMacro != NULL) { + return (void*)builtinLvlMacro; + } + // Built-in Lvl Geos auto builtinGeo = DynOS_Builtin_LvlGeo_GetFromName(aPtrName.begin()); if (builtinGeo != NULL) { diff --git a/data/dynos_mgr_builtin.cpp b/data/dynos_mgr_builtin.cpp index 22e3fa6b5..9933226cd 100644 --- a/data/dynos_mgr_builtin.cpp +++ b/data/dynos_mgr_builtin.cpp @@ -54,6 +54,7 @@ extern "C" { #include "levels/bits/header.h" #include "levels/bob/header.h" #include "levels/bowser_1/header.h" +#include "levels/wdw/header.h" #include "levels/bowser_2/header.h" #include "levels/bowser_2/header.h" #include "levels/bowser_3/header.h" @@ -441,6 +442,59 @@ s32 DynOS_Builtin_Actor_GetCount() { return sizeof(sDynosBuiltinActors) / (2 * sizeof(sDynosBuiltinActors[0])); } + + ////////////////// + // Level Macros // +////////////////// + +static const void* sDynosBuiltinLvlMacros[] = { + define_builtin(bbh_seg7_macro_objs), + define_builtin(bitdw_seg7_macro_objs), + define_builtin(bitfs_seg7_macro_objs), + define_builtin(bits_seg7_macro_objs), + define_builtin(bob_seg7_macro_objs), + define_builtin(castle_courtyard_seg7_macro_objs), + define_builtin(castle_grounds_seg7_macro_objs), + define_builtin(ccm_seg7_area_1_macro_objs), + define_builtin(ccm_seg7_area_2_macro_objs), + define_builtin(cotmc_seg7_macro_objs), + define_builtin(ddd_seg7_area_1_macro_objs), + define_builtin(ddd_seg7_area_2_macro_objs), + define_builtin(hmc_seg7_macro_objs), + define_builtin(jrb_seg7_area_1_macro_objs), + define_builtin(jrb_seg7_area_2_macro_objs), + define_builtin(lll_seg7_area_1_macro_objs), + define_builtin(lll_seg7_area_2_macro_objs), + define_builtin(pss_seg7_macro_objs), + define_builtin(rr_seg7_macro_objs), + define_builtin(sa_seg7_macro_objs), + define_builtin(sl_seg7_area_1_macro_objs), + define_builtin(sl_seg7_area_2_macro_objs), + define_builtin(ssl_seg7_area_1_macro_objs), + define_builtin(ssl_seg7_area_2_macro_objs), + define_builtin(ssl_seg7_area_3_macro_objs), + define_builtin(thi_seg7_area_1_macro_objs), + define_builtin(thi_seg7_area_2_macro_objs), + define_builtin(thi_seg7_area_3_macro_objs), + define_builtin(totwc_seg7_macro_objs), + define_builtin(ttc_seg7_macro_objs), + define_builtin(ttm_seg7_area_1_macro_objs), + define_builtin(ttm_seg7_area_2_macro_objs), + define_builtin(vcutm_seg7_macro_objs), + define_builtin(wdw_seg7_area_1_macro_objs), + define_builtin(wdw_seg7_area_2_macro_objs), + define_builtin(wf_seg7_macro_objs), + define_builtin(wmotr_seg7_macro_objs), +}; + +const MacroObject* DynOS_Builtin_LvlMacro_GetFromName(const char* aDataName) { + MGR_FIND_DATA(sDynosBuiltinLvlMacros, (const MacroObject*)); +} + +const char* DynOS_Builtin_LvlMacro_GetFromData(const MacroObject* aData) { + MGR_FIND_NAME(sDynosBuiltinLvlMacros); +} + //////////////// // Level Geos // //////////////// @@ -2002,4 +2056,4 @@ s32 DynOS_Builtin_Func_GetIndexFromData(const void* aData) { } } return -1; -} \ No newline at end of file +}