From d50cdc86aaa611d75568088c42c54f010644fb55 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sun, 30 Jan 2022 00:22:29 +0100 Subject: [PATCH] Decompile BigIceBlock --- asm/non_matching/bigIceBlock/sub_08099880.inc | 69 ++ asm/object/bigIceBlock.s | 806 ------------------ data/const/object/bigIceBlock.s | 14 - src/object/bigIceBlock.c | 331 +++++++ 4 files changed, 400 insertions(+), 820 deletions(-) create mode 100644 asm/non_matching/bigIceBlock/sub_08099880.inc delete mode 100644 asm/object/bigIceBlock.s delete mode 100644 data/const/object/bigIceBlock.s create mode 100644 src/object/bigIceBlock.c diff --git a/asm/non_matching/bigIceBlock/sub_08099880.inc b/asm/non_matching/bigIceBlock/sub_08099880.inc new file mode 100644 index 00000000..5b6cc241 --- /dev/null +++ b/asm/non_matching/bigIceBlock/sub_08099880.inc @@ -0,0 +1,69 @@ + .syntax unified + push {r4, r5, r6, lr} + adds r5, r0, #0 + ldrb r0, [r5, #0xe] + subs r1, r0, #1 + strb r1, [r5, #0xe] + lsls r0, r1, #0x18 + cmp r0, #0 + bne _08099896 + bl DeleteThisEntity + b _0809990E +_08099896: + lsls r0, r1, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0x30 + bne _080998A4 + adds r0, r5, #0 + bl sub_08099C18 +_080998A4: + ldrb r0, [r5, #0xe] + movs r4, #0x3c + subs r4, r4, r0 + lsls r4, r4, #5 + movs r1, #0x80 + lsls r1, r1, #1 + adds r4, r4, r1 + adds r0, r5, #0 + adds r2, r4, #0 + movs r3, #0 + bl sub_0805EC9C + adds r0, r5, #0 + adds r1, r4, #0 + movs r2, #2 + movs r3, #0 + bl sub_0806FCF4 + movs r0, #0xf + movs r1, #0x11 + movs r2, #0x40 + bl CreateObject + adds r6, r0, #0 + cmp r6, #0 + beq _0809990E + bl Random + adds r4, r0, #0 + asrs r0, r4, #0x10 + movs r1, #0x21 + bl __modsi3 + adds r2, r0, #0 + subs r2, #0x10 + movs r0, #0xf + ands r0, r4 + subs r4, r0, #4 + adds r3, r6, #0 + adds r3, #0x29 + ldrb r1, [r3] + movs r0, #8 + rsbs r0, r0, #0 + ands r0, r1 + movs r1, #3 + orrs r0, r1 + strb r0, [r3] + lsls r2, r2, #0x10 + lsls r3, r4, #0x10 + adds r0, r5, #0 + adds r1, r6, #0 + bl PositionRelative +_0809990E: + pop {r4, r5, r6, pc} + .syntax divided diff --git a/asm/object/bigIceBlock.s b/asm/object/bigIceBlock.s deleted file mode 100644 index 6194398b..00000000 --- a/asm/object/bigIceBlock.s +++ /dev/null @@ -1,806 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start BigIceBlock -BigIceBlock: @ 0x08099734 - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xa] - cmp r0, #3 - bhi _08099754 - ldr r0, _08099750 @ =gUnk_081237A0 - ldrb r1, [r2, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r2, #0 - bl _call_via_r1 - b _0809975A - .align 2, 0 -_08099750: .4byte gUnk_081237A0 -_08099754: - adds r0, r2, #0 - bl sub_08099D30 -_0809975A: - pop {pc} - - thumb_func_start sub_0809975C -sub_0809975C: @ 0x0809975C - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - cmp r0, #0 - beq _08099770 - bl DeleteThisEntity -_08099770: - movs r2, #1 - strb r2, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - ldrb r1, [r4, #0x11] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #3 - orrs r0, r1 - strb r0, [r4, #0x11] - adds r1, r4, #0 - adds r1, #0x3c - movs r0, #7 - strb r0, [r1] - adds r1, #4 - movs r0, #0x48 - strb r0, [r1] - adds r0, r4, #0 - adds r0, #0x3f - strb r2, [r0] - subs r1, #5 - movs r0, #0x80 - strb r0, [r1] - ldr r0, _080997C8 @ =gUnk_080FD190 - str r0, [r4, #0x48] - adds r0, r4, #0 - bl sub_08099910 - ldrb r1, [r4, #0xa] - adds r0, r4, #0 - bl InitializeAnimation - movs r0, #0x85 - movs r1, #4 - movs r2, #0 - bl CreateObject - cmp r0, #0 - beq _080997C6 - str r4, [r0, #0x50] -_080997C6: - pop {r4, pc} - .align 2, 0 -_080997C8: .4byte gUnk_080FD190 - - thumb_func_start sub_080997CC -sub_080997CC: @ 0x080997CC - push {r4, lr} - adds r4, r0, #0 - bl sub_0809963C - cmp r0, #0 - beq _080997EC - movs r0, #0 - movs r1, #2 - strb r1, [r4, #0xc] - strb r0, [r4, #0xe] - ldr r0, _080997F0 @ =0x000001B3 - bl EnqueueSFX - adds r0, r4, #0 - bl sub_080997F4 -_080997EC: - pop {r4, pc} - .align 2, 0 -_080997F0: .4byte 0x000001B3 - - thumb_func_start sub_080997F4 -sub_080997F4: @ 0x080997F4 - push {r4, lr} - adds r4, r0, #0 - bl sub_0809963C - adds r1, r0, #0 - cmp r1, #0 - bne _08099822 - ldrb r0, [r4, #0xe] - cmp r0, #1 - bls _0809980E - subs r0, #2 - strb r0, [r4, #0xe] - b _08099810 -_0809980E: - strb r1, [r4, #0xe] -_08099810: - ldrb r0, [r4, #0xe] - cmp r0, #0 - bne _08099828 - movs r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - bl sub_0805EC60 - b _0809987C -_08099822: - ldrb r0, [r4, #0xe] - adds r0, #1 - strb r0, [r4, #0xe] -_08099828: - ldr r1, _08099858 @ =gUnk_081237B0 - ldrb r0, [r4, #0xe] - lsrs r0, r0, #5 - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r2, [r0] - movs r1, #0x80 - lsls r1, r1, #1 - adds r0, r4, #0 - movs r3, #0 - bl sub_0805EC9C - ldrb r0, [r4, #0xa] - cmp r0, #1 - beq _0809986C - cmp r0, #2 - beq _0809985C - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl SetFlag - b _0809986C - .align 2, 0 -_08099858: .4byte gUnk_081237B0 -_0809985C: - adds r0, r4, #0 - adds r0, #0x86 - ldrh r3, [r0] - adds r0, r4, #0 - movs r1, #0x53 - movs r2, #0 - bl sub_080A2A3C -_0809986C: - movs r0, #3 - strb r0, [r4, #0xc] - movs r0, #0x3c - strb r0, [r4, #0xe] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] -_0809987C: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08099880 -sub_08099880: @ 0x08099880 - push {r4, r5, r6, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xe] - subs r1, r0, #1 - strb r1, [r5, #0xe] - lsls r0, r1, #0x18 - cmp r0, #0 - bne _08099896 - bl DeleteThisEntity - b _0809990E -_08099896: - lsls r0, r1, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x30 - bne _080998A4 - adds r0, r5, #0 - bl sub_08099C18 -_080998A4: - ldrb r0, [r5, #0xe] - movs r4, #0x3c - subs r4, r4, r0 - lsls r4, r4, #5 - movs r1, #0x80 - lsls r1, r1, #1 - adds r4, r4, r1 - adds r0, r5, #0 - adds r2, r4, #0 - movs r3, #0 - bl sub_0805EC9C - adds r0, r5, #0 - adds r1, r4, #0 - movs r2, #2 - movs r3, #0 - bl sub_0806FCF4 - movs r0, #0xf - movs r1, #0x11 - movs r2, #0x40 - bl CreateObject - adds r6, r0, #0 - cmp r6, #0 - beq _0809990E - bl Random - adds r4, r0, #0 - asrs r0, r4, #0x10 - movs r1, #0x21 - bl __modsi3 - adds r2, r0, #0 - subs r2, #0x10 - movs r0, #0xf - ands r0, r4 - subs r4, r0, #4 - adds r3, r6, #0 - adds r3, #0x29 - ldrb r1, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #3 - orrs r0, r1 - strb r0, [r3] - lsls r2, r2, #0x10 - lsls r3, r4, #0x10 - adds r0, r5, #0 - adds r1, r6, #0 - bl PositionRelative -_0809990E: - pop {r4, r5, r6, pc} - - thumb_func_start sub_08099910 -sub_08099910: @ 0x08099910 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - movs r1, #0x2e - ldrsh r0, [r4, r1] - ldr r3, _08099968 @ =gRoomControls - ldrh r1, [r3, #6] - subs r0, r0, r1 - asrs r6, r0, #4 - movs r2, #0x3f - ands r6, r2 - movs r1, #0x32 - ldrsh r0, [r4, r1] - ldrh r1, [r3, #8] - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r2 - lsls r0, r0, #6 - orrs r6, r0 - adds r0, r4, #0 - adds r0, #0x6e - strh r6, [r0] - ldrh r2, [r4, #0x2e] - movs r0, #8 - adds r1, r0, #0 - ands r1, r2 - lsls r1, r1, #0x10 - lsrs r1, r1, #0x13 - ldrh r2, [r4, #0x32] - ands r0, r2 - lsls r0, r0, #0x10 - asrs r0, r0, #0x12 - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - adds r1, r1, r0 - adds r0, r4, #0 - adds r0, #0x6c - strh r1, [r0] - cmp r1, #2 - beq _08099A4C - cmp r1, #2 - bhi _0809996C - cmp r1, #1 - beq _080999A8 - b _08099972 - .align 2, 0 -_08099968: .4byte gRoomControls -_0809996C: - cmp r1, #3 - bne _08099972 - b _08099AF0 -_08099972: - ldr r5, _080999A4 @ =0x00004022 - adds r1, r6, #0 - subs r1, #0x41 - adds r4, #0x38 - ldrb r2, [r4] - adds r0, r5, #0 - bl SetTile - adds r1, r6, #0 - subs r1, #0x40 - ldrb r2, [r4] - adds r0, r5, #0 - bl SetTile - subs r1, r6, #1 - ldrb r2, [r4] - adds r0, r5, #0 - bl SetTile - ldrb r2, [r4] - adds r0, r5, #0 - adds r1, r6, #0 - bl SetTile - b _08099BF0 - .align 2, 0 -_080999A4: .4byte 0x00004022 -_080999A8: - adds r5, r6, #0 - subs r5, #0x41 - lsls r0, r5, #0x10 - lsrs r0, r0, #0x10 - adds r4, #0x38 - ldrb r1, [r4] - bl sub_080002C8 - ldr r1, _08099A40 @ =0x00004024 - cmp r0, #0x12 - bne _080999C0 - adds r1, #0x55 -_080999C0: - ldrb r2, [r4] - adds r0, r1, #0 - adds r1, r5, #0 - bl SetTile - ldr r7, _08099A44 @ =0x00004022 - adds r1, r6, #0 - subs r1, #0x40 - ldrb r2, [r4] - adds r0, r7, #0 - bl SetTile - adds r5, r6, #0 - subs r5, #0x3f - lsls r0, r5, #0x10 - lsrs r0, r0, #0x10 - ldrb r1, [r4] - bl sub_080002C8 - ldr r1, _08099A48 @ =0x00004025 - cmp r0, #0x12 - bne _080999EE - adds r1, #0x56 -_080999EE: - ldrb r2, [r4] - adds r0, r1, #0 - adds r1, r5, #0 - bl SetTile - subs r5, r6, #1 - lsls r0, r5, #0x10 - lsrs r0, r0, #0x10 - ldrb r1, [r4] - bl sub_080002C8 - ldr r1, _08099A40 @ =0x00004024 - cmp r0, #0x12 - bne _08099A0C - adds r1, #0x55 -_08099A0C: - ldrb r2, [r4] - adds r0, r1, #0 - adds r1, r5, #0 - bl SetTile - ldrb r2, [r4] - adds r0, r7, #0 - adds r1, r6, #0 - bl SetTile - adds r5, r6, #1 - adds r0, r5, #0 - ldrb r1, [r4] - bl sub_080002C8 - ldr r1, _08099A48 @ =0x00004025 - cmp r0, #0x12 - bne _08099A32 - adds r1, #0x56 -_08099A32: - ldrb r2, [r4] - adds r0, r1, #0 - adds r1, r5, #0 - bl SetTile - b _08099BF0 - .align 2, 0 -_08099A40: .4byte 0x00004024 -_08099A44: .4byte 0x00004022 -_08099A48: .4byte 0x00004025 -_08099A4C: - adds r7, r6, #0 - subs r7, #0x41 - lsls r0, r7, #0x10 - lsrs r0, r0, #0x10 - adds r5, r4, #0 - adds r5, #0x38 - ldrb r1, [r5] - bl sub_080002C8 - ldr r1, _08099AE4 @ =0x00004023 - cmp r0, #0x12 - bne _08099A66 - adds r1, #0x54 -_08099A66: - ldrb r2, [r5] - adds r0, r1, #0 - adds r1, r7, #0 - bl SetTile - adds r4, r6, #0 - subs r4, #0x40 - lsls r0, r4, #0x10 - lsrs r0, r0, #0x10 - ldrb r1, [r5] - bl sub_080002C8 - ldr r1, _08099AE4 @ =0x00004023 - cmp r0, #0x12 - bne _08099A86 - adds r1, #0x54 -_08099A86: - ldrb r2, [r5] - adds r0, r1, #0 - adds r1, r4, #0 - bl SetTile - ldr r4, _08099AE8 @ =0x00004022 - subs r1, r6, #1 - ldrb r2, [r5] - adds r0, r4, #0 - bl SetTile - ldrb r2, [r5] - adds r0, r4, #0 - adds r1, r6, #0 - bl SetTile - adds r4, r6, #0 - adds r4, #0x3f - adds r0, r4, #0 - ldrb r1, [r5] - bl sub_080002C8 - ldr r1, _08099AEC @ =0x00004026 - cmp r0, #0x12 - bne _08099ABA - adds r1, #0x56 -_08099ABA: - ldrb r2, [r5] - adds r0, r1, #0 - adds r1, r4, #0 - bl SetTile - adds r4, r6, #0 - adds r4, #0x40 - adds r0, r4, #0 - ldrb r1, [r5] - bl sub_080002C8 - ldr r1, _08099AEC @ =0x00004026 - cmp r0, #0x12 - bne _08099AD8 - adds r1, #0x56 -_08099AD8: - ldrb r2, [r5] - adds r0, r1, #0 - adds r1, r4, #0 - bl SetTile - b _08099BF0 - .align 2, 0 -_08099AE4: .4byte 0x00004023 -_08099AE8: .4byte 0x00004022 -_08099AEC: .4byte 0x00004026 -_08099AF0: - adds r5, r6, #0 - subs r5, #0x41 - lsls r0, r5, #0x10 - lsrs r0, r0, #0x10 - adds r4, #0x38 - ldrb r1, [r4] - bl sub_080002C8 - ldr r1, _08099BF4 @ =0x00004027 - cmp r0, #0x12 - bne _08099B08 - adds r1, #0x4e -_08099B08: - ldrb r2, [r4] - adds r0, r1, #0 - adds r1, r5, #0 - bl SetTile - adds r5, r6, #0 - subs r5, #0x40 - lsls r0, r5, #0x10 - lsrs r0, r0, #0x10 - ldrb r1, [r4] - bl sub_080002C8 - ldr r1, _08099BF8 @ =0x00004023 - cmp r0, #0x12 - bne _08099B28 - adds r1, #0x54 -_08099B28: - ldrb r2, [r4] - adds r0, r1, #0 - adds r1, r5, #0 - bl SetTile - adds r5, r6, #0 - subs r5, #0x3f - lsls r0, r5, #0x10 - lsrs r0, r0, #0x10 - ldrb r1, [r4] - bl sub_080002C8 - ldr r1, _08099BFC @ =0x00004028 - cmp r0, #0x12 - bne _08099B48 - adds r1, #0x4e -_08099B48: - ldrb r2, [r4] - adds r0, r1, #0 - adds r1, r5, #0 - bl SetTile - subs r5, r6, #1 - lsls r0, r5, #0x10 - lsrs r0, r0, #0x10 - ldrb r1, [r4] - bl sub_080002C8 - ldr r1, _08099C00 @ =0x00004024 - cmp r0, #0x12 - bne _08099B66 - adds r1, #0x55 -_08099B66: - ldrb r2, [r4] - adds r0, r1, #0 - adds r1, r5, #0 - bl SetTile - ldr r0, _08099C04 @ =0x00004022 - ldrb r2, [r4] - adds r1, r6, #0 - bl SetTile - adds r5, r6, #1 - adds r0, r5, #0 - ldrb r1, [r4] - bl sub_080002C8 - ldr r1, _08099C08 @ =0x00004025 - cmp r0, #0x12 - bne _08099B8C - adds r1, #0x56 -_08099B8C: - ldrb r2, [r4] - adds r0, r1, #0 - adds r1, r5, #0 - bl SetTile - adds r5, r6, #0 - adds r5, #0x3f - adds r0, r5, #0 - ldrb r1, [r4] - bl sub_080002C8 - ldr r1, _08099C0C @ =0x00004029 - cmp r0, #0x12 - bne _08099BAA - adds r1, #0x4f -_08099BAA: - ldrb r2, [r4] - adds r0, r1, #0 - adds r1, r5, #0 - bl SetTile - adds r5, r6, #0 - adds r5, #0x40 - adds r0, r5, #0 - ldrb r1, [r4] - bl sub_080002C8 - ldr r1, _08099C10 @ =0x00004026 - cmp r0, #0x12 - bne _08099BC8 - adds r1, #0x56 -_08099BC8: - ldrb r2, [r4] - adds r0, r1, #0 - adds r1, r5, #0 - bl SetTile - adds r5, r6, #0 - adds r5, #0x41 - adds r0, r5, #0 - ldrb r1, [r4] - bl sub_080002C8 - ldr r1, _08099C14 @ =0x0000402A - cmp r0, #0x12 - bne _08099BE6 - adds r1, #0x50 -_08099BE6: - ldrb r2, [r4] - adds r0, r1, #0 - adds r1, r5, #0 - bl SetTile -_08099BF0: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08099BF4: .4byte 0x00004027 -_08099BF8: .4byte 0x00004023 -_08099BFC: .4byte 0x00004028 -_08099C00: .4byte 0x00004024 -_08099C04: .4byte 0x00004022 -_08099C08: .4byte 0x00004025 -_08099C0C: .4byte 0x00004029 -_08099C10: .4byte 0x00004026 -_08099C14: .4byte 0x0000402A - - thumb_func_start sub_08099C18 -sub_08099C18: @ 0x08099C18 - push {r4, r5, lr} - adds r1, r0, #0 - adds r0, #0x6e - ldrh r5, [r0] - subs r0, #2 - ldrh r0, [r0] - cmp r0, #2 - beq _08099C96 - cmp r0, #2 - bgt _08099C32 - cmp r0, #1 - beq _08099C60 - b _08099C36 -_08099C32: - cmp r0, #3 - beq _08099CD4 -_08099C36: - adds r0, r5, #0 - subs r0, #0x41 - adds r4, r1, #0 - adds r4, #0x38 - ldrb r1, [r4] - bl sub_0807BA8C - adds r0, r5, #0 - subs r0, #0x40 - ldrb r1, [r4] - bl sub_0807BA8C - subs r0, r5, #1 - ldrb r1, [r4] - bl sub_0807BA8C - ldrb r1, [r4] - adds r0, r5, #0 - bl sub_0807BA8C - b _08099D2C -_08099C60: - adds r0, r5, #0 - subs r0, #0x41 - adds r4, r1, #0 - adds r4, #0x38 - ldrb r1, [r4] - bl sub_0807BA8C - adds r0, r5, #0 - subs r0, #0x40 - ldrb r1, [r4] - bl sub_0807BA8C - adds r0, r5, #0 - subs r0, #0x3f - ldrb r1, [r4] - bl sub_0807BA8C - subs r0, r5, #1 - ldrb r1, [r4] - bl sub_0807BA8C - ldrb r1, [r4] - adds r0, r5, #0 - bl sub_0807BA8C - adds r0, r5, #1 - b _08099CCC -_08099C96: - adds r0, r5, #0 - subs r0, #0x41 - adds r4, r1, #0 - adds r4, #0x38 - ldrb r1, [r4] - bl sub_0807BA8C - adds r0, r5, #0 - subs r0, #0x40 - ldrb r1, [r4] - bl sub_0807BA8C - subs r0, r5, #1 - ldrb r1, [r4] - bl sub_0807BA8C - ldrb r1, [r4] - adds r0, r5, #0 - bl sub_0807BA8C - adds r0, r5, #0 - adds r0, #0x3f - ldrb r1, [r4] - bl sub_0807BA8C - adds r0, r5, #0 - adds r0, #0x40 -_08099CCC: - ldrb r1, [r4] - bl sub_0807BA8C - b _08099D2C -_08099CD4: - adds r0, r5, #0 - subs r0, #0x41 - adds r4, r1, #0 - adds r4, #0x38 - ldrb r1, [r4] - bl sub_0807BA8C - adds r0, r5, #0 - subs r0, #0x40 - ldrb r1, [r4] - bl sub_0807BA8C - adds r0, r5, #0 - subs r0, #0x3f - ldrb r1, [r4] - bl sub_0807BA8C - subs r0, r5, #1 - ldrb r1, [r4] - bl sub_0807BA8C - ldrb r1, [r4] - adds r0, r5, #0 - bl sub_0807BA8C - adds r0, r5, #1 - ldrb r1, [r4] - bl sub_0807BA8C - adds r0, r5, #0 - adds r0, #0x3f - ldrb r1, [r4] - bl sub_0807BA8C - adds r0, r5, #0 - adds r0, #0x40 - ldrb r1, [r4] - bl sub_0807BA8C - adds r0, r5, #0 - adds r0, #0x41 - ldrb r1, [r4] - bl sub_0807BA8C -_08099D2C: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08099D30 -sub_08099D30: @ 0x08099D30 - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x50] - ldr r0, [r0, #4] - cmp r0, #0 - bne _08099D40 - bl DeleteThisEntity -_08099D40: - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _08099D6A - movs r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #4 - bl InitializeAnimation - ldr r0, [r4, #0x50] - adds r1, r4, #0 - bl CopyPositionAndSpriteOffset - ldrh r0, [r4, #0x32] - adds r0, #1 - strh r0, [r4, #0x32] - adds r1, r4, #0 - adds r1, #0x63 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] -_08099D6A: - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xc] - cmp r0, #1 - bhi _08099DAA - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r2, r4, #0 - adds r2, #0x5a - ldrb r1, [r2] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _08099DA2 - movs r0, #0 - strb r0, [r2] - bl Random - movs r1, #0x78 - ands r0, r1 - adds r0, #0x78 - adds r1, r4, #0 - adds r1, #0x59 - strb r0, [r1] -_08099DA2: - adds r0, r4, #0 - bl GetNextFrame - b _08099DB4 -_08099DAA: - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] -_08099DB4: - pop {r4, pc} - .align 2, 0 diff --git a/data/const/object/bigIceBlock.s b/data/const/object/bigIceBlock.s deleted file mode 100644 index 9f4ddda5..00000000 --- a/data/const/object/bigIceBlock.s +++ /dev/null @@ -1,14 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_081237A0:: @ 081237A0 - .4byte sub_0809975C - .4byte sub_080997CC - .4byte sub_080997F4 - .4byte sub_08099880 - -gUnk_081237B0:: @ 081237B0 - .incbin "bigIceBlock/gUnk_081237B0.bin" diff --git a/src/object/bigIceBlock.c b/src/object/bigIceBlock.c new file mode 100644 index 00000000..40ec7c0d --- /dev/null +++ b/src/object/bigIceBlock.c @@ -0,0 +1,331 @@ +/** + * @file bigIceBlock.c + * @ingroup Objects + * + * @brief Big Ice Block object + */ + +#define NENT_DEPRECATED +#include "global.h" +#include "object.h" +#include "functions.h" + +typedef struct { + /*0x00*/ Entity base; + /*0x68*/ u8 unk_68[0x4]; + /*0x6c*/ u16 unk_6c; + /*0x6e*/ u16 unk_6e; + /*0x70*/ u8 unk_70[0x16]; + /*0x86*/ u16 unk_86; +} BigIceBlockEntity; + +extern const Hitbox gUnk_080FD190; + +extern void (*const BigIceBlock_Actions[])(BigIceBlockEntity*); +extern const u16 gUnk_081237B0[]; + +void sub_08099D30(BigIceBlockEntity*); +void sub_08099910(BigIceBlockEntity*); +extern bool32 sub_0809963C(BigIceBlockEntity*); +void BigIceBlock_Action2(BigIceBlockEntity*); +extern bool32 sub_0809963C(BigIceBlockEntity*); +void sub_08099C18(BigIceBlockEntity*); + +void BigIceBlock(BigIceBlockEntity* this) { + if (super->type < 4) { + BigIceBlock_Actions[super->action](this); + } else { + sub_08099D30(this); + } +} + +void BigIceBlock_Init(BigIceBlockEntity* this) { + Entity* obj; + + if (CheckFlags(this->unk_86)) { + DeleteThisEntity(); + } + super->action = 1; + super->flags |= 0x80; + super->updatePriority = 3; + super->field_0x3c = 7; + super->hurtType = 0x48; + super->hitType = 1; + super->flags2 = 0x80; + super->hitbox = (Hitbox*)&gUnk_080FD190; + sub_08099910(this); + InitializeAnimation(super, super->type); + obj = CreateObject(BIG_ICE_BLOCK, 4, 0); + if (obj != NULL) { + obj->parent = super; + } +} + +void BigIceBlock_Action1(BigIceBlockEntity* this) { + if (sub_0809963C(this)) { + super->action = 2; + super->actionDelay = 0; + EnqueueSFX(SFX_ICE_BLOCK_MELT); + BigIceBlock_Action2(this); + } +} + +void BigIceBlock_Action2(BigIceBlockEntity* this) { + u32 tmp; + if (!sub_0809963C(this)) { + if (super->actionDelay >= 2) { + super->actionDelay -= 2; + } else { + super->actionDelay = 0; + } + if (super->actionDelay == 0) { + super->action = 1; + sub_0805EC60(super); + return; + } + } else { + super->actionDelay += 1; + } + tmp = gUnk_081237B0[super->actionDelay >> 5]; + sub_0805EC9C(super, 0x100, tmp, 0); + if (super->type != 1) { + if (super->type != 2) { + SetFlag(this->unk_86); + } else { + sub_080A2A3C(super, 0x53, 0, this->unk_86); + } + } + super->action = 3; + super->actionDelay = 0x3c; + super->flags &= 0x7f; +} + +NONMATCH("asm/non_matching/bigIceBlock/sub_08099880.inc", void sub_08099880(BigIceBlockEntity* this)) { + Entity* obj; + s32 rand; + u8 uVar3; + u32 uVar4; + s32 x; + s32 y; + + if (--super->actionDelay == 0) { + DeleteThisEntity(); + } else { + if (super->actionDelay == 0x30) { + sub_08099C18(this); + } + uVar4 = (0x3c - super->actionDelay) * 0x20 + 0x100; + sub_0805EC9C(super, 0x100, uVar4, 0); + sub_0806FCF4(super, uVar4, 2, 0); + obj = CreateObject(SPECIAL_FX, 0x11, 0x40); + if (obj != NULL) { + rand = Random(); + x = ((rand >> 0x10) % 0x21) - 0x10; + y = (rand & 0xf) - 4; + obj->spritePriority.b0 = 3; + PositionRelative(super, obj, x * 0x10000, y * 0x10000); + } + } +} +END_NONMATCH + +void sub_08099910(BigIceBlockEntity* this) { + u32 uVar2; + s32 iVar1; + u32 uVar3; + u32 position; + + position = COORD_TO_TILE(super); + this->unk_6e = position; + uVar2 = (((super->x.HALF.HI & 8)) >> 0x3) + ((super->y.HALF.HI & 8) >> 2); + this->unk_6c = uVar2; + + switch (uVar2) { + default: + SetTile(0x4022, position - 0x41, super->collisionLayer); + SetTile(0x4022, position - 0x40, super->collisionLayer); + SetTile(0x4022, position - 1, super->collisionLayer); + SetTile(0x4022, position, super->collisionLayer); + break; + case 1: + iVar1 = sub_080002C8(position - 0x41, super->collisionLayer); + uVar3 = 0x4024; + if (iVar1 == 0x12) { + uVar3 = 0x4079; + } + SetTile(uVar3, position - 0x41, super->collisionLayer); + SetTile(0x4022, position - 0x40, super->collisionLayer); + iVar1 = sub_080002C8(position - 0x3f, super->collisionLayer); + uVar3 = 0x4025; + if (iVar1 == 0x12) { + uVar3 = 0x407b; + } + SetTile(uVar3, position - 0x3f, super->collisionLayer); + iVar1 = sub_080002C8(position - 1, super->collisionLayer); + uVar3 = 0x4024; + if (iVar1 == 0x12) { + uVar3 = 0x4079; + } + SetTile(uVar3, position - 1, super->collisionLayer); + SetTile(0x4022, position, super->collisionLayer); + iVar1 = sub_080002C8(position + 1, super->collisionLayer); + uVar3 = 0x4025; + if (iVar1 == 0x12) { + uVar3 = 0x407b; + } + SetTile(uVar3, position + 1, super->collisionLayer); + return; + break; + case 2: + iVar1 = sub_080002C8(position - 0x41, super->collisionLayer); + uVar3 = 0x4023; + if (iVar1 == 0x12) { + uVar3 = 0x4077; + } + SetTile(uVar3, position - 0x41, super->collisionLayer); + iVar1 = sub_080002C8(position - 0x40, super->collisionLayer); + uVar3 = 0x4023; + if (iVar1 == 0x12) { + uVar3 = 0x4077; + } + SetTile(uVar3, position - 0x40, super->collisionLayer); + SetTile(0x4022, position - 1, super->collisionLayer); + SetTile(0x4022, position, super->collisionLayer); + iVar1 = sub_080002C8(position + 0x3f, super->collisionLayer); + uVar3 = 0x4026; + if (iVar1 == 0x12) { + uVar3 = 0x407c; + } + SetTile(uVar3, position + 0x3f, super->collisionLayer); + iVar1 = sub_080002C8(position + 0x40, super->collisionLayer); + uVar3 = 0x4026; + if (iVar1 == 0x12) { + uVar3 = 0x407c; + } + SetTile(uVar3, position + 0x40, super->collisionLayer); + break; + case 3: + iVar1 = sub_080002C8(position - 0x41, super->collisionLayer); + uVar3 = 0x4027; + if (iVar1 == 0x12) { + uVar3 = 0x4075; + } + SetTile(uVar3, position - 0x41, super->collisionLayer); + iVar1 = sub_080002C8(position - 0x40, super->collisionLayer); + uVar3 = 0x4023; + if (iVar1 == 0x12) { + uVar3 = 0x4077; + } + SetTile(uVar3, position - 0x40, super->collisionLayer); + iVar1 = sub_080002C8(position - 0x3f, super->collisionLayer); + uVar3 = 0x4028; + if (iVar1 == 0x12) { + uVar3 = 0x4076; + } + SetTile(uVar3, position - 0x3f, super->collisionLayer); + iVar1 = sub_080002C8(position - 1, super->collisionLayer); + uVar3 = 0x4024; + if (iVar1 == 0x12) { + uVar3 = 0x4079; + } + SetTile(uVar3, position - 1, super->collisionLayer); + SetTile(0x4022, position, super->collisionLayer); + iVar1 = sub_080002C8(position + 1, super->collisionLayer); + uVar3 = 0x4025; + if (iVar1 == 0x12) { + uVar3 = 0x407b; + } + SetTile(uVar3, position + 1, super->collisionLayer); + iVar1 = sub_080002C8(position + 0x3f, super->collisionLayer); + uVar3 = 0x4029; + if (iVar1 == 0x12) { + uVar3 = 0x4078; + } + SetTile(uVar3, position + 0x3f, super->collisionLayer); + iVar1 = sub_080002C8(position + 0x40, super->collisionLayer); + uVar3 = 0x4026; + if (iVar1 == 0x12) { + uVar3 = 0x407c; + } + SetTile(uVar3, position + 0x40, super->collisionLayer); + iVar1 = sub_080002C8(position + 0x41, super->collisionLayer); + uVar3 = 0x402a; + if (iVar1 == 0x12) { + uVar3 = 0x407a; + } + SetTile(uVar3, position + 0x41, super->collisionLayer); + break; + } +} + +void sub_08099C18(BigIceBlockEntity* this) { + u32 tmp = this->unk_6e; + switch (this->unk_6c) { + default: + sub_0807BA8C(tmp - 0x41, super->collisionLayer); + sub_0807BA8C(tmp - 0x40, super->collisionLayer); + sub_0807BA8C(tmp - 1, super->collisionLayer); + sub_0807BA8C(tmp, super->collisionLayer); + break; + case 1: + sub_0807BA8C(tmp - 0x41, super->collisionLayer); + sub_0807BA8C(tmp - 0x40, super->collisionLayer); + sub_0807BA8C(tmp - 0x3f, super->collisionLayer); + sub_0807BA8C(tmp - 1, super->collisionLayer); + sub_0807BA8C(tmp, super->collisionLayer); + sub_0807BA8C(tmp + 1, super->collisionLayer); + break; + case 2: + sub_0807BA8C(tmp - 0x41, super->collisionLayer); + sub_0807BA8C(tmp - 0x40, super->collisionLayer); + sub_0807BA8C(tmp - 1, super->collisionLayer); + sub_0807BA8C(tmp, super->collisionLayer); + sub_0807BA8C(tmp + 0x3f, super->collisionLayer); + sub_0807BA8C(tmp + 0x40, super->collisionLayer); + break; + case 3: + sub_0807BA8C(tmp - 0x41, super->collisionLayer); + sub_0807BA8C(tmp - 0x40, super->collisionLayer); + sub_0807BA8C(tmp - 0x3f, super->collisionLayer); + sub_0807BA8C(tmp - 1, super->collisionLayer); + sub_0807BA8C(tmp, super->collisionLayer); + sub_0807BA8C(tmp + 1, super->collisionLayer); + sub_0807BA8C(tmp + 0x3f, super->collisionLayer); + sub_0807BA8C(tmp + 0x40, super->collisionLayer); + sub_0807BA8C(tmp + 0x41, super->collisionLayer); + break; + } +} + +void sub_08099D30(BigIceBlockEntity* this) { + if ((super->parent)->next == NULL) { + DeleteThisEntity(); + } + if (super->action == 0) { + super->action = 1; + InitializeAnimation(super, 4); + CopyPositionAndSpriteOffset(super->parent, super); + super->y.HALF.HI++; + super->spriteOffsetY--; + } + if ((super->parent)->action < 2) { + super->spriteSettings.draw = 1; + if ((super->frame & 1) != 0) { + super->frame = 0; + super->frameDuration = (Random() & 0x78) + 0x78; + } + GetNextFrame(super); + } else { + super->spriteSettings.draw = 0; + } +} + +void (*const BigIceBlock_Actions[])(BigIceBlockEntity*) = { + BigIceBlock_Init, + BigIceBlock_Action1, + BigIceBlock_Action2, + sub_08099880, +}; +const u16 gUnk_081237B0[] = { + 256, 266, 275, 284, 293, +}; \ No newline at end of file