From 7cd584e9e0779ef257a3e4e1f1558d0e24da9b15 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 12 Jul 2024 17:06:12 -0400 Subject: [PATCH] decompile overlay 124 --- asm/include/overlay_124.inc | 21 --- asm/overlay_124.s | 173 ------------------- include/main.h | 4 +- include/overlay_123.h | 11 ++ include/unk_02092BB8.h | 3 + lib/asm/overlay_123.s | 326 ++++++++++++++++++------------------ main.lsf | 2 +- src/overlay_124.c | 65 +++++++ src/touch_save_app.c | 5 +- 9 files changed, 246 insertions(+), 364 deletions(-) delete mode 100644 asm/include/overlay_124.inc delete mode 100644 asm/overlay_124.s create mode 100644 include/overlay_123.h create mode 100644 src/overlay_124.c diff --git a/asm/include/overlay_124.inc b/asm/include/overlay_124.inc deleted file mode 100644 index 1565871d1..000000000 --- a/asm/include/overlay_124.inc +++ /dev/null @@ -1,21 +0,0 @@ -#include -#pragma once -.public OverlayManager_GetArgs -.public AllocFromHeapAtEnd -.public Save_PlayerData_GetProfileAddr -.public PlayerProfile_TestBadgeFlag -.public MapMatrix_New -.public Field_AllocateMapEvents -.public LocalFieldData_GetCurrentPosition -.public Save_LocalFieldData_Get -.public FieldSystem_UnkSub108_Alloc -.public BagCursor_New -.public sub_02092BB8 -.public GearPhoneRingManager_New -.public FS_LoadOverlay -.public FS_UnloadOverlay -.public _u32_div_f -.public ov123_0225F4A8 -.public ov123_0225F520 -.public ov123_0225F688 -.public FieldSystem_Init diff --git a/asm/overlay_124.s b/asm/overlay_124.s deleted file mode 100644 index 69b34a0ab..000000000 --- a/asm/overlay_124.s +++ /dev/null @@ -1,173 +0,0 @@ - .include "asm/macros.inc" - .include "overlay_124.inc" - .include "global.inc" - - .text - - thumb_func_start FieldSystem_Init -FieldSystem_Init: ; 0x02260C20 - push {r3, r4, r5, r6, r7, lr} - ldr r7, _02260CF8 ; =FS_OVERLAY_ID(OVY_123) - add r6, r0, #0 - add r5, r1, #0 - mov r0, #0 - add r1, r7, #0 - ldr r4, _02260CFC ; =0x0097B4B1 - bl FS_LoadOverlay - ldr r0, _02260D00 ; =ov124_02260D68 - bl ov123_0225F4A8 - cmp r0, #0 - bne _02260C40 - mov r1, #1 - b _02260C42 -_02260C40: - mov r1, #0 -_02260C42: - ldr r0, _02260D04 ; =0x00000301 - mul r0, r1 - add r4, r4, r0 - add r0, r6, #0 - bl OverlayManager_GetArgs - ldr r0, [r0, #8] - str r0, [r5, #0xc] - mov r0, #0 - str r0, [r5, #0x10] - ldr r0, _02260D08 ; =ov124_02260D6C - bl ov123_0225F688 - cmp r0, #0 - bne _02260C64 - mov r1, #1 - b _02260C66 -_02260C64: - mov r1, #0 -_02260C66: - mov r0, #0x2f - mul r0, r1 - add r4, r4, r0 - ldr r0, [r5, #0xc] - bl Save_LocalFieldData_Get - bl LocalFieldData_GetCurrentPosition - str r0, [r5, #0x20] - bl MapMatrix_New - str r0, [r5, #0x30] - ldr r0, _02260D0C ; =ov124_02260D58 - bl ov123_0225F520 - add r6, r0, #0 - ldr r1, _02260D10 ; =0x000003A1 - add r0, r5, #0 - mul r6, r1 - mov r1, #0xb - bl Field_AllocateMapEvents - mov r0, #0xb - bl BagCursor_New - add r1, r5, #0 - add r1, #0x94 - str r0, [r1] - mov r0, #0 - add r1, r7, #0 - bl FS_UnloadOverlay - ldr r1, _02260D14 ; =0x00000989 - add r0, r4, r6 - bl _u32_div_f - cmp r1, #0 - beq _02260CB8 - add r0, r5, #0 - bl ov124_02260D1C -_02260CB8: - mov r0, #0xb - bl sub_02092BB8 - add r1, r5, #0 - add r1, #0xa8 - str r0, [r1] - mov r0, #0xb - bl FieldSystem_UnkSub108_Alloc - mov r1, #0x42 - lsl r1, r1, #2 - str r0, [r5, r1] - mov r0, #0xb - add r1, r5, #0 - bl GearPhoneRingManager_New - mov r1, #0x45 - lsl r1, r1, #2 - str r0, [r5, r1] - mov r0, #0 - add r1, #0x10 - str r0, [r5, r1] - ldr r1, _02260D18 ; =0x00000FE9 - add r0, r4, r6 - bl _u32_div_f - cmp r1, #0 - beq _02260CF6 - add r0, r5, #0 - bl ov124_02260D1C -_02260CF6: - pop {r3, r4, r5, r6, r7, pc} - .balign 4, 0 -_02260CF8: .word FS_OVERLAY_ID(OVY_123) -_02260CFC: .word 0x0097B4B1 -_02260D00: .word ov124_02260D68 -_02260D04: .word 0x00000301 -_02260D08: .word ov124_02260D6C -_02260D0C: .word ov124_02260D58 -_02260D10: .word 0x000003A1 -_02260D14: .word 0x00000989 -_02260D18: .word 0x00000FE9 - thumb_func_end FieldSystem_Init - - thumb_func_start ov124_02260D1C -ov124_02260D1C: ; 0x02260D1C - push {r4, r5, r6, lr} - mov r5, #0 - add r6, r0, #0 - add r4, r5, #0 -_02260D24: - ldr r0, [r6, #0xc] - bl Save_PlayerData_GetProfileAddr - add r1, r4, #0 - bl PlayerProfile_TestBadgeFlag - cmp r0, #1 - bne _02260D36 - add r5, r5, #1 -_02260D36: - add r4, r4, #1 - cmp r4, #0x10 - blt _02260D24 - cmp r5, #0 - bne _02260D44 - ldr r1, _02260D54 ; =0x00004E20 - b _02260D4A -_02260D44: - ldr r0, _02260D54 ; =0x00004E20 - add r1, r5, #0 - mul r1, r0 -_02260D4A: - mov r0, #3 - bl AllocFromHeapAtEnd - pop {r4, r5, r6, pc} - nop -_02260D54: .word 0x00004E20 - thumb_func_end ov124_02260D1C - - thumb_func_start ov124_02260D58 -ov124_02260D58: ; 0x02260D58 - ldr r3, _02260D64 ; =AllocFromHeapAtEnd - mov r1, #0xfa - mov r0, #3 - lsl r1, r1, #2 - bx r3 - nop -_02260D64: .word AllocFromHeapAtEnd - thumb_func_end ov124_02260D58 - - thumb_func_start ov124_02260D68 -ov124_02260D68: ; 0x02260D68 - bx lr - .balign 4, 0 - thumb_func_end ov124_02260D68 - - thumb_func_start ov124_02260D6C -ov124_02260D6C: ; 0x02260D6C - bx lr - .balign 4, 0 - thumb_func_end ov124_02260D6C - diff --git a/include/main.h b/include/main.h index d6750d9ef..899f89ce5 100644 --- a/include/main.h +++ b/include/main.h @@ -4,11 +4,11 @@ #include "overlay_manager.h" #include "save.h" -struct UnkStruct_02111868_sub { +typedef struct UnkStruct_02111868_sub { int unk_00; u32 unk_04; SaveData *saveData; -}; +} UnkStruct_02111868_sub; void NitroMain(void); void Main_ResetOverlayManager(void); diff --git a/include/overlay_123.h b/include/overlay_123.h new file mode 100644 index 000000000..cc7df4524 --- /dev/null +++ b/include/overlay_123.h @@ -0,0 +1,11 @@ +#ifndef GUARD_POKEHEARTGOLD_OVERLAY_123_H +#define GUARD_POKEHEARTGOLD_OVERLAY_123_H + +#include "global.h" + +BOOL ov123_0225F4A8(void (*)(void)); +BOOL ov123_0225F520(void (*)(void)); +BOOL ov123_0225F688(void (*)(void)); +BOOL ov123_0225F610(void (*)(void)); + +#endif //GUARD_POKEHEARTGOLD_OVERLAY_123_H diff --git a/include/unk_02092BB8.h b/include/unk_02092BB8.h index ff7d1112f..e4c47ba19 100644 --- a/include/unk_02092BB8.h +++ b/include/unk_02092BB8.h @@ -1,6 +1,9 @@ #ifndef POKEHEARTGOLD_UNK_02092BB8_H #define POKEHEARTGOLD_UNK_02092BB8_H +#include "heap.h" + +u32 *sub_02092BB8(HeapID heapId); void sub_02092BD0(u32 *a0); #endif //POKEHEARTGOLD_UNK_02092BB8_H diff --git a/lib/asm/overlay_123.s b/lib/asm/overlay_123.s index f9273b647..21eac392b 100644 --- a/lib/asm/overlay_123.s +++ b/lib/asm/overlay_123.s @@ -317,11 +317,11 @@ ov123_0225F430: ; 0x0225F430 stmfd sp!, {r4-r7} stmfd sp!, {r0-r3} ldmfd sp!, {r4-r7} - ldr r1, _0225F4A4 - adr r3, _0225F498 + ldr r1, _0225F4A4 ; =ov123_0225F020 + adr r3, _0225F498 ; =_02260C00+1 str lr, [r3] - ldr r2, _0225F49C - ldr r0, _0225F4A0 + ldr r2, _0225F49C ; =0xAC + ldr r0, _0225F4A0 ; =0x6AB2 bl ov123_0225FEA8 mov ip, r0 stmfd sp!, {r4-r7} @@ -330,15 +330,15 @@ ov123_0225F430: ; 0x0225F430 blx ip stmfd sp!, {r4} mov r4, r0 - ldr r1, _0225F4A4 - ldr r2, _0225F49C - ldr r0, _0225F4A0 + ldr r1, _0225F4A4 ; =ov123_0225F020 + ldr r2, _0225F49C ; =0xAC + ldr r0, _0225F4A0 ; =0x6AB2 bl ov123_0225FF30 - str r0, _0225F4A0 + str r0, _0225F4A0 ; =0x6AB2 mov r0, r4 ldmfd sp!, {r4} - ldr lr, _0225F498 - str pc, _0225F498 + ldr lr, _0225F498 ; =_02260C00+1 + str pc, _0225F498 ; =_02260C00+1 bx lr _0225F498: .word _02260C00+1 _0225F49C: .word 0xAC @@ -351,11 +351,11 @@ ov123_0225F4A8: ; 0x0225F4A8 stmfd sp!, {r4-r7} stmfd sp!, {r0-r3} ldmfd sp!, {r4-r7} - ldr r1, _0225F51C - adr r3, _0225F510 + ldr r1, _0225F51C ; =ov123_0225F0D8 + adr r3, _0225F510 ; =_02260C00+1 str lr, [r3] - ldr r2, _0225F514 - ldr r0, _0225F518 + ldr r2, _0225F514 ; =0xAC + ldr r0, _0225F518 ; =0x6AB2 bl ov123_0225FEA8 mov ip, r0 stmfd sp!, {r4-r7} @@ -364,15 +364,15 @@ ov123_0225F4A8: ; 0x0225F4A8 blx ip stmfd sp!, {r4} mov r4, r0 - ldr r1, _0225F51C - ldr r2, _0225F514 - ldr r0, _0225F518 + ldr r1, _0225F51C ; =ov123_0225F0D8 + ldr r2, _0225F514 ; =0xAC + ldr r0, _0225F518 ; =0x6AB2 bl ov123_0225FF30 - str r0, _0225F518 + str r0, _0225F518 ; =0x6AB2 mov r0, r4 ldmfd sp!, {r4} - ldr lr, _0225F510 - str pc, _0225F510 + ldr lr, _0225F510 ; =_02260C00+1 + str pc, _0225F510 ; =_02260C00+1 bx lr _0225F510: .word _02260C00+1 _0225F514: .word 0xAC @@ -385,11 +385,11 @@ ov123_0225F520: ; 0x0225F520 stmfd sp!, {r4-r7} stmfd sp!, {r0-r3} ldmfd sp!, {r4-r7} - ldr r1, _0225F594 - adr r3, _0225F588 + ldr r1, _0225F594 ; =ov123_0225F190 + adr r3, _0225F588 ; =_02260C00+1 str lr, [r3] - ldr r2, _0225F58C - ldr r0, _0225F590 + ldr r2, _0225F58C ; =0xAC + ldr r0, _0225F590 ; =0x6AB2 bl ov123_0225FEA8 mov ip, r0 stmfd sp!, {r4-r7} @@ -398,15 +398,15 @@ ov123_0225F520: ; 0x0225F520 blx ip stmfd sp!, {r4} mov r4, r0 - ldr r1, _0225F594 - ldr r2, _0225F58C - ldr r0, _0225F590 + ldr r1, _0225F594 ; =ov123_0225F190 + ldr r2, _0225F58C ; =0xAC + ldr r0, _0225F590 ; =0x6AB2 bl ov123_0225FF30 - str r0, _0225F590 + str r0, _0225F590 ; =0x6AB2 mov r0, r4 ldmfd sp!, {r4} - ldr lr, _0225F588 - str pc, _0225F588 + ldr lr, _0225F588 ; =_02260C00+1 + str pc, _0225F588 ; =_02260C00+1 bx lr _0225F588: .word _02260C00+1 _0225F58C: .word 0xAC @@ -419,11 +419,11 @@ ov123_0225F598: ; 0x0225F598 stmfd sp!, {r4-r7} stmfd sp!, {r0-r3} ldmfd sp!, {r4-r7} - ldr r1, _0225F60C - adr r3, _0225F600 + ldr r1, _0225F60C ; =ov123_0225F248 + adr r3, _0225F600 ; =_02260C00+1 str lr, [r3] - ldr r2, _0225F604 - ldr r0, _0225F608 + ldr r2, _0225F604 ; =0xAC + ldr r0, _0225F608 ; =0x6AB2 bl ov123_0225FEA8 mov ip, r0 stmfd sp!, {r4-r7} @@ -432,15 +432,15 @@ ov123_0225F598: ; 0x0225F598 blx ip stmfd sp!, {r4} mov r4, r0 - ldr r1, _0225F60C - ldr r2, _0225F604 - ldr r0, _0225F608 + ldr r1, _0225F60C ; =ov123_0225F248 + ldr r2, _0225F604 ; =0xAC + ldr r0, _0225F608 ; =0x6AB2 bl ov123_0225FF30 - str r0, _0225F608 + str r0, _0225F608 ; =0x6AB2 mov r0, r4 ldmfd sp!, {r4} - ldr lr, _0225F600 - str pc, _0225F600 + ldr lr, _0225F600 ; =_02260C00+1 + str pc, _0225F600 ; =_02260C00+1 bx lr _0225F600: .word _02260C00+1 _0225F604: .word 0xAC @@ -453,11 +453,11 @@ ov123_0225F610: ; 0x0225F610 stmfd sp!, {r4-r7} stmfd sp!, {r0-r3} ldmfd sp!, {r4-r7} - ldr r1, _0225F684 - adr r3, _0225F678 + ldr r1, _0225F684 ; =ov123_0225F300 + adr r3, _0225F678 ; =_02260C00+1 str lr, [r3] - ldr r2, _0225F67C - ldr r0, _0225F680 + ldr r2, _0225F67C ; =0x94 + ldr r0, _0225F680 ; =0x6AB2 bl ov123_0225FEA8 mov ip, r0 stmfd sp!, {r4-r7} @@ -466,15 +466,15 @@ ov123_0225F610: ; 0x0225F610 blx ip stmfd sp!, {r4} mov r4, r0 - ldr r1, _0225F684 - ldr r2, _0225F67C - ldr r0, _0225F680 + ldr r1, _0225F684 ; =ov123_0225F300 + ldr r2, _0225F67C ; =0x94 + ldr r0, _0225F680 ; =0x6AB2 bl ov123_0225FF30 - str r0, _0225F680 + str r0, _0225F680 ; =0x6AB2 mov r0, r4 ldmfd sp!, {r4} - ldr lr, _0225F678 - str pc, _0225F678 + ldr lr, _0225F678 ; =_02260C00+1 + str pc, _0225F678 ; =_02260C00+1 bx lr _0225F678: .word _02260C00+1 _0225F67C: .word 0x94 @@ -487,11 +487,11 @@ ov123_0225F688: ; 0x0225F688 stmfd sp!, {r4-r7} stmfd sp!, {r0-r3} ldmfd sp!, {r4-r7} - ldr r1, _0225F6FC - adr r3, _0225F6F0 + ldr r1, _0225F6FC ; =ov123_0225F398 + adr r3, _0225F6F0 ; =_02260C00+1 str lr, [r3] - ldr r2, _0225F6F4 - ldr r0, _0225F6F8 + ldr r2, _0225F6F4 ; =0x94 + ldr r0, _0225F6F8 ; =0x6AB2 bl ov123_0225FEA8 mov ip, r0 stmfd sp!, {r4-r7} @@ -500,15 +500,15 @@ ov123_0225F688: ; 0x0225F688 blx ip stmfd sp!, {r4} mov r4, r0 - ldr r1, _0225F6FC - ldr r2, _0225F6F4 - ldr r0, _0225F6F8 + ldr r1, _0225F6FC ; =ov123_0225F398 + ldr r2, _0225F6F4 ; =0x94 + ldr r0, _0225F6F8 ; =0x6AB2 bl ov123_0225FF30 - str r0, _0225F6F8 + str r0, _0225F6F8 ; =0x6AB2 mov r0, r4 ldmfd sp!, {r4} - ldr lr, _0225F6F0 - str pc, _0225F6F0 + ldr lr, _0225F6F0 ; =_02260C00+1 + str pc, _0225F6F0 ; =_02260C00+1 bx lr _0225F6F0: .word _02260C00+1 _0225F6F4: .word 0x94 @@ -802,11 +802,11 @@ ov123_0225FB24: ; 0x0225FB24 stmfd sp!, {r4-r7} stmfd sp!, {r0-r3} ldmfd sp!, {r4-r7} - ldr r1, _0225FB98 - adr r3, _0225FB8C + ldr r1, _0225FB98 ; =ov123_0225F74C + adr r3, _0225FB8C ; =_02260C00+1 str lr, [r3] - ldr r2, _0225FB90 - ldr r0, _0225FB94 + ldr r2, _0225FB90 ; =0xD4 + ldr r0, _0225FB94 ; =0x9785 bl ov123_0225FEA8 mov ip, r0 stmfd sp!, {r4-r7} @@ -815,15 +815,15 @@ ov123_0225FB24: ; 0x0225FB24 blx ip stmfd sp!, {r4} mov r4, r0 - ldr r1, _0225FB98 - ldr r2, _0225FB90 - ldr r0, _0225FB94 + ldr r1, _0225FB98 ; =ov123_0225F74C + ldr r2, _0225FB90 ; =0xD4 + ldr r0, _0225FB94 ; =0x9785 bl ov123_0225FF30 - str r0, _0225FB94 + str r0, _0225FB94 ; =0x9785 mov r0, r4 ldmfd sp!, {r4} - ldr lr, _0225FB8C - str pc, _0225FB8C + ldr lr, _0225FB8C ; =_02260C00+1 + str pc, _0225FB8C ; =_02260C00+1 bx lr _0225FB8C: .word _02260C00+1 _0225FB90: .word 0xD4 @@ -836,11 +836,11 @@ ov123_0225FB9C: ; 0x0225FB9C stmfd sp!, {r4-r7} stmfd sp!, {r0-r3} ldmfd sp!, {r4-r7} - ldr r1, _0225FC10 - adr r3, _0225FC04 + ldr r1, _0225FC10 ; =ov123_0225F824 + adr r3, _0225FC04 ; =_02260C00+1 str lr, [r3] - ldr r2, _0225FC08 - ldr r0, _0225FC0C + ldr r2, _0225FC08 ; =0x110 + ldr r0, _0225FC0C ; =0x9785 bl ov123_0225FEA8 mov ip, r0 stmfd sp!, {r4-r7} @@ -849,15 +849,15 @@ ov123_0225FB9C: ; 0x0225FB9C blx ip stmfd sp!, {r4} mov r4, r0 - ldr r1, _0225FC10 - ldr r2, _0225FC08 - ldr r0, _0225FC0C + ldr r1, _0225FC10 ; =ov123_0225F824 + ldr r2, _0225FC08 ; =0x110 + ldr r0, _0225FC0C ; =0x9785 bl ov123_0225FF30 - str r0, _0225FC0C + str r0, _0225FC0C ; =0x9785 mov r0, r4 ldmfd sp!, {r4} - ldr lr, _0225FC04 - str pc, _0225FC04 + ldr lr, _0225FC04 ; =_02260C00+1 + str pc, _0225FC04 ; =_02260C00+1 bx lr _0225FC04: .word _02260C00+1 _0225FC08: .word 0x110 @@ -870,11 +870,11 @@ ov123_0225FC14: ; 0x0225FC14 stmfd sp!, {r4-r7} stmfd sp!, {r0-r3} ldmfd sp!, {r4-r7} - ldr r1, _0225FC88 - adr r3, _0225FC7C + ldr r1, _0225FC88 ; =ov123_0225F938 + adr r3, _0225FC7C ; =_02260C00+1 str lr, [r3] - ldr r2, _0225FC80 - ldr r0, _0225FC84 + ldr r2, _0225FC80 ; =0xD4 + ldr r0, _0225FC84 ; =0x9785 bl ov123_0225FEA8 mov ip, r0 stmfd sp!, {r4-r7} @@ -883,15 +883,15 @@ ov123_0225FC14: ; 0x0225FC14 blx ip stmfd sp!, {r4} mov r4, r0 - ldr r1, _0225FC88 - ldr r2, _0225FC80 - ldr r0, _0225FC84 + ldr r1, _0225FC88 ; =ov123_0225F938 + ldr r2, _0225FC80 ; =0xD4 + ldr r0, _0225FC84 ; =0x9785 bl ov123_0225FF30 - str r0, _0225FC84 + str r0, _0225FC84 ; =0x9785 mov r0, r4 ldmfd sp!, {r4} - ldr lr, _0225FC7C - str pc, _0225FC7C + ldr lr, _0225FC7C ; =_02260C00+1 + str pc, _0225FC7C ; =_02260C00+1 bx lr _0225FC7C: .word _02260C00+1 _0225FC80: .word 0xD4 @@ -904,11 +904,11 @@ ov123_0225FC8C: ; 0x0225FC8C stmfd sp!, {r4-r7} stmfd sp!, {r0-r3} ldmfd sp!, {r4-r7} - ldr r1, _0225FD00 - adr r3, _0225FCF4 + ldr r1, _0225FD00 ; =ov123_0225FA10 + adr r3, _0225FCF4 ; =_02260C00+1 str lr, [r3] - ldr r2, _0225FCF8 - ldr r0, _0225FCFC + ldr r2, _0225FCF8 ; =0x110 + ldr r0, _0225FCFC ; =0x9785 bl ov123_0225FEA8 mov ip, r0 stmfd sp!, {r4-r7} @@ -917,15 +917,15 @@ ov123_0225FC8C: ; 0x0225FC8C blx ip stmfd sp!, {r4} mov r4, r0 - ldr r1, _0225FD00 - ldr r2, _0225FCF8 - ldr r0, _0225FCFC + ldr r1, _0225FD00 ; =ov123_0225FA10 + ldr r2, _0225FCF8 ; =0x110 + ldr r0, _0225FCFC ; =0x9785 bl ov123_0225FF30 - str r0, _0225FCFC + str r0, _0225FCFC ; =0x9785 mov r0, r4 ldmfd sp!, {r4} - ldr lr, _0225FCF4 - str pc, _0225FCF4 + ldr lr, _0225FCF4 ; =_02260C00+1 + str pc, _0225FCF4 ; =_02260C00+1 bx lr _0225FCF4: .word _02260C00+1 _0225FCF8: .word 0x110 @@ -986,7 +986,7 @@ ov123_0225FD98: ; 0x0225FD98 ldrne r1, [r8] cmpne r1, #0 ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - ldr r6, _0225FEA0 ; =SDK_OVERLAY_OV_123_BSS_START + ldr r6, _0225FEA0 ; =SDK_OVERLAY_OV_123_BSS_START ; =_02260C00 _0225FDB0: ldr r0, [r8, #4] cmp r1, #0 @@ -998,7 +998,7 @@ _0225FDB0: add r5, r7, r0 cmp r7, r5 bhs _0225FE80 - ldr sb, _0225FEA4 ; =0xFFFFFB3E + ldr sb, _0225FEA4 ; =0xFFFFFB3E ; =0xFFFFFB3E _0225FDDC: ldr r0, [r7] bl ov123_0225FD5C @@ -1063,7 +1063,7 @@ _0225FEA4: .word 0xFFFFFB3E ov123_0225FEA8: ; 0x0225FEA8 stmdb sp!, {r3-r7, lr} sub sp, sp, #0x10 - ldr r3, _0225FF2C + ldr r3, _0225FF2C ; =_02260C00 mov r5, r1 add r1, r3, #0x1300 sub r6, r0, r1 @@ -1256,11 +1256,11 @@ ov123_02260148: ; 0x02260148 stmfd sp!, {r4-r7} stmfd sp!, {r0-r3} ldmfd sp!, {r4-r7} - ldr r1, _022601BC - adr r3, _022601B0 + ldr r1, _022601BC ; =ov123_0225FFE8 + adr r3, _022601B0 ; =_02260C00+1 str lr, [r3] - ldr r2, _022601B4 - ldr r0, _022601B8 + ldr r2, _022601B4 ; =0xAC + ldr r0, _022601B8 ; =0x982 bl ov123_0225FEA8 mov ip, r0 stmfd sp!, {r4-r7} @@ -1269,15 +1269,15 @@ ov123_02260148: ; 0x02260148 blx ip stmfd sp!, {r4} mov r4, r0 - ldr r1, _022601BC - ldr r2, _022601B4 - ldr r0, _022601B8 + ldr r1, _022601BC ; =ov123_0225FFE8 + ldr r2, _022601B4 ; =0xAC + ldr r0, _022601B8 ; =0x982 bl ov123_0225FF30 - str r0, _022601B8 + str r0, _022601B8 ; =0x982 mov r0, r4 ldmfd sp!, {r4} - ldr lr, _022601B0 - str pc, _022601B0 + ldr lr, _022601B0 ; =_02260C00+1 + str pc, _022601B0 ; =_02260C00+1 bx lr _022601B0: .word _02260C00+1 _022601B4: .word 0xAC @@ -1290,11 +1290,11 @@ ov123_022601C0: ; 0x022601C0 stmfd sp!, {r4-r7} stmfd sp!, {r0-r3} ldmfd sp!, {r4-r7} - ldr r1, _02260234 - adr r3, _02260228 + ldr r1, _02260234 ; =ov123_02260098 + adr r3, _02260228 ; =_02260C00+1 str lr, [r3] - ldr r2, _0226022C - ldr r0, _02260230 + ldr r2, _0226022C ; =0xAC + ldr r0, _02260230 ; =0x982 bl ov123_0225FEA8 mov ip, r0 stmfd sp!, {r4-r7} @@ -1303,15 +1303,15 @@ ov123_022601C0: ; 0x022601C0 blx ip stmfd sp!, {r4} mov r4, r0 - ldr r1, _02260234 - ldr r2, _0226022C - ldr r0, _02260230 + ldr r1, _02260234 ; =ov123_02260098 + ldr r2, _0226022C ; =0xAC + ldr r0, _02260230 ; =0x982 bl ov123_0225FF30 - str r0, _02260230 + str r0, _02260230 ; =0x982 mov r0, r4 ldmfd sp!, {r4} - ldr lr, _02260228 - str pc, _02260228 + ldr lr, _02260228 ; =_02260C00+1 + str pc, _02260228 ; =_02260C00+1 bx lr _02260228: .word _02260C00+1 _0226022C: .word 0xAC @@ -1464,11 +1464,11 @@ ov123_02260414: ; 0x02260414 stmfd sp!, {r4-r7} stmfd sp!, {r0-r3} ldmfd sp!, {r4-r7} - ldr r1, _02260488 - adr r3, _0226047C + ldr r1, _02260488 ; =ov123_02260238 + adr r3, _0226047C ; =_02260C00+1 str lr, [r3] - ldr r2, _02260480 - ldr r0, _02260484 + ldr r2, _02260480 ; =0x17C + ldr r0, _02260484 ; =0x982 bl ov123_0225FEA8 mov ip, r0 stmfd sp!, {r4-r7} @@ -1477,15 +1477,15 @@ ov123_02260414: ; 0x02260414 blx ip stmfd sp!, {r4} mov r4, r0 - ldr r1, _02260488 - ldr r2, _02260480 - ldr r0, _02260484 + ldr r1, _02260488 ; =ov123_02260238 + ldr r2, _02260480 ; =0x17C + ldr r0, _02260484 ; =0x982 bl ov123_0225FF30 - str r0, _02260484 + str r0, _02260484 ; =0x982 mov r0, r4 ldmfd sp!, {r4} - ldr lr, _0226047C - str pc, _0226047C + ldr lr, _0226047C ; =_02260C00+1 + str pc, _0226047C ; =_02260C00+1 bx lr _0226047C: .word _02260C00+1 _02260480: .word 0x17C @@ -1498,11 +1498,11 @@ ov123_0226048C: ; 0x0226048C stmfd sp!, {r4-r7} stmfd sp!, {r0-r3} ldmfd sp!, {r4-r7} - ldr r1, _02260500 - adr r3, _022604F4 + ldr r1, _02260500 ; =ov123_022603BC + adr r3, _022604F4 ; =_02260C00+1 str lr, [r3] - ldr r2, _022604F8 - ldr r0, _022604FC + ldr r2, _022604F8 ; =0x54 + ldr r0, _022604FC ; =0x982 bl ov123_0225FEA8 mov ip, r0 stmfd sp!, {r4-r7} @@ -1511,15 +1511,15 @@ ov123_0226048C: ; 0x0226048C blx ip stmfd sp!, {r4} mov r4, r0 - ldr r1, _02260500 - ldr r2, _022604F8 - ldr r0, _022604FC + ldr r1, _02260500 ; =ov123_022603BC + ldr r2, _022604F8 ; =0x54 + ldr r0, _022604FC ; =0x982 bl ov123_0225FF30 - str r0, _022604FC + str r0, _022604FC ; =0x982 mov r0, r4 ldmfd sp!, {r4} - ldr lr, _022604F4 - str pc, _022604F4 + ldr lr, _022604F4 ; =_02260C00+1 + str pc, _022604F4 ; =_02260C00+1 bx lr _022604F4: .word _02260C00+1 _022604F8: .word 0x54 @@ -1646,11 +1646,11 @@ ov123_0226068C: ; 0x0226068C stmfd sp!, {r4-r7} stmfd sp!, {r0-r3} ldmfd sp!, {r4-r7} - ldr r1, _02260700 - adr r3, _022606F4 + ldr r1, _02260700 ; =ov123_02260504 + adr r3, _022606F4 ; =_02260C00+1 str lr, [r3] - ldr r2, _022606F8 - ldr r0, _022606FC + ldr r2, _022606F8 ; =0xC4 + ldr r0, _022606FC ; =0x982 bl ov123_0225FEA8 mov ip, r0 stmfd sp!, {r4-r7} @@ -1659,15 +1659,15 @@ ov123_0226068C: ; 0x0226068C blx ip stmfd sp!, {r4} mov r4, r0 - ldr r1, _02260700 - ldr r2, _022606F8 - ldr r0, _022606FC + ldr r1, _02260700 ; =ov123_02260504 + ldr r2, _022606F8 ; =0xC4 + ldr r0, _022606FC ; =0x982 bl ov123_0225FF30 - str r0, _022606FC + str r0, _022606FC ; =0x982 mov r0, r4 ldmfd sp!, {r4} - ldr lr, _022606F4 - str pc, _022606F4 + ldr lr, _022606F4 ; =_02260C00+1 + str pc, _022606F4 ; =_02260C00+1 bx lr _022606F4: .word _02260C00+1 _022606F8: .word 0xC4 @@ -1680,11 +1680,11 @@ ov123_02260704: ; 0x02260704 stmfd sp!, {r4-r7} stmfd sp!, {r0-r3} ldmfd sp!, {r4-r7} - ldr r1, _02260778 - adr r3, _0226076C + ldr r1, _02260778 ; =ov123_022605C8 + adr r3, _0226076C ; =_02260C00+1 str lr, [r3] - ldr r2, _02260770 - ldr r0, _02260774 + ldr r2, _02260770 ; =0xC4 + ldr r0, _02260774 ; =0x982 bl ov123_0225FEA8 mov ip, r0 stmfd sp!, {r4-r7} @@ -1693,15 +1693,15 @@ ov123_02260704: ; 0x02260704 blx ip stmfd sp!, {r4} mov r4, r0 - ldr r1, _02260778 - ldr r2, _02260770 - ldr r0, _02260774 + ldr r1, _02260778 ; =ov123_022605C8 + ldr r2, _02260770 ; =0xC4 + ldr r0, _02260774 ; =0x982 bl ov123_0225FF30 - str r0, _02260774 + str r0, _02260774 ; =0x982 mov r0, r4 ldmfd sp!, {r4} - ldr lr, _0226076C - str pc, _0226076C + ldr lr, _0226076C ; =_02260C00+1 + str pc, _0226076C ; =_02260C00+1 bx lr _0226076C: .word _02260C00+1 _02260770: .word 0xC4 diff --git a/main.lsf b/main.lsf index ee6556461..d7ca81568 100644 --- a/main.lsf +++ b/main.lsf @@ -1201,7 +1201,7 @@ Overlay OVY_123 Overlay OVY_124 { After OVY_123 - Object asm/overlay_124.o + Object src/overlay_124.o } Overlay OVY_125 { diff --git a/src/overlay_124.c b/src/overlay_124.c new file mode 100644 index 000000000..5d82ff114 --- /dev/null +++ b/src/overlay_124.c @@ -0,0 +1,65 @@ +#include "follow_mon.h" +#include "global.h" +#include "overlay_124.h" +#include "field_system.h" +#include "main.h" +#include "map_events.h" +#include "overlay_123.h" +#include "save_local_field_data.h" +#include "unk_02092BB8.h" +#include "unk_02092BE8.h" + +FS_EXTERN_OVERLAY(OVY_123); + +static void ov124_02260D1C(FieldSystem *fieldSystem); +static void ov124_02260D68(void); +static void ov124_02260D6C(void); +static void ov124_02260D58(void); + +void FieldSystem_Init(OVY_MANAGER *man, FieldSystem *fieldSystem) { + u32 key = 2441 * 4073; // these are both prime + FS_LoadOverlay(MI_PROCESSOR_ARM9, FS_OVERLAY_ID(OVY_123)); + key += 769 * (!ov123_0225F4A8(ov124_02260D68)); // 769 is prime + UnkStruct_02111868_sub *args = OverlayManager_GetArgs(man); + fieldSystem->saveData = args->saveData; + fieldSystem->taskman = NULL; + key += 47 * (!ov123_0225F688(ov124_02260D6C)); // 47 is prime + fieldSystem->location = LocalFieldData_GetCurrentPosition(Save_LocalFieldData_Get(fieldSystem->saveData)); + fieldSystem->mapMatrix = MapMatrix_New(); + u32 key2 = 929 * ov123_0225F520(ov124_02260D58); // 929 is prime + Field_AllocateMapEvents(fieldSystem, HEAP_ID_FIELD); + fieldSystem->bagCursor = BagCursor_New(HEAP_ID_FIELD); + FS_UnloadOverlay(MI_PROCESSOR_ARM9, FS_OVERLAY_ID(OVY_123)); + + // all combinations of the three prime multipliers above are coprime with 2441 and 4073 + if ((key + key2) % 2441) { + ov124_02260D1C(fieldSystem); + } + fieldSystem->unkA8 = sub_02092BB8(HEAP_ID_FIELD); + fieldSystem->unk108 = FieldSystem_UnkSub108_Alloc(HEAP_ID_FIELD); + fieldSystem->unk114 = GearPhoneRingManager_New(HEAP_ID_FIELD, fieldSystem); + fieldSystem->judgeStatPosition = 0; + if ((key + key2) % 4073) { + ov124_02260D1C(fieldSystem); + } +} + +// clobbers the heap worse if you have made more progress through the game +static void ov124_02260D1C(FieldSystem *fieldSystem) { + int i = 0; + int numBadges = 0; + for (i = 0; i < 16; ++i) { + if (PlayerProfile_TestBadgeFlag(Save_PlayerData_GetProfileAddr(fieldSystem->saveData), i) == TRUE) { + ++numBadges; + } + } + AllocFromHeapAtEnd(HEAP_ID_3, numBadges == 0 ? 20000 : (20000 * numBadges)); +} + +// you can have a little heap clobber, as a treat +static void ov124_02260D58(void) { + AllocFromHeapAtEnd(HEAP_ID_3, 1000); +} + +static void ov124_02260D68(void) {} +static void ov124_02260D6C(void) {} diff --git a/src/touch_save_app.c b/src/touch_save_app.c index 2e1c61514..7015b433e 100644 --- a/src/touch_save_app.c +++ b/src/touch_save_app.c @@ -17,6 +17,7 @@ #include "yes_no_prompt.h" #include "sys_task.h" #include "unk_020183F0.h" +#include "overlay_123.h" FS_EXTERN_OVERLAY(OVY_123); @@ -65,10 +66,6 @@ typedef struct TouchSaveAppData { SysTask *savingMovementTask; } TouchSaveAppData; // size: 0x6C -extern void *ov123_0225F4A8(void(*)(void)); -extern void *ov123_0225F520(void(*)(void)); -extern void *ov123_0225F610(void(*)(void)); - static void ov30_0225D700(SysTask *task, TouchSaveAppData *data); static void TouchSaveApp_SetupGraphics(TouchSaveAppData *data); static void TouchSaveApp_DestroyWindow(TouchSaveAppData *data);