diff options
-rw-r--r-- | data/field_special_scene.s | 41 | ||||
-rw-r--r-- | include/bike.h | 53 | ||||
-rw-r--r-- | include/field_player_avatar.h | 22 | ||||
-rw-r--r-- | include/field_special_scene.h | 4 | ||||
-rw-r--r-- | include/global.fieldmap.h | 43 | ||||
-rw-r--r-- | include/script_movement.h | 2 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/field/bike.c | 598 | ||||
-rw-r--r-- | src/field/field_camera.c | 7 | ||||
-rw-r--r-- | src/field/field_control_avatar.c | 4 | ||||
-rw-r--r-- | src/field/field_effect.c | 28 | ||||
-rw-r--r-- | src/field/field_map_obj.c | 4 | ||||
-rw-r--r-- | src/field/field_player_avatar.c | 202 | ||||
-rw-r--r-- | src/field/field_special_scene.c | 82 | ||||
-rw-r--r-- | src/field/field_specials.c | 24 | ||||
-rw-r--r-- | src/field/map_obj_lock.c | 2 | ||||
-rw-r--r-- | src/field/script_movement.c | 20 | ||||
-rw-r--r-- | src/rom6.c | 4 | ||||
-rw-r--r-- | src/scene/intro.c | 4 |
19 files changed, 612 insertions, 533 deletions
diff --git a/data/field_special_scene.s b/data/field_special_scene.s deleted file mode 100644 index 9d3958924..000000000 --- a/data/field_special_scene.s +++ /dev/null @@ -1,41 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - - .align 2 -gMapObjectPic_MovingBox:: @ 83D28AC - .incbin "graphics/map_objects/pics/misc/moving_box.4bpp" - - .align 2 -gMapObjectPalette19:: @ 83D292C - .incbin "graphics/map_objects/palettes/19.gbapal" - -gTruckCamera_HorizontalTable:: @ 83D294C - .byte 0 - .byte 0 - .byte 0 - .byte 0 - .byte 0 - .byte 0 - .byte 0 - .byte 0 - .byte 1 - .byte 2 - .byte 2 - .byte 2 - .byte 2 - .byte 2 - .byte 2 - .byte -1 - .byte -1 - .byte -1 - .byte 0 - -gUnknown_083D295F:: @ 83D295F - step_18 - step_end - -gUnknown_083D2961:: @ 83D2961 - step_17 - step_end diff --git a/include/bike.h b/include/bike.h index decbd1d49..28aa2037d 100644 --- a/include/bike.h +++ b/include/bike.h @@ -1,15 +1,17 @@ #ifndef GUARD_BIKE_H #define GUARD_BIKE_H -struct UnknownStruct1 +// the struct below is used for checking button combinations of the last input so that the acro can potentially perform a side/turn jump. +// its possible that at some point Game Freak intended for the acro bike to have more complex tricks: but only the acro jump combinations can be seen in the final ROM. +struct BikeHistoryInputInfo { - u32 unk0; - u32 unk4; - u32 unk8; - u32 unkC; - const u8 *unk10; - const u8 *unk14; - u32 unk18; + u32 dirHistoryMatch; // the direction you need to press + u32 abStartSelectHistoryMatch; // the button you need to press + u32 dirHistoryMask; // mask applied so that way only the recent nybble (the recent input) is checked + u32 abStartSelectHistoryMask; // mask applied so that way only the recent nybble (the recent input) is checked + const u8 *dirTimerHistoryList; // list of timers to check for direction before the button+dir combination can be verified. + const u8 *abStartSelectHistoryList; // list of timers to check for buttons before the button+dir combination can be verified. + u32 direction; // direction to jump }; // Player speeds @@ -22,7 +24,16 @@ enum SPEED_FASTEST, }; -//Acro bike states +// mach bike transitions enum +enum +{ + MACH_TRANS_FACE_DIRECTION, + MACH_TRANS_TURN_DIRECTION, + MACH_TRANS_KEEP_MOVING, + MACH_TRANS_START_MOVING +}; + +// Acro bike states enum { ACRO_STATE_NORMAL, @@ -30,27 +41,37 @@ enum ACRO_STATE_WHEELIE_STANDING, ACRO_STATE_BUNNY_HOP, ACRO_STATE_WHEELIE_MOVING, - ACRO_STATE_5, - ACRO_STATE_6, + ACRO_STATE_SIDE_JUMP, + ACRO_STATE_TURN_JUMP, }; -//Acro bike transitions +// Acro bike transitions enum { ACRO_TRANS_FACE_DIRECTION, - ACRO_TRANS_NORMAL_TO_WHEELIE = 3, + ACRO_TRANS_TURN_DIRECTION, + ACRO_TRANS_MOVING, + ACRO_TRANS_NORMAL_TO_WHEELIE, ACRO_TRANS_WHEELIE_TO_NORMAL, + ACRO_TRANS_WHEELIE_IDLE, + ACRO_TRANS_WHEELIE_HOPPING_STANDING, + ACRO_TRANS_WHEELIE_HOPPING_MOVING, + ACRO_TRANS_SIDE_JUMP, + ACRO_TRANS_TURN_JUMP, + ACRO_TRANS_WHEELIE_MOVING, + ACRO_TRANS_WHEELIE_RISING_MOVING, + ACRO_TRANS_WHEELIE_LOWERING_MOVING, }; void MovePlayerOnBike(u8 direction, u16 newKeys, u16 heldKeys); -void sub_80E5B38(u16 a, u16 b); +void Bike_TryAcroBikeHistoryUpdate(u16 a, u16 b); bool8 IsRunningDisallowed(u8 tile); bool8 IsBikingDisallowedByPlayer(void); bool8 player_should_look_direction_be_enforced_upon_movement(void); void GetOnOffBike(u8 var); void BikeClearState(int var1, int var2); -void sub_80E6010(u8 var); +void Bike_UpdateBikeCounterSpeed(u8 var); s16 GetPlayerSpeed(void); -void sub_80E6084(void); +void Bike_HandleBumpySlopeJump(void); #endif diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index 86b1af3fb..250ed8469 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -19,7 +19,7 @@ u8 ForcedMovement_SlideSouth(void); u8 ForcedMovement_SlideNorth(void); u8 ForcedMovement_SlideWest(void); u8 ForcedMovement_SlideEast(void); -u8 sub_8058C04(void); +u8 ForcedMovement_MatJump(void); u8 sub_8058C10(void); u8 ForcedMovement_MuddySlope(void); void PlayerNotOnBikeNotMoving(u8 direction, u16 heldKeys); @@ -37,23 +37,23 @@ void sub_80591F4(struct MapObject *a); void sub_8059204(void); u8 player_get_x22(void); void PlayerSetAnimId(u8 a, u8 b); -void PlayerGoSpeed0(u8 a); -void sub_80593C4(u8 a); +void PlayerGoSpeed1(u8 a); +void PlayerGoSpeed2(u8 a); void npc_use_some_d2s(u8 a); -void sub_80593F4(u8 a); +void PlayerGoSpeed4(u8 a); void sub_805940C(u8 a); void PlayerOnBikeCollide(u8); void PlayerFaceDirection(u8 a); void PlayerTurnInPlace(u8 a); void PlayerJumpLedge(u8 a); void sub_80594C0(void); -void sub_8059504(u8 a); +void PlayerIdleWheelie(u8 a); void PlayerStartWheelie(u8 a); -void sub_8059534(u8 a); -void sub_805954C(u8 a); -void sub_8059570(u8 a); -void sub_8059594(u8 a); -void sub_80595B8(u8 a); +void PlayerEndWheelie(u8 a); +void PlayerStandingHoppingWheelie(u8 a); +void PlayerMovingHoppingWheelie(u8 a); +void PlayerLedgeHoppingWheelie(u8 a); +void PlayerAcroTurnJump(u8 a); void sub_80595DC(u8 a); void sub_8059600(u8 a); void sub_8059618(u8 a); @@ -87,7 +87,7 @@ void sub_8059C94(u8); 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); -u8 sub_805A000(struct Task *task, struct MapObject *mapObject); +u8 PlayerAvatar_DoSecretBaseMatJump(struct Task *task, struct MapObject *mapObject); 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); diff --git a/include/field_special_scene.h b/include/field_special_scene.h index d674f09df..240e9ecb6 100644 --- a/include/field_special_scene.h +++ b/include/field_special_scene.h @@ -1,8 +1,8 @@ #ifndef GUARD_FIELD_SPECIAL_SCENE_H #define GUARD_FIELD_SPECIAL_SCENE_H -s32 GetTruckCameraBobbingY(int a1); -s32 GetTruckBoxMovement(int a1); +s16 GetTruckCameraBobbingY(int a1); +s16 GetTruckBoxMovement(int a1); void Task_Truck1(u8 taskId); void Task_Truck2(u8 taskId); void Task_Truck3(u8 taskId); diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index 7a8cc4592..488cc11d9 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -353,25 +353,42 @@ enum COLLISION_LEDGE_JUMP = 6 }; +// player running states +enum +{ + NOT_MOVING, + TURN_DIRECTION, // not the same as turning! turns your avatar without moving. also known as a turn frame in some circles + MOVING, +}; + +// player tile transition states +enum +{ + T_NOT_MOVING, + T_TILE_TRANSITION, + T_TILE_CENTER, // player is on a frame in which they are centered on a tile during which the player either stops or keeps their momentum and keeps going, changing direction if necessary. +}; + struct PlayerAvatar /* 0x202E858 */ { /*0x00*/ u8 flags; - /*0x01*/ u8 bike; - /*0x02*/ u8 running2; - /*0x03*/ u8 running1; + /*0x01*/ u8 unk1; // used to be named bike, but its definitely not that. seems to be some transition flags + /*0x02*/ u8 runningState; // this is a static running state. 00 is not moving, 01 is turn direction, 02 is moving. + /*0x03*/ u8 tileTransitionState; // this is a transition running state: 00 is not moving, 01 is transition between tiles, 02 means you are on the frame in which you have centered on a tile but are about to keep moving, even if changing directions. 2 is also used for a ledge hop, since you are transitioning. /*0x04*/ u8 spriteId; /*0x05*/ u8 mapObjectId; - /*0x06*/ u8 unk6; + /*0x06*/ bool8 preventStep; /*0x07*/ u8 gender; - u8 acroBikeState; - u8 unk9; - u8 bikeFrameCounter; - u8 unkB; - u32 unkC; - u32 unk10; - u8 unk14[8]; - u8 unk1C[8]; - // TODO: rest of struct + /*0x08*/ u8 acroBikeState; // 00 is normal, 01 is turning, 02 is standing wheelie, 03 is hopping wheelie + /*0x09*/ u8 newDirBackup; // during bike movement, the new direction as opposed to player's direction is backed up here. + /*0x0A*/ u8 bikeFrameCounter; // on the mach bike, when this value is 1, the bike is moving but not accelerating yet for 1 tile. on the acro bike, this acts as a timer for acro bike. + /*0x0B*/ u8 bikeSpeed; + // acro bike only + /*0x0C*/ u32 directionHistory; // up/down/left/right history is stored in each nybble, but using the field directions and not the io inputs. + /*0x10*/ u32 abStartSelectHistory; // same as above but for A + B + start + select only + // these two are timer history arrays which [0] is the active timer for acro bike. every element is backed up to the next element upon update. + /*0x14*/ u8 dirTimerHistory[8]; + /*0x1C*/ u8 abStartSelectTimerHistory[8]; }; struct Camera diff --git a/include/script_movement.h b/include/script_movement.h index dc6d7e51b..17c1abed7 100644 --- a/include/script_movement.h +++ b/include/script_movement.h @@ -1,7 +1,7 @@ #ifndef GUARD_SCRIPT_MOVEMENT_H #define GUARD_SCRIPT_MOVEMENT_H -bool8 ScriptMovement_StartObjectMovementScript(u8, u8, u8, u8 *); +bool8 ScriptMovement_StartObjectMovementScript(u8, u8, u8, const u8 *); bool8 ScriptMovement_IsObjectMovementFinished(u8, u8, u8); void sub_80A2178(void); diff --git a/ld_script.txt b/ld_script.txt index a72a43f17..b6a61415b 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -401,7 +401,6 @@ SECTIONS { src/pokemon/pokemon_size_record.o(.rodata); data/fldeff_80C5CD4.o(.rodata); src/field/field_special_scene.o(.rodata); - data/field_special_scene.o(.rodata); src/field/rotating_gate.o(.rodata); src/field/item_use.o(.rodata); data/battle_anim_80CA710.o(.rodata); diff --git a/src/field/bike.c b/src/field/bike.c index 8df901b40..e36ae1798 100644 --- a/src/field/bike.c +++ b/src/field/bike.c @@ -10,16 +10,16 @@ #include "songs.h" #include "sound.h" -extern u8 gUnknown_02039250; -extern u8 gUnknown_02039251; -extern u8 gUnknown_0202E854; +extern bool8 gBikeCyclingChallenge; +extern u8 gBikeCollisions; +extern u8 gUnusedBikeCameraAheadPanback; static void MovePlayerOnMachBike(u8, u16, u16); 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 MachBikeTransition_TurnDirection(u8); +static void MachBikeTransition_TrySpeedUp(u8); +static void MachBikeTransition_TrySlowDown(u8); static void MovePlayerOnAcroBike(u8, u16, u16); static u8 CheckMovementInputAcroBike(u8 *, u16, u16); static u8 AcroBikeHandleInputNormal(u8 *, u16, u16); @@ -27,64 +27,74 @@ 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 u8 AcroBikeHandleInputSidewaysJump(u8 *, u16, u16); +static u8 AcroBikeHandleInputTurnJump(u8 *, u16, u16); static void AcroBikeTransition_FaceDirection(u8); -static void AcroBikeTransition_80E5708(u8); -static void AcroBikeTransition_80E5744(u8); +static void AcroBikeTransition_TurnDirection(u8); +static void AcroBikeTransition_Moving(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 void AcroBikeTransition_WheelieToNormal(u8); +static void AcroBikeTransition_WheelieIdle(u8); +static void AcroBikeTransition_WheelieHoppingStanding(u8); +static void AcroBikeTransition_WheelieHoppingMoving(u8); +static void AcroBikeTransition_SideJump(u8); +static void AcroBikeTransition_TurnJump(u8); +static void AcroBikeTransition_WheelieMoving(u8); +static void AcroBikeTransition_WheelieRisingMoving(u8); +static void AcroBikeTransition_WheelieLoweringMoving(u8); +static void AcroBike_TryHistoryUpdate(u16, u16); +static u8 AcroBike_GetJumpDirection(void); +static void Bike_UpdateDirTimerHistory(u8); +static void Bike_UpdateABStartSelectHistory(u8); +static u8 Bike_DPadToDirection(u16); static u8 get_some_collision(u8); -static u8 sub_80E5DA0(struct MapObject *, s16, s16, u8, u8); +static u8 Bike_CheckCollisionTryAdvanceCollisionCount(struct MapObject *, s16, s16, u8, u8); static bool8 IsRunningDisallowedByMetatile(u8); -static void sub_80E5E4C(); +static void Bike_TryAdvanceCyclingRoadCollisions(); static u8 CanBikeFaceDirOnMetatile(u8, u8); -static bool8 sub_80E5EC0(u8, u8); -static void sub_80E6024(void); +static bool8 WillPlayerCollideWithCollision(u8, u8); +static void Bike_SetBikeStill(void); + +/* + A bike transition is a type of callback for the bike that actually + modifies the bicycle's direction or momentum or otherwise movement. + Alternatively, a bike may also have input handlers which process the + bike transition to call: the acro bike has input handlers while the mach + bike does not. This is because the Acro needs to know the button inputs + for its complex tricks and actions. +*/ static void (*const sMachBikeTransitions[])(u8) = { - MachBikeTransition_FaceDirection, - MachBikeTransition_80E517C, - MachBikeTransition_80E51C4, - MachBikeTransition_80E5270, + MachBikeTransition_FaceDirection, // Face vs Turn: Face has no anim while Turn does. Turn checks for collision because if you turn right as opposed to face right, if there is a wall there, turn will make a bonk sound effect while face will not. + MachBikeTransition_TurnDirection, + MachBikeTransition_TrySpeedUp, + MachBikeTransition_TrySlowDown, }; -static void (*const gUnknown_083DB5A4[])(u8) = +// bikeFrameCounter is input which is represented by gMachBikeSpeeds in order: 0 is normal speed (1 speed), 1 is fast speed (2 speed), 2 is fastest speed (4 speed) +static void (*const sMachBikeSpeedCallbacks[])(u8) = { - PlayerGoSpeed0, - sub_80593C4, - sub_80593F4, + PlayerGoSpeed1, // normal speed (1 speed) + PlayerGoSpeed2, // fast speed (2 speed) + PlayerGoSpeed4, // fastest speed (4 speed) }; static void (*const sAcroBikeTransitions[])(u8) = { AcroBikeTransition_FaceDirection, - AcroBikeTransition_80E5708, - AcroBikeTransition_80E5744, + AcroBikeTransition_TurnDirection, + AcroBikeTransition_Moving, AcroBikeTransition_NormalToWheelie, - AcroBikeTransition_80E57F8, - AcroBikeTransition_80E5834, - AcroBikeTransition_80E5870, - AcroBikeTransition_80E58AC, - AcroBikeTransition_80E5920, - AcroBikeTransition_80E5990, - AcroBikeTransition_80E59A0, - AcroBikeTransition_80E5A30, - AcroBikeTransition_80E5AC0, + AcroBikeTransition_WheelieToNormal, + AcroBikeTransition_WheelieIdle, + AcroBikeTransition_WheelieHoppingStanding, + AcroBikeTransition_WheelieHoppingMoving, + AcroBikeTransition_SideJump, + AcroBikeTransition_TurnJump, + AcroBikeTransition_WheelieMoving, + AcroBikeTransition_WheelieRisingMoving, + AcroBikeTransition_WheelieLoweringMoving, }; static u8 (*const sAcroBikeInputHandlers[])(u8 *, u16, u16) = @@ -94,19 +104,24 @@ static u8 (*const sAcroBikeInputHandlers[])(u8 *, u16, u16) = AcroBikeHandleInputWheelieStanding, AcroBikeHandleInputBunnyHop, AcroBikeHandleInputWheelieMoving, - AcroBikeHandleInputState5, - AcroBikeHandleInputState6, + AcroBikeHandleInputSidewaysJump, + AcroBikeHandleInputTurnJump, }; +// used with bikeFrameCounter from mach bike const u16 gMachBikeSpeeds[] = {SPEED_NORMAL, SPEED_FAST, SPEED_FASTEST}; -static const u8 Unknown_3DB606[] = {4, 0}; -static const struct UnknownStruct1 gUnknown_083DB608[] = +// this is a list of timers to compare against later, terminated with 0. the only timer being compared against is 4 frames in this list. +static const u8 AcroBikeJumpTimerList[] = {4, 0}; + +// this is a list of history inputs to do in order to do the check to retrieve a jump direction for acro bike. it seems to be an extensible list, so its possible that Game Freak may have intended for the Acro Bike to have more complex tricks at some point. The final list only has the acro jump. +static const struct BikeHistoryInputInfo gAcroBikeTricksList[] = { - {1, 2, 15, 15, Unknown_3DB606, Unknown_3DB606, 1}, - {2, 2, 15, 15, Unknown_3DB606, Unknown_3DB606, 2}, - {3, 2, 15, 15, Unknown_3DB606, Unknown_3DB606, 3}, - {4, 2, 15, 15, Unknown_3DB606, Unknown_3DB606, 4}, + // the 0xF is a mask performed with each byte of the array in order to perform the check on only the last entry of the history list, otherwise the check wouldnt work as there can be 0xF0 as opposed to 0x0F. + {DIR_SOUTH, B_BUTTON, 0xF, 0xF, AcroBikeJumpTimerList, AcroBikeJumpTimerList, DIR_SOUTH}, + {DIR_NORTH, B_BUTTON, 0xF, 0xF, AcroBikeJumpTimerList, AcroBikeJumpTimerList, DIR_NORTH}, + {DIR_WEST, B_BUTTON, 0xF, 0xF, AcroBikeJumpTimerList, AcroBikeJumpTimerList, DIR_WEST}, + {DIR_EAST, B_BUTTON, 0xF, 0xF, AcroBikeJumpTimerList, AcroBikeJumpTimerList, DIR_EAST}, }; void MovePlayerOnBike(u8 direction, u16 newKeys, u16 heldKeys) @@ -122,54 +137,60 @@ static void MovePlayerOnMachBike(u8 direction, u16 newKeys, u16 heldKeys) sMachBikeTransitions[GetMachBikeTransition(&direction)](direction); } -static u8 GetMachBikeTransition(u8 *ptr) +// dirTraveling is a variable that is 0 when the player is standing still. +static u8 GetMachBikeTransition(u8 *dirTraveling) { + // if the dir updated before this function, get the relevent new direction to check later. u8 direction = player_get_direction_upper_nybble(); - if (*ptr == 0) + // is the player standing still? + if (*dirTraveling == 0) { - *ptr = direction; - if (gPlayerAvatar.unkB == 0) + *dirTraveling = direction; // update the direction, since below we either faced a direction or we started moving. + if (gPlayerAvatar.bikeSpeed == SPEED_STANDING) { - gPlayerAvatar.running2 = 0; - return 0; + gPlayerAvatar.runningState = NOT_MOVING; + return MACH_TRANS_FACE_DIRECTION; } - gPlayerAvatar.running2 = 2; - return 3; + gPlayerAvatar.runningState = MOVING; + return MACH_TRANS_START_MOVING; } - if (*ptr != direction && gPlayerAvatar.running2 != 2) + // we need to check if the last traveled direction changed from the new direction as well as ensuring that we dont update the state while the player is moving: see the else check. + if (*dirTraveling != direction && gPlayerAvatar.runningState != MOVING) { - if (gPlayerAvatar.unkB != 0) + if (gPlayerAvatar.bikeSpeed != SPEED_STANDING) { - *ptr = direction; - gPlayerAvatar.running2 = 2; - return 3; + *dirTraveling = direction; // implement the new direction + gPlayerAvatar.runningState = MOVING; + return MACH_TRANS_START_MOVING; } - gPlayerAvatar.running2 = 1; - return 1; + // if you didnt start moving but your dir was different, do a turn direction instead. + gPlayerAvatar.runningState = TURN_DIRECTION; + return MACH_TRANS_TURN_DIRECTION; } - else + else // the player is either going in the current direction and hasnt changed or their state is currently moving. { - gPlayerAvatar.running2 = 2; - return 2; + gPlayerAvatar.runningState = MOVING; + return MACH_TRANS_KEEP_MOVING; } } +// the difference between face direction and turn direction is that one changes direction while the other does the animation of turning as well as changing direction. static void MachBikeTransition_FaceDirection(u8 direction) { PlayerFaceDirection(direction); - sub_80E6024(); + Bike_SetBikeStill(); } -static void MachBikeTransition_80E517C(u8 direction) +static void MachBikeTransition_TurnDirection(u8 direction) { struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E)) { PlayerTurnInPlace(direction); - sub_80E6024(); + Bike_SetBikeStill(); } else { @@ -177,15 +198,16 @@ static void MachBikeTransition_80E517C(u8 direction) } } -static void MachBikeTransition_80E51C4(u8 direction) +static void MachBikeTransition_TrySpeedUp(u8 direction) { struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; u8 collision; - if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) + if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == FALSE) { - if (gPlayerAvatar.unkB) - MachBikeTransition_80E5270(playerMapObj->placeholder18); + // we cannot go forward, so either slow down or, if we are stopped, idle face direction. + if (gPlayerAvatar.bikeSpeed) + MachBikeTransition_TrySlowDown(playerMapObj->placeholder18); else MachBikeTransition_FaceDirection(playerMapObj->placeholder18); } @@ -194,33 +216,36 @@ static void MachBikeTransition_80E51C4(u8 direction) collision = get_some_collision(direction); if (collision > 0 && collision < 12) { + // we hit a solid object, but check to see if its a ledge and then jump. if (collision == COLLISION_LEDGE_JUMP) { PlayerJumpLedge(direction); } else { - sub_80E6024(); + // we hit a solid object that is not a ledge, so perform the collision. + Bike_SetBikeStill(); if (collision < 5 || collision > 8) PlayerOnBikeCollide(direction); } } else { - gUnknown_083DB5A4[gPlayerAvatar.bikeFrameCounter](direction); - gPlayerAvatar.unkB = gPlayerAvatar.bikeFrameCounter + (gPlayerAvatar.bikeFrameCounter >> 1); // same as dividing by 2, but compiler is insistent on >> 1 + // we did not hit anything that can slow us down, so perform the advancement callback depending on the bikeFrameCounter and try to increase the mach bike's speed. + sMachBikeSpeedCallbacks[gPlayerAvatar.bikeFrameCounter](direction); + gPlayerAvatar.bikeSpeed = gPlayerAvatar.bikeFrameCounter + (gPlayerAvatar.bikeFrameCounter >> 1); // same as dividing by 2, but compiler is insistent on >> 1 if (gPlayerAvatar.bikeFrameCounter < 2) // do not go faster than the last element in the mach bike array gPlayerAvatar.bikeFrameCounter++; } } } -static void MachBikeTransition_80E5270(u8 var) +static void MachBikeTransition_TrySlowDown(u8 var) { u8 collision; - if (gPlayerAvatar.unkB != 0) - gPlayerAvatar.bikeFrameCounter = --gPlayerAvatar.unkB; + if (gPlayerAvatar.bikeSpeed != SPEED_STANDING) + gPlayerAvatar.bikeFrameCounter = --gPlayerAvatar.bikeSpeed; collision = get_some_collision(var); @@ -232,17 +257,18 @@ static void MachBikeTransition_80E5270(u8 var) } else { - sub_80E6024(); + Bike_SetBikeStill(); if (collision < 5 || collision > 8) PlayerOnBikeCollide(var); } } else { - gUnknown_083DB5A4[gPlayerAvatar.bikeFrameCounter](var); + sMachBikeSpeedCallbacks[gPlayerAvatar.bikeFrameCounter](var); } } +// the acro bike requires the input handler to be executed before the transition can. static void MovePlayerOnAcroBike(u8 newDirection, u16 newKeys, u16 heldKeys) { sAcroBikeTransitions[CheckMovementInputAcroBike(&newDirection, newKeys, heldKeys)](newDirection); @@ -265,118 +291,121 @@ static u8 AcroBikeHandleInputNormal(u8 *newDirection, u16 newKeys, u16 heldKeys) //We're standing still with the B button held. //Do a wheelie. *newDirection = direction; - gPlayerAvatar.running2 = 0; + gPlayerAvatar.runningState = NOT_MOVING; gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING; return ACRO_TRANS_NORMAL_TO_WHEELIE; } else { *newDirection = direction; - gPlayerAvatar.running2 = 0; + gPlayerAvatar.runningState = NOT_MOVING; return ACRO_TRANS_FACE_DIRECTION; } } - if (*newDirection == direction && (heldKeys & B_BUTTON) && gPlayerAvatar.unkB == 0) + if (*newDirection == direction && (heldKeys & B_BUTTON) && gPlayerAvatar.bikeSpeed == SPEED_STANDING) { - gPlayerAvatar.unkB++; + gPlayerAvatar.bikeSpeed++; gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_MOVING; - return 11; + return ACRO_TRANS_WHEELIE_RISING_MOVING; } - if (*newDirection != direction && gPlayerAvatar.running2 != 2) + if (*newDirection != direction && gPlayerAvatar.runningState != MOVING) { gPlayerAvatar.acroBikeState = ACRO_STATE_TURNING; - gPlayerAvatar.unk9 = *newDirection; - gPlayerAvatar.running2 = 0; + gPlayerAvatar.newDirBackup = *newDirection; + gPlayerAvatar.runningState = NOT_MOVING; return CheckMovementInputAcroBike(newDirection, newKeys, heldKeys); } - gPlayerAvatar.running2 = 2; - return 2; + gPlayerAvatar.runningState = MOVING; + return ACRO_TRANS_MOVING; } static u8 AcroBikeHandleInputTurning(u8 *newDirection, u16 newKeys, u16 heldKeys) { u8 direction; - *newDirection = gPlayerAvatar.unk9; + *newDirection = gPlayerAvatar.newDirBackup; gPlayerAvatar.bikeFrameCounter++; - //Wait 6 frames before actually changing direction - if (gPlayerAvatar.bikeFrameCounter > 6) + // Wait 6 frames before actually changing direction + if (gPlayerAvatar.bikeFrameCounter > 6) // ... because it takes 6 frames to advance 1 tile. { - gPlayerAvatar.running2 = 1; + gPlayerAvatar.runningState = TURN_DIRECTION; gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; - sub_80E6024(); - return 1; + Bike_SetBikeStill(); + return ACRO_TRANS_TURN_DIRECTION; } direction = player_get_direction_upper_nybble(); - if (*newDirection == sub_80E5C2C()) + if (*newDirection == AcroBike_GetJumpDirection()) { - sub_80E6024(); - gPlayerAvatar.unkB = 1; + Bike_SetBikeStill(); // Bike_SetBikeStill sets speed to standing, but the next line immediately overrides it. could have just reset acroBikeState to 0 here instead of wasting a jump. + gPlayerAvatar.bikeSpeed = SPEED_NORMAL; if (*newDirection == GetOppositeDirection(direction)) { - gPlayerAvatar.acroBikeState = ACRO_STATE_6; - return 9; + // do a turn jump. + // no need to update runningState, didnt move. + gPlayerAvatar.acroBikeState = ACRO_STATE_TURN_JUMP; + return ACRO_TRANS_TURN_JUMP; } else { - gPlayerAvatar.running2 = 2; - gPlayerAvatar.acroBikeState = ACRO_STATE_5; - return 8; + // do a sideways jump. + gPlayerAvatar.runningState = MOVING; // we need to move, set state to moving. + gPlayerAvatar.acroBikeState = ACRO_STATE_SIDE_JUMP; + return ACRO_TRANS_SIDE_JUMP; } } *newDirection = direction; - return 0; + return ACRO_TRANS_FACE_DIRECTION; } -static u8 AcroBikeHandleInputWheelieStanding(u8 *ptr, u16 newKeys, u16 heldKeys) +static u8 AcroBikeHandleInputWheelieStanding(u8 *newDirection, u16 newKeys, u16 heldKeys) { u8 direction; struct MapObject *playerMapObj; direction = player_get_direction_upper_nybble(); playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; - gPlayerAvatar.running2 = 0; + gPlayerAvatar.runningState = NOT_MOVING; if (heldKeys & B_BUTTON) gPlayerAvatar.bikeFrameCounter++; else { - //B button was released. + // B button was released. gPlayerAvatar.bikeFrameCounter = 0; if (!MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E)) { - //Go back to normal on flat ground - *ptr = direction; + // Go back to normal on flat ground + *newDirection = direction; gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; - sub_80E6024(); - return 4; + Bike_SetBikeStill(); + return ACRO_TRANS_WHEELIE_TO_NORMAL; } } if (gPlayerAvatar.bikeFrameCounter >= 40) { - *ptr = direction; + *newDirection = direction; gPlayerAvatar.acroBikeState = ACRO_STATE_BUNNY_HOP; - sub_80E6024(); - return 6; + Bike_SetBikeStill(); + return ACRO_TRANS_WHEELIE_HOPPING_STANDING; } - if (*ptr == direction) + if (*newDirection == direction) { - gPlayerAvatar.running2 = 2; + gPlayerAvatar.runningState = MOVING; gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_MOVING; - sub_80E6024(); - return 10; + Bike_SetBikeStill(); + return ACRO_TRANS_WHEELIE_MOVING; } - if (*ptr == 0) + if (*newDirection == 0) { - *ptr = direction; - return 5; + *newDirection = direction; + return ACRO_TRANS_WHEELIE_IDLE; } - gPlayerAvatar.running2 = 1; - return 5; + gPlayerAvatar.runningState = TURN_DIRECTION; + return ACRO_TRANS_WHEELIE_IDLE; } -static u8 AcroBikeHandleInputBunnyHop(u8 *ptr, u16 newKeys, u16 heldKeys) +static u8 AcroBikeHandleInputBunnyHop(u8 *newDirection, u16 newKeys, u16 heldKeys) { u8 direction; struct MapObject *playerMapObj; @@ -385,42 +414,45 @@ static u8 AcroBikeHandleInputBunnyHop(u8 *ptr, u16 newKeys, u16 heldKeys) playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; if (!(heldKeys & B_BUTTON)) { - //B button was released - sub_80E6024(); + // B button was released + Bike_SetBikeStill(); if (MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E)) { - //Do a standing wheelie on a bumpy slope + // even though B was released, dont undo the wheelie on the bumpy slope. gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING; - return CheckMovementInputAcroBike(ptr, newKeys, heldKeys); + return CheckMovementInputAcroBike(newDirection, newKeys, heldKeys); } else { - //Go back to normal on flat ground - *ptr = direction; - gPlayerAvatar.running2 = 0; + // .. otherwise, go back to normal on flat ground + *newDirection = direction; + gPlayerAvatar.runningState = NOT_MOVING; gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; - return 4; + return ACRO_TRANS_WHEELIE_TO_NORMAL; } } - //B Button is still held + // B Button is still held - if (*ptr == DIR_NONE) + if (*newDirection == DIR_NONE) { - *ptr = direction; - gPlayerAvatar.running2 = 0; - return 6; + // we did not move, so keep hopping in place without moving. + *newDirection = direction; + gPlayerAvatar.runningState = NOT_MOVING; + return ACRO_TRANS_WHEELIE_HOPPING_STANDING; } - if (*ptr != direction && gPlayerAvatar.running2 != 2) + if (*newDirection != direction && gPlayerAvatar.runningState != MOVING) { - gPlayerAvatar.running2 = 1; - return 6; + // we changed direction, so turn but do not move hop. + gPlayerAvatar.runningState = TURN_DIRECTION; + return ACRO_TRANS_WHEELIE_HOPPING_STANDING; } - gPlayerAvatar.running2 = 2; - return 7; + // otherwise, we started moving while hopping + gPlayerAvatar.runningState = MOVING; + return ACRO_TRANS_WHEELIE_HOPPING_MOVING; } -static u8 AcroBikeHandleInputWheelieMoving(u8 *ptr, u16 newKeys, u16 heldKeys) +static u8 AcroBikeHandleInputWheelieMoving(u8 *newDirection, u16 newKeys, u16 heldKeys) { u8 direction; struct MapObject *playerMapObj; @@ -429,45 +461,53 @@ static u8 AcroBikeHandleInputWheelieMoving(u8 *ptr, u16 newKeys, u16 heldKeys) playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; if (!(heldKeys & B_BUTTON)) { - sub_80E6024(); + // we were moving on a wheelie, but we let go while moving. reset bike still status + Bike_SetBikeStill(); if (!MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E)) { + // we let go of B and arent on a bumpy slope, set state to normal because now we need to handle this gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; - if (*ptr == 0) + if (*newDirection == DIR_NONE) { - *ptr = direction; - gPlayerAvatar.running2 = 0; - return 4; + // we stopped moving but are turning, still try to lower the wheelie in place. + *newDirection = direction; + gPlayerAvatar.runningState = NOT_MOVING; + return ACRO_TRANS_WHEELIE_TO_NORMAL; } - if (*ptr != direction && gPlayerAvatar.running2 != 2) + if (*newDirection != direction && gPlayerAvatar.runningState != MOVING) { - gPlayerAvatar.running2 = 0; - return 4; + // we did not turn while lowering wheelie, so do so without turning. + gPlayerAvatar.runningState = NOT_MOVING; + return ACRO_TRANS_WHEELIE_TO_NORMAL; } - gPlayerAvatar.running2 = 2; - return 12; + // if we are moving while lowering wheelie, put the acro into a lowering state while moving. + gPlayerAvatar.runningState = MOVING; + return ACRO_TRANS_WHEELIE_LOWERING_MOVING; } + // please do not undo the wheelie on a bumpy slope gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING; - return CheckMovementInputAcroBike(ptr, newKeys, heldKeys); + return CheckMovementInputAcroBike(newDirection, newKeys, heldKeys); } - if (*ptr == 0) + // we are still holding B. + if (*newDirection == DIR_NONE) { - *ptr = direction; + // idle the wheelie in place because we're holding B without moving. + *newDirection = direction; gPlayerAvatar.acroBikeState = ACRO_STATE_WHEELIE_STANDING; - gPlayerAvatar.running2 = 0; - sub_80E6024(); - return 5; + gPlayerAvatar.runningState = NOT_MOVING; + Bike_SetBikeStill(); + return ACRO_TRANS_WHEELIE_IDLE; } - if (direction != *ptr && gPlayerAvatar.running2 != 2) + if (direction != *newDirection && gPlayerAvatar.runningState != MOVING) { - gPlayerAvatar.running2 = 0; - return 5; + gPlayerAvatar.runningState = NOT_MOVING; + return ACRO_TRANS_WHEELIE_IDLE; } - gPlayerAvatar.running2 = 2; - return 10; + gPlayerAvatar.runningState = MOVING; + return ACRO_TRANS_WHEELIE_MOVING; } -static u8 AcroBikeHandleInputState5(u8 *ptr, u16 newKeys, u16 heldKeys) +static u8 AcroBikeHandleInputSidewaysJump(u8 *ptr, u16 newKeys, u16 heldKeys) { struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; @@ -477,7 +517,7 @@ static u8 AcroBikeHandleInputState5(u8 *ptr, u16 newKeys, u16 heldKeys) return CheckMovementInputAcroBike(ptr, newKeys, heldKeys); } -static u8 AcroBikeHandleInputState6(u8 *ptr, u16 newKeys, u16 heldKeys) +static u8 AcroBikeHandleInputTurnJump(u8 *ptr, u16 newKeys, u16 heldKeys) { gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; return CheckMovementInputAcroBike(ptr, newKeys, heldKeys); @@ -488,7 +528,7 @@ static void AcroBikeTransition_FaceDirection(u8 direction) PlayerFaceDirection(direction); } -static void AcroBikeTransition_80E5708(u8 direction) +static void AcroBikeTransition_TurnDirection(u8 direction) { struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; @@ -497,7 +537,7 @@ static void AcroBikeTransition_80E5708(u8 direction) PlayerFaceDirection(direction); } -static void AcroBikeTransition_80E5744(u8 direction) +static void AcroBikeTransition_Moving(u8 direction) { u8 collision; struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; @@ -530,41 +570,41 @@ static void AcroBikeTransition_NormalToWheelie(u8 direction) PlayerStartWheelie(direction); } -static void AcroBikeTransition_80E57F8(u8 direction) +static void AcroBikeTransition_WheelieToNormal(u8 direction) { struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) direction = playerMapObj->placeholder18; - sub_8059534(direction); + PlayerEndWheelie(direction); } -static void AcroBikeTransition_80E5834(u8 direction) +static void AcroBikeTransition_WheelieIdle(u8 direction) { struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) direction = playerMapObj->placeholder18; - sub_8059504(direction); + PlayerIdleWheelie(direction); } -static void AcroBikeTransition_80E5870(u8 direction) +static void AcroBikeTransition_WheelieHoppingStanding(u8 direction) { struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) direction = playerMapObj->placeholder18; - sub_805954C(direction); + PlayerStandingHoppingWheelie(direction); } -static void AcroBikeTransition_80E58AC(u8 direction) +static void AcroBikeTransition_WheelieHoppingMoving(u8 direction) { u8 var; struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) { - AcroBikeTransition_80E5870(playerMapObj->placeholder18); + AcroBikeTransition_WheelieHoppingStanding(playerMapObj->placeholder18); return; } var = get_some_collision(direction); @@ -575,23 +615,23 @@ static void AcroBikeTransition_80E58AC(u8 direction) } else if (var == 6) { - sub_8059594(direction); + PlayerLedgeHoppingWheelie(direction); } else if (var < 5 || var > 8) { if (var <= 11) { - AcroBikeTransition_80E5870(direction); + AcroBikeTransition_WheelieHoppingStanding(direction); } else { derp: - sub_8059570(direction); + PlayerMovingHoppingWheelie(direction); } } } -static void AcroBikeTransition_80E5920(u8 direction) +static void AcroBikeTransition_SideJump(u8 direction) { u8 var; struct MapObject *playerMapObj; @@ -603,12 +643,12 @@ static void AcroBikeTransition_80E5920(u8 direction) return; if (var < 10) { - AcroBikeTransition_80E5708(direction); + AcroBikeTransition_TurnDirection(direction); return; } - if (sub_80E5EC0(var, direction) == 0) + if (WillPlayerCollideWithCollision(var, direction) == FALSE) { - AcroBikeTransition_80E5708(direction); + AcroBikeTransition_TurnDirection(direction); return; } } @@ -618,19 +658,19 @@ static void AcroBikeTransition_80E5920(u8 direction) PlayerSetAnimId(sub_80608A4(direction), 2); } -static void AcroBikeTransition_80E5990(u8 direction) +static void AcroBikeTransition_TurnJump(u8 direction) { - sub_80595B8(direction); + PlayerAcroTurnJump(direction); } -static void AcroBikeTransition_80E59A0(u8 direction) +static void AcroBikeTransition_WheelieMoving(u8 direction) { u8 var; struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) { - sub_8059504(playerMapObj->placeholder18); + PlayerIdleWheelie(playerMapObj->placeholder18); return; } var = get_some_collision(direction); @@ -638,26 +678,26 @@ static void AcroBikeTransition_80E59A0(u8 direction) { if (var == 6) { - sub_8059594(direction); + PlayerLedgeHoppingWheelie(direction); } else if (var == 9) { - sub_8059504(direction); + PlayerIdleWheelie(direction); } else if (var <= 4) { if (MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E)) - sub_8059504(direction); + PlayerIdleWheelie(direction); else sub_80595DC(direction); //hit wall? } return; } sub_8059618(direction); - gPlayerAvatar.running2 = 2; + gPlayerAvatar.runningState = MOVING; } -static void AcroBikeTransition_80E5A30(u8 direction) +static void AcroBikeTransition_WheelieRisingMoving(u8 direction) { u8 var; struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; @@ -672,33 +712,33 @@ static void AcroBikeTransition_80E5A30(u8 direction) { if (var == 6) { - sub_8059594(direction); + PlayerLedgeHoppingWheelie(direction); } else if (var == 9) { - sub_8059504(direction); + PlayerIdleWheelie(direction); } else if (var <= 4) { if (MetatileBehavior_IsBumpySlope(playerMapObj->mapobj_unk_1E)) - sub_8059504(direction); + PlayerIdleWheelie(direction); else sub_80595DC(direction); //hit wall? } return; } sub_8059600(direction); - gPlayerAvatar.running2 = 2; + gPlayerAvatar.runningState = MOVING; } -static void AcroBikeTransition_80E5AC0(u8 direction) +static void AcroBikeTransition_WheelieLoweringMoving(u8 direction) { u8 var; struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; if (CanBikeFaceDirOnMetatile(direction, playerMapObj->mapobj_unk_1E) == 0) { - sub_8059534(playerMapObj->placeholder18); + PlayerEndWheelie(playerMapObj->placeholder18); return; } var = get_some_collision(direction); @@ -707,115 +747,115 @@ static void AcroBikeTransition_80E5AC0(u8 direction) if (var == 6) PlayerJumpLedge(direction); else if (var < 5 || var > 8) - sub_8059534(direction); + PlayerEndWheelie(direction); return; } sub_8059630(direction); } -void sub_80E5B38(u16 a, u16 b) +void Bike_TryAcroBikeHistoryUpdate(u16 newKeys, u16 heldKeys) { if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_ACRO_BIKE) - sub_80E5B60(a, b); + AcroBike_TryHistoryUpdate(newKeys, heldKeys); } -static void sub_80E5B60(u16 unused, u16 b) +static void AcroBike_TryHistoryUpdate(u16 newKeys, u16 heldKeys) // newKeys is unused { - u8 var; + u8 direction = Bike_DPadToDirection(heldKeys); - var = sub_80E5CF4(b); - if (var == (gPlayerAvatar.unkC & 0xF)) + if (direction == (gPlayerAvatar.directionHistory & 0xF)) { - if (gPlayerAvatar.unk14[0] < 0xFF) - gPlayerAvatar.unk14[0]++; + // increment the timer for direction history since last input. + if (gPlayerAvatar.dirTimerHistory[0] < 0xFF) + gPlayerAvatar.dirTimerHistory[0]++; } else { - sub_80E5C7C(var); - gPlayerAvatar.unkB = 0; + Bike_UpdateDirTimerHistory(direction); + gPlayerAvatar.bikeSpeed = SPEED_STANDING; } - var = b & 0xF; - if (var == (gPlayerAvatar.unk10 & 0xF)) + direction = heldKeys & (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON); // directions is reused for some reason. + if (direction == (gPlayerAvatar.abStartSelectHistory & 0xF)) { - if (gPlayerAvatar.unk1C[0] < 0xFF) - gPlayerAvatar.unk1C[0]++; + if (gPlayerAvatar.abStartSelectTimerHistory[0] < 0xFF) + gPlayerAvatar.abStartSelectTimerHistory[0]++; } else { - sub_80E5CB8(var); - gPlayerAvatar.unkB = 0; + Bike_UpdateABStartSelectHistory(direction); + gPlayerAvatar.bikeSpeed = SPEED_STANDING; } } -static bool8 sub_80E5BC8(const u8 *a, const u8 *b) +static bool8 HasPlayerInputTakenLongerThanList(const u8 *dirTimerList, const u8 *abStartSelectTimerList) { u8 i; - for (i = 0; a[i] != 0; i++) + for (i = 0; dirTimerList[i] != 0; i++) { - if (gPlayerAvatar.unk14[i] > a[i]) + if (gPlayerAvatar.dirTimerHistory[i] > dirTimerList[i]) return FALSE; } - for (i = 0; b[i] != 0; i++) + for (i = 0; abStartSelectTimerList[i] != 0; i++) { - if (gPlayerAvatar.unk1C[i] > b[i]) + if (gPlayerAvatar.abStartSelectTimerHistory[i] > abStartSelectTimerList[i]) return FALSE; } return TRUE; } -static u8 sub_80E5C2C(void) +static u8 AcroBike_GetJumpDirection(void) { u32 i; for (i = 0; i < 4; i++) { - const struct UnknownStruct1 *s = &gUnknown_083DB608[i]; - u32 r1 = gPlayerAvatar.unkC; - u32 r2 = gPlayerAvatar.unk10; - - r1 &= s->unk8; - r2 &= s->unkC; - if (r1 == s->unk0 && r2 == s->unk4 && sub_80E5BC8(s->unk10, s->unk14)) - return s->unk18; + const struct BikeHistoryInputInfo *historyInputInfo = &gAcroBikeTricksList[i]; + u32 dirHistory = gPlayerAvatar.directionHistory; + u32 abStartSelectHistory = gPlayerAvatar.abStartSelectHistory; + + dirHistory &= historyInputInfo->dirHistoryMask; + abStartSelectHistory &= historyInputInfo->abStartSelectHistoryMask; + if (dirHistory == historyInputInfo->dirHistoryMatch && abStartSelectHistory == historyInputInfo->abStartSelectHistoryMatch && HasPlayerInputTakenLongerThanList(historyInputInfo->dirTimerHistoryList, historyInputInfo->abStartSelectHistoryList)) + return historyInputInfo->direction; } return 0; } -static void sub_80E5C7C(u8 a) +static void Bike_UpdateDirTimerHistory(u8 dir) { u8 i; - gPlayerAvatar.unkC = (gPlayerAvatar.unkC << 4) | (a & 0xF); + gPlayerAvatar.directionHistory = (gPlayerAvatar.directionHistory << 4) | (dir & 0xF); for (i = 7; i != 0; i--) - gPlayerAvatar.unk14[i] = gPlayerAvatar.unk14[i - 1]; - gPlayerAvatar.unk14[0] = 1; + gPlayerAvatar.dirTimerHistory[i] = gPlayerAvatar.dirTimerHistory[i - 1]; + gPlayerAvatar.dirTimerHistory[0] = 1; } -static void sub_80E5CB8(u8 a) +static void Bike_UpdateABStartSelectHistory(u8 input) { u8 i; - gPlayerAvatar.unk10 = (gPlayerAvatar.unk10 << 4) | (a & 0xF); + gPlayerAvatar.abStartSelectHistory = (gPlayerAvatar.abStartSelectHistory << 4) | (input & 0xF); for (i = 7; i != 0; i--) - gPlayerAvatar.unk1C[i] = gPlayerAvatar.unk1C[i - 1]; - gPlayerAvatar.unk1C[0] = 1; + gPlayerAvatar.abStartSelectTimerHistory[i] = gPlayerAvatar.abStartSelectTimerHistory[i - 1]; + gPlayerAvatar.abStartSelectTimerHistory[0] = 1; } -static u8 sub_80E5CF4(u16 a) +static u8 Bike_DPadToDirection(u16 heldKeys) { - if (a & 0x40) - return 2; - if (a & 0x80) - return 1; - if (a & 0x20) - return 3; - if (a & 0x10) - return 4; - return 0; + if (heldKeys & DPAD_UP) + return DIR_NORTH; + if (heldKeys & DPAD_DOWN) + return DIR_SOUTH; + if (heldKeys & DPAD_LEFT) + return DIR_WEST; + if (heldKeys & DPAD_RIGHT) + return DIR_EAST; + return DIR_NONE; } static u8 get_some_collision(u8 direction) @@ -829,10 +869,10 @@ static u8 get_some_collision(u8 direction) y = playerMapObj->coords2.y; MoveCoords(direction, &x, &y); metatitleBehavior = MapGridGetMetatileBehaviorAt(x, y); - return sub_80E5DA0(playerMapObj, x, y, direction, metatitleBehavior); + return Bike_CheckCollisionTryAdvanceCollisionCount(playerMapObj, x, y, direction, metatitleBehavior); } -static u8 sub_80E5DA0(struct MapObject *mapObject, s16 x, s16 y, u8 direction, u8 metatitleBehavior) +static u8 Bike_CheckCollisionTryAdvanceCollisionCount(struct MapObject *mapObject, s16 x, s16 y, u8 direction, u8 metatitleBehavior) { u8 collision = CheckForFieldObjectCollision(mapObject, x, y, direction, metatitleBehavior); @@ -843,7 +883,7 @@ static u8 sub_80E5DA0(struct MapObject *mapObject, s16 x, s16 y, u8 direction, u collision = 2; if (collision) - sub_80E5E4C(); + Bike_TryAdvanceCyclingRoadCollisions(); return collision; } @@ -865,10 +905,10 @@ static bool8 IsRunningDisallowedByMetatile(u8 tile) return FALSE; } -static void sub_80E5E4C(void) +static void Bike_TryAdvanceCyclingRoadCollisions(void) { - if (gUnknown_02039250 != 0 && gUnknown_02039251 < 100) - gUnknown_02039251++; + if (gBikeCyclingChallenge != FALSE && gBikeCollisions < 100) + gBikeCollisions++; } static bool8 CanBikeFaceDirOnMetatile(u8 direction, u8 tile) @@ -890,14 +930,14 @@ static bool8 CanBikeFaceDirOnMetatile(u8 direction, u8 tile) return TRUE; } -static bool8 sub_80E5EC0(u8 var1, u8 direction) +static bool8 WillPlayerCollideWithCollision(u8 newTileCollision, u8 direction) { if (direction == DIR_NORTH || direction == DIR_SOUTH) { - if (var1 == 10 || var1 == 12) + if (newTileCollision == 10 || newTileCollision == 12) return FALSE; } - else if (var1 == 11 || var1 == 13) + else if (newTileCollision == 11 || newTileCollision == 13) { return FALSE; } @@ -930,7 +970,7 @@ bool8 player_should_look_direction_be_enforced_upon_movement(void) void GetOnOffBike(u8 var) { - gUnknown_0202E854 = 0; + gUnusedBikeCameraAheadPanback = FALSE; if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE)) { @@ -946,34 +986,34 @@ void GetOnOffBike(u8 var) } } -void BikeClearState(int var1, int var2) +void BikeClearState(int newDirHistory, int newAbStartHistory) { u8 i; gPlayerAvatar.acroBikeState = ACRO_STATE_NORMAL; - gPlayerAvatar.unk9 = 0; + gPlayerAvatar.newDirBackup = DIR_NONE; gPlayerAvatar.bikeFrameCounter = 0; - gPlayerAvatar.unkB = 0; - gPlayerAvatar.unkC = var1; - gPlayerAvatar.unk10 = var2; + gPlayerAvatar.bikeSpeed = SPEED_STANDING; + gPlayerAvatar.directionHistory = newDirHistory; + gPlayerAvatar.abStartSelectHistory = newAbStartHistory; for (i = 0; i < 8; i++) - gPlayerAvatar.unk14[i] = 0; + gPlayerAvatar.dirTimerHistory[i] = 0; for (i = 0; i < 8; i++) - gPlayerAvatar.unk1C[i] = 0; + gPlayerAvatar.abStartSelectTimerHistory[i] = 0; } -void sub_80E6010(u8 var) +void Bike_UpdateBikeCounterSpeed(u8 counter) { - gPlayerAvatar.bikeFrameCounter = var; - gPlayerAvatar.unkB = gPlayerAvatar.bikeFrameCounter + (gPlayerAvatar.bikeFrameCounter >> 1); // lazy way of multiplying by 1.5. + gPlayerAvatar.bikeFrameCounter = counter; + gPlayerAvatar.bikeSpeed = gPlayerAvatar.bikeFrameCounter + (gPlayerAvatar.bikeFrameCounter >> 1); // lazy way of multiplying by 1.5. } -static void sub_80E6024(void) +static void Bike_SetBikeStill(void) { gPlayerAvatar.bikeFrameCounter = 0; - gPlayerAvatar.unkB = 0; + gPlayerAvatar.bikeSpeed = SPEED_STANDING; } s16 GetPlayerSpeed(void) @@ -993,7 +1033,7 @@ s16 GetPlayerSpeed(void) return SPEED_NORMAL; } -void sub_80E6084(void) +void Bike_HandleBumpySlopeJump(void) { s16 x, y; u8 tileBehavior; diff --git a/src/field/field_camera.c b/src/field/field_camera.c index db51cf054..a29f4c49f 100644 --- a/src/field/field_camera.c +++ b/src/field/field_camera.c @@ -7,7 +7,7 @@ #include "sprite.h" #include "text.h" -EWRAM_DATA u8 gUnknown_0202E854 = 0; +EWRAM_DATA bool8 gUnusedBikeCameraAheadPanback = FALSE; struct UnknownStruct { @@ -455,13 +455,14 @@ static void CameraPanningCB_PanAhead(void) { u8 var; - if (gUnknown_0202E854 == 0) + if (gUnusedBikeCameraAheadPanback == FALSE) { InstallCameraPanAheadCallback(); } else { - if (gPlayerAvatar.running1 == 1) + // this code is never reached. + if (gPlayerAvatar.tileTransitionState == T_TILE_TRANSITION) { gUnknown_0300059C ^= 1; if (gUnknown_0300059C == 0) diff --git a/src/field/field_control_avatar.c b/src/field/field_control_avatar.c index ff8e8504c..65357ac83 100644 --- a/src/field/field_control_avatar.c +++ b/src/field/field_control_avatar.c @@ -124,8 +124,8 @@ void FieldClearPlayerInput(struct FieldInput *input) void FieldGetPlayerInput(struct FieldInput *input, u16 newKeys, u16 heldKeys) { - u8 r6 = gPlayerAvatar.running1; - u8 r9 = gPlayerAvatar.running2; + u8 r6 = gPlayerAvatar.tileTransitionState; + u8 r9 = gPlayerAvatar.runningState; bool8 forcedMove = MetatileBehavior_IsMoveTile(cur_mapdata_block_role_at_player_pos(r9)); if ((r6 == 2 && forcedMove == FALSE) || r6 == 0) diff --git a/src/field/field_effect.c b/src/field/field_effect.c index afe020ac7..d86d6e5cd 100644 --- a/src/field/field_effect.c +++ b/src/field/field_effect.c @@ -1287,7 +1287,7 @@ bool8 sub_80867AC(struct Task *task) // gUnknown_0839F2CC[0] playerSprite = &gSprites[gPlayerAvatar.spriteId]; CameraObjectReset2(); gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 1; - gPlayerAvatar.unk6 = 1; + gPlayerAvatar.preventStep = TRUE; FieldObjectSetSpecialAnim(playerObject, GetFaceDirectionAnimId(player_get_direction_lower_nybble())); task->data[4] = playerSprite->subspriteMode; playerObject->mapobj_bit_26 = 1; @@ -1382,7 +1382,7 @@ bool8 sub_80869B8(struct Task *task) bool8 sub_80869F8(struct Task *task) { - gPlayerAvatar.unk6 = 0; + gPlayerAvatar.preventStep = FALSE; ScriptContext2_Disable(); CameraObjectReset1(); UnfreezeMapObjects(); @@ -1678,7 +1678,7 @@ void sub_8086F64(u8 taskId) bool8 sub_8086FB0(struct Task *task, struct MapObject *mapObject) { ScriptContext2_Enable(); - gPlayerAvatar.unk6 = 1; + gPlayerAvatar.preventStep = TRUE; task->data[0]++; return FALSE; } @@ -1725,7 +1725,7 @@ bool8 sub_8087058(struct Task *task, struct MapObject *mapObject) return TRUE; } ScriptContext2_Disable(); - gPlayerAvatar.unk6 = 0; + gPlayerAvatar.preventStep = FALSE; DestroyTask(FindTaskIdByFunc(sub_8086F64)); FieldEffectActiveListRemove(FLDEFF_USE_WATERFALL); return FALSE; @@ -1751,7 +1751,7 @@ void Task_Dive(u8 taskId) bool8 sub_8087124(struct Task *task) { - gPlayerAvatar.unk6 = 1; + gPlayerAvatar.preventStep = TRUE; task->data[0]++; return FALSE; } @@ -1796,7 +1796,7 @@ bool8 sub_808722C(struct Task *task, struct MapObject *mapObject, struct Sprite FreezeMapObjects(); CameraObjectReset2(); SetCameraPanningCallback(NULL); - gPlayerAvatar.unk6 = 1; + gPlayerAvatar.preventStep = TRUE; mapObject->mapobj_bit_26 = 1; task->data[1] = 1; task->data[0]++; @@ -1913,7 +1913,7 @@ bool8 sub_80874CC(struct Task *task, struct MapObject *mapObject, struct Sprite { CameraObjectReset2(); FreezeMapObjects(); - gPlayerAvatar.unk6 = 1; + gPlayerAvatar.preventStep = TRUE; mapObject->mapobj_bit_13 = 1; task->data[0]++; return FALSE; @@ -1951,7 +1951,7 @@ bool8 sub_808759C(struct Task *task, struct MapObject *mapObject, struct Sprite { if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) { - gPlayerAvatar.unk6 = 0; + gPlayerAvatar.preventStep = FALSE; ScriptContext2_Disable(); UnfreezeMapObjects(); DestroyTask(FindTaskIdByFunc(sub_8087470)); @@ -1996,7 +1996,7 @@ bool8 sub_80876C8(struct Task *task, struct MapObject *mapObject, struct Sprite { FreezeMapObjects(); CameraObjectReset2(); - gPlayerAvatar.unk6 = 1; + gPlayerAvatar.preventStep = TRUE; mapObject->mapobj_bit_26 = 1; task->data[0]++; return FALSE; @@ -2893,7 +2893,7 @@ void sub_8088984(struct Task *task) { ScriptContext2_Enable(); FreezeMapObjects(); - gPlayerAvatar.unk6 = 1; + gPlayerAvatar.preventStep = TRUE; SetPlayerAvatarStateMask(8); PlayerGetDestCoords(&task->data[1], &task->data[2]); MoveCoords(gMapObjects[gPlayerAvatar.mapObjectId].placeholder18, &task->data[1], &task->data[2]); @@ -2947,7 +2947,7 @@ void sub_8088AF4(struct Task *task) mapObject = &gMapObjects[gPlayerAvatar.mapObjectId]; if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) { - gPlayerAvatar.unk6 = 0; + gPlayerAvatar.preventStep = FALSE; gPlayerAvatar.flags &= 0xdf; FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(mapObject->placeholder18)); sub_8127ED0(mapObject->mapobj_unk_1A, 1); @@ -3024,7 +3024,7 @@ void sub_8088CA0(struct Task *task) if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) || FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) { task->data[15] = gPlayerAvatar.flags; - gPlayerAvatar.unk6 = 0x01; + gPlayerAvatar.preventStep = TRUE; SetPlayerAvatarStateMask(1); sub_8059BF4(); FieldObjectSetSpecialAnim(mapObject, 0x39); @@ -3296,7 +3296,7 @@ void sub_80892A0(struct Task *task) task->data[0]++; task->data[2] = 17; task->data[15] = gPlayerAvatar.flags; - gPlayerAvatar.unk6 = 1; + gPlayerAvatar.preventStep = TRUE; SetPlayerAvatarStateMask(0x01); if (task->data[15] & 0x08) { @@ -3398,7 +3398,7 @@ void fishE(struct Task *task) sub_805B980(mapObject, GetPlayerAvatarGraphicsIdByStateId(state)); FieldObjectTurn(mapObject, DIR_SOUTH); gPlayerAvatar.flags = task->data[15]; - gPlayerAvatar.unk6 = 0; + gPlayerAvatar.preventStep = FALSE; FieldEffectActiveListRemove(FLDEFF_FLY_IN); DestroyTask(FindTaskIdByFunc(sub_8089270)); } diff --git a/src/field/field_map_obj.c b/src/field/field_map_obj.c index 0cba448a9..9d37d90ad 100644 --- a/src/field/field_map_obj.c +++ b/src/field/field_map_obj.c @@ -5010,7 +5010,7 @@ u8 mss_npc_reset_oampriv3_1_unk2_unk3(struct MapObject *mapObject, struct Sprite u8 sub_805F364(struct MapObject *mapObject, struct Sprite *sprite) { - if (gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1C == 0xFF || gPlayerAvatar.running1 == 2) + if (gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1C == 0xFF || gPlayerAvatar.tileTransitionState == T_TILE_CENTER) { return 0; } @@ -5172,7 +5172,7 @@ fieldmap_object_cb(sub_805F8E0, sub_805F904, gUnknown_083755C0); u8 mss_08062EA4(struct MapObject *mapObject, struct Sprite *sprite) { - if (gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1C == 0xFF || gPlayerAvatar.running1 == 2) + if (gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1C == 0xFF || gPlayerAvatar.tileTransitionState == T_TILE_CENTER) { return 0; } diff --git a/src/field/field_player_avatar.c b/src/field/field_player_avatar.c index 6c1c9123a..e7da9b1b7 100644 --- a/src/field/field_player_avatar.c +++ b/src/field/field_player_avatar.c @@ -31,7 +31,7 @@ static bool8 sub_8058854(struct MapObject *, u8); static void npc_clear_strange_bits(struct MapObject *a); static void MovePlayerAvatarUsingKeypadInput(u8 a, u16 b, u16 c); static void PlayerAllowForcedMovementIfMovingSameDirection(void); -static u8 TryDoMetatileBehaviorForcedMovement(void); +static bool8 TryDoMetatileBehaviorForcedMovement(void); static u8 GetForcedMovementByMetatileBehavior(void); static void MovePlayerNotOnBike(u8 a, u16 b); static u8 CheckMovementInputNotOnBike(u8 a); @@ -49,7 +49,7 @@ static void PlayerNotOnBikeCollide(u8 a); static void PlayCollisionSoundIfNotFacingWarp(u8 a); static void sub_8059D60(struct MapObject *a); static void StartStrengthAnim(u8 a, u8 b); -static void sub_8059F94(void); +static void DoPlayerMatJump(void); static void sub_805A06C(void); static bool8 (*const gUnknown_0830FB58[])(u8) = @@ -73,7 +73,7 @@ static bool8 (*const gUnknown_0830FB58[])(u8) = MetatileBehavior_0xBC, MetatileBehavior_IsMuddySlope, }; -static u8 (*const gUnknown_0830FBA0[])(void) = +static bool8 (*const gUnknown_0830FBA0[])(void) = { ForcedMovement_None, ForcedMovement_Slip, @@ -91,7 +91,7 @@ static u8 (*const gUnknown_0830FBA0[])(void) = ForcedMovement_SlideWest, ForcedMovement_SlideEast, sub_8058B0C, - sub_8058C04, + ForcedMovement_MatJump, sub_8058C10, ForcedMovement_MuddySlope, }; @@ -182,9 +182,9 @@ static u8 (*const gUnknown_0830FC88[])(struct Task *, struct MapObject *, struct sub_8059EA4, sub_8059F40, }; -static u8 (*const gUnknown_0830FC94[])(struct Task *, struct MapObject *) = +static u8 (*const sPlayerAvatarSecretBaseMatJump[])(struct Task *, struct MapObject *) = { - sub_805A000, + PlayerAvatar_DoSecretBaseMatJump, }; static u8 (*const gUnknown_0830FC98[])(struct Task *, struct MapObject *) = { @@ -201,9 +201,9 @@ void player_step(u8 direction, u16 newKeys, u16 heldKeys) struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; sub_8059D60(playerMapObj); - if (gPlayerAvatar.unk6 == 0) + if (gPlayerAvatar.preventStep == FALSE) { - sub_80E5B38(newKeys, heldKeys); + Bike_TryAcroBikeHistoryUpdate(newKeys, heldKeys); if (!sub_8058854(playerMapObj, direction)) { npc_clear_strange_bits(playerMapObj); @@ -256,11 +256,11 @@ static void MovePlayerAvatarUsingKeypadInput(u8 direction, u16 newKeys, u16 held static void PlayerAllowForcedMovementIfMovingSameDirection(void) { - if (gPlayerAvatar.running2 == 2) + if (gPlayerAvatar.runningState == MOVING) gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_5; } -static u8 TryDoMetatileBehaviorForcedMovement(void) +static bool8 TryDoMetatileBehaviorForcedMovement(void) { return gUnknown_0830FBA0[GetForcedMovementByMetatileBehavior()](); } @@ -282,7 +282,7 @@ static u8 GetForcedMovementByMetatileBehavior(void) return 0; } -u8 ForcedMovement_None(void) +bool8 ForcedMovement_None(void) { if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_6) { @@ -293,7 +293,7 @@ u8 ForcedMovement_None(void) FieldObjectSetDirection(playerMapObj, playerMapObj->mapobj_unk_18); gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_6; } - return 0; + return FALSE; } static u8 DoForcedMovement(u8 direction, void (*b)(u8)) @@ -314,13 +314,13 @@ static u8 DoForcedMovement(u8 direction, void (*b)(u8)) if (collisionType == COLLISION_LEDGE_JUMP) PlayerJumpLedge(direction); playerAvatar->flags |= PLAYER_AVATAR_FLAG_6; - playerAvatar->running2 = 2; + playerAvatar->runningState = MOVING; return 1; } } else { - playerAvatar->running2 = 2; + playerAvatar->runningState = MOVING; b(direction); return 1; } @@ -334,47 +334,47 @@ static u8 DoForcedMovementInCurrentDirection(void (*a)(u8)) return DoForcedMovement(playerMapObj->placeholder18, a); } -u8 ForcedMovement_Slip(void) +bool8 ForcedMovement_Slip(void) { - return DoForcedMovementInCurrentDirection(sub_80593C4); + return DoForcedMovementInCurrentDirection(PlayerGoSpeed2); } -u8 sub_8058AAC(void) +bool8 sub_8058AAC(void) { - return DoForcedMovement(1, PlayerGoSpeed0); + return DoForcedMovement(1, PlayerGoSpeed1); } -u8 sub_8058AC4(void) +bool8 sub_8058AC4(void) { - return DoForcedMovement(2, PlayerGoSpeed0); + return DoForcedMovement(2, PlayerGoSpeed1); } -u8 sub_8058ADC(void) +bool8 sub_8058ADC(void) { - return DoForcedMovement(3, PlayerGoSpeed0); + return DoForcedMovement(3, PlayerGoSpeed1); } -u8 sub_8058AF4(void) +bool8 sub_8058AF4(void) { - return DoForcedMovement(4, PlayerGoSpeed0); + return DoForcedMovement(4, PlayerGoSpeed1); } -u8 sub_8058B0C(void) +bool8 sub_8058B0C(void) { return DoForcedMovement(1, npc_use_some_d2s); } -u8 sub_8058B24(void) +bool8 sub_8058B24(void) { return DoForcedMovement(2, npc_use_some_d2s); } -u8 sub_8058B3C(void) +bool8 sub_8058B3C(void) { return DoForcedMovement(3, npc_use_some_d2s); } -u8 sub_8058B54(void) +bool8 sub_8058B54(void) { return DoForcedMovement(4, npc_use_some_d2s); } @@ -388,51 +388,51 @@ static u8 ForcedMovement_Slide(u8 direction, void (*b)(u8)) return DoForcedMovement(direction, b); } -u8 ForcedMovement_SlideSouth(void) +bool8 ForcedMovement_SlideSouth(void) { - return ForcedMovement_Slide(1, sub_80593C4); + return ForcedMovement_Slide(1, PlayerGoSpeed2); } -u8 ForcedMovement_SlideNorth(void) +bool8 ForcedMovement_SlideNorth(void) { - return ForcedMovement_Slide(2, sub_80593C4); + return ForcedMovement_Slide(2, PlayerGoSpeed2); } -u8 ForcedMovement_SlideWest(void) +bool8 ForcedMovement_SlideWest(void) { - return ForcedMovement_Slide(3, sub_80593C4); + return ForcedMovement_Slide(3, PlayerGoSpeed2); } -u8 ForcedMovement_SlideEast(void) +bool8 ForcedMovement_SlideEast(void) { - return ForcedMovement_Slide(4, sub_80593C4); + return ForcedMovement_Slide(4, PlayerGoSpeed2); } -u8 sub_8058C04(void) +bool8 ForcedMovement_MatJump(void) { - sub_8059F94(); - return 1; + DoPlayerMatJump(); + return TRUE; } -u8 sub_8058C10(void) +bool8 sub_8058C10(void) { sub_805A06C(); - return 1; + return TRUE; } -u8 ForcedMovement_MuddySlope(void) +bool8 ForcedMovement_MuddySlope(void) { struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId]; if (playerMapObj->placeholder18 != 2 || GetPlayerSpeed() <= 3) { - sub_80E6010(0); + Bike_UpdateBikeCounterSpeed(0); playerMapObj->mapobj_bit_9 = 1; - return DoForcedMovement(1, sub_80593C4); + return DoForcedMovement(1, PlayerGoSpeed2); } else { - return 0; + return FALSE; } } @@ -445,17 +445,17 @@ static u8 CheckMovementInputNotOnBike(u8 direction) { if (direction == DIR_NONE) { - gPlayerAvatar.running2 = 0; + gPlayerAvatar.runningState = NOT_MOVING; return 0; } - else if (direction != player_get_direction_upper_nybble() && gPlayerAvatar.running2 != 2) + else if (direction != player_get_direction_upper_nybble() && gPlayerAvatar.runningState != MOVING) { - gPlayerAvatar.running2 = 1; + gPlayerAvatar.runningState = TURN_DIRECTION; return 1; } else { - gPlayerAvatar.running2 = 2; + gPlayerAvatar.runningState = MOVING; return 2; } } @@ -486,7 +486,8 @@ void sub_8058D0C(u8 direction, u16 heldKeys) case 0: if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING) { - sub_80593C4(direction); + // speed 2 is fast, same speed as running + PlayerGoSpeed2(direction); return; } if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_4) && (heldKeys & B_BUTTON) && FlagGet(SYS_B_DASH) @@ -497,7 +498,7 @@ void sub_8058D0C(u8 direction, u16 heldKeys) } else { - PlayerGoSpeed0(direction); + PlayerGoSpeed1(direction); } } } @@ -601,14 +602,14 @@ static void check_acro_bike_metatile(int unused1, int unused2, u8 c, u8 *d) void SetPlayerAvatarTransitionFlags(u16 a) { - gPlayerAvatar.bike |= a; + gPlayerAvatar.unk1 |= a; DoPlayerAvatarTransition(); } static void DoPlayerAvatarTransition(void) { u8 i; - u32 flags = gPlayerAvatar.bike; + u32 flags = gPlayerAvatar.unk1; if (flags != 0) { @@ -627,7 +628,7 @@ static void DoPlayerAvatarTransition(void) } #endif } - gPlayerAvatar.bike = 0; + gPlayerAvatar.unk1 = 0; } } @@ -656,7 +657,7 @@ void PlayerAvatarTransition_AcroBike(struct MapObject *a) FieldObjectTurn(a, a->placeholder18); SetPlayerAvatarStateMask(4); BikeClearState(0, 0); - sub_80E6084(); + Bike_HandleBumpySlopeJump(); } void PlayerAvatarTransition_Surfing(struct MapObject *a) @@ -689,18 +690,18 @@ void sub_80591F4(struct MapObject *a) void sub_8059204(void) { - gPlayerAvatar.running1 = 0; + gPlayerAvatar.tileTransitionState = T_NOT_MOVING; if (PlayerIsAnimActive()) { if (!PlayerCheckIfAnimFinishedOrInactive()) { if (!player_is_anim_in_certain_ranges()) - gPlayerAvatar.running1 = 1; + gPlayerAvatar.tileTransitionState = T_TILE_TRANSITION; } else { if (!sub_80592A4()) - gPlayerAvatar.running1 = 2; + gPlayerAvatar.tileTransitionState = T_TILE_CENTER; } } } @@ -721,7 +722,7 @@ static bool8 player_is_anim_in_certain_ranges(void) static bool8 sub_80592A4(void) { - if (player_is_anim_in_certain_ranges() && gPlayerAvatar.running2 != 1) + if (player_is_anim_in_certain_ranges() && gPlayerAvatar.runningState != TURN_DIRECTION) return TRUE; else return FALSE; @@ -761,12 +762,14 @@ void PlayerSetAnimId(u8 animId, u8 b) } } -void PlayerGoSpeed0(u8 a) +// normal speed (1 speed) +void PlayerGoSpeed1(u8 a) { PlayerSetAnimId(GetGoSpeed0AnimId(a), 2); } -void sub_80593C4(u8 a) +// fast speed (2 speed) +void PlayerGoSpeed2(u8 a) { PlayerSetAnimId(sub_8060744(a), 2); } @@ -776,7 +779,8 @@ void npc_use_some_d2s(u8 a) PlayerSetAnimId(d2s_08064034(a), 2); } -void sub_80593F4(u8 a) +// fastest speed (4 speed) +void PlayerGoSpeed4(u8 a) { PlayerSetAnimId(sub_806079C(a), 2); } @@ -816,48 +820,54 @@ void PlayerJumpLedge(u8 direction) void sub_80594C0(void) { - if (gPlayerAvatar.running1 == 2 || gPlayerAvatar.running1 == 0) + if (gPlayerAvatar.tileTransitionState == T_TILE_CENTER || gPlayerAvatar.tileTransitionState == T_NOT_MOVING) { if (player_should_look_direction_be_enforced_upon_movement()) sub_8059348(GetFaceDirectionAnimId(gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_18)); } } -void sub_8059504(u8 a) +// wheelie idle +void PlayerIdleWheelie(u8 a) { PlayerSetAnimId(sub_80609D8(a), 1); } -//normal to wheelie +// normal to wheelie void PlayerStartWheelie(u8 a) { PlayerSetAnimId(sub_8060A04(a), 1); } -void sub_8059534(u8 a) +// wheelie to normal +void PlayerEndWheelie(u8 a) { PlayerSetAnimId(sub_8060A30(a), 1); } -void sub_805954C(u8 a) +// wheelie hopping standing +void PlayerStandingHoppingWheelie(u8 a) { PlaySE(SE_JITE_PYOKO); PlayerSetAnimId(sub_8060A5C(a), 1); } -void sub_8059570(u8 a) +// wheelie hopping moving +void PlayerMovingHoppingWheelie(u8 a) { PlaySE(SE_JITE_PYOKO); PlayerSetAnimId(sub_8060A88(a), 2); } -void sub_8059594(u8 a) +// wheelie hopping ledge +void PlayerLedgeHoppingWheelie(u8 a) { PlaySE(SE_JITE_PYOKO); PlayerSetAnimId(sub_8060AB4(a), 8); } -void sub_80595B8(u8 direction) +// acro turn jump +void PlayerAcroTurnJump(u8 direction) { PlaySE(SE_JITE_PYOKO); PlayerSetAnimId(sub_8060878(direction), 1); @@ -963,8 +973,8 @@ void sub_80597F4(void) FieldObjectSetDirection(playerMapObj, playerMapObj->mapobj_unk_18); if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE)) { - sub_80E6084(); - sub_80E6010(0); + Bike_HandleBumpySlopeJump(); + Bike_UpdateBikeCounterSpeed(0); } } @@ -1060,7 +1070,6 @@ bool8 IsPlayerFacingSurfableFishableWater(void) void ClearPlayerAvatarInfo(void) { - //TODO: 0x24 should be the size of gPlayerAvatar memset(&gPlayerAvatar, 0, sizeof(struct PlayerAvatar)); } @@ -1099,7 +1108,7 @@ void SetPlayerAvatarExtraStateTransition(u8 a, u8 b) { u8 unk = GetPlayerAvatarStateTransitionByGraphicsId(a, gPlayerAvatar.gender); - gPlayerAvatar.bike |= unk | b; + gPlayerAvatar.unk1 |= unk | b; DoPlayerAvatarTransition(); } @@ -1127,8 +1136,8 @@ void InitPlayerAvatar(s16 x, s16 y, u8 direction, u8 gender) mapObject->mapobj_unk_1B = sub_8126B54(); FieldObjectTurn(mapObject, direction); ClearPlayerAvatarInfo(); - gPlayerAvatar.running2 = 0; - gPlayerAvatar.running1 = 0; + gPlayerAvatar.runningState = NOT_MOVING; + gPlayerAvatar.tileTransitionState = T_NOT_MOVING; gPlayerAvatar.mapObjectId = mapObjectId; gPlayerAvatar.spriteId = mapObject->spriteId; gPlayerAvatar.gender = gender; @@ -1212,7 +1221,7 @@ static void sub_8059E2C(u8 taskId) u8 sub_8059E84(struct Task *task, struct MapObject *b, struct MapObject *c) { ScriptContext2_Enable(); - gPlayerAvatar.unk6 = 1; + gPlayerAvatar.preventStep = TRUE; task->data[0]++; return 0; } @@ -1244,7 +1253,7 @@ u8 sub_8059F40(struct Task *task, struct MapObject *b, struct MapObject *c) { FieldObjectClearAnimIfSpecialAnimFinished(b); FieldObjectClearAnimIfSpecialAnimFinished(c); - gPlayerAvatar.unk6 = 0; + gPlayerAvatar.preventStep = FALSE; ScriptContext2_Disable(); DestroyTask(FindTaskIdByFunc(sub_8059E2C)); } @@ -1253,24 +1262,23 @@ u8 sub_8059F40(struct Task *task, struct MapObject *b, struct MapObject *c) /* Some field effect */ -static void sub_8059FB4(u8 taskId); +static void DoPlayerAvatarSecretBaseMatJump(u8 taskId); -static void sub_8059F94(void) +static void DoPlayerMatJump(void) { - u8 taskId = CreateTask(sub_8059FB4, 0xFF); - - sub_8059FB4(taskId); + DoPlayerAvatarSecretBaseMatJump(CreateTask(DoPlayerAvatarSecretBaseMatJump, 0xFF)); } -static void sub_8059FB4(u8 taskId) +static void DoPlayerAvatarSecretBaseMatJump(u8 taskId) { - while (gUnknown_0830FC94[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId])) + while (sPlayerAvatarSecretBaseMatJump[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId])) ; } -u8 sub_805A000(struct Task *task, struct MapObject *mapObject) +// because data[0] is used to call this, it can be inferred that there may have been multiple mat jump functions at one point, so the name for these groups of functions is appropriate in assuming the sole use of mat jump. +u8 PlayerAvatar_DoSecretBaseMatJump(struct Task *task, struct MapObject *mapObject) { - gPlayerAvatar.unk6 = 1; + gPlayerAvatar.preventStep = TRUE; if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject)) { PlaySE(SE_DANSA); @@ -1278,9 +1286,9 @@ u8 sub_805A000(struct Task *task, struct MapObject *mapObject) task->data[1]++; if (task->data[1] > 1) { - gPlayerAvatar.unk6 = 0; - gPlayerAvatar.bike |= 0x20; - DestroyTask(FindTaskIdByFunc(sub_8059FB4)); + gPlayerAvatar.preventStep = FALSE; + gPlayerAvatar.unk1 |= 0x20; + DestroyTask(FindTaskIdByFunc(DoPlayerAvatarSecretBaseMatJump)); } } return 0; @@ -1307,7 +1315,7 @@ u8 sub_805A0D8(struct Task *task, struct MapObject *mapObject) { task->data[0]++; task->data[1] = mapObject->placeholder18; - gPlayerAvatar.unk6 = 1; + gPlayerAvatar.preventStep = TRUE; ScriptContext2_Enable(); PlaySE(SE_TK_WARPIN); return 1; @@ -1349,7 +1357,7 @@ u8 sub_805A1B8(struct Task *task, struct MapObject *mapObject) { FieldObjectSetSpecialAnim(mapObject, GetSimpleGoAnimId(GetOppositeDirection(task->data[1]))); ScriptContext2_Disable(); - gPlayerAvatar.unk6 = 0; + gPlayerAvatar.preventStep = FALSE; DestroyTask(FindTaskIdByFunc(sub_805A08C)); } return 0; @@ -1369,7 +1377,7 @@ void sub_805A20C(u8 a) Overworld_ChangeMusicToDefault(); gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_SURFING; gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_ON_FOOT; - gPlayerAvatar.unk6 = 1; + gPlayerAvatar.preventStep = TRUE; taskId = CreateTask(taskFF_0805D1D4, 0xFF); gTasks[taskId].data[0] = a; taskFF_0805D1D4(taskId); @@ -1397,7 +1405,7 @@ static void sub_805A2D0(u8 taskId) { sub_805B980(playerMapObj, GetPlayerAvatarGraphicsIdByStateId(0)); FieldObjectSetSpecialAnim(playerMapObj, GetFaceDirectionAnimId(playerMapObj->mapobj_unk_18)); - gPlayerAvatar.unk6 = 0; + gPlayerAvatar.preventStep = FALSE; ScriptContext2_Disable(); DestroySprite(&gSprites[playerMapObj->mapobj_unk_1A]); DestroyTask(taskId); @@ -1462,7 +1470,7 @@ static void Task_Fishing(u8 taskId) u8 Fishing1(struct Task *task) { ScriptContext2_Enable(); - gPlayerAvatar.unk6 = 1; + gPlayerAvatar.preventStep = TRUE; task->tStep++; return 0; } @@ -1647,7 +1655,7 @@ u8 Fishing11(struct Task *task) if (task->tFrameCounter != 0) { - gPlayerAvatar.unk6 = 0; + gPlayerAvatar.preventStep = FALSE; ScriptContext2_Disable(); FishingWildEncounter(task->tFishingRod); sub_80BE97C(1); @@ -1707,7 +1715,7 @@ u8 Fishing16(struct Task *task) { if (MenuUpdateWindowText()) { - gPlayerAvatar.unk6 = 0; + gPlayerAvatar.preventStep = FALSE; ScriptContext2_Disable(); UnfreezeMapObjects(); MenuZeroFillScreen(); diff --git a/src/field/field_special_scene.c b/src/field/field_special_scene.c index d4b59c8a2..255b1d42b 100644 --- a/src/field/field_special_scene.c +++ b/src/field/field_special_scene.c @@ -18,6 +18,52 @@ #define SECONDS(value) ((signed) (60.0 * value + 0.5)) +// TODO: Move somewhere else +enum +{ + STEP_17 = 0x17, + STEP_18, + STEP_END = 0xFE, +}; + +const u32 gMapObjectPic_MovingBox[] = INCBIN_U32("graphics/map_objects/pics/misc/moving_box.4bpp"); +const u16 gMapObjectPalette19[] = INCBIN_U16("graphics/map_objects/palettes/19.gbapal"); + +static const s8 gTruckCamera_HorizontalTable[] = +{ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 2, + 2, + 2, + 2, + 2, + 2, + -1, + -1, + -1, + 0, +}; + +const u8 gUnknown_083D295F[] = +{ + STEP_18, + STEP_END, +}; + +const u8 gUnknown_083D2961[] = +{ + STEP_17, + STEP_END, +}; + // porthole states enum { @@ -27,12 +73,7 @@ enum EXIT_PORTHOLE, }; -extern s8 gTruckCamera_HorizontalTable[]; - -extern u8 gUnknown_083D295F[]; -extern u8 gUnknown_083D2961[]; - -s32 GetTruckCameraBobbingY(int a1) +s16 GetTruckCameraBobbingY(int a1) { if (!(a1 % 120)) return -1; @@ -42,7 +83,7 @@ s32 GetTruckCameraBobbingY(int a1) return 0; } -s32 GetTruckBoxMovement(int a1) // for the box movement? +s16 GetTruckBoxMovement(int a1) // for the box movement? { if (!((a1 + 120) % 180)) return -1; @@ -54,27 +95,22 @@ void Task_Truck1(u8 taskId) { s16 *data = gTasks[taskId].data; s16 cameraYpan; - s16 box1 = 0; - s16 box2 = 0; - s16 box3 = 0; - u8 mapNum, mapGroup; - register s16 zero asm("r4"); + s16 cameraXpan = 0; + s16 box1, box2, box3; box1 = GetTruckBoxMovement(data[0] + 30) * 4; // top box. - sub_805BD90(1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 3, box1 + 3); + sub_805BD90(1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 3 - cameraXpan, box1 + 3); box2 = GetTruckBoxMovement(data[0]) * 2; // bottom left box. - sub_805BD90(2, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 0, box2 - 3); + sub_805BD90(2, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, -cameraXpan, box2 - 3); box3 = GetTruckBoxMovement(data[0]) * 4; // bottom right box. - mapNum = gSaveBlock1.location.mapNum; - mapGroup = gSaveBlock1.location.mapGroup; - zero = 0; - sub_805BD90(3, mapNum, mapGroup, -3, box3); + sub_805BD90(3, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, -3 - cameraXpan, box3); if (++data[0] == SECONDS(500)) // this will never run - data[0] = zero; // reset the timer if it gets stuck. + data[0] = 0; // reset the timer if it gets stuck. + // this also matches with directly calling GetTruckCameraBobbingY within SetCameraPanning, but this is consistent with a later function that requires a temp variable. cameraYpan = GetTruckCameraBobbingY(data[0]); - SetCameraPanning(0, cameraYpan); + SetCameraPanning(cameraXpan, cameraYpan); } void Task_Truck2(u8 taskId) @@ -82,9 +118,7 @@ void Task_Truck2(u8 taskId) s16 *data = gTasks[taskId].data; s16 cameraYpan; s16 cameraXpan; - s16 box1; - s16 box2; - s16 box3; + s16 box1, box2, box3; data[0]++; data[2]++; @@ -137,7 +171,7 @@ void Task_Truck3(u8 taskId) { cameraXpan = gTruckCamera_HorizontalTable[data[1]]; cameraYpan = 0; - SetCameraPanning(cameraXpan, 0); + SetCameraPanning(cameraXpan, cameraYpan); sub_805BD90(1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, 3 - cameraXpan, cameraYpan + 3); sub_805BD90(2, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, -cameraXpan, cameraYpan - 3); sub_805BD90(3, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, -3 - cameraXpan, cameraYpan); diff --git a/src/field/field_specials.c b/src/field/field_specials.c index 36362d098..899905429 100644 --- a/src/field/field_specials.c +++ b/src/field/field_specials.c @@ -48,9 +48,9 @@ extern u16 gSpecialVar_0x8004; extern u16 gSpecialVar_0x8005; extern u16 gScriptResult; -EWRAM_DATA u8 gUnknown_02039250 = 0; -EWRAM_DATA u8 gUnknown_02039251 = 0; -EWRAM_DATA u32 gUnknown_02039254 = 0; +EWRAM_DATA bool8 gBikeCyclingChallenge = FALSE; +EWRAM_DATA u8 gBikeCollisions = 0; +EWRAM_DATA u32 gBikeCyclingTimer = 0; EWRAM_DATA u8 gUnknown_02039258 = 0; EWRAM_DATA u8 gUnknown_02039259 = 0; EWRAM_DATA u8 gUnknown_0203925A = 0; @@ -76,16 +76,16 @@ void ScrSpecial_ViewWallClock(void) void ResetCyclingRoadChallengeData(void) { - gUnknown_02039250 = 0; - gUnknown_02039251 = 0; - gUnknown_02039254 = 0; + gBikeCyclingChallenge = FALSE; + gBikeCollisions = 0; + gBikeCyclingTimer = 0; } void ScrSpecial_BeginCyclingRoadChallenge(void) { - gUnknown_02039250 = 1; - gUnknown_02039251 = 0; - gUnknown_02039254 = gMain.vblankCounter1; + gBikeCyclingChallenge = TRUE; + gBikeCollisions = 0; + gBikeCyclingTimer = gMain.vblankCounter1; } u16 GetPlayerAvatarBike(void) @@ -171,10 +171,10 @@ static void DetermineCyclingRoadResults(u32 arg0, u8 arg1) } void FinishCyclingRoadChallenge(void) { - const u32 time = gMain.vblankCounter1 - gUnknown_02039254; + const u32 time = gMain.vblankCounter1 - gBikeCyclingTimer; - DetermineCyclingRoadResults(time, gUnknown_02039251); - RecordCyclingRoadResults(time, gUnknown_02039251); + DetermineCyclingRoadResults(time, gBikeCollisions); + RecordCyclingRoadResults(time, gBikeCollisions); } static void RecordCyclingRoadResults(u32 arg0, u8 arg1) { diff --git a/src/field/map_obj_lock.c b/src/field/map_obj_lock.c index 2856320b8..91feaf177 100644 --- a/src/field/map_obj_lock.c +++ b/src/field/map_obj_lock.c @@ -10,7 +10,7 @@ extern u16 gScriptFacing; bool8 walkrun_is_standing_still(void) { - if (gPlayerAvatar.running1 == 1) + if (gPlayerAvatar.tileTransitionState == T_TILE_TRANSITION) return FALSE; else return TRUE; diff --git a/src/field/script_movement.c b/src/field/script_movement.c index 30e10b451..c7ce55171 100644 --- a/src/field/script_movement.c +++ b/src/field/script_movement.c @@ -5,19 +5,19 @@ #include "task.h" #include "util.h" -static EWRAM_DATA u8 *gUnknown_020384F8[16] = {0}; +static EWRAM_DATA const u8 *gUnknown_020384F8[16] = {0}; static void sub_80A2198(u8); static u8 sub_80A21E0(void); -static bool8 sub_80A21F4(u8, u8, u8 *); +static bool8 sub_80A21F4(u8, u8, const u8 *); static u8 sub_80A2260(u8, u8); static bool8 sub_80A2370(u8, u8); -static void sub_80A23C8(u8, u8, u8, u8 *); +static void sub_80A23C8(u8, u8, u8, const u8 *); static void UnfreezeObjects(u8); static void Task_80A244C(u8); -static void sub_80A2490(u8, u8, u8, u8 *); +static void sub_80A2490(u8, u8, u8, const u8 *); -bool8 ScriptMovement_StartObjectMovementScript(u8 localId, u8 mapNum, u8 mapGroup, u8 *movementScript) +bool8 ScriptMovement_StartObjectMovementScript(u8 localId, u8 mapNum, u8 mapGroup, const u8 *movementScript) { u8 mapObjId; @@ -70,7 +70,7 @@ static u8 sub_80A21E0(void) return FindTaskIdByFunc(Task_80A244C); } -static bool8 sub_80A21F4(u8 taskId, u8 mapObjId, u8 *movementScript) +static bool8 sub_80A21F4(u8 taskId, u8 mapObjId, const u8 *movementScript) { u8 r4; @@ -160,17 +160,17 @@ static bool8 sub_80A2370(u8 taskId, u8 b) return FALSE; } -static void npc_obj_offscreen_culling_and_flag_update(u8 a, u8 *movementScript) +static void npc_obj_offscreen_culling_and_flag_update(u8 a, const u8 *movementScript) { gUnknown_020384F8[a] = movementScript; } -static u8 *sub_80A23B8(u8 a) +static const u8 *sub_80A23B8(u8 a) { return gUnknown_020384F8[a]; } -static void sub_80A23C8(u8 taskId, u8 b, u8 mapObjId, u8 *movementScript) +static void sub_80A23C8(u8 taskId, u8 b, u8 mapObjId, const u8 *movementScript) { sub_80A2318(taskId, b); npc_obj_offscreen_culling_and_flag_update(b, movementScript); @@ -203,7 +203,7 @@ static void Task_80A244C(u8 taskId) } } -static void sub_80A2490(u8 taskId, u8 b, u8 mapObjId, u8 *d) +static void sub_80A2490(u8 taskId, u8 b, u8 mapObjId, const u8 *d) { u8 var; diff --git a/src/rom6.c b/src/rom6.c index b91a9b2c0..32b5f52a5 100644 --- a/src/rom6.c +++ b/src/rom6.c @@ -59,7 +59,7 @@ static void task08_080C9820(u8 taskId) u8 mapObjId; ScriptContext2_Enable(); - gPlayerAvatar.unk6 = 1; + gPlayerAvatar.preventStep = TRUE; mapObjId = gPlayerAvatar.mapObjectId; if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(&gMapObjects[mapObjId]) || FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[mapObjId])) @@ -112,7 +112,7 @@ static void sub_810B4CC(u8 taskId) void (*func)(void) = (void (*)(void))(((u16)gTasks[taskId].data[8] << 16) | (u16)gTasks[taskId].data[9]); func(); - gPlayerAvatar.unk6 = 0; + gPlayerAvatar.preventStep = FALSE; DestroyTask(taskId); } diff --git a/src/scene/intro.c b/src/scene/intro.c index dd7cc858c..a6dd23c92 100644 --- a/src/scene/intro.c +++ b/src/scene/intro.c @@ -768,7 +768,7 @@ const struct SpritePalette gIntro3MiscPal_Table[] = const u32 unusedData = 0x02000000; static void MainCB2_EndIntro(void); -static void Task_IntroLoadPart1Graphics(u8); +void Task_IntroLoadPart1Graphics(u8); static void Task_IntroFadeIn(u8); static void Task_IntroWaterDrops(u8); static void Task_IntroScrollDownAndShowEon(u8); @@ -938,7 +938,7 @@ void CB2_InitCopyrightScreenAfterTitleScreen(void) SetUpCopyrightScreen(); } -static void Task_IntroLoadPart1Graphics(u8 taskId) +void Task_IntroLoadPart1Graphics(u8 taskId) { SetVBlankCallback(NULL); gUnknown_02039318 = Random() & 1; |