diff --git a/asm/non_matching/puffstool/sub_080258C4.inc b/asm/non_matching/puffstool/sub_080258C4.inc new file mode 100644 index 00000000..861958cc --- /dev/null +++ b/asm/non_matching/puffstool/sub_080258C4.inc @@ -0,0 +1,77 @@ + + .syntax unified + + .text + + push {r4, lr} + adds r4, r0, #0 + movs r0, #1 + bl sub_08049DF4 + adds r2, r0, #0 + cmp r2, #0 + beq _08025922 + movs r0, #0x2e + ldrsh r1, [r2, r0] + movs r3, #0x2e + ldrsh r0, [r4, r3] + subs r3, r1, r0 + adds r0, r3, #0 + muls r0, r3, r0 + adds r3, r0, #0 + movs r1, #0x32 + ldrsh r0, [r2, r1] + movs r2, #0x32 + ldrsh r1, [r4, r2] + subs r0, r0, r1 + adds r1, r0, #0 + muls r1, r0, r1 + adds r0, r1, #0 + adds r3, r3, r0 + adds r0, r4, #0 + adds r0, #0x84 + ldrh r0, [r0] + cmp r0, #0 + bne _0802591A + adds r0, r4, #0 + adds r0, #0x81 + ldrb r1, [r0] + cmp r1, #0 + bne _0802591A + movs r0, #0x80 + lsls r0, r0, #3 + cmp r3, r0 + bgt _0802591A + movs r0, #9 + strb r0, [r4, #0xc] + strb r1, [r4, #0xe] + b _08025942 +_0802591A: + movs r0, #0x90 + lsls r0, r0, #4 + cmp r3, r0 + ble _08025926 +_08025922: + movs r0, #0 + b _08025944 +_08025926: + movs r0, #0xb + strb r0, [r4, #0xc] + movs r0, #1 + strb r0, [r4, #0xe] + bl Random + ldr r2, _08025948 @ =gUnk_080CC050 + movs r1, #0xf + ands r1, r0 + adds r1, r1, r2 + ldrb r1, [r1] + adds r0, r4, #0 + adds r0, #0x78 + strh r1, [r0] +_08025942: + movs r0, #1 +_08025944: + pop {r4, pc} + .align 2, 0 +_08025948: .4byte gUnk_080CC050 + + .syntax divided diff --git a/asm/non_matching/puffstool/sub_0802594C.inc b/asm/non_matching/puffstool/sub_0802594C.inc new file mode 100644 index 00000000..837bf19f --- /dev/null +++ b/asm/non_matching/puffstool/sub_0802594C.inc @@ -0,0 +1,136 @@ + + .syntax unified + + .text + + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x14 + mov sl, r0 + ldr r0, _08025A20 @ =gUnk_080CC090 + lsls r1, r1, #2 + adds r1, r1, r0 + ldr r7, [r1] + mov r0, sl + adds r0, #0x38 + ldrb r0, [r0] + mov sb, r0 + ldr r3, _08025A24 @ =gRoomControls + mov r1, sl + ldrh r0, [r1, #0x2e] + ldrh r1, [r3, #6] + subs r0, r0, r1 + adds r0, #8 + movs r1, #0x10 + rsbs r1, r1, #0 + adds r2, r1, #0 + ands r0, r2 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp] + mov r1, sl + ldrh r0, [r1, #0x32] + ldrh r1, [r3, #8] + subs r0, r0, r1 + adds r0, #8 + ands r0, r2 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + str r0, [sp, #4] +_08025996: + movs r0, #0 + ldrsb r0, [r7, r0] + ldr r1, [sp] + lsls r4, r1, #0x10 + asrs r4, r4, #0x10 + adds r4, r4, r0 + lsls r4, r4, #0x10 + movs r0, #1 + ldrsb r0, [r7, r0] + ldr r1, [sp, #4] + lsls r5, r1, #0x10 + asrs r5, r5, #0x10 + adds r5, r5, r0 + lsls r5, r5, #0x10 + lsrs r0, r4, #0x10 + str r0, [sp, #8] + asrs r4, r4, #0x10 + lsrs r1, r5, #0x10 + str r1, [sp, #0xc] + asrs r5, r5, #0x10 + adds r0, r4, #0 + adds r1, r5, #0 + mov r2, sb + bl sub_080002D4 + adds r6, r0, #0 + lsls r6, r6, #0x18 + lsrs r6, r6, #0x18 + movs r0, #0x10 + rsbs r0, r0, #0 + adds r0, r0, r4 + mov r8, r0 + adds r1, r5, #0 + mov r2, sb + bl sub_080002D4 + adds r3, r0, #0 + lsls r3, r3, #0x18 + lsrs r3, r3, #0x18 + subs r5, #0x10 + adds r0, r4, #0 + adds r1, r5, #0 + mov r2, sb + str r3, [sp, #0x10] + bl sub_080002D4 + adds r4, r0, #0 + lsls r4, r4, #0x18 + lsrs r4, r4, #0x18 + mov r0, r8 + adds r1, r5, #0 + mov r2, sb + bl sub_080002D4 + ldr r3, [sp, #0x10] + orrs r6, r3 + orrs r4, r6 + orrs r4, r0 + lsls r4, r4, #0x18 + cmp r4, #0 + beq _08025A28 + adds r7, #2 + movs r0, #0 + ldrsb r0, [r7, r0] + cmp r0, #0x7f + bne _08025996 + movs r0, #0 + b _08025A44 + .align 2, 0 +_08025A20: .4byte gUnk_080CC090 +_08025A24: .4byte gRoomControls +_08025A28: + ldr r2, _08025A50 @ =gRoomControls + ldrh r0, [r2, #6] + ldr r1, [sp, #8] + adds r0, r0, r1 + mov r1, sl + adds r1, #0x7c + strh r0, [r1] + ldrh r0, [r2, #8] + ldr r1, [sp, #0xc] + adds r0, r0, r1 + mov r1, sl + adds r1, #0x7e + strh r0, [r1] + movs r0, #1 +_08025A44: + add sp, #0x14 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_08025A50: .4byte gRoomControls + + .syntax divided diff --git a/asm/puffstool.s b/asm/puffstool.s deleted file mode 100644 index 70b4dca2..00000000 --- a/asm/puffstool.s +++ /dev/null @@ -1,1681 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Puffstool -Puffstool: @ 0x08024FE8 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _08025004 @ =gUnk_080CBF9C - bl EnemyFunctionHandler - movs r3, #0x10 - rsbs r3, r3, #0 - adds r0, r4, #0 - movs r1, #0 - movs r2, #1 - bl SetChildOffset - pop {r4, pc} - .align 2, 0 -_08025004: .4byte gUnk_080CBF9C - - thumb_func_start sub_08025008 -sub_08025008: @ 0x08025008 - push {lr} - ldr r2, _0802501C @ =gUnk_080CBFB4 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0802501C: .4byte gUnk_080CBFB4 - - thumb_func_start sub_08025020 -sub_08025020: @ 0x08025020 - push {r4, r5, lr} - adds r4, r0, #0 - adds r0, #0x41 - ldrb r0, [r0] - movs r1, #0x7f - ands r1, r0 - cmp r1, #0 - blt _080250C2 - cmp r1, #3 - ble _0802510C - cmp r1, #0x1b - bne _080250C2 - adds r0, r4, #0 - bl sub_0804AA1C - ldr r1, _08025058 @ =gUnk_080CBFE8 - ldr r0, [r4, #0x4c] - ldrb r0, [r0, #0xa] - adds r0, r0, r1 - ldrb r1, [r0] - adds r3, r4, #0 - adds r3, #0x82 - ldrb r0, [r3] - cmp r1, r0 - bhs _0802505C - subs r0, r0, r1 - strb r0, [r3] - b _08025078 - .align 2, 0 -_08025058: .4byte gUnk_080CBFE8 -_0802505C: - adds r1, r4, #0 - adds r1, #0x84 - movs r2, #0 - movs r0, #0xa5 - lsls r0, r0, #2 - strh r0, [r1] - subs r1, #0x45 - movs r0, #0x83 - strb r0, [r1] - strb r2, [r3] - adds r0, r4, #0 - movs r1, #0x7c - bl sub_0801D2B4 -_08025078: - movs r2, #0 - movs r0, #7 - strb r0, [r4, #0xc] - movs r0, #0x3c - strb r0, [r4, #0xe] - ldr r0, [r4, #0x20] - cmp r0, #0 - ble _0802508A - str r2, [r4, #0x20] -_0802508A: - adds r1, r4, #0 - adds r1, #0x3d - movs r0, #0xf4 - strb r0, [r1] - adds r0, r4, #0 - adds r0, #0x42 - strb r2, [r0] - adds r5, r4, #0 - adds r5, #0x80 - ldrb r0, [r5] - cmp r0, #0 - bne _0802510C - ldr r0, [r4, #0x4c] - ldrb r0, [r0, #0x15] - lsrs r0, r0, #3 - strb r0, [r4, #0x14] - ldrb r1, [r4, #0x14] - adds r1, #4 - adds r0, r4, #0 - bl InitializeAnimation - adds r1, r4, #0 - adds r1, #0x59 - movs r0, #6 - strb r0, [r1] - movs r0, #1 - strb r0, [r5] - b _0802510C -_080250C2: - adds r0, r4, #0 - adds r0, #0x3f - ldrb r0, [r0] - cmp r0, #0x82 - bne _0802510C - adds r0, r4, #0 - adds r0, #0x3d - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - bge _0802510C - movs r0, #0x21 - movs r1, #2 - movs r2, #0 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _08025104 - adds r3, r2, #0 - adds r3, #0x29 - ldrb r0, [r3] - movs r1, #8 - rsbs r1, r1, #0 - ands r1, r0 - movs r0, #3 - orrs r1, r0 - strb r1, [r3] - adds r0, r4, #0 - adds r1, r2, #0 - bl CopyPosition -_08025104: - movs r0, #0xc3 - lsls r0, r0, #1 - bl EnqueueSFX -_0802510C: - ldr r1, _08025118 @ =gUnk_080CBF9C - adds r0, r4, #0 - bl sub_0804AA30 - pop {r4, r5, pc} - .align 2, 0 -_08025118: .4byte gUnk_080CBF9C - - thumb_func_start sub_0802511C -sub_0802511C: @ 0x0802511C - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x3a - ldrb r1, [r0] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _08025142 - ldrb r0, [r4, #0xe] - cmp r0, #1 - bne _08025142 - adds r0, r4, #0 - adds r0, #0x82 - ldrb r0, [r0] - cmp r0, #0 - beq _08025142 - adds r0, r4, #0 - bl sub_08025B18 -_08025142: - adds r0, r4, #0 - bl sub_0804A7D4 - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0802514C -sub_0802514C: @ 0x0802514C - push {r4, lr} - adds r4, r0, #0 - movs r1, #0x80 - lsls r1, r1, #6 - bl sub_08003FC4 - adds r0, r4, #0 - bl sub_0806F520 - cmp r0, #0 - beq _08025178 - ldr r0, _08025174 @ =gUnk_080CBFEC - ldrb r1, [r4, #0xd] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 - b _0802517E - .align 2, 0 -_08025174: .4byte gUnk_080CBFEC -_08025178: - adds r0, r4, #0 - bl sub_08025C2C -_0802517E: - pop {r4, pc} - - thumb_func_start sub_08025180 -sub_08025180: @ 0x08025180 - push {r4, lr} - adds r4, r0, #0 - movs r0, #1 - strb r0, [r4, #0xd] - bl Random - strb r0, [r4, #0xe] - ldr r0, [r4, #0x4c] - ldrb r0, [r0, #0x15] - movs r1, #0x10 - eors r0, r1 - lsrs r0, r0, #3 - strb r0, [r4, #0x14] - ldrb r1, [r4, #0x14] - adds r1, #4 - adds r0, r4, #0 - bl InitializeAnimation - adds r0, r4, #0 - bl sub_0804AA1C - pop {r4, pc} - - thumb_func_start sub_080251AC -sub_080251AC: @ 0x080251AC - push {r4, lr} - adds r4, r0, #0 - adds r3, r4, #0 - adds r3, #0x82 - ldrb r0, [r3] - cmp r0, #3 - bls _080251D8 - subs r0, #3 - strb r0, [r3] - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - movs r1, #0xff - ands r0, r1 - movs r1, #3 - ands r0, r1 - cmp r0, #0 - bne _080251F4 - adds r0, r4, #0 - bl sub_08025BD4 - b _080251F4 -_080251D8: - adds r1, r4, #0 - adds r1, #0x84 - movs r2, #0 - movs r0, #0xa5 - lsls r0, r0, #2 - strh r0, [r1] - subs r1, #0x45 - movs r0, #0x83 - strb r0, [r1] - strb r2, [r3] - adds r0, r4, #0 - movs r1, #0x7c - bl sub_0801D2B4 -_080251F4: - adds r0, r4, #0 - bl GetNextFrame - pop {r4, pc} - - thumb_func_start sub_080251FC -sub_080251FC: @ 0x080251FC - push {r4, r5, lr} - adds r4, r0, #0 - bl sub_0804A720 - adds r1, r4, #0 - adds r1, #0x82 - movs r5, #0 - movs r0, #0xf0 - strb r0, [r1] - bl Random - movs r1, #0x1c - ands r0, r1 - strb r0, [r4, #0x15] - adds r0, r4, #0 - adds r0, #0x80 - strb r5, [r0] - adds r0, r4, #0 - bl sub_080256B4 - adds r0, r4, #0 - movs r1, #0 - bl InitializeAnimation - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08025230 -sub_08025230: @ 0x08025230 - push {r4, r5, lr} - adds r4, r0, #0 - adds r1, r4, #0 - adds r1, #0x81 - ldrb r0, [r1] - cmp r0, #0 - beq _08025242 - subs r0, #1 - strb r0, [r1] -_08025242: - adds r0, r4, #0 - bl sub_08025C44 - adds r0, r4, #0 - bl GetNextFrame - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - movs r5, #0xff - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08025270 - bl Random - movs r1, #3 - ands r0, r1 - adds r0, #4 - strb r0, [r4, #0xe] - adds r0, r4, #0 - bl sub_08025C60 - strb r0, [r4, #0x15] -_08025270: - ldrh r0, [r4, #0x2a] - cmp r0, #0 - beq _0802528C - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - ands r0, r5 - cmp r0, #0 - bne _08025290 - ldrh r1, [r4, #0x2a] - adds r0, r4, #0 - bl sub_0800417E - b _08025290 -_0802528C: - movs r0, #0x1e - strb r0, [r4, #0xf] -_08025290: - adds r1, r4, #0 - adds r1, #0x78 - ldrh r0, [r1] - cmp r0, #0 - bne _080252D8 - adds r0, r4, #0 - bl sub_0802571C - cmp r0, #0 - beq _080252DC - movs r0, #2 - strb r0, [r4, #0xc] - movs r0, #0xf0 - strb r0, [r4, #0xe] - movs r0, #0x2e - ldrsh r1, [r4, r0] - ldr r2, _080252D4 @ =gRoomControls - ldrh r0, [r2, #6] - subs r1, r1, r0 - asrs r1, r1, #4 - movs r3, #0x3f - ands r1, r3 - movs r5, #0x32 - ldrsh r0, [r4, r5] - ldrh r2, [r2, #8] - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r3 - lsls r0, r0, #6 - orrs r1, r0 - adds r0, r4, #0 - adds r0, #0x86 - strh r1, [r0] - b _080252DC - .align 2, 0 -_080252D4: .4byte gRoomControls -_080252D8: - subs r0, #1 - strh r0, [r1] -_080252DC: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_080252E0 -sub_080252E0: @ 0x080252E0 - push {r4, r5, lr} - adds r4, r0, #0 - movs r1, #0x2e - ldrsh r0, [r4, r1] - movs r2, #0x32 - ldrsh r1, [r4, r2] - adds r2, r4, #0 - adds r2, #0x7c - ldrh r2, [r2] - adds r3, r4, #0 - adds r3, #0x7e - ldrh r3, [r3] - bl sub_080045D4 - strb r0, [r4, #0x15] - adds r0, r4, #0 - bl sub_08025C44 - adds r0, r4, #0 - bl GetNextFrame - movs r1, #0x2e - ldrsh r0, [r4, r1] - ldr r3, _08025348 @ =gRoomControls - ldrh r1, [r3, #6] - subs r0, r0, r1 - asrs r5, r0, #4 - movs r2, #0x3f - ands r5, 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 r5, r0 - adds r0, r4, #0 - adds r0, #0x86 - ldrh r2, [r0] - cmp r5, r2 - bne _0802534C - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08025352 - adds r0, r4, #0 - bl sub_080256B4 - b _08025352 - .align 2, 0 -_08025348: .4byte gRoomControls -_0802534C: - strh r5, [r0] - movs r0, #0xf0 - strb r0, [r4, #0xe] -_08025352: - movs r0, #0x2e - ldrsh r1, [r4, r0] - adds r0, r4, #0 - adds r0, #0x7c - ldrh r0, [r0] - cmp r1, r0 - bne _08025388 - movs r1, #0x32 - ldrsh r0, [r4, r1] - adds r1, r4, #0 - adds r1, #0x7e - ldrh r1, [r1] - cmp r0, r1 - bne _08025388 - movs r1, #0 - movs r0, #3 - strb r0, [r4, #0xc] - movs r0, #0x1e - strb r0, [r4, #0xe] - strb r1, [r4, #0xf] - movs r0, #0xc0 - lsls r0, r0, #9 - str r0, [r4, #0x20] - adds r0, r4, #0 - movs r1, #1 - bl InitializeAnimation -_08025388: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0802538C -sub_0802538C: @ 0x0802538C - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _0802539C - subs r0, #1 - strb r0, [r4, #0xe] - b _080253CC -_0802539C: - adds r0, r4, #0 - adds r0, #0x5a - ldrb r0, [r0] - cmp r0, #0 - bne _080253AE - adds r0, r4, #0 - bl GetNextFrame - b _080253CC -_080253AE: - movs r1, #0x80 - lsls r1, r1, #6 - adds r0, r4, #0 - bl sub_08003FC4 - ldr r1, [r4, #0x20] - ldr r0, _080253D0 @ =0x00001FFF - cmp r1, r0 - bgt _080253CC - movs r0, #4 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #2 - bl InitializeAnimation -_080253CC: - pop {r4, pc} - .align 2, 0 -_080253D0: .4byte 0x00001FFF - - thumb_func_start sub_080253D4 -sub_080253D4: @ 0x080253D4 - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - movs r1, #0x80 - lsls r1, r1, #6 - adds r0, r4, #0 - bl sub_08003FC4 - cmp r0, #0 - bne _0802541A - ldrb r0, [r4, #0xf] - cmp r0, #0 - bne _080253FE - movs r0, #5 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #3 - bl InitializeAnimation - b _0802541A -_080253FE: - movs r0, #6 - strb r0, [r4, #0xc] - movs r0, #0x1e - strb r0, [r4, #0xe] - adds r0, r4, #0 - movs r1, #3 - bl InitializeAnimation - adds r0, r4, #0 - bl sub_08025A54 - adds r0, r4, #0 - bl sub_08025AE8 -_0802541A: - pop {r4, pc} - - thumb_func_start sub_0802541C -sub_0802541C: @ 0x0802541C - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08025448 - movs r0, #3 - strb r0, [r4, #0xc] - movs r0, #1 - strb r0, [r4, #0xf] - movs r0, #0x80 - lsls r0, r0, #0xa - str r0, [r4, #0x20] - adds r0, r4, #0 - movs r1, #1 - bl InitializeAnimation -_08025448: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0802544C -sub_0802544C: @ 0x0802544C - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x5a - ldrb r0, [r0] - cmp r0, #0 - bne _08025460 - adds r0, r4, #0 - bl GetNextFrame - b _0802547A -_08025460: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0802547A - adds r0, r4, #0 - bl sub_080256B4 - adds r0, r4, #0 - movs r1, #0 - bl InitializeAnimation -_0802547A: - pop {r4, pc} - - thumb_func_start sub_0802547C -sub_0802547C: @ 0x0802547C - push {r4, lr} - adds r4, r0, #0 - movs r1, #0x80 - lsls r1, r1, #6 - bl sub_08003FC4 - adds r0, r4, #0 - bl GetNextFrame - ldrb r1, [r4, #0xe] - movs r0, #7 - ands r0, r1 - cmp r0, #0 - bne _0802549E - adds r0, r4, #0 - bl sub_08025BD4 -_0802549E: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080254B0 - adds r0, r4, #0 - bl sub_08025C2C -_080254B0: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080254B4 -sub_080254B4: @ 0x080254B4 - push {r4, lr} - adds r4, r0, #0 - movs r1, #0x80 - lsls r1, r1, #6 - bl sub_08003FC4 - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0802550C - movs r1, #0x36 - ldrsh r0, [r4, r1] - cmp r0, #0 - bne _08025512 - adds r0, r4, #0 - adds r0, #0x84 - ldrh r0, [r0] - cmp r0, #0 - bne _080254F6 - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x82 - strb r0, [r1] - adds r1, #0x43 - movs r0, #0xf0 - strb r0, [r1] - adds r0, r4, #0 - bl sub_080256B4 - b _08025502 -_080254F6: - movs r0, #0xc - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #0x1c - bl sub_0804A9FC -_08025502: - adds r0, r4, #0 - movs r1, #0 - bl InitializeAnimation - b _08025512 -_0802550C: - adds r0, r4, #0 - bl GetNextFrame -_08025512: - pop {r4, pc} - - thumb_func_start sub_08025514 -sub_08025514: @ 0x08025514 - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - ldrb r1, [r4, #0xe] - adds r0, r1, #1 - strb r0, [r4, #0xe] - lsls r1, r1, #0x18 - lsrs r1, r1, #0x18 - adds r0, r4, #0 - bl sub_0802594C - cmp r0, #0 - beq _08025542 - movs r0, #2 - strb r0, [r4, #0xc] - movs r0, #0xf0 - strb r0, [r4, #0xe] - adds r1, r4, #0 - adds r1, #0x81 - movs r0, #0x78 - strb r0, [r1] - b _08025550 -_08025542: - ldrb r0, [r4, #0xe] - cmp r0, #3 - bls _08025550 - movs r0, #0xa - strb r0, [r4, #0xc] - movs r0, #0x20 - strb r0, [r4, #0xe] -_08025550: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08025554 -sub_08025554: @ 0x08025554 - push {r4, lr} - adds r4, r0, #0 - movs r0, #1 - bl sub_08049DF4 - adds r2, r0, #0 - cmp r2, #0 - bne _0802556C - adds r0, r4, #0 - bl sub_080256B4 - b _080255A8 -_0802556C: - ldrb r1, [r4, #0xe] - movs r0, #3 - ands r0, r1 - cmp r0, #0 - bne _08025580 - adds r0, r2, #0 - adds r1, r4, #0 - bl GetFacingDirection - strb r0, [r4, #0x15] -_08025580: - adds r0, r4, #0 - bl sub_08025C44 - adds r0, r4, #0 - bl GetNextFrame - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _08025598 - subs r0, #1 - strb r0, [r4, #0xe] - b _080255A8 -_08025598: - adds r0, r4, #0 - bl sub_080258C4 - cmp r0, #0 - bne _080255A8 - adds r0, r4, #0 - bl sub_080256B4 -_080255A8: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080255AC -sub_080255AC: @ 0x080255AC - push {r4, r5, r6, lr} - adds r5, r0, #0 - movs r0, #1 - bl sub_08049DF4 - adds r6, r0, #0 - cmp r6, #0 - bne _080255C4 - adds r0, r5, #0 - bl sub_080256B4 - b _08025638 -_080255C4: - adds r1, r5, #0 - adds r1, #0x81 - ldrb r0, [r1] - cmp r0, #0 - beq _080255D2 - subs r0, #1 - strb r0, [r1] -_080255D2: - ldrb r0, [r5, #0xe] - subs r0, #1 - strb r0, [r5, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0802560C - bl Random - movs r1, #3 - ands r0, r1 - adds r0, #4 - strb r0, [r5, #0xe] - bl Random - adds r4, r0, #0 - movs r0, #0xf - ands r4, r0 - cmp r4, #7 - bgt _080255FA - subs r4, #1 -_080255FA: - subs r4, #7 - adds r0, r6, #0 - adds r1, r5, #0 - bl GetFacingDirection - adds r0, r0, r4 - movs r1, #0x1f - ands r0, r1 - strb r0, [r5, #0x15] -_0802560C: - adds r1, r5, #0 - adds r1, #0x78 - ldrh r0, [r1] - cmp r0, #0 - bne _08025628 - adds r0, r5, #0 - bl sub_080258C4 - cmp r0, #0 - bne _0802562C - adds r0, r5, #0 - bl sub_080256B4 - b _0802562C -_08025628: - subs r0, #1 - strh r0, [r1] -_0802562C: - adds r0, r5, #0 - bl sub_08025C44 - adds r0, r5, #0 - bl GetNextFrame -_08025638: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_0802563C -sub_0802563C: @ 0x0802563C - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r2, r4, #0 - adds r2, #0x84 - ldrh r0, [r2] - subs r1, r0, #1 - strh r1, [r2] - lsls r0, r1, #0x10 - cmp r0, #0 - bne _08025678 - adds r0, r4, #0 - movs r1, #0x28 - bl sub_0801D2B4 - adds r1, r4, #0 - adds r1, #0x3f - movs r0, #0x82 - strb r0, [r1] - adds r1, #0x43 - movs r0, #0xf0 - strb r0, [r1] - adds r0, r4, #0 - bl sub_080256B4 - adds r0, r4, #0 - bl sub_0804AA1C - b _080256B0 -_08025678: - lsls r1, r1, #0x10 - lsrs r0, r1, #0x10 - cmp r0, #0x77 - bhi _080256B0 - ldr r0, _080256A4 @ =gUnk_080CBFF8 - lsrs r1, r1, #0x14 - adds r1, r1, r0 - ldrb r1, [r1] - ldrh r2, [r2] - adds r0, r2, #0 - ands r0, r1 - cmp r0, #0 - bne _080256B0 - adds r0, r1, #1 - ands r2, r0 - cmp r2, #0 - beq _080256A8 - adds r0, r4, #0 - movs r1, #0x7c - bl sub_0801D2B4 - b _080256B0 - .align 2, 0 -_080256A4: .4byte gUnk_080CBFF8 -_080256A8: - adds r0, r4, #0 - movs r1, #0x28 - bl sub_0801D2B4 -_080256B0: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080256B4 -sub_080256B4: @ 0x080256B4 - push {r4, r5, lr} - adds r5, r0, #0 - movs r0, #1 - strb r0, [r5, #0xc] - bl Random - movs r1, #3 - ands r0, r1 - adds r0, #4 - strb r0, [r5, #0xe] - movs r0, #0x1e - strb r0, [r5, #0xf] - bl Random - ldrb r4, [r5, #0x15] - adds r4, #7 - movs r1, #7 - bl __modsi3 - lsls r0, r0, #2 - adds r4, r4, r0 - movs r0, #0x1c - ands r4, r0 - strb r4, [r5, #0x15] - bl Random - ldr r2, _08025718 @ =gUnk_080CC000 - movs r1, #0xf - ands r1, r0 - lsls r1, r1, #1 - adds r1, r1, r2 - ldrh r1, [r1] - adds r0, r5, #0 - adds r0, #0x78 - movs r4, #0 - strh r1, [r0] - bl Random - movs r1, #0x18 - bl __modsi3 - lsls r0, r0, #1 - adds r1, r5, #0 - adds r1, #0x7a - strb r0, [r1] - adds r0, r5, #0 - adds r0, #0x7b - strb r4, [r0] - pop {r4, r5, pc} - .align 2, 0 -_08025718: .4byte gUnk_080CC000 - - thumb_func_start sub_0802571C -sub_0802571C: @ 0x0802571C - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #8 - adds r7, r0, #0 - ldr r0, _080257B0 @ =gRoomControls - mov sb, r0 - ldrh r0, [r7, #0x2e] - mov r2, sb - ldrh r1, [r2, #6] - subs r0, r0, r1 - adds r0, #8 - movs r3, #0x10 - rsbs r3, r3, #0 - adds r2, r3, #0 - ands r0, r2 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - str r0, [sp] - ldrh r0, [r7, #0x32] - mov r3, sb - ldrh r1, [r3, #8] - subs r0, r0, r1 - adds r0, #8 - ands r0, r2 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - mov sl, r0 - adds r0, r7, #0 - adds r0, #0x7a - ldrb r4, [r0] - movs r3, #0 - ldr r0, _080257B4 @ =gUnk_080CC020 - mov r8, r0 -_08025764: - mov r1, r8 - adds r0, r4, r1 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - ldr r2, [sp] - adds r0, r2, r0 - lsls r0, r0, #0x10 - lsrs r6, r0, #0x10 - adds r0, r4, #1 - add r0, r8 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - add r0, sl - lsls r0, r0, #0x10 - lsrs r5, r0, #0x10 - adds r0, r7, #0 - adds r1, r6, #0 - adds r2, r5, #0 - str r3, [sp, #4] - bl sub_080257EC - ldr r3, [sp, #4] - cmp r0, #0 - beq _080257B8 - mov r3, sb - ldrh r0, [r3, #6] - adds r0, r6, r0 - adds r1, r7, #0 - adds r1, #0x7c - strh r0, [r1] - ldrh r0, [r3, #8] - adds r0, r5, r0 - adds r1, #2 - strh r0, [r1] - movs r0, #1 - b _080257E0 - .align 2, 0 -_080257B0: .4byte gRoomControls -_080257B4: .4byte gUnk_080CC020 -_080257B8: - adds r0, r4, #2 - lsls r0, r0, #0x10 - lsrs r4, r0, #0x10 - cmp r4, #0x2f - bls _080257C4 - movs r4, #0 -_080257C4: - adds r0, r3, #1 - lsls r0, r0, #0x10 - lsrs r3, r0, #0x10 - cmp r3, #3 - bls _08025764 - adds r0, r7, #0 - adds r0, #0x7a - strb r4, [r0] - adds r1, r7, #0 - adds r1, #0x7b - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - movs r0, #0 -_080257E0: - add sp, #8 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_080257EC -sub_080257EC: @ 0x080257EC - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r4, r0, #0 - adds r7, r1, #0 - adds r6, r2, #0 - adds r0, #0x38 - ldrb r2, [r0] - adds r0, r7, #0 - adds r1, r6, #0 - bl sub_080002A8 - lsls r0, r0, #0x10 - lsrs r2, r0, #0x10 - ldr r0, _080258B0 @ =0x00000312 - cmp r2, r0 - beq _08025822 - ldr r0, _080258B4 @ =gUnk_080B37A0 - adds r0, r2, r0 - ldrb r0, [r0] - cmp r0, #0x16 - beq _08025822 - ldr r0, _080258B8 @ =gUnk_080B3E80 - adds r0, r2, r0 - ldrb r0, [r0] - cmp r0, #0 - beq _080258AA -_08025822: - adds r5, r7, #0 - subs r5, #0x10 - adds r4, #0x38 - ldrb r2, [r4] - adds r0, r5, #0 - adds r1, r6, #0 - bl sub_080002A8 - lsls r0, r0, #0x10 - lsrs r2, r0, #0x10 - ldr r0, _080258B0 @ =0x00000312 - mov r8, r4 - cmp r2, r0 - beq _08025852 - ldr r0, _080258B4 @ =gUnk_080B37A0 - adds r0, r2, r0 - ldrb r0, [r0] - cmp r0, #0x16 - beq _08025852 - ldr r0, _080258B8 @ =gUnk_080B3E80 - adds r0, r2, r0 - ldrb r0, [r0] - cmp r0, #0 - beq _080258AA -_08025852: - adds r4, r6, #0 - subs r4, #0x10 - mov r0, r8 - ldrb r2, [r0] - adds r0, r7, #0 - adds r1, r4, #0 - bl sub_080002A8 - lsls r0, r0, #0x10 - lsrs r2, r0, #0x10 - ldr r0, _080258B0 @ =0x00000312 - adds r1, r4, #0 - cmp r2, r0 - beq _08025882 - ldr r0, _080258B4 @ =gUnk_080B37A0 - adds r0, r2, r0 - ldrb r0, [r0] - cmp r0, #0x16 - beq _08025882 - ldr r0, _080258B8 @ =gUnk_080B3E80 - adds r0, r2, r0 - ldrb r0, [r0] - cmp r0, #0 - beq _080258AA -_08025882: - mov r0, r8 - ldrb r2, [r0] - adds r0, r5, #0 - bl sub_080002A8 - lsls r0, r0, #0x10 - lsrs r2, r0, #0x10 - ldr r0, _080258B0 @ =0x00000312 - cmp r2, r0 - beq _080258BC - ldr r0, _080258B4 @ =gUnk_080B37A0 - adds r0, r2, r0 - ldrb r0, [r0] - cmp r0, #0x16 - beq _080258BC - ldr r0, _080258B8 @ =gUnk_080B3E80 - adds r0, r2, r0 - ldrb r0, [r0] - cmp r0, #0 - bne _080258BC -_080258AA: - movs r0, #1 - b _080258BE - .align 2, 0 -_080258B0: .4byte 0x00000312 -_080258B4: .4byte gUnk_080B37A0 -_080258B8: .4byte gUnk_080B3E80 -_080258BC: - movs r0, #0 -_080258BE: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_080258C4 -sub_080258C4: @ 0x080258C4 - push {r4, lr} - adds r4, r0, #0 - movs r0, #1 - bl sub_08049DF4 - adds r2, r0, #0 - cmp r2, #0 - beq _08025922 - movs r0, #0x2e - ldrsh r1, [r2, r0] - movs r3, #0x2e - ldrsh r0, [r4, r3] - subs r3, r1, r0 - adds r0, r3, #0 - muls r0, r3, r0 - adds r3, r0, #0 - movs r1, #0x32 - ldrsh r0, [r2, r1] - movs r2, #0x32 - ldrsh r1, [r4, r2] - subs r0, r0, r1 - adds r1, r0, #0 - muls r1, r0, r1 - adds r0, r1, #0 - adds r3, r3, r0 - adds r0, r4, #0 - adds r0, #0x84 - ldrh r0, [r0] - cmp r0, #0 - bne _0802591A - adds r0, r4, #0 - adds r0, #0x81 - ldrb r1, [r0] - cmp r1, #0 - bne _0802591A - movs r0, #0x80 - lsls r0, r0, #3 - cmp r3, r0 - bgt _0802591A - movs r0, #9 - strb r0, [r4, #0xc] - strb r1, [r4, #0xe] - b _08025942 -_0802591A: - movs r0, #0x90 - lsls r0, r0, #4 - cmp r3, r0 - ble _08025926 -_08025922: - movs r0, #0 - b _08025944 -_08025926: - movs r0, #0xb - strb r0, [r4, #0xc] - movs r0, #1 - strb r0, [r4, #0xe] - bl Random - ldr r2, _08025948 @ =gUnk_080CC050 - movs r1, #0xf - ands r1, r0 - adds r1, r1, r2 - ldrb r1, [r1] - adds r0, r4, #0 - adds r0, #0x78 - strh r1, [r0] -_08025942: - movs r0, #1 -_08025944: - pop {r4, pc} - .align 2, 0 -_08025948: .4byte gUnk_080CC050 - - thumb_func_start sub_0802594C -sub_0802594C: @ 0x0802594C - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #0x14 - mov sl, r0 - ldr r0, _08025A20 @ =gUnk_080CC090 - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r7, [r1] - mov r0, sl - adds r0, #0x38 - ldrb r0, [r0] - mov sb, r0 - ldr r3, _08025A24 @ =gRoomControls - mov r1, sl - ldrh r0, [r1, #0x2e] - ldrh r1, [r3, #6] - subs r0, r0, r1 - adds r0, #8 - movs r1, #0x10 - rsbs r1, r1, #0 - adds r2, r1, #0 - ands r0, r2 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - str r0, [sp] - mov r1, sl - ldrh r0, [r1, #0x32] - ldrh r1, [r3, #8] - subs r0, r0, r1 - adds r0, #8 - ands r0, r2 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - str r0, [sp, #4] -_08025996: - movs r0, #0 - ldrsb r0, [r7, r0] - ldr r1, [sp] - lsls r4, r1, #0x10 - asrs r4, r4, #0x10 - adds r4, r4, r0 - lsls r4, r4, #0x10 - movs r0, #1 - ldrsb r0, [r7, r0] - ldr r1, [sp, #4] - lsls r5, r1, #0x10 - asrs r5, r5, #0x10 - adds r5, r5, r0 - lsls r5, r5, #0x10 - lsrs r0, r4, #0x10 - str r0, [sp, #8] - asrs r4, r4, #0x10 - lsrs r1, r5, #0x10 - str r1, [sp, #0xc] - asrs r5, r5, #0x10 - adds r0, r4, #0 - adds r1, r5, #0 - mov r2, sb - bl sub_080002D4 - adds r6, r0, #0 - lsls r6, r6, #0x18 - lsrs r6, r6, #0x18 - movs r0, #0x10 - rsbs r0, r0, #0 - adds r0, r0, r4 - mov r8, r0 - adds r1, r5, #0 - mov r2, sb - bl sub_080002D4 - adds r3, r0, #0 - lsls r3, r3, #0x18 - lsrs r3, r3, #0x18 - subs r5, #0x10 - adds r0, r4, #0 - adds r1, r5, #0 - mov r2, sb - str r3, [sp, #0x10] - bl sub_080002D4 - adds r4, r0, #0 - lsls r4, r4, #0x18 - lsrs r4, r4, #0x18 - mov r0, r8 - adds r1, r5, #0 - mov r2, sb - bl sub_080002D4 - ldr r3, [sp, #0x10] - orrs r6, r3 - orrs r4, r6 - orrs r4, r0 - lsls r4, r4, #0x18 - cmp r4, #0 - beq _08025A28 - adds r7, #2 - movs r0, #0 - ldrsb r0, [r7, r0] - cmp r0, #0x7f - bne _08025996 - movs r0, #0 - b _08025A44 - .align 2, 0 -_08025A20: .4byte gUnk_080CC090 -_08025A24: .4byte gRoomControls -_08025A28: - ldr r2, _08025A50 @ =gRoomControls - ldrh r0, [r2, #6] - ldr r1, [sp, #8] - adds r0, r0, r1 - mov r1, sl - adds r1, #0x7c - strh r0, [r1] - ldrh r0, [r2, #8] - ldr r1, [sp, #0xc] - adds r0, r0, r1 - mov r1, sl - adds r1, #0x7e - strh r0, [r1] - movs r0, #1 -_08025A44: - add sp, #0x14 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08025A50: .4byte gRoomControls - - thumb_func_start sub_08025A54 -sub_08025A54: @ 0x08025A54 - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - adds r1, r0, #0 - adds r1, #0x38 - ldrb r1, [r1] - mov sb, r1 - ldr r3, _08025AB0 @ =gRoomControls - ldrh r2, [r0, #0x2e] - ldrh r1, [r3, #6] - subs r2, r2, r1 - ldrh r1, [r0, #0x32] - ldrh r0, [r3, #8] - subs r1, r1, r0 - ldr r4, _08025AB4 @ =gUnk_080CC0A0 - movs r5, #0 - lsls r2, r2, #0x10 - asrs r2, r2, #0x10 - mov r8, r2 - movs r6, #0x3f - lsls r1, r1, #0x10 - asrs r7, r1, #0x10 -_08025A82: - movs r0, #0 - ldrsb r0, [r4, r0] - add r0, r8 - asrs r0, r0, #4 - ands r0, r6 - movs r1, #1 - ldrsb r1, [r4, r1] - adds r1, r7, r1 - asrs r1, r1, #4 - ands r1, r6 - lsls r1, r1, #6 - orrs r0, r1 - mov r1, sb - bl sub_08025AB8 - adds r5, #1 - adds r4, #2 - cmp r5, #3 - bls _08025A82 - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08025AB0: .4byte gRoomControls -_08025AB4: .4byte gUnk_080CC0A0 - - thumb_func_start sub_08025AB8 -sub_08025AB8: @ 0x08025AB8 - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r1, #0 - bl sub_080002E0 - cmp r0, #0 - bne _08025AD6 - lsls r0, r4, #0x10 - lsrs r0, r0, #0x10 - lsls r1, r5, #0x18 - lsrs r1, r1, #0x18 - bl sub_080002C8 - cmp r0, #0xa - beq _08025ADA -_08025AD6: - movs r0, #0 - b _08025AE6 -_08025ADA: - movs r0, #0x61 - adds r1, r4, #0 - adds r2, r5, #0 - bl sub_0807B7D8 - movs r0, #1 -_08025AE6: - pop {r4, r5, pc} - - thumb_func_start sub_08025AE8 -sub_08025AE8: @ 0x08025AE8 - push {r4, lr} - adds r4, r0, #0 - movs r1, #0x22 - movs r2, #0 - bl CreateFx - adds r1, r0, #0 - cmp r1, #0 - beq _08025B00 - ldr r0, [r1, #0x30] - subs r0, #1 - str r0, [r1, #0x30] -_08025B00: - adds r0, r4, #0 - movs r1, #0x23 - movs r2, #0 - bl CreateFx - adds r1, r0, #0 - cmp r1, #0 - beq _08025B16 - ldr r0, [r1, #0x30] - adds r0, #1 - str r0, [r1, #0x30] -_08025B16: - pop {r4, pc} - - thumb_func_start sub_08025B18 -sub_08025B18: @ 0x08025B18 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #8 - adds r6, r0, #0 - movs r0, #0x2e - ldrsh r1, [r6, r0] - ldr r2, _08025BC8 @ =gRoomControls - ldrh r0, [r2, #6] - subs r1, r1, r0 - str r1, [sp] - movs r0, #0x32 - ldrsh r1, [r6, r0] - ldrh r0, [r2, #8] - subs r1, r1, r0 - str r1, [sp, #4] - adds r0, r6, #0 - adds r0, #0x38 - ldrb r0, [r0] - mov sl, r0 - ldr r5, _08025BCC @ =gUnk_080CC0A8 - movs r7, #0 - movs r1, #0x3f - mov r8, r1 - movs r2, #0x10 - rsbs r2, r2, #0 - mov sb, r2 -_08025B52: - movs r0, #0 - ldrsb r0, [r5, r0] - ldr r1, [sp] - adds r0, r1, r0 - asrs r0, r0, #4 - mov r2, r8 - ands r0, r2 - movs r1, #1 - ldrsb r1, [r5, r1] - ldr r2, [sp, #4] - adds r1, r2, r1 - asrs r1, r1, #4 - mov r2, r8 - ands r1, r2 - lsls r1, r1, #6 - orrs r0, r1 - mov r1, sl - bl sub_08025AB8 - movs r0, #0x21 - movs r1, #2 - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _08025BB4 - movs r2, #0 - ldrsb r2, [r5, r2] - lsls r2, r2, #0x10 - movs r3, #1 - ldrsb r3, [r5, r3] - lsls r3, r3, #0x10 - adds r0, r6, #0 - adds r1, r4, #0 - bl PositionRelative - ldrh r1, [r4, #0x2e] - mov r0, sb - ands r0, r1 - adds r0, #8 - strh r0, [r4, #0x2e] - ldrh r1, [r4, #0x32] - mov r0, sb - ands r0, r1 - adds r0, #8 - strh r0, [r4, #0x32] - ldr r0, _08025BD0 @ =0x0000FFFF - strh r0, [r4, #0x36] -_08025BB4: - adds r7, #1 - adds r5, #2 - cmp r7, #8 - bls _08025B52 - add sp, #8 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08025BC8: .4byte gRoomControls -_08025BCC: .4byte gUnk_080CC0A8 -_08025BD0: .4byte 0x0000FFFF - - thumb_func_start sub_08025BD4 -sub_08025BD4: @ 0x08025BD4 - push {r4, r5, lr} - adds r5, r0, #0 - adds r0, #0x82 - ldrb r0, [r0] - cmp r0, #0 - beq _08025C22 - adds r0, r5, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - bne _08025C22 - movs r0, #0x21 - movs r1, #0 - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _08025C22 - ldr r3, _08025C24 @ =gUnk_080CC0BA - ldrb r0, [r5, #0x14] - lsls r0, r0, #1 - adds r1, r0, r3 - movs r2, #0 - ldrsb r2, [r1, r2] - lsls r2, r2, #0x10 - adds r0, #1 - adds r0, r0, r3 - movs r3, #0 - ldrsb r3, [r0, r3] - lsls r3, r3, #0x10 - adds r0, r5, #0 - adds r1, r4, #0 - bl PositionRelative - ldr r0, _08025C28 @ =0x0000FFF6 - strh r0, [r4, #0x36] -_08025C22: - pop {r4, r5, pc} - .align 2, 0 -_08025C24: .4byte gUnk_080CC0BA -_08025C28: .4byte 0x0000FFF6 - - thumb_func_start sub_08025C2C -sub_08025C2C: @ 0x08025C2C - push {lr} - movs r2, #0 - movs r1, #8 - strb r1, [r0, #0xc] - adds r1, r0, #0 - adds r1, #0x80 - strb r2, [r1] - movs r1, #8 - bl InitializeAnimation - pop {pc} - .align 2, 0 - - thumb_func_start sub_08025C44 -sub_08025C44: @ 0x08025C44 - push {lr} - adds r2, r0, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _08025C58 - movs r0, #0 - b _08025C5E -_08025C58: - adds r0, r2, #0 - bl ProcessMovement -_08025C5E: - pop {pc} - - thumb_func_start sub_08025C60 -sub_08025C60: @ 0x08025C60 - push {r4, lr} - adds r4, r0, #0 - bl sub_08049FA0 - cmp r0, #0 - bne _08025C80 - bl Random - movs r1, #1 - ands r1, r0 - cmp r1, #0 - beq _08025C80 - adds r0, r4, #0 - bl sub_08049EE4 - b _08025C98 -_08025C80: - bl Random - ldr r2, _08025C9C @ =gUnk_080CC0C2 - movs r1, #7 - ands r1, r0 - adds r1, r1, r2 - movs r0, #0 - ldrsb r0, [r1, r0] - ldrb r4, [r4, #0x15] - adds r0, r0, r4 - movs r1, #0x1f - ands r0, r1 -_08025C98: - pop {r4, pc} - .align 2, 0 -_08025C9C: .4byte gUnk_080CC0C2 diff --git a/data/animations/puffstool.s b/data/animations/puffstool.s new file mode 100644 index 00000000..f525cb04 --- /dev/null +++ b/data/animations/puffstool.s @@ -0,0 +1,34 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .section .rodata + +gUnk_080CC0CA:: @ 080CC0CA + .incbin "baserom.gba", 0x0CC0CA, 0x0000041 + +gUnk_080CC10B:: @ 080CC10B + .incbin "baserom.gba", 0x0CC10B, 0x000000D + +gUnk_080CC118:: @ 080CC118 + .incbin "baserom.gba", 0x0CC118, 0x0000009 + +gUnk_080CC121:: @ 080CC121 + .incbin "baserom.gba", 0x0CC121, 0x0000010 + +gUnk_080CC131:: @ 080CC131 + .incbin "baserom.gba", 0x0CC131, 0x000000D + +gUnk_080CC13E:: @ 080CC13E + .incbin "baserom.gba", 0x0CC13E, 0x000000D + +gUnk_080CC14B:: @ 080CC14B + .incbin "baserom.gba", 0x0CC14B, 0x000000D + +gUnk_080CC158:: @ 080CC158 + .incbin "baserom.gba", 0x0CC158, 0x000000D + +gUnk_080CC165:: @ 080CC165 + .incbin "baserom.gba", 0x0CC165, 0x000000F + +gUnk_080CC174:: @ 080CC174 + .incbin "baserom.gba", 0x0CC174, 0x0000028 diff --git a/data/data_080CBF9C.s b/data/data_080CBF9C.s index 03b6380d..d00c10c8 100644 --- a/data/data_080CBF9C.s +++ b/data/data_080CBF9C.s @@ -3,87 +3,6 @@ .section .rodata -gUnk_080CBF9C:: @ 080CBF9C - .incbin "baserom.gba", 0x0CBF9C, 0x0000018 - -gUnk_080CBFB4:: @ 080CBFB4 - .incbin "baserom.gba", 0x0CBFB4, 0x0000034 - -gUnk_080CBFE8:: @ 080CBFE8 - .incbin "baserom.gba", 0x0CBFE8, 0x0000004 - -gUnk_080CBFEC:: @ 080CBFEC - .incbin "baserom.gba", 0x0CBFEC, 0x000000C - -gUnk_080CBFF8:: @ 080CBFF8 - .incbin "baserom.gba", 0x0CBFF8, 0x0000008 - -gUnk_080CC000:: @ 080CC000 - .incbin "baserom.gba", 0x0CC000, 0x0000020 - -gUnk_080CC020:: @ 080CC020 - .incbin "baserom.gba", 0x0CC020, 0x0000030 - -gUnk_080CC050:: @ 080CC050 - .incbin "baserom.gba", 0x0CC050, 0x0000008 - -gUnk_080CC058:: @ 080CC058 - .incbin "baserom.gba", 0x0CC058, 0x000000B - -gUnk_080CC063:: @ 080CC063 - .incbin "baserom.gba", 0x0CC063, 0x0000011 - -gUnk_080CC074:: @ 080CC074 - .incbin "baserom.gba", 0x0CC074, 0x0000011 - -gUnk_080CC085:: @ 080CC085 - .incbin "baserom.gba", 0x0CC085, 0x000000B - -gUnk_080CC090:: @ 080CC090 - .incbin "baserom.gba", 0x0CC090, 0x0000010 - -gUnk_080CC0A0:: @ 080CC0A0 - .incbin "baserom.gba", 0x0CC0A0, 0x0000008 - -gUnk_080CC0A8:: @ 080CC0A8 - .incbin "baserom.gba", 0x0CC0A8, 0x0000012 - -gUnk_080CC0BA:: @ 080CC0BA - .incbin "baserom.gba", 0x0CC0BA, 0x0000008 - -gUnk_080CC0C2:: @ 080CC0C2 - .incbin "baserom.gba", 0x0CC0C2, 0x0000008 - -gUnk_080CC0CA:: @ 080CC0CA - .incbin "baserom.gba", 0x0CC0CA, 0x0000041 - -gUnk_080CC10B:: @ 080CC10B - .incbin "baserom.gba", 0x0CC10B, 0x000000D - -gUnk_080CC118:: @ 080CC118 - .incbin "baserom.gba", 0x0CC118, 0x0000009 - -gUnk_080CC121:: @ 080CC121 - .incbin "baserom.gba", 0x0CC121, 0x0000010 - -gUnk_080CC131:: @ 080CC131 - .incbin "baserom.gba", 0x0CC131, 0x000000D - -gUnk_080CC13E:: @ 080CC13E - .incbin "baserom.gba", 0x0CC13E, 0x000000D - -gUnk_080CC14B:: @ 080CC14B - .incbin "baserom.gba", 0x0CC14B, 0x000000D - -gUnk_080CC158:: @ 080CC158 - .incbin "baserom.gba", 0x0CC158, 0x000000D - -gUnk_080CC165:: @ 080CC165 - .incbin "baserom.gba", 0x0CC165, 0x000000F - -gUnk_080CC174:: @ 080CC174 - .incbin "baserom.gba", 0x0CC174, 0x0000028 - gUnk_080CC19C:: @ 080CC19C .incbin "baserom.gba", 0x0CC19C, 0x0000014 diff --git a/linker.ld b/linker.ld index 48b0cd46..9bf5dc10 100644 --- a/linker.ld +++ b/linker.ld @@ -343,7 +343,7 @@ SECTIONS { src/enemy/moldworm.o(.text); src/enemy/sluggula.o(.text); src/enemy/pesto.o(.text); - asm/puffstool.o(.text); + src/enemy/puffstool.o(.text); asm/chuchuBoss.o(.text); asm/likeLike.o(.text); asm/spearMoblin.o(.text); @@ -938,6 +938,8 @@ SECTIONS { data/animations/sluggula.o(.rodata); src/enemy/pesto.o(.rodata); data/animations/pesto.o(.rodata); + src/enemy/puffstool.o(.rodata); + data/animations/puffstool.o(.rodata); data/data_080CBF9C.o(.rodata); src/enemy.o(.rodata); data/data_080D3D94.o(.rodata); diff --git a/src/enemy/puffstool.c b/src/enemy/puffstool.c new file mode 100644 index 00000000..0c1d563a --- /dev/null +++ b/src/enemy/puffstool.c @@ -0,0 +1,724 @@ +#include "enemy.h" +#include "entity.h" +#include "functions.h" + +extern u32 sub_080002E0(u32, u32); +extern u32 sub_080002C8(u16, u8); +extern u16 sub_080002A8(u32, u32, u32); +extern u16 sub_080002D4(u32, u32, u32); +extern void sub_0804AA1C(Entity*); +extern Entity* sub_08049DF4(u32); +extern void sub_0807B7D8(u32, u32, u32); + +extern u8 gUnk_080B37A0[]; +extern u8 gUnk_080B3E80[]; + +bool32 sub_080258C4(Entity*); +void sub_08025B18(Entity*); +void sub_08025C2C(Entity*); +void sub_08025BD4(Entity*); +void sub_080256B4(Entity*); +bool32 sub_08025C44(Entity*); +u32 sub_08025C60(Entity*); +bool32 sub_0802571C(Entity*); +void sub_08025A54(Entity*); +void sub_08025AE8(Entity*); +bool32 sub_0802594C(Entity*, u32); +bool32 sub_080257EC(Entity*, u32, u32); +bool32 sub_08025AB8(u32, u32); + +extern void (*const gUnk_080CBF9C[])(Entity*); +extern void (*const gUnk_080CBFB4[])(Entity*); +extern const u8 gUnk_080CBFE8[]; +extern void (*const gUnk_080CBFEC[])(Entity*); +extern const u8 gUnk_080CBFF8[]; +extern const u16 gUnk_080CC000[]; +extern const s8 gUnk_080CC020[]; +extern const u8 gUnk_080CC050[]; +extern const s8* const gUnk_080CC090[]; +extern const s8 gUnk_080CC0A0[]; +extern const s8 gUnk_080CC0A8[]; +extern const s8 gUnk_080CC0BA[]; +extern const s8 gUnk_080CC0C2[]; + +void Puffstool(Entity* this) { + EnemyFunctionHandler(this, gUnk_080CBF9C); + SetChildOffset(this, 0, 1, -0x10); +} + +void sub_08025008(Entity* this) { + gUnk_080CBFB4[this->action](this); +} + +void sub_08025020(Entity* this) { + u8 tmp; + + switch (this->bitfield & 0x7f) { + case 0 ... 3: + /* ... */ + break; + case 0x1b: + sub_0804AA1C(this); + + tmp = gUnk_080CBFE8[(*(Entity**)&this->field_0x4c)->entityType.form]; + if (tmp < this->field_0x82.HALF.LO) { + this->field_0x82.HALF.LO -= gUnk_080CBFE8[(*(Entity**)&this->field_0x4c)->entityType.form]; + } else { + this->cutsceneBeh.HWORD = 0x294; + this->damageType = 0x83; + this->field_0x82.HALF.LO = 0; + sub_0801D2B4(this, 0x7c); + } + this->action = 7; + this->actionDelay = 0x3c; + if (0 < this->field_0x20) { + this->field_0x20 = 0; + } + this->hurtBlinkTime = -0xc; + this->field_0x42 = 0; + if (this->field_0x80.HALF.LO == 0) { + this->animationState = (*(Entity**)&this->field_0x4c)->direction >> 3; + InitializeAnimation(this, this->animationState + 4); + this->frameDuration = 6; + this->field_0x80.HALF.LO = 1; + } + break; + default: + if (this->damageType == 0x82 && this->hurtBlinkTime < 0) { + Entity* ent = CreateObject(0x21, 2, 0); + if (ent != NULL) { + ent->spritePriority.b0 = 3; + CopyPosition(this, ent); + } + EnqueueSFX(0x186); + } + break; + } + + sub_0804AA30(this, gUnk_080CBF9C); +} + +void sub_0802511C(Entity* this) { + if ((this->field_0x3a & 2) && this->actionDelay == 1 && this->field_0x82.HALF.LO) { + sub_08025B18(this); + } + sub_0804A7D4(this); +} + +void sub_0802514C(Entity* this) { + sub_08003FC4(this, 0x2000); + if (sub_0806F520(this)) { + gUnk_080CBFEC[this->previousActionFlag](this); + } else { + sub_08025C2C(this); + } +} + +void sub_08025180(Entity* this) { + this->previousActionFlag = 1; + this->actionDelay = Random(); + this->animationState = (((*(Entity**)&this->field_0x4c)->direction ^ 0x10) >> 3); + InitializeAnimation(this, this->animationState + 4); + sub_0804AA1C(this); +} + +void sub_080251AC(Entity* this) { + if (this->field_0x82.HALF.LO >= 4) { + this->field_0x82.HALF.LO -= 3; + if ((--this->actionDelay & 3) == 0) { + sub_08025BD4(this); + } + } else { + this->cutsceneBeh.HWORD = 0x294; + this->damageType = 0x83; + this->field_0x82.HALF.LO = 0; + sub_0801D2B4(this, 0x7c); + } + GetNextFrame(this); +} + +void sub_080251FC(Entity* this) { + sub_0804A720(this); + this->field_0x82.HALF.LO = 240; + this->direction = Random() & 0x1c; + this->field_0x80.HALF.LO = 0; + sub_080256B4(this); + InitializeAnimation(this, 0); +} + +void sub_08025230(Entity* this) { + if (this->field_0x80.HALF.HI) + this->field_0x80.HALF.HI--; + + sub_08025C44(this); + GetNextFrame(this); + if (--this->actionDelay == 0) { + this->actionDelay = (Random() & 3) + 4; + this->direction = sub_08025C60(this); + } + + if (this->collisions != 0) { + if (--this->field_0xf == 0) { + sub_0800417E(this, this->collisions); + } + } else { + this->field_0xf = 30; + } + + if (this->field_0x78.HWORD == 0) { + if (sub_0802571C(this)) { + this->action = 2; + this->actionDelay = 240; + this->field_0x86 = COORD_TO_TILE(this); + } + } else { + this->field_0x78.HWORD--; + } +} + +void sub_080252E0(Entity* this) { + u32 tile; + + this->direction = + sub_080045D4(this->x.HALF.HI, this->y.HALF.HI, (u16)this->field_0x7c.HALF.LO, (u16)this->field_0x7c.HALF.HI); + + sub_08025C44(this); + GetNextFrame(this); + + tile = COORD_TO_TILE(this); + if (tile == this->field_0x86) { + if (--this->actionDelay == 0) { + sub_080256B4(this); + } + } else { + this->field_0x86 = tile; + this->actionDelay = 240; + } + + if (this->x.HALF.HI == (u16)this->field_0x7c.HALF.LO && this->y.HALF.HI == (u16)this->field_0x7c.HALF.HI) { + this->action = 3; + this->actionDelay = 0x1e; + this->field_0xf = 0; + this->field_0x20 = 0x18000; + InitializeAnimation(this, 1); + } +} + +void sub_0802538C(Entity* this) { + if (this->actionDelay) { + this->actionDelay--; + } else { + if (this->frames.all == 0) { + GetNextFrame(this); + } else { + sub_08003FC4(this, 0x2000); + if (this->field_0x20 < 0x2000) { + this->action = 4; + InitializeAnimation(this, 2); + } + } + } +} + +void sub_080253D4(Entity* this) { + GetNextFrame(this); + if (!sub_08003FC4(this, 0x2000)) { + if (this->field_0xf == 0) { + this->action = 5; + InitializeAnimation(this, 3); + } else { + this->action = 6; + this->actionDelay = 0x1e; + InitializeAnimation(this, 3); + sub_08025A54(this); + sub_08025AE8(this); + } + } +} + +void sub_0802541C(Entity* this) { + GetNextFrame(this); + if (this->frames.all & 0x80) { + this->action = 3; + this->field_0xf = 1; + this->field_0x20 = 0x20000; + InitializeAnimation(this, 1); + } +} + +void sub_0802544C(Entity* this) { + if (this->frames.all == 0) { + GetNextFrame(this); + } else { + if (--this->actionDelay == 0) { + sub_080256B4(this); + InitializeAnimation(this, 0); + } + } +} + +void sub_0802547C(Entity* this) { + sub_08003FC4(this, 0x2000); + GetNextFrame(this); + if ((this->actionDelay & 7) == 0) { + sub_08025BD4(this); + } + + if (--this->actionDelay == 0) { + sub_08025C2C(this); + } +} + +void sub_080254B4(Entity* this) { + sub_08003FC4(this, 0x2000); + if (this->frames.all & 0x80) { + if (this->height.HALF.HI == 0) { + if (this->cutsceneBeh.HWORD == 0) { + this->damageType = 0x82; + this->field_0x82.HALF.LO = -0x10; + sub_080256B4(this); + } else { + this->action = 0xc; + sub_0804A9FC(this, 0x1c); + } + InitializeAnimation(this, 0); + } + } else { + GetNextFrame(this); + } +} + +void sub_08025514(Entity* this) { + GetNextFrame(this); + if (sub_0802594C(this, this->actionDelay++)) { + this->action = 2; + this->actionDelay = 240; + this->field_0x80.HALF.HI = 120; + } else if (3 < this->actionDelay) { + this->action = 10; + this->actionDelay = 0x20; + } +} + +void sub_08025554(Entity* this) { + Entity* ent = sub_08049DF4(1); + if (ent == NULL) { + sub_080256B4(this); + } else { + if ((this->actionDelay & 3) == 0) { + this->direction = GetFacingDirection(ent, this); + } + sub_08025C44(this); + GetNextFrame(this); + if (this->actionDelay != 0) { + this->actionDelay--; + } else { + if (!sub_080258C4(this)) { + sub_080256B4(this); + } + } + } +} + +void sub_080255AC(Entity* this) { + Entity* ent = sub_08049DF4(1); + if (ent == NULL) { + sub_080256B4(this); + } else { + if (this->field_0x80.HALF.HI != 0) { + this->field_0x80.HALF.HI--; + } + + if (--this->actionDelay == 0) { + s32 tmp; + + this->actionDelay = (Random() & 3) + 4; + + tmp = Random() & 0xf; + if (tmp < 8) { + tmp -= 1; + } + tmp -= 7; + + this->direction = (GetFacingDirection(ent, this) + tmp) & 0x1f; + } + + if (this->field_0x78.HWORD == 0) { + if (sub_080258C4(this) == 0) { + sub_080256B4(this); + } + } else { + this->field_0x78.HWORD--; + } + sub_08025C44(this); + GetNextFrame(this); + } +} + +void sub_0802563C(Entity* this) { + GetNextFrame(this); + + if (--this->cutsceneBeh.HWORD == 0) { + sub_0801D2B4(this, 0x28); + this->damageType = 0x82; + this->field_0x82.HALF.LO = 240; + sub_080256B4(this); + sub_0804AA1C(this); + } else if (this->cutsceneBeh.HWORD < 120) { + u32 tmp3 = gUnk_080CBFF8[this->cutsceneBeh.HWORD >> 4]; + if ((this->cutsceneBeh.HWORD & tmp3) == 0) { + if (this->cutsceneBeh.HWORD & (tmp3 + 1)) { + sub_0801D2B4(this, 124); + } else { + sub_0801D2B4(this, 40); + } + } + } +} + +void sub_080256B4(Entity* this) { + this->action = 1; + this->actionDelay = (Random() & 3) + 4; + this->field_0xf = 0x1e; + this->direction = (this->direction + 7 + ((s32)Random() % 7) * 4) & 0x1c; + this->field_0x78.HWORD = gUnk_080CC000[Random() & 0xf]; + this->field_0x7a.HALF.LO = ((s32)Random() % 0x18) << 1; + this->field_0x7a.HALF.HI = 0; +} + +bool32 sub_0802571C(Entity* this) { + RoomControls* ctrl = &gRoomControls; + u16 xDiff = (this->x.HALF.HI - ctrl->roomOriginX + 8) & -0x10; + u16 yDiff = (this->y.HALF.HI - ctrl->roomOriginY + 8) & -0x10; + u16 unk = this->field_0x7a.HALF.LO; + u16 i; + + for (i = 0; i < 4; i++) { + u16 sVar3 = xDiff + gUnk_080CC020[unk + 0]; + u16 sVar4 = yDiff + gUnk_080CC020[unk + 1]; + + if (sub_080257EC(this, sVar3, sVar4)) { + this->field_0x7c.HALF.LO = sVar3 + ctrl->roomOriginX; + this->field_0x7c.HALF.HI = sVar4 + ctrl->roomOriginY; + return TRUE; + } + + unk += 2; + if (0x2f < unk) { + unk = 0; + } + } + + this->field_0x7a.HALF.LO = unk; + this->field_0x7a.HALF.HI++; + return FALSE; +} + +bool32 sub_080257EC(Entity* this, u32 x, u32 y) { + u16 tmp; + + tmp = sub_080002A8(x - 0x00, y - 0x00, this->collisionLayer); + if (tmp != 0x312 && gUnk_080B37A0[tmp] != 0x16 && gUnk_080B3E80[tmp] == 0) { + return TRUE; + } + + tmp = sub_080002A8(x - 0x10, y - 0x00, this->collisionLayer); + if (tmp != 0x312 && gUnk_080B37A0[tmp] != 0x16 && gUnk_080B3E80[tmp] == 0) { + return TRUE; + } + + tmp = sub_080002A8(x - 0x00, y - 0x10, this->collisionLayer); + if (tmp != 0x312 && gUnk_080B37A0[tmp] != 0x16 && gUnk_080B3E80[tmp] == 0) { + return TRUE; + } + + tmp = sub_080002A8(x - 0x10, y - 0x10, this->collisionLayer); + if (tmp != 0x312 && gUnk_080B37A0[tmp] != 0x16 && gUnk_080B3E80[tmp] == 0) { + return TRUE; + } + + return FALSE; +} + +#if NON_MATCHING +bool32 sub_080258C4(Entity* this) { + Entity* ent = sub_08049DF4(1); + if (ent == NULL) { + return FALSE; + } else { + s32 iVar4 = (ent->x.HALF.HI - this->x.HALF.HI) * (ent->x.HALF.HI - this->x.HALF.HI); + s32 iVar1 = (ent->y.HALF.HI - this->y.HALF.HI) * (ent->y.HALF.HI - this->y.HALF.HI); + iVar4 = iVar4 + iVar1; + if (this->cutsceneBeh.HWORD == 0 && this->field_0x80.HALF.HI == 0 && 0x400 >= iVar4) { + this->action = 9; + this->actionDelay = 0; + return TRUE; + } else if (0x900 >= iVar4) { + this->action = 11; + this->actionDelay = 1; + this->field_0x78.HWORD = gUnk_080CC050[Random() & 0xf]; + return TRUE; + } else { + return FALSE; + } + } +} +#else +NAKED +bool32 sub_080258C4(Entity* this) { + asm(".include \"asm/non_matching/puffstool/sub_080258C4.inc\""); +} +#endif + +#if NON_MATCHING +bool32 sub_0802594C(Entity* this, u32 param_2) { + const s8* unk = gUnk_080CC090[param_2]; + u32 uVar1 = this->collisionLayer; + RoomControls* ctrl = &gRoomControls; + u16 xDiff = (this->x.HALF.HI - ctrl->roomOriginX + 8) & -0x10; + u16 yDiff = (this->y.HALF.HI - ctrl->roomOriginY + 8) & -0x10; + do { + u16 iVar9 = xDiff + unk[0]; + u16 iVar11 = yDiff + unk[1]; + u32 bVar4 = sub_080002D4(iVar9 - 0x00, iVar11 - 0x00, uVar1); + u32 bVar5 = sub_080002D4(iVar9 - 0x10, iVar11 - 0x00, uVar1); + u32 bVar6 = sub_080002D4(iVar9 - 0x00, iVar11 - 0x10, uVar1); + u32 bVar7 = sub_080002D4(iVar9 - 0x10, iVar11 - 0x10, uVar1); + if ((bVar6 | bVar4 | bVar5 | bVar7) == 0) { + this->field_0x7c.HALF.LO = ctrl->roomOriginX + iVar9; + this->field_0x7c.HALF.HI = ctrl->roomOriginY + iVar11; + return TRUE; + } + unk += 2; + } while (unk[0] != 0x7f); + + return 0; +} +#else +NAKED +bool32 sub_0802594C(Entity* this, u32 param_2) { + asm(".include \"asm/non_matching/puffstool/sub_0802594C.inc\""); +} +#endif + +void sub_08025A54(Entity* this) { + u32 layer = this->collisionLayer; + s16 x = this->x.HALF.HI - gRoomControls.roomOriginX; + s16 y = this->y.HALF.HI - gRoomControls.roomOriginY; + + const s8* offset = gUnk_080CC0A0; + u32 i = 0; + + for (; i < 4; i++, offset += 2) { + sub_08025AB8((((x + offset[0]) >> 4) & 0x3fU) | ((((y + offset[1]) >> 4) & 0x3fU) << 6), layer); + } +} + +bool32 sub_08025AB8(u32 tile, u32 layer) { + if (sub_080002E0(tile, layer)) + return FALSE; + + if (sub_080002C8(tile, layer) == 10) { + sub_0807B7D8(0x61, tile, layer); + return TRUE; + } + + return FALSE; +} + +void sub_08025AE8(Entity* this) { + Entity* ent; + + ent = CreateFx(this, 0x22, 0); + if (ent) { + ent->y.WORD--; + } + + ent = CreateFx(this, 0x23, 0); + if (ent) { + ent->y.WORD++; + } +} + +void sub_08025B18(Entity* this) { + Entity* ent; + + s32 x = this->x.HALF.HI - gRoomControls.roomOriginX; + s32 y = this->y.HALF.HI - gRoomControls.roomOriginY; + u32 layer = this->collisionLayer; + + const s8* offset = gUnk_080CC0A8; + u32 i = 0; + + for (; i < 9; i++, offset += 2) { + sub_08025AB8((((x + offset[0]) >> 4) & 0x3fU) | ((((y + offset[1]) >> 4) & 0x3fU) << 6), layer); + + ent = CreateObject(0x21, 2, 0); + if (ent) { + PositionRelative(this, ent, offset[0] * 0x10000, offset[1] * 0x10000); + ent->x.HALF.HI &= -0x10; + ent->x.HALF.HI += 8; + ent->y.HALF.HI &= -0x10; + ent->y.HALF.HI += 8; + ent->height.HALF.HI = -1; + } + } +} + +void sub_08025BD4(Entity* this) { + if (this->field_0x82.HALF.LO && (this->frames.all & 1) == 0) { + Entity* ent = CreateObject(0x21, 0, 0); + if (ent) { + PositionRelative(this, ent, gUnk_080CC0BA[this->animationState * 2 + 0] * 0x10000, + gUnk_080CC0BA[this->animationState * 2 + 1] * 0x10000); + ent->height.HALF.HI = -10; + } + } +} + +void sub_08025C2C(Entity* this) { + this->action = 8; + this->field_0x80.HALF.LO = 0; + InitializeAnimation(this, 8); +} + +bool32 sub_08025C44(Entity* this) { + if ((this->frames.all & 1) == 0) { + return ProcessMovement(this); + } else { + return FALSE; + } +} + +u32 sub_08025C60(Entity* this) { + if (!sub_08049FA0(this) && (Random() & 1)) { + return sub_08049EE4(this); + } + + return (gUnk_080CC0C2[Random() & 7] + this->direction) & 0x1f; +} + +// clang-format off +void (*const gUnk_080CBF9C[])(Entity*) = { + sub_08025008, + sub_08025020, + sub_08001324, + sub_0802511C, + sub_08001242, + sub_0802514C, +}; + +void (*const gUnk_080CBFB4[])(Entity*) = { + sub_080251FC, + sub_08025230, + sub_080252E0, + sub_0802538C, + sub_080253D4, + sub_0802541C, + sub_0802544C, + sub_0802547C, + sub_080254B4, + sub_08025514, + sub_08025554, + sub_080255AC, + sub_0802563C, +}; + +const u8 gUnk_080CBFE8[] = { + 40, 120, 240, 0x0 +}; + +void (*const gUnk_080CBFEC[])(Entity*) = { + sub_08025180, + sub_080251AC, + sub_080251AC, +}; + +const u8 gUnk_080CBFF8[] = { + 1, 1, 1, 3, 3, 3, 7, 7, +}; + +const u16 gUnk_080CC000[] = { + 30, 30, 90, 90, + 180, 180, 180, 180, + 180, 240, 240, 240, + 240, 240, 300, 300, +}; + +const s8 gUnk_080CC020[] = { + -0x20, -0x20, -0x20, -0x10, + -0x20, 0x00, -0x20, 0x10, + -0x20, 0x20, -0x10, -0x20, + -0x10, -0x10, -0x10, 0x00, + -0x10, 0x10, -0x10, 0x20, + 0x00, -0x20, 0x00, -0x10, + 0x00, 0x10, 0x00, 0x20, + 0x10, -0x20, 0x10, -0x10, + 0x10, 0x00, 0x10, 0x10, + 0x10, 0x20, 0x20, -0x20, + 0x20, -0x10, 0x20, 0x00, + 0x20, 0x10, 0x20, 0x20, +}; + +const u8 gUnk_080CC050[] = { + 90, 120, 120, 90, + 180, 180, 180, 180, +}; + +const s8 gUnk_080CC058[] = { + 0x00, 0x00, 0x00, 0xF0, + 0xF0, 0x00, 0x10, 0x00, + 0x00, 0x10, 0x7F, +}; + +const s8 gUnk_080CC063[] = { + 0x00, 0x20, 0x10, 0x10, + 0x20, 0x00, 0x10, 0xF0, + 0x00, 0xE0, 0xF0, 0xF0, + 0xE0, 0x00, 0xF0, 0x10, + 0x7F, +}; + +const s8 gUnk_080CC074[] = { + 0xE0, 0xF0, 0xF0, 0xE0, + 0x10, 0xE0, 0x20, 0xF0, + 0x20, 0x10, 0x10, 0x20, + 0xF0, 0x20, 0xE0, 0x10, + 0x7F, +}; + +const s8 gUnk_080CC085[] = { + 0x20, 0x20, 0x20, 0xE0, + 0xE0, 0xFE, 0xE0, 0x20, + 0x7F, +}; + +const s8 *const gUnk_080CC090[] = { + gUnk_080CC058, + gUnk_080CC063, + gUnk_080CC074, + gUnk_080CC085, +}; + +const s8 gUnk_080CC0A0[] = { + -0x8, -0x8, -0x8, 0x8, + 0x8, -0x8, 0x8, 0x8, +}; + +const s8 gUnk_080CC0A8[] = { + 0xF0, 0xF0, 0x00, 0xF0, + 0x10, 0xF0, 0xF0, 0x00, + 0x00, 0x00, 0x10, 0x00, + 0xF0, 0x10, 0x00, 0x10, + 0x10, 0x10, +}; + +const s8 gUnk_080CC0BA[] = { + 0x00, 0xF0, 0x13, 0x00, + 0x00, 0x14, 0xED, 0x00, +}; + +const s8 gUnk_080CC0C2[] = { + 0xFF, 0x01, 0xFE, 0x02, 0xFD, 0x03, 0xFC, 0x04, +}; +// clang-format on