diff options
| author | octorock <79596758+octorock@users.noreply.github.com> | 2024-01-06 18:12:53 +0100 |
|---|---|---|
| committer | octorock <79596758+octorock@users.noreply.github.com> | 2024-01-06 18:12:53 +0100 |
| commit | 560dfa45b16d5da212174423d71c67f638366cce (patch) | |
| tree | fb103ec8abfce76017c37ebb163bd91a8fea1278 /src/manager/minishVillageTileSetManager.c | |
| parent | 06dc15859867c7f2db22ea6e289e28ff12b0b6c9 (diff) | |
Add more tilemap documentation
Diffstat (limited to 'src/manager/minishVillageTileSetManager.c')
| -rw-r--r-- | src/manager/minishVillageTileSetManager.c | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/src/manager/minishVillageTileSetManager.c b/src/manager/minishVillageTileSetManager.c new file mode 100644 index 00000000..88671417 --- /dev/null +++ b/src/manager/minishVillageTileSetManager.c @@ -0,0 +1,191 @@ +/** + * @file minishVillageTileSetManager.c + * @ingroup Managers + * + * @brief Swap tileSet data in minish village depending on the position + */ +#include "manager/minishVillageTileSetManager.h" +#include "asm.h" +#include "common.h" +#include "functions.h" +#include "main.h" + +void sub_08057E30(void*); +bool32 sub_08057E40(MinishVillageTileSetManager*); +void sub_08057E7C(u32); + +extern const u8 gGlobalGfxAndPalettes[]; + +const u16 gUnk_08108050[0x2A] = { +#ifdef EU + 0, 0, 0x20, 0xE0, 0xE0, 1, 0x28, 0x1C8, 0x60, 0x80, 2, + 0x188, 0x278, 0xE0, 0xA0, 3, 0x310, 0x178, 0xC0, 0x150, 3, 0x340, +#else + 0, 0, 0x20, 0xE0, 0xE0, 1, 0, 0x1D0, 0x80, 0x60, 2, + 0x170, 0x278, 0xF8, 0xA0, 3, 0x310, 0x178, 0xC0, 0x150, 3, 0x340, +#endif + 0x2C8, 0x60, 0x90, 4, 0x1D0, 0, 0x200, 0xE0, 1, 0x108, 0x188, + 0xD0, 0x80, 2, 0x1E8, 0x338, 0x50, 0xC0, 0xFF, 0 +}; + +const u32 gUnk_081080A4[0x50] = { +#ifdef EU + 0x109860, 0x6000000, 0x10a860, 0x6001000, 0x10b860, 0x6002000, 0x10c860, 0x6003000, 0x10d860, 0x6008000, + 0x10e860, 0x6009000, 0x10f860, 0x600a000, 0x110860, 0x600b000, 0x111860, 0x6000000, 0x112860, 0x6001000, + 0x113860, 0x6002000, 0x114860, 0x6003000, 0x115860, 0x6008000, 0x116860, 0x6009000, 0x117860, 0x600a000, + 0x118860, 0x600b000, 0x119860, 0x6000000, 0x11a860, 0x6001000, 0x11b860, 0x6002000, 0x11c860, 0x6003000, + 0x11d860, 0x6008000, 0x11e860, 0x6009000, 0x11f860, 0x600a000, 0x120860, 0x600b000, 0x121860, 0x6000000, + 0x122860, 0x6001000, 0x123860, 0x6002000, 0x124860, 0x6003000, 0x125860, 0x6008000, 0x126860, 0x6009000, + 0x127860, 0x600a000, 0x128860, 0x600b000, 0x129860, 0x6000000, 0x12a860, 0x6001000, 0x12b860, 0x6002000, + 0x12c860, 0x6003000, 0x12d860, 0x6008000, 0x12e860, 0x6009000, 0x12f860, 0x600a000, 0x130860, 0x600b000 +#else + 0x001095E0, 0x06000000, 0x0010A5E0, 0x06001000, 0x0010B5E0, 0x06002000, 0x0010C5E0, 0x06003000, 0x0010D5E0, + 0x06008000, 0x0010E5E0, 0x06009000, 0x0010F5E0, 0x0600A000, 0x001105E0, 0x0600B000, 0x001115E0, 0x06000000, + 0x001125E0, 0x06001000, 0x001135E0, 0x06002000, 0x001145E0, 0x06003000, 0x001155E0, 0x06008000, 0x001165E0, + 0x06009000, 0x001175E0, 0x0600A000, 0x001185E0, 0x0600B000, 0x001195E0, 0x06000000, 0x0011A5E0, 0x06001000, + 0x0011B5E0, 0x06002000, 0x0011C5E0, 0x06003000, 0x0011D5E0, 0x06008000, 0x0011E5E0, 0x06009000, 0x0011F5E0, + 0x0600A000, 0x001205E0, 0x0600B000, 0x001215E0, 0x06000000, 0x001225E0, 0x06001000, 0x001235E0, 0x06002000, + 0x001245E0, 0x06003000, 0x001255E0, 0x06008000, 0x001265E0, 0x06009000, 0x001275E0, 0x0600A000, 0x001285E0, + 0x0600B000, 0x001295E0, 0x06000000, 0x0012A5E0, 0x06001000, 0x0012B5E0, 0x06002000, 0x0012C5E0, 0x06003000, + 0x0012D5E0, 0x06008000, 0x0012E5E0, 0x06009000, 0x0012F5E0, 0x0600A000, 0x001305E0, 0x0600B000 +#endif +}; + +const u8 gUnk_081081E4[] = { 0x16, 0x17, 0x17, 0x18, 0x18 }; + +#ifdef EU +void MinishVillageTileSetManager_Main(MinishVillageTileSetManager* this) { + u32 tmp; + const u32* tmp2; + s32 tmp3; + if (super->action == 0) { + super->action = 1; + super->timer = 8; + this->unk_20 = 0xFF; + + RegisterTransitionManager(this, sub_08057E30, 0); + } + if (gRoomControls.reload_flags) + return; + + if (sub_08057E40(this)) { + tmp = (u32)gRoomVars.graphicsGroups[0]; + if (this->unk_20 != tmp) { + this->unk_20 = tmp; + super->timer = 0; + } + } + + tmp2 = &gUnk_081080A4[tmp << 4]; + tmp3 = super->timer; + if (tmp3 == 0) { + gPauseMenuOptions.disabled = 1; + LoadResourceAsync(&gGlobalGfxAndPalettes[tmp2[0]], tmp2[1], 0x1000); + LoadPaletteGroup(gUnk_081081E4[tmp]); + super->timer++; + } else { + switch (tmp3) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + LoadResourceAsync(&gGlobalGfxAndPalettes[tmp2[(super->timer << 1)]], tmp2[(super->timer << 1) + 1], + 0x1000); + super->timer++; + gPauseMenuOptions.disabled = 0; + case 8: + break; + } + } +} +#else +void MinishVillageTileSetManager_Main(MinishVillageTileSetManager* this) { + u32 tmp; + const u32* tmp2; + if (super->action == 0) { + super->action = 1; + super->timer = 8; + this->unk_20 = 0xFF; + + SetEntityPriority((Entity*)this, PRIO_PLAYER_EVENT); + RegisterTransitionManager(this, sub_08057E30, 0); + } + if (sub_08057E40(this)) { + tmp = (u32)gRoomVars.graphicsGroups[0]; + if (this->unk_20 != tmp) { + this->unk_20 = tmp; + super->timer = 0; + } + } + if (gRoomControls.reload_flags) + return; +#ifndef JP + tmp = this->unk_20; +#endif + tmp2 = &gUnk_081080A4[tmp << 4]; + switch (super->timer) { + case 0: + gPauseMenuOptions.disabled = 1; + LoadResourceAsync(&gGlobalGfxAndPalettes[tmp2[0]], tmp2[1], 0x1000); + LoadPaletteGroup(gUnk_081081E4[tmp]); + super->timer++; + break; + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + LoadResourceAsync(&gGlobalGfxAndPalettes[tmp2[(super->timer << 1)]], tmp2[(super->timer << 1) + 1], 0x1000); + super->timer++; + break; + case 8: + gPauseMenuOptions.disabled = 0; + super->timer++; + break; + } +} +#endif + +void sub_08057E30(void* this) { + sub_08057E7C(gRoomVars.graphicsGroups[0]); +} + +bool32 sub_08057E40(MinishVillageTileSetManager* this) { + u32 tmp = CheckRegionsOnScreen(gUnk_08108050); + if (tmp != 0xFF) { + gRoomVars.graphicsGroups[0] = tmp; + return TRUE; + } else { + return FALSE; + } +} + +void sub_08057E64(void) { + u32 tmp = CheckRegionsOnScreen(gUnk_08108050); + if (tmp != 0xFF) { + sub_08057E7C(tmp); + } +} + +void sub_08057E7C(u32 unk1) { + u32 tmp; + const u32* tmp2; + +#ifndef EU + if (unk1 > 4) + return; +#endif + + LoadPaletteGroup(gUnk_081081E4[unk1]); + tmp2 = &gUnk_081080A4[unk1 << 4]; + for (tmp = 0; tmp < 8; tmp++, tmp2 += 2) { + DmaCopy32(3, &gGlobalGfxAndPalettes[tmp2[0]], tmp2[1], 0x400 * 4); + } + gRoomVars.graphicsGroups[0] = unk1; +} |
