diff options
Diffstat (limited to 'src/field/field_player_avatar.c')
-rw-r--r-- | src/field/field_player_avatar.c | 221 |
1 files changed, 34 insertions, 187 deletions
diff --git a/src/field/field_player_avatar.c b/src/field/field_player_avatar.c index a7594372d..079fe38d7 100644 --- a/src/field/field_player_avatar.c +++ b/src/field/field_player_avatar.c @@ -12,6 +12,7 @@ #include "constants/map_objects.h" #include "menu.h" #include "metatile_behavior.h" +#include "new_game.h" #include "party_menu.h" #include "random.h" #include "overworld.h" @@ -32,9 +33,9 @@ static void npc_clear_strange_bits(struct MapObject *a); static void MovePlayerAvatarUsingKeypadInput(u8 a, u16 b, u16 c); static void PlayerAllowForcedMovementIfMovingSameDirection(void); static bool8 TryDoMetatileBehaviorForcedMovement(void); -/*static*/ u8 GetForcedMovementByMetatileBehavior(void); +static u8 GetForcedMovementByMetatileBehavior(void); static void MovePlayerNotOnBike(u8 a, u16 b); -/*static*/ u8 CheckMovementInputNotOnBike(u8 a); +static u8 CheckMovementInputNotOnBike(u8 a); static u8 CheckForPlayerAvatarCollision(u8 a); static u8 sub_8058EF0(s16 a, s16 b, u8 c); static bool8 ShouldJumpLedge(s16 a, s16 b, u8 c); @@ -51,6 +52,8 @@ static void sub_8059D60(struct MapObject *a); static void StartStrengthAnim(u8 a, u8 b); static void DoPlayerMatJump(void); static void sub_805A06C(void); +u8 debug_sub_805F2B0(u8); +u8 debug_sub_805F2DC(u8); static bool8 (*const gUnknown_0830FB58[])(u8) = { @@ -260,59 +263,16 @@ static void PlayerAllowForcedMovementIfMovingSameDirection(void) gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_5; } -#if DEBUG -__attribute__((naked)) -u8 TryDoMetatileBehaviorForcedMovement() -{ - asm( - " push {r4, lr}\n" - " ldr r0, ._27 @ gUnknown_020297ED\n" - " ldrb r0, [r0]\n" - " cmp r0, #0\n" - " beq ._25 @cond_branch\n" - " ldr r0, ._27 + 4 @ gMain\n" - " ldrh r1, [r0, #0x2c]\n" - " mov r0, #0x80\n" - " lsl r0, r0, #0x1\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._25 @cond_branch\n" - " mov r0, #0x0\n" - " b ._26\n" - "._28:\n" - " .align 2, 0\n" - "._27:\n" - " .word gUnknown_020297ED\n" - " .word gMain\n" - "._25:\n" - " ldr r4, ._29 @ gUnknown_0830FBA0\n" - " bl GetForcedMovementByMetatileBehavior\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x16\n" - " add r0, r0, r4\n" - " ldr r0, [r0]\n" - " bl _call_via_r0\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - "._26:\n" - " pop {r4}\n" - " pop {r1}\n" - " bx r1\n" - "._30:\n" - " .align 2, 0\n" - "._29:\n" - " .word gUnknown_0830FBA0\n" - "\n" - ); -} -#else static bool8 TryDoMetatileBehaviorForcedMovement(void) { +#if DEBUG + if (gUnknown_020297ED != 0 && (gMain.heldKeys & 0x100)) + return 0; +#endif return gUnknown_0830FBA0[GetForcedMovementByMetatileBehavior()](); } -#endif -/*static*/ u8 GetForcedMovementByMetatileBehavior(void) +static u8 GetForcedMovementByMetatileBehavior(void) { u8 i; @@ -483,57 +443,16 @@ bool8 ForcedMovement_MuddySlope(void) } } -#if DEBUG -__attribute__((naked)) -void MovePlayerNotOnBike(u8 u81, u16 u161) -{ - asm( - " push {r4, r5, r6, lr}\n" - " lsl r0, r0, #0x18\n" - " lsr r2, r0, #0x18\n" - " add r5, r2, #0\n" - " lsl r1, r1, #0x10\n" - " lsr r6, r1, #0x10\n" - " ldr r0, ._84 @ gUnknown_020297ED\n" - " ldrb r0, [r0]\n" - " cmp r0, #0\n" - " beq ._82 @cond_branch\n" - " add r0, r2, #0\n" - " bl debug_sub_805F2B0\n" - " lsl r0, r0, #0x18\n" - " cmp r0, #0\n" - " bne ._83 @cond_branch\n" - "._82:\n" - " ldr r4, ._84 + 4 @ gUnknown_0830FBEC\n" - " add r0, r5, #0\n" - " bl CheckMovementInputNotOnBike\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x16\n" - " add r0, r0, r4\n" - " ldr r2, [r0]\n" - " add r0, r5, #0\n" - " add r1, r6, #0\n" - " bl _call_via_r2\n" - "._83:\n" - " pop {r4, r5, r6}\n" - " pop {r0}\n" - " bx r0\n" - "._85:\n" - " .align 2, 0\n" - "._84:\n" - " .word gUnknown_020297ED\n" - " .word gUnknown_0830FBEC\n" - "\n" - ); -} -#else static void MovePlayerNotOnBike(u8 direction, u16 heldKeys) { +#if DEBUG + if (gUnknown_020297ED != 0 && debug_sub_805F2B0(direction) != 0) + return; +#endif gUnknown_0830FBEC[CheckMovementInputNotOnBike(direction)](direction, heldKeys); } -#endif -/*static*/ u8 CheckMovementInputNotOnBike(u8 direction) +static u8 CheckMovementInputNotOnBike(u8 direction) { if (direction == DIR_NONE) { @@ -1857,96 +1776,24 @@ static void sub_805A954(void) } #if DEBUG -__attribute__((naked)) -void debug_sub_805F2B0() -{ - asm( - " push {lr}\n" - " lsl r0, r0, #0x18\n" - " lsr r2, r0, #0x18\n" - " ldr r0, ._422 @ gMain\n" - " ldrh r1, [r0, #0x2c]\n" - " mov r0, #0x80\n" - " lsl r0, r0, #0x1\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " bne ._420 @cond_branch\n" - " mov r0, #0x0\n" - " b ._421\n" - "._423:\n" - " .align 2, 0\n" - "._422:\n" - " .word gMain\n" - "._420:\n" - " add r0, r2, #0\n" - " bl debug_sub_805F2DC\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - "._421:\n" - " pop {r1}\n" - " bx r1\n" - "\n" - ); -} - -__attribute__((naked)) -void debug_sub_805F2DC() -{ - asm( - " push {r4, lr}\n" - " lsl r0, r0, #0x18\n" - " lsr r4, r0, #0x18\n" - " cmp r4, #0\n" - " bne ._424 @cond_branch\n" - " ldr r2, ._426 @ gMapObjects\n" - " ldr r0, ._426 + 4 @ gPlayerAvatar\n" - " ldrb r1, [r0, #0x5]\n" - " lsl r0, r1, #0x3\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r2\n" - " ldrb r0, [r0, #0x18]\n" - " lsr r0, r0, #0x4\n" - " bl PlayerFaceDirection\n" - " b ._430\n" - "._427:\n" - " .align 2, 0\n" - "._426:\n" - " .word gMapObjects\n" - " .word gPlayerAvatar\n" - "._424:\n" - " ldr r2, ._431 @ gMapObjects\n" - " ldr r0, ._431 + 4 @ gPlayerAvatar\n" - " ldrb r1, [r0, #0x5]\n" - " lsl r0, r1, #0x3\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r2\n" - " ldrb r0, [r0, #0x1]\n" - " lsr r0, r0, #0x7\n" - " cmp r0, #0\n" - " beq ._429 @cond_branch\n" - " add r0, r4, #0\n" - " bl CanCameraMoveInDirection\n" - " cmp r0, #0\n" - " bne ._429 @cond_branch\n" - " add r0, r4, #0\n" - " bl PlayerOnBikeCollide\n" - " b ._430\n" - "._432:\n" - " .align 2, 0\n" - "._431:\n" - " .word gMapObjects\n" - " .word gPlayerAvatar\n" - "._429:\n" - " add r0, r4, #0\n" - " bl PlayerGoSpeed4\n" - "._430:\n" - " mov r0, #0x1\n" - " pop {r4}\n" - " pop {r1}\n" - " bx r1\n" - "\n" - ); + +u8 debug_sub_805F2B0(u8 a) +{ + if (gMain.heldKeys & 0x100) + return debug_sub_805F2DC(a); + else + return 0; } + +u8 debug_sub_805F2DC(u8 a) +{ + if (a == 0) + PlayerFaceDirection(gMapObjects[gPlayerAvatar.mapObjectId].placeholder18); + else if (gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_15 && !CanCameraMoveInDirection(a)) + PlayerOnBikeCollide(a); + else + PlayerGoSpeed4(a); + return 1; +} + #endif |