From 38d9d2df58229c7726cfa63f6303b3cdc7deb2e2 Mon Sep 17 00:00:00 2001 From: red031000 Date: Fri, 19 Apr 2024 18:28:50 +0100 Subject: [PATCH] MapObject_InitFromObjectEvent --- arm9/asm/map_object_s.s | 177 +++++---------------------- arm9/asm/unk_02037024.s | 2 +- arm9/asm/unk_0204B34C.s | 6 +- arm9/asm/unk_02055068.s | 2 +- arm9/asm/unk_02063948.s | 2 +- arm9/global.inc | 4 +- arm9/overlays/05/asm/ov05_021E5FD8.s | 8 +- arm9/overlays/05/asm/ov05_021F0514.s | 2 +- arm9/overlays/05/asm/ov05_021F1CB8.s | 2 +- arm9/overlays/05/asm/ov05_021F1F04.s | 18 +-- arm9/overlays/06/asm/overlay_06.s | 10 +- arm9/src/map_object.c | 64 ++++++++-- include/map_object.h | 2 +- 13 files changed, 116 insertions(+), 183 deletions(-) diff --git a/arm9/asm/map_object_s.s b/arm9/asm/map_object_s.s index f9570b7d2..73d079f36 100644 --- a/arm9/asm/map_object_s.s +++ b/arm9/asm/map_object_s.s @@ -5,119 +5,8 @@ .text - thumb_func_start sub_02057CF0 -sub_02057CF0: ; 0x02057CF0 - push {r3-r5, lr} - add r4, r1, #0x0 - bl MapObjectManager_GetPriority - add r5, r0, #0x0 - add r0, r4, #0x0 - bl MapObject_GetMovement - cmp r0, #0x30 - beq _02057D08 - cmp r0, #0x32 - bne _02057D0A -_02057D08: - add r5, r5, #0x2 -_02057D0A: - ldr r0, _02057D28 ; =sub_0205832C - add r1, r4, #0x0 - add r2, r5, #0x0 - bl SysTask_CreateOnMainQueue - add r5, r0, #0x0 - bne _02057D1C - bl GF_AssertFail -_02057D1C: - add r0, r4, #0x0 - add r1, r5, #0x0 - bl sub_02058554 - pop {r3-r5, pc} - nop -_02057D28: .word sub_0205832C - - thumb_func_start MapObject_InitFromObjectEvent -MapObject_InitFromObjectEvent: ; 0x02057D2C - push {r4-r6, lr} - add r4, r1, #0x0 - add r5, r0, #0x0 - add r0, r4, #0x0 - add r6, r2, #0x0 - bl ObjectEvent_GetID - add r1, r0, #0x0 - add r0, r5, #0x0 - bl MapObject_SetID - add r0, r4, #0x0 - bl sub_02058C04 - add r1, r0, #0x0 - add r0, r6, #0x0 - bl sub_02058170 - add r1, r0, #0x0 - add r0, r5, #0x0 - bl MapObject_SetGfxID - add r0, r4, #0x0 - bl sub_02058C0C - add r1, r0, #0x0 - add r0, r5, #0x0 - bl MapObject_SetMovement - add r0, r4, #0x0 - bl sub_02058C14 - add r1, r0, #0x0 - add r0, r5, #0x0 - bl MapObject_SetType - add r0, r4, #0x0 - bl ObjectEvent_GetFlagId - add r1, r0, #0x0 - add r0, r5, #0x0 - bl MapObject_SetFlagID - add r0, r4, #0x0 - bl sub_02058C24 - add r1, r0, #0x0 - add r0, r5, #0x0 - bl MapObject_SetScript - add r0, r4, #0x0 - bl sub_02058C2C - add r1, r0, #0x0 - add r0, r5, #0x0 - bl MapObject_SetInitialFacingDirection - add r0, r4, #0x0 - mov r1, #0x0 - bl sub_02058C58 - add r1, r0, #0x0 - add r0, r5, #0x0 - mov r2, #0x0 - bl MapObject_SetParam - add r0, r4, #0x0 - mov r1, #0x1 - bl sub_02058C58 - add r1, r0, #0x0 - add r0, r5, #0x0 - mov r2, #0x1 - bl MapObject_SetParam - add r0, r4, #0x0 - mov r1, #0x2 - bl sub_02058C58 - add r1, r0, #0x0 - add r0, r5, #0x0 - mov r2, #0x2 - bl MapObject_SetParam - add r0, r4, #0x0 - bl sub_02058C80 - add r1, r0, #0x0 - add r0, r5, #0x0 - bl MapObject_SetXRange - add r0, r4, #0x0 - bl sub_02058C8C - add r1, r0, #0x0 - add r0, r5, #0x0 - bl MapObject_SetYRange - add r0, r5, #0x0 - add r1, r4, #0x0 - bl sub_02057DFC - pop {r4-r6, pc} - .balign 4 - - thumb_func_start sub_02057DFC -sub_02057DFC: ; 0x02057DFC + thumb_func_start MapObject_SetPositionVecFromObjectEvent +MapObject_SetPositionVecFromObjectEvent: ; 0x02057DFC push {r3-r6, lr} sub sp, #0xc add r6, r1, #0x0 @@ -241,7 +130,7 @@ sub_02057EE0: ; 0x02057EE0 sub_02057F18: ; 0x02057F18 push {r3-r5, lr} add r4, r0, #0x0 - bl MapObject_GetGfxID + bl MapObject_GetSpriteID mov r1, #0x2 lsl r1, r1, #0xc cmp r0, r1 @@ -541,8 +430,8 @@ sub_0205816C: ; 0x0205816C bx lr .balign 4 - thumb_func_start sub_02058170 -sub_02058170: ; 0x02058170 + thumb_func_start FieldSystem_ResolveObjectSpriteID +FieldSystem_ResolveObjectSpriteID: ; 0x02058170 push {r3, lr} cmp r1, #0x65 blt _02058186 @@ -645,12 +534,12 @@ _02058228: add r1, r6, #0x0 bl sub_0205844C add r0, r4, #0x0 - bl sub_02058C24 + bl ObjectEvent_GetScript add r1, r0, #0x0 add r0, r5, #0x0 bl MapObject_SetScript add r0, r4, #0x0 - bl ObjectEvent_GetFlagId + bl ObjectEvent_GetFlagID add r1, r0, #0x0 add r0, r5, #0x0 bl MapObject_SetFlagID @@ -673,7 +562,7 @@ _0205826E: mov r1, #0x1 bl sub_020589B0 add r0, r6, #0x0 - bl sub_02058C24 + bl ObjectEvent_GetScript add r1, r0, #0x0 add r0, r5, #0x0 bl MapObject_SetScript @@ -1018,13 +907,13 @@ sub_02058450: ; 0x02058450 ldr r0, [r0, #0xc] bx lr - thumb_func_start MapObject_SetGfxID -MapObject_SetGfxID: ; 0x02058454 + thumb_func_start MapObject_SetSpriteID +MapObject_SetSpriteID: ; 0x02058454 str r1, [r0, #0x10] bx lr - thumb_func_start MapObject_GetGfxID -MapObject_GetGfxID: ; 0x02058458 + thumb_func_start MapObject_GetSpriteID +MapObject_GetSpriteID: ; 0x02058458 ldr r0, [r0, #0x10] bx lr @@ -1032,7 +921,7 @@ MapObject_GetGfxID: ; 0x02058458 sub_0205845C: ; 0x0205845C push {r3-r5, lr} add r5, r0, #0x0 - bl MapObject_GetGfxID + bl MapObject_GetSpriteID add r4, r0, #0x0 bl sub_0205C334 cmp r0, #0x1 @@ -2397,8 +2286,8 @@ ObjectEvent_SetSprite: ; 0x02058C00 strh r1, [r0, #0x2] bx lr - thumb_func_start sub_02058C04 -sub_02058C04: ; 0x02058C04 + thumb_func_start ObjectEvent_GetSpriteID +ObjectEvent_GetSpriteID: ; 0x02058C04 ldrh r0, [r0, #0x2] bx lr @@ -2407,8 +2296,8 @@ ObjectEvent_SetMovement: ; 0x02058C08 strh r1, [r0, #0x4] bx lr - thumb_func_start sub_02058C0C -sub_02058C0C: ; 0x02058C0C + thumb_func_start ObjectEvent_GetMovement +ObjectEvent_GetMovement: ; 0x02058C0C ldrh r0, [r0, #0x4] bx lr @@ -2417,8 +2306,8 @@ ObjectEvent_SetType: ; 0x02058C10 strh r1, [r0, #0x6] bx lr - thumb_func_start sub_02058C14 -sub_02058C14: ; 0x02058C14 + thumb_func_start ObjectEvent_GetType +ObjectEvent_GetType: ; 0x02058C14 ldrh r0, [r0, #0x6] bx lr @@ -2427,8 +2316,8 @@ ObjectEvent_SetFlagId: ; 0x02058C18 strh r1, [r0, #0x8] bx lr - thumb_func_start ObjectEvent_GetFlagId -ObjectEvent_GetFlagId: ; 0x02058C1C + thumb_func_start ObjectEvent_GetFlagID +ObjectEvent_GetFlagID: ; 0x02058C1C ldrh r0, [r0, #0x8] bx lr @@ -2437,8 +2326,8 @@ ObjectEvent_SetScript: ; 0x02058C20 strh r1, [r0, #0xa] bx lr - thumb_func_start sub_02058C24 -sub_02058C24: ; 0x02058C24 + thumb_func_start ObjectEvent_GetScript +ObjectEvent_GetScript: ; 0x02058C24 ldrh r0, [r0, #0xa] bx lr @@ -2447,8 +2336,8 @@ ObjectEvent_SetFacing: ; 0x02058C28 strh r1, [r0, #0xc] bx lr - thumb_func_start sub_02058C2C -sub_02058C2C: ; 0x02058C2C + thumb_func_start ObjectEvent_GetInitialFacingDirection +ObjectEvent_GetInitialFacingDirection: ; 0x02058C2C mov r1, #0xc ldrsh r0, [r0, r1] bx lr @@ -2478,8 +2367,8 @@ _02058C50: pop {r3, pc} .balign 4 - thumb_func_start sub_02058C58 -sub_02058C58: ; 0x02058C58 + thumb_func_start ObjectEvent_GetParam +ObjectEvent_GetParam: ; 0x02058C58 push {r3, lr} cmp r1, #0x0 beq _02058C68 @@ -2507,8 +2396,8 @@ ObjectEvent_SetXRange: ; 0x02058C7C strh r1, [r0, #0x14] bx lr - thumb_func_start sub_02058C80 -sub_02058C80: ; 0x02058C80 + thumb_func_start ObjectEvent_GetXRange +ObjectEvent_GetXRange: ; 0x02058C80 mov r1, #0x14 ldrsh r0, [r0, r1] bx lr @@ -2519,8 +2408,8 @@ ObjectEvent_SetYRange: ; 0x02058C88 strh r1, [r0, #0x16] bx lr - thumb_func_start sub_02058C8C -sub_02058C8C: ; 0x02058C8C + thumb_func_start ObjectEvent_GetYRange +ObjectEvent_GetYRange: ; 0x02058C8C mov r1, #0x16 ldrsh r0, [r0, r1] bx lr @@ -2588,7 +2477,7 @@ _02058CD4: thumb_func_start ObjectEvent_ScriptIdIsUnset ObjectEvent_ScriptIdIsUnset: ; 0x02058CE0 push {r3, lr} - bl sub_02058C24 + bl ObjectEvent_GetScript lsl r0, r0, #0x10 lsr r1, r0, #0x10 ldr r0, _02058CF8 ; =0x0000FFFF @@ -2612,7 +2501,7 @@ ObjectEvent_GetFlagID_AssertScriptIdIsUnset: ; 0x02058CFC bl GF_AssertFail _02058D0C: add r0, r4, #0x0 - bl ObjectEvent_GetFlagId + bl ObjectEvent_GetFlagID pop {r4, pc} thumb_func_start sub_02058D14 diff --git a/arm9/asm/unk_02037024.s b/arm9/asm/unk_02037024.s index 0ef8b2bb2..9aba10c86 100644 --- a/arm9/asm/unk_02037024.s +++ b/arm9/asm/unk_02037024.s @@ -313,7 +313,7 @@ _02037244: cmp r0, #0x1 bne _02037260 ldr r0, [r4, #0x0] - bl MapObject_GetGfxID + bl MapObject_GetSpriteID sub r0, #0x5b cmp r0, #0x5 bhi _02037260 diff --git a/arm9/asm/unk_0204B34C.s b/arm9/asm/unk_0204B34C.s index c89931231..bbba2d4d5 100644 --- a/arm9/asm/unk_0204B34C.s +++ b/arm9/asm/unk_0204B34C.s @@ -217,7 +217,7 @@ sub_0204B490: ; 0x0204B490 mov r7, #0x1 _0204B4B6: ldr r0, [sp, #0x0] - bl MapObject_GetGfxID + bl MapObject_GetSpriteID bl sub_0205C334 cmp r0, #0x1 bne _0204B4E8 @@ -470,7 +470,7 @@ sub_0204B6C4: ; 0x0204B6C4 ldr r4, _0204B708 ; =0x00000000 beq _0204B6D8 add r0, r5, #0x0 - bl MapObject_GetGfxID + bl MapObject_GetSpriteID cmp r0, #0x64 beq _0204B6DC _0204B6D8: @@ -615,7 +615,7 @@ _0204B7CC: thumb_func_start sub_0204B7D8 sub_0204B7D8: ; 0x0204B7D8 push {r3, lr} - bl MapObject_GetGfxID + bl MapObject_GetSpriteID cmp r0, #0x64 bne _0204B7E6 mov r0, #0x1 diff --git a/arm9/asm/unk_02055068.s b/arm9/asm/unk_02055068.s index de97164be..38ce8cb9b 100644 --- a/arm9/asm/unk_02055068.s +++ b/arm9/asm/unk_02055068.s @@ -56,7 +56,7 @@ sub_020550A4: ; 0x020550A4 bl PlayerAvatar_GetSpriteByStateAndGender add r1, r0, #0x0 add r0, r4, #0x0 - bl MapObject_SetGfxID + bl MapObject_SetSpriteID mov r1, #0x9 add r0, r4, #0x0 lsl r1, r1, #0xa diff --git a/arm9/asm/unk_02063948.s b/arm9/asm/unk_02063948.s index bd4f67a5d..195787995 100644 --- a/arm9/asm/unk_02063948.s +++ b/arm9/asm/unk_02063948.s @@ -57,7 +57,7 @@ sub_02063964: ; 0x02063964 ldr r0, [sp, #0x8] cmp r0, #0x0 beq _020639B6 - bl MapObject_GetGfxID + bl MapObject_GetSpriteID cmp r0, #0x54 beq _0206399A cmp r0, #0x55 diff --git a/arm9/global.inc b/arm9/global.inc index 6510fae05..4d0885c22 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -4024,8 +4024,8 @@ .extern MapObject_SetID .extern MapObject_GetID .extern sub_02058450 -.extern MapObject_SetGfxID -.extern MapObject_GetGfxID +.extern MapObject_SetSpriteID +.extern MapObject_GetSpriteID .extern sub_0205845C .extern MapObject_GetMovement .extern MapObject_SetType diff --git a/arm9/overlays/05/asm/ov05_021E5FD8.s b/arm9/overlays/05/asm/ov05_021E5FD8.s index 746f5d547..a858f227b 100644 --- a/arm9/overlays/05/asm/ov05_021E5FD8.s +++ b/arm9/overlays/05/asm/ov05_021E5FD8.s @@ -385,7 +385,7 @@ _021E62C4: mov r0, #0 pop {r3, r4, r5, r6, r7, pc} _021E62D4: - bl MapObject_GetGfxID + bl MapObject_GetSpriteID cmp r0, #0x54 beq _021E62E0 mov r0, #0 @@ -1166,7 +1166,7 @@ _021E6916: mov r0, #0 pop {r4, pc} _021E692C: - bl MapObject_GetGfxID + bl MapObject_GetSpriteID cmp r0, #0x76 beq _021E6938 mov r0, #0 @@ -2184,7 +2184,7 @@ ov05_021E70F0: ; 0x021E70F0 cmp r0, #0 bne _021E7136 add r0, r5, #0 - bl MapObject_GetGfxID + bl MapObject_GetSpriteID sub r0, #0xc4 cmp r0, #1 bls _021E7136 @@ -2216,7 +2216,7 @@ ov05_021E7138: ; 0x021E7138 cmp r0, #0 bne _021E7180 add r0, r5, #0 - bl MapObject_GetGfxID + bl MapObject_GetSpriteID cmp r0, #0xc4 beq _021E7162 cmp r0, #0xc5 diff --git a/arm9/overlays/05/asm/ov05_021F0514.s b/arm9/overlays/05/asm/ov05_021F0514.s index cb4cce2bc..5ea6d2056 100644 --- a/arm9/overlays/05/asm/ov05_021F0514.s +++ b/arm9/overlays/05/asm/ov05_021F0514.s @@ -7,7 +7,7 @@ ov05_021F0514: ; 0x021F0514 push {r4, lr} add r4, r0, #0 - bl MapObject_GetGfxID + bl MapObject_GetSpriteID cmp r0, #0x97 bgt _021F053E bge _021F05B2 diff --git a/arm9/overlays/05/asm/ov05_021F1CB8.s b/arm9/overlays/05/asm/ov05_021F1CB8.s index 6d7c3b27a..3443ded90 100644 --- a/arm9/overlays/05/asm/ov05_021F1CB8.s +++ b/arm9/overlays/05/asm/ov05_021F1CB8.s @@ -131,7 +131,7 @@ _021F1DC6: thumb_func_start ov05_021F1DC8 ov05_021F1DC8: ; 0x021F1DC8 push {r3, lr} - bl MapObject_GetGfxID + bl MapObject_GetSpriteID bl ov05_021F1DD4 pop {r3, pc} diff --git a/arm9/overlays/05/asm/ov05_021F1F04.s b/arm9/overlays/05/asm/ov05_021F1F04.s index 215030ab5..5b8ae6b3b 100644 --- a/arm9/overlays/05/asm/ov05_021F1F04.s +++ b/arm9/overlays/05/asm/ov05_021F1F04.s @@ -101,7 +101,7 @@ ov05_021F1FC8: ; 0x021F1FC8 push {r3, r4, r5, lr} add r5, r0, #0 add r4, r1, #0 - bl MapObject_GetGfxID + bl MapObject_GetSpriteID add r2, r0, #0 add r0, r5, #0 add r1, r4, #0 @@ -179,7 +179,7 @@ ov05_021F2060: ; 0x021F2060 cmp r0, #0 beq _021F2092 add r0, r5, #0 - bl MapObject_GetGfxID + bl MapObject_GetSpriteID add r6, r0, #0 bl sub_0205C334 cmp r0, #1 @@ -484,7 +484,7 @@ _021F229A: cmp r0, #1 bne _021F22CE ldr r0, [sp] - bl MapObject_GetGfxID + bl MapObject_GetSpriteID add r5, r0, #0 bl sub_0205C334 cmp r0, #1 @@ -1596,7 +1596,7 @@ _021F2B2E: beq _021F2B5A _021F2B38: ldr r0, [sp] - bl MapObject_GetGfxID + bl MapObject_GetSpriteID add r4, r0, #0 bl sub_0205C334 cmp r0, #1 @@ -1647,7 +1647,7 @@ _021F2B8E: beq _021F2BDE _021F2B98: ldr r0, [sp] - bl MapObject_GetGfxID + bl MapObject_GetSpriteID add r4, r0, #0 ldr r0, _021F2BF4 ; =0x0000FFFF cmp r4, r0 @@ -1726,7 +1726,7 @@ _021F2C20: cmp r0, #1 bne _021F2C64 ldr r0, [sp] - bl MapObject_GetGfxID + bl MapObject_GetSpriteID add r4, r0, #0 bl sub_0205C334 cmp r0, #1 @@ -2932,7 +2932,7 @@ ov05_021F3490: ; 0x021F3490 bne _021F34D2 _021F34A8: add r0, r5, #0 - bl MapObject_GetGfxID + bl MapObject_GetSpriteID add r6, r0, #0 add r0, r5, #0 bl MapObject_GetManager @@ -2977,7 +2977,7 @@ ov05_021F34DC: ; 0x021F34DC str r0, [r5] add r0, r7, #0 str r7, [r5, #0x50] - bl MapObject_GetGfxID + bl MapObject_GetSpriteID add r6, r0, #0 bl ov05_021F2DE8 ldr r4, _021F36C4 ; =ov05_021F9094 @@ -3216,7 +3216,7 @@ _021F370A: pop {r4, r5, r6, pc} _021F3730: add r0, r4, #0 - bl MapObject_GetGfxID + bl MapObject_GetSpriteID ldr r1, [r5] cmp r1, r0 beq _021F377C diff --git a/arm9/overlays/06/asm/overlay_06.s b/arm9/overlays/06/asm/overlay_06.s index d2dd9c0bc..cff1bf1e4 100644 --- a/arm9/overlays/06/asm/overlay_06.s +++ b/arm9/overlays/06/asm/overlay_06.s @@ -32697,7 +32697,7 @@ ov06_0224954C: ; 0x0224954C bl sub_02064754 str r0, [r4, #0x10] ldr r0, [r4, #0x1c] - bl MapObject_GetGfxID + bl MapObject_GetSpriteID str r0, [r4] ldr r0, [r4, #0x1c] bl MapObject_GetID @@ -33080,7 +33080,7 @@ ov06_02249834: ; 0x02249834 bl sub_02058450 str r0, [r4, #4] ldr r0, [r4, #0x20] - bl MapObject_GetGfxID + bl MapObject_GetSpriteID str r0, [r4, #8] bl sub_0205C334 cmp r0, #1 @@ -33129,7 +33129,7 @@ ov06_022498BC: ; 0x022498BC ldr r6, [r4, #0x20] add r5, r0, #0 add r0, r6, #0 - bl MapObject_GetGfxID + bl MapObject_GetSpriteID add r7, r0, #0 bl sub_0205C334 cmp r0, #1 @@ -33205,7 +33205,7 @@ ov06_02249954: ; 0x02249954 ldr r4, [r5, #0x20] add r6, r0, #0 add r0, r4, #0 - bl MapObject_GetGfxID + bl MapObject_GetSpriteID add r7, r0, #0 bl sub_0205C334 cmp r0, #1 @@ -34255,7 +34255,7 @@ ov06_0224A130: ; 0x0224A130 bl ov05_021E4C08 add r6, r0, #0 add r0, r5, #0 - bl MapObject_GetGfxID + bl MapObject_GetSpriteID bl ov06_0224A0F0 add r2, r0, #0 add r0, sp, #0x14 diff --git a/arm9/src/map_object.c b/arm9/src/map_object.c index 28670468d..4127ae47e 100644 --- a/arm9/src/map_object.c +++ b/arm9/src/map_object.c @@ -2,6 +2,7 @@ #include "map_object.h" #include "field_system.h" #include "heap.h" +#include "unk_0200CA44.h" static MapObjectManager *MapObjectManager_New(u32 objectCount); static LocalMapObject *MapObject_CreateFromObjectEvent(MapObjectManager *manager, ObjectEvent *objectEvent, u32 mapNo); @@ -13,6 +14,8 @@ static void MapObject_ConvertXYToPositionVec(LocalMapObject *object); static void MapObject_CreateFromInitArgs(MapObjectInitArgs *args); static LocalMapObject *MapObjectManager_GetFirstInactiveObject(MapObjectManager *manager); static LocalMapObject *sub_02057C98(MapObjectManager *manager, u32 id, u32 mapNo); +static void sub_02057CF0(MapObjectManager *manager, LocalMapObject *object); +static void MapObject_InitFromObjectEvent(LocalMapObject *object, ObjectEvent *objectEvent, FieldSystem *fieldSystem); extern BOOL sub_020580F4(MapObjectManager *manager, LocalMapObject **object, s32 *index, MapObjectFlagBits bits); @@ -35,13 +38,11 @@ extern u16 ObjectEvent_GetFlagID_AssertScriptIdIsUnset(ObjectEvent *objectEvent) extern LocalMapObject *sub_02058010(MapObjectManager *manager, u32 objectId, u16 flagId); extern void sub_02058258(LocalMapObject *object, u32 mapNo, ObjectEvent *objectEvent); extern FieldSystem *MapObjectManager_GetFieldSystemPtr(MapObjectManager *manager); -extern void MapObject_InitFromObjectEvent(LocalMapObject *object, ObjectEvent *objectEvent, FieldSystem *fieldSystem); extern void sub_02057E90(LocalMapObject *object, MapObjectManager *manager); extern void sub_0205844C(LocalMapObject *object, u32 mapNo); extern void sub_020581A4(LocalMapObject *object); extern void sub_020581B4(LocalMapObject *object); extern void MapObject_SetFlagsBits(LocalMapObject *object, MapObjectFlagBits bits); -extern void sub_02057CF0(MapObjectManager *manager, LocalMapObject *object); extern MapObjectManager *MapObjectManager_GetMapObjectManager(MapObjectManager *manager); extern void sub_0205836C(MapObjectManager *manager); extern void ObjectEvent_SetId(ObjectEvent *objectEvent, u32 id); @@ -57,10 +58,10 @@ extern void ObjectEvent_SetYRange(ObjectEvent *objectEvent, u32 yRange); extern void ObjectEvent_SetXCoord(ObjectEvent *objectEvent, u32 xCoord); extern void ObjectEvent_SetYCoord(ObjectEvent *objectEvent, u32 yCoord); extern void ObjectEvent_SetHeight(ObjectEvent *objectEvent, u32 height); -extern u32 ObjectEvent_GetFlagId(ObjectEvent *objectEvent); +extern u32 ObjectEvent_GetFlagID(ObjectEvent *objectEvent); extern ObjectEvent *ObjectEvent_GetById(u32 id, u32 objectEventCount, ObjectEvent *events); extern u8 FieldSystem_FlagCheck(FieldSystem *fieldSystem, u16 flag); -extern void MapObject_SetGfxID(LocalMapObject *object, u32 sprite); +extern void MapObject_SetSpriteID(LocalMapObject *object, u32 sprite); extern void sub_02058148(LocalMapObject *object); extern void MapObject_ClearFlagsBits(LocalMapObject *object, MapObjectFlagBits bits); extern BOOL sub_02058934(LocalMapObject *object); @@ -93,7 +94,7 @@ extern void sub_02057AEC(MapObjectManager *manager, LocalMapObject *object); extern u32 MapObject_GetFlagsWord(LocalMapObject *object); extern u32 MapObject_GetFlags2Word(LocalMapObject *object); extern u32 MapObject_GetID(LocalMapObject *object); -extern u32 MapObject_GetGfxID(LocalMapObject *object); +extern u32 MapObject_GetSpriteID(LocalMapObject *object); extern u32 MapObject_GetMovement(LocalMapObject *object); extern u32 MapObject_GetType(LocalMapObject *object); extern u32 MapObject_GetScript(LocalMapObject *object); @@ -148,6 +149,19 @@ extern void MapObject_SetPreviousY(LocalMapObject *object, u32 previousY); extern void MapObject_CreateFromInitArgs(MapObjectInitArgs *args); extern BOOL MapObject_CheckFlag25(LocalMapObject *object); extern u32 sub_02058750(LocalMapObject *object); +extern void sub_0205832C(SysTask *task, LocalMapObject *object); +extern u32 MapObjectManager_GetPriority(MapObjectManager *manager); +extern void sub_02058554(LocalMapObject *object, SysTask *task); +extern u16 ObjectEvent_GetSpriteID(ObjectEvent *objectEvent); +extern u32 FieldSystem_ResolveObjectSpriteID(FieldSystem *fieldSystem, u16 spriteId); +extern u16 ObjectEvent_GetMovement(ObjectEvent *objectEvent); +extern u16 ObjectEvent_GetType(ObjectEvent *objectEvent); +extern u16 ObjectEvent_GetScript(ObjectEvent *objectEvent); +extern u16 ObjectEvent_GetInitialFacingDirection(ObjectEvent *objectEvent); +extern u32 ObjectEvent_GetParam(ObjectEvent *objectEvent, u32 param); +extern u32 ObjectEvent_GetXRange(ObjectEvent *objectEvent); +extern u32 ObjectEvent_GetYRange(ObjectEvent *objectEvent); +extern void MapObject_SetPositionVecFromObjectEvent(LocalMapObject *object, ObjectEvent *objectEvent); MapObjectManager *MapObjectManager_Init(FieldSystem *fieldSystem, u32 objectCount, u32 priority) { MapObjectManager *ret = MapObjectManager_New(objectCount); @@ -261,7 +275,7 @@ LocalMapObject *MapObject_CreateFromObjectEventWithId(MapObjectManager *manager, LocalMapObject *ret = NULL; ObjectEvent *objectEvent = ObjectEvent_GetById(id, objectEventCount, (ObjectEvent *)events); if (objectEvent != NULL) { - u32 flagId = ObjectEvent_GetFlagId(objectEvent); + u32 flagId = ObjectEvent_GetFlagID(objectEvent); FieldSystem* fieldSystem = MapObjectManager_GetFieldSystemPtr(manager); if (FieldSystem_FlagCheck(fieldSystem, (u16)flagId) == FALSE) { ret = MapObject_CreateFromObjectEvent(manager, objectEvent, mapNo); @@ -272,7 +286,7 @@ LocalMapObject *MapObject_CreateFromObjectEventWithId(MapObjectManager *manager, } void sub_02057614(LocalMapObject *object, u32 sprite) { - MapObject_SetGfxID(object, sprite); + MapObject_SetSpriteID(object, sprite); sub_02058148(object); MapObject_ClearFlagsBits(object, MAPOBJECTFLAG_UNK14); sub_020581B4(object); @@ -309,7 +323,7 @@ void sub_020576A8(LocalMapObject *object) { } MapObject_ClearFlagsBits(object, MAPOBJECTFLAG_UNK14); } - MapObject_SetGfxID(object, MAP_OBJECT_GFX_ID_INVALID); + MapObject_SetSpriteID(object, MAP_OBJECT_GFX_ID_INVALID); sub_02058684(object, sub_02058ED8); sub_02058698(object, sub_02058EDC); sub_020586AC(object, sub_02058EDC); @@ -410,7 +424,7 @@ static void SavedMapObject_InitFromLocalMapObject(FieldSystem *fieldSystem, Loca savedObject->flags2 = MapObject_GetFlags2Word(localObject); savedObject->objId = MapObject_GetID(localObject); savedObject->unk10 = sub_02058450(localObject); - savedObject->gfxId = MapObject_GetGfxID(localObject); + savedObject->spriteId = MapObject_GetSpriteID(localObject); savedObject->movement = MapObject_GetMovement(localObject); savedObject->type = MapObject_GetType(localObject); savedObject->flagId = MapObject_GetFlagID(localObject); @@ -449,7 +463,7 @@ static void LocalMapObject_InitFromSavedMapObject(LocalMapObject *localObject, S MapObject_SetFlags2Word(localObject, savedObject->flags2); MapObject_SetID(localObject, savedObject->objId); sub_0205844C(localObject, savedObject->unk10); - MapObject_SetGfxID(localObject, savedObject->gfxId); + MapObject_SetSpriteID(localObject, savedObject->spriteId); MapObject_SetMovement(localObject, savedObject->movement); MapObject_SetType(localObject, savedObject->type); MapObject_SetFlagID(localObject, savedObject->flagId); @@ -578,3 +592,33 @@ static LocalMapObject *sub_02057C98(MapObjectManager *manager, u32 id, u32 mapNo return NULL; } + +static void sub_02057CF0(MapObjectManager *manager, LocalMapObject *object) { + u32 priority = MapObjectManager_GetPriority(manager); + u32 movement = MapObject_GetMovement(object); + if (movement == 48 || movement == 50) { + priority += 2; + } + + SysTask *task = SysTask_CreateOnMainQueue((SysTaskFunc)sub_0205832C, object, priority); + GF_ASSERT(task != NULL); + + sub_02058554(object, task); +} + +static void MapObject_InitFromObjectEvent(LocalMapObject *object, ObjectEvent *objectEvent, FieldSystem *fieldSystem) { + MapObject_SetID(object, ObjectEvent_GetID(objectEvent)); + MapObject_SetSpriteID(object, FieldSystem_ResolveObjectSpriteID(fieldSystem, ObjectEvent_GetSpriteID(objectEvent))); + MapObject_SetMovement(object, ObjectEvent_GetMovement(objectEvent)); + MapObject_SetType(object, ObjectEvent_GetType(objectEvent)); + MapObject_SetFlagID(object, ObjectEvent_GetFlagID(objectEvent)); + MapObject_SetScript(object, ObjectEvent_GetScript(objectEvent)); + MapObject_SetInitialFacingDirection(object, ObjectEvent_GetInitialFacingDirection(objectEvent)); + MapObject_SetParam(object, ObjectEvent_GetParam(objectEvent, 0), 0); + MapObject_SetParam(object, ObjectEvent_GetParam(objectEvent, 1), 1); + MapObject_SetParam(object, ObjectEvent_GetParam(objectEvent, 2), 2); + MapObject_SetXRange(object, ObjectEvent_GetXRange(objectEvent)); + MapObject_SetYRange(object, ObjectEvent_GetYRange(objectEvent)); + + MapObject_SetPositionVecFromObjectEvent(object, objectEvent); +} diff --git a/include/map_object.h b/include/map_object.h index 5d71a5ad6..fe32d7c81 100644 --- a/include/map_object.h +++ b/include/map_object.h @@ -16,7 +16,7 @@ typedef struct SavedMapObject { s8 currentFacing; s8 nextFacing; u16 unk10; - u16 gfxId; + u16 spriteId; u16 type; u16 flagId; u16 script;