diff options
| author | Henny022p <info@henny022.de> | 2022-01-16 23:28:59 +0100 |
|---|---|---|
| committer | Henny022p <info@henny022.de> | 2022-01-16 23:32:07 +0100 |
| commit | 8ad65efb7c228d934e515209fdff5515a30aade1 (patch) | |
| tree | 854785296d2d86a8b30c1c5167c46bcc606608aa /src | |
| parent | 2cf294d02dfa8a483827d4df65ea42834bf29cf5 (diff) | |
decomp kinstone menu
Diffstat (limited to 'src')
| -rw-r--r-- | src/debug.c | 12 | ||||
| -rw-r--r-- | src/fileselect.c | 18 | ||||
| -rw-r--r-- | src/game.c | 8 | ||||
| -rw-r--r-- | src/object/fileScreenObjects.c | 14 | ||||
| -rw-r--r-- | src/subtask.c | 568 | ||||
| -rw-r--r-- | src/subtask2.c | 2 |
6 files changed, 594 insertions, 28 deletions
diff --git a/src/debug.c b/src/debug.c index 19b3ae04..f07417d6 100644 --- a/src/debug.c +++ b/src/debug.c @@ -48,14 +48,14 @@ void sub_0805FA98(void) { switch (gInput.newKeys) { case DPAD_UP: - gMenu.focusCoords[1] -= 1; + gMenu.unk10.a[1] -= 1; break; case DPAD_DOWN: - gMenu.focusCoords[1] += 1; + gMenu.unk10.a[1] += 1; break; case L_BUTTON: - gMenu.focusCoords[0] ^= 1; - if (gMenu.focusCoords[0] == 0) { + gMenu.unk10.a[0] ^= 1; + if (gMenu.unk10.a[0] == 0) { gScreen.bg0.control = BGCNT_SCREENBASE(31) | BGCNT_CHARBASE(3); gScreen.bg3.control = BGCNT_SCREENBASE(30) | BGCNT_CHARBASE(3) | BGCNT_PRIORITY(3); } else { @@ -82,7 +82,7 @@ void sub_0805FA98(void) { iVar1 = 0; break; } - switch (gMenu.focusCoords[1]) { + switch (gMenu.unk10.a[1]) { case 0: gMenu.unk14 = (gMenu.unk14 + iVar1 + 0x50) % 0x50; break; @@ -94,7 +94,7 @@ void sub_0805FA98(void) { break; } } - gMenu.focusCoords[1] = (gMenu.focusCoords[1] + 3) % 3; + gMenu.unk10.a[1] = (gMenu.unk10.a[1] + 3) % 3; gScreen.bg3.updated = 1; } diff --git a/src/fileselect.c b/src/fileselect.c index f2e1cb39..539c974b 100644 --- a/src/fileselect.c +++ b/src/fileselect.c @@ -875,11 +875,11 @@ NONMATCH("asm/non_matching/fileScreen/sub_080610B8.inc", void sub_080610B8(void) END_NONMATCH void sub_08051358(void) { - gMenu.field_0x12 = gSaveHeader->language == 0 ? 4 : 3; + gMenu.unk10.a[2] = gSaveHeader->language == 0 ? 4 : 3; - if (gMenu.focusCoords[0] != 0x0b || gMenu.focusCoords[1] != 0x5) { - gMenu.focusCoords[1] = 0x5; - gMenu.focusCoords[0] = 0xb; + if (gMenu.unk10.a[0] != 0x0b || gMenu.unk10.a[1] != 0x5) { + gMenu.unk10.a[1] = 0x5; + gMenu.unk10.a[0] = 0xb; SoundReq(SFX_TEXTBOX_NEXT); } } @@ -940,7 +940,7 @@ void sub_08051480(u32 c) { u32 idx; result = sub_080514BC(c); - idx = gMenu.unk13; + idx = gMenu.unk10.a[3]; if (result == RESULT_INVALID) { return; @@ -955,7 +955,7 @@ void sub_08051480(u32 c) { idx = FILENAME_LENGTH - 1; } - gMenu.unk13 = idx + 1; + gMenu.unk10.a[3] = idx + 1; gSave.name[idx] = c; sub_08051574(SFX_6B); } @@ -976,7 +976,7 @@ u32 sub_080514BC(u32 a1) { return 1; } - idx = gMenu.unk13; + idx = gMenu.unk10.a[3]; if (idx == 0) return 0; @@ -1119,7 +1119,7 @@ NONMATCH("asm/non_matching/fileScreen/sub_08051738.inc", void sub_08051738(void) } uVar3++; gMenu.unk16 = uVar3; - gMenu.unk13 = 4; + gMenu.unk10.a[3] = 4; gMenu.unk14 = uVar3; } END_NONMATCH @@ -1128,7 +1128,7 @@ s32 sub_080517B4(s32 a1) { u32 i = gUnk_02019EE0.unk7; if (a1 != 0) { for (i = i + a1; i < 5; i += a1) { - if ((&gMenu.focusCoords[0])[i] != 0 && (&gMenu.focusCoords[0])[i] != 4) + if (gMenu.unk10.a[i] != 0 && gMenu.unk10.a[i] != 4) return i; } @@ -652,7 +652,7 @@ static void GameOver_Init(void) { if (gFadeControl.active) return; sub_08052010(); - gMenu.focusCoords[0] = 80; + gMenu.unk10.a[0] = 80; gMenu.transitionTimer = 60; gSave.stats.health = 24; gMain.field_0x5 = 60; @@ -667,8 +667,8 @@ static void GameOver_FadeIn(void) { return; if (gMain.field_0x5 == 0) { - if (gMenu.focusCoords[0] >= 38) { - gMenu.focusCoords[0]--; + if (gMenu.unk10.a[0] >= 38) { + gMenu.unk10.a[0]--; } else { gMenu.transitionTimer--; if (gMenu.transitionTimer == 0) { @@ -839,7 +839,7 @@ static void DrawGameOverText(void) { gOamCmd._4 = 0; gOamCmd._6 = 0; gOamCmd._8 = 0x8600; - gOamCmd.y = gMenu.focusCoords[0]; + gOamCmd.y = gMenu.unk10.a[0]; for (i = 0; i < 8; ++i) { gOamCmd.x = sOffsets[i]; #ifdef EU diff --git a/src/object/fileScreenObjects.c b/src/object/fileScreenObjects.c index 004f98d5..a59f8172 100644 --- a/src/object/fileScreenObjects.c +++ b/src/object/fileScreenObjects.c @@ -219,7 +219,7 @@ void sub_0808EABC(Entity* this) { } break; case 5: - switch (gMenu.focusCoords[this->type]) { + switch (gMenu.unk10.a[this->type]) { case 0: var0 = 42; var1 = 40; @@ -228,7 +228,7 @@ void sub_0808EABC(Entity* this) { case 2: var0 = 20; var1 = 144; - var1 -= (gMenu.unk16 - gMenu.focusCoords[this->type]) * 32; + var1 -= (gMenu.unk16 - gMenu.unk10.a[this->type]) * 32; break; } break; @@ -371,9 +371,9 @@ void sub_0808ECBC(Entity* this) { void sub_0808ED64(Entity* this) { int y = 255; - if (gUnk_02032EC0.lastState == 1 && gMenu.focusCoords[1] != 5) { - this->x.HALF.HI = gMenu.focusCoords[0] * 16 + 28; - y = gMenu.focusCoords[1] * 16 + 58; + if (gUnk_02032EC0.lastState == 1 && gMenu.unk10.a[1] != 5) { + this->x.HALF.HI = gMenu.unk10.a[0] * 16 + 28; + y = gMenu.unk10.a[1] * 16 + 58; } this->y.HALF.HI = y; } @@ -384,7 +384,7 @@ void sub_0808ED98(Entity* this) { this->field_0x68.HWORD = 27; y = -10; } else { - u32 var0 = gMenu.unk13; + u32 var0 = gMenu.unk10.a[3]; if (var0 > 5) { var0 = 5; } @@ -416,7 +416,7 @@ void sub_0808EE00(Entity* this) { } this->field_0x6a.HWORD = var2; - this->palette.b.b0 = gMenu.focusCoords[1] == 5 && var1 == gMenu.field_0x12 ? 11 : 9; + this->palette.b.b0 = gMenu.unk10.a[1] == 5 && var1 == gMenu.unk10.a[2] ? 11 : 9; gUnk_02019EE0.isTransitioning |= sub_0808EF6C(this); } diff --git a/src/subtask.c b/src/subtask.c index f73b719f..ea93d9b9 100644 --- a/src/subtask.c +++ b/src/subtask.c @@ -1,11 +1,93 @@ #include "global.h" -#include "functions.h" #include "menu.h" #include "screen.h" #include "common.h" #include "subtask.h" +#include "sound.h" +#include "save.h" +#include "kinstone.h" +#include "game.h" +#include "message.h" +#include "object.h" +#include "main.h" +#include "npc.h" +#include "enemy.h" +#include "functions.h" + +extern const u32 gUnk_080CA06C[]; +extern const u8 gGlobalGfxAndPalettes[]; +typedef struct { + u8 filler0[0x1]; + u8 unk1; + u8 charColor; + u8 bgColor; + u16 unk4; + u16 unk6; + u8* unk8; +} struct_02036540; + +u32 sub_08000E44(u32); +s32 sub_080A3B48(void); +void sub_080A4468(void); +void sub_080A422C(void); +void sub_080A414C(void); +void sub_080A4080(void); +void sub_080A42E0(u32, u32); +void sub_0805ECEC(u32, u32, u32, u32); +u32 sub_080A43A8(u32); +void sub_0801C2F0(u32, u32); +u32 sub_080A4418(u32, u32); +u32 sub_080A43DC(u32); +void sub_0801E6C8(u32); +void sub_0801E798(u32); +u32 sub_080A44E0(struct_02036540*, u8*, u32); +struct_02036540* sub_0805F2C8(void); +void sub_0805F300(struct_02036540*); +u32 sub_0805F76C(u8*, struct_02036540*); extern void (*const gUnk_081280C4[])(void); +extern const u8 gUnk_081280EE[]; + +typedef struct { + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; + u8 unk4; + u8 unk5; + u8 unk6; + u8 unk7; +} struct_080C9CBC; + +extern const struct_080C9CBC gUnk_080C9CBC[]; +extern void (*const gUnk_081280F4[])(void); + +extern u8 gUnk_02002C81[]; +typedef struct { + u8 unk_00[1]; + u8 unk_01; + u8 unk_02[2]; +} struct_02019EE0; + +extern struct_02019EE0 gUnk_02019EE0[]; +extern s8 gUnk_08128120[]; + +typedef struct { + void* sourceAddress; + void* destinationAddress; + union { + u32 word; + struct { + u16 low; + u16 high; + } half; + } control; +} DMARegisters; + +#define DMA3 ((volatile DMARegisters*)REG_ADDR_DMA3SAD) + +extern u8 gTextGfxBuffer[]; +extern u8 gUnk_02002AC0[]; void Subtask_KinstoneMenu(void) { #if !(defined(DEMO_USA) || defined(DEMO_JP)) @@ -60,3 +142,487 @@ void sub_080A3BD0(void) { sub_080A7114(1); SetFade(6, 8); } + +NONMATCH("asm/non_matching/subtask/sub_080A3C6C.inc", void sub_080A3C6C(void)) { + s32 tmp1, tmp2, tmp3, tmp4, tmp5; + u8* ptr; + if (gFadeControl.active) { + return; + } + gMenu.column_idx = 2; + tmp2 = gMenu.unk28 * 0x10000; + tmp1 = tmp2 - gMenu.unk10.i; + tmp5 = tmp1; + if (tmp1 < 0) { + tmp5 = -tmp1; + } + if (tmp5 <= 0x1ffdu) { + gMenu.unk10.i = tmp2; + } else { + gMenu.column_idx = 1; + tmp2 = sub_08000E44(tmp1); + tmp1 /= 0x20000; + if (tmp1 < 0) { + tmp1 = -tmp1; + } + if (tmp1 > 5) { + tmp1 = 5; + } + gMenu.unk10.i += gUnk_081280EE[tmp1] * 0x666 * tmp2; + } + if (gMenu.unk29 != gMenu.unk10.i / 0x10000) { + gMenu.unk29 = gMenu.unk10.i / 0x10000; + SoundReq(SFX_TEXTBOX_CHOICE); + } + if ((gInput.newKeys & 0x20a) != 0) { + sub_080A7114(2); + SoundReq(SFX_MENU_CANCEL); + return; + } + tmp3 = gMenu.unk28; + switch (gInput.unk4) { + case 0x20: + case 0x40: + tmp3 -= 1; + break; + case 0x10: + case 0x80: + tmp3 += 1; + break; + case 1: + if (gMenu.column_idx == 2) { + tmp3 = gMenu.unk10.i / 0x10000; + gMenu.unk2a = gSave.unk118[tmp3]; + sub_080A7114(3); + } + break; + } + tmp4 = sub_080A3B48(); + if (tmp4 <= tmp3) { + tmp3 = tmp4 - 1; + } + if (tmp4 < 2) { + tmp3 = 0; + } + if (tmp3 < 0) { + tmp3 = 0; + } + if (gMenu.unk28 != tmp3) { + gMenu.unk28 = tmp3; + } +} +END_NONMATCH + +void sub_080A3DB8(void) { + const struct_080C9CBC* ptr; + if (gMenu.column_idx == 6) { + gFuseInfo._0 = 6; + ptr = &gUnk_080C9CBC[gFuseInfo._3]; + if (ptr->unk3 != 0) { + MenuFadeIn(ptr->unk3, ptr->unk4); + } else { + Subtask_Exit(); + } + } else { + gFuseInfo._0 = 5; + Subtask_Exit(); + } +} + +void sub_080A3E00(void) { + gMenu.column_idx = 3; + gUnk_081280F4[gMenu.overlayType](); +} + +void sub_080A3E20(void) { + gMenu.unk18 = 0; + gMenu.unk2c += 2; + if (0x45 < gMenu.unk2c) { + gMenu.unk2c = 0x46; + gMenu.overlayType = 1; + } +} + +void sub_080A3E48(void) { + u32 temp = gUnk_080C9CBC[gMenu.unk2a].unk5; + if (temp != gUnk_080C9CBC[gFuseInfo._3].unk5) { + SoundReq(SFX_ITEM_SHIELD_BOUNCE); + sub_080A7114(4); + } else { + gMenu.overlayType = 2; + gMenu.transitionTimer = 0x14; + gScreen.lcd.displayControl |= 0x2000; + gScreen.controls.window0HorizontalDimensions = 0x6887; + gScreen.controls.window0VerticalDimensions = 0x405f; + gScreen.controls.windowInsideControl = 0x3f; + gScreen.controls.windowOutsideControl = 0x1f; + gScreen.controls.layerFXControl = 0x3f90; + gScreen.controls.layerBrightness = 0; + SoundReq(SFX_FA); + } +} + +void sub_080A3EDC(void) { + if (++gScreen.controls.layerBrightness > 14) { + gScreen.controls.layerBrightness = 0; + gScreen.lcd.displayControl &= 0xdfff; + sub_080A7114(5); + } +} + +void sub_080A3F10(void) { + gMenu.column_idx = 4; + gMenu.unk2c -= 3; + gMenu.unk18 += 0x100; + if (gMenu.unk2c < 0) { + gMenu.unk18 = 0; + gMenu.unk2c = 0; + sub_080A7114(1); + SoundReq(SFX_MENU_ERROR); + } +} + +void sub_080A3F4C(void) { + extern void (*const gUnk_08128100[])(void); + gUnk_08128100[gMenu.overlayType](); +} + +void sub_080A3F68(void) { + gMenu.column_idx = 5; + WriteBit((u32*)gUnk_02002C81, gFuseInfo._3); + if (99 < ++gUnk_02002C81[-298]) { + gUnk_02002C81[-299] = 1; + } + sub_080A4468(); + SoundReq(SFX_TASK_COMPLETE); + MessageAtHeight(0x702, 0xe); + gMenu.overlayType = 1; + gMenu.transitionTimer = 0x78; +} + +void sub_080A3FCC(void) { + if ((gMessage.doTextBox & 0x7f) == 0) { + gMenu.overlayType = 2; + SoundReq(SFX_147); + } +} + +void sub_080A3FF4(void) { + gMenu.transitionTimer -= 1; + if (gMenu.transitionTimer != 0) { + gMenu.unk18 += gMenu.unk1a.HWORD; + gMenu.unk1a.HWORD += 0x20; + } else { + gMenu.column_idx = 6; + gMenu.overlayType = 3; + gMenu.transitionTimer = 0x4f; + CreateObject(OBJECT_B3, 1, 0); + SoundReq(SFX_1CA); + } +} + +void sub_080A4038(void) { + // TODO figure out why in some place s16 is needed and u16 in others + if (--(s16)gMenu.transitionTimer < 0) { + sub_080A7114(2); + } +} + +void sub_080A4054(void) { + u32 uVar2; + sub_080A422C(); + sub_080A414C(); + sub_080A4080(); + for (uVar2 = 0; uVar2 < 0x10; uVar2++) { + if (gUnk_02019EE0[uVar2].unk_01 != 0) { + gUnk_02019EE0[uVar2].unk_01 -= 1; + } + } +} + +extern u8 gUnk_08128110[]; +void sub_080A4080(void) { + u32 uVar1; + s32 iVar2; + s32 iVar3; + u8* temp; + + u32 t; + + gOamCmd._4 = 0; + gOamCmd._6 = 0; + gOamCmd.y = 0x10 - (s8)gMenu.unk2e.HALF.HI; + gOamCmd.x = 0x40; + gOamCmd._8 = 0x400; +#ifdef EU + DrawDirect(0x1fa, 0); +#else + DrawDirect(0x1fb, 0); +#endif + gOamCmd.y = 0x94; + gOamCmd.x = 0x50; + gOamCmd._8 = 0x480; +#ifdef EU + t = 0x1f9; +#else + t = 0x1fa; +#endif + DrawDirect(t, 0); + gOamCmd.x = 0xb8; + gOamCmd._8 = 0x4a0; + DrawDirect(t, 1); + uVar1 = gMain.ticks.HWORD >> 2 & 0xe; + temp = &gUnk_08128110[uVar1]; + gOamCmd.x = 10 - temp[0]; + gOamCmd._8 = 0x4e0; + iVar2 = sub_080A3B48() - 1; + if (0 < iVar2) { + iVar3 = gMenu.unk10.i; + if (iVar3 < 0) { + iVar3 = gMenu.unk10.i + 0xffff; + } + if (iVar3 >> 0x10 != iVar2) { + gOamCmd.y = temp[1] + 0x77; + DrawDirect(t, 3); + } + if (iVar3 >> 0x10 != 0) { + gOamCmd.y = 0x27 - temp[1]; + DrawDirect(t, 2); + } + } +} + +NONMATCH("asm/non_matching/subtask/sub_080A414C.inc", void sub_080A414C(void)) { + s32 uVar1; + s32 iVar2; + s32 uVar3; + + s32 i; + + gOamCmd._4 = 0; + gOamCmd._6 = 0; + uVar1 = gMenu.unk10.h[0] / 0xb21; + for (i = -3, uVar1 = -uVar1 - 0x45; i < 4; uVar1 += 0x17, i++) { + gOamCmd.y = ((gSineTable[uVar1 & 0xff] * 0x44) / 0x100) + 0x4f; + gOamCmd.x = ((gSineTable[(uVar1 + 0x40) & 0xff] * 0x42) / 0x100) - 0x10; + iVar2 = gMenu.unk10.i / 0x10000 + i; + if (iVar2 >= 0) { + uVar3 = gSave.unk12B[iVar2]; + if (i == 0) { + switch (gMenu.column_idx) { + case 3: + case 4: + uVar3 -= 1; + break; + default: + break; + } + } + if (0 < uVar3) { + sub_080A42E0(gSave.unk118[iVar2], uVar3); + } + } + } +} +END_NONMATCH + +void sub_080A422C(void) { + s32 uVar2; + s32 t, t2; + u16 t3; + + uVar2 = gMenu.unk18 / 256; + uVar2 %= 27; + t3 = uVar2; + sub_0805ECEC(0, gUnk_08128120[t3] << 4, 0x100, 0); + gOamCmd._4 = 0x100; + gOamCmd._6 = 0; + gOamCmd.y = 0x4f; + t = gMenu.unk2a; + t2 = 0x180; + switch (gMenu.column_idx) { + case 5: + gOamCmd.x = 0x78; + sub_080A42E0(t, 0xff); + break; + case 3: + case 4: + gOamCmd.x = gMenu.unk2c + 0x32; + sub_080A42E0(t, 0); + t2 = 0x8a - (gMenu.unk2c * 0x12 / 0x46); + break; + case 6: + break; + default: + t2 = 0x8a; + break; + } + + gOamCmd.x = t2; + sub_080A42E0(gFuseInfo._3, 0); +} + +void sub_080A42E0(u32 param_1, u32 param_2) { + u8 uVar1; + s32 sVar2; + s32 sVar3; + s32 iVar4; + + const struct_080C9CBC* ptr = &gUnk_080C9CBC[param_1]; + + if (param_2 == 0xff) { + uVar1 = ptr->unk2; + } else { + uVar1 = ptr->unk1; + } + 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; + sub_0801C2F0(iVar4 * 2 + 0x2e0, param_2); + } + gOamCmd._8 = (s16)(iVar4 * 2) + 0x3ae0; + sVar2 = gOamCmd.x; + sVar3 = gOamCmd.y; + if (gMenu.column_idx == 0) { + gOamCmd.x += 0x10; + gOamCmd.y += 9; + } else { + gOamCmd.x += 8; + gOamCmd.y += 10; + } + DrawDirect(0, 5); + gOamCmd.x = sVar2; + gOamCmd.y = sVar3; + } + { + int t; + t = ptr->unk0; + t <<= 0xc; + t |= 0x800; + t |= (iVar4 << 4) + 0x300; + gOamCmd._8 = t; + } + DrawDirect(0, 3); +} + +void sub_080A4398(void) { + MemClear(&gUnk_02019EE0, 0x40); +} + +u32 sub_080A43A8(u32 param_1) { + u32 uVar1; + + uVar1 = sub_080A43DC(param_1); + if (0xf < uVar1) { + uVar1 &= 0xf; + 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; + return uVar1; +} + +u32 sub_080A43DC(u32 unk1) { + u32 i; + for (i = 0; i < 16; i++) { + if (unk1 == gUnk_02019EE0[i].unk_00[0]) { + return i; + } + } + for (i = 0; i < 16; i++) { + if (gUnk_02019EE0[i].unk_01 == 0) { + return i + 0x10; + } + } + return 0; +} + +u32 sub_080A4418(u32 param_1, u32 param_2) { + void* src; + u32 t, t2; + void* dest; + + dest = (void*)(param_2 * 0x20 + 0x6010000); + t = gUnk_080CA06C[param_1]; + t2 = t & 0x80000000; + src = (void*)&gGlobalGfxAndPalettes[~t2 & t]; + if (t2) { + LZ77UnCompVram(src, dest); + } else { + DMA3->sourceAddress = src; + DMA3->destinationAddress = dest; + DMA3->control.word = 0x84000080; + return DMA3->control.word; + } +} + +void sub_080A4468(void) { + gUnk_03003DF0[0].unk[2] = 0; + gUnk_03003DF0[0].unk2[3] = 0; + sub_0801E6C8(gFuseInfo._3); + sub_0801E798(gMenu.unk2a); +} + +NONMATCH("asm/non_matching/subtask/sub_080A4494.inc", u32 sub_080A4494(void)) { + struct_02036540* psVar1; + u32 ret; + + psVar1 = sub_0805F2C8(); + if (psVar1 != NULL) { + psVar1->unk8 = gTextGfxBuffer; + psVar1->charColor = 0; + psVar1->bgColor = 5; + psVar1->unk1 = 0; + sub_080A44E0(psVar1, gUnk_02002AC0, 0x80); + sub_08002632(gFuseInfo.ent); + ret = sub_080A44E0(psVar1, gUnk_02002AC0, 0xa0); + sub_0805F300(psVar1); + } + return ret; +} +END_NONMATCH + +u32 sub_080A44E0(struct_02036540* param_1, u8* param_2, u32 param_3) { + u32 uVar1; + u32 size; + + param_1->unk6 = 0; + param_1->unk4 = 0x60; + size = 0x300; + MemClear(param_1->unk8, size); + uVar1 = sub_0805F76C(param_2, param_1); + MemCopy(param_1->unk8, (void*)(param_3 * 0x20 + 0x6010000), size); + return uVar1; +} + +void sub_080A4528(void) { + Entity* entity; + + if (gFuseInfo.ent->kind == NPC) { + entity = CreateNPC(gFuseInfo.ent->id, gFuseInfo.ent->type, gFuseInfo.ent->type2); + } else { + if (gFuseInfo.ent->kind != ENEMY) { + return; + } + entity = CreateEnemy(gFuseInfo.ent->id, gFuseInfo.ent->type); + } + if (entity != NULL) { + if (entity->kind == NPC) { + NPCInit(entity); + entity->field_0xf = entity->id; + entity->id = 0x56; + } else { + EnemyInit(entity); + entity->field_0xf = entity->id; + entity->id = 0x66; + } + entity->x.HALF.HI = 0xcc; + entity->y.HALF.HI = 0x60; + entity->spritePriority.b1 = 2; + entity->spriteSettings.draw = 1; + entity->hitbox = NULL; + } +} diff --git a/src/subtask2.c b/src/subtask2.c index dffcbab0..4218e8c9 100644 --- a/src/subtask2.c +++ b/src/subtask2.c @@ -11,7 +11,7 @@ u32 sub_080A554C(u32 arg0) { if (arg0 != 0) { for (i = 0; i < 17; i++) { - if (arg0 == gMenu.focusCoords[i]) + if (arg0 == gMenu.unk10.a[i]) return i; } } |
