diff --git a/asm/non_matching/object6A/sub_08095EAC.inc b/asm/non_matching/object6A/sub_08095EAC.inc new file mode 100644 index 00000000..ed92dd8a --- /dev/null +++ b/asm/non_matching/object6A/sub_08095EAC.inc @@ -0,0 +1,70 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + mov sb, r0 + adds r4, r1, #0 + movs r0, #0x6a + movs r1, #0x1e + movs r2, #1 + bl CreateObject + adds r5, r0, #0 + cmp r5, #0 + beq _08095F2A + ldr r0, [r4, #4] + cmp r0, #0 + bne _08095EE0 + movs r7, #0x10 + movs r6, #0x1f + movs r0, #0x80 + lsls r0, r0, #7 + mov sl, r0 + movs r2, #0 + mov r8, r2 + b _08095F02 +_08095EE0: + movs r7, #8 + movs r6, #0xf + movs r0, #0x80 + lsls r0, r0, #0xb + mov sl, r0 + ldr r4, _08095F34 @ =gUnk_08122B0E + bl Random + movs r1, #7 + ands r1, r0 + lsls r1, r1, #1 + adds r1, r1, r4 + movs r0, #0 + ldrsh r2, [r1, r0] + mov r8, r2 + movs r0, #0xff + strb r0, [r5, #0xb] +_08095F02: + bl Random + adds r4, r0, #0 + ands r4, r6 + subs r4, r7, r4 + bl Random + ands r6, r0 + subs r3, r7, r6 + lsls r4, r4, #0x10 + lsls r3, r3, #0x10 + mov r0, sb + adds r1, r5, #0 + adds r2, r4, #0 + bl PositionRelative + mov r2, sl + str r2, [r5, #0x20] + mov r0, r8 + strh r0, [r5, #0x24] +_08095F2A: + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_08095F34: .4byte gUnk_08122B0E + .syntax divided diff --git a/asm/object6A.s b/asm/object6A.s deleted file mode 100644 index 2b6fd5f4..00000000 --- a/asm/object6A.s +++ /dev/null @@ -1,3342 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Object6A -Object6A: @ 0x08094A44 - push {lr} - ldr r2, _08094A58 @ =gUnk_08122A34 - ldrb r1, [r0, #0xa] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08094A58: .4byte gUnk_08122A34 - - thumb_func_start sub_08094A5C -sub_08094A5C: @ 0x08094A5C - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _08094A78 - adds r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - bl sub_0807DD64 - adds r0, r4, #0 - movs r1, #4 - bl InitializeAnimation -_08094A78: - adds r0, r4, #0 - movs r1, #0 - bl ExecuteScriptForEntity - adds r0, r4, #0 - bl HandleEntity0x82Actions - adds r0, r4, #0 - bl GetNextFrame - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08094A90 -sub_08094A90: @ 0x08094A90 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _08094ACE - adds r0, #1 - strb r0, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x38 - movs r0, #2 - strb r0, [r1] - adds r0, r4, #0 - bl UpdateSpriteForCollisionLayer - ldr r1, _08094AE4 @ =gUnk_08114F30 - ldrb r2, [r4, #0x19] - lsrs r0, r2, #6 - adds r0, r0, r1 - ldrb r1, [r0] - lsls r1, r1, #6 - movs r0, #0x3f - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x19] - adds r0, r4, #0 - movs r1, #0 - bl InitAnimationForceUpdate - adds r0, r4, #0 - bl sub_0807DD64 -_08094ACE: - adds r0, r4, #0 - movs r1, #0 - bl ExecuteScriptForEntity - adds r0, r4, #0 - bl HandleEntity0x82Actions - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, pc} - .align 2, 0 -_08094AE4: .4byte gUnk_08114F30 - - thumb_func_start sub_08094AE8 -sub_08094AE8: @ 0x08094AE8 - push {r4, r5, lr} - adds r5, r1, #0 - movs r0, #0x6a - movs r1, #1 - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _08094B08 - ldr r1, [r5, #4] - bl StartCutscene - adds r1, r4, #0 - adds r1, #0x84 - str r0, [r1] -_08094B08: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08094B0C -sub_08094B0C: @ 0x08094B0C - push {lr} - adds r2, r0, #0 - ldrh r0, [r2, #0x36] - subs r0, #1 - movs r3, #0 - strh r0, [r2, #0x36] - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - movs r1, #0x20 - rsbs r1, r1, #0 - cmp r0, r1 - bgt _08094B30 - ldr r0, _08094B2C @ =0x0000FFE0 - strh r0, [r2, #0x36] - b _08094B34 - .align 2, 0 -_08094B2C: .4byte 0x0000FFE0 -_08094B30: - ldr r0, _08094B38 @ =gActiveScriptInfo - strb r3, [r0, #6] -_08094B34: - pop {pc} - .align 2, 0 -_08094B38: .4byte gActiveScriptInfo - - thumb_func_start sub_08094B3C -sub_08094B3C: @ 0x08094B3C - push {lr} - adds r2, r0, #0 - ldr r0, [r2, #0x34] - movs r1, #0x80 - lsls r1, r1, #8 - adds r0, r0, r1 - str r0, [r2, #0x34] - movs r0, #0x36 - ldrsh r1, [r2, r0] - movs r0, #0xd - rsbs r0, r0, #0 - cmp r1, r0 - blt _08094B60 - ldr r0, _08094B5C @ =0x0000FFF3 - strh r0, [r2, #0x36] - b _08094B66 - .align 2, 0 -_08094B5C: .4byte 0x0000FFF3 -_08094B60: - ldr r1, _08094B68 @ =gActiveScriptInfo - movs r0, #0 - strb r0, [r1, #6] -_08094B66: - pop {pc} - .align 2, 0 -_08094B68: .4byte gActiveScriptInfo - - thumb_func_start sub_08094B6C -sub_08094B6C: @ 0x08094B6C - adds r0, #0x29 - ldrb r2, [r0] - movs r1, #0x39 - rsbs r1, r1, #0 - ands r1, r2 - movs r2, #0x18 - orrs r1, r2 - strb r1, [r0] - bx lr - .align 2, 0 - - thumb_func_start sub_08094B80 -sub_08094B80: @ 0x08094B80 - adds r0, #0x29 - ldrb r2, [r0] - movs r1, #0x39 - rsbs r1, r1, #0 - ands r1, r2 - movs r2, #0x10 - orrs r1, r2 - strb r1, [r0] - bx lr - .align 2, 0 - - thumb_func_start sub_08094B94 -sub_08094B94: @ 0x08094B94 - push {r4, lr} - movs r0, #0x6a - movs r1, #0x22 - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _08094BD2 - ldr r0, _08094BD4 @ =gPlayerEntity - adds r1, r4, #0 - bl CopyPosition - ldr r0, _08094BD8 @ =0x0000FFD0 - strh r0, [r4, #0x36] - ldr r1, _08094BDC @ =script_0800AEDC - adds r0, r4, #0 - bl StartCutscene - adds r1, r4, #0 - adds r1, #0x84 - str r0, [r1] - adds r0, r4, #0 - bl CreateDust - ldrh r0, [r4, #0x36] - adds r0, #0x10 - strh r0, [r4, #0x36] - ldrh r0, [r4, #0x32] - adds r0, #1 - strh r0, [r4, #0x32] -_08094BD2: - pop {r4, pc} - .align 2, 0 -_08094BD4: .4byte gPlayerEntity -_08094BD8: .4byte 0x0000FFD0 -_08094BDC: .4byte script_0800AEDC - - thumb_func_start sub_08094BE0 -sub_08094BE0: @ 0x08094BE0 - push {r4, lr} - sub sp, #4 - movs r0, #0 - str r0, [sp] - movs r0, #6 - movs r1, #0x6a - movs r2, #6 - movs r3, #0x22 - bl FindEntity - adds r4, r0, #0 - cmp r4, #0 - beq _08094C22 - ldr r0, _08094C28 @ =gPlayerEntity - adds r1, r4, #0 - bl CopyPosition - ldr r0, _08094C2C @ =0x0000FFF4 - strh r0, [r4, #0x36] - ldrh r0, [r4, #0x32] - adds r0, #1 - strh r0, [r4, #0x32] - adds r1, r4, #0 - adds r1, #0x38 - movs r0, #2 - strb r0, [r1] - adds r0, r4, #0 - bl UpdateSpriteForCollisionLayer - adds r0, r4, #0 - movs r1, #1 - bl InitAnimationForceUpdate -_08094C22: - add sp, #4 - pop {r4, pc} - .align 2, 0 -_08094C28: .4byte gPlayerEntity -_08094C2C: .4byte 0x0000FFF4 - - thumb_func_start sub_08094C30 -sub_08094C30: @ 0x08094C30 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r5, [r4, #0x50] - cmp r5, #0 - beq _08094C40 - ldr r0, [r5, #4] - cmp r0, #0 - bne _08094C44 -_08094C40: - bl DeleteThisEntity -_08094C44: - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _08094C74 - adds r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #2 - bl SetDefaultPriority - ldr r1, _08094C84 @ =gUnk_08114F30 - ldrb r0, [r5, #0x19] - lsrs r0, r0, #6 - adds r0, r0, r1 - ldrb r1, [r0] - lsls r1, r1, #6 - ldrb r2, [r4, #0x19] - movs r0, #0x3f - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x19] - adds r0, r4, #0 - movs r1, #1 - bl InitAnimationForceUpdate -_08094C74: - adds r0, r5, #0 - adds r1, r4, #0 - bl CopyPosition - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, r5, pc} - .align 2, 0 -_08094C84: .4byte gUnk_08114F30 - - thumb_func_start sub_08094C88 -sub_08094C88: @ 0x08094C88 - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r1, [r5, #0xc] - cmp r1, #0 - beq _08094CA0 - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08094CCC - bl DeleteThisEntity - b _08094CDA -_08094CA0: - adds r0, r1, #1 - strb r0, [r5, #0xc] - ldrb r1, [r5, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r5, #0x18] - adds r0, r5, #0 - movs r1, #3 - bl SetDefaultPriority - ldrb r0, [r5, #0xb] - cmp r0, #0x43 - bgt _08094CCC - cmp r0, #0x40 - blt _08094CCC - adds r0, r5, #0 - adds r1, r5, #0 - bl ResolveEntityBelow -_08094CCC: - ldrb r4, [r5, #0xa] - ldrb r0, [r5, #0xb] - strb r0, [r5, #0xa] - adds r0, r5, #0 - bl sub_08080CB4 - strb r4, [r5, #0xa] -_08094CDA: - pop {r4, r5, pc} - - thumb_func_start sub_08094CDC -sub_08094CDC: @ 0x08094CDC - push {lr} - movs r0, #0x6a - movs r1, #3 - movs r2, #0x62 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _08094D0A - ldr r1, _08094D0C @ =gRoomControls - ldrh r0, [r1, #6] - adds r0, #0xe0 - strh r0, [r2, #0x2e] - movs r3, #0x96 - lsls r3, r3, #2 - adds r0, r3, #0 - ldrh r1, [r1, #8] - adds r0, r0, r1 - strh r0, [r2, #0x32] - movs r0, #0xa2 - lsls r0, r0, #1 - bl SoundReq -_08094D0A: - pop {pc} - .align 2, 0 -_08094D0C: .4byte gRoomControls - - thumb_func_start sub_08094D10 -sub_08094D10: @ 0x08094D10 - push {lr} - sub sp, #4 - movs r0, #0x62 - str r0, [sp] - movs r0, #6 - movs r1, #0x6a - movs r2, #6 - movs r3, #3 - bl FindEntity - adds r1, r0, #0 - cmp r1, #0 - beq _08094D2E - movs r0, #0xff - strb r0, [r1, #0xc] -_08094D2E: - add sp, #4 - pop {pc} - .align 2, 0 - - thumb_func_start sub_08094D34 -sub_08094D34: @ 0x08094D34 - push {lr} - movs r0, #0x6a - movs r1, #0x15 - movs r2, #0xd - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _08094D68 - ldr r1, _08094D6C @ =gRoomControls - movs r3, #0x80 - lsls r3, r3, #1 - adds r0, r3, #0 - ldrh r3, [r1, #6] - adds r0, r0, r3 - strh r0, [r2, #0x2e] - movs r3, #0x96 - lsls r3, r3, #2 - adds r0, r3, #0 - ldrh r1, [r1, #8] - adds r0, r0, r1 - strh r0, [r2, #0x32] - movs r0, #0xa2 - lsls r0, r0, #1 - bl SoundReq -_08094D68: - pop {pc} - .align 2, 0 -_08094D6C: .4byte gRoomControls - - thumb_func_start sub_08094D70 -sub_08094D70: @ 0x08094D70 - push {lr} - sub sp, #4 - movs r0, #0xd - str r0, [sp] - movs r0, #6 - movs r1, #0x6a - movs r2, #6 - movs r3, #0x15 - bl FindEntity - adds r1, r0, #0 - cmp r1, #0 - beq _08094D8E - movs r0, #0xff - strb r0, [r1, #0xc] -_08094D8E: - add sp, #4 - pop {pc} - .align 2, 0 - - thumb_func_start sub_08094D94 -sub_08094D94: @ 0x08094D94 - push {r4, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0xc] - cmp r1, #0 - beq _08094DAC - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08094DCE - bl DeleteThisEntity - b _08094DD4 -_08094DAC: - adds r0, r1, #1 - strb r0, [r4, #0xc] - 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 r0, r4, #0 - movs r1, #3 - bl SetDefaultPriority - adds r0, r4, #0 - movs r1, #0 - bl InitAnimationForceUpdate -_08094DCE: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame -_08094DD4: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08094DD8 -sub_08094DD8: @ 0x08094DD8 - push {lr} - movs r0, #0x6a - movs r1, #4 - movs r2, #0 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _08094E06 - ldr r1, _08094E08 @ =gRoomControls - ldrh r0, [r1, #6] - adds r0, #0xf0 - strh r0, [r2, #0x2e] - movs r3, #0x96 - lsls r3, r3, #2 - adds r0, r3, #0 - ldrh r1, [r1, #8] - adds r0, r0, r1 - strh r0, [r2, #0x32] - movs r0, #0xa2 - lsls r0, r0, #1 - bl SoundReq -_08094E06: - pop {pc} - .align 2, 0 -_08094E08: .4byte gRoomControls - - thumb_func_start sub_08094E0C -sub_08094E0C: @ 0x08094E0C - push {lr} - sub sp, #4 - movs r0, #0 - str r0, [sp] - movs r0, #6 - movs r1, #0x6a - movs r2, #6 - movs r3, #4 - bl FindEntity - adds r1, r0, #0 - cmp r1, #0 - beq _08094E2A - movs r0, #0xff - strb r0, [r1, #0xc] -_08094E2A: - add sp, #4 - pop {pc} - .align 2, 0 - - thumb_func_start sub_08094E30 -sub_08094E30: @ 0x08094E30 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xb] - cmp r0, #0 - bne _08094E88 - ldr r0, _08094E80 @ =gScreenTransition - ldr r0, [r0] - movs r1, #0x1f - ands r0, r1 - cmp r0, #0 - beq _08094E48 - b _08094F94 -_08094E48: - movs r0, #0x6a - movs r1, #5 - movs r2, #1 - bl CreateObject - adds r5, r0, #0 - cmp r5, #0 - bne _08094E5A - b _08094F94 -_08094E5A: - bl Random - ldr r4, _08094E84 @ =gRoomControls - movs r1, #0xf0 - bl __modsi3 - ldrh r1, [r4, #0xa] - adds r1, r1, r0 - strh r1, [r5, #0x2e] - bl Random - movs r1, #0xa0 - bl __modsi3 - ldrh r1, [r4, #0xc] - adds r1, r1, r0 - strh r1, [r5, #0x32] - b _08094F94 - .align 2, 0 -_08094E80: .4byte gScreenTransition -_08094E84: .4byte gRoomControls -_08094E88: - cmp r0, #1 - bne _08094F44 - ldrb r1, [r4, #0xc] - cmp r1, #1 - beq _08094ED4 - cmp r1, #1 - bgt _08094E9C - cmp r1, #0 - beq _08094EA6 - b _08094F94 -_08094E9C: - cmp r1, #2 - beq _08094F08 - cmp r1, #3 - beq _08094F22 - b _08094F94 -_08094EA6: - strb r0, [r4, #0xc] - ldr r0, _08094ED0 @ =0xFF600000 - str r0, [r4, #0x34] - str r1, [r4, #0x20] - adds r0, r4, #0 - movs r1, #6 - bl SetDefaultPriority - adds r0, r4, #0 - movs r1, #0 - bl InitializeAnimation - adds r0, r4, #0 - bl sub_080002B8 - cmp r0, #0xd - bne _08094F94 - movs r0, #3 - strb r0, [r4, #0xc] - b _08094F94 - .align 2, 0 -_08094ED0: .4byte 0xFF600000 -_08094ED4: - ldr r1, [r4, #0x34] - ldr r0, [r4, #0x20] - subs r1, r1, r0 - str r1, [r4, #0x34] - ldr r2, _08094F04 @ =0xFFFFE000 - adds r0, r0, r2 - str r0, [r4, #0x20] - cmp r1, #0 - ble _08094F94 - ldrb r0, [r4, #0xc] - adds r0, #1 - movs r1, #0 - strb r0, [r4, #0xc] - str r1, [r4, #0x34] - str r1, [r4, #0x20] - adds r0, r4, #0 - movs r1, #1 - bl InitializeAnimation - movs r0, #0xbf - lsls r0, r0, #1 - bl EnqueueSFX - b _08094F94 - .align 2, 0 -_08094F04: .4byte 0xFFFFE000 -_08094F08: - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08094F94 - bl DeleteThisEntity - b _08094F94 -_08094F22: - ldr r0, [r4, #0x34] - ldr r1, [r4, #0x20] - subs r0, r0, r1 - str r0, [r4, #0x34] - ldr r0, _08094F40 @ =0xFFFFE000 - adds r1, r1, r0 - str r1, [r4, #0x20] - adds r0, r4, #0 - bl sub_080040A8 - cmp r0, #0 - bne _08094F94 - bl DeleteThisEntity - b _08094F94 - .align 2, 0 -_08094F40: .4byte 0xFFFFE000 -_08094F44: - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _08094F94 - adds r0, #1 - strb r0, [r4, #0xc] - ldrb r0, [r4, #0xe] - cmp r0, #1 - beq _08094F68 - cmp r0, #1 - bgt _08094F5E - cmp r0, #0 - beq _08094F7A - b _08094F94 -_08094F5E: - cmp r0, #2 - beq _08094F72 - cmp r0, #3 - beq _08094F84 - b _08094F94 -_08094F68: - adds r0, r4, #0 - movs r1, #2 - bl InitializeAnimation - b _08094F94 -_08094F72: - ldrb r0, [r4, #0x18] - movs r1, #0x40 - orrs r0, r1 - strb r0, [r4, #0x18] -_08094F7A: - adds r0, r4, #0 - movs r1, #0 - bl InitializeAnimation - b _08094F94 -_08094F84: - ldrb r0, [r4, #0x18] - movs r1, #0x40 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - movs r1, #2 - bl InitializeAnimation -_08094F94: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08094F98 -sub_08094F98: @ 0x08094F98 - push {lr} - movs r0, #0x6a - movs r1, #5 - movs r2, #0 - bl CreateObject - pop {pc} - .align 2, 0 - - thumb_func_start sub_08094FA8 -sub_08094FA8: @ 0x08094FA8 -.ifdef EU - push {r4, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0xc] - cmp r1, #1 - beq _080948B4 - cmp r1, #1 - bgt _08094890 - cmp r1, #0 - beq _0809489A - b _08094912 -_08094890: - cmp r1, #2 - beq _080948E0 - cmp r1, #3 - beq _080948FC - b _08094912 -_0809489A: - movs r0, #1 - strb r0, [r4, #0xc] - strb r1, [r4, #0x1e] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r0, [r2] - movs r1, #7 - orrs r0, r1 - strb r0, [r2] - adds r0, r4, #0 - bl sub_080787B4 - b _08094912 -_080948B4: - adds r1, r4, #0 - adds r1, #0x39 - movs r0, #0 - ldrsb r0, [r1, r0] - cmp r0, #0 - beq _08094912 - movs r0, #0 - strb r0, [r1] - movs r0, #2 - strb r0, [r4, #0xc] - adds r0, r4, #0 - bl sub_080788E0 - ldr r0, _080948DC @ =gPlayerState - movs r1, #0xc - strb r1, [r0, #0xc] - adds r0, #0x38 - movs r1, #0x36 - strb r1, [r0] - b _08094912 - .align 2, 0 -_080948DC: .4byte gPlayerState -_080948E0: - movs r0, #0x36 - bl GetInventoryValue - cmp r0, #2 - bne _08094912 - movs r0, #3 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #7 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - b _08094912 -_080948FC: - ldr r0, _08094914 @ =gPlayerEntity - ldrb r0, [r0, #0xc] - cmp r0, #0xc - beq _08094912 - movs r0, #4 - strb r0, [r4, #0xc] - movs r0, #0x1c - movs r1, #0 - movs r2, #0 - bl CreateItemEntity -_08094912: - pop {r4, pc} - .align 2, 0 -_08094914: .4byte gPlayerEntity - -.else - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #4 - bhi _08095086 - lsls r0, r0, #2 - ldr r1, _08094FBC @ =_08094FC0 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08094FBC: .4byte _08094FC0 -_08094FC0: @ jump table - .4byte _08094FD4 @ case 0 - .4byte _08094FF0 @ case 1 - .4byte _08095024 @ case 2 - .4byte _08095040 @ case 3 - .4byte _08095070 @ case 4 -_08094FD4: - movs r1, #0 - movs r0, #1 - strb r0, [r4, #0xc] - strb r1, [r4, #0x1e] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r0, [r2] - movs r1, #7 - orrs r0, r1 - strb r0, [r2] - adds r0, r4, #0 - bl sub_080787B4 - b _08095086 -_08094FF0: - adds r1, r4, #0 - adds r1, #0x39 - movs r0, #0 - ldrsb r0, [r1, r0] - cmp r0, #0 - beq _08095086 - movs r0, #0 - strb r0, [r1] - movs r0, #2 - strb r0, [r4, #0xc] - adds r0, r4, #0 - bl sub_080788E0 - ldr r0, _08095020 @ =gPlayerState - movs r1, #0xc - strb r1, [r0, #0xc] - adds r0, #0x38 - movs r1, #0x36 - strb r1, [r0] - movs r0, #2 - bl SetPlayerControl - b _08095086 - .align 2, 0 -_08095020: .4byte gPlayerState -_08095024: - movs r0, #0x36 - bl GetInventoryValue - cmp r0, #2 - bne _08095086 - movs r0, #3 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #7 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - b _08095086 -_08095040: - ldr r0, _0809506C @ =gPlayerEntity - ldrb r0, [r0, #0xc] - cmp r0, #0xc - beq _08095086 - movs r0, #4 - strb r0, [r4, #0xc] - movs r0, #0x5b - bl CheckGlobalFlag - cmp r0, #0 - bne _08095086 - movs r0, #0x1c - movs r1, #0 - movs r2, #0 - bl CreateItemEntity - movs r0, #0x5b - bl SetGlobalFlag - movs r0, #0x3c - strb r0, [r4, #0xe] - b _08095086 - .align 2, 0 -_0809506C: .4byte gPlayerEntity -_08095070: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08095086 - movs r0, #5 - strb r0, [r4, #0xc] - movs r0, #1 - bl SetPlayerControl -_08095086: - pop {r4, pc} -.endif - - thumb_func_start sub_08095088 -sub_08095088: @ 0x08095088 - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xc] - cmp r0, #1 - beq _080950C8 - cmp r0, #1 - bgt _0809509C - cmp r0, #0 - beq _080950A2 - b _0809510A -_0809509C: - cmp r0, #2 - beq _080950F0 - b _0809510A -_080950A2: - movs r0, #0x5b - bl GetInventoryValue - cmp r0, #0 - beq _080950B0 - bl DeleteThisEntity -_080950B0: - movs r0, #1 - strb r0, [r5, #0xc] - adds r2, r5, #0 - adds r2, #0x29 - ldrb r0, [r2] - movs r1, #7 - orrs r0, r1 - strb r0, [r2] - adds r0, r5, #0 - bl sub_080787B4 - b _0809510A -_080950C8: - adds r1, r5, #0 - adds r1, #0x39 - movs r0, #0 - ldrsb r0, [r1, r0] - cmp r0, #0 - beq _0809510A - movs r0, #0 - strb r0, [r1] - movs r0, #2 - strb r0, [r5, #0xc] - adds r0, r5, #0 - bl sub_080788E0 - ldr r0, _080950EC @ =0x00001F1F - movs r1, #0 - bl CreateEzloHint - b _0809510A - .align 2, 0 -_080950EC: .4byte 0x00001F1F -_080950F0: - ldr r0, _0809511C @ =gMessage - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0 - bne _0809510A - movs r0, #0x5b - movs r1, #0 - movs r2, #0 - bl CreateItemEntity - bl DeleteThisEntity -_0809510A: - ldrb r4, [r5, #0xa] - movs r0, #0x5b - strb r0, [r5, #0xa] - adds r0, r5, #0 - bl sub_08080CB4 - strb r4, [r5, #0xa] - pop {r4, r5, pc} - .align 2, 0 -_0809511C: .4byte gMessage - - thumb_func_start sub_08095120 -sub_08095120: @ 0x08095120 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0809514C - movs r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #3 - bl SetDefaultPriority - adds r0, r4, #0 - adds r1, r4, #0 - bl ResolveEntityBelow - adds r0, r4, #0 - bl sub_0807DD64 - adds r0, r4, #0 - movs r1, #2 - bl InitAnimationForceUpdate -_0809514C: - adds r0, r4, #0 - movs r1, #0 - bl ExecuteScriptForEntity - adds r0, r4, #0 - bl HandleEntity0x82Actions - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08095164 -sub_08095164: @ 0x08095164 - push {lr} - sub sp, #4 - movs r0, #0 - str r0, [sp] - movs r0, #6 - movs r1, #0x6a - movs r2, #6 - movs r3, #8 - bl FindEntity - cmp r0, #0 - beq _08095182 - movs r1, #3 - bl InitAnimationForceUpdate -_08095182: - add sp, #4 - pop {pc} - .align 2, 0 - - thumb_func_start sub_08095188 -sub_08095188: @ 0x08095188 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _080951B4 - movs r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #3 - bl SetDefaultPriority - adds r0, r4, #0 - adds r1, r4, #0 - bl ResolveEntityBelow - adds r0, r4, #0 - bl sub_0807DD64 - adds r0, r4, #0 - movs r1, #0 - bl InitAnimationForceUpdate -_080951B4: - adds r0, r4, #0 - movs r1, #0 - bl ExecuteScriptForEntity - adds r0, r4, #0 - bl HandleEntity0x82Actions - pop {r4, pc} - - thumb_func_start sub_080951C4 -sub_080951C4: @ 0x080951C4 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _080951E8 - adds r0, #1 - strb r0, [r4, #0xc] - movs r1, #0 - ldr r0, _08095240 @ =0x0000FFF0 - strh r0, [r4, #0x36] - strb r1, [r4, #0xe] - adds r0, r4, #0 - bl sub_0807DD64 - adds r0, r4, #0 - movs r1, #3 - bl InitializeAnimation -_080951E8: - adds r0, r4, #0 - movs r1, #0 - bl ExecuteScriptForEntity - adds r0, r4, #0 - bl HandleEntity0x82Actions - adds r0, r4, #0 - bl GetNextFrame - movs r1, #0x36 - ldrsh r0, [r4, r1] - cmp r0, #0 - bne _08095218 - str r0, [r4, #0x34] - str r0, [r4, #0x50] - ldrb r0, [r4, #0xe] - cmp r0, #0 - bne _08095218 - adds r0, #1 - strb r0, [r4, #0xe] - movs r0, #0xe6 - bl SoundReq -_08095218: - ldr r3, [r4, #0x50] - cmp r3, #0 - beq _0809523C - ldrb r1, [r3, #0x18] - lsls r1, r1, #0x1e - lsrs r1, r1, #0x1e - ldrb r2, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x18] - ldrh r0, [r3, #0x2e] - adds r0, #0x10 - strh r0, [r4, #0x2e] - ldrh r0, [r3, #0x32] - subs r0, #0x10 - strh r0, [r4, #0x32] -_0809523C: - pop {r4, pc} - .align 2, 0 -_08095240: .4byte 0x0000FFF0 - - thumb_func_start sub_08095244 -sub_08095244: @ 0x08095244 - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xa] - cmp r0, #0 - bne _0809527C - movs r0, #0x6a - movs r1, #0xa - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _0809527C - str r5, [r4, #0x50] - movs r2, #0x80 - lsls r2, r2, #0xd - ldr r3, _08095280 @ =0xFFF00000 - adds r0, r5, #0 - adds r1, r4, #0 - bl PositionRelative - ldr r1, _08095284 @ =script_0801183C - adds r0, r4, #0 - bl StartCutscene - adds r1, r4, #0 - adds r1, #0x84 - str r0, [r1] -_0809527C: - pop {r4, r5, pc} - .align 2, 0 -_08095280: .4byte 0xFFF00000 -_08095284: .4byte script_0801183C - - thumb_func_start sub_08095288 -sub_08095288: @ 0x08095288 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - adds r1, r0, #0 - cmp r1, #0 - bne _080952AA - adds r0, #1 - strb r0, [r4, #0xc] - strb r1, [r4, #0xd] - adds r0, r4, #0 - movs r1, #3 - bl SetDefaultPriority - adds r0, r4, #0 - movs r1, #0 - bl InitAnimationForceUpdate -_080952AA: - ldrb r0, [r4, #0xd] - cmp r0, #0 - beq _080952F0 - movs r1, #0xc0 - lsls r1, r1, #5 - adds r0, r4, #0 - bl sub_080044EC - cmp r0, #1 - bhi _080952D4 - movs r0, #0 - strb r0, [r4, #0xd] - movs r2, #0x80 - lsls r2, r2, #1 - movs r3, #0xc0 - lsls r3, r3, #8 - adds r0, r4, #0 - adds r1, r2, #0 - bl sub_0805EC9C - b _080952F0 -_080952D4: - movs r2, #0x80 - lsls r2, r2, #1 - ldrb r3, [r4, #0xe] - lsls r3, r3, #8 - adds r0, r4, #0 - adds r1, r2, #0 - bl sub_0805EC9C - ldrb r0, [r4, #0xe] - adds r0, #0xa - strb r0, [r4, #0xe] - adds r0, r4, #0 - bl sub_0806F69C -_080952F0: - ldr r3, [r4, #0x54] - cmp r3, #0 - beq _080952FE - adds r0, r3, #0 - adds r1, r4, #0 - bl CopyPosition -_080952FE: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - ldr r3, [r4, #0x50] - cmp r3, #0 - beq _08095328 - ldrb r1, [r3, #0x18] - lsls r1, r1, #0x1e - lsrs r1, r1, #0x1e - ldrb r2, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x18] - ldr r0, [r3, #4] - cmp r0, #0 - bne _0809532C - bl DeleteThisEntity - b _0809532C -_08095328: - bl DeleteThisEntity -_0809532C: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08095330 -sub_08095330: @ 0x08095330 - push {r4, r5, lr} - adds r5, r0, #0 - movs r0, #0x6a - movs r1, #0xb - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _0809535E - str r4, [r5, #0x54] - str r5, [r4, #0x54] - str r5, [r4, #0x50] - adds r0, r5, #0 - adds r1, r4, #0 - bl CopyPosition - ldr r0, _08095360 @ =0x0000FFF0 - strh r0, [r4, #0x36] - adds r0, r4, #0 - adds r1, r4, #0 - bl ResolveEntityOnTop -_0809535E: - pop {r4, r5, pc} - .align 2, 0 -_08095360: .4byte 0x0000FFF0 - - thumb_func_start sub_08095364 -sub_08095364: @ 0x08095364 - push {r4, r5, r6, lr} - ldr r6, [r0, #0x54] - cmp r6, #0 - beq _0809539E - movs r5, #0 - movs r0, #2 - strb r0, [r6, #0x1e] - adds r0, r6, #0 - adds r0, #0x38 - movs r4, #1 - strb r4, [r0] - adds r0, r6, #0 - bl UpdateSpriteForCollisionLayer - str r5, [r6, #0x54] - strb r4, [r6, #0xd] - ldr r0, _080953A0 @ =0x0000FFF0 - strh r0, [r6, #0x36] - movs r0, #7 - strb r0, [r6, #0x15] - movs r0, #0xc0 - lsls r0, r0, #0xa - str r0, [r6, #0x20] - movs r0, #0x80 - strh r0, [r6, #0x24] - adds r0, r6, #0 - movs r1, #1 - bl InitAnimationForceUpdate -_0809539E: - pop {r4, r5, r6, pc} - .align 2, 0 -_080953A0: .4byte 0x0000FFF0 - - thumb_func_start sub_080953A4 -sub_080953A4: @ 0x080953A4 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _080953E0 - adds r0, #1 - strb r0, [r4, #0xc] - ldr r0, _08095414 @ =0x0000FFF0 - strh r0, [r4, #0x36] - adds r0, r4, #0 - movs r1, #2 - bl SetDefaultPriority - ldr r1, _08095418 @ =gUnk_08114F30 - ldrb r2, [r4, #0x19] - lsrs r0, r2, #6 - adds r0, r0, r1 - ldrb r1, [r0] - lsls r1, r1, #6 - movs r0, #0x3f - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x19] - adds r0, r4, #0 - adds r1, r4, #0 - bl ResolveEntityOnTop - adds r0, r4, #0 - bl sub_0807DD64 -_080953E0: - adds r0, r4, #0 - movs r1, #0 - bl ExecuteScriptForEntity - adds r0, r4, #0 - bl HandleEntity0x82Actions - adds r0, r4, #0 - bl GetNextFrame - ldrb r0, [r4, #0xa] - cmp r0, #0xd - bne _08095412 - adds r0, r4, #0 - adds r0, #0x5b - ldrb r1, [r0] - movs r0, #1 - ands r0, r1 - ldr r1, _0809541C @ =0x00000139 - cmp r0, #0 - beq _0809540C - movs r1, #0 -_0809540C: - adds r0, r4, #0 - bl ChangeObjPalette -_08095412: - pop {r4, pc} - .align 2, 0 -_08095414: .4byte 0x0000FFF0 -_08095418: .4byte gUnk_08114F30 -_0809541C: .4byte 0x00000139 - - thumb_func_start sub_08095420 -sub_08095420: @ 0x08095420 - push {r4, r5, r6, lr} - adds r5, r0, #0 - adds r6, r1, #0 - movs r0, #0x6a - movs r1, #0xc - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _08095450 - ldr r3, _08095454 @ =0xFFF00000 - adds r0, r5, #0 - adds r1, r4, #0 - movs r2, #0 - bl PositionRelative - ldr r1, [r6, #4] - adds r0, r4, #0 - bl StartCutscene - adds r1, r4, #0 - adds r1, #0x84 - str r0, [r1] -_08095450: - pop {r4, r5, r6, pc} - .align 2, 0 -_08095454: .4byte 0xFFF00000 - - thumb_func_start nullsub_527 -nullsub_527: @ 0x08095458 - bx lr - .align 2, 0 - - thumb_func_start sub_0809545C -sub_0809545C: @ 0x0809545C - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r6, r1, #0 - movs r0, #0x6a - movs r1, #0xd - movs r2, #0 - bl CreateObject - adds r5, r0, #0 - cmp r5, #0 - beq _080954A6 - ldr r3, _080954A8 @ =0xFFF00000 - adds r0, r4, #0 - adds r1, r5, #0 - movs r2, #0 - bl PositionRelative - ldr r1, [r6, #4] - adds r0, r5, #0 - bl StartCutscene - adds r1, r5, #0 - adds r1, #0x84 - str r0, [r1] - movs r0, #0x6a - movs r1, #2 - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _080954A6 - adds r0, r5, #0 - adds r1, r4, #0 - bl CopyPosition - str r5, [r4, #0x50] -_080954A6: - pop {r4, r5, r6, pc} - .align 2, 0 -_080954A8: .4byte 0xFFF00000 - - thumb_func_start sub_080954AC -sub_080954AC: @ 0x080954AC - push {r4, r5, lr} - adds r5, r0, #0 - movs r0, #0x6a - movs r1, #0x1a - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _080954D6 - adds r0, r5, #0 - adds r1, r4, #0 - bl CopyPosition - ldr r1, _080954D8 @ =script_08015B14 - adds r0, r4, #0 - bl StartCutscene - adds r1, r4, #0 - adds r1, #0x84 - str r0, [r1] -_080954D6: - pop {r4, r5, pc} - .align 2, 0 -_080954D8: .4byte script_08015B14 - - thumb_func_start sub_080954DC -sub_080954DC: @ 0x080954DC - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #1 - beq _08095598 - cmp r0, #1 - bgt _080954F0 - cmp r0, #0 - beq _080954FC - b _0809562C -_080954F0: - cmp r0, #2 - beq _080955B8 - cmp r0, #3 - bne _080954FA - b _08095620 -_080954FA: - b _0809562C -_080954FC: - ldrb r0, [r4, #0xe] - adds r5, r0, #0 - cmp r5, #0 - beq _0809550A - subs r0, #1 - strb r0, [r4, #0xe] - b _0809562C -_0809550A: - movs r0, #1 - movs r2, #1 - strb r0, [r4, #0xc] - strb r5, [r4, #0xd] - ldrb r1, [r4, #0x18] - subs r0, #5 - ands r0, r1 - orrs r0, r2 - strb r0, [r4, #0x18] - strh r5, [r4, #0x36] - adds r3, r4, #0 - adds r3, #0x29 - ldrb r1, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - orrs r0, r2 - strb r0, [r3] - ldrh r1, [r4, #0x2e] - adds r0, r4, #0 - adds r0, #0x68 - strh r1, [r0] - ldrh r0, [r4, #0x32] - adds r1, r4, #0 - adds r1, #0x6a - strh r0, [r1] - adds r0, r4, #0 - adds r0, #0x6c - strh r5, [r0] - ldr r1, _08095590 @ =gUnk_08122AE0 - ldrb r0, [r4, #0xb] - adds r0, r0, r1 - ldrb r0, [r0] - adds r5, r4, #0 - adds r5, #0x6e - strb r0, [r5] - ldr r1, _08095594 @ =gUnk_08122AE8 - ldrb r0, [r4, #0xb] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r1, [r0] - adds r0, r4, #0 - bl ChangeObjPalette - adds r0, r4, #0 - bl sub_0807DD64 - ldrb r1, [r4, #0xb] - adds r1, #2 - adds r0, r4, #0 - bl InitializeAnimation - adds r0, r4, #0 - bl sub_08095754 - bl Random - movs r1, #6 - bl __modsi3 - movs r1, #0xde - lsls r1, r1, #1 - adds r0, r0, r1 - bl SoundReq - adds r1, r5, #0 - b _08095630 - .align 2, 0 -_08095590: .4byte gUnk_08122AE0 -_08095594: .4byte gUnk_08122AE8 -_08095598: - ldrh r0, [r4, #0x36] - subs r0, #1 - strh r0, [r4, #0x36] - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - movs r2, #0x10 - rsbs r2, r2, #0 - adds r1, r4, #0 - adds r1, #0x6e - cmp r0, r2 - bgt _08095630 - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] - strh r2, [r4, #0x36] - b _08095630 -_080955B8: - adds r5, r4, #0 - adds r5, #0x6c - ldrh r0, [r5] - adds r0, #1 - strh r0, [r5] - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - cmp r0, #0x40 - bls _080955CE - movs r0, #0x40 - strh r0, [r5] -_080955CE: - ldr r3, _0809561C @ =gSineTable - movs r2, #0x6e - adds r2, r2, r4 - mov ip, r2 - ldrb r0, [r2] - adds r0, #0x40 - lsls r0, r0, #1 - adds r0, r0, r3 - movs r2, #0 - ldrsh r1, [r0, r2] - ldrh r0, [r5] - lsls r0, r0, #8 - adds r2, r1, #0 - muls r2, r0, r2 - asrs r2, r2, #0x10 - strh r2, [r4, #0x2e] - mov r1, ip - ldrb r0, [r1] - lsls r0, r0, #1 - adds r0, r0, r3 - movs r3, #0 - ldrsh r1, [r0, r3] - ldrh r0, [r5] - lsls r0, r0, #7 - muls r1, r0, r1 - asrs r1, r1, #0x10 - strh r1, [r4, #0x32] - adds r0, r4, #0 - adds r0, #0x68 - ldrh r0, [r0] - adds r2, r2, r0 - strh r2, [r4, #0x2e] - adds r0, r4, #0 - adds r0, #0x6a - ldrh r0, [r0] - adds r1, r1, r0 - strh r1, [r4, #0x32] - mov r1, ip - b _08095630 - .align 2, 0 -_0809561C: .4byte gSineTable -_08095620: - movs r0, #0x24 - ldrsh r1, [r4, r0] - ldrb r2, [r4, #0x15] - adds r0, r4, #0 - bl sub_0806F62C -_0809562C: - adds r1, r4, #0 - adds r1, #0x6e -_08095630: - ldrb r0, [r1] - adds r0, #4 - strb r0, [r1] - ldrb r0, [r4, #0xd] - cmp r0, #0 - beq _0809564A - adds r0, r4, #0 - bl sub_080040A8 - cmp r0, #0 - bne _0809564A - bl DeleteThisEntity -_0809564A: - ldrb r1, [r4, #0x15] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0809565E - ldrb r1, [r4, #0x18] - movs r0, #0x41 - rsbs r0, r0, #0 - ands r0, r1 - b _08095664 -_0809565E: - ldrb r0, [r4, #0x18] - movs r1, #0x40 - orrs r0, r1 -_08095664: - strb r0, [r4, #0x18] - adds r0, r4, #0 - movs r1, #0 - bl ExecuteScriptForEntity - adds r0, r4, #0 - bl HandleEntity0x82Actions - adds r0, r4, #0 - bl GetNextFrame - pop {r4, r5, pc} - - thumb_func_start sub_0809567C -sub_0809567C: @ 0x0809567C - push {r4, lr} - adds r4, r0, #0 - movs r0, #3 - strb r0, [r4, #0xc] - movs r0, #1 - strb r0, [r4, #0xd] - movs r0, #0x80 - lsls r0, r0, #3 - strh r0, [r4, #0x24] - adds r0, r4, #0 - adds r0, #0x68 - movs r2, #0 - ldrsh r1, [r0, r2] - lsls r1, r1, #0x10 - ldr r0, [r4, #0x2c] - subs r0, r0, r1 - adds r1, r4, #0 - adds r1, #0x6a - movs r3, #0 - ldrsh r2, [r1, r3] - lsls r2, r2, #0x10 - ldr r1, [r4, #0x30] - subs r1, r1, r2 - bl sub_080045DA - strb r0, [r4, #0x15] - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080956B4 -sub_080956B4: @ 0x080956B4 - push {r4, r5, r6, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xc] - cmp r0, #0 - bne _080956E2 - adds r0, #1 - strb r0, [r5, #0xc] - adds r0, r5, #0 - movs r1, #0 - bl InitializeAnimation - adds r4, r5, #0 - adds r4, #0x68 - ldrh r2, [r5, #0x2e] - ldrh r1, [r5, #0x32] - movs r0, #7 -_080956D4: - strh r2, [r4] - adds r4, #2 - strh r1, [r4] - adds r4, #2 - subs r0, #1 - cmp r0, #0 - bge _080956D4 -_080956E2: - adds r0, r5, #0 - bl GetNextFrame - ldrb r0, [r5, #0xb] - ldr r1, _08095724 @ =gScreenTransition - ldr r1, [r1] - adds r0, r0, r1 - movs r1, #0xf - ands r0, r1 - cmp r0, #0 - bne _080956FE - adds r0, r5, #0 - bl sub_080957B4 -_080956FE: - ldr r6, [r5, #0x50] - cmp r6, #0 - beq _08095728 - ldrb r1, [r6, #0x18] - lsls r1, r1, #0x1e - lsrs r1, r1, #0x1e - ldrb r2, [r5, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5, #0x18] - ldr r0, [r6, #4] - cmp r0, #0 - bne _0809572C - bl DeleteThisEntity - b _0809572C - .align 2, 0 -_08095724: .4byte gScreenTransition -_08095728: - bl DeleteThisEntity -_0809572C: - adds r4, r5, #0 - adds r4, #0x68 - adds r0, r5, #0 - adds r0, #0x6c - adds r1, r4, #0 - movs r2, #0x1c - bl MemCopy - ldrh r0, [r4, #0x14] - strh r0, [r5, #0x2e] - ldrh r0, [r4, #0x16] - strh r0, [r5, #0x32] - ldrh r0, [r6, #0x36] - strh r0, [r5, #0x36] - ldrh r0, [r6, #0x2e] - strh r0, [r4, #0x1c] - ldrh r0, [r6, #0x32] - strh r0, [r4, #0x1e] - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_08095754 -sub_08095754: @ 0x08095754 - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r2, [r5, #0xb] - movs r0, #0x6a - movs r1, #0xf - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _0809577A - str r5, [r4, #0x50] - adds r0, r5, #0 - adds r1, r4, #0 - bl CopyPosition - adds r0, r5, #0 - adds r1, r4, #0 - bl ResolveEntityBelow -_0809577A: - pop {r4, r5, pc} - - thumb_func_start sub_0809577C -sub_0809577C: @ 0x0809577C - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _08095796 - adds r0, #1 - strb r0, [r4, #0xc] - ldr r0, _080957B0 @ =0x0000FFF0 - strh r0, [r4, #0x36] - adds r0, r4, #0 - movs r1, #1 - bl InitializeAnimation -_08095796: - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _080957AE - bl DeleteThisEntity -_080957AE: - pop {r4, pc} - .align 2, 0 -_080957B0: .4byte 0x0000FFF0 - - thumb_func_start sub_080957B4 -sub_080957B4: @ 0x080957B4 - push {r4, r5, lr} - adds r5, r0, #0 - movs r0, #0x6a - movs r1, #0x10 - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _080957DA - str r5, [r4, #0x50] - adds r0, r5, #0 - adds r1, r4, #0 - bl CopyPosition - adds r0, r5, #0 - adds r1, r4, #0 - bl ResolveEntityBelow -_080957DA: - pop {r4, r5, pc} - - thumb_func_start sub_080957DC -sub_080957DC: @ 0x080957DC - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _080957F8 - adds r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - bl sub_0807DD64 - adds r0, r4, #0 - movs r1, #0 - bl InitAnimationForceUpdate -_080957F8: - adds r0, r4, #0 - movs r1, #0 - bl ExecuteScriptForEntity - adds r0, r4, #0 - bl HandleEntity0x82Actions - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08095810 -sub_08095810: @ 0x08095810 - push {r4, r5, lr} - adds r5, r0, #0 - movs r0, #0x6a - movs r1, #0x11 - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _08095844 - str r5, [r4, #0x50] - adds r0, r5, #0 - adds r1, r4, #0 - bl CopyPosition - adds r0, r5, #0 - adds r1, r4, #0 - bl ResolveEntityOnTop - ldr r1, _08095848 @ =script_08011940 - adds r0, r4, #0 - bl StartCutscene - adds r1, r4, #0 - adds r1, #0x84 - str r0, [r1] -_08095844: - pop {r4, r5, pc} - .align 2, 0 -_08095848: .4byte script_08011940 - - thumb_func_start sub_0809584C -sub_0809584C: @ 0x0809584C - push {r4, r5, lr} - adds r5, r0, #0 - adds r0, #0x45 - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0 - beq _0809586C - ldr r0, _080958D0 @ =gUnk_020342F8 - subs r1, #1 - bl ReadBit - cmp r0, #0 - bne _0809586C - bl DeleteThisEntity -_0809586C: - ldrb r0, [r5, #0xe] - cmp r0, #0 - beq _08095880 - ldrb r0, [r5, #0xb] - bl CheckKinstoneFused - cmp r0, #0 - beq _08095880 - bl DeleteThisEntity -_08095880: - ldrb r0, [r5, #0xc] - cmp r0, #0 - bne _080958B2 - adds r0, #1 - strb r0, [r5, #0xc] - adds r1, r5, #0 - adds r1, #0x38 - movs r0, #2 - strb r0, [r1] - adds r0, r5, #0 - bl UpdateSpriteForCollisionLayer - ldr r1, _080958D4 @ =gUnk_08114F30 - ldrb r2, [r5, #0x19] - lsrs r0, r2, #6 - adds r0, r0, r1 - ldrb r1, [r0] - lsls r1, r1, #6 - movs r0, #0x3f - ands r0, r2 - orrs r0, r1 - strb r0, [r5, #0x19] - adds r0, r5, #0 - bl sub_0807DD64 -_080958B2: - adds r0, r5, #0 - movs r1, #0 - bl ExecuteScriptForEntity - adds r0, r5, #0 - bl HandleEntity0x82Actions - ldrb r4, [r5, #0xa] - movs r0, #0x5c - strb r0, [r5, #0xa] - adds r0, r5, #0 - bl sub_08080CB4 - strb r4, [r5, #0xa] - pop {r4, r5, pc} - .align 2, 0 -_080958D0: .4byte gUnk_020342F8 -_080958D4: .4byte gUnk_08114F30 - - thumb_func_start sub_080958D8 -sub_080958D8: @ 0x080958D8 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _080958EC - adds r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - bl sub_0807DD64 -_080958EC: - adds r0, r4, #0 - movs r1, #0 - bl ExecuteScriptForEntity - adds r0, r4, #0 - bl HandleEntity0x82Actions - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _08095914 - adds r0, r4, #0 - bl sub_08095954 -_08095914: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08095918 -sub_08095918: @ 0x08095918 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0809593C - adds r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #6 - bl SetDefaultPriority - adds r0, r4, #0 - bl sub_0807DD64 - adds r0, r4, #0 - movs r1, #0 - bl InitializeAnimation -_0809593C: - adds r0, r4, #0 - movs r1, #0 - bl ExecuteScriptForEntity - adds r0, r4, #0 - bl HandleEntity0x82Actions - adds r0, r4, #0 - bl GetNextFrame - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08095954 -sub_08095954: @ 0x08095954 - push {r4, r5, lr} - adds r5, r0, #0 - movs r0, #0x6a - movs r1, #0x14 - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _080959B8 - str r5, [r4, #0x50] - ldrb r0, [r5, #0x14] - ldr r1, _080959AC @ =gUnk_08122AF8 - adds r0, r0, r1 - movs r2, #0 - ldrsb r2, [r0, r2] - lsls r2, r2, #0x10 - movs r3, #1 - ldrsb r3, [r0, r3] - lsls r3, r3, #0x10 - adds r0, r5, #0 - adds r1, r4, #0 - bl PositionRelative - ldr r0, _080959B0 @ =0x0000FFFD - strh r0, [r4, #0x36] - ldr r1, _080959B4 @ =script_08012C48 - adds r0, r4, #0 - bl StartCutscene - adds r1, r4, #0 - adds r1, #0x84 - str r0, [r1] - movs r0, #0x92 - lsls r0, r0, #1 - bl EnqueueSFX - adds r2, r5, #0 - adds r2, #0x5a - ldrb r1, [r2] - movs r0, #0xfe - ands r0, r1 - strb r0, [r2] - b _080959C4 - .align 2, 0 -_080959AC: .4byte gUnk_08122AF8 -_080959B0: .4byte 0x0000FFFD -_080959B4: .4byte script_08012C48 -_080959B8: - ldr r0, _080959C8 @ =gActiveScriptInfo - ldr r1, [r0] - movs r2, #0x80 - lsls r2, r2, #1 - orrs r1, r2 - str r1, [r0] -_080959C4: - pop {r4, r5, pc} - .align 2, 0 -_080959C8: .4byte gActiveScriptInfo - - thumb_func_start sub_080959CC -sub_080959CC: @ 0x080959CC - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _080959F2 - adds r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - movs r1, #3 - bl SetDefaultPriority - adds r0, r4, #0 - bl sub_0807DD64 -_080959F2: - adds r0, r4, #0 - movs r1, #0 - bl ExecuteScriptForEntity - adds r0, r4, #0 - bl HandleEntity0x82Actions - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x81 - rsbs r0, r0, #0 - ands r1, r0 - adds r0, r4, #0 - bl sub_08095D30 - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08095A1C -sub_08095A1C: @ 0x08095A1C - push {r4, r5, lr} - adds r5, r1, #0 - movs r0, #0x6a - movs r1, #0x16 - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _08095A5E - ldr r1, _08095A60 @ =gRoomControls - ldrh r0, [r1, #6] - adds r0, #0xe8 - strh r0, [r4, #0x2e] - movs r2, #0x9c - lsls r2, r2, #1 - adds r0, r2, #0 - ldrh r1, [r1, #8] - adds r0, r0, r1 - strh r0, [r4, #0x32] - ldr r0, _08095A64 @ =0x0000FFFC - strh r0, [r4, #0x36] - adds r1, r4, #0 - adds r1, #0x38 - movs r0, #2 - strb r0, [r1] - ldr r1, [r5, #4] - adds r0, r4, #0 - bl StartCutscene - adds r1, r4, #0 - adds r1, #0x84 - str r0, [r1] -_08095A5E: - pop {r4, r5, pc} - .align 2, 0 -_08095A60: .4byte gRoomControls -_08095A64: .4byte 0x0000FFFC - - thumb_func_start sub_08095A68 -sub_08095A68: @ 0x08095A68 - push {lr} - sub sp, #4 - movs r0, #0 - str r0, [sp] - movs r0, #6 - movs r1, #0x6a - movs r2, #6 - movs r3, #0x16 - bl FindEntity - adds r1, r0, #0 - cmp r1, #0 - beq _08095A86 - movs r0, #0xff - strb r0, [r1, #0xc] -_08095A86: - add sp, #4 - pop {pc} - .align 2, 0 - - thumb_func_start sub_08095A8C -sub_08095A8C: @ 0x08095A8C - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #5 - bhi _08095B44 - lsls r0, r0, #2 - ldr r1, _08095AA0 @ =_08095AA4 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08095AA0: .4byte _08095AA4 -_08095AA4: @ jump table - .4byte _08095ABC @ case 0 - .4byte _08095ACC @ case 1 - .4byte _08095ADC @ case 2 - .4byte _08095AE6 @ case 3 - .4byte _08095B12 @ case 4 - .4byte _08095B1C @ case 5 -_08095ABC: - ldrb r0, [r4, #0xc] - adds r0, #1 - movs r1, #0 - strb r0, [r4, #0xc] - strb r1, [r4, #0x1e] - adds r0, r4, #0 - bl sub_0807DD64 -_08095ACC: - adds r0, r4, #0 - movs r1, #0 - bl ExecuteScriptForEntity - adds r0, r4, #0 - bl HandleEntity0x82Actions - b _08095B44 -_08095ADC: - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] - movs r0, #0x78 - strb r0, [r4, #0xe] -_08095AE6: - ldrb r1, [r4, #0x18] - lsls r0, r1, #0x1e - lsrs r0, r0, #0x1e - movs r5, #1 - eors r0, r5 - movs r3, #4 - rsbs r3, r3, #0 - adds r2, r3, #0 - ands r2, r1 - orrs r2, r0 - strb r2, [r4, #0x18] - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08095B44 - movs r0, #1 - strb r5, [r4, #0xc] - ands r2, r3 - orrs r2, r0 - b _08095B42 -_08095B12: - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] - movs r0, #0x78 - strb r0, [r4, #0xe] -_08095B1C: - ldrb r1, [r4, #0x18] - lsls r0, r1, #0x1e - lsrs r0, r0, #0x1e - movs r5, #1 - eors r0, r5 - movs r3, #4 - rsbs r3, r3, #0 - adds r2, r3, #0 - ands r2, r1 - orrs r2, r0 - strb r2, [r4, #0x18] - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08095B44 - strb r5, [r4, #0xc] - ands r2, r3 -_08095B42: - strb r2, [r4, #0x18] -_08095B44: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08095B48 -sub_08095B48: @ 0x08095B48 - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xc] - cmp r0, #0 - bne _08095B78 - adds r0, #1 - strb r0, [r5, #0xc] - adds r1, r5, #0 - adds r1, #0x38 - movs r0, #2 - strb r0, [r1] - adds r0, r5, #0 - bl UpdateSpriteForCollisionLayer - ldr r1, _08095BA8 @ =gUnk_08114F30 - ldrb r2, [r5, #0x19] - lsrs r0, r2, #6 - adds r0, r0, r1 - ldrb r1, [r0] - lsls r1, r1, #6 - movs r0, #0x3f - ands r0, r2 - orrs r0, r1 - strb r0, [r5, #0x19] -_08095B78: - ldrb r0, [r5, #0x18] - movs r4, #4 - rsbs r4, r4, #0 - adds r1, r4, #0 - ands r1, r0 - strb r1, [r5, #0x18] - ldr r2, [r5, #0x50] - cmp r2, #0 - beq _08095BCE - adds r0, r2, #0 - adds r0, #0x5a - ldrb r3, [r0] - movs r0, #0x40 - ands r0, r3 - cmp r0, #0 - bne _08095BAC - movs r0, #0x80 - ands r0, r3 - cmp r0, #0 - beq _08095BCE - bl DeleteThisEntity - b _08095BDC - .align 2, 0 -_08095BA8: .4byte gUnk_08114F30 -_08095BAC: - adds r0, r1, #0 - ands r0, r4 - movs r1, #1 - orrs r0, r1 - strb r0, [r5, #0x18] - ldrh r0, [r2, #0x12] - ldrb r1, [r2, #0x1e] - bl GetSpriteSubEntryOffsetDataPointer - ldrb r1, [r0] - adds r2, r5, #0 - adds r2, #0x62 - strb r1, [r2] - ldrb r0, [r0, #1] - adds r1, r5, #0 - adds r1, #0x63 - strb r0, [r1] -_08095BCE: - ldrb r4, [r5, #0xa] - ldrb r0, [r5, #0xb] - strb r0, [r5, #0xa] - adds r0, r5, #0 - bl sub_08080CB4 - strb r4, [r5, #0xa] -_08095BDC: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08095BE0 -sub_08095BE0: @ 0x08095BE0 - push {r4, lr} - adds r4, r0, #0 - adds r2, r1, #0 - movs r0, #0x6a - movs r1, #0x18 - bl CreateObject - adds r1, r0, #0 - cmp r1, #0 - beq _08095BFC - str r4, [r1, #0x50] - adds r0, r4, #0 - bl CopyPosition -_08095BFC: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08095C00 -sub_08095C00: @ 0x08095C00 - push {lr} - adds r2, r0, #0 - ldrb r1, [r2, #0xc] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08095C14 - bl DeleteThisEntity - b _08095C46 -_08095C14: - ldr r3, [r2, #0x50] - cmp r3, #0 - beq _08095C46 - adds r1, r2, #0 - adds r1, #0x60 - movs r0, #0xe8 - strh r0, [r1] - ldrb r0, [r3, #0x18] - lsls r0, r0, #0x1e - lsrs r0, r0, #0x1e - cmp r0, #1 - bne _08095C38 - ldrb r1, [r2, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2, #0x18] - b _08095C46 -_08095C38: - ldrb r0, [r2, #0x18] - movs r1, #4 - rsbs r1, r1, #0 - ands r1, r0 - movs r0, #1 - orrs r1, r0 - strb r1, [r2, #0x18] -_08095C46: - pop {pc} - - thumb_func_start sub_08095C48 -sub_08095C48: @ 0x08095C48 - push {r4, lr} - adds r4, r0, #0 - movs r0, #0x6a - movs r1, #0x19 - movs r2, #0 - bl CreateObject - adds r1, r0, #0 - cmp r1, #0 - beq _08095C66 - str r1, [r4, #0x54] - str r4, [r1, #0x50] - adds r0, r4, #0 - bl CopyPosition -_08095C66: - pop {r4, pc} - - thumb_func_start sub_08095C68 -sub_08095C68: @ 0x08095C68 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _08095C80 - adds r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x1e] - ldrh r2, [r4, #0x12] - adds r0, r4, #0 - bl sub_080042D0 -_08095C80: - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _08095CAA - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #7 - bhi _08095CA4 - ldrb r2, [r4, #0x18] - lsls r1, r2, #0x1e - lsrs r1, r1, #0x1e - movs r0, #1 - eors r1, r0 - subs r0, #5 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x18] -_08095CA4: - ldrb r0, [r4, #0xe] - cmp r0, #0 - bne _08095CAE -_08095CAA: - bl DeleteThisEntity -_08095CAE: - pop {r4, pc} - - thumb_func_start sub_08095CB0 -sub_08095CB0: @ 0x08095CB0 - push {r4, r5, lr} - adds r5, r0, #0 - movs r0, #0x6a - movs r1, #0x1b - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _08095CDC - str r4, [r5, #0x54] - str r5, [r4, #0x50] - adds r0, r5, #0 - adds r1, r4, #0 - bl CopyPosition - movs r0, #0x10 - strb r0, [r4, #0xe] - ldrb r0, [r5, #0x1e] - strb r0, [r4, #0x1e] - ldrb r0, [r5, #0x1e] - strb r0, [r4, #0x1f] -_08095CDC: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08095CE0 -sub_08095CE0: @ 0x08095CE0 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _08095D06 - adds r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - movs r1, #6 - bl SetDefaultPriority - adds r0, r4, #0 - bl sub_0807DD64 -_08095D06: - adds r0, r4, #0 - movs r1, #0 - bl ExecuteScriptForEntity - adds r0, r4, #0 - bl HandleEntity0x82Actions - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x81 - rsbs r0, r0, #0 - ands r1, r0 - adds r0, r4, #0 - bl sub_08095D30 - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08095D30 -sub_08095D30: @ 0x08095D30 - push {lr} - adds r2, r0, #0 - adds r0, r1, #0 - cmp r0, #0 - beq _08095D4E - ldr r1, _08095D50 @ =gUnk_08122B00 - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r1, [r0] - movs r0, #0x81 - rsbs r0, r0, #0 - ands r1, r0 - adds r0, r2, #0 - bl ChangeObjPalette -_08095D4E: - pop {pc} - .align 2, 0 -_08095D50: .4byte gUnk_08122B00 - - thumb_func_start sub_08095D54 -sub_08095D54: @ 0x08095D54 - push {r4, r5, lr} - adds r5, r1, #0 - movs r0, #0x6a - movs r1, #0x1c - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _08095D86 - ldr r0, _08095D88 @ =gPlayerEntity - adds r1, r4, #0 - bl CopyPosition - adds r1, r4, #0 - adds r1, #0x38 - movs r0, #2 - strb r0, [r1] - ldr r1, [r5, #4] - adds r0, r4, #0 - bl StartCutscene - adds r1, r4, #0 - adds r1, #0x84 - str r0, [r1] -_08095D86: - pop {r4, r5, pc} - .align 2, 0 -_08095D88: .4byte gPlayerEntity - - thumb_func_start sub_08095D8C -sub_08095D8C: @ 0x08095D8C - push {r4, r5, r6, lr} - adds r5, r0, #0 - adds r6, r1, #0 - movs r0, #0x6a - movs r1, #0x1d - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _08095DB8 - adds r0, r5, #0 - adds r1, r4, #0 - bl CopyPosition - ldr r1, [r6, #4] - adds r0, r4, #0 - bl StartCutscene - adds r1, r4, #0 - adds r1, #0x84 - str r0, [r1] -_08095DB8: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_08095DBC -sub_08095DBC: @ 0x08095DBC - push {r4, r5, lr} - adds r4, r0, #0 - ldr r5, _08095DF0 @ =gActiveScriptInfo - ldr r0, [r5] - movs r1, #0x10 - ands r0, r1 - cmp r0, #0 - beq _08095DD0 - bl DeleteThisEntity -_08095DD0: - ldrb r0, [r4, #0xb] - cmp r0, #0 - bne _08095DF4 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _08095DE6 - adds r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - bl sub_0807DD64 -_08095DE6: - adds r0, r4, #0 - movs r1, #0 - bl ExecuteScriptForEntity - b _08095E74 - .align 2, 0 -_08095DF0: .4byte gActiveScriptInfo -_08095DF4: - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _08095E30 - adds r0, #1 - strb r0, [r4, #0xc] - 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 r0, r4, #0 - movs r1, #0x4b - bl InitializeAnimation - ldr r1, _08095E78 @ =gUnk_08114F30 - ldrb r2, [r4, #0x19] - lsrs r0, r2, #6 - adds r0, r0, r1 - ldrb r1, [r0] - lsls r1, r1, #6 - movs r0, #0x3f - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x19] - adds r0, r4, #0 - adds r1, r4, #0 - bl ResolveEntityOnTop -_08095E30: - ldrb r2, [r4, #0xb] - movs r0, #0x80 - ands r0, r2 - cmp r0, #0 - bne _08095E56 - ldr r0, [r5] - movs r1, #0x80 - lsls r1, r1, #0xa - ands r0, r1 - cmp r0, #0 - beq _08095E56 - movs r0, #0xff - strb r0, [r4, #0xb] - movs r0, #0x80 - lsls r0, r0, #0xb - str r0, [r4, #0x20] - movs r0, #0xc0 - lsls r0, r0, #8 - strh r0, [r4, #0x24] -_08095E56: - movs r0, #0x24 - ldrsh r1, [r4, r0] - adds r0, r4, #0 - bl sub_08003FC4 - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - bl sub_080040A8 - cmp r0, #0 - bne _08095E74 - bl DeleteThisEntity -_08095E74: - pop {r4, r5, pc} - .align 2, 0 -_08095E78: .4byte gUnk_08114F30 - - thumb_func_start sub_08095E7C -sub_08095E7C: @ 0x08095E7C - push {r4, r5, r6, lr} - adds r5, r0, #0 - adds r6, r1, #0 - movs r0, #0x6a - movs r1, #0x1e - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _08095EA8 - adds r0, r5, #0 - adds r1, r4, #0 - bl CopyPosition - ldr r1, [r6, #4] - adds r0, r4, #0 - bl StartCutscene - adds r1, r4, #0 - adds r1, #0x84 - str r0, [r1] -_08095EA8: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_08095EAC -sub_08095EAC: @ 0x08095EAC - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - mov sb, r0 - adds r4, r1, #0 - movs r0, #0x6a - movs r1, #0x1e - movs r2, #1 - bl CreateObject - adds r5, r0, #0 - cmp r5, #0 - beq _08095F2A - ldr r0, [r4, #4] - cmp r0, #0 - bne _08095EE0 - movs r7, #0x10 - movs r6, #0x1f - movs r0, #0x80 - lsls r0, r0, #7 - mov sl, r0 - movs r2, #0 - mov r8, r2 - b _08095F02 -_08095EE0: - movs r7, #8 - movs r6, #0xf - movs r0, #0x80 - lsls r0, r0, #0xb - mov sl, r0 - ldr r4, _08095F34 @ =gUnk_08122B0E - bl Random - movs r1, #7 - ands r1, r0 - lsls r1, r1, #1 - adds r1, r1, r4 - movs r0, #0 - ldrsh r2, [r1, r0] - mov r8, r2 - movs r0, #0xff - strb r0, [r5, #0xb] -_08095F02: - bl Random - adds r4, r0, #0 - ands r4, r6 - subs r4, r7, r4 - bl Random - ands r6, r0 - subs r3, r7, r6 - lsls r4, r4, #0x10 - lsls r3, r3, #0x10 - mov r0, sb - adds r1, r5, #0 - adds r2, r4, #0 - bl PositionRelative - mov r2, sl - str r2, [r5, #0x20] - mov r0, r8 - strh r0, [r5, #0x24] -_08095F2A: - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08095F34: .4byte gUnk_08122B0E - - thumb_func_start sub_08095F38 -sub_08095F38: @ 0x08095F38 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _08095FC2 - movs r0, #1 - strb r0, [r4, #0xc] - movs r0, #0xff - strb r0, [r4, #0x1e] - ldrb r0, [r4, #0xb] - cmp r0, #4 - beq _08095F64 - cmp r0, #4 - bgt _08095F5A - cmp r0, #3 - beq _08095F60 - b _08095F6A -_08095F5A: - cmp r0, #6 - beq _08095F68 - b _08095F6A -_08095F60: - movs r1, #0 - b _08095F6A -_08095F64: - movs r1, #1 - b _08095F6A -_08095F68: - movs r1, #4 -_08095F6A: - adds r0, r4, #0 - bl ChangeObjPalette - ldr r0, _08095F90 @ =gPlayerEntity - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - bne _08095F98 - adds r1, r4, #0 - adds r1, #0x84 - ldr r0, _08095F94 @ =0x000008BF - str r0, [r1] - movs r0, #0x34 - strb r0, [r4, #0xe] - movs r0, #0xb5 - b _08095FA6 - .align 2, 0 -_08095F90: .4byte gPlayerEntity -_08095F94: .4byte 0x000008BF -_08095F98: - adds r1, r4, #0 - adds r1, #0x84 - ldr r0, _08096020 @ =0x000008E3 - str r0, [r1] - movs r0, #0x55 - strb r0, [r4, #0xe] - movs r0, #0xd6 -_08095FA6: - strb r0, [r4, #0xf] - ldr r0, _08096024 @ =gPlayerEntity - adds r1, r4, #0 - bl CopyPosition - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #3 - orrs r0, r1 - strb r0, [r2] -_08095FC2: - ldr r5, _08096024 @ =gPlayerEntity - adds r2, r5, #0 - adds r2, #0x5a - ldrb r1, [r2] - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - beq _08095FE0 - movs r0, #0xef - ands r0, r1 - strb r0, [r2] - movs r0, #0xea - lsls r0, r0, #1 - bl SoundReq -_08095FE0: - ldrh r0, [r5, #0x12] - adds r1, r4, #0 - adds r1, #0x84 - ldr r2, [r1] - lsrs r1, r2, #8 - cmp r0, r1 - bne _08095FFC - adds r0, r5, #0 - adds r0, #0x58 - ldrb r1, [r0] - lsls r0, r2, #0x18 - lsrs r0, r0, #0x18 - cmp r1, r0 - beq _08096000 -_08095FFC: - bl DeleteThisEntity -_08096000: - ldr r0, _08096024 @ =gPlayerEntity - ldrb r0, [r0, #0x1e] - ldrb r1, [r4, #0xe] - subs r0, r0, r1 - ldrb r1, [r4, #0xf] - adds r0, r0, r1 - ldrb r1, [r4, #0x1e] - cmp r0, r1 - beq _0809601E - strb r0, [r4, #0x1e] - ldrb r1, [r4, #0x1e] - ldrh r2, [r4, #0x12] - adds r0, r4, #0 - bl sub_080042D0 -_0809601E: - pop {r4, r5, pc} - .align 2, 0 -_08096020: .4byte 0x000008E3 -_08096024: .4byte gPlayerEntity - - thumb_func_start sub_08096028 -sub_08096028: @ 0x08096028 - push {r4, r5, lr} - movs r4, #6 - movs r5, #0xc0 - lsls r5, r5, #2 - adds r0, r5, #0 - movs r1, #0x7b - bl CheckLocalFlagByBank - cmp r0, #0 - bne _0809603E - movs r4, #4 -_0809603E: - adds r0, r5, #0 - movs r1, #0x7a - bl CheckLocalFlagByBank - cmp r0, #0 - bne _0809604C - movs r4, #3 -_0809604C: - movs r0, #0x6a - movs r1, #0x1f - adds r2, r4, #0 - bl CreateObject - pop {r4, r5, pc} - - thumb_func_start sub_08096058 -sub_08096058: @ 0x08096058 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0809606C - adds r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - bl sub_0807DD64 -_0809606C: - adds r0, r4, #0 - movs r1, #0 - bl ExecuteScriptForEntity - adds r0, r4, #0 - bl HandleEntity0x82Actions - adds r0, r4, #0 - bl GetNextFrame - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08096084 -sub_08096084: @ 0x08096084 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _080960A0 - adds r0, #1 - strb r0, [r4, #0xc] - adds r0, r4, #0 - bl sub_0807DD64 - ldrb r1, [r4, #0xb] - adds r0, r4, #0 - bl InitializeAnimation -_080960A0: - adds r0, r4, #0 - movs r1, #0 - bl ExecuteScriptForEntity - adds r0, r4, #0 - bl HandleEntity0x82Actions - adds r0, r4, #0 - bl GetNextFrame - ldr r0, [r4, #0x50] - cmp r0, #0 - beq _080960C0 - adds r1, r4, #0 - bl CopyPosition -_080960C0: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080960C4 -sub_080960C4: @ 0x080960C4 - push {r4, r5, r6, lr} - adds r5, r0, #0 - adds r6, r1, #0 - movs r0, #0x6a - movs r1, #0x23 - movs r2, #0x49 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _08096110 - str r5, [r4, #0x50] - adds r0, r5, #0 - adds r1, r4, #0 - bl CopyPosition - ldr r1, _08096160 @ =gUnk_08114F34 - ldrb r0, [r5, #0x19] - lsrs r0, r0, #6 - adds r0, r0, r1 - ldrb r1, [r0] - lsls r1, r1, #6 - ldrb r2, [r4, #0x19] - movs r0, #0x3f - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x19] - adds r0, r5, #0 - adds r1, r4, #0 - bl ResolveEntityBelow - ldr r1, [r6, #4] - adds r0, r4, #0 - bl StartCutscene - adds r1, r4, #0 - adds r1, #0x84 - str r0, [r1] -_08096110: - movs r0, #0x6a - movs r1, #0x24 - movs r2, #0x4a - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _0809615E - str r5, [r4, #0x50] - adds r0, r5, #0 - adds r1, r4, #0 - bl CopyPosition - ldr r1, _08096164 @ =gUnk_08114F30 - ldrb r0, [r5, #0x19] - lsrs r0, r0, #6 - adds r0, r0, r1 - ldrb r1, [r0] - lsls r1, r1, #6 - ldrb r2, [r4, #0x19] - movs r0, #0x3f - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x19] - adds r0, r5, #0 - adds r1, r4, #0 - bl ResolveEntityOnTop - adds r1, r4, #0 - adds r1, #0x38 - movs r0, #2 - strb r0, [r1] - ldr r1, [r6, #4] - adds r0, r4, #0 - bl StartCutscene - adds r1, r4, #0 - adds r1, #0x84 - str r0, [r1] -_0809615E: - pop {r4, r5, r6, pc} - .align 2, 0 -_08096160: .4byte gUnk_08114F34 -_08096164: .4byte gUnk_08114F30 - - thumb_func_start sub_08096168 -sub_08096168: @ 0x08096168 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0809618C - adds r0, #1 - strb r0, [r4, #0xc] - 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 r0, r4, #0 - movs r1, #0x4b - bl InitializeAnimation -_0809618C: - adds r0, r4, #0 - bl GetNextFrame - movs r0, #0x24 - ldrsh r1, [r4, r0] - ldrb r2, [r4, #0x15] - adds r0, r4, #0 - bl sub_0806F62C - adds r0, r4, #0 - bl sub_080040A8 - cmp r0, #0 - bne _080961AC - bl DeleteThisEntity -_080961AC: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080961B0 -sub_080961B0: @ 0x080961B0 - push {r4, r5, r6, r7, lr} - adds r7, r0, #0 - movs r5, #0 - ldr r6, _080961F0 @ =gUnk_08122B1E -_080961B8: - movs r0, #0x6a - movs r1, #0x25 - movs r2, #0 - bl CreateObject - adds r4, r0, #0 - cmp r4, #0 - beq _080961E6 - adds r0, r7, #0 - adds r1, r4, #0 - bl CopyPosition - lsls r0, r5, #5 - strb r0, [r4, #0x15] - bl Random - movs r2, #0xf8 - lsls r2, r2, #1 - adds r1, r2, #0 - ands r0, r1 - ldrh r1, [r6] - adds r0, r0, r1 - strh r0, [r4, #0x24] -_080961E6: - adds r6, #2 - adds r5, #1 - cmp r5, #7 - ble _080961B8 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080961F0: .4byte gUnk_08122B1E - - thumb_func_start sub_080961F4 -sub_080961F4: @ 0x080961F4 - ldrb r2, [r0, #0x18] - movs r1, #4 - rsbs r1, r1, #0 - ands r1, r2 - movs r2, #1 - orrs r1, r2 - strb r1, [r0, #0x18] - movs r1, #0 - strb r1, [r0, #0x1e] - bx lr - - thumb_func_start sub_08096208 -sub_08096208: @ 0x08096208 - push {r4, r5, lr} - adds r5, r0, #0 - lsls r1, r1, #1 - ldr r0, _08096238 @ =gUnk_08122B2E - adds r4, r1, r0 - movs r0, #0x6a - movs r1, #0x26 - movs r2, #0 - bl CreateObject - adds r1, r0, #0 - cmp r1, #0 - beq _08096234 - movs r2, #0 - ldrsb r2, [r4, r2] - lsls r2, r2, #0x10 - movs r3, #1 - ldrsb r3, [r4, r3] - lsls r3, r3, #0x10 - adds r0, r5, #0 - bl PositionRelative -_08096234: - pop {r4, r5, pc} - .align 2, 0 -_08096238: .4byte gUnk_08122B2E - - thumb_func_start sub_0809623C -sub_0809623C: @ 0x0809623C - push {r4, lr} - adds r4, r0, #0 - movs r0, #0x6a - movs r1, #0x27 - movs r2, #0 - bl CreateObject - adds r1, r0, #0 - cmp r1, #0 - beq _0809625A - ldr r3, _0809625C @ =0xFFF00000 - adds r0, r4, #0 - movs r2, #0 - bl PositionRelative -_0809625A: - pop {r4, pc} - .align 2, 0 -_0809625C: .4byte 0xFFF00000 - - thumb_func_start sub_08096260 -sub_08096260: @ 0x08096260 - push {r4, lr} - adds r4, r0, #0 - movs r0, #0x6a - movs r1, #0x28 - movs r2, #0 - bl CreateObject - adds r1, r0, #0 - cmp r1, #0 - beq _0809627E - ldr r3, _08096280 @ =0xFFF00000 - adds r0, r4, #0 - movs r2, #0 - bl PositionRelative -_0809627E: - pop {r4, pc} - .align 2, 0 -_08096280: .4byte 0xFFF00000 - - thumb_func_start sub_08096284 -sub_08096284: @ 0x08096284 - push {lr} - movs r1, #0xd - bl sub_0809629C - pop {pc} - .align 2, 0 - - thumb_func_start sub_08096290 -sub_08096290: @ 0x08096290 - push {lr} - movs r1, #0xe - bl sub_0809629C - pop {pc} - .align 2, 0 - - thumb_func_start sub_0809629C -sub_0809629C: @ 0x0809629C - push {r4, r5, r6, lr} - adds r5, r0, #0 - adds r6, r1, #0 - ldrb r0, [r5, #0xc] - cmp r0, #0 - bne _080962B2 - movs r0, #1 - strb r0, [r5, #0xc] - adds r0, r5, #0 - bl sub_0807DD64 -_080962B2: - adds r0, r5, #0 - movs r1, #0 - bl ExecuteScriptForEntity - adds r0, r5, #0 - bl HandleEntity0x82Actions - movs r1, #0x80 - lsls r1, r1, #5 - adds r0, r5, #0 - bl sub_08003FC4 - ldrb r4, [r5, #0xa] - strb r6, [r5, #0xa] - adds r0, r5, #0 - bl sub_08080CB4 - strb r4, [r5, #0xa] - pop {r4, r5, r6, pc} - - thumb_func_start sub_080962D8 -sub_080962D8: @ 0x080962D8 - push {lr} - movs r1, #0x80 - lsls r1, r1, #1 - movs r0, #6 - bl DoFade - pop {pc} - .align 2, 0 - - thumb_func_start sub_080962E8 -sub_080962E8: @ 0x080962E8 - push {lr} - movs r1, #0x80 - lsls r1, r1, #1 - movs r0, #7 - bl DoFade - pop {pc} - .align 2, 0 - - thumb_func_start sub_080962F8 -sub_080962F8: @ 0x080962F8 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r4, [r1, #4] - lsls r4, r4, #4 - ldr r0, _08096318 @ =gUnk_08122B3C - adds r4, r4, r0 - ldrb r2, [r4, #0xc] - adds r3, r4, #0 - adds r3, #8 - adds r0, r5, #0 - movs r1, #1 - bl sub_08078850 - str r4, [r5, #0x48] - pop {r4, r5, pc} - .align 2, 0 -_08096318: .4byte gUnk_08122B3C diff --git a/data/const/object/object6A.s b/data/const/object/object6A.s index 5481c8e1..d2d186f0 100644 --- a/data/const/object/object6A.s +++ b/data/const/object/object6A.s @@ -4,51 +4,6 @@ .section .rodata .align 2 -gUnk_08122A34:: @ 08122A34 - .4byte sub_08094A5C - .4byte sub_08094A90 - .4byte sub_08094C30 - .4byte sub_08094C88 - .4byte sub_08094D94 - .4byte sub_08094E30 - .4byte sub_08094FA8 - .4byte sub_08095088 - .4byte sub_08095120 - .4byte sub_08095188 - .4byte sub_080951C4 - .4byte sub_08095288 - .4byte sub_080953A4 - .4byte sub_080953A4 - .4byte sub_080954DC - .4byte sub_080956B4 - .4byte sub_0809577C - .4byte sub_080957DC - .4byte sub_0809584C - .4byte sub_080958D8 - .4byte sub_08095918 - .4byte sub_08094C88 - .4byte sub_080959CC - .4byte sub_08095A8C - .4byte sub_08095B48 - .4byte sub_08095C00 - .4byte sub_080953A4 - .4byte sub_08095C68 - .4byte sub_08095CE0 - .4byte sub_08095CE0 - .4byte sub_08095DBC - .4byte sub_08095F38 - .4byte sub_08096058 - .4byte sub_08096058 - .4byte sub_08094A90 - .4byte sub_08096084 - .4byte sub_08096084 - .4byte sub_08096168 - .4byte sub_080961F4 - .4byte sub_080961F4 - .4byte sub_080961F4 - .4byte sub_08096284 - .4byte sub_08096290 - gUnk_08122AE0:: @ 08122AE0 .incbin "object6A/gUnk_08122AE0.bin" diff --git a/include/createObject.h b/include/createObject.h deleted file mode 100644 index 19efbf38..00000000 --- a/include/createObject.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef CREATEOBJECT_H -#define CREATEOBJECT_H - -#include "entity.h" - -// maybe a dedicated (create)Effect.h/c -void CreateDust(Entity* parent); -void CreateDustSmall(Entity* parent); - -#endif // CREATEOBJECT_H diff --git a/include/object.h b/include/object.h index 20515a6e..d7256397 100644 --- a/include/object.h +++ b/include/object.h @@ -21,6 +21,9 @@ extern void sub_0808C650(Entity*, u32); extern u32 sub_0808C67C(void); extern void sub_0808C688(void); +void CreateDust(Entity* parent); +void CreateDustSmall(Entity* parent); + typedef enum { GROUND_ITEM, DEATH_FX, diff --git a/include/script.h b/include/script.h index a251d2d5..9dd1f116 100644 --- a/include/script.h +++ b/include/script.h @@ -19,6 +19,15 @@ typedef struct ScriptExecutionContext { union SplitWord y; } ScriptExecutionContext; +typedef struct { + u32 unk_00; + u16 commandIndex; + u8 commandSize; + u8 flags; + u8 unk_08; +} struct_02033280; +extern struct_02033280 gActiveScriptInfo; + void ExecuteScript(Entity* entity, ScriptExecutionContext* context); extern u32 GetNextScriptCommandHalfword(u16*); diff --git a/include/structures.h b/include/structures.h index 2073f1b0..c8843e00 100644 --- a/include/structures.h +++ b/include/structures.h @@ -94,15 +94,6 @@ typedef struct { } struct_02024490; extern struct_02024490 gGFXSlots; -typedef struct { - u32 unk_00; - u16 commandIndex; - u8 commandSize; - u8 flags; - u8 unk_08; -} struct_02033280; -extern struct_02033280 gActiveScriptInfo; - typedef struct { u16 unk_00; u8 unk_02[0xE]; diff --git a/linker.ld b/linker.ld index 852b72cf..6e10500c 100644 --- a/linker.ld +++ b/linker.ld @@ -805,7 +805,7 @@ SECTIONS { asm/object67.o(.text); asm/object68.o(.text); asm/object69.o(.text); - asm/object6A.o(.text); + src/object/object6A.o(.text); asm/crenalBeanSprout.o(.text); asm/minecartDoor.o(.text); asm/objectOnPillar.o(.text); @@ -1543,6 +1543,7 @@ SECTIONS { data/const/object/ladderHoleInBookshelf.o(.rodata); data/const/object/object67.o(.rodata); data/const/object/object68.o(.rodata); + src/object/object6A.o(.rodata); data/const/object/object6A.o(.rodata); data/animations/object/object6A.o(.rodata); data/const/object/crenalBeanSprout.o(.rodata); diff --git a/src/enemy/bobomb.c b/src/enemy/bobomb.c index 9a68209d..32e72b86 100644 --- a/src/enemy/bobomb.c +++ b/src/enemy/bobomb.c @@ -1,7 +1,6 @@ #include "asm.h" #include "audio.h" #include "enemy.h" -#include "createObject.h" #include "object.h" #include "functions.h" diff --git a/src/enemy/likeLike.c b/src/enemy/likeLike.c index 3bba9493..edab8bed 100644 --- a/src/enemy/likeLike.c +++ b/src/enemy/likeLike.c @@ -1,7 +1,7 @@ #include "enemy.h" #include "textbox.h" #include "save.h" -#include "createObject.h" +#include "object.h" #include "functions.h" extern bool32 ItemIsShield(u32); diff --git a/src/enemy/pesto.c b/src/enemy/pesto.c index 8694f4af..54f43381 100644 --- a/src/enemy/pesto.c +++ b/src/enemy/pesto.c @@ -1,5 +1,5 @@ #include "enemy.h" -#include "createObject.h" +#include "object.h" #include "overworld.h" #include "functions.h" #include "save.h" diff --git a/src/enemy/rupeeLike.c b/src/enemy/rupeeLike.c index 62853353..926648bf 100644 --- a/src/enemy/rupeeLike.c +++ b/src/enemy/rupeeLike.c @@ -6,7 +6,7 @@ #include "npc.h" #include "player.h" #include "save.h" -#include "createObject.h" +#include "object.h" #include "functions.h" extern void sub_080293DC(Entity*); diff --git a/src/enemy/vaatiBall.c b/src/enemy/vaatiBall.c index f6a4356f..c060f5b9 100644 --- a/src/enemy/vaatiBall.c +++ b/src/enemy/vaatiBall.c @@ -2,7 +2,7 @@ #include "enemy.h" #include "player.h" #include "screen.h" -#include "createObject.h" +#include "object.h" #include "audio.h" #include "functions.h" diff --git a/src/enemy/wisp.c b/src/enemy/wisp.c index b2c00736..111e4f04 100644 --- a/src/enemy/wisp.c +++ b/src/enemy/wisp.c @@ -1,6 +1,6 @@ #include "enemy.h" #include "save.h" -#include "createObject.h" +#include "object.h" #include "functions.h" extern void (*const gUnk_080CEB74[])(Entity*); diff --git a/src/npc/forestMinish.c b/src/npc/forestMinish.c index 912549bf..1ebe4176 100644 --- a/src/npc/forestMinish.c +++ b/src/npc/forestMinish.c @@ -1,5 +1,5 @@ #include "npc.h" -#include "createObject.h" +#include "object.h" #include "structures.h" #include "functions.h" diff --git a/src/npc/sturgeon.c b/src/npc/sturgeon.c index c5c28329..147382a8 100644 --- a/src/npc/sturgeon.c +++ b/src/npc/sturgeon.c @@ -2,7 +2,7 @@ #include "functions.h" #include "npc.h" #include "textbox.h" -#include "createObject.h" +#include "object.h" #include "flags.h" #include "script.h" diff --git a/src/object/object6A.c b/src/object/object6A.c new file mode 100644 index 00000000..baeccd92 --- /dev/null +++ b/src/object/object6A.c @@ -0,0 +1,1323 @@ +#define NENT_DEPRECATED +#include "object.h" +#include "area.h" +#include "script.h" +#include "textbox.h" +#include "functions.h" +#include "screen.h" + +extern u8 gUnk_08114F30[]; +extern u8 gUnk_08114F34[]; +extern u8 gUnk_08122AE0[]; +extern u16 gUnk_08122AE8[]; +extern s8 gUnk_08122AF8[]; +extern u16 gUnk_08122B00[]; +extern s16 gUnk_08122B0E[]; +extern u16 gUnk_08122B1E[]; +extern s8 gUnk_08122B2E[]; + +extern u16 script_0800AEDC; +extern u16 script_0801183C; +extern u16 script_08015B14; +extern u16 script_08011940; +extern u16 script_08012C48; + +typedef struct { + Entity base; + u16 px, py, pz; + u8 off; + u8 fill[0x14]; + void* ctx; +} Object6AEntity; + +typedef struct { + u16 arr[8]; + u8 filler[4]; + u16 my_x, my_y; + u8 fill[4]; + u16 parent_x, parent_y; +} Type15Vars; + +typedef struct { + Entity base; + Type15Vars vars; +} Object6AEntityType15; + +typedef struct { + Entity base; + u8 fill[0x1C]; + u32 anim; +} Type1F; + +typedef struct { + Hitbox hit; + u8 _8[4]; + u8 _c; +} HitboxCfg; +extern HitboxCfg gUnk_08122B3C[]; + +typedef void(Object6ATypeAction)(Object6AEntity*); + +Object6ATypeAction sub_08094A5C; +Object6ATypeAction sub_08094A90; +Object6ATypeAction sub_08094C30; +Object6ATypeAction sub_08094C88; +Object6ATypeAction sub_08094D94; +Object6ATypeAction sub_08094E30; +Object6ATypeAction sub_08094FA8; +Object6ATypeAction sub_08095088; +Object6ATypeAction sub_08095120; +Object6ATypeAction sub_08095188; +Object6ATypeAction sub_080951C4; +Object6ATypeAction sub_08095288; +Object6ATypeAction sub_080953A4; +Object6ATypeAction sub_080953A4; +Object6ATypeAction sub_080954DC; +Object6ATypeAction sub_080956B4; +Object6ATypeAction sub_0809577C; +Object6ATypeAction sub_080957DC; +Object6ATypeAction sub_0809584C; +Object6ATypeAction sub_080958D8; +Object6ATypeAction sub_08095918; +Object6ATypeAction sub_08094C88; +Object6ATypeAction sub_080959CC; +Object6ATypeAction sub_08095A8C; +Object6ATypeAction sub_08095B48; +Object6ATypeAction sub_08095C00; +Object6ATypeAction sub_080953A4; +Object6ATypeAction sub_08095C68; +Object6ATypeAction sub_08095CE0; +Object6ATypeAction sub_08095CE0; +Object6ATypeAction sub_08095DBC; +Object6ATypeAction sub_08095F38; +Object6ATypeAction sub_08096058; +Object6ATypeAction sub_08096058; +Object6ATypeAction sub_08094A90; +Object6ATypeAction sub_08096084; +Object6ATypeAction sub_08096084; +Object6ATypeAction sub_08096168; +Object6ATypeAction sub_080961F4; +Object6ATypeAction sub_080961F4; +Object6ATypeAction sub_080961F4; +Object6ATypeAction sub_08096284; +Object6ATypeAction sub_08096290; + +extern void sub_08080CB4(Entity*); +extern u32 sub_080002B8(Entity*); +extern u32 sub_080040A8(Entity*); +extern void sub_08078850(Entity*, u32, u32, u8*); + +void sub_08095754(Object6AEntity*); +void sub_080957B4(Object6AEntity*); +void sub_08095954(Object6AEntity*); +void sub_08095D30(Object6AEntity*, u32); + +static void sub_0809629C(Object6AEntity*, u32); + +void Object6A(Entity* this) { + static Object6ATypeAction* const sTypeTable[] = { + sub_08094A5C, sub_08094A90, sub_08094C30, sub_08094C88, sub_08094D94, sub_08094E30, sub_08094FA8, sub_08095088, + sub_08095120, sub_08095188, sub_080951C4, sub_08095288, sub_080953A4, sub_080953A4, sub_080954DC, sub_080956B4, + sub_0809577C, sub_080957DC, sub_0809584C, sub_080958D8, sub_08095918, sub_08094C88, sub_080959CC, sub_08095A8C, + sub_08095B48, sub_08095C00, sub_080953A4, sub_08095C68, sub_08095CE0, sub_08095CE0, sub_08095DBC, sub_08095F38, + sub_08096058, sub_08096058, sub_08094A90, sub_08096084, sub_08096084, sub_08096168, sub_080961F4, sub_080961F4, + sub_080961F4, sub_08096284, sub_08096290, + }; + sTypeTable[this->type]((Object6AEntity*)this); +} + +void sub_08094A5C(Object6AEntity* this) { + if (super->action == 0) { + super->action++; + sub_0807DD64(super); + InitializeAnimation(super, 4); + } + ExecuteScriptForEntity(super, 0); + HandleEntity0x82Actions(super); + GetNextFrame(super); +} + +void sub_08094A90(Object6AEntity* this) { + if (super->action == 0) { + super->action++; + super->collisionLayer = 2; + UpdateSpriteForCollisionLayer(super); + super->spriteRendering.b3 = gUnk_08114F30[super->spriteRendering.b3]; + InitAnimationForceUpdate(super, 0); + sub_0807DD64(super); + } + ExecuteScriptForEntity(super, 0); + HandleEntity0x82Actions(super); + UpdateAnimationSingleFrame(super); +} + +void sub_08094AE8(Entity* this, ScriptExecutionContext* ctx) { + Object6AEntity* e = (Object6AEntity*)CreateObject(0x6A, 1, 0); + if (e != NULL) { + e->ctx = StartCutscene(&e->base, (void*)ctx->intVariable); + } +} + +void sub_08094B0C(Object6AEntity* this) { + if (--super->z.HALF.HI <= -32) + super->z.HALF.HI = -32; + else + gActiveScriptInfo.commandSize = 0; +} + +void sub_08094B3C(Object6AEntity* this) { + super->z.WORD += 0x8000; + if (super->z.HALF.HI >= -13) + super->z.HALF.HI = -13; + else + gActiveScriptInfo.commandSize = 0; +} + +void sub_08094B6C(Object6AEntity* this) { + super->spritePriority.b1 = 0x3; +} + +void sub_08094B80(Object6AEntity* this) { + super->spritePriority.b1 = 0x2; +} + +void sub_08094B94(Object6AEntity* this) { + Entity* e = CreateObject(0x6A, 0x22, 0); + if (e != NULL) { + CopyPosition(&gPlayerEntity, e); + e->z.HALF.HI = -48; + ((Object6AEntity*)e)->ctx = StartCutscene(e, &script_0800AEDC); + CreateDust(e); + e->z.HALF.HI += 16; + e->y.HALF.HI++; + } +} + +void sub_08094BE0(Entity* this) { + Entity* e = FindEntity(6, 0x6A, 6, 0x22, 0); + if (e != NULL) { + CopyPosition(&gPlayerEntity, e); + e->z.HALF.HI = -12; + e->y.HALF.HI++; + e->collisionLayer = 2; + UpdateSpriteForCollisionLayer(e); + InitAnimationForceUpdate(e, 1); + } +} + +void sub_08094C30(Object6AEntity* this) { + Entity* p = super->parent; + if (p == NULL || p->next == NULL) + DeleteThisEntity(); + if (super->action == 0) { + super->action++; + SetDefaultPriority(super, 2); + super->spriteRendering.b3 = gUnk_08114F30[p->spriteRendering.b3]; + InitAnimationForceUpdate(super, 1); + } + CopyPosition(p, super); + UpdateAnimationSingleFrame(super); +} + +void sub_08094C88(Object6AEntity* this) { + u32 tmp; + + if (super->action != 0) { + if (super->action & 0x80) { + DeleteThisEntity(); + return; + } + } else { + super->action++; + super->spriteSettings.draw = 1; + SetDefaultPriority(super, 3); + switch (super->type2) { + case 0x40: + case 0x41: + case 0x42: + case 0x43: + ResolveEntityBelow(super, super); + } + } + + tmp = super->type; + super->type = super->type2; + sub_08080CB4(super); + super->type = tmp; +} + +void sub_08094CDC(Object6AEntity* this) { + Entity* e = CreateObject(0x6a, 3, 0x62); + if (e != NULL) { + e->x.HALF.HI = gRoomControls.roomOriginX + 224; + e->y.HALF.HI = gRoomControls.roomOriginY + 600; + SoundReq(324); + } +} + +void sub_08094D10(Object6AEntity* this) { + Entity* e = FindEntity(6, 0x6a, 6, 3, 98); + if (e != NULL) { + e->action = 0xFF; + } +} + +void sub_08094D34(Object6AEntity* this) { + Entity* e = CreateObject(0x6a, 0x15, 0xd); + if (e != NULL) { + e->x.HALF.HI = gRoomControls.roomOriginX + 256; + e->y.HALF.HI = gRoomControls.roomOriginY + 600; + SoundReq(324); + } +} + +void sub_08094D70(Object6AEntity* this) { + Entity* e = FindEntity(6, 0x6a, 6, 0x15, 0xd); + if (e != NULL) { + e->action = 0xFF; + } +} + +void sub_08094D94(Object6AEntity* this) { + u32 tmp; + + if (super->action != 0) { + if (super->action & 0x80) { + DeleteThisEntity(); + return; + } + } else { + super->action++; + super->spriteSettings.draw = 1; + SetDefaultPriority(super, 3); + InitAnimationForceUpdate(super, 0); + } + UpdateAnimationSingleFrame(super); +} + +void sub_08094DD8(Object6AEntity* this) { + Entity* e = CreateObject(0x6a, 0x4, 0); + if (e != NULL) { + e->x.HALF.HI = gRoomControls.roomOriginX + 240; + e->y.HALF.HI = gRoomControls.roomOriginY + 600; + SoundReq(324); + } +} + +void sub_08094E0C(Object6AEntity* this) { + Entity* e = FindEntity(6, 0x6a, 6, 4, 0); + if (e != NULL) { + e->action = 0xFF; + } +} + +void sub_08094E30(Object6AEntity* this) { + if (super->type2 == 0) { + if ((gScreenTransition.frameCount % 32) == 0) { + Entity* e = CreateObject(0x6A, 5, 1); + if (e != NULL) { + e->x.HALF.HI = gRoomControls.roomScrollX + (s32)Random() % DISPLAY_WIDTH; + e->y.HALF.HI = gRoomControls.roomScrollY + (s32)Random() % DISPLAY_HEIGHT; + } + } + return; + } + + if (super->type2 == 1) { + switch (super->action) { + case 0: + super->action++; + super->z.WORD = -0xA00000; + super->zVelocity = 0; + SetDefaultPriority(super, 6); + InitializeAnimation(super, 0); + if (sub_080002B8(super) == 13) { + super->action = 3; + } + break; + case 1: + super->z.WORD -= super->zVelocity; + super->zVelocity -= 0x2000; + if (super->z.WORD > 0) { + super->action++; + super->z.WORD = 0; + super->zVelocity = 0; + InitializeAnimation(super, 1); + EnqueueSFX(382); + } + break; + case 2: + GetNextFrame(super); + if (super->frame & 0x80) { + DeleteThisEntity(); + } + break; + case 3: + super->z.WORD -= super->zVelocity; + super->zVelocity -= 0x2000; + if (!sub_080040A8(super)) { + DeleteThisEntity(); + } + break; + } + } else if (super->action == 0) { + super->action++; + switch (super->actionDelay) { + case 1: + InitializeAnimation(super, 2); + break; + case 2: + super->spriteSettings.flipX = 1; + InitializeAnimation(super, 0); + break; + case 0: + InitializeAnimation(super, 0); + break; + case 3: + super->spriteSettings.flipX = 1; + InitializeAnimation(super, 2); + break; + } + } +} + +void sub_08094F98(Object6AEntity* this) { + CreateObject(0x6A, 5, 0); +} + +void sub_08094FA8(Object6AEntity* this) { + switch (super->action) { + case 0: + super->action = 1; + super->frameIndex = 0; + super->spritePriority.b0 = 7; + sub_080787B4(super); + break; + case 1: + if (super->interactType != 0) { + super->interactType = 0; + super->action = 2; + sub_080788E0(super); + gPlayerState.playerAction = 12; + gPlayerState.field_0x38 = 54; +#ifndef EU + SetPlayerControl(2); +#endif + } + break; + case 2: + if (GetInventoryValue(54) == 2) { + super->action = 3; + super->spriteSettings.draw = 1; + } + break; + case 3: + if (gPlayerEntity.action != 12) { + super->action = 4; +#ifndef EU + if (!CheckGlobalFlag(BIN_DOGFOOD)) { + CreateItemEntity(0x1c, 0, 0); + SetGlobalFlag(BIN_DOGFOOD); + super->actionDelay = 60; + } +#else + CreateItemEntity(0x1c, 0, 0); +#endif + } + break; +#ifndef EU + case 4: + if (!--super->actionDelay) { + super->action = 5; + SetPlayerControl(1); + } + break; +#endif + } +} + +void sub_08095088(Object6AEntity* this) { + u32 tmp; + + switch (super->action) { + case 0: + if (GetInventoryValue(91)) + DeleteThisEntity(); + super->action = 1; + super->spritePriority.b0 = 7; + sub_080787B4(super); + break; + case 1: + if (super->interactType != 0) { + super->interactType = 0; + super->action = 2; + sub_080788E0(super); + CreateEzloHint(0x1F1F, 0); + } + break; + case 2: + if ((gMessage.doTextBox & 0x7F) == 0) { + CreateItemEntity(0x5b, 0, 0); + DeleteThisEntity(); + } + break; + } + tmp = super->type; + super->type = 91; + sub_08080CB4(super); + super->type = tmp; +} + +void sub_08095120(Object6AEntity* this) { + if (super->action == 0) { + super->action = 1; + SetDefaultPriority(super, 3); + ResolveEntityBelow(super, super); + sub_0807DD64(super); + InitAnimationForceUpdate(super, 2); + } + ExecuteScriptForEntity(super, NULL); + HandleEntity0x82Actions(super); + UpdateAnimationSingleFrame(super); +} + +void sub_08095164(Object6AEntity* this) { + Entity* e = FindEntity(6, 0x6A, 6, 8, 0); + if (e != NULL) { + InitAnimationForceUpdate(e, 3); + } +} + +void sub_08095188(Object6AEntity* this) { + if (super->action == 0) { + super->action = 1; + SetDefaultPriority(super, 3); + ResolveEntityBelow(super, super); + sub_0807DD64(super); + InitAnimationForceUpdate(super, 0); + } + ExecuteScriptForEntity(super, 0); + HandleEntity0x82Actions(super); +} + +void sub_080951C4(Object6AEntity* this) { + Entity* p; + + if (super->action == 0) { + super->action++; + super->z.HALF.HI = -16; + super->actionDelay = 0; + sub_0807DD64(super); + InitializeAnimation(super, 3); + } + ExecuteScriptForEntity(super, 0); + HandleEntity0x82Actions(super); + GetNextFrame(super); + if (super->z.HALF.HI == 0) { + super->z.WORD = 0; + super->parent = NULL; + if (super->actionDelay == 0) { + super->actionDelay++; + SoundReq(230); + } + } + p = super->parent; + if (p != NULL) { + super->spriteSettings.draw = p->spriteSettings.draw; + super->x.HALF.HI = p->x.HALF.HI + 16; + super->y.HALF.HI = p->y.HALF.HI - 16; + } +} + +void sub_08095244(Object6AEntity* this) { + if (super->type == 0) { + Entity* e = CreateObject(0x6A, 0xA, 0); + if (e != NULL) { + e->parent = super; + PositionRelative(super, e, 0x100000, -0x100000); + ((Object6AEntity*)e)->ctx = StartCutscene(e, &script_0801183C); + } + } +} + +void sub_08095288(Object6AEntity* this) { + Entity* p; + + if (super->action == 0) { + super->action++; + super->subAction = 0; + SetDefaultPriority(super, 3); + InitAnimationForceUpdate(super, 0); + } + if (super->subAction != 0) { + if ((u32)sub_080044EC(super, 0x1800) <= 1) { + super->subAction = 0; + sub_0805EC9C(super, 0x100, 0x100, 0xC000); + } else { + sub_0805EC9C(super, 0x100, 0x100, super->actionDelay << 8); + super->actionDelay += 10; + sub_0806F69C(super); + } + } + p = super->child; + if (p != NULL) { + CopyPosition(p, super); + } + UpdateAnimationSingleFrame(super); + p = super->parent; + if (p != NULL) { + super->spriteSettings.draw = p->spriteSettings.draw; + if (p->next == NULL) + DeleteThisEntity(); + } else { + DeleteThisEntity(); + } +} + +void sub_08095330(Object6AEntity* this) { + Entity* e = CreateObject(0x6A, 0xB, 0); + if (e != NULL) { + super->child = e; + e->child = super; + e->parent = super; + CopyPosition(super, e); + e->z.HALF.HI = -16; + ResolveEntityOnTop(e, e); + } +} + +void sub_08095364(Object6AEntity* this) { + Entity* e = super->child; + if (e != NULL) { + e->frameIndex = 2; + e->collisionLayer = 1; + UpdateSpriteForCollisionLayer(e); + e->child = NULL; + e->subAction = 1; + e->z.HALF.HI = -16; + e->direction = 7; + e->zVelocity = 0x30000; + e->speed = 128; + InitAnimationForceUpdate(e, 1); + } +} + +void sub_080953A4(Object6AEntity* this) { + if (super->action == 0) { + super->action++; + super->z.HALF.HI = -16; + SetDefaultPriority(super, 2); + super->spriteRendering.b3 = gUnk_08114F30[super->spriteRendering.b3]; + ResolveEntityOnTop(super, super); + sub_0807DD64(super); + } + ExecuteScriptForEntity(super, 0); + HandleEntity0x82Actions(super); + GetNextFrame(super); + if (super->type == 13) { + u32 x = 0; + u32 y = 0x139; + ChangeObjPalette(super, super->frameSpriteSettings & 1 ? x : y); + } +} + +void sub_08095420(Object6AEntity* this, ScriptExecutionContext* ctx) { + Entity* e = CreateObject(0x6A, 0xC, 0); + if (e != NULL) { + PositionRelative(super, e, 0, -0x100000); + ((Object6AEntity*)e)->ctx = StartCutscene(e, (u16*)ctx->intVariable); + } +} + +void nullsub_527(Object6AEntity* this) { +} + +void sub_0809545C(Object6AEntity* this, ScriptExecutionContext* ctx) { + Entity* p = CreateObject(0x6A, 0xD, 0); + Entity* e; + if (p != NULL) { + PositionRelative(super, p, 0, -0x100000); + ((Object6AEntity*)p)->ctx = StartCutscene(p, (u16*)ctx->intVariable); + e = CreateObject(0x6A, 2, 0); + if (e != NULL) { + CopyPosition(p, e); + e->parent = p; + } + } +} + +void sub_080954AC(Object6AEntity* this) { + Entity* e = CreateObject(0x6A, 0x1A, 0); + if (e != NULL) { + CopyPosition(super, e); + ((Object6AEntity*)e)->ctx = StartCutscene(e, &script_08015B14); + } +} + +void sub_080954DC(Object6AEntity* this) { + switch (super->action) { + case 0: + if (super->actionDelay != 0) { + super->actionDelay--; + } else { + super->action++; + super->subAction = 0; + super->spriteSettings.draw = 1; + super->z.HALF.HI = 0; + super->spritePriority.b0 = 1; + this->px = super->x.HALF.HI; + this->py = super->y.HALF.HI; + this->pz = 0; + this->off = gUnk_08122AE0[super->type2]; + ChangeObjPalette(super, gUnk_08122AE8[super->type2]); + sub_0807DD64(super); + InitializeAnimation(super, super->type2 + 2); + sub_08095754(this); + SoundReq((s32)Random() % 6 + 0x1BC); + } + break; + case 1: + if (--super->z.HALF.HI <= -16) { + super->action++; + super->z.HALF.HI = -16; + } + break; + case 2: + if (++this->pz > 0x40) + this->pz = 0x40; + super->x.HALF.HI = (gSineTable[this->off + 64] * (this->pz << 8)) >> 16; + super->y.HALF.HI = (gSineTable[this->off] * (this->pz << 7)) >> 16; + super->x.HALF.HI += this->px; + super->y.HALF.HI += this->py; + break; + case 3: + sub_0806F62C(super, super->speed, super->direction); + break; + } + this->off += 4; + if (super->subAction != 0 && !sub_080040A8(super)) + DeleteThisEntity(); + if (super->direction & 0x80) + super->spriteSettings.flipX = 0; + else + super->spriteSettings.flipX = 1; + ExecuteScriptForEntity(super, 0); + HandleEntity0x82Actions(super); + GetNextFrame(super); +} + +void sub_0809567C(Object6AEntity* this) { + super->action = 3; + super->subAction = 1; + super->speed = 0x400; + super->direction = sub_080045DA(super->x.WORD - ((s16)this->px << 16), super->y.WORD - ((s16)this->py << 16)); +} + +void sub_080956B4(Object6AEntity* this) { + Entity* p; + u16* p1; + u16* p2; + Type15Vars* tmp; + + if (super->action == 0) { + s32 i; + u16* p; + u32 x; + u32 y; + + super->action++; + InitializeAnimation(super, 0); + // p = this->v.arr; + asm("mov r4, r5"); + asm("add r4, #0x68"); + x = super->x.HALF_U.HI; + y = super->y.HALF_U.HI; + for (i = 0; i < 8; i++) { + *p++ = x; + *p++ = y; + } + } + GetNextFrame(super); + if ((super->type2 + gScreenTransition.frameCount) % 16 == 0) + sub_080957B4(this); + p = super->parent; + if (p != NULL) { + super->spriteSettings.draw = p->spriteSettings.draw; + if (p->next == NULL) { + DeleteThisEntity(); + } + } else { + DeleteThisEntity(); + } + tmp = &((Object6AEntityType15*)this)->vars; + MemCopy(&tmp->arr[2], &tmp->arr[0], 0x1C); + super->x.HALF.HI = tmp->my_x; + super->y.HALF.HI = tmp->my_y; + super->z.HALF.HI = p->z.HALF.HI; + tmp->parent_x = p->x.HALF.HI; + tmp->parent_y = p->y.HALF.HI; +} + +void sub_08095754(Object6AEntity* this) { + Entity* e = CreateObject(0x6A, 0xF, super->type2); + if (e != NULL) { + e->parent = super; + CopyPosition(super, e); + ResolveEntityBelow(super, e); + } +} + +void sub_0809577C(Object6AEntity* this) { + if (super->action == 0) { + super->action++; + super->z.HALF.HI = -16; + InitializeAnimation(super, 1); + } + GetNextFrame(super); + if (super->frame & 0x80) + DeleteThisEntity(); +} + +void sub_080957B4(Object6AEntity* this) { + Entity* e = CreateObject(0x6A, 0x10, 0); + if (e != NULL) { + e->parent = super; + CopyPosition(super, e); + ResolveEntityBelow(super, e); + } +} + +void sub_080957DC(Object6AEntity* this) { + if (super->action == 0) { + super->action++; + sub_0807DD64(super); + InitAnimationForceUpdate(super, 0); + } + ExecuteScriptForEntity(super, 0); + HandleEntity0x82Actions(super); + UpdateAnimationSingleFrame(super); +} + +void sub_08095810(Object6AEntity* this) { + Entity* e = CreateObject(0x6A, 0x11, 0); + if (e != NULL) { + e->parent = super; + CopyPosition(super, e); + ResolveEntityOnTop(super, e); + ((Object6AEntity*)e)->ctx = StartCutscene(e, &script_08011940); + } +} + +void sub_0809584C(Object6AEntity* this) { + u32 tmp, idx; + + idx = super->health; + if ((idx & 0x7F) != 0 && !ReadBit((u32*)gArea.filler5, idx - 1)) + DeleteThisEntity(); + if (super->actionDelay != 0 && CheckKinstoneFused(super->type2)) + DeleteThisEntity(); + if (super->action == 0) { + super->action++; + super->collisionLayer = 2; + UpdateSpriteForCollisionLayer(super); + super->spriteRendering.b3 = gUnk_08114F30[super->spriteRendering.b3]; + sub_0807DD64(super); + } + ExecuteScriptForEntity(super, 0); + HandleEntity0x82Actions(super); + tmp = super->type; + super->type = 92; + sub_08080CB4(super); + super->type = tmp; +} + +void sub_080958D8(Object6AEntity* this) { + if (super->action == 0) { + super->action++; + sub_0807DD64(super); + } + ExecuteScriptForEntity(super, 0); + HandleEntity0x82Actions(super); + GetNextFrame(super); + if (super->frame & 1) + sub_08095954(this); +} + +void sub_08095918(Object6AEntity* this) { + if (super->action == 0) { + super->action++; + SetDefaultPriority(super, 6); + sub_0807DD64(super); + InitializeAnimation(super, 0); + } + ExecuteScriptForEntity(super, 0); + HandleEntity0x82Actions(super); + GetNextFrame(super); +} + +void sub_08095954(Object6AEntity* this) { + typedef struct { + s8 x, y; + } s8XY; + + Entity* e = CreateObject(0x6A, 0x14, 0); + if (e != NULL) { + u32 tmp, x, y; + e->parent = super; + tmp = super->animationState; + x = ((s8XY*)(&gUnk_08122AF8[tmp]))->x << 16; + y = ((s8XY*)(&gUnk_08122AF8[tmp]))->y << 16; + PositionRelative(super, e, x, y); + e->z.HALF.HI = -3; + ((Object6AEntity*)e)->ctx = StartCutscene(e, &script_08012C48); + EnqueueSFX(292); + super->frame &= ~1; + } else { + gActiveScriptInfo.unk_00 |= 0x100; + } +} + +void sub_080959CC(Object6AEntity* this) { + if (super->action == 0) { + super->action++; + super->spriteSettings.draw = 0; + SetDefaultPriority(super, 3); + sub_0807DD64(super); + } + ExecuteScriptForEntity(super, 0); + HandleEntity0x82Actions(super); + UpdateAnimationSingleFrame(super); + sub_08095D30(this, super->frame & ~0x80); +} + +void sub_08095A1C(Object6AEntity* this, ScriptExecutionContext* ctx) { + Entity* e = CreateObject(0x6A, 0x16, 0); + if (e != NULL) { + e->x.HALF.HI = gRoomControls.roomOriginX + 232; + e->y.HALF.HI = gRoomControls.roomOriginY + 312; + e->z.HALF.HI = -4; + e->collisionLayer = 2; + ((Object6AEntity*)e)->ctx = StartCutscene(e, (u16*)ctx->intVariable); + } +} + +void sub_08095A68(Object6AEntity* this) { + Entity* e = FindEntity(6, 0x6A, 6, 0x16, 0); + if (e != NULL) { + e->action = 0xFF; + } +} + +void sub_08095A8C(Object6AEntity* this) { + switch (super->action) { + case 0: + super->action++; + super->frameIndex = 0; + sub_0807DD64(super); + case 1: + ExecuteScriptForEntity(super, 0); + HandleEntity0x82Actions(super); + break; + case 2: + super->action++; + super->actionDelay = 120; + case 3: + super->spriteSettings.draw ^= 1; + if (--super->actionDelay == 0) { + super->action = 1; + super->spriteSettings.draw = 1; + } + break; + case 4: + super->action++; + super->actionDelay = 120; + case 5: + super->spriteSettings.draw ^= 1; + if (--super->actionDelay == 0) { + super->action = 1; + super->spriteSettings.draw = 0; + } + break; + } +} + +void sub_08095B48(Object6AEntity* this) { + Entity* p; + u32 tmp; + + if (super->action == 0) { + super->action++; + super->collisionLayer = 2; + UpdateSpriteForCollisionLayer(super); + super->spriteRendering.b3 = gUnk_08114F30[super->spriteRendering.b3]; + } + super->spriteSettings.draw = 0; + p = super->parent; + if (p != NULL) { + if ((p->frame & 0x40) == 0) { + if (p->frame & 0x80) { + DeleteThisEntity(); + return; + } + } else { + s8* data; + super->spriteSettings.draw = 1; + data = GetSpriteSubEntryOffsetDataPointer((u16)p->spriteIndex, p->frameIndex); + super->spriteOffsetX = data[0]; + super->spriteOffsetY = data[1]; + } + } + tmp = super->type; + super->type = super->type2; + sub_08080CB4(super); + super->type = tmp; +} + +void sub_08095BE0(Object6AEntity* this, u32 val) { + Entity* e = CreateObject(0x6A, 0x18, val); + if (e != NULL) { + e->parent = super; + CopyPosition(super, e); + } +} + +void sub_08095C00(Object6AEntity* this) { + if (super->action & 0x80) { + DeleteThisEntity(); + } else { + Entity* p = super->parent; + if (p != NULL) { + super->spriteVramOffset = 232; + if (p->spriteSettings.draw == 1) + super->spriteSettings.draw = 0; + else + super->spriteSettings.draw = 1; + } + } +} + +void sub_08095C48(Object6AEntity* this) { + Entity* e = CreateObject(0x6A, 0x19, 0); + if (e != NULL) { + super->child = e; + e->parent = super; + CopyPosition(super, e); + } +} + +void sub_08095C68(Object6AEntity* this) { + if (super->action == 0) { + super->action++; + sub_080042D0(super, super->frameIndex, (u16)super->spriteIndex); + } + if (super->actionDelay != 0) { + if (--super->actionDelay < 8) { + super->spriteSettings.draw ^= 1; + } + if (super->actionDelay != 0) { + return; + } + } + DeleteThisEntity(); +} + +void sub_08095CB0(Object6AEntity* this) { + Entity* e = CreateObject(0x6A, 0x1B, 0); + if (e != NULL) { + super->child = e; + e->parent = super; + CopyPosition(super, e); + e->actionDelay = 16; + e->frameIndex = super->frameIndex; + e->lastFrameIndex = super->frameIndex; + } +} + +void sub_08095CE0(Object6AEntity* this) { + if (super->action == 0) { + super->action++; + super->spriteSettings.draw = 0; + SetDefaultPriority(super, 6); + sub_0807DD64(super); + } + ExecuteScriptForEntity(super, 0); + HandleEntity0x82Actions(super); + UpdateAnimationSingleFrame(super); + sub_08095D30(this, super->frame & ~0x80); +} + +void sub_08095D30(Object6AEntity* this, u32 a2) { + if (a2 != 0) + ChangeObjPalette(super, gUnk_08122B00[a2] & ~0x80); +} + +void sub_08095D54(Object6AEntity* this, ScriptExecutionContext* ctx) { + Entity* e = CreateObject(0x6A, 0x1C, 0); + if (e != NULL) { + CopyPosition(&gPlayerEntity, e); + e->collisionLayer = 2; + ((Object6AEntity*)e)->ctx = StartCutscene(e, (u16*)ctx->intVariable); + } +} + +void sub_08095D8C(Object6AEntity* this, ScriptExecutionContext* ctx) { + Entity* e = CreateObject(0x6A, 0x1D, 0); + if (e != NULL) { + CopyPosition(super, e); + ((Object6AEntity*)e)->ctx = StartCutscene(e, (u16*)ctx->intVariable); + } +} + +void sub_08095DBC(Object6AEntity* this) { + if (gActiveScriptInfo.unk_00 & 0x10) + DeleteThisEntity(); + if (super->type2 == 0) { + if (super->action == 0) { + super->action++; + sub_0807DD64(super); + } + ExecuteScriptForEntity(super, 0); + } else { + if (super->action == 0) { + super->action++; + super->spriteSettings.draw = 1; + InitializeAnimation(super, 75); + super->spriteRendering.b3 = gUnk_08114F30[super->spriteRendering.b3]; + ResolveEntityOnTop(super, super); + } + if ((super->type2 & 0x80) == 0 && gActiveScriptInfo.unk_00 & 0x20000) { + super->type2 = -1; + super->zVelocity = 0x40000; + super->speed = 0xC000; + } + sub_08003FC4(super, super->speed); + GetNextFrame(super); + if (!sub_080040A8(super)) + DeleteThisEntity(); + } +} + +void sub_08095E7C(Object6AEntity* this, ScriptExecutionContext* ctx) { + Entity* e = CreateObject(0x6A, 0x1E, 0); + if (e != NULL) { + CopyPosition(super, e); + ((Object6AEntity*)e)->ctx = StartCutscene(e, (u16*)ctx->intVariable); + } +} + +NONMATCH("asm/non_matching/object6A/sub_08095EAC.inc", + void sub_08095EAC(Object6AEntity* this, ScriptExecutionContext* ctx)) { + Entity* e = CreateObject(0x6A, 0x1E, 1); + s32 x, y; + + if (e != NULL) { + s32 a, b, vel, speed; + if (ctx->intVariable == 0) { + a = 0x10; + b = 0x1F; + vel = 0x4000; + speed = 0; + } else { + a = 0x8; + b = 0xF; + vel = 0x40000; + speed = gUnk_08122B0E[Random() & 7]; + super->type2 = -1; + } + + x = a - (Random() & b); + y = a - (Random() & b); + PositionRelative(super, e, x << 16, y << 16); + super->zVelocity = vel; + super->speed = speed; + } +} +END_NONMATCH + +#define local ((Type1F*)this) +void sub_08095F38(Object6AEntity* this) { + u32 tmp; + + if (super->action == 0) { + u32 pal; + + super->action = 1; + super->frameIndex = -1; + switch (super->type2) { + case 3: + pal = 0; + break; + case 4: + pal = 1; + break; + case 6: + pal = 4; + break; + } + ChangeObjPalette(super, pal); + if ((gPlayerEntity.frame & 1) == 0) { + local->anim = 0x8BF; + super->actionDelay = 52; + super->field_0xf = -75; + } else { + local->anim = 0x8E3; + super->actionDelay = 85; + super->field_0xf = -42; + } + CopyPosition(&gPlayerEntity, super); + super->spritePriority.b0 = 3; + } + if (gPlayerEntity.frame & 0x10) { + gPlayerEntity.frame &= ~0x10; + SoundReq(468); + } + if ((u16)gPlayerEntity.spriteIndex != local->anim >> 8 || gPlayerEntity.animIndex != (u8)local->anim) + DeleteThisEntity(); + tmp = gPlayerEntity.frameIndex - super->actionDelay + super->field_0xf; + if (tmp != super->frameIndex) { + super->frameIndex = tmp; + sub_080042D0(super, super->frameIndex, (u16)super->spriteIndex); + } +} + +void sub_08096028(Object6AEntity* this) { + u32 type2 = 6; + if (!CheckLocalFlagByBank(768, 123)) + type2 = 4; + if (!CheckLocalFlagByBank(768, 122)) + type2 = 3; + CreateObject(0x6A, 0x1F, type2); +} + +void sub_08096058(Object6AEntity* this) { + if (super->action == 0) { + super->action++; + sub_0807DD64(super); + } + ExecuteScriptForEntity(super, 0); + HandleEntity0x82Actions(super); + GetNextFrame(super); +} + +void sub_08096084(Object6AEntity* this) { + if (super->action == 0) { + super->action++; + sub_0807DD64(super); + InitializeAnimation(super, super->type2); + } + ExecuteScriptForEntity(super, 0); + HandleEntity0x82Actions(super); + GetNextFrame(super); + if (super->parent != NULL) { + CopyPosition(super->parent, super); + } +} + +void sub_080960C4(Object6AEntity* this, ScriptExecutionContext* ctx) { + Entity* e = CreateObject(0x6A, 0x23, 0x49); + if (e != NULL) { + e->parent = super; + CopyPosition(super, e); + e->spriteRendering.b3 = gUnk_08114F34[super->spriteRendering.b3]; + ResolveEntityBelow(super, e); + ((Object6AEntity*)e)->ctx = StartCutscene(e, (u16*)ctx->intVariable); + } + e = CreateObject(0x6A, 0x24, 0x4A); + if (e != NULL) { + e->parent = super; + CopyPosition(super, e); + e->spriteRendering.b3 = gUnk_08114F30[super->spriteRendering.b3]; + ResolveEntityOnTop(super, e); + e->collisionLayer = 2; + ((Object6AEntity*)e)->ctx = StartCutscene(e, (u16*)ctx->intVariable); + } +} + +void sub_08096168(Object6AEntity* this) { + if (super->action == 0) { + super->action++; + super->spriteSettings.draw = 1; + InitializeAnimation(super, 75); + } + GetNextFrame(super); + sub_0806F62C(super, super->speed, super->direction); + if (!sub_080040A8(super)) + DeleteThisEntity(); +} + +void sub_080961B0(Object6AEntity* this) { + int i; + for (i = 0; i < 8; ++i) { + Entity* e = CreateObject(0x6A, 0x25, 0); + if (e != NULL) { + CopyPosition(super, e); + e->direction = 32 * i; + e->speed = (Random() & 0x1F0) + gUnk_08122B1E[i]; + } + } +} + +void sub_080961F4(Object6AEntity* this) { + super->spriteSettings.draw = 1; + super->frameIndex = 0; +} + +void sub_08096208(Object6AEntity* this, u32 x) { + s8* p = &gUnk_08122B2E[x * 2]; + Entity* e = CreateObject(0x6A, 0x26, 0); + if (e != NULL) { + PositionRelative(super, e, p[0] << 16, p[1] << 16); + } +} + +void sub_0809623C(Object6AEntity* this) { + Entity* e = CreateObject(0x6A, 0x27, 0); + if (e != NULL) { + PositionRelative(super, e, 0, -0x100000); + } +} + +void sub_08096260(Object6AEntity* this) { + Entity* e = CreateObject(0x6A, 0x28, 0); + if (e != NULL) { + PositionRelative(super, e, 0, -0x100000); + } +} + +void sub_08096284(Object6AEntity* this) { + sub_0809629C(this, 0xd); +} + +void sub_08096290(Object6AEntity* this) { + sub_0809629C(this, 0xe); +} + +void sub_0809629C(Object6AEntity* this, u32 type) { + u32 tmp; + + if (super->action == 0) { + super->action = 1; + sub_0807DD64(super); + } + ExecuteScriptForEntity(super, 0); + HandleEntity0x82Actions(super); + sub_08003FC4(super, 0x1000); + tmp = super->type; + super->type = type; + sub_08080CB4(super); + super->type = tmp; +} + +void sub_080962D8(Object6AEntity* this) { + DoFade(6, 0x100); +} + +void sub_080962E8(Object6AEntity* this) { + DoFade(7, 0x100); +} + +void sub_080962F8(Object6AEntity* this, ScriptExecutionContext* ctx) { + HitboxCfg* cfg = &gUnk_08122B3C[ctx->intVariable]; + sub_08078850(super, 1, cfg->_c, cfg->_8); + super->hitbox = &cfg->hit; +} diff --git a/src/object/objectA.c b/src/object/objectA.c index c7d885e7..8578c1be 100644 --- a/src/object/objectA.c +++ b/src/object/objectA.c @@ -2,7 +2,7 @@ #include "entity.h" #include "room.h" #include "flags.h" -#include "createObject.h" +#include "object.h" #include "functions.h" #include "overworld.h" diff --git a/src/object/pinwheel.c b/src/object/pinwheel.c index 37234dc5..b44f5a8c 100644 --- a/src/object/pinwheel.c +++ b/src/object/pinwheel.c @@ -1,7 +1,7 @@ #include "global.h" #include "entity.h" #include "flags.h" -#include "createObject.h" +#include "object.h" extern u32 ReadBit(u32*, u32); diff --git a/src/objectUtils.c b/src/objectUtils.c index b250b0e6..3fb4da3c 100644 --- a/src/objectUtils.c +++ b/src/objectUtils.c @@ -2,7 +2,6 @@ #include "entity.h" #include "coord.h" #include "room.h" -#include "createObject.h" #include "object.h" #include "effects.h" #include "functions.h" diff --git a/src/projectile/arrowProjectile.c b/src/projectile/arrowProjectile.c index 51a49e34..03994e21 100644 --- a/src/projectile/arrowProjectile.c +++ b/src/projectile/arrowProjectile.c @@ -2,7 +2,7 @@ #include "enemy.h" #include "functions.h" #include "audio.h" -#include "createObject.h" +#include "object.h" extern s32 sub_080AF090(Entity*);