diff --git a/asm/code_803E724.s b/asm/code_803E724.s index c880ddb81..1ea92fed4 100644 --- a/asm/code_803E724.s +++ b/asm/code_803E724.s @@ -5,176 +5,6 @@ .text - thumb_func_start sub_803E724 -sub_803E724: - push {r4-r6,lr} - adds r4, r0, 0 - ldr r5, _0803E744 - movs r6, 0xF0 -_0803E72C: - adds r0, r4, 0 - bl sub_803E46C - ldrh r1, [r5] - adds r0, r6, 0 - ands r0, r1 - cmp r0, 0 - bne _0803E72C - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0803E744: .4byte gRealInputs - thumb_func_end sub_803E724 - - thumb_func_start sub_803E748 -sub_803E748: - push {r4,r5,lr} - movs r5, 0x1F - ldr r1, _0803E7B8 - movs r0, 0x1 - strb r0, [r1] - ldr r1, _0803E7BC - movs r0, 0 - str r0, [r1] - movs r0, 0x1 - movs r1, 0x1F - bl sub_803E874 - movs r4, 0 -_0803E762: - cmp r4, 0x1F - bgt _0803E780 - subs r5, 0x2 - cmp r5, 0 - bgt _0803E780 - movs r5, 0 - movs r0, 0x1 - movs r1, 0 - bl sub_803EAF0 - ldr r0, _0803E7C0 - ldr r0, [r0] - ldr r1, _0803E7C4 - adds r0, r1 - strb r5, [r0] -_0803E780: - cmp r4, 0xB - ble _0803E790 - ldr r1, _0803E7BC - ldr r0, [r1] - cmp r0, 0x1E - bgt _0803E790 - adds r0, 0x1 - str r0, [r1] -_0803E790: - movs r0, 0x1 - adds r1, r5, 0 - bl sub_803E874 - movs r0, 0x5 - bl sub_803E46C - adds r4, 0x1 - cmp r4, 0x2B - ble _0803E762 - ldr r1, _0803E7B8 - movs r0, 0 - strb r0, [r1] - ldr r1, _0803E7BC - movs r0, 0x1F - str r0, [r1] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0803E7B8: .4byte gUnknown_203B40D -_0803E7BC: .4byte gUnknown_202EDC8 -_0803E7C0: .4byte gDungeon -_0803E7C4: .4byte 0x00018217 - thumb_func_end sub_803E748 - - thumb_func_start sub_803E7C8 -sub_803E7C8: - push {r4,r5,lr} - movs r4, 0x1F - ldr r1, _0803E820 - movs r0, 0x1 - strb r0, [r1] - ldr r1, _0803E824 - movs r0, 0 - str r0, [r1] - movs r0, 0x5 - bl sub_803E46C - movs r5, 0 -_0803E7E0: - movs r0, 0x1 - adds r1, r4, 0 - bl sub_803E874 - cmp r5, 0x1F - bgt _0803E806 - subs r4, 0x2 - cmp r4, 0 - bgt _0803E806 - movs r4, 0 - movs r0, 0x1 - movs r1, 0 - bl sub_803EAF0 - ldr r0, _0803E828 - ldr r0, [r0] - ldr r1, _0803E82C - adds r0, r1 - strb r4, [r0] -_0803E806: - movs r0, 0x5 - bl sub_803E46C - adds r5, 0x1 - cmp r5, 0x2B - ble _0803E7E0 - ldr r1, _0803E820 - movs r0, 0 - strb r0, [r1] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0803E820: .4byte gUnknown_203B40D -_0803E824: .4byte gUnknown_202EDC8 -_0803E828: .4byte gDungeon -_0803E82C: .4byte 0x00018217 - thumb_func_end sub_803E7C8 - - thumb_func_start sub_803E830 -sub_803E830: - push {r4,r5,lr} - ldr r1, _0803E86C - movs r0, 0x1 - strb r0, [r1] - ldr r5, _0803E870 - movs r4, 0x1F -_0803E83C: - movs r0, 0 - movs r1, 0 - bl sub_803E874 - movs r0, 0x5 - bl sub_803E46C - ldr r0, [r5] - cmp r0, 0 - ble _0803E854 - subs r0, 0x1 - str r0, [r5] -_0803E854: - subs r4, 0x1 - cmp r4, 0 - bge _0803E83C - ldr r0, _0803E870 - movs r1, 0 - str r1, [r0] - ldr r0, _0803E86C - strb r1, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0803E86C: .4byte gUnknown_203B40D -_0803E870: .4byte gUnknown_202EDC8 - thumb_func_end sub_803E830 - thumb_func_start sub_803E874 sub_803E874: push {r4-r7,lr} diff --git a/src/code_803E46C.c b/src/code_803E46C.c index f35ff04c6..c0ce17aed 100644 --- a/src/code_803E46C.c +++ b/src/code_803E46C.c @@ -18,7 +18,7 @@ extern u8 gUnknown_203B40C; extern u8 gUnknown_203B40D; -extern u32 gUnknown_202EDC8; +extern s32 gUnknown_202EDC8; extern s32 gUnknown_202EDCC; extern u32 gUnknown_202EDD0; extern s32 gUnknown_202EDD4; @@ -39,6 +39,8 @@ void sub_8042E5C(); void sub_8040B60(); void sub_8040788(); void sub_800F7D0(Position *); +void sub_803E874(s32, s32); +void sub_803EAF0(s32, s32); void sub_803E46C(u32 a0) { @@ -152,3 +154,89 @@ void sub_803E708(s32 a0, u32 a1) } } +void sub_803E724(s32 r0) +{ + do + { + sub_803E46C(r0); + } while (gRealInputs.held & 0xF0); +} + +void sub_803E748(void) { + + s32 index1; + s32 index2; + + index2 = 0x1F; + gUnknown_203B40D = 1; + gUnknown_202EDC8 = 0; + + sub_803E874(1, 0x1F); + + for(index1 = 0; index1 < 0x2C; index1++) + { + if(index1 < 0x20) + { + index2 -= 2; + if(index2 <= 0) + { + index2 = 0; + sub_803EAF0(1, 0); + gDungeon->unk181e8.unk18217 = index2; + } + } + if(index1 > 0xB) + if(gUnknown_202EDC8 <= 0x1E) + gUnknown_202EDC8++; + sub_803E874(1, index2); + sub_803E46C(5); + } + gUnknown_203B40D = 0; + gUnknown_202EDC8 = 0x1F; +} + +void sub_803E7C8(void) +{ + + s32 index1; + s32 index2; + + index2 = 0x1F; + gUnknown_203B40D = 1; + gUnknown_202EDC8 = 0; + + sub_803E46C(5); + + for(index1 = 0; index1 < 0x2C; index1++) + { + sub_803E874(1, index2); + if(index1 < 0x20) + { + index2 -= 2; + if(index2 <= 0) + { + index2 = 0; + sub_803EAF0(1, 0); + gDungeon->unk181e8.unk18217 = index2; + } + } + sub_803E46C(5); + } + gUnknown_203B40D = 0; +} + +void sub_803E830(void) +{ + s32 index; + + gUnknown_203B40D = 1; + for(index = 0; index < 0x20; index++) + { + sub_803E874(0, 0); + sub_803E46C(5); + if(gUnknown_202EDC8 > 0) + gUnknown_202EDC8--; + } + gUnknown_202EDC8 = 0; + gUnknown_203B40D = 0; +}