This commit is contained in:
red031000 2025-03-05 05:00:57 +00:00
parent 05944c7f69
commit f08180fc01
No known key found for this signature in database
GPG Key ID: D27E50C050AE0CE1
16 changed files with 96 additions and 134 deletions

View File

@ -3,75 +3,6 @@
.text .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 thumb_func_start PlayerAvatar_GetXCoord
PlayerAvatar_GetXCoord: ; 0x02055320 PlayerAvatar_GetXCoord: ; 0x02055320
push {r3, lr} push {r3, lr}

View File

@ -283,7 +283,7 @@ sub_02048AE4: ; 0x02048AE4
ldr r1, [r3, #0x8] ldr r1, [r3, #0x8]
ldr r2, [r3, #0xc] ldr r2, [r3, #0xc]
ldr r3, [r3, #0x10] ldr r3, [r3, #0x10]
bl PlayerAvatar_CreateWithParamsExtended bl PlayerAvatar_CreateWithParams
str r0, [r5, #0x38] str r0, [r5, #0x38]
add r0, r5, #0x0 add r0, r5, #0x0
bl sub_02034AC8 bl sub_02034AC8
@ -326,7 +326,7 @@ sub_02048B50: ; 0x02048B50
add r2, r0, #0x0 add r2, r0, #0x0
ldr r0, [r5, #0x34] ldr r0, [r5, #0x34]
add r1, r4, #0x0 add r1, r4, #0x0
bl PlayerAvatar_CreateWithParams bl PlayerAvatar_CreateWithActiveMapObject
str r0, [r5, #0x38] str r0, [r5, #0x38]
ldr r0, [r5, #0x34] ldr r0, [r5, #0x34]
bl sub_02058768 bl sub_02058768

View File

@ -767,7 +767,7 @@ _0204B8F6:
bne _0204B910 bne _0204B910
ldr r0, [r5, #0x38] ldr r0, [r5, #0x38]
mov r1, #0x0 mov r1, #0x0
bl sub_02055304 bl PlayerAvatar_SetFacingDirection
mov r0, #0x4 mov r0, #0x4
str r0, [r4, #0x0] str r0, [r4, #0x0]
b _0204B98E b _0204B98E
@ -789,7 +789,7 @@ _0204B922:
ble _0204B98E ble _0204B98E
ldr r0, [r5, #0x38] ldr r0, [r5, #0x38]
ldr r1, [r4, #0x4] ldr r1, [r4, #0x4]
bl sub_02055304 bl PlayerAvatar_SetFacingDirection
mov r0, #0x4 mov r0, #0x4
str r0, [r4, #0x0] str r0, [r4, #0x0]
b _0204B98E b _0204B98E
@ -814,14 +814,14 @@ _0204B93A:
_0204B964: _0204B964:
ldr r0, [r5, #0x38] ldr r0, [r5, #0x38]
ldr r1, [r4, #0x4] ldr r1, [r4, #0x4]
bl sub_02055304 bl PlayerAvatar_SetFacingDirection
mov r0, #0x4 mov r0, #0x4
str r0, [r4, #0x0] str r0, [r4, #0x0]
b _0204B98E b _0204B98E
_0204B972: _0204B972:
ldr r0, [r5, #0x38] ldr r0, [r5, #0x38]
ldr r1, [r4, #0x4] ldr r1, [r4, #0x4]
bl sub_02055304 bl PlayerAvatar_SetFacingDirection
ldr r0, [r5, #0x38] ldr r0, [r5, #0x38]
bl PlayerAvatar_GetMapObject bl PlayerAvatar_GetMapObject
bl MapObject_PauseMovement bl MapObject_PauseMovement

View File

@ -1126,7 +1126,7 @@ _0204D37C:
ldrh r2, [r2, #0x0] ldrh r2, [r2, #0x0]
ldrsb r3, [r7, r3] ldrsb r3, [r7, r3]
ldr r0, [r0, #0x34] ldr r0, [r0, #0x34]
bl PlayerAvatar_CreateWithParamsExtended bl PlayerAvatar_CreateWithParams
add r7, r0, #0x0 add r7, r0, #0x0
bne _0204D3B2 bne _0204D3B2
bl GF_AssertFail bl GF_AssertFail
@ -2424,7 +2424,7 @@ _0204DD5E:
ldr r0, [r0, #0x0] ldr r0, [r0, #0x0]
add r0, r0, r7 add r0, r0, r7
ldr r0, [r0, #0x8] ldr r0, [r0, #0x8]
bl sub_02055304 bl PlayerAvatar_SetFacingDirection
add r0, r4, #0x0 add r0, r4, #0x0
mov r1, #0x80 mov r1, #0x80
bl MapObject_SetFlagsBits bl MapObject_SetFlagsBits
@ -5707,7 +5707,7 @@ sub_0204F6DC: ; 0x0204F6DC
ldr r0, [r0, #0x0] ldr r0, [r0, #0x0]
ldr r0, [r0, #0x54] ldr r0, [r0, #0x54]
ldr r0, [r0, #0x38] ldr r0, [r0, #0x38]
bl sub_02055304 bl PlayerAvatar_SetFacingDirection
bl sub_02031190 bl sub_02031190
ldr r1, _0204F708 ; =UNK_021C5A68 ldr r1, _0204F708 ; =UNK_021C5A68
lsl r0, r0, #0x3 lsl r0, r0, #0x3
@ -5734,7 +5734,7 @@ sub_0204F70C: ; 0x0204F70C
ldr r2, [r3, #0x0] ldr r2, [r3, #0x0]
add r0, r2, r0 add r0, r2, r0
ldr r0, [r0, #0x8] ldr r0, [r0, #0x8]
bl sub_02055304 bl PlayerAvatar_SetFacingDirection
pop {r4, pc} pop {r4, pc}
.balign 4 .balign 4
_0204F728: .word UNK_021C5A68 _0204F728: .word UNK_021C5A68

View File

@ -1920,7 +1920,7 @@ sub_02056740: ; 0x02056740
bl sub_02056494 bl sub_02056494
str r0, [sp, #0x0] str r0, [sp, #0x0]
add r0, r5, #0x0 add r0, r5, #0x0
bl sub_02055314 bl PlayerAvatar_GetNextFacingDirection
add r6, r0, #0x0 add r6, r0, #0x0
add r0, r5, #0x0 add r0, r5, #0x0
add r1, r7, #0x0 add r1, r7, #0x0
@ -2347,7 +2347,7 @@ sub_02056AB8: ; 0x02056AB8
bl sub_02056494 bl sub_02056494
str r0, [sp, #0x0] str r0, [sp, #0x0]
add r0, r5, #0x0 add r0, r5, #0x0
bl sub_02055314 bl PlayerAvatar_GetNextFacingDirection
add r6, r0, #0x0 add r6, r0, #0x0
add r0, r5, #0x0 add r0, r5, #0x0
add r1, r7, #0x0 add r1, r7, #0x0
@ -3079,7 +3079,7 @@ sub_02057060: ; 0x02057060
pop {r3-r7, pc} pop {r3-r7, pc}
_02057086: _02057086:
add r0, r6, #0x0 add r0, r6, #0x0
bl sub_02055314 bl PlayerAvatar_GetNextFacingDirection
add r7, r0, #0x0 add r7, r0, #0x0
add r0, r6, #0x0 add r0, r6, #0x0
bl sub_02055430 bl sub_02055430

View File

@ -133,7 +133,7 @@ sub_0205E5B4: ; 0x0205E5B4
add r5, r0, #0x0 add r5, r0, #0x0
add r4, r1, #0x0 add r4, r1, #0x0
bl MapObject_GetManager bl MapObject_GetManager
bl sub_020552A4 bl MapObjectManager_GetFirstActiveObjectWithMovement1
cmp r0, #0x0 cmp r0, #0x0
bne _0205E5CC bne _0205E5CC
mov r0, #0x0 mov r0, #0x0

View File

@ -3892,15 +3892,15 @@
.extern Save_PlayerHasAllRegisInParty .extern Save_PlayerHasAllRegisInParty
.extern sub_02054F50 .extern sub_02054F50
.extern sub_0205502C .extern sub_0205502C
.extern PlayerAvatar_CreateWithParamsExtended
.extern PlayerAvatar_CreateWithParams .extern PlayerAvatar_CreateWithParams
.extern PlayerAvatar_CreateWithActiveMapObject
.extern sub_02055108 .extern sub_02055108
.extern PlayerAvatar_FreeToHeap .extern PlayerAvatar_FreeToHeap
.extern PlayerAvatar_DeleteFromMap .extern PlayerAvatar_DeleteFromMap
.extern sub_020552A4 .extern MapObjectManager_GetFirstActiveObjectWithMovement1
.extern PlayerAvatar_GetFacingDirection .extern PlayerAvatar_GetFacingDirection
.extern sub_02055304 .extern PlayerAvatar_SetFacingDirection
.extern sub_02055314 .extern PlayerAvatar_GetNextFacingDirection
.extern PlayerAvatar_GetXCoord .extern PlayerAvatar_GetXCoord
.extern PlayerAvatar_GetZCoord .extern PlayerAvatar_GetZCoord
.extern sub_02055338 .extern sub_02055338

View File

@ -1157,7 +1157,7 @@ ov05_021E6904: ; 0x021E6904
pop {r4, pc} pop {r4, pc}
_021E6916: _021E6916:
add r0, r4, #0 add r0, r4, #0
bl sub_02055314 bl PlayerAvatar_GetNextFacingDirection
add r1, r0, #0 add r1, r0, #0
add r0, r4, #0 add r0, r4, #0
bl ov05_021E727C bl ov05_021E727C

View File

@ -37,12 +37,12 @@ _021E7532:
str r0, [r1, #0x10] str r0, [r1, #0x10]
_021E7536: _021E7536:
ldr r0, [r1] ldr r0, [r1]
ldr r3, _021E7540 ; =sub_02055304 ldr r3, _021E7540 ; =PlayerAvatar_SetFacingDirection
ldr r0, [r0, #0x38] ldr r0, [r0, #0x38]
ldr r1, [r1, #0x10] ldr r1, [r1, #0x10]
bx r3 bx r3
.balign 4, 0 .balign 4, 0
_021E7540: .word sub_02055304 _021E7540: .word PlayerAvatar_SetFacingDirection
thumb_func_start ov05_021E7544 thumb_func_start ov05_021E7544
ov05_021E7544: ; 0x021E7544 ov05_021E7544: ; 0x021E7544
@ -264,7 +264,7 @@ _021E771C:
ldr r0, [r5] ldr r0, [r5]
mov r1, #1 mov r1, #1
ldr r0, [r0, #0x38] ldr r0, [r0, #0x38]
bl sub_02055304 bl PlayerAvatar_SetFacingDirection
ldr r0, [r5, #4] ldr r0, [r5, #4]
mov r1, #1 mov r1, #1
str r1, [r0] str r1, [r0]

View File

@ -4,6 +4,7 @@
#include "nitro/types.h" #include "nitro/types.h"
#include "field_system.h" #include "field_system.h"
#include "player_avatar.h"
#include "task.h" #include "task.h"
typedef struct UnkStruct021E7358 { typedef struct UnkStruct021E7358 {
@ -11,12 +12,12 @@ typedef struct UnkStruct021E7358 {
u32 Unk04; u32 Unk04;
u32 Unk08; u32 Unk08;
FieldSystem *fieldSystem; FieldSystem *fieldSystem;
u32 Unk10; PlayerAvatar *avatar;
} UnkStruct021E7358; } UnkStruct021E7358;
BOOL ov05_021E72FC(FieldSystem *fieldSystem, u32 param1); BOOL ov05_021E72FC(FieldSystem *fieldSystem, PlayerAvatar *avatar);
void ov05_021E7358(FieldSystem *fieldSystem, u32 param1, u32 param2); void ov05_021E7358(FieldSystem *fieldSystem, PlayerAvatar *avatar, u32 param2);
u32 ov05_021E7388(u32 param0); u32 ov05_021E7388(u32 param0);
BOOL ov05_021E73B4(TaskManager *taskManager); BOOL ov05_021E73B4(TaskManager *taskManager);
UnkStruct021E7358 *ov05_021E74D4(u32 param0); UnkStruct021E7358 *ov05_021E74D4(u32 param0);

View File

@ -8,19 +8,18 @@
#include "map_object.h" #include "map_object.h"
#include "unk_020051F4.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_02054B30(u8 param0);
extern BOOL sub_02054B3C(u8 param0); extern BOOL sub_02054B3C(u8 param0);
extern BOOL sub_02054B48(u8 param0); extern BOOL sub_02054B48(u8 param0);
extern BOOL sub_02054B54(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 u32 sub_0205AFDC(u32 param0, u32 param1);
extern void sub_02057260(u32 param0, u32 param1); extern void sub_02057260(PlayerAvatar *avatar, u32 param1);
extern void sub_02055304(u32 param0, u32 param1); extern BOOL sub_02056B74(PlayerAvatar *avatar, LocalMapObject *object, u32 param2);
extern BOOL sub_02056B74(u32 param0, LocalMapObject *object, u32 param2);
BOOL ov05_021E72FC(FieldSystem *fieldSystem, u32 param1) { BOOL ov05_021E72FC(FieldSystem *fieldSystem, PlayerAvatar *avatar) {
u8 res = (u8)sub_02058720(PlayerAvatar_GetMapObject(param1)); u8 res = (u8)sub_02058720(PlayerAvatar_GetMapObject(avatar));
u32 r2; u32 r2;
if (sub_02054B30(res) == TRUE) { if (sub_02054B30(res) == TRUE) {
r2 = 3; r2 = 3;
@ -37,14 +36,14 @@ BOOL ov05_021E72FC(FieldSystem *fieldSystem, u32 param1) {
} }
return FALSE; return FALSE;
label: label:
ov05_021E7358(fieldSystem, param1, r2); ov05_021E7358(fieldSystem, avatar, r2);
return TRUE; 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); UnkStruct021E7358 *res = ov05_021E74D4(24);
res->fieldSystem = fieldSystem; res->fieldSystem = fieldSystem;
res->Unk10 = param1; res->avatar = avatar;
res->Unk00 = param2; res->Unk00 = param2;
PlaySE(SEQ_SE_DP_F209); PlaySE(SEQ_SE_DP_F209);
FieldSystem_CreateTask(fieldSystem, ov05_021E73B4, res); FieldSystem_CreateTask(fieldSystem, ov05_021E73B4, res);
@ -66,7 +65,7 @@ u32 ov05_021E7388(u32 param0) {
BOOL ov05_021E73B4(TaskManager *taskManager) { BOOL ov05_021E73B4(TaskManager *taskManager) {
UnkStruct021E7358 *strct = TaskManager_GetEnvironment(taskManager); UnkStruct021E7358 *strct = TaskManager_GetEnvironment(taskManager);
LocalMapObject *playerObject = PlayerAvatar_GetMapObject(strct->Unk10); LocalMapObject *playerObject = PlayerAvatar_GetMapObject(strct->avatar);
u8 res2 = (u8)sub_02058720(playerObject); u8 res2 = (u8)sub_02058720(playerObject);
switch (strct->Unk08) { switch (strct->Unk08) {
case 0: case 0:
@ -74,18 +73,18 @@ BOOL ov05_021E73B4(TaskManager *taskManager) {
strct->Unk08++; strct->Unk08++;
break; break;
case 1: case 1:
if (!sub_02057254(strct->Unk10)) { if (!sub_02057254(strct->avatar)) {
break; break;
} }
sub_02057260(strct->Unk10, sub_0205AFDC(strct->Unk00, 12)); sub_02057260(strct->avatar, sub_0205AFDC(strct->Unk00, 12));
sub_02055304(strct->Unk10, strct->Unk00); PlayerAvatar_SetFacingDirection(strct->avatar, strct->Unk00);
strct->Unk08++; strct->Unk08++;
strct->Unk04 = 7; strct->Unk04 = 7;
break; break;
case 2: case 2:
if (strct->Unk04 == 2 || strct->Unk04 == 4 || strct->Unk04 == 6) { if (strct->Unk04 == 2 || strct->Unk04 == 4 || strct->Unk04 == 6) {
strct->Unk00 = ov05_021E7388(strct->Unk00); strct->Unk00 = ov05_021E7388(strct->Unk00);
sub_02055304(strct->Unk10, strct->Unk00); PlayerAvatar_SetFacingDirection(strct->avatar, strct->Unk00);
} }
if (--(strct->Unk04)) { if (--(strct->Unk04)) {
break; break;
@ -101,13 +100,13 @@ BOOL ov05_021E73B4(TaskManager *taskManager) {
} else { } else {
strct->Unk00 = ov05_021E7388(strct->Unk00); 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; strct->Unk08 = 1;
break; break;
} }
MapObject_ClearFlagsBits(playerObject, MAPOBJECTFLAG_UNK7); MapObject_ClearFlagsBits(playerObject, MAPOBJECTFLAG_UNK7);
MapObject_ClearFlagsBits(playerObject, MAPOBJECTFLAG_UNK8); MapObject_ClearFlagsBits(playerObject, MAPOBJECTFLAG_UNK8);
sub_02055304(strct->Unk10, strct->Unk00); PlayerAvatar_SetFacingDirection(strct->avatar, strct->Unk00);
ov05_021E74F8(strct); ov05_021E74F8(strct);
sub_020054F0(1624, 0); sub_020054F0(1624, 0);
return TRUE; return TRUE;

View File

@ -13403,7 +13403,7 @@ ov18_0223FD8C: ; 0x0223FD8C
ldr r0, [r0, #4] ldr r0, [r0, #4]
ldr r0, [r0, #0x40] ldr r0, [r0, #0x40]
ldr r0, [r0, #0x38] ldr r0, [r0, #0x38]
bl sub_02055304 bl PlayerAvatar_SetFacingDirection
bl sub_02031190 bl sub_02031190
ldr r1, _0223FDE0 ; =0x022513A0 ldr r1, _0223FDE0 ; =0x022513A0
lsl r0, r0, #3 lsl r0, r0, #3

View File

@ -13,6 +13,7 @@
#include "map_header.h" #include "map_header.h"
#include "map_object.h" #include "map_object.h"
#include "overlay_06.h" #include "overlay_06.h"
#include "player_avatar.h"
#include "player_data.h" #include "player_data.h"
#include "save_local_field_data.h" #include "save_local_field_data.h"
#include "start_menu.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 u8 GetMetatileBehavior(FieldSystem *fieldSystem, s32 x, s32 z);
extern void PlayerAvatar_GetCoordsInFront(PlayerAvatar *playerAvatar, 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 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_IsRockClimbInDirection(u32 facingTile, u32 facingDirection);
extern BOOL MetatileBehavior_IsWaterfall(u8 facingTile); extern BOOL MetatileBehavior_IsWaterfall(u8 facingTile);
extern LocalFieldData *Save_LocalFieldData_Get(SaveData *save); 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); s32 z = PlayerAvatar_GetZCoord(fieldSystem->playerAvatar);
u32 standingTile = GetMetatileBehavior(fieldSystem, x, z); u32 standingTile = GetMetatileBehavior(fieldSystem, x, z);

View File

@ -6,19 +6,18 @@
static PlayerAvatar *PlayerAvatar_Create(void); static PlayerAvatar *PlayerAvatar_Create(void);
static void PlayerAvatar_Setup(PlayerAvatar *avatar, u32 state, u32 gender, PlayerSaveData *playerSaveData); 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 PlayerAvatar_GetSpriteByStateAndGender(u32 state, u32 gender);
extern u32 PlayerSaveData_GetState(PlayerSaveData *playerSaveData); extern u32 PlayerSaveData_GetState(PlayerSaveData *playerSaveData);
extern LocalMapObject *PlayerAvatar_CreateMapObject(MapObjectManager *manager);
extern void PlayerAvatar_SetMapObject(PlayerAvatar *avatar, LocalMapObject *mapObject); extern void PlayerAvatar_SetMapObject(PlayerAvatar *avatar, LocalMapObject *mapObject);
extern LocalMapObject *PlayerAvatar_GetMapObject(PlayerAvatar *avatar); extern LocalMapObject *PlayerAvatar_GetMapObject(PlayerAvatar *avatar);
extern void ov05_021EDBC8(PlayerAvatar *avatar); extern void ov05_021EDBC8(PlayerAvatar *avatar);
extern u32 PlayerAvatar_GetState(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 s32 PlayerAvatar_GetZCoord(PlayerAvatar *avatar);
extern u32 PlayerAvatar_GetFacingDirection(PlayerAvatar *avatar); extern u32 ov06_0224ABAC(LocalMapObject *mapObject, u32 x, s32 z, u32 direction, u32 param4);
extern u32 ov06_0224ABAC(LocalMapObject *mapObject, s32 x, s32 z, u32 direction, u32 param4);
extern void sub_02055450(PlayerAvatar *avatar, u32 param1); extern void sub_02055450(PlayerAvatar *avatar, u32 param1);
extern void PlayerAvatar_SetPlayerSaveData(PlayerAvatar *avatar, PlayerSaveData *saveData); extern void PlayerAvatar_SetPlayerSaveData(PlayerAvatar *avatar, PlayerSaveData *saveData);
extern void sub_0205536C(PlayerAvatar *avatar, u32 param1); 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_020556C8(PlayerAvatar *avatar, u32 param1);
extern void sub_0205574C(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 *avatar = PlayerAvatar_Create();
PlayerAvatar_Setup(avatar, state, gender, playerSaveData); PlayerAvatar_Setup(avatar, state, gender, playerSaveData);
u32 sprite = PlayerAvatar_GetSpriteByStateAndGender(state, gender); u32 sprite = PlayerAvatar_GetSpriteByStateAndGender(state, gender);
@ -41,11 +40,11 @@ PlayerAvatar *PlayerAvatar_CreateWithParamsExtended(MapObjectManager *manager, s
return avatar; return avatar;
} }
PlayerAvatar *PlayerAvatar_CreateWithParams(MapObjectManager *manager, PlayerSaveData *playerSaveData, u32 gender) { PlayerAvatar *PlayerAvatar_CreateWithActiveMapObject(MapObjectManager *manager, PlayerSaveData *playerSaveData, u32 gender) {
PlayerAvatar *avatar = PlayerAvatar_Create(); PlayerAvatar *avatar = PlayerAvatar_Create();
u32 state = PlayerSaveData_GetState(playerSaveData); u32 state = PlayerSaveData_GetState(playerSaveData);
PlayerAvatar_Setup(avatar, state, gender, 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_SetSpriteID(mapObject, PlayerAvatar_GetSpriteByStateAndGender(state, gender));
MapObject_SetFlagsBits(mapObject, (MapObjectFlagBits)(MAPOBJECTFLAG_UNK13 | MAPOBJECTFLAG_KEEP)); MapObject_SetFlagsBits(mapObject, (MapObjectFlagBits)(MAPOBJECTFLAG_UNK13 | MAPOBJECTFLAG_KEEP));
MapObject_ClearFlagsBits(mapObject, (MapObjectFlagBits)(MAPOBJECTFLAG_UNK8 | MAPOBJECTFLAG_UNK7)); MapObject_ClearFlagsBits(mapObject, (MapObjectFlagBits)(MAPOBJECTFLAG_UNK8 | MAPOBJECTFLAG_UNK7));
@ -60,7 +59,7 @@ void sub_02055108(PlayerAvatar *avatar) {
MapObject_GetManager(mapObject); MapObject_GetManager(mapObject);
ov05_021EDBC8(avatar); ov05_021EDBC8(avatar);
if (PlayerAvatar_GetState(avatar) == PLAYER_STATE_SURFING) { if (PlayerAvatar_GetState(avatar) == PLAYER_STATE_SURFING) {
s32 x = PlayerAvatar_GetXCoord(avatar); u32 x = PlayerAvatar_GetXCoord(avatar);
s32 z = PlayerAvatar_GetZCoord(avatar); s32 z = PlayerAvatar_GetZCoord(avatar);
u32 direction = PlayerAvatar_GetFacingDirection(avatar); u32 direction = PlayerAvatar_GetFacingDirection(avatar);
sub_02055450(avatar, ov06_0224ABAC(mapObject, x, z, direction, 1)); 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); 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); LocalMapObject *mapObject = MapObject_Create(manager, x, z, direction, sprite, 1, 1);
GF_ASSERT(mapObject != NULL); GF_ASSERT(mapObject != NULL);
MapObject_SetID(mapObject, 255); MapObject_SetID(mapObject, 255);
@ -115,3 +114,32 @@ static void PlayerAvatar_CreateMapObjectWithParams(PlayerAvatar *avatar, MapObje
MapObject_SetFlag29(mapObject, TRUE); MapObject_SetFlag29(mapObject, TRUE);
PlayerAvatar_SetMapObject(avatar, mapObject); 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));
}

View File

@ -27,6 +27,7 @@
#include "msgdata.h" #include "msgdata.h"
#include "options.h" #include "options.h"
#include "party.h" #include "party.h"
#include "player_avatar.h"
#include "player_data.h" #include "player_data.h"
#include "pokedex.h" #include "pokedex.h"
#include "pokemon_storage_system.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_021E2CBC(ScriptContext *ctx, MessageFormat *messageFormat, u8 param2, u32 param3);
extern void ov05_021E2BB8(void *param0, ScriptContext *ctx); extern void ov05_021E2BB8(void *param0, ScriptContext *ctx);
extern BOOL sub_02030F40(void); extern BOOL sub_02030F40(void);
extern void sub_02055304(PlayerAvatar *playerAvatar, u32 param1);
extern void sub_02039460(FieldSystem *arg); extern void sub_02039460(FieldSystem *arg);
extern void ov05_021E8128(u32 param0, u8 type, u16 map); extern void ov05_021E8128(u32 param0, u8 type, u16 map);
extern void ov05_021E8130(u32 param0, u32 param1); 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 u32 sub_02059D1C(LocalMapObject *target);
extern VecFx32 *MapObject_GetPositionVector(LocalMapObject *target); extern VecFx32 *MapObject_GetPositionVector(LocalMapObject *target);
extern void ov05_021EF5E0(VecFx32 *target, u32 param1); extern void ov05_021EF5E0(VecFx32 *target, u32 param1);
extern u32 PlayerAvatar_GetFacingDirection(PlayerAvatar *playerAvatar);
extern u32 sub_02059E74(u32 direction); extern u32 sub_02059E74(u32 direction);
extern void ov05_021F1EC0(LocalMapObject *event, u32 param1); extern void ov05_021F1EC0(LocalMapObject *event, u32 param1);
extern u16 PlayerAvatar_GetXCoord(PlayerAvatar *playerAvatar); 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)) { if (gSystem.newKeys & (PAD_BUTTON_A | PAD_BUTTON_B)) {
return TRUE; return TRUE;
} else if (gSystem.newKeys & PAD_KEY_UP) { } 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) { } 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) { } 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) { } 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) { } else if (gSystem.newKeys & PAD_BUTTON_X) {
sub_02039460(ctx->fieldSystem); sub_02039460(ctx->fieldSystem);
} else { } else {
@ -1258,7 +1257,7 @@ static BOOL sub_0203A94C(ScriptContext *ctx) {
if (tmp != 0xFFFF) { if (tmp != 0xFFFF) {
sub_0201BD7C(*printerNumber); sub_0201BD7C(*printerNumber);
sub_02055304(ctx->fieldSystem->playerAvatar, tmp); PlayerAvatar_SetFacingDirection(ctx->fieldSystem->playerAvatar, tmp);
*varPtr = 0; *varPtr = 0;
return TRUE; return TRUE;
} else { } else {
@ -1296,7 +1295,7 @@ static BOOL sub_0203AA0C(ScriptContext *ctx) {
} }
if (tmp != 0xFFFF) { if (tmp != 0xFFFF) {
sub_02055304(ctx->fieldSystem->playerAvatar, tmp); PlayerAvatar_SetFacingDirection(ctx->fieldSystem->playerAvatar, tmp);
*unk = 0; *unk = 0;
return TRUE; return TRUE;
} else { } else {

View File

@ -13,10 +13,14 @@ struct PlayerAvatar {
u8 padding0[0x3C]; u8 padding0[0x3C];
}; // TODO: populate once we know more }; // 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, u32 x, s32 z, u32 direction, u32 state, u32 gender, PlayerSaveData *playerSaveData);
PlayerAvatar *PlayerAvatar_CreateWithParams(MapObjectManager *mapObjectManager, PlayerSaveData *playerSaveData, u32 gender); PlayerAvatar *PlayerAvatar_CreateWithActiveMapObject(MapObjectManager *mapObjectManager, PlayerSaveData *playerSaveData, u32 gender);
void sub_02055108(PlayerAvatar *avatar); void sub_02055108(PlayerAvatar *avatar);
void PlayerAvatar_FreeToHeap(PlayerAvatar *avatar); void PlayerAvatar_FreeToHeap(PlayerAvatar *avatar);
void PlayerAvatar_DeleteFromMap(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 #endif // POKEDIAMOND_PLAYER_AVATAR_H