1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
#ifndef GUARD_BIKE_H
#define GUARD_BIKE_H
// 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 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
enum
{
SPEED_STANDING,
SPEED_NORMAL,
SPEED_FAST,
SPEED_FASTER,
SPEED_FASTEST,
};
// 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,
ACRO_STATE_TURNING,
ACRO_STATE_WHEELIE_STANDING,
ACRO_STATE_BUNNY_HOP,
ACRO_STATE_WHEELIE_MOVING,
ACRO_STATE_SIDE_JUMP,
ACRO_STATE_TURN_JUMP,
};
// Acro bike transitions
enum
{
ACRO_TRANS_FACE_DIRECTION,
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 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 Bike_UpdateBikeCounterSpeed(u8 var);
s16 GetPlayerSpeed(void);
void Bike_HandleBumpySlopeJump(void);
#endif
|