From 7847975e576bf2d26adfcc3bc0f5675ee0ebb50f Mon Sep 17 00:00:00 2001 From: Mr-Wiseguy Date: Sun, 19 Feb 2023 03:28:39 -0500 Subject: [PATCH] Initial commit that can build a static library from recompiled functions --- .gitignore | 52 +++ MMRecomp.sln | 41 +++ MMRecomp.vcxproj | 150 ++++++++ MMRecomp.vcxproj.filters | 17 + RecompiledFuncs.vcxproj | 170 +++++++++ RecompiledFuncs.vcxproj.filters | 19 + include/disable_warnings.h | 4 + include/recomp.h | 239 +++++++++++++ rev1_overlays.txt | 617 ++++++++++++++++++++++++++++++++ 9 files changed, 1309 insertions(+) create mode 100644 .gitignore create mode 100644 MMRecomp.sln create mode 100644 MMRecomp.vcxproj create mode 100644 MMRecomp.vcxproj.filters create mode 100644 RecompiledFuncs.vcxproj create mode 100644 RecompiledFuncs.vcxproj.filters create mode 100644 include/disable_warnings.h create mode 100644 include/recomp.h create mode 100644 rev1_overlays.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..23107a9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,52 @@ +# VSCode file settings +.vscode/settings.json + +# Input elf and rom files +*.elf +*.z64 + +# Output C files +RecompiledFuncs/ + +# Linux build output +build/ +*.o + +# Windows build output +*.exe + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ + +# Libraries (binaries that aren't in the repo) +Lib + +# RT64 (since it's not public yet) +RT64 + +# Runtime files +imgui.ini +rt64.log diff --git a/MMRecomp.sln b/MMRecomp.sln new file mode 100644 index 0000000..90b65d5 --- /dev/null +++ b/MMRecomp.sln @@ -0,0 +1,41 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.33027.164 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MMRecomp", "MMRecomp.vcxproj", "{14B47028-6A86-4660-A86D-2E69F229E110}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RecompiledFuncs", "RecompiledFuncs.vcxproj", "{7BF5E3F9-C49F-4C84-AB64-7681F028CAC2}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {14B47028-6A86-4660-A86D-2E69F229E110}.Debug|x64.ActiveCfg = Debug|x64 + {14B47028-6A86-4660-A86D-2E69F229E110}.Debug|x64.Build.0 = Debug|x64 + {14B47028-6A86-4660-A86D-2E69F229E110}.Debug|x86.ActiveCfg = Debug|Win32 + {14B47028-6A86-4660-A86D-2E69F229E110}.Debug|x86.Build.0 = Debug|Win32 + {14B47028-6A86-4660-A86D-2E69F229E110}.Release|x64.ActiveCfg = Release|x64 + {14B47028-6A86-4660-A86D-2E69F229E110}.Release|x64.Build.0 = Release|x64 + {14B47028-6A86-4660-A86D-2E69F229E110}.Release|x86.ActiveCfg = Release|Win32 + {14B47028-6A86-4660-A86D-2E69F229E110}.Release|x86.Build.0 = Release|Win32 + {7BF5E3F9-C49F-4C84-AB64-7681F028CAC2}.Debug|x64.ActiveCfg = Debug|x64 + {7BF5E3F9-C49F-4C84-AB64-7681F028CAC2}.Debug|x64.Build.0 = Debug|x64 + {7BF5E3F9-C49F-4C84-AB64-7681F028CAC2}.Debug|x86.ActiveCfg = Debug|Win32 + {7BF5E3F9-C49F-4C84-AB64-7681F028CAC2}.Debug|x86.Build.0 = Debug|Win32 + {7BF5E3F9-C49F-4C84-AB64-7681F028CAC2}.Release|x64.ActiveCfg = Release|x64 + {7BF5E3F9-C49F-4C84-AB64-7681F028CAC2}.Release|x64.Build.0 = Release|x64 + {7BF5E3F9-C49F-4C84-AB64-7681F028CAC2}.Release|x86.ActiveCfg = Release|Win32 + {7BF5E3F9-C49F-4C84-AB64-7681F028CAC2}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {39A9C7D9-F465-4453-BEEE-2DDC43DA95F4} + EndGlobalSection +EndGlobal diff --git a/MMRecomp.vcxproj b/MMRecomp.vcxproj new file mode 100644 index 0000000..31a4d3a --- /dev/null +++ b/MMRecomp.vcxproj @@ -0,0 +1,150 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + + 16.0 + Win32Proj + {14b47028-6a86-4660-a86d-2e69f229e110} + MMRecomp + 10.0 + + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + + + true + + + false + + + true + + + false + + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + + + diff --git a/MMRecomp.vcxproj.filters b/MMRecomp.vcxproj.filters new file mode 100644 index 0000000..a8a6563 --- /dev/null +++ b/MMRecomp.vcxproj.filters @@ -0,0 +1,17 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + \ No newline at end of file diff --git a/RecompiledFuncs.vcxproj b/RecompiledFuncs.vcxproj new file mode 100644 index 0000000..6c18663 --- /dev/null +++ b/RecompiledFuncs.vcxproj @@ -0,0 +1,170 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {7bf5e3f9-c49f-4c84-ab64-7681f028cac2} + RecompiledFuncs + 10.0 + + + + StaticLibrary + true + v142 + Unicode + + + StaticLibrary + false + v142 + true + Unicode + + + StaticLibrary + true + v142 + Unicode + + + StaticLibrary + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + $(SolutionDir)include;$(IncludePath) + + + false + $(SolutionDir)include;$(IncludePath) + + + true + $(Platform)\$(Configuration)\RecompFuncs\ + $(SolutionDir)include;$(IncludePath) + + + false + $(Platform)\$(Configuration)\RecompFuncs\ + $(SolutionDir)include;$(IncludePath) + + + + Level1 + true + WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + true + NotUsing + true + true + + + + + true + + + + + Level1 + true + true + true + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + true + NotUsing + true + true + + + + + true + true + true + + + + + Level1 + true + _DEBUG;_LIB;%(PreprocessorDefinitions) + true + NotUsing + true + true + + + + + true + + + + + Level1 + true + true + true + NDEBUG;_LIB;%(PreprocessorDefinitions) + true + NotUsing + true + true + + + + + true + true + true + + + + <_WildCardClCompile Include="RecompiledFuncs\*.c" /> + + + + + + \ No newline at end of file diff --git a/RecompiledFuncs.vcxproj.filters b/RecompiledFuncs.vcxproj.filters new file mode 100644 index 0000000..37df2e0 --- /dev/null +++ b/RecompiledFuncs.vcxproj.filters @@ -0,0 +1,19 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + diff --git a/include/disable_warnings.h b/include/disable_warnings.h new file mode 100644 index 0000000..ff36f12 --- /dev/null +++ b/include/disable_warnings.h @@ -0,0 +1,4 @@ +#ifdef __clang__ +#pragma clang diagnostic ignored "-Wunused-variable" +#pragma clang diagnostic ignored "-Wimplicit-function-declaration" +#endif diff --git a/include/recomp.h b/include/recomp.h new file mode 100644 index 0000000..e331a81 --- /dev/null +++ b/include/recomp.h @@ -0,0 +1,239 @@ +#ifndef __RECOMP_H__ +#define __RECOMP_H__ + +#include +#include +#include +#include +#include + +#if 0 // treat GPRs as 32-bit, should be better codegen +typedef uint32_t gpr; + +#define SIGNED(val) \ + ((int32_t)(val)) +#else +typedef uint64_t gpr; + +#define SIGNED(val) \ + ((int64_t)(val)) +#endif + +#define ADD32(a, b) \ + ((gpr)(int32_t)((a) + (b))) + +#define SUB32(a, b) \ + ((gpr)(int32_t)((a) - (b))) + +#define MEM_W(offset, reg) \ + (*(int32_t*)(rdram + ((((reg) + (offset))) - 0xFFFFFFFF80000000))) + //(*(int32_t*)(rdram + ((((reg) + (offset))) & 0x3FFFFFF))) + +#define MEM_H(offset, reg) \ + (*(int16_t*)(rdram + ((((reg) + (offset)) ^ 2) - 0xFFFFFFFF80000000))) + //(*(int16_t*)(rdram + ((((reg) + (offset)) ^ 2) & 0x3FFFFFF))) + +#define MEM_B(offset, reg) \ + (*(int8_t*)(rdram + ((((reg) + (offset)) ^ 3) - 0xFFFFFFFF80000000))) + //(*(int8_t*)(rdram + ((((reg) + (offset)) ^ 3) & 0x3FFFFFF))) + +#define MEM_HU(offset, reg) \ + (*(uint16_t*)(rdram + ((((reg) + (offset)) ^ 2) - 0xFFFFFFFF80000000))) + //(*(uint16_t*)(rdram + ((((reg) + (offset)) ^ 2) & 0x3FFFFFF))) + +#define MEM_BU(offset, reg) \ + (*(uint8_t*)(rdram + ((((reg) + (offset)) ^ 3) - 0xFFFFFFFF80000000))) + //(*(uint8_t*)(rdram + ((((reg) + (offset)) ^ 3) & 0x3FFFFFF))) + +#define SD(val, offset, reg) { \ + *(uint32_t*)(rdram + ((((reg) + (offset) + 4)) - 0xFFFFFFFF80000000)) = (uint32_t)((val) >> 0); \ + *(uint32_t*)(rdram + ((((reg) + (offset) + 0)) - 0xFFFFFFFF80000000)) = (uint32_t)((val) >> 32); \ +} + +//#define SD(val, offset, reg) { \ +// *(uint32_t*)(rdram + ((((reg) + (offset) + 4)) & 0x3FFFFFF)) = (uint32_t)((val) >> 32); \ +// *(uint32_t*)(rdram + ((((reg) + (offset) + 0)) & 0x3FFFFFF)) = (uint32_t)((val) >> 0); \ +//} + +static inline uint64_t load_doubleword(uint8_t* rdram, gpr reg, gpr offset) { + uint64_t ret = 0; + uint64_t lo = (uint64_t)(uint32_t)MEM_W(reg, offset + 4); + uint64_t hi = (uint64_t)(uint32_t)MEM_W(reg, offset + 0); + ret = (lo << 0) | (hi << 32); + return ret; +} + +#define LD(offset, reg) \ + load_doubleword(rdram, offset, reg) + +// TODO proper lwl/lwr/swl/swr +static inline void do_swl(uint8_t* rdram, gpr offset, gpr reg, gpr val) { + uint8_t byte0 = (uint8_t)(val >> 24); + uint8_t byte1 = (uint8_t)(val >> 16); + uint8_t byte2 = (uint8_t)(val >> 8); + uint8_t byte3 = (uint8_t)(val >> 0); + + MEM_B(offset + 0, reg) = byte0; + MEM_B(offset + 1, reg) = byte1; + MEM_B(offset + 2, reg) = byte2; + MEM_B(offset + 3, reg) = byte3; +} + +static inline gpr do_lwl(uint8_t* rdram, gpr offset, gpr reg) { + uint8_t byte0 = MEM_B(offset + 0, reg); + uint8_t byte1 = MEM_B(offset + 1, reg); + uint8_t byte2 = MEM_B(offset + 2, reg); + uint8_t byte3 = MEM_B(offset + 3, reg); + + // Cast to int32_t to sign extend first + return (gpr)(int32_t)((byte0 << 24) | (byte1 << 16) | (byte2 << 8) | (byte3 << 0)); +} + +#define S32(val) \ + ((int32_t)(val)) + +#define U32(val) \ + ((uint32_t)(val)) + +#define S64(val) \ + ((int64_t)(val)) + +#define U64(val) \ + ((uint64_t)(val)) + +#define MUL_S(val1, val2) \ + ((val1) * (val2)) + +#define MUL_D(val1, val2) \ + ((val1) * (val2)) + +#define DIV_S(val1, val2) \ + ((val1) / (val2)) + +#define DIV_D(val1, val2) \ + ((val1) / (val2)) + +#define CVT_S_W(val) \ + ((float)((int32_t)(val))) + +#define CVT_D_W(val) \ + ((double)((int32_t)(val))) + +#define CVT_D_S(val) \ + ((double)(val)) + +#define CVT_S_D(val) \ + ((float)(val)) + +#define TRUNC_W_S(val) \ + ((int32_t)(val)) + +#define TRUNC_W_D(val) \ + ((int32_t)(val)) + +#define TRUNC_L_S(val) \ + ((int64_t)(val)) + +#define TRUNC_L_D(val) \ + ((int64_t)(val)) + +// TODO rounding mode +#define CVT_W_S(val) \ + ((int32_t)(val)) + +#define CVT_W_D(val) \ + ((int32_t)(val)) + +#define NAN_CHECK(val) \ + assert(val == val) + +//#define NAN_CHECK(val) + +typedef union { + double d; + struct { + float fl; + float fh; + }; + struct { + uint32_t u32l; + uint32_t u32h; + }; + uint64_t u64; +} fpr; + +typedef struct { + gpr r0, r1, r2, r3, r4, r5, r6, r7, + r8, r9, r10, r11, r12, r13, r14, r15, + r16, r17, r18, r19, r20, r21, r22, r23, + r24, r25, r26, r27, r28, r29, r30, r31; + fpr f0, f2, f4, f6, f8, f10, f12, f14, + f16, f18, f20, f22, f24, f26, f28, f30; + uint64_t hi, lo; +} recomp_context; + +#ifdef __cplusplus +extern "C" { +#endif + +void switch_error(const char* func, uint32_t vram, uint32_t jtbl); +void do_break(uint32_t vram); + +typedef void (recomp_func_t)(uint8_t* rdram, recomp_context* ctx); + +recomp_func_t* get_function(int32_t vram); + +#define LOOKUP_FUNC(val) \ + get_function((int32_t)(val)) + +extern int32_t section_addresses[]; + +#define LO16(x) \ + ((x) & 0xFFFF) + +#define HI16(x) \ + (((x) >> 16) + (((x) >> 15) & 1)) + +#define RELOC_HI16(section_index, offset) \ + HI16(section_addresses[section_index] + (offset)) + +#define RELOC_LO16(section_index, offset) \ + LO16(section_addresses[section_index] + (offset)) + +// For the Mario Party games (not working) +//// This has to be in this file so it can be inlined +//struct jmp_buf_storage { +// jmp_buf buffer; +//}; +// +//struct RecompJmpBuf { +// int32_t owner; +// struct jmp_buf_storage* storage; +// uint64_t magic; +//}; +// +//// Randomly generated constant +//#define SETJMP_MAGIC 0xe17afdfa939a437bu +// +//int32_t osGetThreadEx(void); +// +//#define setjmp_recomp(rdram, ctx) { \ +// struct RecompJmpBuf* buf = (struct RecompJmpBuf*)(&rdram[(uint64_t)ctx->r4 - 0xFFFFFFFF80000000]); \ +// \ +// /* Check if this jump buffer was previously set up */ \ +// if (buf->magic == SETJMP_MAGIC) { \ +// /* If so, free the old jmp_buf */ \ +// free(buf->storage); \ +// } \ +// \ +// buf->magic = SETJMP_MAGIC; \ +// buf->owner = osGetThreadEx(); \ +// buf->storage = (struct jmp_buf_storage*)calloc(1, sizeof(struct jmp_buf_storage)); \ +// ctx->r2 = setjmp(buf->storage->buffer); \ +//} + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/rev1_overlays.txt b/rev1_overlays.txt new file mode 100644 index 0000000..8c46ae1 --- /dev/null +++ b/rev1_overlays.txt @@ -0,0 +1,617 @@ +..ovl_title +..ovl_select +..ovl_opening +..ovl_file_choose +..ovl_daytelop +..ovl_kaleido_scope +..ovl_player_actor +..ovl_En_Test +..ovl_En_GirlA +..ovl_En_Part +..ovl_En_Light +..ovl_En_Door +..ovl_En_Box +..ovl_En_Pametfrog +..ovl_En_Okuta +..ovl_En_Bom +..ovl_En_Wallmas +..ovl_En_Dodongo +..ovl_En_Firefly +..ovl_En_Horse +..ovl_En_Arrow +..ovl_En_Elf +..ovl_En_Niw +..ovl_En_Tite +..ovl_En_Peehat +..ovl_En_Holl +..ovl_En_Dinofos +..ovl_En_Hata +..ovl_En_Zl1 +..ovl_En_Viewer +..ovl_En_Bubble +..ovl_Door_Shutter +..ovl_En_Boom +..ovl_En_Torch2 +..ovl_En_Minifrog +..ovl_En_St +..ovl_Obj_Wturn +..ovl_En_River_Sound +..ovl_En_Ossan +..ovl_En_Famos +..ovl_En_Bombf +..ovl_En_Am +..ovl_En_Dekubaba +..ovl_En_M_Fire1 +..ovl_En_M_Thunder +..ovl_Bg_Breakwall +..ovl_Door_Warp1 +..ovl_Obj_Syokudai +..ovl_Item_B_Heart +..ovl_En_Dekunuts +..ovl_En_Bbfall +..ovl_Arms_Hook +..ovl_En_Bb +..ovl_Bg_Keikoku_Spr +..ovl_En_Wood02 +..ovl_En_Death +..ovl_En_Minideath +..ovl_En_Vm +..ovl_Demo_Effect +..ovl_Demo_Kankyo +..ovl_En_Floormas +..ovl_En_Rd +..ovl_Bg_F40_Flift +..ovl_Obj_Mure +..ovl_En_Sw +..ovl_Object_Kankyo +..ovl_En_Horse_Link_Child +..ovl_Door_Ana +..ovl_En_Encount1 +..ovl_Demo_Tre_Lgt +..ovl_En_Encount2 +..ovl_En_Fire_Rock +..ovl_Bg_Ctower_Rot +..ovl_Mir_Ray +..ovl_En_Sb +..ovl_En_Bigslime +..ovl_En_Karebaba +..ovl_En_In +..ovl_En_Bom_Chu +..ovl_En_Horse_Game_Check +..ovl_En_Rr +..ovl_En_Fr +..ovl_En_Fishing +..ovl_Obj_Oshihiki +..ovl_Eff_Dust +..ovl_Bg_Umajump +..ovl_En_Insect +..ovl_En_Butte +..ovl_En_Fish +..ovl_Item_Etcetera +..ovl_Arrow_Fire +..ovl_Arrow_Ice +..ovl_Arrow_Light +..ovl_Obj_Kibako +..ovl_Obj_Tsubo +..ovl_En_Ik +..ovl_Demo_Shd +..ovl_En_Dns +..ovl_Elf_Msg +..ovl_En_Honotrap +..ovl_En_Tubo_Trap +..ovl_Obj_Ice_Poly +..ovl_En_Fz +..ovl_En_Kusa +..ovl_Obj_Bean +..ovl_Obj_Bombiwa +..ovl_Obj_Switch +..ovl_Obj_Lift +..ovl_Obj_Hsblock +..ovl_En_Okarina_Tag +..ovl_En_Goroiwa +..ovl_En_Daiku +..ovl_En_Nwc +..ovl_Item_Inbox +..ovl_En_Ge1 +..ovl_Obj_Blockstop +..ovl_En_Sda +..ovl_En_Clear_Tag +..ovl_En_Gm +..ovl_En_Ms +..ovl_En_Hs +..ovl_Bg_Ingate +..ovl_En_Kanban +..ovl_En_Attack_Niw +..ovl_En_Mk +..ovl_En_Owl +..ovl_En_Ishi +..ovl_Obj_Hana +..ovl_Obj_Lightswitch +..ovl_Obj_Mure2 +..ovl_En_Fu +..ovl_En_Stream +..ovl_En_Mm +..ovl_En_Weather_Tag +..ovl_En_Ani +..ovl_En_Js +..ovl_En_Okarina_Effect +..ovl_En_Mag +..ovl_Elf_Msg2 +..ovl_Bg_F40_Swlift +..ovl_En_Kakasi +..ovl_Obj_Makeoshihiki +..ovl_Oceff_Spot +..ovl_En_Torch +..ovl_Shot_Sun +..ovl_Obj_Roomtimer +..ovl_En_Ssh +..ovl_Oceff_Wipe +..ovl_Effect_Ss_Dust +..ovl_Effect_Ss_Kirakira +..ovl_Effect_Ss_Bomb2 +..ovl_Effect_Ss_Blast +..ovl_Effect_Ss_G_Spk +..ovl_Effect_Ss_D_Fire +..ovl_Effect_Ss_Bubble +..ovl_Effect_Ss_G_Ripple +..ovl_Effect_Ss_G_Splash +..ovl_Effect_Ss_G_Fire +..ovl_Effect_Ss_Lightning +..ovl_Effect_Ss_Dt_Bubble +..ovl_Effect_Ss_Hahen +..ovl_Effect_Ss_Stick +..ovl_Effect_Ss_Sibuki +..ovl_Effect_Ss_Stone1 +..ovl_Effect_Ss_Hitmark +..ovl_Effect_Ss_Fhg_Flash +..ovl_Effect_Ss_K_Fire +..ovl_Effect_Ss_Solder_Srch_Ball +..ovl_Effect_Ss_Kakera +..ovl_Effect_Ss_Ice_Piece +..ovl_Effect_Ss_En_Ice +..ovl_Effect_Ss_Fire_Tail +..ovl_Effect_Ss_En_Fire +..ovl_Effect_Ss_Extra +..ovl_Effect_Ss_Dead_Db +..ovl_Effect_Ss_Dead_Dd +..ovl_Effect_Ss_Dead_Ds +..ovl_Oceff_Storm +..ovl_Obj_Demo +..ovl_En_Minislime +..ovl_En_Nutsball +..ovl_Oceff_Wipe2 +..ovl_Oceff_Wipe3 +..ovl_En_Dg +..ovl_En_Si +..ovl_Obj_Comb +..ovl_Obj_Kibako2 +..ovl_En_Hs2 +..ovl_Obj_Mure3 +..ovl_En_Tg +..ovl_En_Wf +..ovl_En_Skb +..ovl_En_Gs +..ovl_Obj_Sound +..ovl_En_Crow +..ovl_En_Cow +..ovl_Oceff_Wipe4 +..ovl_En_Zo +..ovl_Effect_Ss_Ice_Smoke +..ovl_Obj_Makekinsuta +..ovl_En_Ge3 +..ovl_Obj_Hamishi +..ovl_En_Zl4 +..ovl_En_Mm2 +..ovl_Door_Spiral +..ovl_Obj_Pzlblock +..ovl_Obj_Toge +..ovl_Obj_Armos +..ovl_Obj_Boyo +..ovl_En_Grasshopper +..ovl_Obj_Grass +..ovl_Obj_Grass_Carry +..ovl_Obj_Grass_Unit +..ovl_Bg_Fire_Wall +..ovl_En_Bu +..ovl_En_Encount3 +..ovl_En_Jso +..ovl_Obj_Chikuwa +..ovl_En_Knight +..ovl_En_Warp_tag +..ovl_En_Aob_01 +..ovl_En_Boj_01 +..ovl_En_Boj_02 +..ovl_En_Boj_03 +..ovl_En_Encount4 +..ovl_En_Bom_Bowl_Man +..ovl_En_Syateki_Man +..ovl_Bg_Icicle +..ovl_En_Syateki_Crow +..ovl_En_Boj_04 +..ovl_En_Cne_01 +..ovl_En_Bba_01 +..ovl_En_Bji_01 +..ovl_Bg_Spdweb +..ovl_En_Mt_tag +..ovl_Boss_01 +..ovl_Boss_02 +..ovl_Boss_03 +..ovl_Boss_04 +..ovl_Boss_05 +..ovl_Boss_06 +..ovl_Boss_07 +..ovl_Bg_Dy_Yoseizo +..ovl_En_Boj_05 +..ovl_En_Sob1 +..ovl_En_Go +..ovl_En_Raf +..ovl_Obj_Funen +..ovl_Obj_Raillift +..ovl_Bg_Numa_Hana +..ovl_Obj_Flowerpot +..ovl_Obj_Spinyroll +..ovl_Dm_Hina +..ovl_En_Syateki_Wf +..ovl_Obj_Skateblock +..ovl_Effect_En_Ice_Block +..ovl_Obj_Iceblock +..ovl_En_Bigpamet +..ovl_Bg_Dblue_Movebg +..ovl_En_Syateki_Dekunuts +..ovl_Elf_Msg3 +..ovl_En_Fg +..ovl_Dm_Ravine +..ovl_Dm_Sa +..ovl_En_Slime +..ovl_En_Pr +..ovl_Obj_Toudai +..ovl_Obj_Entotu +..ovl_Obj_Bell +..ovl_En_Syateki_Okuta +..ovl_Obj_Shutter +..ovl_Dm_Zl +..ovl_En_Ru +..ovl_En_Elfgrp +..ovl_Dm_Tsg +..ovl_En_Baguo +..ovl_Obj_Vspinyroll +..ovl_Obj_Smork +..ovl_En_Test2 +..ovl_En_Test3 +..ovl_En_Test4 +..ovl_En_Bat +..ovl_En_Sekihi +..ovl_En_Wiz +..ovl_En_Wiz_Brock +..ovl_En_Wiz_Fire +..ovl_Eff_Change +..ovl_Dm_Statue +..ovl_Obj_Fireshield +..ovl_Bg_Ladder +..ovl_En_Mkk +..ovl_Demo_Getitem +..ovl_En_Dnb +..ovl_En_Dnh +..ovl_En_Dnk +..ovl_En_Dnq +..ovl_Bg_Keikoku_Saku +..ovl_Obj_Hugebombiwa +..ovl_En_Firefly2 +..ovl_En_Rat +..ovl_En_Water_Effect +..ovl_En_Kusa2 +..ovl_Bg_Spout_Fire +..ovl_En_Dy_Extra +..ovl_En_Bal +..ovl_En_Ginko_Man +..ovl_En_Warp_Uzu +..ovl_Obj_Driftice +..ovl_En_Look_Nuts +..ovl_En_Mushi2 +..ovl_En_Fall +..ovl_En_Mm3 +..ovl_Bg_Crace_Movebg +..ovl_En_Dno +..ovl_En_Pr2 +..ovl_En_Prz +..ovl_En_Jso2 +..ovl_Obj_Etcetera +..ovl_En_Egol +..ovl_Obj_Mine +..ovl_Obj_Purify +..ovl_En_Tru +..ovl_En_Trt +..ovl_En_Test5 +..ovl_En_Test6 +..ovl_En_Az +..ovl_En_Estone +..ovl_Bg_Hakugin_Post +..ovl_Dm_Opstage +..ovl_Dm_Stk +..ovl_Dm_Char00 +..ovl_Dm_Char01 +..ovl_Dm_Char02 +..ovl_Dm_Char03 +..ovl_Dm_Char04 +..ovl_Dm_Char05 +..ovl_Dm_Char06 +..ovl_Dm_Char07 +..ovl_Dm_Char08 +..ovl_Dm_Char09 +..ovl_Obj_Tokeidai +..ovl_En_Mnk +..ovl_En_Egblock +..ovl_En_Guard_Nuts +..ovl_Bg_Hakugin_Bombwall +..ovl_Obj_Tokei_Tobira +..ovl_Bg_Hakugin_Elvpole +..ovl_En_Ma4 +..ovl_En_Twig +..ovl_En_Po_Fusen +..ovl_En_Door_Etc +..ovl_En_Bigokuta +..ovl_Bg_Icefloe +..ovl_fbdemo_triforce +..ovl_fbdemo_wipe1 +..ovl_fbdemo_wipe3 +..ovl_fbdemo_wipe4 +..ovl_fbdemo_wipe5 +..ovl_Effect_Ss_Sbn +..ovl_Obj_Ocarinalift +..ovl_En_Time_Tag +..ovl_Bg_Open_Shutter +..ovl_Bg_Open_Spot +..ovl_Bg_Fu_Kaiten +..ovl_Obj_Aqua +..ovl_En_Elforg +..ovl_En_Elfbub +..ovl_En_Fu_Mato +..ovl_En_Fu_Kago +..ovl_En_Osn +..ovl_Bg_Ctower_Gear +..ovl_En_Trt2 +..ovl_Obj_Tokei_Step +..ovl_Bg_Lotus +..ovl_En_Kame +..ovl_Obj_Takaraya_Wall +..ovl_Bg_Fu_Mizu +..ovl_En_Sellnuts +..ovl_Bg_Dkjail_Ivy +..ovl_Obj_Visiblock +..ovl_En_Takaraya +..ovl_En_Tsn +..ovl_En_Ds2n +..ovl_En_Fsn +..ovl_En_Shn +..ovl_En_Stop_heishi +..ovl_Obj_Bigicicle +..ovl_En_Lift_Nuts +..ovl_En_Tk +..ovl_Bg_Market_Step +..ovl_Obj_Lupygamelift +..ovl_En_Test7 +..ovl_Obj_Lightblock +..ovl_Mir_Ray2 +..ovl_En_Wdhand +..ovl_En_Gamelupy +..ovl_Bg_Danpei_Movebg +..ovl_En_Snowwd +..ovl_En_Pm +..ovl_En_Gakufu +..ovl_Elf_Msg4 +..ovl_Elf_Msg5 +..ovl_En_Col_Man +..ovl_En_Talk_Gibud +..ovl_En_Giant +..ovl_Obj_Snowball +..ovl_Boss_Hakugin +..ovl_En_Gb2 +..ovl_En_Onpuman +..ovl_Bg_Tobira01 +..ovl_En_Tag_Obj +..ovl_Obj_Dhouse +..ovl_Obj_Hakaisi +..ovl_Bg_Hakugin_Switch +..ovl_En_Snowman +..ovl_TG_Sw +..ovl_En_Po_Sisters +..ovl_En_Pp +..ovl_En_Hakurock +..ovl_En_Hanabi +..ovl_Obj_Dowsing +..ovl_Obj_Wind +..ovl_En_Racedog +..ovl_En_Kendo_Js +..ovl_Bg_Botihasira +..ovl_En_Fish2 +..ovl_En_Pst +..ovl_En_Poh +..ovl_Obj_Spidertent +..ovl_En_Zoraegg +..ovl_En_Kbt +..ovl_En_Gg +..ovl_En_Maruta +..ovl_Obj_Snowball2 +..ovl_En_Gg2 +..ovl_Obj_Ghaka +..ovl_En_Dnp +..ovl_En_Dai +..ovl_Bg_Goron_Oyu +..ovl_En_Kgy +..ovl_En_Invadepoh +..ovl_En_Gk +..ovl_En_An +..ovl_En_Bee +..ovl_En_Ot +..ovl_En_Dragon +..ovl_Obj_Dora +..ovl_En_Bigpo +..ovl_Obj_Kendo_Kanban +..ovl_Obj_Hariko +..ovl_En_Sth +..ovl_Bg_Sinkai_Kabe +..ovl_Bg_Haka_Curtain +..ovl_Bg_Kin2_Bombwall +..ovl_Bg_Kin2_Fence +..ovl_Bg_Kin2_Picture +..ovl_Bg_Kin2_Shelf +..ovl_En_Rail_Skb +..ovl_En_Jg +..ovl_En_Tru_Mt +..ovl_Obj_Um +..ovl_En_Neo_Reeba +..ovl_Bg_Mbar_Chair +..ovl_Bg_Ikana_Block +..ovl_Bg_Ikana_Mirror +..ovl_Bg_Ikana_Rotaryroom +..ovl_Bg_Dblue_Balance +..ovl_Bg_Dblue_Waterfall +..ovl_En_Kaizoku +..ovl_En_Ge2 +..ovl_En_Ma_Yts +..ovl_En_Ma_Yto +..ovl_Obj_Tokei_Turret +..ovl_Bg_Dblue_Elevator +..ovl_Obj_Warpstone +..ovl_En_Zog +..ovl_Obj_Rotlift +..ovl_Obj_Jg_Gakki +..ovl_Bg_Inibs_Movebg +..ovl_En_Zot +..ovl_Obj_Tree +..ovl_Obj_Y2lift +..ovl_Obj_Y2shutter +..ovl_Obj_Boat +..ovl_Obj_Taru +..ovl_Obj_Hunsui +..ovl_En_Jc_Mato +..ovl_Mir_Ray3 +..ovl_En_Zob +..ovl_Elf_Msg6 +..ovl_Obj_Nozoki +..ovl_En_Toto +..ovl_En_Railgibud +..ovl_En_Baba +..ovl_En_Suttari +..ovl_En_Zod +..ovl_En_Kujiya +..ovl_En_Geg +..ovl_Obj_Kinoko +..ovl_Obj_Yasi +..ovl_En_Tanron1 +..ovl_En_Tanron2 +..ovl_En_Tanron3 +..ovl_Obj_Chan +..ovl_En_Zos +..ovl_En_S_Goro +..ovl_En_Nb +..ovl_En_Ja +..ovl_Bg_F40_Block +..ovl_Bg_F40_Switch +..ovl_En_Po_Composer +..ovl_En_Guruguru +..ovl_Oceff_Wipe5 +..ovl_En_Stone_heishi +..ovl_Oceff_Wipe6 +..ovl_En_Scopenuts +..ovl_En_Scopecrow +..ovl_Oceff_Wipe7 +..ovl_Eff_Kamejima_Wave +..ovl_En_Hg +..ovl_En_Hgo +..ovl_En_Zov +..ovl_En_Ah +..ovl_Obj_Hgdoor +..ovl_Bg_Ikana_Bombwall +..ovl_Bg_Ikana_Ray +..ovl_Bg_Ikana_Shutter +..ovl_Bg_Haka_Bombwall +..ovl_Bg_Haka_Tomb +..ovl_En_Sc_Ruppe +..ovl_Bg_Iknv_Doukutu +..ovl_Bg_Iknv_Obj +..ovl_En_Pamera +..ovl_Obj_HsStump +..ovl_En_Hidden_Nuts +..ovl_En_Zow +..ovl_En_Talk +..ovl_En_Al +..ovl_En_Tab +..ovl_En_Nimotsu +..ovl_En_Hit_Tag +..ovl_En_Ruppecrow +..ovl_En_Tanron4 +..ovl_En_Tanron5 +..ovl_En_Tanron6 +..ovl_En_Daiku2 +..ovl_En_Muto +..ovl_En_Baisen +..ovl_En_Heishi +..ovl_En_Demo_heishi +..ovl_En_Dt +..ovl_En_Cha +..ovl_Obj_Dinner +..ovl_Eff_Lastday +..ovl_Bg_Ikana_Dharma +..ovl_En_Akindonuts +..ovl_Eff_Stk +..ovl_En_Ig +..ovl_En_Rg +..ovl_En_Osk +..ovl_En_Sth2 +..ovl_En_Yb +..ovl_En_Rz +..ovl_En_Scopecoin +..ovl_En_Bjt +..ovl_En_Bomjima +..ovl_En_Bomjimb +..ovl_En_Bombers +..ovl_En_Bombers2 +..ovl_En_Bombal +..ovl_Obj_Moon_Stone +..ovl_Obj_Mu_Pict +..ovl_Bg_Ikninside +..ovl_Eff_Zoraband +..ovl_Obj_Kepn_Koya +..ovl_Obj_Usiyane +..ovl_En_Nnh +..ovl_Obj_Kzsaku +..ovl_Obj_Milk_Bin +..ovl_En_Kitan +..ovl_Bg_Astr_Bombwall +..ovl_Bg_Iknin_Susceil +..ovl_En_Bsb +..ovl_En_Recepgirl +..ovl_En_Thiefbird +..ovl_En_Jgame_Tsn +..ovl_Obj_Jgame_Light +..ovl_Obj_Yado +..ovl_Demo_Syoten +..ovl_Demo_Moonend +..ovl_Bg_Lbfshot +..ovl_Bg_Last_Bwall +..ovl_En_And +..ovl_En_Invadepoh_Demo +..ovl_Obj_Danpeilift +..ovl_En_Fall2 +..ovl_Dm_Al +..ovl_Dm_An +..ovl_Dm_Ah +..ovl_Dm_Nb +..ovl_En_Drs +..ovl_En_Ending_Hero +..ovl_Dm_Bal +..ovl_En_Paper +..ovl_En_Hint_Skb +..ovl_Dm_Tag +..ovl_En_Bh +..ovl_En_Ending_Hero2 +..ovl_En_Ending_Hero3 +..ovl_En_Ending_Hero4 +..ovl_En_Ending_Hero5 +..ovl_En_Ending_Hero6 +..ovl_Dm_Gm +..ovl_Obj_Swprize +..ovl_En_Invisible_Ruppe +..ovl_Obj_Ending +..ovl_En_Rsn