From 2555185721729cc950c89f7a3cf6cef485e566e1 Mon Sep 17 00:00:00 2001 From: theo3 Date: Tue, 21 Jul 2020 23:02:19 -0700 Subject: [PATCH 1/8] menu main func OK --- asm/sub_080AD380.s | 65 ------------ asm/sub_080AD3F4.s | 68 ------------ asm/sub_080AD474.s | 224 --------------------------------------- include/functions.h | 10 ++ include/main.h | 36 ++++++- include/menu.h | 8 +- include/screen.h | 3 +- linker.ld | 3 - src/introSetTransition.c | 204 ++++++++++++++++++++++++++++++++--- src/room.c | 14 +-- 10 files changed, 236 insertions(+), 399 deletions(-) delete mode 100644 asm/sub_080AD380.s delete mode 100644 asm/sub_080AD3F4.s delete mode 100644 asm/sub_080AD474.s diff --git a/asm/sub_080AD380.s b/asm/sub_080AD380.s deleted file mode 100644 index 56400499..00000000 --- a/asm/sub_080AD380.s +++ /dev/null @@ -1,65 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_080AD380 -sub_080AD380: @ 0x080AD380 - push {r4, lr} - bl sub_080AD90C - ldr r4, _080AD398 @ =gUnk_03001000 - ldrb r0, [r4, #3] - cmp r0, #1 - beq _080AD3BC - cmp r0, #1 - bgt _080AD39C - cmp r0, #0 - beq _080AD3A2 - b _080AD3EA - .align 2, 0 -_080AD398: .4byte gUnk_03001000 -_080AD39C: - cmp r0, #2 - beq _080AD3D8 - b _080AD3EA -_080AD3A2: - bl sub_08056418 - ldr r0, _080AD3B8 @ =gUnk_02032EC0 - movs r1, #0xed - lsls r1, r1, #2 - bl _DmaZero - movs r0, #0 - bl IntroSetTransition - b _080AD3EA - .align 2, 0 -_080AD3B8: .4byte gUnk_02032EC0 -_080AD3BC: - ldr r1, _080AD3D0 @ =gUnk_081320F0 - ldr r0, _080AD3D4 @ =gUnk_02032EC0 - ldrb r0, [r0, #2] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - b _080AD3EA - .align 2, 0 -_080AD3D0: .4byte gUnk_081320F0 -_080AD3D4: .4byte gUnk_02032EC0 -_080AD3D8: - ldr r0, _080AD3F0 @ =gUnk_03000FD0 - ldrb r0, [r0] - cmp r0, #0 - bne _080AD3EE - movs r0, #1 - bl sub_0801DA90 - movs r0, #1 - strb r0, [r4, #3] -_080AD3EA: - bl sub_080AD918 -_080AD3EE: - pop {r4, pc} - .align 2, 0 -_080AD3F0: .4byte gUnk_03000FD0 \ No newline at end of file diff --git a/asm/sub_080AD3F4.s b/asm/sub_080AD3F4.s deleted file mode 100644 index 756016c5..00000000 --- a/asm/sub_080AD3F4.s +++ /dev/null @@ -1,68 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_080AD3F4 -sub_080AD3F4: @ 0x080AD3F4 - push {r4, r5, lr} - bl sub_080AD84C - adds r1, r0, #0 - ldr r4, _080AD450 @ =gMenu - ldrb r0, [r4, #5] - cmp r0, #0 - bne _080AD458 - movs r0, #1 - bl sub_0801DA90 - movs r5, #1 - strb r5, [r4, #5] - movs r0, #0x78 - strh r0, [r4, #8] - movs r0, #0x10 - bl sub_0801D7EC - movs r0, #1 - bl sub_0801D7EC - movs r0, #0x80 - lsls r0, r0, #0x12 - ldrb r0, [r0, #7] - movs r1, #2 - cmp r0, #0 - bne _080AD42C - movs r1, #1 -_080AD42C: - adds r0, r1, #0 - bl LoadPalettesByPaletteGroupIndex - ldr r0, _080AD454 @ =gScreen - ldrh r1, [r0] - movs r3, #0x80 - lsls r3, r3, #3 - adds r2, r3, #0 - orrs r1, r2 - strh r1, [r0] - strh r5, [r0, #0x1a] - movs r0, #6 - movs r1, #8 - bl DoFade - movs r1, #0 - b _080AD45E - .align 2, 0 -_080AD450: .4byte gMenu -_080AD454: .4byte gScreen -_080AD458: - cmp r1, #1 - bne _080AD45E - movs r1, #2 -_080AD45E: - cmp r1, #2 - bne _080AD46C - ldr r1, _080AD470 @ =gUnk_02000010 - movs r0, #1 - strb r0, [r1, #5] - bl IntroSetTransition -_080AD46C: - pop {r4, r5, pc} - .align 2, 0 -_080AD470: .4byte gUnk_02000010 \ No newline at end of file diff --git a/asm/sub_080AD474.s b/asm/sub_080AD474.s deleted file mode 100644 index 135ce2f7..00000000 --- a/asm/sub_080AD474.s +++ /dev/null @@ -1,224 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_080AD474 -sub_080AD474: @ 0x080AD474 - push {r4, r5, r6, lr} - ldr r5, _080AD490 @ =gMenu - ldrb r0, [r5, #0x12] - adds r0, #1 - strb r0, [r5, #0x12] - ldrb r0, [r5, #5] - cmp r0, #1 - bne _080AD486 - b _080AD588 -_080AD486: - cmp r0, #1 - bgt _080AD494 - cmp r0, #0 - beq _080AD49C - b _080AD5C8 - .align 2, 0 -_080AD490: .4byte gMenu -_080AD494: - cmp r0, #2 - bne _080AD49A - b _080AD5AA -_080AD49A: - b _080AD5C8 -_080AD49C: - movs r4, #1 - strb r4, [r5, #5] - strb r0, [r5, #6] - movs r6, #0 - movs r0, #0x1e - strh r0, [r5, #8] - movs r0, #7 - strb r0, [r5, #4] - bl EraseAllEntities - movs r0, #0 - bl sub_0801CFA8 - bl sub_080ADD30 - ldr r0, _080AD50C @ =gUnk_02024490 - strb r4, [r0] - movs r0, #2 - bl sub_0801D7EC - movs r4, #0x80 - lsls r4, r4, #0x12 - ldrb r0, [r4, #7] - movs r1, #4 - cmp r0, #0 - bne _080AD4D2 - movs r1, #3 -_080AD4D2: - adds r0, r1, #0 - bl LoadPalettesByPaletteGroupIndex - ldrb r0, [r4, #7] - cmp r0, #0 - bne _080AD524 - ldr r2, _080AD510 @ =gScreen - adds r1, r2, #0 - adds r1, #0x66 - ldr r0, _080AD514 @ =0x00000844 - strh r0, [r1] - adds r1, #2 - adds r0, #0xc5 - strh r0, [r1] - ldr r0, _080AD518 @ =0x00001C09 - strh r0, [r2, #0x14] - adds r0, #0xf9 - strh r0, [r2, #0x20] - ldr r0, _080AD51C @ =0x00001E03 - strh r0, [r2, #0x2c] - ldrh r0, [r2] - movs r3, #0xf0 - lsls r3, r3, #5 - adds r1, r3, #0 - orrs r0, r1 - strh r0, [r2] - ldr r0, _080AD520 @ =0x0000FF60 - strh r0, [r2, #0x18] - b _080AD55A - .align 2, 0 -_080AD50C: .4byte gUnk_02024490 -_080AD510: .4byte gScreen -_080AD514: .4byte 0x00000844 -_080AD518: .4byte 0x00001C09 -_080AD51C: .4byte 0x00001E03 -_080AD520: .4byte 0x0000FF60 -_080AD524: - ldr r2, _080AD570 @ =gScreen - adds r1, r2, #0 - adds r1, #0x66 - ldr r0, _080AD574 @ =0x00000241 - strh r0, [r1] - adds r1, #2 - ldr r0, _080AD578 @ =0x00000909 - strh r0, [r1] - ldr r0, _080AD57C @ =0x00001D02 - strh r0, [r2, #8] - ldr r0, _080AD580 @ =0x00001E03 - strh r0, [r2, #0x14] - ldr r0, _080AD584 @ =0x00007C89 - strh r0, [r2, #0x20] - ldrh r0, [r2] - movs r1, #1 - orrs r0, r1 - orrs r0, r6 - movs r3, #0x98 - lsls r3, r3, #5 - adds r1, r3, #0 - orrs r0, r1 - strh r0, [r2] - movs r0, #0x10 - str r0, [r5, #0x2c] - bl sub_080AD670 -_080AD55A: - bl sub_080A3210 - movs r0, #3 - bl PlaySFX - movs r0, #6 - movs r1, #8 - bl DoFade - b _080AD610 - .align 2, 0 -_080AD570: .4byte gScreen -_080AD574: .4byte 0x00000241 -_080AD578: .4byte 0x00000909 -_080AD57C: .4byte 0x00001D02 -_080AD580: .4byte 0x00001E03 -_080AD584: .4byte 0x00007C89 -_080AD588: - ldr r0, _080AD5A0 @ =gUnk_03000FD0 - ldrb r0, [r0] - cmp r0, #0 - bne _080AD632 - movs r0, #0x80 - lsls r0, r0, #0x12 - ldrb r0, [r0, #7] - cmp r0, #0 - bne _080AD5A4 - bl sub_080AD6AC - b _080AD610 - .align 2, 0 -_080AD5A0: .4byte gUnk_03000FD0 -_080AD5A4: - bl sub_080AD76C - b _080AD610 -_080AD5AA: - ldrh r0, [r5, #8] - subs r0, #1 - strh r0, [r5, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _080AD5C2 - movs r0, #0xe1 - lsls r0, r0, #4 - strh r0, [r5, #8] - ldrb r0, [r5, #5] - adds r0, #1 - strb r0, [r5, #5] -_080AD5C2: - bl sub_080AD644 - b _080AD610 -_080AD5C8: - bl sub_080AD84C - adds r4, r0, #0 - cmp r4, #0 - beq _080AD5EC - cmp r4, #2 - bne _080AD5DE - movs r0, #0x6a - bl PlaySFX - b _080AD5E0 -_080AD5DE: - movs r4, #0 -_080AD5E0: - adds r0, r4, #0 - bl IntroSetTransition - ldr r0, _080AD634 @ =0x80080000 - bl PlaySFX -_080AD5EC: - bl sub_080AD644 - ldr r0, _080AD638 @ =gMenu - ldrh r1, [r0, #8] - movs r0, #0x20 - ands r0, r1 - cmp r0, #0 - bne _080AD610 - ldr r1, _080AD63C @ =gUnk_03001010 - movs r0, #0xe0 - lsls r0, r0, #8 - strh r0, [r1, #8] - movs r0, #0x84 - strh r0, [r1, #2] - ldr r0, _080AD640 @ =0x000001FF - movs r1, #0 - bl sub_080ADA14 -_080AD610: - ldr r2, _080AD638 @ =gMenu - movs r0, #0x80 - lsls r0, r0, #0x12 - ldrb r1, [r0, #7] - ldrb r0, [r2, #4] - cmp r0, r1 - beq _080AD626 - strb r1, [r2, #4] - movs r0, #3 - bl sub_0801D7EC -_080AD626: - bl sub_080AD89C - bl sub_0805E5C0 - bl sub_080AD9B0 -_080AD632: - pop {r4, r5, r6, pc} - .align 2, 0 -_080AD634: .4byte 0x80080000 -_080AD638: .4byte gMenu -_080AD63C: .4byte gUnk_03001010 -_080AD640: .4byte 0x000001FF diff --git a/include/functions.h b/include/functions.h index 36aa73c7..caace6ff 100644 --- a/include/functions.h +++ b/include/functions.h @@ -159,4 +159,14 @@ extern void sub_080AF2E4(void); extern void sub_0805ADD8(u32); extern void sub_0804F578(void); extern void sub_08059994(void); +extern u32 sub_080AD84C(); +extern void sub_0801D7EC(u32); +extern s32 sub_0801CFA8(u32); +extern void sub_080AD670(); +extern void sub_080A3210(); +extern void sub_080AD6AC(); +extern void sub_080AD76C(); +extern void sub_080AD644(); +extern void sub_080ADA14(u32, u32); +extern void sub_080AD89C(); #endif diff --git a/include/main.h b/include/main.h index c1ef4b5b..16888e29 100644 --- a/include/main.h +++ b/include/main.h @@ -14,6 +14,35 @@ typedef struct { // 0x03001000 u32 spritePriority; } MainStruct; +typedef struct { + u8 interruptFlag; + u8 field_0x1; + u8 funcIndex; + u8 field_0x3; + u8 transition; + u8 field_0x5; + u8 muteAudio; + u8 field_0x8; + u8 countdown; +} Main; + +typedef struct { + u16 nextToLoad; + u8 transitionType; + u8 field_0x3; + u8 state; + u8 field_0x5; + u8 field_0x6; + u8 pauseFadeIn; + u16 isLoading; + u16 fadeInTime; +} UI; + +extern Main gUnk_03001000; +extern UI gUnk_02032EC0; + + + extern s32 sub_08055F70(); extern s32 sub_080A3204(s32); extern s32 sub_0805616C(s32); @@ -21,10 +50,9 @@ extern s32 sub_0807CE90(s32); extern s32 sub_080560B8(s32); extern void sub_08056208(s32); extern void sub_0804FFE4(); -extern s32 sub_0804FF84(s32); -extern s32 sub_08056418(s32); +extern s32 sub_08056418(); extern void sub_080ADD30(s32); -extern s32 _DmaZero(s32, u32, u32); + extern s32 sub_08056010(s32); extern s32 sub_08016E78(s32); extern s32 ReadKeyInput(); @@ -37,8 +65,6 @@ extern s32 sub_08056458(s32); extern s32 sub_08050154(s32); extern s32 sub_080A3480(s32); -extern s32 gUnk_02000010; extern s32 gRand; -extern MainStruct gUnk_03001000; extern s32 gUnk_08100CBC; #endif \ No newline at end of file diff --git a/include/menu.h b/include/menu.h index cfd6c3d6..e3053783 100644 --- a/include/menu.h +++ b/include/menu.h @@ -24,10 +24,12 @@ typedef struct { u8 secret; u8 overlayType; u8 storyPanelIndex; - u8 field_0x7; - u8 transitionTimer; + u16 transitionTimer; + u8 field_0xa[8]; + u8 field_0x12; + u8 field_0x13[22]; + u32 field_0x2c; } Menu; extern Menu gMenu; - #endif \ No newline at end of file diff --git a/include/screen.h b/include/screen.h index 442eee84..1eafcf76 100644 --- a/include/screen.h +++ b/include/screen.h @@ -15,7 +15,8 @@ typedef struct { u16 bg0xOffset; u16 bg0yOffset; u16 bg0Updated; - u32 unk; + u16 unk; + u16 unk2; } BgSettings; typedef struct { diff --git a/linker.ld b/linker.ld index 460b91b4..f18fab06 100644 --- a/linker.ld +++ b/linker.ld @@ -883,9 +883,6 @@ SECTIONS { src/sub_080A554C.o(.text); asm/code_080A5574.o(.text); src/introSetTransition.o(.text); - asm/sub_080AD380.o(.text); - asm/sub_080AD3F4.o(.text); - asm/sub_080AD474.o(.text); src/sub_080AD644.o(.text); asm/sub_080AD670.o(.text); asm/sub_080AD6Ac.o(.text); diff --git a/src/introSetTransition.c b/src/introSetTransition.c index 6d71480f..3bb850e2 100644 --- a/src/introSetTransition.c +++ b/src/introSetTransition.c @@ -1,27 +1,197 @@ #include "global.h" #include "menu.h" +#include "main.h" +#include "entity.h" +#include "functions.h" +#include "screen.h" + +extern void (*const gUnk_081320F0[])(); + +extern u8 gUnk_03000FD0; + +typedef struct { + char header[4]; + u8 saveFile; + u8 field_0x5; + u8 brightnessPref; + u8 gameLanguage; +} struct_02000000; typedef struct { - u8 unk; - u8 unk2; - u8 unk3; - u8 functionIndex; - u16 unk6; u8 filler[5]; - u32 ticks; - u16 unk7; -} TransitionStruct; + u8 field_0x5; +} struct_02000010; -extern u32 DoFade(u32, u32); -extern void _DmaZero(u32*, u32, u32); -extern TransitionStruct gUnk_03001000; -extern MenuControls gUnk_02032EC0; - -u32 IntroSetTransition(u8 transition, u32 param_2, u32 param_3) +extern struct_02000010 gUnk_02000010; +u32 IntroSetTransition(u32 transition) { gUnk_02032EC0.transitionType = transition; - gUnk_03001000.functionIndex = 2; - _DmaZero((u32 *)&gMenu, 48, param_3); - return DoFade(7, 8); + gUnk_03001000.field_0x3 = 2; + _DmaZero((u32 *)&gMenu, 48); + DoFade(7, 8); } + +void sub_080AD380() +{ + sub_080AD90C(); + switch (gUnk_03001000.field_0x3) { + case 0: + sub_08056418(); + _DmaZero(&gUnk_02032EC0, 0x3b4); + IntroSetTransition(0); + break; + case 1: + gUnk_081320F0[gUnk_02032EC0.transitionType](); + break; + case 2: + if (gUnk_03000FD0 != 0) { + return; + } + sub_0801DA90(1); + gUnk_03001000.field_0x3 = 1; + break; + } + sub_080AD918(); +} + +void sub_080AD3F4(void) +{ + u32 iVar1; + u32 uVar2; + + iVar1 = sub_080AD84C(); + if (gMenu.secret == 0) { + sub_0801DA90(1); + gMenu.secret = 1; + gMenu.transitionTimer = 0x78; + sub_0801D7EC(0x10); + sub_0801D7EC(1); + if (((struct_02000000 *)0x2000000)->gameLanguage == 0) { + uVar2 = 1; + } + else { + uVar2 = 2; + } + LoadPalettesByPaletteGroupIndex(uVar2); + gScreen.lcd.lcdControl2 |= 0x400; + gScreen.bg2.bg0xOffset = 1; + DoFade(6, 8); + iVar1 = 0; + } + else { + if (iVar1 == 1) { + iVar1 = 2; + } + } + if (iVar1 == 2) { + gUnk_02000010.field_0x5 = 1; + IntroSetTransition(1); + } +} + +typedef struct { + u16 field_0x0; + u16 field_0x2; + u16 field_0x4[2]; + u16 field_0x8; +} struct_03001010; + +extern struct_03001010 gUnk_03001010; + +extern u8 gUnk_02024490; +extern u8 gUnk_03000FD0; + +void sub_080AD474(void) +{ + int iVar2; + u32 uVar3; + + gMenu.field_0x12++; + switch (gMenu.secret) { + case 0: + gMenu.secret = 1; + gMenu.overlayType = 0; + gMenu.transitionTimer = 0x1e; + gMenu.field_0x2 = 7; + EraseAllEntities(); + sub_080ADD30(sub_0801CFA8(0)); + gUnk_02024490 = 1; + sub_0801D7EC(2); + if (((struct_02000000*)0x2000000)->gameLanguage == 0) { + uVar3 = 3; + } + else { + uVar3 = 4; + } + LoadPalettesByPaletteGroupIndex(uVar3); + if (((struct_02000000*)0x2000000)->gameLanguage == 0) { + gScreen.controls.windowOutsideControl = 0x844; + gScreen.controls.mosaicSize = 0x909; + gScreen.bg1.unk = 0x1c09; + gScreen.bg2.unk = 0x1d02; + gScreen.affine.unk2 = 0x1e03; + gScreen.lcd.lcdControl2 |= 0x1e00; + gScreen.bg2.bg0Control = 0xff60; + } + else { + gScreen.controls.windowOutsideControl = 0x241; + gScreen.controls.mosaicSize = 0x909; + gScreen.lcd.lcdControl1 = 0x1d02; + gScreen.bg1.unk = 0x1E03; + gScreen.bg2.unk = 0x7C89; + gScreen.lcd.lcdControl2 |= 1; + gScreen.lcd.lcdControl2 |= 0x1300; + gMenu.field_0x2c = 0x10; + sub_080AD670(); + } + sub_080A3210(); + PlaySFX(3); + DoFade(6, 8); + break; + case 1: + if (gUnk_03000FD0 != 0) { + return; + } + if (((struct_02000000*)0x2000000)->gameLanguage == 0) { + sub_080AD6AC(); + } + else { + sub_080AD76C(); + } + break; + case 2: + gMenu.transitionTimer--; + if (gMenu.transitionTimer == 0) { + gMenu.transitionTimer = 0xe10; + gMenu.secret++; + } + sub_080AD644(); + break; + default: + iVar2 = sub_080AD84C(); + if (iVar2 != 0) { + if (iVar2 == 2) { + PlaySFX(0x6a); + } + else { + iVar2 = 0; + } + IntroSetTransition(iVar2); + PlaySFX(0x80080000); + } + sub_080AD644(); + if ((gMenu.transitionTimer & 0x20) == 0) { + gUnk_03001010.field_0x8 = 0xe000; + gUnk_03001010.field_0x2 = 0x84; + sub_080ADA14(0x1ff,0); + } + } + if (gMenu.field_0x2 != ((struct_02000000*)0x2000000)->gameLanguage) { + gMenu.field_0x2 = ((struct_02000000*)0x2000000)->gameLanguage; + sub_0801D7EC(3); + } + sub_080AD89C(); + sub_0805E5C0(); + sub_080AD9B0(); +} \ No newline at end of file diff --git a/src/room.c b/src/room.c index 4f2a658b..64bf1c23 100644 --- a/src/room.c +++ b/src/room.c @@ -6,6 +6,7 @@ #include "flags.h" #include "link.h" #include "screen.h" +#include "main.h" typedef struct { u8 field_0x0[8]; @@ -37,21 +38,8 @@ typedef struct { Stats stats; } struct_02002A40; -typedef struct { - u8 interruptFlag; - u8 field_0x1; - u8 funcIndex; - u8 field_0x3; - u8 transition; - u8 field_0x5; - u8 muteAudio; - u8 field_0x8; - u8 countdown; -} Main; - extern struct_030010A0 gUnk_030010A0; extern struct_02002A40 gUnk_02002A40; -extern Main gUnk_03001000; void sub_0804B3C4(u32 arg0) { sub_0804B29C(arg0); From 341ec8cdf67ed646c29fe3278289abae5717a440 Mon Sep 17 00:00:00 2001 From: theo3 Date: Tue, 21 Jul 2020 23:16:12 -0700 Subject: [PATCH 2/8] fix menu.h offsets --- include/menu.h | 8 ++++---- src/code_0805436C.c | 2 +- src/introSetTransition.c | 18 +++++++++--------- src/sub_080A554C.c | 2 +- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/include/menu.h b/include/menu.h index e3053783..13564462 100644 --- a/include/menu.h +++ b/include/menu.h @@ -20,14 +20,14 @@ typedef struct { typedef struct { u8 field_0x0; u16 field_0x1; - u8 field_0x2; - u8 secret; + u8 field_0x3; + u8 menuType; u8 overlayType; u8 storyPanelIndex; u16 transitionTimer; u8 field_0xa[8]; - u8 field_0x12; - u8 field_0x13[22]; + u8 field_0x11; + u8 field_0x12[0x16]; u32 field_0x2c; } Menu; diff --git a/src/code_0805436C.c b/src/code_0805436C.c index c522c408..92175a3c 100644 --- a/src/code_0805436C.c +++ b/src/code_0805436C.c @@ -184,5 +184,5 @@ u32 sub_0805457C(u32 arg0, u32 arg1) { void sub_08054870(void) { - gUnk_080FE2A0[gMenu.secret](); + gUnk_080FE2A0[gMenu.menuType](); } \ No newline at end of file diff --git a/src/introSetTransition.c b/src/introSetTransition.c index 3bb850e2..ea8b8a5e 100644 --- a/src/introSetTransition.c +++ b/src/introSetTransition.c @@ -61,9 +61,9 @@ void sub_080AD3F4(void) u32 uVar2; iVar1 = sub_080AD84C(); - if (gMenu.secret == 0) { + if (gMenu.menuType == 0) { sub_0801DA90(1); - gMenu.secret = 1; + gMenu.menuType = 1; gMenu.transitionTimer = 0x78; sub_0801D7EC(0x10); sub_0801D7EC(1); @@ -107,13 +107,13 @@ void sub_080AD474(void) int iVar2; u32 uVar3; - gMenu.field_0x12++; - switch (gMenu.secret) { + gMenu.field_0x11++; + switch (gMenu.menuType) { case 0: - gMenu.secret = 1; + gMenu.menuType = 1; gMenu.overlayType = 0; gMenu.transitionTimer = 0x1e; - gMenu.field_0x2 = 7; + gMenu.field_0x3 = 7; EraseAllEntities(); sub_080ADD30(sub_0801CFA8(0)); gUnk_02024490 = 1; @@ -164,7 +164,7 @@ void sub_080AD474(void) gMenu.transitionTimer--; if (gMenu.transitionTimer == 0) { gMenu.transitionTimer = 0xe10; - gMenu.secret++; + gMenu.menuType++; } sub_080AD644(); break; @@ -187,8 +187,8 @@ void sub_080AD474(void) sub_080ADA14(0x1ff,0); } } - if (gMenu.field_0x2 != ((struct_02000000*)0x2000000)->gameLanguage) { - gMenu.field_0x2 = ((struct_02000000*)0x2000000)->gameLanguage; + if (gMenu.field_0x3 != ((struct_02000000*)0x2000000)->gameLanguage) { + gMenu.field_0x3 = ((struct_02000000*)0x2000000)->gameLanguage; sub_0801D7EC(3); } sub_080AD89C(); diff --git a/src/sub_080A554C.c b/src/sub_080A554C.c index 5fb0db17..9bdd2175 100644 --- a/src/sub_080A554C.c +++ b/src/sub_080A554C.c @@ -21,6 +21,6 @@ u32 sub_080A554C(u32 arg0) void sub_080A5574(void) { - gUnk_08128BF8[gMenu.secret](); + gUnk_08128BF8[gMenu.menuType](); sub_080A57F4(); } \ No newline at end of file From c650e7fcb2580e034474f5f8b39bd8cfd1c3a79b Mon Sep 17 00:00:00 2001 From: theo3 Date: Wed, 22 Jul 2020 00:57:06 -0700 Subject: [PATCH 3/8] jp title screen ok --- asm/sub_080AD670.s | 38 -------------- asm/sub_080AD6Ac.s | 105 --------------------------------------- include/screen.h | 1 + linker.ld | 3 -- src/introSetTransition.c | 96 +++++++++++++++++++++++++++++------ src/sub_080AD644.c | 15 ------ 6 files changed, 83 insertions(+), 175 deletions(-) delete mode 100644 asm/sub_080AD670.s delete mode 100644 asm/sub_080AD6Ac.s delete mode 100644 src/sub_080AD644.c diff --git a/asm/sub_080AD670.s b/asm/sub_080AD670.s deleted file mode 100644 index bdddb553..00000000 --- a/asm/sub_080AD670.s +++ /dev/null @@ -1,38 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_080AD670 -sub_080AD670: @ 0x080AD670 - push {lr} - sub sp, #0x14 - movs r0, #0x80 - lsls r0, r0, #8 - str r0, [sp, #4] - str r0, [sp] - mov r1, sp - movs r2, #0 - movs r0, #0x78 - strh r0, [r1, #8] - movs r0, #0x48 - strh r0, [r1, #0xa] - mov r0, sp - strh r2, [r0, #0x10] - mov r2, sp - ldr r0, _080AD6A4 @ =gMenu - ldr r0, [r0, #0x2c] - strh r0, [r1, #0xc] - strh r0, [r2, #0xe] - ldr r1, _080AD6A8 @ =gBgControls - mov r0, sp - movs r2, #1 - bl BgAffineSet - add sp, #0x14 - pop {pc} - .align 2, 0 -_080AD6A4: .4byte gMenu -_080AD6A8: .4byte gBgControls diff --git a/asm/sub_080AD6Ac.s b/asm/sub_080AD6Ac.s deleted file mode 100644 index 64332950..00000000 --- a/asm/sub_080AD6Ac.s +++ /dev/null @@ -1,105 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_080AD6AC -sub_080AD6AC: @ 0x080AD6AC - push {r4, r5, r6, lr} - ldr r4, _080AD6C0 @ =gMenu - ldrb r0, [r4, #6] - cmp r0, #1 - beq _080AD724 - cmp r0, #1 - bgt _080AD6C4 - cmp r0, #0 - beq _080AD6CA - b _080AD76A - .align 2, 0 -_080AD6C0: .4byte gMenu -_080AD6C4: - cmp r0, #2 - beq _080AD758 - b _080AD76A -_080AD6CA: - ldr r6, _080AD718 @ =gUnk_03000FD0 - ldrb r5, [r6] - cmp r5, #0 - bne _080AD76A - ldrb r1, [r4, #0x12] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - bne _080AD6E4 - ldr r1, _080AD71C @ =gScreen - ldrh r0, [r1, #0x18] - adds r0, #1 - strh r0, [r1, #0x18] -_080AD6E4: - bl sub_080AD84C - cmp r0, #2 - beq _080AD6F4 - ldr r0, _080AD71C @ =gScreen - ldrh r0, [r0, #0x18] - cmp r0, #0 - bne _080AD76A -_080AD6F4: - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - ldr r1, _080AD71C @ =gScreen - strh r5, [r1, #0x18] - ldr r0, _080AD720 @ =0x00000C09 - strh r0, [r1, #0x14] - movs r0, #0x40 - str r0, [r6, #4] - movs r0, #6 - movs r1, #0x10 - bl DoFade - movs r0, #0xf8 - bl PlaySFX - b _080AD76A - .align 2, 0 -_080AD718: .4byte gUnk_03000FD0 -_080AD71C: .4byte gScreen -_080AD720: .4byte 0x00000C09 -_080AD724: - ldr r1, _080AD754 @ =gUnk_03000FD0 - ldrb r5, [r1] - cmp r5, #0 - bne _080AD76A - movs r0, #1 - rsbs r0, r0, #0 - str r0, [r1, #4] - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - movs r0, #0x5a - strh r0, [r4, #8] - movs r0, #0xb4 - movs r1, #0 - movs r2, #0 - bl CreateObject - adds r1, r0, #0 - cmp r1, #0 - beq _080AD76A - strh r5, [r1, #0x2e] - movs r0, #0x48 - strh r0, [r1, #0x32] - b _080AD76A - .align 2, 0 -_080AD754: .4byte gUnk_03000FD0 -_080AD758: - bl sub_080AD84C - cmp r0, #0 - beq _080AD76A - ldrb r0, [r4, #5] - adds r0, #1 - strb r0, [r4, #5] - movs r0, #0x3c - strh r0, [r4, #8] -_080AD76A: - pop {r4, r5, r6, pc} diff --git a/include/screen.h b/include/screen.h index 1eafcf76..2f8c452f 100644 --- a/include/screen.h +++ b/include/screen.h @@ -70,6 +70,7 @@ typedef struct { BgControls controls; } Screen; +extern BgControls gBgControls; extern Screen gScreen; #endif \ No newline at end of file diff --git a/linker.ld b/linker.ld index f18fab06..f48d2678 100644 --- a/linker.ld +++ b/linker.ld @@ -883,9 +883,6 @@ SECTIONS { src/sub_080A554C.o(.text); asm/code_080A5574.o(.text); src/introSetTransition.o(.text); - src/sub_080AD644.o(.text); - asm/sub_080AD670.o(.text); - asm/sub_080AD6Ac.o(.text); asm/sub_080AD76C.o(.text); src/sub_080AD834.o(.text); asm/sub_080AD84C.o(.text); diff --git a/src/introSetTransition.c b/src/introSetTransition.c index ea8b8a5e..638bf4c6 100644 --- a/src/introSetTransition.c +++ b/src/introSetTransition.c @@ -7,7 +7,15 @@ extern void (*const gUnk_081320F0[])(); -extern u8 gUnk_03000FD0; +typedef struct { + u8 field_0x0; + u8 field_0x1; + u8 field_0x2; + u8 field_0x3; + u32 field_0x4; +} struct_03000FD0; + +extern struct_03000FD0 gUnk_03000FD0; typedef struct { char header[4]; @@ -45,7 +53,7 @@ void sub_080AD380() gUnk_081320F0[gUnk_02032EC0.transitionType](); break; case 2: - if (gUnk_03000FD0 != 0) { + if (gUnk_03000FD0.field_0x0 != 0) { return; } sub_0801DA90(1); @@ -90,17 +98,13 @@ void sub_080AD3F4(void) } } -typedef struct { - u16 field_0x0; - u16 field_0x2; - u16 field_0x4[2]; - u16 field_0x8; -} struct_03001010; +// typedef struct { +// u16 field_0x0[5]; +// } struct_03001010; -extern struct_03001010 gUnk_03001010; +extern u16 gUnk_03001010[5]; extern u8 gUnk_02024490; -extern u8 gUnk_03000FD0; void sub_080AD474(void) { @@ -146,11 +150,11 @@ void sub_080AD474(void) sub_080AD670(); } sub_080A3210(); - PlaySFX(3); + PlaySFX(3); //fanfare DoFade(6, 8); break; case 1: - if (gUnk_03000FD0 != 0) { + if (gUnk_03000FD0.field_0x0 != 0) { return; } if (((struct_02000000*)0x2000000)->gameLanguage == 0) { @@ -182,8 +186,8 @@ void sub_080AD474(void) } sub_080AD644(); if ((gMenu.transitionTimer & 0x20) == 0) { - gUnk_03001010.field_0x8 = 0xe000; - gUnk_03001010.field_0x2 = 0x84; + gUnk_03001010[4] = 0xe000; + gUnk_03001010[1] = 0x84; sub_080ADA14(0x1ff,0); } } @@ -194,4 +198,68 @@ void sub_080AD474(void) sub_080AD89C(); sub_0805E5C0(); sub_080AD9B0(); +} + +void sub_080AD644(void) { + + gUnk_03001010[2] = 0; + gUnk_03001010[3] = 0; + gUnk_03001010[4] = 57376; + gUnk_03001010[0] = 120; + gUnk_03001010[1] = 152; + sub_080ADA14(511, 1); + return; +} + +void sub_080AD670(void) +{ + struct BgAffineSrcData aff; + aff.texY = 0x8000; + aff.texX = 0x8000; + aff.scrX = 0x78; + aff.scrY = 0x48; + aff.alpha = 0; + aff.sy = aff.sx = gMenu.field_0x2c; + BgAffineSet(&aff, (struct BgAffineDstData*)&gBgControls, 1); +} + +void sub_080AD6AC(void) +{ + Entity *pEVar2; + + switch (gMenu.overlayType) { + case 0: + if (gUnk_03000FD0.field_0x0 == 0) { + if ((gMenu.field_0x11 & 1) == 0) { + gScreen.bg2.bg0Control++; + } + + if ((sub_080AD84C() == 2) || (gScreen.bg2.bg0Control == 0)) { + gMenu.overlayType++; + gScreen.bg2.bg0Control = 0; + gScreen.bg1.unk = 0xc09; + gUnk_03000FD0.field_0x4 = 0x40; + DoFade(6,0x10); + PlaySFX(0xf8); + } + } + break; + case 1: + if (gUnk_03000FD0.field_0x0 == '\0') { + gUnk_03000FD0.field_0x4 = -1; + gMenu.overlayType++; + gMenu.transitionTimer = 0x5a; + pEVar2 = CreateObject(0xb4,0,0); + if (pEVar2 != NULL) { + pEVar2->x.HALF.HI = 0; + pEVar2->y.HALF.HI = 0x48; + } + } + break; + case 2: + if (sub_080AD84C()) { + gMenu.menuType++; + gMenu.transitionTimer = 0x3c; + } + } } \ No newline at end of file diff --git a/src/sub_080AD644.c b/src/sub_080AD644.c deleted file mode 100644 index 059c544b..00000000 --- a/src/sub_080AD644.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "global.h" - -extern s32 sub_080ADA14(u32, u32); -extern u16 gUnk_03001010[4]; - -void sub_080AD644(void) { - - gUnk_03001010[2] = 0; - gUnk_03001010[3] = 0; - gUnk_03001010[4] = 57376; - gUnk_03001010[0] = 120; - gUnk_03001010[1] = 152; - sub_080ADA14(511, 1); - return; -} From cb24f8f9b14128f67335f8c4dfe65fa345039e3d Mon Sep 17 00:00:00 2001 From: theo3 Date: Wed, 22 Jul 2020 01:13:59 -0700 Subject: [PATCH 4/8] room.c named rest of flags --- include/flags.h | 18 ++++---- src/room.c | 118 ++++++++++++++++++++++++------------------------ 2 files changed, 68 insertions(+), 68 deletions(-) diff --git a/include/flags.h b/include/flags.h index 27595e70..d8f0aea5 100644 --- a/include/flags.h +++ b/include/flags.h @@ -30,15 +30,15 @@ extern u32 gRoomFlags; enum { NONE, - /*0x01*/ LV0_CLEAR, /* Simulation Lv. 0 */ - /*0x02*/ LV1_CLEAR, /* Simulation Lv. 1 */ - /*0x03*/ LV2_CLEAR, /* Simulation Lv. 2 */ - /*0x04*/ LV3_CLEAR, /* Simulation Lv. 3 */ - /*0x05*/ LV4_CLEAR, /* Simulation Lv. 4 */ - /*0x06*/ LV5_CLEAR, /* Simulation Lv. 5 */ - /*0x07*/ LV6_CLEAR, /* Simulation Lv. 6 */ - /*0x08*/ LV7_CLEAR, /* Simulation Lv. 7 */ - /*0x09*/ LV8_CLEAR, /* Simulation Lv. 8 */ + /*0x01*/ LV0_CLEAR, /* */ + /*0x02*/ LV1_CLEAR, /* */ + /*0x03*/ LV2_CLEAR, /* */ + /*0x04*/ LV3_CLEAR, /* */ + /*0x05*/ LV4_CLEAR, /* */ + /*0x06*/ LV5_CLEAR, /* */ + /*0x07*/ LV6_CLEAR, /* */ + /*0x08*/ LV7_CLEAR, /* */ + /*0x09*/ LV8_CLEAR, /* */ /*0x0a*/ MACHI_SET_1, /* Defeated Big Green Chuchu */ /*0x0b*/ MACHI_SET_2, /* Defeated Gleerok */ /*0x0c*/ MACHI_SET_3, /* */ diff --git a/src/room.c b/src/room.c index 64bf1c23..f17aca03 100644 --- a/src/room.c +++ b/src/room.c @@ -4451,13 +4451,13 @@ extern EntityData gUnk_080F0920; void sub_0804E27C(void) { - if (!CheckGlobalFlag(0x15)) { + if (!CheckGlobalFlag(TABIDACHI)) { LoadRoomEntityList(&gUnk_080F0650); gArea.pMusicIndex = 0x13; - SetGlobalFlag(100); + SetGlobalFlag(CASTLE_BGM); } else { - if (CheckGlobalFlag(100)) { + if (CheckGlobalFlag(CASTLE_BGM)) { gArea.pMusicIndex = 0x1b; } } @@ -4513,7 +4513,7 @@ extern EntityData gUnk_080F1C88; void sub_0804E460(void) { - if (!CheckGlobalFlag(0x4a)) { + if (!CheckGlobalFlag(POWERGLOVE_HINT)) { LoadRoomEntityList(&gUnk_080F1C68); } else { @@ -4531,11 +4531,11 @@ extern EntityData gUnk_080F1DD0; void sub_0804E488(void) { - if (CheckGlobalFlag(0x2e)) { + if (CheckGlobalFlag(NEW_HOUSE_DIN)) { LoadRoomEntityList(&gUnk_080F1D90); - } else if (CheckGlobalFlag(0x2f)) { + } else if (CheckGlobalFlag(NEW_HOUSE_NAYRU)) { LoadRoomEntityList(&gUnk_080F1DB0); - } else if (CheckGlobalFlag(0x30)) { + } else if (CheckGlobalFlag(NEW_HOUSE_FARORE)) { LoadRoomEntityList(&gUnk_080F1DD0); } } @@ -4565,7 +4565,7 @@ void sub_0804E4E4(void) LoadRoomEntityList(&gUnk_080F2174); // picori legend book - if (!GetInventoryValue(0x3a) && CheckGlobalFlag(0x2a)) { + if (!GetInventoryValue(0x3a) && CheckGlobalFlag(MIZUKAKI_HARIFALL)) { LoadRoomEntityList(&gUnk_080F2194); } if (gUnk_030010A0.field_0xa[5] == 1) { @@ -4588,7 +4588,7 @@ void sub_0804E52C(void) LoadRoomEntityList(&gUnk_080F23BC); } // flippers - if (!GetInventoryValue(0x46) && CheckGlobalFlag(0x29)) { + if (!GetInventoryValue(0x46) && CheckGlobalFlag(MIZUKAKI_START)) { LoadRoomEntityList(&gUnk_080F238C); } else { @@ -4619,7 +4619,7 @@ void sub_0804E574(void) case 5: // flippers if (!GetInventoryValue(0x46)) { - if (!CheckGlobalFlag(0x29)) { + if (!CheckGlobalFlag(MIZUKAKI_START)) { LoadRoomEntityList(&gUnk_080F2570); break; } @@ -4680,11 +4680,11 @@ extern EntityData gUnk_080F2914; void sub_0804E684(void) { - if (CheckGlobalFlag(0x2b)) { + if (CheckGlobalFlag(RENTED_HOUSE_DIN)) { LoadRoomEntityList(&gUnk_080F28D4); - } else if (CheckGlobalFlag(0x2c)) { + } else if (CheckGlobalFlag(RENTED_HOUSE_NAYRU)) { LoadRoomEntityList(&gUnk_080F28F4); - } else if (CheckGlobalFlag(0x2d)) { + } else if (CheckGlobalFlag(RENTED_HOUSE_FARORE)) { LoadRoomEntityList(&gUnk_080F2914); } } @@ -4715,11 +4715,11 @@ extern EntityData gUnk_080F2E2C; void sub_0804E6E8(void) { - if (!CheckGlobalFlag(0x49)) { + if (!CheckGlobalFlag(OUTDOOR)) { gArea.musicIndex = gArea.pMusicIndex; PlaySFX(0x800b0036); } - if (!CheckGlobalFlag(0x13)) { + if (!CheckGlobalFlag(START)) { LoadRoomEntityList(&gUnk_080F2E2C); } } @@ -4733,11 +4733,11 @@ extern EntityData gUnk_080F2EC4; void sub_0804E72C(void) { - if (!CheckGlobalFlag(0x49)) { + if (!CheckGlobalFlag(OUTDOOR)) { gArea.musicIndex = gArea.pMusicIndex; PlaySFX(0x800b0036); } - if (!CheckGlobalFlag(0x13)) { + if (!CheckGlobalFlag(START)) { LoadRoomEntityList(&gUnk_080F2E94); } else { @@ -4768,7 +4768,7 @@ extern EntityData gUnk_080F30CC; void sub_0804E7A4(void) { // dog food - if ((GetInventoryValue(0x36) == 1) && !CheckGlobalFlag(0x5b) && + if ((GetInventoryValue(0x36) == 1) && !CheckGlobalFlag(BIN_DOGFOOD) && (gLinkState.flags.all & 0x80) == 0) { LoadRoomEntityList(&gUnk_080F30CC); } @@ -4785,13 +4785,13 @@ extern u32 gUnk_08009B30; void sub_0804E7DC(void) { - if (!CheckGlobalFlag(0x13) && !CheckLocalFlag(0x46)) { + if (!CheckGlobalFlag(START) && !CheckLocalFlag(0x46)) { sub_080A71C4(5, 1, 4, 4); gUnk_02000070 = 0; DoFade(5, 0x100); sub_080751E8(0, 6, &gUnk_08009B30); } - if (!CheckGlobalFlag(0x49)) { + if (!CheckGlobalFlag(OUTDOOR)) { gArea.musicIndex = gArea.pMusicIndex; PlaySFX(0x800b0036); } @@ -4845,7 +4845,7 @@ extern EntityData gUnk_080F3604; void sub_0804E8FC(void) { - if (!CheckGlobalFlag(0x1d)) { + if (!CheckGlobalFlag(INLOCK)) { LoadRoomEntityList(&gUnk_080F36FC); } else if (gUnk_02002A40.field_0x8 < 4) { @@ -4861,7 +4861,7 @@ extern EntityData gUnk_080F37D0; void sub_0804E930(void) { - if (CheckGlobalFlag(0x1d)) { + if (CheckGlobalFlag(INLOCK)) { LoadRoomEntityList(&gUnk_080F37D0); } } @@ -4881,7 +4881,7 @@ extern EntityData gUnk_080F3A48; void sub_0804E954(void) { // flippers, history of masks - if (!GetInventoryValue(0x46) && CheckGlobalFlag(0x29) && !GetInventoryValue(0x3b)) { + if (!GetInventoryValue(0x46) && CheckGlobalFlag(MIZUKAKI_START) && !GetInventoryValue(0x3b)) { LoadRoomEntityList(&gUnk_080F3A48); } gUnk_030010A0.field_0x20 = 0xf28; @@ -4893,7 +4893,7 @@ extern u32 gUnk_080F3EA4; u32 sub_0804E998(void) { - if (CheckGlobalFlag(5) && !CheckLocalFlag(4)) { + if (CheckGlobalFlag(LV4_CLEAR) && !CheckLocalFlag(4)) { gRoomVars.field_0x74 = &gUnk_080F3EA4; } else { @@ -4908,13 +4908,13 @@ extern EntityData gUnk_080F3C44; void sub_0804E9D0(void) { - if (CheckGlobalFlag(5) && !CheckLocalFlag(4)) { + if (CheckGlobalFlag(LV4_CLEAR) && !CheckLocalFlag(4)) { LoadRoomEntityList(&gUnk_080F3C64); } if (CheckKinstoneFused(0x12)) { LoadRoomEntityList(&gUnk_080F3C94); } - if ((gUnk_02002A40.field_0x8 > 3) && CheckGlobalFlag(0x5c)) { + if ((gUnk_02002A40.field_0x8 > 3) && CheckGlobalFlag(TINGLE_TALK1ST)) { LoadRoomEntityList(&gUnk_080F3C44); } SetTile(0x4091, 0x590, 1); @@ -5042,7 +5042,7 @@ extern u32 gUnk_080F4EB0; u32 sub_0804EBDC(void) { - if (CheckGlobalFlag(0x51)) { + if (CheckGlobalFlag(ENDING)) { gRoomVars.field_0x6c = &gUnk_080F4EB0; gRoomVars.field_0x74 = NULL; } @@ -5058,10 +5058,10 @@ extern EntityData gUnk_080F4E10; void sub_0804EC00(void) { - if (CheckGlobalFlag(0x51)) { + if (CheckGlobalFlag(ENDING)) { gArea.pMusicIndex = gArea.musicIndex; } - if (!CheckGlobalFlag(0x14)) { + if (!CheckGlobalFlag(EZERO_1ST)) { LoadRoomEntityList(&gUnk_080F4D50); } if (!CheckLocalFlag(0x3e)) { @@ -5100,7 +5100,7 @@ extern u32 gUnk_080F5348; u32 sub_0804ECBC(void) { - if (CheckGlobalFlag(0x51)) { + if (CheckGlobalFlag(ENDING)) { gRoomVars.field_0x6c = &gUnk_080F5348; gRoomVars.field_0x88 = sub_0804ED18; gRoomVars.field_0x74 = NULL; @@ -5134,7 +5134,7 @@ u32 sub_0804ED30() { void sub_0804ED34(void) { sub_080AF2E4(); - if (CheckGlobalFlag(0x5d)) { + if (CheckGlobalFlag(SEIIKI_BGM)) { gArea.pMusicIndex = 0x31; } } @@ -5191,7 +5191,7 @@ void sub_0804ED5C(void) if (CheckLocalFlag(0x7c)) { LoadRoomEntityList(&gUnk_080F55B8); } - if (CheckGlobalFlag(0x5d)) { + if (CheckGlobalFlag(SEIIKI_BGM)) { gArea.pMusicIndex = 0x31; } } @@ -5207,7 +5207,7 @@ void sub_0804EE78(void) if (!CheckLocalFlag(0x78) && CheckLocalFlag(0x7c)) { LoadRoomEntityList(&gUnk_080F5660); } - if (CheckGlobalFlag(0x5d)) { + if (CheckGlobalFlag(SEIIKI_BGM)) { gArea.pMusicIndex = 0x31; } } @@ -5251,7 +5251,7 @@ void sub_0804EEBC(void) } } } - if (GetInventoryValue(0x9) || CheckGlobalFlag(4)) { + if (GetInventoryValue(0x9) || CheckGlobalFlag(LV3_CLEAR)) { LoadRoomEntityList(&gUnk_080F5868); if (!CheckLocalFlag(0x56)) { LoadRoomEntityList(&gUnk_080F5828); @@ -5291,7 +5291,7 @@ void nullsub_398() {} u32 sub_0804EFDC(void) { - if (CheckGlobalFlag(0x50)) { + if (CheckGlobalFlag(MAROYA_WAKEUP)) { gUnk_030010A0.field_0xa[5] = 5; } return 1; @@ -5305,7 +5305,7 @@ void sub_0804EFF8(void) if (gUnk_02002A40.field_0x8 > 7) { LoadRoomEntityList(&gUnk_080F5DD0); } - if (CheckGlobalFlag(0x50)) { + if (CheckGlobalFlag(MAROYA_WAKEUP)) { sub_080751E8(1, 2, &gUnk_08011C50); } } @@ -5359,8 +5359,8 @@ void nullsub_400() {} u32 sub_0804F09C(void) { - if (CheckGlobalFlag(0x24) && CheckLocalFlagByOffset(0x100, 0xdc)) { - SetGlobalFlag(0x58); + if (CheckGlobalFlag(KUMOTATSUMAKI) && CheckLocalFlagByOffset(0x100, 0xdc)) { + SetGlobalFlag(WARP_EVENT_END); } return 1; } @@ -5375,7 +5375,7 @@ void sub_0804F0C0(void) if (CheckKinstoneFused(0xf)) { LoadRoomEntityList(&gUnk_080F61BC); } - if (!CheckGlobalFlag(0x58)) { + if (!CheckGlobalFlag(WARP_EVENT_END)) { SetTileType(0x4072, 0x4c7, 1); SetTileType(0x4072, 0x507, 1); } @@ -5391,7 +5391,7 @@ extern EntityData gUnk_080F6324; void sub_0804F12C(void) { - if (!CheckGlobalFlag(0x58)) { + if (!CheckGlobalFlag(WARP_EVENT_END)) { LoadRoomEntityList(&gUnk_080F62E4); } else { @@ -5434,7 +5434,7 @@ extern EntityData gUnk_080F66AC; void sub_0804F190(void) { sub_0805B4D0(5); - if (CheckGlobalFlag(6) && !CheckLocalFlagByOffset(0x100, 5)) { + if (CheckGlobalFlag(LV5_CLEAR) && !CheckLocalFlagByOffset(0x100, 5)) { LoadRoomEntityList(&gUnk_080F66AC); } sub_08052CA4(8, 0, 0x1e8, 0x158); @@ -5514,7 +5514,7 @@ u32 sub_0804F23C(void) if (!CheckLocalFlag(0x6d)) { DoFade(7, 0x100); } - SetGlobalFlag(0x49); + SetGlobalFlag(OUTDOOR); return 1; } @@ -5527,9 +5527,9 @@ void sub_0804F25C(void) sub_0805ADD8(0); if (!CheckLocalFlag(0x6d)) { LoadRoomEntityList(&gUnk_080F70A8); - ClearGlobalFlag(0x1c); + ClearGlobalFlag(ZELDA_CHASE); } - if (!CheckGlobalFlag(0x15)) { + if (!CheckGlobalFlag(TABIDACHI)) { gArea.pMusicIndex = 0x10; } if ((gUnk_02002A40.windcrests & 0x40000000) == 0) { @@ -5608,14 +5608,14 @@ void sub_0804F3B0(void) sub_0805ADD8(0); if (CheckLocalFlagByOffset(0x200, 0x8f)) { - if (!CheckGlobalFlag(0x1d)) { + if (!CheckGlobalFlag(INLOCK)) { LoadRoomEntityList(&gUnk_080F77C0); } } else if (GetInventoryValue(0x40)) { LoadRoomEntityList(&gUnk_080F77F0); } - if (CheckGlobalFlag(0x15) && !GetInventoryValue(0x40)) { + if (CheckGlobalFlag(TABIDACHI) && !GetInventoryValue(0x40)) { LoadRoomEntityList(&gUnk_080F7810); } if (!CheckKinstoneFused(0x29)) { @@ -5623,7 +5623,7 @@ void sub_0804F3B0(void) SetTile(0x4072, 0xd88, 1); SetTile(0x4096, 0xdc8, 1); } - if ((gUnk_02002A40.field_0x8 > 3) && CheckGlobalFlag(0x5c)) { + if ((gUnk_02002A40.field_0x8 > 3) && CheckGlobalFlag(TINGLE_TALK1ST)) { LoadRoomEntityList(&gUnk_080F78A0); } } @@ -5635,17 +5635,17 @@ extern void sub_0804F4E4(); u32 sub_0804F468(void) { - if (CheckGlobalFlag(0x15) && !GetInventoryValue(0x11)) { + if (CheckGlobalFlag(TABIDACHI) && !GetInventoryValue(0x11)) { gRoomVars.field_0x6c = &gUnk_080F7CD0; gRoomVars.field_0x88 = sub_0804F5E8; } - if (CheckGlobalFlag(3) && GetInventoryValue(0x3) && !CheckLocalFlag(0x8c)) { + if (CheckGlobalFlag(LV2_CLEAR) && GetInventoryValue(0x3) && !CheckLocalFlag(0x8c)) { gRoomVars.field_0x6c = &gUnk_080F7C80; gRoomVars.field_0x88 = sub_0804F4E4; gRoomVars.field_0x74 = NULL; } - if (CheckGlobalFlag(0x15)) { - ClearGlobalFlag(100); + if (CheckGlobalFlag(TABIDACHI)) { + ClearGlobalFlag(CASTLE_BGM); } return 1; } @@ -5668,7 +5668,7 @@ void sub_0804F4F4(void) SetTileType(0x174, 0x7a6, 1); SetTileType(0x174, 0x7a7, 1); } - if (!CheckGlobalFlag(0x15)) { + if (!CheckGlobalFlag(TABIDACHI)) { gArea.pMusicIndex = 0x13; } } @@ -5850,7 +5850,7 @@ extern EntityData gUnk_080F806C; void sub_0804FA00(void) { sub_0805ADD8(0); - if ((gUnk_02002A40.field_0x8 > 3) && CheckGlobalFlag(0x5c)) { + if ((gUnk_02002A40.field_0x8 > 3) && CheckGlobalFlag(TINGLE_TALK1ST)) { LoadRoomEntityList(&gUnk_080F806C); } } @@ -5865,7 +5865,7 @@ void sub_0804FA30(void) { sub_0805ADD8(0); - if (CheckGlobalFlag(3) && GetInventoryValue(0x3) && + if (CheckGlobalFlag(LV2_CLEAR) && GetInventoryValue(0x3) && !CheckLocalFlag(0x9c)) { LoadRoomEntityList(&gUnk_080F82E0); } @@ -5896,7 +5896,7 @@ extern EntityData gUnk_080F85D8; void sub_0804FA98(void) { - if (CheckGlobalFlag(0x57)) { + if (CheckGlobalFlag(SOUGEN_06_HASHIGO)) { LoadRoomEntityList(&gUnk_080F85D8); } else { @@ -6395,7 +6395,7 @@ extern u32 gUnk_080FAD48; u32 sub_0804FDE0(void) { - if (CheckGlobalFlag(0x51)) { + if (CheckGlobalFlag(ENDING)) { gRoomVars.field_0x6c = &gUnk_080FAD48; gRoomVars.field_0x74 = NULL; } @@ -6406,7 +6406,7 @@ extern EntityData gUnk_080FACB8; void sub_0804FE04(void) { - if (CheckGlobalFlag(0x51)) { + if (CheckGlobalFlag(ENDING)) { gArea.pMusicIndex = gArea.musicIndex; } else { @@ -6437,14 +6437,14 @@ void sub_0804FE58(void) { sub_0805B4D0(1); - if (CheckGlobalFlag(3) && !CheckLocalFlag(2)) { + if (CheckGlobalFlag(LV2_CLEAR) && !CheckLocalFlag(LV1_CLEAR)) { LoadRoomEntityList(&gUnk_080FAFE4); } if ((gUnk_02002A40.windcrests & 0x1000000) == 0) { LoadRoomEntityList(&gUnk_080FB004); } if (GetInventoryValue(0x2)) { - SetGlobalFlag(0x56); + SetGlobalFlag(WHITE_SWORD_END); } } From 67da19b92c320c282ad9857da4bc41cd042b2b8f Mon Sep 17 00:00:00 2001 From: theo3 Date: Wed, 22 Jul 2020 23:05:12 -0700 Subject: [PATCH 5/8] structures.h --- asm/code_08050038.s | 151 ------------------------------------- asm/drawKinstoneMenu.s | 37 --------- asm/palaceArchway.s | 69 ----------------- include/functions.h | 7 ++ include/structures.h | 43 +++++++++++ linker.ld | 4 +- src/object/palaceArchway.c | 21 ++++++ src/room.c | 34 +-------- src/sub_08050024.c | 104 ++++++++++++++++++++++--- src/sub_080A3B84.c | 21 ++++++ 10 files changed, 188 insertions(+), 303 deletions(-) delete mode 100644 asm/drawKinstoneMenu.s delete mode 100644 asm/palaceArchway.s create mode 100644 include/structures.h create mode 100644 src/object/palaceArchway.c create mode 100644 src/sub_080A3B84.c diff --git a/asm/code_08050038.s b/asm/code_08050038.s index 880da10c..24320ebe 100644 --- a/asm/code_08050038.s +++ b/asm/code_08050038.s @@ -5,157 +5,6 @@ .text - thumb_func_start sub_08050038 -sub_08050038: @ 0x08050038 - push {lr} - adds r3, r0, #0 - ldr r2, _0805004C @ =gUnk_03000FD0 - ldrh r1, [r2, #8] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _08050050 - strh r3, [r2, #0xe] - b _08050052 - .align 2, 0 -_0805004C: .4byte gUnk_03000FD0 -_08050050: - strh r3, [r2, #0xc] -_08050052: - pop {pc} - - thumb_func_start DoFade -DoFade: @ 0x08050054 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r2, _08050078 @ =gUnk_03000FD0 - movs r3, #0 - strh r1, [r2, #0xa] - strh r5, [r2, #8] - movs r0, #1 - strb r0, [r2] - adds r0, #0xff - strh r0, [r2, #0xc] - strh r3, [r2, #0xe] - movs r0, #2 - ands r0, r5 - adds r4, r2, #0 - cmp r0, #0 - beq _0805007C - movs r0, #0xf8 - b _0805007E - .align 2, 0 -_08050078: .4byte gUnk_03000FD0 -_0805007C: - movs r0, #0 -_0805007E: - strb r0, [r4, #2] - movs r0, #8 - ands r0, r5 - cmp r0, #0 - beq _080500A4 - ldr r1, _080500E4 @ =gUnk_03000000 - movs r0, #1 - strb r0, [r1, #2] - ldr r2, _080500E8 @ =gScreen - ldrh r0, [r2, #0x14] - movs r1, #0x40 - orrs r0, r1 - strh r0, [r2, #0x14] - ldrh r0, [r2, #0x20] - orrs r0, r1 - strh r0, [r2, #0x20] - ldrh r0, [r2, #0x2c] - orrs r1, r0 - strh r1, [r2, #0x2c] -_080500A4: - movs r0, #0x10 - ands r0, r5 - cmp r0, #0 - beq _080500E0 - ldrh r0, [r4, #0x16] - ldrh r1, [r4, #0x18] - bl sub_0801E1B8 - movs r1, #0x12 - ldrsh r0, [r4, r1] - movs r2, #0x14 - ldrsh r1, [r4, r2] - movs r3, #0x10 - ldrsh r2, [r4, r3] - bl sub_0801E1EC - movs r0, #1 - ands r0, r5 - cmp r0, #0 - bne _080500E0 - ldrh r1, [r4, #8] - ldr r0, _080500EC @ =0x0000FFFB - ands r0, r1 - strh r0, [r4, #8] - bl sub_08050008 - ldr r1, _080500F0 @ =gUnk_0200B644 - movs r0, #1 - rsbs r0, r0, #0 - str r0, [r1] -_080500E0: - pop {r4, r5, pc} - .align 2, 0 -_080500E4: .4byte gUnk_03000000 -_080500E8: .4byte gScreen -_080500EC: .4byte 0x0000FFFB -_080500F0: .4byte gUnk_0200B644 - - thumb_func_start sub_080500F4 -sub_080500F4: @ 0x080500F4 - ldr r1, _0805010C @ =gUnk_03000FD0 - strh r0, [r1, #0xa] - ldrh r0, [r1, #8] - movs r2, #1 - eors r0, r2 - strh r0, [r1, #8] - strb r2, [r1] - movs r0, #0x80 - lsls r0, r0, #1 - strh r0, [r1, #0xc] - bx lr - .align 2, 0 -_0805010C: .4byte gUnk_03000FD0 - - thumb_func_start sub_08050110 -sub_08050110: @ 0x08050110 - push {r4, r5, r6, lr} - adds r5, r0, #0 - adds r6, r1, #0 - adds r4, r2, #0 - movs r1, #1 - ands r1, r4 - cmp r1, #0 - beq _08050130 - ldr r1, _0805012C @ =gUnk_03000FD0 - movs r0, #0x96 - strh r0, [r1, #0x10] - adds r2, r1, #0 - b _08050136 - .align 2, 0 -_0805012C: .4byte gUnk_03000FD0 -_08050130: - ldr r0, _0805014C @ =gUnk_03000FD0 - strh r1, [r0, #0x10] - adds r2, r0, #0 -_08050136: - movs r1, #0 - strh r5, [r2, #0x12] - strh r6, [r2, #0x14] - ldr r0, _08050150 @ =0x00003F3F - strh r0, [r2, #0x16] - strh r1, [r2, #0x18] - adds r0, r4, #0 - adds r1, r3, #0 - bl DoFade - pop {r4, r5, r6, pc} - .align 2, 0 -_0805014C: .4byte gUnk_03000FD0 -_08050150: .4byte 0x00003F3F - thumb_func_start sub_08050154 sub_08050154: @ 0x08050154 push {r4, r5, r6, lr} diff --git a/asm/drawKinstoneMenu.s b/asm/drawKinstoneMenu.s deleted file mode 100644 index f5c49d5b..00000000 --- a/asm/drawKinstoneMenu.s +++ /dev/null @@ -1,37 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_080A3B84 -sub_080A3B84: @ 0x080A3B84 - push {r4, r5, lr} - ldr r4, _080A3BC4 @ =gUnk_030010A0 - adds r4, #0x2c - movs r5, #0 - movs r0, #2 - strb r0, [r4] - bl sub_080AD90C - ldr r1, _080A3BC8 @ =gUnk_081280C4 - ldr r0, _080A3BCC @ =gMenu - ldrb r0, [r0, #5] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - bl sub_080A3B74 - bl sub_080A4054 - bl sub_0801C1D4 - bl sub_0801C208 - bl sub_0805E5C0 - bl sub_080AD9B0 - bl sub_080AD918 - strb r5, [r4] - pop {r4, r5, pc} - .align 2, 0 -_080A3BC4: .4byte gUnk_030010A0 -_080A3BC8: .4byte gUnk_081280C4 -_080A3BCC: .4byte gMenu \ No newline at end of file diff --git a/asm/palaceArchway.s b/asm/palaceArchway.s deleted file mode 100644 index a849a4b6..00000000 --- a/asm/palaceArchway.s +++ /dev/null @@ -1,69 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start PalaceArchway -PalaceArchway: @ 0x0809F288 - push {lr} - ldr r2, _0809F29C @ =gUnk_081246EC - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0809F29C: .4byte gUnk_081246EC - - thumb_func_start sub_0809F2A0 -sub_0809F2A0: @ 0x0809F2A0 - push {r4, r5, r6, lr} - movs r1, #1 - strb r1, [r0, #0xc] - ldrb r1, [r0, #0xb] - strb r1, [r0, #0x1e] - ldrb r1, [r0, #0x19] - movs r2, #0xc0 - orrs r1, r2 - strb r1, [r0, #0x19] - adds r3, r0, #0 - adds r3, #0x29 - ldrb r1, [r3] - movs r2, #7 - orrs r1, r2 - strb r1, [r3] - ldr r5, _0809F2EC @ =0x00004069 - movs r2, #0x2e - ldrsh r1, [r0, r2] - ldr r3, _0809F2F0 @ =gRoomControls - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r4, #0x3f - ands r1, r4 - movs r6, #0x32 - ldrsh r2, [r0, r6] - ldrh r3, [r3, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - adds r0, #0x38 - ldrb r2, [r0] - adds r0, r5, #0 - bl SetTile - pop {r4, r5, r6, pc} - .align 2, 0 -_0809F2EC: .4byte 0x00004069 -_0809F2F0: .4byte gRoomControls - - thumb_func_start nullsub_537 -nullsub_537: @ 0x0809F2F4 - bx lr - .align 2, 0 diff --git a/include/functions.h b/include/functions.h index caace6ff..2ba8c186 100644 --- a/include/functions.h +++ b/include/functions.h @@ -169,4 +169,11 @@ extern void sub_080AD76C(); extern void sub_080AD644(); extern void sub_080ADA14(u32, u32); extern void sub_080AD89C(); +extern void sub_0801E1B8(u32, u32); +extern void sub_0801E1EC(s32, s32, s32); +extern void sub_08050008(void); +extern void sub_080A3B74(void); +extern void sub_080A4054(void); +extern void sub_0801C1D4(void); +extern void sub_0801C208(void); #endif diff --git a/include/structures.h b/include/structures.h new file mode 100644 index 00000000..fb96345d --- /dev/null +++ b/include/structures.h @@ -0,0 +1,43 @@ +#ifndef STRUCTURES_H +#define STRUCTURES_H + +#include "global.h" +#include "entity.h" +#include "link.h" + +typedef struct { + u8 filler[8]; + u8 field_0x8; + u8 field_0x9[0x34]; + u32 windcrests; + u8 field_0x44[0x64]; + Stats stats; +} struct_02002A40; + +extern struct_02002A40 gUnk_02002A40; + +typedef struct { + u8 field_0x0[8]; + u8 field_0x8; + u8 field_0x9; + u8 field_0xa[6]; + union SplitWord field_0x10; + u8 field_0x14[0xc]; + u16 field_0x20; + u16 field_0x22; + u8 field_0x24[0x14]; + u8 field_0x38; + u8 field_0x39; + u16 field_0x3a; + u8 field_0x3c; + u8 filler[6]; + u16 field_0x44; + u16 field_0x46; + u16 field_0x48; + u16 field_0x4a; +} struct_030010A0; + +extern struct_030010A0 gUnk_030010A0; + + +#endif \ No newline at end of file diff --git a/linker.ld b/linker.ld index f48d2678..09c9c7a4 100644 --- a/linker.ld +++ b/linker.ld @@ -832,7 +832,7 @@ SECTIONS { src/object/fan.o(.text); asm/fan.o(.text); asm/objectA0.o(.text); - asm/palaceArchway.o(.text); + src/object/palaceArchway.o(.text); asm/objectA2.o(.text); src/object/cloud.o(.text); asm/minishLight.o(.text); @@ -878,7 +878,7 @@ SECTIONS { asm/code_080A29BC.o(.text); asm/playSFX.o(.text); asm/code_080A3480.o(.text); - asm/drawKinstoneMenu.o(.text); + src/sub_080A3B84.o(.text); asm/code_080A3BD0.o(.text); src/sub_080A554C.o(.text); asm/code_080A5574.o(.text); diff --git a/src/object/palaceArchway.c b/src/object/palaceArchway.c new file mode 100644 index 00000000..1580c20b --- /dev/null +++ b/src/object/palaceArchway.c @@ -0,0 +1,21 @@ +#include "global.h" +#include "entity.h" +#include "room.h" +#include "functions.h" + +extern void (*const gUnk_081246EC[])(Entity*); + +void PalaceArchway(Entity* this) { + gUnk_081246EC[this->action](this); +} + +void sub_0809F2A0(Entity *this) +{ + this->action = 1; + this->frameIndex = this->entityType.parameter; + this->spriteRendering.b3 = 3; + this->spritePriority.b0 = 7; + SetTile(0x4069, COORD_TO_TILE(this), this->collisionLayer); +} + +void nullsub_537() {} \ No newline at end of file diff --git a/src/room.c b/src/room.c index f17aca03..0bef2ef3 100644 --- a/src/room.c +++ b/src/room.c @@ -7,39 +7,7 @@ #include "link.h" #include "screen.h" #include "main.h" - -typedef struct { - u8 field_0x0[8]; - u8 field_0x8; - u8 field_0x9; - u8 field_0xa[6]; - union SplitWord field_0x10; - u8 field_0x14[0xc]; - u16 field_0x20; - u16 field_0x22; - u8 field_0x24[0x14]; - u8 field_0x38; - u8 field_0x39; - u16 field_0x3a; - u8 field_0x3c; - u8 filler[6]; - u16 field_0x44; - u16 field_0x46; - u16 field_0x48; - u16 field_0x4a; -} struct_030010A0; - -typedef struct { - u8 filler[8]; - u8 field_0x8; - u8 field_0x9[0x34]; - u32 windcrests; - u8 field_0x44[0x64]; - Stats stats; -} struct_02002A40; - -extern struct_030010A0 gUnk_030010A0; -extern struct_02002A40 gUnk_02002A40; +#include "structures.h" void sub_0804B3C4(u32 arg0) { sub_0804B29C(arg0); diff --git a/src/sub_08050024.c b/src/sub_08050024.c index 23f50e01..59601810 100644 --- a/src/sub_08050024.c +++ b/src/sub_08050024.c @@ -1,4 +1,35 @@ #include "global.h" +#include "functions.h" +#include "screen.h" + +typedef struct { + u8 field_0x0; + u8 field_0x1; + u8 field_0x2; + u8 field_0x3; + u32 field_0x4; + u16 fadeType; // fade in or out, are there others? + u16 fadeSpeed; // subtracted from duration + u16 fadeDuration; + u16 field_0xe; + s16 field_0x10; + s16 field_0x12; + s16 field_0x14; + u16 field_0x16; + u16 field_0x18; +} struct_03000FD0; + +extern struct_03000FD0 gUnk_03000FD0; + +typedef struct { + u8 field_0x0; + u8 field_0x1; + u8 spritesOffset; +} struct_03000000; + +extern struct_03000000 gUnk_03000000; + +extern u32 gUnk_0200B644; extern void sub_0801E104(); extern void DoFade(u32, u32); @@ -9,14 +40,65 @@ void sub_08050024() { return; } -/* thumb_func_start sub_08050024 -sub_08050024: @ 0x08050024 - push {lr} - bl sub_0801E104 - movs r1, #0x80 - lsls r1, r1, #1 - movs r0, #5 - bl DoFade - pop {pc} - .align 2, 0 - */ +void sub_08050038(u32 arg0) +{ + if ((gUnk_03000FD0.fadeType & 1) != 0) { + gUnk_03000FD0.field_0xe = arg0; + } + else { + gUnk_03000FD0.fadeDuration = arg0; + } +} + +void DoFade(u32 fadeType, u32 fadeSpeed) +{ + gUnk_03000FD0.fadeSpeed = fadeSpeed; + gUnk_03000FD0.fadeType = fadeType; + gUnk_03000FD0.field_0x0 = 1; + gUnk_03000FD0.fadeDuration = 0x100; + gUnk_03000FD0.field_0xe = 0; + if ((gUnk_03000FD0.fadeType & 2) != 0) { + gUnk_03000FD0.field_0x2 = 0xf8; + } + else { + gUnk_03000FD0.field_0x2 = 0; + } + if ((fadeType & 8) != 0) { + gUnk_03000000.spritesOffset = 1; + gScreen.bg1.unk |= 0x40; + gScreen.bg2.unk |= 0x40; + gScreen.affine.unk2 |= 0x40; + } + if ((fadeType & 0x10) != 0) { + sub_0801E1B8(gUnk_03000FD0.field_0x16, gUnk_03000FD0.field_0x18); + sub_0801E1EC(gUnk_03000FD0.field_0x12, gUnk_03000FD0.field_0x14, gUnk_03000FD0.field_0x10); + if ((fadeType & 1) == 0) { + gUnk_03000FD0.fadeType &= 0xfffb; + sub_08050008(); + gUnk_0200B644 = 0xffffffff; + } + } +} + +void sub_080500F4(u32 arg0) +{ + gUnk_03000FD0.fadeSpeed = arg0; + gUnk_03000FD0.fadeType ^= 1; + gUnk_03000FD0.field_0x0 = 1; + gUnk_03000FD0.fadeDuration = 0x100; +} + +void sub_08050110(u32 param_1, u32 param_2, u32 fadeType, u32 fadeSpeed) +{ + if ((fadeType & 1) != 0) { + gUnk_03000FD0.field_0x10 = 0x96; + } + else { + gUnk_03000FD0.field_0x10 = 0; + } + gUnk_03000FD0.field_0x12 = param_1; + gUnk_03000FD0.field_0x14 = param_2; + gUnk_03000FD0.field_0x16 = 0x3f3f; + gUnk_03000FD0.field_0x18 = 0; + DoFade(fadeType, fadeSpeed); +} \ No newline at end of file diff --git a/src/sub_080A3B84.c b/src/sub_080A3B84.c new file mode 100644 index 00000000..1a605c2a --- /dev/null +++ b/src/sub_080A3B84.c @@ -0,0 +1,21 @@ +#include "global.h" +#include "functions.h" +#include "menu.h" +#include "structures.h" + +extern void (*const gUnk_081280C4[])(); + +void DrawKinstoneMenu(void) +{ + gUnk_030010A0.field_0x24[8] = 2; + sub_080AD90C(); + gUnk_081280C4[gMenu.menuType](); + sub_080A3B74(); + sub_080A4054(); + sub_0801C1D4(); + sub_0801C208(); + sub_0805E5C0(); + sub_080AD9B0(); + sub_080AD918(); + gUnk_030010A0.field_0x24[8] = 0; +} \ No newline at end of file From e0cfbb15a5cfc7c4287cc9242abc3b5492dd4895 Mon Sep 17 00:00:00 2001 From: theo3 Date: Wed, 22 Jul 2020 23:06:28 -0700 Subject: [PATCH 6/8] relocate SplitWord, SplitHWord to global.h --- include/entity.h | 14 -------------- include/global.h | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/include/entity.h b/include/entity.h index 14b963f3..ef1f6303 100644 --- a/include/entity.h +++ b/include/entity.h @@ -25,20 +25,6 @@ typedef struct { u8 unknown2[4]; } BoundingBox; -union SplitWord { - s32 WORD; - struct { - s16 LO, HI; - } HALF; -}; - -union SplitHWord { - u16 HWORD; - struct { - u8 LO, HI; - } PACKED HALF; -} PACKED; - typedef struct Entity { /*0x00*/ u32* field_0x0; /*0x04*/ u32* field_0x4; diff --git a/include/global.h b/include/global.h index d312b7b2..6738b6b8 100644 --- a/include/global.h +++ b/include/global.h @@ -59,4 +59,18 @@ struct UCoords16 u16 y; }; +union SplitWord { + s32 WORD; + struct { + s16 LO, HI; + } HALF; +}; + +union SplitHWord { + u16 HWORD; + struct { + u8 LO, HI; + } PACKED HALF; +} PACKED; + #endif // GUARD_GLOBAL_H From f4320b6fcd6b95fe96fabc29b2e7e1d4cf7f2fd4 Mon Sep 17 00:00:00 2001 From: theo3 Date: Wed, 22 Jul 2020 23:35:26 -0700 Subject: [PATCH 7/8] Menu struct fixed for good this time --- asm/code_080A3BD0.s | 68 ---------------------------------------- include/functions.h | 7 +++++ include/menu.h | 4 ++- src/introSetTransition.c | 6 ++-- src/sub_080A3B84.c | 40 +++++++++++++++++++++++ 5 files changed, 53 insertions(+), 72 deletions(-) diff --git a/asm/code_080A3BD0.s b/asm/code_080A3BD0.s index 20ecf8e0..3cd69ca3 100644 --- a/asm/code_080A3BD0.s +++ b/asm/code_080A3BD0.s @@ -6,74 +6,6 @@ .text - thumb_func_start sub_080A3BD0 -sub_080A3BD0: @ 0x080A3BD0 - push {r4, lr} - ldr r0, _080A3C54 @ =gMenu - movs r1, #0 - movs r4, #1 - strb r4, [r0, #1] - adds r0, #0x2a - strb r1, [r0] - bl sub_080A4D34 - movs r0, #0xcb - bl LoadPalettesByPaletteGroupIndex - movs r0, #0x75 - bl sub_0801D7EC - bl sub_080A4494 - adds r1, r0, #7 - cmp r1, #0 - bge _080A3BFA - adds r1, #7 -_080A3BFA: - asrs r0, r1, #3 - subs r0, #6 - cmp r0, #0 - bge _080A3C04 - movs r0, #0 -_080A3C04: - cmp r0, #6 - ble _080A3C0A - movs r0, #6 -_080A3C0A: - adds r0, #0x76 - bl sub_0801D7EC - ldr r1, _080A3C58 @ =gScreen - ldrh r2, [r1] - movs r3, #0xf0 - lsls r3, r3, #5 - adds r0, r3, #0 - orrs r0, r2 - strh r0, [r1] - ldr r0, _080A3C5C @ =0x00001C01 - strh r0, [r1, #0x14] - ldr r0, _080A3C60 @ =0x00001D02 - strh r0, [r1, #0x20] - ldr r0, _080A3C64 @ =0x00001E0B - strh r0, [r1, #0x2c] - strh r4, [r1, #0x1a] - strh r4, [r1, #0x26] - strh r4, [r1, #0x32] - bl sub_080A4528 - bl sub_080A4398 - movs r0, #0 - bl sub_0801E738 - ldr r0, _080A3C68 @ =gUnk_081280DC - bl sub_080A70AC - movs r0, #1 - bl sub_080A7114 - movs r0, #6 - movs r1, #8 - bl DoFade - pop {r4, pc} - .align 2, 0 -_080A3C54: .4byte gMenu -_080A3C58: .4byte gScreen -_080A3C5C: .4byte 0x00001C01 -_080A3C60: .4byte 0x00001D02 -_080A3C64: .4byte 0x00001E0B -_080A3C68: .4byte gUnk_081280DC - thumb_func_start sub_080A3C6C sub_080A3C6C: @ 0x080A3C6C push {r4, r5, lr} diff --git a/include/functions.h b/include/functions.h index 2ba8c186..1c316dea 100644 --- a/include/functions.h +++ b/include/functions.h @@ -176,4 +176,11 @@ extern void sub_080A3B74(void); extern void sub_080A4054(void); extern void sub_0801C1D4(void); extern void sub_0801C208(void); +extern void sub_080A4D34(void); +extern u32 sub_080A4494(void); +extern void sub_080A4528(void); +extern void sub_080A4398(void); +extern void sub_0801E738(u32); +extern void sub_080A70AC(void*); +extern void sub_080A7114(u32); #endif diff --git a/include/menu.h b/include/menu.h index 13564462..7da2a591 100644 --- a/include/menu.h +++ b/include/menu.h @@ -19,8 +19,10 @@ typedef struct { typedef struct { u8 field_0x0; - u16 field_0x1; + u8 field_0x1; + u8 field_0x2; u8 field_0x3; + u8 field_0x4; u8 menuType; u8 overlayType; u8 storyPanelIndex; diff --git a/src/introSetTransition.c b/src/introSetTransition.c index 638bf4c6..32bb02c3 100644 --- a/src/introSetTransition.c +++ b/src/introSetTransition.c @@ -117,7 +117,7 @@ void sub_080AD474(void) gMenu.menuType = 1; gMenu.overlayType = 0; gMenu.transitionTimer = 0x1e; - gMenu.field_0x3 = 7; + gMenu.field_0x4 = 7; EraseAllEntities(); sub_080ADD30(sub_0801CFA8(0)); gUnk_02024490 = 1; @@ -191,8 +191,8 @@ void sub_080AD474(void) sub_080ADA14(0x1ff,0); } } - if (gMenu.field_0x3 != ((struct_02000000*)0x2000000)->gameLanguage) { - gMenu.field_0x3 = ((struct_02000000*)0x2000000)->gameLanguage; + if (gMenu.field_0x4 != ((struct_02000000*)0x2000000)->gameLanguage) { + gMenu.field_0x4 = ((struct_02000000*)0x2000000)->gameLanguage; sub_0801D7EC(3); } sub_080AD89C(); diff --git a/src/sub_080A3B84.c b/src/sub_080A3B84.c index 1a605c2a..80eff685 100644 --- a/src/sub_080A3B84.c +++ b/src/sub_080A3B84.c @@ -2,6 +2,7 @@ #include "functions.h" #include "menu.h" #include "structures.h" +#include "screen.h" extern void (*const gUnk_081280C4[])(); @@ -18,4 +19,43 @@ void DrawKinstoneMenu(void) sub_080AD9B0(); sub_080AD918(); gUnk_030010A0.field_0x24[8] = 0; +} + +extern void gUnk_081280DC; + +void sub_080A3BD0(void) +{ + s32 iVar1; + s32 iVar2; + + gMenu.field_0x1 = 1; + gMenu.field_0x12[0x17] = 0; + sub_080A4D34(); + LoadPalettesByPaletteGroupIndex(0xcb); + sub_0801D7EC(0x75); + + iVar1 = sub_080A4494(); + iVar2 = iVar1 + 7; + if (iVar2 < 0) { + iVar2 += 0x7; + } + + iVar1 = (iVar2 >> 3) - 6; + iVar1 = max(iVar1, 0); + iVar1 = min(iVar1, 6); + + sub_0801D7EC(iVar1 + 0x76); + gScreen.lcd.lcdControl2 |= 0x1e00; + gScreen.bg1.unk = 0x1c01; + gScreen.bg2.unk = 0x1d02; + gScreen.affine.unk2 = 0x1e0b; + gScreen.bg2.bg0xOffset = 1; + gScreen.affine.bg2xOffset = 1; + gScreen.affine.bg3xOffset = 1; + sub_080A4528(); + sub_080A4398(); + sub_0801E738(0); + sub_080A70AC(&gUnk_081280DC); + sub_080A7114(1); + DoFade(6, 8); } \ No newline at end of file From 2d286c0b34506a3c52b92bd3655ccce666cb580a Mon Sep 17 00:00:00 2001 From: theo3 Date: Thu, 23 Jul 2020 22:48:16 -0700 Subject: [PATCH 8/8] rupeeLike.c OK --- asm/armos.s | 2 +- asm/code_080011C4.s | 4 +- asm/code_08003FC4.s | 6 +- asm/code_080041E8.s | 6 +- asm/code_0806FA6C.s | 8 +- asm/code_08070698.s | 2 +- asm/code_080A5574.s | 4 +- asm/gyorgFemaleEye.s | 4 +- asm/helmasaur.s | 4 +- asm/likeLike.s | 4 +- asm/object29.s | 2 +- asm/object6A.s | 2 +- asm/objectC1.s | 2 +- asm/octorokGolden.s | 4 +- asm/peahat.s | 8 +- asm/rope.s | 2 +- asm/ropeGolden.s | 4 +- asm/rupeeLike.s | 754 -------------------------------------- asm/spinyBeetle.s | 2 +- asm/tektite.s | 2 +- asm/tektiteGolden.s | 206 +---------- include/entity.h | 12 +- include/functions.h | 15 + include/link.h | 2 +- linker.ld | 3 +- src/enemy/bombPeahat.c | 2 +- src/enemy/octorok.c | 4 +- src/enemy/rupeeLike.c | 281 ++++++++++++++ src/enemy/tektiteGolden.c | 108 ++++++ src/item11.c | 2 +- src/npc/forestMinish.c | 8 +- src/npc/goron.c | 4 +- src/npc/smith.c | 4 +- src/npc/syrup.c | 2 +- src/npc/zelda.c | 12 +- src/object/object1C.c | 2 +- src/object/well.c | 6 +- 37 files changed, 477 insertions(+), 1022 deletions(-) delete mode 100644 asm/rupeeLike.s create mode 100644 src/enemy/rupeeLike.c create mode 100644 src/enemy/tektiteGolden.c diff --git a/asm/armos.s b/asm/armos.s index 31a0c733..f8c539ab 100644 --- a/asm/armos.s +++ b/asm/armos.s @@ -237,7 +237,7 @@ sub_08030338: @ 0x08030338 _0803034C: adds r0, r4, #0 movs r1, #3 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames adds r0, r4, #0 adds r0, #0x84 ldr r0, [r0] diff --git a/asm/code_080011C4.s b/asm/code_080011C4.s index 3e1c1675..6296d255 100644 --- a/asm/code_080011C4.s +++ b/asm/code_080011C4.s @@ -68,7 +68,7 @@ _08001230: beq _0800123E strb r1, [r0, #0xe] movs r1, #4 - ldr r3, _0800135C @ =InitializeAnimationAnimation + ldr r3, _0800135C @ =UpdateAnimationVariableFrames bx r3 _0800123E: ldr r3, _08001360 @ =sub_080043B4 @@ -238,7 +238,7 @@ _08001352: bx lr .align 2, 0 _08001358: .4byte gEnemyFunctions -_0800135C: .4byte InitializeAnimationAnimation +_0800135C: .4byte UpdateAnimationVariableFrames _08001360: .4byte sub_080043B4 _08001364: .4byte 0x00001800 _08001368: .4byte gUnk_080012C8 diff --git a/asm/code_08003FC4.s b/asm/code_08003FC4.s index c14abb66..0fa902ed 100644 --- a/asm/code_08003FC4.s +++ b/asm/code_08003FC4.s @@ -431,8 +431,8 @@ InitializeAnimation: @ 0x08004260 GetNextFrame: @ 0x08004274 movs r1, #1 - non_word_aligned_thumb_func_start InitializeAnimationAnimation -InitializeAnimationAnimation: @ 0x08004276 + non_word_aligned_thumb_func_start UpdateAnimationVariableFrames +UpdateAnimationVariableFrames: @ 0x08004276 movs r3, #0x59 ldrb r2, [r0, r3] subs r2, r2, r1 @@ -478,7 +478,7 @@ UpdateAnimationSingleFrame: @ 0x080042B8 non_word_aligned_thumb_func_start sub_080042BA sub_080042BA: @ 0x080042BA push {lr} - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames _080042C0: pop {r1} mov lr, r1 diff --git a/asm/code_080041E8.s b/asm/code_080041E8.s index 1377f76e..2ebb96fb 100644 --- a/asm/code_080041E8.s +++ b/asm/code_080041E8.s @@ -97,8 +97,8 @@ InitializeAnimation: @ 0x08004260 GetNextFrame: @ 0x08004274 movs r1, #1 - non_word_aligned_thumb_func_start InitializeAnimationAnimation -InitializeAnimationAnimation: @ 0x08004276 + non_word_aligned_thumb_func_start UpdateAnimationVariableFrames +UpdateAnimationVariableFrames: @ 0x08004276 movs r3, #0x59 ldrb r2, [r0, r3] subs r2, r2, r1 @@ -144,7 +144,7 @@ UpdateAnimationSingleFrame: @ 0x080042B8 non_word_aligned_thumb_func_start sub_080042BA sub_080042BA: @ 0x080042BA push {lr} - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames _080042C0: pop {r1} mov lr, r1 diff --git a/asm/code_0806FA6C.s b/asm/code_0806FA6C.s index 893ae0f3..7764e708 100644 --- a/asm/code_0806FA6C.s +++ b/asm/code_0806FA6C.s @@ -671,7 +671,7 @@ SetSpriteSubEntryOffsetData1: @ 0x0806FF88 adds r4, r4, r2 ldrh r0, [r5, #2] ldrb r1, [r5, #1] - bl sub_080700C8 + bl GetSpriteSubEntryOffsetDataPointer ldrb r1, [r5, #6] ldrb r2, [r0] adds r1, r1, r2 @@ -715,7 +715,7 @@ SetSpriteSubEntryOffsetData2: @ 0x0806FFD8 adds r4, r4, r2 ldrh r0, [r5, #2] ldrb r1, [r5, #1] - bl sub_080700C8 + bl GetSpriteSubEntryOffsetDataPointer ldrb r1, [r5, #6] ldrb r2, [r0, #2] adds r1, r1, r2 @@ -826,8 +826,8 @@ _080700C4: _080700C6: pop {pc} - thumb_func_start sub_080700C8 -sub_080700C8: @ 0x080700C8 + thumb_func_start GetSpriteSubEntryOffsetDataPointer +GetSpriteSubEntryOffsetDataPointer: @ 0x080700C8 lsls r0, r0, #1 ldr r2, _080700E4 @ =gUnk_089FB780 adds r0, r0, r2 diff --git a/asm/code_08070698.s b/asm/code_08070698.s index 0d0a082f..2e64ca42 100644 --- a/asm/code_08070698.s +++ b/asm/code_08070698.s @@ -1131,7 +1131,7 @@ sub_08070F50: @ 0x08070F50 bl PositionEntityOnTop ldrh r0, [r4, #0x12] ldrb r1, [r4, #0x1e] - bl sub_080700C8 + bl GetSpriteSubEntryOffsetDataPointer ldrb r1, [r0] adds r2, r5, #0 adds r2, #0x62 diff --git a/asm/code_080A5574.s b/asm/code_080A5574.s index ac9fe0fd..1655baf1 100644 --- a/asm/code_080A5574.s +++ b/asm/code_080A5574.s @@ -9785,7 +9785,7 @@ _080AA052: _080AA05E: ldrh r0, [r5, #0x12] ldrb r1, [r5, #0x1e] - bl sub_080700C8 + bl GetSpriteSubEntryOffsetDataPointer adds r3, r0, #0 ldrb r1, [r5, #0x14] movs r0, #4 @@ -9989,7 +9989,7 @@ _080AA1EC: bne _080AA26C ldrh r0, [r4, #0x12] ldrb r1, [r4, #0x1e] - bl sub_080700C8 + bl GetSpriteSubEntryOffsetDataPointer adds r3, r0, #0 ldrb r1, [r4, #0x14] movs r0, #4 diff --git a/asm/gyorgFemaleEye.s b/asm/gyorgFemaleEye.s index 8d9e294c..174b71e2 100644 --- a/asm/gyorgFemaleEye.s +++ b/asm/gyorgFemaleEye.s @@ -391,7 +391,7 @@ _08048C6C: bl InitializeAnimation adds r0, r4, #0 movs r1, #7 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames adds r1, r6, #0 ldrb r4, [r4, #0xa] lsls r1, r4 @@ -419,7 +419,7 @@ _08048CBC: movs r1, #0x1c ands r1, r0 adds r0, r4, #0 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames _08048CE4: adds r0, r4, #0 bl GetNextFrame diff --git a/asm/helmasaur.s b/asm/helmasaur.s index 661bb6de..007bf3fd 100644 --- a/asm/helmasaur.s +++ b/asm/helmasaur.s @@ -238,7 +238,7 @@ sub_0802BD10: @ 0x0802BD10 ands r1, r2 strb r1, [r0, #0x10] movs r1, #2 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames pop {pc} .align 2, 0 @@ -380,7 +380,7 @@ sub_0802BE18: @ 0x0802BE18 push {r4, lr} adds r4, r0, #0 movs r1, #2 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames ldrb r0, [r4, #0xe] subs r0, #1 strb r0, [r4, #0xe] diff --git a/asm/likeLike.s b/asm/likeLike.s index ffa0dba8..cd07a3ec 100644 --- a/asm/likeLike.s +++ b/asm/likeLike.s @@ -412,7 +412,7 @@ sub_0802805C: @ 0x0802805C push {r4, r5, lr} adds r5, r0, #0 movs r1, #2 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames bl sub_0807953C cmp r0, #0 beq _0802807E @@ -454,7 +454,7 @@ _0802809C: bl PositionRelative ldrh r0, [r5, #0x12] ldrb r1, [r5, #0x1e] - bl sub_080700C8 + bl GetSpriteSubEntryOffsetDataPointer ldrb r1, [r0] adds r2, r4, #0 adds r2, #0x62 diff --git a/asm/object29.s b/asm/object29.s index e77d8f33..8c442a10 100644 --- a/asm/object29.s +++ b/asm/object29.s @@ -23,7 +23,7 @@ Object29: @ 0x08089848 ands r1, r0 adds r1, #1 adds r0, r4, #0 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames pop {r4, pc} .align 2, 0 _08089870: .4byte gUnk_08120D90 diff --git a/asm/object6A.s b/asm/object6A.s index 057c0c45..7d20335b 100644 --- a/asm/object6A.s +++ b/asm/object6A.s @@ -2269,7 +2269,7 @@ _08095BAC: strb r0, [r5, #0x18] ldrh r0, [r2, #0x12] ldrb r1, [r2, #0x1e] - bl sub_080700C8 + bl GetSpriteSubEntryOffsetDataPointer ldrb r1, [r0] adds r2, r5, #0 adds r2, #0x62 diff --git a/asm/objectC1.s b/asm/objectC1.s index 0f96d975..0a6016cb 100644 --- a/asm/objectC1.s +++ b/asm/objectC1.s @@ -256,7 +256,7 @@ _080A273C: bl PositionEntityOnTop ldrh r0, [r4, #0x12] ldrb r1, [r4, #0x1e] - bl sub_080700C8 + bl GetSpriteSubEntryOffsetDataPointer ldrb r1, [r0] adds r2, r5, #0 adds r2, #0x62 diff --git a/asm/octorokGolden.s b/asm/octorokGolden.s index 3c805d39..751b16af 100644 --- a/asm/octorokGolden.s +++ b/asm/octorokGolden.s @@ -133,7 +133,7 @@ _08037D1C: _08037D26: adds r0, r4, #0 movs r1, #2 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames adds r0, r4, #0 bl sub_080AEF88 cmp r0, #0 @@ -158,7 +158,7 @@ sub_08037D54: @ 0x08037D54 push {r4, lr} adds r4, r0, #0 movs r1, #2 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames adds r2, r4, #0 adds r2, #0x5a ldrb r1, [r2] diff --git a/asm/peahat.s b/asm/peahat.s index 8e1cce5b..cb26fd33 100644 --- a/asm/peahat.s +++ b/asm/peahat.s @@ -403,7 +403,7 @@ sub_08020220: @ 0x08020220 movs r1, #4 subs r1, r1, r0 adds r0, r5, #0 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames b _08020292 _0802024C: movs r0, #3 @@ -437,7 +437,7 @@ _08020284: _0802028A: adds r0, r5, #0 movs r1, #4 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames _08020292: pop {r4, r5, pc} @@ -495,7 +495,7 @@ _080202F8: _080202FE: adds r0, r4, #0 movs r1, #4 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames pop {r4, pc} thumb_func_start sub_08020308 @@ -533,7 +533,7 @@ _08020340: bl sub_080AEFE0 adds r0, r4, #0 movs r1, #4 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames _0802034E: pop {r4, pc} diff --git a/asm/rope.s b/asm/rope.s index f50525be..49a1a076 100644 --- a/asm/rope.s +++ b/asm/rope.s @@ -324,7 +324,7 @@ sub_080315BC: @ 0x080315BC strb r0, [r4, #0xe] adds r0, r4, #0 movs r1, #2 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames b _080315FC _080315D4: adds r0, r4, #0 diff --git a/asm/ropeGolden.s b/asm/ropeGolden.s index 7b6e7b10..f61b871f 100644 --- a/asm/ropeGolden.s +++ b/asm/ropeGolden.s @@ -150,7 +150,7 @@ _080382B8: .4byte gLinkEntity _080382BC: adds r0, r4, #0 movs r1, #2 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames adds r0, r4, #0 bl sub_080AEF88 cmp r0, #0 @@ -192,7 +192,7 @@ sub_08038304: @ 0x08038304 push {r4, r5, r6, lr} adds r4, r0, #0 movs r1, #2 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames adds r0, r4, #0 bl sub_080AEF88 cmp r0, #0 diff --git a/asm/rupeeLike.s b/asm/rupeeLike.s deleted file mode 100644 index 72b5a3c8..00000000 --- a/asm/rupeeLike.s +++ /dev/null @@ -1,754 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start RupeeLike -RupeeLike: @ 0x080292A0 - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xb] - cmp r0, #0 - bne _080292F8 - adds r0, r5, #0 - bl sub_080043E8 - lsls r0, r0, #0x18 - lsrs r4, r0, #0x18 - cmp r4, #0 - beq _080292CE - ldrb r0, [r5, #0xc] - cmp r0, #4 - bne _080292C4 - adds r0, r5, #0 - bl sub_080296D8 -_080292C4: - adds r0, r5, #0 - adds r1, r4, #0 - bl sub_08001290 - b _080292FE -_080292CE: - ldr r4, _080292F4 @ =gUnk_080CCC00 - adds r0, r5, #0 - bl GetNextFunction - lsls r0, r0, #2 - adds r0, r0, r4 - ldr r1, [r0] - adds r0, r5, #0 - bl _call_via_r1 - movs r3, #0x10 - rsbs r3, r3, #0 - adds r0, r5, #0 - movs r1, #0 - movs r2, #1 - bl SetChildOffset - b _080292FE - .align 2, 0 -_080292F4: .4byte gUnk_080CCC00 -_080292F8: - adds r0, r5, #0 - bl sub_080293DC -_080292FE: - pop {r4, r5, pc} - - thumb_func_start sub_08029300 -sub_08029300: @ 0x08029300 - push {lr} - ldr r2, _08029314 @ =gUnk_080CCC18 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08029314: .4byte gUnk_080CCC18 - - thumb_func_start sub_08029318 -sub_08029318: @ 0x08029318 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x3f - ldrb r0, [r0] - cmp r0, #0x8e - bne _0802932C - adds r0, r4, #0 - bl sub_08029770 - b _080293A6 -_0802932C: - ldrb r0, [r4, #0xc] - cmp r0, #4 - bne _08029338 - adds r0, r4, #0 - bl sub_080296D8 -_08029338: - ldr r0, [r4, #0x4c] - ldrb r0, [r0, #8] - cmp r0, #1 - bne _08029394 - ldrb r0, [r4, #0xc] - cmp r0, #2 - bne _08029356 - adds r0, r4, #0 - movs r1, #0 - bl InitializeAnimation - ldr r0, [r4, #0x54] - movs r1, #4 - bl InitializeAnimation -_08029356: - movs r1, #0 - movs r0, #4 - strb r0, [r4, #0xc] - movs r0, #0x3c - strb r0, [r4, #0xe] - strb r1, [r4, #0xf] - adds r1, r4, #0 - adds r1, #0x83 - movs r0, #0x41 - strb r0, [r1] - adds r2, r4, #0 - adds r2, #0x3b - ldrb r1, [r2] - movs r0, #0xfc - ands r0, r1 - strb r0, [r2] - ldr r0, _08029390 @ =gLinkEntity - adds r0, #0x29 - ldrb r0, [r0] - lsls r0, r0, #0x1a - lsrs r0, r0, #0x1d - adds r1, r4, #0 - adds r1, #0x80 - strb r0, [r1] - movs r0, #0x82 - lsls r0, r0, #1 - bl sub_08004488 - b _080293A6 - .align 2, 0 -_08029390: .4byte gLinkEntity -_08029394: - adds r0, r4, #0 - adds r0, #0x43 - ldrb r0, [r0] - cmp r0, #0 - beq _080293A6 - adds r0, r4, #0 - movs r1, #0x1c - bl sub_0804A9FC -_080293A6: - ldr r1, _080293B0 @ =gUnk_080CCC00 - adds r0, r4, #0 - bl sub_0804AA30 - pop {r4, pc} - .align 2, 0 -_080293B0: .4byte gUnk_080CCC00 - - thumb_func_start sub_080293B4 -sub_080293B4: @ 0x080293B4 - push {lr} - ldr r3, _080293D4 @ =gUnk_080CCC34 - adds r1, r0, #0 - adds r1, #0x84 - ldrb r2, [r1] - lsls r1, r2, #1 - adds r1, r1, r2 - ldrb r2, [r0, #0xa] - adds r1, r1, r2 - adds r1, r1, r3 - ldrb r2, [r1] - movs r1, #0xff - bl CreateDeathFx - pop {pc} - .align 2, 0 -_080293D4: .4byte gUnk_080CCC34 - - thumb_func_start nullsub_141 -nullsub_141: @ 0x080293D8 - bx lr - .align 2, 0 - - thumb_func_start sub_080293DC -sub_080293DC: @ 0x080293DC - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x50] - adds r1, r4, #0 - bl CopyPositionAndSpriteOffset - ldrh r0, [r4, #0x32] - adds r0, #1 - strh r0, [r4, #0x32] - ldrh r0, [r4, #0x36] - subs r0, #1 - strh r0, [r4, #0x36] - ldr r1, _08029408 @ =gUnk_080CCC3C - ldrb r0, [r4, #0xc] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - pop {r4, pc} - .align 2, 0 -_08029408: .4byte gUnk_080CCC3C - - thumb_func_start sub_0802940C -sub_0802940C: @ 0x0802940C - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0xa] - movs r0, #0x17 - bl CreateEnemy - adds r5, r0, #0 - cmp r5, #0 - beq _0802944A - adds r0, r4, #0 - bl sub_0804A720 - str r4, [r5, #0x50] - movs r1, #0 - movs r0, #1 - strb r0, [r5, #0xb] - str r5, [r4, #0x54] - adds r0, r4, #0 - adds r0, #0x81 - strb r1, [r0] - adds r0, #3 - strb r1, [r0] - ldrb r0, [r4, #0x1a] - lsls r0, r0, #0x1c - lsrs r0, r0, #0x1c - adds r1, r4, #0 - adds r1, #0x82 - strb r0, [r1] - adds r0, r4, #0 - bl sub_080297F0 -_0802944A: - pop {r4, r5, pc} - - thumb_func_start sub_0802944C -sub_0802944C: @ 0x0802944C - push {r4, lr} - adds r4, r0, #0 - bl sub_080296C8 - adds r0, r4, #0 - adds r0, #0x81 - ldrb r0, [r0] - cmp r0, #0 - beq _08029470 - adds r0, r4, #0 - movs r1, #1 - bl sub_08049FDC - cmp r0, #0 - beq _08029470 - adds r0, r4, #0 - bl sub_08029770 -_08029470: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08029474 -sub_08029474: @ 0x08029474 - push {r4, lr} - adds r4, r0, #0 - bl sub_080296C8 - adds r3, r4, #0 - adds r3, #0x5a - ldrb r2, [r3] - movs r0, #0x80 - ands r0, r2 - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - beq _080294C0 - movs r0, #3 - strb r0, [r4, #0xc] - movs r0, #8 - strb r0, [r4, #0xe] - ldr r1, _080294BC @ =gLinkEntity - adds r0, r4, #0 - bl GetFacingDirection - strb r0, [r4, #0x15] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x1c - strb r0, [r4, #0x14] - ldrb r1, [r4, #0x14] - adds r0, r4, #0 - bl InitializeAnimation - ldr r0, [r4, #0x54] - ldrb r1, [r4, #0x14] - adds r1, #4 - bl InitializeAnimation - b _080294D2 - .align 2, 0 -_080294BC: .4byte gLinkEntity -_080294C0: - lsls r0, r2, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #1 - bne _080294D2 - strb r1, [r3] - ldrb r0, [r4, #0x10] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] -_080294D2: - pop {r4, pc} - - thumb_func_start sub_080294D4 -sub_080294D4: @ 0x080294D4 - push {r4, lr} - adds r4, r0, #0 - movs r1, #1 - bl sub_08049FDC - cmp r0, #0 - beq _0802951C - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08029508 - movs r0, #8 - strb r0, [r4, #0xe] - ldr r1, _08029518 @ =gLinkEntity - adds r0, r4, #0 - bl GetFacingDirection - adds r1, r0, #0 - adds r0, r4, #0 - bl sub_08004596 - adds r0, r4, #0 - bl sub_0802969C -_08029508: - adds r0, r4, #0 - bl sub_080AEF88 - adds r0, r4, #0 - bl sub_080296C8 - b _08029538 - .align 2, 0 -_08029518: .4byte gLinkEntity -_0802951C: - movs r0, #6 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - adds r0, r4, #0 - movs r1, #3 - bl InitializeAnimation - ldr r0, [r4, #0x54] - movs r1, #7 - bl InitializeAnimation -_08029538: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0802953C -sub_0802953C: @ 0x0802953C - push {r4, r5, lr} - adds r5, r0, #0 - bl sub_080296C8 - adds r0, r5, #0 - bl sub_080296C8 - bl sub_0807953C - cmp r0, #0 - beq _08029558 - ldrb r0, [r5, #0xf] - adds r0, #1 - strb r0, [r5, #0xf] -_08029558: - ldrb r0, [r5, #0xe] - cmp r0, #0 - beq _08029562 - subs r0, #1 - strb r0, [r5, #0xe] -_08029562: - ldrb r0, [r5, #0xf] - cmp r0, #0x2d - bhi _08029572 - ldr r0, _08029580 @ =gUnk_02002A40 - adds r0, #0xc0 - ldrh r0, [r0] - cmp r0, #0 - bne _08029584 -_08029572: - ldrb r0, [r5, #0xe] - cmp r0, #0 - bne _08029584 - adds r0, r5, #0 - bl sub_080296D8 - b _080295FE - .align 2, 0 -_08029580: .4byte gUnk_02002A40 -_08029584: - bl sub_08077B2C - ldr r2, _08029600 @ =gLinkState - ldrb r1, [r2, #0x1a] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r2, #0x1a] - ldr r4, _08029604 @ =gLinkEntity - movs r3, #0x80 - lsls r3, r3, #9 - adds r0, r5, #0 - adds r1, r4, #0 - movs r2, #0 - bl PositionRelative - ldrh r0, [r5, #0x12] - ldrb r1, [r5, #0x1e] - bl sub_080700C8 - ldrb r1, [r0] - adds r2, r4, #0 - adds r2, #0x62 - strb r1, [r2] - ldrb r0, [r0, #1] - subs r0, #1 - adds r1, r4, #0 - adds r1, #0x63 - strb r0, [r1] - adds r4, #0x29 - ldrb r1, [r4] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4] - adds r1, r5, #0 - adds r1, #0x83 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080295FE - movs r0, #0x41 - strb r0, [r1] - ldr r0, _08029608 @ =gUnk_02002A40 - adds r0, #0xc0 - ldrh r0, [r0] - cmp r0, #0 - beq _080295FE - ldr r1, _0802960C @ =gUnk_080CCC44 - ldrb r0, [r5, #0xa] - adds r0, r0, r1 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - bl ModRupees - adds r1, r5, #0 - adds r1, #0x84 - movs r0, #1 - strb r0, [r1] -_080295FE: - pop {r4, r5, pc} - .align 2, 0 -_08029600: .4byte gLinkState -_08029604: .4byte gLinkEntity -_08029608: .4byte gUnk_02002A40 -_0802960C: .4byte gUnk_080CCC44 - - thumb_func_start sub_08029610 -sub_08029610: @ 0x08029610 - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xf] - subs r0, #1 - strb r0, [r1, #0xf] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08029628 - movs r0, #3 - strb r0, [r1, #0xc] - movs r0, #1 - strb r0, [r1, #0xe] -_08029628: - adds r0, r1, #0 - bl sub_080296C8 - pop {pc} - - thumb_func_start sub_08029630 -sub_08029630: @ 0x08029630 - push {r4, lr} - adds r4, r0, #0 - bl sub_080296C8 - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0802965E - adds r1, r4, #0 - adds r1, #0x81 - movs r0, #1 - strb r0, [r1] - ldr r2, [r4, #0x54] - ldrb r1, [r2, #0x18] - subs r0, #5 - ands r0, r1 - strb r0, [r2, #0x18] - adds r0, r4, #0 - bl sub_080297F0 -_0802965E: - pop {r4, pc} - - thumb_func_start sub_08029660 -sub_08029660: @ 0x08029660 - movs r1, #1 - strb r1, [r0, #0xc] - movs r1, #0xd1 - strh r1, [r0, #0x12] - ldr r2, _08029684 @ =gUnk_080CCC47 - ldrb r1, [r0, #0xa] - adds r1, r1, r2 - ldrb r2, [r1] - movs r1, #0xf - ands r2, r1 - ldrb r3, [r0, #0x1a] - movs r1, #0x10 - rsbs r1, r1, #0 - ands r1, r3 - orrs r1, r2 - strb r1, [r0, #0x1a] - bx lr - .align 2, 0 -_08029684: .4byte gUnk_080CCC47 - - thumb_func_start sub_08029688 -sub_08029688: @ 0x08029688 - push {lr} - adds r1, r0, #0 - ldr r0, [r1, #0x50] - ldr r0, [r0, #4] - cmp r0, #0 - bne _0802969A - adds r0, r1, #0 - bl DeleteEntity -_0802969A: - pop {pc} - - thumb_func_start sub_0802969C -sub_0802969C: @ 0x0802969C - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r1, [r5, #0x15] - movs r0, #0xf - ands r0, r1 - cmp r0, #0 - beq _080296C4 - lsrs r4, r1, #4 - ldrb r0, [r5, #0x14] - cmp r4, r0 - beq _080296C4 - strb r4, [r5, #0x14] - adds r0, r5, #0 - adds r1, r4, #0 - bl InitializeAnimation - ldr r0, [r5, #0x54] - adds r1, r4, #4 - bl InitializeAnimation -_080296C4: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_080296C8 -sub_080296C8: @ 0x080296C8 - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - ldr r0, [r4, #0x54] - bl GetNextFrame - pop {r4, pc} - - thumb_func_start sub_080296D8 -sub_080296D8: @ 0x080296D8 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r2, _08029764 @ =gLinkState - movs r0, #0x41 - strb r0, [r2, #2] - ldr r0, [r2, #0x30] - movs r1, #0x11 - rsbs r1, r1, #0 - ands r0, r1 - str r0, [r2, #0x30] - ldr r0, _08029768 @ =gLinkEntity - mov ip, r0 - ldrb r0, [r0, #0x10] - movs r1, #0x80 - orrs r0, r1 - mov r1, ip - strb r0, [r1, #0x10] - movs r0, #0xc0 - lsls r0, r0, #9 - str r0, [r1, #0x20] - adds r1, #0x3d - movs r0, #0xa6 - strb r0, [r1] - movs r3, #0 - ldr r0, _0802976C @ =0x0000FFFE - mov r1, ip - strh r0, [r1, #0x36] - ldrb r0, [r1, #0x14] - lsls r0, r0, #2 - strb r0, [r1, #0x15] - adds r0, r4, #0 - adds r0, #0x80 - ldrb r0, [r0] - mov r5, ip - adds r5, #0x29 - movs r1, #7 - ands r1, r0 - lsls r1, r1, #3 - ldrb r2, [r5] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5] - mov r0, ip - adds r0, #0x63 - strb r3, [r0] - movs r0, #0xa0 - lsls r0, r0, #1 - mov r1, ip - strh r0, [r1, #0x24] - movs r0, #5 - strb r0, [r4, #0xc] - movs r0, #0x3c - strb r0, [r4, #0xf] - adds r2, r4, #0 - adds r2, #0x3b - ldrb r1, [r2] - movs r0, #3 - orrs r0, r1 - strb r0, [r2] - adds r1, r4, #0 - adds r1, #0x3d - movs r0, #0 - ldrsb r0, [r1, r0] - cmp r0, #0 - bne _08029762 - movs r0, #0xf4 - strb r0, [r1] -_08029762: - pop {r4, r5, pc} - .align 2, 0 -_08029764: .4byte gLinkState -_08029768: .4byte gLinkEntity -_0802976C: .4byte 0x0000FFFE - - thumb_func_start sub_08029770 -sub_08029770: @ 0x08029770 - push {r4, lr} - adds r4, r0, #0 - movs r1, #0x73 - bl LoadFixedGFX - cmp r0, #0 - beq _080297E8 - movs r0, #2 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - movs r0, #0xd1 - strh r0, [r4, #0x12] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #0x18 - orrs r0, r1 - strb r0, [r2] - adds r0, r4, #0 - adds r0, #0x82 - ldrb r1, [r0] - movs r0, #0xf - ands r1, r0 - ldrb r2, [r4, #0x1a] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x1a] - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x8d - strb r0, [r1] - ldr r0, _080297EC @ =gUnk_080FD260 - str r0, [r4, #0x48] - adds r0, r4, #0 - movs r1, #2 - bl InitializeAnimation - ldr r2, [r4, #0x54] - ldrb r1, [r2, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r2, #0x18] - ldr r0, [r4, #0x54] - movs r1, #6 - bl InitializeAnimation - adds r0, r4, #0 - bl sub_080A29BC -_080297E8: - pop {r4, pc} - .align 2, 0 -_080297EC: .4byte gUnk_080FD260 - - thumb_func_start sub_080297F0 -sub_080297F0: @ 0x080297F0 - push {r4, lr} - adds r4, r0, #0 - movs r2, #1 - movs r0, #1 - strb r0, [r4, #0xc] - movs r0, #0x78 - strb r0, [r4, #0xe] - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - orrs r0, r2 - strb r0, [r4, #0x18] - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x8e - strb r0, [r1] - adds r0, r4, #0 - bl sub_080AE068 - ldr r0, _08029850 @ =0x00000143 - strh r0, [r4, #0x12] - ldr r1, _08029854 @ =gUnk_080CCC47 - ldrb r0, [r4, #0xa] - adds r0, r0, r1 - ldrb r1, [r0] - movs r0, #0xf - ands r1, r0 - ldrb r2, [r4, #0x1a] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x1a] - adds r1, r4, #0 - adds r1, #0x60 - movs r0, #9 - strh r0, [r1] - adds r0, r4, #0 - movs r1, #0x54 - bl InitializeAnimation - pop {r4, pc} - .align 2, 0 -_08029850: .4byte 0x00000143 -_08029854: .4byte gUnk_080CCC47 diff --git a/asm/spinyBeetle.s b/asm/spinyBeetle.s index 84bb7429..00fc6513 100644 --- a/asm/spinyBeetle.s +++ b/asm/spinyBeetle.s @@ -662,7 +662,7 @@ sub_08033C94: @ 0x08033C94 push {r4, lr} adds r4, r0, #0 movs r1, #3 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames adds r1, r4, #0 adds r1, #0x79 ldrb r0, [r1] diff --git a/asm/tektite.s b/asm/tektite.s index 5f862824..f0b0aed9 100644 --- a/asm/tektite.s +++ b/asm/tektite.s @@ -211,7 +211,7 @@ sub_0802F284: @ 0x0802F284 bls _0802F298 adds r0, r4, #0 movs r1, #2 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames b _0802F29E _0802F298: adds r0, r4, #0 diff --git a/asm/tektiteGolden.s b/asm/tektiteGolden.s index 8abda317..d51c9728 100644 --- a/asm/tektiteGolden.s +++ b/asm/tektiteGolden.s @@ -6,214 +6,12 @@ .text - - thumb_func_start TektiteGolden -TektiteGolden: @ 0x08037EC8 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _08037EE4 @ =gUnk_080CF4A0 - bl EnemyFunctionHandler - movs r3, #0x10 - rsbs r3, r3, #0 - adds r0, r4, #0 - movs r1, #0 - movs r2, #1 - bl SetChildOffset - pop {r4, pc} - .align 2, 0 -_08037EE4: .4byte gUnk_080CF4A0 - - thumb_func_start sub_08037EE8 -sub_08037EE8: @ 0x08037EE8 - push {lr} - ldr r2, _08037EFC @ =gUnk_080CF4B8 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08037EFC: .4byte gUnk_080CF4B8 - - thumb_func_start sub_08037F00 -sub_08037F00: @ 0x08037F00 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x43 - ldrb r0, [r0] - cmp r0, #0 - beq _08037F14 - adds r0, r4, #0 - movs r1, #0x1c - bl sub_0804A9FC -_08037F14: - ldr r1, _08037F54 @ =gUnk_080CF4A0 - adds r0, r4, #0 - bl sub_0804AA30 - adds r0, r4, #0 - adds r0, #0x41 - ldrb r0, [r0] - cmp r0, #0x94 - bne _08037F50 - movs r1, #0 - movs r0, #1 - strb r0, [r4, #0xc] - strb r1, [r4, #0xd] - movs r0, #0x14 - strb r0, [r4, #0xe] - strb r1, [r4, #0xf] - adds r0, r4, #0 - adds r0, #0x80 - strb r1, [r0] - movs r1, #0x36 - ldrsh r0, [r4, r1] - cmp r0, #0 - beq _08037F46 - ldr r0, [r4, #0x20] - asrs r0, r0, #2 -_08037F46: - str r0, [r4, #0x20] - adds r0, r4, #0 - movs r1, #0 - bl InitializeAnimation -_08037F50: - pop {r4, pc} - .align 2, 0 -_08037F54: .4byte gUnk_080CF4A0 - - thumb_func_start sub_08037F58 -sub_08037F58: @ 0x08037F58 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x3a - ldrb r1, [r0] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - bne _08037F6E - ldrb r0, [r4, #0xb] - bl SetGlobalFlag -_08037F6E: - ldrb r0, [r4, #0xa] - movs r2, #0x58 - cmp r0, #0 - beq _08037F78 - movs r2, #0x59 -_08037F78: - adds r0, r4, #0 - movs r1, #0xff - bl CreateDeathFx - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08037F84 -sub_08037F84: @ 0x08037F84 - push {r4, lr} - adds r4, r0, #0 - bl sub_08001242 - movs r1, #0x36 - ldrsh r0, [r4, r1] - cmp r0, #0 - beq _08037F9E - movs r1, #0xc0 - lsls r1, r1, #6 - adds r0, r4, #0 - bl sub_08003FC4 -_08037F9E: - pop {r4, pc} - - thumb_func_start sub_08037FA0 -sub_08037FA0: @ 0x08037FA0 - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xb] - bl CheckGlobalFlag - cmp r0, #0 - beq _08037FB2 - bl DeleteThisEntity -_08037FB2: - adds r0, r5, #0 - bl sub_0804A720 - movs r4, #0 - movs r0, #1 - strb r0, [r5, #0xc] - strb r4, [r5, #0xd] - bl Random - movs r1, #0x1f - ands r0, r1 - adds r0, #0x20 - strb r0, [r5, #0xe] - strb r4, [r5, #0xf] - adds r0, r5, #0 - adds r0, #0x80 - strb r4, [r0] - adds r0, r5, #0 - movs r1, #0 - bl InitializeAnimation - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08037FE0 -sub_08037FE0: @ 0x08037FE0 - push {r4, lr} - adds r4, r0, #0 - movs r1, #2 - bl InitializeAnimationAnimation - ldrb r0, [r4, #0xe] - adds r2, r0, #0 - cmp r2, #0 - beq _08037FF8 - subs r0, #1 - strb r0, [r4, #0xe] - b _08038046 -_08037FF8: - ldrb r0, [r4, #0xf] - cmp r0, #0 - beq _0803802C - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08038046 - movs r0, #2 - strb r0, [r4, #0xc] - movs r0, #6 - strb r0, [r4, #0xe] - strb r2, [r4, #0xf] - movs r0, #0xe0 - lsls r0, r0, #0xa - str r0, [r4, #0x20] - adds r0, r4, #0 - bl sub_08038168 - adds r0, r4, #0 - movs r1, #2 - bl InitializeAnimation - b _08038046 -_0803802C: - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08038046 - movs r0, #0x40 - strb r0, [r4, #0xf] - adds r0, r4, #0 - movs r1, #1 - bl InitializeAnimation -_08038046: - pop {r4, pc} - thumb_func_start sub_08038048 sub_08038048: @ 0x08038048 push {r4, r5, r6, lr} adds r4, r0, #0 movs r1, #2 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames adds r0, r4, #0 bl sub_080AEF88 movs r0, #0x36 @@ -315,7 +113,7 @@ sub_08038110: @ 0x08038110 push {r4, lr} adds r4, r0, #0 movs r1, #2 - bl InitializeAnimationAnimation + bl UpdateAnimationVariableFrames adds r0, r4, #0 adds r0, #0x5a ldrb r1, [r0] diff --git a/include/entity.h b/include/entity.h index ef1f6303..b3121fd3 100644 --- a/include/entity.h +++ b/include/entity.h @@ -59,7 +59,13 @@ typedef struct Entity { /* */ u8 b2 : 2; //0x10 /* */ u8 b3 : 2; //0x40 /* */ } PACKED spriteRendering; - /*0x1a*/ u8 palette; + /*0x1a*/ union { + /* */ u8 raw; + /* */ struct { + /* */ u8 b0 : 4; + /* */ u8 b4 : 4; + /* */ } PACKED b; + /* */} PACKED palette; /*0x1b*/ struct { /* */ u8 b0 : 4; /* */ u8 flipX : 2; //0x10 @@ -132,8 +138,8 @@ typedef struct Entity { /*0x78*/ union SplitHWord field_0x78; /*0x7a*/ u16 field_0x7a; /*0x7c*/ union SplitWord field_0x7c; - /*0x80*/ u16 field_0x80; - /*0x82*/ u16 field_0x82; + /*0x80*/ union SplitHWord field_0x80; + /*0x82*/ union SplitHWord field_0x82; /*0x84*/ union SplitHWord cutsceneBeh; /*0x86*/ u16 field_0x86; } Entity; diff --git a/include/functions.h b/include/functions.h index 1c316dea..352cc973 100644 --- a/include/functions.h +++ b/include/functions.h @@ -34,6 +34,11 @@ extern void EraseAllEntities(void); extern void SetTile(u32, u32, u32); extern void SetDirtTile(u32); extern void LoadRoomTileEntities(); //tba +extern Entity* CreateDeathFx(Entity*, u32, u32); +extern void UpdateAnimationVariableFrames(Entity*, u32); +extern void CopyPositionAndSpriteOffset(Entity*, Entity*); +extern u8* GetSpriteSubEntryOffsetDataPointer(u32, u32); +extern u32 LoadFixedGFX(Entity*, u32); // Unidentified extern void sub_0806ED78(Entity*); @@ -183,4 +188,14 @@ extern void sub_080A4398(void); extern void sub_0801E738(u32); extern void sub_080A70AC(void*); extern void sub_080A7114(u32); +extern void sub_08001242(void); +extern void sub_08003FC4(Entity*, u32); +extern u8 sub_080043E8(Entity*); +extern void sub_08001290(Entity*, u32); +extern void sub_08004488(u32); +extern void sub_08004596(Entity*, u32); +extern u32 sub_0807953C(void); +extern void sub_08077B2C(void); +extern void sub_080A29BC(Entity*); +extern void sub_080AE068(Entity*); #endif diff --git a/include/link.h b/include/link.h index 45acee75..ca6508a1 100644 --- a/include/link.h +++ b/include/link.h @@ -94,7 +94,7 @@ extern Entity gLinkEntity; extern u32 GetInventoryValue(u32); extern s32 ModHealth(s32); - +extern void ModRupees(s32); #endif // clang-format on \ No newline at end of file diff --git a/linker.ld b/linker.ld index 09c9c7a4..7714d9f2 100644 --- a/linker.ld +++ b/linker.ld @@ -345,7 +345,7 @@ SECTIONS { asm/likeLike.o(.text); asm/spearMoblin.o(.text); asm/businessScrub.o(.text); - asm/rupeeLike.o(.text); + src/enemy/rupeeLike.o(.text); asm/madderpillar.o(.text); asm/waterDrop.o(.text); asm/wallMaster.o(.text); @@ -385,6 +385,7 @@ SECTIONS { asm/flyingPot.o(.text); asm/gibdo.o(.text); asm/octorokGolden.o(.text); + src/enemy/tektiteGolden.o(.text); asm/tektiteGolden.o(.text); asm/ropeGolden.o(.text); asm/cloudPiranha.o(.text); diff --git a/src/enemy/bombPeahat.c b/src/enemy/bombPeahat.c index 3921737a..da782b85 100644 --- a/src/enemy/bombPeahat.c +++ b/src/enemy/bombPeahat.c @@ -44,7 +44,7 @@ void sub_0802A84C(Entity* this) { } void sub_0802A8AC(Entity *this) { - *((u8 *)&this->field_0x80 + 1) = 0; + this->field_0x80.HALF.HI = 0; if (this->entityType.form < 2) { InitializeAnimation(this, 0); } diff --git a/src/enemy/octorok.c b/src/enemy/octorok.c index ff699ec0..57fc25e3 100644 --- a/src/enemy/octorok.c +++ b/src/enemy/octorok.c @@ -11,7 +11,7 @@ extern void sub_0801ECFC(); extern u32 sub_0806F520(); extern void sub_0806F4E8(); extern void sub_0806F3E4(); -extern void InitializeAnimationAnimation(); +extern void UpdateAnimationVariableFrames(); extern void sub_0804A720(); extern u32 Random(); extern void sub_0801ED14(); @@ -75,7 +75,7 @@ void sub_0801EB7C(Entity* ent) { void sub_0801EB84(Entity* ent) { ent->flags = ent->flags & 127; - InitializeAnimationAnimation(ent, 2); + UpdateAnimationVariableFrames(ent, 2); } void nullsub_3() { diff --git a/src/enemy/rupeeLike.c b/src/enemy/rupeeLike.c new file mode 100644 index 00000000..5b6bd3e5 --- /dev/null +++ b/src/enemy/rupeeLike.c @@ -0,0 +1,281 @@ +#include "global.h" +#include "entity.h" +#include "enemy.h" +#include "functions.h" +#include "structures.h" +#include "link.h" + +extern void sub_080293DC(Entity*); +extern void sub_080296D8(Entity*); +extern void sub_08029770(Entity*); +extern void sub_080297F0(Entity*); +extern void sub_080296C8(Entity*); +extern void sub_0802969C(Entity*); + +extern void (*const gUnk_080CCC00[])(Entity*); +extern void (*const gUnk_080CCC18[])(Entity*); +extern void (*const gUnk_080CCC3C[])(Entity*); + +extern u8 gUnk_080CCC34[]; +extern u8 gUnk_080CCC47[]; +extern BoundingBox gUnk_080FD260; + +void RupeeLike(Entity* this) { + u32 uVar1; + + if (this->entityType.parameter == 0) { + uVar1 = sub_080043E8(this); + if (uVar1 != 0) { + if (this->action == 4) { + sub_080296D8(this); + } + sub_08001290(this, uVar1); + } else { + gUnk_080CCC00[GetNextFunction(this)](this); + SetChildOffset(this, 0, 1, -0x10); + } + } else { + sub_080293DC(this); + } +} + +void sub_08029300(Entity* this) { + gUnk_080CCC18[this->action](this); +} + +void sub_08029318(Entity* this) { + if (this->damageType == 0x8e) { + sub_08029770(this); + } else { + if (this->action == 4) { + sub_080296D8(this); + } + if (*(u8*)(*(u32*)&this->field_0x4c + 8) == 1) { + if (this->action == 2) { + InitializeAnimation(this, 0); + InitializeAnimation(this->attachedEntity, 4); + } + this->action = 4; + this->actionDelay = 0x3c; + this->field_0xf = 0; + this->field_0x82.HALF.HI = 0x41; + this->flags2 &= 0xfc; + this->field_0x80.HALF.LO = gLinkEntity.spritePriority.b1; + sub_08004488(0x104); + } else { + if (this->field_0x43 != 0) { + sub_0804A9FC(this, 0x1c); + } + } + } + sub_0804AA30(this, gUnk_080CCC00); +} + +void sub_080293B4(Entity* this) { + CreateDeathFx(this, 0xff, gUnk_080CCC34[this->cutsceneBeh.HALF.LO * 3 + this->entityType.form]); +} + +void nullsub_141() { +} + +void sub_080293DC(Entity* this) { + CopyPositionAndSpriteOffset(this->parent, this); + this->y.HALF.HI++; + this->height.HALF.HI--; + gUnk_080CCC3C[this->action](this); +} + +void sub_0802940C(Entity* this) { + Entity* ent; + + ent = CreateEnemy(0x17, this->entityType.form); + if (ent != NULL) { + sub_0804A720(this); + ent->parent = this; + ent->entityType.parameter = 1; + this->attachedEntity = ent; + this->field_0x80.HALF.HI = 0; + this->cutsceneBeh.HALF.LO = 0; + this->field_0x82.HALF.LO = this->palette.b.b0; + sub_080297F0(this); + } +} + +void sub_0802944C(Entity* this) { + sub_080296C8(this); + if ((this->field_0x80.HALF.HI != 0) && sub_08049FDC(this, 1)) { + sub_08029770(this); + } +} + +void sub_08029474(Entity* this) { + u32 bVar1; + + sub_080296C8(this); + if (this->frames.b.f3) { + this->action = 3; + this->actionDelay = 8; + bVar1 = GetFacingDirection(this, &gLinkEntity); + this->direction = bVar1; + this->animationState = (bVar1 << 0x18) >> 0x1c; + InitializeAnimation(this, this->animationState); + InitializeAnimation(this->attachedEntity, this->animationState + 4); + } else { + if (this->frames.all == 1) { + this->frames.all = 0; + this->flags |= 0x80; + } + } +} + +void sub_080294D4(Entity* this) { + if (sub_08049FDC(this, 1) != 0) { + if (--this->actionDelay == 0) { + this->actionDelay = 8; + sub_08004596(this, GetFacingDirection(this, &gLinkEntity)); + sub_0802969C(this); + } + sub_080AEF88(this); + sub_080296C8(this); + } else { + this->action = 6; + this->flags &= 0x7f; + InitializeAnimation(this, 3); + InitializeAnimation(this->attachedEntity, 7); + } +} + +extern s8 gUnk_080CCC44[]; + +void sub_0802953C(Entity* this) { + u8* pbVar3; + + sub_080296C8(this); + sub_080296C8(this); + if (sub_0807953C() != 0) { + this->field_0xf++; + } + if (this->actionDelay != 0) { + this->actionDelay--; + } + if (((this->field_0xf > 0x2d) || (gUnk_02002A40.stats.rupees == 0)) && (this->actionDelay == 0)) { + sub_080296D8(this); + } else { + sub_08077B2C(); + gLinkState.field_0x1a[0] |= 0x80; + PositionRelative(this, &gLinkEntity, 0, 0x10000); + pbVar3 = GetSpriteSubEntryOffsetDataPointer((u16)this->spriteIndex, this->frameIndex); + gLinkEntity.spriteOffsetX = pbVar3[0]; + gLinkEntity.spriteOffsetY = pbVar3[1] - 1; + gLinkEntity.spritePriority.b1 = 0; + if (--this->field_0x82.HALF.HI == 0) { + this->field_0x82.HALF.HI = 0x41; + if (gUnk_02002A40.stats.rupees != 0) { + ModRupees(gUnk_080CCC44[this->entityType.form]); + this->cutsceneBeh.HALF.LO = 1; + } + } + } +} + +void sub_08029610(Entity* this) { + if (--this->field_0xf == 0) { + this->action = 3; + this->actionDelay = 1; + } + sub_080296C8(this); +} + +void sub_08029630(Entity* this) { + sub_080296C8(this); + if ((this->frames.b.f3) != 0) { + this->field_0x80.HALF.HI = 1; + this->attachedEntity->spriteSettings.b.draw = FALSE; + sub_080297F0(this); + } +} + +void sub_08029660(Entity* this) { + u32 temp; + this->action = 1; + this->spriteIndex = 0xd1; + temp = gUnk_080CCC47[this->entityType.form]; + this->palette.b.b0 = temp; +} + +void sub_08029688(Entity* this) { + if (this->parent->field_0x4 == NULL) { + DeleteEntity(this); + } +} + +void sub_0802969C(Entity* this) { + u32 bVar1; + + if ((this->direction & 0xf) != 0) { + + bVar1 = this->direction >> 4; + if (bVar1 != this->animationState) { + this->animationState = bVar1; + InitializeAnimation(this, bVar1); + InitializeAnimation(this->attachedEntity, bVar1 + 4); + } + } +} + +void sub_080296C8(Entity* this) { + GetNextFrame(this); + GetNextFrame(this->attachedEntity); +} + +void sub_080296D8(Entity* this) { + gLinkState.jumpStatus = 0x41; + gLinkState.flags.all &= 0xffffffef; + gLinkEntity.flags |= 0x80; + gLinkEntity.field_0x20 = 0x18000; + gLinkEntity.hurtBlinkTime = 0xa6; + gLinkEntity.height.HALF.HI = -2; + gLinkEntity.direction = gLinkEntity.animationState << 2; + gLinkEntity.spritePriority.b1 = this->field_0x80.HALF.LO; + gLinkEntity.spriteOffsetY = 0; + gLinkEntity.nonPlanarMovement = 0x140; + this->action = 5; + this->field_0xf = 0x3c; + this->flags2 |= 3; + if ((s8)this->hurtBlinkTime == 0) { + this->hurtBlinkTime = 0xf4; + } +} + +void sub_08029770(Entity* this) { + u32 temp; + if (LoadFixedGFX(this, 0x73) != 0) { + this->action = 2; + this->flags = this->flags & 0x7f; + this->spriteIndex = 0xd1; + this->spritePriority.b1 = 3; + temp = this->field_0x82.HALF.LO; + this->palette.b.b0 = temp; + this->damageType = 0x8d; + this->boundingBox = &gUnk_080FD260; + InitializeAnimation(this, 2); + this->attachedEntity->spriteSettings.b.draw = TRUE; + InitializeAnimation(this->attachedEntity, 6); + sub_080A29BC(this); + } +} + +void sub_080297F0(Entity* this) { + u32 temp; + this->action = 1; + this->actionDelay = 0x78; + this->flags = this->flags | 0x80; + this->spriteSettings.b.draw = TRUE; + this->damageType = 0x8e; + sub_080AE068(this); + this->spriteIndex = 0x143; + temp = gUnk_080CCC47[this->entityType.form]; + this->palette.b.b0 = temp; + this->spriteVramOffset = 9; + InitializeAnimation(this, 0x54); +} \ No newline at end of file diff --git a/src/enemy/tektiteGolden.c b/src/enemy/tektiteGolden.c new file mode 100644 index 00000000..90483b71 --- /dev/null +++ b/src/enemy/tektiteGolden.c @@ -0,0 +1,108 @@ +#include "global.h" +#include "entity.h" +#include "enemy.h" +#include "functions.h" +#include "flags.h" + +extern void sub_08038168(Entity*); + +extern void (*const gUnk_080CF4A0)(Entity*); +extern void (*const gUnk_080CF4B8[])(Entity*); + +void TektiteGolden(Entity *this) +{ + EnemyFunctionHandler(this, &gUnk_080CF4A0); + SetChildOffset(this, 0, 1, -0x10); +} + +void sub_08037EE8(Entity* this) +{ + gUnk_080CF4B8[this->action](this); +} + +void sub_08037F00(Entity *this) +{ + u32 uVar1; + + if (this->field_0x43 != 0) { + sub_0804A9FC(this,0x1c); + } + sub_0804AA30(this, &gUnk_080CF4A0); + if (this->bitfield == 0x94) { + this->action = 1; + this->previousActionFlag = 0; + this->actionDelay = 0x14; + this->field_0xf = 0; + this->field_0x80.HALF.LO = 0; + uVar1 = this->height.HALF.HI; + if (uVar1 != 0) { + this->field_0x20 >>= 2; + } + else { + this->field_0x20 = uVar1; + } + + InitializeAnimation(this,0); + } +} + +void sub_08037F58(Entity *this) +{ + u32 uVar1; + + if ((this->field_0x3a & 2) == 0) { + SetGlobalFlag(this->entityType.parameter); + } + if ((this->entityType).form != 0) { + uVar1 = 0x59; + } + else { + uVar1 = 0x58; + } + CreateDeathFx(this, 0xff, uVar1); +} + +void sub_08037F84(Entity *this) +{ + sub_08001242(); + if (this->height.HALF.HI != 0) { + sub_08003FC4(this, 0x3000); + } +} + +void sub_08037FA0(Entity *this) +{ + + if (CheckGlobalFlag(this->entityType.parameter)) { + DeleteThisEntity(); + } + sub_0804A720(this); + this->action = 1; + this->previousActionFlag = 0; + this->actionDelay = (Random() & 0x1f) + 0x20; + this->field_0xf = 0; + this->field_0x80.HALF.LO = 0; + InitializeAnimation(this,0); +} + +void sub_08037Fe0(Entity *this) +{ + UpdateAnimationVariableFrames(this, 2); + if (this->actionDelay != 0) { + this->actionDelay--; + } + else if (this->field_0xf != 0) { + if ((this->frames.b.f3) != 0) { + this->action = 2; + this->actionDelay = 6; + this->field_0xf = 0; + this->field_0x20 = 0x38000; + sub_08038168(this); + InitializeAnimation(this, 2); + } + } + else if ((this->frames.b.f3) != 0) { + this->field_0xf = 0x40; + InitializeAnimation(this, 1); + } +} \ No newline at end of file diff --git a/src/item11.c b/src/item11.c index b464bdd9..e6ab76de 100644 --- a/src/item11.c +++ b/src/item11.c @@ -57,7 +57,7 @@ void sub_08018CBC(Entity *this) this->action = 2; this->spriteSettings.b.draw = 1; this->spriteIndex = 0xa6; - this->palette = 0x33; + this->palette.raw = 0x33; this->spriteVramOffset = 0; (this->entityType).form = gLinkState.field_0x1d[0] - 1; this->actionDelay = gUnk_080B3DE0[(this->entityType).form * 2]; diff --git a/src/npc/forestMinish.c b/src/npc/forestMinish.c index e83a40d1..8fb7da7b 100644 --- a/src/npc/forestMinish.c +++ b/src/npc/forestMinish.c @@ -90,9 +90,9 @@ void sub_080600F0(Entity* this) { u32 uVar1; u32 uVar2; - uVar2 = this->field_0x80; - if (this->field_0x80 < 8) { - if ((this->field_0x82 & 1) != 0) { + uVar2 = this->field_0x80.HWORD; + if (this->field_0x80.HWORD < 8) { + if ((this->field_0x82.HWORD & 1) != 0) { uVar2 = (uVar2 & 0xfc) + (this->field_0xf >> 1); } else { uVar2 = (uVar2 & 0xfc) + (this->animationState >> 1); @@ -102,7 +102,7 @@ void sub_080600F0(Entity* this) { if (uVar2 != this->animIndex) { InitAnimationForceUpdate(this, uVar2); } - if ((this->field_0x82 & 4) != 0) { + if ((this->field_0x82.HWORD & 4) != 0) { uVar1 = 2; } else { uVar1 = 1; diff --git a/src/npc/goron.c b/src/npc/goron.c index b65e97ea..0fa725e4 100644 --- a/src/npc/goron.c +++ b/src/npc/goron.c @@ -63,7 +63,7 @@ void sub_08069428(Entity* this, s32 offsetX, bool32 createFx65); void sub_080693D0(Entity* this) { sub_0807DD94(this, 0); if (this->animIndex == 8) { - u32 var0 = this->field_0x82 & 0xF; + u32 var0 = this->field_0x82.HWORD & 0xF; bool32 createFx65 = ((-var0) | var0) >> 0x1F; // = !var0 if (this->frames.all == 1) { @@ -121,7 +121,7 @@ void sub_080694EC(Entity* this) { anim = 2; if (!CheckKinstoneFused(47)) anim = 8; InitAnimationForceUpdate(this, anim); - this->field_0x80 = anim; + this->field_0x80.HWORD = anim; } void Goron_Fusion(Entity* this) { diff --git a/src/npc/smith.c b/src/npc/smith.c index 061d3c40..744bd8e2 100644 --- a/src/npc/smith.c +++ b/src/npc/smith.c @@ -157,8 +157,8 @@ void sub_080661BC(Entity *this) if (this->animIndex == 0xc) { UpdateAnimationSingleFrame(this); if ((this->frames.b.f3) != 0) { - this->field_0x80 = GetAnimationState(this) + 8; - InitAnimationForceUpdate(this, this->field_0x80); + this->field_0x80.HWORD = GetAnimationState(this) + 8; + InitAnimationForceUpdate(this, this->field_0x80.HWORD); } } else { diff --git a/src/npc/syrup.c b/src/npc/syrup.c index 341c60c8..da3f69e8 100644 --- a/src/npc/syrup.c +++ b/src/npc/syrup.c @@ -41,7 +41,7 @@ void sub_0806A1F8(Entity *this) void sub_0806A234(Entity *this) { sub_0807DD94(this, 0); - if ((this->field_0x82 & 4) != 0) { + if ((this->field_0x82.HWORD & 4) != 0) { if ((gUnk_030010A0 & 7) == 0) { sub_0806A26C(this); } diff --git a/src/npc/zelda.c b/src/npc/zelda.c index b70e3b9a..087e8fe8 100644 --- a/src/npc/zelda.c +++ b/src/npc/zelda.c @@ -109,27 +109,27 @@ void sub_08066DE4(Entity* ent) { void sub_08066E08(Entity* ent) { InitAnimationForceUpdate(ent, 0x50); - ent->field_0x80 = ent->animIndex; + ent->field_0x80.HWORD = ent->animIndex; } void sub_08066E20(Entity* ent) { InitAnimationForceUpdate(ent, 0x44); - ent->field_0x80 = ent->animIndex; + ent->field_0x80.HWORD = ent->animIndex; } void sub_08066E38(Entity* ent) { InitAnimationForceUpdate(ent, 0x48); - ent->field_0x80 = ent->animIndex; + ent->field_0x80.HWORD = ent->animIndex; } void sub_08066E50(Entity* ent) { InitAnimationForceUpdate(ent, 0x4C); - ent->field_0x80 = ent->animIndex; + ent->field_0x80.HWORD = ent->animIndex; } void sub_08066E68(Entity* ent) { InitAnimationForceUpdate(ent, 0x54); - ent->field_0x80 = ent->animIndex; + ent->field_0x80.HWORD = ent->animIndex; } void sub_08066E80(Entity* ent, u8* param_2) { @@ -172,7 +172,7 @@ void sub_08066E80(Entity* ent, u8* param_2) { return; } } - ent->field_0x80 = ent->animIndex; + ent->field_0x80.HWORD = ent->animIndex; gUnk_02033280[6] = 0; } diff --git a/src/object/object1C.c b/src/object/object1C.c index 16c20816..725f4223 100644 --- a/src/object/object1C.c +++ b/src/object/object1C.c @@ -11,7 +11,7 @@ void Object1C(Entity *this) if (this->action == 0) { this->action = 1; } - iVar1 = CheckRectOnScreen(this->field_0x80, this->field_0x82, 0x10, 0x10); + iVar1 = CheckRectOnScreen(this->field_0x80.HWORD, this->field_0x82.HWORD, 0x10, 0x10); if (iVar1 == 0) { this->parent->field_0x20 &= ~(1 << this->entityType.parameter); DeleteThisEntity(); diff --git a/src/object/well.c b/src/object/well.c index 9efcd750..07c1237b 100644 --- a/src/object/well.c +++ b/src/object/well.c @@ -19,14 +19,14 @@ void sub_080A0EB0(Entity* ent) { ent->action = 1; tilePos = COORD_TO_TILE(ent); - ent->field_0x80 = tilePos; - SetTile(16509, ent->field_0x80, 1); + ent->field_0x80.HWORD = tilePos; + SetTile(16509, ent->field_0x80.HWORD, 1); } void sub_080A0EF0(Entity* ent) { s32 tileIndex; - tileIndex = GetTileType(ent->field_0x80, 1); + tileIndex = GetTileType(ent->field_0x80.HWORD, 1); if (tileIndex != 0x407D) { sub_08078B48(); gLinkEntity.x.WORD = ent->x.WORD;