diff --git a/asm/include/overlay_28.inc b/asm/include/overlay_28.inc index eec985ad..2dcc8838 100644 --- a/asm/include/overlay_28.inc +++ b/asm/include/overlay_28.inc @@ -1,23 +1,15 @@ #pragma once -.public DrawTextInWindow .public GetStringFromFileVeneer .public MemAlloc -.public MemFree -.public NewWindow -.public ov11_022E6E8C -.public ov11_022E6EC8 +.public ov28_0238ABD4 +.public ov28_0238ACFC +.public ov28_0238AD0C +.public ov28_0238AD24 +.public ov28_0238AD28 +.public ov28_0238AD2C +.public ov28_0238AD80 +.public ov28_0238ADA0 .public strcpy -.public sub_02025B80 -.public sub_02025B90 -.public sub_02025C14 -.public sub_02027170 -.public sub_02027228 -.public sub_0202810C -.public sub_0202822C -.public sub_0202825C -.public sub_02028270 -.public sub_02028354 .public sub_02028EE8 .public sub_02028F88 -.public sub_02028FA0 .public sub_020348E4 diff --git a/asm/include/overlay_28_0238A5CC.inc b/asm/include/overlay_28_0238A5CC.inc new file mode 100644 index 00000000..b7ff2401 --- /dev/null +++ b/asm/include/overlay_28_0238A5CC.inc @@ -0,0 +1,22 @@ +#pragma once +.public DrawTextInWindow +.public NewWindow +.public ov11_022E6E8C +.public ov11_022E6EC8 +.public ov28_0238A140 +.public ov28_0238A184 +.public ov28_0238A490 +.public ov28_0238A58C +.public ov28_0238AD0C +.public ov28_0238AD80 +.public ov28_0238ADA0 +.public sub_02025B80 +.public sub_02025B90 +.public sub_0202810C +.public sub_0202822C +.public sub_0202825C +.public sub_02028270 +.public sub_02028354 +.public sub_02028EE8 +.public sub_02028F88 +.public sub_02028FA0 diff --git a/asm/overlay_28.s b/asm/overlay_28.s index c1ac3f1c..6887367b 100644 --- a/asm/overlay_28.s +++ b/asm/overlay_28.s @@ -319,596 +319,3 @@ _0238A580: .word ov28_0238ADA0 _0238A584: .word ov28_0238AD24 _0238A588: .word ov28_0238AD2C arm_func_end ov28_0238A490 - - arm_func_start ov28_0238A58C -ov28_0238A58C: ; 0x0238A58C - stmdb sp!, {r3, lr} - mov r0, #0 - bl ov28_0238AB5C - bl sub_02025C14 - bl sub_02027170 - bl sub_02027228 - ldr r0, _0238A5C8 ; =ov28_0238AD80 - ldr r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r3, pc} - bl MemFree - ldr r0, _0238A5C8 ; =ov28_0238AD80 - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_0238A5C8: .word ov28_0238AD80 - arm_func_end ov28_0238A58C - - arm_func_start ov28_0238A5CC -ov28_0238A5CC: ; 0x0238A5CC - stmdb sp!, {r4, r5, r6, r7, r8, lr} - sub sp, sp, #0x18 - ldr r6, _0238AB50 ; =ov28_0238AD80 - ldr r1, [r6] - ldr r0, [r1] - cmp r0, #6 - addls pc, pc, r0, lsl #2 - b _0238AB44 -_0238A5EC: ; jump table - b _0238A608 ; case 0 - b _0238A6BC ; case 1 - b _0238A6C8 ; case 2 - b _0238A6A0 ; case 3 - b _0238A678 ; case 4 - b _0238AAC0 ; case 5 - b _0238AA90 ; case 6 -_0238A608: - bl ov11_022E6EC8 - cmp r0, #0 - beq _0238AB44 - ldr r0, _0238AB54 ; =ov28_0238ADA0 - mov r1, r6 - ldr r0, [r0] - cmp r0, #0 - bne _0238A648 - ldr r2, [r1] - mov r0, #1 - add r2, r2, #0x58 - add r3, r2, #0x800 - mov r1, #0x10 - mov r2, #0x68 - bl ov28_0238ABD4 - b _0238A664 -_0238A648: - ldr r2, [r1] - mov r0, #0 - add r2, r2, #0x58 - add r3, r2, #0x800 - mov r1, #0x10 - mov r2, #0x60 - bl ov28_0238ABD4 -_0238A664: - ldr r0, _0238AB50 ; =ov28_0238AD80 - mov r1, #4 - ldr r0, [r0] - str r1, [r0] - b _0238AB44 -_0238A678: - bl ov11_022E6EC8 - cmp r0, #0 - beq _0238AB44 - mov r0, #1 - bl ov11_022E6E8C - mov r0, r6 - ldr r0, [r0] - mov r1, #3 - str r1, [r0] - b _0238AB44 -_0238A6A0: - bl ov11_022E6EC8 - cmp r0, #0 - movne r0, r6 - ldrne r0, [r0] - movne r1, #1 - strne r1, [r0] - b _0238AB44 -_0238A6BC: - mov r0, #2 - str r0, [r1] - b _0238AB44 -_0238A6C8: - mov r4, #0 - mvn r7, #1 -_0238A6D0: - ldr r0, [r6] - add r0, r0, r4 - ldrsb r8, [r0, #9] - cmp r8, r7 - beq _0238A718 - mov r0, r8 - bl sub_02028354 - cmp r0, #2 - bne _0238A718 - mov r0, r8 - bl sub_02028FA0 - cmp r0, #0 - bne _0238A718 - mov r0, r8 - bl sub_0202822C - ldr r0, [r6] - add r0, r0, r4 - strb r7, [r0, #9] -_0238A718: - add r4, r4, #1 - cmp r4, #0x14 - blt _0238A6D0 - ldr r0, _0238AB54 ; =ov28_0238ADA0 - ldr r2, [r0] - cmp r2, #0 - bne _0238A854 - ldr r0, _0238AB50 ; =ov28_0238AD80 - ldr r0, [r0] - add r0, r0, #0x20 - bl ov28_0238A184 - ldr r1, _0238AB50 ; =ov28_0238AD80 - mov r5, r0 - ldr r1, [r1] - ldr r0, [r1, #0x24] - mov r0, r0, asr #0x10 - cmp r0, #0xc0 - blt _0238A774 - add r0, r1, #0x3c - add r0, r0, #0x400 - bl ov28_0238A184 - orr r5, r5, r0 - b _0238AA48 -_0238A774: - add r4, r1, #0x3c - ldr r0, [r4, #0x410] - cmp r0, #0 - beq _0238A790 - cmp r0, #1 - beq _0238A814 - b _0238AA48 -_0238A790: - mvn r0, #3 - str r0, [sp, #0x10] - ldr r0, [r4, #0x404] - add r1, sp, #0x10 - mov r0, r0, asr #0x10 - str r0, [sp, #0x14] - ldr r0, [r4, #0x40c] - and r0, r0, #0xff - bl sub_02028F88 - ldr r0, _0238AB54 ; =ov28_0238ADA0 - ldr r1, _0238AB58 ; =ov28_0238AD0C - ldr r0, [r0] - ldr r2, [r4, #0x404] - ldr r0, [r1, r0, lsl #2] - add r0, r2, r0 - str r0, [r4, #0x404] - ldr r0, [sp, #0x14] - cmp r0, #0x88 - ble _0238AA48 - ldr r0, [r4, #0x40c] - mov r2, #0x20 - add r1, sp, #0x10 - mov r3, r2 - and r0, r0, #0xff - bl sub_02028EE8 - ldr r0, [r4, #0x40c] - mov r1, #1 - and r0, r0, #0xff - bl sub_0202825C - ldr r0, [r4, #0x410] - add r0, r0, #1 - str r0, [r4, #0x410] - b _0238AA48 -_0238A814: - ldr r1, [r4, #0x40c] - add r0, r4, #0x400 - and r1, r1, #0xff - bl ov28_0238A140 - mvn r1, #3 - mov r0, #0 - str r1, [sp, #0x10] - str r0, [sp, #0x14] - ldr r0, [r4, #0x40c] - add r1, sp, #0x10 - and r0, r0, #0xff - bl sub_02028F88 - ldr r0, [r4, #0x410] - add r0, r0, #1 - str r0, [r4, #0x410] - b _0238AA48 -_0238A854: - ldr r0, _0238AB50 ; =ov28_0238AD80 - ldr r4, [r0] - ldr r0, [r4, #0x24] - mov r0, r0, asr #0x10 - cmp r0, #8 - blt _0238A87C - add r0, r4, #0x20 - bl ov28_0238A184 - mov r5, r0 - b _0238A924 -_0238A87C: - ldr r0, [r4, #0x30] - cmp r0, #0 - beq _0238A8A4 - cmp r0, #1 - ldreq r0, _0238AB58 ; =ov28_0238AD0C - ldreq r1, [r4, #0x24] - ldreq r0, [r0, r2, lsl #2] - addeq r0, r1, r0 - streq r0, [r4, #0x24] - b _0238A924 -_0238A8A4: - mvn r0, #3 - str r0, [sp, #8] - ldr r0, [r4, #0x24] - add r1, sp, #8 - mov r0, r0, asr #0x10 - str r0, [sp, #0xc] - ldr r0, [r4, #0x2c] - and r0, r0, #0xff - bl sub_02028F88 - ldr r0, _0238AB54 ; =ov28_0238ADA0 - ldr r1, _0238AB58 ; =ov28_0238AD0C - ldr r0, [r0] - ldr r2, [r4, #0x24] - ldr r0, [r1, r0, lsl #2] - add r0, r2, r0 - str r0, [r4, #0x24] - ldr r0, [sp, #0xc] - cmp r0, #0x88 - ble _0238A924 - ldr r0, [r4, #0x2c] - mov r2, #0x20 - add r1, sp, #8 - mov r3, r2 - and r0, r0, #0xff - bl sub_02028EE8 - ldr r0, [r4, #0x2c] - mov r1, #1 - and r0, r0, #0xff - bl sub_0202825C - ldr r0, [r4, #0x30] - add r0, r0, #1 - str r0, [r4, #0x30] -_0238A924: - ldr r0, _0238AB50 ; =ov28_0238AD80 - ldr r4, [r0] - ldr r0, [r4, #0x24] - mov r0, r0, asr #0x10 - cmp r0, #0x60 - blt _0238AA48 - ldr r0, [r4, #0x440] - mov r0, r0, asr #0x10 - cmp r0, #0x68 - blt _0238A960 - add r0, r4, #0x3c - add r0, r0, #0x400 - bl ov28_0238A184 - orr r5, r5, r0 - b _0238AA48 -_0238A960: - ldr r0, [r4, #0x44c] - cmp r0, #0 - beq _0238A980 - cmp r0, #1 - beq _0238A9A8 - cmp r0, #2 - beq _0238AA2C - b _0238AA48 -_0238A980: - add r0, r4, #0x58 - mov r1, #0x10 - sub r2, r1, #0x50 - add r3, r0, #0x800 - mov r0, #1 - bl ov28_0238ABD4 - ldr r0, [r4, #0x44c] - add r0, r0, #1 - str r0, [r4, #0x44c] - b _0238AA48 -_0238A9A8: - mvn r0, #3 - str r0, [sp] - ldr r0, [r4, #0x440] - add r1, sp, #0 - mov r0, r0, asr #0x10 - str r0, [sp, #4] - ldr r0, [r4, #0x448] - and r0, r0, #0xff - bl sub_02028F88 - ldr r0, _0238AB54 ; =ov28_0238ADA0 - ldr r1, _0238AB58 ; =ov28_0238AD0C - ldr r0, [r0] - ldr r2, [r4, #0x440] - ldr r0, [r1, r0, lsl #2] - add r0, r2, r0 - str r0, [r4, #0x440] - ldr r0, [sp, #4] - cmp r0, #0xd0 - ble _0238AA48 - ldr r0, [r4, #0x448] - mov r2, #0x20 - add r1, sp, #0 - mov r3, r2 - and r0, r0, #0xff - bl sub_02028EE8 - ldr r0, [r4, #0x448] - mov r1, #1 - and r0, r0, #0xff - bl sub_0202825C - ldr r0, [r4, #0x44c] - add r0, r0, #1 - str r0, [r4, #0x44c] - b _0238AA48 -_0238AA2C: - ldr r0, _0238AB54 ; =ov28_0238ADA0 - ldr r1, _0238AB58 ; =ov28_0238AD0C - ldr r0, [r0] - ldr r2, [r4, #0x440] - ldr r0, [r1, r0, lsl #2] - add r0, r2, r0 - str r0, [r4, #0x440] -_0238AA48: - ldr r0, _0238AB50 ; =ov28_0238AD80 - ldr r2, [r0] - ldrb r0, [r2, #8] - cmp r0, #0 - bne _0238AA78 - ldr r0, [r2, #0x20] - cmp r0, #3 - blt _0238AA78 - mov r1, #1 - mov r0, #2 - strb r1, [r2, #8] - bl ov11_022E6E8C -_0238AA78: - cmp r5, #0 - ldreq r0, _0238AB50 ; =ov28_0238AD80 - moveq r1, #6 - ldreq r0, [r0] - streq r1, [r0] - b _0238AB44 -_0238AA90: - mov r0, #0 - mov r1, #1 - bl sub_0202825C - mov r0, #1 - mov r1, r0 - bl sub_0202825C - mov r0, #0 - bl sub_02025B80 - mov r0, #0 - bl ov11_022E6E8C - mov r0, #4 - b _0238AB48 -_0238AAC0: - mvn r0, #3 - bl ov28_0238AB5C - mov r0, #0 - bl ov11_022E6E8C - ldr r0, _0238AB54 ; =ov28_0238ADA0 - ldr r0, [r0] - cmp r0, #5 - addls pc, pc, r0, lsl #2 - b _0238AB2C -_0238AAE4: ; jump table - b _0238AAFC ; case 0 - b _0238AB04 ; case 1 - b _0238AB0C ; case 2 - b _0238AB14 ; case 3 - b _0238AB1C ; case 4 - b _0238AB24 ; case 5 -_0238AAFC: - mov r0, #0 - b _0238AB30 -_0238AB04: - mov r0, #1 - b _0238AB30 -_0238AB0C: - mov r0, #2 - b _0238AB30 -_0238AB14: - mov r0, #3 - b _0238AB30 -_0238AB1C: - mov r0, #4 - b _0238AB30 -_0238AB24: - mov r0, #5 - b _0238AB30 -_0238AB2C: - mvn r0, #0 -_0238AB30: - bl sub_02025B90 - ldr r0, _0238AB50 ; =ov28_0238AD80 - mov r1, #0 - ldr r0, [r0] - str r1, [r0] -_0238AB44: - mov r0, #1 -_0238AB48: - add sp, sp, #0x18 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_0238AB50: .word ov28_0238AD80 -_0238AB54: .word ov28_0238ADA0 -_0238AB58: .word ov28_0238AD0C - arm_func_end ov28_0238A5CC - - arm_func_start ov28_0238AB5C -ov28_0238AB5C: ; 0x0238AB5C - stmdb sp!, {r4, lr} - sub sp, sp, #8 - mov r2, #0x20 - mov r4, r0 - mov r0, #0 - add r1, sp, #0 - mov r3, r2 - str r0, [sp] - str r0, [sp, #4] - bl sub_02028EE8 - mov r2, #0x20 - add r1, sp, #0 - mov r3, r2 - mov r0, #1 - bl sub_02028EE8 - add r1, sp, #0 - mov r0, #0 - str r4, [sp] - bl sub_02028F88 - add r1, sp, #0 - mov r0, #1 - bl sub_02028F88 - mov r0, #0 - mov r1, #1 - bl sub_0202825C - mov r0, #1 - mov r1, r0 - bl sub_0202825C - add sp, sp, #8 - ldmia sp!, {r4, pc} - arm_func_end ov28_0238AB5C - - arm_func_start ov28_0238ABD4 -ov28_0238ABD4: ; 0x0238ABD4 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - sub sp, sp, #0x10 - mov r5, r1 - mov r1, r5, asr #2 - mov r7, #0 - mov r6, r0 - add r1, r5, r1, lsr #29 - mov r1, r1, asr #3 - mov r4, r2, asr #2 - add r4, r2, r4, lsr #29 - mov lr, r4, asr #3 - mov r8, r2, lsr #0x1f - sub r0, r7, #5 - rsb r2, r8, r2, lsl #29 - and ip, r1, #0xff - strb r0, [sp, #9] - rsb ip, ip, #0x1d - str r7, [sp] - str r7, [sp, #0xc] - adds r8, r8, r2, ror #29 - ldr r0, _0238ACF8 ; =ov28_0238AD80 - movne r7, #1 - strb r1, [sp, #4] - add r1, r7, #2 - ldr r2, [r0] - mov r4, r3 - strb r6, [sp, #8] - strb lr, [sp, #5] - strb ip, [sp, #6] - strb r1, [sp, #7] - mov r7, #0 - mvn r0, #1 - b _0238AC6C -_0238AC58: - add r1, r2, r7 - ldrsb r1, [r1, #9] - cmp r1, r0 - beq _0238AC74 - add r7, r7, #1 -_0238AC6C: - cmp r7, #0x14 - blt _0238AC58 -_0238AC74: - mov r0, r6 - bl sub_02028270 - ldrb r2, [sp, #6] - ldrb r1, [sp, #7] - mla r0, r2, r1, r0 - cmp r0, #0x300 - blt _0238AC9C - mov r0, r6 - mov r1, #1 - bl sub_0202825C -_0238AC9C: - add r0, sp, #0 - mov r1, #3 - bl NewWindow - ldr r1, _0238ACF8 ; =ov28_0238AD80 - ldr r2, [r1] - add r2, r2, r7 - strb r0, [r2, #9] - ldr r0, [r1] - add r0, r0, r7 - ldrsb r0, [r0, #9] - bl sub_0202810C - ldr r0, _0238ACF8 ; =ov28_0238AD80 - mov r6, r5, lsr #0x1f - ldr r0, [r0] - rsb r1, r6, r5, lsl #29 - add r0, r0, r7 - ldrsb r0, [r0, #9] - mov r2, r8 - mov r3, r4 - add r1, r6, r1, ror #29 - bl DrawTextInWindow - add sp, sp, #0x10 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_0238ACF8: .word ov28_0238AD80 - arm_func_end ov28_0238ABD4 - ; 0x0238ACFC - - .rodata - .global ov28_0238ACFC -ov28_0238ACFC: - .byte 0x0D, 0x00, 0x00, 0x00 - .word ov28_0238A490 - .word ov28_0238A58C - .word ov28_0238A5CC - .global ov28_0238AD0C -ov28_0238AD0C: - .byte 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00 - .byte 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00 - .global ov28_0238AD24 -ov28_0238AD24: -#if defined(EUROPE) -#define OV28_DATA_OFFSET_1 2 -#define OV28_DATA_OFFSET_2 0x1F -#define OV28_DATA_OFFSET_3 OV28_DATA_OFFSET_2 -#define OV28_DATA_OFFSET_4 OV28_DATA_OFFSET_2 -#define OV28_DATA_OFFSET_5 OV28_DATA_OFFSET_2 -#define OV28_DATA_OFFSET_6 OV28_DATA_OFFSET_2 -#elif defined(JAPAN) -#define OV28_DATA_OFFSET_1 -0x14C8 -#define OV28_DATA_OFFSET_2 -0x14EF -#define OV28_DATA_OFFSET_3 -0xC49 -#define OV28_DATA_OFFSET_4 -0xD5D -#define OV28_DATA_OFFSET_5 -0xC86 -#define OV28_DATA_OFFSET_6 -0xB72 -#else -#define OV28_DATA_OFFSET_1 0 -#define OV28_DATA_OFFSET_2 0 -#define OV28_DATA_OFFSET_3 0 -#define OV28_DATA_OFFSET_4 0 -#define OV28_DATA_OFFSET_5 0 -#define OV28_DATA_OFFSET_6 0 -#endif - .word 0x44BF + OV28_DATA_OFFSET_1 - .global ov28_0238AD28 -ov28_0238AD28: - .word 0x44C0 + OV28_DATA_OFFSET_1 - .global ov28_0238AD2C -ov28_0238AD2C: - .word 0x4575 + OV28_DATA_OFFSET_2, 0x4629 + OV28_DATA_OFFSET_3, 0x462A + OV28_DATA_OFFSET_3, 0x4684 + OV28_DATA_OFFSET_3 - .word 0x4799 + OV28_DATA_OFFSET_4, 0x479A + OV28_DATA_OFFSET_4, 0x4813 + OV28_DATA_OFFSET_4, 0x473D + OV28_DATA_OFFSET_5 - .word 0x473E + OV28_DATA_OFFSET_5, 0x4798 + OV28_DATA_OFFSET_5, 0x4685 + OV28_DATA_OFFSET_6, 0x4686 + OV28_DATA_OFFSET_6 - .word 0x46E0 + OV28_DATA_OFFSET_6, 0x46E1 + OV28_DATA_OFFSET_6, 0x46E2 + OV28_DATA_OFFSET_6, 0x473C + OV28_DATA_OFFSET_6 - - .data - .global ov28_0238AD80 -ov28_0238AD80: - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .bss - .global ov28_0238ADA0 -ov28_0238ADA0: - .space 0x20 diff --git a/asm/overlay_28_0238A5CC.s b/asm/overlay_28_0238A5CC.s new file mode 100644 index 00000000..247528b3 --- /dev/null +++ b/asm/overlay_28_0238A5CC.s @@ -0,0 +1,576 @@ + .include "asm/macros.inc" + .include "overlay_28_0238A5CC.inc" + + .text + + arm_func_start ov28_0238A5CC +ov28_0238A5CC: ; 0x0238A5CC + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x18 + ldr r6, _0238AB50 ; =ov28_0238AD80 + ldr r1, [r6] + ldr r0, [r1] + cmp r0, #6 + addls pc, pc, r0, lsl #2 + b _0238AB44 +_0238A5EC: ; jump table + b _0238A608 ; case 0 + b _0238A6BC ; case 1 + b _0238A6C8 ; case 2 + b _0238A6A0 ; case 3 + b _0238A678 ; case 4 + b _0238AAC0 ; case 5 + b _0238AA90 ; case 6 +_0238A608: + bl ov11_022E6EC8 + cmp r0, #0 + beq _0238AB44 + ldr r0, _0238AB54 ; =ov28_0238ADA0 + mov r1, r6 + ldr r0, [r0] + cmp r0, #0 + bne _0238A648 + ldr r2, [r1] + mov r0, #1 + add r2, r2, #0x58 + add r3, r2, #0x800 + mov r1, #0x10 + mov r2, #0x68 + bl ov28_0238ABD4 + b _0238A664 +_0238A648: + ldr r2, [r1] + mov r0, #0 + add r2, r2, #0x58 + add r3, r2, #0x800 + mov r1, #0x10 + mov r2, #0x60 + bl ov28_0238ABD4 +_0238A664: + ldr r0, _0238AB50 ; =ov28_0238AD80 + mov r1, #4 + ldr r0, [r0] + str r1, [r0] + b _0238AB44 +_0238A678: + bl ov11_022E6EC8 + cmp r0, #0 + beq _0238AB44 + mov r0, #1 + bl ov11_022E6E8C + mov r0, r6 + ldr r0, [r0] + mov r1, #3 + str r1, [r0] + b _0238AB44 +_0238A6A0: + bl ov11_022E6EC8 + cmp r0, #0 + movne r0, r6 + ldrne r0, [r0] + movne r1, #1 + strne r1, [r0] + b _0238AB44 +_0238A6BC: + mov r0, #2 + str r0, [r1] + b _0238AB44 +_0238A6C8: + mov r4, #0 + mvn r7, #1 +_0238A6D0: + ldr r0, [r6] + add r0, r0, r4 + ldrsb r8, [r0, #9] + cmp r8, r7 + beq _0238A718 + mov r0, r8 + bl sub_02028354 + cmp r0, #2 + bne _0238A718 + mov r0, r8 + bl sub_02028FA0 + cmp r0, #0 + bne _0238A718 + mov r0, r8 + bl sub_0202822C + ldr r0, [r6] + add r0, r0, r4 + strb r7, [r0, #9] +_0238A718: + add r4, r4, #1 + cmp r4, #0x14 + blt _0238A6D0 + ldr r0, _0238AB54 ; =ov28_0238ADA0 + ldr r2, [r0] + cmp r2, #0 + bne _0238A854 + ldr r0, _0238AB50 ; =ov28_0238AD80 + ldr r0, [r0] + add r0, r0, #0x20 + bl ov28_0238A184 + ldr r1, _0238AB50 ; =ov28_0238AD80 + mov r5, r0 + ldr r1, [r1] + ldr r0, [r1, #0x24] + mov r0, r0, asr #0x10 + cmp r0, #0xc0 + blt _0238A774 + add r0, r1, #0x3c + add r0, r0, #0x400 + bl ov28_0238A184 + orr r5, r5, r0 + b _0238AA48 +_0238A774: + add r4, r1, #0x3c + ldr r0, [r4, #0x410] + cmp r0, #0 + beq _0238A790 + cmp r0, #1 + beq _0238A814 + b _0238AA48 +_0238A790: + mvn r0, #3 + str r0, [sp, #0x10] + ldr r0, [r4, #0x404] + add r1, sp, #0x10 + mov r0, r0, asr #0x10 + str r0, [sp, #0x14] + ldr r0, [r4, #0x40c] + and r0, r0, #0xff + bl sub_02028F88 + ldr r0, _0238AB54 ; =ov28_0238ADA0 + ldr r1, _0238AB58 ; =ov28_0238AD0C + ldr r0, [r0] + ldr r2, [r4, #0x404] + ldr r0, [r1, r0, lsl #2] + add r0, r2, r0 + str r0, [r4, #0x404] + ldr r0, [sp, #0x14] + cmp r0, #0x88 + ble _0238AA48 + ldr r0, [r4, #0x40c] + mov r2, #0x20 + add r1, sp, #0x10 + mov r3, r2 + and r0, r0, #0xff + bl sub_02028EE8 + ldr r0, [r4, #0x40c] + mov r1, #1 + and r0, r0, #0xff + bl sub_0202825C + ldr r0, [r4, #0x410] + add r0, r0, #1 + str r0, [r4, #0x410] + b _0238AA48 +_0238A814: + ldr r1, [r4, #0x40c] + add r0, r4, #0x400 + and r1, r1, #0xff + bl ov28_0238A140 + mvn r1, #3 + mov r0, #0 + str r1, [sp, #0x10] + str r0, [sp, #0x14] + ldr r0, [r4, #0x40c] + add r1, sp, #0x10 + and r0, r0, #0xff + bl sub_02028F88 + ldr r0, [r4, #0x410] + add r0, r0, #1 + str r0, [r4, #0x410] + b _0238AA48 +_0238A854: + ldr r0, _0238AB50 ; =ov28_0238AD80 + ldr r4, [r0] + ldr r0, [r4, #0x24] + mov r0, r0, asr #0x10 + cmp r0, #8 + blt _0238A87C + add r0, r4, #0x20 + bl ov28_0238A184 + mov r5, r0 + b _0238A924 +_0238A87C: + ldr r0, [r4, #0x30] + cmp r0, #0 + beq _0238A8A4 + cmp r0, #1 + ldreq r0, _0238AB58 ; =ov28_0238AD0C + ldreq r1, [r4, #0x24] + ldreq r0, [r0, r2, lsl #2] + addeq r0, r1, r0 + streq r0, [r4, #0x24] + b _0238A924 +_0238A8A4: + mvn r0, #3 + str r0, [sp, #8] + ldr r0, [r4, #0x24] + add r1, sp, #8 + mov r0, r0, asr #0x10 + str r0, [sp, #0xc] + ldr r0, [r4, #0x2c] + and r0, r0, #0xff + bl sub_02028F88 + ldr r0, _0238AB54 ; =ov28_0238ADA0 + ldr r1, _0238AB58 ; =ov28_0238AD0C + ldr r0, [r0] + ldr r2, [r4, #0x24] + ldr r0, [r1, r0, lsl #2] + add r0, r2, r0 + str r0, [r4, #0x24] + ldr r0, [sp, #0xc] + cmp r0, #0x88 + ble _0238A924 + ldr r0, [r4, #0x2c] + mov r2, #0x20 + add r1, sp, #8 + mov r3, r2 + and r0, r0, #0xff + bl sub_02028EE8 + ldr r0, [r4, #0x2c] + mov r1, #1 + and r0, r0, #0xff + bl sub_0202825C + ldr r0, [r4, #0x30] + add r0, r0, #1 + str r0, [r4, #0x30] +_0238A924: + ldr r0, _0238AB50 ; =ov28_0238AD80 + ldr r4, [r0] + ldr r0, [r4, #0x24] + mov r0, r0, asr #0x10 + cmp r0, #0x60 + blt _0238AA48 + ldr r0, [r4, #0x440] + mov r0, r0, asr #0x10 + cmp r0, #0x68 + blt _0238A960 + add r0, r4, #0x3c + add r0, r0, #0x400 + bl ov28_0238A184 + orr r5, r5, r0 + b _0238AA48 +_0238A960: + ldr r0, [r4, #0x44c] + cmp r0, #0 + beq _0238A980 + cmp r0, #1 + beq _0238A9A8 + cmp r0, #2 + beq _0238AA2C + b _0238AA48 +_0238A980: + add r0, r4, #0x58 + mov r1, #0x10 + sub r2, r1, #0x50 + add r3, r0, #0x800 + mov r0, #1 + bl ov28_0238ABD4 + ldr r0, [r4, #0x44c] + add r0, r0, #1 + str r0, [r4, #0x44c] + b _0238AA48 +_0238A9A8: + mvn r0, #3 + str r0, [sp] + ldr r0, [r4, #0x440] + add r1, sp, #0 + mov r0, r0, asr #0x10 + str r0, [sp, #4] + ldr r0, [r4, #0x448] + and r0, r0, #0xff + bl sub_02028F88 + ldr r0, _0238AB54 ; =ov28_0238ADA0 + ldr r1, _0238AB58 ; =ov28_0238AD0C + ldr r0, [r0] + ldr r2, [r4, #0x440] + ldr r0, [r1, r0, lsl #2] + add r0, r2, r0 + str r0, [r4, #0x440] + ldr r0, [sp, #4] + cmp r0, #0xd0 + ble _0238AA48 + ldr r0, [r4, #0x448] + mov r2, #0x20 + add r1, sp, #0 + mov r3, r2 + and r0, r0, #0xff + bl sub_02028EE8 + ldr r0, [r4, #0x448] + mov r1, #1 + and r0, r0, #0xff + bl sub_0202825C + ldr r0, [r4, #0x44c] + add r0, r0, #1 + str r0, [r4, #0x44c] + b _0238AA48 +_0238AA2C: + ldr r0, _0238AB54 ; =ov28_0238ADA0 + ldr r1, _0238AB58 ; =ov28_0238AD0C + ldr r0, [r0] + ldr r2, [r4, #0x440] + ldr r0, [r1, r0, lsl #2] + add r0, r2, r0 + str r0, [r4, #0x440] +_0238AA48: + ldr r0, _0238AB50 ; =ov28_0238AD80 + ldr r2, [r0] + ldrb r0, [r2, #8] + cmp r0, #0 + bne _0238AA78 + ldr r0, [r2, #0x20] + cmp r0, #3 + blt _0238AA78 + mov r1, #1 + mov r0, #2 + strb r1, [r2, #8] + bl ov11_022E6E8C +_0238AA78: + cmp r5, #0 + ldreq r0, _0238AB50 ; =ov28_0238AD80 + moveq r1, #6 + ldreq r0, [r0] + streq r1, [r0] + b _0238AB44 +_0238AA90: + mov r0, #0 + mov r1, #1 + bl sub_0202825C + mov r0, #1 + mov r1, r0 + bl sub_0202825C + mov r0, #0 + bl sub_02025B80 + mov r0, #0 + bl ov11_022E6E8C + mov r0, #4 + b _0238AB48 +_0238AAC0: + mvn r0, #3 + bl ov28_0238AB5C + mov r0, #0 + bl ov11_022E6E8C + ldr r0, _0238AB54 ; =ov28_0238ADA0 + ldr r0, [r0] + cmp r0, #5 + addls pc, pc, r0, lsl #2 + b _0238AB2C +_0238AAE4: ; jump table + b _0238AAFC ; case 0 + b _0238AB04 ; case 1 + b _0238AB0C ; case 2 + b _0238AB14 ; case 3 + b _0238AB1C ; case 4 + b _0238AB24 ; case 5 +_0238AAFC: + mov r0, #0 + b _0238AB30 +_0238AB04: + mov r0, #1 + b _0238AB30 +_0238AB0C: + mov r0, #2 + b _0238AB30 +_0238AB14: + mov r0, #3 + b _0238AB30 +_0238AB1C: + mov r0, #4 + b _0238AB30 +_0238AB24: + mov r0, #5 + b _0238AB30 +_0238AB2C: + mvn r0, #0 +_0238AB30: + bl sub_02025B90 + ldr r0, _0238AB50 ; =ov28_0238AD80 + mov r1, #0 + ldr r0, [r0] + str r1, [r0] +_0238AB44: + mov r0, #1 +_0238AB48: + add sp, sp, #0x18 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_0238AB50: .word ov28_0238AD80 +_0238AB54: .word ov28_0238ADA0 +_0238AB58: .word ov28_0238AD0C + arm_func_end ov28_0238A5CC + + arm_func_start ov28_0238AB5C +ov28_0238AB5C: ; 0x0238AB5C + stmdb sp!, {r4, lr} + sub sp, sp, #8 + mov r2, #0x20 + mov r4, r0 + mov r0, #0 + add r1, sp, #0 + mov r3, r2 + str r0, [sp] + str r0, [sp, #4] + bl sub_02028EE8 + mov r2, #0x20 + add r1, sp, #0 + mov r3, r2 + mov r0, #1 + bl sub_02028EE8 + add r1, sp, #0 + mov r0, #0 + str r4, [sp] + bl sub_02028F88 + add r1, sp, #0 + mov r0, #1 + bl sub_02028F88 + mov r0, #0 + mov r1, #1 + bl sub_0202825C + mov r0, #1 + mov r1, r0 + bl sub_0202825C + add sp, sp, #8 + ldmia sp!, {r4, pc} + arm_func_end ov28_0238AB5C + + arm_func_start ov28_0238ABD4 +ov28_0238ABD4: ; 0x0238ABD4 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x10 + mov r5, r1 + mov r1, r5, asr #2 + mov r7, #0 + mov r6, r0 + add r1, r5, r1, lsr #29 + mov r1, r1, asr #3 + mov r4, r2, asr #2 + add r4, r2, r4, lsr #29 + mov lr, r4, asr #3 + mov r8, r2, lsr #0x1f + sub r0, r7, #5 + rsb r2, r8, r2, lsl #29 + and ip, r1, #0xff + strb r0, [sp, #9] + rsb ip, ip, #0x1d + str r7, [sp] + str r7, [sp, #0xc] + adds r8, r8, r2, ror #29 + ldr r0, _0238ACF8 ; =ov28_0238AD80 + movne r7, #1 + strb r1, [sp, #4] + add r1, r7, #2 + ldr r2, [r0] + mov r4, r3 + strb r6, [sp, #8] + strb lr, [sp, #5] + strb ip, [sp, #6] + strb r1, [sp, #7] + mov r7, #0 + mvn r0, #1 + b _0238AC6C +_0238AC58: + add r1, r2, r7 + ldrsb r1, [r1, #9] + cmp r1, r0 + beq _0238AC74 + add r7, r7, #1 +_0238AC6C: + cmp r7, #0x14 + blt _0238AC58 +_0238AC74: + mov r0, r6 + bl sub_02028270 + ldrb r2, [sp, #6] + ldrb r1, [sp, #7] + mla r0, r2, r1, r0 + cmp r0, #0x300 + blt _0238AC9C + mov r0, r6 + mov r1, #1 + bl sub_0202825C +_0238AC9C: + add r0, sp, #0 + mov r1, #3 + bl NewWindow + ldr r1, _0238ACF8 ; =ov28_0238AD80 + ldr r2, [r1] + add r2, r2, r7 + strb r0, [r2, #9] + ldr r0, [r1] + add r0, r0, r7 + ldrsb r0, [r0, #9] + bl sub_0202810C + ldr r0, _0238ACF8 ; =ov28_0238AD80 + mov r6, r5, lsr #0x1f + ldr r0, [r0] + rsb r1, r6, r5, lsl #29 + add r0, r0, r7 + ldrsb r0, [r0, #9] + mov r2, r8 + mov r3, r4 + add r1, r6, r1, ror #29 + bl DrawTextInWindow + add sp, sp, #0x10 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_0238ACF8: .word ov28_0238AD80 + arm_func_end ov28_0238ABD4 + ; 0x0238ACFC + + .rodata + .global ov28_0238ACFC +ov28_0238ACFC: + .byte 0x0D, 0x00, 0x00, 0x00 + .word ov28_0238A490 + .word ov28_0238A58C + .word ov28_0238A5CC + .global ov28_0238AD0C +ov28_0238AD0C: + .byte 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00 + .byte 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00 + .global ov28_0238AD24 +ov28_0238AD24: +#if defined(EUROPE) +#define OV28_DATA_OFFSET_1 2 +#define OV28_DATA_OFFSET_2 0x1F +#define OV28_DATA_OFFSET_3 OV28_DATA_OFFSET_2 +#define OV28_DATA_OFFSET_4 OV28_DATA_OFFSET_2 +#define OV28_DATA_OFFSET_5 OV28_DATA_OFFSET_2 +#define OV28_DATA_OFFSET_6 OV28_DATA_OFFSET_2 +#elif defined(JAPAN) +#define OV28_DATA_OFFSET_1 -0x14C8 +#define OV28_DATA_OFFSET_2 -0x14EF +#define OV28_DATA_OFFSET_3 -0xC49 +#define OV28_DATA_OFFSET_4 -0xD5D +#define OV28_DATA_OFFSET_5 -0xC86 +#define OV28_DATA_OFFSET_6 -0xB72 +#else +#define OV28_DATA_OFFSET_1 0 +#define OV28_DATA_OFFSET_2 0 +#define OV28_DATA_OFFSET_3 0 +#define OV28_DATA_OFFSET_4 0 +#define OV28_DATA_OFFSET_5 0 +#define OV28_DATA_OFFSET_6 0 +#endif + .word 0x44BF + OV28_DATA_OFFSET_1 + .global ov28_0238AD28 +ov28_0238AD28: + .word 0x44C0 + OV28_DATA_OFFSET_1 + .global ov28_0238AD2C +ov28_0238AD2C: + .word 0x4575 + OV28_DATA_OFFSET_2, 0x4629 + OV28_DATA_OFFSET_3, 0x462A + OV28_DATA_OFFSET_3, 0x4684 + OV28_DATA_OFFSET_3 + .word 0x4799 + OV28_DATA_OFFSET_4, 0x479A + OV28_DATA_OFFSET_4, 0x4813 + OV28_DATA_OFFSET_4, 0x473D + OV28_DATA_OFFSET_5 + .word 0x473E + OV28_DATA_OFFSET_5, 0x4798 + OV28_DATA_OFFSET_5, 0x4685 + OV28_DATA_OFFSET_6, 0x4686 + OV28_DATA_OFFSET_6 + .word 0x46E0 + OV28_DATA_OFFSET_6, 0x46E1 + OV28_DATA_OFFSET_6, 0x46E2 + OV28_DATA_OFFSET_6, 0x473C + OV28_DATA_OFFSET_6 + + .data + .global ov28_0238AD80 +ov28_0238AD80: + .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + .byte 0x00, 0x00, 0x00, 0x00 + + .bss + .global ov28_0238ADA0 +ov28_0238ADA0: + .space 0x20 diff --git a/include/overlay_28_0238A58C.h b/include/overlay_28_0238A58C.h new file mode 100644 index 00000000..1fe19bc4 --- /dev/null +++ b/include/overlay_28_0238A58C.h @@ -0,0 +1,6 @@ +#ifndef PMDSKY_OVERLAY_28_0238A58C_H +#define PMDSKY_OVERLAY_28_0238A58C_H + +void ov28_0238A58C(void); + +#endif //PMDSKY_OVERLAY_28_0238A58C_H diff --git a/main.lsf b/main.lsf index 95bb5154..fdea1086 100644 --- a/main.lsf +++ b/main.lsf @@ -301,6 +301,8 @@ Overlay OVY_28 { After OVY_11 Object asm/overlay_28.o + Object src/overlay_28_0238A58C.o + Object asm/overlay_28_0238A5CC.o } Overlay OVY_29 { diff --git a/src/overlay_13_EntryOverlay13.c b/src/overlay_13_EntryOverlay13.c index e8cfb8d8..e1c6da30 100644 --- a/src/overlay_13_EntryOverlay13.c +++ b/src/overlay_13_EntryOverlay13.c @@ -1,7 +1,7 @@ #include "overlay_13_EntryOverlay13.h" extern void* MemAlloc(u32 len, u32 flags); -extern void* MemFree(void *); +extern void MemFree(void* ptr); void sub_0201F2E4(void); void sub_020348E4(const u8 *); extern void ov11_022E6E8C(u32); diff --git a/src/overlay_15_0238AE6C.c b/src/overlay_15_0238AE6C.c index 9366259e..28da0c1a 100644 --- a/src/overlay_15_0238AE6C.c +++ b/src/overlay_15_0238AE6C.c @@ -5,7 +5,7 @@ extern unkStruct_ov15_0238AE6C* OVERLAY15_UNKNOWN_POINTER__NA_238B180; extern void ov15_0238AD78(u8); extern u16 ov15_0238A140(void); extern void Debug_Print0(const char* fmt); -extern void MemFree(void*); +extern void MemFree(void* ptr); extern int ov15_0238A234(void); extern int IsDialogueBoxActive(s8); extern void HidePortraitBox(int); @@ -23,7 +23,7 @@ void ov15_0238AE6C(void) { s32 ov15_0238AE88(void) { ov15_0238A140(); - return 1; + return 1; } const char ov15_0238B11C[] = "mes not close\n"; @@ -33,21 +33,21 @@ const char ov15_0238B150[] = "Input not close\n"; void ov15_0238AE98(void) { - if (OVERLAY15_UNKNOWN_POINTER__NA_238B180 == NULL) + if (OVERLAY15_UNKNOWN_POINTER__NA_238B180 == NULL) return; - - if (OVERLAY15_UNKNOWN_POINTER__NA_238B180->unk80 != -2) + + if (OVERLAY15_UNKNOWN_POINTER__NA_238B180->unk80 != -2) Debug_Print0(ov15_0238B11C); - - if (OVERLAY15_UNKNOWN_POINTER__NA_238B180->unk82 != -2) + + if (OVERLAY15_UNKNOWN_POINTER__NA_238B180->unk82 != -2) Debug_Print0(ov15_0238B12C); - - if (OVERLAY15_UNKNOWN_POINTER__NA_238B180->unk83 != -2) + + if (OVERLAY15_UNKNOWN_POINTER__NA_238B180->unk83 != -2) Debug_Print0(ov15_0238B13C); - - if (OVERLAY15_UNKNOWN_POINTER__NA_238B180->unk84 != -2) + + if (OVERLAY15_UNKNOWN_POINTER__NA_238B180->unk84 != -2) Debug_Print0(ov15_0238B150); - + MemFree(OVERLAY15_UNKNOWN_POINTER__NA_238B180); OVERLAY15_UNKNOWN_POINTER__NA_238B180 = NULL; } @@ -60,7 +60,7 @@ int ov15_0238AF54(void) { OVERLAY15_UNKNOWN_POINTER__NA_238B180 -> unk0 = 1; break; case 1: - if (ov15_0238A234() == 3) + if (ov15_0238A234() == 3) OVERLAY15_UNKNOWN_POINTER__NA_238B180 -> unk0 = 2; break; case 2: @@ -81,7 +81,7 @@ int ov15_0238AF54(void) { break; case 3: ov11_022E6E68(); - return 4; + return 4; } return 1; } diff --git a/src/overlay_28_0238A58C.c b/src/overlay_28_0238A58C.c new file mode 100644 index 00000000..4de38b59 --- /dev/null +++ b/src/overlay_28_0238A58C.c @@ -0,0 +1,21 @@ +#include "overlay_28_0238A58C.h" + +extern void* ov28_0238AD80; + +extern void ov28_0238AB5C(s32); +extern void sub_02025C14(); +extern void sub_02027170(); +extern void sub_02027228(); +extern void MemFree(void* ptr); + +void ov28_0238A58C(void) +{ + ov28_0238AB5C(0); + sub_02025C14(); + sub_02027170(); + sub_02027228(); + if (ov28_0238AD80 != NULL) { + MemFree(ov28_0238AD80); + ov28_0238AD80 = NULL; + } +} diff --git a/src/overlay_31_02382820.c b/src/overlay_31_02382820.c index f5d6209b..880ceafb 100644 --- a/src/overlay_31_02382820.c +++ b/src/overlay_31_02382820.c @@ -50,7 +50,7 @@ extern struct struct_1* sub_0202ABB0(s8); extern void CloseTextBox(s8); extern void CloseParentMenu(s8); -extern void MemFree(void*); +extern void MemFree(void* ptr); extern void ov29_022EA428(u32, u32); extern void AdvanceFrame(u8); diff --git a/src/overlay_31_02383880.c b/src/overlay_31_02383880.c index 6efec43a..03e1a313 100644 --- a/src/overlay_31_02383880.c +++ b/src/overlay_31_02383880.c @@ -13,7 +13,7 @@ extern s32 sub_020282F4(s8); extern void CloseInventoryMenu(s8); extern void ov29_0234E988(u8*); extern void CloseTextBox2(); -extern void MemFree(void*); +extern void MemFree(void* ptr); extern void DrawTextInWindow(struct window*, u32, u32, u8*); u8 ov31_0238372C(struct position* x) diff --git a/tools/sync_pmdsky_debug/xmap_reader.py b/tools/sync_pmdsky_debug/xmap_reader.py index 9a682012..14ef5970 100644 --- a/tools/sync_pmdsky_debug/xmap_reader.py +++ b/tools/sync_pmdsky_debug/xmap_reader.py @@ -10,8 +10,7 @@ MAIN_LSF_PATH = 'main.lsf' # Symbols with duplicate addresses that should be ignored. XMAP_SYMBOL_BLACKLIST = set([ - 'AI_POTENTIAL_ATTACK_TARGET_WEIGHTS_2', - 'zeros$498' + 'AI_POTENTIAL_ATTACK_TARGET_WEIGHTS_2' ]) """ @@ -85,7 +84,7 @@ def read_xmap_symbols_for_language(language: str) -> Dict[str, Dict[int, SymbolD symbol_split = line[28:-1].split('\t') symbol_name = symbol_split[0] - if symbol_name in XMAP_SYMBOL_BLACKLIST: + if symbol_name in XMAP_SYMBOL_BLACKLIST or '$' in symbol_name: continue symbol_address = int(line[2:10], 16)