diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 5ada5dd59..a86f1b633 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -215,7 +215,8 @@ Static arm9 Object unk_02054C14.o Object unk_02055068.o Object unk_020557F4.o - Object unk_02057380.o + Object map_object.o + Object map_object_s.o Object unk_02058EE8.o Object unk_02059F04.o Object unk_0205AD98.o diff --git a/arm9/asm/unk_02057380.s b/arm9/asm/map_object_s.s similarity index 95% rename from arm9/asm/unk_02057380.s rename to arm9/asm/map_object_s.s index 2871ce831..cd24f0dc8 100644 --- a/arm9/asm/unk_02057380.s +++ b/arm9/asm/map_object_s.s @@ -5,103 +5,8 @@ .text - thumb_func_start sub_02057380 -sub_02057380: ; 0x02057380 - push {r3-r7, lr} - add r5, r1, #0x0 - add r6, r0, #0x0 - add r0, r5, #0x0 - add r7, r2, #0x0 - bl sub_02057444 - add r4, r0, #0x0 - add r1, r6, #0x0 - bl sub_020583E0 - add r0, r4, #0x0 - add r1, r5, #0x0 - bl sub_02058364 - add r0, r4, #0x0 - add r1, r7, #0x0 - bl sub_02058398 - add r0, r4, #0x0 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start sub_020573AC -sub_020573AC: ; 0x020573AC - push {r4, lr} - add r4, r0, #0x0 - bl sub_020583CC - add r1, r0, #0x0 - mov r0, #0xb - bl FreeToHeapExplicit - mov r0, #0xb - add r1, r4, #0x0 - bl FreeToHeapExplicit - pop {r4, pc} - .balign 4 - - thumb_func_start sub_020573C8 -sub_020573C8: ; 0x020573C8 - push {r3-r7, lr} - sub sp, #0x8 - str r0, [sp, #0x0] - add r5, r2, #0x0 - str r3, [sp, #0x4] - ldr r7, [sp, #0x20] - bl sub_02058368 - add r6, r0, #0x0 - ldr r0, [sp, #0x0] - bl sub_020583CC - add r4, r0, #0x0 - cmp r6, #0x0 - beq _02057430 -_020573E6: - add r0, r4, #0x0 - bl sub_02058830 - cmp r0, #0x1 - bne _02057426 - ldr r2, [sp, #0x4] - add r0, r4, #0x0 - add r1, r5, #0x0 - add r3, r7, #0x0 - bl sub_02057F90 - cmp r0, #0x0 - beq _02057408 - cmp r0, #0x1 - beq _02057426 - cmp r0, #0x2 - b _02057426 -_02057408: - add r0, r4, #0x0 - bl sub_02058450 - cmp r5, r0 - beq _02057426 - mov r1, #0x1 - add r0, r4, #0x0 - lsl r1, r1, #0xa - bl sub_0205842C - cmp r0, #0x0 - bne _02057426 - add r0, r4, #0x0 - bl sub_02057654 -_02057426: - mov r0, #0x4a - lsl r0, r0, #0x2 - add r4, r4, r0 - sub r6, r6, #0x1 - bne _020573E6 -_02057430: - ldr r0, [sp, #0x0] - bl sub_020583A0 - add r1, r0, #0x0 - ldr r0, [sp, #0x0] - bl ov05_021F2AF4 - add sp, #0x8 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start sub_02057444 -sub_02057444: ; 0x02057444 + thumb_func_start MapObjectManager_New +MapObjectManager_New: ; 0x02057444 push {r4-r6, lr} mov r1, #0x4b add r4, r0, #0x0 @@ -336,8 +241,8 @@ _02057648: pop {r3-r5, pc} .balign 4 - thumb_func_start sub_02057654 -sub_02057654: ; 0x02057654 + thumb_func_start MapObject_Remove +MapObject_Remove: ; 0x02057654 push {r4, lr} add r4, r0, #0x0 bl sub_02058578 @@ -370,7 +275,7 @@ sub_02057688: ; 0x02057688 lsr r1, r1, #0x10 bl FieldSystem_FlagSet add r0, r4, #0x0 - bl sub_02057654 + bl MapObject_Remove pop {r3-r5, pc} thumb_func_start sub_020576A8 @@ -426,10 +331,10 @@ sub_0205771C: ; 0x0205771C push {r3-r7, lr} add r5, r0, #0x0 mov r4, #0x0 - bl sub_02058368 + bl MapObjectManager_GetObjectCount add r6, r0, #0x0 add r0, r5, #0x0 - bl sub_020583CC + bl MapObjectManager_GetObjects mov r7, #0x4a add r5, r0, #0x0 lsl r7, r7, #0x2 @@ -440,7 +345,7 @@ _02057734: cmp r0, #0x0 beq _02057746 add r0, r5, #0x0 - bl sub_02057654 + bl MapObject_Remove _02057746: add r4, r4, #0x1 add r5, r5, r7 @@ -459,10 +364,10 @@ sub_02057750: ; 0x02057750 _02057760: add r0, r5, #0x0 mov r4, #0x0 - bl sub_02058368 + bl MapObjectManager_GetObjectCount add r6, r0, #0x0 add r0, r5, #0x0 - bl sub_020583CC + bl MapObjectManager_GetObjects mov r7, #0x4a add r5, r0, #0x0 lsl r7, r7, #0x2 @@ -501,16 +406,16 @@ sub_020577A8: ; 0x020577A8 _020577B8: add r0, r5, #0x0 mov r4, #0x0 - bl sub_02058368 + bl MapObjectManager_GetObjectCount add r6, r0, #0x0 add r0, r5, #0x0 - bl sub_020583CC + bl MapObjectManager_GetObjects mov r7, #0x4a add r5, r0, #0x0 lsl r7, r7, #0x2 _020577CE: add r0, r5, #0x0 - bl sub_02058830 + bl MapObject_IsInUse cmp r0, #0x1 bne _020577F6 add r0, r5, #0x0 @@ -1046,10 +951,10 @@ sub_02057C64: ; 0x02057C64 push {r3-r7, lr} add r5, r0, #0x0 mov r4, #0x0 - bl sub_02058368 + bl MapObjectManager_GetObjectCount add r6, r0, #0x0 add r0, r5, #0x0 - bl sub_020583CC + bl MapObjectManager_GetObjects mov r7, #0x4a add r5, r0, #0x0 lsl r7, r7, #0x2 @@ -1515,7 +1420,7 @@ GetMapObjectByID: ; 0x02058060 bl GF_AssertFail _0205806E: add r0, r5, #0x0 - bl sub_02058368 + bl MapObjectManager_GetObjectCount add r4, r0, #0x0 add r0, r5, #0x0 bl sub_020583C4 @@ -1525,7 +1430,7 @@ _0205806E: _02058082: add r0, r5, #0x0 mov r1, #0x1 - bl sub_0205842C + bl MapObject_TestFlagsBits cmp r0, #0x1 bne _020580A6 add r0, r5, #0x0 @@ -1552,7 +1457,7 @@ sub_020580B4: ; 0x020580B4 push {r3-r7, lr} add r5, r0, #0x0 add r6, r1, #0x0 - bl sub_02058368 + bl MapObjectManager_GetObjectCount add r4, r0, #0x0 add r0, r5, #0x0 bl sub_020583C4 @@ -1562,7 +1467,7 @@ sub_020580B4: ; 0x020580B4 _020580CC: add r0, r5, #0x0 mov r1, #0x1 - bl sub_0205842C + bl MapObject_TestFlagsBits cmp r0, #0x1 bne _020580E6 add r0, r5, #0x0 @@ -1587,7 +1492,7 @@ sub_020580F4: ; 0x020580F4 add r4, r0, #0x0 str r1, [sp, #0x0] add r6, r3, #0x0 - bl sub_02058368 + bl MapObjectManager_GetObjectCount add r7, r0, #0x0 ldr r0, [r5, #0x0] cmp r0, r7 @@ -1811,7 +1716,7 @@ sub_020582A8: ; 0x020582A8 mov r1, #0x1 add r5, r0, #0x0 add r4, r2, #0x0 - bl sub_0205842C + bl MapObject_TestFlagsBits cmp r0, #0x0 bne _020582BE mov r0, #0x0 @@ -1854,7 +1759,7 @@ sub_020582F8: ; 0x020582F8 add r5, r0, #0x0 add r6, r2, #0x0 add r7, r3, #0x0 - bl sub_0205842C + bl MapObject_TestFlagsBits cmp r0, #0x0 bne _02058310 mov r0, #0x0 @@ -1881,7 +1786,7 @@ sub_0205832C: ; 0x0205832C add r0, r4, #0x0 bl sub_02058EF8 add r0, r4, #0x0 - bl sub_02058830 + bl MapObject_IsInUse cmp r0, #0x0 beq _02058346 add r0, r4, #0x0 @@ -1907,13 +1812,13 @@ sub_02058360: ; 0x02058360 bx lr .balign 4 - thumb_func_start sub_02058364 -sub_02058364: ; 0x02058364 + thumb_func_start MapObjectManager_SetObjectCount +MapObjectManager_SetObjectCount: ; 0x02058364 str r1, [r0, #0x4] bx lr - thumb_func_start sub_02058368 -sub_02058368: ; 0x02058368 + thumb_func_start MapObjectManager_GetObjectCount +MapObjectManager_GetObjectCount: ; 0x02058368 ldr r0, [r0, #0x4] bx lr @@ -1954,8 +1859,8 @@ sub_02058390: ; 0x02058390 bx lr .balign 4 - thumb_func_start sub_02058398 -sub_02058398: ; 0x02058398 + thumb_func_start MapObjectManager_SetHeapID +MapObjectManager_SetHeapID: ; 0x02058398 str r1, [r0, #0xc] bx lr @@ -2004,8 +1909,8 @@ sub_020583C4: ; 0x020583C4 ldr r0, [r0, r1] bx lr - thumb_func_start sub_020583CC -sub_020583CC: ; 0x020583CC + thumb_func_start MapObjectManager_GetObjects +MapObjectManager_GetObjects: ; 0x020583CC mov r1, #0x49 lsl r1, r1, #0x2 ldr r0, [r0, r1] @@ -2020,8 +1925,8 @@ sub_020583D4: ; 0x020583D4 str r1, [r0, #0x0] bx lr - thumb_func_start sub_020583E0 -sub_020583E0: ; 0x020583E0 + thumb_func_start MapObjectManager_SetFieldSystemPtr +MapObjectManager_SetFieldSystemPtr: ; 0x020583E0 mov r2, #0x4a lsl r2, r2, #0x2 str r1, [r0, r2] @@ -2085,8 +1990,8 @@ sub_02058424: ; 0x02058424 bx lr .balign 4 - thumb_func_start sub_0205842C -sub_0205842C: ; 0x0205842C + thumb_func_start MapObject_TestFlagsBits +MapObject_TestFlagsBits: ; 0x0205842C ldr r0, [r0, #0x0] tst r0, r1 beq _02058436 @@ -2738,16 +2643,16 @@ _0205877C: .word sub_02058384 MapObjectManager_PauseAllMovement: ; 0x02058780 push {r4-r6, lr} add r5, r0, #0x0 - bl sub_02058368 + bl MapObjectManager_GetObjectCount add r4, r0, #0x0 add r0, r5, #0x0 - bl sub_020583CC + bl MapObjectManager_GetObjects mov r6, #0x4a add r5, r0, #0x0 lsl r6, r6, #0x2 _02058796: add r0, r5, #0x0 - bl sub_02058830 + bl MapObject_IsInUse cmp r0, #0x0 beq _020587A6 add r0, r5, #0x0 @@ -2763,16 +2668,16 @@ _020587A6: MapObjectManager_UnpauseAllMovement: ; 0x020587B0 push {r4-r6, lr} add r5, r0, #0x0 - bl sub_02058368 + bl MapObjectManager_GetObjectCount add r4, r0, #0x0 add r0, r5, #0x0 - bl sub_020583CC + bl MapObjectManager_GetObjects mov r6, #0x4a add r5, r0, #0x0 lsl r6, r6, #0x2 _020587C6: add r0, r5, #0x0 - bl sub_02058830 + bl MapObject_IsInUse cmp r0, #0x0 beq _020587D6 add r0, r5, #0x0 @@ -2833,13 +2738,13 @@ _0205882C: mov r0, #0x0 pop {r3, pc} - thumb_func_start sub_02058830 -sub_02058830: ; 0x02058830 - ldr r3, _02058838 ; =sub_0205842C + thumb_func_start MapObject_IsInUse +MapObject_IsInUse: ; 0x02058830 + ldr r3, _02058838 ; =MapObject_TestFlagsBits mov r1, #0x1 bx r3 nop -_02058838: .word sub_0205842C +_02058838: .word MapObject_TestFlagsBits thumb_func_start sub_0205883C sub_0205883C: ; 0x0205883C @@ -2859,11 +2764,11 @@ _02058850: .word sub_02058418 thumb_func_start sub_02058854 sub_02058854: ; 0x02058854 - ldr r3, _0205885C ; =sub_0205842C + ldr r3, _0205885C ; =MapObject_TestFlagsBits mov r1, #0x2 bx r3 nop -_0205885C: .word sub_0205842C +_0205885C: .word MapObject_TestFlagsBits thumb_func_start sub_02058860 sub_02058860: ; 0x02058860 @@ -2892,21 +2797,21 @@ _02058880: .word sub_02058410 thumb_func_start sub_02058884 sub_02058884: ; 0x02058884 - ldr r3, _0205888C ; =sub_0205842C + ldr r3, _0205888C ; =MapObject_TestFlagsBits mov r1, #0x1 lsl r1, r1, #0xe bx r3 .balign 4 -_0205888C: .word sub_0205842C +_0205888C: .word MapObject_TestFlagsBits thumb_func_start sub_02058890 sub_02058890: ; 0x02058890 - ldr r3, _02058898 ; =sub_0205842C + ldr r3, _02058898 ; =MapObject_TestFlagsBits mov r1, #0x2 lsl r1, r1, #0x8 bx r3 .balign 4 -_02058898: .word sub_0205842C +_02058898: .word MapObject_TestFlagsBits thumb_func_start MapObject_SetVisible MapObject_SetVisible: ; 0x0205889C @@ -2945,7 +2850,7 @@ sub_020588D4: ; 0x020588D4 push {r3, lr} mov r1, #0x2 lsl r1, r1, #0x12 - bl sub_0205842C + bl MapObject_TestFlagsBits cmp r0, #0x1 beq _020588E6 mov r0, #0x1 @@ -2991,7 +2896,7 @@ _0205891C: .word sub_02058418 sub_02058920: ; 0x02058920 push {r3, lr} mov r1, #0x40 - bl sub_0205842C + bl MapObject_TestFlagsBits cmp r0, #0x1 bne _02058930 mov r0, #0x1 @@ -3808,10 +3713,10 @@ sub_02058D74: ; 0x02058D74 add r5, r0, #0x0 add r6, r1, #0x0 add r7, r2, #0x0 - bl sub_02058368 + bl MapObjectManager_GetObjectCount add r4, r0, #0x0 add r0, r5, #0x0 - bl sub_020583CC + bl MapObjectManager_GetObjects add r5, r0, #0x0 _02058D8A: add r0, r5, #0x0 diff --git a/arm9/asm/unk_02048904.s b/arm9/asm/unk_02048904.s index a75af32a3..1b4a207d0 100644 --- a/arm9/asm/unk_02048904.s +++ b/arm9/asm/unk_02048904.s @@ -265,7 +265,7 @@ sub_02048AE4: ; 0x02048AE4 add r5, r0, #0x0 mov r1, #0x40 mov r2, #0x5 - bl sub_02057380 + bl MapObjectManager_Init str r0, [r5, #0x34] ldr r0, [r5, #0xc] bl Save_PlayerData_GetProfileAddr @@ -303,7 +303,7 @@ sub_02048B34: ; 0x02048B34 ldr r0, [r4, #0x34] bl sub_0205771C ldr r0, [r4, #0x34] - bl sub_020573AC + bl MapObjectManager_Delete pop {r4, pc} thumb_func_start sub_02048B50 @@ -312,7 +312,7 @@ sub_02048B50: ; 0x02048B50 add r5, r0, #0x0 mov r1, #0x40 mov r2, #0x5 - bl sub_02057380 + bl MapObjectManager_Init str r0, [r5, #0x34] add r0, r5, #0x0 bl sub_02034E60 diff --git a/arm9/asm/unk_0204CB20.s b/arm9/asm/unk_0204CB20.s index f59713403..1f7896eac 100644 --- a/arm9/asm/unk_0204CB20.s +++ b/arm9/asm/unk_0204CB20.s @@ -1104,7 +1104,7 @@ sub_0204D328: ; 0x0204D328 bl GetMapObjectByID cmp r0, #0x0 beq _0204D37C - bl sub_02057654 + bl MapObject_Remove _0204D37C: ldr r0, _0204D430 ; =UNK_021C5A68 lsl r4, r5, #0x3 diff --git a/arm9/asm/unk_02055068.s b/arm9/asm/unk_02055068.s index ef0791cad..12e562f41 100644 --- a/arm9/asm/unk_02055068.s +++ b/arm9/asm/unk_02055068.s @@ -126,7 +126,7 @@ sub_02055168: ; 0x02055168 push {r4, lr} add r4, r0, #0x0 bl PlayerAvatar_GetMapObject - bl sub_02057654 + bl MapObject_Remove add r0, r4, #0x0 bl sub_02055160 pop {r4, pc} diff --git a/arm9/asm/unk_02058EE8.s b/arm9/asm/unk_02058EE8.s index 8882c2c9e..bb8b6926f 100644 --- a/arm9/asm/unk_02058EE8.s +++ b/arm9/asm/unk_02058EE8.s @@ -2483,7 +2483,7 @@ sub_0205995C: ; 0x0205995C bl sub_020583BC str r0, [sp, #0x8] add r0, r7, #0x0 - bl sub_02058368 + bl MapObjectManager_GetObjectCount str r0, [sp, #0x4] _0205997C: ldr r0, [sp, #0x8] diff --git a/arm9/asm/unk_0205AD98.s b/arm9/asm/unk_0205AD98.s index e49322c61..f32c72a5e 100644 --- a/arm9/asm/unk_0205AD98.s +++ b/arm9/asm/unk_0205AD98.s @@ -16,7 +16,7 @@ sub_0205AD98: ; 0x0205AD98 push {r4, lr} mov r1, #0x1 add r4, r0, #0x0 - bl sub_0205842C + bl MapObject_TestFlagsBits cmp r0, #0x0 bne _0205ADAA mov r0, #0x0 @@ -24,7 +24,7 @@ sub_0205AD98: ; 0x0205AD98 _0205ADAA: add r0, r4, #0x0 mov r1, #0x2 - bl sub_0205842C + bl MapObject_TestFlagsBits cmp r0, #0x1 bne _0205ADBA mov r0, #0x0 @@ -32,12 +32,12 @@ _0205ADAA: _0205ADBA: add r0, r4, #0x0 mov r1, #0x10 - bl sub_0205842C + bl MapObject_TestFlagsBits cmp r0, #0x1 bne _0205ADD6 add r0, r4, #0x0 mov r1, #0x20 - bl sub_0205842C + bl MapObject_TestFlagsBits cmp r0, #0x0 bne _0205ADD6 mov r0, #0x0 @@ -89,7 +89,7 @@ sub_0205AE28: ; 0x0205AE28 push {r4, lr} mov r1, #0x10 add r4, r0, #0x0 - bl sub_0205842C + bl MapObject_TestFlagsBits cmp r0, #0x0 bne _0205AE3A mov r0, #0x1 @@ -97,7 +97,7 @@ sub_0205AE28: ; 0x0205AE28 _0205AE3A: add r0, r4, #0x0 mov r1, #0x20 - bl sub_0205842C + bl MapObject_TestFlagsBits cmp r0, #0x0 beq _0205AE4A mov r0, #0x1 @@ -112,7 +112,7 @@ sub_0205AE50: ; 0x0205AE50 push {r4, lr} mov r1, #0x10 add r4, r0, #0x0 - bl sub_0205842C + bl MapObject_TestFlagsBits cmp r0, #0x0 bne _0205AE62 mov r0, #0x1 @@ -120,7 +120,7 @@ sub_0205AE50: ; 0x0205AE50 _0205AE62: add r0, r4, #0x0 mov r1, #0x20 - bl sub_0205842C + bl MapObject_TestFlagsBits cmp r0, #0x0 bne _0205AE72 mov r0, #0x0 @@ -431,7 +431,7 @@ sub_0205B080: ; 0x0205B080 bl sub_0205B058 add r0, r4, #0x0 mov r1, #0x20 - bl sub_0205842C + bl MapObject_TestFlagsBits cmp r0, #0x0 bne _0205B098 mov r0, #0x0 diff --git a/arm9/global.inc b/arm9/global.inc index 58a1d9663..f1821d732 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -3983,14 +3983,14 @@ .extern sub_02057260 .extern sub_02057278 .extern sub_020572B8 -.extern sub_02057380 -.extern sub_020573AC +.extern MapObjectManager_Init +.extern MapObjectManager_Delete .extern sub_020573C8 .extern sub_0205753C .extern sub_020575D4 .extern sub_02057614 .extern sub_02057634 -.extern sub_02057654 +.extern MapObject_Remove .extern sub_02057688 .extern sub_020576A8 .extern sub_0205771C @@ -4005,7 +4005,7 @@ .extern sub_0205829C .extern sub_020582A8 .extern sub_020582F8 -.extern sub_02058368 +.extern MapObjectManager_GetObjectCount .extern sub_0205837C .extern sub_02058384 .extern sub_02058390 @@ -4020,7 +4020,7 @@ .extern sub_02058410 .extern sub_02058418 .extern sub_02058424 -.extern sub_0205842C +.extern MapObject_TestFlagsBits .extern sub_02058444 .extern MapObject_GetID .extern sub_02058450 @@ -4082,7 +4082,7 @@ .extern sub_020587F4 .extern sub_02058804 .extern sub_0205881C -.extern sub_02058830 +.extern MapObject_IsInUse .extern sub_0205883C .extern sub_02058848 .extern sub_02058854 diff --git a/arm9/overlays/05/asm/ov05_021E5FD8.s b/arm9/overlays/05/asm/ov05_021E5FD8.s index 15f9979fe..b2442a90d 100644 --- a/arm9/overlays/05/asm/ov05_021E5FD8.s +++ b/arm9/overlays/05/asm/ov05_021E5FD8.s @@ -1175,7 +1175,7 @@ _021E6938: add r0, r4, #0 bl ov05_021F1AF8 add r0, r4, #0 - bl sub_02057654 + bl MapObject_Remove ldr r0, _021E6950 ; =0x0000065B bl PlaySE mov r0, #0 diff --git a/arm9/overlays/05/asm/ov05_021F0514.s b/arm9/overlays/05/asm/ov05_021F0514.s index 0bc5badab..5a625328e 100644 --- a/arm9/overlays/05/asm/ov05_021F0514.s +++ b/arm9/overlays/05/asm/ov05_021F0514.s @@ -2593,7 +2593,7 @@ ov05_021F19A4: ; 0x021F19A4 add r6, r1, #0 lsl r1, r4, #9 add r5, r0, #0 - bl sub_0205842C + bl MapObject_TestFlagsBits cmp r0, #1 bne _021F19B8 mov r4, #0 @@ -2601,13 +2601,13 @@ _021F19B8: mov r1, #1 add r0, r5, #0 lsl r1, r1, #0xc - bl sub_0205842C + bl MapObject_TestFlagsBits cmp r0, #1 bne _021F19D6 mov r1, #2 add r0, r5, #0 lsl r1, r1, #0xc - bl sub_0205842C + bl MapObject_TestFlagsBits cmp r0, #0 bne _021F19D6 mov r4, #0 diff --git a/arm9/overlays/05/asm/ov05_021F1B0C.s b/arm9/overlays/05/asm/ov05_021F1B0C.s index 3bf5a9d58..7f5ffed91 100644 --- a/arm9/overlays/05/asm/ov05_021F1B0C.s +++ b/arm9/overlays/05/asm/ov05_021F1B0C.s @@ -198,7 +198,7 @@ ov05_021F1C64: ; 0x021F1C64 add r6, r1, #0 lsl r1, r4, #9 add r5, r0, #0 - bl sub_0205842C + bl MapObject_TestFlagsBits cmp r0, #1 bne _021F1C78 mov r4, #0 @@ -206,13 +206,13 @@ _021F1C78: mov r1, #1 add r0, r5, #0 lsl r1, r1, #0xc - bl sub_0205842C + bl MapObject_TestFlagsBits cmp r0, #1 bne _021F1C96 mov r1, #2 add r0, r5, #0 lsl r1, r1, #0xc - bl sub_0205842C + bl MapObject_TestFlagsBits cmp r0, #0 bne _021F1C96 mov r4, #0 diff --git a/arm9/overlays/05/asm/ov05_021F1CB8.s b/arm9/overlays/05/asm/ov05_021F1CB8.s index 91c6047c1..3b37488fc 100644 --- a/arm9/overlays/05/asm/ov05_021F1CB8.s +++ b/arm9/overlays/05/asm/ov05_021F1CB8.s @@ -20,7 +20,7 @@ _021F1CD2: add r0, r5, #0 bl ov05_021F1D68 add r0, r5, #0 - bl sub_02058368 + bl MapObjectManager_GetObjectCount str r0, [sp, #0x10] add r0, r5, #0 bl sub_0205839C diff --git a/arm9/overlays/05/asm/ov05_021F1F04.s b/arm9/overlays/05/asm/ov05_021F1F04.s index 880be5942..dfdb3a5f4 100644 --- a/arm9/overlays/05/asm/ov05_021F1F04.s +++ b/arm9/overlays/05/asm/ov05_021F1F04.s @@ -471,7 +471,7 @@ ov05_021F2284: ; 0x021F2284 add r5, r0, #0 add r6, r1, #0 add r7, r2, #0 - bl sub_02058368 + bl MapObjectManager_GetObjectCount add r4, r0, #0 add r0, r5, #0 bl sub_020583BC @@ -480,7 +480,7 @@ _021F229A: ldr r0, [sp] cmp r0, r6 beq _021F22CE - bl sub_02058830 + bl MapObject_IsInUse cmp r0, #1 bne _021F22CE ldr r0, [sp] @@ -2202,7 +2202,7 @@ ov05_021F2F6C: ; 0x021F2F6C add r6, r1, #0 lsl r1, r4, #9 add r5, r0, #0 - bl sub_0205842C + bl MapObject_TestFlagsBits cmp r0, #1 bne _021F2F80 mov r4, #0 @@ -2210,13 +2210,13 @@ _021F2F80: mov r1, #1 add r0, r5, #0 lsl r1, r1, #0xc - bl sub_0205842C + bl MapObject_TestFlagsBits cmp r0, #1 bne _021F2F9E mov r1, #2 add r0, r5, #0 lsl r1, r1, #0xc - bl sub_0205842C + bl MapObject_TestFlagsBits cmp r0, #0 bne _021F2F9E mov r4, #0 @@ -2803,7 +2803,7 @@ _021F338A: mov r1, #2 ldr r0, [r4, #4] lsl r1, r1, #0x14 - bl sub_0205842C + bl MapObject_TestFlagsBits cmp r0, #1 ldr r0, [r4, #4] bne _021F33A8 @@ -3188,7 +3188,7 @@ ov05_021F36D8: ; 0x021F36D8 pop {r4, r5, r6, pc} _021F36EC: add r0, r4, #0 - bl sub_02058830 + bl MapObject_IsInUse cmp r0, #0 beq _021F3700 add r0, r4, #0 diff --git a/arm9/overlays/06/asm/overlay_06.s b/arm9/overlays/06/asm/overlay_06.s index 0f7f389d6..a3987bdbc 100644 --- a/arm9/overlays/06/asm/overlay_06.s +++ b/arm9/overlays/06/asm/overlay_06.s @@ -32754,7 +32754,7 @@ _022495D6: str r0, [r4, #0xc] ldr r1, _02249604 ; =0x00100200 add r0, r6, #0 - bl sub_0205842C + bl MapObject_TestFlagsBits cmp r0, #1 bne _022495EE mov r0, #1 @@ -32878,7 +32878,7 @@ _022496D0: str r0, [r4, #0xc] ldr r1, _022496FC ; =0x00100200 add r0, r6, #0 - bl sub_0205842C + bl MapObject_TestFlagsBits cmp r0, #1 bne _022496E8 mov r0, #1 @@ -34573,7 +34573,7 @@ _0224A3A6: str r0, [r5, #8] add r0, r4, #0 lsl r1, r1, #8 - bl sub_0205842C + bl MapObject_TestFlagsBits cmp r0, #1 beq _0224A3C8 add r0, r4, #0 diff --git a/arm9/src/map_object.c b/arm9/src/map_object.c new file mode 100644 index 000000000..45a554f11 --- /dev/null +++ b/arm9/src/map_object.c @@ -0,0 +1,56 @@ +#include "global.h" +#include "map_object.h" +#include "field_system.h" +#include "heap.h" + +extern MapObjectManager *MapObjectManager_New(u32 objectCount); +extern void MapObjectManager_SetFieldSystemPtr(MapObjectManager *manager, FieldSystem *fieldSystem); +extern void MapObjectManager_SetObjectCount(MapObjectManager *manager, u32 objectCount); +extern void MapObjectManager_SetHeapID(MapObjectManager *manager, HeapID heapId); +extern LocalMapObject *MapObjectManager_GetObjects(MapObjectManager *manager); +extern u32 MapObjectManager_GetObjectCount(MapObjectManager *manager); +extern BOOL MapObject_IsInUse(LocalMapObject *object); +extern void MapObject_Remove(LocalMapObject *object); +extern void ov05_021F2AF4(MapObjectManager *manager, void *param0); +extern void *sub_020583A0(MapObjectManager *manager); +extern u32 sub_02058450(LocalMapObject *object); +extern BOOL MapObject_TestFlagsBits(LocalMapObject *object, u32 flags); +extern u32 sub_02057F90(LocalMapObject *object, u32 a2, u32 objectCount, ObjectEvent *objectEvents); + +MapObjectManager *MapObjectManager_Init(FieldSystem *fieldSystem, u32 objectCount, HeapID heapId) { + MapObjectManager *ret = MapObjectManager_New(objectCount); + MapObjectManager_SetFieldSystemPtr(ret, fieldSystem); + MapObjectManager_SetObjectCount(ret, objectCount); + MapObjectManager_SetHeapID(ret, heapId); + + return ret; +} + +void MapObjectManager_Delete(MapObjectManager *manager) { + FreeToHeapExplicit(HEAP_ID_FIELD, MapObjectManager_GetObjects(manager)); + FreeToHeapExplicit(HEAP_ID_FIELD, manager); +} + +void sub_020573C8(MapObjectManager *manager, u32 unused, u32 a2, u32 objectCount, ObjectEvent *objectEvents) { + u32 count = MapObjectManager_GetObjectCount(manager); + LocalMapObject *objects = MapObjectManager_GetObjects(manager); + + for (; count != 0; count--) { + if (MapObject_IsInUse(objects) == TRUE) { + switch (sub_02057F90(objects, a2, objectCount, objectEvents)) { + case 0: + if (sub_02058450(objects) != a2 && !MapObject_TestFlagsBits(objects, MAPOBJECTFLAG_UNK10)) { + MapObject_Remove(objects); + } + break; + + case 1: + case 2: + break; + } + } + objects++; + } + + ov05_021F2AF4(manager, sub_020583A0(manager)); +} diff --git a/arm9/src/scrcmd.c b/arm9/src/scrcmd.c index 2f0f0fe4b..b91d239f6 100644 --- a/arm9/src/scrcmd.c +++ b/arm9/src/scrcmd.c @@ -111,7 +111,7 @@ extern LocalMapObject *MapObject_SetVisible(LocalMapObject *target, BOOL visible extern LocalMapObject *sub_020588B8(LocalMapObject *target, u32 param1); extern VecFx32 *sub_02058B7C(LocalMapObject *target); extern void ov05_021EF5E0(VecFx32 *target, u32 param1); -extern void sub_02057654(LocalMapObject *target); +extern void MapObject_Remove(LocalMapObject *target); extern u32 PlayerAvatar_GetFacingDirection(PlayerAvatar *playerAvatar); extern u32 sub_02059E74(u32 direction); extern void ov05_021F1EC0(LocalMapObject *event, u32 param1); @@ -1851,7 +1851,7 @@ BOOL ScrCmd_LockCamera(ScriptContext *ctx) { //0066 BOOL ScrCmd_ReleaseCamera(ScriptContext *ctx) { //0067 LocalMapObject **targetPtr = FieldSysGetAttrAddr(ctx->fieldSystem, SCRIPTENV_CAMERA_TARGET); - sub_02057654(*targetPtr); + MapObject_Remove(*targetPtr); VecFx32 *position = sub_02058B7C(GetMapObjectByID(ctx->fieldSystem->mapObjectManager, 0xff)); ov05_021EF5E0(position, ctx->fieldSystem->unk24); Camera_SetFixedTarget(position, ctx->fieldSystem->camera); diff --git a/include/map_object.h b/include/map_object.h new file mode 100644 index 000000000..5e6bc8628 --- /dev/null +++ b/include/map_object.h @@ -0,0 +1,57 @@ +#ifndef POKEDIAMOND_MAP_OBJECT_H +#define POKEDIAMOND_MAP_OBJECT_H + +#include "global.h" +#include "field_system.h" +#include "heap.h" + +typedef struct LocalMapObject { + u8 padding[0x128]; //todo verify size +} LocalMapObject; + +typedef struct ObjectEvent +{ + //todo fill out + //todo this should be in map_events_internal.h +} ObjectEvent; + +typedef enum MapObjectFlagBits { + MAPOBJECTFLAG_ACTIVE = (1 << 0), + MAPOBJECTFLAG_SINGLE_MOVEMENT = (1 << 1), + MAPOBJECTFLAG_UNK2 = (1 << 2), + MAPOBJECTFLAG_UNK3 = (1 << 3), + MAPOBJECTFLAG_UNK4 = (1 << 4), + MAPOBJECTFLAG_UNK5 = (1 << 5), + MAPOBJECTFLAG_MOVEMENT_PAUSED = (1 << 6), + MAPOBJECTFLAG_UNK7 = (1 << 7), + MAPOBJECTFLAG_UNK8 = (1 << 8), + MAPOBJECTFLAG_VISIBLE = (1 << 9), + MAPOBJECTFLAG_UNK10 = (1 << 10), + MAPOBJECTFLAG_UNK11 = (1 << 11), + MAPOBJECTFLAG_UNK12 = (1 << 12), + MAPOBJECTFLAG_UNK13 = (1 << 13), + MAPOBJECTFLAG_UNK14 = (1 << 14), + MAPOBJECTFLAG_UNK15 = (1 << 15), + MAPOBJECTFLAG_UNK16 = (1 << 16), + MAPOBJECTFLAG_UNK17 = (1 << 17), + MAPOBJECTFLAG_UNK18 = (1 << 18), + MAPOBJECTFLAG_UNK19 = (1 << 19), + MAPOBJECTFLAG_UNK20 = (1 << 20), + MAPOBJECTFLAG_UNK21 = (1 << 21), + MAPOBJECTFLAG_UNK22 = (1 << 22), + MAPOBJECTFLAG_IGNORE_HEIGHTS = (1 << 23), + MAPOBJECTFLAG_UNK24 = (1 << 24), + MAPOBJECTFLAG_UNK25 = (1 << 25), + MAPOBJECTFLAG_UNK26 = (1 << 26), + MAPOBJECTFLAG_UNK27 = (1 << 27), + MAPOBJECTFLAG_UNK28 = (1 << 28), + MAPOBJECTFLAG_UNK29 = (1 << 29), + MAPOBJECTFLAG_UNK30 = (1 << 30), + MAPOBJECTFLAG_UNK31 = (1 << 31), +} MapObjectFlagBits; + +MapObjectManager *MapObjectManager_Init(FieldSystem *fieldSystem, u32 objectCount, HeapID heapId); +void MapObjectManager_Delete(MapObjectManager *manager); +void sub_020573C8(MapObjectManager *manager, u32 unused, u32 a2, u32 objectCount, ObjectEvent *objectEvents); + +#endif //POKEDIAMOND_MAP_OBJECT_H diff --git a/include/script.h b/include/script.h index b1a644376..c22665e8f 100644 --- a/include/script.h +++ b/include/script.h @@ -12,16 +12,13 @@ #include "save.h" #include "task.h" #include "field_system.h" +#include "map_object.h" struct ScriptContext; typedef u8 (*ScrCmdFunc)(struct ScriptContext *); typedef u8 Script[]; -typedef struct LocalMapObject { //todo move to local_map_object.c - u8 padding[0x12C]; //todo verify size -} LocalMapObject; - typedef struct PartyMenuAppData PartyMenuAppData; //todo move to own file enum PCBoxOperation {