summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/field_player_avatar.s180
-rw-r--r--include/asm.h12
-rw-r--r--include/asm.inc.h8
-rw-r--r--include/field_player_avatar.h4
-rw-r--r--include/global.fieldmap.h33
-rw-r--r--include/map_object_constants.h226
-rw-r--r--ld_script.txt1
-rw-r--r--src/bike.c478
-rw-r--r--src/field_control_avatar.c90
-rw-r--r--src/field_player_avatar.c495
-rw-r--r--src/rom4.c9
11 files changed, 917 insertions, 619 deletions
diff --git a/data/field_player_avatar.s b/data/field_player_avatar.s
index 1491a1ad4..7935c693e 100644
--- a/data/field_player_avatar.s
+++ b/data/field_player_avatar.s
@@ -2,183 +2,3 @@
.include "constants/constants.inc"
.section .rodata
-
- .align 2
-gUnknown_0830FB58:: @ 830FB58
- .4byte MetatileBehavior_IsTrickHouseSlipperyFloor
- .4byte MetatileBehavior_IsIce_2
- .4byte MetatileBehavior_IsWalkSouth
- .4byte MetatileBehavior_IsWalkNorth
- .4byte MetatileBehavior_IsWalkWest
- .4byte MetatileBehavior_IsWalkEast
- .4byte MetatileBehavior_IsSouthwardCurrent
- .4byte MetatileBehavior_IsNorthwardCurrent
- .4byte MetatileBehavior_IsWestwardCurrent
- .4byte MetatileBehavior_IsEastwardCurrent
- .4byte MetatileBehavior_IsSlideSouth
- .4byte MetatileBehavior_IsSlideNorth
- .4byte MetatileBehavior_IsSlideWest
- .4byte MetatileBehavior_IsSlideEast
- .4byte MetatileBehavior_IsWaterfall
- .4byte MetatileBehavior_0xBB
- .4byte MetatileBehavior_0xBC
- .4byte MetatileBehavior_IsMuddySlope
-
- .align 2
-gUnknown_0830FBA0:: @ 830FBA0
- .4byte ForcedMovement_None
- .4byte ForcedMovement_Slip
- .4byte ForcedMovement_Slip
- .4byte sub_8058AAC
- .4byte sub_8058AC4
- .4byte sub_8058ADC
- .4byte sub_8058AF4
- .4byte sub_8058B0C
- .4byte sub_8058B24
- .4byte sub_8058B3C
- .4byte sub_8058B54
- .4byte ForcedMovement_SlideSouth
- .4byte ForcedMovement_SlideNorth
- .4byte ForcedMovement_SlideWest
- .4byte ForcedMovement_SlideEast
- .4byte sub_8058B0C
- .4byte sub_8058C04
- .4byte sub_8058C10
- .4byte ForcedMovement_MuddySlope
-
- .align 2
-gUnknown_0830FBEC:: @ 830FBEC
- .4byte PlayerNotOnBikeNotMoving
- .4byte PlayerNotOnBikeTurningInPlace
- .4byte sub_8058D0C
-
- .align 2
-gUnknown_0830FBF8:: @ 830FBF8
- .4byte MetatileBehavior_IsBumpySlope
- .4byte MetatileBehavior_IsIsolatedVerticalRail
- .4byte MetatileBehavior_IsIsolatedHorizontalRail
- .4byte MetatileBehavior_IsVerticalRail
- .4byte MetatileBehavior_IsHorizontalRail
-
-gUnknown_0830FC0C:: @ 830FC0C
- .byte 0x9, 0xA, 0xB, 0xC, 0xD
-
- .align 2
-gUnknown_0830FC14:: @ 830FC14
- .4byte PlayerAvatarTransition_Normal
- .4byte PlayerAvatarTransition_MachBike
- .4byte PlayerAvatarTransition_AcroBike
- .4byte PlayerAvatarTransition_Surfing
- .4byte PlayerAvatarTransition_Underwater
- .4byte sub_80591F4
- .4byte nullsub_49
- .4byte nullsub_49
-
- .align 2
-gUnknown_0830FC34:: @ 830FC34
- .4byte MetatileBehavior_IsSouthArrowWarp
- .4byte MetatileBehavior_IsNorthArrowWarp
- .4byte MetatileBehavior_IsWestArrowWarp
- .4byte MetatileBehavior_IsEastArrowWarp
-
-gUnknown_0830FC44:: @ 830FC44
- .byte MAP_OBJ_GFX_RIVAL_BRENDAN_NORMAL, MAP_OBJ_GFX_RIVAL_MAY_NORMAL
- .byte MAP_OBJ_GFX_RIVAL_BRENDAN_MACH_BIKE, MAP_OBJ_GFX_RIVAL_MAY_MACH_BIKE
- .byte MAP_OBJ_GFX_RIVAL_BRENDAN_ACRO_BIKE, MAP_OBJ_GFX_RIVAL_MAY_ACRO_BIKE
- .byte MAP_OBJ_GFX_RIVAL_BRENDAN_SURFING, MAP_OBJ_GFX_RIVAL_MAY_SURFING
- .byte MAP_OBJ_GFX_BRENDAN_UNDERWATER, MAP_OBJ_GFX_MAY_UNDERWATER
- .byte MAP_OBJ_GFX_RIVAL_BRENDAN_FIELD_MOVE, MAP_OBJ_GFX_RIVAL_MAY_FIELD_MOVE
- .byte MAP_OBJ_GFX_BRENDAN_FISHING, MAP_OBJ_GFX_MAY_FISHING
- .byte MAP_OBJ_GFX_BRENDAN_WATERING, MAP_OBJ_GFX_MAY_WATERING
-
-gUnknown_0830FC54:: @ 830FC54
- .byte MAP_OBJ_GFX_BRENDAN_NORMAL, MAP_OBJ_GFX_MAY_NORMAL
- .byte MAP_OBJ_GFX_BRENDAN_MACH_BIKE, MAP_OBJ_GFX_MAY_MACH_BIKE
- .byte MAP_OBJ_GFX_BRENDAN_ACRO_BIKE, MAP_OBJ_GFX_MAY_ACRO_BIKE
- .byte MAP_OBJ_GFX_BRENDAN_SURFING, MAP_OBJ_GFX_MAY_SURFING
- .byte MAP_OBJ_GFX_BRENDAN_UNDERWATER, MAP_OBJ_GFX_MAY_UNDERWATER
- .byte MAP_OBJ_GFX_BRENDAN_FIELD_MOVE, MAP_OBJ_GFX_MAY_FIELD_MOVE
- .byte MAP_OBJ_GFX_BRENDAN_FISHING, MAP_OBJ_GFX_MAY_FISHING
- .byte MAP_OBJ_GFX_BRENDAN_WATERING, MAP_OBJ_GFX_MAY_WATERING
-
-gUnknown_0830FC64:: @ 830FC64
- @ male
- .byte MAP_OBJ_GFX_BRENDAN_NORMAL, 1
- .byte MAP_OBJ_GFX_BRENDAN_MACH_BIKE, 2
- .byte MAP_OBJ_GFX_BRENDAN_ACRO_BIKE, 4
- .byte MAP_OBJ_GFX_BRENDAN_SURFING, 8
- .byte MAP_OBJ_GFX_BRENDAN_UNDERWATER, 16
- @ female
- .byte MAP_OBJ_GFX_MAY_NORMAL, 1
- .byte MAP_OBJ_GFX_MAY_MACH_BIKE, 2
- .byte MAP_OBJ_GFX_MAY_ACRO_BIKE, 4
- .byte MAP_OBJ_GFX_MAY_SURFING, 8
- .byte MAP_OBJ_GFX_MAY_UNDERWATER, 16
-
- .align 2
-gUnknown_0830FC78:: @ 830FC78
- .4byte MetatileBehavior_IsSouthArrowWarp
- .4byte MetatileBehavior_IsNorthArrowWarp
- .4byte MetatileBehavior_IsWestArrowWarp
- .4byte MetatileBehavior_IsEastArrowWarp
-
- .align 2
-gUnknown_0830FC88:: @ 830FC88
- .4byte sub_8059E84
- .4byte sub_8059EA4
- .4byte sub_8059F40
-
- .align 2
-gUnknown_0830FC94:: @ 830FC94
- .4byte sub_805A000
-
- .align 2
-gUnknown_0830FC98:: @ 830FC98
- .4byte sub_805A0D8
- .4byte sub_805A100
- .4byte sub_805A178
- .4byte sub_805A1B8
-
-gUnknown_0830FCA8:: @ 830FCA8
- .byte DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH
-
-gUnknown_0830FCAC:: @ 830FCAC
- .byte 0x10, 0x10, 0x11, 0x12, 0x13
-
- .align 2
-gUnknown_0830FCB4:: @ 830FCB4
- .4byte Fishing1
- .4byte Fishing2
- .4byte Fishing3
- .4byte Fishing4
- .4byte Fishing5
- .4byte Fishing6
- .4byte Fishing7
- .4byte Fishing8
- .4byte Fishing9
- .4byte Fishing10
- .4byte Fishing11
- .4byte Fishing12
- .4byte Fishing13
- .4byte Fishing14
- .4byte Fishing15
- .4byte Fishing16
-
- .align 1
-gUnknown_0830FCF4:: @ 830FCF4
- .2byte 1, 1, 1
-
- .align 1
-gUnknown_0830FCFA:: @ 830FCFA
- .2byte 1, 3, 6
-
-gUnknown_0830FD00:: @ 830FD00
- .string "·$"
-
- .align 1
-gUnknown_0830FD02:: @ 830FD02
- .2byte 36, 33, 30
-
- .align 1
-gUnknown_0830FD08:: @ 830FD08
- .2byte 0, 0, 40, 10, 70, 30
diff --git a/include/asm.h b/include/asm.h
index 9e47794f5..dd1955bb2 100644
--- a/include/asm.h
+++ b/include/asm.h
@@ -6,16 +6,16 @@
#include "sprite.h"
#include "asm_fieldmap.h"
-struct UnkInputStruct
+struct FieldInput
{
- u8 input_field_0_0:1;
+ u8 pressedAButton:1;
u8 input_field_0_1:1;
- u8 input_field_0_2:1;
- u8 input_field_0_3:1;
+ u8 pressedStartButton:1;
+ u8 pressedSelectButton:1;
u8 input_field_0_4:1;
u8 input_field_0_5:1;
u8 input_field_0_6:1;
- u8 input_field_0_7:1;
+ u8 pressedBButton:1;
u8 input_field_1_0:1;
u8 input_field_1_1:1;
u8 input_field_1_2:1;
@@ -24,7 +24,7 @@ struct UnkInputStruct
u8 input_field_1_5:1;
u8 input_field_1_6:1;
u8 input_field_1_7:1;
- u8 input_field_2;
+ u8 dpadDirection;
u8 input_field_3;
};
diff --git a/include/asm.inc.h b/include/asm.inc.h
index 64f554ebd..bfc902ffb 100644
--- a/include/asm.inc.h
+++ b/include/asm.inc.h
@@ -145,9 +145,9 @@ void sub_806487C(struct Sprite *sprite, bool8 invisible);
void sub_8064990(u8, u8);
// asm/field_control_avatar.o
-void sub_8067EEC(struct UnkInputStruct *pStruct);
-void process_overworld_input(struct UnkInputStruct *pStruct, u16 keys, u16 heldKeys);
-int sub_8068024(struct UnkInputStruct *pStruct);
+void FieldClearPlayerInput(struct FieldInput *pStruct);
+void FieldGetPlayerInput(struct FieldInput *pStruct, u16 keys, u16 heldKeys);
+int sub_8068024(struct FieldInput *pStruct);
u8 *sub_80682A8(struct MapPosition *, u8, u8);
void overworld_poison_timer_set(void);
void prev_quest_postbuffer_cursor_backup_reset(void);
@@ -361,7 +361,7 @@ void MovePlayerOnBike(u8, u16, u16);
void sub_80E5B38(u16 i, u16 c);
u8 sub_80E5DEC(u8);
bool8 player_should_look_direction_be_enforced_upon_movement(void);
-void sub_80E5FCC(int i, int i1);
+void BikeClearState(int i, int i1);
void sub_80E6010(u8 i);
s16 sub_80E6034(void);
void sub_80E6084();
diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h
index b4746f696..f015eb111 100644
--- a/include/field_player_avatar.h
+++ b/include/field_player_avatar.h
@@ -34,7 +34,7 @@ void SetPlayerAvatarTransitionFlags(u16 a);
// sub_80591F4
void sub_8059204(void);
// player_get_x22
-void player_npc_set_state_and_x22_etc(u8 a, u8 b);
+void PlayerSetAnimId(u8 a, u8 b);
void PlayerGoSpeed0(u8 a);
void sub_80593C4(u8 a);
void npc_use_some_d2s(u8 a);
@@ -46,7 +46,7 @@ void PlayerTurnInPlace(u8 a);
void PlayerJumpLedge(u8 a);
void sub_80594C0(void);
void sub_8059504(u8 a);
-void sub_805951C(u8 a);
+void PlayerStartWheelie(u8 a);
void sub_8059534(u8 a);
void sub_805954C(u8 a);
void sub_8059570(u8 a);
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index eac2c0cf1..5c498de49 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -196,7 +196,7 @@ struct MapObject
/*0x0C*/ struct Coords16 coords1;
/*0x10*/ struct Coords16 coords2;
/*0x14*/ struct Coords16 coords3;
- /*0x18*/ u8 mapobj_unk_18:4;
+ /*0x18*/ u8 mapobj_unk_18:4; //current direction?
/*0x18*/ u8 placeholder18:4;
/*0x19*/ u8 mapobj_unk_19;
/*0x1A*/ u8 mapobj_unk_1A;
@@ -207,7 +207,7 @@ struct MapObject
/*0x1F*/ u8 mapobj_unk_1F;
/*0x20*/ u8 mapobj_unk_20;
/*0x21*/ u8 mapobj_unk_21;
- /*0x22*/ u8 mapobj_unk_22;
+ /*0x22*/ u8 animId;
/*size = 0x24*/
};
@@ -302,6 +302,31 @@ struct MapObjectGraphicsInfo
#define PLAYER_AVATAR_FLAG_6 (1 << 6)
#define PLAYER_AVATAR_FLAG_DASH (1 << 7)
+enum
+{
+ ACRO_BIKE_NORMAL,
+ ACRO_BIKE_TURNING,
+ ACRO_BIKE_WHEELIE_STANDING,
+ ACRO_BIKE_BUNNY_HOP,
+ ACRO_BIKE_WHEELIE_MOVING,
+ ACRO_BIKE_STATE5,
+ ACRO_BIKE_STATE6,
+};
+
+enum
+{
+ DIR_NONE,
+ DIR_SOUTH,
+ DIR_NORTH,
+ DIR_WEST,
+ DIR_EAST,
+};
+
+enum
+{
+ COLLISION_LEDGE_JUMP = 6
+};
+
struct PlayerAvatar /* 0x202E858 */
{
/*0x00*/ u8 flags;
@@ -312,9 +337,9 @@ struct PlayerAvatar /* 0x202E858 */
/*0x05*/ u8 mapObjectId;
/*0x06*/ u8 unk6;
/*0x07*/ u8 gender;
- u8 unk8;
+ u8 acroBikeState;
u8 unk9;
- u8 unkA;
+ u8 bikeFrameCounter;
u8 unkB;
u32 unkC;
u32 unk10;
diff --git a/include/map_object_constants.h b/include/map_object_constants.h
new file mode 100644
index 000000000..440b6e97e
--- /dev/null
+++ b/include/map_object_constants.h
@@ -0,0 +1,226 @@
+#ifndef GUARD_MAP_OBJECT_CONSTANTS_H
+#define GUARD_MAP_OBJECT_CONSTANTS_H
+
+enum
+{
+ MAP_OBJ_GFX_BRENDAN_NORMAL,
+ MAP_OBJ_GFX_BRENDAN_MACH_BIKE,
+ MAP_OBJ_GFX_BRENDAN_SURFING,
+ MAP_OBJ_GFX_BRENDAN_FIELD_MOVE,
+ MAP_OBJ_GFX_QUINTY_PLUMP,
+ MAP_OBJ_GFX_LITTLE_BOY_1,
+ MAP_OBJ_GFX_LITTLE_GIRL_1,
+ MAP_OBJ_GFX_BOY_1,
+ MAP_OBJ_GFX_GIRL_1,
+ MAP_OBJ_GFX_BOY_2,
+ MAP_OBJ_GFX_GIRL_2,
+ MAP_OBJ_GFX_LITTLE_BOY_2,
+ MAP_OBJ_GFX_LITTLE_GIRL_2,
+ MAP_OBJ_GFX_BOY_3,
+ MAP_OBJ_GFX_GIRL_3,
+ MAP_OBJ_GFX_BOY_4,
+ MAP_OBJ_GFX_WOMAN_1,
+ MAP_OBJ_GFX_FAT_MAN,
+ MAP_OBJ_GFX_WOMAN_2,
+ MAP_OBJ_GFX_MAN_1,
+ MAP_OBJ_GFX_WOMAN_3,
+ MAP_OBJ_GFX_OLD_MAN_1,
+ MAP_OBJ_GFX_OLD_WOMAN_1,
+ MAP_OBJ_GFX_MAN_2,
+ MAP_OBJ_GFX_WOMAN_4,
+ MAP_OBJ_GFX_MAN_3,
+ MAP_OBJ_GFX_WOMAN_5,
+ MAP_OBJ_GFX_COOK,
+ MAP_OBJ_GFX_WOMAN_6,
+ MAP_OBJ_GFX_OLD_MAN_2,
+ MAP_OBJ_GFX_OLD_WOMAN_2,
+ MAP_OBJ_GFX_CAMPER,
+ MAP_OBJ_GFX_PICNICKER,
+ MAP_OBJ_GFX_MAN_4,
+ MAP_OBJ_GFX_WOMAN_7,
+ MAP_OBJ_GFX_YOUNGSTER,
+ MAP_OBJ_GFX_BUG_CATCHER,
+ MAP_OBJ_GFX_PSYCHIC_M,
+ MAP_OBJ_GFX_SCHOOL_KID_M,
+ MAP_OBJ_GFX_MANIAC,
+ MAP_OBJ_GFX_HEX_MANIAC,
+ MAP_OBJ_GFX_WOMAN_8,
+ MAP_OBJ_GFX_SWIMMER_M,
+ MAP_OBJ_GFX_SWIMMER_F,
+ MAP_OBJ_GFX_BLACK_BELT,
+ MAP_OBJ_GFX_BEAUTY,
+ MAP_OBJ_GFX_SCIENTIST_1,
+ MAP_OBJ_GFX_LASS,
+ MAP_OBJ_GFX_GENTLEMAN,
+ MAP_OBJ_GFX_SAILOR,
+ MAP_OBJ_GFX_FISHERMAN,
+ MAP_OBJ_GFX_RUNNING_TRIATHLETE_M,
+ MAP_OBJ_GFX_RUNNING_TRIATHLETE_F,
+ MAP_OBJ_GFX_TUBER_F,
+ MAP_OBJ_GFX_TUBER_M,
+ MAP_OBJ_GFX_HIKER,
+ MAP_OBJ_GFX_CYCLING_TRIATHLETE_M,
+ MAP_OBJ_GFX_CYCLING_TRIATHLETE_F,
+ MAP_OBJ_GFX_NURSE,
+ MAP_OBJ_GFX_ITEM_BALL,
+ MAP_OBJ_GFX_BERRY_TREE,
+ MAP_OBJ_GFX_BERRY_TREE_EARLY_STAGES,
+ MAP_OBJ_GFX_BERRY_TREE_LATE_STAGES,
+ MAP_OBJ_GFX_BRENDAN_ACRO_BIKE,
+ MAP_OBJ_GFX_PROF_BIRCH,
+ MAP_OBJ_GFX_MAN_5,
+ MAP_OBJ_GFX_MAN_6,
+ MAP_OBJ_GFX_REPORTER_M,
+ MAP_OBJ_GFX_REPORTER_F,
+ MAP_OBJ_GFX_BARD,
+ MAP_OBJ_GFX_HIPSTER,
+ MAP_OBJ_GFX_TRADER,
+ MAP_OBJ_GFX_STORYTELLER,
+ MAP_OBJ_GFX_GIDDY,
+ MAP_OBJ_GFX_UNUSED_MAUVILLE_OLD_MAN_1,
+ MAP_OBJ_GFX_UNUSED_MAUVILLE_OLD_MAN_2,
+ MAP_OBJ_GFX_UNUSED_NATU_DOLL,
+ MAP_OBJ_GFX_UNUSED_MAGNEMITE_DOLL,
+ MAP_OBJ_GFX_UNUSED_SQUIRTLE_DOLL,
+ MAP_OBJ_GFX_UNUSED_WOOPER_DOLL,
+ MAP_OBJ_GFX_UNUSED_PIKACHU_DOLL,
+ MAP_OBJ_GFX_UNUSED_PORYGON2_DOLL,
+ MAP_OBJ_GFX_CUTTABLE_TREE,
+ MAP_OBJ_GFX_MART_EMPLOYEE,
+ MAP_OBJ_GFX_ROOFTOP_SALE_WOMAN,
+ MAP_OBJ_GFX_TEALA,
+ MAP_OBJ_GFX_BREAKABLE_ROCK,
+ MAP_OBJ_GFX_PUSHABLE_BOULDER,
+ MAP_OBJ_GFX_MR_BRINEYS_BOAT,
+ MAP_OBJ_GFX_MAY_NORMAL,
+ MAP_OBJ_GFX_MAY_MACH_BIKE,
+ MAP_OBJ_GFX_MAY_ACRO_BIKE,
+ MAP_OBJ_GFX_MAY_SURFING,
+ MAP_OBJ_GFX_MAY_FIELD_MOVE,
+ MAP_OBJ_GFX_TRUCK,
+ MAP_OBJ_GFX_MACHOKE_CARRYING_BOX,
+ MAP_OBJ_GFX_MACHOKE_FACING_AWAY,
+ MAP_OBJ_GFX_BIRCHS_BAG,
+ MAP_OBJ_GFX_POOCHYENA,
+ MAP_OBJ_GFX_ARTIST,
+ MAP_OBJ_GFX_RIVAL_BRENDAN_NORMAL,
+ MAP_OBJ_GFX_RIVAL_BRENDAN_MACH_BIKE,
+ MAP_OBJ_GFX_RIVAL_BRENDAN_ACRO_BIKE,
+ MAP_OBJ_GFX_RIVAL_BRENDAN_SURFING,
+ MAP_OBJ_GFX_RIVAL_BRENDAN_FIELD_MOVE,
+ MAP_OBJ_GFX_RIVAL_MAY_NORMAL,
+ MAP_OBJ_GFX_RIVAL_MAY_MACH_BIKE,
+ MAP_OBJ_GFX_RIVAL_MAY_ACRO_BIKE,
+ MAP_OBJ_GFX_RIVAL_MAY_SURFING,
+ MAP_OBJ_GFX_RIVAL_MAY_FIELD_MOVE,
+ MAP_OBJ_GFX_CAMERAMAN,
+ MAP_OBJ_GFX_BRENDAN_UNDERWATER,
+ MAP_OBJ_GFX_MAY_UNDERWATER,
+ MAP_OBJ_GFX_MOVING_BOX,
+ MAP_OBJ_GFX_CABLE_CAR,
+ MAP_OBJ_GFX_SCIENTIST_2,
+ MAP_OBJ_GFX_MAN_7,
+ MAP_OBJ_GFX_AQUA_MEMBER_M,
+ MAP_OBJ_GFX_AQUA_MEMBER_F,
+ MAP_OBJ_GFX_MAGMA_MEMBER_M,
+ MAP_OBJ_GFX_MAGMA_MEMBER_F,
+ MAP_OBJ_GFX_SIDNEY,
+ MAP_OBJ_GFX_PHOEBE,
+ MAP_OBJ_GFX_GLACIA,
+ MAP_OBJ_GFX_DRAKE,
+ MAP_OBJ_GFX_ROXANNE,
+ MAP_OBJ_GFX_BRAWLY,
+ MAP_OBJ_GFX_WATTSON,
+ MAP_OBJ_GFX_FLANNERY,
+ MAP_OBJ_GFX_NORMAN,
+ MAP_OBJ_GFX_WINONA,
+ MAP_OBJ_GFX_LIZA,
+ MAP_OBJ_GFX_TATE,
+ MAP_OBJ_GFX_WALLACE,
+ MAP_OBJ_GFX_STEVEN,
+ MAP_OBJ_GFX_WALLY,
+ MAP_OBJ_GFX_LITTLE_BOY_3,
+ MAP_OBJ_GFX_BRENDAN_FISHING,
+ MAP_OBJ_GFX_MAY_FISHING,
+ MAP_OBJ_GFX_HOT_SPRINGS_OLD_WOMAN,
+ MAP_OBJ_GFX_SS_TIDAL,
+ MAP_OBJ_GFX_SUBMARINE_SHADOW,
+ MAP_OBJ_GFX_PICHU_DOLL,
+ MAP_OBJ_GFX_PIKACHU_DOLL,
+ MAP_OBJ_GFX_MARILL_DOLL,
+ MAP_OBJ_GFX_TOGEPI_DOLL,
+ MAP_OBJ_GFX_CYNDAQUIL_DOLL,
+ MAP_OBJ_GFX_CHIKORITA_DOLL,
+ MAP_OBJ_GFX_TOTODILE_DOLL,
+ MAP_OBJ_GFX_JIGGLYPUFF_DOLL,
+ MAP_OBJ_GFX_MEOWTH_DOLL,
+ MAP_OBJ_GFX_CLEFAIRY_DOLL,
+ MAP_OBJ_GFX_DITTO_DOLL,
+ MAP_OBJ_GFX_SMOOCHUM_DOLL,
+ MAP_OBJ_GFX_TREECKO_DOLL,
+ MAP_OBJ_GFX_TORCHIC_DOLL,
+ MAP_OBJ_GFX_MUDKIP_DOLL,
+ MAP_OBJ_GFX_DUSKULL_DOLL,
+ MAP_OBJ_GFX_WYNAUT_DOLL,
+ MAP_OBJ_GFX_BALTOY_DOLL,
+ MAP_OBJ_GFX_KECLEON_DOLL,
+ MAP_OBJ_GFX_AZURILL_DOLL,
+ MAP_OBJ_GFX_SKITTY_DOLL,
+ MAP_OBJ_GFX_SWABLU_DOLL,
+ MAP_OBJ_GFX_GULPIN_DOLL,
+ MAP_OBJ_GFX_LOTAD_DOLL,
+ MAP_OBJ_GFX_SEEDOT_DOLL,
+ MAP_OBJ_GFX_PIKA_CUSHION,
+ MAP_OBJ_GFX_ROUND_CUSHION,
+ MAP_OBJ_GFX_KISS_CUSHION,
+ MAP_OBJ_GFX_ZIGZAG_CUSHION,
+ MAP_OBJ_GFX_SPIN_CUSHION,
+ MAP_OBJ_GFX_DIAMOND_CUSHION,
+ MAP_OBJ_GFX_BALL_CUSHION,
+ MAP_OBJ_GFX_GRASS_CUSHION,
+ MAP_OBJ_GFX_FIRE_CUSHION,
+ MAP_OBJ_GFX_WATER_CUSHION,
+ MAP_OBJ_GFX_BIG_SNORLAX_DOLL,
+ MAP_OBJ_GFX_BIG_RHYDON_DOLL,
+ MAP_OBJ_GFX_BIG_LAPRAS_DOLL,
+ MAP_OBJ_GFX_BIG_VENUSAUR_DOLL,
+ MAP_OBJ_GFX_BIG_CHARIZARD_DOLL,
+ MAP_OBJ_GFX_BIG_BLASTOISE_DOLL,
+ MAP_OBJ_GFX_BIG_WAILMER_DOLL,
+ MAP_OBJ_GFX_BIG_REGIROCK_DOLL,
+ MAP_OBJ_GFX_BIG_REGICE_DOLL,
+ MAP_OBJ_GFX_BIG_REGISTEEL_DOLL,
+ MAP_OBJ_GFX_LATIAS,
+ MAP_OBJ_GFX_LATIOS,
+ MAP_OBJ_GFX_BOY_5,
+ MAP_OBJ_GFX_CONTEST_JUDGE,
+ MAP_OBJ_GFX_BRENDAN_WATERING,
+ MAP_OBJ_GFX_MAY_WATERING,
+ MAP_OBJ_GFX_BRENDAN_DECORATING,
+ MAP_OBJ_GFX_MAY_DECORATING,
+ MAP_OBJ_GFX_ARCHIE,
+ MAP_OBJ_GFX_MAXIE,
+ MAP_OBJ_GFX_KYOGRE_1,
+ MAP_OBJ_GFX_GROUDON_1,
+ MAP_OBJ_GFX_FOSSIL,
+ MAP_OBJ_GFX_REGIROCK,
+ MAP_OBJ_GFX_REGICE,
+ MAP_OBJ_GFX_REGISTEEL,
+ MAP_OBJ_GFX_SKITTY,
+ MAP_OBJ_GFX_KECLEON_1,
+ MAP_OBJ_GFX_KYOGRE_2,
+ MAP_OBJ_GFX_GROUDON_2,
+ MAP_OBJ_GFX_RAYQUAZA,
+ MAP_OBJ_GFX_ZIGZAGOON,
+ MAP_OBJ_GFX_PIKACHU,
+ MAP_OBJ_GFX_AZUMARILL,
+ MAP_OBJ_GFX_WINGULL,
+ MAP_OBJ_GFX_KECLEON_2,
+ MAP_OBJ_GFX_TUBER_M_SWIMMING,
+ MAP_OBJ_GFX_AZURILL,
+ MAP_OBJ_GFX_MOM,
+ MAP_OBJ_GFX_LINK_BRENDAN,
+ MAP_OBJ_GFX_LINK_MAY,
+};
+
+#endif // GUARD_MAP_OBJECT_CONSTANTS_H \ No newline at end of file
diff --git a/ld_script.txt b/ld_script.txt
index c0041488c..c133233ff 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -313,6 +313,7 @@ SECTIONS {
src/fieldmap.o(.rodata);
data/metatile_behavior.o(.rodata);
data/field_door.o(.rodata);
+ src/field_player_avatar.o(.rodata);
data/field_player_avatar.o(.rodata);
data/field_map_obj.o(.rodata);
src/field_ground_effect.o(.rodata);
diff --git a/src/bike.c b/src/bike.c
index ce175bc66..bd4c2e411 100644
--- a/src/bike.c
+++ b/src/bike.c
@@ -29,52 +29,52 @@ extern u8 gUnknown_0202E86C[];
extern u8 gUnknown_0202E874[];
static void MovePlayerOnMachBike(u8, u16, u16);
-static u8 CheckMovementInputMachBike(u8 *);
-static void sub_80E5168(u8);
-static void sub_80E517C(u8);
-static void sub_80E51C4(u8);
-static void sub_80E5270(u8);
+static u8 GetMachBikeTransition(u8 *);
+static void MachBikeTransition_FaceDirection(u8);
+static void MachBikeTransition_80E517C(u8);
+static void MachBikeTransition_80E51C4(u8);
+static void MachBikeTransition_80E5270(u8);
static void MovePlayerOnAcroBike(u8, u16, u16);
static u8 CheckMovementInputAcroBike(u8 *, u16, u16);
-static u8 CheckMovementInputAcroBikeNormal(u8 *, u16, u16);
-static u8 CheckMovementInputAcroBikeChangingDirection(u8 *, u16, u16);
-static u8 CheckMovementInputAcroBikeStandingWheelie(u8 *, u16, u16);
-static u8 CheckMovementInputAcroBikeBunnyHop(u8 *, u16, u16);
-static u8 CheckMovementInputAcroBikeMovingWheelie(u8 *, u16, u16);
-static u8 CheckMovementInputAcroBikeUnknownMode5(u8 *, u16, u16);
-static u8 CheckMovementInputAcroBikeUnknownMode6(u8 *, u16, u16);
-static void sub_80E56F8(u8);
-static void sub_80E5708(u8);
-static void sub_80E5744(u8);
-static void sub_80E57BC(u8);
-static void sub_80E57F8(u8);
-static void sub_80E5834(u8);
-static void sub_80E5870(u8);
-static void sub_80E58AC(u8);
-static void sub_80E5920(u8);
-static void sub_80E5990(u8);
-static void sub_80E59A0(u8);
-static void sub_80E5A30(u8);
-static void sub_80E5AC0(u8);
+static u8 AcroBikeHandleInputNormal(u8 *, u16, u16);
+static u8 AcroBikeHandleInputTurning(u8 *, u16, u16);
+static u8 AcroBikeHandleInputWheelieStanding(u8 *, u16, u16);
+static u8 AcroBikeHandleInputBunnyHop(u8 *, u16, u16);
+static u8 AcroBikeHandleInputWheelieMoving(u8 *, u16, u16);
+static u8 AcroBikeHandleInputState5(u8 *, u16, u16);
+static u8 AcroBikeHandleInputState6(u8 *, u16, u16);
+static void AcroBikeTransition_FaceDirection(u8);
+static void AcroBikeTransition_80E5708(u8);
+static void AcroBikeTransition_80E5744(u8);
+static void AcroBikeTransition_NormalToWheelie(u8);
+static void AcroBikeTransition_80E57F8(u8);
+static void AcroBikeTransition_80E5834(u8);
+static void AcroBikeTransition_80E5870(u8);
+static void AcroBikeTransition_80E58AC(u8);
+static void AcroBikeTransition_80E5920(u8);
+static void AcroBikeTransition_80E5990(u8);
+static void AcroBikeTransition_80E59A0(u8);
+static void AcroBikeTransition_80E5A30(u8);
+static void AcroBikeTransition_80E5AC0(u8);
static void sub_80E5B60(u16, u16);
static u8 sub_80E5C2C(void);
static void sub_80E5C7C(u8);
static void sub_80E5CB8(u8);
static u8 sub_80E5CF4(u16);
-static u8 sub_80E5D34(u8);
+static u8 get_some_collision(u8);
static u8 sub_80E5DA0(struct MapObject *, s16, s16, u8, u8);
static bool8 IsRunningDisallowedByMetatile(u8);
static void sub_80E5E4C();
-static u8 sub_80E5E70(u8, u8);
+static u8 CanBikeFaceDirOnMetatile(u8, u8);
static bool8 sub_80E5EC0(u8, u8);
static void sub_80E6024(void);
-static void (*const gUnknown_083DB594[])(u8) =
+static void (*const sMachBikeTransitions[])(u8) =
{
- sub_80E5168,
- sub_80E517C,
- sub_80E51C4,
- sub_80E5270,
+ MachBikeTransition_FaceDirection,
+ MachBikeTransition_80E517C,
+ MachBikeTransition_80E51C4,
+ MachBikeTransition_80E5270,
};
static void (*const gUnknown_083DB5A4[])(u8) =
@@ -84,32 +84,52 @@ static void (*const gUnknown_083DB5A4[])(u8) =
sub_80593F4,
};
-static void (*const gUnknown_083DB5B0[])(u8) =
-{
- sub_80E56F8,
- sub_80E5708,
- sub_80E5744,
- sub_80E57BC,
- sub_80E57F8,
- sub_80E5834,
- sub_80E5870,
- sub_80E58AC,
- sub_80E5920,
- sub_80E5990,
- sub_80E59A0,
- sub_80E5A30,
- sub_80E5AC0,
+//Acro bike states
+enum
+{
+ ACRO_STATE_NORMAL,
+ ACRO_STATE_TURNING,
+ ACRO_STATE_WHEELIE_STANDING,
+ ACRO_STATE_BUNNY_HOP,
+ ACRO_STATE_WHEELIE_MOVING,
+ ACRO_STATE_5,
+ ACRO_STATE_6,
};
-static u8 (*const gUnknown_083DB5E4[])(u8 *, u16, u16) =
+//Acro bike transitions
+enum
{
- CheckMovementInputAcroBikeNormal,
- CheckMovementInputAcroBikeChangingDirection,
- CheckMovementInputAcroBikeStandingWheelie,
- CheckMovementInputAcroBikeBunnyHop,
- CheckMovementInputAcroBikeMovingWheelie,
- CheckMovementInputAcroBikeUnknownMode5,
- CheckMovementInputAcroBikeUnknownMode6,
+ ACRO_TRANS_FACE_DIRECTION,
+ ACRO_TRANS_NORMAL_TO_WHEELIE = 3,
+ ACRO_TRANS_WHEELIE_TO_NORMAL,
+};
+
+static void (*const sAcroBikeTransitions[])(u8) =
+{
+ AcroBikeTransition_FaceDirection,
+ AcroBikeTransition_80E5708,
+ AcroBikeTransition_80E5744,
+ AcroBikeTransition_NormalToWheelie,
+ AcroBikeTransition_80E57F8,
+ AcroBikeTransition_80E5834,
+ AcroBikeTransition_80E5870,
+ AcroBikeTransition_80E58AC,
+ AcroBikeTransition_80E5920,
+ AcroBikeTransition_80E5990,
+ AcroBikeTransition_80E59A0,
+ AcroBikeTransition_80E5A30,
+ AcroBikeTransition_80E5AC0,
+};
+
+static u8 (*const sAcroBikeInputHandlers[])(u8 *, u16, u16) =
+{
+ AcroBikeHandleInputNormal,
+ AcroBikeHandleInputTurning,
+ AcroBikeHandleInputWheelieStanding,
+ AcroBikeHandleInputBunnyHop,
+ AcroBikeHandleInputWheelieMoving,
+ AcroBikeHandleInputState5,
+ AcroBikeHandleInputState6,
};
const u16 gUnknown_083DB600[] = {1, 2, 4};
@@ -123,20 +143,20 @@ static const struct UnknownStruct1 gUnknown_083DB608[] =
{4, 2, 15, 15, Unknown_3DB606, Unknown_3DB606, 4},
};
-void MovePlayerOnBike(u8 var1, u16 var2, u16 var3)
+void MovePlayerOnBike(u8 direction, u16 newKeys, u16 heldKeys)
{
if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MACH_BIKE)
- MovePlayerOnMachBike(var1, var2, var3);
+ MovePlayerOnMachBike(direction, newKeys, heldKeys);
else
- MovePlayerOnAcroBike(var1, var2, var3);
+ MovePlayerOnAcroBike(direction, newKeys, heldKeys);
}
-static void MovePlayerOnMachBike(u8 var1, u16 var2, u16 var3)
+static void MovePlayerOnMachBike(u8 direction, u16 newKeys, u16 heldKeys)
{
- gUnknown_083DB594[CheckMovementInputMachBike(&var1)](var1); // var2 and var3 arent used?
+ sMachBikeTransitions[GetMachBikeTransition(&direction)](direction);
}
-static u8 CheckMovementInputMachBike(u8 *ptr)
+static u8 GetMachBikeTransition(u8 *ptr)
{
u8 direction = player_get_direction_upper_nybble();
@@ -170,176 +190,180 @@ static u8 CheckMovementInputMachBike(u8 *ptr)
}
}
-static void sub_80E5168(u8 var)
+static void MachBikeTransition_FaceDirection(u8 direction)
{
- PlayerFaceDirection(var);
+ PlayerFaceDirection(direction);
sub_80E6024();
}
-static void sub_80E517C(u8 var)
+static void MachBikeTransition_80E517C(u8 direction)
{
- struct MapObject *mapPtr = &gMapObjects[gPlayerAvatar.mapObjectId];
+ struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
- if (sub_80E5E70(var, mapPtr->mapobj_unk_1E))
+ if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E))
{
- PlayerTurnInPlace(var);
+ PlayerTurnInPlace(direction);
sub_80E6024();
}
else
{
- sub_80E5168(mapPtr->mapobj_unk_18);
+ MachBikeTransition_FaceDirection(playerMapObj->mapobj_unk_18);
}
}
-static void sub_80E51C4(u8 var)
+static void MachBikeTransition_80E51C4(u8 direction)
{
- struct MapObject *mapPtr = &gMapObjects[gPlayerAvatar.mapObjectId];
- u8 funcVar;
+ struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
+ u8 collision;
- if (sub_80E5E70(var, mapPtr->mapobj_unk_1E) == 0)
+ if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0)
{
if (gPlayerAvatar.unkB)
- sub_80E5270(mapPtr->placeholder18);
+ MachBikeTransition_80E5270(playerMapObj->placeholder18);
else
- sub_80E5168(mapPtr->placeholder18);
+ MachBikeTransition_FaceDirection(playerMapObj->placeholder18);
}
else
{
- funcVar = sub_80E5D34(var);
- if (funcVar > 0 && funcVar < 12)
+ collision = get_some_collision(direction);
+ if (collision > 0 && collision < 12)
{
- if (funcVar == 6)
+ if (collision == COLLISION_LEDGE_JUMP)
{
- PlayerJumpLedge(var);
+ PlayerJumpLedge(direction);
}
else
{
sub_80E6024();
- if (funcVar < 5 || funcVar > 8)
- PlayerOnBikeCollide(var);
+ if (collision < 5 || collision > 8)
+ PlayerOnBikeCollide(direction);
}
}
else
{
- gUnknown_083DB5A4[gPlayerAvatar.unkA](var);
- gPlayerAvatar.unkB = gPlayerAvatar.unkA + (gPlayerAvatar.unkA >> 1); // same as dividing by 2, but compiler is insistent on >> 1
- if (gPlayerAvatar.unkA < 2)
- gPlayerAvatar.unkA++;
+ gUnknown_083DB5A4[gPlayerAvatar.bikeFrameCounter](direction);
+ gPlayerAvatar.unkB = gPlayerAvatar.bikeFrameCounter + (gPlayerAvatar.bikeFrameCounter >> 1); // same as dividing by 2, but compiler is insistent on >> 1
+ if (gPlayerAvatar.bikeFrameCounter < 2)
+ gPlayerAvatar.bikeFrameCounter++;
}
}
}
-static void sub_80E5270(u8 var)
+static void MachBikeTransition_80E5270(u8 var)
{
- u8 funcVar;
+ u8 collision;
if (gPlayerAvatar.unkB != 0)
- gPlayerAvatar.unkA = --gPlayerAvatar.unkB;
+ gPlayerAvatar.bikeFrameCounter = --gPlayerAvatar.unkB;
- funcVar = sub_80E5D34(var);
+ collision = get_some_collision(var);
- if (funcVar > 0 && funcVar < 12)
+ if (collision > 0 && collision < 12)
{
- if (funcVar == 6)
+ if (collision == COLLISION_LEDGE_JUMP)
{
PlayerJumpLedge(var);
}
else
{
sub_80E6024();
- if (funcVar < 5 || funcVar > 8)
+ if (collision < 5 || collision > 8)
PlayerOnBikeCollide(var);
}
}
else
{
- gUnknown_083DB5A4[gPlayerAvatar.unkA](var);
+ gUnknown_083DB5A4[gPlayerAvatar.bikeFrameCounter](var);
}
}
-static void MovePlayerOnAcroBike(u8 var1, u16 var2, u16 var3)
+static void MovePlayerOnAcroBike(u8 newDirection, u16 newKeys, u16 heldKeys)
{
- gUnknown_083DB5B0[CheckMovementInputAcroBike(&var1, var2, var3)](var1);
+ sAcroBikeTransitions[CheckMovementInputAcroBike(&newDirection, newKeys, heldKeys)](newDirection);
}
-static u8 CheckMovementInputAcroBike(u8 *ptr, u16 var1, u16 var2)
+static u8 CheckMovementInputAcroBike(u8 *newDirection, u16 newKeys, u16 heldKeys)
{
- return gUnknown_083DB5E4[gPlayerAvatar.unk8](ptr, var1, var2);
+ return sAcroBikeInputHandlers[gPlayerAvatar.acroBikeState](newDirection, newKeys, heldKeys);
}
-static u8 CheckMovementInputAcroBikeNormal(u8 *ptr, u16 var1, u16 var2)
+static u8 AcroBikeHandleInputNormal(u8 *newDirection, u16 newKeys, u16 heldKeys)
{
u8 direction = player_get_direction_upper_nybble();
- gPlayerAvatar.unkA = 0;
- if (*ptr == 0)
+ gPlayerAvatar.bikeFrameCounter = 0;
+ if (*newDirection == DIR_NONE)
{
- if (var1 & 2)
+ if (newKeys & B_BUTTON)
{
- *ptr = direction;
+ //We're standing still with the B button held.
+ //Do a wheelie.
+ *newDirection = direction;
gPlayerAvatar.running2 = 0;
- gPlayerAvatar.unk8 = 2;
- return 3;
+ gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING;
+ return ACRO_TRANS_NORMAL_TO_WHEELIE;
}
else
{
- *ptr = direction;
+ *newDirection = direction;
gPlayerAvatar.running2 = 0;
- return 0;
+ return ACRO_TRANS_FACE_DIRECTION;
}
}
- if (*ptr == direction && (var2 & 2) && gPlayerAvatar.unkB == 0)
+ if (*newDirection == direction && (heldKeys & B_BUTTON) && gPlayerAvatar.unkB == 0)
{
gPlayerAvatar.unkB++;
- gPlayerAvatar.unk8 = 4;
+ gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_MOVING;
return 11;
}
- if (*ptr != direction && gPlayerAvatar.running2 != 2)
+ if (*newDirection != direction && gPlayerAvatar.running2 != 2)
{
- gPlayerAvatar.unk8 = 1;
- gPlayerAvatar.unk9 = *ptr;
+ gPlayerAvatar.acroBikeState = ACRO_STATE_TURNING;
+ gPlayerAvatar.unk9 = *newDirection;
gPlayerAvatar.running2 = 0;
- return CheckMovementInputAcroBike(ptr, var1, var2);
+ return CheckMovementInputAcroBike(newDirection, newKeys, heldKeys);
}
gPlayerAvatar.running2 = 2;
return 2;
}
-static u8 CheckMovementInputAcroBikeChangingDirection(u8 *ptr, u16 unused1, u16 unused2)
+static u8 AcroBikeHandleInputTurning(u8 *newDirection, u16 newKeys, u16 heldKeys)
{
u8 direction;
- *ptr = gPlayerAvatar.unk9;
- gPlayerAvatar.unkA++;
- if (gPlayerAvatar.unkA > 6)
+ *newDirection = gPlayerAvatar.unk9;
+ gPlayerAvatar.bikeFrameCounter++;
+
+ //Wait 6 frames before actually changing direction
+ if (gPlayerAvatar.bikeFrameCounter > 6)
{
gPlayerAvatar.running2 = 1;
- gPlayerAvatar.unk8 = 0;
+ gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL;
sub_80E6024();
return 1;
}
direction = player_get_direction_upper_nybble();
- if (*ptr == sub_80E5C2C())
+ if (*newDirection == sub_80E5C2C())
{
sub_80E6024();
gPlayerAvatar.unkB = 1;
- if (*ptr == GetOppositeDirection(direction))
+ if (*newDirection == GetOppositeDirection(direction))
{
- gPlayerAvatar.unk8 = 6;
+ gPlayerAvatar.acroBikeState = ACRO_STATE_6;
return 9;
}
else
{
gPlayerAvatar.running2 = 2;
- gPlayerAvatar.unk8 = 5;
+ gPlayerAvatar.acroBikeState = ACRO_STATE_5;
return 8;
}
}
- *ptr = direction;
+ *newDirection = direction;
return 0;
}
-static u8 CheckMovementInputAcroBikeStandingWheelie(u8 *ptr, u16 unused1, u16 c)
+static u8 AcroBikeHandleInputWheelieStanding(u8 *ptr, u16 newKeys, u16 heldKeys)
{
u8 direction;
struct MapObject *playerMapObj;
@@ -347,32 +371,33 @@ static u8 CheckMovementInputAcroBikeStandingWheelie(u8 *ptr, u16 unused1, u16 c)
direction = player_get_direction_upper_nybble();
playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
gPlayerAvatar.running2 = 0;
- if (c & 2)
- {
- gPlayerAvatar.unkA++;
- }
+
+ if (heldKeys & B_BUTTON)
+ gPlayerAvatar.bikeFrameCounter++;
else
{
- gPlayerAvatar.unkA = 0;
+ //B button was released.
+ gPlayerAvatar.bikeFrameCounter = 0;
if (!MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E))
{
+ //Go back to normal on flat ground
*ptr = direction;
- gPlayerAvatar.unk8 = 0;
+ gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL;
sub_80E6024();
return 4;
}
}
- if (gPlayerAvatar.unkA > 0x27)
+ if (gPlayerAvatar.bikeFrameCounter >= 40)
{
*ptr = direction;
- gPlayerAvatar.unk8 = 3;
+ gPlayerAvatar.acroBikeState = ACRO_STATE_BUNNY_HOP;
sub_80E6024();
return 6;
}
if (*ptr == direction)
{
gPlayerAvatar.running2 = 2;
- gPlayerAvatar.unk8 = 4;
+ gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_MOVING;
sub_80E6024();
return 10;
}
@@ -385,27 +410,36 @@ static u8 CheckMovementInputAcroBikeStandingWheelie(u8 *ptr, u16 unused1, u16 c)
return 5;
}
-static u8 CheckMovementInputAcroBikeBunnyHop(u8 *ptr, u16 b, u16 c)
+static u8 AcroBikeHandleInputBunnyHop(u8 *ptr, u16 newKeys, u16 heldKeys)
{
u8 direction;
struct MapObject *playerMapObj;
direction = player_get_direction_upper_nybble();
playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
- if (!(c & 2))
+ if (!(heldKeys & B_BUTTON))
{
+ //B button was released
sub_80E6024();
if (MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E))
{
- gPlayerAvatar.unk8 = 2;
- return CheckMovementInputAcroBike(ptr, b, c);
+ //Do a standing wheelie on a bumpy slope
+ gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING;
+ return CheckMovementInputAcroBike(ptr, newKeys, heldKeys);
+ }
+ else
+ {
+ //Go back to normal on flat ground
+ *ptr = direction;
+ gPlayerAvatar.running2 = 0;
+ gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL;
+ return 4;
}
- *ptr = direction;
- gPlayerAvatar.running2 = 0;
- gPlayerAvatar.unk8 = 0;
- return 4;
}
- if (*ptr == 0)
+
+ //B Button is still held
+
+ if (*ptr == DIR_NONE)
{
*ptr = direction;
gPlayerAvatar.running2 = 0;
@@ -420,19 +454,19 @@ static u8 CheckMovementInputAcroBikeBunnyHop(u8 *ptr, u16 b, u16 c)
return 7;
}
-static u8 CheckMovementInputAcroBikeMovingWheelie(u8 *ptr, u16 b, u16 c)
+static u8 AcroBikeHandleInputWheelieMoving(u8 *ptr, u16 newKeys, u16 heldKeys)
{
u8 direction;
struct MapObject *playerMapObj;
direction = player_get_direction_lower_nybble();
playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
- if (!(c & 2))
+ if (!(heldKeys & B_BUTTON))
{
sub_80E6024();
if (!MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E))
{
- gPlayerAvatar.unk8 = 0;
+ gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL;
if (*ptr == 0)
{
*ptr = direction;
@@ -447,13 +481,13 @@ static u8 CheckMovementInputAcroBikeMovingWheelie(u8 *ptr, u16 b, u16 c)
gPlayerAvatar.running2 = 2;
return 12;
}
- gPlayerAvatar.unk8 = 2;
- return CheckMovementInputAcroBike(ptr, b, c);
+ gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING;
+ return CheckMovementInputAcroBike(ptr, newKeys, heldKeys);
}
if (*ptr == 0)
{
*ptr = direction;
- gPlayerAvatar.unk8 = 2;
+ gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING;
gPlayerAvatar.running2 = 0;
sub_80E6024();
return 5;
@@ -467,52 +501,52 @@ static u8 CheckMovementInputAcroBikeMovingWheelie(u8 *ptr, u16 b, u16 c)
return 10;
}
-static u8 CheckMovementInputAcroBikeUnknownMode5(u8 *ptr, u16 b, u16 c)
+static u8 AcroBikeHandleInputState5(u8 *ptr, u16 newKeys, u16 heldKeys)
{
struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
playerMapObj->mapobj_bit_9 = 0;
FieldObjectSetDirection(playerMapObj, playerMapObj->mapobj_unk_18);
- gPlayerAvatar.unk8 = 0;
- return CheckMovementInputAcroBike(ptr, b, c);
+ gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL;
+ return CheckMovementInputAcroBike(ptr, newKeys, heldKeys);
}
-static u8 CheckMovementInputAcroBikeUnknownMode6(u8 *ptr, u16 b, u16 c)
+static u8 AcroBikeHandleInputState6(u8 *ptr, u16 newKeys, u16 heldKeys)
{
- gPlayerAvatar.unk8 = 0;
- return CheckMovementInputAcroBike(ptr, b, c);
+ gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL;
+ return CheckMovementInputAcroBike(ptr, newKeys, heldKeys);
}
-static void sub_80E56F8(u8 direction)
+static void AcroBikeTransition_FaceDirection(u8 direction)
{
PlayerFaceDirection(direction);
}
-static void sub_80E5708(u8 direction)
+static void AcroBikeTransition_80E5708(u8 direction)
{
struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
- if (sub_80E5E70(direction, playerMapObj->mapobj_unk_1E) == 0)
+ if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0)
direction = playerMapObj->placeholder18;
PlayerFaceDirection(direction);
}
-static void sub_80E5744(u8 direction)
+static void AcroBikeTransition_80E5744(u8 direction)
{
- u8 var;
+ u8 collision;
struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
- if (sub_80E5E70(direction, playerMapObj->mapobj_unk_1E) == 0)
+ if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0)
{
- sub_80E56F8(playerMapObj->placeholder18);
+ AcroBikeTransition_FaceDirection(playerMapObj->placeholder18);
return;
}
- var = sub_80E5D34(direction);
- if (var > 0 && var < 12)
+ collision = get_some_collision(direction);
+ if (collision > 0 && collision < 12)
{
- if (var == 6)
+ if (collision == COLLISION_LEDGE_JUMP)
PlayerJumpLedge(direction);
- else if (var < 5 || var > 8)
+ else if (collision < 5 || collision > 8)
PlayerOnBikeCollide(direction);
}
else
@@ -521,53 +555,53 @@ static void sub_80E5744(u8 direction)
}
}
-static void sub_80E57BC(u8 direction)
+static void AcroBikeTransition_NormalToWheelie(u8 direction)
{
struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
- if (sub_80E5E70(direction, playerMapObj->mapobj_unk_1E) == 0)
+ if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0)
direction = playerMapObj->placeholder18;
- sub_805951C(direction);
+ PlayerStartWheelie(direction);
}
-static void sub_80E57F8(u8 direction)
+static void AcroBikeTransition_80E57F8(u8 direction)
{
struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
- if (sub_80E5E70(direction, playerMapObj->mapobj_unk_1E) == 0)
+ if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0)
direction = playerMapObj->placeholder18;
sub_8059534(direction);
}
-static void sub_80E5834(u8 direction)
+static void AcroBikeTransition_80E5834(u8 direction)
{
struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
- if (sub_80E5E70(direction, playerMapObj->mapobj_unk_1E) == 0)
+ if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0)
direction = playerMapObj->placeholder18;
sub_8059504(direction);
}
-static void sub_80E5870(u8 direction)
+static void AcroBikeTransition_80E5870(u8 direction)
{
struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
- if (sub_80E5E70(direction, playerMapObj->mapobj_unk_1E) == 0)
+ if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0)
direction = playerMapObj->placeholder18;
sub_805954C(direction);
}
-static void sub_80E58AC(u8 direction)
+static void AcroBikeTransition_80E58AC(u8 direction)
{
u8 var;
struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
- if (sub_80E5E70(direction, playerMapObj->mapobj_unk_1E) == 0)
+ if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0)
{
- sub_80E5870(playerMapObj->placeholder18);
+ AcroBikeTransition_80E5870(playerMapObj->placeholder18);
return;
}
- var = sub_80E5D34(direction);
+ var = get_some_collision(direction);
//TODO: Try to get rid of this goto
if (var == 0 || var == 9)
{
@@ -581,7 +615,7 @@ static void sub_80E58AC(u8 direction)
{
if (var <= 11)
{
- sub_80E5870(direction);
+ AcroBikeTransition_80E5870(direction);
}
else
{
@@ -591,49 +625,49 @@ static void sub_80E58AC(u8 direction)
}
}
-static void sub_80E5920(u8 direction)
+static void AcroBikeTransition_80E5920(u8 direction)
{
u8 var;
struct MapObject *playerMapObj;
- var = sub_80E5D34(direction);
+ var = get_some_collision(direction);
if (var != 0)
{
if (var == 7)
return;
if (var < 10)
{
- sub_80E5708(direction);
+ AcroBikeTransition_80E5708(direction);
return;
}
if (sub_80E5EC0(var, direction) == 0)
{
- sub_80E5708(direction);
+ AcroBikeTransition_80E5708(direction);
return;
}
}
playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
PlaySE(SE_JITE_PYOKO);
playerMapObj->mapobj_bit_9 = 1;
- player_npc_set_state_and_x22_etc(sub_80608A4(direction), 2);
+ PlayerSetAnimId(sub_80608A4(direction), 2);
}
-static void sub_80E5990(u8 direction)
+static void AcroBikeTransition_80E5990(u8 direction)
{
sub_80595B8(direction);
}
-static void sub_80E59A0(u8 direction)
+static void AcroBikeTransition_80E59A0(u8 direction)
{
u8 var;
struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
- if (sub_80E5E70(direction, playerMapObj->mapobj_unk_1E) == 0)
+ if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0)
{
sub_8059504(playerMapObj->placeholder18);
return;
}
- var = sub_80E5D34(direction);
+ var = get_some_collision(direction);
if (var > 0 && var < 12)
{
if (var == 6)
@@ -657,17 +691,17 @@ static void sub_80E59A0(u8 direction)
gPlayerAvatar.running2 = 2;
}
-static void sub_80E5A30(u8 direction)
+static void AcroBikeTransition_80E5A30(u8 direction)
{
u8 var;
struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
- if (sub_80E5E70(direction, playerMapObj->mapobj_unk_1E) == 0)
+ if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0)
{
- sub_805951C(playerMapObj->placeholder18);
+ PlayerStartWheelie(playerMapObj->placeholder18);
return;
}
- var = sub_80E5D34(direction);
+ var = get_some_collision(direction);
if (var > 0 && var < 12)
{
if (var == 6)
@@ -691,17 +725,17 @@ static void sub_80E5A30(u8 direction)
gPlayerAvatar.running2 = 2;
}
-static void sub_80E5AC0(u8 direction)
+static void AcroBikeTransition_80E5AC0(u8 direction)
{
u8 var;
struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
- if (sub_80E5E70(direction, playerMapObj->mapobj_unk_1E) == 0)
+ if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0)
{
sub_8059534(playerMapObj->placeholder18);
return;
}
- var = sub_80E5D34(direction);
+ var = get_some_collision(direction);
if (var > 0 && var < 12)
{
if (var == 6)
@@ -777,8 +811,7 @@ static u8 sub_80E5C2C(void)
r1 &= s->unk8;
r2 &= s->unkC;
- if (r1 == s->unk0 && r2 == s->unk4
- && sub_80E5BC8(s->unk10, s->unk14) != 0)
+ if (r1 == s->unk0 && r2 == s->unk4 && sub_80E5BC8(s->unk10, s->unk14))
return s->unk18;
}
return 0;
@@ -819,7 +852,7 @@ static u8 sub_80E5CF4(u16 a)
return 0;
}
-static u8 sub_80E5D34(u8 direction)
+static u8 get_some_collision(u8 direction)
{
s16 x;
s16 y;
@@ -835,18 +868,18 @@ static u8 sub_80E5D34(u8 direction)
static u8 sub_80E5DA0(struct MapObject *mapObject, s16 x, s16 y, u8 direction, u8 metatitleBehavior)
{
- u8 r4 = CheckForFieldObjectCollision(mapObject, x, y, direction, metatitleBehavior);
+ u8 collision = CheckForFieldObjectCollision(mapObject, x, y, direction, metatitleBehavior);
- if (r4 > 4)
- return r4;
+ if (collision > 4)
+ return collision;
- if (r4 == 0 && IsRunningDisallowedByMetatile(metatitleBehavior))
- r4 = 2;
+ if (collision == 0 && IsRunningDisallowedByMetatile(metatitleBehavior))
+ collision = 2;
- if (r4 != 0)
+ if (collision)
sub_80E5E4C();
- return r4;
+ return collision;
}
bool8 sub_80E5DEC(u8 tile)
@@ -872,27 +905,28 @@ static void sub_80E5E4C(void)
gUnknown_02039251++;
}
-static bool8 sub_80E5E70(u8 var1, u8 var2)
+static bool8 CanBikeFaceDirOnMetatile(u8 direction, u8 tile)
{
- if (var1 > 2 && var1 < 5)
+ if (direction == DIR_EAST || direction == DIR_WEST)
{
- if (MetatileBehavior_IsIsolatedVerticalRail(var2)
- || MetatileBehavior_IsVerticalRail(var2))
+ //Bike cannot face east or west on a vertical rail
+ if (MetatileBehavior_IsIsolatedVerticalRail(tile)
+ || MetatileBehavior_IsVerticalRail(tile))
return FALSE;
}
else
{
- if (MetatileBehavior_IsIsolatedHorizontalRail(var2)
- || MetatileBehavior_IsHorizontalRail(var2))
+ //Bike cannot face north or south on a horizontal rail
+ if (MetatileBehavior_IsIsolatedHorizontalRail(tile)
+ || MetatileBehavior_IsHorizontalRail(tile))
return FALSE;
-
}
return TRUE;
}
-static bool8 sub_80E5EC0(u8 var1, u8 var2)
+static bool8 sub_80E5EC0(u8 var1, u8 direction)
{
- if ((u8)(var2 - 1) < 2)
+ if (direction == DIR_NORTH || direction == DIR_SOUTH)
{
if (var1 == 10 || var1 == 12)
return FALSE;
@@ -914,7 +948,7 @@ bool8 IsBikingDisallowedByPlayer(void)
{
PlayerGetDestCoords(&x, &y);
tileBehavior = MapGridGetMetatileBehaviorAt(x, y);
- if (IsRunningDisallowedByMetatile(tileBehavior) == FALSE)
+ if (!IsRunningDisallowedByMetatile(tileBehavior))
return FALSE;
}
return TRUE;
@@ -946,13 +980,13 @@ void GetOnOffBike(u8 var)
}
}
-void sub_80E5FCC(int var1, int var2)
+void BikeClearState(int var1, int var2)
{
u8 i;
- gPlayerAvatar.unk8 = 0;
+ gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL;
gPlayerAvatar.unk9 = 0;
- gPlayerAvatar.unkA = 0;
+ gPlayerAvatar.bikeFrameCounter = 0;
gPlayerAvatar.unkB = 0;
gPlayerAvatar.unkC = var1;
gPlayerAvatar.unk10 = var2;
@@ -966,13 +1000,13 @@ void sub_80E5FCC(int var1, int var2)
void sub_80E6010(u8 var)
{
- gPlayerAvatar.unkA = var;
- gPlayerAvatar.unkB = gPlayerAvatar.unkA + (gPlayerAvatar.unkA >> 1); // lazy way of multiplying by 1.5.
+ gPlayerAvatar.bikeFrameCounter = var;
+ gPlayerAvatar.unkB = gPlayerAvatar.bikeFrameCounter + (gPlayerAvatar.bikeFrameCounter >> 1); // lazy way of multiplying by 1.5.
}
static void sub_80E6024(void)
{
- gPlayerAvatar.unkA = 0;
+ gPlayerAvatar.bikeFrameCounter = 0;
gPlayerAvatar.unkB = 0;
}
@@ -983,7 +1017,7 @@ s16 sub_80E6034(void)
memcpy(arr, gUnknown_083DB600, sizeof(arr));
if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MACH_BIKE)
- return arr[gPlayerAvatar.unkA];
+ return arr[gPlayerAvatar.bikeFrameCounter];
else if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_ACRO_BIKE)
return 3;
else if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_SURFING | PLAYER_AVATAR_FLAG_DASH))
@@ -1001,9 +1035,9 @@ void sub_80E6084(void)
{
PlayerGetDestCoords(&x, &y);
tileBehavior = MapGridGetMetatileBehaviorAt(x, y);
- if (MetatileBehavior_IsBumpySlope(tileBehavior) != FALSE)
+ if (MetatileBehavior_IsBumpySlope(tileBehavior))
{
- gPlayerAvatar.unk8 = 2;
+ gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING;
sub_8059C94(player_get_direction_upper_nybble());
}
}
diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c
index c68976cf9..6f36ddb0f 100644
--- a/src/field_control_avatar.c
+++ b/src/field_control_avatar.c
@@ -112,66 +112,66 @@ extern void sub_8080F58(void);
extern void sub_80BC038();
extern void DoCoordEventWeather(u8);
-void sub_8067EEC(struct UnkInputStruct *s)
+void FieldClearPlayerInput(struct FieldInput *input)
{
- s->input_field_0_0 = 0;
- s->input_field_0_1 = 0;
- s->input_field_0_2 = 0;
- s->input_field_0_3 = 0;
- s->input_field_0_4 = 0;
- s->input_field_0_5 = 0;
- s->input_field_0_6 = 0;
- s->input_field_0_7 = 0;
- s->input_field_1_0 = 0;
- s->input_field_1_1 = 0;
- s->input_field_1_2 = 0;
- s->input_field_1_3 = 0;
- s->input_field_2 = 0;
+ input->pressedAButton = 0;
+ input->input_field_0_1 = 0;
+ input->pressedStartButton = 0;
+ input->pressedSelectButton = 0;
+ input->input_field_0_4 = 0;
+ input->input_field_0_5 = 0;
+ input->input_field_0_6 = 0;
+ input->pressedBButton = 0;
+ input->input_field_1_0 = 0;
+ input->input_field_1_1 = 0;
+ input->input_field_1_2 = 0;
+ input->input_field_1_3 = 0;
+ input->dpadDirection = 0;
}
-void process_overworld_input(struct UnkInputStruct *pStruct, u16 keys, u16 heldKeys)
+void FieldGetPlayerInput(struct FieldInput *input, u16 newKeys, u16 heldKeys)
{
u8 r6 = gPlayerAvatar.running1;
u8 r9 = gPlayerAvatar.running2;
- bool8 r7 = MetatileBehavior_IsMoveTile(cur_mapdata_block_role_at_player_pos(r9));
+ bool8 forcedMove = MetatileBehavior_IsMoveTile(cur_mapdata_block_role_at_player_pos(r9));
- if ((r6 == 2 && r7 == FALSE) || r6 == 0)
+ if ((r6 == 2 && forcedMove == FALSE) || r6 == 0)
{
if (sub_80E6034() != 4)
{
- if (keys & START_BUTTON)
- pStruct->input_field_0_2 = TRUE;
- if (keys & SELECT_BUTTON)
- pStruct->input_field_0_3 = TRUE;
- if (keys & A_BUTTON)
- pStruct->input_field_0_0 = TRUE;
- if (keys & B_BUTTON)
- pStruct->input_field_0_7 = TRUE;
+ if (newKeys & START_BUTTON)
+ input->pressedStartButton = TRUE;
+ if (newKeys & SELECT_BUTTON)
+ input->pressedSelectButton = TRUE;
+ if (newKeys & A_BUTTON)
+ input->pressedAButton = TRUE;
+ if (newKeys & B_BUTTON)
+ input->pressedBButton = TRUE;
}
if (heldKeys & (DPAD_UP | DPAD_DOWN | DPAD_LEFT | DPAD_RIGHT))
{
- pStruct->input_field_0_4 = TRUE;
- pStruct->input_field_0_5 = TRUE;
+ input->input_field_0_4 = TRUE;
+ input->input_field_0_5 = TRUE;
}
}
- if (r7 == FALSE)
+ if (forcedMove == FALSE)
{
if (r6 == 2 && r9 == 2)
- pStruct->input_field_0_6 = TRUE;
- if (r7 == FALSE && r6 == 2)
- pStruct->input_field_0_1 = TRUE;
+ input->input_field_0_6 = TRUE;
+ if (forcedMove == FALSE && r6 == 2)
+ input->input_field_0_1 = TRUE;
}
if (heldKeys & DPAD_UP)
- pStruct->input_field_2 = 2;
+ input->dpadDirection = DIR_NORTH;
else if (heldKeys & DPAD_DOWN)
- pStruct->input_field_2 = 1;
+ input->dpadDirection = DIR_SOUTH;
else if (heldKeys & DPAD_LEFT)
- pStruct->input_field_2 = 3;
+ input->dpadDirection = DIR_WEST;
else if (heldKeys & DPAD_RIGHT)
- pStruct->input_field_2 = 4;
+ input->dpadDirection = DIR_EAST;
}
-int sub_8068024(struct UnkInputStruct *s)
+int sub_8068024(struct FieldInput *input)
{
struct MapPosition position;
u8 r6;
@@ -184,39 +184,39 @@ int sub_8068024(struct UnkInputStruct *s)
return TRUE;
if (mapheader_run_first_tag2_script_list_match() == 1)
return TRUE;
- if (s->input_field_0_7 && sub_80687A4() == 1)
+ if (input->pressedBButton && sub_80687A4() == 1)
return TRUE;
- if (s->input_field_0_6)
+ if (input->input_field_0_6)
{
IncrementGameStat(5);
if (sub_80687E4(&position, r4, r6) == 1)
return TRUE;
}
- if (s->input_field_0_1 && is_it_battle_time_3(r4) == 1)
+ if (input->input_field_0_1 && is_it_battle_time_3(r4) == 1)
return TRUE;
- if (s->input_field_0_4 && s->input_field_2 == r6)
+ if (input->input_field_0_4 && input->dpadDirection == r6)
{
if (mapheader_run_first_tag2_script_list_match_conditionally(&position, r4, r6) == 1)
return TRUE;
}
player_get_next_pos_and_height(&position);
r4 = MapGridGetMetatileBehaviorAt(position.x, position.y);
- if (s->input_field_0_0 && sub_80681F0(&position, r4, r6) == 1)
+ if (input->pressedAButton && sub_80681F0(&position, r4, r6) == 1)
return TRUE;
- if (s->input_field_0_5 && s->input_field_2 == r6)
+ if (input->input_field_0_5 && input->dpadDirection == r6)
{
if (map_warp_consider_2_to_inside(&position, r4, r6) == 1)
return TRUE;
}
- if (s->input_field_0_0 && sub_8068770() == 1)
+ if (input->pressedAButton && sub_8068770() == 1)
return TRUE;
- if (s->input_field_0_2)
+ if (input->pressedStartButton)
{
PlaySE(SE_WIN_OPEN);
sub_8071310();
return TRUE;
}
- if (s->input_field_0_3 && sub_80A6D1C() == 1)
+ if (input->pressedSelectButton && sub_80A6D1C() == 1)
return TRUE;
return FALSE;
}
diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c
index 79f1b67e9..0a506bbac 100644
--- a/src/field_player_avatar.c
+++ b/src/field_player_avatar.c
@@ -15,6 +15,7 @@
#include "sound.h"
#include "task.h"
#include "wild_encounter.h"
+#include "map_object_constants.h"
extern u8 gOtherText_OhABite[];
extern u8 gOtherText_PokeOnHook[];
@@ -29,29 +30,6 @@ extern struct
u32 unkC;
} gUnknown_0202FF84;
-extern bool8 (*gUnknown_0830FB58[])(u8);
-extern u8 (*gUnknown_0830FBA0[])(void);
-extern void (*gUnknown_0830FBEC[])(u8, u16);
-extern bool8 (*gUnknown_0830FBF8[])(u8);
-extern u8 gUnknown_0830FC0C[];
-extern void (*gUnknown_0830FC14[])(struct MapObject *);
-extern bool8 (*gUnknown_0830FC34[])(u8);
-extern u8 gUnknown_0830FC44[][2];
-extern u8 gUnknown_0830FC54[][2];
-extern u8 gUnknown_0830FC64[2][5][2];
-extern bool8 (*gUnknown_0830FC78[])(u8); //Duplicate of gUnknown_0830FC34
-extern u8 (*gUnknown_0830FC88[])(struct Task *, struct MapObject *, struct MapObject *);
-extern u8 (*gUnknown_0830FC94[])(struct Task *, struct MapObject *);
-extern u8 (*gUnknown_0830FC98[])(struct Task *, struct MapObject *);
-extern u8 gUnknown_0830FCA8[];
-extern u8 gUnknown_0830FCAC[];
-extern u8 (*gUnknown_0830FCB4[])(struct Task *);
-extern s16 gUnknown_0830FCF4[];
-extern s16 gUnknown_0830FCFA[];
-extern u8 gUnknown_0830FD00[];
-extern s16 gUnknown_0830FD02[];
-extern s16 gUnknown_0830FD08[];
-
//Functions
static u32 sub_80587D8(void);
static bool8 sub_8058854(struct MapObject *, u8);
@@ -60,14 +38,41 @@ static void MovePlayerAvatarUsingKeypadInput(u8 a, u16 b, u16 c);
static void PlayerAllowForcedMovementIfMovingSameDirection(void);
static u8 TryDoMetatileBehaviorForcedMovement(void);
static u8 GetForcedMovementByMetatileBehavior(void);
+u8 ForcedMovement_None(void);
+u8 ForcedMovement_Slip(void);
+u8 sub_8058AAC(void);
+u8 sub_8058AC4(void);
+u8 sub_8058ADC(void);
+u8 sub_8058AF4(void);
+u8 sub_8058B0C(void);
+u8 sub_8058B24(void);
+u8 sub_8058B3C(void);
+u8 sub_8058B54(void);
+u8 ForcedMovement_SlideSouth(void);
+u8 ForcedMovement_SlideNorth(void);
+u8 ForcedMovement_SlideWest(void);
+u8 ForcedMovement_SlideEast(void);
+u8 sub_8058C04(void);
+u8 sub_8058C10(void);
+u8 ForcedMovement_MuddySlope(void);
static void MovePlayerNotOnBike(u8 a, u16 b);
static u8 CheckMovementInputNotOnBike(u8 a);
+void PlayerNotOnBikeNotMoving(u8 direction, u16 heldKeys);
+void PlayerNotOnBikeTurningInPlace(u8 direction, u16 heldKeys);
+void sub_8058D0C(u8 direction, u16 heldKeys);
static u8 CheckForPlayerAvatarCollision(u8 a);
static u8 sub_8058EF0(s16 a, s16 b, u8 c);
static bool8 ShouldJumpLedge(s16 a, s16 b, u8 c);
static u8 sub_8058F6C(s16 a, s16 b, u8 c);
static void check_acro_bike_metatile(int unused1, int unused2, u8 c, u8 *d);
static void DoPlayerAvatarTransition(void);
+void nullsub_49(struct MapObject *a);
+void PlayerAvatarTransition_Normal(struct MapObject *a);
+void PlayerAvatarTransition_MachBike(struct MapObject *a);
+void PlayerAvatarTransition_AcroBike(struct MapObject *a);
+void PlayerAvatarTransition_Surfing(struct MapObject *a);
+void PlayerAvatarTransition_Underwater(struct MapObject *a);
+void sub_80591F4(struct MapObject *a);
static bool8 player_is_anim_in_certain_ranges(void);
static bool8 sub_80592A4(void);
static bool8 PlayerIsAnimActive(void);
@@ -76,8 +81,175 @@ static void PlayerNotOnBikeCollide(u8 a);
static void PlayCollisionSoundIfNotFacingWarp(u8 a);
static void sub_8059D60(struct MapObject *a);
static void StartStrengthAnim(u8 a, u8 b);
+u8 sub_8059E84(struct Task *task, struct MapObject *b, struct MapObject *c);
+u8 sub_8059EA4(struct Task *task, struct MapObject *b, struct MapObject *c);
+u8 sub_8059F40(struct Task *task, struct MapObject *b, struct MapObject *c);
static void sub_8059F94(void);
+u8 sub_805A000(struct Task *task, struct MapObject *mapObject);
static void sub_805A06C(void);
+u8 sub_805A0D8(struct Task *task, struct MapObject *mapObject);
+u8 sub_805A100(struct Task *task, struct MapObject *mapObject);
+u8 sub_805A178(struct Task *task, struct MapObject *mapObject);
+u8 sub_805A1B8(struct Task *task, struct MapObject *mapObject);
+u8 Fishing1(struct Task *task);
+u8 Fishing2(struct Task *task);
+u8 Fishing3(struct Task *task);
+u8 Fishing4(struct Task *task);
+u8 Fishing5(struct Task *task);
+u8 Fishing6(struct Task *task);
+u8 Fishing7(struct Task *task);
+u8 Fishing8(struct Task *task);
+u8 Fishing9(struct Task *task);
+u8 Fishing10(struct Task *task);
+u8 Fishing11(struct Task *task);
+u8 Fishing12(struct Task *task);
+u8 Fishing13(struct Task *task);
+u8 Fishing14(struct Task *task);
+u8 Fishing15(struct Task *task);
+u8 Fishing16(struct Task *task);
+
+static bool8 (*const gUnknown_0830FB58[])(u8) =
+{
+ MetatileBehavior_IsTrickHouseSlipperyFloor,
+ MetatileBehavior_IsIce_2,
+ MetatileBehavior_IsWalkSouth,
+ MetatileBehavior_IsWalkNorth,
+ MetatileBehavior_IsWalkWest,
+ MetatileBehavior_IsWalkEast,
+ MetatileBehavior_IsSouthwardCurrent,
+ MetatileBehavior_IsNorthwardCurrent,
+ MetatileBehavior_IsWestwardCurrent,
+ MetatileBehavior_IsEastwardCurrent,
+ MetatileBehavior_IsSlideSouth,
+ MetatileBehavior_IsSlideNorth,
+ MetatileBehavior_IsSlideWest,
+ MetatileBehavior_IsSlideEast,
+ MetatileBehavior_IsWaterfall,
+ MetatileBehavior_0xBB,
+ MetatileBehavior_0xBC,
+ MetatileBehavior_IsMuddySlope,
+};
+static u8 (*const gUnknown_0830FBA0[])(void) =
+{
+ ForcedMovement_None,
+ ForcedMovement_Slip,
+ ForcedMovement_Slip,
+ sub_8058AAC,
+ sub_8058AC4,
+ sub_8058ADC,
+ sub_8058AF4,
+ sub_8058B0C,
+ sub_8058B24,
+ sub_8058B3C,
+ sub_8058B54,
+ ForcedMovement_SlideSouth,
+ ForcedMovement_SlideNorth,
+ ForcedMovement_SlideWest,
+ ForcedMovement_SlideEast,
+ sub_8058B0C,
+ sub_8058C04,
+ sub_8058C10,
+ ForcedMovement_MuddySlope,
+};
+static void (*const gUnknown_0830FBEC[])(u8, u16) =
+{
+ PlayerNotOnBikeNotMoving,
+ PlayerNotOnBikeTurningInPlace,
+ sub_8058D0C,
+};
+static bool8 (*const gUnknown_0830FBF8[])(u8) =
+{
+ MetatileBehavior_IsBumpySlope,
+ MetatileBehavior_IsIsolatedVerticalRail,
+ MetatileBehavior_IsIsolatedHorizontalRail,
+ MetatileBehavior_IsVerticalRail,
+ MetatileBehavior_IsHorizontalRail,
+};
+static const u8 gUnknown_0830FC0C[] = {9, 10, 11, 12, 13};
+static void (*const gUnknown_0830FC14[])(struct MapObject *) =
+{
+ PlayerAvatarTransition_Normal,
+ PlayerAvatarTransition_MachBike,
+ PlayerAvatarTransition_AcroBike,
+ PlayerAvatarTransition_Surfing,
+ PlayerAvatarTransition_Underwater,
+ sub_80591F4,
+ nullsub_49,
+ nullsub_49,
+};
+static bool8 (*const gUnknown_0830FC34[])(u8) =
+{
+ MetatileBehavior_IsSouthArrowWarp,
+ MetatileBehavior_IsNorthArrowWarp,
+ MetatileBehavior_IsWestArrowWarp,
+ MetatileBehavior_IsEastArrowWarp,
+};
+static const u8 sRivalAvatarGfxIds[][2] =
+{
+ {MAP_OBJ_GFX_RIVAL_BRENDAN_NORMAL, MAP_OBJ_GFX_RIVAL_MAY_NORMAL},
+ {MAP_OBJ_GFX_RIVAL_BRENDAN_MACH_BIKE, MAP_OBJ_GFX_RIVAL_MAY_MACH_BIKE},
+ {MAP_OBJ_GFX_RIVAL_BRENDAN_ACRO_BIKE, MAP_OBJ_GFX_RIVAL_MAY_ACRO_BIKE},
+ {MAP_OBJ_GFX_RIVAL_BRENDAN_SURFING, MAP_OBJ_GFX_RIVAL_MAY_SURFING},
+ {MAP_OBJ_GFX_BRENDAN_UNDERWATER, MAP_OBJ_GFX_MAY_UNDERWATER},
+ {MAP_OBJ_GFX_RIVAL_BRENDAN_FIELD_MOVE, MAP_OBJ_GFX_RIVAL_MAY_FIELD_MOVE},
+ {MAP_OBJ_GFX_BRENDAN_FISHING, MAP_OBJ_GFX_MAY_FISHING},
+ {MAP_OBJ_GFX_BRENDAN_WATERING, MAP_OBJ_GFX_MAY_WATERING},
+};
+static const u8 sPlayerAvatarGfxIds[][2] =
+{
+ {MAP_OBJ_GFX_BRENDAN_NORMAL, MAP_OBJ_GFX_MAY_NORMAL},
+ {MAP_OBJ_GFX_BRENDAN_MACH_BIKE, MAP_OBJ_GFX_MAY_MACH_BIKE},
+ {MAP_OBJ_GFX_BRENDAN_ACRO_BIKE, MAP_OBJ_GFX_MAY_ACRO_BIKE},
+ {MAP_OBJ_GFX_BRENDAN_SURFING, MAP_OBJ_GFX_MAY_SURFING},
+ {MAP_OBJ_GFX_BRENDAN_UNDERWATER, MAP_OBJ_GFX_MAY_UNDERWATER},
+ {MAP_OBJ_GFX_BRENDAN_FIELD_MOVE, MAP_OBJ_GFX_MAY_FIELD_MOVE},
+ {MAP_OBJ_GFX_BRENDAN_FISHING, MAP_OBJ_GFX_MAY_FISHING},
+ {MAP_OBJ_GFX_BRENDAN_WATERING, MAP_OBJ_GFX_MAY_WATERING},
+};
+static const u8 gUnknown_0830FC64[2][5][2] =
+{
+ //male
+ {
+ {MAP_OBJ_GFX_BRENDAN_NORMAL, 1},
+ {MAP_OBJ_GFX_BRENDAN_MACH_BIKE, 2},
+ {MAP_OBJ_GFX_BRENDAN_ACRO_BIKE, 4},
+ {MAP_OBJ_GFX_BRENDAN_SURFING, 8},
+ {MAP_OBJ_GFX_BRENDAN_UNDERWATER, 16},
+ },
+ //female
+ {
+ {MAP_OBJ_GFX_MAY_NORMAL, 1},
+ {MAP_OBJ_GFX_MAY_MACH_BIKE, 2},
+ {MAP_OBJ_GFX_MAY_ACRO_BIKE, 4},
+ {MAP_OBJ_GFX_MAY_SURFING, 8},
+ {MAP_OBJ_GFX_MAY_UNDERWATER, 16},
+ }
+};
+static bool8 (*const gUnknown_0830FC78[])(u8) = //Duplicate of gUnknown_0830FC34
+{
+ MetatileBehavior_IsSouthArrowWarp,
+ MetatileBehavior_IsNorthArrowWarp,
+ MetatileBehavior_IsWestArrowWarp,
+ MetatileBehavior_IsEastArrowWarp,
+};
+static u8 (*const gUnknown_0830FC88[])(struct Task *, struct MapObject *, struct MapObject *) =
+{
+ sub_8059E84,
+ sub_8059EA4,
+ sub_8059F40,
+};
+static u8 (*const gUnknown_0830FC94[])(struct Task *, struct MapObject *) =
+{
+ sub_805A000,
+};
+static u8 (*const gUnknown_0830FC98[])(struct Task *, struct MapObject *) =
+{
+ sub_805A0D8,
+ sub_805A100,
+ sub_805A178,
+ sub_805A1B8,
+};
+
void sub_80587B4(struct Sprite *sprite)
{
@@ -89,37 +261,37 @@ static u32 sub_80587D8(void)
return 0;
}
-void player_step(u8 a, u16 b, u16 c)
+void player_step(u8 direction, u16 newKeys, u16 heldKeys)
{
struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
sub_8059D60(playerMapObj);
if (gPlayerAvatar.unk6 == 0)
{
- sub_80E5B38(b, c);
- if (sub_8058854(playerMapObj, a) == 0)
+ sub_80E5B38(newKeys, heldKeys);
+ if (!sub_8058854(playerMapObj, direction))
{
npc_clear_strange_bits(playerMapObj);
DoPlayerAvatarTransition();
if (TryDoMetatileBehaviorForcedMovement() == 0)
{
- MovePlayerAvatarUsingKeypadInput(a, b, c);
+ MovePlayerAvatarUsingKeypadInput(direction, newKeys, heldKeys);
PlayerAllowForcedMovementIfMovingSameDirection();
}
}
}
}
-static bool8 sub_8058854(struct MapObject *a, u8 b)
+static bool8 sub_8058854(struct MapObject *playerMapObj, u8 direction)
{
- if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(a)
- && !FieldObjectClearAnimIfSpecialAnimFinished(a))
+ if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(playerMapObj)
+ && !FieldObjectClearAnimIfSpecialAnimFinished(playerMapObj))
{
- u8 specialAnim = FieldObjectGetSpecialAnim(a);
+ u8 specialAnim = FieldObjectGetSpecialAnim(playerMapObj);
- if (specialAnim > 24 && specialAnim < 29 && b != 0 && a->placeholder18 != b)
+ if (specialAnim > 24 && specialAnim < 29 && direction != DIR_NONE && playerMapObj->placeholder18 != direction)
{
- FieldObjectClearAnim(a);
+ FieldObjectClearAnim(playerMapObj);
return FALSE;
}
else
@@ -138,13 +310,13 @@ static void npc_clear_strange_bits(struct MapObject *a)
gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_DASH;
}
-static void MovePlayerAvatarUsingKeypadInput(u8 a, u16 b, u16 c)
+static void MovePlayerAvatarUsingKeypadInput(u8 direction, u16 newKeys, u16 heldKeys)
{
if ((gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MACH_BIKE)
|| (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_ACRO_BIKE))
- MovePlayerOnBike(a, b, c);
+ MovePlayerOnBike(direction, newKeys, heldKeys);
else
- MovePlayerNotOnBike(a, c);
+ MovePlayerNotOnBike(direction, heldKeys);
}
static void PlayerAllowForcedMovementIfMovingSameDirection(void)
@@ -189,23 +361,23 @@ u8 ForcedMovement_None(void)
return 0;
}
-static u8 DoForcedMovement(u8 a, void (*b)(u8))
+static u8 DoForcedMovement(u8 direction, void (*b)(u8))
{
struct PlayerAvatar *playerAvatar = &gPlayerAvatar;
- u8 r7 = CheckForPlayerAvatarCollision(a);
+ u8 collisionType = CheckForPlayerAvatarCollision(direction);
playerAvatar->flags |= PLAYER_AVATAR_FLAG_6;
- if (r7 != 0)
+ if (collisionType != 0)
{
ForcedMovement_None();
- if (r7 <= 4)
+ if (collisionType <= 4)
{
return 0;
}
else
{
- if (r7 == 6)
- PlayerJumpLedge(a);
+ if (collisionType == COLLISION_LEDGE_JUMP)
+ PlayerJumpLedge(direction);
playerAvatar->flags |= PLAYER_AVATAR_FLAG_6;
playerAvatar->running2 = 2;
return 1;
@@ -214,7 +386,7 @@ static u8 DoForcedMovement(u8 a, void (*b)(u8))
else
{
playerAvatar->running2 = 2;
- b(a);
+ b(direction);
return 1;
}
}
@@ -272,13 +444,13 @@ u8 sub_8058B54(void)
return DoForcedMovement(4, npc_use_some_d2s);
}
-static u8 ForcedMovement_Slide(u8 a, void (*b)(u8))
+static u8 ForcedMovement_Slide(u8 direction, void (*b)(u8))
{
struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
playerMapObj->mapobj_bit_10 = 1;
playerMapObj->mapobj_bit_9 = 1;
- return DoForcedMovement(a, b);
+ return DoForcedMovement(direction, b);
}
u8 ForcedMovement_SlideSouth(void)
@@ -329,19 +501,19 @@ u8 ForcedMovement_MuddySlope(void)
}
}
-static void MovePlayerNotOnBike(u8 a, u16 b)
+static void MovePlayerNotOnBike(u8 direction, u16 heldKeys)
{
- gUnknown_0830FBEC[CheckMovementInputNotOnBike(a)](a, b);
+ gUnknown_0830FBEC[CheckMovementInputNotOnBike(direction)](direction, heldKeys);
}
-static u8 CheckMovementInputNotOnBike(u8 a)
+static u8 CheckMovementInputNotOnBike(u8 direction)
{
- if (a == 0)
+ if (direction == DIR_NONE)
{
gPlayerAvatar.running2 = 0;
return 0;
}
- else if (a != player_get_direction_upper_nybble() && gPlayerAvatar.running2 != 2)
+ else if (direction != player_get_direction_upper_nybble() && gPlayerAvatar.running2 != 2)
{
gPlayerAvatar.running2 = 1;
return 1;
@@ -353,81 +525,81 @@ static u8 CheckMovementInputNotOnBike(u8 a)
}
}
-void PlayerNotOnBikeNotMoving(u8 a, u16 b)
+void PlayerNotOnBikeNotMoving(u8 direction, u16 heldKeys)
{
PlayerFaceDirection(player_get_direction_lower_nybble());
}
-void PlayerNotOnBikeTurningInPlace(u8 a, u16 b)
+void PlayerNotOnBikeTurningInPlace(u8 direction, u16 heldKeys)
{
- PlayerTurnInPlace(a);
+ PlayerTurnInPlace(direction);
}
-void sub_8058D0C(u8 a, u16 b)
+void sub_8058D0C(u8 direction, u16 heldKeys)
{
- u8 r1 = CheckForPlayerAvatarCollision(a);
+ u8 r1 = CheckForPlayerAvatarCollision(direction);
switch (r1)
{
case 6:
- PlayerJumpLedge(a);
+ PlayerJumpLedge(direction);
return;
default:
if (r1 > 8 || r1 < 5)
- PlayerNotOnBikeCollide(a);
+ PlayerNotOnBikeCollide(direction);
return;
case 0:
if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING)
{
- sub_80593C4(a);
+ sub_80593C4(direction);
return;
}
- if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_4) && (b & 2) && FlagGet(SYS_B_DASH)
+ if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_4) && (heldKeys & B_BUTTON) && FlagGet(SYS_B_DASH)
&& sub_80E5DEC(gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1E) == 0)
{
- sub_805940C(a);
+ sub_805940C(direction);
gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_DASH;
}
else
{
- PlayerGoSpeed0(a);
+ PlayerGoSpeed0(direction);
}
}
}
-static u8 CheckForPlayerAvatarCollision(u8 a)
+static u8 CheckForPlayerAvatarCollision(u8 direction)
{
s16 x, y;
struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
x = playerMapObj->coords2.x;
y = playerMapObj->coords2.y;
- MoveCoords(a, &x, &y);
- return CheckForFieldObjectCollision(playerMapObj, x, y, a, MapGridGetMetatileBehaviorAt(x, y));
+ MoveCoords(direction, &x, &y);
+ return CheckForFieldObjectCollision(playerMapObj, x, y, direction, MapGridGetMetatileBehaviorAt(x, y));
}
-u8 CheckForFieldObjectCollision(struct MapObject *a, s16 b, s16 c, u8 d, u8 e)
+u8 CheckForFieldObjectCollision(struct MapObject *a, s16 x, s16 y, u8 direction, u8 e)
{
- u8 sp0;
+ u8 collision;
- sp0 = npc_block_way(a, b, c, d);
- if (sp0 == 3 && sub_8058EF0(b, c, d))
+ collision = npc_block_way(a, x, y, direction);
+ if (collision == 3 && sub_8058EF0(x, y, direction))
return 5;
- if (ShouldJumpLedge(b, c, d))
+ if (ShouldJumpLedge(x, y, direction))
{
IncrementGameStat(0x2B);
- return 6;
+ return COLLISION_LEDGE_JUMP;
}
- if (sp0 == 4 && sub_8058F6C(b, c, d))
+ if (collision == 4 && sub_8058F6C(x, y, direction))
return 7;
- if (sp0 == 0)
+ if (collision == 0)
{
- if (CheckForRotatingGatePuzzleCollision(d, b, c))
+ if (CheckForRotatingGatePuzzleCollision(direction, x, y))
return 8;
- check_acro_bike_metatile(b, c, e, &sp0);
+ check_acro_bike_metatile(x, y, e, &collision);
}
- return sp0;
+ return collision;
}
static u8 sub_8058EF0(s16 a, s16 b, u8 c)
@@ -515,7 +687,7 @@ static void DoPlayerAvatarTransition(void)
#else
if (flags & 1)
{
- register void (**funcs)(struct MapObject *) asm("r0") = gUnknown_0830FC14;
+ register void (*const *funcs)(struct MapObject *) asm("r0") = gUnknown_0830FC14;
funcs[i](&gMapObjects[gPlayerAvatar.mapObjectId]);
}
#endif
@@ -540,7 +712,7 @@ void PlayerAvatarTransition_MachBike(struct MapObject *a)
sub_805B980(a, GetPlayerAvatarGraphicsIdByStateId(1));
FieldObjectTurn(a, a->placeholder18);
SetPlayerAvatarStateMask(2);
- sub_80E5FCC(0, 0);
+ BikeClearState(0, 0);
}
void PlayerAvatarTransition_AcroBike(struct MapObject *a)
@@ -548,7 +720,7 @@ void PlayerAvatarTransition_AcroBike(struct MapObject *a)
sub_805B980(a, GetPlayerAvatarGraphicsIdByStateId(2));
FieldObjectTurn(a, a->placeholder18);
SetPlayerAvatarStateMask(4);
- sub_80E5FCC(0, 0);
+ BikeClearState(0, 0);
sub_80E6084();
}
@@ -632,12 +804,12 @@ static bool8 PlayerCheckIfAnimFinishedOrInactive(void)
static void player_set_x22(u8 a)
{
- gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_22 = a;
+ gMapObjects[gPlayerAvatar.mapObjectId].animId = a;
}
u8 player_get_x22(void)
{
- return gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_22;
+ return gMapObjects[gPlayerAvatar.mapObjectId].animId;
}
static void sub_8059348(u8 a)
@@ -645,66 +817,66 @@ static void sub_8059348(u8 a)
FieldObjectForceSetSpecialAnim(&gMapObjects[gPlayerAvatar.mapObjectId], a);
}
-void player_npc_set_state_and_x22_etc(u8 a, u8 b)
+void PlayerSetAnimId(u8 animId, u8 b)
{
if (!PlayerIsAnimActive())
{
player_set_x22(b);
- FieldObjectSetSpecialAnim(&gMapObjects[gPlayerAvatar.mapObjectId], a);
+ FieldObjectSetSpecialAnim(&gMapObjects[gPlayerAvatar.mapObjectId], animId);
}
}
void PlayerGoSpeed0(u8 a)
{
- player_npc_set_state_and_x22_etc(GetGoSpeed0AnimId(a), 2);
+ PlayerSetAnimId(GetGoSpeed0AnimId(a), 2);
}
void sub_80593C4(u8 a)
{
- player_npc_set_state_and_x22_etc(sub_8060744(a), 2);
+ PlayerSetAnimId(sub_8060744(a), 2);
}
void npc_use_some_d2s(u8 a)
{
- player_npc_set_state_and_x22_etc(d2s_08064034(a), 2);
+ PlayerSetAnimId(d2s_08064034(a), 2);
}
void sub_80593F4(u8 a)
{
- player_npc_set_state_and_x22_etc(sub_806079C(a), 2);
+ PlayerSetAnimId(sub_806079C(a), 2);
}
void sub_805940C(u8 a)
{
- player_npc_set_state_and_x22_etc(sub_80607F4(a), 2);
+ PlayerSetAnimId(sub_80607F4(a), 2);
}
void PlayerOnBikeCollide(u8 a)
{
PlayCollisionSoundIfNotFacingWarp(a);
- player_npc_set_state_and_x22_etc(GetStepInPlaceDelay16AnimId(a), 2);
+ PlayerSetAnimId(GetStepInPlaceDelay16AnimId(a), 2);
}
static void PlayerNotOnBikeCollide(u8 a)
{
PlayCollisionSoundIfNotFacingWarp(a);
- player_npc_set_state_and_x22_etc(GetStepInPlaceDelay32AnimId(a), 2);
+ PlayerSetAnimId(GetStepInPlaceDelay32AnimId(a), 2);
}
-void PlayerFaceDirection(u8 a)
+void PlayerFaceDirection(u8 direction)
{
- player_npc_set_state_and_x22_etc(GetFaceDirectionAnimId(a), 1);
+ PlayerSetAnimId(GetFaceDirectionAnimId(direction), 1);
}
-void PlayerTurnInPlace(u8 a)
+void PlayerTurnInPlace(u8 direction)
{
- player_npc_set_state_and_x22_etc(GetStepInPlaceDelay8AnimId(a), 1);
+ PlayerSetAnimId(GetStepInPlaceDelay8AnimId(direction), 1);
}
-void PlayerJumpLedge(u8 a)
+void PlayerJumpLedge(u8 direction)
{
PlaySE(SE_DANSA);
- player_npc_set_state_and_x22_etc(GetJumpLedgeAnimId(a), 8);
+ PlayerSetAnimId(GetJumpLedgeAnimId(direction), 8);
}
void sub_80594C0(void)
@@ -718,62 +890,63 @@ void sub_80594C0(void)
void sub_8059504(u8 a)
{
- player_npc_set_state_and_x22_etc(sub_80609D8(a), 1);
+ PlayerSetAnimId(sub_80609D8(a), 1);
}
-void sub_805951C(u8 a)
+//normal to wheelie
+void PlayerStartWheelie(u8 a)
{
- player_npc_set_state_and_x22_etc(sub_8060A04(a), 1);
+ PlayerSetAnimId(sub_8060A04(a), 1);
}
void sub_8059534(u8 a)
{
- player_npc_set_state_and_x22_etc(sub_8060A30(a), 1);
+ PlayerSetAnimId(sub_8060A30(a), 1);
}
void sub_805954C(u8 a)
{
PlaySE(SE_JITE_PYOKO);
- player_npc_set_state_and_x22_etc(sub_8060A5C(a), 1);
+ PlayerSetAnimId(sub_8060A5C(a), 1);
}
void sub_8059570(u8 a)
{
PlaySE(SE_JITE_PYOKO);
- player_npc_set_state_and_x22_etc(sub_8060A88(a), 2);
+ PlayerSetAnimId(sub_8060A88(a), 2);
}
void sub_8059594(u8 a)
{
PlaySE(SE_JITE_PYOKO);
- player_npc_set_state_and_x22_etc(sub_8060AB4(a), 8);
+ PlayerSetAnimId(sub_8060AB4(a), 8);
}
-void sub_80595B8(u8 a)
+void sub_80595B8(u8 direction)
{
PlaySE(SE_JITE_PYOKO);
- player_npc_set_state_and_x22_etc(sub_8060878(a), 1);
+ PlayerSetAnimId(sub_8060878(direction), 1);
}
-void sub_80595DC(u8 a)
+void sub_80595DC(u8 direction)
{
PlaySE(SE_WALL_HIT);
- player_npc_set_state_and_x22_etc(sub_8060AE0(a), 2);
+ PlayerSetAnimId(sub_8060AE0(direction), 2);
}
void sub_8059600(u8 a)
{
- player_npc_set_state_and_x22_etc(sub_8060B0C(a), 2);
+ PlayerSetAnimId(sub_8060B0C(a), 2);
}
void sub_8059618(u8 a)
{
- player_npc_set_state_and_x22_etc(sub_8060B38(a), 2);
+ PlayerSetAnimId(sub_8060B38(a), 2);
}
void sub_8059630(u8 a)
{
- player_npc_set_state_and_x22_etc(sub_8060B64(a), 2);
+ PlayerSetAnimId(sub_8060B64(a), 2);
}
static void PlayCollisionSoundIfNotFacingWarp(u8 a)
@@ -862,49 +1035,49 @@ void sub_80597F4(void)
u8 sub_805983C(u8 a, u8 b)
{
- return gUnknown_0830FC44[a][b];
+ return sRivalAvatarGfxIds[a][b];
}
-static u8 GetPlayerAvatarGraphicsIdByStateIdAndGender(u8 a, u8 b)
+static u8 GetPlayerAvatarGraphicsIdByStateIdAndGender(u8 state, u8 gender)
{
- return gUnknown_0830FC54[a][b];
+ return sPlayerAvatarGfxIds[state][gender];
}
-u8 GetPlayerAvatarGraphicsIdByStateId(u8 a)
+u8 GetPlayerAvatarGraphicsIdByStateId(u8 state)
{
- return GetPlayerAvatarGraphicsIdByStateIdAndGender(a, gPlayerAvatar.gender);
+ return GetPlayerAvatarGraphicsIdByStateIdAndGender(state, gPlayerAvatar.gender);
}
-u8 unref_sub_8059888(u8 a)
+u8 unref_GetRivalAvatarGenderByGraphcsId(u8 gfxId)
{
- switch (a)
+ switch (gfxId)
{
- case 0x69:
- case 0x6A:
- case 0x6B:
- case 0x6C:
- case 0x6D:
- case 0x70:
- case 0x8A:
- case 0xC0:
+ case MAP_OBJ_GFX_RIVAL_MAY_NORMAL:
+ case MAP_OBJ_GFX_RIVAL_MAY_MACH_BIKE:
+ case MAP_OBJ_GFX_RIVAL_MAY_ACRO_BIKE:
+ case MAP_OBJ_GFX_RIVAL_MAY_SURFING:
+ case MAP_OBJ_GFX_RIVAL_MAY_FIELD_MOVE:
+ case MAP_OBJ_GFX_MAY_UNDERWATER:
+ case MAP_OBJ_GFX_MAY_FISHING:
+ case MAP_OBJ_GFX_MAY_WATERING:
return FEMALE;
default:
return MALE;
}
}
-u8 GetPlayerAvatarGenderByGraphicsId(u8 a)
+u8 GetPlayerAvatarGenderByGraphicsId(u8 gfxId)
{
- switch (a)
+ switch (gfxId)
{
- case 0x59:
- case 0x5A:
- case 0x5B:
- case 0x5C:
- case 0x5D:
- case 0x70:
- case 0x8A:
- case 0xC0:
+ case MAP_OBJ_GFX_MAY_NORMAL:
+ case MAP_OBJ_GFX_MAY_MACH_BIKE:
+ case MAP_OBJ_GFX_MAY_ACRO_BIKE:
+ case MAP_OBJ_GFX_MAY_SURFING:
+ case MAP_OBJ_GFX_MAY_FIELD_MOVE:
+ case MAP_OBJ_GFX_MAY_UNDERWATER:
+ case MAP_OBJ_GFX_MAY_FISHING:
+ case MAP_OBJ_GFX_MAY_WATERING:
return FEMALE;
default:
return MALE;
@@ -930,7 +1103,7 @@ bool8 PartyHasMonWithSurf(void)
bool8 IsPlayerSurfingNorth(void)
{
- if (player_get_direction_upper_nybble() == 2 && TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
+ if (player_get_direction_upper_nybble() == DIR_NORTH && TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
return TRUE;
else
return FALSE;
@@ -995,14 +1168,14 @@ void SetPlayerAvatarExtraStateTransition(u8 a, u8 b)
DoPlayerAvatarTransition();
}
-void InitPlayerAvatar(s16 a, s16 b, u8 c, u8 d)
+void InitPlayerAvatar(s16 a, s16 b, u8 c, u8 gender)
{
struct UnknownStruct_FPA s;
u8 mapObjectId;
struct MapObject *mapObject;
s.unk0 = 0xFF;
- s.unk1 = GetPlayerAvatarGraphicsIdByStateIdAndGender(0, d);
+ s.unk1 = GetPlayerAvatarGraphicsIdByStateIdAndGender(0, gender);
s.unk4 = a - 7;
s.unk6 = b - 7;
s.unk8 = 0;
@@ -1023,7 +1196,7 @@ void InitPlayerAvatar(s16 a, s16 b, u8 c, u8 d)
gPlayerAvatar.running1 = 0;
gPlayerAvatar.mapObjectId = mapObjectId;
gPlayerAvatar.spriteId = mapObject->spriteId;
- gPlayerAvatar.gender = d;
+ gPlayerAvatar.gender = gender;
SetPlayerAvatarStateMask(0x21);
}
@@ -1207,9 +1380,8 @@ u8 sub_805A0D8(struct Task *task, struct MapObject *mapObject)
u8 sub_805A100(struct Task *task, struct MapObject *mapObject)
{
- u8 directions[4];
+ u8 directions[] = {DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH};
- memcpy(directions, gUnknown_0830FCA8, sizeof(directions));
if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
{
u8 direction;
@@ -1226,9 +1398,8 @@ u8 sub_805A100(struct Task *task, struct MapObject *mapObject)
u8 sub_805A178(struct Task *task, struct MapObject *mapObject)
{
- u8 arr[5];
+ const u8 arr[] = {16, 16, 17, 18, 19};
- memcpy(arr, gUnknown_0830FCAC, sizeof(arr));
if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
{
FieldObjectSetSpecialAnim(mapObject, arr[task->data[2]]);
@@ -1300,6 +1471,26 @@ static void sub_805A2D0(u8 taskId)
/* Fishing */
+static u8 (*const gUnknown_0830FCB4[])(struct Task *) =
+{
+ Fishing1,
+ Fishing2,
+ Fishing3,
+ Fishing4,
+ Fishing5,
+ Fishing6,
+ Fishing7,
+ Fishing8,
+ Fishing9,
+ Fishing10,
+ Fishing11,
+ Fishing12,
+ Fishing13,
+ Fishing14,
+ Fishing15,
+ Fishing16,
+};
+
static void Task_Fishing(u8 taskId);
static void sub_805A954(void);
@@ -1327,12 +1518,10 @@ u8 Fishing1(struct Task *task)
u8 Fishing2(struct Task *task)
{
- s16 arr1[3];
- s16 arr2[3];
struct MapObject *playerMapObj;
+ const s16 arr1[] = {1, 1, 1};
+ const s16 arr2[] = {1, 3, 6};
- memcpy(arr1, gUnknown_0830FCF4, sizeof(arr1));
- memcpy(arr2, gUnknown_0830FCFA, sizeof(arr2));
task->data[12] = 0;
task->data[13] = arr1[task->data[15]] + (Random() % arr2[task->data[15]]);
task->data[14] = gMapObjects[gPlayerAvatar.mapObjectId].graphicsId;
@@ -1373,9 +1562,8 @@ u8 Fishing4(struct Task *task)
u8 Fishing5(struct Task *task)
{
- u8 dot[2];
+ const u8 dot[] = _"·";
- memcpy(dot, gUnknown_0830FD00, sizeof(dot));
sub_805A954();
task->data[1]++;
if (gMain.newKeys & A_BUTTON)
@@ -1429,9 +1617,8 @@ u8 Fishing7(struct Task *task)
u8 Fishing8(struct Task *task)
{
- s16 arr[3];
+ const s16 arr[3] = {36, 33, 30};
- memcpy(arr, gUnknown_0830FD02, sizeof(arr));
sub_805A954();
task->data[1]++;
if (task->data[1] >= arr[task->data[15]])
@@ -1443,9 +1630,13 @@ u8 Fishing8(struct Task *task)
u8 Fishing9(struct Task *task)
{
- s16 arr[3][2];
+ const s16 arr[][2] =
+ {
+ {0, 0},
+ {40, 10},
+ {70, 30}
+ };
- memcpy(arr, gUnknown_0830FD08, sizeof(arr));
sub_805A954();
task->data[0]++;
if (task->data[12] < task->data[13])
diff --git a/src/rom4.c b/src/rom4.c
index 6946cec03..621dd203b 100644
--- a/src/rom4.c
+++ b/src/rom4.c
@@ -1020,10 +1020,11 @@ bool32 is_c1_link_related_active(void)
void c1_overworld_normal(u16 newKeys, u16 heldKeys)
{
- struct UnkInputStruct inputStruct;
+ struct FieldInput inputStruct;
+
sub_8059204();
- sub_8067EEC(&inputStruct);
- process_overworld_input(&inputStruct, newKeys, heldKeys);
+ FieldClearPlayerInput(&inputStruct);
+ FieldGetPlayerInput(&inputStruct, newKeys, heldKeys);
if (!ScriptContext2_IsEnabled())
{
if (sub_8068024(&inputStruct) == 1)
@@ -1033,7 +1034,7 @@ void c1_overworld_normal(u16 newKeys, u16 heldKeys)
}
else
{
- player_step(inputStruct.input_field_2, newKeys, heldKeys);
+ player_step(inputStruct.dpadDirection, newKeys, heldKeys);
}
}
}