From ce06f7dbb70b87cc3007a3e6ee6642b3f9aeb8b3 Mon Sep 17 00:00:00 2001 From: theo3 Date: Fri, 19 Feb 2021 00:47:22 -0800 Subject: [PATCH] begin arm_proxy.c --- Makefile | 1 + README.md | 2 +- asm/code_08016DF8.s | 1381 ------------------- asm/m4a_asm.s | 12 +- asm/non_matching/arm_proxy/sub_08016DF8.inc | 50 + asm/non_matching/arm_proxy/sub_080173A4.inc | 130 ++ asm/non_matching/arm_proxy/sub_08017530.inc | 90 ++ asm/non_matching/arm_proxy/sub_0801766C.inc | 68 + asm/non_matching/arm_proxy/sub_080176E4.inc | 54 + asm/non_matching/arm_proxy/sub_080177A0.inc | 95 ++ data/data_089FC6C4.s | 58 +- data/sprite_table.s | 11 + include/audio.h | 243 ++++ include/entity.h | 16 +- include/functions.h | 2 +- include/main.h | 2 +- include/manager.h | 3 + include/npc.h | 3 + include/object.h | 2 + include/player.h | 45 +- include/structures.h | 2 +- linker.ld | 2 + src/arm_proxy.c | 547 ++++++++ src/code_0805436C.c | 14 +- src/code_0805EC04.c | 2 +- src/enemy/doorMimic.c | 18 +- src/enemy/helmasaur.c | 8 +- src/enemy/spearMoblin.c | 16 +- src/enemy/wisp.c | 2 +- src/item11.c | 2 +- src/object/mineralWaterSource.c | 4 +- src/object/object49.c | 8 +- src/room.c | 2 +- 33 files changed, 1438 insertions(+), 1457 deletions(-) create mode 100644 asm/non_matching/arm_proxy/sub_08016DF8.inc create mode 100644 asm/non_matching/arm_proxy/sub_080173A4.inc create mode 100644 asm/non_matching/arm_proxy/sub_08017530.inc create mode 100644 asm/non_matching/arm_proxy/sub_0801766C.inc create mode 100644 asm/non_matching/arm_proxy/sub_080176E4.inc create mode 100644 asm/non_matching/arm_proxy/sub_080177A0.inc create mode 100644 data/sprite_table.s create mode 100644 include/audio.h create mode 100644 src/arm_proxy.c diff --git a/Makefile b/Makefile index 6ffb4b4a..f4a8d93b 100644 --- a/Makefile +++ b/Makefile @@ -83,6 +83,7 @@ NODEP := 1 endif #$(C_BUILDDIR)/need_interworking_file_name.o: CFLAGS += -mthumb-interwork +$(C_BUILDDIR)/code_08016DF8.o: CFLAGS += -mthumb-interwork C_SRCS := $(wildcard $(C_SUBDIR)/*.c $(C_SUBDIR)/*/*.c) C_OBJS := $(patsubst $(C_SUBDIR)/%.c,$(C_BUILDDIR)/%.o,$(C_SRCS)) diff --git a/README.md b/README.md index 61c60717..fe1c53c2 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # The Legend of Zelda: The Minish Cap -**Progress:** [⬛⬛⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜] 22% +**Progress:** [⬛⬛⬛⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜] 25% ```diff - WARNING! - diff --git a/asm/code_08016DF8.s b/asm/code_08016DF8.s index 12971065..8654c9fd 100644 --- a/asm/code_08016DF8.s +++ b/asm/code_08016DF8.s @@ -4,1387 +4,6 @@ .syntax unified .text - - thumb_func_start sub_08016DF8 -sub_08016DF8: @ 0x08016DF8 - push {r4, r5, r6, lr} - sub sp, #4 - ldr r1, _08016E20 @ =gUnk_03003DE0 - ldrb r0, [r1] - cmp r0, #0 - beq _08016E70 - ldr r4, _08016E24 @ =gUnk_03000C30 - adds r6, r0, #0 - movs r0, #0 - strb r0, [r1] - ldr r5, _08016E28 @ =0x040000D4 -_08016E0E: - ldrb r0, [r4] - cmp r0, #1 - beq _08016E44 - cmp r0, #1 - bgt _08016E2C - cmp r0, #0 - beq _08016E32 - b _08016E68 - .align 2, 0 -_08016E20: .4byte gUnk_03003DE0 -_08016E24: .4byte gUnk_03000C30 -_08016E28: .4byte 0x040000D4 -_08016E2C: - cmp r0, #2 - beq _08016E4E - b _08016E68 -_08016E32: - ldr r0, [r4, #4] - str r0, [r5] - ldr r0, [r4, #8] - str r0, [r5, #4] - ldrh r0, [r4, #2] - lsrs r0, r0, #2 - movs r1, #0x84 - lsls r1, r1, #0x18 - b _08016E62 -_08016E44: - ldr r0, [r4, #4] - ldr r1, [r4, #8] - bl LZ77UnCompVram - b _08016E68 -_08016E4E: - ldr r0, [r4, #4] - str r0, [sp] - mov r0, sp - str r0, [r5] - ldr r0, [r4, #8] - str r0, [r5, #4] - ldrh r0, [r4, #2] - lsrs r0, r0, #2 - movs r1, #0x85 - lsls r1, r1, #0x18 -_08016E62: - orrs r0, r1 - str r0, [r5, #8] - ldr r0, [r5, #8] -_08016E68: - adds r4, #0xc - subs r6, #1 - cmp r6, #0 - bgt _08016E0E -_08016E70: - add sp, #4 - pop {r4, r5, r6} - pop {r0} - bx r0 - - thumb_func_start sub_08016E78 -sub_08016E78: @ 0x08016E78 - push {r4, lr} - ldr r4, _08016F08 @ =gUnk_03001000 - ldrb r0, [r4] - movs r0, #0 - strb r0, [r4] - bl VBlankIntrWait - ldrb r0, [r4] - cmp r0, #0 - bne _08016E94 - adds r1, r4, #0 -_08016E8E: - ldrb r0, [r1] - cmp r0, #0 - beq _08016E8E -_08016E94: - bl sub_080ADD70 - bl sub_0801C25C - bl sub_08016C3C - bl sub_08016DF8 - ldr r1, _08016F0C @ =gUnk_02000070 - ldrb r0, [r1] - cmp r0, #0 - beq _08016EFC - movs r0, #0 - strb r0, [r1] - ldr r0, _08016F10 @ =gUnk_02025EB0 - ldr r1, [r0] - cmp r1, #0 - beq _08016ED6 - ldr r2, _08016F14 @ =0x040000D4 - ldr r0, _08016F18 @ =gBG1Buffer - str r0, [r2] - ldrh r1, [r1] - movs r0, #0xf8 - lsls r0, r0, #5 - ands r0, r1 - lsls r0, r0, #3 - movs r1, #0xc0 - lsls r1, r1, #0x13 - adds r0, r0, r1 - str r0, [r2, #4] - ldr r0, _08016F1C @ =0x84000170 - str r0, [r2, #8] - ldr r0, [r2, #8] -_08016ED6: - ldr r0, _08016F20 @ =gUnk_0200B650 - ldr r1, [r0] - cmp r1, #0 - beq _08016EFC - ldr r2, _08016F14 @ =0x040000D4 - ldr r0, _08016F24 @ =gBG2Buffer - str r0, [r2] - ldrh r1, [r1] - movs r0, #0xf8 - lsls r0, r0, #5 - ands r0, r1 - lsls r0, r0, #3 - movs r1, #0xc0 - lsls r1, r1, #0x13 - adds r0, r0, r1 - str r0, [r2, #4] - ldr r0, _08016F1C @ =0x84000170 - str r0, [r2, #8] - ldr r0, [r2, #8] -_08016EFC: - bl sub_0804FF98 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08016F08: .4byte gUnk_03001000 -_08016F0C: .4byte gUnk_02000070 -_08016F10: .4byte gUnk_02025EB0 -_08016F14: .4byte 0x040000D4 -_08016F18: .4byte gBG1Buffer -_08016F1C: .4byte 0x84000170 -_08016F20: .4byte gUnk_0200B650 -_08016F24: .4byte gBG2Buffer - - thumb_func_start sub_08016F28 -sub_08016F28: @ 0x08016F28 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r0, _08016F44 @ =gSave - adds r0, #0xba - ldrb r0, [r0] - cmp r0, #0 - beq _08016F4C - ldr r0, _08016F48 @ =gPlayerState - ldr r1, [r0, #0x30] - movs r2, #0x80 - lsls r2, r2, #7 - orrs r1, r2 - b _08016F54 - .align 2, 0 -_08016F44: .4byte gSave -_08016F48: .4byte gPlayerState -_08016F4C: - ldr r0, _08016F98 @ =gPlayerState - ldr r1, [r0, #0x30] - ldr r2, _08016F9C @ =0xFFFFBFFF - ands r1, r2 -_08016F54: - str r1, [r0, #0x30] - adds r0, r4, #0 - bl sub_0805E3B0 - cmp r0, #0 - bne _08016FDC - ldr r5, _08016F98 @ =gPlayerState - ldr r0, [r5, #0x30] - movs r1, #0x80 - lsls r1, r1, #0xc - ands r0, r1 - cmp r0, #0 - beq _08016FB4 - bl sub_08077B20 - ldr r1, [r5, #0x30] - movs r0, #0x80 - lsls r0, r0, #0xe - ands r0, r1 - cmp r0, #0 - beq _08016FA4 - movs r0, #0x18 - strb r0, [r5, #0xc] - ldr r0, _08016FA0 @ =0xFFF7FFFF - ands r1, r0 - str r1, [r5, #0x30] - movs r0, #0xf0 - strb r0, [r5, #0xf] - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - b _08016FB4 - .align 2, 0 -_08016F98: .4byte gPlayerState -_08016F9C: .4byte 0xFFFFBFFF -_08016FA0: .4byte 0xFFF7FFFF -_08016FA4: - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - adds r1, r5, #0 - adds r1, #0xa8 - movs r0, #0xf - strb r0, [r1] -_08016FB4: - adds r0, r4, #0 - bl sub_08016FF4 - adds r0, r4, #0 - bl sub_08070680 - ldr r0, [r4, #0x34] - cmp r0, #0 - bne _08016FD8 - ldrb r0, [r4, #0xc] - cmp r0, #1 - beq _08016FD0 - cmp r0, #9 - bne _08016FD8 -_08016FD0: - adds r0, r4, #0 - movs r1, #8 - bl sub_08008790 -_08016FD8: - bl sub_080171F0 -_08016FDC: - adds r0, r4, #0 - bl sub_08078FB0 - adds r0, r4, #0 - bl sub_0800404C - bl sub_0807A050 - pop {r4, r5} - pop {r0} - bx r0 - .align 2, 0 - - thumb_func_start sub_08016FF4 -sub_08016FF4: @ 0x08016FF4 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r0, _080170A0 @ =gUnk_0200AF00 - adds r2, r0, #0 - adds r2, #0x2f - movs r1, #0 - strb r1, [r2] - subs r2, #2 - strb r1, [r2] - adds r0, #0x2e - strb r1, [r0] - ldr r2, _080170A4 @ =gPlayerEntity - adds r0, r2, #0 - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0801702E - adds r0, r2, #0 - adds r0, #0x3d - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - ble _0801702E - movs r0, #0x86 - bl PlaySFX -_0801702E: - ldr r4, _080170A8 @ =gPlayerState - ldr r0, [r4, #0x30] - ldr r1, _080170AC @ =0xFDFFFDFF - ands r0, r1 - str r0, [r4, #0x30] - movs r1, #0x80 - lsls r1, r1, #3 - ands r0, r1 - cmp r0, #0 - beq _08017046 - bl ResetPlayer -_08017046: - ldr r0, [r4, #0x30] - movs r1, #0x80 - lsls r1, r1, #0xf - ands r0, r1 - cmp r0, #0 - beq _08017060 - adds r0, r4, #0 - adds r0, #0xa0 - ldrb r0, [r0] - cmp r0, #0 - bne _08017060 - bl sub_0807A108 -_08017060: - bl sub_08079B24 - cmp r0, #0 - bne _0801706E - adds r0, r5, #0 - bl sub_08079708 -_0801706E: - ldr r0, _080170B0 @ =gUnk_03003DF0 - movs r4, #0 - strb r4, [r0] - ldr r2, _080170A8 @ =gPlayerState - adds r1, r2, #0 - adds r1, #0x27 - ldrb r0, [r1] - cmp r0, #0 - beq _08017084 - subs r0, #1 - strb r0, [r1] -_08017084: - adds r1, r2, #0 - adds r1, #0xa8 - ldrb r0, [r1] - adds r3, r2, #0 - adds r3, #0xa9 - strb r0, [r3] - strb r4, [r1] - subs r1, #0x1e - ldrb r0, [r1] - cmp r0, #0 - beq _080170B4 - subs r0, #1 - strb r0, [r1] - b _080171EA - .align 2, 0 -_080170A0: .4byte gUnk_0200AF00 -_080170A4: .4byte gPlayerEntity -_080170A8: .4byte gPlayerState -_080170AC: .4byte 0xFDFFFDFF -_080170B0: .4byte gUnk_03003DF0 -_080170B4: - adds r0, r2, #0 - adds r0, #0x8b - ldrb r0, [r0] - cmp r0, #0 - beq _080170C0 - b _080171EA -_080170C0: - ldr r0, _08017124 @ =gTextBox - ldrb r0, [r0] - movs r1, #0x7f - ands r1, r0 - cmp r1, #0 - beq _080170CE - b _080171EA -_080170CE: - ldr r3, _08017128 @ =gRoomVars - strb r1, [r3, #0xa] - ldr r2, _0801712C @ =gSave - adds r0, r2, #0 - adds r0, #0xab - ldrb r0, [r0] - lsrs r1, r0, #2 - cmp r1, #0x18 - bls _080170E2 - movs r1, #0x18 -_080170E2: - cmp r1, #7 - bhi _080170E8 - movs r1, #8 -_080170E8: - adds r0, r2, #0 - adds r0, #0xaa - ldrb r0, [r0] - cmp r0, r1 - bhi _08017112 - movs r0, #1 - strb r0, [r3, #0xa] - ldr r0, _08017130 @ =gUnk_0200AF00 - ldrb r0, [r0, #1] - cmp r0, #0 - bne _08017112 - ldr r0, _08017134 @ =gScreenTransition - ldr r0, [r0] - movs r1, #0x5a - bl __modsi3 - cmp r0, #0 - bne _08017112 - ldr r0, _08017138 @ =0x0000011F - bl EnqueueSFX -_08017112: - ldr r0, _0801712C @ =gSave - adds r2, r0, #0 - adds r2, #0xb2 - ldrb r1, [r2] - cmp r1, #0 - bne _0801713C - adds r0, #0xc4 - strh r1, [r0] - b _0801715A - .align 2, 0 -_08017124: .4byte gTextBox -_08017128: .4byte gRoomVars -_0801712C: .4byte gSave -_08017130: .4byte gUnk_0200AF00 -_08017134: .4byte gScreenTransition -_08017138: .4byte 0x0000011F -_0801713C: - adds r1, r0, #0 - adds r1, #0xc4 - ldrh r0, [r1] - cmp r0, #0 - beq _08017150 - subs r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _0801715A -_08017150: - movs r0, #0 - strb r0, [r2] - ldr r0, _0801716C @ =0x000001B3 - bl PlaySFX -_0801715A: - ldr r0, _08017170 @ =gSave - adds r3, r0, #0 - adds r3, #0xb3 - ldrb r1, [r3] - cmp r1, #0 - bne _08017174 - adds r0, #0xc6 - strh r1, [r0] - b _080171A4 - .align 2, 0 -_0801716C: .4byte 0x000001B3 -_08017170: .4byte gSave -_08017174: - adds r2, r0, #0 - adds r2, #0xc6 - ldrh r0, [r2] - cmp r0, #0 - beq _08017188 - subs r1, r0, #1 - strh r1, [r2] - lsls r0, r1, #0x10 - cmp r0, #0 - bne _08017196 -_08017188: - movs r0, #0 - strb r0, [r3] - movs r0, #0xa0 - lsls r0, r0, #1 - bl PlaySFX - b _080171A4 -_08017196: - movs r0, #0xf - ands r1, r0 - cmp r1, #0 - bne _080171A4 - adds r0, r5, #0 - bl CreateSparkle -_080171A4: - ldr r0, _080171B8 @ =gSave - adds r3, r0, #0 - adds r3, #0xba - ldrb r1, [r3] - cmp r1, #0 - bne _080171BC - adds r0, #0xc8 - strh r1, [r0] - b _080171EA - .align 2, 0 -_080171B8: .4byte gSave -_080171BC: - adds r2, r0, #0 - adds r2, #0xc8 - ldrh r0, [r2] - cmp r0, #0 - beq _080171D0 - subs r1, r0, #1 - strh r1, [r2] - lsls r0, r1, #0x10 - cmp r0, #0 - bne _080171D6 -_080171D0: - movs r0, #0 - strb r0, [r3] - b _080171EA -_080171D6: - movs r0, #0x3f - ands r1, r0 - cmp r1, #0 - bne _080171EA - ldrb r1, [r3] - adds r1, #0x55 - adds r0, r5, #0 - movs r2, #0 - bl CreateFx -_080171EA: - pop {r4, r5} - pop {r0} - bx r0 - - thumb_func_start sub_080171F0 -sub_080171F0: @ 0x080171F0 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - ldr r4, _080172DC @ =gPlayerState - ldrb r0, [r4, #0x1a] - cmp r0, #0 - beq _08017202 - bl ResetPlayer -_08017202: - ldrb r0, [r4, #0x14] - cmp r0, #0 - beq _0801720C - subs r0, #1 - strb r0, [r4, #0x14] -_0801720C: - ldr r6, _080172E0 @ =gPlayerEntity - adds r1, r6, #0 - adds r1, #0x7a - ldrh r0, [r1] - cmp r0, #0 - beq _0801721C - subs r0, #1 - strh r0, [r1] -_0801721C: - adds r2, r6, #0 - adds r2, #0x41 - ldrb r0, [r2] - movs r5, #0x7f - adds r1, r5, #0 - ands r1, r0 - movs r0, #0 - mov r8, r0 - strb r1, [r2] - ldrb r0, [r6, #0xc] - cmp r0, #0x14 - beq _08017244 - ldr r0, [r4, #0x30] - ldr r1, _080172E4 @ =0xFFFEFFFF - ands r1, r0 - movs r2, #2 - ands r0, r2 - lsls r0, r0, #0xf - orrs r1, r0 - str r1, [r4, #0x30] -_08017244: - ldr r0, [r4, #0x30] - movs r1, #3 - rsbs r1, r1, #0 - ands r0, r1 - str r0, [r4, #0x30] - adds r0, r6, #0 - bl sub_080028E0 - ldr r0, [r4, #0x30] - movs r7, #0x80 - lsls r7, r7, #0xf - ands r0, r7 - cmp r0, #0 - beq _08017268 - ldr r0, _080172E8 @ =gUnk_0200AF00 - adds r0, #0x2f - movs r1, #1 - strb r1, [r0] -_08017268: - bl sub_08078180 - ldrb r1, [r4, #7] - adds r0, r5, #0 - ands r0, r1 - strb r0, [r4, #7] - ldrb r1, [r4, #0xa] - movs r0, #0xf - ands r0, r1 - strb r0, [r4, #0xa] - ldrb r1, [r4, #0xb] - adds r0, r5, #0 - ands r0, r1 - strb r0, [r4, #0xb] - mov r1, r8 - strb r1, [r4, #0x1a] - adds r0, r4, #0 - adds r0, #0x80 - movs r5, #0 - mov r1, r8 - strh r1, [r0] - adds r0, #0x2a - strb r5, [r0] - ldr r0, _080172EC @ =gUnk_03003BE0 - movs r1, #0x8c - bl _DmaZero - adds r2, r4, #0 - adds r2, #0x3f - ldrb r0, [r2] - adds r1, r6, #0 - adds r1, #0x63 - strb r0, [r1] - strb r5, [r2] - bl sub_0807B0C8 - ldr r0, [r4, #0x30] - ands r0, r7 - cmp r0, #0 - beq _080172CC - ldr r0, _080172F0 @ =gUnk_03004040 - ldr r2, [r0] - ldr r1, [r0, #4] - ldr r0, [r0, #8] - adds r0, #0x63 - strb r5, [r0] - adds r1, #0x63 - strb r5, [r1] - adds r2, #0x63 - strb r5, [r2] -_080172CC: - ldrb r0, [r6, #0xc] - cmp r0, #0x1d - bne _080172F4 - ldr r0, [r4, #0x30] - movs r1, #0x80 - lsls r1, r1, #0x16 - orrs r0, r1 - b _080172FA - .align 2, 0 -_080172DC: .4byte gPlayerState -_080172E0: .4byte gPlayerEntity -_080172E4: .4byte 0xFFFEFFFF -_080172E8: .4byte gUnk_0200AF00 -_080172EC: .4byte gUnk_03003BE0 -_080172F0: .4byte gUnk_03004040 -_080172F4: - ldr r0, [r4, #0x30] - ldr r1, _0801732C @ =0xDFFFFFFF - ands r0, r1 -_080172FA: - str r0, [r4, #0x30] - ldr r4, _08017330 @ =gPlayerEntity - adds r0, r4, #0 - bl sub_0807A8D8 - ldr r0, _08017334 @ =gPlayerState - ldrb r1, [r0, #2] - movs r0, #0xc0 - ands r0, r1 - cmp r0, #0 - beq _08017318 - adds r1, r4, #0 - adds r1, #0x3d - movs r0, #0xfe - strb r0, [r1] -_08017318: - ldrb r0, [r4, #0xc] - cmp r0, #0x17 - beq _08017322 - bl sub_08077FEC -_08017322: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7} - pop {r0} - bx r0 - .align 2, 0 -_0801732C: .4byte 0xDFFFFFFF -_08017330: .4byte gPlayerEntity -_08017334: .4byte gPlayerState - - thumb_func_start sub_08017338 -sub_08017338: @ 0x08017338 - push {r4, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0x10] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - bne _08017352 - ldrh r0, [r4, #0xc] - cmp r0, #0 - bne _08017352 - adds r0, r4, #0 - bl sub_080173A4 -_08017352: - adds r0, r4, #0 - bl sub_0805E3B0 - cmp r0, #0 - bne _08017398 - ldr r1, _08017390 @ =gPlayerItemFunctions - ldrb r0, [r4, #9] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - adds r2, r4, #0 - adds r2, #0x41 - ldrb r1, [r2] - movs r0, #0x7f - ands r0, r1 - strb r0, [r2] - adds r1, r4, #0 - adds r1, #0x3d - ldrb r0, [r1] - movs r2, #0 - ldrsb r2, [r1, r2] - cmp r2, #0 - beq _08017398 - cmp r2, #0 - ble _08017394 - subs r0, #1 - b _08017396 - .align 2, 0 -_08017390: .4byte gPlayerItemFunctions -_08017394: - adds r0, #1 -_08017396: - strb r0, [r1] -_08017398: - adds r0, r4, #0 - bl sub_0800404C - pop {r4} - pop {r0} - bx r0 - - thumb_func_start sub_080173A4 -sub_080173A4: @ 0x080173A4 - push {r4, r5, lr} - mov ip, r0 - ldrb r0, [r0, #9] - lsls r0, r0, #3 - ldr r1, _08017410 @ =gUnk_08126DA8 - adds r3, r0, r1 - ldrb r0, [r3] - cmp r0, #0xff - bne _080173CE - ldrb r2, [r3, #2] - ldr r1, _08017414 @ =gUnk_08126ED8 - ldrb r0, [r3, #1] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r3, [r0] - mov r0, ip - adds r0, #0x68 - ldrb r0, [r0] - subs r0, r0, r2 - lsls r0, r0, #3 - adds r3, r3, r0 -_080173CE: - ldrb r0, [r3] - movs r1, #0xf - ands r1, r0 - lsls r0, r0, #4 - orrs r0, r1 - mov r1, ip - strb r0, [r1, #0x1a] - ldrb r1, [r3, #1] - mov r0, ip - adds r0, #0x44 - strb r1, [r0] - ldrb r1, [r3, #3] - subs r0, #4 - strb r1, [r0] - ldrb r0, [r3, #4] - mov r1, ip - adds r1, #0x3f - strb r0, [r1] - ldrb r0, [r3, #5] - mov r2, ip - strh r0, [r2, #0x12] - ldrh r1, [r3, #6] - cmp r1, #0 - bne _0801741C - ldr r2, _08017418 @ =gPlayerEntity - adds r0, r2, #0 - adds r0, #0x60 - ldrh r1, [r0] - mov r0, ip - adds r0, #0x60 - strh r1, [r0] - adds r5, r2, #0 - b _08017428 - .align 2, 0 -_08017410: .4byte gUnk_08126DA8 -_08017414: .4byte gUnk_08126ED8 -_08017418: .4byte gPlayerEntity -_0801741C: - ldr r0, _0801749C @ =0x000003FF - ands r0, r1 - mov r1, ip - adds r1, #0x60 - strh r0, [r1] - ldr r5, _080174A0 @ =gPlayerEntity -_08017428: - mov r3, ip - ldrb r0, [r3, #0x14] - cmp r0, #0 - bne _08017438 - ldrb r1, [r5, #0x14] - movs r0, #6 - ands r0, r1 - strb r0, [r3, #0x14] -_08017438: - adds r0, r5, #0 - adds r0, #0x38 - ldrb r1, [r0] - mov r0, ip - adds r0, #0x38 - strb r1, [r0] - ldrb r1, [r5, #0x19] - lsrs r1, r1, #6 - lsls r1, r1, #6 - mov r0, ip - ldrb r3, [r0, #0x19] - movs r2, #0x3f - adds r0, r2, #0 - ands r0, r3 - orrs r0, r1 - mov r1, ip - strb r0, [r1, #0x19] - adds r0, r5, #0 - adds r0, #0x29 - ldrb r1, [r0] - lsls r1, r1, #0x1d - mov r4, ip - adds r4, #0x29 - lsrs r1, r1, #0x1d - ldrb r3, [r4] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r3 - orrs r0, r1 - strb r0, [r4] - ldrb r0, [r5, #0x1b] - lsrs r0, r0, #6 - lsls r0, r0, #6 - mov r3, ip - ldrb r1, [r3, #0x1b] - ands r2, r1 - orrs r2, r0 - strb r2, [r3, #0x1b] - mov r2, ip - adds r2, #0x45 - movs r1, #1 - movs r0, #1 - strb r0, [r2] - ldrb r0, [r3, #0x10] - orrs r1, r0 - strb r1, [r3, #0x10] - pop {r4, r5} - pop {r0} - bx r0 - .align 2, 0 -_0801749C: .4byte 0x000003FF -_080174A0: .4byte gPlayerEntity - - thumb_func_start sub_080174A4 -sub_080174A4: @ 0x080174A4 - push {r4, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0x10] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - bne _080174BE - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _080174BE - adds r0, r4, #0 - bl sub_080A2838 -_080174BE: - adds r1, r4, #0 - adds r1, #0x3d - ldrb r2, [r1] - movs r0, #0 - ldrsb r0, [r1, r0] - cmp r0, #0 - beq _080174D0 - adds r0, r2, #1 - strb r0, [r1] -_080174D0: - adds r0, r4, #0 - bl sub_0805E3B0 - cmp r0, #0 - bne _080174F6 - ldr r1, _08017504 @ =gObjectFunctions - ldrb r0, [r4, #9] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - adds r2, r4, #0 - adds r2, #0x41 - ldrb r1, [r2] - movs r0, #0x7f - ands r0, r1 - strb r0, [r2] -_080174F6: - adds r0, r4, #0 - bl sub_0800404C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08017504: .4byte gObjectFunctions - - thumb_func_start sub_08017508 -sub_08017508: @ 0x08017508 - push {r4, lr} - adds r4, r0, #0 - bl sub_0805E3B0 - cmp r0, #0 - bne _08017524 - ldr r0, _0801752C @ =gManagerFunctions - ldrb r1, [r4, #9] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 -_08017524: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0801752C: .4byte gManagerFunctions - - thumb_func_start sub_08017530 -sub_08017530: @ 0x08017530 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x45 - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0 - beq _08017550 - ldr r0, _080175D8 @ =gUnk_020342F8 - subs r1, #1 - bl ReadBit - cmp r0, #0 - bne _08017550 - bl DeleteThisEntity -_08017550: - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _08017566 - ldrb r1, [r4, #0x10] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - bne _08017566 - adds r0, r4, #0 - bl sub_0806EC78 -_08017566: - adds r0, r4, #0 - bl sub_0805E3B0 - cmp r0, #0 - bne _08017584 - ldr r2, _080175DC @ =gNPCFunctions - ldrb r1, [r4, #9] - lsls r0, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #2 - adds r0, r0, r2 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 -_08017584: - ldr r0, [r4, #4] - cmp r0, #0 - beq _080175D2 - ldr r2, _080175DC @ =gNPCFunctions - ldrb r1, [r4, #9] - lsls r0, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #2 - adds r2, #4 - adds r0, r0, r2 - ldr r1, [r0] - cmp r1, #0 - beq _080175A4 - adds r0, r4, #0 - bl _call_via_r1 -_080175A4: - adds r0, r4, #0 - adds r0, #0x45 - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0 - beq _080175CC - ldr r2, _080175E0 @ =gUnk_02031EC0 - lsls r0, r1, #4 - subs r0, #0x10 - adds r2, r0, r2 - ldr r3, _080175E4 @ =gRoomControls - ldrh r0, [r4, #0x2e] - ldrh r1, [r3, #6] - subs r0, r0, r1 - strh r0, [r2, #4] - ldrh r0, [r4, #0x32] - ldrh r1, [r3, #8] - subs r0, r0, r1 - strh r0, [r2, #6] -_080175CC: - adds r0, r4, #0 - bl sub_0800404C -_080175D2: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080175D8: .4byte gUnk_020342F8 -_080175DC: .4byte gNPCFunctions -_080175E0: .4byte gUnk_02031EC0 -_080175E4: .4byte gRoomControls - - thumb_func_start sub_080175E8 -sub_080175E8: @ 0x080175E8 - ldr r1, _080175F0 @ =gUnk_03003DB8 - movs r0, #0 - strb r0, [r1] - bx lr - .align 2, 0 -_080175F0: .4byte gUnk_03003DB8 - - thumb_func_start sub_080175F4 -sub_080175F4: @ 0x080175F4 - push {r4, r5, lr} - ldr r1, _08017624 @ =gUnk_03003DC0 - ldrb r0, [r1] - ldrb r2, [r1, #1] - cmp r0, r2 - bhi _08017602 - ldrb r0, [r1, #1] -_08017602: - cmp r0, #0 - bne _08017638 - ldr r1, _08017628 @ =gUnk_030059F0 - ldr r0, _0801762C @ =gPlayerState - adds r0, #0x8b - ldrb r0, [r0] - cmp r0, #0 - beq _08017634 - ldr r4, _08017630 @ =gPlayerEntity - ldrb r5, [r4, #0x10] - movs r0, #0x7f - ands r0, r5 - strb r0, [r4, #0x10] - bl _call_via_r1 - strb r5, [r4, #0x10] - b _08017638 - .align 2, 0 -_08017624: .4byte gUnk_03003DC0 -_08017628: .4byte gUnk_030059F0 -_0801762C: .4byte gPlayerState -_08017630: .4byte gPlayerEntity -_08017634: - bl _call_via_r1 -_08017638: - pop {r4, r5} - pop {r0} - bx r0 - .align 2, 0 - - thumb_func_start sub_08017640 -sub_08017640: @ 0x08017640 - push {r4, lr} - ldr r4, _08017660 @ =gUnk_03003C70 - movs r1, #0x80 - lsls r1, r1, #1 - adds r0, r4, #0 - bl _DmaZero - ldr r0, _08017664 @ =gUnk_02018EA0 - str r4, [r0] - str r4, [r4] - str r4, [r4, #4] - ldr r0, _08017668 @ =gPlayerEntity - str r0, [r4, #8] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08017660: .4byte gUnk_03003C70 -_08017664: .4byte gUnk_02018EA0 -_08017668: .4byte gPlayerEntity - - thumb_func_start sub_0801766C -sub_0801766C: @ 0x0801766C - push {r4, lr} - adds r4, r0, #0 - adds r3, r4, #0 - adds r3, #0x29 - ldrb r1, [r3] - movs r0, #0x40 - ands r0, r1 - cmp r0, #0 - beq _08017682 -_0801767E: - movs r0, #1 - b _080176DE -_08017682: - ldr r2, _080176C0 @ =gUnk_03003C70 - movs r0, #0x80 - lsls r0, r0, #1 - adds r1, r2, r0 - cmp r1, r2 - bls _080176DC -_0801768E: - ldr r0, [r2, #8] - cmp r0, #0 - bne _080176D6 - str r4, [r2, #8] - strb r0, [r2, #0xc] - ldrb r0, [r3] - movs r1, #0x40 - orrs r0, r1 - strb r0, [r3] - ldr r3, _080176C4 @ =gUnk_02018EA0 - ldr r1, [r3] - ldrb r0, [r1, #0xc] - cmp r0, #0 - beq _080176C8 -_080176AA: - ldr r1, [r1, #4] - ldrb r0, [r1, #0xc] - cmp r0, #0 - bne _080176AA - str r1, [r2, #4] - ldr r0, [r1] - str r0, [r2] - str r2, [r0, #4] - str r2, [r1] - b _0801767E - .align 2, 0 -_080176C0: .4byte gUnk_03003C70 -_080176C4: .4byte gUnk_02018EA0 -_080176C8: - str r1, [r2, #4] - ldr r0, [r1] - str r0, [r2] - str r2, [r0, #4] - str r2, [r1] - str r2, [r3] - b _0801767E -_080176D6: - adds r2, #0x10 - cmp r1, r2 - bhi _0801768E -_080176DC: - movs r0, #0 -_080176DE: - pop {r4} - pop {r1} - bx r1 - - thumb_func_start sub_080176E4 -sub_080176E4: @ 0x080176E4 - push {lr} - adds r2, r0, #0 - adds r0, #0x29 - ldrb r1, [r0] - movs r0, #0x40 - ands r0, r1 - cmp r0, #0 - beq _08017720 - movs r0, #1 - b _0801773A -_080176F8: - str r2, [r3, #8] - movs r0, #1 - strb r0, [r3, #0xc] - adds r2, #0x29 - ldrb r0, [r2] - movs r1, #0x40 - orrs r0, r1 - strb r0, [r2] - ldr r2, _0801771C @ =gUnk_02018EA0 - ldr r0, [r2] - str r0, [r3, #4] - ldr r1, [r0] - str r1, [r3] - str r3, [r1, #4] - str r3, [r0] - str r3, [r2] - movs r0, #1 - b _0801773A - .align 2, 0 -_0801771C: .4byte gUnk_02018EA0 -_08017720: - ldr r3, _08017740 @ =gUnk_03003C70 - movs r0, #0x80 - lsls r0, r0, #1 - adds r1, r3, r0 - cmp r1, r3 - bls _08017738 -_0801772C: - ldr r0, [r3, #8] - cmp r0, #0 - beq _080176F8 - adds r3, #0x10 - cmp r1, r3 - bhi _0801772C -_08017738: - movs r0, #0 -_0801773A: - pop {r1} - bx r1 - .align 2, 0 -_08017740: .4byte gUnk_03003C70 - - thumb_func_start sub_08017744 -sub_08017744: @ 0x08017744 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - ldr r2, _08017758 @ =gUnk_03003C70 - movs r0, #0x80 - lsls r0, r0, #1 - adds r7, r2, r0 - movs r5, #0x41 - rsbs r5, r5, #0 - ldr r6, _0801775C @ =gUnk_02018EA0 - b _08017766 - .align 2, 0 -_08017758: .4byte gUnk_03003C70 -_0801775C: .4byte gUnk_02018EA0 -_08017760: - adds r2, #0x10 - cmp r7, r2 - bls _0801779A -_08017766: - ldr r0, [r2, #8] - cmp r4, r0 - bne _08017760 - adds r3, r4, #0 - adds r3, #0x29 - ldrb r1, [r3] - movs r0, #0x40 - ands r0, r1 - cmp r0, #0 - beq _08017760 - adds r0, r5, #0 - ands r0, r1 - strb r0, [r3] - movs r0, #0 - str r0, [r2, #8] - ldr r1, [r2] - ldr r0, [r2, #4] - str r0, [r1, #4] - ldr r1, [r2, #4] - ldr r0, [r2] - str r0, [r1] - ldr r0, [r6] - cmp r2, r0 - bne _0801779A - ldr r0, [r2, #4] - str r0, [r6] -_0801779A: - pop {r4, r5, r6, r7} - pop {r0} - bx r0 - - thumb_func_start sub_080177A0 -sub_080177A0: @ 0x080177A0 - push {r4, r5, r6, lr} - mov ip, r0 - adds r5, r1, #0 - adds r0, #0x38 - adds r1, #0x38 - ldrb r2, [r0] - ldrb r0, [r1] - ands r0, r2 - cmp r0, #0 - beq _08017848 - mov r0, ip - ldr r3, [r0, #0x48] - ldr r4, [r5, #0x48] - ldrb r1, [r3, #6] - ldrb r0, [r4, #6] - adds r2, r1, r0 - mov r1, ip - movs r6, #0x2e - ldrsh r0, [r1, r6] - movs r6, #0x2e - ldrsh r1, [r5, r6] - subs r0, r0, r1 - movs r1, #0 - ldrsb r1, [r3, r1] - adds r0, r0, r1 - movs r1, #0 - ldrsb r1, [r4, r1] - subs r0, r0, r1 - adds r0, r0, r2 - lsls r1, r2, #1 - cmp r0, r1 - bhi _08017848 - ldrb r1, [r3, #7] - ldrb r0, [r4, #7] - adds r2, r1, r0 - mov r1, ip - movs r6, #0x32 - ldrsh r0, [r1, r6] - movs r6, #0x32 - ldrsh r1, [r5, r6] - subs r0, r0, r1 - movs r1, #1 - ldrsb r1, [r3, r1] - adds r0, r0, r1 - movs r1, #1 - ldrsb r1, [r4, r1] - subs r0, r0, r1 - adds r0, r0, r2 - lsls r1, r2, #1 - cmp r0, r1 - bhi _08017848 - mov r0, ip - adds r0, #0x3c - ldrb r1, [r0] - movs r6, #0x10 - adds r0, r6, #0 - ands r0, r1 - movs r2, #5 - cmp r0, #0 - beq _0801781A - ldrb r2, [r3, #8] -_0801781A: - adds r0, r5, #0 - adds r0, #0x3c - ldrb r1, [r0] - adds r0, r6, #0 - ands r0, r1 - cmp r0, #0 - beq _0801782E - ldrb r0, [r4, #8] - adds r2, r2, r0 - b _08017830 -_0801782E: - adds r2, #5 -_08017830: - mov r1, ip - movs r3, #0x36 - ldrsh r0, [r1, r3] - movs r6, #0x36 - ldrsh r1, [r5, r6] - subs r0, r0, r1 - adds r0, r0, r2 - lsls r1, r2, #1 - cmp r0, r1 - bhi _08017848 - movs r0, #1 - b _0801784A -_08017848: - movs r0, #0 -_0801784A: - pop {r4, r5, r6} - pop {r1} - bx r1 - - thumb_func_start sub_08017850 -sub_08017850: @ 0x08017850 - push {r4, lr} - adds r4, r0, #0 - bl sub_08079F8C - cmp r0, #0 - bne _08017860 - movs r0, #0 - b _08017868 -_08017860: - ldr r1, _08017870 @ =gPlayerEntity - adds r0, r4, #0 - bl sub_080177A0 -_08017868: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08017870: .4byte gPlayerEntity thumb_func_start sub_08017874 sub_08017874: @ 0x08017874 diff --git a/asm/m4a_asm.s b/asm/m4a_asm.s index 18aa73bd..824258b2 100644 --- a/asm/m4a_asm.s +++ b/asm/m4a_asm.s @@ -463,7 +463,9 @@ _080AF706: str r1, [r0, #0x2c] _080AF70A: bx lr -_080AF70C: + + thumb_func_start ply_fine +ply_fine: @ 0x080AF70C push {r4, r5, lr} adds r5, r1, #0 ldr r4, [r5, #0x20] @@ -542,7 +544,9 @@ sub_080AF77A: @ 0x080AF77A ldrb r3, [r2] b _080AF75E .align 2, 0 -_080AF784: + + thumb_func_start ply_goto +ply_goto: push {lr} _080AF786: ldr r2, [r1, #0x40] @@ -573,9 +577,9 @@ ply_patt: @ 0x080AF7A4 ldrb r2, [r1, #2] adds r2, #1 strb r2, [r1, #2] - b _080AF784 + b ply_goto _080AF7BC: - b _080AF70C + b ply_fine .align 2, 0 thumb_func_start ply_pend diff --git a/asm/non_matching/arm_proxy/sub_08016DF8.inc b/asm/non_matching/arm_proxy/sub_08016DF8.inc new file mode 100644 index 00000000..2d47df2c --- /dev/null +++ b/asm/non_matching/arm_proxy/sub_08016DF8.inc @@ -0,0 +1,50 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + adds r4, r0, #0 + ldr r2, _08017758 @ =gUnk_03003C70 + movs r0, #0x80 + lsls r0, r0, #1 + adds r7, r2, r0 + movs r5, #0x41 + rsbs r5, r5, #0 + ldr r6, _0801775C @ =gUnk_02018EA0 + b _08017766 + .align 2, 0 +_08017758: .4byte gUnk_03003C70 +_0801775C: .4byte gUnk_02018EA0 +_08017760: + adds r2, #0x10 + cmp r7, r2 + bls _0801779A +_08017766: + ldr r0, [r2, #8] + cmp r4, r0 + bne _08017760 + adds r3, r4, #0 + adds r3, #0x29 + ldrb r1, [r3] + movs r0, #0x40 + ands r0, r1 + cmp r0, #0 + beq _08017760 + adds r0, r5, #0 + ands r0, r1 + strb r0, [r3] + movs r0, #0 + str r0, [r2, #8] + ldr r1, [r2] + ldr r0, [r2, #4] + str r0, [r1, #4] + ldr r1, [r2, #4] + ldr r0, [r2] + str r0, [r1] + ldr r0, [r6] + cmp r2, r0 + bne _0801779A + ldr r0, [r2, #4] + str r0, [r6] +_0801779A: + pop {r4, r5, r6, r7} + pop {r0} + bx r0 + .syntax divided \ No newline at end of file diff --git a/asm/non_matching/arm_proxy/sub_080173A4.inc b/asm/non_matching/arm_proxy/sub_080173A4.inc new file mode 100644 index 00000000..e48870ae --- /dev/null +++ b/asm/non_matching/arm_proxy/sub_080173A4.inc @@ -0,0 +1,130 @@ + .syntax unified + push {r4, r5, lr} + mov ip, r0 + ldrb r0, [r0, #9] + lsls r0, r0, #3 + ldr r1, _08017410 @ =gUnk_08126DA8 + adds r3, r0, r1 + ldrb r0, [r3] + cmp r0, #0xff + bne _080173CE + ldrb r2, [r3, #2] + ldr r1, _08017414 @ =gUnk_08126ED8 + ldrb r0, [r3, #1] + lsls r0, r0, #2 + adds r0, r0, r1 + ldr r3, [r0] + mov r0, ip + adds r0, #0x68 + ldrb r0, [r0] + subs r0, r0, r2 + lsls r0, r0, #3 + adds r3, r3, r0 +_080173CE: + ldrb r0, [r3] + movs r1, #0xf + ands r1, r0 + lsls r0, r0, #4 + orrs r0, r1 + mov r1, ip + strb r0, [r1, #0x1a] + ldrb r1, [r3, #1] + mov r0, ip + adds r0, #0x44 + strb r1, [r0] + ldrb r1, [r3, #3] + subs r0, #4 + strb r1, [r0] + ldrb r0, [r3, #4] + mov r1, ip + adds r1, #0x3f + strb r0, [r1] + ldrb r0, [r3, #5] + mov r2, ip + strh r0, [r2, #0x12] + ldrh r1, [r3, #6] + cmp r1, #0 + bne _0801741C + ldr r2, _08017418 @ =gPlayerEntity + adds r0, r2, #0 + adds r0, #0x60 + ldrh r1, [r0] + mov r0, ip + adds r0, #0x60 + strh r1, [r0] + adds r5, r2, #0 + b _08017428 + .align 2, 0 +_08017410: .4byte gUnk_08126DA8 +_08017414: .4byte gUnk_08126ED8 +_08017418: .4byte gPlayerEntity +_0801741C: + ldr r0, _0801749C @ =0x000003FF + ands r0, r1 + mov r1, ip + adds r1, #0x60 + strh r0, [r1] + ldr r5, _080174A0 @ =gPlayerEntity +_08017428: + mov r3, ip + ldrb r0, [r3, #0x14] + cmp r0, #0 + bne _08017438 + ldrb r1, [r5, #0x14] + movs r0, #6 + ands r0, r1 + strb r0, [r3, #0x14] +_08017438: + adds r0, r5, #0 + adds r0, #0x38 + ldrb r1, [r0] + mov r0, ip + adds r0, #0x38 + strb r1, [r0] + ldrb r1, [r5, #0x19] + lsrs r1, r1, #6 + lsls r1, r1, #6 + mov r0, ip + ldrb r3, [r0, #0x19] + movs r2, #0x3f + adds r0, r2, #0 + ands r0, r3 + orrs r0, r1 + mov r1, ip + strb r0, [r1, #0x19] + adds r0, r5, #0 + adds r0, #0x29 + ldrb r1, [r0] + lsls r1, r1, #0x1d + mov r4, ip + adds r4, #0x29 + lsrs r1, r1, #0x1d + ldrb r3, [r4] + movs r0, #8 + rsbs r0, r0, #0 + ands r0, r3 + orrs r0, r1 + strb r0, [r4] + ldrb r0, [r5, #0x1b] + lsrs r0, r0, #6 + lsls r0, r0, #6 + mov r3, ip + ldrb r1, [r3, #0x1b] + ands r2, r1 + orrs r2, r0 + strb r2, [r3, #0x1b] + mov r2, ip + adds r2, #0x45 + movs r1, #1 + movs r0, #1 + strb r0, [r2] + ldrb r0, [r3, #0x10] + orrs r1, r0 + strb r1, [r3, #0x10] + pop {r4, r5} + pop {r0} + bx r0 + .align 2, 0 +_0801749C: .4byte 0x000003FF +_080174A0: .4byte gPlayerEntity + .syntax divided \ No newline at end of file diff --git a/asm/non_matching/arm_proxy/sub_08017530.inc b/asm/non_matching/arm_proxy/sub_08017530.inc new file mode 100644 index 00000000..f8699eeb --- /dev/null +++ b/asm/non_matching/arm_proxy/sub_08017530.inc @@ -0,0 +1,90 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + adds r0, #0x45 + ldrb r1, [r0] + movs r0, #0x7f + ands r0, r1 + cmp r0, #0 + beq _08017550 + ldr r0, _080175D8 @ =gUnk_020342F8 + subs r1, #1 + bl ReadBit + cmp r0, #0 + bne _08017550 + bl DeleteThisEntity +_08017550: + ldrb r0, [r4, #0xc] + cmp r0, #0 + bne _08017566 + ldrb r1, [r4, #0x10] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + bne _08017566 + adds r0, r4, #0 + bl sub_0806EC78 +_08017566: + adds r0, r4, #0 + bl sub_0805E3B0 + cmp r0, #0 + bne _08017584 + ldr r2, _080175DC @ =gNPCFunctions + ldrb r1, [r4, #9] + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #2 + adds r0, r0, r2 + ldr r1, [r0] + adds r0, r4, #0 + bl _call_via_r1 +_08017584: + ldr r0, [r4, #4] + cmp r0, #0 + beq _080175D2 + ldr r2, _080175DC @ =gNPCFunctions + ldrb r1, [r4, #9] + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #2 + adds r2, #4 + adds r0, r0, r2 + ldr r1, [r0] + cmp r1, #0 + beq _080175A4 + adds r0, r4, #0 + bl _call_via_r1 +_080175A4: + adds r0, r4, #0 + adds r0, #0x45 + ldrb r1, [r0] + movs r0, #0x7f + ands r0, r1 + cmp r0, #0 + beq _080175CC + ldr r2, _080175E0 @ =gUnk_02031EC0 + lsls r0, r1, #4 + subs r0, #0x10 + adds r2, r0, r2 + ldr r3, _080175E4 @ =gRoomControls + ldrh r0, [r4, #0x2e] + ldrh r1, [r3, #6] + subs r0, r0, r1 + strh r0, [r2, #4] + ldrh r0, [r4, #0x32] + ldrh r1, [r3, #8] + subs r0, r0, r1 + strh r0, [r2, #6] +_080175CC: + adds r0, r4, #0 + bl sub_0800404C +_080175D2: + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_080175D8: .4byte gUnk_020342F8 +_080175DC: .4byte gNPCFunctions +_080175E0: .4byte gUnk_02031EC0 +_080175E4: .4byte gRoomControls + .syntax divided \ No newline at end of file diff --git a/asm/non_matching/arm_proxy/sub_0801766C.inc b/asm/non_matching/arm_proxy/sub_0801766C.inc new file mode 100644 index 00000000..6ef38554 --- /dev/null +++ b/asm/non_matching/arm_proxy/sub_0801766C.inc @@ -0,0 +1,68 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + adds r3, r4, #0 + adds r3, #0x29 + ldrb r1, [r3] + movs r0, #0x40 + ands r0, r1 + cmp r0, #0 + beq _08017682 +_0801767E: + movs r0, #1 + b _080176DE +_08017682: + ldr r2, _080176C0 @ =gUnk_03003C70 + movs r0, #0x80 + lsls r0, r0, #1 + adds r1, r2, r0 + cmp r1, r2 + bls _080176DC +_0801768E: + ldr r0, [r2, #8] + cmp r0, #0 + bne _080176D6 + str r4, [r2, #8] + strb r0, [r2, #0xc] + ldrb r0, [r3] + movs r1, #0x40 + orrs r0, r1 + strb r0, [r3] + ldr r3, _080176C4 @ =gUnk_02018EA0 + ldr r1, [r3] + ldrb r0, [r1, #0xc] + cmp r0, #0 + beq _080176C8 +_080176AA: + ldr r1, [r1, #4] + ldrb r0, [r1, #0xc] + cmp r0, #0 + bne _080176AA + str r1, [r2, #4] + ldr r0, [r1] + str r0, [r2] + str r2, [r0, #4] + str r2, [r1] + b _0801767E + .align 2, 0 +_080176C0: .4byte gUnk_03003C70 +_080176C4: .4byte gUnk_02018EA0 +_080176C8: + str r1, [r2, #4] + ldr r0, [r1] + str r0, [r2] + str r2, [r0, #4] + str r2, [r1] + str r2, [r3] + b _0801767E +_080176D6: + adds r2, #0x10 + cmp r1, r2 + bhi _0801768E +_080176DC: + movs r0, #0 +_080176DE: + pop {r4} + pop {r1} + bx r1 + .syntax divided \ No newline at end of file diff --git a/asm/non_matching/arm_proxy/sub_080176E4.inc b/asm/non_matching/arm_proxy/sub_080176E4.inc new file mode 100644 index 00000000..5000774e --- /dev/null +++ b/asm/non_matching/arm_proxy/sub_080176E4.inc @@ -0,0 +1,54 @@ + .syntax unified + push {lr} + adds r2, r0, #0 + adds r0, #0x29 + ldrb r1, [r0] + movs r0, #0x40 + ands r0, r1 + cmp r0, #0 + beq _08017720 + movs r0, #1 + b _0801773A +_080176F8: + str r2, [r3, #8] + movs r0, #1 + strb r0, [r3, #0xc] + adds r2, #0x29 + ldrb r0, [r2] + movs r1, #0x40 + orrs r0, r1 + strb r0, [r2] + ldr r2, _0801771C @ =gUnk_02018EA0 + ldr r0, [r2] + str r0, [r3, #4] + ldr r1, [r0] + str r1, [r3] + str r3, [r1, #4] + str r3, [r0] + str r3, [r2] + movs r0, #1 + b _0801773A + .align 2, 0 +_0801771C: .4byte gUnk_02018EA0 +_08017720: + ldr r3, _08017740 @ =gUnk_03003C70 + movs r0, #0x80 + lsls r0, r0, #1 + adds r1, r3, r0 + cmp r1, r3 + bls _08017738 +_0801772C: + ldr r0, [r3, #8] + cmp r0, #0 + beq _080176F8 + adds r3, #0x10 + cmp r1, r3 + bhi _0801772C +_08017738: + movs r0, #0 +_0801773A: + pop {r1} + bx r1 + .align 2, 0 +_08017740: .4byte gUnk_03003C70 + .syntax divided \ No newline at end of file diff --git a/asm/non_matching/arm_proxy/sub_080177A0.inc b/asm/non_matching/arm_proxy/sub_080177A0.inc new file mode 100644 index 00000000..99962e08 --- /dev/null +++ b/asm/non_matching/arm_proxy/sub_080177A0.inc @@ -0,0 +1,95 @@ + .syntax unified + push {r4, r5, r6, lr} + mov ip, r0 + adds r5, r1, #0 + adds r0, #0x38 + adds r1, #0x38 + ldrb r2, [r0] + ldrb r0, [r1] + ands r0, r2 + cmp r0, #0 + beq _08017848 + mov r0, ip + ldr r3, [r0, #0x48] + ldr r4, [r5, #0x48] + ldrb r1, [r3, #6] + ldrb r0, [r4, #6] + adds r2, r1, r0 + mov r1, ip + movs r6, #0x2e + ldrsh r0, [r1, r6] + movs r6, #0x2e + ldrsh r1, [r5, r6] + subs r0, r0, r1 + movs r1, #0 + ldrsb r1, [r3, r1] + adds r0, r0, r1 + movs r1, #0 + ldrsb r1, [r4, r1] + subs r0, r0, r1 + adds r0, r0, r2 + lsls r1, r2, #1 + cmp r0, r1 + bhi _08017848 + ldrb r1, [r3, #7] + ldrb r0, [r4, #7] + adds r2, r1, r0 + mov r1, ip + movs r6, #0x32 + ldrsh r0, [r1, r6] + movs r6, #0x32 + ldrsh r1, [r5, r6] + subs r0, r0, r1 + movs r1, #1 + ldrsb r1, [r3, r1] + adds r0, r0, r1 + movs r1, #1 + ldrsb r1, [r4, r1] + subs r0, r0, r1 + adds r0, r0, r2 + lsls r1, r2, #1 + cmp r0, r1 + bhi _08017848 + mov r0, ip + adds r0, #0x3c + ldrb r1, [r0] + movs r6, #0x10 + adds r0, r6, #0 + ands r0, r1 + movs r2, #5 + cmp r0, #0 + beq _0801781A + ldrb r2, [r3, #8] +_0801781A: + adds r0, r5, #0 + adds r0, #0x3c + ldrb r1, [r0] + adds r0, r6, #0 + ands r0, r1 + cmp r0, #0 + beq _0801782E + ldrb r0, [r4, #8] + adds r2, r2, r0 + b _08017830 +_0801782E: + adds r2, #5 +_08017830: + mov r1, ip + movs r3, #0x36 + ldrsh r0, [r1, r3] + movs r6, #0x36 + ldrsh r1, [r5, r6] + subs r0, r0, r1 + adds r0, r0, r2 + lsls r1, r2, #1 + cmp r0, r1 + bhi _08017848 + movs r0, #1 + b _0801784A +_08017848: + movs r0, #0 +_0801784A: + pop {r4, r5, r6} + pop {r1} + bx r1 + .syntax divided \ No newline at end of file diff --git a/data/data_089FC6C4.s b/data/data_089FC6C4.s index 710d2588..4b69eaea 100644 --- a/data/data_089FC6C4.s +++ b/data/data_089FC6C4.s @@ -4,14 +4,44 @@ .section .rodata .align 2 -gUnk_089FB770:: @ 089FB770 - .incbin "baserom.gba", 0x9FB770, 0x0000010 - -gUnk_089FB780:: @ 089FB780 - .incbin "baserom.gba", 0x9FB780, 0x0000F44 - gUnk_089FC6C4:: @ 089FC6C4 - .incbin "baserom.gba", 0x9FC6C4, 0x0000090 +@ replacing .incbin "baserom.gba", 0x009fc6c4, 0x90 +.4byte ply_fine +.4byte ply_goto +.4byte ply_patt +.4byte ply_pend +.4byte ply_rept +.4byte ply_fine +.4byte ply_fine +.4byte ply_fine +.4byte ply_fine +.4byte ply_prio +.4byte ply_tempo +.4byte ply_keysh +.4byte ply_voice +.4byte ply_vol +.4byte ply_pan +.4byte ply_bend +.4byte ply_bendr +.4byte ply_lfos +.4byte ply_lfodl +.4byte ply_mod +.4byte ply_modt +.4byte ply_fine +.4byte ply_fine +.4byte ply_tune +.4byte ply_fine +.4byte ply_fine +.4byte ply_fine +.4byte ply_port +.4byte ply_fine +.4byte ply_endtie +.4byte SampleFreqSet +.4byte TrackStop +.4byte FadeOutBody +.4byte TrkVolPitSet +.4byte RealClearChain +.4byte SoundMainBTM gUnk_089FC754:: @ 089FC754 .incbin "baserom.gba", 0x9FC754, 0x00000B4 @@ -38,7 +68,19 @@ gUnk_089FC938:: @ 089FC938 .incbin "baserom.gba", 0x9FC938, 0x0000034 gUnk_089FC96C:: @ 089FC96C - .incbin "baserom.gba", 0x9FC96C, 0x0000030 +@ replacing .incbin "baserom.gba", 0x009fc96c, 0x30 +.4byte ply_xxx +.4byte ply_xwave +.4byte ply_xtype +.4byte ply_xxx +.4byte ply_xatta +.4byte ply_xdeca +.4byte ply_xsust +.4byte ply_xrele +.4byte ply_xiecv +.4byte ply_xiecl +.4byte ply_xleng +.4byte ply_xswee gUnk_089FC99C:: @ 089FC99C .incbin "baserom.gba", 0x9FC99C, 0x0000060 diff --git a/data/sprite_table.s b/data/sprite_table.s new file mode 100644 index 00000000..0d54adbb --- /dev/null +++ b/data/sprite_table.s @@ -0,0 +1,11 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .section .rodata + .align 2 + +gUnk_089FB770:: @ 089FB770 + .byte 00, 0x0d, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 + +gUnk_089FB780:: @ 089FB780 + .incbin "baserom.gba", 0x9FB780, 0x0000F44 diff --git a/include/audio.h b/include/audio.h new file mode 100644 index 00000000..3690de89 --- /dev/null +++ b/include/audio.h @@ -0,0 +1,243 @@ + +typedef enum { + NONE, + BGM_CASTLE_TOURNAMENT, + BGM_VAATI_MOTIF, + BGM_TITLE_SCREEN, + BGM_CASTLE_MOTIF, + BGM_ELEMENT_GET, + BGM_FAIRY_FOUNTAIN, + BGM_FILE_SELECT, + BGM_INTRO_CUTSCENE, + BGM_CREDITS, + BGM_GAMEOVER, + BGM_SAVING_ZELDA, + BGM_LTTP_TITLE, + BGM_VAATI_THEME, + BGM_EZLO_THEME, + BGM_STORY, + BGM_FESTIVAL_APPROACH, + BGM_BEAT_VAATI, + + BGM_BEANSTALK = 0x13, + BGM_HOUSE, + BGM_CUCCO_MINIGAME, + BGM_SYRUP_THEME, + BGM_DUNGEON, + BGM_ELEMENT_THEME, + BGM_HYRULE_FIELD, + BGM_HYRULE_CASTLE, + BGM_HYRULE_CASTLE_NOINTRO, + BGM_MINISH_VILLAGE, + BGM_MINISH_WOODS, + BGM_CRENEL_STORM, + BGM_CASTOR_WILDS, + BGM_HYRULE_TOWN, + BGM_ROYAL_VALLEY, + BGM_CLOUD_TOPS, + BGM_DARK_HYRULE_CASTLE, + BGM_SECRET_CASTLE_ENTRANCE, + BGM_DEEPWOOD_SHRINE, + BGM_CAVE_OF_FLAMES, + BGM_FORTRESS_OF_WINDS, + BGM_TEMPLE_OF_DROPLETS, + BGM_PALACE_OF_WINDS, + BGM_EZLO_STORY, + BGM_ROYAL_CRYPT, + BGM_ELEMENTAL_SANCTUARY, + BGM_FIGHT_THEME, + BGM_BOSS_THEME, + BGM_VAATI_REBORN, + BGM_VAATI_TRANSFIGURED, + BGM_CASTLE_COLLAPSE, + BGM_VAATI_WRATH, + BGM_FIGHT_THEME2, + BGM_DIGGING_CAVE, + BGM_SWIFTBLADE_DOJO, + BGM_MINISH_CAP, + BGM_MT_CRENEL, + BGM_PICORI_FESTIVAL, + BGM_LOST_WOODS, + BGM_FAIRY_FOUNTAIN2, + BGM_WIND_RUINS, + + BGM_LEARN_SCROLL = 0x5E, + BGM_EZLO_GET, + + SFX_BEEP = 0x64, + SFX_TEXTBOX_OPEN, + SFX_TEXTBOX_CLOSE, + SFX_TEXTBOX_NEXT, + SFX_TEXTBOX_SWAP, + SFX_TEXTBOX_CHOICE, + SFX_TEXTBOX_SELECT, + SFX_6B, + SFX_MENU_CANCEL, + SFX_MENU_ERROR, + SFX_RUPEE_BOUNCE, + SFX_RUPEE_GET, + SFX_HEART_BOUNCE, + SFX_HEART_GET, + SFX_SECRET, + SFX_SECRET_BIG, + SFX_METAL_CLINK, + SFX_PLY_VO1, + SFX_PLY_VO2, + SFX_PLY_VO3, + SFX_PLY_VO4, + SFX_PLY_VO5, + SFX_PLY_VO6, + SFX_PLY_VO7, + SFX_PLY_JUMP, + SFX_PLY_LAND, + SFX_7E, + SFX_PLY_LIFT, + SFX_80, + SFX_81, + SFX_82, + SFX_WATER_WALK, + SFX_WATER_SPLASH, + SFX_FALL_HOLE, + SFX_86, + SFX_PLY_DIE, + SFX_88, + SFX_BARREL_RELEASE, + SFX_BARREL_ENTER, + SFX_BARREL_ROLL, + SFX_BARREL_ROLL_STOP, + SFX_VO_EZLO1, + SFX_VO_EZLO2, + SFX_VO_EZLO3, + SFX_VO_EZLO4, + SFX_VO_EZLO5, + SFX_VO_EZLO6, + SFX_VO_EZLO7, + SFX_VO_ZELDA1, + SFX_VO_ZELDA2, + SFX_VO_ZELDA3, + SFX_VO_ZELDA4, + SFX_VO_ZELDA5, + SFX_VO_ZELDA6, + SFX_VO_ZELDA7, + SFX_9B, + SFX_9C, + SFX_9D, + SFX_9E, + SFX_9F, + SFX_A0, + SFX_VO_TINGLE1, + SFX_VO_TINGLE2, + SFX_VO_KING1, + SFX_VO_KING2, + SFX_VO_KING3, + SFX_VO_KING4, + SFX_VO_KING5, + SFX_A8, + SFX_A9, + SFX_AA, + SFX_SPIRITS_RELEASE, + SFX_AC, + SFX_VO_BEEDLE, + SFX_AE, + SFX_AF, + SFX_B0, + SFX_VO_MINISH1, + SFX_VO_MINISH2, + SFX_VO_MINISH3, + SFX_VO_MINISH4, + + SFX_REM_SLEEP = 0xCC, + SFX_TASK_COMPLETE, + SFX_KEY_APPEAR, + SFX_CF, + SFX_D0, + SFX_VO_DOG, + SFX_VO_CAT, + SFX_VO_EPONA, + SFX_VO_COW, + SFX_VO_CUCCO_CALL, + SFX_VO_CHEEP, + SFX_ITEM_SWORD_CHARGE, + SFX_ITEM_SWORD_CHARGE_FINISH, + SFX_D9, + SFX_DA, + SFX_VO_STURGEON, + SFX_HAMMER1, + SFX_HAMMER2, + SFX_HAMMER3, + SFX_HAMMER4, + SFX_HAMMER5, + SFX_HAMMER6, + SFX_CUCCO_MINIGAME_BELL, + SFX_E3, + SFX_E4, + SFX_BUTTON_DEPRESS, + SFX_THUD_HEAVY, + SFX_WIND1, + SFX_WIND2, + SFX_WIND3, + + SFX_SUMMON = 0xF4, + SFX_F5, + SFX_EVAPORATE, + SFX_APPARATE, + SFX_F8, + SFX_TELEPORTER, + + SFX_ITEM_BOMB_EXPLODE = 0xFD, + SFX_HIT, + + SFX_ITEM_SHIELD_BOUNCE = 0x118, + SFX_ITEM_GLOVES_KNOCKBACK, + SFX_EM_ARMOS_ON, + + SFX_EM_MOBLIN_SPEAR = 0x11E, + SFX_LOW_HEALTH, + SFX_CHARGING_UP, + SFX_STAIRS, + + SFX_BOSS_HIT = 0x127, + SFX_BOSS_DIE, + SFX_BOSS_EXPLODE, + + SFX_ITEM_LANTERN_ON = 0x13D, + SFX_ITEM_LANTERN_OFF, + SFX_ITEM_SWORD_BEAM, + SFX_140, + SFX_HEART_CONTAINER_SPAWN, + SFX_SPARKLES, + + SFX_PLY_SHRINKING = 0x16F, + SFX_PLY_GROW, + + SFX_LAVA_TILE_STEP = 0x17B, + SFX_LAVA_TILE_WOBBLE, + SFX_LAVA_TILE_SINK, + SFX_LAVA_TILE_FLIP, + SFX_LAVA_TILE_LAND, + + SFX_STAIRS_ASCEND = 0x187, + SFX_STAIRS_DESCEND, + + SFX_ICE_BLOCK_SLIDE = 0x1B1, + SFX_ICE_BLOCK_STOP, + SFX_ICE_BLOCK_MELT, + + SFX_VO_GORON1 = 0x1B7, + SFX_VO_GORON2, + SFX_VO_GORON3, + SFX_VO_GORON4, + SFX_EM_DEKUSCRUB_HIT, + + SFX_ELEMENT_PLACE = 0x1CD, + SFX_ELEMENT_FLOAT, + SFX_ELEMENT_CHARGE, + SFX_1D0, + SFX_ELEMENT_INFUSE, + + SFX_VO_CUCCO1 = 0x1D6, + SFX_VO_CUCCO2, + SFX_VO_CUCCO3, + SFX_VO_CUCCO4, + SFX_VO_CUCCO5, +} Sound; \ No newline at end of file diff --git a/include/entity.h b/include/entity.h index ad4df8fb..d1593d1d 100644 --- a/include/entity.h +++ b/include/entity.h @@ -19,9 +19,23 @@ typedef struct { } EntityType; typedef struct { - u8 unknown[8]; + s8 offset_x; + s8 offset_y; + u8 unk2[4]; + u8 width; + u8 height; } BoundingBox; +typedef struct { + s8 offset_x; + s8 offset_y; + u8 unknown[4]; + u8 width; + u8 height; + u8 depth; + u8 unknown2[3]; +} BoundingBox3D; + typedef struct Entity { /*0x00*/ struct Entity* prev; /*0x04*/ struct Entity* next; diff --git a/include/functions.h b/include/functions.h index 407641c0..0a50c7d3 100644 --- a/include/functions.h +++ b/include/functions.h @@ -209,7 +209,7 @@ extern u32 sub_0807953C(void); extern void sub_080AE068(Entity*); extern u32 sub_0800445C(Entity*); extern void sub_0807A108(void); -extern void sub_0801766C(Entity*); +extern u32 sub_0801766C(Entity*); extern void sub_08004168(Entity*); extern u32 sub_08052638(u32); extern void InitDMA(void); diff --git a/include/main.h b/include/main.h index 3d60ee25..55e7b341 100644 --- a/include/main.h +++ b/include/main.h @@ -46,7 +46,7 @@ enum { }; typedef struct { - u8 interruptFlag; + vu8 interruptFlag; u8 field_0x1; u8 screen; u8 funcIndex; diff --git a/include/manager.h b/include/manager.h index 7830adc4..a0d8eb1c 100644 --- a/include/manager.h +++ b/include/manager.h @@ -191,4 +191,7 @@ extern void sub_0805DE38(Entity*); extern void sub_0805E0A8(Entity*); extern void sub_0805E0FC(); +void (*const gManagerFunctions[58])(); + + #endif diff --git a/include/npc.h b/include/npc.h index c862b348..024a9a43 100644 --- a/include/npc.h +++ b/include/npc.h @@ -172,4 +172,7 @@ extern void NPC58_Head(Entity*); extern u32 UpdateFuseInteraction(Entity*); + +void (*const gNPCFunctions[128][3])(Entity*); + #endif diff --git a/include/object.h b/include/object.h index d0bdcea8..5480a8a2 100644 --- a/include/object.h +++ b/include/object.h @@ -199,4 +199,6 @@ extern void ObjectBF(Entity*); extern void EnemyItem(Entity*); extern void ObjectC1(Entity*); +void (*const gObjectFunctions[194])(Entity*); + #endif diff --git a/include/player.h b/include/player.h index 0e0c7356..f1f08f6f 100644 --- a/include/player.h +++ b/include/player.h @@ -67,7 +67,8 @@ typedef struct { /*0x94*/ u32 field_0x94; /*0x98*/ u16 field_0x98; /*0x9a*/ u16 field_0x9a; - /*0x9c*/ u32 field_0x9c[3]; + /*0x9c*/ u32 field_0x9c; + /*0xa0*/ u8 field_0xa0[8]; /*0xa8*/ u8 field_0xa8; /*0xa9*/ u8 field_0xa9; /*0xaa*/ u8 field_0xaa; @@ -78,26 +79,26 @@ typedef struct { typedef struct { - u8 walletType; - u8 heartPieces; - u8 health; - u8 maxHealth; - u8 bombCount; - u8 arrowCount; - u8 bombBagType; - u8 quiverType; - u8 filler[4]; - u8 itemOnA; - u8 itemOnB; - u8 filler2[10]; - u16 rupees; - u16 field_0x1a; - u8 field_0x1c; - u8 field_0x1d; - u8 field_0x1e; - u8 field_0x1f; - u16 field_0x20; - u8 filler4[4]; + /*0x00*/ u8 walletType; + /*0x01*/ u8 heartPieces; + /*0x02*/ u8 health; + /*0x03*/ u8 maxHealth; + /*0x04*/ u8 bombCount; + /*0x05*/ u8 arrowCount; + /*0x06*/ u8 bombBagType; + /*0x07*/ u8 quiverType; + /*0x08*/ u8 filler[4]; + /*0x0c*/ u8 itemOnA; + /*0x0d*/ u8 itemOnB; + /*0x0e*/ u8 bottles[4]; + /*0x12*/ u8 floorType; + /*0x13*/ u8 filler3[5]; + /*0x18*/ u16 rupees; + /*0x1a*/ u16 field_0x1a; + /*0x1c*/ u16 field_0x1c; + /*0x1e*/ u16 field_0x1e; + /*0x20*/ u16 field_0x20; + /*0x22*/ u8 filler4[4]; } Stats; typedef struct { @@ -109,6 +110,8 @@ typedef struct { /*0xf*/ u8 field_0xf; } ItemBehavior; +extern void (*const gPlayerItemFunctions[])(Entity*); + extern u8 gBombBagSizes[]; extern u8 gQuiverSizes[]; diff --git a/include/structures.h b/include/structures.h index 60d1a36e..b5d29481 100644 --- a/include/structures.h +++ b/include/structures.h @@ -44,7 +44,7 @@ typedef struct { extern struct_02000010 gUnk_02000010; typedef struct { - u32 frameCount; // regular frame count? does anything reset it? + s32 frameCount; // regular frame count? does anything reset it? u8 field_0x4[0x4]; bool8 transitioningOut; u8 transitionType; // transition when changing areas diff --git a/linker.ld b/linker.ld index 0a354d34..f17fe5e0 100644 --- a/linker.ld +++ b/linker.ld @@ -301,6 +301,7 @@ SECTIONS { /* C source compiled with interworking */ asm/code_08016B30.o(.text); asm/updateBackgroundRegisters.o(.text); + src/code_08016DF8.o(.text); asm/code_08016DF8.o(.text); /* C source compiled without interworking */ asm/code_08018500.o(.text); @@ -1030,6 +1031,7 @@ SECTIONS { src/intro.o(.rodata); data/data_081320FC.o(.rodata); data/strings.o(.rodata); + data/sprite_table.o(.rodata); data/data_089FC6C4.o(.rodata); } >rom diff --git a/src/arm_proxy.c b/src/arm_proxy.c new file mode 100644 index 00000000..80a59a42 --- /dev/null +++ b/src/arm_proxy.c @@ -0,0 +1,547 @@ +#include "global.h" +#include "audio.h" +#include "main.h" +#include "player.h" +#include "structures.h" +#include "save.h" +#include "textbox.h" +#include "functions.h" +#include "object.h" +#include "manager.h" +#include "npc.h" + +extern u8 gUnk_03003DE0; +extern u8 gUnk_03000C30; + +extern u16* gUnk_02025EB0; +extern u16* gUnk_0200B650; +extern u8 gUnk_02000070; +extern u8 gUnk_03003DF0[]; +extern u8 gUnk_03003BE0; +extern Entity* gUnk_03004040[3]; +extern u8 gUnk_020342F8; +extern u8 gUnk_03003DB8; +extern void gUnk_030059F0(void); + +extern void sub_080ADD70(); +extern void sub_0801C25C(); +extern void sub_08016C3C(); +extern void sub_08016DF8(); +extern void sub_0804FF98(); +extern u32 sub_0805E3B0(); +extern void sub_08016FF4(); +extern void sub_08070680(); +extern void sub_080171F0(); +extern void sub_08078FB0(); +extern void sub_0800404C(); +extern void sub_0807A050(); +extern u32 sub_08079B24(); +extern void sub_08079708(); +extern void CreateSparkle(); +extern void sub_080028E0(Entity*); +extern void sub_08078180(void); +extern void sub_0807B0C8(void); +extern void sub_0807A8D8(Entity*); +extern void sub_08077FEC(u32); +extern void sub_080173A4(Entity*); +extern void sub_080A2838(Entity*); +extern u32 ReadBit(void*, u32); +extern void sub_0806EC78(Entity*); + +typedef struct { + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; + u8 unk4; + u8 unk5; + u16 unk6; +} ItemFrame; +extern ItemFrame gUnk_08126DA8[]; +extern ItemFrame* gUnk_08126ED8[3]; + +typedef struct { + u16 unk0; + u16 unk1; + u16 x; + u16 y; +} NPCStruct; +extern NPCStruct gUnk_02031EC0[100]; + +typedef struct { + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; + u8 freezeTime; + u8 unk9; +} EntityHandler; + +extern EntityHandler gUnk_03003DC0; + +typedef struct { + void* last; + void* first; + void* node; + u8 flags; +} LinkedList2; + +extern LinkedList2 gUnk_03003C70[16]; +extern LinkedList2* gUnk_02018EA0; + +void sub_08016DF8(void) { + if (gUnk_03003DE0 != 0) { + u8* buf = &gUnk_03000C30; + s32 i = gUnk_03003DE0; + gUnk_03003DE0 = 0; + do { + switch (*buf) { + case 0: + DmaCopy32(3, *(u32*)(buf + 4), *(u32*)(buf + 8), *(u16*)(buf + 2)); + break; + case 1: + LZ77UnCompVram(*(void**)(buf + 4), *(u8**)(buf + 8)); + break; + case 2: + DmaFill32(3, *(u32*)(buf + 4), *(u32*)(buf + 8), *(u16*)(buf + 2)); + break; + } + buf += 12; + i--; + } while (0 < i); + } +} + +void sub_08016E78(void) { + gUnk_03001000.interruptFlag = 0; + VBlankIntrWait(); + do { + } while (gUnk_03001000.interruptFlag == 0); + + sub_080ADD70(); + sub_0801C25C(); + sub_08016C3C(); + sub_08016DF8(); + + if (gUnk_02000070) { + gUnk_02000070 = 0; + if (gUnk_02025EB0 != NULL) { + // sizeof(BGBuffer) = 0x800, what are we omitting? + DmaCopy32(3, &gBG1Buffer, VRAM + (*gUnk_02025EB0 & 0x1f00) * 8, 0x5C0); + } + if (gUnk_0200B650 != NULL) { + DmaCopy32(3, &gBG2Buffer, VRAM + (*gUnk_0200B650 & 0x1f00) * 8, 0x5C0); + } + } + sub_0804FF98(); +} + +void sub_08016F28(Entity* this) { + if (gSave.stats.floorType != 0) + gPlayerState.flags.all |= 0x4000; + else + gPlayerState.flags.all &= ~0x4000; + + if (sub_0805E3B0(this) == 0) { + if ((gPlayerState.flags.all & 0x80000) != 0) { + sub_08077B20(); + if ((gPlayerState.flags.all & 0x200000) != 0) { + gPlayerState.playerAction = 0x18; + gPlayerState.flags.all &= 0xfff7ffff; + gPlayerState.hurtBlinkSpeed = 0xf0; + this->flags |= 0x80; + } else { + this->flags &= 0x7f; + gPlayerState.field_0xa8 = 0xf; + } + } + sub_08016FF4(this); + sub_08070680(this); + if ((this->height.WORD == 0) && (this->action == 1 || this->action == 9)) { + sub_08008790(this, 8); + } + sub_080171F0(); + } + sub_08078FB0(this); + sub_0800404C(this); + sub_0807A050(); +} + +void sub_08016FF4(Entity* this) { + u32 temp; + + gUnk_0200AF00.filler25[10] = 0; + gUnk_0200AF00.filler25[8] = 0; + gUnk_0200AF00.filler25[9] = 0; + + if ((gPlayerEntity.bitfield & 0x80) && (gPlayerEntity.hurtBlinkTime > 0)) + PlaySFX(SFX_86); + + gPlayerState.flags.all &= ~(0x2000000 | 0x200); + if (gPlayerState.flags.all & 0x400) + ResetPlayer(); + if ((gPlayerState.flags.all & 0x400000) && !gPlayerState.field_0xa0[0]) + sub_0807A108(); + if (sub_08079B24() == 0) + sub_08079708(this); + + gUnk_03003DF0[0] = 0; + if (gPlayerState.field_0x27[0] != 0) + gPlayerState.field_0x27[0]--; + + gPlayerState.field_0xa9 = gPlayerState.field_0xa8; + gPlayerState.field_0xa8 = 0; + if (gPlayerState.field_0x40[0x4a] != 0) { + gPlayerState.field_0x40[0x4a]--; + return; + } + + if ((gPlayerState.field_0x8b != 0) || (gTextBox.doTextBox & 0x7f)) + return; + + gRoomVars.unk2 = gTextBox.doTextBox & 0x7f; + temp = gSave.stats.maxHealth / 4; + if (temp > 24) + temp = 24; + if (temp < 8) + temp = 8; + + if (gSave.stats.health <= temp) { + gRoomVars.unk2 = 1; + if ((gUnk_0200AF00.filler0[1] == 0) && gScreenTransition.frameCount % 90 == 0) { + EnqueueSFX(SFX_LOW_HEALTH); + } + } + + if (gSave.stats.filler[2] == 0) { + gSave.stats.field_0x1c = 0; + } else if ((gSave.stats.field_0x1c == 0) || --gSave.stats.field_0x1c == 0) { + gSave.stats.filler[2] = 0; + PlaySFX(SFX_ICE_BLOCK_MELT); + } + + if (gSave.stats.filler[3] == 0) { + gSave.stats.field_0x1e = 0; + } else if ((gSave.stats.field_0x1e == 0) || (--gSave.stats.field_0x1e == 0)) { + gSave.stats.filler[3] = 0; + PlaySFX(SFX_140); + } else if ((gSave.stats.field_0x1e & 0xf) == 0) { + CreateSparkle(this); + } + + if (gSave.stats.floorType == 0) { + gSave.stats.field_0x20 = 0; + } else if ((gSave.stats.field_0x20 == 0) || --gSave.stats.field_0x20 == 0) { + gSave.stats.floorType = 0; + } else if ((gSave.stats.field_0x20 & 0x3f) == 0) { + // lava or water splash FX + CreateFx(this, 0x55 + gSave.stats.floorType, 0); + } +} + +void sub_080171F0(void) { + if (gPlayerState.field_0x1a[0] != 0) + ResetPlayer(); + if (gPlayerState.field_0x14 != 0) + gPlayerState.field_0x14--; + if (gPlayerEntity.field_0x7a.HWORD != 0) + gPlayerEntity.field_0x7a.HWORD--; + + gPlayerEntity.bitfield &= ~0x80; + if (gPlayerEntity.action != 0x14) + gPlayerState.flags.all = (gPlayerState.flags.all & ~0x10000) | (0x8000 * (gPlayerState.flags.all & 2)); + + gPlayerState.flags.all &= ~2; + sub_080028E0(&gPlayerEntity); + + if (gPlayerState.flags.all & 0x400000) + gUnk_0200AF00.filler25[10] = 1; + + sub_08078180(); + gPlayerState.field_0x7 &= ~0x80; + gPlayerState.field_0xa &= 0xf; + gPlayerState.keepFacing &= ~0x80; + gPlayerState.field_0x1a[0] = 0; + gPlayerState.field_0x80 = 0; + gPlayerState.field_0xaa = 0; + _DmaZero(&gUnk_03003BE0, 0x8c); + gPlayerEntity.spriteOffsetY = gPlayerState.field_0x3f; + gPlayerState.field_0x3f = 0; + sub_0807B0C8(); + + if (gPlayerState.flags.all & 0x400000) + gUnk_03004040[0]->spriteOffsetY = gUnk_03004040[1]->spriteOffsetY = gUnk_03004040[2]->spriteOffsetY = 0; + + if (gPlayerEntity.action == 0x1d) + gPlayerState.flags.all |= 0x20000000; + else + gPlayerState.flags.all &= ~0x20000000; + + sub_0807A8D8(&gPlayerEntity); + if (gPlayerState.jumpStatus & 0xc0) + gPlayerEntity.hurtBlinkTime = 0xfe; + + if (gPlayerEntity.action != 0x17) { + sub_08077FEC(gPlayerEntity.action); + } +} + +void sub_08017338(Entity *this) { + if (!(this->flags & 1) && !this->action && !this->previousActionFlag) + sub_080173A4(this); + + if (!sub_0805E3B0(this)) { + gPlayerItemFunctions[this->entityType.subtype](this); + this->bitfield &= ~0x80; + if (this->hurtBlinkTime != 0) { + if (this->hurtBlinkTime > 0) + this->hurtBlinkTime--; + else + this->hurtBlinkTime++; + } + } + sub_0800404C(this); +} + +// tiny regalloc +NONMATCH("asm/non_matching/sub_080173A4.inc", void sub_080173A4(Entity* this)) { + ItemFrame* entry; + + entry = &gUnk_08126DA8[this->entityType.subtype]; + if (entry->unk0 == 0xff) { + u32 temp = entry->unk2; + ItemFrame* temp2 = gUnk_08126ED8[entry->unk1]; + entry = &temp2[this->field_0x68.HALF.LO - temp]; + } + + this->palette.raw = ((entry->unk0 & 0xf) << 4) | entry->unk0; + this->field_0x44 = entry->unk1; + this->field_0x40 = entry->unk3; + this->damageType = entry->unk4; + this->spriteIndex = entry->unk5; + if (entry->unk6 == 0) + this->spriteVramOffset = gPlayerEntity.spriteVramOffset; + else + this->spriteVramOffset = entry->unk6 & 0x3ff; + + if (this->animationState == 0) + this->animationState = gPlayerEntity.animationState & 6; + + this->collisionLayer = gPlayerEntity.collisionLayer; + this->spriteRendering.b3 = gPlayerEntity.spriteRendering.b3; + this->spritePriority.b0 = gPlayerEntity.spritePriority.b0; + this->spriteOrientation.flipY = gPlayerEntity.spriteOrientation.flipY; + this->currentHealth = 1; + this->flags |= 1; +} +END_NONMATCH + +void sub_080174A4(Entity* this) { + int iVar1; + + if (((this->flags & 1) == 0) && (this->action == 0)) { + sub_080A2838(this); + } + if (this->hurtBlinkTime != 0) { + this->hurtBlinkTime++; + } + if (!sub_0805E3B0(this)) { + gObjectFunctions[this->entityType.subtype](this); + this->bitfield &= ~0x80; + } + sub_0800404C(this); +} + +void sub_08017508(Entity* this) { + if (!sub_0805E3B0(this)) + gManagerFunctions[this->entityType.subtype](this); +} + +// regalloc +NONMATCH("asm/non_matching/sub_08017530.inc", void sub_08017530(Entity* this)) { + if ((this->currentHealth & 0x7f) && + !ReadBit(&gUnk_020342F8, this->currentHealth - 1)) { + DeleteThisEntity(); + } + if ((this->action == 0) && ((this->flags & 1) == 0)) { + sub_0806EC78(this); + } + if (!sub_0805E3B0(this)) { + gNPCFunctions[this->entityType.subtype][0](this); + } + if (this->next != NULL) { + if (gNPCFunctions[this->entityType.subtype][1] != NULL) { + gNPCFunctions[this->entityType.subtype][1](this); + } + if ((this->currentHealth & 0x7f) != 0) { + u32 temp = this->currentHealth & 0x7f; + gUnk_02031EC0[temp * 2 - 2].x = this->x.HALF.HI - gRoomControls.roomOriginX; + gUnk_02031EC0[temp * 2 - 2].y = this->y.HALF.HI - gRoomControls.roomOriginY; + } + sub_0800404C(this); + } +} +END_NONMATCH + +void sub_080175E8(void) { + gUnk_03003DB8 = 0; +} + +void sub_080175F4(void) { + u32 flags; + u32 temp; + + void (*func)(void); + + temp = gUnk_03003DC0.unk0; + if (gUnk_03003DC0.unk0 <= gUnk_03003DC0.unk1) + temp = gUnk_03003DC0.unk1; + if (temp != 0) + return; + + func = &gUnk_030059F0; + if (gPlayerState.field_0x8b != 0) { + u32 temp = gPlayerEntity.flags; + gPlayerEntity.flags &= 0x7f; + func(); + gPlayerEntity.flags = temp; + } else { + func(); + } +} + +void sub_08017640(void) { + _DmaZero(&gUnk_03003C70,0x100); + gUnk_02018EA0 = (LinkedList2*)&gUnk_03003C70[0].last; + gUnk_03003C70[0].last = &gUnk_03003C70[0].last; + gUnk_03003C70[0].first = &gUnk_03003C70[0].last; + gUnk_03003C70[0].node = &gPlayerEntity; +} + +// Loop declaration seems wrong +NONMATCH("asm/non_matching/sub_0801766C.inc", u32 sub_0801766C(Entity* this)) { + u32 uVar1; + LinkedList2* puVar3; + LinkedList2* puVar2; + LinkedList2* pLVar2; + LinkedList2* i; + u8* pbVar4; + + if (this->spritePriority.b2 != 0) { + return 1; + } else { + for (i = &gUnk_03003C70[0]; i < &gUnk_03003C70[16]; ++i) { + if (i->node == NULL) { + i->node = this; + i->flags = 0; + this->spritePriority.b2 = 1; + pLVar2 = gUnk_02018EA0; + if (gUnk_02018EA0->flags != 0) { + do { + pLVar2 = pLVar2->first; + } while (pLVar2->flags != 0); + i->first = pLVar2; + puVar3 = pLVar2->last; + i->last = puVar3; + puVar3->first = i; + pLVar2->last = i; + } else { + i->first = gUnk_02018EA0; + puVar2 = gUnk_02018EA0->last; + i->last = puVar2; + puVar2->first = i; + gUnk_02018EA0->last = i; + gUnk_02018EA0 = i; + } + return 1; + } + } + return 0; + } +} +END_NONMATCH + +// same loop issue +NONMATCH("asm/non_matching/sub_080176E4.inc", u32 sub_080176E4(Entity* this)) { + u32 uVar1; + LinkedList2* j; + LinkedList2* i; + u8* pbVar4; + + if (this->spritePriority.b2 != 0) { + return 1; + } else { + for (i = &gUnk_03003C70[0]; i < &gUnk_03003C70[16]; ++i) { + if (i->node == NULL) { + i->node = this; + i->flags = 1; + this->spritePriority.b2 = 1; + i->first = gUnk_02018EA0; + j = gUnk_02018EA0->last; + i->last = j; + j->first = i; + gUnk_02018EA0->last = i; + gUnk_02018EA0 = i; + return 1; + } + } + return 0; + } +} +END_NONMATCH + +// you guessed it +NONMATCH("asm/non_matching/sub_08016DF8.inc", void sub_08017744(Entity* this)) { + LinkedList2* i; + for (i = &gUnk_03003C70[0]; i < &gUnk_03003C70[16]; ++i) { + if (i->node == this) { + if (this->spritePriority.b2 != 0) { + this->spritePriority.b2 = 0; + i->node = NULL; + ((LinkedList2*)i->last)->first = i->first; + ((LinkedList2*)i->first)->last = i->last; + if (i != gUnk_02018EA0) + return; + gUnk_02018EA0 = i->first; + } + } + } +} +END_NONMATCH + +// regalloc +NONMATCH("asm/non_matching/sub_080177A0.inc", bool32 sub_080177A0(Entity* this, Entity* that)) { + u32 this_d; + u32 depth; + + if ((that->collisionLayer & this->collisionLayer) != 0) { + BoundingBox* bb_this = this->boundingBox; + BoundingBox* bb_that = that->boundingBox; + u32 this_w = bb_this->width; + u32 that_w = bb_that->width; + if ((((this->x.HALF.HI - that->x.HALF.HI) + bb_this->offset_x) - bb_that->offset_x) + this_w + that_w <= (this_w + that_w) * 2) { + u32 this_h = bb_this->height; + u32 that_h = bb_that->height; + if ((((this->y.HALF.HI - that->y.HALF.HI) + bb_this->offset_y) - bb_that->offset_y) + this_h + that_h <= (this_h + that_h) * 2) { + if ((this->field_0x3c & 0x10) != 0) + this_d = ((BoundingBox3D*)bb_this)->depth; + else + this_d = 5; + if ((that->field_0x3c & 0x10) != 0) + depth = this_d + ((BoundingBox3D*)bb_that)->depth; + else + depth = this_d + 5; + if ((this->height.HALF.HI - that->height.HALF.HI) + depth <= depth * 2) + return TRUE; + } + } + } + return FALSE; +} +END_NONMATCH + +bool32 sub_08017850(Entity* this) { + if (sub_08079F8C()) + return sub_080177A0(this, &gPlayerEntity); + return FALSE; +} diff --git a/src/code_0805436C.c b/src/code_0805436C.c index 06e1183b..41ef9ad2 100644 --- a/src/code_0805436C.c +++ b/src/code_0805436C.c @@ -82,19 +82,19 @@ u32 SetBottleContents(u32 itemID, u32 bottleIndex) { if (bottleIndex > 3) { bottleIndex = 0; - if (gSave.stats.filler2[0] != 0x20) { + if (gSave.stats.bottles[0] != 0x20) { do { bottleIndex++; if (bottleIndex > 3) { return bottleIndex; } - } while (gSave.stats.filler2[bottleIndex] != 0x20); + } while (gSave.stats.bottles[bottleIndex] != 0x20); } if (bottleIndex > 3) { return bottleIndex; } } - gSave.stats.filler2[bottleIndex] = itemID; + gSave.stats.bottles[bottleIndex] = itemID; return bottleIndex; } @@ -134,13 +134,13 @@ u32 sub_080544C8(u32 arg0) { } u32 sub_080544DC(u32 arg0) { - if (arg0 == gSave.stats.filler2[0]) { + if (arg0 == gSave.stats.bottles[0]) { return 1; - } else if (arg0 == gSave.stats.filler2[1]) { + } else if (arg0 == gSave.stats.bottles[1]) { return 2; - } else if (arg0 == gSave.stats.filler2[2]) { + } else if (arg0 == gSave.stats.bottles[2]) { return 3; - } else if (arg0 == gSave.stats.filler2[3]) { + } else if (arg0 == gSave.stats.bottles[3]) { return 4; } else { return 0; diff --git a/src/code_0805EC04.c b/src/code_0805EC04.c index 3033de51..1981f507 100644 --- a/src/code_0805EC04.c +++ b/src/code_0805EC04.c @@ -101,7 +101,7 @@ void sub_0805ECEC(int param_1, u32 param_2, u32 param_3, u32 param_4) { } void sub_0805ED14(u32 param_1) { - gPlayerState.field_0x9c[0] = param_1; + gPlayerState.field_0x9c = param_1; gPlayerState.field_0x98 = 0; gPlayerState.field_0x9a = 0; } \ No newline at end of file diff --git a/src/enemy/doorMimic.c b/src/enemy/doorMimic.c index 069c205b..969868d0 100644 --- a/src/enemy/doorMimic.c +++ b/src/enemy/doorMimic.c @@ -185,16 +185,16 @@ const u16 gUnk_080CB79C[] = { }; -const BoundingBox gUnk_080CB7A4 = { 0x00, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x08, 0x06 }; -const BoundingBox gUnk_080CB7AC = { 0x00, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04 }; -const BoundingBox gUnk_080CB7B4 = { 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04 }; +const BoundingBox gUnk_080CB7A4 = { 0x00, -9, 0x00, 0x00, 0x00, 0x00, 0x08, 0x06 }; +const BoundingBox gUnk_080CB7AC = { 0x00, -5, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04 }; +const BoundingBox gUnk_080CB7B4 = { 0x00, -1, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04 }; const BoundingBox gUnk_080CB7BC = { 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x06, 0x08 }; const BoundingBox gUnk_080CB7C4 = { 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0c }; const BoundingBox gUnk_080CB7CC = { 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08 }; const BoundingBox gUnk_080CB7D4 = { 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04 }; const BoundingBox gUnk_080CB7DC = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04 }; -const BoundingBox gUnk_080CB7E4 = { 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08 }; -const BoundingBox gUnk_080CB7EC = { 0x00, 0xf4, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0c }; +const BoundingBox gUnk_080CB7E4 = { 0x00, -8, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08 }; +const BoundingBox gUnk_080CB7EC = { 0x00, -12, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0c }; const BoundingBox *const gUnk_080CB7F4[] = { &gUnk_080CB7A4, @@ -214,10 +214,10 @@ const BoundingBox *const gUnk_080CB7F4[] = { const BoundingBox gUnk_080CB824 = { 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08 }; const BoundingBox gUnk_080CB82C = { 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x08 }; const BoundingBox gUnk_080CB834 = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x08 }; -const BoundingBox gUnk_080CB83C = { 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08 }; -const BoundingBox gUnk_080CB844 = { 0xf4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x08 }; -const BoundingBox gUnk_080CB84C = { 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08 }; -const BoundingBox gUnk_080CB854 = { 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x08 }; +const BoundingBox gUnk_080CB83C = { -8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08 }; +const BoundingBox gUnk_080CB844 = { -12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x08 }; +const BoundingBox gUnk_080CB84C = { -8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08 }; +const BoundingBox gUnk_080CB854 = { -4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x08 }; const BoundingBox gUnk_080CB85C = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x08 }; const BoundingBox gUnk_080CB864 = { 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08 }; const BoundingBox gUnk_080CB86C = { 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x08 }; diff --git a/src/enemy/helmasaur.c b/src/enemy/helmasaur.c index 5dd4c27d..a9a4cda1 100644 --- a/src/enemy/helmasaur.c +++ b/src/enemy/helmasaur.c @@ -305,8 +305,8 @@ void sub_0802C058(Entity* this, u32 param_2) { } bool32 sub_0802C06C(Entity* this) { - u32 x = this->x.HALF.HI + (s8)this->boundingBox->unknown[0]; - u32 y = this->y.HALF.HI + (s8)this->boundingBox->unknown[1]; + u32 x = this->x.HALF.HI + this->boundingBox->offset_x; + u32 y = this->y.HALF.HI + this->boundingBox->offset_y; u32 xdiff = gUnk_080CD45C[(this->direction >> 2) + 0]; u32 ydiff = gUnk_080CD45C[(this->direction >> 2) + 1]; @@ -330,8 +330,8 @@ bool32 sub_0802C0E8(Entity* this) { return TRUE; } else { const s8* ptr = &gUnk_080CD45C[this->direction >> 2]; - s32 x = this->x.HALF.HI + (s8)this->boundingBox->unknown[0] + ptr[0] * 6; - s32 y = this->y.HALF.HI + (s8)this->boundingBox->unknown[1] + ptr[1] * 6; + s32 x = this->x.HALF.HI + this->boundingBox->offset_x + ptr[0] * 6; + s32 y = this->y.HALF.HI + this->boundingBox->offset_y + ptr[1] * 6; Entity* ent = this->collisionLayer == 2 ? &gUnk_0200D654 : &gUnk_02027EB4; u32 ret = FALSE; diff --git a/src/enemy/spearMoblin.c b/src/enemy/spearMoblin.c index ad669ed9..1a87c131 100644 --- a/src/enemy/spearMoblin.c +++ b/src/enemy/spearMoblin.c @@ -203,10 +203,10 @@ void sub_08028528(Entity* this) { } else { sub_080288C0(this); box = gUnk_080CC944[this->animationState >> 1]; - this->boundingBox->unknown[0] = box->unknown[0]; - this->boundingBox->unknown[1] = box->unknown[1]; - this->boundingBox->unknown[6] = box->unknown[6]; - this->boundingBox->unknown[7] = box->unknown[7]; + this->boundingBox->offset_x = box->offset_x; + this->boundingBox->offset_y = box->offset_y; + this->boundingBox->width = box->width; + this->boundingBox->height = box->height; if (this->field_0x7a.HALF.LO != 0) { this->field_0x7a.HALF.LO = 0; @@ -365,10 +365,10 @@ void sub_08028858(Entity* this) { sub_080288C0(this); box = gUnk_080CC944[this->animationState >> 1]; - this->boundingBox->unknown[0] = box->unknown[0]; - this->boundingBox->unknown[1] = box->unknown[1]; - this->boundingBox->unknown[6] = box->unknown[6]; - this->boundingBox->unknown[7] = box->unknown[7]; + this->boundingBox->offset_x = box->offset_x; + this->boundingBox->offset_y = box->offset_y; + this->boundingBox->width = box->width; + this->boundingBox->height = box->height; if (this->field_0x82.HALF.LO == 0) { this->nonPlanarMovement = 0; diff --git a/src/enemy/wisp.c b/src/enemy/wisp.c index f9e7738d..5ef5e685 100644 --- a/src/enemy/wisp.c +++ b/src/enemy/wisp.c @@ -36,7 +36,7 @@ void sub_08033564(Entity* this) { this->flags &= 0x7f; this->field_0x7c.HALF.LO = 0x27c; gPlayerState.flags.all |= 0x4000; - gSave.stats.filler2[4] = this->entityType.form + 1; + gSave.stats.floorType = this->entityType.form + 1; gSave.stats.field_0x20 = 600; if (this->entityType.form == 0) { break; diff --git a/src/item11.c b/src/item11.c index b77eae9b..d83333f0 100644 --- a/src/item11.c +++ b/src/item11.c @@ -5,7 +5,7 @@ extern void DeleteThisEntity(); extern void sub_08078CD0(Entity*); extern void sub_08018FA0(Entity*); -extern void sub_0801766C(Entity*); +extern u32 sub_0801766C(Entity*); extern void sub_08018F6C(Entity*); extern void (*const gUnk_080B3DD0[])(Entity*); diff --git a/src/object/mineralWaterSource.c b/src/object/mineralWaterSource.c index b19046f0..5cffc20a 100644 --- a/src/object/mineralWaterSource.c +++ b/src/object/mineralWaterSource.c @@ -30,8 +30,8 @@ void MineralWaterSource_Init(Entity* this) { this->entityType.parameter = unknownParameters->field_0x00; this->field_0x40 = unknownParameters->field_0x03; - this->boundingBox->unknown[6] = unknownParameters->field_0x01; - this->boundingBox->unknown[7] = unknownParameters->field_0x02; + this->boundingBox->width = unknownParameters->field_0x01; + this->boundingBox->height = unknownParameters->field_0x02; this->flags |= 0x80; diff --git a/src/object/object49.c b/src/object/object49.c index a31149ca..b2818152 100644 --- a/src/object/object49.c +++ b/src/object/object49.c @@ -234,10 +234,10 @@ void sub_0808F498(Entity* this) { this->action = 1; this->actionDelay = 64; var0 = this->entityType.parameter != 0 ? 44 : 43; - this->x.HALF.HI -= this->parent->boundingBox->unknown[6]; - this->x.HALF.HI += (s32)Random() % (this->parent->boundingBox->unknown[6] * 2); - this->y.HALF.HI -= this->parent->boundingBox->unknown[7]; - this->y.HALF.HI += (s32)Random() % (this->parent->boundingBox->unknown[7] * 2); + this->x.HALF.HI -= this->parent->boundingBox->width; + this->x.HALF.HI += (s32)Random() % (this->parent->boundingBox->width * 2); + this->y.HALF.HI -= this->parent->boundingBox->height; + this->y.HALF.HI += (s32)Random() % (this->parent->boundingBox->height * 2); sub_0801D2B4(this, var0); InitializeAnimation(this, 4); } diff --git a/src/room.c b/src/room.c index b9f41f5c..d306eb6b 100644 --- a/src/room.c +++ b/src/room.c @@ -5236,7 +5236,7 @@ void sub_0804EEBC(void) { LoadRoomEntityList(&gUnk_080F5848); } } - if (gSave.stats.filler2[5] == 0) { + if (gSave.stats.filler3[0] == 0) { LoadRoomEntityList(&gUnk_080F5788); } }