diff --git a/asm/object/beanstalk.s b/asm/object/beanstalk.s deleted file mode 100644 index 6f25ea98..00000000 --- a/asm/object/beanstalk.s +++ /dev/null @@ -1,1183 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Beanstalk -Beanstalk: @ 0x08089D04 - push {lr} - ldr r2, _08089D18 @ =gUnk_08120DF4 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08089D18: .4byte gUnk_08120DF4 - - thumb_func_start sub_08089D1C -sub_08089D1C: @ 0x08089D1C -.ifdef EU - push {r4, r5, r6, lr} - adds r5, r0, #0 - ldrb r1, [r5, #0x19] - movs r4, #0x3f - adds r0, r4, #0 - ands r0, r1 - movs r6, #0x80 - orrs r0, r6 - strb r0, [r5, #0x19] - ldrb r1, [r5, #0x1b] - adds r0, r4, #0 - ands r0, r1 - movs r1, #0x40 - orrs r0, r1 - strb r0, [r5, #0x1b] - adds r0, r5, #0 - movs r1, #4 - bl SetDefaultPriority - ldrb r0, [r5, #0xa] - cmp r0, #7 - bne _08089688 - ldrb r0, [r5, #0xb] - cmp r0, #0 - bne _0808966C - ldrb r0, [r5, #0xe] - cmp r0, #0 - beq _0808966C - bl CheckLocalFlag - cmp r0, #0 - bne _08089662 - b _080897FE -_08089662: - ldrb r1, [r5, #0x1b] - adds r0, r4, #0 - ands r0, r1 - orrs r0, r6 - strb r0, [r5, #0x1b] -_0808966C: - ldr r4, _08089684 @ =gUnk_08120E3C - ldrb r0, [r5, #0xb] - lsls r0, r0, #2 - adds r0, r0, r4 - ldrb r1, [r0] - adds r0, r5, #0 - bl InitializeAnimation - ldrb r0, [r5, #0xb] - lsls r0, r0, #2 - adds r0, r0, r4 - b _080896C6 - .align 2, 0 -_08089684: .4byte gUnk_08120E3C -_08089688: - cmp r0, #0 - beq _080896A4 - ldr r0, _080896A0 @ =gUnk_08120E14 - ldrb r1, [r5, #0xa] - lsls r1, r1, #2 - adds r1, r1, r0 - ldrb r1, [r1] - adds r0, r5, #0 - bl InitializeAnimation - b _080896BE - .align 2, 0 -_080896A0: .4byte gUnk_08120E14 -_080896A4: - adds r0, r5, #0 - movs r1, #1 - movs r2, #2 - bl LoadSwapGFX - ldr r0, _08089700 @ =gUnk_08120E14 - ldrb r1, [r5, #0xa] - lsls r1, r1, #2 - adds r1, r1, r0 - ldrb r1, [r1] - adds r0, r5, #0 - bl InitAnimationForceUpdate -_080896BE: - ldr r1, _08089700 @ =gUnk_08120E14 - ldrb r0, [r5, #0xa] - lsls r0, r0, #2 - adds r0, r0, r1 -_080896C6: - ldrb r0, [r0, #1] - adds r3, r5, #0 - adds r3, #0x29 - movs r1, #7 - ands r1, r0 - ldrb r2, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - movs r2, #1 - movs r0, #1 - strb r0, [r5, #0xc] - ldrb r1, [r5, #0x18] - subs r0, #5 - ands r0, r1 - orrs r0, r2 - strb r0, [r5, #0x18] - ldrb r0, [r5, #0xa] - cmp r0, #1 - bge _080896F4 - b _080897F8 -_080896F4: - cmp r0, #6 - ble _08089704 - cmp r0, #7 - beq _08089714 - b _080897F8 - .align 2, 0 -_08089700: .4byte gUnk_08120E14 -_08089704: - adds r0, r5, #0 - adds r0, #0x60 - movs r2, #0 - movs r1, #0xe0 - lsls r1, r1, #1 - strh r1, [r0] - strb r2, [r5, #0xe] - b _080897F8 -_08089714: - ldrb r1, [r5, #0xb] - cmp r1, #3 - bgt _08089724 - cmp r1, #2 - bge _080897E4 - cmp r1, #0 - beq _0808972A - b _080897F8 -_08089724: - cmp r1, #4 - beq _080897F0 - b _080897F8 -_0808972A: - movs r0, #0x10 - str r0, [r5, #0x6c] - strb r1, [r5, #0xe] -_08089730: - movs r0, #0x2c - movs r1, #7 - movs r2, #1 - bl CreateObject - adds r1, r0, #0 - str r1, [r5, #0x54] - cmp r1, #0 - beq _080897C0 - ldrh r0, [r5, #0x2e] - strh r0, [r1, #0x2e] - ldr r2, [r5, #0x54] - ldr r1, [r5, #0x6c] - ldrh r0, [r5, #0x32] - subs r0, r0, r1 - strh r0, [r2, #0x32] - movs r0, #3 - strb r0, [r5, #0xf] -_08089754: - ldrb r0, [r5, #0xe] - lsls r0, r0, #2 - ldr r1, _080897DC @ =gUnk_08120DFC - adds r4, r0, r1 - ldrb r2, [r4] - subs r2, #2 - movs r0, #0x2c - movs r1, #7 - bl CreateObject - adds r1, r0, #0 - str r1, [r5, #0x54] - cmp r1, #0 - beq _080897A2 - movs r0, #1 - ldrsb r0, [r4, r0] - ldrh r2, [r5, #0x2e] - adds r0, r0, r2 - strh r0, [r1, #0x2e] - ldr r2, [r5, #0x54] - ldr r1, [r5, #0x6c] - ldrh r0, [r5, #0x32] - subs r0, r0, r1 - movs r1, #2 - ldrsb r1, [r4, r1] - subs r0, r0, r1 - strh r0, [r2, #0x32] - ldr r3, [r5, #0x54] - ldrb r2, [r4, #3] - movs r0, #1 - ands r2, r0 - lsls r2, r2, #6 - ldrb r0, [r3, #0x18] - movs r4, #0x41 - rsbs r4, r4, #0 - adds r1, r4, #0 - ands r0, r1 - orrs r0, r2 - strb r0, [r3, #0x18] -_080897A2: - ldrb r0, [r5, #0xe] - adds r2, r0, #1 - strb r2, [r5, #0xe] - ldrb r0, [r5, #0xf] - subs r0, #1 - strb r0, [r5, #0xf] - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - bne _08089754 - lsls r0, r2, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #5 - bls _080897C0 - strb r1, [r5, #0xe] -_080897C0: - ldr r0, [r5, #0x6c] - adds r0, #0x38 - str r0, [r5, #0x6c] - ldrh r1, [r5, #0x32] - subs r1, r1, r0 - lsls r1, r1, #0x10 - asrs r1, r1, #0x10 - ldr r0, _080897E0 @ =gRoomControls - ldrh r0, [r0, #8] - cmp r1, r0 - bge _08089730 - movs r0, #1 - strb r0, [r5, #0xe] - b _080897F8 - .align 2, 0 -_080897DC: .4byte gUnk_08120DFC -_080897E0: .4byte gRoomControls -_080897E4: - ldrb r0, [r5, #0x19] - movs r1, #0x3f - ands r1, r0 - movs r0, #0x40 - orrs r1, r0 - strb r1, [r5, #0x19] -_080897F0: - adds r1, r5, #0 - adds r1, #0x38 - movs r0, #3 - strb r0, [r1] -_080897F8: - adds r0, r5, #0 - bl sub_08089F08 -_080897FE: - pop {r4, r5, r6, pc} -.else - push {r4, r5, r6, lr} - adds r5, r0, #0 - ldrb r1, [r5, #0x19] - movs r4, #0x3f - adds r0, r4, #0 - ands r0, r1 - movs r6, #0x80 - orrs r0, r6 - strb r0, [r5, #0x19] - ldrb r1, [r5, #0x1b] - adds r0, r4, #0 - ands r0, r1 - movs r1, #0x40 - orrs r0, r1 - strb r0, [r5, #0x1b] - adds r0, r5, #0 - movs r1, #4 - bl SetDefaultPriority - ldrb r0, [r5, #0xa] - cmp r0, #7 - bne _08089D90 - ldrb r1, [r5, #0x10] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - bne _08089D54 - b _08089F06 -_08089D54: - ldrb r0, [r5, #0xb] - cmp r0, #0 - bne _08089D74 - ldrb r0, [r5, #0xe] - cmp r0, #0 - beq _08089D74 - bl CheckLocalFlag - cmp r0, #0 - bne _08089D6A - b _08089F06 -_08089D6A: - ldrb r1, [r5, #0x1b] - adds r0, r4, #0 - ands r0, r1 - orrs r0, r6 - strb r0, [r5, #0x1b] -_08089D74: - ldr r4, _08089D8C @ =gUnk_08120E3C - ldrb r0, [r5, #0xb] - lsls r0, r0, #2 - adds r0, r0, r4 - ldrb r1, [r0] - adds r0, r5, #0 - bl InitializeAnimation - ldrb r0, [r5, #0xb] - lsls r0, r0, #2 - adds r0, r0, r4 - b _08089DCE - .align 2, 0 -_08089D8C: .4byte gUnk_08120E3C -_08089D90: - cmp r0, #0 - beq _08089DAC - ldr r0, _08089DA8 @ =gUnk_08120E14 - ldrb r1, [r5, #0xa] - lsls r1, r1, #2 - adds r1, r1, r0 - ldrb r1, [r1] - adds r0, r5, #0 - bl InitializeAnimation - b _08089DC6 - .align 2, 0 -_08089DA8: .4byte gUnk_08120E14 -_08089DAC: - adds r0, r5, #0 - movs r1, #1 - movs r2, #2 - bl LoadSwapGFX - ldr r0, _08089E08 @ =gUnk_08120E14 - ldrb r1, [r5, #0xa] - lsls r1, r1, #2 - adds r1, r1, r0 - ldrb r1, [r1] - adds r0, r5, #0 - bl InitAnimationForceUpdate -_08089DC6: - ldr r1, _08089E08 @ =gUnk_08120E14 - ldrb r0, [r5, #0xa] - lsls r0, r0, #2 - adds r0, r0, r1 -_08089DCE: - ldrb r0, [r0, #1] - adds r3, r5, #0 - adds r3, #0x29 - movs r1, #7 - ands r1, r0 - ldrb r2, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - movs r2, #1 - movs r0, #1 - strb r0, [r5, #0xc] - ldrb r1, [r5, #0x18] - subs r0, #5 - ands r0, r1 - orrs r0, r2 - strb r0, [r5, #0x18] - ldrb r0, [r5, #0xa] - cmp r0, #1 - bge _08089DFC - b _08089F00 -_08089DFC: - cmp r0, #6 - ble _08089E0C - cmp r0, #7 - beq _08089E1C - b _08089F00 - .align 2, 0 -_08089E08: .4byte gUnk_08120E14 -_08089E0C: - adds r0, r5, #0 - adds r0, #0x60 - movs r2, #0 - movs r1, #0xe0 - lsls r1, r1, #1 - strh r1, [r0] - strb r2, [r5, #0xe] - b _08089F00 -_08089E1C: - ldrb r1, [r5, #0xb] - cmp r1, #3 - bgt _08089E2C - cmp r1, #2 - bge _08089EEC - cmp r1, #0 - beq _08089E32 - b _08089F00 -_08089E2C: - cmp r1, #4 - beq _08089EF8 - b _08089F00 -_08089E32: - movs r0, #0x10 - str r0, [r5, #0x6c] - strb r1, [r5, #0xe] -_08089E38: - movs r0, #0x2c - movs r1, #7 - movs r2, #1 - bl CreateObject - adds r1, r0, #0 - str r1, [r5, #0x54] - cmp r1, #0 - beq _08089EC8 - ldrh r0, [r5, #0x2e] - strh r0, [r1, #0x2e] - ldr r2, [r5, #0x54] - ldr r1, [r5, #0x6c] - ldrh r0, [r5, #0x32] - subs r0, r0, r1 - strh r0, [r2, #0x32] - movs r0, #3 - strb r0, [r5, #0xf] -_08089E5C: - ldrb r0, [r5, #0xe] - lsls r0, r0, #2 - ldr r1, _08089EE4 @ =gUnk_08120DFC - adds r4, r0, r1 - ldrb r2, [r4] - subs r2, #2 - movs r0, #0x2c - movs r1, #7 - bl CreateObject - adds r1, r0, #0 - str r1, [r5, #0x54] - cmp r1, #0 - beq _08089EAA - movs r0, #1 - ldrsb r0, [r4, r0] - ldrh r2, [r5, #0x2e] - adds r0, r0, r2 - strh r0, [r1, #0x2e] - ldr r2, [r5, #0x54] - ldr r1, [r5, #0x6c] - ldrh r0, [r5, #0x32] - subs r0, r0, r1 - movs r1, #2 - ldrsb r1, [r4, r1] - subs r0, r0, r1 - strh r0, [r2, #0x32] - ldr r3, [r5, #0x54] - ldrb r2, [r4, #3] - movs r0, #1 - ands r2, r0 - lsls r2, r2, #6 - ldrb r0, [r3, #0x18] - movs r4, #0x41 - rsbs r4, r4, #0 - adds r1, r4, #0 - ands r0, r1 - orrs r0, r2 - strb r0, [r3, #0x18] -_08089EAA: - ldrb r0, [r5, #0xe] - adds r2, r0, #1 - strb r2, [r5, #0xe] - ldrb r0, [r5, #0xf] - subs r0, #1 - strb r0, [r5, #0xf] - lsls r0, r0, #0x18 - lsrs r1, r0, #0x18 - cmp r1, #0 - bne _08089E5C - lsls r0, r2, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #5 - bls _08089EC8 - strb r1, [r5, #0xe] -_08089EC8: - ldr r0, [r5, #0x6c] - adds r0, #0x38 - str r0, [r5, #0x6c] - ldrh r1, [r5, #0x32] - subs r1, r1, r0 - lsls r1, r1, #0x10 - asrs r1, r1, #0x10 - ldr r0, _08089EE8 @ =gRoomControls - ldrh r0, [r0, #8] - cmp r1, r0 - bge _08089E38 - movs r0, #1 - strb r0, [r5, #0xe] - b _08089F00 - .align 2, 0 -_08089EE4: .4byte gUnk_08120DFC -_08089EE8: .4byte gRoomControls -_08089EEC: - ldrb r0, [r5, #0x19] - movs r1, #0x3f - ands r1, r0 - movs r0, #0x40 - orrs r1, r0 - strb r1, [r5, #0x19] -_08089EF8: - adds r1, r5, #0 - adds r1, #0x38 - movs r0, #3 - strb r0, [r1] -_08089F00: - adds r0, r5, #0 - bl sub_08089F08 -_08089F06: - pop {r4, r5, r6, pc} -.endif - - thumb_func_start sub_08089F08 -sub_08089F08: @ 0x08089F08 - push {lr} - ldr r2, _08089F1C @ =gUnk_08120E50 - ldrb r1, [r0, #0xa] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08089F1C: .4byte gUnk_08120E50 - - thumb_func_start sub_08089F20 -sub_08089F20: @ 0x08089F20 - push {lr} - ldr r2, _08089F34 @ =gUnk_08120E78 - ldrb r1, [r0, #0xd] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08089F34: .4byte gUnk_08120E78 - - thumb_func_start sub_08089F38 -sub_08089F38: @ 0x08089F38 - push {r4, lr} - adds r4, r0, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08089F6C - ldrb r0, [r4, #0xe] - cmp r0, #1 - bhi _08089F5A - adds r0, #1 - strb r0, [r4, #0xe] - b _08089F6C -_08089F5A: - adds r0, r4, #0 - movs r1, #1 - bl InitAnimationForceUpdate - movs r0, #0x10 - strb r0, [r4, #0xe] - ldrb r0, [r4, #0xd] - adds r0, #1 - strb r0, [r4, #0xd] -_08089F6C: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08089F70 -sub_08089F70: @ 0x08089F70 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - bne _08089F8E - movs r0, #0x10 - strb r0, [r4, #0xe] - movs r0, #0xcc - lsls r0, r0, #1 - bl SoundReq -_08089F8E: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08089FEC - movs r0, #0x2c - movs r1, #1 - movs r2, #0 - bl CreateObject - adds r1, r0, #0 - str r1, [r4, #0x54] - cmp r1, #0 - beq _08089FBE - ldrh r0, [r4, #0x2e] - strh r0, [r1, #0x2e] - ldr r1, [r4, #0x54] - ldrh r0, [r4, #0x32] - strh r0, [r1, #0x32] -_08089FBE: - movs r0, #0x2c - movs r1, #2 - movs r2, #0 - bl CreateObject - adds r1, r0, #0 - str r1, [r4, #0x54] - cmp r1, #0 - beq _08089FDC - ldrh r0, [r4, #0x2e] - strh r0, [r1, #0x2e] - ldr r1, [r4, #0x54] - ldrh r0, [r4, #0x32] - subs r0, #0x10 - strh r0, [r1, #0x32] -_08089FDC: - ldrb r0, [r4, #0x18] - movs r1, #4 - rsbs r1, r1, #0 - ands r1, r0 - strb r1, [r4, #0x18] - ldrb r0, [r4, #0xd] - adds r0, #1 - strb r0, [r4, #0xd] -_08089FEC: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08089FF0 -sub_08089FF0: @ 0x08089FF0 - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xe] - subs r0, #1 - strb r0, [r1, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - bne _0808A00E - movs r0, #0x10 - strb r0, [r1, #0xe] - movs r0, #0xcc - lsls r0, r0, #1 - bl SoundReq -_0808A00E: - pop {pc} - - thumb_func_start sub_0808A010 -sub_0808A010: @ 0x0808A010 - push {r4, r5, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _0808A07E - ldrb r0, [r4, #0xe] - lsls r0, r0, #2 - ldr r1, _0808A0BC @ =gUnk_08120DFC - adds r5, r0, r1 - ldrb r1, [r5] - movs r0, #0x2c - movs r2, #0 - bl CreateObject - adds r1, r0, #0 - str r1, [r4, #0x54] - cmp r1, #0 - beq _0808A06C - movs r0, #1 - ldrsb r0, [r5, r0] - ldrh r2, [r4, #0x2e] - adds r0, r0, r2 - strh r0, [r1, #0x2e] - ldr r2, [r4, #0x54] - movs r1, #2 - ldrsb r1, [r5, r1] - ldrh r0, [r4, #0x32] - subs r0, r0, r1 - strh r0, [r2, #0x32] - ldr r3, [r4, #0x54] - ldrb r1, [r5, #3] - movs r0, #1 - ands r1, r0 - lsls r1, r1, #6 - ldrb r2, [r3, #0x18] - movs r0, #0x41 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, #0x18] -_0808A06C: - ldrb r0, [r4, #0xe] - adds r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #5 - bls _0808A07E - movs r0, #0 - strb r0, [r4, #0xe] -_0808A07E: - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0808A0BA - movs r0, #0x2c - movs r1, #3 - movs r2, #0 - bl CreateObject - adds r1, r0, #0 - str r1, [r4, #0x54] - cmp r1, #0 - beq _0808A0A8 - ldrh r0, [r4, #0x2e] - strh r0, [r1, #0x2e] - ldr r1, [r4, #0x54] - ldrh r0, [r4, #0x32] - strh r0, [r1, #0x32] -_0808A0A8: - ldrh r0, [r4, #0x32] - subs r0, #0x38 - strh r0, [r4, #0x32] - lsls r0, r0, #0x10 - cmp r0, #0 - bge _0808A0BA - adds r0, r4, #0 - bl DeleteEntity -_0808A0BA: - pop {r4, r5, pc} - .align 2, 0 -_0808A0BC: .4byte gUnk_08120DFC - - thumb_func_start sub_0808A0C0 -sub_0808A0C0: @ 0x0808A0C0 - push {lr} - adds r2, r0, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - bne _0808A0D6 - adds r0, r2, #0 - bl GetNextFrame -_0808A0D6: - pop {pc} - - thumb_func_start nullsub_517 -nullsub_517: @ 0x0808A0D8 - bx lr - .align 2, 0 - - thumb_func_start sub_0808A0DC -sub_0808A0DC: @ 0x0808A0DC - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r5, r0, #0 - ldrb r0, [r5, #0xb] - cmp r0, #1 - bne _0808A0EC - b _0808A202 -_0808A0EC: - cmp r0, #1 - bgt _0808A0F6 - cmp r0, #0 - beq _0808A120 - b _0808A202 -_0808A0F6: - cmp r0, #4 - ble _0808A0FC - b _0808A202 -_0808A0FC: - ldr r0, _0808A118 @ =gPlayerState - ldrb r0, [r0, #0x12] - cmp r0, #0x1e - bne _0808A1DA - ldr r1, _0808A11C @ =gPlayerEntity - adds r0, r5, #0 - movs r2, #0 - movs r3, #8 - bl EntityInRectRadius - cmp r0, #0 - beq _0808A1DC - b _0808A1B0 - .align 2, 0 -_0808A118: .4byte gPlayerState -_0808A11C: .4byte gPlayerEntity -_0808A120: - ldrb r0, [r5, #0xe] - cmp r0, #0 - beq _0808A202 - ldr r4, _0808A1A8 @ =gRoomControls - ldrh r0, [r4, #8] - str r0, [r5, #0x6c] - movs r2, #0x2e - ldrsh r1, [r5, r2] - ldrh r2, [r4, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r3, #0x3f - ands r1, r3 - ldrh r2, [r4, #8] - subs r0, r0, r2 - lsrs r0, r0, #4 - ands r0, r3 - lsls r0, r0, #6 - orrs r1, r0 - adds r0, r5, #0 - adds r0, #0x70 - strh r1, [r0] - adds r6, r4, #0 - mov r8, r3 - adds r4, r0, #0 - ldr r7, _0808A1AC @ =0x00004017 -_0808A154: - movs r0, #0x2e - ldrsh r1, [r5, r0] - ldrh r0, [r6, #6] - subs r1, r1, r0 - asrs r1, r1, #4 - mov r2, r8 - ands r1, r2 - ldrh r2, [r6, #8] - ldr r0, [r5, #0x6c] - subs r0, r0, r2 - lsrs r0, r0, #4 - mov r2, r8 - ands r0, r2 - lsls r0, r0, #6 - orrs r1, r0 - strh r1, [r4] - ldrh r1, [r4] - adds r0, r7, #0 - movs r2, #2 - bl SetTile - ldrh r1, [r4] - adds r0, r7, #0 - movs r2, #1 - bl SetTile - ldr r0, [r5, #0x6c] - adds r2, r0, #0 - adds r2, #0x10 - str r2, [r5, #0x6c] - ldrh r0, [r6, #8] - ldrh r1, [r6, #0x20] - adds r0, r0, r1 - cmp r2, r0 - bhs _0808A1A2 - movs r1, #0x32 - ldrsh r0, [r5, r1] - cmp r2, r0 - bls _0808A154 -_0808A1A2: - movs r0, #0 - strb r0, [r5, #0xe] - b _0808A202 - .align 2, 0 -_0808A1A8: .4byte gRoomControls -_0808A1AC: .4byte 0x00004017 -_0808A1B0: - adds r3, r5, #0 - adds r3, #0x58 - ldrb r2, [r3] - ldrb r1, [r5, #0xb] - subs r1, #1 - lsls r0, r1, #1 - adds r0, r0, r1 - adds r0, #1 - cmp r2, r0 - bne _0808A1DE - ldrb r0, [r5, #0xe] - cmp r0, #0 - bne _0808A1DE - movs r0, #1 - strb r0, [r5, #0xe] - ldrb r1, [r3] - adds r1, #1 - adds r0, r5, #0 - bl InitializeAnimation - b _0808A1DE -_0808A1DA: - movs r0, #0 -_0808A1DC: - strb r0, [r5, #0xe] -_0808A1DE: - adds r0, r5, #0 - bl GetNextFrame - adds r0, r5, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0808A202 - ldrb r0, [r5, #0xb] - subs r0, #1 - lsls r1, r0, #1 - adds r1, r1, r0 - adds r1, #1 - adds r0, r5, #0 - bl InitializeAnimation -_0808A202: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_0808A208 -sub_0808A208: @ 0x0808A208 - push {lr} - ldr r2, _0808A21C @ =gUnk_08120E84 - ldrb r1, [r0, #0xd] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0808A21C: .4byte gUnk_08120E84 - - thumb_func_start sub_0808A220 -sub_0808A220: @ 0x0808A220 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0x1b] - movs r6, #0x3f - adds r0, r6, #0 - ands r0, r1 - movs r5, #0x80 - orrs r0, r5 - strb r0, [r4, #0x1b] - movs r0, #0x2e - ldrsh r1, [r4, r0] - ldr r2, _0808A2E4 @ =gRoomControls - ldrh r0, [r2, #6] - subs r1, r1, r0 - asrs r1, r1, #4 - movs r3, #0x3f - ands r1, r3 - movs r7, #0x32 - ldrsh r0, [r4, r7] - ldrh r2, [r2, #8] - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r3 - lsls r0, r0, #6 - orrs r1, r0 - adds r2, r4, #0 - adds r2, #0x70 - strh r1, [r2] - ldr r0, _0808A2E8 @ =0x00004017 - ldrh r1, [r2] - movs r2, #1 - bl SetTile - movs r7, #1 - strb r7, [r4, #0xd] - adds r0, r4, #0 - movs r1, #0x15 - movs r2, #0 - movs r3, #0 - bl CreateObjectWithParent - adds r3, r0, #0 - cmp r3, #0 - beq _0808A2D4 - ldrh r0, [r4, #0x32] - adds r0, #0x38 - strh r0, [r3, #0x32] - ldrh r0, [r4, #0x12] - strh r0, [r3, #0x12] - adds r0, r4, #0 - adds r0, #0x60 - ldrh r1, [r0] - adds r0, r3, #0 - adds r0, #0x60 - strh r1, [r0] - ldrb r1, [r4, #0x1a] - lsls r1, r1, #0x1c - lsrs r1, r1, #0x1c - ldrb r2, [r3, #0x1a] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, #0x1a] - adds r1, r3, #0 - adds r1, #0x58 - movs r0, #2 - strb r0, [r1] - movs r0, #0x80 - strb r0, [r3, #0xe] - strb r7, [r3, #0xa] - ldrb r1, [r3, #0x19] - adds r0, r6, #0 - ands r0, r1 - orrs r0, r5 - strb r0, [r3, #0x19] - adds r2, r3, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #6 - orrs r0, r1 - strb r0, [r2] - ldrb r1, [r3, #0x1b] - adds r0, r6, #0 - ands r0, r1 - orrs r0, r5 - strb r0, [r3, #0x1b] -_0808A2D4: - adds r0, r4, #0 - movs r1, #0x2c - movs r2, #9 - movs r3, #0 - bl CreateObjectWithParent - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0808A2E4: .4byte gRoomControls -_0808A2E8: .4byte 0x00004017 - - thumb_func_start nullsub_518 -nullsub_518: @ 0x0808A2EC - bx lr - .align 2, 0 - - thumb_func_start sub_0808A2F0 -sub_0808A2F0: @ 0x0808A2F0 - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xd] - cmp r0, #0 - bne _0808A316 - movs r0, #1 - strb r0, [r5, #0xd] - ldrh r0, [r5, #0x32] - adds r0, #0x28 - strh r0, [r5, #0x32] - movs r2, #0x18 - rsbs r2, r2, #0 - adds r0, r5, #0 - movs r1, #0 - bl sub_0800029C - adds r1, r5, #0 - adds r1, #0x72 - strh r0, [r1] -_0808A316: - ldr r3, _0808A38C @ =gPlayerEntity - ldrb r1, [r3, #0x1b] - lsrs r1, r1, #6 - lsls r1, r1, #6 - ldrb r2, [r5, #0x1b] - movs r7, #0x3f - adds r0, r7, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5, #0x1b] - ldrb r1, [r3, #0x19] - lsrs r1, r1, #6 - lsls r1, r1, #6 - ldrb r2, [r5, #0x19] - adds r0, r7, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5, #0x19] - ldr r0, _0808A390 @ =gPlayerState - ldrb r0, [r0, #0x12] - cmp r0, #0x1e - bne _0808A39C - adds r2, r5, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2] - movs r2, #0x18 - rsbs r2, r2, #0 - adds r0, r5, #0 - movs r1, #0 - bl sub_0800029C - ldr r3, _0808A394 @ =0x00004014 - cmp r0, r3 - beq _0808A3EC - movs r0, #0x2e - ldrsh r1, [r5, r0] - ldr r2, _0808A398 @ =gRoomControls - ldrh r0, [r2, #6] - subs r1, r1, r0 - asrs r1, r1, #4 - ands r1, r7 - movs r4, #0x32 - ldrsh r0, [r5, r4] - ldrh r2, [r2, #8] - adds r2, #0x18 - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r7 - lsls r0, r0, #6 - orrs r1, r0 - adds r0, r3, #0 - movs r2, #1 - bl SetTile - b _0808A3EC - .align 2, 0 -_0808A38C: .4byte gPlayerEntity -_0808A390: .4byte gPlayerState -_0808A394: .4byte 0x00004014 -_0808A398: .4byte gRoomControls -_0808A39C: - adds r2, r5, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #5 - orrs r0, r1 - strb r0, [r2] - adds r6, r5, #0 - adds r6, #0x72 - ldrh r4, [r6] - movs r2, #0x18 - rsbs r2, r2, #0 - adds r0, r5, #0 - movs r1, #0 - bl sub_0800029C - cmp r4, r0 - beq _0808A3EC - ldrh r0, [r6] - movs r2, #0x2e - ldrsh r1, [r5, r2] - ldr r3, _0808A3F0 @ =gRoomControls - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r7 - movs r4, #0x32 - ldrsh r2, [r5, r4] - ldrh r3, [r3, #8] - adds r3, #0x18 - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r7 - lsls r2, r2, #6 - orrs r1, r2 - movs r2, #1 - bl SetTile -_0808A3EC: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0808A3F0: .4byte gRoomControls diff --git a/assets/assets.json b/assets/assets.json index 584be53f..697e97b8 100644 --- a/assets/assets.json +++ b/assets/assets.json @@ -43150,21 +43150,6 @@ "size": 6, "type": "animation" }, - { - "path": "beanstalk/gUnk_08120DFC.bin", - "start": 1183228, - "size": 24 - }, - { - "path": "beanstalk/gUnk_08120E14.bin", - "start": 1183252, - "size": 40 - }, - { - "path": "beanstalk/gUnk_08120E3C.bin", - "start": 1183292, - "size": 20 - }, { "path": "animations/gSpriteAnimations_Beanstalk_0_0.bin", "start": 1183372, diff --git a/data/animations/object/beanstalk.s b/data/animations/object/beanstalk.s index 214c350e..cb6ac714 100644 --- a/data/animations/object/beanstalk.s +++ b/data/animations/object/beanstalk.s @@ -4,6 +4,12 @@ .section .rodata @ .align 2 +gSpriteAnimations_Beanstalk_0_0:: @ 08120E8C + .include "animations/gSpriteAnimations_Beanstalk_0_0.s" + +gSpriteAnimations_Beanstalk_0_1:: @ 08120ED1 + .include "animations/gSpriteAnimations_Beanstalk_0_1.s" + gSpriteAnimations_Beanstalk_1_0:: @ 08120EF9 .include "animations/gSpriteAnimations_Beanstalk_1_0.s" diff --git a/data/const/object/beanstalk.s b/data/const/object/beanstalk.s deleted file mode 100644 index 768aef3e..00000000 --- a/data/const/object/beanstalk.s +++ /dev/null @@ -1,45 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08120DF4:: @ 08120DF4 - .4byte sub_08089D1C - .4byte sub_08089F08 - -gUnk_08120DFC:: @ 08120DFC - .incbin "beanstalk/gUnk_08120DFC.bin" - -gUnk_08120E14:: @ 08120E14 - .incbin "beanstalk/gUnk_08120E14.bin" - -gUnk_08120E3C:: @ 08120E3C - .incbin "beanstalk/gUnk_08120E3C.bin" - -gUnk_08120E50:: @ 08120E50 - .4byte sub_08089F20 - .4byte nullsub_517 - .4byte sub_0808A010 - .4byte nullsub_517 - .4byte sub_0808A0C0 - .4byte sub_0808A0C0 - .4byte sub_0808A0C0 - .4byte sub_0808A0DC - .4byte sub_0808A208 - .4byte sub_0808A2F0 - -gUnk_08120E78:: @ 08120E78 - .4byte sub_08089F38 - .4byte sub_08089F70 - .4byte sub_08089FF0 - -gUnk_08120E84:: @ 08120E84 - .4byte sub_0808A220 - .4byte nullsub_518 - -gSpriteAnimations_Beanstalk_0_0:: @ 08120E8C - .include "animations/gSpriteAnimations_Beanstalk_0_0.s" - -gSpriteAnimations_Beanstalk_0_1:: @ 08120ED1 - .include "animations/gSpriteAnimations_Beanstalk_0_1.s" diff --git a/include/functions.h b/include/functions.h index 4766fbec..8f28b6de 100644 --- a/include/functions.h +++ b/include/functions.h @@ -58,6 +58,7 @@ extern void UpdateItemAnim(ItemBehavior*); // Unidentified extern void sub_08000148(u32, u32, u32); +extern u32 sub_0800029C(Entity*, s32, s32); extern u32 sub_080002A8(u32, u32, u32); extern u32 sub_080002B4(Entity*, u32, u32); extern u32 sub_080002B8(Entity*); diff --git a/include/object.h b/include/object.h index 65575e33..302d7b5e 100644 --- a/include/object.h +++ b/include/object.h @@ -270,7 +270,7 @@ void Object28(Entity*); void AmbientClouds(Entity*); void Object2A(Entity*); void Object2B(Entity*); -void Beanstalk(Entity*); +void Beanstalk(); void Smoke(Entity*); void PushableRock(); void HittableLever(); diff --git a/linker.ld b/linker.ld index 0455b63f..ff1b16b6 100644 --- a/linker.ld +++ b/linker.ld @@ -686,7 +686,7 @@ SECTIONS { src/object/ambientClouds.o(.text); src/object/object2A.o(.text); asm/object/object2B.o(.text); - asm/object/beanstalk.o(.text); + src/object/beanstalk.o(.text); src/object/smoke.o(.text); src/object/pushableRock.o(.text); src/object/hittableLever.o(.text); @@ -1414,7 +1414,7 @@ SECTIONS { data/animations/object/ambientClouds.o(.rodata); src/object/object2A.o(.rodata); data/animations/object/object2A.o(.rodata); - data/const/object/beanstalk.o(.rodata); + src/object/beanstalk.o(.rodata); data/animations/object/beanstalk.o(.rodata); data/const/object/smoke.o(.rodata); src/object/pushableRock.o(.rodata); diff --git a/src/object/beanstalk.c b/src/object/beanstalk.c new file mode 100644 index 00000000..0e748a85 --- /dev/null +++ b/src/object/beanstalk.c @@ -0,0 +1,353 @@ +/** + * @file beanstalk.c + * @ingroup Objects + * + * @brief Beanstalk object + */ + +#define NENT_DEPRECATED +#include "global.h" +#include "object.h" +#include "functions.h" + +typedef struct { + /*0x00*/ Entity base; + /*0x68*/ u8 unk_68[4]; + /*0x6c*/ u32 unk_6c; + /*0x70*/ u16 unk_70; + /*0x72*/ u16 unk_72; +} BeanstalkEntity; + +typedef struct { + u8 type; + s8 x; + s8 y; + u8 flipX; +} struct_08120DFC; + +typedef struct { + u8 unk_0; + u8 unk_1; +} struct_08120E3C; + +void Beanstalk_Action1(BeanstalkEntity*); +void Beanstalk_Init(BeanstalkEntity*); +void Beanstalk_Action1Type0(BeanstalkEntity*); +void Beanstalk_Action1Type1(BeanstalkEntity*); +void Beanstalk_Action1Type2(BeanstalkEntity*); +void Beanstalk_Action1Type4(BeanstalkEntity*); +void Beanstalk_Action1Type7(BeanstalkEntity*); +void Beanstalk_Action1Type8(BeanstalkEntity*); +void Beanstalk_Action1Type9(BeanstalkEntity*); +void Beanstalk_Action1Type0SubAction0(BeanstalkEntity*); +void Beanstalk_Action1Type0SubAction1(BeanstalkEntity*); +void Beanstalk_Action1Type0SubAction2(BeanstalkEntity*); +void Beanstalk_Action1Type8SubAction0(BeanstalkEntity*); +void Beanstalk_Action1Type8SubAction1(BeanstalkEntity*); + +void Beanstalk(BeanstalkEntity* this) { + static void (*const Beanstalk_Actions[])(BeanstalkEntity*) = { + Beanstalk_Init, + Beanstalk_Action1, + }; + Beanstalk_Actions[super->action](this); +} + +const struct_08120DFC gUnk_08120DFC[] = { + { 4, -2, 8, 0 }, { 6, 10, 16, 1 }, { 5, -4, 33, 0 }, { 6, -7, 7, 0 }, { 4, 5, 33, 1 }, { 5, 2, 37, 1 }, +}; +void Beanstalk_Init(BeanstalkEntity* this) { + static const struct_08120E3C gUnk_08120E14[] = { + { 0, 3 }, { 1, 3 }, { 0, 3 }, { 2, 3 }, { 3, 2 }, { 6, 2 }, { 9, 4 }, { 0, 3 }, { 0, 4 }, { 12, 6 }, + }; + static const struct_08120E3C gUnk_08120E3C[] = { + { 1, 6 }, { 2, 6 }, { 4, 3 }, { 7, 5 }, { 10, 7 }, + }; + + Entity* obj; + const struct_08120DFC* ptr; + + super->spriteRendering.b3 = 2; + super->spriteOrientation.flipY = 1; + SetDefaultPriority(super, 4); + if (super->type == 7) { +#ifndef EU + if ((super->flags & ENT_DID_INIT) == 0) { + return; + } +#endif + if (super->type2 == 0 && super->actionDelay != 0) { + if (CheckLocalFlag(super->actionDelay) == 0) { + return; + } + super->spriteOrientation.flipY = 2; + } + InitializeAnimation(super, gUnk_08120E3C[super->type2].unk_0); + super->spritePriority.b0 = gUnk_08120E3C[super->type2].unk_1; + } else { + if (super->type != 0) { + InitializeAnimation(super, gUnk_08120E14[super->type].unk_0); + } else { + LoadSwapGFX(super, 1, 2); + InitAnimationForceUpdate(super, gUnk_08120E14[super->type].unk_0); + } + super->spritePriority.b0 = gUnk_08120E14[super->type].unk_1; + } + super->action = 1; + super->spriteSettings.draw = 1; + + switch (super->type) { + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + super->spriteVramOffset = 0x1c0; + super->actionDelay = 0; + break; + case 7: + switch (super->type2) { + case 0: + this->unk_6c = 0x10; + super->actionDelay = 0; + do { + obj = CreateObject(BEANSTALK, 7, 1); + super->child = obj; + if (obj != NULL) { + obj->x.HALF.HI = super->x.HALF.HI; + (super->child)->y.HALF.HI = super->y.HALF.HI - (s16)this->unk_6c; + super->field_0xf = 4; + while (--super->field_0xf != 0) { + ptr = &gUnk_08120DFC[super->actionDelay]; + obj = CreateObject(BEANSTALK, 7, ptr->type - 2); + super->child = obj; + if (obj != NULL) { + obj->x.HALF.HI = super->x.HALF.HI + ptr->x; + (super->child)->y.HALF.HI = (super->y.HALF.HI - (s16)this->unk_6c) - ptr->y; + super->child->spriteSettings.flipX = ptr->flipX; + } + super->actionDelay++; + } + if (super->actionDelay > 5) { + super->actionDelay = 0; + } + } + this->unk_6c += 0x38; + } while (((s16)(super->y.HALF_U.HI - this->unk_6c)) >= gRoomControls.origin_y); + super->actionDelay = 1; + break; + case 2: + case 3: + super->spriteRendering.b3 = 1; + // fallthrough + case 4: + super->collisionLayer = 3; + } + break; + } + Beanstalk_Action1(this); +} + +void Beanstalk_Action1(BeanstalkEntity* this) { + static void (*const Beanstalk_Action1Types[])(BeanstalkEntity*) = { + Beanstalk_Action1Type0, Beanstalk_Action1Type1, Beanstalk_Action1Type2, Beanstalk_Action1Type1, + Beanstalk_Action1Type4, Beanstalk_Action1Type4, Beanstalk_Action1Type4, Beanstalk_Action1Type7, + Beanstalk_Action1Type8, Beanstalk_Action1Type9, + }; + Beanstalk_Action1Types[super->type](this); +} + +void Beanstalk_Action1Type0(BeanstalkEntity* this) { + static void (*const Beanstalk_Action1Type0SubActions[])(BeanstalkEntity*) = { + Beanstalk_Action1Type0SubAction0, + Beanstalk_Action1Type0SubAction1, + Beanstalk_Action1Type0SubAction2, + }; + Beanstalk_Action1Type0SubActions[super->subAction](this); +} + +void Beanstalk_Action1Type0SubAction0(BeanstalkEntity* this) { + UpdateAnimationSingleFrame(super); + if ((super->frame & 0x80) != 0) { + if (super->actionDelay < 2) { + super->actionDelay++; + } else { + InitAnimationForceUpdate(super, 1); + super->actionDelay = 0x10; + super->subAction++; + } + } +} + +void Beanstalk_Action1Type0SubAction1(BeanstalkEntity* this) { + if (super->actionDelay-- == 0) { + super->actionDelay = 0x10; + SoundReq(SFX_198); + } + UpdateAnimationSingleFrame(super); + if ((super->frame & 0x80) != 0) { + Entity* entity = CreateObject(BEANSTALK, 1, 0); + super->child = entity; + if (entity != NULL) { + entity->x.HALF.HI = super->x.HALF.HI; + (super->child)->y.HALF.HI = super->y.HALF.HI; + } + entity = CreateObject(BEANSTALK, 2, 0); + super->child = entity; + if (entity != NULL) { + entity->x.HALF.HI = super->x.HALF.HI; + (super->child)->y.HALF.HI = super->y.HALF.HI + -0x10; + } + super->spriteSettings.draw = 0; + super->subAction++; + } +} + +void Beanstalk_Action1Type0SubAction2(BeanstalkEntity* this) { + if (super->actionDelay-- == 0) { + super->actionDelay = 0x10; + SoundReq(SFX_198); + } +} + +void Beanstalk_Action1Type2(BeanstalkEntity* this) { + s32 tmp; + const struct_08120DFC* ptr; + + GetNextFrame(super); + if ((super->frame & 1) != 0) { + ptr = &gUnk_08120DFC[super->actionDelay]; + super->child = CreateObject(BEANSTALK, ptr->type, 0); + if (super->child != NULL) { + super->child->x.HALF.HI = super->x.HALF.HI + ptr->x; + super->child->y.HALF.HI = super->y.HALF.HI - ptr->y; + super->child->spriteSettings.flipX = ptr->flipX; + } + if (++super->actionDelay > 5) { + super->actionDelay = 0; + } + } + if ((super->frame & 0x80) != 0) { + super->child = CreateObject(BEANSTALK, 3, 0); + if (super->child != NULL) { + super->child->x.HALF.HI = super->x.HALF.HI; + super->child->y.HALF.HI = super->y.HALF.HI; + } + tmp = super->y.HALF.HI -= 0x38; + if (tmp * 0x10000 < 0) { + DeleteEntity(super); + } + } +} + +void Beanstalk_Action1Type4(BeanstalkEntity* this) { + if ((super->frame & 0x80) == 0) { + GetNextFrame(super); + } +} + +void Beanstalk_Action1Type1(BeanstalkEntity* this) { +} + +void Beanstalk_Action1Type7(BeanstalkEntity* this) { + switch (super->type2) { + case 0: + if (super->actionDelay == 0) { + return; + } + this->unk_6c = gRoomControls.origin_y; + this->unk_70 = TILE(super->x.HALF.HI, this->unk_6c); + while (TRUE) { + this->unk_70 = TILE(super->x.HALF.HI, this->unk_6c); + SetTile(0x4017, this->unk_70, 2); + SetTile(0x4017, this->unk_70, 1); + this->unk_6c += 0x10; + if (this->unk_6c >= gRoomControls.origin_y + gRoomControls.height) + break; + if (this->unk_6c > super->y.HALF.HI) { + break; + } + } + super->actionDelay = 0; + return; + break; + case 1: + return; + case 2: + case 3: + case 4: + if (gPlayerState.floor_type == 0x1e) { + if (EntityInRectRadius(super, &gPlayerEntity, 0, 8)) { + if ((super->animIndex == (super->type2 - 1) * 3 + 1) && (super->actionDelay == 0)) { + super->actionDelay = 1; + InitializeAnimation(super, super->animIndex + 1); + } + } else { + super->actionDelay = 0; + } + } else { + super->actionDelay = 0; + } + GetNextFrame(super); + if ((super->frame & 0x80) != 0) { + InitializeAnimation(super, (super->type2 - 1) * 3 + 1); + } + break; + } +} + +void Beanstalk_Action1Type8(BeanstalkEntity* this) { + static void (*const Beanstalk_Action1Type8SubActions[])(BeanstalkEntity*) = { + Beanstalk_Action1Type8SubAction0, + Beanstalk_Action1Type8SubAction1, + }; + Beanstalk_Action1Type8SubActions[super->subAction](this); +} + +void Beanstalk_Action1Type8SubAction0(BeanstalkEntity* this) { + Entity* obj; + + super->spriteOrientation.flipY = 2; + this->unk_70 = COORD_TO_TILE(super); + SetTile(0x4017, this->unk_70, 1); + super->subAction = 1; + obj = CreateObjectWithParent(super, OBJECT_15, 0, 0); + if (obj != NULL) { + obj->y.HALF.HI = super->y.HALF.HI + 0x38; + obj->spriteIndex = super->spriteIndex; + obj->spriteVramOffset = super->spriteVramOffset; + obj->palette.b.b0 = super->palette.b.b0; + obj->animIndex = 2; + obj->actionDelay = 0x80; + obj->type = 1; + obj->spriteRendering.b3 = 2; + obj->spritePriority.b0 = 6; + obj->spriteOrientation.flipY = 2; + } + CreateObjectWithParent(super, BEANSTALK, 9, 0); +} + +void Beanstalk_Action1Type8SubAction1(BeanstalkEntity* this) { +} + +void Beanstalk_Action1Type9(BeanstalkEntity* this) { + if (super->subAction == 0) { + super->subAction = 1; + super->y.HALF.HI += 0x28; + this->unk_72 = sub_0800029C(super, 0, -0x18); + } + super->spriteOrientation.flipY = gPlayerEntity.spriteOrientation.flipY; + super->spriteRendering.b3 = gPlayerEntity.spriteRendering.b3; + if (gPlayerState.floor_type == 0x1e) { + super->spritePriority.b0 = 0; + if (sub_0800029C(super, 0, -0x18) != 0x4014) { + SetTile(0x4014, COORD_TO_TILE_OFFSET(super, 0, 0x18), 1); + } + } else { + super->spritePriority.b0 = 5; + if (this->unk_72 != sub_0800029C(super, 0, -0x18)) { + SetTile(this->unk_72, COORD_TO_TILE_OFFSET(super, 0, 0x18), 1); + } + } +}