Improve LayerStruct

This commit is contained in:
octorock
2022-03-05 11:43:58 +01:00
parent d18fed1fb9
commit d6bbbf2db6
67 changed files with 720 additions and 1213 deletions
+4 -3
View File
@@ -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) {
+2 -2
View File
@@ -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();
}
+6 -6
View File
@@ -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;
}
+6 -6
View File
@@ -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;
}
}
+1 -1
View File
@@ -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;
+1 -1
View File
@@ -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);
-1
View File
@@ -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) {
+2 -1
View File
@@ -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;
+91 -87
View File
@@ -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;
+29 -29
View File
@@ -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();
}
}
+1 -2
View File
@@ -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;
+3 -2
View File
@@ -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) {
+2 -1
View File
@@ -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();
+4 -4
View File
@@ -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) {
+2 -2
View File
@@ -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) {
+10 -10
View File
@@ -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;
}
}
+1 -1
View File
@@ -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];
+2 -2
View File
@@ -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;
+23 -23
View File
@@ -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;
+1 -1
View File
@@ -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);
}
+1 -1
View File
@@ -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);
}
+336 -52
View File
@@ -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_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 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_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(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_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);
}
ASM_FUNC("asm/non_matching/playerUtils/sub_0807B9B8.inc", void sub_0807B9B8(s32 a, s32 b, s32 c))
void sub_0807B9B8(u32 tileIndex, u32 position, u32 layer) {
LayerStruct* data;
u16* src;
u16* dest;
u16 tileType;
ASM_FUNC("asm/non_matching/playerUtils/sub_0807BA8C.inc", void sub_0807BA8C(u32 a, u32 b))
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_0807BB68(s16* param_1, u32 param_2, u32 param_3) {
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;
}
}
}
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_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 sub_0807C860(void) {
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) {
+1 -1
View File
@@ -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;
}
+1 -1
View File
@@ -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) {
+1 -1
View File
@@ -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);
}
+33 -33
View File
@@ -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]();
}
+6 -5
View File
@@ -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();