diff --git a/asm/overlay_30.s b/asm/overlay_30.s index 20820f59..5d5fb07f 100644 --- a/asm/overlay_30.s +++ b/asm/overlay_30.s @@ -3,4333 +3,7 @@ .text - arm_func_start ov30_02382820 -ov30_02382820: ; 0x02382820 - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - mov r5, r1 - mov r0, #0x10 - mov r1, #5 - mov r4, r2 - bl MemAlloc - ldr r1, _02382870 ; =ov30_023860A0 - mov r2, #0 - str r0, [r1] - str r6, [r0, #4] - ldr r0, [r1] - str r5, [r0, #8] - ldr r0, [r1] - strb r2, [r0, #0xc] - ldr r0, [r1] - strb r4, [r0, #0xd] - ldr r0, [r1] - str r2, [r0] - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_02382870: .word ov30_023860A0 - arm_func_end ov30_02382820 - arm_func_start ov30_02382874 -ov30_02382874: ; 0x02382874 - stmdb sp!, {r3, lr} - ldr r0, _02382974 ; =ov30_023860A0 - ldr r1, [r0] - ldr r0, [r1] - cmp r0, #3 - addls pc, pc, r0, lsl #2 - b _0238296C -_02382890: ; jump table - b _023828A0 ; case 0 - b _02382948 ; case 1 - b _0238296C ; case 2 - b _02382964 ; case 3 -_023828A0: - ldmib r1, {r0, r1} - bl ReadQuickSaveInfo - cmp r0, #0 - bne _023828D4 - ldr r2, _02382974 ; =ov30_023860A0 - ldr r1, _02382978 ; =0x21061522 - ldr r3, [r2] - ldr r2, [r3, #8] - ldr r3, [r3, #4] - sub r2, r2, #4 - ldr r2, [r3, r2] - cmp r2, r1 - movne r0, #4 -_023828D4: - cmp r0, #0 - bne _023828FC - ldr r0, _02382974 ; =ov30_023860A0 - mov r3, #1 - ldr r2, [r0] - mov r1, #3 - strb r3, [r2, #0xc] - ldr r0, [r0] - str r1, [r0] - b _0238296C -_023828FC: - cmp r0, #1 - mov r2, #0 - bne _02382928 - ldr r0, _0238297C ; =0x0000040C -#ifdef JAPAN - add r1, r0, #0xcc -#else - ldr r1, _02382980 ; =0x00000247 -#endif - bl sub_02034EB4 - ldr r0, _02382974 ; =ov30_023860A0 - mov r1, #2 - ldr r0, [r0] - str r1, [r0] - b _0238296C -_02382928: - ldr r0, _02382984 ; =0x0000061C - ldr r1, _02382988 ; =0x0000024D - bl sub_02034EB4 - ldr r0, _02382974 ; =ov30_023860A0 - mov r1, #1 - ldr r0, [r0] - str r1, [r0] - b _0238296C -_02382948: - bl sub_02034DA8 - cmp r0, #0 - ldreq r0, _02382974 ; =ov30_023860A0 - moveq r1, #3 - ldreq r0, [r0] - streq r1, [r0] - b _0238296C -_02382964: - mov r0, #0 - ldmia sp!, {r3, pc} -_0238296C: - mov r0, #1 - ldmia sp!, {r3, pc} - .align 2, 0 -_02382974: .word ov30_023860A0 -#ifdef JAPAN -_02382978: .word 0x20111122 -_0238297C: .word 0x0000040C -_02382984: .word 0x0000061C -_02382988: .word 0x000004DE -#else -_02382978: .word 0x21061522 -_0238297C: .word 0x0000040C -_02382980: .word 0x00000247 -_02382984: .word 0x0000061C -_02382988: .word 0x0000024D -#endif - arm_func_end ov30_02382874 - - arm_func_start ov30_0238298C -ov30_0238298C: ; 0x0238298C - ldr r0, _0238299C ; =ov30_023860A0 - ldr r0, [r0] - ldrb r0, [r0, #0xc] - bx lr - .align 2, 0 -_0238299C: .word ov30_023860A0 - arm_func_end ov30_0238298C - - arm_func_start ov30_023829A0 -ov30_023829A0: ; 0x023829A0 - stmdb sp!, {r3, lr} - ldr r0, _023829C8 ; =ov30_023860A0 - ldr r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - bl MemFree - ldr r0, _023829C8 ; =ov30_023860A0 - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_023829C8: .word ov30_023860A0 - arm_func_end ov30_023829A0 - - arm_func_start ov30_023829CC -ov30_023829CC: ; 0x023829CC - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - mov r5, r1 - mov r0, #0x14 - mov r1, #5 - mov r4, r2 - bl MemAlloc - ldr r1, _02382A2C ; =ov30_023860A4 - ldr r3, _02382A30 ; =0x21061522 - str r0, [r1] - str r6, [r0, #4] - ldr r0, [r1] - mov r2, #0 - str r5, [r0, #8] - ldr r0, [r1] - strb r4, [r0, #0xc] - ldr ip, [r1] - ldr r0, [ip, #8] - ldr ip, [ip, #4] - sub r0, r0, #4 - str r3, [ip, r0] - ldr r0, [r1] - str r2, [r0] - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_02382A2C: .word ov30_023860A4 -#ifdef JAPAN -_02382A30: .word 0x20111122 -#else -_02382A30: .word 0x21061522 -#endif - arm_func_end ov30_023829CC - - arm_func_start ov30_02382A34 -ov30_02382A34: ; 0x02382A34 - stmdb sp!, {r3, lr} - ldr r0, _02382C0C ; =ov30_023860A4 - ldr r1, [r0] - ldr r0, [r1] - cmp r0, #5 - addls pc, pc, r0, lsl #2 - b _02382C04 -_02382A50: ; jump table - b _02382A68 ; case 0 - b _02382AA4 ; case 1 - b _02382AFC ; case 2 - b _02382BD4 ; case 3 - b _02382C04 ; case 4 - b _02382BF0 ; case 5 -_02382A68: - ldrb r0, [r1, #0xc] - mov r2, #0 - cmp r0, #0 - ldr r0, _02382C10 ; =0x00000408 - beq _02382A88 -#ifdef JAPAN - add r1, r0, #0xca -#else - ldr r1, _02382C14 ; =0x00000241 -#endif - bl sub_02034EB4 - b _02382A90 -_02382A88: -#ifdef JAPAN - add r1, r0, #0xcb -#else - ldr r1, _02382C18 ; =0x00000242 -#endif - bl sub_02034EB4 -_02382A90: - ldr r0, _02382C0C ; =ov30_023860A4 - mov r1, #1 - ldr r0, [r0] - str r1, [r0] - b _02382C04 -_02382AA4: - bl sub_02034DA8 - cmp r0, #0 - bne _02382C04 - mov r0, #0xe0 - mov r1, #0x88 - mov r2, #1 - bl sub_02029F88 - bl sub_02003B94 - ldr r0, _02382C1C ; =0x000F1209 - bl sub_02048DC4 - ldr r0, _02382C0C ; =ov30_023860A4 - ldr r1, [r0] - ldmib r1, {r0, r1} - bl WriteQuickSaveInfo - ldr r1, _02382C0C ; =ov30_023860A4 - mov r2, #2 - ldr r3, [r1] - str r0, [r3, #0x10] - ldr r1, [r1] - mov r0, #1 - str r2, [r1] - ldmia sp!, {r3, pc} -_02382AFC: - ldr r0, [r1, #0x10] - cmp r0, #0 - bne _02382B40 - mov r0, #2 - bl NoteSaveBase - ldr r1, _02382C0C ; =ov30_023860A4 - ldr r2, [r1] - str r0, [r2, #0x10] - ldr r0, [r1] - ldr r0, [r0, #0x10] - cmp r0, #0 - bne _02382B40 - ldr r0, _02382C20 ; =0x000F1207 - bl sub_02048DC4 - ldr r1, _02382C0C ; =ov30_023860A4 - ldr r1, [r1] - str r0, [r1, #0x10] -_02382B40: - bl sub_02003BC8 - bl sub_02029FBC - ldr r0, _02382C0C ; =ov30_023860A4 - ldr r0, [r0] - ldr r0, [r0, #0x10] - cmp r0, #0 - beq _02382B68 - cmp r0, #1 - beq _02382B8C - b _02382BB0 -_02382B68: - ldr r0, _02382C24 ; =0x0000041C -#ifdef JAPAN - mov r2, #0 - add r1, r0, #0xb9 -#else - mov r1, #0x244 - mov r2, #0 -#endif - bl sub_02034EB4 - ldr r0, _02382C0C ; =ov30_023860A4 - mov r1, #3 - ldr r0, [r0] - str r1, [r0] - b _02382C04 -_02382B8C: - ldr r0, _02382C28 ; =0x0000040C -#ifdef JAPAN - mov r2, #0 - add r1, r0, #0xbd -#else - mov r1, #0x238 - mov r2, #0 -#endif - bl sub_02034EB4 - ldr r0, _02382C0C ; =ov30_023860A4 - mov r1, #4 - ldr r0, [r0] - str r1, [r0] - b _02382C04 -_02382BB0: - ldr r0, _02382C24 ; =0x0000041C -#ifdef JAPAN - mov r2, #0 - add r1, r0, #0xae -#else - ldr r1, _02382C2C ; =0x00000239 - mov r2, #0 -#endif - bl sub_02034EB4 - ldr r0, _02382C0C ; =ov30_023860A4 - mov r1, #3 - ldr r0, [r0] - str r1, [r0] - b _02382C04 -_02382BD4: - bl sub_02034DA8 - cmp r0, #0 - ldreq r0, _02382C0C ; =ov30_023860A4 - moveq r1, #5 - ldreq r0, [r0] - streq r1, [r0] - b _02382C04 -_02382BF0: - ldr r0, [r1, #0x10] - cmp r0, #0 - moveq r0, #2 - movne r0, #3 - ldmia sp!, {r3, pc} -_02382C04: - mov r0, #0 - ldmia sp!, {r3, pc} - .align 2, 0 -_02382C0C: .word ov30_023860A4 -_02382C10: .word 0x00000408 -#ifndef JAPAN -_02382C14: .word 0x00000241 -_02382C18: .word 0x00000242 -#endif -_02382C1C: .word 0x000F1209 -_02382C20: .word 0x000F1207 -_02382C24: .word 0x0000041C -_02382C28: .word 0x0000040C -#ifndef JAPAN -_02382C2C: .word 0x00000239 -#endif - arm_func_end ov30_02382A34 - - arm_func_start ov30_02382C30 -ov30_02382C30: ; 0x02382C30 - stmdb sp!, {r3, lr} - ldr r0, _02382C64 ; =ov30_023860A4 - ldr r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - bl sub_02034D0C - ldr r0, _02382C64 ; =ov30_023860A4 - ldr r0, [r0] - bl MemFree - ldr r0, _02382C64 ; =ov30_023860A4 - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_02382C64: .word ov30_023860A4 - arm_func_end ov30_02382C30 - - arm_func_start WriteQuicksaveData -WriteQuicksaveData: ; 0x02382C68 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - sub sp, sp, #0x10 - mov r3, r0 - mov r2, r1 - add r0, sp, #4 - mov r1, r3 - bl ov30_02385C3C - mov r3, #0 - add r0, sp, #4 - add r1, sp, #0 - mov r2, #4 - str r3, [sp] - bl ov30_02385C54 - ldr r1, _02382D6C ; =OVERLAY30_JP_STRING_1 - add r0, sp, #4 - bl ov30_02385CE0 - ldr r1, _02382D70 ; =DUNGEON_PTR - add r0, sp, #4 - ldr r1, [r1] - mov r2, #0xac - add r1, r1, #0x348 - add r1, r1, #0x400 - bl ov30_02385C54 - ldr r1, _02382D6C ; =OVERLAY30_JP_STRING_1 - add r0, sp, #4 - bl ov30_02385CE0 - ldr r2, _02382D70 ; =DUNGEON_PTR - ldr r1, _02382D74 ; =0x0002C9E6 - ldr r2, [r2] - add r0, sp, #4 - ldrsh r1, [r2, r1] - bl ov30_02385D34 - ldr r5, _02382D70 ; =DUNGEON_PTR - ldr r4, _02382D78 ; =0x0002C9EA - mov r7, #0 - add r6, sp, #4 -_02382CF8: - ldr r1, [r5] - mov r0, r6 - add r1, r1, r7, lsl #1 - ldrh r1, [r1, r4] - bl ov30_02385D14 - add r7, r7, #1 - cmp r7, #0x10 - blt _02382CF8 - add r0, sp, #4 - bl ov30_02383C70 - add r0, sp, #4 - bl ov30_0238409C - add r0, sp, #4 - bl ov30_02384208 - add r0, sp, #4 - bl ov30_02382D80 - add r0, sp, #4 - bl ov30_02382E94 - add r0, sp, #4 - bl ov30_02382FB8 - add r0, sp, #4 - bl ov30_02383084 - ldr r1, _02382D7C ; =OVERLAY30_JP_STRING_2 - add r0, sp, #4 - bl ov30_02385CE0 - add r0, sp, #4 - bl ov30_02385CDC - add sp, sp, #0x10 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_02382D6C: .word OVERLAY30_JP_STRING_1 -_02382D70: .word DUNGEON_PTR -#ifdef JAPAN -_02382D74: .word 0x0002C942 -_02382D78: .word 0x0002C946 -#else -_02382D74: .word 0x0002C9E6 -_02382D78: .word 0x0002C9EA -#endif -_02382D7C: .word OVERLAY30_JP_STRING_2 - arm_func_end WriteQuicksaveData - - arm_func_start ov30_02382D80 -ov30_02382D80: ; 0x02382D80 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #8 - mov r2, #0 - mov sl, r0 - mov r1, r2 - add r0, sp, #0 -_02382D98: - strb r1, [r0, r2] - add r2, r2, #1 - cmp r2, #5 - blt _02382D98 - ldr r1, _02382E8C ; =OVERLAY30_JP_STRING_1 - mov r0, sl - bl ov30_02385CE0 - mov sb, #0 - mov r5, #1 - ldr r4, _02382E90 ; =DUNGEON_PTR - mov fp, r5 - mov r7, sb -_02382DC8: - ldr r0, [r4] - mov r1, r7 - add r0, r0, sb, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r8, [r0, #0xb24] -#else - ldr r8, [r0, #0xbc8] -#endif - cmp r8, #0 - beq _02382E60 - ldr r0, [r8] - cmp r0, #3 - bne _02382E60 - mov r0, r8 - bl GetItemInfo - mov r6, r0 - mov r0, sl - mov r1, r6 - mov r2, r5 - bl ov30_02385C54 - mov r0, sl - add r1, r6, #1 - mov r2, fp - bl ov30_02385C54 - mov r0, sl - add r1, r6, #2 - mov r2, #2 - bl ov30_02385C54 - add r1, r6, #4 - mov r0, sl - mov r2, #2 - bl ov30_02385C54 - mov r0, sl - add r1, r8, #4 - mov r2, #1 - bl ov30_02385C54 - add r1, r8, #6 - mov r0, sl - mov r2, #1 - bl ov30_02385C54 - mov r1, #1 -_02382E60: - cmp r1, #0 - bne _02382E78 - mov r0, sl - add r1, sp, #0 - mov r2, #8 - bl ov30_02385C54 -_02382E78: - add sb, sb, #1 - cmp sb, #0x40 - blt _02382DC8 - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02382E8C: .word OVERLAY30_JP_STRING_1 -_02382E90: .word DUNGEON_PTR - arm_func_end ov30_02382D80 - - arm_func_start ov30_02382E94 -ov30_02382E94: ; 0x02382E94 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #8 - mov sl, r0 - mov r2, #0 - mov r1, #0xff - add r0, sp, #0 -_02382EAC: - strb r1, [r0, r2] - add r2, r2, #1 - cmp r2, #7 - blt _02382EAC - ldr r1, _02382FB0 ; =OVERLAY30_JP_STRING_1 - mov r0, sl - bl ov30_02385CE0 - mov sb, #0 - mov r5, #1 - ldr r4, _02382FB4 ; =DUNGEON_PTR - mov fp, r5 - mov r7, sb -_02382EDC: - ldr r0, [r4] - mov r1, r7 - add r0, r0, sb, lsl #2 - add r0, r0, #0x12000 -#ifdef JAPAN - ldr r8, [r0, #0xc24] -#else - ldr r8, [r0, #0xcc8] -#endif - cmp r8, #0 - beq _02382F84 - ldr r0, [r8] - cmp r0, #2 - bne _02382F84 - mov r0, r8 - bl GetTrapInfo - mov r6, r0 - mov r0, sl - mov r1, r6 - mov r2, r5 - bl ov30_02385C54 - mov r0, sl - add r1, r6, #1 - mov r2, fp - bl ov30_02385C54 - mov r0, sl - add r1, r6, #2 - mov r2, #1 - bl ov30_02385C54 - add r1, r6, #3 - mov r0, sl - mov r2, #1 - bl ov30_02385C54 - mov r0, sl - add r1, r8, #0x20 - mov r2, #1 - bl ov30_02385C54 - mov r0, sl - add r1, r8, #4 - mov r2, #1 - bl ov30_02385C54 - add r1, r8, #6 - mov r0, sl - mov r2, #1 - bl ov30_02385C54 - mov r1, #1 -_02382F84: - cmp r1, #0 - bne _02382F9C - mov r0, sl - add r1, sp, #0 - mov r2, #7 - bl ov30_02385C54 -_02382F9C: - add sb, sb, #1 - cmp sb, #0x40 - blt _02382EDC - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02382FB0: .word OVERLAY30_JP_STRING_1 -_02382FB4: .word DUNGEON_PTR - arm_func_end ov30_02382E94 - - arm_func_start ov30_02382FB8 -ov30_02382FB8: ; 0x02382FB8 - stmdb sp!, {r3, r4, r5, lr} - ldr r2, _0238307C ; =DUNGEON_PTR - ldr r1, _02383080 ; =OVERLAY30_JP_STRING_1 - ldr r2, [r2] - mov r5, r0 -#ifdef JAPAN - add r2, r2, #0x388 - add r4, r2, #0x19400 -#else - add r2, r2, #0x2c - add r4, r2, #0x19800 -#endif - bl ov30_02385CE0 - cmp r4, #0 - ldmeqia sp!, {r3, r4, r5, pc} - ldr r0, [r4] - mov r2, #1 - cmp r0, #5 - bne _02383034 - add r1, sp, #1 - mov r0, r5 - strb r2, [sp, #1] - bl ov30_02385C54 - mov r0, r5 - add r1, r4, #0x20 - mov r2, #1 - bl ov30_02385C54 - mov r0, r5 - add r1, r4, #4 - mov r2, #1 - bl ov30_02385C54 - mov r0, r5 - add r1, r4, #6 - mov r2, #1 - bl ov30_02385C54 - ldmia sp!, {r3, r4, r5, pc} -_02383034: - mov r3, #0 - add r1, sp, #0 - mov r0, r5 - strb r3, [sp] - bl ov30_02385C54 - add r1, sp, #0 - mov r0, r5 - mov r2, #1 - bl ov30_02385C54 - add r1, sp, #0 - mov r0, r5 - mov r2, #1 - bl ov30_02385C54 - add r1, sp, #0 - mov r0, r5 - mov r2, #1 - bl ov30_02385C54 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_0238307C: .word DUNGEON_PTR -_02383080: .word OVERLAY30_JP_STRING_1 - arm_func_end ov30_02382FB8 - - arm_func_start ov30_02383084 -ov30_02383084: ; 0x02383084 -#ifdef JAPAN -#define OV30_02383084_OFFSET -0xA4 -#else -#define OV30_02383084_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, lr} - ldr r1, _023831E0 ; =OVERLAY30_JP_STRING_1 - mov r4, r0 - bl ov30_02385CE0 - ldr r1, _023831E4 ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] - add r1, r1, #0x3000 - ldr r1, [r1, #0xe2c + OV30_02383084_OFFSET] - bl ov30_02385D74 - ldr r1, _023831E4 ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] - add r1, r1, #0x3000 - ldr r1, [r1, #0xe30 + OV30_02383084_OFFSET] - bl ov30_02385D74 - ldr r1, _023831E4 ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] - add r1, r1, #0x3000 - ldrb r1, [r1, #0xe34 + OV30_02383084_OFFSET] - bl ov30_02385DD4 - ldr r1, _023831E4 ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] - add r1, r1, #0x3000 - ldrb r1, [r1, #0xe35 + OV30_02383084_OFFSET] - bl ov30_02385DD4 - ldr r1, _023831E4 ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] - add r1, r1, #0x3000 - ldrb r1, [r1, #0xe36 + OV30_02383084_OFFSET] - bl ov30_02385DD4 - ldr r1, _023831E4 ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] - add r1, r1, #0x3000 - ldrb r1, [r1, #0xe37 + OV30_02383084_OFFSET] - bl ov30_02385DD4 - ldr r1, _023831E4 ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] - add r1, r1, #0x3000 - ldrb r1, [r1, #0xe38 + OV30_02383084_OFFSET] - bl ov30_02385DD4 - ldr r1, _023831E4 ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] - add r1, r1, #0x3000 - ldrb r1, [r1, #0xe39 + OV30_02383084_OFFSET] - bl ov30_02385DD4 - ldr r1, _023831E4 ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] - add r1, r1, #0x3000 - ldrb r1, [r1, #0xe3c + OV30_02383084_OFFSET] - bl ov30_02385DD4 - ldr r1, _023831E4 ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] -#ifdef JAPAN - add r1, r1, #0x3d00 - ldrh r1, [r1, #0x96] -#else - add r1, r1, #0x3e00 - ldrh r1, [r1, #0x3a + OV30_02383084_OFFSET] -#endif - bl ov30_02385D14 - ldr r5, _023831E4 ; =DUNGEON_PTR - mov r6, #0 -_0238318C: - ldr r1, [r5] - mov r0, r4 - add r1, r1, r6, lsl #2 - add r1, r1, #0x12000 - ldr r1, [r1, #0xb28 + OV30_02383084_OFFSET] - bl ov30_023831E8 - add r6, r6, #1 - cmp r6, #4 - blt _0238318C - ldr r5, _023831E4 ; =DUNGEON_PTR - mov r6, #0 -_023831B8: - ldr r1, [r5] - mov r0, r4 - add r1, r1, r6, lsl #2 - add r1, r1, #0x12000 - ldr r1, [r1, #0xb38 + OV30_02383084_OFFSET] - bl ov30_023831E8 - add r6, r6, #1 - cmp r6, #0x10 - blt _023831B8 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_023831E0: .word OVERLAY30_JP_STRING_1 -_023831E4: .word DUNGEON_PTR - arm_func_end ov30_02383084 - - arm_func_start ov30_023831E8 -ov30_023831E8: ; 0x023831E8 -#ifdef JAPAN -#define OV30_023831E8_OFFSET -4 -#else -#define OV30_023831E8_OFFSET 0 -#endif -#ifdef JAPAN - stmdb sp!, {r4, r5, r6, r7, r8, lr} -#else - stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} -#endif - sub sp, sp, #0x25c + OV30_023831E8_OFFSET - mov r4, r1 - mov r3, #0 - mov r2, #1 - mov r8, r0 - mov r1, #0xaa - str r3, [sp, #0x18] - str r2, [sp, #0x14] - bl ov30_02385D54 - mov r0, r8 - mov r1, #0x55 - bl ov30_02385D54 - cmp r4, #0 - moveq r0, #0 - beq _0238323C - ldr r0, [r4] - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff -_0238323C: - cmp r0, #0 - beq _0238329C - add r1, sp, #0x14 - mov r0, r8 - mov r2, #1 - ldr r6, [r4, #0xb4] - bl ov30_02385C54 - mov r0, r8 - add r1, r4, #4 - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - add r1, r4, #6 - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - add r1, r4, #0x20 - mov r2, #1 - bl ov30_02385C54 - add r1, r4, #0x26 - mov r0, r8 - mov r2, #2 - bl ov30_02385C54 - b _02383300 -_0238329C: - add r0, sp, #0x1c - mov r1, #0 - mov r2, #0x240 + OV30_023831E8_OFFSET - bl memset - add r1, sp, #0x18 - mov r0, r8 - mov r2, #1 - add r6, sp, #0x1c - bl ov30_02385C54 - add r1, sp, #0x18 - mov r0, r8 - mov r2, #1 - bl ov30_02385C54 - add r1, sp, #0x18 - mov r0, r8 - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - add r1, sp, #0x18 - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - add r1, sp, #0x18 - mov r2, #2 - bl ov30_02385C54 -_02383300: - ldrh r1, [r6] - mov r0, r8 - bl ov30_02385D14 - ldrsh r2, [r6, #4] - add r1, sp, #0xc - mov r0, r8 - strh r2, [sp, #0xc] - mov r2, #2 - bl ov30_02385C54 - ldrsh r2, [r6, #2] - add r1, sp, #0xa - mov r0, r8 - strh r2, [sp, #0xa] - mov r2, #2 - bl ov30_02385C54 - ldrb r1, [r6, #6] - mov r0, r8 - bl ov30_02385DD4 - ldrb r1, [r6, #7] - mov r0, r8 - bl ov30_02385DD4 - ldrb r1, [r6, #8] - mov r0, r8 - bl ov30_02385DD4 - ldrb r1, [r6, #9] - mov r0, r8 - bl ov30_02385D54 - ldrb r1, [r6, #0xa] - mov r0, r8 - bl ov30_02385D54 - ldrsh r1, [r6, #0xc] - mov r0, r8 - and r1, r1, #0xff - bl ov30_02385D54 - ldrb r1, [r6, #0x48] - mov r0, r8 - bl ov30_02385D54 - ldrb r1, [r6, #0x49] - mov r0, r8 - bl ov30_02385D54 - ldrsh r1, [r6, #0xe] - mov r0, r8 - bl ov30_02385D34 - ldrsh r1, [r6, #0x10] - mov r0, r8 - bl ov30_02385D34 - ldrsh r1, [r6, #0x12] - mov r0, r8 - bl ov30_02385D34 - ldrsh r1, [r6, #0x16] - mov r0, r8 - bl ov30_02385D34 - ldrsh r1, [r6, #0x14] - mov r0, r8 - bl ov30_02385D34 - ldrb r1, [r6, #0x1a] - mov r0, r8 - bl ov30_02385D54 - ldrb r1, [r6, #0x1b] - mov r0, r8 - bl ov30_02385D54 - ldrb r1, [r6, #0x1c] - mov r0, r8 - bl ov30_02385D54 - ldrb r1, [r6, #0x1d] - mov r0, r8 - bl ov30_02385D54 - ldr r1, [r6, #0x20] - mov r0, r8 - bl ov30_02385D74 - ldrsh r1, [r6, #0x24] - mov r0, r8 - bl ov30_02385D34 - ldrsh r1, [r6, #0x26] - mov r0, r8 - bl ov30_02385D34 - ldrsh r1, [r6, #0x28] - mov r0, r8 - bl ov30_02385D34 - ldrsh r1, [r6, #0x2a] - mov r0, r8 - bl ov30_02385D34 - ldrsh r1, [r6, #0x2c] - mov r0, r8 - bl ov30_02385D34 - ldrsh r1, [r6, #0x2e] - mov r0, r8 - bl ov30_02385D34 - ldrsh r1, [r6, #0x30] - mov r0, r8 - bl ov30_02385D34 - ldr r1, [r6, #0x34] - mov r0, r8 - bl ov30_02385DB4 - ldr r1, [r6, #0x38] - mov r0, r8 - bl ov30_02385DB4 - ldr r1, [r6, #0x3c] - mov r0, r8 - bl ov30_02385DB4 - ldr r1, [r6, #0x40] - mov r0, r8 - bl ov30_02385DB4 - mov r0, r8 - add r1, r6, #0x4c - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - add r1, r6, #0x5a - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - add r1, r6, #0x5c - mov r2, #1 - bl ov30_02385C54 - ldrb r2, [r6, #0x5e] - mov r0, r8 - add r1, sp, #7 - strb r2, [sp, #7] - mov r2, #1 - bl ov30_02385C54 - ldrb r2, [r6, #0x5f] - mov r0, r8 - add r1, sp, #6 - strb r2, [sp, #6] - mov r2, #1 - bl ov30_02385C54 - ldrb r2, [r6, #0x60] - mov r0, r8 - add r1, sp, #5 - strb r2, [sp, #5] - mov r2, #1 - bl ov30_02385C54 - ldrb r2, [r6, #0x61] - mov r0, r8 - add r1, sp, #4 - strb r2, [sp, #4] - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - add r1, r6, #0x62 - bl ov30_02384268 - ldrsh r2, [r6, #0x68] - mov r0, r8 - add r1, sp, #8 - strh r2, [sp, #8] - mov r2, #2 - bl ov30_02385C54 - mov r5, #0 - add r4, r6, #0x6a -_02383558: - mov r0, r8 - add r1, r4, r5, lsl #2 - bl ov30_02385DF8 - add r5, r5, #1 - cmp r5, #4 - blt _02383558 - mov r0, r8 - add r1, r6, #0x7c - mov r2, #1 - bl ov30_02385C54 - ldrb r1, [r6, #0x7d] - mov r0, r8 - bl ov30_02385DD4 - ldrb r1, [r6, #0x7e] - mov r0, r8 - bl ov30_02385DD4 - ldrb r1, [r6, #0x7f] - mov r0, r8 - bl ov30_02385DD4 - ldrh r1, [r6, #0x80] - mov r0, r8 - bl ov30_02385D14 - mov r0, r8 - add r1, r6, #0x8c - bl ov30_02385DF8 - mov r0, r8 - add r1, r6, #0x90 - mov r2, #0x45 - bl ov30_02385C54 - mov r0, r8 - add r1, r6, #0x9c - mov r2, #0x45 - bl ov30_02385C54 - ldrb r2, [r6, #0xa8] - mov r0, r8 - add r1, sp, #3 - strb r2, [sp, #3] - mov r2, #1 - bl ov30_02385C54 - ldrsh r1, [r6, #0x44] - mov r0, r8 - bl ov30_02385D34 - ldrb r2, [r6, #0x46] - mov r0, r8 - add r1, sp, #2 - strb r2, [sp, #2] - mov r2, #1 - bl ov30_02385C54 - ldr r1, [r6, #0xb0] - mov r0, r8 - bl ov30_02385D74 - ldr r1, [r6, #0xb4] - mov r0, r8 - bl ov30_02385D74 - ldr r1, [r6, #0xb8] - mov r0, r8 - bl ov30_02385D74 - mov r0, r8 - add r1, r6, #0xbd - mov r2, #1 - bl ov30_02385C54 - ldrb r1, [r6, #0xbe] - mov r0, r8 - bl ov30_02385D54 - mov r0, r8 - add r1, r6, #0xbf - mov r2, #1 - bl ov30_02385C54 - ldrb r1, [r6, #0xc0] - mov r0, r8 - bl ov30_02385D54 - ldrb r1, [r6, #0xc1] - mov r0, r8 - bl ov30_02385D54 - ldrb r1, [r6, #0xc2] - mov r0, r8 - bl ov30_02385D54 - mov r0, r8 - add r1, r6, #0xc4 - mov r2, #1 - bl ov30_02385C54 - ldrb r1, [r6, #0xcc] - mov r0, r8 - bl ov30_02385D54 - ldrb r1, [r6, #0xcd] - mov r0, r8 - bl ov30_02385D54 - ldr r1, [r6, #0xc8] - mov r0, r8 - bl ov30_02385D74 - mov r0, r8 - add r1, r6, #0xd0 - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - ldrb r1, [r6, #0xd1] - bl ov30_02385D54 - mov r0, r8 - add r1, r6, #0xd2 - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - ldrb r1, [r6, #0xd3] - bl ov30_02385D54 - mov r0, r8 - ldrb r1, [r6, #0xd4] - bl ov30_02385D54 - mov r0, r8 - add r1, r6, #0xd5 - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - ldrb r1, [r6, #0xd6] - bl ov30_02385D54 - mov r0, r8 - ldrb r1, [r6, #0xd7] - bl ov30_02385D54 - mov r0, r8 - add r1, r6, #0xd8 - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - ldrb r1, [r6, #0xd9] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0xda] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0xdb] - bl ov30_02385D54 - mov r0, r8 - ldrb r1, [r6, #0xdc] - bl ov30_02385D54 - mov r0, r8 - add r1, r6, #0xe0 - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - ldr r1, [r6, #0xe4] - bl ov30_02385D74 - mov r0, r8 - ldrb r1, [r6, #0xe8] - bl ov30_02385D54 - mov r0, r8 - ldrb r1, [r6, #0xe9] - bl ov30_02385D54 - mov r0, r8 - ldrb r1, [r6, #0xea] - bl ov30_02385D54 - mov r0, r8 - add r1, r6, #0xec - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - ldrb r1, [r6, #0xed] - bl ov30_02385D54 - mov r0, r8 - add r1, r6, #0xee - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - add r1, r6, #0xef - mov r2, #1 - bl ov30_02385C54 - ldrb r1, [r6, #0xf0] - mov r0, r8 - bl ov30_02385D54 - mov r0, r8 - add r1, r6, #0xf1 - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - ldrb r1, [r6, #0xf2] - bl ov30_02385D54 - mov r0, r8 - add r1, r6, #0xf3 - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - ldrb r1, [r6, #0xf4] - bl ov30_02385D54 - mov r0, r8 - add r1, r6, #0xf5 - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - ldrb r1, [r6, #0xf6] - bl ov30_02385D54 - mov r0, r8 - add r1, r6, #0xf7 - mov r2, #1 - bl ov30_02385C54 - mov r0, r8 - ldrb r1, [r6, #0xf8] - bl ov30_02385D54 - mov r0, r8 - ldrb r1, [r6, #0xf9] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0xfa] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0xfb] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0xfc] - bl ov30_02385DD4 - mov r0, r8 -#ifdef JAPAN - ldrb r1, [r6, #0xfd] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x107] - bl ov30_02385D54 - mov r0, r8 - ldrb r1, [r6, #0xfe] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0xff] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x100] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x103] - bl ov30_02385D54 - mov r0, r8 - ldrb r1, [r6, #0x104] - bl ov30_02385D54 - mov r0, r8 - ldrb r1, [r6, #0x108] - bl ov30_02385DD4 - ldrb r1, [r6, #0x105] - mov r0, r8 - bl ov30_02385D54 - ldrb r1, [r6, #0x106] - mov r0, r8 - bl ov30_02385D54 - ldrb r1, [r6, #0x109] - mov r0, r8 - bl ov30_02385D54 - ldrb r2, [r6, #0x10a] - add r1, sp, #1 - mov r0, r8 - strb r2, [sp, #1] - mov r2, #1 - bl ov30_02385C54 - ldrb r2, [r6, #0x10b] - mov r0, r8 - add r1, sp, #0 - strb r2, [sp] - mov r2, #1 - bl ov30_02385C54 - ldr r1, [r6, #0x10c] - mov r0, r8 - str r1, [sp, #0x10] - add r1, sp, #0x10 - mov r2, #4 - bl ov30_02385C54 - mov r0, r8 - add r1, r6, #0x110 - mov r2, #5 - bl ov30_02385EB8 - add r1, r6, #0x15 - mov r0, r8 - add r1, r1, #0x100 - mov r2, #5 - bl ov30_02385EB8 - ldrb r1, [r6, #0x11a] - mov r0, r8 - bl ov30_02385D54 - ldrb r1, [r6, #0x11b] - mov r0, r8 - bl ov30_02385D54 - ldr r1, [r6, #0x11c] - mov r0, r8 - and r1, r1, #0xff - bl ov30_02385D54 - mov r7, #0 - add r5, r6, #0x120 -#else - ldrb r1, [r6, #0x103] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0xfd] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x108] - bl ov30_02385D54 - mov r0, r8 - ldrb r1, [r6, #0xfe] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0xff] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x100] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x104] - bl ov30_02385D54 - mov r0, r8 - ldrb r1, [r6, #0x105] - bl ov30_02385D54 - ldrb r1, [r6, #0x109] - mov r0, r8 - bl ov30_02385DD4 - ldrb r1, [r6, #0x106] - mov r0, r8 - bl ov30_02385D54 - ldrb r1, [r6, #0x107] - mov r0, r8 - bl ov30_02385D54 - ldrb r1, [r6, #0x10a] - mov r0, r8 - bl ov30_02385D54 - ldrb r2, [r6, #0x10b] - mov r0, r8 - add r1, sp, #1 - strb r2, [sp, #1] - mov r2, #1 - bl ov30_02385C54 - ldrb r2, [r6, #0x10c] - mov r0, r8 - add r1, sp, #0 - strb r2, [sp] - mov r2, #1 - bl ov30_02385C54 - ldr r1, [r6, #0x110] - mov r0, r8 - str r1, [sp, #0x10] - add r1, sp, #0x10 - mov r2, #4 - bl ov30_02385C54 - mov r0, r8 - add r1, r6, #0x114 - mov r2, #5 - bl ov30_02385EB8 - add r1, r6, #0x19 - mov r0, r8 - add r1, r1, #0x100 - mov r2, #5 - bl ov30_02385EB8 - ldrb r1, [r6, #0x11e] - mov r0, r8 - bl ov30_02385D54 - ldrb r1, [r6, #0x11f] - mov r0, r8 - bl ov30_02385D54 - ldr r1, [r6, #0x120] - mov r0, r8 - and r1, r1, #0xff - bl ov30_02385D54 - mov r7, #0 - add r5, r6, #0x124 -#endif - mov r4, #2 -_023839C4: - add r0, r6, r7, lsl #3 - ldrb r1, [r0, #0x124 + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D54 - add r0, r6, r7, lsl #3 - add r0, r0, #0x100 - ldrh r1, [r0, #0x26 + OV30_023831E8_OFFSET] - mov r0, r8 - and r1, r1, #0xff - bl ov30_02385D54 - add r1, r5, r7, lsl #3 - mov r0, r8 - mov r2, r4 - add r1, r1, #4 - bl ov30_02385C54 - add r0, r6, r7, lsl #3 - ldrb r1, [r0, #0x12a + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D54 - mov r0, r8 - add r1, r6, r7, lsl #3 - ldrb r1, [r1, #0x12b + OV30_023831E8_OFFSET] - bl ov30_02385D54 - add r7, r7, #1 - cmp r7, #4 - blt _023839C4 - ldrb r1, [r6, #0x144 + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D54 - add r0, r6, #0x100 - ldrsh r1, [r0, #0x46 + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D34 - add r0, r6, #0x100 - ldrsh r1, [r0, #0x48 + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D34 - add r0, r6, #0x100 - ldrsh r1, [r0, #0x4a + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D34 - add r0, r6, #0x100 - ldrsh r1, [r0, #0x4c + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D34 - ldrb r1, [r6, #0x14e + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x14f + OV30_023831E8_OFFSET] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x151 + OV30_023831E8_OFFSET] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x150 + OV30_023831E8_OFFSET] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x152 + OV30_023831E8_OFFSET] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x153 + OV30_023831E8_OFFSET] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x154 + OV30_023831E8_OFFSET] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x155 + OV30_023831E8_OFFSET] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x156 + OV30_023831E8_OFFSET] - bl ov30_02385DD4 - mov r0, r8 - add r1, r6, #0x100 - ldrh r1, [r1, #0x58 + OV30_023831E8_OFFSET] - bl ov30_02385D14 - mov r0, r8 - add r1, r6, #0x100 - ldrh r1, [r1, #0x5a + OV30_023831E8_OFFSET] - bl ov30_02385D14 - mov r0, r8 - ldrb r1, [r6, #0x15c + OV30_023831E8_OFFSET] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x15d + OV30_023831E8_OFFSET] - bl ov30_02385D54 - mov r0, r8 - ldrb r1, [r6, #0x15e + OV30_023831E8_OFFSET] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x15f + OV30_023831E8_OFFSET] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x160 + OV30_023831E8_OFFSET] - bl ov30_02385DD4 - mov r0, r8 - ldrb r1, [r6, #0x177 + OV30_023831E8_OFFSET] - bl ov30_02385D54 - mov r0, r8 - ldrb r1, [r6, #0x178 + OV30_023831E8_OFFSET] - bl ov30_02385D54 - mov r0, r8 - ldrb r1, [r6, #0x179 + OV30_023831E8_OFFSET] - bl ov30_02385D54 - mov r0, r8 - ldrb r1, [r6, #0x17a + OV30_023831E8_OFFSET] - bl ov30_02385D54 - mov r0, r8 - ldrb r1, [r6, #0x17b + OV30_023831E8_OFFSET] - bl ov30_02385D54 - ldrb r1, [r6, #0x17c + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D54 - add r1, r6, #0x7e + OV30_023831E8_OFFSET - mov r0, r8 - add r1, r1, #0x100 - bl ov30_02385DF8 - ldr r1, [r6, #0x188 + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385DB4 - add r0, r6, #0x100 - ldrh r1, [r0, #0x92 + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D14 - ldr r1, [r6, #0x18c + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D94 - add r0, r6, #0x100 - ldrh r1, [r0, #0x90 + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D14 - add r1, r6, #0x200 - ldrsh r1, [r1, #0x10 + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D34 - add r1, r6, #0x200 - ldrsh r1, [r1, #0x12 + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D34 - ldr r1, [r6, #0x214 + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D74 - ldrb r1, [r6, #0xbc] - mov r0, r8 - bl ov30_02385D54 - ldrb r1, [r6, #0x166 + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D54 - ldrb r1, [r6, #0x167 + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D54 - add r1, r6, #0x100 - ldrsh r1, [r1, #0x68 + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D34 - ldrsh r1, [r6, #0xac] - mov r0, r8 - bl ov30_02385D34 - ldrb r1, [r6, #0x16a + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D54 - mov r4, #0 -_02383C4C: - add r0, r6, r4 - ldrb r1, [r0, #0x16b + OV30_023831E8_OFFSET] - mov r0, r8 - bl ov30_02385D54 - add r4, r4, #1 - cmp r4, #5 - blt _02383C4C - add sp, sp, #0x25c + OV30_023831E8_OFFSET -#ifdef JAPAN - ldmia sp!, {r4, r5, r6, r7, r8, pc} -#else - ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} -#endif - arm_func_end ov30_023831E8 - - arm_func_start ov30_02383C70 -ov30_02383C70: ; 0x02383C70 -#ifdef JAPAN -#define OV30_02383C70_OFFSET -0xA4 -#else -#define OV30_02383C70_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - ldr r1, _02384090 ; =OVERLAY30_JP_STRING_1 - mov sl, r0 - bl ov30_02385CE0 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - add r1, r1, #0x4000 - ldrb r1, [r1, #0xc4 + OV30_02383C70_OFFSET] - bl ov30_02385DD4 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - add r1, r1, #0x4000 - ldrb r1, [r1, #0xc5 + OV30_02383C70_OFFSET] - bl ov30_02385DD4 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - add r1, r1, #0x4000 - ldrb r1, [r1, #0xc6 + OV30_02383C70_OFFSET] - bl ov30_02385DD4 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - add r1, r1, #0x4000 - ldrb r1, [r1, #0xc7 + OV30_02383C70_OFFSET] - bl ov30_02385DD4 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - add r1, r1, #0x4000 - ldrb r1, [r1, #0xc8 + OV30_02383C70_OFFSET] - bl ov30_02385DD4 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - add r1, r1, #0x4000 - ldrb r1, [r1, #0xc9 + OV30_02383C70_OFFSET] - bl ov30_02385D54 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - add r1, r1, #0x4000 - ldrb r1, [r1, #0xca + OV30_02383C70_OFFSET] - bl ov30_02385D54 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - add r1, r1, #0x4000 - ldr r1, [r1, #0xcc + OV30_02383C70_OFFSET] - and r1, r1, #0xff - bl ov30_02385D54 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - add r1, r1, #0x4000 - ldr r1, [r1, #0xd0 + OV30_02383C70_OFFSET] - and r1, r1, #0xff - bl ov30_02385D54 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - add r1, r1, #0x4000 - ldrsh r1, [r1, #0xd4 + OV30_02383C70_OFFSET] - bl ov30_02385D34 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - add r1, r1, #0x4000 - ldrsh r1, [r1, #0xd6 + OV30_02383C70_OFFSET] - bl ov30_02385D34 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - add r1, r1, #0x4000 - ldrsh r1, [r1, #0xd8 + OV30_02383C70_OFFSET] - bl ov30_02385D34 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - add r1, r1, #0x4000 - ldrb r1, [r1, #0xda + OV30_02383C70_OFFSET] - bl ov30_02385D34 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - add r1, r1, #0x4000 - ldrsh r1, [r1, #0xde + OV30_02383C70_OFFSET] - bl ov30_02385D34 - mov r8, #0 - ldr r6, _02384094 ; =DUNGEON_PTR - mov fp, r8 - mov r4, #0x14 - mov r5, #0x460 -_02383DEC: - mul sb, r8, r5 - mov r7, fp -_02383DF4: - ldr r1, [r6] - mov r0, sl - add r1, r1, #0xe0 + OV30_02383C70_OFFSET - add r1, r1, #0x4000 - add r1, r1, sb - mla r1, r7, r4, r1 - bl ov30_023842B0 - add r7, r7, #1 - cmp r7, #0x38 - blt _02383DF4 - add r8, r8, #1 - cmp r8, #0x20 - blt _02383DEC - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] -#ifdef JAPAN - add r1, r1, #0x3c - add r1, r1, #0xcc00 -#else - add r1, r1, #0xce0 - add r1, r1, #0xc000 -#endif - bl ov30_02385DF8 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] -#ifdef JAPAN - add r1, r1, #0xc40 - add r1, r1, #0xc000 -#else - add r1, r1, #0xe4 - add r1, r1, #0xcc00 -#endif - bl ov30_02385DF8 - ldr r0, _02384094 ; =DUNGEON_PTR - mvn r1, #0 - ldr r0, [r0] - add r0, r0, #0xcc00 - ldrh r2, [r0, #0xe8 + OV30_02383C70_OFFSET] - strh r2, [sp] - ldrh r2, [r0, #0xea + OV30_02383C70_OFFSET] - ldrsh r0, [sp] - strh r2, [sp, #2] - cmp r0, r1 - moveq r0, #0xff - streqh r0, [sp] - ldrsh r1, [sp, #2] - mvn r0, #0 - cmp r1, r0 - moveq r0, #0xff - streqh r0, [sp, #2] - add r1, sp, #0 - mov r0, sl - bl ov30_02385DF8 - ldr r4, _02384094 ; =DUNGEON_PTR - mov r5, #0 -_02383EB0: - ldr r1, [r4] - mov r0, sl - add r1, r1, #0xec + OV30_02383C70_OFFSET - add r1, r1, #0xcc00 - add r1, r1, r5, lsl #2 - bl ov30_02385E20 - add r5, r5, #1 - cmp r5, #8 - blt _02383EB0 - ldr r4, _02384094 ; =DUNGEON_PTR - mov r5, #0 -_02383EDC: - ldr r1, [r4] - mov r0, sl - add r1, r1, r5 - add r1, r1, #0xc000 - ldrb r1, [r1, #0xd0c + OV30_02383C70_OFFSET] - bl ov30_02385D54 - add r5, r5, #1 - cmp r5, #8 - blt _02383EDC - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] -#ifdef JAPAN - add r1, r1, #0xc70 - add r1, r1, #0xc000 -#else - add r1, r1, #0x114 - add r1, r1, #0xcc00 -#endif - bl ov30_02385E48 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] -#ifdef JAPAN - add r1, r1, #0xc80 - add r1, r1, #0xc000 -#else - add r1, r1, #0x124 - add r1, r1, #0xcc00 -#endif - bl ov30_02385E48 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] -#ifdef JAPAN - add r1, r1, #0xc90 - add r1, r1, #0xc000 -#else - add r1, r1, #0x134 - add r1, r1, #0xcc00 -#endif - bl ov30_02385E90 - mov r8, #0 - ldr r6, _02384094 ; =DUNGEON_PTR - mov fp, r8 - mov r4, #0x14 - mov r5, #0xa0 -_02383F5C: - mul r7, r8, r5 - mov sb, fp -_02383F64: - ldr r1, [r6] - mov r0, sl -#ifdef JAPAN - add r1, r1, #0xbc - add r1, r1, #0xcc00 -#else - add r1, r1, #0xd60 - add r1, r1, #0xc000 -#endif - add r1, r1, r7 - mla r1, sb, r4, r1 - bl ov30_023842B0 - ldr r1, [r6] - mov r0, sl - add r1, r1, r8, lsl #4 - add r1, r1, sb, lsl #1 -#ifdef JAPAN - add r1, r1, #0xd100 - ldrsh r1, [r1, #0xbc] -#else - add r1, r1, #0xd200 - ldrsh r1, [r1, #0x60] -#endif - bl ov30_02385D34 - add sb, sb, #1 - cmp sb, #8 - blt _02383F64 - add r8, r8, #1 - cmp r8, #8 - blt _02383F5C - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - mov r2, #1 - add r1, r1, #0x138 + OV30_02383C70_OFFSET - add r4, r1, #0xcc00 - mov r1, r4 - bl ov30_02385C54 - mov r0, sl - add r1, r4, #1 - mov r2, #1 - bl ov30_02385C54 - mov r5, #0 -_02383FE8: - add r0, r4, r5, lsl #1 - ldrh r1, [r0, #2] - mov r0, sl - bl ov30_02385D14 - add r0, r4, r5, lsl #1 - ldrh r1, [r0, #0x12] - mov r0, sl - bl ov30_02385D14 - add r5, r5, #1 - cmp r5, #8 - blt _02383FE8 - ldrb r1, [r4, #0x22] - mov r0, sl - bl ov30_02385D54 - ldrb r1, [r4, #0x23] - mov r0, sl - bl ov30_02385D54 - ldrb r1, [r4, #0x24] - mov r0, sl - bl ov30_02385D54 - ldrb r1, [r4, #0x25] - mov r0, sl - bl ov30_02385DD4 - ldr r1, _02384094 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - mov r2, #1 - add r1, r1, #0x2fc + OV30_02383C70_OFFSET - add r4, r1, #0x12800 - mov r1, r4 - bl ov30_02385C54 - add r1, r4, #1 - mov r0, sl - mov r2, #1 - bl ov30_02385C54 - mov r0, sl - ldr r2, _02384094 ; =DUNGEON_PTR - ldr r1, _02384098 ; =0x00012AFE - ldr r2, [r2] - ldrsh r1, [r2, r1] - bl ov30_02385D34 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02384090: .word OVERLAY30_JP_STRING_1 -_02384094: .word DUNGEON_PTR -_02384098: .word 0x00012AFE + OV30_02383C70_OFFSET - arm_func_end ov30_02383C70 - - arm_func_start ov30_0238409C -ov30_0238409C: ; 0x0238409C -#ifdef JAPAN -#define OV30_0238409C_OFFSET -0xA4 -#else -#define OV30_0238409C_OFFSET 0 -#endif - stmdb sp!, {r4, lr} - ldr r1, _02384200 ; =OVERLAY30_JP_STRING_1 - mov r4, r0 - bl ov30_02385CE0 - ldr r1, _02384204 ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] - add r1, r1, #0x1a000 - ldrb r1, [r1, #0x23c + OV30_0238409C_OFFSET] - bl ov30_02385D54 - ldr r1, _02384204 ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] - add r1, r1, #0x1a000 - ldrb r1, [r1, #0x23d + OV30_0238409C_OFFSET] - bl ov30_02385D54 - ldr r1, _02384204 ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] - add r1, r1, #0x1a000 - ldrb r1, [r1, #0x23e + OV30_0238409C_OFFSET] - bl ov30_02385DD4 - ldr r1, _02384204 ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] - add r1, r1, #0x1a000 - ldrb r1, [r1, #0x23f + OV30_0238409C_OFFSET] - bl ov30_02385DD4 - ldr r1, _02384204 ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] - add r1, r1, #0x1a000 - ldrb r1, [r1, #0x240 + OV30_0238409C_OFFSET] - bl ov30_02385DD4 - ldr r1, _02384204 ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] - add r1, r1, #0x1a000 - ldrb r1, [r1, #0x242 + OV30_0238409C_OFFSET] - bl ov30_02385DD4 - mov r0, r4 - ldr r1, _02384204 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - ldrb r1, [r1, #0x24f + OV30_0238409C_OFFSET] - bl ov30_02385DD4 - mov r0, r4 - ldr r1, _02384204 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - ldrb r1, [r1, #0x243 + OV30_0238409C_OFFSET] - bl ov30_02385DD4 - mov r0, r4 - ldr r1, _02384204 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - ldrb r1, [r1, #0x24e + OV30_0238409C_OFFSET] - bl ov30_02385DD4 - mov r0, r4 - ldr r1, _02384204 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - ldrb r1, [r1, #0x250 + OV30_0238409C_OFFSET] - bl ov30_02385DD4 - mov r0, r4 - ldr r1, _02384204 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - ldrb r1, [r1, #0x244 + OV30_0238409C_OFFSET] - bl ov30_02385DD4 - mov r0, r4 - ldr r1, _02384204 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - ldrb r1, [r1, #0x245 + OV30_0238409C_OFFSET] - bl ov30_02385DD4 - mov r0, r4 - ldr r1, _02384204 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - ldrb r1, [r1, #0x246 + OV30_0238409C_OFFSET] - bl ov30_02385DD4 - mov r0, r4 - ldr r1, _02384204 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - ldrb r1, [r1, #0x248 + OV30_0238409C_OFFSET] - bl ov30_02385DD4 - ldmia sp!, {r4, pc} - .align 2, 0 -_02384200: .word OVERLAY30_JP_STRING_1 -_02384204: .word DUNGEON_PTR - arm_func_end ov30_0238409C - - arm_func_start ov30_02384208 -ov30_02384208: ; 0x02384208 - stmdb sp!, {r4, lr} - ldr r2, _02384258 ; =DUNGEON_PTR - ldr r1, _0238425C ; =0x0002CB02 - ldr r2, [r2] - mov r4, r0 - ldrsh r1, [r2, r1] - bl ov30_02385D34 - ldr r0, _02384258 ; =DUNGEON_PTR - ldr r1, _02384260 ; =0x0002CB04 - ldr r2, [r0] - mov r0, r4 - ldrsh r1, [r2, r1] - bl ov30_02385D34 - ldr r0, _02384258 ; =DUNGEON_PTR - ldr r1, _02384264 ; =0x0002CB06 - ldr r2, [r0] - mov r0, r4 - ldrsh r1, [r2, r1] - bl ov30_02385D34 - ldmia sp!, {r4, pc} - .align 2, 0 -#ifdef JAPAN -#define OV30_02384208_OFFSET -0xA4 -#else -#define OV30_02384208_OFFSET 0 -#endif -_02384258: .word DUNGEON_PTR -_0238425C: .word 0x0002CB02 + OV30_02384208_OFFSET -_02384260: .word 0x0002CB04 + OV30_02384208_OFFSET -_02384264: .word 0x0002CB06 + OV30_02384208_OFFSET - arm_func_end ov30_02384208 - - arm_func_start ov30_02384268 -ov30_02384268: ; 0x02384268 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - mov r2, #1 - bl ov30_02385C54 - mov r0, r5 - add r1, r4, #1 - mov r2, #1 - bl ov30_02385C54 - mov r0, r5 - add r1, r4, #2 - mov r2, #2 - bl ov30_02385C54 - mov r0, r5 - add r1, r4, #4 - mov r2, #2 - bl ov30_02385C54 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov30_02384268 - - arm_func_start ov30_023842B0 -ov30_023842B0: ; 0x023842B0 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - ldrh r1, [r4] - mov r5, r0 - bl ov30_02385D14 - ldrh r1, [r4, #2] - mov r0, r5 - bl ov30_02385D14 - mov r0, r5 - add r1, r4, #7 - mov r2, #1 - bl ov30_02385C54 - mov r0, r5 - add r1, r4, #6 - mov r2, #1 - bl ov30_02385C54 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov30_023842B0 - - arm_func_start ov30_023842F4 -ov30_023842F4: ; 0x023842F4 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - sub sp, sp, #0x10 - mov r3, r0 - mov r2, r1 - add r0, sp, #4 - mov r1, r3 - bl ov30_02385C8C - add r0, sp, #4 - add r1, sp, #0 - mov r2, #4 - bl ov30_02385CA4 - ldr r1, _023843F0 ; =OVERLAY30_JP_STRING_1 - add r0, sp, #4 - bl ov30_02385CF0 - ldr r1, _023843F4 ; =DUNGEON_PTR - add r0, sp, #4 - ldr r1, [r1] - mov r2, #0xac - add r1, r1, #0x348 - add r1, r1, #0x400 - bl ov30_02385CA4 - ldr r1, _023843F0 ; =OVERLAY30_JP_STRING_1 - add r0, sp, #4 - bl ov30_02385CF0 - add r0, sp, #4 - bl ov30_02385EDC - ldr r6, _023843F4 ; =DUNGEON_PTR - ldr r1, _023843F8 ; =0x0002C9E6 - ldr r2, [r6] - mov r4, #0 - strh r0, [r2, r1] - add r5, r1, #4 - add r7, sp, #4 -_02384378: - mov r0, r7 - bl ov30_02385EC4 - ldr r1, [r6] - add r1, r1, r4, lsl #1 - add r4, r4, #1 - strh r0, [r1, r5] - cmp r4, #0x10 - blt _02384378 - add r0, sp, #4 - bl ov30_02384400 - add r0, sp, #4 - bl ov30_023848A0 - add r0, sp, #4 - bl ov30_02384A20 - add r0, sp, #4 - bl ov30_02384A94 - add r0, sp, #4 - bl ov30_02384B84 - add r0, sp, #4 - bl ov30_02384C6C - add r0, sp, #4 - bl ov30_02384CD4 - ldr r1, _023843FC ; =OVERLAY30_JP_STRING_2 - add r0, sp, #4 - bl ov30_02385CF0 - add r0, sp, #4 - bl ov30_02385CDC -#ifdef EUROPE - mov r0, #0 -#endif - bl ov29_022FB920 - add sp, sp, #0x10 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_023843F0: .word OVERLAY30_JP_STRING_1 -_023843F4: .word DUNGEON_PTR -#ifdef JAPAN -_023843F8: .word 0x0002C942 -#else -_023843F8: .word 0x0002C9E6 -#endif -_023843FC: .word OVERLAY30_JP_STRING_2 - arm_func_end ov30_023842F4 - - arm_func_start ov30_02384400 -ov30_02384400: ; 0x02384400 -#ifdef JAPAN -#define OV30_02384400_OFFSET -0xA4 -#else -#define OV30_02384400_OFFSET 0 -#endif - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - ldr r1, _02384830 ; =OVERLAY30_JP_STRING_1 - mov sl, r0 - bl ov30_02385CF0 - mov r0, sl - bl ov30_02385F54 - ldr r1, _02384834 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x4000 - strb r0, [r1, #0xc4 + OV30_02384400_OFFSET] - mov r0, sl - bl ov30_02385F54 - ldr r1, _02384834 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x4000 - strb r0, [r1, #0xc5 + OV30_02384400_OFFSET] - mov r0, sl - bl ov30_02385F54 - ldr r1, _02384834 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x4000 - strb r0, [r1, #0xc6 + OV30_02384400_OFFSET] - mov r0, sl - bl ov30_02385F54 - ldr r1, _02384834 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x4000 - strb r0, [r1, #0xc7 + OV30_02384400_OFFSET] - mov r0, sl - bl ov30_02385F54 - ldr r1, _02384834 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x4000 - strb r0, [r1, #0xc8 + OV30_02384400_OFFSET] - mov r0, sl - bl ov30_02385EF4 - ldr r1, _02384834 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x4000 - strb r0, [r1, #0xc9 + OV30_02384400_OFFSET] - mov r0, sl - bl ov30_02385EF4 - ldr r1, _02384834 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x4000 - strb r0, [r1, #0xca + OV30_02384400_OFFSET] - mov r0, sl - bl ov30_02385EF4 - ldr r1, _02384834 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x4000 - str r0, [r1, #0xcc + OV30_02384400_OFFSET] - mov r0, sl - bl ov30_02385EF4 - ldr r1, _02384834 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x4000 - str r0, [r1, #0xd0 + OV30_02384400_OFFSET] - mov r0, sl - bl ov30_02385EDC - ldr r1, _02384834 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x4000 - strh r0, [r1, #0xd4 + OV30_02384400_OFFSET] - mov r0, sl - bl ov30_02385EDC - ldr r1, _02384834 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x4000 - strh r0, [r1, #0xd6 + OV30_02384400_OFFSET] - mov r0, sl - bl ov30_02385EDC - ldr r1, _02384834 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x4000 - strh r0, [r1, #0xd8 + OV30_02384400_OFFSET] - mov r0, sl - bl ov30_02385EDC - ldr r1, _02384834 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x4000 - strb r0, [r1, #0xda + OV30_02384400_OFFSET] - mov r0, sl - bl ov30_02385EDC - ldr r6, _02384834 ; =DUNGEON_PTR - mov r8, #0 - ldr r1, [r6] - mov fp, r8 - add r1, r1, #0x4000 - strh r0, [r1, #0xde + OV30_02384400_OFFSET] - mov r4, #0x14 - mov r5, #0x460 -_02384570: - mul sb, r8, r5 - mov r7, fp -_02384578: - ldr r1, [r6] - mov r0, sl - add r1, r1, #0xe0 + OV30_02384400_OFFSET - add r1, r1, #0x4000 - add r1, r1, sb - mla r1, r7, r4, r1 - bl ov30_0238483C - add r7, r7, #1 - cmp r7, #0x38 - blt _02384578 - add r8, r8, #1 - cmp r8, #0x20 - blt _02384570 - ldr r1, _02384834 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] -#ifdef JAPAN - add r1, r1, #0x3c - add r1, r1, #0xcc00 -#else - add r1, r1, #0xce0 - add r1, r1, #0xc000 -#endif - bl ov30_02385F7C - ldr r1, _02384834 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] -#ifdef JAPAN - add r1, r1, #0xc40 - add r1, r1, #0xc000 -#else - add r1, r1, #0xe4 - add r1, r1, #0xcc00 -#endif - bl ov30_02385F7C - ldr r1, _02384834 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] - add r1, r1, #0xe8 + OV30_02384400_OFFSET - add r1, r1, #0xcc00 - bl ov30_02385F7C - ldr r0, _02384834 ; =DUNGEON_PTR - ldr r4, _02384834 ; =DUNGEON_PTR - ldr r0, [r0] - mov r5, #0 - add r0, r0, #0xcc00 - ldrsh r1, [r0, #0xe8 + OV30_02384400_OFFSET] - cmp r1, #0xff - mvneq r1, #0 - streqh r1, [r0, #0xe8 + OV30_02384400_OFFSET] - ldr r0, _02384834 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, #0xcc00 - ldrsh r1, [r0, #0xea + OV30_02384400_OFFSET] - cmp r1, #0xff - mvneq r1, #0 - streqh r1, [r0, #0xea + OV30_02384400_OFFSET] -_02384634: - ldr r1, [r4] - mov r0, sl - add r1, r1, #0xec + OV30_02384400_OFFSET - add r1, r1, #0xcc00 - add r1, r1, r5, lsl #2 - bl ov30_02385FB0 - add r5, r5, #1 - cmp r5, #8 - blt _02384634 - ldr r4, _02384834 ; =DUNGEON_PTR - mov r5, #0 -_02384660: - mov r0, sl - bl ov30_02385EF4 - ldr r1, [r4] - add r1, r1, r5 - add r1, r1, #0xc000 - add r5, r5, #1 - strb r0, [r1, #0xd0c + OV30_02384400_OFFSET] - cmp r5, #8 - blt _02384660 - ldr r1, _02384834 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] -#ifdef JAPAN - add r1, r1, #0xc70 - add r1, r1, #0xc000 -#else - add r1, r1, #0x114 - add r1, r1, #0xcc00 -#endif - bl ov30_02385FE4 - ldr r1, _02384834 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] -#ifdef JAPAN - add r1, r1, #0xc80 - add r1, r1, #0xc000 -#else - add r1, r1, #0x124 - add r1, r1, #0xcc00 -#endif - bl ov30_02385FE4 - ldr r1, _02384834 ; =DUNGEON_PTR - mov r0, sl - ldr r1, [r1] -#ifdef JAPAN - add r1, r1, #0xc90 - add r1, r1, #0xc000 -#else - add r1, r1, #0x134 - add r1, r1, #0xcc00 -#endif - bl ov30_02386040 - mov r8, #0 - ldr r6, _02384834 ; =DUNGEON_PTR - mov fp, r8 - mov r4, #0x14 - mov r5, #0xa0 -_023846E0: - mul r7, r8, r5 - mov sb, fp -_023846E8: - ldr r1, [r6] - mov r0, sl -#ifdef JAPAN - add r1, r1, #0xbc - add r1, r1, #0xcc00 -#else - add r1, r1, #0xd60 - add r1, r1, #0xc000 -#endif - add r1, r1, r7 - mla r1, sb, r4, r1 - bl ov30_0238483C - mov r0, sl - bl ov30_02385EDC - ldr r1, [r6] - add r1, r1, r8, lsl #4 - add r1, r1, sb, lsl #1 -#ifdef JAPAN - add r1, r1, #0xd100 - add sb, sb, #1 - strh r0, [r1, #0xbc] -#else - add r1, r1, #0xd200 - add sb, sb, #1 - strh r0, [r1, #0x60] -#endif - cmp sb, #8 - blt _023846E8 - add r8, r8, #1 - cmp r8, #8 - blt _023846E0 - ldr r0, _02384834 ; =DUNGEON_PTR - mov r1, #0 - ldr r0, [r0] - mov r2, #0x26 - add r0, r0, #0x138 + OV30_02384400_OFFSET - add r4, r0, #0xcc00 - mov r0, r4 - bl memset - mov r0, sl - mov r1, r4 - mov r2, #1 - bl ov30_02385CA4 - mov r0, sl - add r1, r4, #1 - mov r2, #1 - bl ov30_02385CA4 - mov r5, #0 -_0238477C: - mov r0, sl - bl ov30_02385EC4 - add r1, r4, r5, lsl #1 - strh r0, [r1, #2] - mov r0, sl - bl ov30_02385EC4 - add r1, r4, r5, lsl #1 - add r5, r5, #1 - strh r0, [r1, #0x12] - cmp r5, #8 - blt _0238477C - mov r0, sl - bl ov30_02385EF4 - strb r0, [r4, #0x22] - mov r0, sl - bl ov30_02385EF4 - strb r0, [r4, #0x23] - mov r0, sl - bl ov30_02385EF4 - strb r0, [r4, #0x24] - mov r0, sl - bl ov30_02385F54 - strb r0, [r4, #0x25] - ldr r0, _02384834 ; =DUNGEON_PTR - mov r1, #2 - ldr r0, [r0] - add r0, r0, #0x2fc + OV30_02384400_OFFSET - add r4, r0, #0x12800 - mov r0, r4 - bl MemZero - mov r0, sl - mov r1, r4 - mov r2, #1 - bl ov30_02385CA4 - add r1, r4, #1 - mov r0, sl - mov r2, #1 - bl ov30_02385CA4 - mov r0, sl - bl ov30_02385EDC - ldr r2, _02384834 ; =DUNGEON_PTR - ldr r1, _02384838 ; =0x00012AFE - ldr r2, [r2] - strh r0, [r2, r1] - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02384830: .word OVERLAY30_JP_STRING_1 -_02384834: .word DUNGEON_PTR -_02384838: .word 0x00012AFE + OV30_02384400_OFFSET - arm_func_end ov30_02384400 - - arm_func_start ov30_0238483C -ov30_0238483C: ; 0x0238483C - - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r5, r0 - mov r0, r4 - mov r1, #0 - mov r2, #0x14 - bl memset - mov r0, r5 - bl ov30_02385EC4 - strh r0, [r4] - mov r0, r5 - bl ov30_02385EC4 - strh r0, [r4, #2] - mov r0, r5 - add r1, r4, #7 - mov r2, #1 - bl ov30_02385CA4 - mov r0, r5 - add r1, r4, #6 - mov r2, #1 - bl ov30_02385CA4 - mov r0, #0 - str r0, [r4, #0xc] - str r0, [r4, #0x10] - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov30_0238483C - - arm_func_start ov30_023848A0 -ov30_023848A0: ; 0x023848A0 -#ifdef JAPAN -#define OV30_023848A0_OFFSET -0xA4 -#else -#define OV30_023848A0_OFFSET 0 -#endif - stmdb sp!, {r4, lr} - ldr r1, _02384A18 ; =OVERLAY30_JP_STRING_1 - mov r4, r0 - bl ov30_02385CF0 - ldr r1, _02384A1C ; =DUNGEON_PTR - mov r0, r4 - ldr r1, [r1] - mov r2, #0 - add r1, r1, #0x1a000 - str r2, [r1, #0x22c + OV30_023848A0_OFFSET] - bl ov30_02385EF4 - ldr r1, _02384A1C ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - strb r0, [r1, #0x23c + OV30_023848A0_OFFSET] - mov r0, r4 - bl ov30_02385EF4 - ldr r1, _02384A1C ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - strb r0, [r1, #0x23d + OV30_023848A0_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384A1C ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - strb r0, [r1, #0x23e + OV30_023848A0_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384A1C ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - strb r0, [r1, #0x23f + OV30_023848A0_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384A1C ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - strb r0, [r1, #0x240 + OV30_023848A0_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384A1C ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - strb r0, [r1, #0x242 + OV30_023848A0_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384A1C ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - strb r0, [r1, #0x24f + OV30_023848A0_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384A1C ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - strb r0, [r1, #0x243 + OV30_023848A0_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384A1C ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - strb r0, [r1, #0x24e + OV30_023848A0_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384A1C ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - strb r0, [r1, #0x250 + OV30_023848A0_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384A1C ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - strb r0, [r1, #0x244 + OV30_023848A0_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384A1C ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - strb r0, [r1, #0x245 + OV30_023848A0_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384A1C ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - strb r0, [r1, #0x246 + OV30_023848A0_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384A1C ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x1a000 - strb r0, [r1, #0x248 + OV30_023848A0_OFFSET] - ldmia sp!, {r4, pc} - .align 2, 0 -_02384A18: .word OVERLAY30_JP_STRING_1 -_02384A1C: .word DUNGEON_PTR - arm_func_end ov30_023848A0 - - arm_func_start ov30_02384A20 -ov30_02384A20: ; 0x02384A20 - stmdb sp!, {r4, lr} - mov r4, r0 - bl ov30_02385EDC - ldr r2, _02384A80 ; =DUNGEON_PTR - ldr r1, _02384A84 ; =0x0002CB02 - ldr r2, [r2] - strh r0, [r2, r1] - mov r0, r4 - bl ov30_02385EDC - ldr r2, _02384A80 ; =DUNGEON_PTR - ldr r1, _02384A88 ; =0x0002CB04 - ldr r2, [r2] - strh r0, [r2, r1] - mov r0, r4 - bl ov30_02385EDC - ldr r2, _02384A80 ; =DUNGEON_PTR - ldr r1, _02384A8C ; =0x0002CB06 - ldr ip, [r2] - ldr r3, _02384A90 ; =0x000003E7 - strh r0, [ip, r1] - ldr r2, [r2] - sub r0, r1, #2 - strh r3, [r2, r0] - ldmia sp!, {r4, pc} - .align 2, 0 -#ifdef JAPAN -#define OV30_02384A20_OFFSET -0xA4 -#else -#define OV30_02384A20_OFFSET 0 -#endif -_02384A80: .word DUNGEON_PTR -_02384A84: .word 0x0002CB02 + OV30_02384A20_OFFSET -_02384A88: .word 0x0002CB04 + OV30_02384A20_OFFSET -_02384A8C: .word 0x0002CB06 + OV30_02384A20_OFFSET -_02384A90: .word 0x000003E7 - arm_func_end ov30_02384A20 - - arm_func_start ov30_02384A94 -ov30_02384A94: ; 0x02384A94 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, lr} - sub sp, sp, #0xc - mov r7, r0 - bl ov29_02344B1C - ldr r1, _02384B20 ; =OVERLAY30_JP_STRING_1 - mov r0, r7 - bl ov30_02385CF0 - mov r6, #0 - mov sb, r6 - mov sl, #1 - add r4, sp, #0 - add r5, sp, #4 - mov r8, r6 -_02384AC8: - mov r0, r7 - mov r1, r5 - bl ov30_02384B24 - mov r0, r7 - mov r1, r4 - bl ov30_02385F7C - ldrb r0, [sp, #4] - tst r0, #1 - movne r0, sl - moveq r0, sb - tst r0, #0xff - beq _02384B08 - mov r0, r4 - mov r1, r5 - mov r2, r8 - bl SpawnItem -_02384B08: - add r6, r6, #1 - cmp r6, #0x40 - blt _02384AC8 - bl ov29_02344B30 - add sp, sp, #0xc - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_02384B20: .word OVERLAY30_JP_STRING_1 - arm_func_end ov30_02384A94 - - arm_func_start ov30_02384B24 -ov30_02384B24: ; 0x02384B24 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r5, r0 - mov r0, r4 - mov r1, #0 - mov r2, #6 - bl memset - mov r0, r5 - mov r1, r4 - mov r2, #1 - bl ov30_02385CA4 - mov r0, r5 - add r1, r4, #1 - mov r2, #1 - bl ov30_02385CA4 - mov r0, r5 - add r1, r4, #2 - mov r2, #2 - bl ov30_02385CA4 - mov r0, r5 - add r1, r4, #4 - mov r2, #2 - bl ov30_02385CA4 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov30_02384B24 - - arm_func_start ov30_02384B84 -ov30_02384B84: ; 0x02384B84 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #8 - ldr r1, _02384C68 ; =OVERLAY30_JP_STRING_1 - mov sl, r0 - bl ov30_02385CF0 - mov sb, #0 - mov r8, #6 - mov r7, sb - add r6, sp, #3 - mov fp, #1 -_02384BAC: - mov r0, sl - mov r1, r6 - mov r2, fp - strb r8, [sp, #3] - strb r7, [sp, #2] - strb r7, [sp, #1] - bl ov30_02385CA4 - mov r0, sl - add r1, sp, #2 - mov r2, #1 - bl ov30_02385CA4 - mov r0, sl - add r1, sp, #1 - mov r2, #1 - bl ov30_02385CA4 - mov r0, sl - add r1, sp, #0 - mov r2, #1 - bl ov30_02385CA4 - mov r0, sl - bl ov30_02385F54 - mov r5, r0 - mov r0, sl - add r1, sp, #4 - bl ov30_02385F7C - ldrb r0, [sp, #3] - cmp r0, #0xff - beq _02384C54 - ldrsh r0, [sp, #4] - ldrsh r1, [sp, #6] - bl GetTileSafe - mov r4, r0 - ldrb r0, [sp, #3] - ldrb r2, [sp, #2] - add r1, sp, #4 - mov r3, #0 - bl SpawnTrap - movs r1, r0 - beq _02384C54 - mov r0, r4 - mov r2, r5 - bl BindTrapToTile -_02384C54: - add sb, sb, #1 - cmp sb, #0x40 - blt _02384BAC - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_02384C68: .word OVERLAY30_JP_STRING_1 - arm_func_end ov30_02384B84 - - arm_func_start ov30_02384C6C -ov30_02384C6C: ; 0x02384C6C - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - ldr r1, _02384CCC ; =OVERLAY30_JP_STRING_1 - mov r6, r0 - bl ov30_02385CF0 - mov r0, r6 - bl ov30_02385F54 - mov r5, r0 - mov r0, r6 - bl ov30_02385F54 - mov r4, r0 - add r1, sp, #0 - mov r0, r6 - bl ov30_02385F7C - cmp r5, #0 - beq _02384CC4 - add r0, sp, #0 - bl ov29_02338768 - ldr r0, _02384CD0 ; =DUNGEON_PTR - ldr r0, [r0] - add r0, r0, #0x19000 -#ifdef JAPAN - strb r4, [r0, #0x7a8] -#else - strb r4, [r0, #0x84c] -#endif -_02384CC4: - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_02384CCC: .word OVERLAY30_JP_STRING_1 -_02384CD0: .word DUNGEON_PTR - arm_func_end ov30_02384C6C - - arm_func_start ov30_02384CD4 -ov30_02384CD4: ; 0x02384CD4 -#ifdef JAPAN -#define OV30_02384CD4_OFFSET -0xA4 -#else -#define OV30_02384CD4_OFFSET 0 -#endif - stmdb sp!, {r4, r5, r6, lr} - ldr r1, _02384E20 ; =OVERLAY30_JP_STRING_1 - mov r4, r0 - bl ov30_02385CF0 - mov r0, r4 - bl ov30_02385F0C - ldr r1, _02384E24 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x3000 - str r0, [r1, #0xe2c + OV30_02384CD4_OFFSET] - mov r0, r4 - bl ov30_02385F0C - ldr r1, _02384E24 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x3000 - str r0, [r1, #0xe30 + OV30_02384CD4_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384E24 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x3000 - strb r0, [r1, #0xe34 + OV30_02384CD4_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384E24 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x3000 - strb r0, [r1, #0xe35 + OV30_02384CD4_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384E24 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x3000 - strb r0, [r1, #0xe36 + OV30_02384CD4_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384E24 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x3000 - strb r0, [r1, #0xe37 + OV30_02384CD4_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384E24 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x3000 - strb r0, [r1, #0xe38 + OV30_02384CD4_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384E24 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x3000 - strb r0, [r1, #0xe39 + OV30_02384CD4_OFFSET] - mov r0, r4 - bl ov30_02385F54 - ldr r1, _02384E24 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x3000 - strb r0, [r1, #0xe3c + OV30_02384CD4_OFFSET] - mov r0, r4 - bl ov30_02385EC4 - ldr r1, _02384E24 ; =DUNGEON_PTR - mov r6, #0 - ldr r1, [r1] - mov r5, #1 -#ifdef JAPAN - add r1, r1, #0x3d00 - strh r0, [r1, #0x96] -#else - add r1, r1, #0x3e00 - strh r0, [r1, #0x3a] -#endif -_02384DDC: - mov r0, r4 - mov r1, r5 - mov r2, r6 - bl ov30_02384E28 - add r6, r6, #1 - cmp r6, #4 - blt _02384DDC - mov r6, #0 - mov r5, r6 -_02384E00: - mov r0, r4 - mov r1, r5 - mov r2, r6 - bl ov30_02384E28 - add r6, r6, #1 - cmp r6, #0x10 - blt _02384E00 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_02384E20: .word OVERLAY30_JP_STRING_1 -_02384E24: .word DUNGEON_PTR - arm_func_end ov30_02384CD4 - - arm_func_start ov30_02384E28 -ov30_02384E28: ; 0x02384E28 -#ifdef JAPAN -#define OV30_02384E28_OFFSET -4 -#define OV30_02384E28_OFFSET_2 -1 -#else -#define OV30_02384E28_OFFSET 0 -#define OV30_02384E28_OFFSET_2 0 -#endif -#ifdef JAPAN - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} -#else - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} -#endif - sub sp, sp, #0x258 + OV30_02384E28_OFFSET - mov sl, r0 - mov sb, r1 - mov r8, r2 - add r0, sp, #0x18 - mov r1, #0 - mov r2, #0x240 + OV30_02384E28_OFFSET - bl memset - mov r0, sl - bl ov30_02385EF4 - mov r0, sl - bl ov30_02385EF4 - mov r0, sl - bl ov30_02385EF4 - mov fp, r0 - mov r0, sl - add r1, sp, #0x14 - bl ov30_02385F7C - mov r0, sl - bl ov30_02385F54 - mov r5, r0 - mov r0, sl - bl ov30_02385EC4 - mov r6, r0 - ldr r1, _023859D8 ; =LEADER_PTR - mov r2, #0 - mov r0, sl - str r2, [r1] - bl ov30_02385EC4 - strh r0, [sp, #0x18] - add r0, sp, #0xe - mov r1, #0 - mov r2, #2 - bl memset - mov r0, sl - add r1, sp, #0xe - mov r2, #2 - bl ov30_02385CA4 - ldrsh r2, [sp, #0xe] - add r0, sp, #0xc - mov r1, #0 - strh r2, [sp, #0x1c] - mov r2, #2 - bl memset - mov r0, sl - add r1, sp, #0xc - mov r2, #2 - bl ov30_02385CA4 - ldrsh r1, [sp, #0xc] - mov r0, sl - strh r1, [sp, #0x1a] - bl ov30_02385F54 - strb r0, [sp, #0x1e] - mov r0, sl - bl ov30_02385F54 - strb r0, [sp, #0x1f] - mov r0, sl - bl ov30_02385F54 - strb r0, [sp, #0x20] - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0x21] - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0x22] - mov r0, sl - bl ov30_02385EF4 - strh r0, [sp, #0x24] - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0x60] - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0x61] - mov r0, sl - bl ov30_02385EDC - strh r0, [sp, #0x26] - mov r0, sl - bl ov30_02385EDC - strh r0, [sp, #0x28] - mov r0, sl - bl ov30_02385EDC - strh r0, [sp, #0x2a] - mov r0, sl - bl ov30_02385EDC - strh r0, [sp, #0x2e] - mov r0, sl - bl ov30_02385EDC - strh r0, [sp, #0x2c] - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0x32] - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0x33] - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0x34] - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0x35] - mov r0, sl - bl ov30_02385F0C - str r0, [sp, #0x38] - mov r0, sl - bl ov30_02385EDC - strh r0, [sp, #0x3c] - mov r0, sl - bl ov30_02385EDC - strh r0, [sp, #0x3e] - mov r0, sl - bl ov30_02385EDC - strh r0, [sp, #0x40] - mov r0, sl - bl ov30_02385EDC - strh r0, [sp, #0x42] - mov r0, sl - bl ov30_02385EDC - strh r0, [sp, #0x44] - mov r0, sl - bl ov30_02385EDC - strh r0, [sp, #0x46] - mov r0, sl - bl ov30_02385EDC - strh r0, [sp, #0x48] - mov r0, sl - bl ov30_02385F3C - str r0, [sp, #0x4c] - mov r0, sl - bl ov30_02385F3C - str r0, [sp, #0x50] - mov r0, sl - bl ov30_02385F3C - str r0, [sp, #0x54] - mov r0, sl - bl ov30_02385F3C - str r0, [sp, #0x58] - mov r0, #0 - strh r0, [sp, #0x62] - mov r0, sl - add r1, sp, #0x64 - mov r2, #1 - bl ov30_02385CA4 - mov r0, #7 - strb r0, [sp, #0x65] - mov r0, sl - add r1, sp, #0x72 - bl ov30_02385F7C - add r0, sp, #8 - mov r1, #0 - mov r2, #1 - bl memset - mov r0, sl - add r1, sp, #8 - mov r2, #1 - bl ov30_02385CA4 - ldrb r2, [sp, #8] - add r0, sp, #7 - mov r1, #0 - strb r2, [sp, #0x76] - mov r2, #1 - bl memset - mov r0, sl - add r1, sp, #7 - mov r2, #1 - bl ov30_02385CA4 - ldrb r2, [sp, #7] - add r0, sp, #6 - mov r1, #0 - strb r2, [sp, #0x77] - mov r2, #1 - bl memset - mov r0, sl - add r1, sp, #6 - mov r2, #1 - bl ov30_02385CA4 - ldrb r2, [sp, #6] - add r0, sp, #5 - mov r1, #0 - strb r2, [sp, #0x78] - mov r2, #1 - bl memset - mov r0, sl - add r1, sp, #5 - mov r2, #1 - bl ov30_02385CA4 - ldrb r2, [sp, #5] - mov r0, sl - add r1, sp, #0x7a - strb r2, [sp, #0x79] - bl ov30_02384B24 - add r0, sp, #0xa - mov r1, #0 - mov r2, #2 - bl memset - add r1, sp, #0xa - mov r0, sl - mov r2, #2 - bl ov30_02385CA4 - ldrsh r0, [sp, #0xa] - mov r4, #0 - add r7, sp, #0x82 - strh r0, [sp, #0x80] -_02385158: - mov r0, sl - add r1, r7, r4, lsl #2 - bl ov30_02385F7C - add r4, r4, #1 - cmp r4, #4 - blt _02385158 - add r1, sp, #0x94 - mov r0, sl - mov r2, #1 - bl ov30_02385CA4 - mov r0, sl - bl ov30_02385F54 - strb r0, [sp, #0x95] - mov r0, sl - bl ov30_02385F54 - strb r0, [sp, #0x96] - mov r0, sl - bl ov30_02385F54 - strb r0, [sp, #0x97] - mov r0, sl - bl ov30_02385EC4 - strh r0, [sp, #0x98] - mov r0, #0 - str r0, [sp, #0x9c] - str r0, [sp, #0xa0] - mov r0, sl - add r1, sp, #0xa4 - bl ov30_02385F7C - mov r0, sl - add r1, sp, #0xa8 - mov r2, #0x45 - bl ov30_02385CA4 - mov r0, sl - add r1, sp, #0xb4 - mov r2, #0x45 - bl ov30_02385CA4 - add r0, sp, #4 - mov r1, #0 - mov r2, #1 - bl memset - mov r0, sl - add r1, sp, #4 - mov r2, #1 - bl ov30_02385CA4 - ldrb r1, [sp, #4] - mov r0, sl - strb r1, [sp, #0xc0] - bl ov30_02385EDC - strh r0, [sp, #0x5c] - add r0, sp, #3 - mov r1, #0 - mov r2, #1 - bl memset - mov r0, sl - add r1, sp, #3 - mov r2, #1 - bl ov30_02385CA4 - ldrb r1, [sp, #3] - mov r0, sl - strb r1, [sp, #0x5e] - bl ov30_02385F0C - str r0, [sp, #0xc8] - mov r0, sl - bl ov30_02385F0C - str r0, [sp, #0xcc] - mov r0, sl - bl ov30_02385F0C - str r0, [sp, #0xd0] - mov r0, sl - add r1, sp, #0xd5 - mov r2, #1 - bl ov30_02385CA4 - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0xd6] - add r1, sp, #0xd7 - mov r0, sl - mov r2, #1 - bl ov30_02385CA4 - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0xd8] - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0xd9] - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0xda] - mov r0, sl - add r1, sp, #0xdc - mov r2, #1 - bl ov30_02385CA4 - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0xe4] - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0xe5] - mov r0, sl - bl ov30_02385F0C - str r0, [sp, #0xe0] - mov r0, sl - add r1, sp, #0xe8 - mov r2, #1 - bl ov30_02385CA4 - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0xe9] - mov r0, sl - add r1, sp, #0xea - mov r2, #1 - bl ov30_02385CA4 - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0xeb] - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0xec] - mov r0, sl - add r1, sp, #0xed - mov r2, #1 - bl ov30_02385CA4 - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0xee] - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0xef] - mov r0, sl - add r1, sp, #0xf0 - mov r2, #1 - bl ov30_02385CA4 - mov r0, sl - bl ov30_02385F54 - strb r0, [sp, #0xf1] - mov r0, sl - bl ov30_02385F54 - strb r0, [sp, #0xf2] - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0xf3] - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0xf4] - mov r0, sl - add r1, sp, #0xf8 - mov r2, #1 - bl ov30_02385CA4 - mov r0, sl - bl ov30_02385F0C - str r0, [sp, #0xfc] - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0x100] - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0x101] - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0x102] - mov r0, sl - add r1, sp, #0x104 - mov r2, #1 - bl ov30_02385CA4 - mov r0, sl - bl ov30_02385EF4 - add r1, sp, #0x100 - strb r0, [sp, #0x105] - mov r0, sl - add r1, r1, #6 - mov r2, #1 - bl ov30_02385CA4 - add r1, sp, #0x100 - mov r0, sl - add r1, r1, #7 - mov r2, #1 - bl ov30_02385CA4 - mov r0, sl - bl ov30_02385EF4 - add r1, sp, #0x100 - strb r0, [sp, #0x108] - mov r0, sl - add r1, r1, #9 - mov r2, #1 - bl ov30_02385CA4 - mov r0, sl - bl ov30_02385EF4 - add r1, sp, #0x100 - strb r0, [sp, #0x10a] - mov r0, sl - add r1, r1, #0xb - mov r2, #1 - bl ov30_02385CA4 - mov r0, sl - bl ov30_02385EF4 - add r1, sp, #0x100 - strb r0, [sp, #0x10c] - mov r0, sl - add r1, r1, #0xd - mov r2, #1 - bl ov30_02385CA4 - mov r0, sl - bl ov30_02385EF4 - add r1, sp, #0x100 - strb r0, [sp, #0x10e] - add r1, r1, #0xf - mov r0, sl - mov r2, #1 - bl ov30_02385CA4 - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0x110] - mov r0, sl - bl ov30_02385F54 - strb r0, [sp, #0x111] - mov r0, sl - bl ov30_02385F54 - strb r0, [sp, #0x112] - mov r0, sl - bl ov30_02385F54 - strb r0, [sp, #0x113] - mov r0, sl - bl ov30_02385F54 - strb r0, [sp, #0x114] - mov r0, sl - bl ov30_02385F54 -#ifndef JAPAN - strb r0, [sp, #0x11b] - mov r0, sl - bl ov30_02385F54 -#endif - strb r0, [sp, #0x115] - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0x120 + OV30_02384E28_OFFSET_2] - mov r0, sl - bl ov30_02385F54 - strb r0, [sp, #0x116] - mov r0, sl - bl ov30_02385F54 - strb r0, [sp, #0x117] - mov r0, sl - bl ov30_02385F54 - strb r0, [sp, #0x118] - mov r0, sl - bl ov30_02385EF4 -#ifdef JAPAN - strb r0, [sp, #0x11b] - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0x11c] - mov r0, sl - bl ov30_02385F54 - strb r0, [sp, #0x120] - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0x11d] - mov r0, sl - bl ov30_02385EF4 -#else - strb r0, [sp, #0x11c] - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0x11d] - mov r0, sl - bl ov30_02385F54 - strb r0, [sp, #0x121] - mov r0, sl - bl ov30_02385EF4 -#endif - strb r0, [sp, #0x11e] - mov r0, sl - bl ov30_02385EF4 -#ifndef JAPAN - strb r0, [sp, #0x11f] - mov r0, sl - bl ov30_02385EF4 -#endif - strb r0, [sp, #0x122 + OV30_02384E28_OFFSET_2] - add r0, sp, #2 - mov r1, #0 - mov r2, #1 - bl memset - mov r0, sl - add r1, sp, #2 - mov r2, #1 - bl ov30_02385CA4 - ldrb r3, [sp, #2] - add r0, sp, #1 - mov r1, #0 - mov r2, #1 - strb r3, [sp, #0x123 + OV30_02384E28_OFFSET_2] - bl memset - add r1, sp, #1 - mov r0, sl - mov r2, #1 - bl ov30_02385CA4 - ldrb r2, [sp, #1] - add r0, sp, #0x10 - mov r1, #0 - strb r2, [sp, #0x124 + OV30_02384E28_OFFSET_2] - mov r2, #4 - bl memset - mov r0, sl - add r1, sp, #0x10 - mov r2, #4 - bl ov30_02385CA4 - ldr r1, [sp, #0x10] - mov r0, sl - str r1, [sp, #0x128 + OV30_02384E28_OFFSET] - add r1, sp, #0x12c + OV30_02384E28_OFFSET - mov r2, #5 - bl ov30_02386074 - add r1, sp, #0x100 - mov r0, sl - add r1, r1, #0x31 + OV30_02384E28_OFFSET - mov r2, #5 - bl ov30_02386074 - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0x136 + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0x137 + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385EF4 - str r0, [sp, #0x138 + OV30_02384E28_OFFSET] - mov r7, #0 - add r4, sp, #0x18 -_02385630: - mov r0, sl - bl ov30_02385EF4 - add r1, r4, r7, lsl #3 - strb r0, [r1, #0x124 + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385EF4 - add r1, r4, r7, lsl #3 - add r1, r1, #0x100 - strh r0, [r1, #0x26 + OV30_02384E28_OFFSET] - add r1, sp, #0x13c + OV30_02384E28_OFFSET - add r1, r1, r7, lsl #3 - mov r0, sl - add r1, r1, #4 - mov r2, #2 - bl ov30_02385CA4 - mov r0, sl - bl ov30_02385EF4 - add r1, r4, r7, lsl #3 - strb r0, [r1, #0x12a + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385EF4 - add r1, r4, r7, lsl #3 - add r7, r7, #1 - strb r0, [r1, #0x12b + OV30_02384E28_OFFSET] - cmp r7, #4 - blt _02385630 - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0x15c + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385EDC - add r1, sp, #0x100 - strh r0, [r1, #0x5e + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385EDC - add r1, sp, #0x100 - strh r0, [r1, #0x60 + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385EDC - add r1, sp, #0x100 - strh r0, [r1, #0x62 + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385EDC - add r1, sp, #0x100 - strh r0, [r1, #0x64 + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385F54 - strb r0, [sp, #0x166 + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385F54 - strb r0, [sp, #0x167 + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385F54 - strb r0, [sp, #0x169 + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385F54 - strb r0, [sp, #0x168 + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385F54 - strb r0, [sp, #0x16a + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385F54 - strb r0, [sp, #0x16b + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385F54 - strb r0, [sp, #0x16c + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385F54 - strb r0, [sp, #0x16d + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385F54 - strb r0, [sp, #0x16e + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385EC4 - add r1, sp, #0x100 - strh r0, [r1, #0x70 + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385EC4 - add r1, sp, #0x100 - strh r0, [r1, #0x72 + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385F54 - strb r0, [sp, #0x174 + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0x175 + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385F54 - strb r0, [sp, #0x176 + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385F54 - strb r0, [sp, #0x177 + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385F54 - strb r0, [sp, #0x178 + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0x18f + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0x190 + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0x191 + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0x192 + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0x193 + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385EF4 - add r1, sp, #0x100 - strb r0, [sp, #0x194 + OV30_02384E28_OFFSET] - mov r0, sl - add r1, r1, #0x96 + OV30_02384E28_OFFSET - bl ov30_02385F7C - mov r0, sl - bl ov30_02385F3C - str r0, [sp, #0x1a0 + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385EC4 - add r1, sp, #0x100 - strh r0, [r1, #0xaa + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385F24 - str r0, [sp, #0x1a4 + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385EC4 - add r1, sp, #0x100 - strh r0, [r1, #0xa8 + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385EDC - add r1, sp, #0x200 - strh r0, [r1, #0x28 + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385EDC - add r1, sp, #0x200 - strh r0, [r1, #0x2a + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385F0C - str r0, [sp, #0x22c + OV30_02384E28_OFFSET] - add r0, sp, #0 - mov r1, #0 - mov r2, #1 - bl memset - mov r0, sl - add r1, sp, #0 - mov r2, #1 - bl ov30_02385CA4 - ldrb r1, [sp] - mov r0, sl - strb r1, [sp, #0xd4] - bl ov30_02385EF4 - strb r0, [sp, #0x17e + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0x17f + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385EDC - add r1, sp, #0x100 - strh r0, [r1, #0x80 + OV30_02384E28_OFFSET] - mov r0, sl - bl ov30_02385EDC - strh r0, [sp, #0xc4] - mov r0, sl - bl ov30_02385EF4 - strb r0, [sp, #0x182 + OV30_02384E28_OFFSET] - mov r4, #0 - add r7, sp, #0x18 -_023858D8: - mov r0, sl - bl ov30_02385EF4 - add r1, r7, r4 - add r4, r4, #1 - strb r0, [r1, #0x16b + OV30_02384E28_OFFSET] - cmp r4, #5 - blt _023858D8 - ldr r0, _023859D8 ; =LEADER_PTR - mov r1, #0 - str r1, [r0] - cmp fp, #0 - beq _023859D0 - cmp sb, #0 - beq _02385924 - ldrsh r0, [sp, #0x1a] - ldrsh r1, [sp, #0x1c] - mov r2, r8 - bl ov30_023859DC - b _02385934 -_02385924: - ldrsh r0, [sp, #0x1a] - ldrsh r1, [sp, #0x1c] - mov r2, r8 - bl ov30_02385B10 -_02385934: - mov r7, r0 - cmp r7, #0 - beq _023859D0 - ldrsh r0, [sp, #0x14] - ldrsh r1, [sp, #0x16] - ldr r4, [r7, #0xb4] - bl GetTileSafe - ldrh r1, [sp, #0x14] - add sl, sp, #0x18 - mov sb, r4 - strh r1, [r7, #8] - ldrh r1, [sp, #0x16] - mov r8, #0x24 + OV30_02384E28_OFFSET_2 - strh r1, [r7, #0xa] - ldrh r1, [sp, #0x14] - strh r1, [r7, #4] - ldrh r1, [sp, #0x16] - strh r1, [r7, #6] - str r7, [r0, #0xc] - strb r5, [r7, #0x20] - strh r6, [r7, #0x26] -_02385988: - ldmia sl!, {r0, r1, r2, r3} - stmia sb!, {r0, r1, r2, r3} - subs r8, r8, #1 - bne _02385988 -#ifdef JAPAN - ldmia sl, {r0, r1, r2} - stmia sb, {r0, r1, r2} -#endif - ldr r0, _023859D8 ; =LEADER_PTR - mov r1, #0 - str r1, [r0] - ldrb r0, [r4, #7] - cmp r0, #0 - beq _023859BC - ldrsh r0, [r7, #4] - ldrsh r1, [r7, #6] - bl ov29_02338F24 -_023859BC: - mov r0, r7 - bl UpdateIqSkillsWrapper - mov r0, r7 - mov r1, #0 - bl UpdateEntityPixelPos -_023859D0: - add sp, sp, #0x258 + OV30_02384E28_OFFSET -#ifdef JAPAN - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} -#else - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} -#endif - .align 2, 0 -_023859D8: .word LEADER_PTR - arm_func_end ov30_02384E28 - - arm_func_start ov30_023859DC -ov30_023859DC: ; 0x023859DC - stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} - sub sp, sp, #0xc - mov sb, r0 - mov r8, r1 - mov r0, #1 - mov r7, r2 - bl ov29_022DEA10 - mov r5, r0 - mov r0, r8 - bl DungeonGetSpriteIndex - mov r4, r0 - add r0, sp, #8 - add r1, sp, #4 - mov r2, r8 - mov r3, r4 - str r5, [sp] - bl ov29_022E1C84 - cmp r0, #0 - moveq r0, #0 - beq _02385B04 - ldr r2, _02385B0C ; =DUNGEON_PTR - mov r1, #1 - ldr r0, [r2] -#ifdef JAPAN - mov r3, #0x23c - add r0, r0, r7, lsl #2 - add r0, r0, #0x12000 - ldr r6, [r0, #0xa84] -#else - add r3, r7, r7, lsl #3 - add r0, r0, r7, lsl #2 - add r0, r0, #0x12000 - ldr r6, [r0, #0xb28] -#endif - mov r0, #0 - str r1, [r6] - strb r7, [r6, #0x24] - ldr r2, [r2] -#ifdef JAPAN - mov ip, #7 - add r2, r2, #0x3f4 - add r2, r2, #0x400 - mla r2, r7, r3, r2 -#else - mov r7, #7 - add r2, r2, #0x3f4 - add r2, r2, #0x400 - add r2, r2, r3, lsl #6 -#endif - str r2, [r6, #0xb4] - strh sb, [r2, #2] - ldr r3, [r6, #0xb4] - mov r2, #0xff - strh r8, [r3, #4] - ldr r3, [r6, #0xb4] - strb r0, [r3, #6] - ldr r3, [r6, #0xb4] - strb r0, [r3, #8] - strh r4, [r6, #0xa8] - ldr r3, [sp, #8] - add r3, r3, #0x1a - strh r3, [r6, #0xac] -#ifdef JAPAN - strb ip, [r6, #0xae] -#else - strb r7, [r6, #0xae] -#endif - strb r0, [r6, #0xb0] - strb r2, [r6, #0xaf] - strb r1, [r6, #0xb1] - strb r1, [r6, #0xb3] - str r0, [r6, #0x1c] - bl PopulateActiveMonsterPtrs - ldr r1, [sp, #8] - ldr r0, [r6, #0xb4] -#ifdef JAPAN - strb r1, [r0, #0x176] - ldr r1, [sp, #4] - ldr r0, [r6, #0xb4] - strb r1, [r0, #0x177] -#else - strb r1, [r0, #0x17a] - ldr r1, [sp, #4] - ldr r0, [r6, #0xb4] - strb r1, [r0, #0x17b] -#endif - ldr r0, [sp, #8] - ldr r1, [sp, #4] - mov r0, r0, lsl #0x10 - mov r1, r1, lsl #0x10 - mov r0, r0, lsr #0x10 - mov r1, r1, lsr #0x10 - bl ov29_022E1AF4 - and r0, r5, #0xff - strb r5, [r6, #0xaa] - bl ov29_022DE9F8 - mov r1, #0 - mov r0, r6 - strb r1, [r6, #0x28] -_02385B04: - add sp, sp, #0xc - ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_02385B0C: .word DUNGEON_PTR - arm_func_end ov30_023859DC - - arm_func_start ov30_02385B10 -ov30_02385B10: ; 0x02385B10 - stmdb sp!, {r4, r5, r6, r7, r8, sb, lr} - sub sp, sp, #0xc - mov sb, r0 - mov r8, r1 - mov r0, #2 - mov r7, r2 - bl ov29_022DEA10 - mov r5, r0 - mov r0, r8 - bl DungeonGetSpriteIndex - mov r4, r0 - add r0, sp, #8 - add r1, sp, #4 - mov r2, r8 - mov r3, r4 - str r5, [sp] - bl ov29_022E2018 - cmp r0, #0 - mov r0, #0 - beq _02385C30 - ldr ip, _02385C38 ; =DUNGEON_PTR - mov r1, #1 - ldr r2, [ip] -#ifdef JAPAN - mov r3, #0x23c - add r2, r2, r7, lsl #2 - add r2, r2, #0x12000 - ldr r6, [r2, #0xa94] -#else - add r3, r7, r7, lsl #3 - add r2, r2, r7, lsl #2 - add r2, r2, #0x12000 - ldr r6, [r2, #0xb38] -#endif - str r1, [r6] - strb r7, [r6, #0x24] - strb r0, [r6, #0x22] - ldr r2, [ip] -#ifdef JAPAN - mov ip, #7 - add r2, r2, #0xe4 - add r2, r2, #0x1000 - mla r2, r7, r3, r2 -#else - mov r7, #7 - add r2, r2, #0xf4 - add r2, r2, #0x1000 - add r2, r2, r3, lsl #6 -#endif - str r2, [r6, #0xb4] - strh sb, [r2, #2] - ldr r3, [r6, #0xb4] - mov r2, #0xff - strh r8, [r3, #4] - ldr r3, [r6, #0xb4] - strb r1, [r3, #6] - strh r4, [r6, #0xa8] - ldr r3, [sp, #8] - add r3, r3, #0x62 - strh r3, [r6, #0xac] -#ifdef JAPAN - strb ip, [r6, #0xae] -#else - strb r7, [r6, #0xae] -#endif - strb r0, [r6, #0xb0] - strb r2, [r6, #0xaf] - strb r1, [r6, #0xb1] - strb r1, [r6, #0xb3] - str r0, [r6, #0x1c] - ldr r1, [sp, #8] - ldr r0, [r6, #0xb4] -#ifdef JAPAN - strb r1, [r0, #0x176] - ldr r1, [sp, #4] - ldr r0, [r6, #0xb4] - strb r1, [r0, #0x177] -#else - strb r1, [r0, #0x17a] - ldr r1, [sp, #4] - ldr r0, [r6, #0xb4] - strb r1, [r0, #0x17b] -#endif - ldr r0, [sp, #8] - ldr r1, [sp, #4] - mov r0, r0, lsl #0x10 - mov r1, r1, lsl #0x10 - mov r0, r0, lsr #0x10 - mov r1, r1, lsr #0x10 - bl ov29_022E1EC4 - bl PopulateActiveMonsterPtrs - and r0, r5, #0xff - strb r5, [r6, #0xaa] - bl ov29_022DE9F8 - mov r1, #0 - mov r0, r6 - strb r1, [r6, #0x28] -_02385C30: - add sp, sp, #0xc - ldmia sp!, {r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_02385C38: .word DUNGEON_PTR - arm_func_end ov30_02385B10 - - arm_func_start ov30_02385C3C -ov30_02385C3C: ; 0x02385C3C - str r1, [r0] - mov r3, #0 - str r3, [r0, #8] - add r1, r1, r2 - str r1, [r0, #4] - bx lr - arm_func_end ov30_02385C3C - - arm_func_start ov30_02385C54 -ov30_02385C54: ; 0x02385C54 - b _02385C80 -_02385C58: - ldrb ip, [r1], #1 - ldr r3, [r0] - sub r2, r2, #1 - strb ip, [r3] - ldr r3, [r0] - add r3, r3, #1 - str r3, [r0] - ldr r3, [r0, #8] - add r3, r3, #1 - str r3, [r0, #8] - arm_func_end ov30_02385C54 -_02385C80: - cmp r2, #0 - bne _02385C58 - bx lr - - arm_func_start ov30_02385C8C -ov30_02385C8C: ; 0x02385C8C - str r1, [r0] - mov r3, #0 - str r3, [r0, #8] - add r1, r1, r2 - str r1, [r0, #4] - bx lr - arm_func_end ov30_02385C8C - - arm_func_start ov30_02385CA4 -ov30_02385CA4: ; 0x02385CA4 - b _02385CD0 -_02385CA8: - ldr r3, [r0] - sub r2, r2, #1 - ldrb r3, [r3] - strb r3, [r1], #1 - ldr r3, [r0] - add r3, r3, #1 - str r3, [r0] - ldr r3, [r0, #8] - add r3, r3, #1 - str r3, [r0, #8] - arm_func_end ov30_02385CA4 -_02385CD0: - cmp r2, #0 - bne _02385CA8 - bx lr - - arm_func_start ov30_02385CDC -ov30_02385CDC: ; 0x02385CDC - bx lr - arm_func_end ov30_02385CDC - - arm_func_start ov30_02385CE0 -ov30_02385CE0: ; 0x02385CE0 - ldr ip, _02385CEC ; =ov30_02385C54 - mov r2, #8 - bx ip - .align 2, 0 -_02385CEC: .word ov30_02385C54 - arm_func_end ov30_02385CE0 - - arm_func_start ov30_02385CF0 -ov30_02385CF0: ; 0x02385CF0 - stmdb sp!, {lr} - sub sp, sp, #0xc - add r1, sp, #0 - mov r2, #8 - bl ov30_02385CA4 - mov r0, #0 - strb r0, [sp, #8] - add sp, sp, #0xc - ldmia sp!, {pc} - arm_func_end ov30_02385CF0 - - arm_func_start ov30_02385D14 -ov30_02385D14: ; 0x02385D14 - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r3, lr} - add r1, sp, #0xc - mov r2, #2 - bl ov30_02385C54 - ldmia sp!, {r3, lr} - add sp, sp, #0x10 - bx lr - arm_func_end ov30_02385D14 - - arm_func_start ov30_02385D34 -ov30_02385D34: ; 0x02385D34 - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r3, lr} - add r1, sp, #0xc - mov r2, #2 - bl ov30_02385C54 - ldmia sp!, {r3, lr} - add sp, sp, #0x10 - bx lr - arm_func_end ov30_02385D34 - - arm_func_start ov30_02385D54 -ov30_02385D54: ; 0x02385D54 - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r3, lr} - add r1, sp, #0xc - mov r2, #1 - bl ov30_02385C54 - ldmia sp!, {r3, lr} - add sp, sp, #0x10 - bx lr - arm_func_end ov30_02385D54 - - arm_func_start ov30_02385D74 -ov30_02385D74: ; 0x02385D74 - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r3, lr} - add r1, sp, #0xc - mov r2, #4 - bl ov30_02385C54 - ldmia sp!, {r3, lr} - add sp, sp, #0x10 - bx lr - arm_func_end ov30_02385D74 - - arm_func_start ov30_02385D94 -ov30_02385D94: ; 0x02385D94 - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r3, lr} - add r1, sp, #0xc - mov r2, #4 - bl ov30_02385C54 - ldmia sp!, {r3, lr} - add sp, sp, #0x10 - bx lr - arm_func_end ov30_02385D94 - - arm_func_start ov30_02385DB4 -ov30_02385DB4: ; 0x02385DB4 - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r3, lr} - add r1, sp, #0xc - mov r2, #4 - bl ov30_02385C54 - ldmia sp!, {r3, lr} - add sp, sp, #0x10 - bx lr - arm_func_end ov30_02385DB4 - - arm_func_start ov30_02385DD4 -ov30_02385DD4: ; 0x02385DD4 - stmdb sp!, {r3, lr} - cmp r1, #0 - movne r3, #0xff - moveq r3, #0 - add r1, sp, #0 - mov r2, #1 - strb r3, [sp] - bl ov30_02385C54 - ldmia sp!, {r3, pc} - arm_func_end ov30_02385DD4 - - arm_func_start ov30_02385DF8 -ov30_02385DF8: ; 0x02385DF8 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - mov r2, #1 - bl ov30_02385C54 - mov r0, r5 - add r1, r4, #2 - mov r2, #1 - bl ov30_02385C54 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov30_02385DF8 - - arm_func_start ov30_02385E20 -ov30_02385E20: ; 0x02385E20 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - mov r2, #2 - bl ov30_02385C54 - mov r0, r5 - add r1, r4, #2 - mov r2, #2 - bl ov30_02385C54 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov30_02385E20 - - arm_func_start ov30_02385E48 -ov30_02385E48: ; 0x02385E48 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - mov r2, #1 - bl ov30_02385C54 - mov r0, r5 - add r1, r4, #4 - mov r2, #1 - bl ov30_02385C54 - mov r0, r5 - add r1, r4, #8 - mov r2, #1 - bl ov30_02385C54 - mov r0, r5 - add r1, r4, #0xc - mov r2, #1 - bl ov30_02385C54 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov30_02385E48 - - arm_func_start ov30_02385E90 -ov30_02385E90: ; 0x02385E90 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - mov r2, #1 - bl ov30_02385C54 - mov r0, r5 - add r1, r4, #2 - mov r2, #1 - bl ov30_02385C54 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov30_02385E90 - - arm_func_start ov30_02385EB8 -ov30_02385EB8: ; 0x02385EB8 - ldr ip, _02385EC0 ; =ov30_02385C54 - bx ip - .align 2, 0 -_02385EC0: .word ov30_02385C54 - arm_func_end ov30_02385EB8 - - arm_func_start ov30_02385EC4 -ov30_02385EC4: ; 0x02385EC4 - stmdb sp!, {r3, lr} - add r1, sp, #0 - mov r2, #2 - bl ov30_02385CA4 - ldrh r0, [sp] - ldmia sp!, {r3, pc} - arm_func_end ov30_02385EC4 - - arm_func_start ov30_02385EDC -ov30_02385EDC: ; 0x02385EDC - stmdb sp!, {r3, lr} - add r1, sp, #0 - mov r2, #2 - bl ov30_02385CA4 - ldrsh r0, [sp] - ldmia sp!, {r3, pc} - arm_func_end ov30_02385EDC - - arm_func_start ov30_02385EF4 -ov30_02385EF4: ; 0x02385EF4 - stmdb sp!, {r3, lr} - add r1, sp, #0 - mov r2, #1 - bl ov30_02385CA4 - ldrb r0, [sp] - ldmia sp!, {r3, pc} - arm_func_end ov30_02385EF4 - - arm_func_start ov30_02385F0C -ov30_02385F0C: ; 0x02385F0C - stmdb sp!, {r3, lr} - add r1, sp, #0 - mov r2, #4 - bl ov30_02385CA4 - ldr r0, [sp] - ldmia sp!, {r3, pc} - arm_func_end ov30_02385F0C - - arm_func_start ov30_02385F24 -ov30_02385F24: ; 0x02385F24 - stmdb sp!, {r3, lr} - add r1, sp, #0 - mov r2, #4 - bl ov30_02385CA4 - ldr r0, [sp] - ldmia sp!, {r3, pc} - arm_func_end ov30_02385F24 - - arm_func_start ov30_02385F3C -ov30_02385F3C: ; 0x02385F3C - stmdb sp!, {r3, lr} - add r1, sp, #0 - mov r2, #4 - bl ov30_02385CA4 - ldr r0, [sp] - ldmia sp!, {r3, pc} - arm_func_end ov30_02385F3C - - arm_func_start ov30_02385F54 -ov30_02385F54: ; 0x02385F54 - stmdb sp!, {r3, lr} - add r1, sp, #0 - mov r2, #1 - bl ov30_02385CA4 - ldrb r0, [sp] - cmp r0, #0 - movne r0, #1 - moveq r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, pc} - arm_func_end ov30_02385F54 - - arm_func_start ov30_02385F7C -ov30_02385F7C: ; 0x02385F7C - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r3, #0 - strh r3, [r4] - mov r5, r0 - mov r2, #1 - strh r3, [r4, #2] - bl ov30_02385CA4 - mov r0, r5 - add r1, r4, #2 - mov r2, #1 - bl ov30_02385CA4 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov30_02385F7C - - arm_func_start ov30_02385FB0 -ov30_02385FB0: ; 0x02385FB0 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r3, #0 - strh r3, [r4] - mov r5, r0 - mov r2, #2 - strh r3, [r4, #2] - bl ov30_02385CA4 - mov r0, r5 - add r1, r4, #2 - mov r2, #2 - bl ov30_02385CA4 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov30_02385FB0 - - arm_func_start ov30_02385FE4 -ov30_02385FE4: ; 0x02385FE4 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r3, #0 - str r3, [r4] - str r3, [r4, #4] - str r3, [r4, #8] - mov r5, r0 - mov r2, #1 - str r3, [r4, #0xc] - bl ov30_02385CA4 - mov r0, r5 - add r1, r4, #4 - mov r2, #1 - bl ov30_02385CA4 - mov r0, r5 - add r1, r4, #8 - mov r2, #1 - bl ov30_02385CA4 - mov r0, r5 - add r1, r4, #0xc - mov r2, #1 - bl ov30_02385CA4 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov30_02385FE4 - - arm_func_start ov30_02386040 -ov30_02386040: ; 0x02386040 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r3, #0 - strh r3, [r4] - mov r5, r0 - mov r2, #1 - strh r3, [r4, #2] - bl ov30_02385CA4 - mov r0, r5 - add r1, r4, #2 - mov r2, #1 - bl ov30_02385CA4 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ov30_02386040 - - arm_func_start ov30_02386074 -ov30_02386074: ; 0x02386074 - ldr ip, _0238607C ; =ov30_02385CA4 - bx ip - .align 2, 0 -_0238607C: .word ov30_02385CA4 - arm_func_end ov30_02386074 ; 0x02386080 .rodata diff --git a/charmap.txt b/charmap.txt index e69de29b..f9944601 100644 --- a/charmap.txt +++ b/charmap.txt @@ -0,0 +1,152 @@ +// Character mapping for Pokémon: Explorers of Sky +// Version 2026.09.14 +// Format is HEXCODE= or HEXCODE={} +// Comments are preceded by double forward slashes as in C99 and C++. +// Leading spaces and tabs are ignored; trailing spaces and tabs are not. + + +82A0=あ +82A2=い +82A4=う +82A6=え +82A8=お +82A9=か +82AA=が +82AB=き +82AC=ぎ +82AD=く +82AE=ぐ +82AF=け +82B0=げ +82B1=こ +82B2=ご +82B3=さ +82B4=ざ +82B5=し +82B6=じ +82B7=す +82B8=ず +82B9=せ +82BA=ぜ +82BB=そ +82BC=ぞ +82BD=た +82BE=だ +82BF=ち +82C0=ぢ +82C2=つ +82C3=づ +82C4=て +82C5=で +82C6=と +82C7=ど +82C8=な +82C9=に +82CA=ぬ +82CB=ね +82CC=の +82CD=は +82CE=ば +82CF=ぱ +82D0=ひ +82D1=び +82D2=ぴ +82D3=ふ +82D4=ぶ +82D5=ぷ +82D6=へ +82D7=べ +82D8=ぺ +82D9=ほ +82DA=ぼ +82DB=ぽ +82DC=ま +82DD=み +82DE=む +82DF=め +82E0=も +82E2=や +82E4=ゆ +82E6=よ +82E7=ら +82E8=り +82E9=る +82EA=れ +82EB=ろ +82ED=わ +82F0=を +82F1=ん +8341=ア +8343=イ +8345=ウ +8347=エ +8349=オ +834A=カ +834B=ガ +834C=キ +834D=ギ +834E=ク +834F=グ +8350=ケ +8351=ゲ +8352=コ +8353=ゴ +8354=サ +8355=ザ +8356=シ +8357=ジ +8358=ス +8359=ズ +835A=セ +835B=ゼ +835C=ソ +835D=ゾ +835E=タ +835F=ダ +8360=チ +8361=ヂ +8362=ッ +8363=ツ +8364=ヅ +8365=テ +8366=デ +8367=ト +8368=ド +8369=ナ +836A=ニ +836B=ヌ +836C=ネ +836D=ノ +836E=ハ +836F=バ +8370=パ +8371=ヒ +8372=ビ +8373=ピ +8374=フ +8375=ブ +8376=プ +8377=ヘ +8378=ベ +8379=ペ +837A=ホ +837B=ボ +837C=ポ +837D=マ +837E=ミ +8380=ム +8381=メ +8382=モ +8384=ヤ +8386=ユ +8388=ヨ +8389=ラ +838A=リ +838B=ル +838C=レ +838D=ロ +838F=ワ +8392=ヲ +8393=ン + +976C=様 diff --git a/include/dungeon.h b/include/dungeon.h index 3956547f..9a5c58f7 100644 --- a/include/dungeon.h +++ b/include/dungeon.h @@ -7,7 +7,7 @@ #define MAX_TEAM_MEMBERS 4 #define DUNGEON_MAX_WILD_POKEMON 16 -#define DUNGEON_MAX_POKEMON 20 +#define DUNGEON_MAX_POKEMON MAX_TEAM_MEMBERS + DUNGEON_MAX_WILD_POKEMON #define DUNGEON_MAX_SIZE_X 56 #define DUNGEON_MAX_SIZE_Y 32 #define CORRIDOR_ROOM 0xFF @@ -100,8 +100,7 @@ struct dungeon_generation_info { // 0x8C24: Position of the Hidden Stairs spawn, or (-1, -1) if no Hidden Stairs struct position hidden_stairs_pos; // 0x8C28: Spawn position of each of the team members - struct position individual_team_spawn_positions[4]; - // There's another 6 words that look like spawn positions right after these 4 + struct position individual_team_spawn_positions[8]; }; // Thresholds are ascending cumulative weights (0-10000) @@ -812,7 +811,8 @@ struct dungeon { // 0x7F2: May always just be a copy of dungeon::some_monster_sprite_to_load, but may also // have another purpose. enum monster_id some_monster_sprite; - struct monster monsters[20]; // 0x7F4: Info for all the monsters currently in the dungeon + struct monster monsters[MAX_TEAM_MEMBERS]; // 0x7F4: Info for all the team monsters currently in the dungeon + struct monster wild_monsters[DUNGEON_MAX_WILD_POKEMON]; // 0x10F4: Info for all the wild monsters currently in the dungeon // 0x34F4: Array that contains the spawn stats for enemies, which are only calculated // once at the start of the floor. // Since the enemy spawn list of a floor can only have a maximum of 16 entries, @@ -1259,23 +1259,7 @@ struct dungeon { u8 field_0x3fc3; struct trap traps[64]; // 0x3FC4: Info for all the traps on the floor struct dungeon_generation_info gen_info; // 0x40C4: Stuff involved with dungeon generation - u8 field_0xccfc; - u8 field_0xccfd; - u8 field_0xccfe; - u8 field_0xccff; - u8 field_0xcd00; - u8 field_0xcd01; - u8 field_0xcd02; - u8 field_0xcd03; - u8 field_0xcd04; - u8 field_0xcd05; - u8 field_0xcd06; - u8 field_0xcd07; - u8 field_0xcd08; - u8 field_0xcd09; - u8 field_0xcd0a; - u8 field_0xcd0b; - // 0xCD0C: Appears to be an array for the team. Likely only the first 4 entries are used. + // 0xCD0C: Appears to be an array for the team. Likely only the first 4 entries are used. // Possibly related to dungeon_generation_info::individual_team_spawn_positions? Possibly the // direction to spawn each team member in? enum direction_id unk_team_direction_array[8]; @@ -1297,134 +1281,7 @@ struct dungeon { struct weather weather; // 0xCD38 // 0xCD60: Seems to be tile data for tiles within fixed rooms struct tile fixed_room_tiles[8][8]; - u8 field_0xd260; - u8 field_0xd261; - u8 field_0xd262; - u8 field_0xd263; - u8 field_0xd264; - u8 field_0xd265; - u8 field_0xd266; - u8 field_0xd267; - u8 field_0xd268; - u8 field_0xd269; - u8 field_0xd26a; - u8 field_0xd26b; - u8 field_0xd26c; - u8 field_0xd26d; - u8 field_0xd26e; - u8 field_0xd26f; - u8 field_0xd270; - u8 field_0xd271; - u8 field_0xd272; - u8 field_0xd273; - u8 field_0xd274; - u8 field_0xd275; - u8 field_0xd276; - u8 field_0xd277; - u8 field_0xd278; - u8 field_0xd279; - u8 field_0xd27a; - u8 field_0xd27b; - u8 field_0xd27c; - u8 field_0xd27d; - u8 field_0xd27e; - u8 field_0xd27f; - u8 field_0xd280; - u8 field_0xd281; - u8 field_0xd282; - u8 field_0xd283; - u8 field_0xd284; - u8 field_0xd285; - u8 field_0xd286; - u8 field_0xd287; - u8 field_0xd288; - u8 field_0xd289; - u8 field_0xd28a; - u8 field_0xd28b; - u8 field_0xd28c; - u8 field_0xd28d; - u8 field_0xd28e; - u8 field_0xd28f; - u8 field_0xd290; - u8 field_0xd291; - u8 field_0xd292; - u8 field_0xd293; - u8 field_0xd294; - u8 field_0xd295; - u8 field_0xd296; - u8 field_0xd297; - u8 field_0xd298; - u8 field_0xd299; - u8 field_0xd29a; - u8 field_0xd29b; - u8 field_0xd29c; - u8 field_0xd29d; - u8 field_0xd29e; - u8 field_0xd29f; - u8 field_0xd2a0; - u8 field_0xd2a1; - u8 field_0xd2a2; - u8 field_0xd2a3; - u8 field_0xd2a4; - u8 field_0xd2a5; - u8 field_0xd2a6; - u8 field_0xd2a7; - u8 field_0xd2a8; - u8 field_0xd2a9; - u8 field_0xd2aa; - u8 field_0xd2ab; - u8 field_0xd2ac; - u8 field_0xd2ad; - u8 field_0xd2ae; - u8 field_0xd2af; - u8 field_0xd2b0; - u8 field_0xd2b1; - u8 field_0xd2b2; - u8 field_0xd2b3; - u8 field_0xd2b4; - u8 field_0xd2b5; - u8 field_0xd2b6; - u8 field_0xd2b7; - u8 field_0xd2b8; - u8 field_0xd2b9; - u8 field_0xd2ba; - u8 field_0xd2bb; - u8 field_0xd2bc; - u8 field_0xd2bd; - u8 field_0xd2be; - u8 field_0xd2bf; - u8 field_0xd2c0; - u8 field_0xd2c1; - u8 field_0xd2c2; - u8 field_0xd2c3; - u8 field_0xd2c4; - u8 field_0xd2c5; - u8 field_0xd2c6; - u8 field_0xd2c7; - u8 field_0xd2c8; - u8 field_0xd2c9; - u8 field_0xd2ca; - u8 field_0xd2cb; - u8 field_0xd2cc; - u8 field_0xd2cd; - u8 field_0xd2ce; - u8 field_0xd2cf; - u8 field_0xd2d0; - u8 field_0xd2d1; - u8 field_0xd2d2; - u8 field_0xd2d3; - u8 field_0xd2d4; - u8 field_0xd2d5; - u8 field_0xd2d6; - u8 field_0xd2d7; - u8 field_0xd2d8; - u8 field_0xd2d9; - u8 field_0xd2da; - u8 field_0xd2db; - u8 field_0xd2dc; - u8 field_0xd2dd; - u8 field_0xd2de; - u8 field_0xd2df; + s16 field_0xd260[8][8]; // 0xD2E0: Appears to keep track of what tiles are the fixed room tiles when generating // a fixed room that isn't the whole floor. u8 fixed_room_room_index; @@ -1654,7 +1511,7 @@ struct dungeon { // 0x2C9E4: The total number of spawn entries loaded or to be loaded? u16 number_sprites_loaded; // 0x2C9E6: Highest level among all the enemies that spawn on this floor - u16 highest_enemy_level; + s16 highest_enemy_level; // 0x2C9E8: ID of an item guaranteed to spawn on the floor, if applicable // (e.g., certain mission types) enum item_id guaranteed_item_id; diff --git a/include/dungeon_mode.h b/include/dungeon_mode.h index 1a01c122..223e3f10 100644 --- a/include/dungeon_mode.h +++ b/include/dungeon_mode.h @@ -270,8 +270,7 @@ struct monster { s16 iq; // 0xE s16 hp; // 0x10: Current HP s16 max_hp_stat; // 0x12: Add to max_hp_boost for the actual max HP - u8 field_0x14; - u8 field_0x15; + s16 field_0x14; s16 max_hp_boost; // 0x16: From Life Seeds, Sitrus Berries, etc. u8 field_0x18; u8 field_0x19; @@ -292,7 +291,7 @@ struct monster { struct item held_item; // 0x62 // 0x68: Previous held item. Used for whenever taking the X-Ray Specs or Y-Ray Specs on or off // in order to update the camera and minimap. Changed to held_item.id after checking. - enum item_id previous_held_item_id; + s16 previous_held_item_id; // Previous position data is used by the AI struct position prev_pos[NUM_PREV_POS]; // 0x6A: Position X turns ago struct ai_target ai_target; // 0x7A @@ -309,8 +308,7 @@ struct monster { // and restored to entity::types after statuses::roost ends. enum type_id original_types[2]; // 0xAC: The move id to be used if statuses::bide is 1. - u8 bide_move_id; - u8 field_0xad; + s16 bide_move_id; u8 field_0xae; u8 field_0xaf; // 0xB0: Unique number given to the monster when spawning to differentiate it from other @@ -468,18 +466,13 @@ struct monster { // 0x167: Set to true when the monster receives a critical hit. If true when the monster // attacks, Anger Point will activate. Set to false after the monster attacks. bool8 anger_point_flag; - u8 field_0x168; - u8 field_0x169; + s16 field_0x168; // 0x16A: When not DIR_NONE, monster will turn in the specified direction and // its AI will be forced to target the tile next to it in that direction. // Used to prevent bosses from turning towards team members the moment the boss fight // starts (which would override their intended starting facing direction). - enum direction_id force_turn : 8; - u8 field_0x16b; - u8 field_0x16c; - u8 field_0x16d; - u8 field_0x16e; - u8 field_0x16f; + u8 force_turn; + u8 unk16B[5]; // 0x170: Set to make the monster disappear when using the move U-turn. bool8 uturn_hide_monster_flag; // 0x171: Some kind of visual flag? Gets set to 0 temporarily when changing Shaymin form @@ -495,9 +488,9 @@ struct monster { u8 field_0x175; u8 field_0x176; // 0x177: Appears to be the direction for using sleep talk? Set to DIR_NONE when awake. - enum direction_id sleep_talk_direction : 8; + u8 sleep_talk_direction; // 0x178: Appears to be the direction for using snore? Set to DIR_NONE when awake. - enum direction_id snore_direction : 8; + u8 snore_direction; // 0x179: Seems to be set to 4 when the monster initally throws something and probably // related to direction somehow. Checked in a loop for every monster. u8 field_0x179; @@ -511,10 +504,7 @@ struct monster { struct position pixel_pos; // 0x182: The monster's graphical position on screen? u8 field_0x186; u8 field_0x187; - u8 field_0x188; - u8 field_0x189; - u8 field_0x18a; - u8 field_0x18b; + u32 field_0x188; // 0x18C: Bitflags that cause non-damaging exclusive items to trigger on the // attacker after they have completed their move. For example, the Eclipse Robe // (Darkrai exclusive item) may afflict attacking enemies with the nightmare @@ -648,8 +638,7 @@ struct monster { u8 field_0x20d; u8 field_0x20e; u8 field_0x20f; - u8 hp_fractional; // 0x210: 200 * fractional_part(HP) - u8 field_0x211; + s16 hp_fractional; // 0x210: 200 * fractional_part(HP) // 0x212: When a Pokémon can pass through walls in a hallway, this counts up to 200 before the Pokémon turns in a random direction. s16 mobile_turn_timer; // 0x214: Somehow related to gaining exp through a joy ribbon. Set to 0 after @@ -726,10 +715,9 @@ struct entity { u8 field_0x2b; struct animation_control anim_ctrl; u16 sprite_index; // 0xA8 - u8 field_0xaa; + s8 field_0xaa; u8 field_0xab; - u8 field_0xac; - u8 field_0xad; + s16 field_0xac; u8 animation_group_id; // 0xAE u8 animation_group_id_mirror; // 0xAF u8 animation_id; // 0xB0 @@ -1142,9 +1130,9 @@ struct trap { u8 team; // 0x2: flags: 1-byte bitfield - //u8 flags; - bool8 f_unbreakable : 1; // If true, the trap can't be broken (for example, using a Trapbust Orb) - u8 flags_unk1 : 7; + u8 flags; + //bool8 f_unbreakable : 1; // If true, the trap can't be broken (for example, using a Trapbust Orb) + //u8 flags_unk1 : 7; u8 field_0x3; }; diff --git a/include/overlay_30.h b/include/overlay_30.h new file mode 100644 index 00000000..aca514b9 --- /dev/null +++ b/include/overlay_30.h @@ -0,0 +1,83 @@ +#ifndef PMD_SKY_OVERLAY_30_H +#define PMD_SKY_OVERLAY_30_H + +#include "dungeon_mode.h" + +struct Overlay30Main { + s32 state; + s32 unk4; + s32 unk8; + u8 unkC; + s8 isGameModeRescue; // GAME_MODE_RESCUE +}; + +struct DataSerializer { + u8 *stream; + u8 *end; + u32 count; +}; + +void ov30_02382820(s32 arg0, s32 arg1, s32 isGameModeRescue); +s32 ov30_02382874(void); +u8 ov30_0238298C(void); +void ov30_023829A0(void); +void ov30_023829CC(s32 arg0, s32 arg1, s8 arg2); +s32 ov30_02382A34(void); +void ov30_02382C30(void); +void WriteQuicksaveData(void *buffer, s32 size); +void ov30_02382D80(void *buffer); +void ov30_02382E94(void *buffer); +void ov30_02382FB8(void *buffer); +void ov30_02383084(void *buffer); +void ov30_023831E8(void *buffer, struct entity* entity); +void ov30_02383C70(void *buffer); +void ov30_0238409C(void *buffer); +void ov30_02384208(void *buffer); +void ov30_02384268(void *buffer, struct item *item); +void ov30_023842B0(void *buffer, struct tile* tile); +void ov30_023842F4(void *buffer, s32 arg1); +void ov30_02384400(void *buffer); +void ov30_0238483C(void *buffer, struct tile* tile); +void ov30_023848A0(void *buffer); +void ov30_02384A20(void *buffer); +void ov30_02384A94(void *buffer); +void ov30_02384B24(void *buffer, struct item *item); +void ov30_02384B84(void *buffer); +void ov30_02384C6C(void *buffer); +void ov30_02384CD4(void *buffer); +void ov30_02384E28(void *arg0, s32 arg1, s32 index); +struct entity* ov30_023859DC(s16 id, s16 apparent_id, s32 monster_slot_index); +struct entity* ov30_02385B10(s16 id, s16 apparent_id, s32 monster_slot_index); +void ov30_02385C3C(struct DataSerializer *r0, u8 *r1, s32 r2); // InitBitWriter +void ov30_02385C54(struct DataSerializer* r0, const void* src, s32 numBits); // WriteBits +void ov30_02385C8C(struct DataSerializer *r0, u8 *r1, s32 r2); // InitBitReader +void ov30_02385CA4(struct DataSerializer* r0, void* src, s32 numBits); // ReadBits +void FinishBitSerializer(struct DataSerializer *r0); +void ov30_02385CE0(struct DataSerializer *arg0, const void *string); +void ov30_02385CF0(struct DataSerializer *arg0, const void *string); +void ov30_02385D14(struct DataSerializer *arg0, u16 r1); +void ov30_02385D34(struct DataSerializer *arg0, s16 r1); +void ov30_02385D54(struct DataSerializer *arg0, u8 r1); +void ov30_02385D74(struct DataSerializer *arg0, s32 r1); +void ov30_02385D94(struct DataSerializer *arg0, s32 r1); +void ov30_02385DB4(struct DataSerializer *arg0, s32 r1); +void ov30_02385DD4(struct DataSerializer *arg0, u8 arg1); +void ov30_02385DF8(struct DataSerializer *arg0, struct position *pos); +void ov30_02385E20(struct DataSerializer *arg0, struct position *pos); +void ov30_02385E48(struct DataSerializer *arg0, s32 *arg1); +void ov30_02385E90(struct DataSerializer *arg0, u16 *arg1); +void ov30_02385EB8(struct DataSerializer *arg0, u8 *arg1, s32 num); +u16 ov30_02385EC4(struct DataSerializer *arg0); +s16 ov30_02385EDC(struct DataSerializer *arg0); +u8 ov30_02385EF4(struct DataSerializer *arg0); +u32 ov30_02385F0C(struct DataSerializer *arg0); +s32 ov30_02385F24(struct DataSerializer *arg0); +s32 ov30_02385F3C(struct DataSerializer *arg0); +u8 ov30_02385F54(struct DataSerializer *arg0); +void ov30_02385F7C(struct DataSerializer *arg0, struct position *pos); +void ov30_02385FB0(struct DataSerializer *arg0, struct position *pos); +void ov30_02385FE4(struct DataSerializer *arg0, s32 *arg1); +void ov30_02386040(struct DataSerializer *arg0, u16 *arg1); +void ov30_02386074(struct DataSerializer *arg0, u8 *arg1, s32 num); + +#endif // PMD_SKY_OVERLAY_30_H diff --git a/main.lsf b/main.lsf index 112bc170..8cc52435 100644 --- a/main.lsf +++ b/main.lsf @@ -1294,6 +1294,7 @@ Overlay OVY_29 Overlay OVY_30 { After OVY_29 + Object src/overlay_30_init.o Object asm/overlay_30.o } Overlay OVY_31 diff --git a/src/overlay_30_init.c b/src/overlay_30_init.c new file mode 100644 index 00000000..642a654a --- /dev/null +++ b/src/overlay_30_init.c @@ -0,0 +1,2218 @@ +#include "overlay_30.h" +#include "dungeon.h" +#include "overlay_29_02344AF8.h" +#include "overlay_29_022E1610.h" +#include "overlay_29_022F7364.h" +#include "dungeon_map_access.h" +#include + +extern struct dungeon *DUNGEON_PTR; + +extern struct Overlay30Main* ov30_023860A0; + +extern s32 ReadQuickSaveInfo(s32, s32); +extern s32 sub_02034DA8(); +extern void sub_02034EB4(s32, s32, s32); +extern void* MemAlloc(u32 len, u32 flags); +extern void MemFree(void *); + +#ifdef JAPAN + #define SAVE_CHECKSUM 0x20111122 +#else + #define SAVE_CHECKSUM 0x21061522 +#endif + +#define SAVE_VALID 1 +#define SAVE_INVALID_CHECKSUM 4 + +void ov30_02382820(s32 arg0, s32 arg1, s32 isGameModeRescue) +{ + + ov30_023860A0 = MemAlloc(sizeof(struct Overlay30Main), 5); + ov30_023860A0->unk4 = arg0; + ov30_023860A0->unk8 = arg1; + ov30_023860A0->unkC = 0; + ov30_023860A0->isGameModeRescue = isGameModeRescue; + ov30_023860A0->state = 0; +} + +s32 ov30_02382874(void) +{ + s32 saveStatus; + + switch (ov30_023860A0->state) { + default: + case 2: + break; + case 0: + saveStatus = ReadQuickSaveInfo(ov30_023860A0->unk4, ov30_023860A0->unk8); + if ((saveStatus == 0) && (*(u32*)(ov30_023860A0->unk4 + (ov30_023860A0->unk8 - 4)) != SAVE_CHECKSUM)) { + saveStatus = SAVE_INVALID_CHECKSUM; + } + if (saveStatus == 0) { + ov30_023860A0->unkC = 1; + ov30_023860A0->state = 3; + } else if (saveStatus == SAVE_VALID) { +#ifdef JAPAN + sub_02034EB4(0x40C, 0x4D8, 0); +#else + sub_02034EB4(0x40C, 0x247, 0); +#endif + ov30_023860A0->state = 2; + } else { +#ifdef JAPAN + sub_02034EB4(0x61C, 0x4DE, 0); +#else + sub_02034EB4(0x61C, 0x24D, 0); +#endif + ov30_023860A0->state = 1; + } + break; + case 1: + if (sub_02034DA8() == 0) { + ov30_023860A0->state = 3; + } + break; + case 3: + return 0; + } + return 1; +} + +u8 ov30_0238298C(void) +{ + return ov30_023860A0->unkC; +} + +void ov30_023829A0(void) +{ + if(ov30_023860A0 != NULL) + { + MemFree(ov30_023860A0); + ov30_023860A0 = NULL; + } +} + +struct Overlay30Other +{ + s32 unk0; + s32 unk4; + s32 unk8; + u8 unkC; + s32 unk10; +}; + +extern struct Overlay30Other* ov30_023860A4; + +// https://decomp.me/scratch/WMpFO +// 98.65% matching - Seth + +asm void ov30_023829CC(s32 arg0, s32 arg1, s8 arg2) +{ + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, r1 + mov r0, #0x14 + mov r1, #5 + mov r4, r2 + bl MemAlloc + ldr r1, =ov30_023860A4 + ldr r3, =SAVE_CHECKSUM + str r0, [r1] + str r6, [r0, #4] + ldr r0, [r1] + mov r2, #0 + str r5, [r0, #8] + ldr r0, [r1] + strb r4, [r0, #0xc] + ldr ip, [r1] + ldr r0, [ip, #8] + ldr ip, [ip, #4] + sub r0, r0, #4 + str r3, [ip, r0] + ldr r0, [r1] + str r2, [r0] + ldmia sp!, {r4, r5, r6, pc} +} + +extern const u8 OVERLAY30_JP_STRING_1[0xC]; // みさき様 +extern const u8 OVERLAY30_JP_STRING_2[0xC]; // やよい様 + +s32 NoteSaveBase(s32); +s32 WriteQuickSaveInfo(s32, s32); +void sub_02003B94(); +void sub_02003BC8(); +void sub_02029F88(s32, s32, s32); +void sub_02029FBC(); +s32 sub_02048DC4(s32); +void sub_02034D0C(void); + +struct trap* GetTrapInfo(struct entity*); +void memset(void*, s32, s32); /* extern */ + +s32 ov30_02382A34(void) +{ + switch (ov30_023860A4->unk0) { + default: + case 4: + break; + case 0: + if (ov30_023860A4->unkC != 0) { +#ifndef JAPAN + sub_02034EB4(0x408, 0x241, 0); +#else + sub_02034EB4(0x408, 0x408 + 0xCA, 0); +#endif + } else { +#ifndef JAPAN + sub_02034EB4(0x408, 0x242, 0); +#else + sub_02034EB4(0x408, 0x408 + 0xCB, 0); +#endif + } + ov30_023860A4->unk0 = 1; + break; + case 1: + if (sub_02034DA8() == 0) { + sub_02029F88(0xE0, 0x88, 1); + sub_02003B94(); + sub_02048DC4(0xF1209); + ov30_023860A4->unk10 = WriteQuickSaveInfo(ov30_023860A4->unk4, ov30_023860A4->unk8); + ov30_023860A4->unk0 = 2; + return 1; + } + break; + case 2: + if (ov30_023860A4->unk10 == 0) { + ov30_023860A4->unk10 = NoteSaveBase(2); + if (ov30_023860A4->unk10 == 0) { + ov30_023860A4->unk10 = sub_02048DC4(0xF1207); + } + } + sub_02003BC8(); + sub_02029FBC(); + switch (ov30_023860A4->unk10) + { + case 0: +#ifndef JAPAN + sub_02034EB4(0x41C, 0x244, 0); +#else + sub_02034EB4(0x41C, 0x41C + 0xB9, 0); +#endif + ov30_023860A4->unk0 = 3; + break; + case 1: +#ifndef JAPAN + sub_02034EB4(0x40C, 0x238, 0); +#else + sub_02034EB4(0x40C, 0x40C + 0xBD, 0); +#endif + ov30_023860A4->unk0 = 4; + break; + default: +#ifndef JAPAN + sub_02034EB4(0x41C, 0x239, 0); +#else + sub_02034EB4(0x41C, 0x41C + 0xAE, 0); +#endif + ov30_023860A4->unk0 = 3; + break; + } + break; + case 3: + if (sub_02034DA8() == 0) { + ov30_023860A4->unk0 = 5; + } + break; + case 5: + if (ov30_023860A4->unk10 == 0) { + return 2; + } else { + return 3; + } + } + return 0; +} + +void ov30_02382C30(void) +{ + if (ov30_023860A4 != NULL) { + sub_02034D0C(); + MemFree(ov30_023860A4); + ov30_023860A4 = NULL; + } +} + +void WriteQuicksaveData(void *buffer, s32 size) +{ + struct DataSerializer sp4; + s32 sp0; + s32 index; + + ov30_02385C3C(&sp4, buffer, size); + sp0 = 0; + ov30_02385C54(&sp4, &sp0, 4); + ov30_02385CE0(&sp4, OVERLAY30_JP_STRING_1); + ov30_02385C54(&sp4, &DUNGEON_PTR->id, 0xAC); + ov30_02385CE0(&sp4, OVERLAY30_JP_STRING_1); + ov30_02385D34(&sp4, DUNGEON_PTR->highest_enemy_level); + for(index = 0; index < 0x10; index++) + { + ov30_02385D14(&sp4, DUNGEON_PTR->spawn_table_entries_chosen[index]); + + } + ov30_02383C70(&sp4); + ov30_0238409C(&sp4); + ov30_02384208(&sp4); + ov30_02382D80(&sp4); + ov30_02382E94(&sp4); + ov30_02382FB8(&sp4); + ov30_02383084(&sp4); + ov30_02385CE0(&sp4, OVERLAY30_JP_STRING_2); + FinishBitSerializer(&sp4); +} + +void ov30_02382D80(void *buffer) +{ + u8 zeros[5]; + bool32 valid_item; + struct item* item; + struct entity* entity; + + for(int index1 = 0; index1 < 5; index1++) + { + zeros[index1] = 0; + } + ov30_02385CE0(buffer, OVERLAY30_JP_STRING_1); + for(int index2 = 0; index2 < 0x40; index2++) + { + valid_item = FALSE; + entity = DUNGEON_PTR->item_ptrs[index2]; + if ((entity != NULL) && (entity->type == ENTITY_ITEM)) { + item = GetItemInfo(entity); + ov30_02385C54(buffer, &item->flags, 1); + ov30_02385C54(buffer, &item->held_by, 1); + ov30_02385C54(buffer, &item->quantity, 2); + ov30_02385C54(buffer, &item->id, 2); + ov30_02385C54(buffer, &entity->pos.x, 1); + ov30_02385C54(buffer, &entity->pos.y, 1); + valid_item = TRUE; + } + if (valid_item == FALSE) { + ov30_02385C54(buffer, zeros, 8); + } + } +} + +void ov30_02382E94(void *buffer) +{ + u8 zeroes[7]; + bool32 var_r1; + struct trap* trap; + struct entity* entity; + + for(int index1 = 0; index1 < 7; index1++) + { + zeroes[index1] = -1; + } + ov30_02385CE0(buffer, OVERLAY30_JP_STRING_1); + for(int index2 = 0; index2 < 0x40; index2++) + { + entity = DUNGEON_PTR->trap_ptrs[index2]; + var_r1 = FALSE; + if ((entity != NULL) && (entity->type == ENTITY_TRAP)) { + trap = GetTrapInfo(entity); + ov30_02385C54(buffer, &trap->id, 1); + ov30_02385C54(buffer, &trap->team, 1); + ov30_02385C54(buffer, &trap->flags, 1); + ov30_02385C54(buffer, &trap->field_0x3, 1); + ov30_02385C54(buffer, &entity->is_visible, 1); + ov30_02385C54(buffer, &entity->pos.x, 1); + ov30_02385C54(buffer, &entity->pos.y, 1); + var_r1 = TRUE; + } + if (var_r1 == FALSE) { + ov30_02385C54(buffer, &zeroes, 7); + } + } +} + +void ov30_02382FB8(void *buffer) +{ + u8 sp1; + u8 sp0; + struct entity* entity; + + entity = &DUNGEON_PTR->entities[148]; + ov30_02385CE0(buffer, OVERLAY30_JP_STRING_1); + if (entity == NULL) { + return; + } + if (entity->type == ENTITY_HIDDEN_STAIRS) { + sp1 = 1; + ov30_02385C54(buffer, &sp1, 1); + ov30_02385C54(buffer, &entity->is_visible, 1); + ov30_02385C54(buffer, &entity->pos.x, 1); + ov30_02385C54(buffer, &entity->pos.y, 1); + } + else + { + sp0 = 0; + ov30_02385C54(buffer, &sp0, 1); + ov30_02385C54(buffer, &sp0, 1); + ov30_02385C54(buffer, &sp0, 1); + ov30_02385C54(buffer, &sp0, 1); + } +} + +void ov30_02383084(void *buffer) +{ + ov30_02385CE0(buffer, OVERLAY30_JP_STRING_1); + ov30_02385D74(buffer, DUNGEON_PTR->monster_unique_id_counter); + ov30_02385D74(buffer, DUNGEON_PTR->monster_unique_wrap_counter); + ov30_02385DD4(buffer, DUNGEON_PTR->plus_is_active[0]); + ov30_02385DD4(buffer, DUNGEON_PTR->plus_is_active[1]); + ov30_02385DD4(buffer, DUNGEON_PTR->minus_is_active[0]); + ov30_02385DD4(buffer, DUNGEON_PTR->minus_is_active[1]); + ov30_02385DD4(buffer, DUNGEON_PTR->decoy_is_active); + ov30_02385DD4(buffer, DUNGEON_PTR->mew_cannot_spawn); + ov30_02385DD4(buffer, DUNGEON_PTR->shaymin_sky_form_loaded); + ov30_02385D14(buffer, DUNGEON_PTR->deoxys_floor_id); + for(int var_r6 = 0; var_r6 < MAX_TEAM_MEMBERS; var_r6++) + { + ov30_023831E8(buffer, DUNGEON_PTR->monster_slots.party_members[var_r6]); + } + for(int var_r6_2 = 0; var_r6_2 < DUNGEON_MAX_WILD_POKEMON; var_r6_2++) + { + ov30_023831E8(buffer, DUNGEON_PTR->monster_slots.wild_pokemon[var_r6_2]); + } +} + +void ov30_023831E8(void *buffer, struct entity* entity) +{ + struct monster monster; + s32 sp18; + s32 sp14; + s32 sp10; + s16 spC; + s16 spA; + s16 sp8; + u8 sp7; + u8 sp6; + u8 sp5; + u8 sp4; + u8 sp3; + u8 sp2; + u8 sp1; + u8 sp0; + struct monster* monster_ptr; + s32 var_r5; + bool8 valid_entity; + bool8 valid_entity_type; + + sp18 = 0; + sp14 = 1; + ov30_02385D54(buffer, 0xAA); + ov30_02385D54(buffer, 0x55); + if (entity == NULL) { + valid_entity = FALSE; + } else { + if (entity->type != ENTITY_NOTHING) { + valid_entity_type = TRUE; + } else { + valid_entity_type = FALSE; + } + valid_entity = valid_entity_type; + } + if (valid_entity) { + monster_ptr = (struct monster *)entity->info; + ov30_02385C54(buffer, &sp14, 1); + ov30_02385C54(buffer, &entity->pos.x, 1); + ov30_02385C54(buffer, &entity->pos.y, 1); + ov30_02385C54(buffer, &entity->is_visible, 1); + ov30_02385C54(buffer, &entity->spawn_genid, 2); + } else { + memset(&monster, 0, sizeof(struct monster)); + monster_ptr = &monster; + ov30_02385C54(buffer, &sp18, 1); + ov30_02385C54(buffer, &sp18, 1); + ov30_02385C54(buffer, &sp18, 1); + ov30_02385C54(buffer, &sp18, 1); + ov30_02385C54(buffer, &sp18, 2); + } + ov30_02385D14(buffer, monster_ptr->flags); + spC = monster_ptr->apparent_id; + ov30_02385C54(buffer, &spC, 2); + spA = monster_ptr->id; + ov30_02385C54(buffer, &spA, 2); + ov30_02385DD4(buffer, monster_ptr->is_not_team_member); + ov30_02385DD4(buffer, monster_ptr->is_team_leader); + ov30_02385DD4(buffer, monster_ptr->is_ally); + ov30_02385D54(buffer, monster_ptr->shopkeeper); + ov30_02385D54(buffer, monster_ptr->level); + ov30_02385D54(buffer, (u8) monster_ptr->team_index); + ov30_02385D54(buffer, monster_ptr->joined_at); + ov30_02385D54(buffer, monster_ptr->joined_at_floor); + ov30_02385D34(buffer, monster_ptr->iq); + ov30_02385D34(buffer, monster_ptr->hp); + ov30_02385D34(buffer, monster_ptr->max_hp_stat); + ov30_02385D34(buffer, monster_ptr->max_hp_boost); + ov30_02385D34(buffer, monster_ptr->field_0x14); + ov30_02385D54(buffer, monster_ptr->offensive_stats[0]); + ov30_02385D54(buffer, monster_ptr->offensive_stats[1]); + ov30_02385D54(buffer, monster_ptr->defensive_stats[0]); + ov30_02385D54(buffer, monster_ptr->defensive_stats[1]); + ov30_02385D74(buffer, monster_ptr->exp); + ov30_02385D34(buffer, monster_ptr->stat_modifiers.offensive_stages[0]); + ov30_02385D34(buffer, monster_ptr->stat_modifiers.offensive_stages[1]); + ov30_02385D34(buffer, monster_ptr->stat_modifiers.defensive_stages[0]); + ov30_02385D34(buffer, monster_ptr->stat_modifiers.defensive_stages[1]); + ov30_02385D34(buffer, monster_ptr->stat_modifiers.hit_chance_stages[0]); + ov30_02385D34(buffer, monster_ptr->stat_modifiers.hit_chance_stages[1]); + ov30_02385D34(buffer, monster_ptr->stat_modifiers.flash_fire_boost); + ov30_02385DB4(buffer, monster_ptr->stat_modifiers.offensive_multipliers[0]); + ov30_02385DB4(buffer, monster_ptr->stat_modifiers.offensive_multipliers[1]); + ov30_02385DB4(buffer, monster_ptr->stat_modifiers.defensive_multipliers[0]); + ov30_02385DB4(buffer, monster_ptr->stat_modifiers.defensive_multipliers[1]); + ov30_02385C54(buffer, &monster_ptr->action.direction, 1); + ov30_02385C54(buffer, &monster_ptr->action.item_target_position.x, 1); + ov30_02385C54(buffer, &monster_ptr->action.item_target_position.y, 1); + sp7 = monster_ptr->types[0]; + ov30_02385C54(buffer, &sp7, 1); + sp6 = monster_ptr->types[1]; + ov30_02385C54(buffer, &sp6, 1); + sp5 = monster_ptr->abilities[0]; + ov30_02385C54(buffer, &sp5, 1); + sp4 = monster_ptr->abilities[1]; + ov30_02385C54(buffer, &sp4, 1); + ov30_02384268(buffer, &monster_ptr->held_item); + sp8 = monster_ptr->previous_held_item_id; + ov30_02385C54(buffer, &sp8, 2); + + for(var_r5 = 0; var_r5 < NUM_PREV_POS; var_r5++) + { + ov30_02385DF8(buffer, &monster_ptr->prev_pos[var_r5]); + } + + ov30_02385C54(buffer, &monster_ptr->ai_target.ai_objective, 1); + ov30_02385DD4(buffer, monster_ptr->ai_target.ai_not_next_to_target); + ov30_02385DD4(buffer, monster_ptr->ai_target.ai_targeting_enemy); + ov30_02385DD4(buffer, monster_ptr->ai_target.ai_turning_around); + ov30_02385D14(buffer, monster_ptr->ai_target.ai_target_spawn_genid); + ov30_02385DF8(buffer, &monster_ptr->ai_target.ai_target_pos); + + ov30_02385C54(buffer, &monster_ptr->iq_skill_menu_flags, 0x45); + ov30_02385C54(buffer, &monster_ptr->iq_skill_flags, 0x45); + + sp3 = monster_ptr->tactic; + ov30_02385C54(buffer, &sp3, 1); + ov30_02385D34(buffer, monster_ptr->hidden_power_base_power); + sp2 = monster_ptr->hidden_power_type; + ov30_02385C54(buffer, &sp2, 1); + ov30_02385D74(buffer, monster_ptr->unique_id); + ov30_02385D74(buffer, monster_ptr->wrap_pair_unique_id); + ov30_02385D74(buffer, monster_ptr->bide_damage_tally); + ov30_02385C54(buffer, &monster_ptr->sleep_class_status.sleep, 1); + ov30_02385D54(buffer, monster_ptr->sleep_class_status.sleep_turns); + ov30_02385C54(buffer, &monster_ptr->burn_class_status.burn, 1); + ov30_02385D54(buffer, monster_ptr->burn_class_status.burn_turns); + ov30_02385D54(buffer, monster_ptr->burn_class_status.burn_damage_countdown); + ov30_02385D54(buffer, monster_ptr->burn_class_status.badly_poisoned_damage_count); + ov30_02385C54(buffer, &monster_ptr->frozen_class_status.freeze, 1); + ov30_02385D54(buffer, monster_ptr->frozen_class_status.freeze_turns); + ov30_02385D54(buffer, monster_ptr->frozen_class_status.freeze_damage_countdown); + ov30_02385D74(buffer, monster_ptr->frozen_class_status.constriction_animation); + ov30_02385C54(buffer, &monster_ptr->cringe_class_status.cringe, 1); + ov30_02385D54(buffer, monster_ptr->cringe_class_status.cringe_turns); + ov30_02385C54(buffer, &monster_ptr->bide_class_status.bide, 1); + ov30_02385D54(buffer, monster_ptr->bide_class_status.bide_turns); + ov30_02385D54(buffer, monster_ptr->bide_class_status.bide_move_slot); + ov30_02385C54(buffer, &monster_ptr->reflect_class_status.reflect, 1); + ov30_02385D54(buffer, monster_ptr->reflect_class_status.reflect_turns); + ov30_02385D54(buffer, monster_ptr->reflect_class_status.reflect_damage_countdown); + + ov30_02385C54(buffer, &monster_ptr->curse_class_status.curse, 1); + ov30_02385DD4(buffer, monster_ptr->curse_class_status.curse_applier_non_team_member_flag); + ov30_02385DD4(buffer, monster_ptr->curse_class_status.dec); + ov30_02385D54(buffer, monster_ptr->curse_class_status.curse_turns); + ov30_02385D54(buffer, monster_ptr->curse_class_status.curse_damage_countdown); + + ov30_02385C54(buffer, &monster_ptr->leech_seed_class_status.leech_seed, 1); + ov30_02385D74(buffer, monster_ptr->leech_seed_class_status.statuses_applier_id); + ov30_02385D54(buffer, monster_ptr->leech_seed_class_status.leech_seed_source_monster_index); + ov30_02385D54(buffer, monster_ptr->leech_seed_class_status.leech_seed_turns); + ov30_02385D54(buffer, monster_ptr->leech_seed_class_status.leech_seed_damage_countdown); + + ov30_02385C54(buffer, &monster_ptr->sure_shot_class_status.sure_shot, 1); + ov30_02385D54(buffer, monster_ptr->sure_shot_class_status.sure_shot_turns); + + ov30_02385C54(buffer, &monster_ptr->long_toss_class_status.status, 1); + + + ov30_02385C54(buffer, &monster_ptr->invisible_class_status.status, 1); + ov30_02385D54(buffer, monster_ptr->invisible_class_status.turns); + ov30_02385C54(buffer, &monster_ptr->blinker_class_status.blinded, 1); + ov30_02385D54(buffer, monster_ptr->blinker_class_status.blinded_turns); + ov30_02385C54(buffer, &monster_ptr->muzzled, 1); + ov30_02385D54(buffer, monster_ptr->muzzled_turns); + ov30_02385C54(buffer, &monster_ptr->miracle_eye, 1); + ov30_02385D54(buffer, monster_ptr->miracle_eye_turns); + ov30_02385C54(buffer, &monster_ptr->magnet_rise, 1); + ov30_02385D54(buffer, monster_ptr->magnet_rise_turns); + ov30_02385DD4(buffer, monster_ptr->power_ears); + ov30_02385DD4(buffer, monster_ptr->scanning); + ov30_02385DD4(buffer, monster_ptr->stair_spotter); + ov30_02385DD4(buffer, monster_ptr->pickup_flag); +#ifndef JAPAN + ov30_02385DD4(buffer, monster_ptr->in_action); +#endif + ov30_02385DD4(buffer, monster_ptr->grudge); + ov30_02385D54(buffer, monster_ptr->exp_yield); + ov30_02385DD4(buffer, monster_ptr->exposed); + ov30_02385DD4(buffer, monster_ptr->type_changed); + ov30_02385DD4(buffer, monster_ptr->boss_flag); + ov30_02385D54(buffer, monster_ptr->terrified); + ov30_02385D54(buffer, monster_ptr->terrified_turns); + ov30_02385DD4(buffer, monster_ptr->use_held_item); + ov30_02385D54(buffer, monster_ptr->perish_song_turns); + ov30_02385D54(buffer, monster_ptr->no_slip_cap_counter); + ov30_02385D54(buffer, monster_ptr->field_0x10a); + sp1 = monster_ptr->two_turn_move_invincible; + ov30_02385C54(buffer, &sp1, 1); + sp0 = monster_ptr->decoy_ai_tracker; + ov30_02385C54(buffer, &sp0, 1); + sp10 = monster_ptr->speed_stage; + ov30_02385C54(buffer, &sp10, 4); + ov30_02385EB8(buffer, monster_ptr->speed_up_counters, 5); + ov30_02385EB8(buffer, monster_ptr->speed_down_counters, 5); + ov30_02385D54(buffer, monster_ptr->stockpile_stage); + ov30_02385D54(buffer, monster_ptr->field_0x11f); + ov30_02385D54(buffer, (u8) monster_ptr->random_movement); + + // moves + for(int move_index = 0; move_index < MAX_MON_MOVES; move_index++) + { + struct move *move = &monster_ptr->moves.moves[move_index]; + ov30_02385D54(buffer, monster_ptr->moves.moves[move_index].flags0); + ov30_02385D54(buffer, monster_ptr->moves.moves[move_index].flags2); + ov30_02385C54(buffer, &move->id, 2); + ov30_02385D54(buffer, monster_ptr->moves.moves[move_index].pp); + ov30_02385D54(buffer, monster_ptr->moves.moves[move_index].ginseng); + } + + ov30_02385D54(buffer, monster_ptr->moves.struggle_move_flags); + ov30_02385D34(buffer, monster_ptr->belly.integer); + ov30_02385D34(buffer, monster_ptr->belly.fractional); + ov30_02385D34(buffer, monster_ptr->max_belly.integer); + ov30_02385D34(buffer, monster_ptr->max_belly.fractional); + ov30_02385DD4(buffer, monster_ptr->ai_ally_skip); + ov30_02385DD4(buffer, monster_ptr->ai_next_to_target); + ov30_02385DD4(buffer, monster_ptr->waiting); + ov30_02385DD4(buffer, monster_ptr->famished); + ov30_02385DD4(buffer, monster_ptr->already_acted); + ov30_02385DD4(buffer, monster_ptr->should_evolve); + ov30_02385DD4(buffer, monster_ptr->using_charged_move); + ov30_02385DD4(buffer, monster_ptr->hit_grudge_monster); + ov30_02385DD4(buffer, monster_ptr->field_0x156); + ov30_02385D14(buffer, monster_ptr->state_flags); + ov30_02385D14(buffer, monster_ptr->prev_state_flags); + ov30_02385DD4(buffer, monster_ptr->apply_flash_fire_boost); + ov30_02385D54(buffer, monster_ptr->rollout_hit_counter); + ov30_02385DD4(buffer, monster_ptr->memento_warp_flag); + ov30_02385DD4(buffer, monster_ptr->overheat_special_attack_drop_flag); + ov30_02385DD4(buffer, monster_ptr->display_shadow); + ov30_02385D54(buffer, monster_ptr->sleep_talk_direction); + ov30_02385D54(buffer, monster_ptr->snore_direction); + ov30_02385D54(buffer, monster_ptr->field_0x179); + ov30_02385D54(buffer, monster_ptr->field_0x17a); + ov30_02385D54(buffer, monster_ptr->field_0x17b); + ov30_02385D54(buffer, monster_ptr->field_0x17c); + ov30_02385DF8(buffer, &monster_ptr->target_pos); + ov30_02385DB4(buffer, monster_ptr->field_0x188); + ov30_02385D14(buffer, monster_ptr->contact_ability_trigger_bitflags); + ov30_02385D94(buffer, monster_ptr->exclusive_item_trigger_bitflags); + ov30_02385D14(buffer, monster_ptr->field_0x190); + ov30_02385D34(buffer, monster_ptr->hp_fractional); + ov30_02385D34(buffer, monster_ptr->mobile_turn_timer); + ov30_02385D74(buffer, monster_ptr->unk_exp_tracker); + ov30_02385D54(buffer, monster_ptr->monster_behavior); + ov30_02385D54(buffer, monster_ptr->practice_swinger_flag); + ov30_02385D54(buffer, monster_ptr->anger_point_flag); + ov30_02385D34(buffer, monster_ptr->field_0x168); + ov30_02385D34(buffer, monster_ptr->bide_move_id); + ov30_02385D54(buffer, monster_ptr->force_turn); + + for(int var_r4 = 0; var_r4 < 5; var_r4++) + { + ov30_02385D54(buffer, monster_ptr->unk16B[var_r4]); + } +} + +void ov30_02383C70(void *buffer) +{ + struct position pos; + struct weather* weather; + void* gravity; + + int tile_index_x; + int tile_index_y; + + ov30_02385CE0(buffer, OVERLAY30_JP_STRING_1); + ov30_02385DD4(buffer, DUNGEON_PTR->gen_info.force_create_monster_house); + ov30_02385DD4(buffer, DUNGEON_PTR->gen_info.locked_door_opened); + ov30_02385DD4(buffer, DUNGEON_PTR->gen_info.kecleon_shop_spawned); + ov30_02385DD4(buffer, DUNGEON_PTR->gen_info.unk_one_room_flag); + ov30_02385DD4(buffer, DUNGEON_PTR->gen_info.dough_seed_extra_poke_flag); + ov30_02385D54(buffer, DUNGEON_PTR->gen_info.monster_house_room); + ov30_02385D54(buffer, DUNGEON_PTR->gen_info.unk_fixed_room_static_monster_tracker); + ov30_02385D54(buffer, DUNGEON_PTR->gen_info.hidden_stairs_type); + ov30_02385D54(buffer, DUNGEON_PTR->gen_info.hidden_floor_type); + ov30_02385D34(buffer, DUNGEON_PTR->gen_info.tileset_id); + ov30_02385D34(buffer, DUNGEON_PTR->gen_info.music_table_idx); + ov30_02385D34(buffer, DUNGEON_PTR->gen_info.staircase_visual_idx); + ov30_02385D34(buffer, DUNGEON_PTR->gen_info.fixed_room_id); + ov30_02385D34(buffer, DUNGEON_PTR->gen_info.floor_generation_attempts); + + for(tile_index_y = 0; tile_index_y < DUNGEON_MAX_SIZE_Y; tile_index_y++) + { + for(tile_index_x = 0; tile_index_x < DUNGEON_MAX_SIZE_X; tile_index_x++) + { + ov30_023842B0(buffer, &DUNGEON_PTR->gen_info.tiles[tile_index_y][tile_index_x]); + } + } + + ov30_02385DF8(buffer, &DUNGEON_PTR->gen_info.team_spawn_pos); + ov30_02385DF8(buffer, &DUNGEON_PTR->gen_info.stairs_pos); + + pos = DUNGEON_PTR->gen_info.hidden_stairs_pos; + if (pos.x == -1) { + pos.x = 0xFF; + } + if (pos.y == -1) { + pos.y = 0xFF; + } + ov30_02385DF8(buffer, &pos); + + for(int var_r5 = 0; var_r5 < 8; var_r5++) + { + ov30_02385E20(buffer, &DUNGEON_PTR->gen_info.individual_team_spawn_positions[var_r5]); + } + + for(int var_r5_2 = 0; var_r5_2 < 8; var_r5_2++) + { + ov30_02385D54(buffer, DUNGEON_PTR->unk_team_direction_array[var_r5_2]); + } + + ov30_02385E48(buffer, (s32 *)&DUNGEON_PTR->kecleon_shop_min_x); + ov30_02385E48(buffer, (s32 *)&DUNGEON_PTR->fixed_room_min_x); + ov30_02385E90(buffer, &DUNGEON_PTR->fixed_room_width); + + for(tile_index_y = 0; tile_index_y < 8; tile_index_y++) + { + for(tile_index_x = 0; tile_index_x < 8; tile_index_x++) + { + ov30_023842B0(buffer, &DUNGEON_PTR->fixed_room_tiles[tile_index_y][tile_index_x]); + ov30_02385D34(buffer, DUNGEON_PTR->field_0xd260[tile_index_y][tile_index_x]); + } + } + + weather = &DUNGEON_PTR->weather; + ov30_02385C54(buffer, &weather->weather, 1); + ov30_02385C54(buffer, &weather->natural_weather, 1); + + for(int weather_index = 0; weather_index < 8; weather_index++) + { + ov30_02385D14(buffer, (weather->weather_turns[weather_index])); + ov30_02385D14(buffer, (weather->artificial_permaweather_turns[weather_index])); + } + + ov30_02385D54(buffer, weather->weather_damage_counter); + ov30_02385D54(buffer, weather->mud_sport_turns); + ov30_02385D54(buffer, weather->water_sport_turns); + ov30_02385DD4(buffer, weather->nullify_weather); + + gravity = &DUNGEON_PTR->gravity; + ov30_02385C54(buffer, gravity, 1); + ov30_02385C54(buffer, gravity + 1, 1); + + ov30_02385D34(buffer, DUNGEON_PTR->victory_counter); +} + +void ov30_0238409C(void *buffer) +{ + ov30_02385CE0(buffer, OVERLAY30_JP_STRING_1); + ov30_02385D54(buffer, DUNGEON_PTR->display_data.field_0x20); + ov30_02385D54(buffer, DUNGEON_PTR->display_data.visibility_range); + ov30_02385DD4(buffer, DUNGEON_PTR->display_data.blinded); + ov30_02385DD4(buffer, DUNGEON_PTR->display_data.luminous); + ov30_02385DD4(buffer, DUNGEON_PTR->display_data.natural_lighting); + ov30_02385DD4(buffer, DUNGEON_PTR->display_data.can_see_enemies); + ov30_02385DD4(buffer, DUNGEON_PTR->display_data.field_0x33); + ov30_02385DD4(buffer, DUNGEON_PTR->display_data.can_see_items); + ov30_02385DD4(buffer, DUNGEON_PTR->display_data.field_0x32); + ov30_02385DD4(buffer, DUNGEON_PTR->display_data.field_0x34); + ov30_02385DD4(buffer, DUNGEON_PTR->display_data.can_see_traps); + ov30_02385DD4(buffer, DUNGEON_PTR->display_data.hallucinating); + ov30_02385DD4(buffer, DUNGEON_PTR->display_data.can_see_stairs); + ov30_02385DD4(buffer, DUNGEON_PTR->display_data.field_0x2C); +} + +void ov30_02384208(void *buffer) +{ + ov30_02385D34(buffer, DUNGEON_PTR->field_0x2cb02); + ov30_02385D34(buffer, DUNGEON_PTR->field_0x2cb04); + ov30_02385D34(buffer, DUNGEON_PTR->dungeon_music_playing_id); +} + +void ov30_02384268(void *buffer, struct item *item) +{ + ov30_02385C54(buffer, &item->flags, 1); + ov30_02385C54(buffer, &item->held_by, 1); + ov30_02385C54(buffer, &item->quantity, 2); + ov30_02385C54(buffer, &item->id, 2); +} + +void ov30_023842B0(void *buffer, struct tile* tile) +{ + ov30_02385D14(buffer, tile->terrain_flags); + ov30_02385D14(buffer, tile->spawn_or_visibility_flags.spawn); + ov30_02385C54(buffer, &tile->room, 1); + ov30_02385C54(buffer, &tile->field_0x6, 1); +} + +#ifndef EUROPE +void ov29_022FB920(); +#else +void ov29_022FB920(s32); +#endif + +void ov30_02384C6C(void*); +void ov30_02384CD4(void*); +void SpawnItem(void*, struct item*, s32); +void MemZero(void*, s32); +void BindTrapToTile(struct tile*, struct trap*, s32); +struct trap *SpawnTrap(u8, struct position*, u8, s32); +void ov29_02338768(struct position*); +void ov30_02384E28(void *, s32, s32); + +void ov30_023842F4(void *buffer, s32 arg1) +{ + struct DataSerializer sp4; + u32 sp0; + + ov30_02385C8C(&sp4, buffer, arg1); + ov30_02385CA4(&sp4, &sp0, 4); + ov30_02385CF0(&sp4, OVERLAY30_JP_STRING_1); + ov30_02385CA4(&sp4, &DUNGEON_PTR->id, 0xAC); + ov30_02385CF0(&sp4, OVERLAY30_JP_STRING_1); + + DUNGEON_PTR->highest_enemy_level = ov30_02385EDC(&sp4); + + for(int var_r4 = 0; var_r4 < 0x10; var_r4++) + { + DUNGEON_PTR->spawn_table_entries_chosen[var_r4] = ov30_02385EC4(&sp4); + } + + ov30_02384400(&sp4); + ov30_023848A0(&sp4); + ov30_02384A20(&sp4); + ov30_02384A94(&sp4); + ov30_02384B84(&sp4); + ov30_02384C6C(&sp4); + ov30_02384CD4(&sp4); + ov30_02385CF0(&sp4, OVERLAY30_JP_STRING_2); + FinishBitSerializer(&sp4); +#ifdef EUROPE + ov29_022FB920(0); +#else + ov29_022FB920(); +#endif +} + +void ov30_02384400(void *buffer) { + + struct weather* weather; + void* temp_r4_2; + s32 tile_index_y; + s32 tile_index_x; + + ov30_02385CF0(buffer, OVERLAY30_JP_STRING_1); + DUNGEON_PTR->gen_info.force_create_monster_house = ov30_02385F54(buffer); + DUNGEON_PTR->gen_info.locked_door_opened = ov30_02385F54(buffer); + DUNGEON_PTR->gen_info.kecleon_shop_spawned = ov30_02385F54(buffer); + DUNGEON_PTR->gen_info.unk_one_room_flag = ov30_02385F54(buffer); + DUNGEON_PTR->gen_info.dough_seed_extra_poke_flag = ov30_02385F54(buffer); + DUNGEON_PTR->gen_info.monster_house_room = ov30_02385EF4(buffer); + DUNGEON_PTR->gen_info.unk_fixed_room_static_monster_tracker = ov30_02385EF4(buffer); + DUNGEON_PTR->gen_info.hidden_stairs_type = (enum hidden_stairs_type) ov30_02385EF4(buffer); + DUNGEON_PTR->gen_info.hidden_floor_type = (enum hidden_stairs_type) ov30_02385EF4(buffer); + + DUNGEON_PTR->gen_info.tileset_id = ov30_02385EDC(buffer); + DUNGEON_PTR->gen_info.music_table_idx = ov30_02385EDC(buffer); + DUNGEON_PTR->gen_info.staircase_visual_idx = ov30_02385EDC(buffer); + DUNGEON_PTR->gen_info.fixed_room_id = (enum fixed_room_id) ov30_02385EDC(buffer); + DUNGEON_PTR->gen_info.floor_generation_attempts = ov30_02385EDC(buffer); + + for(tile_index_x = 0; tile_index_x < DUNGEON_MAX_SIZE_Y; tile_index_x++) + { + for(tile_index_y = 0; tile_index_y < DUNGEON_MAX_SIZE_X; tile_index_y++) + { + ov30_0238483C(buffer, &DUNGEON_PTR->gen_info.tiles[tile_index_x][tile_index_y]); + } + } + + ov30_02385F7C(buffer, &DUNGEON_PTR->gen_info.team_spawn_pos); + ov30_02385F7C(buffer, &DUNGEON_PTR->gen_info.stairs_pos); + ov30_02385F7C(buffer, &DUNGEON_PTR->gen_info.hidden_stairs_pos); + + + if (DUNGEON_PTR->gen_info.hidden_stairs_pos.x == 0xFF) { + DUNGEON_PTR->gen_info.hidden_stairs_pos.x = -1; + } + if (DUNGEON_PTR->gen_info.hidden_stairs_pos.y == 0xFF) { + DUNGEON_PTR->gen_info.hidden_stairs_pos.y = -1; + } + + for(int var_r5_2 = 0; var_r5_2 < 8; var_r5_2++) + { + ov30_02385FB0(buffer, &DUNGEON_PTR->gen_info.individual_team_spawn_positions[var_r5_2]); + } + + for(int var_r5_2 = 0; var_r5_2 < 8; var_r5_2++) + { + DUNGEON_PTR->unk_team_direction_array[var_r5_2] = (enum direction_id) ov30_02385EF4(buffer); + } + + ov30_02385FE4(buffer, (s32*)&DUNGEON_PTR->kecleon_shop_min_x); + ov30_02385FE4(buffer, (s32*)&DUNGEON_PTR->fixed_room_min_x); + ov30_02386040(buffer, &DUNGEON_PTR->fixed_room_width); + + + + for(tile_index_x = 0; tile_index_x < 8; tile_index_x++) + { + for(tile_index_y = 0; tile_index_y < 8; tile_index_y++) + { + ov30_0238483C(buffer, &DUNGEON_PTR->fixed_room_tiles[tile_index_x][tile_index_y]); + DUNGEON_PTR->field_0xd260[tile_index_x][tile_index_y] = ov30_02385EDC(buffer); + } + } + + + // weather + weather = &DUNGEON_PTR->weather; + memset(weather, 0, sizeof(struct weather)); + ov30_02385CA4(buffer, &weather->weather, 1); + ov30_02385CA4(buffer, &weather->natural_weather, 1); + + + for(int weather_index = 0; weather_index < 8; weather_index++) + { + weather->weather_turns[weather_index] = ov30_02385EC4(buffer); + weather->artificial_permaweather_turns[weather_index] = ov30_02385EC4(buffer); + } + + weather->weather_damage_counter = ov30_02385EF4(buffer); + weather->mud_sport_turns = ov30_02385EF4(buffer); + weather->water_sport_turns = ov30_02385EF4(buffer); + weather->nullify_weather = ov30_02385F54(buffer); + + temp_r4_2 = &DUNGEON_PTR->gravity; + MemZero(temp_r4_2, 2); + ov30_02385CA4(buffer, temp_r4_2, 1); + ov30_02385CA4(buffer, temp_r4_2 + 1, 1); + DUNGEON_PTR->victory_counter = ov30_02385EDC(buffer); +} + +void ov30_0238483C(void *buffer, struct tile* tile) +{ + memset(tile, 0, sizeof(struct tile)); + tile->terrain_flags = ov30_02385EC4(buffer); + tile->spawn_or_visibility_flags.spawn = ov30_02385EC4(buffer); + ov30_02385CA4(buffer, &tile->room, 1); + ov30_02385CA4(buffer, &tile->field_0x6, 1); + tile->monster = NULL; + tile->object = NULL; +} + + +void ov30_023848A0(void *buffer) +{ + ov30_02385CF0(buffer, OVERLAY30_JP_STRING_1); + + DUNGEON_PTR->display_data.camera_target = NULL; + DUNGEON_PTR->display_data.field_0x20 = ov30_02385EF4(buffer); + DUNGEON_PTR->display_data.visibility_range = ov30_02385EF4(buffer); + DUNGEON_PTR->display_data.blinded = ov30_02385F54(buffer); + DUNGEON_PTR->display_data.luminous = ov30_02385F54(buffer); + DUNGEON_PTR->display_data.natural_lighting = ov30_02385F54(buffer); + DUNGEON_PTR->display_data.can_see_enemies = ov30_02385F54(buffer); + DUNGEON_PTR->display_data.field_0x33 = ov30_02385F54(buffer); + DUNGEON_PTR->display_data.can_see_items = ov30_02385F54(buffer); + DUNGEON_PTR->display_data.field_0x32 = ov30_02385F54(buffer); + DUNGEON_PTR->display_data.field_0x34 = ov30_02385F54(buffer); + DUNGEON_PTR->display_data.can_see_traps = ov30_02385F54(buffer); + DUNGEON_PTR->display_data.hallucinating = ov30_02385F54(buffer); + DUNGEON_PTR->display_data.can_see_stairs = ov30_02385F54(buffer); + DUNGEON_PTR->display_data.field_0x2C = ov30_02385F54(buffer); +} + +void ov30_02384A20(void *buffer) +{ + DUNGEON_PTR->field_0x2cb02 = ov30_02385EDC(buffer); + DUNGEON_PTR->field_0x2cb04 = ov30_02385EDC(buffer); + DUNGEON_PTR->dungeon_music_playing_id = (enum music_id) ov30_02385EDC(buffer); + DUNGEON_PTR->field_0x2cb04 = 0x3E7; +} + +void ov30_02384A94(void *buffer) +{ + struct item item; + struct position sp0; + bool32 var_r0; + + ov29_02344B1C(); + ov30_02385CF0(buffer, OVERLAY30_JP_STRING_1); + for(int var_r6 = 0; var_r6 < 0x40; var_r6++) + { + ov30_02384B24(buffer, &item); + ov30_02385F7C(buffer, &sp0); + var_r0 = (item.flags & ITEM_FLAG_EXISTS) ? TRUE : FALSE; + if (var_r0 & 0xFF) { + SpawnItem(&sp0, &item, 0); + } + } + ov29_02344B30(); +} + +void ov30_02384B24(void *buffer, struct item *item) +{ + memset(item, 0, sizeof(struct item)); + ov30_02385CA4(buffer, &item->flags, 1); + ov30_02385CA4(buffer, &item->held_by, 1); + ov30_02385CA4(buffer, &item->quantity, 2); + ov30_02385CA4(buffer, &item->id, 2); +} + +void ov30_02384B84(void *buffer) +{ + struct position pos; + u8 sp3; + u8 sp2; + u8 sp1; + u8 sp0; + struct trap* trap; + struct tile* tile; + u32 temp_r5; + + ov30_02385CF0(buffer, OVERLAY30_JP_STRING_1); + for(int trap_index = 0; trap_index < 0x40; trap_index++) + { + sp3 = 6; + sp2 = 0; + sp1 = 0; + ov30_02385CA4(buffer, &sp3, 1); + ov30_02385CA4(buffer, &sp2, 1); + ov30_02385CA4(buffer, &sp1, 1); + ov30_02385CA4(buffer, &sp0, 1); + temp_r5 = ov30_02385F54(buffer); + ov30_02385F7C(buffer, &pos); + if (sp3 != 0xFF) { + tile = GetTileSafe(pos.x, pos.y); + trap = SpawnTrap(sp3, &pos, sp2, 0); + if (trap != 0) { + BindTrapToTile(tile, trap, temp_r5); + } + } + } +} + +void ov30_02384C6C(void *buffer) +{ + struct position sp0; + u32 temp_r4; + u32 temp_r5; + + ov30_02385CF0(buffer, OVERLAY30_JP_STRING_1); + temp_r5 = ov30_02385F54(buffer); + temp_r4 = ov30_02385F54(buffer); + ov30_02385F7C(buffer, &sp0); + if (temp_r5 != 0) { + ov29_02338768(&sp0); + DUNGEON_PTR->entities[148].is_visible = temp_r4; + } +} + +void ov30_02384CD4(void *buffer) +{ + ov30_02385CF0(buffer, OVERLAY30_JP_STRING_1); + DUNGEON_PTR->monster_unique_id_counter = ov30_02385F0C(buffer); + DUNGEON_PTR->monster_unique_wrap_counter = ov30_02385F0C(buffer); + DUNGEON_PTR->plus_is_active[0] = ov30_02385F54(buffer); + DUNGEON_PTR->plus_is_active[1] = ov30_02385F54(buffer); + DUNGEON_PTR->minus_is_active[0] = ov30_02385F54(buffer); + DUNGEON_PTR->minus_is_active[1] = ov30_02385F54(buffer); + DUNGEON_PTR->decoy_is_active = ov30_02385F54(buffer); + DUNGEON_PTR->mew_cannot_spawn = ov30_02385F54(buffer); + DUNGEON_PTR->shaymin_sky_form_loaded = ov30_02385F54(buffer); + DUNGEON_PTR->deoxys_floor_id = (enum monster_id) ov30_02385EC4(buffer); + + for(int var_r6 = 0; var_r6 < MAX_TEAM_MEMBERS; var_r6++) + { + ov30_02384E28(buffer, 1, var_r6); + } + + for(int var_r6_2 = 0; var_r6_2 < DUNGEON_MAX_WILD_POKEMON; var_r6_2++) + { + ov30_02384E28(buffer, 0, var_r6_2); + } +} + +void UpdateEntityPixelPos(void*, void *); +void UpdateIqSkillsWrapper(void*); +void ov29_02338F24(s16, s16); +extern struct entity* LEADER_PTR; + +// 98.65% matched - Seth +// https://decomp.me/scratch/g3lUO + +asm void ov30_02384E28(void *arg0, s32 arg1, s32 index) +{ +#ifdef JAPAN +#define OV30_02384E28_OFFSET -4 +#define OV30_02384E28_OFFSET_2 -1 +#else +#define OV30_02384E28_OFFSET 0 +#define OV30_02384E28_OFFSET_2 0 +#endif +#ifdef JAPAN + stmdb sp!, {r4, r5, r6, r7, r8, r9, r10, r11, lr} +#else + stmdb sp!, {r3, r4, r5, r6, r7, r8, r9, r10, r11, lr} +#endif + sub sp, sp, #0x258 + OV30_02384E28_OFFSET + mov r10, r0 + mov r9, r1 + mov r8, r2 + add r0, sp, #0x18 + mov r1, #0 + mov r2, #0x240 + OV30_02384E28_OFFSET + bl memset + mov r0, r10 + bl ov30_02385EF4 + mov r0, r10 + bl ov30_02385EF4 + mov r0, r10 + bl ov30_02385EF4 + mov r11, r0 + mov r0, r10 + add r1, sp, #0x14 + bl ov30_02385F7C + mov r0, r10 + bl ov30_02385F54 + mov r5, r0 + mov r0, r10 + bl ov30_02385EC4 + mov r6, r0 + ldr r1, =LEADER_PTR + mov r2, #0 + mov r0, r10 + str r2, [r1] + bl ov30_02385EC4 + strh r0, [sp, #0x18] + add r0, sp, #0xe + mov r1, #0 + mov r2, #2 + bl memset + mov r0, r10 + add r1, sp, #0xe + mov r2, #2 + bl ov30_02385CA4 + ldrsh r2, [sp, #0xe] + add r0, sp, #0xc + mov r1, #0 + strh r2, [sp, #0x1c] + mov r2, #2 + bl memset + mov r0, r10 + add r1, sp, #0xc + mov r2, #2 + bl ov30_02385CA4 + ldrsh r1, [sp, #0xc] + mov r0, r10 + strh r1, [sp, #0x1a] + bl ov30_02385F54 + strb r0, [sp, #0x1e] + mov r0, r10 + bl ov30_02385F54 + strb r0, [sp, #0x1f] + mov r0, r10 + bl ov30_02385F54 + strb r0, [sp, #0x20] + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0x21] + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0x22] + mov r0, r10 + bl ov30_02385EF4 + strh r0, [sp, #0x24] + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0x60] + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0x61] + mov r0, r10 + bl ov30_02385EDC + strh r0, [sp, #0x26] + mov r0, r10 + bl ov30_02385EDC + strh r0, [sp, #0x28] + mov r0, r10 + bl ov30_02385EDC + strh r0, [sp, #0x2a] + mov r0, r10 + bl ov30_02385EDC + strh r0, [sp, #0x2e] + mov r0, r10 + bl ov30_02385EDC + strh r0, [sp, #0x2c] + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0x32] + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0x33] + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0x34] + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0x35] + mov r0, r10 + bl ov30_02385F0C + str r0, [sp, #0x38] + mov r0, r10 + bl ov30_02385EDC + strh r0, [sp, #0x3c] + mov r0, r10 + bl ov30_02385EDC + strh r0, [sp, #0x3e] + mov r0, r10 + bl ov30_02385EDC + strh r0, [sp, #0x40] + mov r0, r10 + bl ov30_02385EDC + strh r0, [sp, #0x42] + mov r0, r10 + bl ov30_02385EDC + strh r0, [sp, #0x44] + mov r0, r10 + bl ov30_02385EDC + strh r0, [sp, #0x46] + mov r0, r10 + bl ov30_02385EDC + strh r0, [sp, #0x48] + mov r0, r10 + bl ov30_02385F3C + str r0, [sp, #0x4c] + mov r0, r10 + bl ov30_02385F3C + str r0, [sp, #0x50] + mov r0, r10 + bl ov30_02385F3C + str r0, [sp, #0x54] + mov r0, r10 + bl ov30_02385F3C + str r0, [sp, #0x58] + mov r0, #0 + strh r0, [sp, #0x62] + mov r0, r10 + add r1, sp, #0x64 + mov r2, #1 + bl ov30_02385CA4 + mov r0, #7 + strb r0, [sp, #0x65] + mov r0, r10 + add r1, sp, #0x72 + bl ov30_02385F7C + add r0, sp, #8 + mov r1, #0 + mov r2, #1 + bl memset + mov r0, r10 + add r1, sp, #8 + mov r2, #1 + bl ov30_02385CA4 + ldrb r2, [sp, #8] + add r0, sp, #7 + mov r1, #0 + strb r2, [sp, #0x76] + mov r2, #1 + bl memset + mov r0, r10 + add r1, sp, #7 + mov r2, #1 + bl ov30_02385CA4 + ldrb r2, [sp, #7] + add r0, sp, #6 + mov r1, #0 + strb r2, [sp, #0x77] + mov r2, #1 + bl memset + mov r0, r10 + add r1, sp, #6 + mov r2, #1 + bl ov30_02385CA4 + ldrb r2, [sp, #6] + add r0, sp, #5 + mov r1, #0 + strb r2, [sp, #0x78] + mov r2, #1 + bl memset + mov r0, r10 + add r1, sp, #5 + mov r2, #1 + bl ov30_02385CA4 + ldrb r2, [sp, #5] + mov r0, r10 + add r1, sp, #0x7a + strb r2, [sp, #0x79] + bl ov30_02384B24 + add r0, sp, #0xa + mov r1, #0 + mov r2, #2 + bl memset + add r1, sp, #0xa + mov r0, r10 + mov r2, #2 + bl ov30_02385CA4 + ldrsh r0, [sp, #0xa] + mov r4, #0 + add r7, sp, #0x82 + strh r0, [sp, #0x80] +_02385158: + mov r0, r10 + add r1, r7, r4, lsl #2 + bl ov30_02385F7C + add r4, r4, #1 + cmp r4, #4 + blt _02385158 + add r1, sp, #0x94 + mov r0, r10 + mov r2, #1 + bl ov30_02385CA4 + mov r0, r10 + bl ov30_02385F54 + strb r0, [sp, #0x95] + mov r0, r10 + bl ov30_02385F54 + strb r0, [sp, #0x96] + mov r0, r10 + bl ov30_02385F54 + strb r0, [sp, #0x97] + mov r0, r10 + bl ov30_02385EC4 + strh r0, [sp, #0x98] + mov r0, #0 + str r0, [sp, #0x9c] + str r0, [sp, #0xa0] + mov r0, r10 + add r1, sp, #0xa4 + bl ov30_02385F7C + mov r0, r10 + add r1, sp, #0xa8 + mov r2, #0x45 + bl ov30_02385CA4 + mov r0, r10 + add r1, sp, #0xb4 + mov r2, #0x45 + bl ov30_02385CA4 + add r0, sp, #4 + mov r1, #0 + mov r2, #1 + bl memset + mov r0, r10 + add r1, sp, #4 + mov r2, #1 + bl ov30_02385CA4 + ldrb r1, [sp, #4] + mov r0, r10 + strb r1, [sp, #0xc0] + bl ov30_02385EDC + strh r0, [sp, #0x5c] + add r0, sp, #3 + mov r1, #0 + mov r2, #1 + bl memset + mov r0, r10 + add r1, sp, #3 + mov r2, #1 + bl ov30_02385CA4 + ldrb r1, [sp, #3] + mov r0, r10 + strb r1, [sp, #0x5e] + bl ov30_02385F0C + str r0, [sp, #0xc8] + mov r0, r10 + bl ov30_02385F0C + str r0, [sp, #0xcc] + mov r0, r10 + bl ov30_02385F0C + str r0, [sp, #0xd0] + mov r0, r10 + add r1, sp, #0xd5 + mov r2, #1 + bl ov30_02385CA4 + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0xd6] + add r1, sp, #0xd7 + mov r0, r10 + mov r2, #1 + bl ov30_02385CA4 + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0xd8] + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0xd9] + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0xda] + mov r0, r10 + add r1, sp, #0xdc + mov r2, #1 + bl ov30_02385CA4 + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0xe4] + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0xe5] + mov r0, r10 + bl ov30_02385F0C + str r0, [sp, #0xe0] + mov r0, r10 + add r1, sp, #0xe8 + mov r2, #1 + bl ov30_02385CA4 + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0xe9] + mov r0, r10 + add r1, sp, #0xea + mov r2, #1 + bl ov30_02385CA4 + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0xeb] + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0xec] + mov r0, r10 + add r1, sp, #0xed + mov r2, #1 + bl ov30_02385CA4 + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0xee] + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0xef] + mov r0, r10 + add r1, sp, #0xf0 + mov r2, #1 + bl ov30_02385CA4 + mov r0, r10 + bl ov30_02385F54 + strb r0, [sp, #0xf1] + mov r0, r10 + bl ov30_02385F54 + strb r0, [sp, #0xf2] + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0xf3] + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0xf4] + mov r0, r10 + add r1, sp, #0xf8 + mov r2, #1 + bl ov30_02385CA4 + mov r0, r10 + bl ov30_02385F0C + str r0, [sp, #0xfc] + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0x100] + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0x101] + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0x102] + mov r0, r10 + add r1, sp, #0x104 + mov r2, #1 + bl ov30_02385CA4 + mov r0, r10 + bl ov30_02385EF4 + add r1, sp, #0x100 + strb r0, [sp, #0x105] + mov r0, r10 + add r1, r1, #6 + mov r2, #1 + bl ov30_02385CA4 + add r1, sp, #0x100 + mov r0, r10 + add r1, r1, #7 + mov r2, #1 + bl ov30_02385CA4 + mov r0, r10 + bl ov30_02385EF4 + add r1, sp, #0x100 + strb r0, [sp, #0x108] + mov r0, r10 + add r1, r1, #9 + mov r2, #1 + bl ov30_02385CA4 + mov r0, r10 + bl ov30_02385EF4 + add r1, sp, #0x100 + strb r0, [sp, #0x10a] + mov r0, r10 + add r1, r1, #0xb + mov r2, #1 + bl ov30_02385CA4 + mov r0, r10 + bl ov30_02385EF4 + add r1, sp, #0x100 + strb r0, [sp, #0x10c] + mov r0, r10 + add r1, r1, #0xd + mov r2, #1 + bl ov30_02385CA4 + mov r0, r10 + bl ov30_02385EF4 + add r1, sp, #0x100 + strb r0, [sp, #0x10e] + add r1, r1, #0xf + mov r0, r10 + mov r2, #1 + bl ov30_02385CA4 + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0x110] + mov r0, r10 + bl ov30_02385F54 + strb r0, [sp, #0x111] + mov r0, r10 + bl ov30_02385F54 + strb r0, [sp, #0x112] + mov r0, r10 + bl ov30_02385F54 + strb r0, [sp, #0x113] + mov r0, r10 + bl ov30_02385F54 + strb r0, [sp, #0x114] + mov r0, r10 + bl ov30_02385F54 +#ifndef JAPAN + strb r0, [sp, #0x11b] + mov r0, r10 + bl ov30_02385F54 +#endif + strb r0, [sp, #0x115] + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0x120 + OV30_02384E28_OFFSET_2] + mov r0, r10 + bl ov30_02385F54 + strb r0, [sp, #0x116] + mov r0, r10 + bl ov30_02385F54 + strb r0, [sp, #0x117] + mov r0, r10 + bl ov30_02385F54 + strb r0, [sp, #0x118] + mov r0, r10 + bl ov30_02385EF4 +#ifdef JAPAN + strb r0, [sp, #0x11b] + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0x11c] + mov r0, r10 + bl ov30_02385F54 + strb r0, [sp, #0x120] + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0x11d] + mov r0, r10 + bl ov30_02385EF4 +#else + strb r0, [sp, #0x11c] + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0x11d] + mov r0, r10 + bl ov30_02385F54 + strb r0, [sp, #0x121] + mov r0, r10 + bl ov30_02385EF4 +#endif + strb r0, [sp, #0x11e] + mov r0, r10 + bl ov30_02385EF4 +#ifndef JAPAN + strb r0, [sp, #0x11f] + mov r0, r10 + bl ov30_02385EF4 +#endif + strb r0, [sp, #0x122 + OV30_02384E28_OFFSET_2] + add r0, sp, #2 + mov r1, #0 + mov r2, #1 + bl memset + mov r0, r10 + add r1, sp, #2 + mov r2, #1 + bl ov30_02385CA4 + ldrb r3, [sp, #2] + add r0, sp, #1 + mov r1, #0 + mov r2, #1 + strb r3, [sp, #0x123 + OV30_02384E28_OFFSET_2] + bl memset + add r1, sp, #1 + mov r0, r10 + mov r2, #1 + bl ov30_02385CA4 + ldrb r2, [sp, #1] + add r0, sp, #0x10 + mov r1, #0 + strb r2, [sp, #0x124 + OV30_02384E28_OFFSET_2] + mov r2, #4 + bl memset + mov r0, r10 + add r1, sp, #0x10 + mov r2, #4 + bl ov30_02385CA4 + ldr r1, [sp, #0x10] + mov r0, r10 + str r1, [sp, #0x128 + OV30_02384E28_OFFSET] + add r1, sp, #0x12c + OV30_02384E28_OFFSET + mov r2, #5 + bl ov30_02386074 + add r1, sp, #0x100 + mov r0, r10 + add r1, r1, #0x31 + OV30_02384E28_OFFSET + mov r2, #5 + bl ov30_02386074 + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0x136 + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0x137 + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385EF4 + str r0, [sp, #0x138 + OV30_02384E28_OFFSET] + mov r7, #0 + add r4, sp, #0x18 +_02385630: + mov r0, r10 + bl ov30_02385EF4 + add r1, r4, r7, lsl #3 + strb r0, [r1, #0x124 + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385EF4 + add r1, r4, r7, lsl #3 + add r1, r1, #0x100 + strh r0, [r1, #0x26 + OV30_02384E28_OFFSET] + add r1, sp, #0x13c + OV30_02384E28_OFFSET + add r1, r1, r7, lsl #3 + mov r0, r10 + add r1, r1, #4 + mov r2, #2 + bl ov30_02385CA4 + mov r0, r10 + bl ov30_02385EF4 + add r1, r4, r7, lsl #3 + strb r0, [r1, #0x12a + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385EF4 + add r1, r4, r7, lsl #3 + add r7, r7, #1 + strb r0, [r1, #0x12b + OV30_02384E28_OFFSET] + cmp r7, #4 + blt _02385630 + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0x15c + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385EDC + add r1, sp, #0x100 + strh r0, [r1, #0x5e + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385EDC + add r1, sp, #0x100 + strh r0, [r1, #0x60 + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385EDC + add r1, sp, #0x100 + strh r0, [r1, #0x62 + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385EDC + add r1, sp, #0x100 + strh r0, [r1, #0x64 + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385F54 + strb r0, [sp, #0x166 + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385F54 + strb r0, [sp, #0x167 + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385F54 + strb r0, [sp, #0x169 + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385F54 + strb r0, [sp, #0x168 + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385F54 + strb r0, [sp, #0x16a + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385F54 + strb r0, [sp, #0x16b + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385F54 + strb r0, [sp, #0x16c + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385F54 + strb r0, [sp, #0x16d + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385F54 + strb r0, [sp, #0x16e + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385EC4 + add r1, sp, #0x100 + strh r0, [r1, #0x70 + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385EC4 + add r1, sp, #0x100 + strh r0, [r1, #0x72 + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385F54 + strb r0, [sp, #0x174 + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0x175 + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385F54 + strb r0, [sp, #0x176 + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385F54 + strb r0, [sp, #0x177 + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385F54 + strb r0, [sp, #0x178 + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0x18f + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0x190 + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0x191 + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0x192 + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0x193 + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385EF4 + add r1, sp, #0x100 + strb r0, [sp, #0x194 + OV30_02384E28_OFFSET] + mov r0, r10 + add r1, r1, #0x96 + OV30_02384E28_OFFSET + bl ov30_02385F7C + mov r0, r10 + bl ov30_02385F3C + str r0, [sp, #0x1a0 + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385EC4 + add r1, sp, #0x100 + strh r0, [r1, #0xaa + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385F24 + str r0, [sp, #0x1a4 + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385EC4 + add r1, sp, #0x100 + strh r0, [r1, #0xa8 + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385EDC + add r1, sp, #0x200 + strh r0, [r1, #0x28 + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385EDC + add r1, sp, #0x200 + strh r0, [r1, #0x2a + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385F0C + str r0, [sp, #0x22c + OV30_02384E28_OFFSET] + add r0, sp, #0 + mov r1, #0 + mov r2, #1 + bl memset + mov r0, r10 + add r1, sp, #0 + mov r2, #1 + bl ov30_02385CA4 + ldrb r1, [sp] + mov r0, r10 + strb r1, [sp, #0xd4] + bl ov30_02385EF4 + strb r0, [sp, #0x17e + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0x17f + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385EDC + add r1, sp, #0x100 + strh r0, [r1, #0x80 + OV30_02384E28_OFFSET] + mov r0, r10 + bl ov30_02385EDC + strh r0, [sp, #0xc4] + mov r0, r10 + bl ov30_02385EF4 + strb r0, [sp, #0x182 + OV30_02384E28_OFFSET] + mov r4, #0 + add r7, sp, #0x18 +_023858D8: + mov r0, r10 + bl ov30_02385EF4 + add r1, r7, r4 + add r4, r4, #1 + strb r0, [r1, #0x16b + OV30_02384E28_OFFSET] + cmp r4, #5 + blt _023858D8 + ldr r0, =LEADER_PTR + mov r1, #0 + str r1, [r0] + cmp r11, #0 + beq _023859D0 + cmp r9, #0 + beq _02385924 + ldrsh r0, [sp, #0x1a] + ldrsh r1, [sp, #0x1c] + mov r2, r8 + bl ov30_023859DC + b _02385934 +_02385924: + ldrsh r0, [sp, #0x1a] + ldrsh r1, [sp, #0x1c] + mov r2, r8 + bl ov30_02385B10 +_02385934: + mov r7, r0 + cmp r7, #0 + beq _023859D0 + ldrsh r0, [sp, #0x14] + ldrsh r1, [sp, #0x16] + ldr r4, [r7, #0xb4] + bl GetTileSafe + ldrh r1, [sp, #0x14] + add r10, sp, #0x18 + mov r9, r4 + strh r1, [r7, #8] + ldrh r1, [sp, #0x16] + mov r8, #0x24 + OV30_02384E28_OFFSET_2 + strh r1, [r7, #0xa] + ldrh r1, [sp, #0x14] + strh r1, [r7, #4] + ldrh r1, [sp, #0x16] + strh r1, [r7, #6] + str r7, [r0, #0xc] + strb r5, [r7, #0x20] + strh r6, [r7, #0x26] +_02385988: + ldmia r10!, {r0, r1, r2, r3} + stmia r9!, {r0, r1, r2, r3} + subs r8, r8, #1 + bne _02385988 +#ifdef JAPAN + ldmia r10, {r0, r1, r2} + stmia r9, {r0, r1, r2} +#endif + ldr r0, =LEADER_PTR + mov r1, #0 + str r1, [r0] + ldrb r0, [r4, #7] + cmp r0, #0 + beq _023859BC + ldrsh r0, [r7, #4] + ldrsh r1, [r7, #6] + bl ov29_02338F24 +_023859BC: + mov r0, r7 + bl UpdateIqSkillsWrapper + mov r0, r7 + mov r1, #0 + bl UpdateEntityPixelPos +_023859D0: + add sp, sp, #0x258 + OV30_02384E28_OFFSET +#ifdef JAPAN + ldmia sp!, {r4, r5, r6, r7, r8, r9, r10, r11, pc} +#else + ldmia sp!, {r3, r4, r5, r6, r7, r8, r9, r10, r11, pc} +#endif +} + +void PopulateActiveMonsterPtrs(void); +void ov29_022DE9F8(u8); +s32 ov29_022DEA10(u32); +void ov29_022E1AF4(u16, u16); +void ov29_022E1EC4(u16, u16); +s32 ov29_022E1C84(s32*, s32*, s16, s16, s32); +s32 ov29_022E2018(s32*, s32*, s16, s16, s32); + +static inline struct monster *GetEntInfo(struct entity *ent) +{ + return ent->info; +} + +struct entity* ov30_023859DC(s16 id, s16 apparent_id, s32 monster_slot_index) +{ + s32 sp8; + s32 sp4; + s16 sprite_index; + s32 temp_r5; + struct monster* monster; + struct entity* entity; + + temp_r5 = ov29_022DEA10(1); + sprite_index = DungeonGetSpriteIndex(apparent_id); + if (ov29_022E1C84(&sp8, &sp4, apparent_id, sprite_index, temp_r5) == 0) { + return NULL; + } + entity = DUNGEON_PTR->monster_slot_ptrs[monster_slot_index]; + + entity->type = ENTITY_MONSTER; + entity->field_0x24 = monster_slot_index; + + monster = &DUNGEON_PTR->monsters[monster_slot_index]; + entity->info = monster; + + monster->id = id; + GetEntInfo(entity)->apparent_id = apparent_id; + GetEntInfo(entity)->is_not_team_member = 0; + GetEntInfo(entity)->is_ally = 0; + entity->sprite_index = sprite_index; + entity->field_0xac = (sp8 + 0x1A); + entity->animation_group_id = 7; + entity->animation_id = 0; + entity->animation_group_id_mirror = 0xFF; + entity->animation_id_mirror0 = 1; + entity->field_0xb3 = 1; + entity->elevation = 0; + PopulateActiveMonsterPtrs(); + GetEntInfo(entity)->field_0x17a = sp8; + GetEntInfo(entity)->field_0x17b = sp4; + ov29_022E1AF4(sp8, sp4); + entity->field_0xaa = temp_r5; + ov29_022DE9F8(temp_r5); + entity->field_0x28 = 0; + return entity; +} + +struct entity* ov30_02385B10(s16 id, s16 apparent_id, s32 monster_slot_index) +{ + s32 sp8; + s32 sp4; + s16 sprite_index; + s32 temp_r5; + struct monster* monster; + struct entity* entity; + + temp_r5 = ov29_022DEA10(2); + sprite_index = DungeonGetSpriteIndex(apparent_id); + + if(ov29_022E2018(&sp8, &sp4, apparent_id, sprite_index, temp_r5) == 0) + { + return NULL; + } + + + // NOTE: Wild Pokemon Ptrs are after Team members.. + entity = DUNGEON_PTR->monster_slot_ptrs[MAX_TEAM_MEMBERS + monster_slot_index]; + + entity->type = ENTITY_MONSTER; + entity->field_0x24 = monster_slot_index; + entity->transparent = 0; + + monster = &DUNGEON_PTR->wild_monsters[monster_slot_index]; + entity->info = monster; + + monster->id = id; + GetEntInfo(entity)->apparent_id = apparent_id; + GetEntInfo(entity)->is_not_team_member = TRUE; + entity->sprite_index = sprite_index; + entity->field_0xac = (sp8 + 0x62); + entity->animation_group_id = 7; + entity->animation_id = 0; + entity->animation_group_id_mirror = 0xFF; + entity->animation_id_mirror0 = 1; + entity->field_0xb3 = 1; + entity->elevation = 0; + + GetEntInfo(entity)->field_0x17a = sp8; + GetEntInfo(entity)->field_0x17b = sp4; + ov29_022E1EC4(sp8, sp4); + PopulateActiveMonsterPtrs(); + entity->field_0xaa = temp_r5; + ov29_022DE9F8(temp_r5); + entity->field_0x28 = 0; + return entity; +} + + +void ov30_02385C3C(struct DataSerializer *r0, u8 *r1, s32 r2) +{ + r0->stream = r1; + r0->count = 0; + r0->end = r1 + r2; +} + +void ov30_02385C54(struct DataSerializer *r0, const void* src, s32 numBits) +{ + u8 *temp = (u8*)src; + while (numBits != 0) { + *r0->stream = *temp;; + r0->stream++; + r0->count++; + temp++; + numBits--; + } +} + +void ov30_02385C8C(struct DataSerializer *r0, u8 *r1, s32 r2) +{ + r0->stream = r1; + r0->count = 0; + r0->end = r1 + r2; +} + +void ov30_02385CA4(struct DataSerializer* r0, void* src, s32 numBits) +{ + u8 *temp = (u8*)src; + while (numBits != 0) { + *temp = *r0->stream; + r0->stream++; + r0->count++; + temp++; + numBits--; + } +} + + +void FinishBitSerializer(struct DataSerializer *r0) +{ +} + +void ov30_02385CE0(struct DataSerializer *arg0, const void *string) +{ + ov30_02385C54(arg0, string, 8); +} + +void ov30_02385CF0(struct DataSerializer *arg0, const void *string) +{ + u8 buffer[0xC]; + ov30_02385CA4(arg0, buffer, 8); + buffer[8] = 0; +} + +void ov30_02385D14(struct DataSerializer *arg0, u16 r1) +{ + ov30_02385C54(arg0, &r1, 2); +} + +void ov30_02385D34(struct DataSerializer *arg0, s16 r1) +{ + ov30_02385C54(arg0, &r1, 2); +} + +void ov30_02385D54(struct DataSerializer *arg0, u8 r1) +{ + ov30_02385C54(arg0, &r1, 1); +} + +void ov30_02385D74(struct DataSerializer *arg0, s32 r1) +{ + ov30_02385C54(arg0, &r1, 4); +} + +void ov30_02385D94(struct DataSerializer *arg0, s32 r1) +{ + ov30_02385C54(arg0, &r1, 4); +} + +void ov30_02385DB4(struct DataSerializer *arg0, s32 r1) +{ + ov30_02385C54(arg0, &r1, 4); +} + +void ov30_02385DD4(struct DataSerializer *arg0, u8 arg1) +{ + u8 sp0; + u8 var_r3; + + if (arg1 != 0) { + var_r3 = 0xFF; + } else { + var_r3 = 0; + } + sp0 = var_r3; + ov30_02385C54(arg0, &sp0, 1); +} + +void ov30_02385DF8(struct DataSerializer *arg0, struct position *pos) +{ + ov30_02385C54(arg0, &pos->x, 1); + ov30_02385C54(arg0, &pos->y, 1); +} + +void ov30_02385E20(struct DataSerializer *arg0, struct position *pos) +{ + ov30_02385C54(arg0, &pos->x, 2); + ov30_02385C54(arg0, &pos->y, 2); +} + + +void ov30_02385E48(struct DataSerializer *arg0, s32 *arg1) +{ + ov30_02385C54(arg0, arg1, 1); + ov30_02385C54(arg0, arg1 + 1, 1); + ov30_02385C54(arg0, arg1 + 2, 1); + ov30_02385C54(arg0, arg1 + 3, 1); +} + +void ov30_02385E90(struct DataSerializer *arg0, u16 *arg1) +{ + ov30_02385C54(arg0, arg1, 1); + ov30_02385C54(arg0, arg1 + 1, 1); +} + +void ov30_02385EB8(struct DataSerializer *arg0, u8 *arg1, s32 num) +{ + ov30_02385C54(arg0, arg1, num); +} + +u16 ov30_02385EC4(struct DataSerializer *arg0) +{ + u16 sp0; + ov30_02385CA4(arg0, &sp0, 2); + return sp0; +} + +s16 ov30_02385EDC(struct DataSerializer *arg0) +{ + s16 sp0; + ov30_02385CA4(arg0, &sp0, 2); + return sp0; +} + +u8 ov30_02385EF4(struct DataSerializer *arg0) +{ + u8 sp0; + ov30_02385CA4(arg0, &sp0, 1); + return sp0; +} + +u32 ov30_02385F0C(struct DataSerializer *arg0) +{ + u32 sp0; + ov30_02385CA4(arg0, &sp0, 4); + return sp0; +} + +s32 ov30_02385F24(struct DataSerializer *arg0) +{ + s32 sp0; + ov30_02385CA4(arg0, &sp0, 4); + return sp0; +} + +s32 ov30_02385F3C(struct DataSerializer *arg0) +{ + s32 sp0; + ov30_02385CA4(arg0, &sp0, 4); + return sp0; +} + +u8 ov30_02385F54(struct DataSerializer *arg0) +{ + u8 sp0; + u8 var_r0; + + ov30_02385CA4(arg0, &sp0, 1); + if (sp0 != 0) { + var_r0 = 1; + } else { + var_r0 = 0; + } + return var_r0; +} + +void ov30_02385F7C(struct DataSerializer *arg0, struct position *pos) +{ + pos->x = 0; + pos->y = 0; + + ov30_02385CA4(arg0, &pos->x, 1); + ov30_02385CA4(arg0, &pos->y, 1); +} + +void ov30_02385FB0(struct DataSerializer *arg0, struct position *pos) +{ + pos->x = 0; + pos->y = 0; + + ov30_02385CA4(arg0, &pos->x, 2); + ov30_02385CA4(arg0, &pos->y, 2); +} + + +void ov30_02385FE4(struct DataSerializer *arg0, s32 *arg1) +{ + + *arg1 = 0; + *(arg1 + 1) = 0; + *(arg1 + 2) = 0; + *(arg1 + 3) = 0; + + ov30_02385CA4(arg0, arg1, 1); + ov30_02385CA4(arg0, arg1 + 1, 1); + ov30_02385CA4(arg0, arg1 + 2, 1); + ov30_02385CA4(arg0, arg1 + 3, 1); +} + +void ov30_02386040(struct DataSerializer *arg0, u16 *arg1) +{ + *arg1 = 0; + *(arg1 + 1) = 0; + ov30_02385CA4(arg0, arg1, 1); + ov30_02385CA4(arg0, arg1 + 1, 1); +} + + +void ov30_02386074(struct DataSerializer *arg0, u8 *arg1, s32 num) +{ + ov30_02385CA4(arg0, arg1, num); +} +