diff options
author | ProjectRevoTPP <projectrevotpp@hotmail.com> | 2017-01-21 04:36:36 -0500 |
---|---|---|
committer | YamaArashi <YamaArashi@users.noreply.github.com> | 2017-01-21 01:36:36 -0800 |
commit | 50d60b4403c8f8395bb0d11f9767304a8d25b3ac (patch) | |
tree | 74614c85e023ad959a3af89e625a629e23e38904 /src | |
parent | 1d5f2f64f297017d2b0642b9939ca6dc7650c5cd (diff) |
finish decompiling bike.c (#207)
* decompile first few functions of field_map_obj.c
* formatting
* almost finish decompiling bike.c
* finish decompiling bike.c
Diffstat (limited to 'src')
-rw-r--r-- | src/bike.c | 183 |
1 files changed, 182 insertions, 1 deletions
diff --git a/src/bike.c b/src/bike.c index c08401010..90c61b815 100644 --- a/src/bike.c +++ b/src/bike.c @@ -7,6 +7,7 @@ #include "metatile_behavior.h" #include "songs.h" #include "sound.h" +#include "rom4.h" struct UnknownStruct1 { @@ -19,6 +20,10 @@ struct UnknownStruct1 u32 unk18; }; +extern u8 gUnknown_02039250; +extern u8 gUnknown_02039251; +extern u8 gUnknown_0202E854; + extern u8 gUnknown_0202E86C[]; extern u8 gUnknown_0202E874[]; @@ -61,10 +66,25 @@ u8 sub_80E5DA0(struct MapObject *, s16, s16, u8, u8); extern void sub_80E5E4C(); extern u8 sub_80E5E70(u8, u8); extern void sub_80E6024(void); -extern u8 sub_80E5EC0(); extern u8 IsRunningDisallowedByMetatile(u8); extern u8 sub_80608A4(u8); +void MovePlayerOnMachBike(u8, u16, u16); +u8 CheckMovementInputMachBike(u8 *); +u8 CheckMovementInputAcroBike(u8 *, u16, u16); +void sub_80E5168(u8); +void sub_80E5270(u8); +void MovePlayerOnAcroBike(u8, u16, u16); +void sub_80E5B60(u16, u16); +u8 sub_80E5CF4(u16); +static void sub_80E5C7C(u8); +static void sub_80E5CB8(u8); +u8 sub_80E5C2C(void); +u8 sub_80E5DA0(struct MapObject *mapObject, s16 x, s16 y, u8 direction, u8 metatitleBehavior); +void sub_80E5E4C(); +u8 sub_80E5E70(u8, u8); +u8 sub_80E5EC0(u8, u8); + static void (*const gUnknown_083DB594[])(u8) = { sub_80E5168, @@ -822,3 +842,164 @@ u8 sub_80E5DA0(struct MapObject *mapObject, s16 x, s16 y, u8 direction, u8 metat return r4; } + +bool8 sub_80E5DEC(u8 tile) +{ + if(IsRunningDisallowedByMetatile(tile) != FALSE || gMapHeader.mapType == MAP_TYPE_INDOOR) + return TRUE; + else + return FALSE; +} + +bool8 IsRunningDisallowedByMetatile(u8 tile) +{ + if(MetatileBehavior_IsRunningDisallowed(tile) != FALSE) + return TRUE; + else if(MetatileBehavior_IsFortreeBridge(tile) == FALSE) + return FALSE; + else if((PlayerGetZCoord() & 1) != 0) + return FALSE; + else + return TRUE; +} + +void sub_80E5E4C(void) +{ + if(gUnknown_02039250 != 0 && gUnknown_02039251 < 100) + gUnknown_02039251++; +} + +bool8 sub_80E5E70(u8 var1, u8 var2) +{ + if (var1 > 2 && var1 < 5) + { + if (MetatileBehavior_IsIsolatedVerticalRail(var2) + || MetatileBehavior_IsVerticalRail(var2)) + return FALSE; + } + else + { + if (MetatileBehavior_IsIsolatedHorizontalRail(var2) + || MetatileBehavior_IsHorizontalRail(var2)) + return FALSE; + + } + return TRUE; +} + +bool8 sub_80E5EC0(u8 var1, u8 var2) +{ + if((u8)(var2 - 1) < 2) + { + if(var1 == 10 || var1 == 12) + return FALSE; + } + else if(var1 == 11 || var1 == 13) + return FALSE; + + return TRUE; +} + +bool8 IsBikingDisallowedByPlayer(void) +{ + s16 x, y; + u8 tileBehavior; + + if(!(gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_SURFING | PLAYER_AVATAR_FLAG_4))) + { + PlayerGetDestCoords(&x, &y); + tileBehavior = MapGridGetMetatileBehaviorAt(x, y); + if(IsRunningDisallowedByMetatile(tileBehavior) == FALSE) + return FALSE; + } + return TRUE; +} + +bool8 player_should_look_direction_be_enforced_upon_movement(void) +{ + if(TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_ACRO_BIKE) != FALSE && MetatileBehavior_IsBumpySlope(gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1E) != FALSE) + return FALSE; + else + return TRUE; +} + +void GetOnOffBike(u8 var) +{ + gUnknown_0202E854 = 0; + + if(gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE)) + { + SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT); + sav1_reset_battle_music_maybe(); + sub_8053E90(); + } + else + { + SetPlayerAvatarTransitionFlags(var); + sav1_set_battle_music_maybe(0x193); + sub_8053FB0(0x193); + } +} + +void sub_80E5FCC(int var1, int var2) +{ + u8 i; + + gPlayerAvatar.unk8 = 0; + gPlayerAvatar.unk9 = 0; + gPlayerAvatar.unkA = 0; + gPlayerAvatar.unkB = 0; + gPlayerAvatar.unkC = var1; + gPlayerAvatar.unk10 = var2; + + for(i = 0; i < 8; i++) + gPlayerAvatar.unk14[i] = 0; + + for(i = 0; i < 8; i++) + gPlayerAvatar.unk1C[i] = 0; +} + +void sub_80E6010(u8 var) +{ + gPlayerAvatar.unkA = var; + gPlayerAvatar.unkB = gPlayerAvatar.unkA + (gPlayerAvatar.unkA >> 1); // lazy way of multiplying by 1.5. +} + +void sub_80E6024(void) +{ + gPlayerAvatar.unkA = 0; + gPlayerAvatar.unkB = 0; +} + +s16 sub_80E6034(void) +{ + s16 arr[3]; + + memcpy(arr, gUnknown_083DB600, sizeof(arr)); + + if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MACH_BIKE) + return arr[gPlayerAvatar.unkA]; + else if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_ACRO_BIKE) + return 3; + else if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_SURFING | PLAYER_AVATAR_FLAG_DASH)) + return 2; + else + return 1; +} + +void sub_80E6084(void) +{ + s16 x, y; + u8 tileBehavior; + + if(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_ACRO_BIKE) + { + PlayerGetDestCoords(&x, &y); + tileBehavior = MapGridGetMetatileBehaviorAt(x, y); + if(MetatileBehavior_IsBumpySlope(tileBehavior) != FALSE) + { + gPlayerAvatar.unk8 = 2; + sub_8059C94(player_get_direction_upper_nybble()); + } + } +} |