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 | |
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
-rw-r--r-- | asm/bike.s | 424 | ||||
-rw-r--r-- | include/asm.inc.h | 2 | ||||
-rw-r--r-- | include/field_player_avatar.h | 2 | ||||
-rw-r--r-- | include/rom4.h | 2 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/bike.c | 183 |
6 files changed, 185 insertions, 429 deletions
diff --git a/asm/bike.s b/asm/bike.s deleted file mode 100644 index fac8599de..000000000 --- a/asm/bike.s +++ /dev/null @@ -1,424 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_80E5DEC -sub_80E5DEC: @ 80E5DEC - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl IsRunningDisallowedByMetatile - lsls r0, 24 - cmp r0, 0 - bne _080E5E04 - ldr r0, _080E5E08 @ =gMapHeader - ldrb r0, [r0, 0x17] - cmp r0, 0x8 - bne _080E5E0C -_080E5E04: - movs r0, 0x1 - b _080E5E0E - .align 2, 0 -_080E5E08: .4byte gMapHeader -_080E5E0C: - movs r0, 0 -_080E5E0E: - pop {r1} - bx r1 - thumb_func_end sub_80E5DEC - - thumb_func_start IsRunningDisallowedByMetatile -IsRunningDisallowedByMetatile: @ 80E5E14 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl MetatileBehavior_IsRunningDisallowed - lsls r0, 24 - cmp r0, 0 - bne _080E5E3E - adds r0, r4, 0 - bl MetatileBehavior_IsFortreeBridge - lsls r0, 24 - cmp r0, 0 - beq _080E5E42 - bl PlayerGetZCoord - movs r1, 0x1 - ands r1, r0 - cmp r1, 0 - bne _080E5E42 -_080E5E3E: - movs r0, 0x1 - b _080E5E44 -_080E5E42: - movs r0, 0 -_080E5E44: - pop {r4} - pop {r1} - bx r1 - thumb_func_end IsRunningDisallowedByMetatile - - thumb_func_start sub_80E5E4C -sub_80E5E4C: @ 80E5E4C - push {lr} - ldr r0, _080E5E68 @ =gUnknown_02039250 - ldrb r0, [r0] - cmp r0, 0 - beq _080E5E62 - ldr r1, _080E5E6C @ =gUnknown_02039251 - ldrb r0, [r1] - cmp r0, 0x63 - bhi _080E5E62 - adds r0, 0x1 - strb r0, [r1] -_080E5E62: - pop {r0} - bx r0 - .align 2, 0 -_080E5E68: .4byte gUnknown_02039250 -_080E5E6C: .4byte gUnknown_02039251 - thumb_func_end sub_80E5E4C - - thumb_func_start sub_80E5E70 -sub_80E5E70: @ 80E5E70 - push {r4,r5,lr} - lsls r0, 24 - lsls r1, 24 - lsrs r4, r1, 24 - adds r5, r4, 0 - movs r1, 0xFD - lsls r1, 24 - adds r0, r1 - lsrs r0, 24 - cmp r0, 0x1 - bhi _080E5E9A - adds r0, r4, 0 - bl MetatileBehavior_IsIsolatedVerticalRail - lsls r0, 24 - cmp r0, 0 - bne _080E5EB2 - adds r0, r4, 0 - bl MetatileBehavior_IsVerticalRail - b _080E5EAC -_080E5E9A: - adds r0, r5, 0 - bl MetatileBehavior_IsIsolatedHorizontalRail - lsls r0, 24 - cmp r0, 0 - bne _080E5EB2 - adds r0, r5, 0 - bl MetatileBehavior_IsHorizontalRail -_080E5EAC: - lsls r0, 24 - cmp r0, 0 - beq _080E5EB6 -_080E5EB2: - movs r0, 0 - b _080E5EB8 -_080E5EB6: - movs r0, 0x1 -_080E5EB8: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80E5E70 - - thumb_func_start sub_80E5EC0 -sub_80E5EC0: @ 80E5EC0 - push {lr} - lsls r0, 24 - lsrs r0, 24 - adds r2, r0, 0 - lsls r1, 24 - movs r3, 0xFF - lsls r3, 24 - adds r1, r3 - lsrs r1, 24 - cmp r1, 0x1 - bhi _080E5EE0 - cmp r0, 0xA - beq _080E5EE8 - cmp r0, 0xC - bne _080E5EEC - b _080E5EE8 -_080E5EE0: - cmp r2, 0xB - beq _080E5EE8 - cmp r2, 0xD - bne _080E5EEC -_080E5EE8: - movs r0, 0 - b _080E5EEE -_080E5EEC: - movs r0, 0x1 -_080E5EEE: - pop {r1} - bx r1 - thumb_func_end sub_80E5EC0 - - thumb_func_start IsBikingDisallowedByPlayer -IsBikingDisallowedByPlayer: @ 80E5EF4 - push {r4,lr} - sub sp, 0x4 - ldr r0, _080E5F30 @ =gPlayerAvatar - ldrb r1, [r0] - movs r0, 0x18 - ands r0, r1 - cmp r0, 0 - bne _080E5F34 - mov r4, sp - adds r4, 0x2 - mov r0, sp - adds r1, r4, 0 - bl PlayerGetDestCoords - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0 - ldrsh r1, [r4, r2] - bl MapGridGetMetatileBehaviorAt - lsls r0, 24 - lsrs r0, 24 - bl IsRunningDisallowedByMetatile - lsls r0, 24 - cmp r0, 0 - bne _080E5F34 - movs r0, 0 - b _080E5F36 - .align 2, 0 -_080E5F30: .4byte gPlayerAvatar -_080E5F34: - movs r0, 0x1 -_080E5F36: - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end IsBikingDisallowedByPlayer - - thumb_func_start player_should_look_direction_be_enforced_upon_movement -player_should_look_direction_be_enforced_upon_movement: @ 80E5F40 - push {lr} - movs r0, 0x4 - bl TestPlayerAvatarFlags - lsls r0, 24 - cmp r0, 0 - beq _080E5F74 - ldr r2, _080E5F6C @ =gMapObjects - ldr r0, _080E5F70 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x1E] - bl MetatileBehavior_IsBumpySlope - lsls r0, 24 - cmp r0, 0 - beq _080E5F74 - movs r0, 0 - b _080E5F76 - .align 2, 0 -_080E5F6C: .4byte gMapObjects -_080E5F70: .4byte gPlayerAvatar -_080E5F74: - movs r0, 0x1 -_080E5F76: - pop {r1} - bx r1 - thumb_func_end player_should_look_direction_be_enforced_upon_movement - - thumb_func_start GetOnOffBike -GetOnOffBike: @ 80E5F7C - push {r4,lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r1, _080E5FA4 @ =gUnknown_0202E854 - movs r0, 0 - strb r0, [r1] - ldr r0, _080E5FA8 @ =gPlayerAvatar - ldrb r1, [r0] - movs r0, 0x6 - ands r0, r1 - cmp r0, 0 - beq _080E5FAC - movs r0, 0x1 - bl SetPlayerAvatarTransitionFlags - bl sav1_reset_battle_music_maybe - bl sub_8053E90 - b _080E5FC0 - .align 2, 0 -_080E5FA4: .4byte gUnknown_0202E854 -_080E5FA8: .4byte gPlayerAvatar -_080E5FAC: - adds r0, r2, 0 - bl SetPlayerAvatarTransitionFlags - ldr r4, _080E5FC8 @ =0x00000193 - adds r0, r4, 0 - bl sav1_set_battle_music_maybe - adds r0, r4, 0 - bl sub_8053FB0 -_080E5FC0: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E5FC8: .4byte 0x00000193 - thumb_func_end GetOnOffBike - - thumb_func_start sub_80E5FCC -sub_80E5FCC: @ 80E5FCC - push {lr} - ldr r2, _080E6008 @ =gPlayerAvatar - movs r3, 0 - strb r3, [r2, 0x8] - strb r3, [r2, 0x9] - strb r3, [r2, 0xA] - strb r3, [r2, 0xB] - str r0, [r2, 0xC] - str r1, [r2, 0x10] - movs r1, 0 - adds r2, 0x14 -_080E5FE2: - adds r0, r1, r2 - strb r3, [r0] - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x7 - bls _080E5FE2 - movs r1, 0 - ldr r3, _080E600C @ =gUnknown_0202E874 - movs r2, 0 -_080E5FF6: - adds r0, r1, r3 - strb r2, [r0] - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x7 - bls _080E5FF6 - pop {r0} - bx r0 - .align 2, 0 -_080E6008: .4byte gPlayerAvatar -_080E600C: .4byte gUnknown_0202E874 - thumb_func_end sub_80E5FCC - - thumb_func_start sub_80E6010 -sub_80E6010: @ 80E6010 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080E6020 @ =gPlayerAvatar - strb r0, [r2, 0xA] - lsrs r1, r0, 1 - adds r0, r1 - strb r0, [r2, 0xB] - bx lr - .align 2, 0 -_080E6020: .4byte gPlayerAvatar - thumb_func_end sub_80E6010 - - thumb_func_start sub_80E6024 -sub_80E6024: @ 80E6024 - ldr r1, _080E6030 @ =gPlayerAvatar - movs r0, 0 - strb r0, [r1, 0xA] - strb r0, [r1, 0xB] - bx lr - .align 2, 0 -_080E6030: .4byte gPlayerAvatar - thumb_func_end sub_80E6024 - - thumb_func_start sub_80E6034 -sub_80E6034: @ 80E6034 - push {lr} - sub sp, 0x8 - ldr r1, _080E605C @ =gUnknown_083DB600 - mov r0, sp - movs r2, 0x6 - bl memcpy - ldr r2, _080E6060 @ =gPlayerAvatar - ldrb r1, [r2] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080E6064 - ldrb r0, [r2, 0xA] - lsls r0, 1 - add r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - b _080E607E - .align 2, 0 -_080E605C: .4byte gUnknown_083DB600 -_080E6060: .4byte gPlayerAvatar -_080E6064: - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _080E6070 - movs r0, 0x3 - b _080E607E -_080E6070: - movs r0, 0x88 - ands r0, r1 - cmp r0, 0 - bne _080E607C - movs r0, 0x1 - b _080E607E -_080E607C: - movs r0, 0x2 -_080E607E: - add sp, 0x8 - pop {r1} - bx r1 - thumb_func_end sub_80E6034 - - thumb_func_start sub_80E6084 -sub_80E6084: @ 80E6084 - push {r4,r5,lr} - sub sp, 0x4 - ldr r5, _080E60D4 @ =gPlayerAvatar - ldrb r1, [r5] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _080E60CC - mov r4, sp - adds r4, 0x2 - mov r0, sp - adds r1, r4, 0 - bl PlayerGetDestCoords - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0 - ldrsh r1, [r4, r2] - bl MapGridGetMetatileBehaviorAt - lsls r0, 24 - lsrs r0, 24 - bl MetatileBehavior_IsBumpySlope - lsls r0, 24 - cmp r0, 0 - beq _080E60CC - movs r0, 0x2 - strb r0, [r5, 0x8] - bl player_get_direction_upper_nybble - lsls r0, 24 - lsrs r0, 24 - bl sub_8059C94 -_080E60CC: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080E60D4: .4byte gPlayerAvatar - thumb_func_end sub_80E6084 - - .align 2, 0 @ Don't pad with nop. diff --git a/include/asm.inc.h b/include/asm.inc.h index 036cf0266..64f554ebd 100644 --- a/include/asm.inc.h +++ b/include/asm.inc.h @@ -362,7 +362,7 @@ void sub_80E5B38(u16 i, u16 c); u8 sub_80E5DEC(u8); bool8 player_should_look_direction_be_enforced_upon_movement(void); void sub_80E5FCC(int i, int i1); -void sub_80E6010(int i); +void sub_80E6010(u8 i); s16 sub_80E6034(void); void sub_80E6084(); diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index 7f18f1ef4..b4746f696 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -80,7 +80,7 @@ void InitPlayerAvatar(s16 a, s16 b, u8 c, u8 d); // sub_8059B88 // sub_8059BF4 // sub_8059C3C -// sub_8059C94 +void sub_8059C94(u8); // sub_8059D08 // sub_8059E84 // sub_8059EA4 diff --git a/include/rom4.h b/include/rom4.h index 82d6e4f38..bb3486c38 100644 --- a/include/rom4.h +++ b/include/rom4.h @@ -84,7 +84,7 @@ void sub_8053D14(u16); // sav1_map_get_music // warp1_target_get_music // call_map_music_set_to_zero -// sub_8053E90 +void sub_8053E90(void); void sav1_set_battle_music_maybe(u16); void sav1_reset_battle_music_maybe(void); void sub_8053F0C(void); diff --git a/ld_script.txt b/ld_script.txt index ceb519f0a..6074ad1ae 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -178,7 +178,6 @@ SECTIONS { asm/item_use.o(.text); asm/battle_anim_80CA710.o(.text); src/bike.o(.text); - asm/bike.o(.text); asm/easy_chat.o(.text); asm/pokenav.o(.text); asm/mon_markings.o(.text); 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()); + } + } +} |