diff options
| author | octorock <79596758+octorock@users.noreply.github.com> | 2022-03-05 11:43:58 +0100 |
|---|---|---|
| committer | octorock <79596758+octorock@users.noreply.github.com> | 2022-03-05 19:09:49 +0100 |
| commit | d6bbbf2db6bd078a887138506bec5abcc36b3020 (patch) | |
| tree | ed21da6d5dcf2db20e4022830903b5ba19443c87 /src | |
| parent | d18fed1fb9d52eb8c4be311d3c55bf4d29893d93 (diff) | |
Improve LayerStruct
Diffstat (limited to 'src')
| -rw-r--r-- | src/coord.c | 7 | ||||
| -rw-r--r-- | src/debug.c | 4 | ||||
| -rw-r--r-- | src/demo.c | 12 | ||||
| -rw-r--r-- | src/enemy/gyorgFemale.c | 12 | ||||
| -rw-r--r-- | src/enemy/gyorgMale.c | 2 | ||||
| -rw-r--r-- | src/enemy/octorokGolden.c | 2 | ||||
| -rw-r--r-- | src/enemy/spinyBeetle.c | 1 | ||||
| -rw-r--r-- | src/enterPortalSubtask.c | 3 | ||||
| -rw-r--r-- | src/fileselect.c | 178 | ||||
| -rw-r--r-- | src/game.c | 58 | ||||
| -rw-r--r-- | src/kinstone.c | 3 | ||||
| -rw-r--r-- | src/main.c | 5 | ||||
| -rw-r--r-- | src/manager/manager22.c | 3 | ||||
| -rw-r--r-- | src/manager/manager29.c | 8 | ||||
| -rw-r--r-- | src/menu/figurine_menu.c | 4 | ||||
| -rw-r--r-- | src/menu/kinstone_menu.c | 20 | ||||
| -rw-r--r-- | src/movement.c | 2 | ||||
| -rw-r--r-- | src/object/button.c | 4 | ||||
| -rw-r--r-- | src/object/fileScreenObjects.c | 46 | ||||
| -rw-r--r-- | src/object/railtrack.c | 2 | ||||
| -rw-r--r-- | src/player.c | 2 | ||||
| -rw-r--r-- | src/playerUtils.c | 398 | ||||
| -rw-r--r-- | src/projectile/winder.c | 2 | ||||
| -rw-r--r-- | src/roomInit.c | 2 | ||||
| -rw-r--r-- | src/scroll.c | 2 | ||||
| -rw-r--r-- | src/subtask2.c | 66 | ||||
| -rw-r--r-- | src/title.c | 11 |
27 files changed, 575 insertions, 284 deletions
diff --git a/src/coord.c b/src/coord.c index 0114ba8d..2a634b66 100644 --- a/src/coord.c +++ b/src/coord.c @@ -174,6 +174,7 @@ void sub_0806F704(Entity* ent, u32 a2) { ent->y.HALF.HI = (((a2 >> 2) & 0x3F0) | 8) + gRoomControls.origin_y; } +/** Calculates the tile position of the player but modifies it by the hitbox depending on the animation state. */ u32 sub_0806F730(Entity* ent) { u32 tmp = 0x3F; u32 x = ent->x.HALF.HI + ent->hitbox->offset_x - gRoomControls.origin_x; @@ -203,16 +204,16 @@ u32 sub_0806F798(Entity* ent) { } u32 sub_0806F7D0(Entity* ent) { - return gMapBottom._2004[sub_0806F730(ent)]; + return gMapBottom.collisionData[sub_0806F730(ent)]; } u32 sub_0806F7EC(Entity* ent) { - return gMapBottom._4[sub_0806F730(ent)]; + return gMapBottom.mapData[sub_0806F730(ent)]; } u32 sub_0806F804(u32 x, u32 y) { u32 idx = ((x >> 4) & 0x3F) + 4 * (y & 0x3F0); - return gMapBottom._4[idx]; + return gMapBottom.mapData[idx]; } u32 sub_0806F824(Entity* a, Entity* b, s32 x, s32 y) { diff --git a/src/debug.c b/src/debug.c index eaa65981..f7f70c8a 100644 --- a/src/debug.c +++ b/src/debug.c @@ -33,12 +33,12 @@ void sub_0805FA04(void) { gScreen.bg3.control = BGCNT_SCREENBASE(30) | BGCNT_PRIORITY(3) | BGCNT_CHARBASE(3); gScreen.bg3.updated = 1; MessageInitialize(); - MemClear((void*)&gUnk_02032EC0, sizeof(UI)); + MemClear((void*)&gUI, sizeof(UI)); MemClear((void*)&gGenericMenu, sizeof(GenericMenu)); gGenericMenu.unk16 = gSaveHeader->language; LoadGfxGroups(); SetColor(0, 0x1144); - gMain.state = 1; + gMain.state = GAMETASK_INIT; InitSoundPlayingInfo(); ResetFadeMask(); } @@ -46,7 +46,7 @@ void sub_080A2E40(void) { EraseAllEntities(); ResetPalettes(); ResetPaletteTable(0); - MemClear(&gUnk_02032EC0, sizeof gUnk_02032EC0); + MemClear(&gUI, sizeof gUI); MemClear(&gChooseFileState, sizeof gChooseFileState); MemClear(&gBG0Buffer, sizeof gBG0Buffer); LoadGfxGroups(); @@ -73,7 +73,7 @@ void sub_080A2E40(void) { *(u8*)(addr + 4) = 0; } sub_080A3198(0, 0); - gMain.state = 1; + gMain.state = GAMETASK_INIT; SoundReq(BGM_FILE_SELECT); SetFade(4, 8); } @@ -81,18 +81,18 @@ void sub_080A2E40(void) { void sub_080A2F8C(void) { if (gFadeControl.active == 0) { switch (gMain.substate) { - case 0: - gMain.substate = 1; + case GAMEMAIN_INITROOM: + gMain.substate = GAMEMAIN_CHANGEROOM; { // TODO write to 0x2000005 u32 addr = (0x80 << 0x12); *(u8*)(addr + 5) = 1; *(u8*)(addr + 6) = 1; } - gMain.state = 2; + gMain.state = GAMETASK_MAIN; SetFade(5, 8); break; - case 1: + case GAMEMAIN_CHANGEROOM: SetTask(TASK_GAME); break; } diff --git a/src/enemy/gyorgFemale.c b/src/enemy/gyorgFemale.c index 2b7911d3..ac1bcb00 100644 --- a/src/enemy/gyorgFemale.c +++ b/src/enemy/gyorgFemale.c @@ -10,7 +10,7 @@ extern u8 gEntCount; extern u8 gMapDataTopSpecial[]; -extern u16 gUnk_02019EE0[]; +extern u16 gMapDataBottomSpecial[]; extern void sub_080197D4(const void*); @@ -86,7 +86,7 @@ void GyorgFemale_Setup(GyorgFemaleEntity* this) { this->eyesVulnerable = 0; this->unk_79 = 0; this->childrenSpawnTimer = 0x3C; - MemClear(&gUnk_02019EE0, 0x8000); + MemClear(&gMapDataBottomSpecial, 0x8000); MemClear(&gMapDataTopSpecial, 0x8000); sub_0804660C(this, 0); sub_080464C0(this); @@ -215,7 +215,7 @@ void GyorgFemale_Action3(GyorgFemaleEntity* this) { #ifndef EU void sub_08046498(GyorgFemaleEntity* this) { - MemClear(&gUnk_02019EE0, 0x8000); + MemClear(&gMapDataBottomSpecial, 0x8000); MemClear(&gMapDataTopSpecial, 0x8000); sub_080464C0(this); } @@ -233,12 +233,12 @@ void sub_080464C0(GyorgFemaleEntity* this) { u8* dst; sub_080197D4(gUnk_080D1A74[super->animationState >> 6]); sub_08046518(); - for (i = 0x20, src = ((u8*)&gUnk_02019EE0), dst = ((u8*)&gUnk_02019EE0) + 0x3260; i != 0; i--) { + for (i = 0x20, src = ((u8*)&gMapDataBottomSpecial), dst = ((u8*)&gMapDataBottomSpecial) + 0x3260; i != 0; i--) { MemCopy(src, dst, 0x40); dst += 0x100; src += 0x40; } - MemClear(&gUnk_02019EE0, 0x800); + MemClear(&gMapDataBottomSpecial, 0x800); gUpdateVisibleTiles = 1; } @@ -271,7 +271,7 @@ void sub_080465C8(void) { s32 x, y; x = (gPlayerEntity.x.HALF.HI - gRoomControls.origin_x) >> 3; y = (gPlayerEntity.y.HALF.HI - gRoomControls.origin_y) >> 3; - if (gUnk_02019EE0[(y << 7) + x]) { + if (gMapDataBottomSpecial[(y << 7) + x]) { gPlayerState.field_0x14 = 1; } } diff --git a/src/enemy/gyorgMale.c b/src/enemy/gyorgMale.c index b2ba5b13..f9ca7d8c 100644 --- a/src/enemy/gyorgMale.c +++ b/src/enemy/gyorgMale.c @@ -1133,7 +1133,7 @@ void sub_08048004(GyorgMaleEntity* this) { if (b == 3) { s32 posX = ((gPlayerEntity.x.HALF.HI - gRoomControls.origin_x) >> 3); s32 posY = ((gPlayerEntity.y.HALF.HI - gRoomControls.origin_y) >> 3); - u16* tmp = (u16*)&gUnk_02019EE0; + u16* tmp = (u16*)&gMapDataBottomSpecial; if (tmp[(posY << 7) + posX]) { if (!(this->unk_7c & 2)) { this->unk_7c |= 0x80; diff --git a/src/enemy/octorokGolden.c b/src/enemy/octorokGolden.c index 8f72e7a7..9f38b9c7 100644 --- a/src/enemy/octorokGolden.c +++ b/src/enemy/octorokGolden.c @@ -112,7 +112,7 @@ void sub_08037E14(Entity* this) { s32 x, y; this->actionDelay = 0x8; dir = (GetFacingDirection(this, &gPlayerEntity) + 4) & 0x18; - layer = (u8*)GetLayerByIndex(this->collisionLayer)->_2004; + layer = (u8*)GetLayerByIndex(this->collisionLayer)->collisionData; ptr = gUnk_080CF498 + (dir >> 2); x = this->x.HALF.HI + *ptr; y = this->y.HALF.HI + *(ptr + 1); diff --git a/src/enemy/spinyBeetle.c b/src/enemy/spinyBeetle.c index e73445eb..5ed5c17d 100644 --- a/src/enemy/spinyBeetle.c +++ b/src/enemy/spinyBeetle.c @@ -27,7 +27,6 @@ extern void sub_08033D78(SpinyBeetleEntity*); extern u32 sub_08033DF0(SpinyBeetleEntity*); extern void SpinyBeetle_SetHitType(SpinyBeetleEntity*); extern void EnemyFunctionHandlerAfterCollision(Entity*, EntityActionArray); -extern void sub_0807B9B8(s32, s32, s32); extern u32 sub_0804A024(Entity*, u32, u32); void SpinyBeetle(Entity* this) { diff --git a/src/enterPortalSubtask.c b/src/enterPortalSubtask.c index 072c0e3f..e43094c8 100644 --- a/src/enterPortalSubtask.c +++ b/src/enterPortalSubtask.c @@ -6,6 +6,7 @@ #include "screen.h" #include "object.h" #include "functions.h" +#include "game.h" typedef struct { u8 filler[18]; @@ -19,7 +20,7 @@ extern struct_02018EB0 gUnk_02018EB0; u32 IsEnterPortal(void) { if (gArea.playShrinkSeq) { - gMain.substate = 4; + gMain.substate = GAMEMAIN_MINISHPORTAL; gArea.filler[8] = 0; gArea.filler[9] = 0; *(u16*)&gArea.filler[10] = 0; diff --git a/src/fileselect.c b/src/fileselect.c index ba0dc554..5545e3f7 100644 --- a/src/fileselect.c +++ b/src/fileselect.c @@ -15,6 +15,7 @@ #include "functions.h" #include "subtask.h" #include "item.h" +#include "game.h" // copy, erase, start #define NUM_FILE_OPERATIONS 3 @@ -30,7 +31,7 @@ typedef enum { STATE_START, } FileSelectState; -// todo: does this belong with gUnk_02019EE0? +// todo: does this belong with gMapDataBottomSpecial? typedef enum { SAVE_EMPTY = 0, SAVE_VALID = 1, @@ -132,7 +133,7 @@ void sub_080503A8(u32 gfxGroup) { } void SetFileSelectState(FileSelectState mode) { - gUnk_02032EC0.state = mode; + gUI.state = mode; MemClear(&gBG0Buffer, sizeof(gBG0Buffer)); MemClear(&gBG1Buffer, sizeof(gBG1Buffer)); } @@ -146,7 +147,7 @@ void LoadOptionsFromSave(u32 idx) { msg_speed = 1; brightness = 1; } else { - SaveFile* saveFile = &gUnk_02019EE0.saves[idx]; + SaveFile* saveFile = &gMapDataBottomSpecial.saves[idx]; msg_speed = saveFile->msg_speed; brightness = saveFile->brightness; } @@ -159,7 +160,7 @@ void LoadOptionsFromSave(u32 idx) { void SetActiveSave(u32 idx) { if (idx < NUM_SAVE_SLOTS) { gSaveHeader->saveFileId = idx; - MemCopy(&gUnk_02019EE0.saves[idx], &gSave, sizeof(gUnk_02019EE0.saves[idx])); + MemCopy(&gMapDataBottomSpecial.saves[idx], &gSave, sizeof(gMapDataBottomSpecial.saves[idx])); } LoadOptionsFromSave(idx); } @@ -167,8 +168,8 @@ void SetActiveSave(u32 idx) { void FileSelectTask(void) { FlushSprites(); sTaskHandlers[gMain.state](); - if (gUnk_02032EC0.lastState != gUnk_02032EC0.state) { - gUnk_02032EC0.lastState = gUnk_02032EC0.state; + if (gUI.lastState != gUI.state) { + gUI.lastState = gUI.state; gScreen.bg0.xOffset = 0; gScreen.bg0.yOffset = 0; gScreen.bg1.xOffset = 0; @@ -179,17 +180,17 @@ void FileSelectTask(void) { } HideButtonR(); - sFileScreenSubHandlers[gUnk_02032EC0.lastState](); + sFileScreenSubHandlers[gUI.lastState](); - gUnk_02019EE0.isTransitioning = FALSE; + gMapDataBottomSpecial.isTransitioning = FALSE; UpdateEntities(); sub_0805066C(); sub_0801C1D4(); DrawOAMCmd(); DrawEntities(); CopyOAM(); - if (gUnk_02019EE0.unk3 != gSaveHeader->language) { - gUnk_02019EE0.unk3 = gSaveHeader->language; + if (gMapDataBottomSpecial.unk3 != gSaveHeader->language) { + gMapDataBottomSpecial.unk3 = gSaveHeader->language; sub_080503A8(0x6); sub_080503A8(0xF); } @@ -207,11 +208,11 @@ static void HandleFileScreenEnter(void) { ResetPalettes(); ResetPaletteTable(0); MemClear(&gUnk_0200AF00, sizeof(gUnk_0200AF00)); - MemClear(&gUnk_02019EE0, sizeof(gUnk_02019EE0)); - gUnk_02019EE0.unk3 = 7; - gUnk_02019EE0.unk6 = gSaveHeader->language > LANGUAGE_EN ? 3 : 0; - MemClear(&gUnk_02032EC0, sizeof(gUnk_02032EC0)); - gUnk_02032EC0.lastState = 8; + MemClear(&gMapDataBottomSpecial, sizeof(gMapDataBottomSpecial)); + gMapDataBottomSpecial.unk3 = 7; + gMapDataBottomSpecial.unk6 = gSaveHeader->language > LANGUAGE_EN ? 3 : 0; + MemClear(&gUI, sizeof(gUI)); + gUI.lastState = 8; SetFileSelectState(STATE_NONE); InitDMA(); sub_08050624(0); @@ -231,7 +232,7 @@ static void HandleFileScreenEnter(void) { gScreen.controls.layerFXControl = BLDCNT_TGT1_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_EFFECT_BLEND; gScreen.controls.alphaBlend = BLDALPHA_BLEND(15, 10); gGFXSlots.unk0 = 1; - gMain.state = 1; + gMain.state = GAMETASK_INIT; SoundReq(BGM_FILE_SELECT); SetFade(4, 8); } @@ -246,7 +247,7 @@ static void HandleFileScreenExit(void) { } static void sub_08050624(u32 idx) { - SaveFile* saveFile = &gUnk_02019EE0.saves[idx]; + SaveFile* saveFile = &gMapDataBottomSpecial.saves[idx]; int status = ReadSaveFile(idx, saveFile); switch (status) { case SAVE_DELETED: @@ -256,7 +257,7 @@ static void sub_08050624(u32 idx) { sub_0805194C(idx); break; } - gUnk_02019EE0.saveStatus[idx] = status; + gMapDataBottomSpecial.saveStatus[idx] = status; } static void sub_0805066C(void) { @@ -264,20 +265,20 @@ static void sub_0805066C(void) { const u8* paletteOffset; loadNewPalette = FALSE; - if (--gUnk_02019EE0.unk1 == 0) { - gUnk_02019EE0.unk1 = 16; - gUnk_02019EE0.unk2 = (gUnk_02019EE0.unk2 + 1) % 15; + if (--gMapDataBottomSpecial.unk1 == 0) { + gMapDataBottomSpecial.unk1 = 16; + gMapDataBottomSpecial.unk2 = (gMapDataBottomSpecial.unk2 + 1) % 15; loadNewPalette = TRUE; } - if (gUnk_02019EE0.unk2 == 0) { - gUnk_02019EE0.unk2 = 1; - gUnk_02019EE0.unk1 = (Random() & 0x7) * 16 + 8; + if (gMapDataBottomSpecial.unk2 == 0) { + gMapDataBottomSpecial.unk2 = 1; + gMapDataBottomSpecial.unk1 = (Random() & 0x7) * 16 + 8; loadNewPalette = TRUE; } if (loadNewPalette) { - paletteOffset = &gGlobalGfxAndPalettes[gUnk_080FC8DE[gUnk_02019EE0.unk2]]; + paletteOffset = &gGlobalGfxAndPalettes[gUnk_080FC8DE[gMapDataBottomSpecial.unk2]]; #ifdef EU LoadPalettes(&paletteOffset[0x11A60], 11, 1); LoadPalettes(&paletteOffset[0x11B60], 12, 1); @@ -308,7 +309,7 @@ void sub_0805070C(void) { for (i = 0; i < NUM_SAVE_SLOTS; i++) { var0->unk6 = 0; MemClear(var0->unk8, 0x200); - name = &gUnk_02019EE0.saves[i].name[0]; + name = &gMapDataBottomSpecial.saves[i].name[0]; for (j = 0; j < FILENAME_LENGTH; j++) { sub_0805F7DC(name[j], var0); } @@ -356,14 +357,14 @@ static void ShowButtonR(void) { static void HandleFileSelect(void) { sFileSelectDefaultHandlers[gChooseFileState.state](); - sub_08050A64(gUnk_02019EE0.unk6); + sub_08050A64(gMapDataBottomSpecial.unk6); } void sub_08050848(void) { sub_080503A8(0x7); sub_0805070C(); - gUnk_02019EE0.unk7 = 0; - sub_08050AFC(gUnk_02019EE0.unk6); + gMapDataBottomSpecial.unk7 = 0; + sub_08050AFC(gMapDataBottomSpecial.unk6); SetMenuType(1); } @@ -374,17 +375,17 @@ void sub_0805086C(void) { // transitioning away from submenu void sub_08050888(void) { if (!gFadeControl.active) { - switch (gUnk_02019EE0.saveStatus[gUnk_02019EE0.unk7]) { + switch (gMapDataBottomSpecial.saveStatus[gMapDataBottomSpecial.unk7]) { case SAVE_EMPTY: - sub_0805194C(gUnk_02019EE0.unk7); + sub_0805194C(gMapDataBottomSpecial.unk7); gChooseFileState.subState = 2; break; case SAVE_VALID: gChooseFileState.subState = 2; break; default: - sub_0805194C(gUnk_02019EE0.unk7); - CreateDialogBox(0, gUnk_02019EE0.unk7 + 1); + sub_0805194C(gMapDataBottomSpecial.unk7); + CreateDialogBox(0, gMapDataBottomSpecial.unk7 + 1); gChooseFileState.timer = 30; gChooseFileState.subState = 1; break; @@ -404,7 +405,7 @@ void sub_080508E4(void) { void sub_08050910(void) { sub_08050384(); - if (++gUnk_02019EE0.unk7 > 2) { + if (++gMapDataBottomSpecial.unk7 > 2) { SetMenuType(2); } else { gChooseFileState.subState = 0; @@ -417,18 +418,18 @@ void sub_08050940(void) { int num_rows; FileSelectState mode; - if (gUnk_02019EE0.isTransitioning) { + if (gMapDataBottomSpecial.isTransitioning) { return; } - row_idx = gUnk_02019EE0.unk6; + row_idx = gMapDataBottomSpecial.unk6; keys = gInput.newKeys; - if ((gInput.heldKeys & L_BUTTON) && gUnk_02019EE0.saveStatus[row_idx] == SAVE_VALID) { + if ((gInput.heldKeys & L_BUTTON) && gMapDataBottomSpecial.saveStatus[row_idx] == SAVE_VALID) { keys &= ~(DPAD_UP | DPAD_DOWN); } num_rows = gSaveHeader->language > 1 ? NUM_SAVE_SLOTS + 1 : NUM_SAVE_SLOTS; - mode = gUnk_02032EC0.lastState; + mode = gUI.lastState; switch (keys) { case DPAD_UP: if (row_idx > 0) @@ -439,7 +440,7 @@ void sub_08050940(void) { row_idx++; break; case R_BUTTON: - if (gUnk_02019EE0.saveStatus[row_idx] == SAVE_VALID) + if (gMapDataBottomSpecial.saveStatus[row_idx] == SAVE_VALID) mode = STATE_OPTIONS; break; case A_BUTTON: @@ -448,7 +449,7 @@ void sub_08050940(void) { if (row_idx == 3) mode = STATE_CHOOSE_LANG; else - switch (gUnk_02019EE0.saveStatus[row_idx]) { + switch (gMapDataBottomSpecial.saveStatus[row_idx]) { case SAVE_EMPTY: mode = STATE_NEW; break; @@ -459,25 +460,25 @@ void sub_08050940(void) { break; } - if (gUnk_02032EC0.lastState != mode) { + if (gUI.lastState != mode) { SetFileSelectState(mode); SoundReq(SFX_TEXTBOX_SELECT); } row_idx = (row_idx + num_rows) % num_rows; - if (gUnk_02019EE0.unk6 != row_idx) { - gUnk_02019EE0.unk6 = row_idx; + if (gMapDataBottomSpecial.unk6 != row_idx) { + gMapDataBottomSpecial.unk6 = row_idx; sub_08050AFC(row_idx); SoundReq(SFX_TEXTBOX_CHOICE); } - if (gUnk_02019EE0.saveStatus[gUnk_02019EE0.unk6] == SAVE_VALID) { + if (gMapDataBottomSpecial.saveStatus[gMapDataBottomSpecial.unk6] == SAVE_VALID) { ShowButtonR(); } } void sub_08050A64(u32 idx) { - if (gUnk_02019EE0.saveStatus[idx] != SAVE_VALID) { + if (gMapDataBottomSpecial.saveStatus[idx] != SAVE_VALID) { return; } @@ -529,7 +530,7 @@ void sub_08050B3C(u16*); void sub_08050AFC(u32 idx) { SetActiveSave(idx); MemClear(&gBG1Buffer, sizeof(gBG1Buffer)); - if (gUnk_02019EE0.saveStatus[idx] == SAVE_VALID) { + if (gMapDataBottomSpecial.saveStatus[idx] == SAVE_VALID) { sub_08050B3C(&gBG1Buffer[0x14E]); } gScreen.bg1.updated = 1; @@ -614,13 +615,13 @@ END_NONMATCH void HandleFileView(void) { gUnk_080FC93C[gMenu.menuType](); - sub_08050A64(gUnk_02019EE0.unk6); + sub_08050A64(gMapDataBottomSpecial.unk6); } void sub_08050C54(void) { s32 column_idx; - if (gUnk_02019EE0.isTransitioning) + if (gMapDataBottomSpecial.isTransitioning) return; column_idx = gMenu.column_idx; @@ -693,7 +694,7 @@ void sub_08050DB8(void) { void sub_08050DE4(void) { s32 row_idx; - if (gUnk_02019EE0.isTransitioning) + if (gMapDataBottomSpecial.isTransitioning) return; row_idx = gSaveHeader->language; @@ -747,9 +748,9 @@ void HandleFileOptions(void) { void sub_08050EB8(void) { SaveFile* save; sub_080503A8(0xe); - save = &gUnk_02019EE0.saves[gUnk_02019EE0.unk6]; - gUnk_02019EE0.unk4 = save->msg_speed; - gUnk_02019EE0.unk5 = save->brightness; + save = &gMapDataBottomSpecial.saves[gMapDataBottomSpecial.unk6]; + gMapDataBottomSpecial.unk4 = save->msg_speed; + gMapDataBottomSpecial.unk5 = save->brightness; gMenu.column_idx = 0; gMenu.transitionTimer = 0xff; SetMenuType(1); @@ -761,12 +762,12 @@ NONMATCH("asm/non_matching/fileScreen/sub_08050EF4.inc", void sub_08050EF4(void) char column_idx; int mode; - if (gUnk_02019EE0.isTransitioning) + if (gMapDataBottomSpecial.isTransitioning) return; - p_option = &gUnk_02019EE0.saves[gUnk_02019EE0.unk6].brightness; + p_option = &gMapDataBottomSpecial.saves[gMapDataBottomSpecial.unk6].brightness; if (gMenu.column_idx == 0) { - p_option = &gUnk_02019EE0.saves[gUnk_02019EE0.unk6].msg_speed; + p_option = &gMapDataBottomSpecial.saves[gMapDataBottomSpecial.unk6].msg_speed; } mode = 0; @@ -792,7 +793,8 @@ NONMATCH("asm/non_matching/fileScreen/sub_08050EF4.inc", void sub_08050EF4(void) case A_BUTTON: case START_BUTTON: mode = 2; - if (*(u16*)&gUnk_02019EE0.unk4 != *(u16*)&gUnk_02019EE0.saves[gUnk_02019EE0.unk6].msg_speed) + if (*(u16*)&gMapDataBottomSpecial.unk4 != + *(u16*)&gMapDataBottomSpecial.saves[gMapDataBottomSpecial.unk6].msg_speed) mode = 3; break; case B_BUTTON: @@ -802,11 +804,11 @@ NONMATCH("asm/non_matching/fileScreen/sub_08050EF4.inc", void sub_08050EF4(void) switch (mode) { case 3: - gUnk_02019EE0.saves[gUnk_02019EE0.unk6].msg_speed = gUnk_02019EE0.unk4; - gUnk_02019EE0.saves[gUnk_02019EE0.unk6].brightness = gUnk_02019EE0.unk5; + gMapDataBottomSpecial.saves[gMapDataBottomSpecial.unk6].msg_speed = gMapDataBottomSpecial.unk4; + gMapDataBottomSpecial.saves[gMapDataBottomSpecial.unk6].brightness = gMapDataBottomSpecial.unk5; SoundReq(SFX_MENU_CANCEL); SetMenuType(mode); - SetActiveSave(gUnk_02019EE0.unk6); + SetActiveSave(gMapDataBottomSpecial.unk6); break; case 2: CreateDialogBox(8, 0); @@ -814,7 +816,7 @@ NONMATCH("asm/non_matching/fileScreen/sub_08050EF4.inc", void sub_08050EF4(void) default: case 1: SetMenuType(mode); - SetActiveSave(gUnk_02019EE0.unk6); + SetActiveSave(gMapDataBottomSpecial.unk6); break; case 0: if (gMenu.column_idx != column_idx) { @@ -822,7 +824,7 @@ NONMATCH("asm/non_matching/fileScreen/sub_08050EF4.inc", void sub_08050EF4(void) SoundReq(SFX_TEXTBOX_CHOICE); } else if (option != *p_option) { *p_option = option; - LoadOptionsFromSave(gUnk_02019EE0.unk6); + LoadOptionsFromSave(gMapDataBottomSpecial.unk6); SoundReq(SFX_TEXTBOX_CHOICE); } break; @@ -834,7 +836,7 @@ void sub_08050FFC(void) { switch (HandleSave(0)) { case SAVE_ERROR: gMenu.transitionTimer = 0x1e; - sub_0805194C(gUnk_02019EE0.unk6); + sub_0805194C(gMapDataBottomSpecial.unk6); CreateDialogBox(9, 0); case SAVE_OK: SetMenuType(3); @@ -897,13 +899,13 @@ void sub_080513A8(void) { void sub_080513C0(void) { switch (HandleSave(0)) { case 1: - gUnk_02019EE0.saveStatus[gUnk_02019EE0.unk6] = 1; + gMapDataBottomSpecial.saveStatus[gMapDataBottomSpecial.unk6] = 1; SetMenuType(3); break; case 0: break; case -1: - sub_0805194C(gUnk_02019EE0.unk6); + sub_0805194C(gMapDataBottomSpecial.unk6); CreateDialogBox(6, 0); gMenu.transitionTimer = 0x1e; gMenu.overlayType = 2; @@ -1030,13 +1032,14 @@ u32 sub_080514BC(u32 a1) { void sub_08051574(u32 sfx) { SoundReq(sfx); - MemCopy(&gSave, &gUnk_02019EE0.saves[gUnk_02019EE0.unk6], sizeof(gUnk_02019EE0.saves[gUnk_02019EE0.unk6])); + MemCopy(&gSave, &gMapDataBottomSpecial.saves[gMapDataBottomSpecial.unk6], + sizeof(gMapDataBottomSpecial.saves[gMapDataBottomSpecial.unk6])); sub_0805070C(); } void HandleFileDelete(void) { gUnk_080FC9BC[gMenu.menuType](); - sub_08050A64(gUnk_02019EE0.unk6); + sub_08050A64(gMapDataBottomSpecial.unk6); } void sub_080515c8(void) { @@ -1046,7 +1049,7 @@ void sub_080515c8(void) { void sub_080515D4(void) { u32 column_idx; - if (gUnk_02019EE0.isTransitioning) + if (gMapDataBottomSpecial.isTransitioning) return; gMenu.transitionTimer = 4; @@ -1082,8 +1085,8 @@ void sub_080515D4(void) { void sub_080516E0(void) { if (HandleSave(1)) { - sub_0805194C(gUnk_02019EE0.unk6); - sub_08050AFC(gUnk_02019EE0.unk6); + sub_0805194C(gMapDataBottomSpecial.unk6); + sub_08050AFC(gMapDataBottomSpecial.unk6); gMenu.transitionTimer = 2; SetFileSelectState(0); } @@ -1091,7 +1094,7 @@ void sub_080516E0(void) { void HandleFileCopy(void) { gUnk_080FC9C8[gMenu.menuType](); - sub_08050A64(gUnk_02019EE0.unk6); + sub_08050A64(gMapDataBottomSpecial.unk6); } // regalloc @@ -1100,11 +1103,11 @@ NONMATCH("asm/non_matching/fileScreen/sub_08051738.inc", void sub_08051738(void) u32 i; s32 uVar3; - gUnk_02019EE0.unk7 = 4; + gMapDataBottomSpecial.unk7 = 4; uVar3 = 0; for (i = 0; i < 3; i++) { - if (gUnk_02019EE0.saveStatus[i] == 1) { - temp = gUnk_02019EE0.unk6 ^ i; + if (gMapDataBottomSpecial.saveStatus[i] == 1) { + temp = gMapDataBottomSpecial.unk6 ^ i; uVar3 = !!temp & 4; } else { uVar3++; @@ -1126,14 +1129,14 @@ NONMATCH("asm/non_matching/fileScreen/sub_08051738.inc", void sub_08051738(void) END_NONMATCH s32 sub_080517B4(s32 a1) { - u32 i = gUnk_02019EE0.unk7; + u32 i = gMapDataBottomSpecial.unk7; if (a1 != 0) { for (i = i + a1; i < 5; i += a1) { if (gGenericMenu.unk10.a[i] != 0 && gGenericMenu.unk10.a[i] != 4) return i; } - i = gUnk_02019EE0.unk7; + i = gMapDataBottomSpecial.unk7; } return i; } @@ -1142,7 +1145,7 @@ void sub_080517EC(void) { u32 temp; s32 delta; - if (gUnk_02019EE0.isTransitioning) + if (gMapDataBottomSpecial.isTransitioning) return; delta = 0; @@ -1155,7 +1158,7 @@ void sub_080517EC(void) { break; case A_BUTTON: case START_BUTTON: - if (gUnk_02019EE0.unk7 < 3) { + if (gMapDataBottomSpecial.unk7 < 3) { CreateDialogBox(2, 0); SetMenuType(2); SoundReq(SFX_TEXTBOX_SELECT); @@ -1163,30 +1166,31 @@ void sub_080517EC(void) { } // fallthrough case B_BUTTON: - gUnk_02019EE0.unk7 = 4; + gMapDataBottomSpecial.unk7 = 4; SoundReq(SFX_MENU_CANCEL); SetFileSelectState(0); break; } temp = sub_080517B4(delta); - if (temp != gUnk_02019EE0.unk7) { - gUnk_02019EE0.unk7 = temp; + if (temp != gMapDataBottomSpecial.unk7) { + gMapDataBottomSpecial.unk7 = temp; SoundReq(SFX_TEXTBOX_CHOICE); } } void sub_08051874(void) { s32 temp; - gSaveHeader->saveFileId = gUnk_02019EE0.unk7; + gSaveHeader->saveFileId = gMapDataBottomSpecial.unk7; temp = HandleSave(0); - gUnk_02019EE0.saveStatus[gUnk_02019EE0.unk7] = temp; + gMapDataBottomSpecial.saveStatus[gMapDataBottomSpecial.unk7] = temp; switch (temp) { case 1: - MemCopy(&gSave, &gUnk_02019EE0.saves[gUnk_02019EE0.unk7], sizeof(gUnk_02019EE0.saves[gUnk_02019EE0.unk7])); + MemCopy(&gSave, &gMapDataBottomSpecial.saves[gMapDataBottomSpecial.unk7], + sizeof(gMapDataBottomSpecial.saves[gMapDataBottomSpecial.unk7])); SetFileSelectState(0); break; case -1: - sub_0805194C(gUnk_02019EE0.unk7); + sub_0805194C(gMapDataBottomSpecial.unk7); CreateDialogBox(3, 0); gMenu.transitionTimer = 0x1e; SetMenuType(3); @@ -1212,7 +1216,7 @@ void HandleFileStart(void) { gMenu.menuType = 1; gSaveHeader->msg_speed = gSave.msg_speed; gSaveHeader->brightness = gSave.brightness; - gMain.state = 2; + gMain.state = GAMETASK_MAIN; SetFade(5, 8); } } @@ -1220,8 +1224,8 @@ void HandleFileStart(void) { void sub_0805194C(u32 save_idx) { SaveFile* save; - gUnk_02019EE0.saveStatus[save_idx] = 0; - save = &gUnk_02019EE0.saves[save_idx]; + gMapDataBottomSpecial.saveStatus[save_idx] = 0; + save = &gMapDataBottomSpecial.saves[save_idx]; MemClear(save, sizeof(*save)); save->msg_speed = 1; save->brightness = 1; @@ -123,7 +123,7 @@ extern void sub_08054524(void); extern void sub_080186D4(void); extern void sub_0806F364(void); extern void sub_08052FF4(u32 area, u32 room); -extern void sub_0807C860(void); +extern void CloneMapData(void); extern void sub_0807C740(void); extern void SetBGDefaults(void); extern void LoadItemGfx(void); @@ -141,8 +141,8 @@ static void sub_08052C3C(void); static void sub_0805340C(void); static void sub_08051D98(void); static void sub_08051DCC(void); -static u32 CheckGameOver(void); -static u32 CheckRoomExit(void); +static bool32 CheckGameOver(void); +static bool32 CheckRoomExit(void); static void UpdatePlayerRoomStatus(void); static void sub_0805329C(void); static void InitializePlayer(void); @@ -306,14 +306,14 @@ static void GameTask_Transition(void) { ResetTmpFlags(); gMain.state = GAMETASK_INIT; - gMain.substate = 0; + gMain.substate = GAMEMAIN_INITROOM; } static void GameTask_Init(void) { DispReset(1); gFadeControl.mask = 0xffffffff; MemClear(&gOAMControls, 0xB74); - MemClear(&gUnk_02032EC0, sizeof(gUnk_02032EC0)); + MemClear(&gUI, sizeof(gUI)); EraseAllEntities(); SetBGDefaults(); ClearTilemaps(); @@ -495,7 +495,7 @@ static void GameMain_ChangeArea(void) { if (!gFadeControl.active) { DispReset(1); gMain.state = GAMETASK_INIT; - gMain.substate = 0; + gMain.substate = GAMEMAIN_INITROOM; gRoomTransition.transitioningOut = 1; } } @@ -594,7 +594,7 @@ void Subtask_AuxCutscene(void) { } static void AuxCutscene_Init(void) { - const CutsceneData* p = &sCutsceneData[gUnk_02032EC0.field_0x3]; + const CutsceneData* p = &sCutsceneData[gUI.field_0x3]; gRoomControls.area = p->area; gRoomControls.room = p->room; LoadGfxGroups(); @@ -644,18 +644,18 @@ static const CutsceneData sCutsceneData[] = { }; static void AuxCutscene_Exit(void) { - u32 flag = sCutsceneData[gUnk_02032EC0.field_0x3]._3; + u32 flag = sCutsceneData[gUI.field_0x3]._3; if (flag & 0xF0) { MenuFadeIn(2, flag >> 4); } else { - gUnk_02032EC0.nextToLoad = 3; + gUI.nextToLoad = 3; SetFadeInverted(0x10); MessageInitialize(); } } void sub_08051F78(void) { - u32 idx = gUnk_02032EC0.field_0x3; + u32 idx = gUI.field_0x3; const CutsceneData* p = &sCutsceneData[idx]; sub_08051F9C(p->area, p->room, p->x, p->y); } @@ -704,7 +704,7 @@ void GameOverTask(void) { }; sStates[gMain.state](); - if (gMain.state != 0) { + if (gMain.state != GAMETASK_TRANSITION) { FlushSprites(); DrawGameOverText(); CopyOAM(); @@ -727,7 +727,7 @@ static void GameOver_Init(void) { SoundReq(BGM_GAMEOVER); SetFadeInverted(4); gFadeControl.mask = 0xFFFF0001; - switch_state(1); + switch_state(GAMETASK_INIT); } static void GameOver_FadeIn(void) { @@ -740,7 +740,7 @@ static void GameOver_FadeIn(void) { } else { gMenu.transitionTimer--; if (gMenu.transitionTimer == 0) { - switch_state(2); + switch_state(GAMETASK_MAIN); #if defined(DEMO_USA) || defined(DEMO_JP) SoundReq(SONG_VOL_FADE_OUT); SetFade(7, 4); @@ -834,7 +834,7 @@ static void GameOver_TextMove(void) { default: gScreen.lcd.displayControl &= ~DISPCNT_BG1_ON; sub_08050384(); - switch_state(3); + switch_state(GAMETASK_EXIT); return; } } @@ -1175,16 +1175,16 @@ static void sub_0805289C(void) { } #endif -static u32 CheckGameOver(void) { +static bool32 CheckGameOver(void) { if (gRoomTransition.field_0x4[1]) { InitFade(); - gMain.state = 3; - gMain.substate = 0; + gMain.state = GAMETASK_EXIT; + gMain.substate = GAMEMAIN_INITROOM; SetFade(5, 8); SoundReq(SONG_STOP_BGM); - return 1; + return TRUE; } - return 0; + return FALSE; } void RoomExitCallback(void) { @@ -1192,11 +1192,11 @@ void RoomExitCallback(void) { gArea.onExit(gArea.transitionManager); } -static u32 CheckRoomExit(void) { +static bool32 CheckRoomExit(void) { if (gRoomTransition.transitioningOut && gSave.stats.health != 0 && gPlayerState.framestate != PL_STATE_DIE) { if (StairsAreValid()) { gRoomTransition.transitioningOut = 0; - return 0; + return FALSE; } switch (gRoomTransition.type) { @@ -1227,11 +1227,11 @@ static u32 CheckRoomExit(void) { break; } RoomExitCallback(); - gMain.substate = 3; + gMain.substate = GAMEMAIN_CHANGEAREA; *(&gMain.pauseInterval + 1) = 1; - return 1; + return TRUE; } - return 0; + return FALSE; } static u32 StairsAreValid(void) { @@ -1410,7 +1410,7 @@ u32 GetFlagBankOffset(u32 idx) { } void RegisterTransitionManager(void* mgr, void (*onEnter)(), void (*onExit)()) { - if (gMain.substate != 7) { + if (gMain.substate != GAMEMAIN_SUBTASK) { gArea.transitionManager = mgr; gArea.onEnter = onEnter; gArea.onExit = onExit; @@ -1519,7 +1519,7 @@ static void UpdateFakeScroll(void) { void LoadAuxiliaryRoom(u32 area, u32 room) { sub_08052FF4(area, room); gRoomControls.camera_target = NULL; - sub_0807C860(); + CloneMapData(); sub_0807C740(); } @@ -1806,7 +1806,7 @@ void CutsceneMain_Init(void) { void sub_080535AC(void) { gMenu.overlayType = 1; gMenu.transitionTimer = 0x78; - gUnk_02032EC0.field_0x6 = 1; + gUI.field_0x6 = 1; gUpdateVisibleTiles = 1; gScreen.lcd.displayControl &= 0xfeff; LoadRoomEntityList((EntityData*)gUnk_080FCB94); @@ -1831,7 +1831,7 @@ void sub_08053618(void) { } void sub_08053634(void) { - gUnk_02032EC0.nextToLoad = 3; + gUI.nextToLoad = 3; MessageInitialize(); } @@ -1945,7 +1945,7 @@ void sub_08053A5C(void) { void sub_08053A90(void) { if (gFadeControl.active == 0) { - gUnk_02032EC0.nextToLoad = 3; + gUI.nextToLoad = 3; SetBGDefaults(); } } diff --git a/src/kinstone.c b/src/kinstone.c index 04d39a04..f9f4b5f8 100644 --- a/src/kinstone.c +++ b/src/kinstone.c @@ -1,6 +1,5 @@ #include "global.h" - -extern u32 SetTileType(u32 tileID, u32 tilePos, u32 layerID); +#include "room.h" void CreateMinishEntrance(u32 tilePos) { u32 x, y; @@ -6,6 +6,7 @@ #include "save.h" #include "message.h" #include "interrupts.h" +#include "game.h" extern u32 gRand; @@ -121,8 +122,8 @@ static bool32 SoftResetKeysPressed(void) { void SetTask(u32 task) { gMain.task = task; - gMain.state = 0; - gMain.substate = 0; + gMain.state = GAMETASK_TRANSITION; + gMain.substate = GAMEMAIN_INITROOM; } void DisableInterruptsAndDMA(void) { diff --git a/src/manager/manager22.c b/src/manager/manager22.c index a8bb0794..3bcefffb 100644 --- a/src/manager/manager22.c +++ b/src/manager/manager22.c @@ -8,6 +8,7 @@ #include "coord.h" #include "functions.h" #include "common.h" +#include "game.h" typedef struct { Manager manager; @@ -40,7 +41,7 @@ void Manager22_Main(Manager22* this) { sub_0801E120(); sub_0801E154(this->manager.unk_0e); } - if (gMain.substate == 2) { + if (gMain.substate == GAMEMAIN_UPDATE) { gScreen.lcd.displayControl |= DISPCNT_BG3_ON; sub_0805BA78(); sub_0805BAD4(); diff --git a/src/manager/manager29.c b/src/manager/manager29.c index fef0953c..010fb3ad 100644 --- a/src/manager/manager29.c +++ b/src/manager/manager29.c @@ -38,15 +38,15 @@ void Manager29_Main(Manager29* this) { } void sub_0805CBD0(Manager29* this) { - LayerStruct* puVar2; + LayerStruct* layer; this->manager.action = 1; this->unk_38 = (this->unk_38 >> 4 & 0x3fU) | (((this->unk_3a << 0x10) >> 0x14 & 0x3fU) << 6); this->unk_3a = (this->unk_3c >> 4 & 0x3f) | (((this->unk_36 + this->unk_37 * 0x100) >> 4 & 0x3fU) << 6); this->unk_3c = GetTileType(this->unk_38, this->unk_34); - puVar2 = GetLayerByIndex(this->unk_34); - this->unk_28 = puVar2->_5004; - this->unk_2c = &puVar2->_4[(s16)this->unk_3a]; + layer = GetLayerByIndex(this->unk_34); + this->unk_28 = (u16*)layer->metatileTypes; + this->unk_2c = &layer->mapData[(s16)this->unk_3a]; } void sub_0805CC3C(Manager29* this) { diff --git a/src/menu/figurine_menu.c b/src/menu/figurine_menu.c index 4d9c30ce..c545c316 100644 --- a/src/menu/figurine_menu.c +++ b/src/menu/figurine_menu.c @@ -78,7 +78,7 @@ void Subtask_FigurineMenu(void) { }; #if !(defined(DEMO_USA) || defined(DEMO_JP)) FlushSprites(); - if (gUnk_02032EC0.field_0x3 == 0xff) { + if (gUI.field_0x3 == 0xff) { figurineMenu0_Types[gMenu.menuType](); } else { figurineMenu1_Types[gMenu.menuType](); @@ -113,7 +113,7 @@ void FigurineMenu_080A4608(void) { { int r0, r1, r2; - r1 = gUnk_02032EC0.field_0x3; + r1 = gUI.field_0x3; r0 = gSave.unk6; r2 = 0x88; if (r0 == 0) { diff --git a/src/menu/kinstone_menu.c b/src/menu/kinstone_menu.c index 4089eaca..9870e9fe 100644 --- a/src/menu/kinstone_menu.c +++ b/src/menu/kinstone_menu.c @@ -345,7 +345,7 @@ typedef struct { u8 unk_01; u8 unk_02[2]; } struct_02019EE0; -extern struct_02019EE0 gUnk_02019EE0[16]; +extern struct_02019EE0 gMapDataBottomSpecial[16]; void KinstoneMenu_080A4054(void) { u32 uVar2; @@ -353,8 +353,8 @@ void KinstoneMenu_080A4054(void) { KinstoneMenu_080A414C(); KinstoneMenu_080A4080(); for (uVar2 = 0; uVar2 < 0x10; uVar2++) { - if (gUnk_02019EE0[uVar2].unk_01 != 0) { - gUnk_02019EE0[uVar2].unk_01 -= 1; + if (gMapDataBottomSpecial[uVar2].unk_01 != 0) { + gMapDataBottomSpecial[uVar2].unk_01 -= 1; } } } @@ -505,8 +505,8 @@ void sub_080A42E0(u32 param_1, u32 param_2) { iVar4 = sub_080A43A8(uVar1); if ((param_2 != 0) && (param_2 != 0xff)) { int index = iVar4 * 4; - if (param_2 != gUnk_02019EE0[iVar4].unk_02[0]) { - gUnk_02019EE0[iVar4].unk_02[0] = param_2; + if (param_2 != gMapDataBottomSpecial[iVar4].unk_02[0]) { + gMapDataBottomSpecial[iVar4].unk_02[0] = param_2; sub_0801C2F0(iVar4 * 2 + 0x2e0, param_2); } gOamCmd._8 = (s16)(iVar4 * 2) + 0x3ae0; @@ -535,7 +535,7 @@ void sub_080A42E0(u32 param_1, u32 param_2) { } void sub_080A4398(void) { - MemClear(&gUnk_02019EE0, sizeof(gUnk_02019EE0)); + MemClear(&gMapDataBottomSpecial, sizeof(gMapDataBottomSpecial)); } u32 sub_080A43A8(u32 param_1) { @@ -547,20 +547,20 @@ u32 sub_080A43A8(u32 param_1) { sub_080A4418(param_1, uVar1 * 0x10 + 0x300); } { int index = uVar1 * 4; } - gUnk_02019EE0[uVar1].unk_00[0] = param_1; - gUnk_02019EE0[uVar1].unk_01 = 2; + gMapDataBottomSpecial[uVar1].unk_00[0] = param_1; + gMapDataBottomSpecial[uVar1].unk_01 = 2; return uVar1; } u32 sub_080A43DC(u32 unk1) { u32 i; for (i = 0; i < 16; i++) { - if (unk1 == gUnk_02019EE0[i].unk_00[0]) { + if (unk1 == gMapDataBottomSpecial[i].unk_00[0]) { return i; } } for (i = 0; i < 16; i++) { - if (gUnk_02019EE0[i].unk_01 == 0) { + if (gMapDataBottomSpecial[i].unk_01 == 0) { return i + 0x10; } } diff --git a/src/movement.c b/src/movement.c index afe81525..83b0ddc4 100644 --- a/src/movement.c +++ b/src/movement.c @@ -1654,7 +1654,7 @@ ASM_FUNC("asm/non_matching/movement/CalculateEntityTileCollisions.inc", u32 hitboxUnkX; u32 hitboxUnkY; - layer = GetLayerByIndex(this->collisionLayer)->_2004; + layer = GetLayerByIndex(this->collisionLayer)->collisionData; xMin = this->x.HALF.HI + this->hitbox->offset_x; yMin = this->y.HALF.HI + this->hitbox->offset_y; hitboxUnkX = this->hitbox->unk2[0]; diff --git a/src/object/button.c b/src/object/button.c index fd2f968d..fcfad6ac 100644 --- a/src/object/button.c +++ b/src/object/button.c @@ -190,7 +190,7 @@ u32 sub_08081F00(u32*, u32*); extern u16 gMapDataTopSpecial[0x2000]; -extern u16 gUnk_02019EE0[]; +extern u16 gMapDataBottomSpecial[]; NONMATCH("asm/non_matching/button/sub_08081E6C.inc", void sub_08081E6C(Entity* this)) { u32 r4; u16 *tmp, *r1; @@ -205,7 +205,7 @@ NONMATCH("asm/non_matching/button/sub_08081E6C.inc", void sub_08081E6C(Entity* t tmp = r1 + 0x3802; r1 += 0x3002 + r4; tmp = tmp + (*r1 << 2); - tmp2 = (r5 == 2 ? gMapDataTopSpecial : gUnk_02019EE0); + tmp2 = (r5 == 2 ? gMapDataTopSpecial : gMapDataBottomSpecial); tmp2 += (((0x3f & r6) << 1) + ((0xfc0 & r6) << 2)) << 1; if (sub_08081F00((u32*)tmp2, (u32*)tmp)) return; diff --git a/src/object/fileScreenObjects.c b/src/object/fileScreenObjects.c index f68a531d..7d2a295f 100644 --- a/src/object/fileScreenObjects.c +++ b/src/object/fileScreenObjects.c @@ -74,8 +74,8 @@ void sub_0808E818(Entity* this) { return; } - if (this->type2 != gUnk_02019EE0.unk6) { - this->type2 = gUnk_02019EE0.unk6; + if (this->type2 != gMapDataBottomSpecial.unk6) { + this->type2 = gMapDataBottomSpecial.unk6; this->field_0x68.HWORD = CheckGlobalFlag(EZERO_1ST) == 0 ? 0x400 : 0x100; this->field_0x70.BYTES.byte0 = 4; this->animationState = 2; @@ -83,7 +83,7 @@ void sub_0808E818(Entity* this) { LoadPalettes(&gGlobalGfxAndPalettes[var1], 31, 1); } - if (gUnk_02032EC0.lastState == 0) { + if (gUI.lastState == 0) { if (gInput.heldKeys & L_BUTTON) { switch (gInput.newKeys) { case DPAD_UP: @@ -118,13 +118,13 @@ void sub_0808E818(Entity* this) { static bool32 sub_0808E950(void) { bool32 result = FALSE; - switch (gUnk_02032EC0.lastState) { + switch (gUI.lastState) { case 0: case 4: case 5: case 6: case 7: - result = gUnk_02019EE0.saveStatus[gUnk_02019EE0.unk6] == 1; + result = gMapDataBottomSpecial.saveStatus[gMapDataBottomSpecial.unk6] == 1; break; } return result; @@ -182,11 +182,11 @@ void sub_0808EA28(Entity* this) { } } - if (this->type == gUnk_02019EE0.unk6) { + if (this->type == gMapDataBottomSpecial.unk6) { var0 = 12; var1 = 1; } else { - if (gUnk_02032EC0.lastState == 5 && this->type == gUnk_02019EE0.unk7) { + if (gUI.lastState == 5 && this->type == gMapDataBottomSpecial.unk7) { var0 = 13; var1 = 2; } else { @@ -198,14 +198,14 @@ void sub_0808EA28(Entity* this) { this->palette.b.b0 = var0; this->spriteRendering.b3 = var1; sub_0808EABC(this); - gUnk_02019EE0.isTransitioning |= sub_0808EF6C(this); + gMapDataBottomSpecial.isTransitioning |= sub_0808EF6C(this); } void sub_0808EABC(Entity* this) { int var0 = -72; int var1 = this->type * 32 + 40; - int var2 = gUnk_02019EE0.unk6 == this->type; - switch (gUnk_02032EC0.lastState) { + int var2 = gMapDataBottomSpecial.unk6 == this->type; + switch (gUI.lastState) { case 0: var0 = 24; break; @@ -251,7 +251,7 @@ void sub_0808EABC(Entity* this) { } void sub_0808EB74(Entity* this) { - Entity* entity = sub_0808EC80(gUnk_02019EE0.unk6); + Entity* entity = sub_0808EC80(gMapDataBottomSpecial.unk6); if (entity) { this->x.WORD = entity->x.WORD; this->y.WORD = entity->y.WORD; @@ -268,7 +268,7 @@ void sub_0808EBB8(Entity* this) { u32 x, y; Entity* entity; - switch (gUnk_02032EC0.lastState) { + switch (gUI.lastState) { case 4: var0 = gMenu.column_idx + 4; break; @@ -298,7 +298,7 @@ void sub_0808EBB8(Entity* this) { x = 112; break; case 2: - var0 = gUnk_02019EE0.unk7; + var0 = gMapDataBottomSpecial.unk7; if (var0 == 4) { var0 = 7; } @@ -337,12 +337,12 @@ void sub_0808ECBC(Entity* this) { const struct_08121CD4* var3; var0 = gMenu.column_idx; - switch (gUnk_02032EC0.lastState) { + switch (gUI.lastState) { case 4: var1 = 1; break; case 5: - var0 = gUnk_02019EE0.unk7; + var0 = gMapDataBottomSpecial.unk7; var1 = 2; break; case 6: @@ -366,12 +366,12 @@ void sub_0808ECBC(Entity* this) { this->palette.b.b0 = 14; } - gUnk_02019EE0.isTransitioning |= sub_0808EF6C(this); + gMapDataBottomSpecial.isTransitioning |= sub_0808EF6C(this); } void sub_0808ED64(Entity* this) { int y = 255; - if (gUnk_02032EC0.lastState == 1 && gGenericMenu.unk10.a[1] != 5) { + if (gUI.lastState == 1 && gGenericMenu.unk10.a[1] != 5) { this->x.HALF.HI = gGenericMenu.unk10.a[0] * 16 + 28; y = gGenericMenu.unk10.a[1] * 16 + 58; } @@ -380,7 +380,7 @@ void sub_0808ED64(Entity* this) { void sub_0808ED98(Entity* this) { int y; - if (gUnk_02032EC0.lastState != 1) { + if (gUI.lastState != 1) { this->field_0x68.HWORD = 27; y = -10; } else { @@ -408,7 +408,7 @@ void sub_0808EE00(Entity* this) { this->x.HALF.HI = gUnk_08121D18[var0][var1]; this->field_0x68.HWORD = gUnk_08121D18[var0][var1]; var1 -= var0; - if (gUnk_02032EC0.lastState != 1) { + if (gUI.lastState != 1) { var1 = 128; var2 = 176; } else { @@ -417,14 +417,14 @@ void sub_0808EE00(Entity* this) { this->field_0x6a.HWORD = var2; this->palette.b.b0 = gGenericMenu.unk10.a[1] == 5 && var1 == gGenericMenu.unk10.a[2] ? 11 : 9; - gUnk_02019EE0.isTransitioning |= sub_0808EF6C(this); + gMapDataBottomSpecial.isTransitioning |= sub_0808EF6C(this); } void nullsub_522(Entity* this) { } void sub_0808EE98(Entity* this) { - this->actionDelay = gUnk_02032EC0.lastState; + this->actionDelay = gUI.lastState; this->frameIndex = gUnk_08121D48[this->actionDelay]; if (this->actionDelay != 2) { this->field_0x68.HWORD = 96; @@ -436,7 +436,7 @@ void sub_0808EE98(Entity* this) { void sub_0808EED8(Entity* this) { int var0; - if (gUnk_02032EC0.lastState != 3) { + if (gUI.lastState != 3) { this->spriteSettings.draw = 0; } else { this->spriteSettings.draw = 2; @@ -447,7 +447,7 @@ void sub_0808EED8(Entity* this) { void sub_0808EF24(Entity* this) { int var0; - if (gUnk_02032EC0.lastState != 3) { + if (gUI.lastState != 3) { this->spriteSettings.draw = 0; } else { this->spriteSettings.draw = 2; diff --git a/src/object/railtrack.c b/src/object/railtrack.c index fbca5d99..cb6fb550 100644 --- a/src/object/railtrack.c +++ b/src/object/railtrack.c @@ -40,7 +40,7 @@ void sub_080851AC(Entity* this) { } } InitializeAnimation(this, this->animationState); - this->field_0x70.WORD = (u32)GetLayerByIndex(this->collisionLayer) + 4 + (COORD_TO_TILE(this) * 2); + this->field_0x70.WORD = (u32)&GetLayerByIndex(this->collisionLayer)->mapData[COORD_TO_TILE(this)]; sub_08085394(this); } diff --git a/src/player.c b/src/player.c index 48e00eab..076b684a 100644 --- a/src/player.c +++ b/src/player.c @@ -2689,7 +2689,7 @@ static void sub_0807332C(Entity* this) { gRoomControls.camera_target = this; SetPlayerActionNormal(); } else { - gMain.substate = 3; + gMain.substate = GAMEMAIN_CHANGEAREA; *(&gMain.pauseInterval + 1) = 1; SetFade(5, 8); } diff --git a/src/playerUtils.c b/src/playerUtils.c index b254f4bc..ada94b39 100644 --- a/src/playerUtils.c +++ b/src/playerUtils.c @@ -32,10 +32,6 @@ typedef struct { u8 unk6[6]; } struct_0811BE48; -extern void gMapDataBottom; // 0x2000 -extern void gMapDataTop; // 0x2000 -extern u16 gMetatilesBottom[]; -extern u16 gMetatilesTop[]; extern u8 gMapData; extern const u8 gUnk_020176E0[]; extern const ScreenTransitionData gUnk_0813AD88[]; @@ -73,6 +69,19 @@ extern void (*const gUnk_0811C120[])(Entity*); extern u16 gUnk_0811C268[]; extern ItemBehavior* (*const gUnk_0811BFC8[])(u32); +extern void DeleteLoadedTileEntity(u32, u32); + +extern const u8 gUnk_080B3E80[]; // collisionData for tileType? +extern const u8 gUnk_080B37A0[]; // unkData3 for tileType? + +extern u8 gUpdateVisibleTiles; +extern u16 gMapDataTopSpecial[]; +extern u16 gMapDataBottomSpecial[]; + +bool32 sub_0807BF88(u32, u32, RoomResInfo*); + +void sub_0807BFD0(void); + void sub_08077698(PlayerEntity* this) { ItemBehavior* puVar2; u32 uVar3; @@ -1587,7 +1596,46 @@ void sub_0807B2F8(PlayerEntity* this) { } } -ASM_FUNC("asm/non_matching/playerUtils/SetTileType.inc", void SetTileType(u32 a, u32 b, u32 c)) +void SetTileType(u32 tileType, u32 position, u32 layer) { + u8 collisionData; + u16 metatile; + LayerStruct* data; + u16* src; + u16* dest; + + if (tileType < 0x800) { + DeleteLoadedTileEntity(position, layer); + data = GetLayerByIndex(layer); + metatile = data->unkData2[tileType]; + data->mapData[position] = metatile; + collisionData = gUnk_080B3E80[tileType]; + data->collisionData[position] = collisionData; + if ((gRoomControls.scroll_flags & 2) != 0) { + gMapBottom.collisionData[position] = collisionData; + } + data->unkData3[position] = gUnk_080B37A0[tileType]; + if ((gRoomControls.scroll_flags & 1) == 0) { + u32 offset = (position & 0x3f) * 2 + (position & 0xfc0) * 4; + if (layer != 2) { + dest = gMapDataBottomSpecial + offset; + } else { + dest = gMapDataTopSpecial + offset; + } + src = data->metatiles + metatile * 4; + *dest = *src; + dest[1] = src[1]; + dest[0x80] = src[2]; + dest[0x81] = src[3]; + if (gRoomControls.reload_flags != 1) { + gUpdateVisibleTiles = 1; + } + } + } else if (tileType >= 0x4000) { // The tile type actually directly is a tileIndex + SetTile(tileType, position, layer); + } else { + sub_0807BA8C(position, layer); + } +} bool32 sub_0807B434(u32 position, u32 layer) { switch (GetTileType(position, layer)) { @@ -1626,49 +1674,106 @@ void sub_0807B7D8(u32 param_1, u32 param_2, u32 param_3) { } } -void sub_0807B820(u32 param_1) { - SetTileType(620, param_1 - 65, 1); - SetTileType(627, param_1 - 65, 2); - SetTileType(621, param_1 - 64, 1); - SetTileType(628, param_1 - 64, 2); - SetTileType(622, param_1 - 63, 1); - SetTileType(629, param_1 - 63, 2); - SetTileType(623, param_1 - 1, 1); - SetTileType(624, param_1, 1); - SetTileType(626, param_1 + 1, 1); -} - -void sub_0807B8A8(u32 param_1) { - SetTileType(636, param_1 - 65, 1); - SetTileType(643, param_1 - 65, 2); - SetTileType(637, param_1 - 64, 1); - SetTileType(644, param_1 - 64, 2); - SetTileType(638, param_1 - 63, 1); - SetTileType(645, param_1 - 63, 2); - SetTileType(639, param_1 - 1, 1); - SetTileType(640, param_1, 1); - SetTileType(642, param_1 + 1, 1); +void sub_0807B820(u32 position) { + SetTileType(0x26c, position + TILE_POS(-1, -1), 1); + SetTileType(0x273, position + TILE_POS(-1, -1), 2); + SetTileType(0x26d, position + TILE_POS(0, -1), 1); + SetTileType(0x274, position + TILE_POS(0, -1), 2); + SetTileType(0x26e, position + TILE_POS(1, -1), 1); + SetTileType(0x275, position + TILE_POS(1, -1), 2); + SetTileType(0x26f, position + TILE_POS(-1, 0), 1); + SetTileType(0x270, position, 1); + SetTileType(0x272, position + TILE_POS(1, 0), 1); +} + +void sub_0807B8A8(u32 position) { + SetTileType(0x27c, position + TILE_POS(-1, -1), 1); + SetTileType(0x283, position + TILE_POS(-1, -1), 2); + SetTileType(0x27d, position + TILE_POS(0, -1), 1); + SetTileType(0x284, position + TILE_POS(0, -1), 2); + SetTileType(0x27e, position + TILE_POS(1, -1), 1); + SetTileType(0x285, position + TILE_POS(1, -1), 2); + SetTileType(0x27f, position + TILE_POS(-1, 0), 1); + SetTileType(0x280, position, 1); + SetTileType(0x282, position + TILE_POS(1, 0), 1); +} + +void sub_0807B930(u32 position) { + SetTileType(0x28c, position + TILE_POS(-1, -1), 1); + SetTileType(0x293, position + TILE_POS(-1, -1), 2); + SetTileType(0x28d, position + TILE_POS(0, -1), 1); + SetTileType(0x294, position + TILE_POS(0, -1), 2); + SetTileType(0x28e, position + TILE_POS(1, -1), 1); + SetTileType(0x295, position + TILE_POS(1, -1), 2); + SetTileType(0x28f, position + TILE_POS(-1, 0), 1); + SetTileType(0x290, position, 1); + SetTileType(0x292, position + TILE_POS(1, 0), 1); +} + +void sub_0807B9B8(u32 tileIndex, u32 position, u32 layer) { + LayerStruct* data; + u16* src; + u16* dest; + u16 tileType; + + DeleteLoadedTileEntity(position, layer); + data = GetLayerByIndex(layer); + data->mapData[position] = tileIndex; + tileType = data->metatileTypes[tileIndex]; + data->collisionData[position] = gUnk_080B3E80[tileType]; + data->unkData3[position] = gUnk_080B37A0[tileType]; + if ((gRoomControls.scroll_flags & 1) == 0) { + u32 offset = (position & 0x3f) * 2 + (position & 0xfc0) * 4; + if (layer != 2) { + dest = gMapDataBottomSpecial + offset; + } else { + dest = gMapDataTopSpecial + offset; + } + src = data->metatiles + tileIndex * 4; + *dest = *src; + dest[1] = src[1]; + dest[0x80] = src[2]; + dest[0x81] = src[3]; + if (gRoomControls.reload_flags != 1) { + gUpdateVisibleTiles = 1; + } + } } -void sub_0807B930(int param_1) { - SetTileType(652, param_1 - 65, 1); - SetTileType(659, param_1 - 65, 2); - SetTileType(653, param_1 - 64, 1); - SetTileType(660, param_1 - 64, 2); - SetTileType(654, param_1 - 63, 1); - SetTileType(661, param_1 - 63, 2); - SetTileType(655, param_1 - 1, 1); - SetTileType(656, param_1, 1); - SetTileType(658, param_1 + 1, 1); +void sub_0807BA8C(u32 position, u32 layer) { + u32 tileIndex; + u32 tileType; + LayerStruct* data; + u16* dest; + u16* src; + + DeleteLoadedTileEntity(position, layer); + data = GetLayerByIndex(layer); + data->mapData[position] = tileIndex = data->mapDataClone[position]; + tileType = data->metatileTypes[tileIndex]; + data->collisionData[position] = gUnk_080B3E80[tileType]; + data->unkData3[position] = gUnk_080B37A0[tileType]; + if ((gRoomControls.scroll_flags & 1) == 0) { + u32 offset = (position & 0x3f) * 2 + (position & 0xfc0) * 4; + if (layer != 2) { + dest = gMapDataBottomSpecial + offset; + } else { + dest = gMapDataTopSpecial + offset; + } + src = &data->metatiles[tileIndex * 4]; + dest[0] = src[0]; + dest[1] = src[1]; + dest[0x80] = src[2]; + dest[0x81] = src[3]; + if (gRoomControls.reload_flags != 1) { + gUpdateVisibleTiles = 1; + } + } } -ASM_FUNC("asm/non_matching/playerUtils/sub_0807B9B8.inc", void sub_0807B9B8(s32 a, s32 b, s32 c)) - -ASM_FUNC("asm/non_matching/playerUtils/sub_0807BA8C.inc", void sub_0807BA8C(u32 a, u32 b)) - -void sub_0807BB68(s16* param_1, u32 param_2, u32 param_3) { +void sub_0807BB68(s16* param_1, u32 basePosition, u32 layer) { while (param_1[0] != -1) { - SetTileType((u16)param_1[0], param_2 + param_1[1], param_3); + SetTileType((u16)param_1[0], basePosition + param_1[1], layer); param_1 += 2; } } @@ -1686,15 +1791,157 @@ void sub_0807BB98(s32 basePosition, u32 layer, u32 width, u32 height) { ASM_FUNC("asm/non_matching/playerUtils/sub_0807BBE4.inc", void sub_0807BBE4()) -ASM_FUNC("asm/non_matching/playerUtils/sub_0807BC84.inc", void sub_0807BC84()) +void sub_0807BC84(void) { + s32 height; + u32 width; + u8* puVar3; + u8* puVar4; + u8* puVar5; + u8* puVar6; + u32 index; + + width = (u32)(gRoomControls.width >> 4); + if (width == 0x40) { + width = 0x3f; + } + puVar4 = gMapBottom.collisionData + width; + puVar6 = gMapBottom.collisionData + 0x3f; + puVar3 = gMapTop.collisionData + width; + puVar5 = gMapTop.collisionData + 0x3f; + index = 0; + while (index < 0x40) { + *puVar4 = 0xff; + *puVar6 = 0xff; + *puVar3 = 0xff; + *puVar5 = 0xff; + puVar4 += 0x40; + puVar6 += 0x40; + puVar3 += 0x40; + puVar5 += 0x40; + index++; + } + height = (gRoomControls.height & 0xfff0) * 4; + puVar4 = gMapBottom.collisionData + height; + puVar6 = gMapBottom.collisionData + 0xfc0; + puVar3 = gMapTop.collisionData + height; + puVar5 = gMapTop.collisionData + 0xfc0; + index = 0; + while (index < 0x40) { + *puVar4 = 0xff; + puVar4++; + *puVar6 = 0xff; + puVar6++; + *puVar3 = 0xff; + puVar3++; + *puVar5 = 0xff; + puVar5++; + index++; + } +} ASM_FUNC("asm/non_matching/playerUtils/sub_0807BD14.inc", bool32 sub_0807BD14(Entity* a, u32 b)) -ASM_FUNC("asm/non_matching/playerUtils/sub_0807BDB8.inc", void sub_0807BDB8()) +u32 sub_0807BDB8(Entity* this, u32 param_2) { + u32 result = 0xff; + switch (param_2 & 7) { + case 0: + if (this->y.HALF.HI - (u32)gRoomControls.origin_y < 10) { + result = 0; + } + break; + case 1: + if (this->y.HALF.HI - (u32)gRoomControls.origin_y < 10) { + result = 0; + } + if (gRoomControls.width - 10 < this->x.HALF.HI - (u32)gRoomControls.origin_x) { + result = 1; + } + break; + case 2: + if (gRoomControls.width - 10 < this->x.HALF.HI - (u32)gRoomControls.origin_x) { + result = 1; + } + break; + case 3: + if (gRoomControls.height - 10 < this->y.HALF.HI - (u32)gRoomControls.origin_y) { + result = 2; + } + if (gRoomControls.width - 10 < this->x.HALF.HI - (u32)gRoomControls.origin_x) { + result = 1; + } + break; + case 4: + if (gRoomControls.height - 10 < this->y.HALF.HI - (u32)gRoomControls.origin_y) { + result = 2; + } + break; + case 5: + if (gRoomControls.height - 10 < this->y.HALF.HI - (u32)gRoomControls.origin_y) { + result = 2; + } + if (this->x.HALF.HI - (u32)gRoomControls.origin_x < 10) { + result = 3; + } + break; + case 6: + if (this->x.HALF.HI - (u32)gRoomControls.origin_x < 10) { + result = 3; + } + break; + case 7: + if (this->y.HALF.HI - (u32)gRoomControls.origin_y < 10) { + result = 0; + } + if (this->x.HALF.HI - (u32)gRoomControls.origin_x < 10) { + result = 3; + } + } + return result; +} -ASM_FUNC("asm/non_matching/playerUtils/sub_0807BEEC.inc", void sub_0807BEEC()) +u32 sub_0807BEEC(u32 param_1, u32 param_2, u32 param_3) { + u32 index; + RoomResInfo* ptr; + if ((gArea.filler3[-1] & 1) != 0) { + return gRoomControls.room; + } + switch (param_3) { + case 0: + param_2 = gRoomControls.origin_y - 0x10; + break; + case 1: + param_1 = gRoomControls.origin_x + gRoomControls.width + 0x10; + break; + case 2: + param_2 = gRoomControls.origin_y + gRoomControls.height + 0x10; + break; + case 3: + param_1 = gRoomControls.origin_x - 0x10; + break; + default: + return 0xff; + } + ptr = gArea.roomResInfos; + index = 0; + while (index < 0x40) { + if (sub_0807BF88(param_1, param_2, ptr)) { + return index; + } + index++; + ptr++; + } + return 0xff; +} -ASM_FUNC("asm/non_matching/playerUtils/sub_0807BF88.inc", void sub_0807BF88()) +bool32 sub_0807BF88(u32 param_1, u32 param_2, RoomResInfo* info) { + u32 width = param_1 - info->map_x; + u32 height = param_2 - info->map_y; + bool32 result = FALSE; + if (width < info->pixel_width && height < info->pixel_height) { + result = TRUE; + } + return result; +} void sub_0807BFA8(void) { gRoomControls.origin_x = (gArea.pCurrentRoomInfo)->map_x; @@ -1707,7 +1954,32 @@ ASM_FUNC("asm/non_matching/playerUtils/sub_0807BFD0.inc", void sub_0807BFD0()) ASM_FUNC("asm/non_matching/playerUtils/LoadRoomGfx.inc", void LoadRoomGfx()) -ASM_FUNC("asm/non_matching/playerUtils/sub_0807C460.inc", void sub_0807C460()) +void sub_0807C460(void) { + u32 x; + u32 y; + u16* mapBottom = gMapBottom.mapData; + u16* mapTop = gMapTop.mapData; + u32 width = gRoomControls.width >> 4; + u32 height = gRoomControls.height >> 4; + u32 position = 0; + + for (y = 0; y < height; y++) { + for (x = 0; x < width; x++) { + if (*mapBottom > 0x3fff) { + SetTile(*mapBottom, position, 1); + } + if (*mapTop > 0x3fff) { + SetTile(*mapTop, position, 2); + } + mapBottom++; + mapTop++; + position++; + } + mapBottom += 0x40 - width; + mapTop += 0x40 - width; + position += 0x40 - width; + } +} ASM_FUNC("asm/non_matching/playerUtils/sub_0807C4F8.inc", void sub_0807C4F8()) @@ -1719,12 +1991,24 @@ ASM_FUNC("asm/non_matching/playerUtils/sub_0807C69C.inc", void sub_0807C69C()) ASM_FUNC("asm/non_matching/playerUtils/sub_0807C740.inc", void sub_0807C740()) -ASM_FUNC("asm/non_matching/playerUtils/sub_0807C810.inc", void sub_0807C810()) - -void sub_0807C860(void) { +void sub_0807C810(void) { + struct_03004030* ptr; + Entity* player; + RoomControls* ctrls; + sub_0807BFD0(); + ptr = &gUnk_03004030; + player = &gPlayerEntity; + ctrls = &gRoomControls; + player->x.HALF.HI = ((ptr->unk_00)->unk_06 & 0x3f) * 0x10 + ctrls->origin_x + ptr->unk_04; + player->y.HALF.HI = (((ptr->unk_00)->unk_06 & 0xfc0) >> 2) + ctrls->origin_y + ptr->unk_06; + sub_080809D4(); + gUpdateVisibleTiles = 0; +} + +void CloneMapData(void) { gRoomTransition.field_0x2c[1] = 1; - MemCopy(&gMapDataBottom, &gMapDataBottom + 0x3000, 0x2000); - MemCopy(&gMapDataTop, &gMapDataTop + 0x3000, 0x2000); + MemCopy(&gMapBottom.mapData, &gMapBottom.mapDataClone, 0x2000); + MemCopy(&gMapTop.mapData, &gMapTop.mapDataClone, 0x2000); } void sub_0807C898(void) { @@ -1749,10 +2033,10 @@ void LoadCompressedMapData(void* dest, u32 offset) { } void sub_0807C998(u32* a1) { - LoadCompressedMapData(gMetatilesBottom, a1[0]); - LoadCompressedMapData(gMetatilesBottom - 0x1000, a1[1]); - LoadCompressedMapData(gMetatilesTop, a1[2]); - LoadCompressedMapData(gMetatilesTop - 0x1000, a1[3]); + LoadCompressedMapData(&gMapBottom.metatiles, a1[0]); + LoadCompressedMapData(&gMapBottom.metatileTypes, a1[1]); + LoadCompressedMapData(&gMapTop.metatiles, a1[2]); + LoadCompressedMapData(&gMapTop.metatileTypes, a1[3]); } void sub_0807C9D8(u32* a1) { diff --git a/src/projectile/winder.c b/src/projectile/winder.c index bbc49d0d..ae1cb901 100644 --- a/src/projectile/winder.c +++ b/src/projectile/winder.c @@ -91,7 +91,7 @@ bool32 sub_080AB9FC(Entity* this, u32 dir) { val = (((this->x.HALF.HI - gRoomControls.origin_x) >> 4) & 0x3f) | ((((this->y.HALF.HI - gRoomControls.origin_y) >> 4) & 0x3f) << 6); val += gUnk_080B4488[dir >> 3]; - tmp = layer->_2004[val]; + tmp = layer->collisionData[val]; if (tmp <= 0x1f) { return 0; } diff --git a/src/roomInit.c b/src/roomInit.c index daadea73..4d670f37 100644 --- a/src/roomInit.c +++ b/src/roomInit.c @@ -2364,7 +2364,7 @@ u32 sub_unk3_DeepwoodShrine_InsideBarrel(void) { void sub_StateChange_DeepwoodShrine_InsideBarrel(void) { sub_08058D34(); gArea.areaMetadata |= 0x40; - gMain.substate = 5; + gMain.substate = GAMEMAIN_BARRELUPDATE; } u32 sub_unk3_DeepwoodShrineEntry_Main(void) { diff --git a/src/scroll.c b/src/scroll.c index 360eadc3..e751a412 100644 --- a/src/scroll.c +++ b/src/scroll.c @@ -135,7 +135,7 @@ void ClearTilemaps(void) { gRoomControls.filler3 = 0xffff; gUnk_03004030.unk_0a = 0xff; gUnk_02034480.unk_00 = 0; - MemClear(&gUnk_02019EE0, 0x8000); + MemClear(&gMapDataBottomSpecial, 0x8000); MemClear(&gMapDataTopSpecial, 0x8000); } diff --git a/src/subtask2.c b/src/subtask2.c index 8511f6a8..39b710bb 100644 --- a/src/subtask2.c +++ b/src/subtask2.c @@ -125,7 +125,7 @@ ASM_FUNC("asm/non_matching/subtask2/sub_080A5C9C.inc", void sub_080A5C9C()) void sub_080A5CFC(u32 menuType, void* param_2, u32 param_3) { DrawDungeonFeatures(menuType, param_2, param_3); LoadDungeonMap(); - DrawDungeonMap(menuType, &gUnk_02019EE0, 0x400); + DrawDungeonMap(menuType, &gMapDataBottomSpecial, 0x400); } ASM_FUNC("asm/non_matching/subtask2/sub_080A5D1C.inc", void sub_080A5D1C()) @@ -297,46 +297,46 @@ void SetMenuType(u32 menuType) { } void ResetUI(void) { - MemClear(&gUnk_02032EC0, 0x3b4); + MemClear(&gUI, 0x3b4); } void MenuFadeIn(u32 param_1, u32 param_2) { - if (gUnk_02032EC0.nextToLoad == 0) { - MemClear(&gUnk_02032EC0, 0x3b4); - gUnk_02032EC0.lastState = param_1; - gUnk_02032EC0.field_0x3 = param_2; - gUnk_02032EC0.pauseFadeIn = gMain.substate; + if (gUI.nextToLoad == 0) { + MemClear(&gUI, 0x3b4); + gUI.lastState = param_1; + gUI.field_0x3 = param_2; + gUI.pauseFadeIn = gMain.substate; } else { - gUnk_02032EC0.state = param_1; - gUnk_02032EC0.field_0x5 = param_2; - gUnk_02032EC0.nextToLoad = 1; + gUI.state = param_1; + gUI.field_0x5 = param_2; + gUI.nextToLoad = 1; } - gUnk_02032EC0.field_0x6 = 0; - gUnk_02032EC0.isLoading = 0xffff; - gUnk_02032EC0.fadeInTime = 0x20; - gMain.substate = 7; + gUI.field_0x6 = 0; + gUI.isLoading = 0xffff; + gUI.fadeInTime = 0x20; + gMain.substate = GAMEMAIN_SUBTASK; SetFade(5, 0x20); gUnk_02018EB0[0] = 0; gUnk_02018EB0[1] = 0; } void sub_080A71A4(u32 param_1, u32 param_2, u32 param_3) { - if (gUnk_02032EC0.nextToLoad == 0) { - gUnk_02032EC0.fillerC[2] = param_3; + if (gUI.nextToLoad == 0) { + gUI.fillerC[2] = param_3; } else { - gUnk_02032EC0.fillerC[3] = param_3; + gUI.fillerC[3] = param_3; } MenuFadeIn(param_1, param_2); } void sub_080A71C4(u32 param_1, u32 param_2, u32 param_3, u32 param_4) { MenuFadeIn(param_1, param_2); - gUnk_02032EC0.isLoading = param_3; - gUnk_02032EC0.fadeInTime = param_4; + gUI.isLoading = param_3; + gUI.fadeInTime = param_4; } void Subtask_Exit(void) { - gUnk_02032EC0.nextToLoad = 3; + gUI.nextToLoad = 3; SetFade(5, 0x20); } @@ -347,19 +347,19 @@ void sub_080A71F4(ScreenTransitionData* exitTransition) { DeleteAllEntities(); sub_0805E974(); DeleteAllEntities(); - gMain.state = 1; - gMain.substate = 0; + gMain.state = GAMETASK_INIT; + gMain.substate = GAMEMAIN_INITROOM; } void GameMain_Subtask(void) { - if (gUnk_02032EC0.nextToLoad < 3) { - if (gUnk_02032EC0.state != 0) { - gUnk_02032EC0.field_0x3 = gUnk_02032EC0.field_0x5; - gUnk_02032EC0.lastState = gUnk_02032EC0.state; - gUnk_02032EC0.state = 0; + if (gUI.nextToLoad < 3) { + if (gUI.state != 0) { + gUI.field_0x3 = gUI.field_0x5; + gUI.lastState = gUI.state; + gUI.state = 0; } } - gUnk_0812901C[gUnk_02032EC0.nextToLoad](); + gUnk_0812901C[gUI.nextToLoad](); } ASM_FUNC("asm/non_matching/subtask2/Subtask_FadeIn.inc", void Subtask_FadeIn()) @@ -377,7 +377,7 @@ void Subtask_Init(void) { ResetPalettes(); ResetPaletteTable(0); gGFXSlots.unk0 = 1; - gUnk_02032EC0.nextToLoad = 2; + gUI.nextToLoad = 2; gRoomTransition.field_0x2c[4] = 1; } } @@ -387,9 +387,9 @@ ASM_FUNC("asm/non_matching/subtask2/Subtask_FadeOut.inc", void Subtask_FadeOut() void Subtask_Die(void) { sub_080A74F4(); if (gFadeControl.active == 0) { - gMain.substate = gUnk_02032EC0.pauseFadeIn; - gUnk_02032EC0.nextToLoad = gFadeControl.active; - gUnk_02032EC0.lastState = gFadeControl.active; + gMain.substate = gUI.pauseFadeIn; + gUI.nextToLoad = gFadeControl.active; + gUI.lastState = gFadeControl.active; ResetSystemPriority(); } } @@ -408,5 +408,5 @@ void sub_080A74F4(void) { } void Subtask_Update(void) { - gSubtasks[gUnk_02032EC0.lastState](); + gSubtasks[gUI.lastState](); } diff --git a/src/title.c b/src/title.c index e878d784..f9c63410 100644 --- a/src/title.c +++ b/src/title.c @@ -16,6 +16,7 @@ #include "save.h" #include "area.h" #include "item.h" +#include "game.h" typedef struct { u8 filler0[0x4]; @@ -123,8 +124,8 @@ static const u8 unk[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, #endif static u32 AdvanceIntroSequence(u32 transition) { - gUnk_02032EC0.lastState = transition; - gMain.state = 2; + gUI.lastState = transition; + gMain.state = GAMETASK_MAIN; MemClear(&gIntroState, sizeof(gIntroState)); SetFade(7, 8); } @@ -134,18 +135,18 @@ void TitleTask(void) { switch (gMain.state) { case 0: MessageInitialize(); - MemClear(&gUnk_02032EC0, sizeof(gUnk_02032EC0)); + MemClear(&gUI, sizeof(gUI)); AdvanceIntroSequence(0); break; case 1: - sIntroSequenceHandlers[gUnk_02032EC0.lastState](); + sIntroSequenceHandlers[gUI.lastState](); break; case 2: if (gFadeControl.active) { return; } DispReset(1); - gMain.state = 1; + gMain.state = GAMETASK_INIT; break; } CopyOAM(); |
