diff --git a/arm9/asm/player_avatar_asm.s b/arm9/asm/player_avatar_asm.s index abfe0ed56..30257a47f 100644 --- a/arm9/asm/player_avatar_asm.s +++ b/arm9/asm/player_avatar_asm.s @@ -3,75 +3,6 @@ .text - thumb_func_start sub_020552A4 -sub_020552A4: ; 0x020552A4 - push {r3-r7, lr} - sub sp, #0x8 - mov r1, #0x0 - str r1, [sp, #0x4] - str r1, [sp, #0x0] - add r1, sp, #0x0 - add r2, sp, #0x4 - mov r3, #0x1 - add r5, r0, #0x0 - bl MapObjectManager_GetNextObjectWithFlagFromIndex - cmp r0, #0x0 - beq _020552DE - add r4, sp, #0x0 - add r6, sp, #0x4 - mov r7, #0x1 -_020552C4: - ldr r0, [sp, #0x0] - bl MapObject_GetMovement - cmp r0, #0x1 - beq _020552DE - add r0, r5, #0x0 - add r1, r4, #0x0 - add r2, r6, #0x0 - add r3, r7, #0x0 - bl MapObjectManager_GetNextObjectWithFlagFromIndex - cmp r0, #0x0 - bne _020552C4 -_020552DE: - ldr r0, [sp, #0x0] - add sp, #0x8 - pop {r3-r7, pc} - - thumb_func_start PlayerAvatar_CreateMapObject -PlayerAvatar_CreateMapObject: ; 0x020552E4 - push {r4, lr} - bl sub_020552A4 - add r4, r0, #0x0 - bne _020552F2 - bl GF_AssertFail -_020552F2: - add r0, r4, #0x0 - pop {r4, pc} - .balign 4 - - thumb_func_start PlayerAvatar_GetFacingDirection -PlayerAvatar_GetFacingDirection: ; 0x020552F8 - push {r3, lr} - bl PlayerAvatar_GetMapObject - bl MapObject_GetFacingDirection - pop {r3, pc} - - thumb_func_start sub_02055304 -sub_02055304: ; 0x02055304 - push {r4, lr} - add r4, r1, #0x0 - bl PlayerAvatar_GetMapObject - add r1, r4, #0x0 - bl MapObject_SetFacingDirection - pop {r4, pc} - - thumb_func_start sub_02055314 -sub_02055314: ; 0x02055314 - push {r3, lr} - bl PlayerAvatar_GetMapObject - bl MapObject_GetNextFacingDirection - pop {r3, pc} - thumb_func_start PlayerAvatar_GetXCoord PlayerAvatar_GetXCoord: ; 0x02055320 push {r3, lr} diff --git a/arm9/asm/unk_02048904.s b/arm9/asm/unk_02048904.s index d7db95fc1..c0f640a4b 100644 --- a/arm9/asm/unk_02048904.s +++ b/arm9/asm/unk_02048904.s @@ -283,7 +283,7 @@ sub_02048AE4: ; 0x02048AE4 ldr r1, [r3, #0x8] ldr r2, [r3, #0xc] ldr r3, [r3, #0x10] - bl PlayerAvatar_CreateWithParamsExtended + bl PlayerAvatar_CreateWithParams str r0, [r5, #0x38] add r0, r5, #0x0 bl sub_02034AC8 @@ -326,7 +326,7 @@ sub_02048B50: ; 0x02048B50 add r2, r0, #0x0 ldr r0, [r5, #0x34] add r1, r4, #0x0 - bl PlayerAvatar_CreateWithParams + bl PlayerAvatar_CreateWithActiveMapObject str r0, [r5, #0x38] ldr r0, [r5, #0x34] bl sub_02058768 diff --git a/arm9/asm/unk_0204B34C.s b/arm9/asm/unk_0204B34C.s index c40efe161..042be9001 100644 --- a/arm9/asm/unk_0204B34C.s +++ b/arm9/asm/unk_0204B34C.s @@ -767,7 +767,7 @@ _0204B8F6: bne _0204B910 ldr r0, [r5, #0x38] mov r1, #0x0 - bl sub_02055304 + bl PlayerAvatar_SetFacingDirection mov r0, #0x4 str r0, [r4, #0x0] b _0204B98E @@ -789,7 +789,7 @@ _0204B922: ble _0204B98E ldr r0, [r5, #0x38] ldr r1, [r4, #0x4] - bl sub_02055304 + bl PlayerAvatar_SetFacingDirection mov r0, #0x4 str r0, [r4, #0x0] b _0204B98E @@ -814,14 +814,14 @@ _0204B93A: _0204B964: ldr r0, [r5, #0x38] ldr r1, [r4, #0x4] - bl sub_02055304 + bl PlayerAvatar_SetFacingDirection mov r0, #0x4 str r0, [r4, #0x0] b _0204B98E _0204B972: ldr r0, [r5, #0x38] ldr r1, [r4, #0x4] - bl sub_02055304 + bl PlayerAvatar_SetFacingDirection ldr r0, [r5, #0x38] bl PlayerAvatar_GetMapObject bl MapObject_PauseMovement diff --git a/arm9/asm/unk_0204CB20.s b/arm9/asm/unk_0204CB20.s index 4518c1728..a51875fec 100644 --- a/arm9/asm/unk_0204CB20.s +++ b/arm9/asm/unk_0204CB20.s @@ -1126,7 +1126,7 @@ _0204D37C: ldrh r2, [r2, #0x0] ldrsb r3, [r7, r3] ldr r0, [r0, #0x34] - bl PlayerAvatar_CreateWithParamsExtended + bl PlayerAvatar_CreateWithParams add r7, r0, #0x0 bne _0204D3B2 bl GF_AssertFail @@ -2424,7 +2424,7 @@ _0204DD5E: ldr r0, [r0, #0x0] add r0, r0, r7 ldr r0, [r0, #0x8] - bl sub_02055304 + bl PlayerAvatar_SetFacingDirection add r0, r4, #0x0 mov r1, #0x80 bl MapObject_SetFlagsBits @@ -5707,7 +5707,7 @@ sub_0204F6DC: ; 0x0204F6DC ldr r0, [r0, #0x0] ldr r0, [r0, #0x54] ldr r0, [r0, #0x38] - bl sub_02055304 + bl PlayerAvatar_SetFacingDirection bl sub_02031190 ldr r1, _0204F708 ; =UNK_021C5A68 lsl r0, r0, #0x3 @@ -5734,7 +5734,7 @@ sub_0204F70C: ; 0x0204F70C ldr r2, [r3, #0x0] add r0, r2, r0 ldr r0, [r0, #0x8] - bl sub_02055304 + bl PlayerAvatar_SetFacingDirection pop {r4, pc} .balign 4 _0204F728: .word UNK_021C5A68 diff --git a/arm9/asm/unk_020557F4.s b/arm9/asm/unk_020557F4.s index b70b0cecd..6f8f21e94 100644 --- a/arm9/asm/unk_020557F4.s +++ b/arm9/asm/unk_020557F4.s @@ -1920,7 +1920,7 @@ sub_02056740: ; 0x02056740 bl sub_02056494 str r0, [sp, #0x0] add r0, r5, #0x0 - bl sub_02055314 + bl PlayerAvatar_GetNextFacingDirection add r6, r0, #0x0 add r0, r5, #0x0 add r1, r7, #0x0 @@ -2347,7 +2347,7 @@ sub_02056AB8: ; 0x02056AB8 bl sub_02056494 str r0, [sp, #0x0] add r0, r5, #0x0 - bl sub_02055314 + bl PlayerAvatar_GetNextFacingDirection add r6, r0, #0x0 add r0, r5, #0x0 add r1, r7, #0x0 @@ -3079,7 +3079,7 @@ sub_02057060: ; 0x02057060 pop {r3-r7, pc} _02057086: add r0, r6, #0x0 - bl sub_02055314 + bl PlayerAvatar_GetNextFacingDirection add r7, r0, #0x0 add r0, r6, #0x0 bl sub_02055430 diff --git a/arm9/asm/unk_0205E4EC.s b/arm9/asm/unk_0205E4EC.s index f1c97669f..580ac9ce1 100644 --- a/arm9/asm/unk_0205E4EC.s +++ b/arm9/asm/unk_0205E4EC.s @@ -133,7 +133,7 @@ sub_0205E5B4: ; 0x0205E5B4 add r5, r0, #0x0 add r4, r1, #0x0 bl MapObject_GetManager - bl sub_020552A4 + bl MapObjectManager_GetFirstActiveObjectWithMovement1 cmp r0, #0x0 bne _0205E5CC mov r0, #0x0 diff --git a/arm9/global.inc b/arm9/global.inc index 018eedf6b..0b8de1eaf 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -3892,15 +3892,15 @@ .extern Save_PlayerHasAllRegisInParty .extern sub_02054F50 .extern sub_0205502C -.extern PlayerAvatar_CreateWithParamsExtended .extern PlayerAvatar_CreateWithParams +.extern PlayerAvatar_CreateWithActiveMapObject .extern sub_02055108 .extern PlayerAvatar_FreeToHeap .extern PlayerAvatar_DeleteFromMap -.extern sub_020552A4 +.extern MapObjectManager_GetFirstActiveObjectWithMovement1 .extern PlayerAvatar_GetFacingDirection -.extern sub_02055304 -.extern sub_02055314 +.extern PlayerAvatar_SetFacingDirection +.extern PlayerAvatar_GetNextFacingDirection .extern PlayerAvatar_GetXCoord .extern PlayerAvatar_GetZCoord .extern sub_02055338 diff --git a/arm9/overlays/05/asm/ov05_021E5FD8.s b/arm9/overlays/05/asm/ov05_021E5FD8.s index 63c502035..f90f01cdd 100644 --- a/arm9/overlays/05/asm/ov05_021E5FD8.s +++ b/arm9/overlays/05/asm/ov05_021E5FD8.s @@ -1157,7 +1157,7 @@ ov05_021E6904: ; 0x021E6904 pop {r4, pc} _021E6916: add r0, r4, #0 - bl sub_02055314 + bl PlayerAvatar_GetNextFacingDirection add r1, r0, #0 add r0, r4, #0 bl ov05_021E727C diff --git a/arm9/overlays/05/asm/ov05_021E7504.s b/arm9/overlays/05/asm/ov05_021E7504.s index c15757d9d..439a164e8 100644 --- a/arm9/overlays/05/asm/ov05_021E7504.s +++ b/arm9/overlays/05/asm/ov05_021E7504.s @@ -37,12 +37,12 @@ _021E7532: str r0, [r1, #0x10] _021E7536: ldr r0, [r1] - ldr r3, _021E7540 ; =sub_02055304 + ldr r3, _021E7540 ; =PlayerAvatar_SetFacingDirection ldr r0, [r0, #0x38] ldr r1, [r1, #0x10] bx r3 .balign 4, 0 -_021E7540: .word sub_02055304 +_021E7540: .word PlayerAvatar_SetFacingDirection thumb_func_start ov05_021E7544 ov05_021E7544: ; 0x021E7544 @@ -264,7 +264,7 @@ _021E771C: ldr r0, [r5] mov r1, #1 ldr r0, [r0, #0x38] - bl sub_02055304 + bl PlayerAvatar_SetFacingDirection ldr r0, [r5, #4] mov r1, #1 str r1, [r0] diff --git a/arm9/overlays/05/include/ov05_021E72FC.h b/arm9/overlays/05/include/ov05_021E72FC.h index 40f064c49..09f9f9b2f 100644 --- a/arm9/overlays/05/include/ov05_021E72FC.h +++ b/arm9/overlays/05/include/ov05_021E72FC.h @@ -4,6 +4,7 @@ #include "nitro/types.h" #include "field_system.h" +#include "player_avatar.h" #include "task.h" typedef struct UnkStruct021E7358 { @@ -11,12 +12,12 @@ typedef struct UnkStruct021E7358 { u32 Unk04; u32 Unk08; FieldSystem *fieldSystem; - u32 Unk10; + PlayerAvatar *avatar; } UnkStruct021E7358; -BOOL ov05_021E72FC(FieldSystem *fieldSystem, u32 param1); -void ov05_021E7358(FieldSystem *fieldSystem, u32 param1, u32 param2); +BOOL ov05_021E72FC(FieldSystem *fieldSystem, PlayerAvatar *avatar); +void ov05_021E7358(FieldSystem *fieldSystem, PlayerAvatar *avatar, u32 param2); u32 ov05_021E7388(u32 param0); BOOL ov05_021E73B4(TaskManager *taskManager); UnkStruct021E7358 *ov05_021E74D4(u32 param0); diff --git a/arm9/overlays/05/src/ov05_021E72FC.c b/arm9/overlays/05/src/ov05_021E72FC.c index 17a1fc7c0..4f481747a 100644 --- a/arm9/overlays/05/src/ov05_021E72FC.c +++ b/arm9/overlays/05/src/ov05_021E72FC.c @@ -8,19 +8,18 @@ #include "map_object.h" #include "unk_020051F4.h" -extern LocalMapObject *PlayerAvatar_GetMapObject(u32 param0); +extern LocalMapObject *PlayerAvatar_GetMapObject(PlayerAvatar *avatar); extern BOOL sub_02054B30(u8 param0); extern BOOL sub_02054B3C(u8 param0); extern BOOL sub_02054B48(u8 param0); extern BOOL sub_02054B54(u8 param0); -extern BOOL sub_02057254(u32 param0); +extern BOOL sub_02057254(PlayerAvatar *avatar); extern u32 sub_0205AFDC(u32 param0, u32 param1); -extern void sub_02057260(u32 param0, u32 param1); -extern void sub_02055304(u32 param0, u32 param1); -extern BOOL sub_02056B74(u32 param0, LocalMapObject *object, u32 param2); +extern void sub_02057260(PlayerAvatar *avatar, u32 param1); +extern BOOL sub_02056B74(PlayerAvatar *avatar, LocalMapObject *object, u32 param2); -BOOL ov05_021E72FC(FieldSystem *fieldSystem, u32 param1) { - u8 res = (u8)sub_02058720(PlayerAvatar_GetMapObject(param1)); +BOOL ov05_021E72FC(FieldSystem *fieldSystem, PlayerAvatar *avatar) { + u8 res = (u8)sub_02058720(PlayerAvatar_GetMapObject(avatar)); u32 r2; if (sub_02054B30(res) == TRUE) { r2 = 3; @@ -37,14 +36,14 @@ BOOL ov05_021E72FC(FieldSystem *fieldSystem, u32 param1) { } return FALSE; label: - ov05_021E7358(fieldSystem, param1, r2); + ov05_021E7358(fieldSystem, avatar, r2); return TRUE; } -void ov05_021E7358(FieldSystem *fieldSystem, u32 param1, u32 param2) { +void ov05_021E7358(FieldSystem *fieldSystem, PlayerAvatar *avatar, u32 param2) { UnkStruct021E7358 *res = ov05_021E74D4(24); res->fieldSystem = fieldSystem; - res->Unk10 = param1; + res->avatar = avatar; res->Unk00 = param2; PlaySE(SEQ_SE_DP_F209); FieldSystem_CreateTask(fieldSystem, ov05_021E73B4, res); @@ -66,7 +65,7 @@ u32 ov05_021E7388(u32 param0) { BOOL ov05_021E73B4(TaskManager *taskManager) { UnkStruct021E7358 *strct = TaskManager_GetEnvironment(taskManager); - LocalMapObject *playerObject = PlayerAvatar_GetMapObject(strct->Unk10); + LocalMapObject *playerObject = PlayerAvatar_GetMapObject(strct->avatar); u8 res2 = (u8)sub_02058720(playerObject); switch (strct->Unk08) { case 0: @@ -74,18 +73,18 @@ BOOL ov05_021E73B4(TaskManager *taskManager) { strct->Unk08++; break; case 1: - if (!sub_02057254(strct->Unk10)) { + if (!sub_02057254(strct->avatar)) { break; } - sub_02057260(strct->Unk10, sub_0205AFDC(strct->Unk00, 12)); - sub_02055304(strct->Unk10, strct->Unk00); + sub_02057260(strct->avatar, sub_0205AFDC(strct->Unk00, 12)); + PlayerAvatar_SetFacingDirection(strct->avatar, strct->Unk00); strct->Unk08++; strct->Unk04 = 7; break; case 2: if (strct->Unk04 == 2 || strct->Unk04 == 4 || strct->Unk04 == 6) { strct->Unk00 = ov05_021E7388(strct->Unk00); - sub_02055304(strct->Unk10, strct->Unk00); + PlayerAvatar_SetFacingDirection(strct->avatar, strct->Unk00); } if (--(strct->Unk04)) { break; @@ -101,13 +100,13 @@ BOOL ov05_021E73B4(TaskManager *taskManager) { } else { strct->Unk00 = ov05_021E7388(strct->Unk00); } - if (sub_02056B74(strct->Unk10, playerObject, strct->Unk00) == FALSE) { + if (sub_02056B74(strct->avatar, playerObject, strct->Unk00) == FALSE) { strct->Unk08 = 1; break; } MapObject_ClearFlagsBits(playerObject, MAPOBJECTFLAG_UNK7); MapObject_ClearFlagsBits(playerObject, MAPOBJECTFLAG_UNK8); - sub_02055304(strct->Unk10, strct->Unk00); + PlayerAvatar_SetFacingDirection(strct->avatar, strct->Unk00); ov05_021E74F8(strct); sub_020054F0(1624, 0); return TRUE; diff --git a/arm9/overlays/18/asm/overlay_18.s b/arm9/overlays/18/asm/overlay_18.s index 45f4d142d..c607c77c2 100644 --- a/arm9/overlays/18/asm/overlay_18.s +++ b/arm9/overlays/18/asm/overlay_18.s @@ -13403,7 +13403,7 @@ ov18_0223FD8C: ; 0x0223FD8C ldr r0, [r0, #4] ldr r0, [r0, #0x40] ldr r0, [r0, #0x38] - bl sub_02055304 + bl PlayerAvatar_SetFacingDirection bl sub_02031190 ldr r1, _0223FDE0 ; =0x022513A0 lsl r0, r0, #3 diff --git a/arm9/src/field_move.c b/arm9/src/field_move.c index 302d01a8f..911444877 100644 --- a/arm9/src/field_move.c +++ b/arm9/src/field_move.c @@ -13,6 +13,7 @@ #include "map_header.h" #include "map_object.h" #include "overlay_06.h" +#include "player_avatar.h" #include "player_data.h" #include "save_local_field_data.h" #include "start_menu.h" @@ -65,7 +66,6 @@ extern u16 PlayerAvatar_GetZCoord(PlayerAvatar *playerAvatar); extern u8 GetMetatileBehavior(FieldSystem *fieldSystem, s32 x, s32 z); extern void PlayerAvatar_GetCoordsInFront(PlayerAvatar *playerAvatar, s32 *x, s32 *z); extern BOOL Field_PlayerCanSurfOnTile(PlayerAvatar *fieldPlayerAvatar, u32 standingTile, u32 facingTile); -extern u32 PlayerAvatar_GetFacingDirection(PlayerAvatar *playerAvatar); extern BOOL MetatileBehavior_IsRockClimbInDirection(u32 facingTile, u32 facingDirection); extern BOOL MetatileBehavior_IsWaterfall(u8 facingTile); extern LocalFieldData *Save_LocalFieldData_Get(SaveData *save); @@ -157,7 +157,7 @@ void FieldMove_InitCheckData(FieldSystem *fieldSystem, FieldMoveCheckData *check } } - s32 x = PlayerAvatar_GetXCoord(fieldSystem->playerAvatar); + u32 x = PlayerAvatar_GetXCoord(fieldSystem->playerAvatar); s32 z = PlayerAvatar_GetZCoord(fieldSystem->playerAvatar); u32 standingTile = GetMetatileBehavior(fieldSystem, x, z); diff --git a/arm9/src/player_avatar.c b/arm9/src/player_avatar.c index 3fb935ad4..aefd4e3b6 100644 --- a/arm9/src/player_avatar.c +++ b/arm9/src/player_avatar.c @@ -6,19 +6,18 @@ static PlayerAvatar *PlayerAvatar_Create(void); static void PlayerAvatar_Setup(PlayerAvatar *avatar, u32 state, u32 gender, PlayerSaveData *playerSaveData); -static void PlayerAvatar_CreateMapObjectWithParams(PlayerAvatar *avatar, MapObjectManager *manager, u32 sprite, u32 direction, s32 x, s32 z); +static void PlayerAvatar_CreateMapObjectWithParams(PlayerAvatar *avatar, MapObjectManager *manager, u32 sprite, u32 direction, u32 x, s32 z); +static LocalMapObject *PlayerAvatar_GetActiveMapObjectWithMovement1(MapObjectManager *manager); extern u32 PlayerAvatar_GetSpriteByStateAndGender(u32 state, u32 gender); extern u32 PlayerSaveData_GetState(PlayerSaveData *playerSaveData); -extern LocalMapObject *PlayerAvatar_CreateMapObject(MapObjectManager *manager); extern void PlayerAvatar_SetMapObject(PlayerAvatar *avatar, LocalMapObject *mapObject); extern LocalMapObject *PlayerAvatar_GetMapObject(PlayerAvatar *avatar); extern void ov05_021EDBC8(PlayerAvatar *avatar); extern u32 PlayerAvatar_GetState(PlayerAvatar *avatar); -extern s32 PlayerAvatar_GetXCoord(PlayerAvatar *avatar); +extern u32 PlayerAvatar_GetXCoord(PlayerAvatar *avatar); extern s32 PlayerAvatar_GetZCoord(PlayerAvatar *avatar); -extern u32 PlayerAvatar_GetFacingDirection(PlayerAvatar *avatar); -extern u32 ov06_0224ABAC(LocalMapObject *mapObject, s32 x, s32 z, u32 direction, u32 param4); +extern u32 ov06_0224ABAC(LocalMapObject *mapObject, u32 x, s32 z, u32 direction, u32 param4); extern void sub_02055450(PlayerAvatar *avatar, u32 param1); extern void PlayerAvatar_SetPlayerSaveData(PlayerAvatar *avatar, PlayerSaveData *saveData); extern void sub_0205536C(PlayerAvatar *avatar, u32 param1); @@ -33,7 +32,7 @@ extern void sub_02055460(PlayerAvatar *avatar, u32 param1); extern void sub_020556C8(PlayerAvatar *avatar, u32 param1); extern void sub_0205574C(PlayerAvatar *avatar, u32 param1); -PlayerAvatar *PlayerAvatar_CreateWithParamsExtended(MapObjectManager *manager, s32 x, s32 z, u32 direction, u32 state, u32 gender, PlayerSaveData *playerSaveData) { +PlayerAvatar *PlayerAvatar_CreateWithParams(MapObjectManager *manager, u32 x, s32 z, u32 direction, u32 state, u32 gender, PlayerSaveData *playerSaveData) { PlayerAvatar *avatar = PlayerAvatar_Create(); PlayerAvatar_Setup(avatar, state, gender, playerSaveData); u32 sprite = PlayerAvatar_GetSpriteByStateAndGender(state, gender); @@ -41,11 +40,11 @@ PlayerAvatar *PlayerAvatar_CreateWithParamsExtended(MapObjectManager *manager, s return avatar; } -PlayerAvatar *PlayerAvatar_CreateWithParams(MapObjectManager *manager, PlayerSaveData *playerSaveData, u32 gender) { +PlayerAvatar *PlayerAvatar_CreateWithActiveMapObject(MapObjectManager *manager, PlayerSaveData *playerSaveData, u32 gender) { PlayerAvatar *avatar = PlayerAvatar_Create(); u32 state = PlayerSaveData_GetState(playerSaveData); PlayerAvatar_Setup(avatar, state, gender, playerSaveData); - LocalMapObject *mapObject = PlayerAvatar_CreateMapObject(manager); + LocalMapObject *mapObject = PlayerAvatar_GetActiveMapObjectWithMovement1(manager); MapObject_SetSpriteID(mapObject, PlayerAvatar_GetSpriteByStateAndGender(state, gender)); MapObject_SetFlagsBits(mapObject, (MapObjectFlagBits)(MAPOBJECTFLAG_UNK13 | MAPOBJECTFLAG_KEEP)); MapObject_ClearFlagsBits(mapObject, (MapObjectFlagBits)(MAPOBJECTFLAG_UNK8 | MAPOBJECTFLAG_UNK7)); @@ -60,7 +59,7 @@ void sub_02055108(PlayerAvatar *avatar) { MapObject_GetManager(mapObject); ov05_021EDBC8(avatar); if (PlayerAvatar_GetState(avatar) == PLAYER_STATE_SURFING) { - s32 x = PlayerAvatar_GetXCoord(avatar); + u32 x = PlayerAvatar_GetXCoord(avatar); s32 z = PlayerAvatar_GetZCoord(avatar); u32 direction = PlayerAvatar_GetFacingDirection(avatar); sub_02055450(avatar, ov06_0224ABAC(mapObject, x, z, direction, 1)); @@ -98,7 +97,7 @@ static void PlayerAvatar_Setup(PlayerAvatar *avatar, u32 state, u32 gender, Play sub_0205574C(avatar, 1); } -static void PlayerAvatar_CreateMapObjectWithParams(PlayerAvatar *avatar, MapObjectManager *manager, u32 sprite, u32 direction, s32 x, s32 z) { +static void PlayerAvatar_CreateMapObjectWithParams(PlayerAvatar *avatar, MapObjectManager *manager, u32 sprite, u32 direction, u32 x, s32 z) { LocalMapObject *mapObject = MapObject_Create(manager, x, z, direction, sprite, 1, 1); GF_ASSERT(mapObject != NULL); MapObject_SetID(mapObject, 255); @@ -115,3 +114,32 @@ static void PlayerAvatar_CreateMapObjectWithParams(PlayerAvatar *avatar, MapObje MapObject_SetFlag29(mapObject, TRUE); PlayerAvatar_SetMapObject(avatar, mapObject); } + +LocalMapObject *MapObjectManager_GetFirstActiveObjectWithMovement1(MapObjectManager *manager) { + s32 index = 0; + LocalMapObject *mapObject = NULL; + while (MapObjectManager_GetNextObjectWithFlagFromIndex(manager, &mapObject, &index, MAPOBJECTFLAG_ACTIVE)) { + if (MapObject_GetMovement(mapObject) == 1) { + break; + } + } + return mapObject; +} + +static LocalMapObject *PlayerAvatar_GetActiveMapObjectWithMovement1(MapObjectManager *manager) { + LocalMapObject *mapObject = MapObjectManager_GetFirstActiveObjectWithMovement1(manager); + GF_ASSERT(mapObject != NULL); + return mapObject; +} + +u32 PlayerAvatar_GetFacingDirection(PlayerAvatar *avatar) { + return MapObject_GetFacingDirection(PlayerAvatar_GetMapObject(avatar)); +} + +void PlayerAvatar_SetFacingDirection(PlayerAvatar *avatar, u32 direction) { + MapObject_SetFacingDirection(PlayerAvatar_GetMapObject(avatar), direction); +} + +u32 PlayerAvatar_GetNextFacingDirection(PlayerAvatar *avatar) { + return MapObject_GetNextFacingDirection(PlayerAvatar_GetMapObject(avatar)); +} diff --git a/arm9/src/scrcmd.c b/arm9/src/scrcmd.c index a09a262cb..74025fc40 100644 --- a/arm9/src/scrcmd.c +++ b/arm9/src/scrcmd.c @@ -27,6 +27,7 @@ #include "msgdata.h" #include "options.h" #include "party.h" +#include "player_avatar.h" #include "player_data.h" #include "pokedex.h" #include "pokemon_storage_system.h" @@ -67,7 +68,6 @@ extern MessageFormat *ov06_02244210(SaveData *sav, u16 poke, u16 sex, u8 flag, u extern void ov05_021E2CBC(ScriptContext *ctx, MessageFormat *messageFormat, u8 param2, u32 param3); extern void ov05_021E2BB8(void *param0, ScriptContext *ctx); extern BOOL sub_02030F40(void); -extern void sub_02055304(PlayerAvatar *playerAvatar, u32 param1); extern void sub_02039460(FieldSystem *arg); extern void ov05_021E8128(u32 param0, u8 type, u16 map); extern void ov05_021E8130(u32 param0, u32 param1); @@ -99,7 +99,6 @@ extern const ObjectEvent *sub_02034B6C(FieldSystem *fieldSystem); extern u32 sub_02059D1C(LocalMapObject *target); extern VecFx32 *MapObject_GetPositionVector(LocalMapObject *target); extern void ov05_021EF5E0(VecFx32 *target, u32 param1); -extern u32 PlayerAvatar_GetFacingDirection(PlayerAvatar *playerAvatar); extern u32 sub_02059E74(u32 direction); extern void ov05_021F1EC0(LocalMapObject *event, u32 param1); extern u16 PlayerAvatar_GetXCoord(PlayerAvatar *playerAvatar); @@ -1027,13 +1026,13 @@ static BOOL sub_0203A4E0(ScriptContext *ctx) { if (gSystem.newKeys & (PAD_BUTTON_A | PAD_BUTTON_B)) { return TRUE; } else if (gSystem.newKeys & PAD_KEY_UP) { - sub_02055304(ctx->fieldSystem->playerAvatar, 0); + PlayerAvatar_SetFacingDirection(ctx->fieldSystem->playerAvatar, 0); } else if (gSystem.newKeys & PAD_KEY_DOWN) { - sub_02055304(ctx->fieldSystem->playerAvatar, 1); + PlayerAvatar_SetFacingDirection(ctx->fieldSystem->playerAvatar, 1); } else if (gSystem.newKeys & PAD_KEY_LEFT) { - sub_02055304(ctx->fieldSystem->playerAvatar, 2); + PlayerAvatar_SetFacingDirection(ctx->fieldSystem->playerAvatar, 2); } else if (gSystem.newKeys & PAD_KEY_RIGHT) { - sub_02055304(ctx->fieldSystem->playerAvatar, 3); + PlayerAvatar_SetFacingDirection(ctx->fieldSystem->playerAvatar, 3); } else if (gSystem.newKeys & PAD_BUTTON_X) { sub_02039460(ctx->fieldSystem); } else { @@ -1258,7 +1257,7 @@ static BOOL sub_0203A94C(ScriptContext *ctx) { if (tmp != 0xFFFF) { sub_0201BD7C(*printerNumber); - sub_02055304(ctx->fieldSystem->playerAvatar, tmp); + PlayerAvatar_SetFacingDirection(ctx->fieldSystem->playerAvatar, tmp); *varPtr = 0; return TRUE; } else { @@ -1296,7 +1295,7 @@ static BOOL sub_0203AA0C(ScriptContext *ctx) { } if (tmp != 0xFFFF) { - sub_02055304(ctx->fieldSystem->playerAvatar, tmp); + PlayerAvatar_SetFacingDirection(ctx->fieldSystem->playerAvatar, tmp); *unk = 0; return TRUE; } else { diff --git a/include/player_avatar.h b/include/player_avatar.h index 31228979b..8816441fe 100644 --- a/include/player_avatar.h +++ b/include/player_avatar.h @@ -13,10 +13,14 @@ struct PlayerAvatar { u8 padding0[0x3C]; }; // TODO: populate once we know more -PlayerAvatar *PlayerAvatar_CreateWithParamsExtended(MapObjectManager *mapObjectManager, s32 x, s32 z, u32 direction, u32 state, u32 gender, PlayerSaveData *playerSaveData); -PlayerAvatar *PlayerAvatar_CreateWithParams(MapObjectManager *mapObjectManager, PlayerSaveData *playerSaveData, u32 gender); +PlayerAvatar *PlayerAvatar_CreateWithParams(MapObjectManager *mapObjectManager, u32 x, s32 z, u32 direction, u32 state, u32 gender, PlayerSaveData *playerSaveData); +PlayerAvatar *PlayerAvatar_CreateWithActiveMapObject(MapObjectManager *mapObjectManager, PlayerSaveData *playerSaveData, u32 gender); void sub_02055108(PlayerAvatar *avatar); void PlayerAvatar_FreeToHeap(PlayerAvatar *avatar); void PlayerAvatar_DeleteFromMap(PlayerAvatar *avatar); +LocalMapObject *MapObjectManager_GetFirstActiveObjectWithMovement1(MapObjectManager *manager); +u32 PlayerAvatar_GetFacingDirection(PlayerAvatar *avatar); +void PlayerAvatar_SetFacingDirection(PlayerAvatar *avatar, u32 direction); +u32 PlayerAvatar_GetNextFacingDirection(PlayerAvatar *avatar); #endif // POKEDIAMOND_PLAYER_AVATAR_H