From aa082ace99436f7e9a54d03fa1cd58deee3f4a7c Mon Sep 17 00:00:00 2001 From: red031000 Date: Fri, 23 May 2025 18:18:46 +0100 Subject: [PATCH] more decomp --- arm9/asm/player_avatar_asm.s | 187 ------------------------------ arm9/asm/unk_02034D7C.s | 2 +- arm9/asm/unk_020557F4.s | 22 ++-- arm9/asm/unk_0205E4EC.s | 2 +- arm9/asm/unk_020647A4.s | 4 +- arm9/global.inc | 20 ++-- arm9/overlays/06/asm/overlay_06.s | 6 +- arm9/overlays/18/asm/overlay_18.s | 12 +- arm9/src/map_object.c | 2 +- arm9/src/player_avatar.c | 120 ++++++++++++++++++- arm9/src/scrcmd.c | 1 - arm9/src/scrcmd_flags.c | 18 ++- include/map_object.h | 2 +- include/player_avatar.h | 24 +++- 14 files changed, 178 insertions(+), 244 deletions(-) diff --git a/arm9/asm/player_avatar_asm.s b/arm9/asm/player_avatar_asm.s index d2770af6f..783a38a58 100644 --- a/arm9/asm/player_avatar_asm.s +++ b/arm9/asm/player_avatar_asm.s @@ -7,193 +7,6 @@ .text - thumb_func_start PlayerAvatar_SetPlayerSaveData -PlayerAvatar_SetPlayerSaveData: ; 0x02055458 - str r1, [r0, #0x34] - bx lr - - thumb_func_start sub_0205545C -sub_0205545C: ; 0x0205545C - ldr r0, [r0, #0x34] - bx lr - - thumb_func_start sub_02055460 -sub_02055460: ; 0x02055460 - str r1, [r0, #0x8] - bx lr - - thumb_func_start sub_02055464 -sub_02055464: ; 0x02055464 - ldr r0, [r0, #0x8] - bx lr - - thumb_func_start sub_02055468 -sub_02055468: ; 0x02055468 - mov r1, #0x0 - strh r1, [r0, #0x0] - strh r1, [r0, #0x2] - str r1, [r0, #0x4] - bx lr - .balign 4 - - thumb_func_start sub_02055474 -sub_02055474: ; 0x02055474 - cmp r0, #0x0 - beq _02055482 - ldrh r0, [r0, #0x2] - cmp r0, #0x1 - bne _02055482 - mov r0, #0x1 - bx lr -_02055482: - mov r0, #0x0 - bx lr - .balign 4 - - thumb_func_start sub_02055488 -sub_02055488: ; 0x02055488 - cmp r1, #0x1 - bne _02055492 - mov r1, #0x1 - strh r1, [r0, #0x2] - bx lr -_02055492: - mov r1, #0x0 - strh r1, [r0, #0x2] - bx lr - - thumb_func_start sub_02055498 -sub_02055498: ; 0x02055498 - cmp r0, #0x0 - bne _020554A0 - mov r0, #0x0 - bx lr -_020554A0: - ldrh r0, [r0, #0x0] - bx lr - - thumb_func_start sub_020554A4 -sub_020554A4: ; 0x020554A4 - cmp r0, #0x0 - beq _020554AA - strh r1, [r0, #0x0] -_020554AA: - bx lr - - thumb_func_start sub_020554AC -sub_020554AC: ; 0x020554AC - push {r4, lr} - add r4, r1, #0x0 - bl sub_0205545C - add r1, r4, #0x0 - bl sub_020554A4 - pop {r4, pc} - - thumb_func_start sub_020554BC -sub_020554BC: ; 0x020554BC - push {r3, lr} - bl sub_0205545C - bl sub_02055498 - pop {r3, pc} - - thumb_func_start PlayerSaveData_GetState -PlayerSaveData_GetState: ; 0x020554C8 - cmp r0, #0x0 - beq _020554D0 - ldr r0, [r0, #0x4] - bx lr -_020554D0: - mov r0, #0x0 - bx lr - - thumb_func_start sub_020554D4 -sub_020554D4: ; 0x020554D4 - cmp r0, #0x0 - beq _020554DA - str r1, [r0, #0x4] -_020554DA: - bx lr - - thumb_func_start sub_020554DC -sub_020554DC: ; 0x020554DC - push {r4, lr} - add r4, r1, #0x0 - bl sub_0205545C - add r1, r4, #0x0 - bl sub_020554D4 - pop {r4, pc} - - thumb_func_start sub_020554EC -sub_020554EC: ; 0x020554EC - push {r4-r6, lr} - add r4, r1, #0x0 - add r6, r2, #0x0 - add r5, r0, #0x0 - bl PlayerAvatar_GetMapObject - add r1, r4, #0x0 - add r2, r6, #0x0 - bl LocalMapObject_SetPositionFromVectorAndDirection - add r0, r5, #0x0 - mov r1, #0x0 - bl PlayerAvatar_SetUnk10 - add r0, r5, #0x0 - mov r1, #0x0 - bl PlayerAvatar_SetUnk14 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start sub_02055514 -sub_02055514: ; 0x02055514 - push {r3-r7, lr} - add r6, r1, #0x0 - add r7, r2, #0x0 - add r5, r0, #0x0 - add r4, r3, #0x0 - bl PlayerAvatar_GetMapObject - add r1, r6, #0x0 - mov r2, #0x0 - add r3, r7, #0x0 - str r4, [sp, #0x0] - bl MapObject_SetPositionFromXYZAndDirection - add r0, r5, #0x0 - mov r1, #0x0 - bl PlayerAvatar_SetUnk10 - add r0, r5, #0x0 - mov r1, #0x0 - bl PlayerAvatar_SetUnk14 - pop {r3-r7, pc} - - thumb_func_start sub_02055540 -sub_02055540: ; 0x02055540 - push {r4-r5, lr} - sub sp, #0xc - add r5, r1, #0x0 - bl PlayerAvatar_GetMapObject - add r4, r0, #0x0 - add r1, sp, #0x0 - bl MapObject_CopyPositionVector - add r0, r4, #0x0 - add r1, sp, #0x0 - str r5, [sp, #0x4] - bl MapObject_SetPositionVector - add sp, #0xc - pop {r4-r5, pc} - - thumb_func_start PlayerAvatar_ToggleAutomaticHeightUpdating -PlayerAvatar_ToggleAutomaticHeightUpdating: ; 0x02055560 - push {r4, lr} - add r4, r1, #0x0 - bl PlayerAvatar_GetMapObject - cmp r4, #0x1 - bne _02055574 - mov r1, #0x0 - bl MapObject_SetIgnoreHeights - pop {r4, pc} -_02055574: - mov r1, #0x1 - bl MapObject_SetIgnoreHeights - pop {r4, pc} - thumb_func_start sub_0205557C sub_0205557C: ; 0x0205557C push {r3-r5, lr} diff --git a/arm9/asm/unk_02034D7C.s b/arm9/asm/unk_02034D7C.s index a56623798..f85252e76 100644 --- a/arm9/asm/unk_02034D7C.s +++ b/arm9/asm/unk_02034D7C.s @@ -38,7 +38,7 @@ sub_02034D98: ; 0x02034D98 bl sub_0204ADE0 add r0, r4, #0x0 add r0, #0x8c - bl sub_02055468 + bl PlayerSaveData_Init bl GetMomSpawnId add r4, #0x68 strh r0, [r4, #0x0] diff --git a/arm9/asm/unk_020557F4.s b/arm9/asm/unk_020557F4.s index 5291b247d..820a9baed 100644 --- a/arm9/asm/unk_020557F4.s +++ b/arm9/asm/unk_020557F4.s @@ -806,7 +806,7 @@ _02055E62: mov r1, #0x1 bl PlayerAvatar_SetUnk10 add r0, r5, #0x0 - bl sub_020554BC + bl PlayerAvatar_GetPlayerSaveDataUnk0 cmp r0, #0x1 bne _02055E9C add r0, r5, #0x0 @@ -862,7 +862,7 @@ sub_02055EF8: ; 0x02055EF8 add r4, r0, #0x0 bl MapObject_GetNextFacingDirection add r0, r5, #0x0 - bl sub_020554BC + bl PlayerAvatar_GetPlayerSaveDataUnk0 cmp r0, #0x1 bne _02055F22 ldr r0, _02055F40 ; =0x00000656 @@ -897,7 +897,7 @@ sub_02055F44: ; 0x02055F44 add r4, r0, #0x0 bl MapObject_GetNextFacingDirection add r0, r5, #0x0 - bl sub_020554BC + bl PlayerAvatar_GetPlayerSaveDataUnk0 cmp r0, #0x1 bne _02055F6E ldr r0, _02055F8C ; =0x00000656 @@ -1363,8 +1363,8 @@ _020562DC: _020562E6: add r0, r5, #0x0 mov r4, #0xc - bl sub_0205545C - bl sub_02055474 + bl PlayerAvatar_GetPlayerSaveData + bl PlayerSaveData_CheckRunningShoes cmp r0, #0x1 bne _02056306 add r1, sp, #0x8 @@ -1458,7 +1458,7 @@ sub_020563A8: ; 0x020563A8 add r4, r1, #0x0 add r6, r2, #0x0 add r7, r3, #0x0 - bl sub_020554BC + bl PlayerAvatar_GetPlayerSaveDataUnk0 cmp r0, #0x1 add r0, sp, #0x10 bne _020563D6 @@ -1500,14 +1500,14 @@ sub_020563F0: ; 0x020563F0 beq _0205642C add r0, r5, #0x0 mov r4, #0x1 - bl sub_020554BC + bl PlayerAvatar_GetPlayerSaveDataUnk0 cmp r0, #0x1 bne _02056412 mov r4, #0x0 _02056412: add r0, r5, #0x0 add r1, r4, #0x0 - bl sub_020554AC + bl PlayerAvatar_SetPlayerSaveDataUnk0 cmp r4, #0x0 bne _02056426 ldr r0, _02056430 ; =0x0000061C @@ -2422,7 +2422,7 @@ sub_02056B5C: ; 0x02056B5C add r4, r2, #0x0 add r5, r1, #0x0 add r1, r4, #0x0 - bl sub_02055460 + bl PlayerAvatar_SetUnk8 add r0, r5, #0x0 add r1, r4, #0x0 bl sub_0205ADDC @@ -3173,7 +3173,7 @@ _0205711E: thumb_func_start sub_02057124 sub_02057124: ; 0x02057124 push {r3, lr} - bl sub_02055464 + bl PlayerAvatar_GetUnk8 sub r0, #0x58 cmp r0, #0x3 bhi _02057148 @@ -3216,7 +3216,7 @@ _02057162: b _0205718E _02057172: add r0, r5, #0x0 - bl sub_020554BC + bl PlayerAvatar_GetPlayerSaveDataUnk0 add r0, r5, #0x0 add r1, r4, #0x0 bl sub_020568A8 diff --git a/arm9/asm/unk_0205E4EC.s b/arm9/asm/unk_0205E4EC.s index c1fec71a1..2f3e97642 100644 --- a/arm9/asm/unk_0205E4EC.s +++ b/arm9/asm/unk_0205E4EC.s @@ -217,7 +217,7 @@ sub_0205E65C: ; 0x0205E65C push {r3, lr} bl MapObject_GetFieldSystem bl sub_02055698 - bl sub_02055464 + bl PlayerAvatar_GetUnk8 add r1, r0, #0x0 sub r1, #0x58 cmp r1, #0x3 diff --git a/arm9/asm/unk_020647A4.s b/arm9/asm/unk_020647A4.s index 41d28160a..14385c227 100644 --- a/arm9/asm/unk_020647A4.s +++ b/arm9/asm/unk_020647A4.s @@ -503,7 +503,7 @@ _02064B00: _02064B1C: ldr r0, [r5, #0x38] ldr r1, [sp, #0x14] - bl sub_02055540 + bl PlayerAvatar_SetMapObjectYPosition ldr r0, [sp, #0xc] add r1, sp, #0x10 bl ov05_021E7EB0 @@ -620,7 +620,7 @@ _02064BEC: _02064C12: ldr r0, [r5, #0x38] ldr r1, [sp, #0x14] - bl sub_02055540 + bl PlayerAvatar_SetMapObjectYPosition ldr r0, [sp, #0xc] add r1, sp, #0x10 bl ov05_021E7EB0 diff --git a/arm9/global.inc b/arm9/global.inc index d504f7e84..373435c0b 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -3928,17 +3928,17 @@ .extern PlayerAvatar_SetUnk24Unk28 .extern PlayerAvatar_SetUnk30 .extern PlayerAvatar_GetUnk30 -.extern sub_0205545C -.extern sub_02055460 -.extern sub_02055464 -.extern sub_02055468 -.extern sub_02055474 -.extern sub_02055488 -.extern sub_020554AC -.extern sub_020554BC +.extern PlayerAvatar_GetPlayerSaveData +.extern PlayerAvatar_SetUnk8 +.extern PlayerAvatar_GetUnk8 +.extern PlayerSaveData_Init +.extern PlayerSaveData_CheckRunningShoes +.extern PlayerSaveData_SetRunningShoesFlag +.extern PlayerAvatar_SetPlayerSaveDataUnk0 +.extern PlayerAvatar_GetPlayerSaveDataUnk0 .extern sub_020554EC .extern sub_02055514 -.extern sub_02055540 +.extern PlayerAvatar_SetMapObjectYPosition .extern PlayerAvatar_ToggleAutomaticHeightUpdating .extern sub_0205557C .extern PlayerAvatar_GetSpriteByStateAndGender @@ -4143,7 +4143,7 @@ .extern sub_02058BD4 .extern MapObject_GetPositionVectorYCoordUInt .extern MapObjectManager_GetFirstObjectWithXAndZ -.extern LocalMapObject_SetPositionFromVectorAndDirection +.extern MapObject_SetPositionFromVectorAndDirection .extern MapObject_SetPositionFromXYZAndDirection .extern sub_02058E90 .extern sub_02058EB0 diff --git a/arm9/overlays/06/asm/overlay_06.s b/arm9/overlays/06/asm/overlay_06.s index 140603d45..b2d4bbb81 100644 --- a/arm9/overlays/06/asm/overlay_06.s +++ b/arm9/overlays/06/asm/overlay_06.s @@ -16593,7 +16593,7 @@ _022419B8: _022419F0: ldr r0, [r5, #0x38] ldr r1, [sp, #4] - bl sub_02055540 + bl PlayerAvatar_SetMapObjectYPosition add r0, r6, #0 add r1, sp, #0 bl ov05_021E7EB0 @@ -16690,7 +16690,7 @@ _02241A88: _02241ABC: ldr r0, [r5, #0x38] ldr r1, [sp, #4] - bl sub_02055540 + bl PlayerAvatar_SetMapObjectYPosition add r0, r6, #0 add r1, sp, #0 bl ov05_021E7EB0 @@ -17245,7 +17245,7 @@ _02241F2A: _02241F2E: ldr r0, [r6, #0x38] ldr r1, [sp, #4] - bl sub_02055540 + bl PlayerAvatar_SetMapObjectYPosition add r0, r7, #0 add r1, sp, #0 bl ov05_021E7EB0 diff --git a/arm9/overlays/18/asm/overlay_18.s b/arm9/overlays/18/asm/overlay_18.s index ade87a2de..0a9035845 100644 --- a/arm9/overlays/18/asm/overlay_18.s +++ b/arm9/overlays/18/asm/overlay_18.s @@ -15773,7 +15773,7 @@ ov18_02240F34: ; 0x02240F34 ldr r0, [r1, #0x40] mov r1, #0 ldr r0, [r0, #0x38] - bl sub_02055540 + bl PlayerAvatar_SetMapObjectYPosition ldr r0, _02240F80 ; =0x022513A0 ldr r1, [r0, #4] mov r0, #0xa3 @@ -15837,7 +15837,7 @@ _02240FB4: ldr r0, [r0, #4] ldr r0, [r0, #0x40] ldr r0, [r0, #0x38] - bl sub_02055540 + bl PlayerAvatar_SetMapObjectYPosition ldr r0, _02241000 ; =0x022513A0 ldr r1, [r0, #4] mov r0, #0xa3 @@ -16037,7 +16037,7 @@ _0224110C: ldr r0, [r0, #4] ldr r0, [r0, #0x40] ldr r0, [r0, #0x38] - bl sub_02055540 + bl PlayerAvatar_SetMapObjectYPosition add sp, #0x14 pop {r4, r5, pc} _02241166: @@ -16055,7 +16055,7 @@ _02241166: ldr r0, [r0, #4] ldr r0, [r0, #0x40] ldr r0, [r0, #0x38] - bl sub_02055540 + bl PlayerAvatar_SetMapObjectYPosition add sp, #0x14 pop {r4, r5, pc} _0224118C: @@ -16082,7 +16082,7 @@ _022411B0: ldr r0, [r0, #4] ldr r0, [r0, #0x40] ldr r0, [r0, #0x38] - bl sub_02055540 + bl PlayerAvatar_SetMapObjectYPosition add r0, r4, #0 bl FreeToHeap add r0, r5, #0 @@ -16143,7 +16143,7 @@ _02241222: ldr r0, [r0, #4] ldr r0, [r0, #0x40] ldr r0, [r0, #0x38] - bl sub_02055540 + bl PlayerAvatar_SetMapObjectYPosition ldr r0, [r4, #0x10] add r0, r0, #1 str r0, [r4, #0x10] diff --git a/arm9/src/map_object.c b/arm9/src/map_object.c index a9a0589b5..a470e84f7 100644 --- a/arm9/src/map_object.c +++ b/arm9/src/map_object.c @@ -1944,7 +1944,7 @@ LocalMapObject *MapObjectManager_GetFirstObjectWithXAndZ(MapObjectManager *manag return NULL; } -void LocalMapObject_SetPositionFromVectorAndDirection(LocalMapObject *object, VecFx32 *positionVector, u32 direction) { +void MapObject_SetPositionFromVectorAndDirection(LocalMapObject *object, VecFx32 *positionVector, u32 direction) { MapObject_SetCurrentX(object, (positionVector->x >> 4) / FX32_ONE); MapObject_SetCurrentY(object, (positionVector->y >> 3) / FX32_ONE); MapObject_SetCurrentZ(object, (positionVector->z >> 4) / FX32_ONE); diff --git a/arm9/src/player_avatar.c b/arm9/src/player_avatar.c index af47a6b24..20b81a479 100644 --- a/arm9/src/player_avatar.c +++ b/arm9/src/player_avatar.c @@ -15,16 +15,18 @@ static void PlayerAvatar_SetGender(PlayerAvatar *avatar, u32 gender); /*static*/ PlayerAvatarFlags PlayerAvatar_GetFlagsBitsMask(PlayerAvatar *avatar, PlayerAvatarFlags flags); static void PlayerAvatar_SetUnk24(PlayerAvatar *avatar, s32 param1); static void PlayerAvatar_SetUnk28(PlayerAvatar *avatar, s32 param1); +static void PlayerAvatar_SetPlayerSaveData(PlayerAvatar *avatar, PlayerSaveData *playerSaveData); +static u16 PlayerSaveData_GetUnk0(PlayerSaveData *playerSaveData); +static void PlayerSaveData_SetUnk0(PlayerSaveData *playerSaveData, u16 unk0); +static s32 PlayerSaveData_GetState(PlayerSaveData *playerSaveData); +static void PlayerSaveData_SetState(PlayerSaveData *playerSaveData, s32 state); +static void PlayerAvatar_SetPlayerSaveDataState(PlayerAvatar *avatar, s32 state); extern u32 PlayerAvatar_GetSpriteByStateAndGender(s32 state, u32 gender); -extern u32 PlayerSaveData_GetState(PlayerSaveData *playerSaveData); extern void ov05_021EDBC8(PlayerAvatar *avatar); extern u32 ov06_0224ABAC(LocalMapObject *mapObject, u32 x, u32 z, u32 direction, u32 param4); -extern void PlayerAvatar_SetPlayerSaveData(PlayerAvatar *avatar, PlayerSaveData *saveData); -extern void sub_02055460(PlayerAvatar *avatar, u32 param1); extern void sub_020556C8(PlayerAvatar *avatar, u32 param1); extern void sub_0205574C(PlayerAvatar *avatar, u32 param1); -extern void sub_020554DC(PlayerAvatar *avatar, s32 state); extern void PlayerAvatar_SetFlag2(PlayerAvatar *avatar, BOOL flag); PlayerAvatar *PlayerAvatar_CreateWithParams(MapObjectManager *manager, u32 x, u32 z, u32 direction, s32 state, u32 gender, PlayerSaveData *playerSaveData) { @@ -87,7 +89,7 @@ static void PlayerAvatar_Setup(PlayerAvatar *avatar, s32 state, u32 gender, Play PlayerAvatar_ClearUnk20ClearFlag2(avatar); PlayerAvatar_SetUnk24(avatar, -1); PlayerAvatar_SetUnk28(avatar, -1); - sub_02055460(avatar, 255); + PlayerAvatar_SetUnk8(avatar, 255); sub_020556C8(avatar, 1); sub_0205574C(avatar, 1); } @@ -203,7 +205,7 @@ static LocalMapObject *PlayerAvatar_GetMapObjectConst(PlayerAvatar *avatar) { void PlayerAvatar_SetState(PlayerAvatar *avatar, s32 state) { GF_ASSERT(state < PLAYER_STATE_UNK_SP); avatar->state = state; - sub_020554DC(avatar, state); + PlayerAvatar_SetPlayerSaveDataState(avatar, state); } s32 PlayerAvatar_GetState(PlayerAvatar *avatar) { @@ -293,3 +295,109 @@ void PlayerAvatar_SetUnk30(PlayerAvatar *avatar, u32 param1) { u32 PlayerAvatar_GetUnk30(PlayerAvatar *avatar) { return avatar->unk30; } + +static void PlayerAvatar_SetPlayerSaveData(PlayerAvatar *avatar, PlayerSaveData *playerSaveData) { + avatar->playerSaveData = playerSaveData; +} + +PlayerSaveData *PlayerAvatar_GetPlayerSaveData(PlayerAvatar *avatar) { + return avatar->playerSaveData; +} + +void PlayerAvatar_SetUnk8(PlayerAvatar *avatar, u32 param1) { + avatar->unk8 = param1; +} + +u32 PlayerAvatar_GetUnk8(PlayerAvatar *avatar) { + return avatar->unk8; +} + +void PlayerSaveData_Init(PlayerSaveData *playerSaveData) { + playerSaveData->unk0 = 0; + playerSaveData->hasRunningShoes = FALSE; + playerSaveData->state = 0; +} + +BOOL PlayerSaveData_CheckRunningShoes(PlayerSaveData *playerSaveData) { + if (playerSaveData != NULL && playerSaveData->hasRunningShoes == TRUE) { + return TRUE; + } + return FALSE; +} + +void PlayerSaveData_SetRunningShoesFlag(PlayerSaveData *playerSaveData, BOOL flag) { + if (flag == TRUE) { + playerSaveData->hasRunningShoes = TRUE; + } else { + playerSaveData->hasRunningShoes = FALSE; + } +} + +static u16 PlayerSaveData_GetUnk0(PlayerSaveData *playerSaveData) { + if (playerSaveData == NULL) { + return 0; + } + return playerSaveData->unk0; +} + +static void PlayerSaveData_SetUnk0(PlayerSaveData *playerSaveData, u16 unk0) { + if (playerSaveData == NULL) { + return; + } + playerSaveData->unk0 = unk0; +} + +void PlayerAvatar_SetPlayerSaveDataUnk0(PlayerAvatar *playerAvatar, u16 unk0) { + PlayerSaveData_SetUnk0(PlayerAvatar_GetPlayerSaveData(playerAvatar), unk0); +} + +u16 PlayerAvatar_GetPlayerSaveDataUnk0(PlayerAvatar *playerAvatar) { + return PlayerSaveData_GetUnk0(PlayerAvatar_GetPlayerSaveData(playerAvatar)); +} + +static s32 PlayerSaveData_GetState(PlayerSaveData *playerSaveData) { + if (!playerSaveData) { + return 0; + } + return playerSaveData->state; +} + +static void PlayerSaveData_SetState(PlayerSaveData *playerSaveData, s32 state) { + if (!playerSaveData) { + return; + } + playerSaveData->state = state; +} + +static void PlayerAvatar_SetPlayerSaveDataState(PlayerAvatar *avatar, s32 state) { + PlayerSaveData_SetState(PlayerAvatar_GetPlayerSaveData(avatar), state); +} + +void sub_020554EC(PlayerAvatar *avatar, VecFx32 *position, u32 direction) { + MapObject_SetPositionFromVectorAndDirection(PlayerAvatar_GetMapObject(avatar), position, direction); + PlayerAvatar_SetUnk10(avatar, 0); + PlayerAvatar_SetUnk14(avatar, 0); +} + +void sub_02055514(PlayerAvatar *avatar, u32 x, u32 z, u32 direction) { + MapObject_SetPositionFromXYZAndDirection(PlayerAvatar_GetMapObject(avatar), x, 0, z, direction); + PlayerAvatar_SetUnk10(avatar, 0); + PlayerAvatar_SetUnk14(avatar, 0); +} + +void PlayerAvatar_SetMapObjectYPosition(PlayerAvatar *avatar, fx32 yVal) { + LocalMapObject *mapObject = PlayerAvatar_GetMapObject(avatar); + VecFx32 position; + MapObject_CopyPositionVector(mapObject, &position); + position.y = yVal; + MapObject_SetPositionVector(mapObject, &position); +} + +void PlayerAvatar_ToggleAutomaticHeightUpdating(PlayerAvatar *avatar, u8 flag) { + LocalMapObject *mapObject = PlayerAvatar_GetMapObject(avatar); + if (flag == TRUE) { + MapObject_SetIgnoreHeights(mapObject, FALSE); + } else { + MapObject_SetIgnoreHeights(mapObject, TRUE); + } +} diff --git a/arm9/src/scrcmd.c b/arm9/src/scrcmd.c index 068540aba..bc0300afb 100644 --- a/arm9/src/scrcmd.c +++ b/arm9/src/scrcmd.c @@ -290,7 +290,6 @@ extern void sub_02061574(FieldSystem *fieldSystem); extern u16 SpearPillarSequence(FieldSystem *fieldSystem, u8 operation); extern void ov06_0224525C(FieldSystem *fieldSystem, u16 var, u16 type); extern u16 ov06_02245340(FieldSystem *fieldSystem, u16 position); -extern void PlayerAvatar_ToggleAutomaticHeightUpdating(PlayerAvatar *avatar, u8 flag); extern u16 Save_VarsFlags_GetSpiritombTalkCounter(SaveVarsFlags *varsFlags); extern void sub_0205F5A4(SaveVarsFlags *varsFlags, u16 param1); extern u16 sub_0205F594(SaveVarsFlags *varsFlags); diff --git a/arm9/src/scrcmd_flags.c b/arm9/src/scrcmd_flags.c index ef419ef64..7cdbc47b5 100644 --- a/arm9/src/scrcmd_flags.c +++ b/arm9/src/scrcmd_flags.c @@ -4,10 +4,8 @@ #include "save_vars_flags.h" #include "scrcmd.h" -extern void *sub_02034E20(void *); -extern void *Save_LocalFieldData_Get(void *); -extern BOOL sub_02055474(void *); -extern void sub_02055488(void *, u32); +extern PlayerSaveData *sub_02034E20(LocalFieldData *localFieldData); +extern LocalFieldData *Save_LocalFieldData_Get(SaveData *save); extern void sub_0205ECD4(struct SaveVarsFlags *state); extern BOOL sub_0205ECE0(struct SaveVarsFlags *state); extern void sub_0205ECFC(struct SaveVarsFlags *state); @@ -59,20 +57,20 @@ BOOL ScrCmd_GiveSinnohDex(struct ScriptContext *ctx) // 0158 BOOL ScrCmd_HasRunningShoes(struct ScriptContext *ctx) // 0159 { u16 *ret_ptr = ScriptGetVarPointer(ctx); - void *unk_sav_ptr = Save_LocalFieldData_Get(ctx->fieldSystem->saveData); - void *unk = sub_02034E20(unk_sav_ptr); + LocalFieldData *localFieldData = Save_LocalFieldData_Get(ctx->fieldSystem->saveData); + PlayerSaveData *playerSaveData = sub_02034E20(localFieldData); - *ret_ptr = (u16)sub_02055474(unk); + *ret_ptr = (u16)PlayerSaveData_CheckRunningShoes(playerSaveData); return FALSE; } BOOL ScrCmd_GiveRunningShoes(struct ScriptContext *ctx) // 015A { - void *unk_sav_ptr = Save_LocalFieldData_Get(ctx->fieldSystem->saveData); - void *unk = sub_02034E20(unk_sav_ptr); + LocalFieldData *localFieldData = Save_LocalFieldData_Get(ctx->fieldSystem->saveData); + PlayerSaveData *playerSaveData = sub_02034E20(localFieldData); - sub_02055488(unk, 1); + PlayerSaveData_SetRunningShoesFlag(playerSaveData, TRUE); return FALSE; } diff --git a/include/map_object.h b/include/map_object.h index a545bdd69..c9a24f399 100644 --- a/include/map_object.h +++ b/include/map_object.h @@ -357,7 +357,7 @@ void sub_02058BC4(LocalMapObject *object, VecFx32 *vector); void sub_02058BD4(LocalMapObject *object, VecFx32 *vector); u32 MapObject_GetPositionVectorYCoordUInt(LocalMapObject *object); LocalMapObject *MapObjectManager_GetFirstObjectWithXAndZ(MapObjectManager *manager, u32 x, u32 z); -void LocalMapObject_SetPositionFromVectorAndDirection(LocalMapObject *object, VecFx32 *positionVector, u32 direction); +void MapObject_SetPositionFromVectorAndDirection(LocalMapObject *object, VecFx32 *positionVector, u32 direction); void MapObject_SetPositionFromXYZAndDirection(LocalMapObject *object, u32 x, u32 y, u32 z, u32 direction); void sub_02058E90(LocalMapObject *object, u32 movement); void sub_02058EB0(LocalMapObject *object, u32 id); diff --git a/include/player_avatar.h b/include/player_avatar.h index b81127299..5a023d940 100644 --- a/include/player_avatar.h +++ b/include/player_avatar.h @@ -19,13 +19,16 @@ typedef enum PlayerAvatarFlags { } PlayerAvatarFlags; // TODO: check if this is right typedef struct PlayerSaveData { - u8 padding[0x8]; -} PlayerSaveData; + u16 unk0; + u16 hasRunningShoes; // bool16 + s32 state; +} PlayerSaveData; // TODO: copied from heartgold, check if this is correct struct PlayerAvatar { PlayerAvatarFlags flags; u32 transitionFlags; - u8 padding0[0x8]; + u32 unk8; + u8 padding0[0x4]; u32 unk10; u32 unk14; s32 state; @@ -35,7 +38,8 @@ struct PlayerAvatar { s32 unk28; LocalMapObject *mapObject; u32 unk30; - u8 padding2[0x8]; + PlayerSaveData *playerSaveData; + u8 padding2[0x4]; }; // TODO: populate once we know more PlayerAvatar *PlayerAvatar_CreateWithParams(MapObjectManager *mapObjectManager, u32 x, u32 z, u32 direction, s32 state, u32 gender, PlayerSaveData *playerSaveData); @@ -75,5 +79,17 @@ s32 PlayerAvatar_GetUnk28(PlayerAvatar *avatar); void PlayerAvatar_SetUnk24Unk28(PlayerAvatar *avatar, s32 unk24, s32 unk28); void PlayerAvatar_SetUnk30(PlayerAvatar *avatar, u32 param1); u32 PlayerAvatar_GetUnk30(PlayerAvatar *avatar); +PlayerSaveData *PlayerAvatar_GetPlayerSaveData(PlayerAvatar *avatar); +void PlayerAvatar_SetUnk8(PlayerAvatar *avatar, u32 param1); +u32 PlayerAvatar_GetUnk8(PlayerAvatar *avatar); +void PlayerSaveData_Init(PlayerSaveData *playerSaveData); +BOOL PlayerSaveData_CheckRunningShoes(PlayerSaveData *playerSaveData); +void PlayerSaveData_SetRunningShoesFlag(PlayerSaveData *playerSaveData, BOOL flag); +void PlayerAvatar_SetPlayerSaveDataUnk0(PlayerAvatar *playerAvatar, u16 unk0); +u16 PlayerAvatar_GetPlayerSaveDataUnk0(PlayerAvatar *playerAvatar); +void sub_020554EC(PlayerAvatar *avatar, VecFx32 *position, u32 direction); +void sub_02055514(PlayerAvatar *avatar, u32 x, u32 z, u32 direction); +void PlayerAvatar_SetMapObjectYPosition(PlayerAvatar *avatar, fx32 yVal); +void PlayerAvatar_ToggleAutomaticHeightUpdating(PlayerAvatar *avatar, u8 flag); #endif // POKEDIAMOND_PLAYER_AVATAR_H