diff options
author | ProjectRevoTPP <projectrevotpp@hotmail.com> | 2017-01-20 17:43:41 -0500 |
---|---|---|
committer | YamaArashi <YamaArashi@users.noreply.github.com> | 2017-01-20 14:43:41 -0800 |
commit | cf0a4dbb86f164026fa2028ef5d0d4a5a419c9c3 (patch) | |
tree | b7daf555678f46533ad5fcc245f58790290acf36 /src | |
parent | 9274e189277ab6ec4d4efb90cb9e18145a8fec38 (diff) |
start decompiling bike.c (#203)
* start decompiling bike.c
* decompile more of bike.c
* decompile MovePlayerOnAcroBike and CheckMovementInputAcroBike
Diffstat (limited to 'src')
-rw-r--r-- | src/bike.c | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/src/bike.c b/src/bike.c new file mode 100644 index 000000000..35c6dc97d --- /dev/null +++ b/src/bike.c @@ -0,0 +1,210 @@ +#include "global.h" +#include "global.fieldmap.h" +#include "flags.h" +#include "asm.h" +#include "field_player_avatar.h" + +extern void (*gUnknown_083DB594[])(u8); +extern void (*gUnknown_083DB5A4[])(u8); +extern void (*gUnknown_083DB5B0[])(u8); +extern u8 (*gUnknown_083DB5E4[])(u8 *, u16, u16); + +extern void sub_80E6024(void); +extern u8 sub_80E5E70(u8, u8); +extern void PlayerOnBikeCollide(u8); +extern u8 sub_80E5D34(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 MovePlayerOnBike(u8 var1, u16 var2, u16 var3) +{ + if(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MACH_BIKE) + MovePlayerOnMachBike(var1, var2, var3); + else + MovePlayerOnAcroBike(var1, var2, var3); +} + +void MovePlayerOnMachBike(u8 var1, u16 var2, u16 var3) +{ + gUnknown_083DB594[CheckMovementInputMachBike(&var1) & 0x3FF](var1); // var2 and var3 arent used? +} + +u8 CheckMovementInputMachBike(u8 *ptr) +{ + u8 direction = player_get_direction_upper_nybble(); + + if (*ptr == 0) + { + *ptr = direction; + if (gPlayerAvatar.unkB == 0) + { + gPlayerAvatar.running2 = 0; + return 0; + } + gPlayerAvatar.running2 = 2; + return 3; + } + + if (*ptr != direction && gPlayerAvatar.running2 != 2) + { + if (gPlayerAvatar.unkB != 0) + { + *ptr = direction; + gPlayerAvatar.running2 = 2; + return 3; + } + gPlayerAvatar.running2 = 1; + return 1; + } + else + { + gPlayerAvatar.running2 = 2; + return 2; + } +} + +void sub_80E5168(u8 var) +{ + PlayerFaceDirection(var); + sub_80E6024(); +} + +void sub_80E517C(u8 var) +{ + struct MapObject *mapPtr = &gMapObjects[gPlayerAvatar.mapObjectId]; + + if(sub_80E5E70(var, mapPtr->mapobj_unk_1E)) + { + PlayerTurnInPlace(var); + sub_80E6024(); + } + else + sub_80E5168(mapPtr->mapobj_unk_18); +} + +void sub_80E51C4(u8 var) +{ + struct MapObject *mapPtr = &gMapObjects[gPlayerAvatar.mapObjectId]; + u8 funcVar; + + if(sub_80E5E70(var, mapPtr->mapobj_unk_1E) == 0) + { + if(gPlayerAvatar.unkB) + sub_80E5270(mapPtr->placeholder18); + else + sub_80E5168(mapPtr->placeholder18); + } + else + { + funcVar = sub_80E5D34(var); + if (funcVar > 0 && funcVar < 12) + { + if(funcVar == 6) + PlayerJumpLedge(var); + else + { + sub_80E6024(); + if((u8)(funcVar - 5) > 3) + PlayerOnBikeCollide(var); + } + } + 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++; + } + } +} + +void sub_80E5270(u8 var) +{ + u8 funcVar; + + if(gPlayerAvatar.unkB != 0) + gPlayerAvatar.unkA = --gPlayerAvatar.unkB; + + funcVar = sub_80E5D34(var); + + if (funcVar > 0 && funcVar < 12) + { + if(funcVar == 6) + PlayerJumpLedge(var); + else + { + sub_80E6024(); + if((u8)(funcVar - 5) > 3) + PlayerOnBikeCollide(var); + } + } + else + gUnknown_083DB5A4[gPlayerAvatar.unkA](var); +} + +void MovePlayerOnAcroBike(u8 var1, u16 var2, u16 var3) +{ + gUnknown_083DB5B0[CheckMovementInputAcroBike(&var1, var2, var3) & 0x3FF](var1); +} + +u8 CheckMovementInputAcroBike(u8 *ptr, u16 var1, u16 var2) +{ + return gUnknown_083DB5E4[gPlayerAvatar.unk8](ptr, var1, var2); +} + +/*u8 CheckMovementInputAcroBikeNormal(u8 *ptr, u16 var1, u16 var2) +{ + u8 playerDir = player_get_direction_upper_nybble(); + u8 result; + gPlayerAvatar.unkA = 0; + + if(*ptr == 0) + { + if(var1 & 2) + { + *ptr = playerDir; + gPlayerAvatar.running2 = *ptr; + gPlayerAvatar.unk8 = 2; + return 3; + } + else + { + *ptr = playerDir; + gPlayerAvatar.running2 = *ptr; + return 0; + } + } + else if(*ptr == playerDir) + { + if(var2 & 2 && gPlayerAvatar.unkB == 0) + { + gPlayerAvatar.unkB++; + gPlayerAvatar.unk8 = 4; + return 11; + } + else if(gPlayerAvatar.unkB == playerDir) + { + result = 2; + gPlayerAvatar.running2 = result; + return result; + } + } + if(gPlayerAvatar.running2 == 2) + { + result = 2; + gPlayerAvatar.running2 = result; + return result; + } + else + { + gPlayerAvatar.unk8 = 1; + gPlayerAvatar.unk9 = *ptr; + gPlayerAvatar.running2 = 0; + return CheckMovementInputAcroBike(ptr, var1, var2); + } +}*/ |