From 5bb51e00476673f8fd1e816a334a1f9b8aa81d45 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Mon, 14 Mar 2022 00:59:36 +0200 Subject: [PATCH] Decompile object67 --- asm/object/object67.s | 828 ----------------------------------- assets/assets.json | 10 - data/const/object/object67.s | 18 - linker.ld | 4 +- src/object/object67.c | 338 ++++++++++++++ 5 files changed, 340 insertions(+), 858 deletions(-) delete mode 100644 asm/object/object67.s delete mode 100644 data/const/object/object67.s create mode 100644 src/object/object67.c diff --git a/asm/object/object67.s b/asm/object/object67.s deleted file mode 100644 index 70e92552..00000000 --- a/asm/object/object67.s +++ /dev/null @@ -1,828 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Object67 -Object67: @ 0x08094130 - push {lr} - ldr r2, _08094144 @ =gUnk_081229BC - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08094144: .4byte gUnk_081229BC - - thumb_func_start sub_08094148 -sub_08094148: @ 0x08094148 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xa] - cmp r0, #1 - bne _08094154 - b _08094254 -_08094154: - cmp r0, #1 - bgt _0809415E - cmp r0, #0 - beq _080941A8 - b _0809438A -_0809415E: - cmp r0, #2 - beq _08094164 - b _0809438A -_08094164: - ldrb r0, [r4, #0xd] - cmp r0, #0 - bne _08094180 - movs r0, #1 - strb r0, [r4, #0xd] - movs r0, #0xb4 - lsls r0, r0, #1 - str r0, [r4, #0x78] - ldr r0, _0809417C @ =gRoomControls - str r4, [r0, #0x30] - b _08094198 - .align 2, 0 -_0809417C: .4byte gRoomControls -_08094180: - ldr r0, [r4, #0x78] - subs r0, #1 - str r0, [r4, #0x78] - movs r1, #1 - rsbs r1, r1, #0 - cmp r0, r1 - bne _08094198 - ldr r1, _080941A0 @ =gRoomControls - ldr r0, _080941A4 @ =gPlayerEntity - str r0, [r1, #0x30] - bl DeleteThisEntity -_08094198: - bl sub_08078B48 - b _08094394 - .align 2, 0 -_080941A0: .4byte gRoomControls -_080941A4: .4byte gPlayerEntity -_080941A8: - ldr r1, _08094228 @ =gUnk_081229D0 - ldrb r0, [r4, #0xb] - lsls r0, r0, #2 - adds r0, r0, r1 - ldrb r0, [r0, #1] - strb r0, [r4, #0x15] - ldrb r0, [r4, #0xb] - lsls r0, r0, #2 - adds r0, r0, r1 - ldrb r0, [r0, #2] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - ldrh r2, [r4, #0x2e] - adds r0, r0, r2 - strh r0, [r4, #0x2e] - ldrb r0, [r4, #0xb] - lsls r0, r0, #2 - adds r0, r0, r1 - ldrb r0, [r0, #3] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - ldrh r2, [r4, #0x32] - adds r0, r0, r2 - strh r0, [r4, #0x32] - ldrb r0, [r4, #0xb] - lsls r0, r0, #2 - adds r0, r0, r1 - ldrb r2, [r0] - movs r0, #0x40 - ands r0, r2 - cmp r0, #0 - beq _080941F0 - ldrb r0, [r4, #0x18] - movs r1, #0x40 - orrs r0, r1 - strb r0, [r4, #0x18] -_080941F0: - movs r0, #0x80 - ands r0, r2 - cmp r0, #0 - beq _08094200 - ldrb r0, [r4, #0x18] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r4, #0x18] -_08094200: - ldrb r0, [r4, #0xb] - cmp r0, #3 - bhi _08094230 - bl Random - ldr r1, _0809422C @ =0x0001FFFF - ands r1, r0 - movs r0, #0xa0 - lsls r0, r0, #0xa - orrs r0, r1 - str r0, [r4, #0x20] - movs r0, #0x80 - lsls r0, r0, #1 - strh r0, [r4, #0x24] - adds r0, r4, #0 - movs r1, #0x56 - bl InitializeAnimation - b _0809438A - .align 2, 0 -_08094228: .4byte gUnk_081229D0 -_0809422C: .4byte 0x0001FFFF -_08094230: - movs r0, #0xa0 - lsls r0, r0, #0xa - str r0, [r4, #0x20] - movs r0, #0x80 - lsls r0, r0, #1 - strh r0, [r4, #0x24] - bl Random - movs r1, #3 - ands r0, r1 - ldrb r1, [r4, #0x15] - orrs r0, r1 - strb r0, [r4, #0x15] - adds r0, r4, #0 - movs r1, #0x57 - bl InitializeAnimation - b _0809438A -_08094254: - ldrb r0, [r4, #0xb] - cmp r0, #0 - bne _08094272 - adds r0, r4, #0 - movs r1, #0x67 - movs r2, #1 - movs r3, #0x80 - bl CreateObjectWithParent - adds r1, r0, #0 - str r1, [r4, #0x54] - cmp r1, #0 - beq _08094272 - ldr r0, [r4, #0x50] - str r0, [r1, #0x54] -_08094272: - ldrb r0, [r4, #0xb] - cmp r0, #0x80 - bne _0809427A - b _08094380 -_0809427A: - movs r2, #0 - movs r0, #0x4b - strb r0, [r4, #0x1e] - ldrb r1, [r4, #0x19] - subs r0, #0x58 - ands r0, r1 - movs r1, #4 - orrs r0, r1 - movs r1, #0xe0 - lsls r1, r1, #7 - strh r1, [r4, #0x24] - movs r1, #0xc0 - orrs r0, r1 - strb r0, [r4, #0x19] - adds r3, r4, #0 - adds r3, #0x29 - ldrb r0, [r3] - movs r1, #7 - orrs r0, r1 - strb r0, [r3] - ldrb r0, [r4, #0x19] - movs r1, #3 - orrs r0, r1 - strb r0, [r4, #0x19] - ldrb r0, [r4, #0xb] - lsls r0, r0, #3 - ldr r1, _080942E8 @ =gUnk_081229F0 - adds r3, r0, r1 - movs r0, #0 - ldrsb r0, [r3, r0] - ldrh r1, [r4, #0x2e] - adds r0, r0, r1 - strh r0, [r4, #0x2e] - movs r0, #1 - ldrsb r0, [r3, r0] - ldrh r1, [r4, #0x32] - adds r0, r0, r1 - strh r0, [r4, #0x32] - ldrb r0, [r3, #2] - strb r0, [r4, #0xe] - ldrb r0, [r3, #3] - strb r0, [r4, #0xf] - movs r0, #0xce - str r0, [r4, #0x7c] - str r2, [r4, #0x74] - ldrb r1, [r3, #4] - movs r0, #0x40 - ands r0, r1 - cmp r0, #0 - beq _080942EC - adds r1, r4, #0 - adds r1, #0x82 - movs r0, #0xff - lsls r0, r0, #8 - b _080942F4 - .align 2, 0 -_080942E8: .4byte gUnk_081229F0 -_080942EC: - adds r1, r4, #0 - adds r1, #0x82 - movs r0, #0x80 - lsls r0, r0, #1 -_080942F4: - strh r0, [r1] - ldrb r1, [r3, #4] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0809430A - adds r1, r4, #0 - adds r1, #0x86 - movs r0, #0xff - lsls r0, r0, #8 - b _08094312 -_0809430A: - adds r1, r4, #0 - adds r1, #0x86 - movs r0, #0x80 - lsls r0, r0, #1 -_08094312: - strh r0, [r1] - adds r0, r4, #0 - bl AllocMutableHitbox - cmp r0, #0 - beq _0809438A - ldr r2, [r4, #0x48] - ldr r1, _0809437C @ =gUnk_080FD2E8 - ldrb r0, [r1] - strb r0, [r2] - ldr r2, [r4, #0x48] - ldrb r0, [r1, #1] - strb r0, [r2, #1] - ldr r2, [r4, #0x48] - ldrb r0, [r1, #2] - strb r0, [r2, #2] - ldr r2, [r4, #0x48] - ldrb r0, [r1, #3] - strb r0, [r2, #3] - ldr r2, [r4, #0x48] - ldrb r0, [r1, #4] - strb r0, [r2, #4] - ldr r2, [r4, #0x48] - ldrb r0, [r1, #5] - strb r0, [r2, #5] - ldr r2, [r4, #0x48] - ldrb r0, [r1, #6] - strb r0, [r2, #6] - ldr r2, [r4, #0x48] - ldrb r0, [r1, #7] - strb r0, [r2, #7] - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - adds r1, r4, #0 - adds r1, #0x38 - movs r0, #2 - strb r0, [r1] - adds r1, #4 - movs r0, #7 - strb r0, [r1] - adds r1, #4 - movs r0, #0x48 - strb r0, [r1] - subs r1, #1 - movs r0, #0x7a - strb r0, [r1] - subs r1, #4 - movs r0, #1 - strb r0, [r1] - b _0809438A - .align 2, 0 -_0809437C: .4byte gUnk_080FD2E8 -_08094380: - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] -_0809438A: - movs r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - bl sub_08094398 -_08094394: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08094398 -sub_08094398: @ 0x08094398 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xa] - cmp r0, #0 - beq _080943A8 - cmp r0, #1 - beq _080943D8 - b _08094420 -_080943A8: - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - bl LinearMoveUpdate - movs r1, #0x80 - lsls r1, r1, #7 - adds r0, r4, #0 - bl GravityUpdate - cmp r0, #0 - bne _08094420 - ldrb r0, [r4, #0xb] - cmp r0, #3 - bhi _080943D2 - adds r0, r4, #0 - movs r1, #0xc - movs r2, #0 - bl CreateFx -_080943D2: - bl DeleteThisEntity - b _08094420 -_080943D8: - ldrb r1, [r4, #0xb] - cmp r1, #0x80 - beq _0809440A - ldr r0, [r4, #0x7c] - subs r0, #1 - str r0, [r4, #0x7c] - movs r1, #1 - rsbs r1, r1, #0 - cmp r0, r1 - bne _080943F6 - movs r0, #0x96 - lsls r0, r0, #2 - str r0, [r4, #0x7c] - movs r0, #2 - strb r0, [r4, #0xc] -_080943F6: - adds r0, r4, #0 - adds r0, #0x82 - ldrh r1, [r0] - adds r0, #4 - ldrh r2, [r0] - adds r0, r4, #0 - movs r3, #0 - bl sub_0805EC9C - b _08094420 -_0809440A: - ldr r0, [r4, #0x54] - adds r0, #0x79 - ldrb r0, [r0] - ands r1, r0 - cmp r1, #0 - bne _0809441A - bl DeleteThisEntity -_0809441A: - adds r0, r4, #0 - bl sub_08094660 -_08094420: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08094424 -sub_08094424: @ 0x08094424 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r6, r0, #0 - adds r3, r6, #0 - adds r3, #0x82 - movs r1, #0 - ldrsh r0, [r3, r1] - cmp r0, #0 - bge _08094452 - adds r1, r6, #0 - adds r1, #0x80 - movs r0, #0x24 - ldrsh r2, [r6, r0] - ldr r0, [r1] - adds r0, r0, r2 - str r0, [r1] - movs r2, #0 - ldrsh r0, [r3, r2] - rsbs r0, r0, #0 - mov r8, r0 - adds r5, r1, #0 - b _08094466 -_08094452: - adds r0, r6, #0 - adds r0, #0x80 - movs r1, #0x24 - ldrsh r2, [r6, r1] - ldr r1, [r0] - subs r1, r1, r2 - str r1, [r0] - ldrh r3, [r3] - mov r8, r3 - adds r5, r0, #0 -_08094466: - adds r0, r6, #0 - adds r0, #0x86 - movs r2, #0 - ldrsh r1, [r0, r2] - adds r4, r0, #0 - cmp r1, #0 - bge _0809448C - adds r1, r6, #0 - adds r1, #0x84 - movs r0, #0x24 - ldrsh r2, [r6, r0] - ldr r0, [r1] - adds r0, r0, r2 - str r0, [r1] - movs r2, #0 - ldrsh r0, [r4, r2] - rsbs r7, r0, #0 - adds r3, r1, #0 - b _0809449E -_0809448C: - adds r0, r6, #0 - adds r0, #0x84 - movs r1, #0x24 - ldrsh r2, [r6, r1] - ldr r1, [r0] - subs r1, r1, r2 - str r1, [r0] - ldrh r7, [r4] - adds r3, r0, #0 -_0809449E: - ldrh r2, [r6, #0x24] - movs r0, #0x24 - ldrsh r1, [r6, r0] - movs r0, #0x80 - lsls r0, r0, #6 - cmp r1, r0 - ble _080944B2 - ldr r1, _080944D0 @ =0xFFFFFF00 - adds r0, r2, r1 - strh r0, [r6, #0x24] -_080944B2: - ldr r0, [r6, #0x7c] - subs r0, #1 - str r0, [r6, #0x7c] - movs r1, #1 - rsbs r1, r1, #0 - cmp r0, r1 - bne _080944D4 - movs r0, #0 - strh r0, [r5] - strh r0, [r3] - movs r0, #3 - strb r0, [r6, #0xc] - movs r0, #0x78 - str r0, [r6, #0x7c] - b _08094500 - .align 2, 0 -_080944D0: .4byte 0xFFFFFF00 -_080944D4: - adds r5, r6, #0 - adds r5, #0x82 - movs r2, #0 - ldrsh r1, [r5, r2] - ldrb r3, [r6, #0xe] - adds r0, r6, #0 - movs r2, #0x20 - bl sub_0806FCF4 - movs r0, #0 - ldrsh r1, [r4, r0] - ldrb r3, [r6, #0xf] - adds r0, r6, #0 - movs r2, #0x20 - bl sub_0806FCF4 - ldrh r1, [r5] - ldrh r2, [r4] - adds r0, r6, #0 - movs r3, #0 - bl sub_0805EC9C -_08094500: - ldr r5, [r6, #0x48] - cmp r5, #0 - beq _08094538 - movs r4, #0x80 - lsls r4, r4, #9 - adds r0, r4, #0 - mov r1, r8 - bl __divsi3 - lsrs r0, r0, #3 - strb r0, [r5, #6] - ldr r5, [r6, #0x48] - adds r0, r4, #0 - adds r1, r7, #0 - bl __divsi3 - lsrs r0, r0, #3 - strb r0, [r5, #7] - ldr r1, [r6, #0x48] - adds r0, r6, #0 - adds r0, #0x62 - ldrb r0, [r0] - strb r0, [r1] - ldr r1, [r6, #0x48] - adds r0, r6, #0 - adds r0, #0x63 - ldrb r0, [r0] - strb r0, [r1, #1] -_08094538: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_08094540 -sub_08094540: @ 0x08094540 - push {lr} - adds r3, r0, #0 - ldr r0, [r3, #0x7c] - subs r0, #1 - str r0, [r3, #0x7c] - movs r1, #1 - rsbs r1, r1, #0 - cmp r0, r1 - bne _0809455A - movs r0, #4 - strb r0, [r3, #0xc] - movs r0, #2 - str r0, [r3, #0x7c] -_0809455A: - adds r0, r3, #0 - adds r0, #0x82 - ldrh r1, [r0] - adds r0, #4 - ldrh r2, [r0] - adds r0, r3, #0 - movs r3, #0 - bl sub_0805EC9C - pop {pc} - .align 2, 0 - - thumb_func_start sub_08094570 -sub_08094570: @ 0x08094570 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r6, r0, #0 - adds r2, r6, #0 - adds r2, #0x82 - ldrh r1, [r2] - lsls r3, r1, #0x10 - movs r0, #0x80 - lsls r0, r0, #1 - cmp r1, r0 - beq _08094590 - asrs r3, r3, #0x10 - ldr r0, _080945B0 @ =0xFFFFFF00 - cmp r3, r0 - bne _080945BA -_08094590: - ldr r1, [r6, #0x7c] - cmp r1, #0 - bne _080945B4 - ldr r0, [r6, #0x50] - adds r0, #0x7c - strh r1, [r0] - ldr r0, [r6, #0x50] - adds r0, #0x79 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - bne _08094622 - bl DeleteThisEntity - b _08094622 - .align 2, 0 -_080945B0: .4byte 0xFFFFFF00 -_080945B4: - subs r0, r1, #1 - str r0, [r6, #0x7c] - b _08094622 -_080945BA: - cmp r3, #0 - bge _080945CC - subs r0, r1, #1 - strh r0, [r2] - movs r1, #0 - ldrsh r0, [r2, r1] - rsbs r0, r0, #0 - mov r8, r0 - b _080945D4 -_080945CC: - adds r0, r1, #1 - strh r0, [r2] - ldrh r2, [r2] - mov r8, r2 -_080945D4: - adds r0, r6, #0 - adds r0, #0x86 - ldrh r2, [r0] - movs r3, #0 - ldrsh r1, [r0, r3] - adds r4, r0, #0 - cmp r1, #0 - bge _080945F0 - subs r0, r2, #1 - strh r0, [r4] - movs r1, #0 - ldrsh r0, [r4, r1] - rsbs r7, r0, #0 - b _080945F6 -_080945F0: - adds r0, r2, #1 - strh r0, [r4] - ldrh r7, [r4] -_080945F6: - adds r5, r6, #0 - adds r5, #0x82 - movs r3, #0 - ldrsh r1, [r5, r3] - ldrb r3, [r6, #0xe] - adds r0, r6, #0 - movs r2, #0x20 - bl sub_0806FCF4 - movs r0, #0 - ldrsh r1, [r4, r0] - ldrb r3, [r6, #0xf] - adds r0, r6, #0 - movs r2, #0x20 - bl sub_0806FCF4 - ldrh r1, [r5] - ldrh r2, [r4] - adds r0, r6, #0 - movs r3, #0 - bl sub_0805EC9C -_08094622: - ldr r5, [r6, #0x48] - cmp r5, #0 - beq _0809465A - movs r4, #0x80 - lsls r4, r4, #9 - adds r0, r4, #0 - mov r1, r8 - bl __divsi3 - lsrs r0, r0, #3 - strb r0, [r5, #6] - ldr r5, [r6, #0x48] - adds r0, r4, #0 - adds r1, r7, #0 - bl __divsi3 - lsrs r0, r0, #3 - strb r0, [r5, #7] - ldr r1, [r6, #0x48] - adds r0, r6, #0 - adds r0, #0x62 - ldrb r0, [r0] - strb r0, [r1] - ldr r1, [r6, #0x48] - adds r0, r6, #0 - adds r0, #0x63 - ldrb r0, [r0] - strb r0, [r1, #1] -_0809465A: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_08094660 -sub_08094660: @ 0x08094660 - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - adds r6, r0, #0 - ldr r0, [r6, #0x50] - adds r0, #0x62 - movs r7, #0 - ldrsb r7, [r0, r7] - cmp r7, #0 - bge _08094678 - rsbs r7, r7, #0 -_08094678: - lsls r7, r7, #1 - adds r0, r7, #0 - cmp r7, #0 - bge _08094682 - adds r0, #0xf -_08094682: - asrs r1, r0, #4 - ldr r0, [r6, #0x74] - cmp r0, r1 - bhs _08094700 - str r1, [r6, #0x74] - movs r1, #0x2e - ldrsh r0, [r6, r1] - subs r0, r0, r7 - adds r4, r0, #0 - subs r4, #0x40 - movs r1, #0x32 - ldrsh r0, [r6, r1] - subs r0, r0, r7 - adds r5, r0, #0 - subs r5, #0x40 - movs r0, #0x10 - mov sb, r0 - str r0, [r6, #0x78] - movs r1, #0 - mov r8, r1 - str r1, [r6, #0x7c] - adds r0, r6, #0 - adds r1, r4, #0 - adds r2, r5, #0 - bl sub_08094708 - mov r0, r8 - str r0, [r6, #0x78] - mov r1, sb - str r1, [r6, #0x7c] - adds r0, r6, #0 - adds r1, r4, #0 - adds r2, r5, #0 - bl sub_08094708 - movs r1, #0x2e - ldrsh r0, [r6, r1] - adds r0, r0, r7 - adds r4, r0, #0 - adds r4, #0x30 - movs r1, #0x32 - ldrsh r0, [r6, r1] - adds r0, r0, r7 - adds r5, r0, #0 - adds r5, #0x30 - movs r7, #0x10 - rsbs r7, r7, #0 - str r7, [r6, #0x78] - mov r0, r8 - str r0, [r6, #0x7c] - adds r0, r6, #0 - adds r1, r4, #0 - adds r2, r5, #0 - bl sub_08094708 - mov r1, r8 - str r1, [r6, #0x78] - str r7, [r6, #0x7c] - adds r0, r6, #0 - adds r1, r4, #0 - adds r2, r5, #0 - bl sub_08094708 -_08094700: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_08094708 -sub_08094708: @ 0x08094708 - push {r4, r5, r6, r7, lr} - sub sp, #8 - adds r7, r0, #0 - adds r6, r1, #0 - adds r5, r2, #0 - ldr r0, [r7, #0x74] - lsls r0, r0, #1 - adds r4, r0, #0 - adds r4, #8 - cmp r4, #0 - beq _08094752 - ldr r3, _08094758 @ =gRoomControls - movs r2, #0x3f -_08094722: - ldrh r0, [r3, #6] - subs r0, r6, r0 - lsrs r0, r0, #4 - ands r0, r2 - ldrh r1, [r3, #8] - subs r1, r5, r1 - lsrs r1, r1, #4 - ands r1, r2 - lsls r1, r1, #6 - orrs r0, r1 - movs r1, #2 - str r2, [sp] - str r3, [sp, #4] - bl sub_0807BA8C - ldr r0, [r7, #0x78] - adds r6, r6, r0 - ldr r0, [r7, #0x7c] - adds r5, r5, r0 - subs r4, #1 - ldr r2, [sp] - ldr r3, [sp, #4] - cmp r4, #0 - bne _08094722 -_08094752: - add sp, #8 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08094758: .4byte gRoomControls diff --git a/assets/assets.json b/assets/assets.json index 1d7802ad..ad11d8b5 100644 --- a/assets/assets.json +++ b/assets/assets.json @@ -43995,16 +43995,6 @@ "size": 28, "type": "animation" }, - { - "path": "object67/gUnk_081229D0.bin", - "start": 1190352, - "size": 32 - }, - { - "path": "object67/gUnk_081229F0.bin", - "start": 1190384, - "size": 32 - }, { "path": "animations/gSpriteAnimations_Object6A_10_0.bin", "start": 1190732, diff --git a/data/const/object/object67.s b/data/const/object/object67.s deleted file mode 100644 index fa7974f9..00000000 --- a/data/const/object/object67.s +++ /dev/null @@ -1,18 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_081229BC:: @ 081229BC - .4byte sub_08094148 - .4byte sub_08094398 - .4byte sub_08094424 - .4byte sub_08094540 - .4byte sub_08094570 - -gUnk_081229D0:: @ 081229D0 - .incbin "object67/gUnk_081229D0.bin" - -gUnk_081229F0:: @ 081229F0 - .incbin "object67/gUnk_081229F0.bin" diff --git a/linker.ld b/linker.ld index 4262547d..1827e5f0 100644 --- a/linker.ld +++ b/linker.ld @@ -727,7 +727,7 @@ SECTIONS { src/object/object64.o(.text); src/object/ladderHoleInBookshelf.o(.text); src/object/object66.o(.text); - asm/object/object67.o(.text); + src/object/object67.o(.text); src/object/object68.o(.text); src/object/object69.o(.text); src/object/object6A.o(.text); @@ -1468,7 +1468,7 @@ SECTIONS { src/object/object64.o(.rodata); data/animations/object/object64.o(.rodata); src/object/ladderHoleInBookshelf.o(.rodata); - data/const/object/object67.o(.rodata); + src/object/object67.o(.rodata); src/object/object68.o(.rodata); src/object/object6A.o(.rodata); data/const/object/object6A.o(.rodata); diff --git a/src/object/object67.c b/src/object/object67.c new file mode 100644 index 00000000..05218223 --- /dev/null +++ b/src/object/object67.c @@ -0,0 +1,338 @@ +#define NENT_DEPRECATED +#include "entity.h" +#include "room.h" +#include "player.h" +#include "asm.h" +#include "functions.h" +#include "object.h" +#include "effects.h" + +typedef struct { + Entity base; + u8 filler[0xC]; + u32 unk74; + u32 unk78; + u32 unk7c; + union SplitWord unk80; + union SplitWord unk84; +} Object67Entity; + +extern Hitbox gUnk_080FD2E8; + +void sub_08094148(Object67Entity*); +void sub_08094398(Object67Entity*); +void sub_08094424(Object67Entity*); +void sub_08094540(Object67Entity*); +void sub_08094570(Object67Entity*); +void sub_08094660(Object67Entity*); +void sub_08094708(Object67Entity*, u32, u32); + +extern bool32 AllocMutableHitbox(Entity*); + +void Object67(Entity* this) { + static void (*const actionFuncs[])(Object67Entity*) = { + sub_08094148, sub_08094398, sub_08094424, sub_08094540, sub_08094570, + }; + + actionFuncs[this->action]((Object67Entity*)this); +} + +typedef struct { + u8 unk0; + u8 direction; + s8 x; + s8 y; +} gUnk_081229D0_struct; + +typedef struct { + s8 x; + s8 y; + u8 actionDelay; + u8 unk3; + u8 unk4; + u8 filler[3]; +} gUnk_081229F0_struct; + +void sub_08094148(Object67Entity* this) { + static const gUnk_081229D0_struct gUnk_081229D0[] = { + { 0, 12, 8, 8 }, { 0x40, 0x14, -8, 8 }, { 0x80, 4, 8, -8 }, { 0xC0, 0x1C, -8, -8 }, + { 0, 12, 0, 0 }, { 0x40, 0x14, 0, 0 }, { 0x80, 4, 0, 0 }, { 0xC0, 0x1C, -0, 0 }, + }; + static const gUnk_081229F0_struct gUnk_081229F0[] = { + { -32, -40, 1, 2, 0, { 0 } }, + { 0x1f, -40, 3, 2, 0x40, { 0 } }, + { -32, 0x17, 1, 0, 0x80, { 0 } }, + { 0x1f, 0x17, 3, 0, 0xC0, { 0 } }, + }; + const gUnk_081229F0_struct* ptr; + + switch (super->type) { + case 2: + if (super->subAction == 0) { + super->subAction = 1; + this->unk78 = 0x168; + gRoomControls.camera_target = super; + } else { + if (--this->unk78 == -1) { + gRoomControls.camera_target = &gPlayerEntity; + DeleteThisEntity(); + } + } + sub_08078B48(); + return; + case 0: + super->direction = gUnk_081229D0[super->type2].direction; + super->x.HALF.HI += gUnk_081229D0[super->type2].x; + super->y.HALF.HI += gUnk_081229D0[super->type2].y; + if ((gUnk_081229D0[super->type2].unk0 & 0x40) != 0) { + super->spriteSettings.flipX = 1; + } + if ((gUnk_081229D0[super->type2].unk0 & 0x80) != 0) { + super->spriteSettings.flipY = 1; + } + if (super->type2 < 4) { + super->zVelocity = (Random() & 0x1ffff) | 0x28000; + super->speed = 0x100; + InitializeAnimation(super, 0x56); + } else { + super->zVelocity = 0x28000; + super->speed = 0x100; + super->direction = (Random() & 3) | super->direction; + InitializeAnimation(super, 0x57); + } + break; + case 1: + if (super->type2 == 0) { + super->child = CreateObjectWithParent(super, OBJECT_67, 1, 0x80); + if (super->child != NULL) { + super->child->child = super->parent; + } + } + + switch (super->type2) { + default: + super->frameIndex = 75; + super->spriteRendering.alphaBlend = 1; + super->speed = 0x7000; + super->spriteRendering.b3 = 3; + super->spritePriority.b0 = 7; + super->spriteRendering.b0 = 3; + ptr = gUnk_081229F0 + super->type2; + super->x.HALF.HI = ptr->x + super->x.HALF.HI; + super->y.HALF.HI = ptr->y + super->y.HALF.HI; + super->actionDelay = ptr->actionDelay; + super->field_0xf = ptr->unk3; + this->unk7c = 0xce; + this->unk74 = 0; + if ((ptr->unk4 & 0x40) != 0) { + this->unk80.HALF.HI = 0xff00; + } else { + this->unk80.HALF.HI = 0x100; + } + if ((ptr->unk4 & 0x80) != 0) { + this->unk84.HALF.HI = 0xff00; + } else { + this->unk84.HALF.HI = 0x100; + } + + if (AllocMutableHitbox(super)) { + super->hitbox->offset_x = gUnk_080FD2E8.offset_x; + super->hitbox->offset_y = gUnk_080FD2E8.offset_y; + super->hitbox->unk2[0] = gUnk_080FD2E8.unk2[0]; + super->hitbox->unk2[1] = gUnk_080FD2E8.unk2[1]; + super->hitbox->unk2[2] = gUnk_080FD2E8.unk2[2]; + super->hitbox->unk2[3] = gUnk_080FD2E8.unk2[3]; + super->hitbox->width = gUnk_080FD2E8.width; + super->hitbox->height = gUnk_080FD2E8.height; + COLLISION_ON(super); + super->collisionLayer = 2; + super->field_0x3c = 7; + super->hurtType = 0x48; + super->hitType = 0x7a; + super->flags2 = 1; + } + break; + case 0x80: + super->spriteSettings.draw = 0; + break; + } + break; + } + + super->action = 1; + sub_08094398(this); +} + +void sub_08094398(Object67Entity* this) { + switch (super->type) { + case 0: + GetNextFrame(super); + LinearMoveUpdate(super); + if (GravityUpdate(super, 0x4000) == 0) { + if (super->type2 < 4) { + CreateFx(super, FX_LAVA_SPLASH, 0); + } + DeleteThisEntity(); + } + break; + case 1: + if (super->type2 != 0x80) { + if (--this->unk7c == -1) { + this->unk7c = 600; + super->action = 2; + } + sub_0805EC9C(super, this->unk80.HALF_U.HI, this->unk84.HALF_U.HI, 0); + } else { + if ((((GenericEntity*)super->child)->field_0x78.HALF.HI & 0x80) == 0) { + DeleteThisEntity(); + } + sub_08094660(this); + } + break; + } +} + +void sub_08094424(Object67Entity* this) { + u32 uVar2; + u32 uVar5; + + if (this->unk80.HALF.HI < 0) { + this->unk80.WORD += (int)super->speed; + uVar2 = -this->unk80.HALF.HI; + } else { + this->unk80.WORD -= (int)super->speed; + uVar2 = this->unk80.HALF_U.HI; + } + + if (this->unk84.HALF.HI < 0) { + this->unk84.WORD += (int)super->speed; + uVar5 = -this->unk84.HALF.HI; + } else { + this->unk84.WORD -= (int)super->speed; + uVar5 = this->unk84.HALF_U.HI; + } + + if (0x2000 < super->speed) { + super->speed -= 0x100; + } + + if (--this->unk7c == -1) { + this->unk80.HALF.LO = 0; + this->unk84.HALF.LO = 0; + super->action = 3; + this->unk7c = 0x78; + } else { + sub_0806FCF4(super, this->unk80.HALF.HI, 0x20, super->actionDelay); + sub_0806FCF4(super, this->unk84.HALF.HI, 0x20, super->field_0xf); + sub_0805EC9C(super, this->unk80.HALF_U.HI, this->unk84.HALF_U.HI, 0); + } + + if (super->hitbox != NULL) { + super->hitbox->width = (u32)(0x10000 / (s32)uVar2) >> 3; + super->hitbox = super->hitbox; + super->hitbox->height = (u32)(0x10000 / (s32)uVar5) >> 3; + super->hitbox->offset_x = super->spriteOffsetX; + super->hitbox->offset_y = super->spriteOffsetY; + } +} + +void sub_08094540(Object67Entity* this) { + if (--this->unk7c == -1) { + super->action = 4; + this->unk7c = 2; + } + sub_0805EC9C(super, this->unk80.HALF_U.HI, this->unk84.HALF_U.HI, 0); +} + +void sub_08094570(Object67Entity* this) { + u32 uVar2; + u32 uVar3; + + if ((this->unk80.HALF_U.HI == 0x100) || (this->unk80.HALF.HI == -0x100)) { + if (this->unk7c == 0) { + ((GenericEntity*)super->parent)->field_0x7c.HALF.LO = 0; + if ((((GenericEntity*)super->parent)->field_0x78.HALF.HI & 0x80) == 0) { + DeleteThisEntity(); + } + } else { + this->unk7c--; + } + } else { + if (this->unk80.HALF.HI < 0) { + this->unk80.HALF.HI--; + uVar2 = -this->unk80.HALF.HI; + } else { + this->unk80.HALF.HI++; + uVar2 = this->unk80.HALF_U.HI; + } + + if (this->unk84.HALF.HI < 0) { + this->unk84.HALF.HI = this->unk84.HALF.HI + -1; + uVar3 = -this->unk84.HALF.HI; + } else { + this->unk84.HALF.HI = this->unk84.HALF.HI + 1; + uVar3 = this->unk84.HALF_U.HI; + } + sub_0806FCF4(super, this->unk80.HALF.HI, 0x20, super->actionDelay); + sub_0806FCF4(super, this->unk84.HALF.HI, 0x20, super->field_0xf); + sub_0805EC9C(super, this->unk80.HALF_U.HI, this->unk84.HALF_U.HI, 0); + } + + if (super->hitbox != NULL) { + super->hitbox->width = (u32)(0x10000 / (s32)uVar2) >> 3; + super->hitbox->height = (u32)(0x10000 / (s32)uVar3) >> 3; + super->hitbox->offset_x = super->spriteOffsetX; + super->hitbox->offset_y = super->spriteOffsetY; + } +} + +void sub_08094660(Object67Entity* this) { + int iVar1; + int spriteOffsetX; + int iVar3; + int iVar4; + int iVar5; + + spriteOffsetX = (s8)super->parent->spriteOffsetX; + if (spriteOffsetX < 0) { + spriteOffsetX = -spriteOffsetX; + } + + spriteOffsetX = spriteOffsetX * 2; + if (spriteOffsetX < 0) { + iVar5 = spriteOffsetX + 0xf; + } else { + iVar5 = spriteOffsetX; + } + + iVar1 = iVar5 >> 4; + if (this->unk74 < iVar1) { + this->unk74 = iVar1; + iVar3 = super->x.HALF.HI - spriteOffsetX - 0x40; + iVar4 = super->y.HALF.HI - spriteOffsetX - 0x40; + this->unk78 = 0x10; + this->unk7c = 0; + sub_08094708(this, iVar3, iVar4); + this->unk78 = 0; + this->unk7c = 0x10; + sub_08094708(this, iVar3, iVar4); + iVar3 = super->x.HALF.HI + spriteOffsetX + 0x30; + iVar4 = super->y.HALF.HI + spriteOffsetX + 0x30; + this->unk78 = 0xfffffff0; + this->unk7c = 0; + sub_08094708(this, iVar3, iVar4); + this->unk78 = 0; + this->unk7c = 0xfffffff0; + sub_08094708(this, iVar3, iVar4); + } +} + +void sub_08094708(Object67Entity* this, u32 param_2, u32 param_3) { + int index; + + for (index = this->unk74 * 2 + 8; index != 0; index--) { + sub_0807BA8C(TILE(param_2, param_3), 2); + param_2 = param_2 + this->unk78; + param_3 = param_3 + this->unk7c; + } +}