summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/bike.s424
-rw-r--r--include/asm.inc.h2
-rw-r--r--include/field_player_avatar.h2
-rw-r--r--include/rom4.h2
-rw-r--r--ld_script.txt1
-rw-r--r--src/bike.c183
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());
+ }
+ }
+}