diff --git a/asm/enemy/gleerok.s b/asm/enemy/gleerok.s index 0be3735b..3d81c214 100644 --- a/asm/enemy/gleerok.s +++ b/asm/enemy/gleerok.s @@ -7,3139 +7,6 @@ .text - thumb_func_start Gleerok -Gleerok: @ 0x0802D018 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r4, _0802D030 @ =gUnk_080CD748 - bl GetNextFunction - lsls r0, r0, #2 - adds r0, r0, r4 - ldr r1, [r0] - adds r0, r5, #0 - bl _call_via_r1 - pop {r4, r5, pc} - .align 2, 0 -_0802D030: .4byte gUnk_080CD748 - - thumb_func_start sub_0802D034 -sub_0802D034: @ 0x0802D034 - push {r4, r5, lr} - adds r4, r0, #0 - bl sub_08078B48 - ldrb r0, [r4, #0xa] - cmp r0, #1 - beq _0802D0F4 - cmp r0, #1 - bgt _0802D04C - cmp r0, #0 - beq _0802D104 - b _0802D148 -_0802D04C: - cmp r0, #2 - bne _0802D148 - ldrb r1, [r4, #0xb] - cmp r1, #0 - bne _0802D090 - movs r0, #1 - strb r0, [r4, #0xb] - strb r1, [r4, #0xe] - movs r0, #0x3c - strb r0, [r4, #0xf] - adds r2, r4, #0 - adds r2, #0x74 - movs r0, #0x10 - strb r0, [r2] - adds r0, r4, #0 - adds r0, #0x75 - strb r1, [r0] - ldr r1, _0802D088 @ =gScreen - ldrb r2, [r2] - adds r0, r1, #0 - adds r0, #0x68 - strh r2, [r0] - adds r1, #0x66 - ldr r0, _0802D08C @ =0x00001442 - strh r0, [r1] - movs r0, #0xf6 - bl SoundReq - b _0802D148 - .align 2, 0 -_0802D088: .4byte gScreen -_0802D08C: .4byte 0x00001442 -_0802D090: - ldrb r0, [r4, #0xe] - adds r0, #1 - strb r0, [r4, #0xe] - movs r1, #0xf - ands r0, r1 - cmp r0, #0 - bne _0802D0D2 - adds r3, r4, #0 - adds r3, #0x75 - ldrb r0, [r3] - adds r0, #1 - strb r0, [r3] - adds r1, r4, #0 - adds r1, #0x74 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - ldr r2, _0802D0EC @ =gScreen - ldrb r1, [r1] - ldrb r0, [r3] - lsls r0, r0, #8 - orrs r1, r0 - adds r2, #0x68 - strh r1, [r2] - movs r0, #0x80 - lsls r0, r0, #5 - cmp r1, r0 - bne _0802D0D2 - ldr r0, _0802D0F0 @ =gPlayerEntity - bl sub_0807AABC - bl DeleteThisEntity -_0802D0D2: - ldrb r0, [r4, #0xf] - cmp r0, #0 - beq _0802D148 - subs r0, #1 - strb r0, [r4, #0xf] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0802D148 - movs r0, #0xf7 - bl SoundReq - b _0802D148 - .align 2, 0 -_0802D0EC: .4byte gScreen -_0802D0F0: .4byte gPlayerEntity -_0802D0F4: - movs r0, #0x94 - lsls r0, r0, #1 - bl SoundReq - adds r0, r4, #0 - bl sub_0804A7D4 - b _0802D148 -_0802D104: - ldr r5, _0802D14C @ =gPlayerState - movs r0, #1 - strb r0, [r5, #0x14] - ldr r1, _0802D150 @ =gPlayerEntity - adds r0, r4, #0 - adds r0, #0x5a - ldrb r0, [r0] - movs r2, #0x3f - ands r2, r0 - adds r0, r4, #0 - bl sub_0806FC80 - cmp r0, #0 - beq _0802D128 - adds r1, r5, #0 - adds r1, #0x3f - movs r0, #0xfa - strb r0, [r1] -_0802D128: - ldr r1, _0802D154 @ =gUnk_080CD75C - ldrb r0, [r4, #0xc] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - adds r0, r4, #0 - bl sub_0802E518 - adds r0, r4, #0 - adds r0, #0x84 - ldr r0, [r0] - bl sub_0802E7E4 -_0802D148: - pop {r4, r5, pc} - .align 2, 0 -_0802D14C: .4byte gPlayerState -_0802D150: .4byte gPlayerEntity -_0802D154: .4byte gUnk_080CD75C - - thumb_func_start sub_0802D158 -sub_0802D158: @ 0x0802D158 - push {lr} - movs r1, #1 - strb r1, [r0, #0xc] - ldr r0, _0802D16C @ =gUnk_02034490 - strb r1, [r0] - movs r0, #7 - movs r1, #8 - bl SetFade - pop {pc} - .align 2, 0 -_0802D16C: .4byte gUnk_02034490 - - thumb_func_start sub_0802D170 -sub_0802D170: @ 0x0802D170 - push {r4, r5, r6, lr} - adds r5, r0, #0 - ldr r0, _0802D1F0 @ =gFadeControl - ldrb r3, [r0] - cmp r3, #0 - bne _0802D216 - ldrb r0, [r5, #0xc] - cmp r0, #1 - bne _0802D1FC - adds r4, r5, #0 - adds r4, #0x84 - ldr r0, [r4] - movs r1, #0x10 - strb r1, [r0, #1] - ldr r0, [r4] - strb r1, [r0, #0x19] - ldr r0, [r4] - movs r1, #0x40 - movs r2, #2 - bl sub_0802EB08 - cmp r0, #0 - bne _0802D216 - ldr r0, [r4] - bl sub_0802EA88 - cmp r0, #0 - bne _0802D216 - movs r0, #2 - strb r0, [r5, #0xc] - ldr r2, _0802D1F4 @ =gPlayerEntity - ldr r4, _0802D1F8 @ =gRoomControls - ldrh r0, [r4, #6] - adds r0, #0x98 - movs r1, #0 - strh r0, [r2, #0x2e] - ldrh r0, [r4, #8] - adds r0, #0xd8 - strh r0, [r2, #0x32] - strb r1, [r2, #0x14] - movs r1, #0x2e - ldrsh r0, [r2, r1] - ldrh r1, [r4, #6] - subs r0, r0, r1 - asrs r0, r0, #4 - movs r3, #0x3f - ands r0, r3 - movs r6, #0x32 - ldrsh r1, [r2, r6] - ldrh r2, [r4, #8] - subs r1, r1, r2 - asrs r1, r1, #4 - ands r1, r3 - lsls r1, r1, #6 - orrs r0, r1 - movs r1, #2 - bl sub_0807BA8C - str r5, [r4, #0x30] - movs r0, #6 - movs r1, #8 - bl SetFade - b _0802D216 - .align 2, 0 -_0802D1F0: .4byte gFadeControl -_0802D1F4: .4byte gPlayerEntity -_0802D1F8: .4byte gRoomControls -_0802D1FC: - movs r0, #3 - strb r0, [r5, #0xc] - adds r0, r5, #0 - adds r0, #0x80 - strb r3, [r0] - adds r2, r5, #0 - adds r2, #0x84 - ldr r0, [r2] - ldr r1, [r0, #0x50] - movs r0, #0x18 - strb r0, [r1, #0xe] - ldr r0, [r2] - strb r3, [r0, #0x19] -_0802D216: - pop {r4, r5, r6, pc} - - thumb_func_start sub_0802D218 -sub_0802D218: @ 0x0802D218 - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r4, #0 - adds r5, #0x84 - ldr r0, [r5] - movs r1, #0x40 - movs r2, #2 - bl sub_0802EB08 - adds r1, r0, #0 - cmp r1, #0 - bne _0802D254 - movs r0, #4 - strb r0, [r4, #0xc] - strb r1, [r4, #0xe] - strb r1, [r4, #0xf] - adds r2, r4, #0 - adds r2, #0x7c - movs r0, #0xb4 - strh r0, [r2] - ldr r0, [r5] - ldr r1, [r0, #0x50] - movs r0, #0xc - strb r0, [r1, #0xe] - ldrh r3, [r2] - adds r0, r4, #0 - movs r1, #0x67 - movs r2, #2 - bl CreateObjectWithParent -_0802D254: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0802D258 -sub_0802D258: @ 0x0802D258 - push {r4, r5, lr} - adds r5, r0, #0 - adds r1, r5, #0 - adds r1, #0x7c - ldrh r0, [r1] - cmp r0, #0 - bne _0802D276 - adds r0, r5, #0 - bl sub_0802E1D0 - ldrb r0, [r5, #0xb] - cmp r0, #5 - bne _0802D288 - strb r0, [r5, #0xc] - b _0802D334 -_0802D276: - subs r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _0802D288 - adds r0, r5, #0 - movs r1, #0x4e - bl InitializeAnimation -_0802D288: - ldrb r0, [r5, #0xe] - cmp r0, #0 - bne _0802D2B4 - ldr r1, _0802D2B0 @ =gUnk_080CD774 - ldrb r0, [r5, #0xf] - adds r0, r0, r1 - ldrb r0, [r0] - strb r0, [r5, #0xe] - ldrb r0, [r5, #0xf] - adds r0, #1 - adds r0, r0, r1 - ldrb r0, [r0] - strb r0, [r5, #0x15] - ldrb r1, [r5, #0xf] - movs r0, #0x3f - ands r0, r1 - adds r0, #2 - strb r0, [r5, #0xf] - b _0802D2B8 - .align 2, 0 -_0802D2B0: .4byte gUnk_080CD774 -_0802D2B4: - subs r0, #1 - strb r0, [r5, #0xe] -_0802D2B8: - ldrb r0, [r5, #0x15] - cmp r0, #1 - bhi _0802D2D0 - adds r4, r5, #0 - adds r4, #0x84 - ldr r0, [r4] - ldrb r3, [r5, #0x15] - movs r1, #5 - movs r2, #0x40 - bl sub_0802EA48 - b _0802D2E4 -_0802D2D0: - adds r4, r5, #0 - adds r4, #0x84 - cmp r0, #0xff - beq _0802D2E4 - ldr r0, [r4] - ldrb r3, [r5, #0x15] - movs r1, #5 - movs r2, #0x40 - bl sub_0802EA68 -_0802D2E4: - ldr r5, _0802D338 @ =gRoomTransition - ldr r0, [r5] - movs r1, #0x1f - ands r0, r1 - cmp r0, #0 - bne _0802D2F8 - movs r0, #0x94 - lsls r0, r0, #1 - bl SoundReq -_0802D2F8: - ldr r0, [r5] - movs r1, #0xf - ands r0, r1 - cmp r0, #0 - bne _0802D32E - bl Random - movs r1, #5 - ands r1, r0 - ldr r0, [r4] - lsls r1, r1, #2 - adds r0, #0x3c - adds r0, r0, r1 - ldr r0, [r0] - movs r1, #0x48 - movs r2, #0 - bl CreateFx - cmp r0, #0 - beq _0802D32E - adds r2, r0, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2] -_0802D32E: - ldr r0, [r4] - bl sub_0802E768 -_0802D334: - pop {r4, r5, pc} - .align 2, 0 -_0802D338: .4byte gRoomTransition - - thumb_func_start sub_0802D33C -sub_0802D33C: @ 0x0802D33C - push {r4, r5, r6, r7, lr} - adds r0, #0x84 - ldr r6, [r0] - movs r4, #0 - adds r7, r6, #0 - adds r7, #0x3c - adds r5, r7, #0 -_0802D34A: - ldm r5!, {r0} - bl DeleteEntity - adds r4, #1 - cmp r4, #3 - bls _0802D34A - lsls r1, r4, #2 - adds r1, r7, r1 - ldr r0, [r1] - adds r0, #0x45 - movs r3, #0 - strb r3, [r0] - ldr r1, [r1] - adds r1, #0x6d - ldrb r2, [r1] - movs r0, #1 - orrs r0, r2 - strb r0, [r1] - ldr r0, [r6, #0x50] - adds r0, #0x45 - strb r3, [r0] - ldr r0, [r6, #0x50] - strb r3, [r0, #0xb] - ldr r3, [r6, #0x50] - ldrb r2, [r3, #0x18] - lsls r1, r2, #0x1e - lsrs r1, r1, #0x1e - movs r0, #2 - rsbs r0, r0, #0 - ands r1, r0 - subs r0, #2 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, #0x18] - bl DeleteThisEntity - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_0802D394 -sub_0802D394: @ 0x0802D394 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _0802D3B4 @ =gUnk_080CD7B8 - ldrb r0, [r4, #0xc] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - ldrb r0, [r4, #0x19] - movs r1, #0xc0 - orrs r0, r1 - strb r0, [r4, #0x19] - pop {r4, pc} - .align 2, 0 -_0802D3B4: .4byte gUnk_080CD7B8 - - thumb_func_start sub_0802D3B8 -sub_0802D3B8: @ 0x0802D3B8 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r4, r0, #0 - movs r0, #3 - bl CheckGlobalFlag - cmp r0, #0 - beq _0802D3DE - ldr r2, _0802D3F4 @ =gScreen - ldrh r1, [r2] - ldr r0, _0802D3F8 @ =0x0000FDFF - ands r0, r1 - strh r0, [r2] - ldr r0, _0802D3FC @ =gPlayerEntity - bl sub_0807AABC - bl DeleteThisEntity -_0802D3DE: - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r0, [r4, #0xa] - cmp r0, #6 - bls _0802D3EA - b _0802D63C -_0802D3EA: - lsls r0, r0, #2 - ldr r1, _0802D400 @ =_0802D404 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0802D3F4: .4byte gScreen -_0802D3F8: .4byte 0x0000FDFF -_0802D3FC: .4byte gPlayerEntity -_0802D400: .4byte _0802D404 -_0802D404: @ jump table - .4byte _0802D420 @ case 0 - .4byte _0802D544 @ case 1 - .4byte _0802D58C @ case 2 - .4byte _0802D5A8 @ case 3 - .4byte _0802D5EC @ case 4 - .4byte _0802D5F6 @ case 5 - .4byte _0802D61A @ case 6 -_0802D420: - movs r2, #0 - movs r0, #2 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - adds r3, r4, #0 - adds r3, #0x29 - ldrb r0, [r3] - movs r1, #7 - orrs r0, r1 - strb r0, [r3] - adds r0, r4, #0 - adds r0, #0x75 - strb r2, [r0] - adds r0, #0xb - strb r2, [r0] - subs r0, #7 - strb r2, [r0] - movs r0, #0x96 - str r0, [r4, #0x7c] - adds r0, r4, #0 - bl sub_0802EB9C - movs r0, #0x54 - bl zMalloc - adds r1, r4, #0 - adds r1, #0x84 - str r0, [r1] - adds r5, r0, #0 - adds r7, r1, #0 - cmp r5, #0 - bne _0802D470 - adds r0, r4, #0 - bl sub_0804A7D4 - bl DeleteThisEntity -_0802D470: - ldr r0, [r7] - str r0, [r4, #0x64] - movs r6, #0 - movs r0, #0 - mov r8, r0 -_0802D47A: - movs r0, #0x24 - movs r1, #1 - bl CreateEnemy - str r0, [r4, #0x54] - adds r3, r6, #1 - cmp r0, #0 - beq _0802D4D6 - strb r3, [r0, #0xb] - ldr r1, [r4, #0x54] - adds r0, r4, #0 - adds r0, #0x38 - ldrb r0, [r0] - adds r1, #0x38 - strb r0, [r1] - ldr r1, [r4, #0x54] - ldrh r0, [r4, #0x2e] - strh r0, [r1, #0x2e] - ldr r1, [r4, #0x54] - lsls r0, r3, #1 - adds r0, r0, r3 - lsls r0, r0, #2 - ldrh r2, [r4, #0x32] - adds r0, r0, r2 - strh r0, [r1, #0x32] - ldr r0, [r4, #0x54] - str r4, [r0, #0x50] - ldr r0, [r4, #0x54] - adds r0, #0x84 - ldr r1, [r7] - str r1, [r0] - lsls r2, r6, #2 - adds r0, r5, #0 - adds r0, #0x3c - adds r0, r0, r2 - ldr r1, [r4, #0x54] - str r1, [r0] - adds r2, r5, r2 - movs r0, #0x10 - strb r0, [r2, #1] - mov r0, r8 - strb r0, [r2, #0x19] - adds r0, r5, #0 - adds r0, #0x35 - mov r1, r8 - strb r1, [r0] -_0802D4D6: - adds r6, r3, #0 - cmp r6, #4 - bls _0802D47A - movs r0, #0x24 - movs r1, #2 - bl CreateEnemy - adds r2, r0, #0 - str r2, [r4, #0x54] - cmp r2, #0 - beq _0802D52E - adds r0, r4, #0 - adds r0, #0x38 - ldrb r1, [r0] - adds r0, r2, #0 - adds r0, #0x38 - strb r1, [r0] - ldr r1, [r4, #0x54] - ldrh r0, [r4, #0x2e] - movs r3, #0 - strh r0, [r1, #0x2e] - ldr r2, [r4, #0x54] - adds r1, r6, #1 - lsls r0, r1, #1 - adds r0, r0, r1 - lsls r0, r0, #2 - ldrh r1, [r4, #0x32] - adds r0, r0, r1 - strh r0, [r2, #0x32] - ldr r0, [r4, #0x54] - str r4, [r0, #0x50] - ldr r0, [r4, #0x54] - adds r0, #0x84 - ldr r1, [r7] - str r1, [r0] - ldr r0, [r4, #0x54] - str r0, [r5, #0x50] - movs r0, #0x10 - strb r0, [r5, #0x15] - adds r0, r5, #0 - adds r0, #0x2d - strb r3, [r0] - adds r0, #8 - strb r3, [r0] -_0802D52E: -.ifndef EU - ldr r0, _0802D540 @ =gPlayerState - adds r0, #0x8b - movs r1, #3 - strb r1, [r0] -.endif - adds r0, r4, #0 - movs r1, #0x4c - bl InitializeAnimation - b _0802D63C - .align 2, 0 -.ifndef EU -_0802D540: .4byte gPlayerState -.endif -_0802D544: - ldrb r0, [r4, #0xb] - cmp r0, #1 - bne _0802D55C - ldrb r0, [r4, #0x10] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - adds r2, r4, #0 - adds r2, #0x3b - ldrb r0, [r2] - orrs r1, r0 - strb r1, [r2] -_0802D55C: - ldr r1, _0802D588 @ =gUnk_080CD7C4 - ldrb r0, [r4, #0xb] - lsls r0, r0, #2 - adds r0, r0, r1 - ldrb r0, [r0, #1] - adds r3, r4, #0 - adds r3, #0x29 - movs r1, #7 - ands r1, r0 - ldrb r2, [r3] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - movs r0, #0 - strb r0, [r4, #0xf] - adds r0, r4, #0 - movs r1, #0x24 - bl InitializeAnimation - b _0802D63C - .align 2, 0 -_0802D588: .4byte gUnk_080CD7C4 -_0802D58C: - adds r2, r4, #0 - adds r2, #0x29 - ldrb r0, [r2] - movs r1, #8 - rsbs r1, r1, #0 - ands r1, r0 - strb r1, [r2] - movs r0, #0 - strb r0, [r4, #0xf] - adds r0, r4, #0 - movs r1, #0 - bl InitAnimationForceUpdate - b _0802D63C -_0802D5A8: - ldr r0, _0802D5E8 @ =gUnk_080CD884 - ldrb r1, [r0] - adds r0, r4, #0 - adds r0, #0x74 - movs r2, #0 - strb r1, [r0] - adds r0, #1 - strb r2, [r0] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #6 - orrs r0, r1 - strb r0, [r2] - adds r2, #0x12 - ldrb r1, [r2] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r2] - ldr r0, [r4, #0x50] - adds r1, r4, #0 - bl CopyPosition - adds r0, r4, #0 - movs r1, #0x4f - bl InitializeAnimation - b _0802D63C - .align 2, 0 -_0802D5E8: .4byte gUnk_080CD884 -_0802D5EC: - adds r0, r4, #0 - movs r1, #0x2c - bl InitAnimationForceUpdate - b _0802D63C -_0802D5F6: - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #6 - orrs r0, r1 - strb r0, [r2] - ldr r0, [r4, #0x50] - adds r1, r4, #0 - bl CopyPosition - adds r0, r4, #0 - movs r1, #0x2d - bl InitAnimationForceUpdate - b _0802D63C -_0802D61A: - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #6 - orrs r0, r1 - strb r0, [r2] - ldr r0, [r4, #0x50] - adds r1, r4, #0 - bl CopyPosition - adds r0, r4, #0 - movs r1, #0x50 - bl InitializeAnimation -_0802D63C: - ldrb r0, [r4, #0xa] - cmp r0, #0 - beq _0802D648 - adds r0, r4, #0 - bl sub_0802D86C -_0802D648: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_0802D650 -sub_0802D650: @ 0x0802D650 - push {r4, lr} - adds r4, r0, #0 -.ifdef EU - bl sub_08078B48 -.endif - ldr r1, _0802D670 @ =gUnk_080CD7E4 - ldrb r0, [r4, #0xd] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - adds r4, #0x84 - ldr r0, [r4] - bl sub_0802E7E4 - pop {r4, pc} - .align 2, 0 -_0802D670: .4byte gUnk_080CD7E4 - - thumb_func_start sub_0802D674 -sub_0802D674: @ 0x0802D674 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - ldr r0, _0802D6B4 @ =gUnk_02034490 - movs r7, #1 - strb r7, [r0] - ldr r5, _0802D6B8 @ =gPlayerEntity - ldr r6, [r5, #0x34] - cmp r6, #0 - bne _0802D6EC - ldr r0, [r4, #0x7c] - cmp r0, #0x96 - bne _0802D692 - ldr r0, _0802D6BC @ =0x00000127 - bl SoundReq -_0802D692: - ldr r0, [r4, #0x7c] - subs r1, r0, #1 - str r1, [r4, #0x7c] - movs r0, #1 - rsbs r0, r0, #0 - cmp r1, r0 - bne _0802D6C4 - strb r7, [r4, #0xd] - movs r0, #0x5a - str r0, [r4, #0x7c] - ldr r0, _0802D6C0 @ =gRoomControls - str r4, [r0, #0x30] - ldr r0, _0802D6BC @ =0x00000127 - bl SoundReq - b _0802D6EC - .align 2, 0 -_0802D6B4: .4byte gUnk_02034490 -_0802D6B8: .4byte gPlayerEntity -_0802D6BC: .4byte 0x00000127 -_0802D6C0: .4byte gRoomControls -_0802D6C4: - cmp r1, #0x3c - bhi _0802D6DC - cmp r1, #0x3c - bne _0802D6D8 - movs r2, #0x18 - rsbs r2, r2, #0 - adds r0, r5, #0 - movs r1, #0xc - bl CreateSpeechBubbleExclamationMark -_0802D6D8: - strb r6, [r5, #0x14] - b _0802D6EC -_0802D6DC: - cmp r1, #0x59 - bhi _0802D6E4 - movs r0, #2 - b _0802D6EA -_0802D6E4: - cmp r1, #0x77 - bhi _0802D6EC - movs r0, #6 -_0802D6EA: - strb r0, [r5, #0x14] -_0802D6EC: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_0802D6F0 -sub_0802D6F0: @ 0x0802D6F0 - push {lr} - adds r2, r0, #0 - ldr r0, [r2, #0x7c] - subs r0, #1 - str r0, [r2, #0x7c] - movs r1, #1 - rsbs r1, r1, #0 - cmp r0, r1 - bne _0802D712 - movs r0, #2 - strb r0, [r2, #0xd] - movs r0, #0x5a - str r0, [r2, #0x7c] - movs r0, #0x96 - movs r1, #0 - bl InitScreenShake -_0802D712: - pop {pc} - - thumb_func_start sub_0802D714 -sub_0802D714: @ 0x0802D714 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x7c] - subs r0, #1 - str r0, [r4, #0x7c] - movs r1, #1 - rsbs r1, r1, #0 - cmp r0, r1 - bne _0802D77A - adds r0, r4, #0 - adds r0, #0x84 - ldr r5, [r0] - movs r1, #0 - movs r3, #0 - movs r2, #0x10 - adds r0, r5, #0 -_0802D734: - strh r3, [r0, #0x18] - strb r2, [r0, #1] - adds r0, #4 - adds r1, #1 - cmp r1, #5 - bls _0802D734 - movs r1, #0 - movs r0, #3 - strb r0, [r4, #0xd] - strb r1, [r4, #0xb] - ldrb r1, [r4, #0x18] - subs r0, #7 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r4, #0x18] - adds r0, r4, #0 - movs r1, #0x4d - bl InitializeAnimation - movs r0, #0x24 - movs r1, #5 - bl CreateEnemy - str r0, [r4, #0x54] - cmp r0, #0 - beq _0802D774 - str r4, [r0, #0x50] - ldr r0, [r4, #0x54] - str r0, [r5, #0x38] - adds r0, #0x84 - str r5, [r0] -_0802D774: - ldr r1, [r5, #0x50] - movs r0, #0x18 - strb r0, [r1, #0xe] -_0802D77A: - pop {r4, r5, pc} - - thumb_func_start sub_0802D77C -sub_0802D77C: @ 0x0802D77C - push {r4, r5, lr} - adds r5, r0, #0 - ldr r0, _0802D7B0 @ =gRoomTransition - ldr r4, [r0] - movs r0, #1 - ands r4, r0 - cmp r4, #0 - bne _0802D7AC - adds r0, r5, #0 - bl sub_0802E430 - ldrb r0, [r5, #0xb] - cmp r0, #2 - bne _0802D7AC - strb r4, [r5, #0xf] - strb r4, [r5, #0xe] - movs r0, #4 - strb r0, [r5, #0xd] - adds r0, r5, #0 - adds r0, #0x84 - ldr r0, [r0] - ldr r1, [r0, #0x50] - movs r0, #0xc - strb r0, [r1, #0xe] -_0802D7AC: - pop {r4, r5, pc} - .align 2, 0 -_0802D7B0: .4byte gRoomTransition - - thumb_func_start sub_0802D7B4 -sub_0802D7B4: @ 0x0802D7B4 -.ifdef EU - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xe] - adds r2, r0, #0 - cmp r2, #0 - bne _0802D7ACEU - ldr r4, _0802D780 @ =gUnk_080CD7F8 - ldrb r3, [r5, #0xf] - adds r0, r3, r4 - ldrb r1, [r0] - adds r0, r1, #0 - cmp r0, #0xff - bne _0802D790 - strb r2, [r5, #0xf] - strb r2, [r5, #0xe] - movs r0, #1 - strb r0, [r5, #0xc] - strb r2, [r5, #0xd] - adds r0, r5, #0 - adds r0, #0x84 - ldr r0, [r0] - ldr r1, [r0, #0x50] - movs r0, #0x18 - strb r0, [r1, #0xe] - ldr r1, _0802D784 @ =gRoomControls - ldr r0, _0802D788 @ =gPlayerEntity - str r0, [r1, #0x30] - ldr r0, _0802D78C @ =gUnk_02034490 - strb r2, [r0] - movs r0, #0x2e - bl SoundReq - b _0802D7E8 - .align 2, 0 -_0802D780: .4byte gUnk_080CD7F8 -_0802D784: .4byte gRoomControls -_0802D788: .4byte gPlayerEntity -_0802D78C: .4byte gUnk_02034490 -_0802D790: - strb r1, [r5, #0xe] - adds r0, r3, #1 - adds r0, r0, r4 - ldrb r0, [r0] - strb r0, [r5, #0x15] - ldrb r0, [r5, #0xf] - adds r0, #2 - strb r0, [r5, #0xf] - ldr r0, _0802D7A8 @ =0x00000127 - bl SoundReq - b _0802D7B0EU - .align 2, 0 -_0802D7A8: .4byte 0x00000127 -_0802D7ACEU: - subs r0, #1 - strb r0, [r5, #0xe] -_0802D7B0EU: - ldrb r0, [r5, #0x15] - cmp r0, #1 - bhi _0802D7C8 - adds r4, r5, #0 - adds r4, #0x84 - ldr r0, [r4] - ldrb r3, [r5, #0x15] - movs r1, #5 - movs r2, #0x40 - bl sub_0802EA48 - b _0802D7DC -_0802D7C8: - adds r4, r5, #0 - adds r4, #0x84 - cmp r0, #0xff - beq _0802D7DC - ldr r0, [r4] - ldrb r3, [r5, #0x15] - movs r1, #5 - movs r2, #0x40 - bl sub_0802EA68 -_0802D7DC: - ldr r0, [r4] - bl sub_0802E768 - adds r0, r5, #0 - bl sub_0802E518 -_0802D7E8: - pop {r4, r5, pc} - .align 2, 0 - -.else - push {r4, r5, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xe] - adds r3, r0, #0 - cmp r3, #0 - bne _0802D82C - ldr r4, _0802D7FC @ =gUnk_080CD7F8 - ldrb r2, [r5, #0xf] - adds r0, r2, r4 - ldrb r1, [r0] - adds r0, r1, #0 - cmp r0, #0xff - bne _0802D810 - strb r3, [r5, #0xf] - strb r3, [r5, #0xe] - movs r2, #1 - strb r2, [r5, #0xc] - strb r3, [r5, #0xd] - adds r0, r5, #0 - adds r0, #0x84 - ldr r0, [r0] - ldr r1, [r0, #0x50] - movs r0, #0x18 - strb r0, [r1, #0xe] - ldr r1, _0802D800 @ =gRoomControls - ldr r0, _0802D804 @ =gPlayerEntity - str r0, [r1, #0x30] - ldr r0, _0802D808 @ =gPlayerState - adds r0, #0x8b - strb r2, [r0] - ldr r0, _0802D80C @ =gUnk_02034490 - strb r3, [r0] - movs r0, #0x2e - bl SoundReq - b _0802D868 - .align 2, 0 -_0802D7FC: .4byte gUnk_080CD7F8 -_0802D800: .4byte gRoomControls -_0802D804: .4byte gPlayerEntity -_0802D808: .4byte gPlayerState -_0802D80C: .4byte gUnk_02034490 -_0802D810: - strb r1, [r5, #0xe] - adds r0, r2, #1 - adds r0, r0, r4 - ldrb r0, [r0] - strb r0, [r5, #0x15] - ldrb r0, [r5, #0xf] - adds r0, #2 - strb r0, [r5, #0xf] - ldr r0, _0802D828 @ =0x00000127 - bl SoundReq - b _0802D830 - .align 2, 0 -_0802D828: .4byte 0x00000127 -_0802D82C: - subs r0, #1 - strb r0, [r5, #0xe] -_0802D830: - ldrb r0, [r5, #0x15] - cmp r0, #1 - bhi _0802D848 - adds r4, r5, #0 - adds r4, #0x84 - ldr r0, [r4] - ldrb r3, [r5, #0x15] - movs r1, #5 - movs r2, #0x40 - bl sub_0802EA48 - b _0802D85C -_0802D848: - adds r4, r5, #0 - adds r4, #0x84 - cmp r0, #0xff - beq _0802D85C - ldr r0, [r4] - ldrb r3, [r5, #0x15] - movs r1, #5 - movs r2, #0x40 - bl sub_0802EA68 -_0802D85C: - ldr r0, [r4] - bl sub_0802E768 - adds r0, r5, #0 - bl sub_0802E518 -_0802D868: - pop {r4, r5, pc} - .align 2, 0 -.endif - - thumb_func_start sub_0802D86C -sub_0802D86C: @ 0x0802D86C - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xa] - cmp r0, #6 - bls _0802D878 - b _0802DB7E -_0802D878: - lsls r0, r0, #2 - ldr r1, _0802D884 @ =_0802D888 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0802D884: .4byte _0802D888 -_0802D888: @ jump table - .4byte _0802DB64 @ case 0 - .4byte _0802D8A4 @ case 1 - .4byte _0802D8CE @ case 2 - .4byte _0802DA54 @ case 3 - .4byte _0802D94C @ case 4 - .4byte _0802D9A2 @ case 5 - .4byte _0802D9F8 @ case 6 -_0802D8A4: - ldrb r0, [r4, #0xb] - cmp r0, #1 - bne _0802D8CE - ldr r0, [r4, #0x50] - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #0 - bne _0802D8BE - ldrb r0, [r4, #0x18] - lsls r0, r0, #0x1e - lsrs r0, r0, #0x1e - cmp r0, #1 - beq _0802D8C6 -_0802D8BE: - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - b _0802D8CC -_0802D8C6: - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 -_0802D8CC: - strb r0, [r4, #0x10] -_0802D8CE: - ldrb r0, [r4, #0x18] - lsls r0, r0, #0x1e - lsrs r0, r0, #0x1e - movs r1, #1 - ands r0, r1 - cmp r0, #0 - bne _0802D8DE - b _0802DB7E -_0802D8DE: - ldr r0, [r4, #0x50] - adds r0, #0x3d - ldrb r0, [r0] - adds r1, r4, #0 - adds r1, #0x3d - strb r0, [r1] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0802D918 - ldrb r0, [r4, #0xf] - cmp r0, #0 - bne _0802D906 - adds r0, r4, #0 - bl UnloadOBJPalette - adds r0, r4, #0 - movs r1, #0xc9 - bl LoadObjPalette - b _0802D918 -_0802D906: - subs r0, #1 - strb r0, [r4, #0xf] - adds r0, r4, #0 - bl UnloadOBJPalette - adds r0, r4, #0 - movs r1, #0xca - bl LoadObjPalette -_0802D918: - ldr r0, [r4, #0x50] - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #0 - bne _0802D924 - b _0802DB7E -_0802D924: - ldr r1, _0802D944 @ =gPlayerEntity - adds r0, r4, #0 - movs r2, #8 - movs r3, #8 - bl EntityInRectRadius - cmp r0, #0 - bne _0802D936 - b _0802DB7E -_0802D936: - ldr r0, _0802D948 @ =gPlayerState - movs r1, #1 - strb r1, [r0, #0x14] - adds r0, #0x3f - movs r1, #0xfc - strb r1, [r0] - b _0802DB7E - .align 2, 0 -_0802D944: .4byte gPlayerEntity -_0802D948: .4byte gPlayerState -_0802D94C: - adds r0, r4, #0 - adds r0, #0x5a - ldrb r0, [r0] - cmp r0, #0 - bne _0802D95E - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - b _0802DB7E -_0802D95E: - movs r1, #0xc0 - lsls r1, r1, #5 - adds r0, r4, #0 - bl GravityUpdate - adds r2, r0, #0 - cmp r2, #0 - beq _0802D970 - b _0802DB7E -_0802D970: - ldr r0, [r4, #0x50] - adds r0, #0x7b - movs r1, #1 - strb r1, [r0] - strb r2, [r4, #0xe] -_0802D97A: - ldrb r3, [r4, #0xe] - adds r0, r4, #0 - movs r1, #0x67 - movs r2, #0 - bl CreateObjectWithParent - ldrb r0, [r4, #0xe] - adds r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #7 - bls _0802D97A - movs r0, #0xa8 - lsls r0, r0, #1 - bl SoundReq -_0802D99C: - bl DeleteThisEntity - b _0802DB7E -_0802D9A2: - ldr r0, _0802D9F4 @ =gRoomTransition - ldr r0, [r0] - movs r1, #1 - ands r0, r1 - cmp r0, #0 - beq _0802D9B8 - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xc] - cmp r0, #2 - bne _0802D9B8 - b _0802DB7E -_0802D9B8: - adds r0, r4, #0 - bl UpdateAnimationSingleFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - bne _0802D9CE - b _0802DB7E -_0802D9CE: - movs r0, #0x24 - movs r1, #6 - bl CreateEnemy - adds r1, r0, #0 - str r1, [r4, #0x54] - cmp r1, #0 - beq _0802D99C - ldr r0, [r4, #0x50] - str r0, [r1, #0x50] - adds r2, r4, #0 - adds r2, #0x84 - ldr r1, [r2] - ldr r0, [r4, #0x54] - str r0, [r1, #0x38] - adds r0, #0x84 - ldr r1, [r2] - str r1, [r0] - b _0802D99C - .align 2, 0 -_0802D9F4: .4byte gRoomTransition -_0802D9F8: - ldr r0, _0802DA50 @ =gRoomTransition - ldr r0, [r0] - movs r1, #1 - ands r0, r1 - cmp r0, #0 - beq _0802DA0E - ldr r0, [r4, #0x50] - ldrb r0, [r0, #0xc] - cmp r0, #2 - bne _0802DA0E - b _0802DB7E -_0802DA0E: - 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 - bne _0802DA24 - b _0802DB7E -_0802DA24: - movs r0, #0x24 - movs r1, #3 - bl CreateEnemy - adds r1, r0, #0 - str r1, [r4, #0x54] - cmp r1, #0 - beq _0802D99C - ldr r0, [r4, #0x50] - str r0, [r1, #0x50] - adds r1, r4, #0 - adds r1, #0x84 - ldr r0, [r1] - ldrb r0, [r0, #1] - strb r0, [r4, #0xe] - ldr r2, [r1] - ldr r0, [r4, #0x54] - str r0, [r2, #0x38] - adds r0, #0x84 - ldr r1, [r1] - str r1, [r0] - b _0802D99C - .align 2, 0 -_0802DA50: .4byte gRoomTransition -_0802DA54: - adds r0, r4, #0 - adds r0, #0x74 - ldrb r1, [r0] - adds r6, r0, #0 - cmp r1, #0 - beq _0802DA96 - subs r0, r1, #1 - strb r0, [r6] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0802DA96 - adds r5, r4, #0 - adds r5, #0x75 - ldrb r0, [r5] - adds r0, #2 - strb r0, [r5] - ldr r7, _0802DAD4 @ =gUnk_080CD884 - ldrb r0, [r5] - adds r0, r0, r7 - ldrb r0, [r0] - strb r0, [r6] - cmp r0, #0 - beq _0802DA96 - adds r0, r4, #0 - bl UnloadOBJPalette - ldrb r0, [r5] - adds r0, #1 - adds r0, r0, r7 - ldrb r1, [r0] - adds r0, r4, #0 - bl LoadObjPalette -_0802DA96: - adds r0, r4, #0 - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0802DAD8 - ldrb r2, [r6] - cmp r2, #0 - bne _0802DAD8 - movs r0, #0x7f - ands r0, r1 - cmp r0, #0x1d - bne _0802DB20 - movs r0, #0xc0 - lsls r0, r0, #0xa - str r0, [r4, #0x20] - ldr r1, [r4, #0x50] - movs r0, #4 - strb r0, [r1, #0xd] - ldr r0, [r4, #0x50] - strb r2, [r0, #0xb] - ldr r0, [r4, #0x50] - adds r0, #0x7b - strb r2, [r0] - movs r0, #0x86 - lsls r0, r0, #1 - bl SoundReq - b _0802DB20 - .align 2, 0 -_0802DAD4: .4byte gUnk_080CD884 -_0802DAD8: - adds r0, r4, #0 - adds r0, #0x84 - ldr r2, [r0] - ldrb r1, [r4, #0xe] - adds r3, r0, #0 - ldrb r0, [r2, #1] - cmp r1, r0 - beq _0802DB20 - adds r0, r1, #0 - ldrb r1, [r2, #1] - subs r0, r0, r1 - movs r1, #0x1f - ands r0, r1 - cmp r0, #0x10 - ble _0802DB08 - ldrb r0, [r4, #0x1e] - adds r0, #1 - strb r0, [r4, #0x1e] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x30 - bls _0802DB1A - movs r0, #0x28 - b _0802DB18 -_0802DB08: - ldrb r0, [r4, #0x1e] - subs r0, #1 - strb r0, [r4, #0x1e] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x27 - bhi _0802DB1A - movs r0, #0x30 -_0802DB18: - strb r0, [r4, #0x1e] -_0802DB1A: - ldr r0, [r3] - ldrb r0, [r0, #1] - strb r0, [r4, #0xe] -_0802DB20: - ldr r0, [r4, #0x20] - cmp r0, #0 - ble _0802DB7E - movs r1, #0xc0 - lsls r1, r1, #5 - adds r0, r4, #0 - bl GravityUpdate - ldr r0, [r4, #0x20] - cmp r0, #0 - bgt _0802DB7E - movs r0, #0x24 - movs r1, #4 - bl CreateEnemy - adds r1, r0, #0 - str r1, [r4, #0x54] - cmp r1, #0 - beq _0802DB7E - ldr r0, [r4, #0x50] - str r0, [r1, #0x50] - adds r2, r4, #0 - adds r2, #0x84 - ldr r1, [r2] - ldr r0, [r4, #0x54] - str r0, [r1, #0x38] - adds r0, #0x84 - ldr r1, [r2] - str r1, [r0] - ldr r1, [r4, #0x54] - adds r0, r4, #0 - bl CopyPosition - b _0802D99C -_0802DB64: - ldr r1, _0802DB80 @ =gUnk_080CD810 - ldrb r0, [r4, #0xd] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - adds r0, r4, #0 - adds r0, #0x84 - ldr r0, [r0] - bl sub_0802E7E4 -_0802DB7E: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0802DB80: .4byte gUnk_080CD810 - - thumb_func_start sub_0802DB84 -sub_0802DB84: @ 0x0802DB84 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r1, _0802DBB0 @ =gPlayerEntity - bl GetFacingDirection - strb r0, [r5, #0x15] - adds r1, r5, #0 - adds r1, #0x84 - ldr r2, [r1] - ldrb r1, [r2, #1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r1, r0 - bne _0802DBB4 - movs r0, #1 - strb r0, [r5, #0xd] - adds r1, r5, #0 - adds r1, #0x78 - movs r0, #0 - strb r0, [r1] - b _0802DC1A - .align 2, 0 -_0802DBB0: .4byte gPlayerEntity -_0802DBB4: - ldrb r0, [r2, #1] - ldrb r1, [r5, #0x15] - subs r0, r0, r1 - movs r1, #0x1f - ands r0, r1 - cmp r0, #0x10 - ble _0802DBCE - movs r3, #0 - ldrb r1, [r5, #0xe] - movs r0, #0xfe - ands r0, r1 - strb r0, [r5, #0xe] - b _0802DBD2 -_0802DBCE: - movs r3, #1 - strb r3, [r5, #0xe] -_0802DBD2: - adds r0, r5, #0 - adds r0, #0x79 - ldrb r0, [r0] - cmp r0, #1 - beq _0802DBF0 - cmp r0, #1 - bgt _0802DBE6 - cmp r0, #0 - beq _0802DBEC - b _0802DBF8 -_0802DBE6: - cmp r0, #2 - beq _0802DBF4 - b _0802DBF8 -_0802DBEC: - movs r0, #0x30 - b _0802DBF6 -_0802DBF0: - movs r0, #0x40 - b _0802DBF6 -_0802DBF4: - movs r0, #0x50 -_0802DBF6: - strh r0, [r5, #0x24] -_0802DBF8: - adds r4, r5, #0 - adds r4, #0x84 - ldr r0, [r4] - movs r1, #0x24 - ldrsh r2, [r5, r1] - movs r1, #5 - bl sub_0802EA48 - ldr r0, [r4] - bl sub_0802E768 - adds r0, r5, #0 - bl sub_0802E518 - adds r0, r5, #0 - bl sub_0802EBC4 -_0802DC1A: - pop {r4, r5, pc} - - thumb_func_start sub_0802DC1C -sub_0802DC1C: @ 0x0802DC1C - push {r4, r5, r6, lr} - adds r5, r0, #0 - ldr r1, _0802DC40 @ =gPlayerEntity - bl GetFacingDirection - adds r3, r0, #0 - adds r1, r5, #0 - adds r1, #0x84 - ldr r0, [r1] - ldrb r0, [r0, #1] - subs r3, r0, r3 - movs r0, #0x1f - ands r3, r0 - cmp r3, #0x10 - bls _0802DC44 - cmp r3, #0x1d - bhi _0802DC54 - b _0802DC48 - .align 2, 0 -_0802DC40: .4byte gPlayerEntity -_0802DC44: - cmp r3, #2 - bls _0802DC54 -_0802DC48: - movs r0, #0 - strb r0, [r5, #0xd] - ldr r1, [r1] - ldr r1, [r1, #0x50] - strb r0, [r1, #0xe] - b _0802DCDE -_0802DC54: - adds r0, r5, #0 - adds r0, #0x78 - ldrb r1, [r0] - adds r6, r0, #0 - cmp r1, #0 - beq _0802DC6A - subs r0, r1, #1 - strb r0, [r6] - adds r4, r5, #0 - adds r4, #0x84 - b _0802DCC6 -_0802DC6A: - ldrb r0, [r5, #0xe] - movs r3, #0 - cmp r0, #1 - bne _0802DC74 - movs r3, #1 -_0802DC74: - adds r4, r5, #0 - adds r4, #0x84 - ldr r0, [r4] - movs r1, #5 - movs r2, #0x20 - bl sub_0802EA48 - ldr r1, [r4] - ldrh r0, [r1] - ldrh r1, [r1, #0x14] - movs r2, #4 - bl sub_0802EA18 - cmp r0, #0 - beq _0802DCC6 - ldrb r0, [r5, #0xe] - cmp r0, #1 - bne _0802DCAC - ldr r2, [r4] - ldrb r0, [r2, #1] - subs r0, #4 - movs r1, #0x1f - ands r0, r1 - lsls r0, r0, #8 - movs r1, #0xff - orrs r0, r1 - strh r0, [r2, #0x14] - b _0802DCBA -_0802DCAC: - ldr r0, [r4] - ldrb r1, [r0, #1] - adds r1, #4 - movs r2, #0x1f - ands r1, r2 - lsls r1, r1, #8 - strh r1, [r0, #0x14] -_0802DCBA: - ldrb r0, [r5, #0xe] - movs r1, #1 - eors r0, r1 - strb r0, [r5, #0xe] - movs r0, #0xc - strb r0, [r6] -_0802DCC6: - adds r0, r5, #0 - bl sub_0802E9B0 - ldr r0, [r4] - bl sub_0802E768 - adds r0, r5, #0 - bl sub_0802E518 - adds r0, r5, #0 - bl sub_0802EBC4 -_0802DCDE: - pop {r4, r5, r6, pc} - - thumb_func_start sub_0802DCE0 -sub_0802DCE0: @ 0x0802DCE0 - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r5, r4, #0 - adds r5, #0x84 - ldr r0, [r5] - ldr r1, [r0, #0x50] - ldrb r0, [r1, #0xe] - cmp r0, #0xc - beq _0802DD44 - ldr r1, _0802DD1C @ =gPlayerEntity - adds r0, r4, #0 - bl GetFacingDirection - strb r0, [r4, #0x15] - ldr r2, [r5] - ldrb r1, [r2, #0x15] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r1, r0 - bne _0802DD20 - ldr r1, [r2, #0x50] - movs r0, #0xc - strb r0, [r1, #0xe] - adds r1, r4, #0 - adds r1, #0x82 - movs r0, #4 - strb r0, [r1] - movs r0, #0 - strb r0, [r4, #0xf] - b _0802DDD0 - .align 2, 0 -_0802DD1C: .4byte gPlayerEntity -_0802DD20: - ldrb r0, [r2, #0x15] - ldrb r1, [r4, #0x15] - subs r0, r0, r1 - movs r1, #0x1f - ands r0, r1 - movs r3, #1 - cmp r0, #0x10 - ble _0802DD32 - movs r3, #0 -_0802DD32: - adds r0, r2, #0 - movs r1, #5 - movs r2, #0x20 - bl sub_0802EA48 - ldr r0, [r5] - bl sub_0802E768 - b _0802DDD0 -_0802DD44: - ldrb r0, [r4, #0xf] - cmp r0, #5 - bhi _0802DD74 - adds r1, r4, #0 - adds r1, #0x82 - ldrb r0, [r1] - cmp r0, #0 - bne _0802DD6E - movs r2, #4 - strb r2, [r1] - ldr r1, [r5] - ldrb r0, [r4, #0xf] - lsls r0, r0, #2 - adds r1, #0x3c - adds r1, r1, r0 - ldr r0, [r1] - strb r2, [r0, #0xf] - ldrb r0, [r4, #0xf] - adds r0, #1 - strb r0, [r4, #0xf] - b _0802DDD0 -_0802DD6E: - subs r0, #1 - strb r0, [r1] - b _0802DDD0 -_0802DD74: - ldrb r6, [r1, #0xf] - cmp r6, #0 - bne _0802DDD0 - adds r0, r4, #0 - movs r1, #0xa - movs r2, #0 - bl CreateProjectileWithParent - adds r1, r0, #0 - str r1, [r4, #0x54] - cmp r1, #0 - beq _0802DDB2 - ldr r0, [r5] - ldrb r0, [r0, #0x15] - strb r0, [r1, #0x15] - ldr r2, [r4, #0x54] - ldr r0, [r5] - ldr r0, [r0, #0x50] - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0xf - ands r0, r1 - strb r0, [r2, #0xb] - ldr r1, [r4, #0x54] - ldr r0, [r5] - ldr r0, [r0, #0x50] - str r0, [r1, #0x50] - ldr r1, [r4, #0x54] - ldr r0, [r5] - ldr r0, [r0, #0x3c] - str r0, [r1, #0x54] -_0802DDB2: - ldr r0, [r5] - ldr r0, [r0, #0x50] - strb r6, [r0, #0xe] - adds r1, r4, #0 - adds r1, #0x74 - ldrb r0, [r1] - cmp r0, #0 - bne _0802DDC8 - movs r0, #1 - strb r0, [r1] - b _0802DDD0 -_0802DDC8: - strb r6, [r4, #0xd] - adds r0, r4, #0 - bl sub_0802EB9C -_0802DDD0: - adds r0, r4, #0 - bl sub_0802E518 - pop {r4, r5, r6, pc} - - thumb_func_start sub_0802DDD8 -sub_0802DDD8: @ 0x0802DDD8 - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - adds r5, r0, #0 - adds r0, #0x76 - ldrb r0, [r0] - movs r7, #4 - cmp r0, #0 - beq _0802DE06 - movs r7, #6 - adds r0, r5, #0 - adds r0, #0x79 - ldrb r0, [r0] - cmp r0, #2 - bne _0802DE06 - bl Random - movs r1, #1 - ands r1, r0 - cmp r1, #0 - bne _0802DE06 - movs r7, #0xc -_0802DE06: - ldrb r0, [r5, #0xb] - cmp r0, #0 - beq _0802DE2E - cmp r0, #0 - bge _0802DE12 - b _0802DF9A -_0802DE12: - cmp r0, #2 - ble _0802DE18 - b _0802DF9A -_0802DE18: - adds r6, r5, #0 - adds r6, #0x84 - cmp r0, #1 - beq _0802DEFE - adds r0, r5, #0 - adds r0, #0x76 - ldrb r1, [r0] - mov sb, r0 - cmp r1, #0 - bne _0802DE76 - b _0802DE6C -_0802DE2E: - adds r6, r5, #0 - adds r6, #0x84 - ldr r0, [r6] - bl sub_0802EA88 - cmp r0, #0 - beq _0802DE3E - b _0802DF9A -_0802DE3E: - movs r4, #1 - strb r4, [r5, #0xb] - strb r0, [r5, #0xf] - bl Random - ands r0, r4 - cmp r0, #0 - bne _0802DE58 - strb r0, [r5, #0x15] - ldr r0, [r6] - ldrb r0, [r0, #1] - adds r0, r0, r7 - b _0802DE60 -_0802DE58: - strb r4, [r5, #0x15] - ldr r0, [r6] - ldrb r0, [r0, #1] - subs r0, r0, r7 -_0802DE60: - movs r1, #0x1f - ands r0, r1 - adds r1, r5, #0 - adds r1, #0x7a - strb r0, [r1] - b _0802DF9A -_0802DE6C: - movs r2, #1 - movs r0, #2 - mov r8, r0 - movs r4, #1 - b _0802DE7E -_0802DE76: - movs r2, #2 - movs r1, #6 - mov r8, r1 - movs r4, #0 -_0802DE7E: - adds r1, r5, #0 - adds r1, #0x84 - ldr r0, [r1] - ldr r0, [r0, #0x50] - ldrb r0, [r0, #0xf] - adds r6, r1, #0 - cmp r0, #1 - bne _0802DEC4 - adds r0, r5, #0 - movs r1, #0xa - bl CreateProjectileWithParent - adds r1, r0, #0 - str r1, [r5, #0x54] - cmp r1, #0 - beq _0802DEC4 - ldr r0, [r6] - ldrb r0, [r0, #0x15] - strb r0, [r1, #0x15] - ldr r2, [r5, #0x54] - ldr r0, [r6] - ldr r0, [r0, #0x50] - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0xf - ands r0, r1 - strb r0, [r2, #0xb] - ldr r1, [r5, #0x54] - ldr r0, [r6] - ldr r0, [r0, #0x50] - str r0, [r1, #0x50] - ldr r1, [r5, #0x54] - ldr r0, [r6] - ldr r0, [r0, #0x3c] - str r0, [r1, #0x54] -_0802DEC4: - adds r1, r5, #0 - adds r1, #0x74 - ldrb r0, [r1] - adds r2, r0, #0 - cmp r2, #0 - bne _0802DEF4 - strb r4, [r1] - ldr r1, [r6] - ldrb r0, [r5, #0xf] - lsls r0, r0, #2 - adds r1, #0x3c - adds r1, r1, r0 - ldr r0, [r1] - mov r1, r8 - strb r1, [r0, #0xf] - ldrb r0, [r5, #0xf] - adds r0, #1 - strb r0, [r5, #0xf] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #5 - bls _0802DEF8 - strb r2, [r5, #0xf] - b _0802DEF8 -_0802DEF4: - subs r0, #1 - strb r0, [r1] -_0802DEF8: - ldrb r0, [r5, #0xb] - cmp r0, #1 - bne _0802DF0C -_0802DEFE: - ldr r0, [r6] - ldrb r3, [r5, #0x15] - movs r1, #5 - movs r2, #0x40 - bl sub_0802EA48 - b _0802DF2E -_0802DF0C: - mov r1, sb - ldrb r0, [r1] - cmp r0, #0 - bne _0802DF22 - ldr r0, [r6] - ldrb r3, [r5, #0x15] - movs r1, #5 - movs r2, #0x20 - bl sub_0802EA48 - b _0802DF2E -_0802DF22: - ldr r0, [r6] - ldrb r3, [r5, #0x15] - movs r1, #5 - movs r2, #0x10 - bl sub_0802EA48 -_0802DF2E: - adds r4, r6, #0 - ldr r0, [r4] - bl sub_0802E768 - adds r2, r5, #0 - adds r2, #0x7a - ldr r1, [r4] - ldrb r0, [r2] - ldrb r1, [r1, #0x15] - cmp r0, r1 - bne _0802DF9A - ldrb r0, [r5, #0xb] - cmp r0, #1 - bne _0802DF8A - movs r0, #2 - strb r0, [r5, #0xb] - ldrb r0, [r5, #0x15] - movs r1, #1 - eors r0, r1 - strb r0, [r5, #0x15] - adds r3, r0, #0 - cmp r3, #1 - bne _0802DF6C - lsls r0, r7, #1 - ldrb r1, [r2] - subs r1, r1, r0 - movs r0, #0x1f - ands r1, r0 - strb r1, [r2] - strb r3, [r5, #0xe] - b _0802DF80 -_0802DF6C: - lsls r0, r7, #1 - ldrb r1, [r2] - adds r0, r0, r1 - movs r1, #0x1f - ands r0, r1 - strb r0, [r2] - ldrb r1, [r5, #0xe] - movs r0, #0xfe - ands r0, r1 - strb r0, [r5, #0xe] -_0802DF80: - ldr r0, [r6] - ldr r1, [r0, #0x50] - movs r0, #0xc - strb r0, [r1, #0xe] - b _0802DF9A -_0802DF8A: - movs r0, #0 - strb r0, [r5, #0xd] - ldr r1, [r6] - ldr r1, [r1, #0x50] - strb r0, [r1, #0xe] - adds r0, r5, #0 - bl sub_0802EB9C -_0802DF9A: - adds r0, r5, #0 - bl sub_0802E518 - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_0802DFA8 -sub_0802DFA8: @ 0x0802DFA8 - push {lr} - ldr r2, _0802DFBC @ =gUnk_080CD828 - ldrb r1, [r0, #0xb] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0802DFBC: .4byte gUnk_080CD828 - - thumb_func_start sub_0802DFC0 -sub_0802DFC0: @ 0x0802DFC0 - push {r4, r5, lr} - adds r5, r0, #0 - adds r4, r5, #0 - adds r4, #0x84 - ldr r2, [r4] - ldrb r0, [r2, #1] - movs r1, #7 - ands r1, r0 - cmp r1, #0 - beq _0802DFF8 - cmp r1, #4 - bls _0802DFDC - movs r0, #0 - b _0802DFDE -_0802DFDC: - movs r0, #1 -_0802DFDE: - strb r0, [r5, #0x15] - adds r4, r5, #0 - adds r4, #0x84 - ldr r0, [r4] - ldrb r3, [r5, #0x15] - movs r1, #0 - movs r2, #0x20 - bl sub_0802EA48 - ldr r0, [r4] - bl sub_0802EA88 - b _0802E026 -_0802DFF8: - adds r0, r2, #0 - bl sub_0802EA88 - cmp r0, #0 - bne _0802E026 - adds r0, r5, #0 - adds r0, #0x7b - ldrb r0, [r0] - cmp r0, #0 - beq _0802E026 - ldrb r1, [r5, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r5, #0x10] - movs r0, #1 - strb r0, [r5, #0xb] - ldr r0, [r4] - ldr r1, [r0, #0x50] - movs r0, #0x18 - strb r0, [r1, #0xe] - ldr r0, _0802E030 @ =0x00000127 - bl SoundReq -_0802E026: - adds r0, r5, #0 - bl sub_0802E518 - pop {r4, r5, pc} - .align 2, 0 -_0802E030: .4byte 0x00000127 - - thumb_func_start sub_0802E034 -sub_0802E034: @ 0x0802E034 - push {r4, r5, lr} - adds r4, r0, #0 - adds r0, #0x84 - ldr r5, [r0] - ldrb r0, [r4, #0xb] - cmp r0, #1 - bne _0802E04A - movs r0, #2 - strb r0, [r4, #0x15] - movs r0, #0 - b _0802E058 -_0802E04A: - movs r0, #3 - strb r0, [r4, #0x15] - ldr r1, _0802E078 @ =gUnk_080CD840 - ldrb r0, [r5, #1] - lsrs r0, r0, #3 - adds r0, r0, r1 - ldrb r0, [r0] -_0802E058: - ldrb r1, [r5, #0x19] - cmp r0, r1 - beq _0802E07C - ldrb r3, [r4, #0x15] - adds r0, r5, #0 - movs r1, #0 - movs r2, #0x40 - bl sub_0802EA68 - adds r0, r5, #0 - movs r1, #0x40 - movs r2, #2 - bl sub_0802EB08 - b _0802E0B0 - .align 2, 0 -_0802E078: .4byte gUnk_080CD840 -_0802E07C: - adds r0, r5, #0 - movs r1, #0x80 - movs r2, #2 - bl sub_0802EB08 - cmp r0, #0 - bne _0802E0B0 - ldrb r0, [r4, #0xb] - cmp r0, #2 - bne _0802E0A6 - adds r1, r4, #0 - adds r1, #0x7c - movs r2, #0 - movs r0, #0xb4 - lsls r0, r0, #1 - strh r0, [r1] - adds r1, #4 - movs r0, #1 - strb r0, [r1] - ldr r0, [r5, #0x50] - strb r2, [r0, #0xe] -_0802E0A6: - ldrb r0, [r4, #0xb] - adds r0, #1 - strb r0, [r4, #0xb] - movs r0, #1 - strb r0, [r5, #0x19] -_0802E0B0: - adds r0, r4, #0 - bl sub_0802E518 - pop {r4, r5, pc} - - thumb_func_start sub_0802E0B8 -sub_0802E0B8: @ 0x0802E0B8 - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldrh r0, [r4, #0x32] - subs r0, #4 - strh r0, [r4, #0x32] - adds r0, r4, #0 - bl sub_0800445C - ldrh r0, [r4, #0x32] - adds r0, #4 - strh r0, [r4, #0x32] - adds r0, r4, #0 - adds r0, #0x5a - ldrb r0, [r0] - movs r2, #0x3f - ands r2, r0 - cmp r2, #0 - beq _0802E0F4 - ldr r1, _0802E128 @ =gPlayerEntity - adds r0, r4, #0 - bl sub_0806FC80 - cmp r0, #0 - beq _0802E0F4 - ldr r0, _0802E12C @ =gPlayerState - movs r1, #1 - strb r1, [r0, #0x14] - adds r0, #0x3f - movs r1, #0xfa - strb r1, [r0] -_0802E0F4: - ldr r0, _0802E130 @ =gUnk_080CD844 - adds r3, r4, #0 - adds r3, #0x79 - ldrb r5, [r3] - movs r6, #0x7f - adds r1, r6, #0 - ands r1, r5 - adds r1, r1, r0 - adds r2, r4, #0 - adds r2, #0x45 - ldrb r0, [r1] - ldrb r1, [r2] - cmp r0, r1 - blo _0802E158 - cmp r5, #1 - bls _0802E134 - movs r0, #0 - strb r0, [r2] - strb r0, [r4, #0xc] - bl sub_08078B48 - movs r0, #0x94 - lsls r0, r0, #1 - bl SoundReq - b _0802E1CA - .align 2, 0 -_0802E128: .4byte gPlayerEntity -_0802E12C: .4byte gPlayerState -_0802E130: .4byte gUnk_080CD844 -_0802E134: - ldrb r1, [r4, #0x10] - adds r0, r6, #0 - ands r0, r1 - strb r0, [r4, #0x10] - ldrb r0, [r3] - adds r0, #1 - movs r1, #0x80 - orrs r0, r1 - strb r0, [r3] - movs r0, #0xff - strb r0, [r2] - adds r1, r4, #0 - adds r1, #0x7c - ldrh r0, [r1] - cmp r0, #0x78 - bls _0802E158 - movs r0, #0x78 - strh r0, [r1] -_0802E158: - adds r0, r4, #0 - adds r0, #0x7c - ldrh r1, [r0] - subs r1, #1 - strh r1, [r0] - lsls r1, r1, #0x10 - ldr r2, _0802E18C @ =0xFFFF0000 - adds r5, r0, #0 - cmp r1, r2 - bne _0802E190 - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - adds r1, r4, #0 - adds r1, #0x62 - movs r0, #0 - strb r0, [r1] - movs r0, #4 - strb r0, [r4, #0xb] - adds r0, r4, #0 - movs r1, #0x4e - bl InitializeAnimation - b _0802E1C4 - .align 2, 0 -_0802E18C: .4byte 0xFFFF0000 -_0802E190: - adds r0, r4, #0 - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0802E1B2 - adds r0, r4, #0 - adds r0, #0x3d - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - ble _0802E1B2 - ldr r0, _0802E1CC @ =0x00000127 - bl SoundReq -_0802E1B2: - ldrh r0, [r5] - cmp r0, #0x77 - bhi _0802E1C4 - adds r2, r4, #0 - adds r2, #0x62 - ldrb r0, [r2] - movs r1, #1 - eors r0, r1 - strb r0, [r2] -_0802E1C4: - adds r0, r4, #0 - bl sub_0802E518 -_0802E1CA: - pop {r4, r5, r6, pc} - .align 2, 0 -_0802E1CC: .4byte 0x00000127 - - thumb_func_start sub_0802E1D0 -sub_0802E1D0: @ 0x0802E1D0 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - adds r5, r0, #0 - adds r0, #0x84 - ldr r0, [r0] - mov r8, r0 - adds r4, r5, #0 - adds r4, #0x5a - ldrb r1, [r4] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - bne _0802E1F6 - adds r0, r5, #0 - bl GetNextFrame -_0802E1F6: - ldrb r0, [r4] - movs r2, #0x3f - ands r2, r0 - cmp r2, #0 - beq _0802E218 - ldr r1, _0802E280 @ =gPlayerEntity - adds r0, r5, #0 - bl sub_0806FC80 - cmp r0, #0 - beq _0802E218 - ldr r0, _0802E284 @ =gPlayerState - movs r1, #1 - strb r1, [r0, #0x14] - adds r0, #0x3f - movs r1, #0xfa - strb r1, [r0] -_0802E218: - adds r0, r5, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x40 - ands r0, r1 - cmp r0, #0 - beq _0802E2F0 - movs r4, #0 - mov r2, r8 - adds r2, #0x30 - adds r7, r5, #0 - adds r7, #0x7c - ldr r0, _0802E288 @ =gScreen - mov sb, r0 - movs r1, #0x66 - add r1, sb - mov sl, r1 -_0802E23A: - adds r1, r2, r4 - ldrb r0, [r1] - cmp r0, #0 - beq _0802E2EA - subs r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r6, r0, #0x18 - cmp r6, #0 - bne _0802E2F0 - mov r1, r8 - ldr r0, [r1, #0x3c] - movs r1, #0xc - movs r2, #0 - bl CreateFx - movs r0, #0x92 - lsls r0, r0, #1 - bl SoundReq - cmp r4, #5 - bne _0802E2F0 - adds r0, r5, #0 - adds r0, #0x79 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - bne _0802E28C - movs r0, #0xf0 - strh r0, [r7] - movs r1, #0 - bl InitScreenShake - b _0802E2E4 - .align 2, 0 -_0802E280: .4byte gPlayerEntity -_0802E284: .4byte gPlayerState -_0802E288: .4byte gScreen -_0802E28C: - adds r4, r7, #0 - strh r6, [r4] - movs r0, #0x7c - adds r0, r0, r5 - mov r8, r0 - adds r6, r5, #0 - adds r6, #0x74 - adds r7, r5, #0 - adds r7, #0x75 -_0802E29E: - ldrh r3, [r4] - adds r0, r5, #0 - movs r1, #0x67 - movs r2, #1 - bl CreateObjectWithParent - ldrh r0, [r4] - adds r0, #1 - strh r0, [r4] - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - cmp r0, #3 - bls _0802E29E - movs r0, #0 - strb r0, [r6] - movs r0, #0x10 - strb r0, [r7] - movs r0, #0xb - mov r1, r8 - strh r0, [r1] - ldrb r1, [r6] - ldrb r0, [r7] - lsls r0, r0, #8 - orrs r1, r0 - mov r0, sb - adds r0, #0x68 - strh r1, [r0] - movs r0, #0x90 - lsls r0, r0, #2 - mov r1, sl - strh r0, [r1] - movs r0, #0x1e - movs r1, #0 - bl InitScreenShake -_0802E2E4: - movs r0, #5 - strb r0, [r5, #0xb] - b _0802E2F0 -_0802E2EA: - adds r4, #1 - cmp r4, #5 - bls _0802E23A -_0802E2F0: - adds r0, r5, #0 - bl sub_0802E518 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_0802E300 -sub_0802E300: @ 0x0802E300 - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r0, #0x79 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - bne _0802E31E - adds r1, r4, #0 - adds r1, #0x7c - ldrh r0, [r1] - subs r0, #1 - strh r0, [r1] - adds r5, r1, #0 - b _0802E35E -_0802E31E: - adds r1, r4, #0 - adds r1, #0x74 - ldrb r0, [r1] - adds r5, r4, #0 - adds r5, #0x7c - cmp r0, #0x10 - beq _0802E35E - ldrh r0, [r5] - cmp r0, #0 - beq _0802E364 - subs r0, #1 - strh r0, [r5] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _0802E40C - movs r0, #0xb - strh r0, [r5] - adds r3, r4, #0 - adds r3, #0x75 - ldrb r0, [r3] - subs r0, #1 - strb r0, [r3] - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - ldr r2, _0802E3A0 @ =gScreen - ldrb r1, [r1] - ldrb r0, [r3] - lsls r0, r0, #8 - orrs r1, r0 - adds r2, #0x68 - strh r1, [r2] -_0802E35E: - ldrh r0, [r5] - cmp r0, #0 - bne _0802E40C -_0802E364: - adds r2, r4, #0 - adds r2, #0x79 - ldrb r1, [r2] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0802E3A4 - adds r3, r4, #0 - adds r3, #0x75 - ldrb r0, [r3] - cmp r0, #0x10 - beq _0802E3A4 - movs r0, #0xb - strh r0, [r5] - ldrb r0, [r3] - adds r0, #1 - strb r0, [r3] - adds r1, r4, #0 - adds r1, #0x74 - ldrb r0, [r1] - subs r0, #1 - strb r0, [r1] - ldr r2, _0802E3A0 @ =gScreen - ldrb r1, [r1] - ldrb r0, [r3] - lsls r0, r0, #8 - orrs r1, r0 - adds r2, #0x68 - strh r1, [r2] - b _0802E428 - .align 2, 0 -_0802E3A0: .4byte gScreen -_0802E3A4: - ldrb r1, [r2] - movs r0, #0x7f - ands r0, r1 - strb r0, [r2] - adds r0, r4, #0 - adds r0, #0x84 - ldr r5, [r0] - ldr r1, _0802E408 @ =gPlayerEntity - adds r0, r4, #0 - bl GetFacingDirection - bl sub_0806F5A4 - lsls r0, r0, #3 - movs r2, #0 - adds r6, r4, #0 - adds r6, #0x80 - movs r3, #0 - adds r1, r5, #0 -_0802E3CA: - strh r3, [r1, #0x18] - strb r0, [r1, #1] - adds r1, #4 - adds r2, #1 - cmp r2, #5 - bls _0802E3CA - movs r1, #0 - movs r0, #5 - strb r0, [r4, #0xd] - strb r1, [r4, #0xb] - strb r1, [r6] - adds r0, r4, #0 - movs r1, #0x4d - bl InitializeAnimation - movs r0, #0x24 - movs r1, #5 - bl CreateEnemy - str r0, [r4, #0x54] - cmp r0, #0 - beq _0802E400 - str r4, [r0, #0x50] - ldr r0, [r4, #0x54] - str r0, [r5, #0x38] - adds r0, #0x84 - str r5, [r0] -_0802E400: - ldr r1, [r5, #0x50] - movs r0, #0x18 - strb r0, [r1, #0xe] - b _0802E422 - .align 2, 0 -_0802E408: .4byte gPlayerEntity -_0802E40C: - ldr r0, _0802E42C @ =gRoomTransition - ldr r0, [r0] - movs r1, #0xf - ands r0, r1 - cmp r0, #0 - bne _0802E422 - adds r0, r4, #0 - movs r1, #0xa - movs r2, #3 - bl CreateProjectileWithParent -_0802E422: - adds r0, r4, #0 - bl sub_0802E518 -_0802E428: - pop {r4, r5, r6, pc} - .align 2, 0 -_0802E42C: .4byte gRoomTransition - - thumb_func_start sub_0802E430 -sub_0802E430: @ 0x0802E430 - push {lr} - ldr r2, _0802E444 @ =gUnk_080CD848 - ldrb r1, [r0, #0xb] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0802E444: .4byte gUnk_080CD848 - - thumb_func_start sub_0802E448 -sub_0802E448: @ 0x0802E448 - push {r4, r5, r6, r7, lr} - adds r7, r0, #0 - adds r0, #0x84 - ldr r6, [r0] - movs r5, #5 -_0802E452: - adds r0, r6, #0 - adds r0, #0x30 - adds r4, r0, r5 - ldrb r0, [r4] - cmp r0, #0 - bne _0802E46E - ldr r0, [r6, #0x3c] - movs r1, #0xc - movs r2, #0 - bl CreateFx - movs r0, #0x7d - bl SoundReq -_0802E46E: - ldrb r0, [r4] - cmp r0, #0xa - beq _0802E48A - adds r0, #1 - strb r0, [r4] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xa - bne _0802E490 - cmp r5, #0 - bne _0802E490 - movs r0, #1 - strb r0, [r7, #0xb] - b _0802E490 -_0802E48A: - subs r5, #1 - cmp r5, #0 - bge _0802E452 -_0802E490: - adds r0, r6, #0 - adds r0, #0x2d - ldrb r0, [r0] - cmp r0, #9 - bhi _0802E4A6 - adds r0, r6, #0 - movs r1, #5 - movs r2, #0x40 - movs r3, #3 - bl sub_0802EA68 -_0802E4A6: - adds r0, r7, #0 - bl GetNextFrame - adds r0, r7, #0 - adds r0, #0x84 - ldr r0, [r0] - bl sub_0802E768 - adds r0, r7, #0 - bl sub_0802E518 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_0802E4C0 -sub_0802E4C0: @ 0x0802E4C0 - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0802E510 - ldrb r0, [r4, #0xc] - cmp r0, #2 - beq _0802E50A - adds r0, r4, #0 - adds r0, #0x74 - movs r2, #0 - strb r2, [r0] - adds r1, r4, #0 - adds r1, #0x75 - movs r0, #8 - strb r0, [r1] - adds r0, r4, #0 - adds r0, #0x79 - ldrb r0, [r0] - cmp r0, #0 - beq _0802E502 - adds r0, r4, #0 - adds r0, #0x76 - strb r2, [r0] - adds r1, #2 - movs r0, #3 - strb r0, [r1] -_0802E502: - adds r0, r4, #0 - bl sub_0802EBC4 - b _0802E510 -_0802E50A: - ldrb r0, [r4, #0xb] - adds r0, #1 - strb r0, [r4, #0xb] -_0802E510: - adds r0, r4, #0 - bl sub_0802E518 - pop {r4, pc} - - thumb_func_start sub_0802E518 -sub_0802E518: @ 0x0802E518 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #0xc - str r0, [sp] - adds r0, #0x84 - ldr r0, [r0] - mov sb, r0 - ldr r1, [r0, #0x3c] - ldr r0, [r1, #0x50] - bl CopyPosition - mov r0, sb - ldr r1, [r0, #0x3c] - ldrb r0, [r0, #1] - strb r0, [r1, #0x15] - mov r1, sb - ldrb r6, [r1, #1] - cmp r6, #0x10 - bls _0802E54C - movs r0, #0xf - eors r6, r0 - adds r6, #1 - ands r6, r0 -_0802E54C: - cmp r6, #0x10 - bne _0802E552 - movs r6, #0xf -_0802E552: - mov r2, sb - ldr r1, [r2, #0x3c] - movs r0, #0xf - eors r6, r0 - adds r0, r6, #0 - adds r0, #0x12 - lsls r0, r0, #8 - strh r0, [r1, #0x24] - ldr r0, [r2, #0x3c] - bl LinearMoveUpdate - movs r6, #0 - movs r0, #0x3c - add r0, sb - mov sl, r0 - mov r1, sb - adds r1, #0x30 - str r1, [sp, #4] - ldr r2, [sp] - adds r2, #0x80 - str r2, [sp, #8] - movs r7, #0x80 - lsls r7, r7, #1 -_0802E580: - lsls r0, r6, #2 - add r0, sl - ldr r0, [r0] - adds r1, r6, #1 - mov r8, r1 - lsls r4, r1, #2 - mov r2, sl - adds r5, r2, r4 - ldr r1, [r5] - bl CopyPosition - add r4, sb - ldrb r0, [r4, #0x19] - lsls r0, r0, #4 - ldr r1, _0802E644 @ =gSineTable - adds r0, r0, r1 - movs r2, #0 - ldrsh r0, [r0, r2] - ldr r1, [sp, #4] - adds r6, r1, r6 - ldrb r1, [r6] - lsls r1, r1, #0x18 - asrs r1, r1, #0x10 - bl FixedMul - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - adds r1, r7, #0 - bl FixedDiv - adds r1, r0, #0 - ldrb r0, [r4, #1] - lsls r0, r0, #4 - ldr r2, _0802E644 @ =gSineTable - adds r0, r0, r2 - movs r2, #0 - ldrsh r0, [r0, r2] - lsls r1, r1, #0x10 - asrs r1, r1, #0x10 - bl FixedMul - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - adds r1, r7, #0 - bl FixedDiv - ldr r2, [r5] - lsls r0, r0, #0x10 - asrs r0, r0, #8 - ldr r1, [r2, #0x2c] - adds r1, r1, r0 - str r1, [r2, #0x2c] - ldrb r0, [r4, #0x19] - lsls r0, r0, #4 - adds r0, #0x80 - ldr r1, _0802E644 @ =gSineTable - adds r0, r0, r1 - movs r2, #0 - ldrsh r0, [r0, r2] - ldrb r1, [r6] - lsls r1, r1, #0x18 - asrs r1, r1, #0x10 - bl FixedMul - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - adds r1, r7, #0 - bl FixedDiv - ldr r2, [r5] - lsls r0, r0, #0x10 - asrs r0, r0, #8 - ldr r1, [r2, #0x30] - subs r1, r1, r0 - str r1, [r2, #0x30] - mov r6, r8 - cmp r6, #4 - bls _0802E580 - mov r1, sb - ldr r0, [r1, #0x50] - ldrb r1, [r0, #0xe] - adds r2, r0, #0 - cmp r1, #0x18 - bne _0802E662 - mov r1, sb - ldrb r0, [r1, #0x15] - lsrs r0, r0, #3 - lsls r7, r0, #2 - mov r0, sb - adds r0, #0x2d - ldrb r0, [r0] - lsls r1, r0, #0x18 - lsrs r0, r1, #0x18 - cmp r0, #0xc - bls _0802E648 - adds r7, #3 - b _0802E64C - .align 2, 0 -_0802E644: .4byte gSineTable -_0802E648: - lsrs r0, r1, #0x1a - adds r7, r7, r0 -_0802E64C: - adds r0, r2, #0 - adds r0, #0x58 - ldrb r0, [r0] - adds r1, r7, #0 - adds r1, #0x18 - cmp r0, r1 - beq _0802E6E8 - adds r0, r2, #0 - bl InitAnimationForceUpdate - b _0802E6E8 -_0802E662: - ldr r2, [sp, #8] - ldrb r0, [r2] - cmp r0, #0 - bne _0802E688 - mov r0, sb - movs r1, #5 - movs r2, #0 - movs r3, #0 - bl sub_0802E7CC - mov r0, sb - ldr r2, [r0, #0x50] - ldrb r1, [r2, #0x14] - lsrs r0, r1, #1 - adds r7, r1, r0 - lsrs r0, r7, #2 - ldrb r2, [r2, #0xe] - adds r7, r0, r2 - b _0802E6CA -_0802E688: - ldr r0, [sp] - adds r0, #0x3d - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - cmp r0, #0 - bne _0802E6C0 - ldr r0, [sp] - adds r0, #0x58 - ldrb r3, [r0] - mov r1, sb - ldrb r0, [r1, #0x15] - lsrs r2, r0, #3 - adds r0, r2, #0 - adds r0, #0x2f - cmp r3, r0 - bne _0802E6BA - ldr r0, [sp] - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - adds r7, r3, #0 - cmp r0, #0 - beq _0802E6CA -_0802E6BA: - adds r7, r2, #0 - adds r7, #0x28 - b _0802E6CA -_0802E6C0: - mov r2, sb - ldrb r0, [r2, #0x15] - lsrs r0, r0, #3 - adds r7, r0, #0 - adds r7, #0x2f -_0802E6CA: - mov r0, sb - ldr r1, [r0, #0x50] - adds r0, r1, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r0, r7 - beq _0802E6E2 - adds r0, r1, #0 - adds r1, r7, #0 - bl InitAnimationForceUpdate - b _0802E6E8 -_0802E6E2: - adds r0, r1, #0 - bl UpdateAnimationSingleFrame -_0802E6E8: - movs r6, #0 -_0802E6EA: - ldr r1, [sp, #8] - ldrb r0, [r1] - cmp r0, #0 - bne _0802E72E - lsls r1, r6, #0x18 - lsrs r1, r1, #0x18 - mov r0, sb - movs r2, #0 - movs r3, #0 - bl sub_0802E7CC - lsls r5, r6, #2 - mov r2, sl - adds r0, r2, r5 - ldr r0, [r0] - ldrb r1, [r0, #0x14] - lsrs r0, r1, #1 - adds r7, r1, r0 - lsrs r7, r7, #2 - adds r4, r6, #1 - lsls r0, r4, #2 - add r0, sb - ldrb r0, [r0, #0x19] - movs r1, #3 - bl __divsi3 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - lsls r1, r0, #1 - adds r1, r1, r0 - lsls r1, r1, #2 - adds r7, r7, r1 - adds r1, r5, #0 - b _0802E73E -_0802E72E: - lsls r1, r6, #2 - mov r2, sb - adds r0, r2, r1 - ldrb r0, [r0, #1] - lsrs r0, r0, #3 - adds r7, r0, #0 - adds r7, #0x48 - adds r4, r6, #1 -_0802E73E: - mov r2, sl - adds r0, r2, r1 - ldr r1, [r0] - adds r0, r1, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r0, r7 - beq _0802E756 - adds r0, r1, #0 - adds r1, r7, #0 - bl InitializeAnimation -_0802E756: - adds r6, r4, #0 - cmp r6, #4 - bls _0802E6EA - add sp, #0xc - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - thumb_func_start sub_0802E768 sub_0802E768: @ 0x0802E768 push {r4, r5, r6, lr} diff --git a/asm/non_matching/gleerok/sub_0802D33C.inc b/asm/non_matching/gleerok/sub_0802D33C.inc new file mode 100644 index 00000000..6921c763 --- /dev/null +++ b/asm/non_matching/gleerok/sub_0802D33C.inc @@ -0,0 +1,49 @@ + .syntax unified + + .text + + push {r4, r5, r6, r7, lr} + adds r0, #0x84 + ldr r6, [r0] + movs r4, #0 + adds r7, r6, #0 + adds r7, #0x3c + adds r5, r7, #0 +_0802D34A: + ldm r5!, {r0} + bl DeleteEntity + adds r4, #1 + cmp r4, #3 + bls _0802D34A + lsls r1, r4, #2 + adds r1, r7, r1 + ldr r0, [r1] + adds r0, #0x45 + movs r3, #0 + strb r3, [r0] + ldr r1, [r1] + adds r1, #0x6d + ldrb r2, [r1] + movs r0, #1 + orrs r0, r2 + strb r0, [r1] + ldr r0, [r6, #0x50] + adds r0, #0x45 + strb r3, [r0] + ldr r0, [r6, #0x50] + strb r3, [r0, #0xb] + ldr r3, [r6, #0x50] + ldrb r2, [r3, #0x18] + lsls r1, r2, #0x1e + lsrs r1, r1, #0x1e + movs r0, #2 + rsbs r0, r0, #0 + ands r1, r0 + subs r0, #2 + ands r0, r2 + orrs r0, r1 + strb r0, [r3, #0x18] + bl DeleteThisEntity + pop {r4, r5, r6, r7, pc} + + .syntax divided diff --git a/asm/non_matching/gleerok/sub_0802D3B8.inc b/asm/non_matching/gleerok/sub_0802D3B8.inc new file mode 100644 index 00000000..8bc73c1e --- /dev/null +++ b/asm/non_matching/gleerok/sub_0802D3B8.inc @@ -0,0 +1,328 @@ + .syntax unified + + .text + + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + adds r4, r0, #0 + movs r0, #3 + bl CheckGlobalFlag + cmp r0, #0 + beq _0802D3DE + ldr r2, _0802D3F4 @ =gScreen + ldrh r1, [r2] + ldr r0, _0802D3F8 @ =0x0000FDFF + ands r0, r1 + strh r0, [r2] + ldr r0, _0802D3FC @ =gPlayerEntity + bl sub_0807AABC + bl DeleteThisEntity +_0802D3DE: + movs r0, #1 + strb r0, [r4, #0xc] + ldrb r0, [r4, #0xa] + cmp r0, #6 + bls _0802D3EA + b _0802D63C +_0802D3EA: + lsls r0, r0, #2 + ldr r1, _0802D400 @ =_0802D404 + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_0802D3F4: .4byte gScreen +_0802D3F8: .4byte 0x0000FDFF +_0802D3FC: .4byte gPlayerEntity +_0802D400: .4byte _0802D404 +_0802D404: @ jump table + .4byte _0802D420 @ case 0 + .4byte _0802D544 @ case 1 + .4byte _0802D58C @ case 2 + .4byte _0802D5A8 @ case 3 + .4byte _0802D5EC @ case 4 + .4byte _0802D5F6 @ case 5 + .4byte _0802D61A @ case 6 +_0802D420: + movs r2, #0 + movs r0, #2 + strb r0, [r4, #0xc] + ldrb r1, [r4, #0x10] + movs r0, #0x7f + ands r0, r1 + strb r0, [r4, #0x10] + adds r3, r4, #0 + adds r3, #0x29 + ldrb r0, [r3] + movs r1, #7 + orrs r0, r1 + strb r0, [r3] + adds r0, r4, #0 + adds r0, #0x75 + strb r2, [r0] + adds r0, #0xb + strb r2, [r0] + subs r0, #7 + strb r2, [r0] + movs r0, #0x96 + str r0, [r4, #0x7c] + adds r0, r4, #0 + bl sub_0802EB9C + movs r0, #0x54 + bl zMalloc + adds r1, r4, #0 + adds r1, #0x84 + str r0, [r1] + adds r5, r0, #0 + adds r7, r1, #0 + cmp r5, #0 + bne _0802D470 + adds r0, r4, #0 + bl sub_0804A7D4 + bl DeleteThisEntity +_0802D470: + ldr r0, [r7] + str r0, [r4, #0x64] + movs r6, #0 + movs r0, #0 + mov r8, r0 +_0802D47A: + movs r0, #0x24 + movs r1, #1 + bl CreateEnemy + str r0, [r4, #0x54] + adds r3, r6, #1 + cmp r0, #0 + beq _0802D4D6 + strb r3, [r0, #0xb] + ldr r1, [r4, #0x54] + adds r0, r4, #0 + adds r0, #0x38 + ldrb r0, [r0] + adds r1, #0x38 + strb r0, [r1] + ldr r1, [r4, #0x54] + ldrh r0, [r4, #0x2e] + strh r0, [r1, #0x2e] + ldr r1, [r4, #0x54] + lsls r0, r3, #1 + adds r0, r0, r3 + lsls r0, r0, #2 + ldrh r2, [r4, #0x32] + adds r0, r0, r2 + strh r0, [r1, #0x32] + ldr r0, [r4, #0x54] + str r4, [r0, #0x50] + ldr r0, [r4, #0x54] + adds r0, #0x84 + ldr r1, [r7] + str r1, [r0] + lsls r2, r6, #2 + adds r0, r5, #0 + adds r0, #0x3c + adds r0, r0, r2 + ldr r1, [r4, #0x54] + str r1, [r0] + adds r2, r5, r2 + movs r0, #0x10 + strb r0, [r2, #1] + mov r0, r8 + strb r0, [r2, #0x19] + adds r0, r5, #0 + adds r0, #0x35 + mov r1, r8 + strb r1, [r0] +_0802D4D6: + adds r6, r3, #0 + cmp r6, #4 + bls _0802D47A + movs r0, #0x24 + movs r1, #2 + bl CreateEnemy + adds r2, r0, #0 + str r2, [r4, #0x54] + cmp r2, #0 + beq _0802D52E + adds r0, r4, #0 + adds r0, #0x38 + ldrb r1, [r0] + adds r0, r2, #0 + adds r0, #0x38 + strb r1, [r0] + ldr r1, [r4, #0x54] + ldrh r0, [r4, #0x2e] + movs r3, #0 + strh r0, [r1, #0x2e] + ldr r2, [r4, #0x54] + adds r1, r6, #1 + lsls r0, r1, #1 + adds r0, r0, r1 + lsls r0, r0, #2 + ldrh r1, [r4, #0x32] + adds r0, r0, r1 + strh r0, [r2, #0x32] + ldr r0, [r4, #0x54] + str r4, [r0, #0x50] + ldr r0, [r4, #0x54] + adds r0, #0x84 + ldr r1, [r7] + str r1, [r0] + ldr r0, [r4, #0x54] + str r0, [r5, #0x50] + movs r0, #0x10 + strb r0, [r5, #0x15] + adds r0, r5, #0 + adds r0, #0x2d + strb r3, [r0] + adds r0, #8 + strb r3, [r0] +_0802D52E: +.ifndef EU + ldr r0, _0802D540 @ =gPlayerState + adds r0, #0x8b + movs r1, #3 + strb r1, [r0] +.endif + adds r0, r4, #0 + movs r1, #0x4c + bl InitializeAnimation + b _0802D63C + .align 2, 0 +.ifndef EU +_0802D540: .4byte gPlayerState +.endif +_0802D544: + ldrb r0, [r4, #0xb] + cmp r0, #1 + bne _0802D55C + ldrb r0, [r4, #0x10] + movs r1, #0x80 + orrs r0, r1 + strb r0, [r4, #0x10] + adds r2, r4, #0 + adds r2, #0x3b + ldrb r0, [r2] + orrs r1, r0 + strb r1, [r2] +_0802D55C: + ldr r1, _0802D588 @ =gUnk_080CD7C4 + ldrb r0, [r4, #0xb] + lsls r0, r0, #2 + adds r0, r0, r1 + ldrb r0, [r0, #1] + adds r3, r4, #0 + adds r3, #0x29 + movs r1, #7 + ands r1, r0 + ldrb r2, [r3] + movs r0, #8 + rsbs r0, r0, #0 + ands r0, r2 + orrs r0, r1 + strb r0, [r3] + movs r0, #0 + strb r0, [r4, #0xf] + adds r0, r4, #0 + movs r1, #0x24 + bl InitializeAnimation + b _0802D63C + .align 2, 0 +_0802D588: .4byte gUnk_080CD7C4 +_0802D58C: + adds r2, r4, #0 + adds r2, #0x29 + ldrb r0, [r2] + movs r1, #8 + rsbs r1, r1, #0 + ands r1, r0 + strb r1, [r2] + movs r0, #0 + strb r0, [r4, #0xf] + adds r0, r4, #0 + movs r1, #0 + bl InitAnimationForceUpdate + b _0802D63C +_0802D5A8: + ldr r0, _0802D5E8 @ =gUnk_080CD884 + ldrb r1, [r0] + adds r0, r4, #0 + adds r0, #0x74 + movs r2, #0 + strb r1, [r0] + adds r0, #1 + strb r2, [r0] + adds r2, r4, #0 + adds r2, #0x29 + ldrb r1, [r2] + movs r0, #8 + rsbs r0, r0, #0 + ands r0, r1 + movs r1, #6 + orrs r0, r1 + strb r0, [r2] + adds r2, #0x12 + ldrb r1, [r2] + movs r0, #0x80 + orrs r0, r1 + strb r0, [r2] + ldr r0, [r4, #0x50] + adds r1, r4, #0 + bl CopyPosition + adds r0, r4, #0 + movs r1, #0x4f + bl InitializeAnimation + b _0802D63C + .align 2, 0 +_0802D5E8: .4byte gUnk_080CD884 +_0802D5EC: + adds r0, r4, #0 + movs r1, #0x2c + bl InitAnimationForceUpdate + b _0802D63C +_0802D5F6: + adds r2, r4, #0 + adds r2, #0x29 + ldrb r1, [r2] + movs r0, #8 + rsbs r0, r0, #0 + ands r0, r1 + movs r1, #6 + orrs r0, r1 + strb r0, [r2] + ldr r0, [r4, #0x50] + adds r1, r4, #0 + bl CopyPosition + adds r0, r4, #0 + movs r1, #0x2d + bl InitAnimationForceUpdate + b _0802D63C +_0802D61A: + adds r2, r4, #0 + adds r2, #0x29 + ldrb r1, [r2] + movs r0, #8 + rsbs r0, r0, #0 + ands r0, r1 + movs r1, #6 + orrs r0, r1 + strb r0, [r2] + ldr r0, [r4, #0x50] + adds r1, r4, #0 + bl CopyPosition + adds r0, r4, #0 + movs r1, #0x50 + bl InitializeAnimation +_0802D63C: + ldrb r0, [r4, #0xa] + cmp r0, #0 + beq _0802D648 + adds r0, r4, #0 + bl sub_0802D86C +_0802D648: + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7, pc} + .align 2, 0 + + .syntax divided diff --git a/asm/non_matching/gleerok/sub_0802D86C.inc b/asm/non_matching/gleerok/sub_0802D86C.inc new file mode 100644 index 00000000..316bb818 --- /dev/null +++ b/asm/non_matching/gleerok/sub_0802D86C.inc @@ -0,0 +1,401 @@ + .syntax unified + + .text + push {r4, r5, r6, r7, lr} + adds r4, r0, #0 + ldrb r0, [r4, #0xa] + cmp r0, #6 + bls _0802D878 + b _0802DB7E +_0802D878: + lsls r0, r0, #2 + ldr r1, _0802D884 @ =_0802D888 + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_0802D884: .4byte _0802D888 +_0802D888: @ jump table + .4byte _0802DB64 @ case 0 + .4byte _0802D8A4 @ case 1 + .4byte _0802D8CE @ case 2 + .4byte _0802DA54 @ case 3 + .4byte _0802D94C @ case 4 + .4byte _0802D9A2 @ case 5 + .4byte _0802D9F8 @ case 6 +_0802D8A4: + ldrb r0, [r4, #0xb] + cmp r0, #1 + bne _0802D8CE + ldr r0, [r4, #0x50] + adds r0, #0x80 + ldrb r0, [r0] + cmp r0, #0 + bne _0802D8BE + ldrb r0, [r4, #0x18] + lsls r0, r0, #0x1e + lsrs r0, r0, #0x1e + cmp r0, #1 + beq _0802D8C6 +_0802D8BE: + ldrb r1, [r4, #0x10] + movs r0, #0x7f + ands r0, r1 + b _0802D8CC +_0802D8C6: + ldrb r1, [r4, #0x10] + movs r0, #0x80 + orrs r0, r1 +_0802D8CC: + strb r0, [r4, #0x10] +_0802D8CE: + ldrb r0, [r4, #0x18] + lsls r0, r0, #0x1e + lsrs r0, r0, #0x1e + movs r1, #1 + ands r0, r1 + cmp r0, #0 + bne _0802D8DE + b _0802DB7E +_0802D8DE: + ldr r0, [r4, #0x50] + adds r0, #0x3d + ldrb r0, [r0] + adds r1, r4, #0 + adds r1, #0x3d + strb r0, [r1] + lsls r0, r0, #0x18 + cmp r0, #0 + bne _0802D918 + ldrb r0, [r4, #0xf] + cmp r0, #0 + bne _0802D906 + adds r0, r4, #0 + bl UnloadOBJPalette + adds r0, r4, #0 + movs r1, #0xc9 + bl LoadObjPalette + b _0802D918 +_0802D906: + subs r0, #1 + strb r0, [r4, #0xf] + adds r0, r4, #0 + bl UnloadOBJPalette + adds r0, r4, #0 + movs r1, #0xca + bl LoadObjPalette +_0802D918: + ldr r0, [r4, #0x50] + adds r0, #0x80 + ldrb r0, [r0] + cmp r0, #0 + bne _0802D924 + b _0802DB7E +_0802D924: + ldr r1, _0802D944 @ =gPlayerEntity + adds r0, r4, #0 + movs r2, #8 + movs r3, #8 + bl EntityInRectRadius + cmp r0, #0 + bne _0802D936 + b _0802DB7E +_0802D936: + ldr r0, _0802D948 @ =gPlayerState + movs r1, #1 + strb r1, [r0, #0x14] + adds r0, #0x3f + movs r1, #0xfc + strb r1, [r0] + b _0802DB7E + .align 2, 0 +_0802D944: .4byte gPlayerEntity +_0802D948: .4byte gPlayerState +_0802D94C: + adds r0, r4, #0 + adds r0, #0x5a + ldrb r0, [r0] + cmp r0, #0 + bne _0802D95E + adds r0, r4, #0 + bl UpdateAnimationSingleFrame + b _0802DB7E +_0802D95E: + movs r1, #0xc0 + lsls r1, r1, #5 + adds r0, r4, #0 + bl GravityUpdate + adds r2, r0, #0 + cmp r2, #0 + beq _0802D970 + b _0802DB7E +_0802D970: + ldr r0, [r4, #0x50] + adds r0, #0x7b + movs r1, #1 + strb r1, [r0] + strb r2, [r4, #0xe] +_0802D97A: + ldrb r3, [r4, #0xe] + adds r0, r4, #0 + movs r1, #0x67 + movs r2, #0 + bl CreateObjectWithParent + ldrb r0, [r4, #0xe] + adds r0, #1 + strb r0, [r4, #0xe] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #7 + bls _0802D97A + movs r0, #0xa8 + lsls r0, r0, #1 + bl SoundReq +_0802D99C: + bl DeleteThisEntity + b _0802DB7E +_0802D9A2: + ldr r0, _0802D9F4 @ =gRoomTransition + ldr r0, [r0] + movs r1, #1 + ands r0, r1 + cmp r0, #0 + beq _0802D9B8 + ldr r0, [r4, #0x50] + ldrb r0, [r0, #0xc] + cmp r0, #2 + bne _0802D9B8 + b _0802DB7E +_0802D9B8: + adds r0, r4, #0 + bl UpdateAnimationSingleFrame + adds r0, r4, #0 + adds r0, #0x5a + ldrb r1, [r0] + movs r0, #0x80 + ands r0, r1 + cmp r0, #0 + bne _0802D9CE + b _0802DB7E +_0802D9CE: + movs r0, #0x24 + movs r1, #6 + bl CreateEnemy + adds r1, r0, #0 + str r1, [r4, #0x54] + cmp r1, #0 + beq _0802D99C + ldr r0, [r4, #0x50] + str r0, [r1, #0x50] + adds r2, r4, #0 + adds r2, #0x84 + ldr r1, [r2] + ldr r0, [r4, #0x54] + str r0, [r1, #0x38] + adds r0, #0x84 + ldr r1, [r2] + str r1, [r0] + b _0802D99C + .align 2, 0 +_0802D9F4: .4byte gRoomTransition +_0802D9F8: + ldr r0, _0802DA50 @ =gRoomTransition + ldr r0, [r0] + movs r1, #1 + ands r0, r1 + cmp r0, #0 + beq _0802DA0E + ldr r0, [r4, #0x50] + ldrb r0, [r0, #0xc] + cmp r0, #2 + bne _0802DA0E + b _0802DB7E +_0802DA0E: + 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 + bne _0802DA24 + b _0802DB7E +_0802DA24: + movs r0, #0x24 + movs r1, #3 + bl CreateEnemy + adds r1, r0, #0 + str r1, [r4, #0x54] + cmp r1, #0 + beq _0802D99C + ldr r0, [r4, #0x50] + str r0, [r1, #0x50] + adds r1, r4, #0 + adds r1, #0x84 + ldr r0, [r1] + ldrb r0, [r0, #1] + strb r0, [r4, #0xe] + ldr r2, [r1] + ldr r0, [r4, #0x54] + str r0, [r2, #0x38] + adds r0, #0x84 + ldr r1, [r1] + str r1, [r0] + b _0802D99C + .align 2, 0 +_0802DA50: .4byte gRoomTransition +_0802DA54: + adds r0, r4, #0 + adds r0, #0x74 + ldrb r1, [r0] + adds r6, r0, #0 + cmp r1, #0 + beq _0802DA96 + subs r0, r1, #1 + strb r0, [r6] + lsls r0, r0, #0x18 + cmp r0, #0 + bne _0802DA96 + adds r5, r4, #0 + adds r5, #0x75 + ldrb r0, [r5] + adds r0, #2 + strb r0, [r5] + ldr r7, _0802DAD4 @ =gUnk_080CD884 + ldrb r0, [r5] + adds r0, r0, r7 + ldrb r0, [r0] + strb r0, [r6] + cmp r0, #0 + beq _0802DA96 + adds r0, r4, #0 + bl UnloadOBJPalette + ldrb r0, [r5] + adds r0, #1 + adds r0, r0, r7 + ldrb r1, [r0] + adds r0, r4, #0 + bl LoadObjPalette +_0802DA96: + adds r0, r4, #0 + adds r0, #0x41 + ldrb r1, [r0] + movs r0, #0x80 + ands r0, r1 + cmp r0, #0 + beq _0802DAD8 + ldrb r2, [r6] + cmp r2, #0 + bne _0802DAD8 + movs r0, #0x7f + ands r0, r1 + cmp r0, #0x1d + bne _0802DB20 + movs r0, #0xc0 + lsls r0, r0, #0xa + str r0, [r4, #0x20] + ldr r1, [r4, #0x50] + movs r0, #4 + strb r0, [r1, #0xd] + ldr r0, [r4, #0x50] + strb r2, [r0, #0xb] + ldr r0, [r4, #0x50] + adds r0, #0x7b + strb r2, [r0] + movs r0, #0x86 + lsls r0, r0, #1 + bl SoundReq + b _0802DB20 + .align 2, 0 +_0802DAD4: .4byte gUnk_080CD884 +_0802DAD8: + adds r0, r4, #0 + adds r0, #0x84 + ldr r2, [r0] + ldrb r1, [r4, #0xe] + adds r3, r0, #0 + ldrb r0, [r2, #1] + cmp r1, r0 + beq _0802DB20 + adds r0, r1, #0 + ldrb r1, [r2, #1] + subs r0, r0, r1 + movs r1, #0x1f + ands r0, r1 + cmp r0, #0x10 + ble _0802DB08 + ldrb r0, [r4, #0x1e] + adds r0, #1 + strb r0, [r4, #0x1e] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0x30 + bls _0802DB1A + movs r0, #0x28 + b _0802DB18 +_0802DB08: + ldrb r0, [r4, #0x1e] + subs r0, #1 + strb r0, [r4, #0x1e] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0x27 + bhi _0802DB1A + movs r0, #0x30 +_0802DB18: + strb r0, [r4, #0x1e] +_0802DB1A: + ldr r0, [r3] + ldrb r0, [r0, #1] + strb r0, [r4, #0xe] +_0802DB20: + ldr r0, [r4, #0x20] + cmp r0, #0 + ble _0802DB7E + movs r1, #0xc0 + lsls r1, r1, #5 + adds r0, r4, #0 + bl GravityUpdate + ldr r0, [r4, #0x20] + cmp r0, #0 + bgt _0802DB7E + movs r0, #0x24 + movs r1, #4 + bl CreateEnemy + adds r1, r0, #0 + str r1, [r4, #0x54] + cmp r1, #0 + beq _0802DB7E + ldr r0, [r4, #0x50] + str r0, [r1, #0x50] + adds r2, r4, #0 + adds r2, #0x84 + ldr r1, [r2] + ldr r0, [r4, #0x54] + str r0, [r1, #0x38] + adds r0, #0x84 + ldr r1, [r2] + str r1, [r0] + ldr r1, [r4, #0x54] + adds r0, r4, #0 + bl CopyPosition + b _0802D99C +_0802DB64: + ldr r1, _0802DB80 @ =gUnk_080CD810 + ldrb r0, [r4, #0xd] + lsls r0, r0, #2 + adds r0, r0, r1 + ldr r1, [r0] + adds r0, r4, #0 + bl _call_via_r1 + adds r0, r4, #0 + adds r0, #0x84 + ldr r0, [r0] + bl sub_0802E7E4 +_0802DB7E: + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0802DB80: .4byte gUnk_080CD810 + + .syntax divided diff --git a/asm/non_matching/gleerok/sub_0802E518.inc b/asm/non_matching/gleerok/sub_0802E518.inc new file mode 100644 index 00000000..1831b494 --- /dev/null +++ b/asm/non_matching/gleerok/sub_0802E518.inc @@ -0,0 +1,300 @@ + .syntax unified + + .text + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0xc + str r0, [sp] + adds r0, #0x84 + ldr r0, [r0] + mov sb, r0 + ldr r1, [r0, #0x3c] + ldr r0, [r1, #0x50] + bl CopyPosition + mov r0, sb + ldr r1, [r0, #0x3c] + ldrb r0, [r0, #1] + strb r0, [r1, #0x15] + mov r1, sb + ldrb r6, [r1, #1] + cmp r6, #0x10 + bls _0802E54C + movs r0, #0xf + eors r6, r0 + adds r6, #1 + ands r6, r0 +_0802E54C: + cmp r6, #0x10 + bne _0802E552 + movs r6, #0xf +_0802E552: + mov r2, sb + ldr r1, [r2, #0x3c] + movs r0, #0xf + eors r6, r0 + adds r0, r6, #0 + adds r0, #0x12 + lsls r0, r0, #8 + strh r0, [r1, #0x24] + ldr r0, [r2, #0x3c] + bl LinearMoveUpdate + movs r6, #0 + movs r0, #0x3c + add r0, sb + mov sl, r0 + mov r1, sb + adds r1, #0x30 + str r1, [sp, #4] + ldr r2, [sp] + adds r2, #0x80 + str r2, [sp, #8] + movs r7, #0x80 + lsls r7, r7, #1 +_0802E580: + lsls r0, r6, #2 + add r0, sl + ldr r0, [r0] + adds r1, r6, #1 + mov r8, r1 + lsls r4, r1, #2 + mov r2, sl + adds r5, r2, r4 + ldr r1, [r5] + bl CopyPosition + add r4, sb + ldrb r0, [r4, #0x19] + lsls r0, r0, #4 + ldr r1, _0802E644 @ =gSineTable + adds r0, r0, r1 + movs r2, #0 + ldrsh r0, [r0, r2] + ldr r1, [sp, #4] + adds r6, r1, r6 + ldrb r1, [r6] + lsls r1, r1, #0x18 + asrs r1, r1, #0x10 + bl FixedMul + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + adds r1, r7, #0 + bl FixedDiv + adds r1, r0, #0 + ldrb r0, [r4, #1] + lsls r0, r0, #4 + ldr r2, _0802E644 @ =gSineTable + adds r0, r0, r2 + movs r2, #0 + ldrsh r0, [r0, r2] + lsls r1, r1, #0x10 + asrs r1, r1, #0x10 + bl FixedMul + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + adds r1, r7, #0 + bl FixedDiv + ldr r2, [r5] + lsls r0, r0, #0x10 + asrs r0, r0, #8 + ldr r1, [r2, #0x2c] + adds r1, r1, r0 + str r1, [r2, #0x2c] + ldrb r0, [r4, #0x19] + lsls r0, r0, #4 + adds r0, #0x80 + ldr r1, _0802E644 @ =gSineTable + adds r0, r0, r1 + movs r2, #0 + ldrsh r0, [r0, r2] + ldrb r1, [r6] + lsls r1, r1, #0x18 + asrs r1, r1, #0x10 + bl FixedMul + lsls r0, r0, #0x10 + asrs r0, r0, #0x10 + adds r1, r7, #0 + bl FixedDiv + ldr r2, [r5] + lsls r0, r0, #0x10 + asrs r0, r0, #8 + ldr r1, [r2, #0x30] + subs r1, r1, r0 + str r1, [r2, #0x30] + mov r6, r8 + cmp r6, #4 + bls _0802E580 + mov r1, sb + ldr r0, [r1, #0x50] + ldrb r1, [r0, #0xe] + adds r2, r0, #0 + cmp r1, #0x18 + bne _0802E662 + mov r1, sb + ldrb r0, [r1, #0x15] + lsrs r0, r0, #3 + lsls r7, r0, #2 + mov r0, sb + adds r0, #0x2d + ldrb r0, [r0] + lsls r1, r0, #0x18 + lsrs r0, r1, #0x18 + cmp r0, #0xc + bls _0802E648 + adds r7, #3 + b _0802E64C + .align 2, 0 +_0802E644: .4byte gSineTable +_0802E648: + lsrs r0, r1, #0x1a + adds r7, r7, r0 +_0802E64C: + adds r0, r2, #0 + adds r0, #0x58 + ldrb r0, [r0] + adds r1, r7, #0 + adds r1, #0x18 + cmp r0, r1 + beq _0802E6E8 + adds r0, r2, #0 + bl InitAnimationForceUpdate + b _0802E6E8 +_0802E662: + ldr r2, [sp, #8] + ldrb r0, [r2] + cmp r0, #0 + bne _0802E688 + mov r0, sb + movs r1, #5 + movs r2, #0 + movs r3, #0 + bl sub_0802E7CC + mov r0, sb + ldr r2, [r0, #0x50] + ldrb r1, [r2, #0x14] + lsrs r0, r1, #1 + adds r7, r1, r0 + lsrs r0, r7, #2 + ldrb r2, [r2, #0xe] + adds r7, r0, r2 + b _0802E6CA +_0802E688: + ldr r0, [sp] + adds r0, #0x3d + ldrb r0, [r0] + lsls r0, r0, #0x18 + asrs r0, r0, #0x18 + cmp r0, #0 + bne _0802E6C0 + ldr r0, [sp] + adds r0, #0x58 + ldrb r3, [r0] + mov r1, sb + ldrb r0, [r1, #0x15] + lsrs r2, r0, #3 + adds r0, r2, #0 + adds r0, #0x2f + cmp r3, r0 + bne _0802E6BA + ldr r0, [sp] + adds r0, #0x5a + ldrb r1, [r0] + movs r0, #0x80 + ands r0, r1 + adds r7, r3, #0 + cmp r0, #0 + beq _0802E6CA +_0802E6BA: + adds r7, r2, #0 + adds r7, #0x28 + b _0802E6CA +_0802E6C0: + mov r2, sb + ldrb r0, [r2, #0x15] + lsrs r0, r0, #3 + adds r7, r0, #0 + adds r7, #0x2f +_0802E6CA: + mov r0, sb + ldr r1, [r0, #0x50] + adds r0, r1, #0 + adds r0, #0x58 + ldrb r0, [r0] + cmp r0, r7 + beq _0802E6E2 + adds r0, r1, #0 + adds r1, r7, #0 + bl InitAnimationForceUpdate + b _0802E6E8 +_0802E6E2: + adds r0, r1, #0 + bl UpdateAnimationSingleFrame +_0802E6E8: + movs r6, #0 +_0802E6EA: + ldr r1, [sp, #8] + ldrb r0, [r1] + cmp r0, #0 + bne _0802E72E + lsls r1, r6, #0x18 + lsrs r1, r1, #0x18 + mov r0, sb + movs r2, #0 + movs r3, #0 + bl sub_0802E7CC + lsls r5, r6, #2 + mov r2, sl + adds r0, r2, r5 + ldr r0, [r0] + ldrb r1, [r0, #0x14] + lsrs r0, r1, #1 + adds r7, r1, r0 + lsrs r7, r7, #2 + adds r4, r6, #1 + lsls r0, r4, #2 + add r0, sb + ldrb r0, [r0, #0x19] + movs r1, #3 + bl __divsi3 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + lsls r1, r0, #1 + adds r1, r1, r0 + lsls r1, r1, #2 + adds r7, r7, r1 + adds r1, r5, #0 + b _0802E73E +_0802E72E: + lsls r1, r6, #2 + mov r2, sb + adds r0, r2, r1 + ldrb r0, [r0, #1] + lsrs r0, r0, #3 + adds r7, r0, #0 + adds r7, #0x48 + adds r4, r6, #1 +_0802E73E: + mov r2, sl + adds r0, r2, r1 + ldr r1, [r0] + adds r0, r1, #0 + adds r0, #0x58 + ldrb r0, [r0] + cmp r0, r7 + beq _0802E756 + adds r0, r1, #0 + adds r1, r7, #0 + bl InitializeAnimation +_0802E756: + adds r6, r4, #0 + cmp r6, #4 + bls _0802E6EA + add sp, #0xc + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7, pc} + + .syntax divided diff --git a/include/enemy.h b/include/enemy.h index 1b7d1a07..2a038e5d 100644 --- a/include/enemy.h +++ b/include/enemy.h @@ -63,7 +63,7 @@ typedef enum { /*0x21*/ FALLING_BOULDER, /*0x22*/ BOBOMB, /*0x23*/ WALL_MASTER_2, - /*0x24*/ GLEEROCK, + /*0x24*/ GLEEROK, /*0x25*/ VAATI_EYES_MACRO, /*0x26*/ TEKTITE, /*0x27*/ WIZZROBE_WIND, diff --git a/linker.ld b/linker.ld index f6a36769..52c818fb 100644 --- a/linker.ld +++ b/linker.ld @@ -355,6 +355,7 @@ SECTIONS { src/enemy/fallingBoulder.o(.text); src/enemy/bobomb.o(.text); src/enemy/wallMaster2.o(.text); + src/enemy/gleerok.o(.text); asm/enemy/gleerok.o(.text); src/enemy/vaatiEyesMacro.o(.text); src/enemy/tektite.o(.text); @@ -1004,6 +1005,7 @@ SECTIONS { src/enemy/bobomb.o(.rodata); data/animations/enemy/bobomb.o(.rodata); src/enemy/wallMaster2.o(.rodata); + src/enemy/gleerok.o(.rodata); data/const/enemy/gleerok.o(.rodata); data/animations/enemy/gleerok.o(.rodata); src/enemy/vaatiEyesMacro.o(.rodata); diff --git a/src/enemy.c b/src/enemy.c index b0594e0f..a56124d3 100644 --- a/src/enemy.c +++ b/src/enemy.c @@ -468,7 +468,7 @@ void (*const gEnemyFunctions[])(Entity* ent) = { [FALLING_BOULDER] = FallingBoulder, [BOBOMB] = Bobomb, [WALL_MASTER_2] = WallMaster2, - [GLEEROCK] = Gleerok, + [GLEEROK] = Gleerok, [VAATI_EYES_MACRO] = VaatiEyesMacro, [TEKTITE] = Tektite, [WIZZROBE_WIND] = WizzrobeWind, diff --git a/src/enemy/gleerok.c b/src/enemy/gleerok.c new file mode 100644 index 00000000..70a6c78b --- /dev/null +++ b/src/enemy/gleerok.c @@ -0,0 +1,1258 @@ +#define NENT_DEPRECATED +#include "entity.h" +#include "enemy.h" +#include "player.h" +#include "screen.h" +#include "functions.h" +#include "object.h" + +typedef struct { + /*0x00*/ u8 filler[0x30]; + /*0x30*/ u8 unk_30[6]; + /*0x36*/ u8 filler_36[0x2]; + /*0x38*/ Entity* ent; + /*0x3c*/ Entity* entities[5]; + /*0x50*/ Entity* ent2; +} Gleerok_HeapStruct; + +typedef struct { + Entity base; + u8 filler[0xc]; + u8 unk_74; + u8 unk_75; + u8 unk_76; + u8 unk_77; + u8 unk_78; + u8 unk_79; + u8 unk_7a; + u8 unk_7b; + union SplitWord unk_7c; + u8 unk_80; + u8 unk_81; + u8 unk_82; + u8 unk_83; + Gleerok_HeapStruct* unk_84; +} GleerokEntity; + +extern void (*const gUnk_080CD748[])(Entity*); +extern void (*const gUnk_080CD75C[])(GleerokEntity*); +extern void (*const gUnk_080CD7B8[])(GleerokEntity*); +extern void (*const gUnk_080CD7E4[])(GleerokEntity*); +extern void (*const gUnk_080CD810[])(GleerokEntity*); +extern void (*const gUnk_080CD828[])(GleerokEntity*); +extern void (*const gUnk_080CD848[])(GleerokEntity*); + +extern u8 gUnk_080CD774[]; +extern u8 gUnk_080CD7C4[]; +extern u8 gUnk_080CD884[]; +extern u8 gUnk_080CD7F8[]; +extern u8 gUnk_080CD840[]; +extern u8 gUnk_080CD844[]; + +extern u32 sub_0806FC80(Entity*, Entity*, s32); + +extern void sub_0802E518(GleerokEntity* this); +extern void sub_0802E7E4(Gleerok_HeapStruct* this); +extern void sub_0802E1D0(GleerokEntity* this); +extern u32 sub_0802EB9C(GleerokEntity* this); +extern void sub_0802D86C(GleerokEntity* this); +extern void sub_0802E430(GleerokEntity* this); +extern void sub_0802EBC4(GleerokEntity* this); +extern void sub_0802E9B0(GleerokEntity* this); + +extern bool32 sub_0802EB08(Gleerok_HeapStruct* param_1, u32 param_2, u32 param_3); +extern bool32 sub_0802EA18(u16 param_1, u16 param_2, u32 param_3); +extern bool32 sub_0802EA48(Gleerok_HeapStruct* param_1, u32 param_2, u32 param_3, u32 param_4); +extern bool32 sub_0802EA68(Gleerok_HeapStruct* param_1, u32 param_2, u32 param_3, u32 param_4); +extern bool32 sub_0802E7CC(Gleerok_HeapStruct* param_1, u32 param_2, u32 param_3, u32 param_4); +extern bool32 sub_0802EA88(Gleerok_HeapStruct* param_1); +extern bool32 sub_0802E768(Gleerok_HeapStruct* param_1); + +void Gleerok(Entity* this) { + gUnk_080CD748[GetNextFunction(this)](this); +} + +void sub_0802D034(GleerokEntity* this) { + sub_08078B48(); + + switch (super->type) { + case 2: + if (super->type2 == 0) { + super->type2 = 1; + super->actionDelay = 0; + super->field_0xf = 0x3c; + this->unk_74 = 0x10; + this->unk_75 = 0; + gScreen.controls.alphaBlend = this->unk_74; + gScreen.controls.layerFXControl = 0x1442; + SoundReq(SFX_EVAPORATE); + } else { + ++super->actionDelay; + if ((super->actionDelay & 0xf) == 0) { + this->unk_75++; + this->unk_74--; + gScreen.controls.alphaBlend = this->unk_74 | (this->unk_75 << 8); + if (gScreen.controls.alphaBlend == 0x1000) { + sub_0807AABC(&gPlayerEntity); + DeleteThisEntity(); + } + } + + if (super->field_0xf) { + if (--super->field_0xf == 0) { + SoundReq(SFX_APPARATE); + } + } + } + break; + case 1: + SoundReq(SFX_BOSS_DIE); + sub_0804A7D4(super); + break; + case 0: + gPlayerState.field_0x14 = 1; + + if (sub_0806FC80(super, &gPlayerEntity, super->frame & 0x3f)) { + gPlayerState.field_0x3f = 0xfa; + } + + gUnk_080CD75C[super->action](this); + sub_0802E518(this); + sub_0802E7E4(this->unk_84); + break; + } +} + +void sub_0802D158(GleerokEntity* this) { + super->action = 1; + gUnk_02034490[0] = 1; + SetFade(7, 8); +} + +void sub_0802D170(GleerokEntity* this) { + if (gFadeControl.active) + return; + + if (super->action == 1) { + this->unk_84->filler[1] = 0x10; + this->unk_84->filler[0x19] = 0x10; + if (sub_0802EB08(this->unk_84, 0x40, 2) == 0 && sub_0802EA88(this->unk_84) == 0) { + super->action = 2; + gPlayerEntity.x.HALF.HI = gRoomControls.origin_x + 0x98; + gPlayerEntity.y.HALF.HI = gRoomControls.origin_y + 0xd8; + gPlayerEntity.animationState = 0; + sub_0807BA8C(COORD_TO_TILE(&gPlayerEntity), 2); + gRoomControls.camera_target = super; + SetFade(6, 8); + } + } else { + super->action = 3; + this->unk_80 = 0; + ((Entity*)this->unk_84)->parent->actionDelay = 0x18; + this->unk_84->filler[0x19] = 0; + } +} + +void sub_0802D218(GleerokEntity* this) { + if (sub_0802EB08(this->unk_84, 0x40, 2)) + return; + + super->action = 4; + super->actionDelay = 0; + super->field_0xf = 0; + this->unk_7c.HALF_U.LO = 0xb4; + ((Entity*)(this->unk_84))->parent->actionDelay = 0xc; + CreateObjectWithParent(super, 0x67, 0x2, this->unk_7c.HALF_U.LO); +} + +void sub_0802D258(GleerokEntity* this) { + if (this->unk_7c.HALF_U.LO == 0) { + sub_0802E1D0(this); + if (super->type2 == 5) { + super->action = 5; + return; + } + } else { + if (--this->unk_7c.HALF_U.LO == 0) { + InitializeAnimation(super, 0x4e); + } + } + + if (super->actionDelay == 0) { + super->actionDelay = gUnk_080CD774[super->field_0xf]; + super->direction = gUnk_080CD774[super->field_0xf + 1]; + super->field_0xf = (super->field_0xf & 0x3f) + 2; + } else { + super->actionDelay--; + } + + if (super->direction <= 1) { + sub_0802EA48(this->unk_84, 5, 0x40, super->direction); + } else { + Gleerok_HeapStruct** tmp = &this->unk_84; + if (super->direction != 0xff) { + sub_0802EA68(*tmp, 5, 0x40, super->direction); + } + } + + if ((gRoomTransition.frameCount & 0x1f) == 0) { + SoundReq(SFX_BOSS_DIE); + } + + if ((gRoomTransition.frameCount & 0xf) == 0) { + Entity* fx; + u32 rand = Random() & 5; + u8* ptr = (u8*)this->unk_84; + rand *= 4; + ptr += 0x3c; + fx = CreateFx(*(Entity**)(ptr + rand), FX_GIANT_EXPLOSION3, 0); + if (fx) { + fx->spritePriority.b0 = 0; + } + } + + sub_0802E768(this->unk_84); +} + +NONMATCH("asm/non_matching/gleerok/sub_0802D33C.inc", void sub_0802D33C(GleerokEntity* this)) { + u8* unk_84 = (u8*)this->unk_84; + u8* ptr = unk_84; + u8* ptr2; + u32 i = 0; + ptr += 0x3c; + ptr2 = ptr; + + do { + DeleteEntity(*(Entity**)ptr); + ptr += 4; + } while (i < 4); + + ptr2 += (i << 2); + *(u32*)((*(u8**)ptr2) + 0x45) = 0; + *((*(u8**)ptr2) + 0x6d) |= 1; + ((Entity*)(*(u8**)(unk_84 + 0x50)))->health = 0; + ((Entity*)(*(u8**)(unk_84 + 0x50)))->type2 = 0; + ((Entity*)(*(u8**)(unk_84 + 0x50)))->spriteSettings.draw &= ~1; + DeleteThisEntity(); +} +END_NONMATCH + +void sub_0802D394(GleerokEntity* this) { + gUnk_080CD7B8[super->action](this); + super->spriteRendering.b3 = 3; +} + +NONMATCH("asm/non_matching/gleerok/sub_0802D3B8.inc", void sub_0802D3B8(GleerokEntity* this)) { + u32 uvar1; + Entity* ent; + Gleerok_HeapStruct* heap; + u32 val; + u8* ptr; + u8* ptr2; + + if (CheckGlobalFlag(3)) { + gScreen.lcd.displayControl &= 0xFDFF; + sub_0807AABC(&gPlayerEntity); + DeleteThisEntity(); + } + + super->action = 1; + + switch (super->type) { + case 0: + super->action = 2; + COLLISION_OFF(super); + super->spritePriority.b0 = 7; + this->unk_75 = 0; + this->unk_80 = 0; + this->unk_79 = 0; + this->unk_7c.WORD = 0x96; + + sub_0802EB9C(this); + this->unk_84 = zMalloc(0x54); + heap = this->unk_84; + + if (heap == NULL) { + sub_0804A7D4(super); + DeleteThisEntity(); + } + + super->myHeap = this->unk_84; + uvar1 = 0; + + do { + ent = CreateEnemy(GLEEROK, 1); + super->child = ent; + if (ent) { + ent->type2 = uvar1 + 1; + super->child->collisionLayer = super->collisionLayer; + super->child->x.HALF.HI = super->x.HALF.HI; + super->child->y.HALF.HI = super->y.HALF.HI + ((uvar1 + 1) * 12); + super->child->parent = super; + ((GleerokEntity*)super->child)->unk_84 = this->unk_84; + this->unk_84->entities[uvar1] = super->child; + ptr = this->unk_84->filler; + ptr2 = ptr + uvar1 * 4; + ptr2[1] = 0x10; + ptr2[0x19] = 0; + ptr[0x35] = 0; + } + } while (++uvar1 < 5); + + ent = CreateEnemy(GLEEROK, 2); + super->child = ent; + if (ent) { + super->child->collisionLayer = super->collisionLayer; + super->child->x.HALF.HI = super->x.HALF.HI; + super->child->y.HALF.HI = super->y.HALF.HI + ((uvar1 + 1) * 12); + super->child->parent = super; + ((GleerokEntity*)super->child)->unk_84 = this->unk_84; + heap->ent2 = super->child; + heap->filler[0x15] = 0x10; + heap->filler[0x2d] = 0; + heap->filler[0x35] = 0; + } +#ifndef EU + gPlayerState.controlMode = 3; +#endif + InitializeAnimation(super, 0x4c); + break; + case 1: + if (super->type2 == 1) { + COLLISION_ON(super); + super->flags2 |= 0x80; + } + ptr = gUnk_080CD7C4; + ptr += super->type2 * 4; + super->spritePriority.b0 = *(ptr + 1); + super->field_0xf = 0; + InitializeAnimation(super, 0x24); + break; + case 2: + super->spritePriority.b0 = 0; + super->field_0xf = 0; + InitAnimationForceUpdate(super, 0); + break; + case 3: + this->unk_74 = gUnk_080CD884[0]; + this->unk_75 = 0; + super->spritePriority.b0 = 6; + super->flags2 |= 0x80; + CopyPosition(super->parent, super); + InitializeAnimation(super, 0x4f); + break; + case 4: + InitAnimationForceUpdate(super, 0x2c); + break; + case 5: + super->spritePriority.b0 = 6; + CopyPosition(super->parent, super); + InitAnimationForceUpdate(super, 0x2d); + break; + case 6: + super->spritePriority.b0 = 6; + CopyPosition(super->parent, super); + InitializeAnimation(super, 0x50); + break; + } + + if (super->type) { + sub_0802D86C(this); + } +} +END_NONMATCH + +void sub_0802D650(GleerokEntity* this) { +#ifdef EU + sub_08078B48(); +#endif + + gUnk_080CD7E4[super->subAction](this); + sub_0802E7E4(this->unk_84); +} + +void sub_0802D674(GleerokEntity* this) { + u32 val; + gUnk_02034490[0] = 1; + + if (gPlayerEntity.z.WORD != 0) + return; + if (this->unk_7c.WORD == 0x96) { + SoundReq(SFX_BOSS_HIT); + } + + val = --this->unk_7c.WORD; + if (val == -1) { + super->subAction = 1; + this->unk_7c.WORD = 0x5a; + gRoomControls.camera_target = super; + SoundReq(SFX_BOSS_HIT); + } else if (val <= 0x3c) { + if (val == 0x3c) { + CreateSpeechBubbleExclamationMark(&gPlayerEntity, 0xc, -0x18); + } + gPlayerEntity.animationState = 0; + } else if (val <= 0x59) { + gPlayerEntity.animationState = 2; + } else if (val <= 0x77) { + gPlayerEntity.animationState = 6; + } +} + +void sub_0802D6F0(GleerokEntity* this) { + if (--this->unk_7c.WORD == -1) { + super->subAction = 2; + this->unk_7c.WORD = 0x5a; + InitScreenShake(0x96, 0); + } +} + +void sub_0802D714(GleerokEntity* this) { + Entity* enemy; + u32 index; + u32 val1, val2; + u8* ptr; + Gleerok_HeapStruct* heap; + if (--this->unk_7c.WORD != -1) + return; + + for (heap = this->unk_84, index = 0, val1 = 0, val2 = 0x10, ptr = this->unk_84->filler; index < 6; + ptr += 4, ++index) { + *(u16*)(ptr + 0x18) = val1; + *(ptr + 1) = val2; + } + + super->subAction = 3; + super->type2 = 0; + super->spriteSettings.draw = 1; + InitializeAnimation(super, 0x4d); + enemy = CreateEnemy(GLEEROK, 5); + super->child = enemy; + if (enemy) { + enemy->parent = super; + heap->ent = super->child; + ((GleerokEntity*)(super->child))->unk_84 = heap; + } + + heap->ent2->actionDelay = 0x18; +} + +void sub_0802D77C(GleerokEntity* this) { + if (gRoomTransition.frameCount & 1) + return; + + sub_0802E430(this); + + if (super->type2 != 2) + return; + + super->field_0xf = 0; + super->actionDelay = 0; + super->subAction = 4; + this->unk_84->ent2->actionDelay = 0xc; +} + +void sub_0802D7B4(GleerokEntity* this) { + u8 dir; + if (super->actionDelay == 0) { + if (gUnk_080CD7F8[super->field_0xf] == 0xff) { + super->field_0xf = 0; + super->actionDelay = 0; + super->action = 1; + super->subAction = 0; + this->unk_84->ent2->actionDelay = 0x18; + gRoomControls.camera_target = &gPlayerEntity; +#ifndef EU + gPlayerState.controlMode = 1; +#endif + gUnk_02034490[0] = 0; + SoundReq(BGM_BOSS_THEME); + return; + } else { + super->actionDelay = gUnk_080CD7F8[super->field_0xf]; + super->direction = gUnk_080CD7F8[super->field_0xf + 1]; + super->field_0xf += 2; + SoundReq(SFX_BOSS_HIT); + } + } else { + super->actionDelay--; + } + + if (super->direction <= 1) { + sub_0802EA48(this->unk_84, 5, 0x40, super->direction); + } else if (super->direction != 0xff) { + sub_0802EA68(this->unk_84, 5, 0x40, super->direction); + } + + sub_0802E768(this->unk_84); + sub_0802E518(this); +} + +NONMATCH("asm/non_matching/gleerok/sub_0802D86C.inc", void sub_0802D86C(GleerokEntity* this)) { + Entity* enemy; + Entity* enemy2; + switch (super->type) { + case 1: + if (super->type2 == 1) { + if (((GleerokEntity*)(super->parent))->unk_80 != 0 || super->spriteSettings.draw != 1) { + COLLISION_OFF(super); + } else { + COLLISION_ON(super); + } + } + case 2: + if ((super->spriteSettings.draw & 1) == 0) + return; + + super->iframes = super->parent->iframes; + if (super->iframes == 0) { + if (super->field_0xf == 0) { + UnloadOBJPalette(super); + LoadObjPalette(super, 0xc9); + } else { + super->field_0xf--; + UnloadOBJPalette(super); + LoadObjPalette(super, 0xca); + } + } + + if (((GleerokEntity*)(super->parent))->unk_80 == 0) + return; + if (!EntityInRectRadius(super, &gPlayerEntity, 8, 8)) + return; + + gPlayerState.field_0x14 = 1; + gPlayerState.field_0x3f = 0xfc; + + break; + case 4: + if (super->frame == 0) { + UpdateAnimationSingleFrame(super); + return; + } + + if (GravityUpdate(super, 0x1800)) + return; + + ((GleerokEntity*)(super->parent))->unk_7b = 1; + super->actionDelay = 0; + + do { + CreateObjectWithParent(super, OBJECT_67, 0, super->actionDelay); + } while (++super->actionDelay < 8); + + SoundReq(SFX_150); + DeleteThisEntity(); + break; + case 5: + if ((gRoomTransition.frameCount & 1) && super->parent->action == 2) + return; + + UpdateAnimationSingleFrame(super); + + if ((super->frame & 0x80) == 0) + return; + + enemy = CreateEnemy(GLEEROK, 6); + + super->child = enemy; + if (enemy) { + enemy->parent = super->parent; + this->unk_84->ent = super->child; + ((GleerokEntity*)super->child)->unk_84 = this->unk_84; + } + + DeleteThisEntity(); + break; + case 6: + if ((gRoomTransition.frameCount & 1) && super->parent->action == 2) + return; + + GetNextFrame(super); + + if ((super->frame & 0x80) == 0) + return; + + enemy = CreateEnemy(GLEEROK, 3); + + super->child = enemy; + if (enemy) { + enemy->parent = super->parent; + super->actionDelay = this->unk_84->filler[1]; + this->unk_84->ent = super->child; + ((GleerokEntity*)super->child)->unk_84 = this->unk_84; + } + + DeleteThisEntity(); + break; + case 3: + if (this->unk_74) { + if (--this->unk_74 == 0) { + u32 unk_74; + this->unk_75 += 2; + unk_74 = gUnk_080CD884[this->unk_75]; + this->unk_74 = unk_74; + + if (unk_74) { + UnloadOBJPalette(super); + LoadObjPalette(super, gUnk_080CD884[this->unk_75 + 1]); + } + } + } + + if ((super->bitfield & 0x80) && this->unk_74 == 0) { + if ((super->bitfield & 0x7f) == 0x1d) { + super->zVelocity = 0x30000; + super->parent->subAction = 4; + super->parent->type2 = 0; + ((GleerokEntity*)super->parent)->unk_7b = 0; + SoundReq(SFX_10C); + } + } else { + if (super->actionDelay != this->unk_84->filler[1]) { + if (((super->actionDelay - this->unk_84->filler[1]) & 0x1f) > 0x10) { + if (++super->frameIndex >= 0x31) { + super->frameIndex = 0x28; + } + } else { + if (--super->frameIndex <= 0x27) { + super->frameIndex = 0x30; + } + } + + super->actionDelay = this->unk_84->filler[1]; + } + } + + if (super->zVelocity <= 0) + return; + + GravityUpdate(super, 0x1800); + + if (super->zVelocity > 0) + return; + + enemy = CreateEnemy(GLEEROK, 4); + super->child = enemy; + if (enemy) { + enemy->parent = super->parent; + this->unk_84->ent = super->child; + ((GleerokEntity*)super->child)->unk_84 = this->unk_84; + // Making super in super->child volatile solves this but ugly + CopyPosition(super, super->child); + DeleteThisEntity(); + } + + break; + case 0: + gUnk_080CD810[super->subAction](this); + sub_0802E7E4(this->unk_84); + break; + } +} +END_NONMATCH + +void sub_0802DB84(GleerokEntity* this) { + u32 actionDelay; + super->direction = GetFacingDirection(super, &gPlayerEntity); + if (this->unk_84->filler[0x1] == super->direction) { + super->subAction = 1; + this->unk_78 = 0; + return; + } + + if (((this->unk_84->filler[0x1] - super->direction) & 0x1f) > 0x10) { + actionDelay = 0; + super->actionDelay &= 0xfe; + } else { + actionDelay = 1; + super->actionDelay = actionDelay; + } + + switch (this->unk_79) { + case 0: + super->speed = 0x30; + break; + case 1: + super->speed = 0x40; + break; + case 2: + super->speed = 0x50; + break; + } + + sub_0802EA48(this->unk_84, 5, super->speed, actionDelay); + sub_0802E768(this->unk_84); + sub_0802E518(this); + sub_0802EBC4(this); +} + +void sub_0802DC1C(GleerokEntity* this) { + u32 dir, diff, uVar1; + diff = GetFacingDirection(super, &gPlayerEntity); + diff = (this->unk_84->filler[1] - diff) & 0x1f; + + if (diff > 0x10) { + if (diff <= 0x1d) { + super->subAction = 0; + this->unk_84->ent2->actionDelay = 0; + return; + } + } else if (diff >= 3) { + super->subAction = 0; + this->unk_84->ent2->actionDelay = 0; + return; + } + if (this->unk_78) { + this->unk_78--; + } else { + u8 actionDelay; + ; + actionDelay = super->actionDelay; + diff = 0; + if (actionDelay == 1) { + diff = 1; + } + + sub_0802EA48(this->unk_84, 5, 0x20, diff); + if (sub_0802EA18(*(u16*)&this->unk_84->filler[0], *(u16*)&this->unk_84->filler[0x14], 4)) { + if (super->actionDelay == 1) { + *(u16*)&this->unk_84->filler[0x14] = (((this->unk_84->filler[0x1] - 4) & 0x1f) << 8) | 0xff; + } else { + *(u16*)&this->unk_84->filler[0x14] = (((this->unk_84->filler[0x1] + 4) & 0x1f) << 8); + } + + super->actionDelay ^= 1; + this->unk_78 = 0xc; + } + } + + sub_0802E9B0(this); + sub_0802E768(this->unk_84); + sub_0802E518(this); + sub_0802EBC4(this); +} + +void sub_0802DCE0(GleerokEntity* this) { + if (this->unk_84->ent2->actionDelay != 0xc) { + super->direction = GetFacingDirection(super, &gPlayerEntity); + if (this->unk_84->filler[0x15] == super->direction) { + this->unk_84->ent2->actionDelay = 0xc; + this->unk_82 = 4; + super->field_0xf = 0; + } else { + s32 svar1, diff; + diff = ((this->unk_84->filler[0x15] - super->direction) & 0x1f); + svar1 = 1; + if (diff > 0x10) { + svar1 = 0; + } + + sub_0802EA48(this->unk_84, 5, 0x20, svar1); + sub_0802E768(this->unk_84); + } + } else { + if (super->field_0xf < 6) { + if (this->unk_82 == 0) { + this->unk_82 = 4; + this->unk_84->entities[super->field_0xf]->field_0xf = 4; + super->field_0xf++; + } else { + this->unk_82--; + } + } else { + if (this->unk_84->ent2->field_0xf == 0) { + super->child = CreateProjectileWithParent(super, GLEEROK_PROJECTILE, 0); + + if (super->child) { + super->child->direction = this->unk_84->filler[0x15]; + super->child->type2 = this->unk_84->ent2->frame & 0xf; + super->child->parent = this->unk_84->ent2; + super->child->child = this->unk_84->entities[0]; + } + + this->unk_84->ent2->actionDelay = 0; + if (this->unk_74 == 0) { + this->unk_74 = 1; + } else { + super->subAction = 0; + sub_0802EB9C(this); + } + } + } + } + sub_0802E518(this); +} + +void sub_0802DDD8(GleerokEntity* this) { + u32 r2, r8, r4; + u32 rv; + u32 unk_76 = this->unk_76; + u32 uvar1 = 4; + if (unk_76) { + uvar1 = 6; + if (this->unk_79 == 2) { + if ((Random() & 1) == 0) { + uvar1 = 0xc; + } + } + } + + switch (super->type2) { + case 0: + rv = sub_0802EA88(this->unk_84); + if (rv != 0) + break; + + super->type2 = 1; + super->field_0xf = 0; + + if ((Random() & 1) == 0) { + super->direction = 0; + this->unk_7a = (this->unk_84->filler[1] + uvar1) & 0x1f; + } else { + super->direction = 1; + this->unk_7a = (this->unk_84->filler[1] - uvar1) & 0x1f; + } + + break; + case 1: + case 2: + if (super->type2 == 1) + goto code13; + if (this->unk_76 == 0) { + r2 = 1; + r8 = 2; + r4 = 1; + } else { + r2 = 2; + r8 = 6; + r4 = 0; + } + + if (this->unk_84->ent2->field_0xf == 1) { + super->child = CreateProjectileWithParent(super, GLEEROK_PROJECTILE, r2); + if (super->child) { + super->child->direction = this->unk_84->filler[0x15]; + super->child->type2 = this->unk_84->ent2->frame & 0xf; + super->child->parent = this->unk_84->ent2; + super->child->child = this->unk_84->entities[0]; + } + } + + if (this->unk_74 == 0) { + this->unk_74 = r4; + this->unk_84->entities[super->field_0xf]->field_0xf = r8; + + if (++super->field_0xf > 5) { + super->field_0xf = 0; + } + } else { + this->unk_74--; + } + + if (super->type2 == 1) { + code13: + sub_0802EA48(this->unk_84, 5, 0x40, super->direction); + } else { + if (this->unk_76 == 0) { + sub_0802EA48(this->unk_84, 5, 0x20, super->direction); + } else { + sub_0802EA48(this->unk_84, 5, 0x10, super->direction); + } + } + sub_0802E768(this->unk_84); + + if (this->unk_7a == this->unk_84->filler[0x15]) { + if (super->type2 == 1) { + super->type2 = 2; + super->direction ^= 1; + if (super->direction == 1) { + this->unk_7a = (this->unk_7a - (uvar1 * 2)) & 0x1f; + super->actionDelay = 1; + } else { + this->unk_7a = (this->unk_7a + (uvar1 * 2)) & 0x1f; + super->actionDelay &= 0xfe; + } + + this->unk_84->ent2->actionDelay = 0xc; + } else { + super->subAction = 0; + this->unk_84->ent2->actionDelay = 0; + sub_0802EB9C(this); + } + } + + break; + } + sub_0802E518(this); +} + +void sub_0802DFA8(GleerokEntity* this) { + gUnk_080CD828[super->type2](this); +} + +void sub_0802DFC0(GleerokEntity* this) { + u32 val = this->unk_84->filler[1] & 7; + if (val) { + if (val > 4) { + super->direction = 0; + } else { + super->direction = 1; + } + + sub_0802EA48(this->unk_84, 0, 0x20, super->direction); + sub_0802EA88(this->unk_84); + } else { + if (sub_0802EA88(this->unk_84) == 0) { + if (this->unk_7b) { + COLLISION_ON(super); + super->type2 = 1; + this->unk_84->ent2->actionDelay = 0x18; + SoundReq(SFX_BOSS_HIT); + } + } + } + + sub_0802E518(this); +} + +void sub_0802E034(GleerokEntity* this) { + Gleerok_HeapStruct* heap = this->unk_84; + u32 val; + + if (super->type2 == 1) { + super->direction = 2; + val = 0; + } else { + super->direction = 3; + val = gUnk_080CD840[heap->filler[1] >> 3]; + } + + if (val != heap->filler[0x19]) { + sub_0802EA68(heap, 0, 0x40, super->direction); + sub_0802EB08(heap, 0x40, 2); + } else { + if (sub_0802EB08(heap, 0x80, 2) == 0) { + if (super->type2 == 2) { + this->unk_7c.HALF.LO = 0x168; + this->unk_80 = 1; + heap->ent2->actionDelay = 0; + } + + super->type2++; + heap->filler[0x19] = 1; + } + } + + sub_0802E518(this); +} + +void sub_0802E0B8(GleerokEntity* this) { + u32 val; + + super->y.HALF.HI -= 4; + sub_0800445C(super); + super->y.HALF.HI += 4; + + val = super->frame & 0x3f; + if (val) { + if (sub_0806FC80(super, &gPlayerEntity, val)) { + gPlayerState.field_0x14 = 1; + gPlayerState.field_0x3f = 0xfa; + } + } + + if (gUnk_080CD844[this->unk_79 & 0x7f] >= super->health) { + if (this->unk_79 > 1) { + super->health = 0; + super->action = 0; + sub_08078B48(); + SoundReq(SFX_BOSS_DIE); + return; + } else { + COLLISION_OFF(super); + this->unk_79++; + this->unk_79 |= 0x80; + super->health = 0xff; + if (this->unk_7c.HALF_U.LO > 0x78) { + this->unk_7c.HALF.LO = 0x78; + } + } + } + + if ((--this->unk_7c.HALF.LO << 16) == 0xffff0000) { + COLLISION_OFF(super); + super->spriteOffsetX = 0; + super->type2 = 4; + InitializeAnimation(super, 0x4e); + } else { + if (super->bitfield & 0x80) { + if (super->iframes > 0) { + SoundReq(SFX_BOSS_HIT); + } + } + + if (this->unk_7c.HALF_U.LO < 0x78) { + super->spriteOffsetX ^= 1; + } + } + + sub_0802E518(this); +} + +void sub_0802E1D0(GleerokEntity* this) { + Gleerok_HeapStruct* heap = this->unk_84; + if (!(super->frame & 0x80)) { + GetNextFrame(super); + } + if (super->frame & 0x3f) { + if (sub_0806FC80(super, &gPlayerEntity, super->frame & 0x3f)) { + gPlayerState.field_0x14 = 1; + gPlayerState.field_0x3f = 0xfa; + } + } + if (super->frame & 0x40) { + u32 i; + for (i = 0; i < 6; i++) { + if (heap->unk_30[i]) { + heap->unk_30[i]--; + if (heap->unk_30[i] == 0) { + CreateFx(heap->entities[0], FX_LAVA_SPLASH, 0); + SoundReq(SFX_124); + if (i == 5) { + if (!(this->unk_79 & 0x80)) { + this->unk_7c.HALF_U.LO = 0xF0; + InitScreenShake(0xF0, 0); + } else { + for (this->unk_7c.HALF_U.LO = 0; this->unk_7c.HALF_U.LO < 4; this->unk_7c.HALF_U.LO++) { + CreateObjectWithParent(super, OBJECT_67, 1, this->unk_7c.HALF_U.LO); + } + this->unk_74 = 0; + this->unk_75 = 0x10; + this->unk_7c.HALF_U.LO = 0xB; + gScreen.controls.alphaBlend = this->unk_74 | (this->unk_75 << 8); + gScreen.controls.layerFXControl = 0x240; + InitScreenShake(0x1e, 0); + } + super->type2 = 5; + } + } + break; + } + } + } + sub_0802E518(this); +} + +void sub_0802E300(GleerokEntity* this) { + u32 dir, tmp; + u32 index; + u8* ptr; + u8* ptr2; + Entity* ent; + Gleerok_HeapStruct* heap; + if ((this->unk_79 & 0x80) == 0) { + this->unk_7c.HALF.LO--; + } else { + if (this->unk_74 != 0x10) { + if (this->unk_7c.HALF_U.LO) { + --this->unk_7c.HALF_U.LO; + if (this->unk_7c.HALF_U.LO == 0) { + this->unk_7c.HALF_U.LO = 0xb; + this->unk_75--; + this->unk_74++; + gScreen.controls.alphaBlend = this->unk_74 | (this->unk_75 << 8); + } + } + } + } + + if (this->unk_7c.HALF_U.LO == 0) { + if (this->unk_79 & 0x80) { + if (this->unk_75 != 0x10) { + this->unk_7c.HALF_U.LO = 0xb; + this->unk_75++; + this->unk_74--; + gScreen.controls.alphaBlend = this->unk_74 | (this->unk_75 << 8); + return; + } + } + + this->unk_79 &= 0x7f; + heap = this->unk_84; + dir = sub_0806F5A4(GetFacingDirection(super, &gPlayerEntity)) << 3; + index = 0; + ptr2 = &this->unk_80; + tmp = 0; + ptr = heap->filler; + do { + ((u16*)ptr)[0xc] = tmp; + ptr[1] = dir; + ptr += 4; + index++; + } while (index <= 5); + + super->subAction = 5; + super->type2 = 0; + *ptr2 = 0; + InitializeAnimation(super, 0x4d); + ent = CreateEnemy(GLEEROK, 5); + super->child = ent; + if (super->child) { + super->child->parent = super; + heap->ent = super->child; + ((GleerokEntity*)super->child)->unk_84 = heap; + } + + heap->ent2->actionDelay = 0x18; + } else { + if ((gRoomTransition.frameCount & 0xf) == 0) { + CreateProjectileWithParent(super, GLEEROK_PROJECTILE, 0x3); + } + } + + sub_0802E518(this); +} + +void sub_0802E430(GleerokEntity* this) { + gUnk_080CD848[super->type2](this); +} + +void sub_0802E448(GleerokEntity* this) { + Gleerok_HeapStruct* heap = this->unk_84; + s32 index; + for (index = 5; index >= 0; index--) { + u8* ptr = &heap->filler[0x30]; + if (ptr[index] == 0) { + CreateFx(heap->entities[0], FX_LAVA_SPLASH, 0); + SoundReq(SFX_PLY_LAND); + } + + if (ptr[index] != 10) { + if (++ptr[index] == 10 && index == 0) { + super->type2 = 1; + } + break; + } + } + + if (heap->filler[0x2d] <= 9) { + sub_0802EA68(heap, 5, 0x40, 3); + } + + GetNextFrame(super); + sub_0802E768(this->unk_84); + sub_0802E518(this); +} + +void sub_0802E4C0(GleerokEntity* this) { + GetNextFrame(super); + + if (super->frame & 0x80) { + if (super->action != 2) { + this->unk_74 = 0; + this->unk_75 = 8; + + if (this->unk_79) { + this->unk_76 = 0; + this->unk_77 = 3; + } + + sub_0802EBC4(this); + } else { + super->type2++; + } + } + + sub_0802E518(this); +} + +NONMATCH("asm/non_matching/gleerok/sub_0802E518.inc", void sub_0802E518(GleerokEntity* this)) { + u32 index; + u32 r6; + u32 sp4; + u32 sp8; + s32 r7; + Gleerok_HeapStruct* heap = this->unk_84; + CopyPosition(heap->entities[0]->parent, heap->entities[0]); + heap->entities[0]->direction = heap->filler[1]; + + r6 = heap->filler[1]; + if (r6 > 0x10) { + r6 ^= 0xf; + r6 = (r6 + 1) & 0xf; + } + + if (r6 == 0x10) { + r6 = 0xf; + } + + heap->entities[0]->speed = ((r6 ^ 0xf) + 0x12) << 8; + LinearMoveUpdate(heap->entities[0]); + sp4 = *(u32*)&heap->filler[0x30]; + sp8 = this->unk_80; + + for (index = 0; index <= 4; index++) { + s32 result; + CopyPosition(heap->entities[index], heap->entities[index + 1]); + result = FixedMul(gSineTable[heap->filler[0x19 + (index + 1) * 4]], ((u8*)sp4)[r6]); + result = FixedDiv(result, 0x100); + result = FixedMul(gSineTable[heap->filler[0x1 + (index + 1) * 4]], result); + result = FixedDiv(result, 0x100); + heap->entities[index]->x.WORD += result << 8; + + result = FixedMul(gSineTable[heap->filler[0x19 + (index + 1) * 4]], ((u8*)sp4)[r6]); + result = FixedDiv(result, 0x100); + heap->entities[index]->y.WORD -= result << 8; + } + + if (heap->ent2->actionDelay == 0x18) { + r7 = (heap->filler[0x15] >> 3) << 2; + if (heap->filler[0x2d] > 0xc) { + r7 += 3; + } else { + r7 += heap->filler[0x2d] >> 2; + } + + if (heap->ent2->animIndex != r7 + 0x18) { + InitAnimationForceUpdate(heap->ent2, r7 + 0x18); + } + } else { + if (this->unk_80 == 0) { + sub_0802E7CC(heap, 5, 0, 0); + r7 = (heap->ent2->animationState / 2 + heap->ent2->animationState) / 4; + r7 += heap->ent2->actionDelay; + } else { + if (super->iframes == 0) { + if ((super->animIndex != (heap->filler[0x15] >> 3) + 0x2f) || (super->frame & 0x80) != 0) { + r7 = (heap->filler[0x15] >> 3) + 0x28; + } + } else { + r7 = (heap->filler[0x15] >> 3) + 0x2f; + } + } + + if (heap->ent2->animIndex != r7) { + InitAnimationForceUpdate(heap->ent2, r7); + } else { + UpdateAnimationSingleFrame(heap->ent2); + } + } + + for (index = 0; index <= 4; index++) { + if (this->unk_80 == 0) { + u32 val; + sub_0802E7CC(heap, (u8)index, 0, 0); + r7 = heap->entities[index]->animationState * 12; + r7 += (((s32)heap->filler[0x19 + (index + 1) * 4]) / 3) * 12; + } else { + r7 = heap->filler[0x1 + index * 4] >> 3; + r7 += 0x48; + } + if (heap->entities[index]->animIndex != r7) { + InitializeAnimation(heap->entities[index], r7); + } + } +} +END_NONMATCH