diff options
-rw-r--r-- | data/field_player_avatar.s | 180 | ||||
-rw-r--r-- | include/asm.h | 12 | ||||
-rw-r--r-- | include/asm.inc.h | 8 | ||||
-rw-r--r-- | include/field_player_avatar.h | 4 | ||||
-rw-r--r-- | include/global.fieldmap.h | 33 | ||||
-rw-r--r-- | include/map_object_constants.h | 226 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/bike.c | 478 | ||||
-rw-r--r-- | src/field_control_avatar.c | 90 | ||||
-rw-r--r-- | src/field_player_avatar.c | 495 | ||||
-rw-r--r-- | src/rom4.c | 9 |
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); } } } |