summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorProjectRevoTPP <projectrevotpp@hotmail.com>2017-01-29 20:59:54 -0500
committerYamaArashi <YamaArashi@users.noreply.github.com>2017-01-29 17:59:54 -0800
commitb6b5453431af46791fd9d211efac64464c1dff85 (patch)
tree44148fc13d5f707e426016ac33b8c34f4b6df948
parent047c35d6f1ff8888cd25d449d544ce898e0b9fec (diff)
start decompiling mauville_old_man.c (#225)
* some labels and enumerate player speeds * clear up speed enums * GetPlayerSpeed * oops * start decompiling mauville_old_man.c * formatting * decompile more of mauville_old_man.c * someone fix this please * formatting * make ROM build again * formatting again
-rw-r--r--asm/field_tasks.s2
-rw-r--r--asm/mauville_old_man.s496
-rw-r--r--asm/rotating_gate.s4
-rw-r--r--include/asm.inc.h4
-rw-r--r--include/global.h34
-rw-r--r--include/songs.h20
-rw-r--r--ld_script.txt1
-rw-r--r--src/bike.c35
-rw-r--r--src/field_control_avatar.c2
-rw-r--r--src/field_map_obj.c2
-rw-r--r--src/field_player_avatar.c4
-rw-r--r--src/mauville_old_man.c407
12 files changed, 483 insertions, 528 deletions
diff --git a/asm/field_tasks.s b/asm/field_tasks.s
index c879ebf63..23a49109d 100644
--- a/asm/field_tasks.s
+++ b/asm/field_tasks.s
@@ -1708,7 +1708,7 @@ _0806A122:
lsls r0, 24
cmp r0, 0
beq _0806A182
- bl sub_80E6034
+ bl GetPlayerSpeed
lsls r0, 16
asrs r0, 16
cmp r0, 0x4
diff --git a/asm/mauville_old_man.s b/asm/mauville_old_man.s
index 3af0f2b11..90d97e9a4 100644
--- a/asm/mauville_old_man.s
+++ b/asm/mauville_old_man.s
@@ -6,502 +6,6 @@
.text
- thumb_func_start sub_80F7A34
-sub_80F7A34: @ 80F7A34
- push {r4,lr}
- ldr r0, _080F7A64 @ =gSaveBlock1 + 0x2D94
- movs r1, 0
- strb r1, [r0]
- adds r2, r0, 0
- adds r2, 0x29
- strb r1, [r2]
- movs r2, 0
- adds r4, r0, 0x2
- ldr r3, _080F7A68 @ =gUnknown_083E537C
-_080F7A48:
- lsls r0, r2, 1
- adds r1, r4, r0
- adds r0, r3
- ldrh r0, [r0]
- strh r0, [r1]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0x5
- bls _080F7A48
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080F7A64: .4byte gSaveBlock1 + 0x2D94
-_080F7A68: .4byte gUnknown_083E537C
- thumb_func_end sub_80F7A34
-
- thumb_func_start sub_80F7A6C
-sub_80F7A6C: @ 80F7A6C
- ldr r0, _080F7A78 @ =gSaveBlock1 + 0x2D94
- movs r2, 0
- movs r1, 0x1
- strb r1, [r0]
- strb r2, [r0, 0x1]
- bx lr
- .align 2, 0
-_080F7A78: .4byte gSaveBlock1 + 0x2D94
- thumb_func_end sub_80F7A6C
-
- thumb_func_start sub_80F7A7C
-sub_80F7A7C: @ 80F7A7C
- push {lr}
- bl sub_80F83F8
- pop {r0}
- bx r0
- thumb_func_end sub_80F7A7C
-
- thumb_func_start sub_80F7A88
-sub_80F7A88: @ 80F7A88
- ldr r0, _080F7A94 @ =gSaveBlock1 + 0x2D94
- movs r2, 0
- movs r1, 0x4
- strb r1, [r0]
- strb r2, [r0, 0x1]
- bx lr
- .align 2, 0
-_080F7A94: .4byte gSaveBlock1 + 0x2D94
- thumb_func_end sub_80F7A88
-
- thumb_func_start sub_80F7A98
-sub_80F7A98: @ 80F7A98
- push {lr}
- bl sub_81099CC
- pop {r0}
- bx r0
- thumb_func_end sub_80F7A98
-
- thumb_func_start sub_80F7AA4
-sub_80F7AA4: @ 80F7AA4
- push {lr}
- ldr r0, _080F7AC8 @ =gSaveBlock2
- ldrb r1, [r0, 0xB]
- lsls r1, 8
- ldrb r0, [r0, 0xA]
- orrs r0, r1
- movs r1, 0xA
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 17
- cmp r0, 0x4
- bhi _080F7B00
- lsls r0, 2
- ldr r1, _080F7ACC @ =_080F7AD0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080F7AC8: .4byte gSaveBlock2
-_080F7ACC: .4byte _080F7AD0
- .align 2, 0
-_080F7AD0:
- .4byte _080F7AE4
- .4byte _080F7AEA
- .4byte _080F7AF0
- .4byte _080F7AF6
- .4byte _080F7AFC
-_080F7AE4:
- bl sub_80F7A34
- b _080F7B00
-_080F7AEA:
- bl sub_80F7A6C
- b _080F7B00
-_080F7AF0:
- bl sub_80F7A98
- b _080F7B00
-_080F7AF6:
- bl sub_80F7A7C
- b _080F7B00
-_080F7AFC:
- bl sub_80F7A88
-_080F7B00:
- bl sub_80F83D0
- pop {r0}
- bx r0
- thumb_func_end sub_80F7AA4
-
- thumb_func_start GetCurrentMauvilleOldMan
-GetCurrentMauvilleOldMan: @ 80F7B08
- ldr r0, _080F7B10 @ =gSaveBlock1 + 0x2D94
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_080F7B10: .4byte gSaveBlock1 + 0x2D94
- thumb_func_end GetCurrentMauvilleOldMan
-
- thumb_func_start sub_80F7B14
-sub_80F7B14: @ 80F7B14
- push {r4,lr}
- ldr r4, _080F7B28 @ =gScriptResult
- bl GetCurrentMauvilleOldMan
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080F7B28: .4byte gScriptResult
- thumb_func_end sub_80F7B14
-
- thumb_func_start sub_80F7B2C
-sub_80F7B2C: @ 80F7B2C
- ldr r0, _080F7B38 @ =gScriptResult
- ldr r1, _080F7B3C @ =gSaveBlock1 + 0x2D94
- adds r1, 0x29
- ldrb r1, [r1]
- strh r1, [r0]
- bx lr
- .align 2, 0
-_080F7B38: .4byte gScriptResult
-_080F7B3C: .4byte gSaveBlock1 + 0x2D94
- thumb_func_end sub_80F7B2C
-
- thumb_func_start sub_80F7B40
-sub_80F7B40: @ 80F7B40
- push {r4,r5,lr}
- ldr r5, _080F7B98 @ =gSaveBlock1 + 0x2D94
- adds r0, r5, 0
- adds r0, 0x1A
- ldr r4, _080F7B9C @ =gSaveBlock2
- adds r1, r4, 0
- bl StringCopy
- movs r2, 0
- adds r3, r5, 0
- adds r3, 0x25
- adds r4, 0xA
-_080F7B58:
- adds r1, r3, r2
- adds r0, r2, r4
- ldrb r0, [r0]
- strb r0, [r1]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0x3
- bls _080F7B58
- movs r2, 0
- movs r0, 0x29
- adds r0, r5
- mov r12, r0
- adds r4, r5, 0x2
- adds r3, r5, 0
- adds r3, 0xE
-_080F7B78:
- lsls r0, r2, 1
- adds r1, r4, r0
- adds r0, r3, r0
- ldrh r0, [r0]
- strh r0, [r1]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0x5
- bls _080F7B78
- movs r0, 0x1
- mov r1, r12
- strb r0, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080F7B98: .4byte gSaveBlock1 + 0x2D94
-_080F7B9C: .4byte gSaveBlock2
- thumb_func_end sub_80F7B40
-
- thumb_func_start sub_80F7BA0
-sub_80F7BA0: @ 80F7BA0
- push {r4-r7,lr}
- ldr r1, _080F7C48 @ =gSaveBlock1 + 0x2D94
- ldr r0, _080F7C4C @ =gSpecialVar_0x8004
- ldrh r0, [r0]
- adds r5, r1, 0
- adds r5, 0xE
- cmp r0, 0
- bne _080F7BB2
- adds r5, r1, 0x2
-_080F7BB2:
- ldr r2, _080F7C50 @ =gStringVar4
- adds r4, r2, 0
- movs r6, 0
-_080F7BB8:
- ldrh r1, [r5]
- adds r5, 0x2
- adds r0, r2, 0
- bl sub_80EB3FC
- adds r2, r0, 0
- adds r7, r6, 0x1
- cmp r2, r4
- beq _080F7BDA
- movs r1, 0x37
-_080F7BCC:
- ldrb r0, [r4]
- cmp r0, 0
- bne _080F7BD4
- strb r1, [r4]
-_080F7BD4:
- adds r4, 0x1
- cmp r2, r4
- bne _080F7BCC
-_080F7BDA:
- adds r4, 0x1
- movs r0, 0
- strb r0, [r2]
- adds r2, 0x1
- ldrh r1, [r5]
- adds r5, 0x2
- adds r0, r2, 0
- bl sub_80EB3FC
- adds r2, r0, 0
- cmp r2, r4
- beq _080F7C02
- movs r1, 0x37
-_080F7BF4:
- ldrb r0, [r4]
- cmp r0, 0
- bne _080F7BFC
- strb r1, [r4]
-_080F7BFC:
- adds r4, 0x1
- cmp r2, r4
- bne _080F7BF4
-_080F7C02:
- adds r4, 0x1
- movs r0, 0xFE
- strb r0, [r2]
- adds r2, 0x1
- ldrh r1, [r5]
- adds r5, 0x2
- adds r0, r2, 0
- bl sub_80EB3FC
- adds r2, r0, 0
- cmp r2, r4
- beq _080F7C2A
- movs r1, 0x37
-_080F7C1C:
- ldrb r0, [r4]
- cmp r0, 0
- bne _080F7C24
- strb r1, [r4]
-_080F7C24:
- adds r4, 0x1
- cmp r2, r4
- bne _080F7C1C
-_080F7C2A:
- cmp r6, 0
- bne _080F7C3A
- movs r0, 0xFC
- strb r0, [r2]
- adds r2, 0x1
- movs r0, 0xF
- strb r0, [r2]
- adds r2, 0x1
-_080F7C3A:
- lsls r0, r7, 16
- lsrs r6, r0, 16
- cmp r6, 0x1
- bls _080F7BB8
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080F7C48: .4byte gSaveBlock1 + 0x2D94
-_080F7C4C: .4byte gSpecialVar_0x8004
-_080F7C50: .4byte gStringVar4
- thumb_func_end sub_80F7BA0
-
- thumb_func_start sub_80F7C54
-sub_80F7C54: @ 80F7C54
- push {lr}
- ldr r0, _080F7C6C @ =gSpecialVar_0x8004
- ldrb r0, [r0]
- bl sub_80F7F80
- bl MenuDisplayMessageBox
- bl ScriptContext1_Stop
- pop {r0}
- bx r0
- .align 2, 0
-_080F7C6C: .4byte gSpecialVar_0x8004
- thumb_func_end sub_80F7C54
-
- thumb_func_start sub_80F7C70
-sub_80F7C70: @ 80F7C70
- ldr r0, _080F7C7C @ =gScriptResult
- ldr r1, _080F7C80 @ =gSaveBlock1 + 0x2D94
- ldrb r1, [r1, 0x1]
- strh r1, [r0]
- bx lr
- .align 2, 0
-_080F7C7C: .4byte gScriptResult
-_080F7C80: .4byte gSaveBlock1 + 0x2D94
- thumb_func_end sub_80F7C70
-
- thumb_func_start sub_80F7C84
-sub_80F7C84: @ 80F7C84
- ldr r1, _080F7C8C @ =gSaveBlock1 + 0x2D94
- movs r0, 0x1
- strb r0, [r1, 0x1]
- bx lr
- .align 2, 0
-_080F7C8C: .4byte gSaveBlock1 + 0x2D94
- thumb_func_end sub_80F7C84
-
- thumb_func_start sub_80F7C90
-sub_80F7C90: @ 80F7C90
- push {lr}
- bl sub_80EB8EC
- lsls r0, 16
- lsrs r1, r0, 16
- ldr r0, _080F7CA8 @ =0x0000ffff
- cmp r1, r0
- bne _080F7CB0
- ldr r1, _080F7CAC @ =gScriptResult
- movs r0, 0
- b _080F7CBA
- .align 2, 0
-_080F7CA8: .4byte 0x0000ffff
-_080F7CAC: .4byte gScriptResult
-_080F7CB0:
- ldr r0, _080F7CC0 @ =gStringVar1
- bl sub_80EB3FC
- ldr r1, _080F7CC4 @ =gScriptResult
- movs r0, 0x1
-_080F7CBA:
- strh r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_080F7CC0: .4byte gStringVar1
-_080F7CC4: .4byte gScriptResult
- thumb_func_end sub_80F7C90
-
- thumb_func_start sub_80F7CC8
-sub_80F7CC8: @ 80F7CC8
- push {lr}
- ldr r2, _080F7CDC @ =gSaveBlock1 + 0x2D94
- ldrb r0, [r2, 0x1]
- cmp r0, 0xA
- bne _080F7CE4
- ldr r1, _080F7CE0 @ =gScriptResult
- movs r0, 0
- strh r0, [r1]
- strb r0, [r2, 0x1]
- b _080F7CEA
- .align 2, 0
-_080F7CDC: .4byte gSaveBlock1 + 0x2D94
-_080F7CE0: .4byte gScriptResult
-_080F7CE4:
- ldr r1, _080F7CF0 @ =gScriptResult
- movs r0, 0x1
- strh r0, [r1]
-_080F7CEA:
- pop {r0}
- bx r0
- .align 2, 0
-_080F7CF0: .4byte gScriptResult
- thumb_func_end sub_80F7CC8
-
- thumb_func_start sub_80F7CF4
-sub_80F7CF4: @ 80F7CF4
- push {r4-r6,lr}
- ldr r5, _080F7D50 @ =gSaveBlock1 + 0x2D94
- ldrb r0, [r5, 0x1]
- cmp r0, 0
- bne _080F7D02
- bl sub_80F7DC0
-_080F7D02:
- ldrb r0, [r5, 0x1]
- lsls r0, 1
- adds r6, r5, 0x4
- adds r0, r6
- ldrh r1, [r0]
- ldr r0, _080F7D54 @ =0x0000ffff
- cmp r1, r0
- beq _080F7D68
- bl Random
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- movs r0, 0x7
- ands r4, r0
- ldr r0, _080F7D58 @ =gStringVar4
- ldrb r1, [r5, 0x1]
- lsls r1, 1
- adds r1, r6
- ldrh r1, [r1]
- bl sub_80EB3FC
- adds r2, r0, 0
- ldr r1, _080F7D5C @ =gOtherText_Is
- bl StringCopy
- adds r2, r0, 0
- ldr r0, _080F7D60 @ =gUnknown_083E5388
- lsls r4, 2
- adds r4, r0
- ldr r1, [r4]
- adds r0, r2, 0
- bl StringCopy
- adds r2, r0, 0
- ldr r1, _080F7D64 @ =gOtherText_DontYouAgree
- bl StringCopy
- b _080F7D88
- .align 2, 0
-_080F7D50: .4byte gSaveBlock1 + 0x2D94
-_080F7D54: .4byte 0x0000ffff
-_080F7D58: .4byte gStringVar4
-_080F7D5C: .4byte gOtherText_Is
-_080F7D60: .4byte gUnknown_083E5388
-_080F7D64: .4byte gOtherText_DontYouAgree
-_080F7D68:
- ldr r0, _080F7DA0 @ =gStringVar4
- ldr r3, _080F7DA4 @ =gUnknown_083E53A8
- ldrb r1, [r5, 0x2]
- adds r2, r1, 0x1
- strb r2, [r5, 0x2]
- lsls r1, 24
- lsrs r1, 24
- adds r2, r5, 0
- adds r2, 0x18
- adds r1, r2
- ldrb r1, [r1]
- lsls r1, 2
- adds r1, r3
- ldr r1, [r1]
- bl StringCopy
-_080F7D88:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xA
- bl __umodsi3
- lsls r0, 16
- cmp r0, 0
- bne _080F7DA8
- movs r0, 0xA
- b _080F7DAC
- .align 2, 0
-_080F7DA0: .4byte gStringVar4
-_080F7DA4: .4byte gUnknown_083E53A8
-_080F7DA8:
- ldrb r0, [r5, 0x1]
- adds r0, 0x1
-_080F7DAC:
- strb r0, [r5, 0x1]
- ldr r1, _080F7DBC @ =gScriptResult
- movs r0, 0x1
- strh r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F7DBC: .4byte gScriptResult
- thumb_func_end sub_80F7CF4
-
thumb_func_start sub_80F7DC0
sub_80F7DC0: @ 80F7DC0
push {r4-r7,lr}
diff --git a/asm/rotating_gate.s b/asm/rotating_gate.s
index 9c7b3847b..a553802e8 100644
--- a/asm/rotating_gate.s
+++ b/asm/rotating_gate.s
@@ -428,7 +428,7 @@ sub_80C7C94: @ 80C7C94
adds r0, r4, 0x4
lsls r0, 24
lsrs r4, r0, 24
- bl sub_80E6034
+ bl GetPlayerSpeed
lsls r0, 16
asrs r0, 16
cmp r0, 0x1
@@ -451,7 +451,7 @@ _080C7CDA:
adds r0, 0x8
lsls r0, 24
lsrs r4, r0, 24
- bl sub_80E6034
+ bl GetPlayerSpeed
lsls r0, 16
asrs r0, 16
cmp r0, 0x1
diff --git a/include/asm.inc.h b/include/asm.inc.h
index bee42f1b5..379b79f2d 100644
--- a/include/asm.inc.h
+++ b/include/asm.inc.h
@@ -359,11 +359,11 @@ void sub_80C8F34(u8);
// asm/bike.o
void MovePlayerOnBike(u8, u16, u16);
void sub_80E5B38(u16 i, u16 c);
-u8 sub_80E5DEC(u8);
+u8 IsRunningDisallowed(u8);
bool8 player_should_look_direction_be_enforced_upon_movement(void);
void BikeClearState(int i, int i1);
void sub_80E6010(u8 i);
-s16 sub_80E6034(void);
+s16 GetPlayerSpeed(void);
void sub_80E6084();
// asm/easy_chat.o
diff --git a/include/global.h b/include/global.h
index 736a1a5dc..6c8b60484 100644
--- a/include/global.h
+++ b/include/global.h
@@ -266,6 +266,35 @@ struct MailStruct
/*0x20*/ u16 itemId;
};
+struct UnkMauvilleOldManStruct
+{
+ u8 unk_2D94;
+ u8 unk_2D95;
+ /*0x2D96*/ u16 mauvilleOldMan_ecArray[6];
+ /*0x2DA2*/ u16 mauvilleOldMan_ecArray2[6];
+ /*0x2DAE*/ u8 playerName[8];
+ /*0x2DB6*/ u8 filler_2DB6[0x3];
+ /*0x2DB9*/ u8 playerTrainerId[4];
+ u8 unk_2DBD;
+ /* size = 0x1E */
+};
+
+struct UnkMauvilleOldManStruct2
+{
+ u8 filler0;
+ u8 unk1;
+ u8 unk2;
+ u16 mauvilleOldMan_ecArray[10];
+ u16 mauvilleOldMan_ecArray2[6];
+ u8 fillerF[0x4];
+ /* size = 0x1E */
+};
+
+typedef union OldMan {
+ struct UnkMauvilleOldManStruct oldMan1;
+ struct UnkMauvilleOldManStruct2 oldMan2;
+} OldMan;
+
struct SaveBlock1 /* 0x02025734 */
{
/*0x00*/ struct Coords16 pos;
@@ -331,7 +360,10 @@ struct SaveBlock1 /* 0x02025734 */
/*0x2B1C*/ u16 unk2B1C[4];
/*0x2B24*/ u8 filler_2B24[0x28];
/*0x2B4C*/ struct MailStruct mail[16];
- /*0x2D8C*/ u8 filler_2D8C[0x48];
+ /*0x2D8C*/ u8 filler_2D8C[0x8];
+ OldMan oldMan;
+ ///*0x2D94*/ struct UnkMauvilleOldManStruct oldManStruct;
+ /*0x2DBC*/ u8 filler_2DBC[0x18];
/*0x2DD4*/ struct EasyChatPair easyChatPairs[5]; //Dewford trend [0] and some other stuff
/*0x2DFC*/ u8 filler_2DFC[0x100];
/*0x2EFC*/ struct SB1_2EFC_Struct sb1_2EFC_struct[5];
diff --git a/include/songs.h b/include/songs.h
index c77bad515..01ecf9fe0 100644
--- a/include/songs.h
+++ b/include/songs.h
@@ -359,16 +359,16 @@ enum
BGM_DAIGO,
BGM_THANKFOR,
BGM_END,
- BGM_BATTLE27,
- BGM_BATTLE31,
- BGM_BATTLE20,
- BGM_BATTLE32,
- BGM_BATTLE33,
- BGM_BATTLE36,
- BGM_BATTLE34,
- BGM_BATTLE35,
- BGM_BATTLE38,
- BGM_BATTLE30,
+ BGM_BATTLE27, // wild
+ BGM_BATTLE31, // aqua/magma grunt
+ BGM_BATTLE20, // trainer
+ BGM_BATTLE32, // gym leader
+ BGM_BATTLE33, // champion
+ BGM_BATTLE36, // regi
+ BGM_BATTLE34, // weather trio
+ BGM_BATTLE35, // rival
+ BGM_BATTLE38, // elite four
+ BGM_BATTLE30, // aqua/magma leader
};
#endif // GUARD_SONGS_H
diff --git a/ld_script.txt b/ld_script.txt
index 4373dd6c0..a72ffc452 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -181,6 +181,7 @@ SECTIONS {
asm/easy_chat.o(.text);
asm/pokenav.o(.text);
asm/mon_markings.o(.text);
+ src/mauville_old_man.o(.text);
asm/mauville_old_man.o(.text);
src/mail.o(.text);
asm/menu_helpers.o(.text);
diff --git a/src/bike.c b/src/bike.c
index bd4c2e411..a1a3fded9 100644
--- a/src/bike.c
+++ b/src/bike.c
@@ -84,6 +84,16 @@ static void (*const gUnknown_083DB5A4[])(u8) =
sub_80593F4,
};
+// Player speeds
+enum
+{
+ SPEED_STANDING,
+ SPEED_NORMAL,
+ SPEED_FAST,
+ SPEED_FASTER,
+ SPEED_FASTEST,
+};
+
//Acro bike states
enum
{
@@ -132,7 +142,7 @@ static u8 (*const sAcroBikeInputHandlers[])(u8 *, u16, u16) =
AcroBikeHandleInputState6,
};
-const u16 gUnknown_083DB600[] = {1, 2, 4};
+const u16 gMachBikeSpeeds[] = {SPEED_NORMAL, SPEED_FAST, SPEED_FASTEST};
static const u8 Unknown_3DB606[] = {4, 0};
static const struct UnknownStruct1 gUnknown_083DB608[] =
@@ -243,7 +253,7 @@ static void MachBikeTransition_80E51C4(u8 direction)
{
gUnknown_083DB5A4[gPlayerAvatar.bikeFrameCounter](direction);
gPlayerAvatar.unkB = gPlayerAvatar.bikeFrameCounter + (gPlayerAvatar.bikeFrameCounter >> 1); // same as dividing by 2, but compiler is insistent on >> 1
- if (gPlayerAvatar.bikeFrameCounter < 2)
+ if (gPlayerAvatar.bikeFrameCounter < 2) // do not go faster than the last element in the mach bike array
gPlayerAvatar.bikeFrameCounter++;
}
}
@@ -882,7 +892,7 @@ static u8 sub_80E5DA0(struct MapObject *mapObject, s16 x, s16 y, u8 direction, u
return collision;
}
-bool8 sub_80E5DEC(u8 tile)
+bool8 IsRunningDisallowed(u8 tile)
{
if (IsRunningDisallowedByMetatile(tile) != FALSE || gMapHeader.mapType == MAP_TYPE_INDOOR)
return TRUE;
@@ -975,8 +985,8 @@ void GetOnOffBike(u8 var)
else
{
SetPlayerAvatarTransitionFlags(var);
- sav1_set_battle_music_maybe(0x193);
- sub_8053FB0(0x193);
+ sav1_set_battle_music_maybe(BGM_CYCLING);
+ sub_8053FB0(BGM_CYCLING);
}
}
@@ -1010,20 +1020,21 @@ static void sub_80E6024(void)
gPlayerAvatar.unkB = 0;
}
-s16 sub_80E6034(void)
+s16 GetPlayerSpeed(void)
{
- s16 arr[3];
+ // because the player pressed a direction, it won't ever return a speed of 0 since this function returns the player's current speed.
+ s16 machSpeeds[3];
- memcpy(arr, gUnknown_083DB600, sizeof(arr));
+ memcpy(machSpeeds, gMachBikeSpeeds, sizeof(machSpeeds));
if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MACH_BIKE)
- return arr[gPlayerAvatar.bikeFrameCounter];
+ return machSpeeds[gPlayerAvatar.bikeFrameCounter];
else if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_ACRO_BIKE)
- return 3;
+ return SPEED_FASTER;
else if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_SURFING | PLAYER_AVATAR_FLAG_DASH))
- return 2;
+ return SPEED_FAST;
else
- return 1;
+ return SPEED_NORMAL;
}
void sub_80E6084(void)
diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c
index f05959a79..992e461eb 100644
--- a/src/field_control_avatar.c
+++ b/src/field_control_avatar.c
@@ -137,7 +137,7 @@ void FieldGetPlayerInput(struct FieldInput *input, u16 newKeys, u16 heldKeys)
if ((r6 == 2 && forcedMove == FALSE) || r6 == 0)
{
- if (sub_80E6034() != 4)
+ if (GetPlayerSpeed() != 4)
{
if (newKeys & START_BUTTON)
input->pressedStartButton = TRUE;
diff --git a/src/field_map_obj.c b/src/field_map_obj.c
index 20c56a122..010ac4c3e 100644
--- a/src/field_map_obj.c
+++ b/src/field_map_obj.c
@@ -411,6 +411,6 @@ void npc_hide_all_but_player(void)
for (i = 0; i < 16; i++)
{
if (i != gPlayerAvatar.mapObjectId)
- RemoveFieldObject(&gFieldObjects[i]);
+ RemoveFieldObject(&gMapObjects[i]);
}
}
diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c
index bab172152..ae7dd7d62 100644
--- a/src/field_player_avatar.c
+++ b/src/field_player_avatar.c
@@ -489,7 +489,7 @@ u8 ForcedMovement_MuddySlope(void)
{
struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
- if (playerMapObj->placeholder18 != 2 || sub_80E6034() <= 3)
+ if (playerMapObj->placeholder18 != 2 || GetPlayerSpeed() <= 3)
{
sub_80E6010(0);
playerMapObj->mapobj_bit_9 = 1;
@@ -555,7 +555,7 @@ void sub_8058D0C(u8 direction, u16 heldKeys)
return;
}
if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_4) && (heldKeys & B_BUTTON) && FlagGet(SYS_B_DASH)
- && sub_80E5DEC(gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1E) == 0)
+ && IsRunningDisallowed(gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1E) == 0)
{
sub_805940C(direction);
gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_DASH;
diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c
new file mode 100644
index 000000000..82e936633
--- /dev/null
+++ b/src/mauville_old_man.c
@@ -0,0 +1,407 @@
+#include "global.h"
+#include "string_util.h"
+#include "menu.h"
+#include "script.h"
+#include "asm.h"
+#include "rng.h"
+
+extern u16 gScriptResult;
+extern u16 gSpecialVar_0x8004;
+
+extern void sub_80F83F8(void);
+extern void sub_81099CC(void);
+extern void sub_80F83D0(void);
+extern void sub_80F7F80(u8);
+extern u16 sub_80EB8EC(void);
+extern void sub_80F7DC0(void);
+extern u8 gOtherText_Is[];
+extern u8 gOtherText_DontYouAgree[];
+extern u32 gUnknown_083E5388[];
+extern u32 gUnknown_083E53A8[];
+
+extern u16 gUnknown_083E537C[];
+
+void sub_80F7A34(void)
+{
+ u16 i;
+ OldMan *oldMan = &gSaveBlock1.oldMan;
+
+ oldMan->oldMan1.unk_2D94 = 0;
+ oldMan->oldMan1.unk_2DBD = 0;
+
+ for(i = 0; i < 6; i++)
+ oldMan->oldMan1.mauvilleOldMan_ecArray[i] = gUnknown_083E537C[i];
+}
+
+void sub_80F7A6C(void)
+{
+ OldMan *oldMan = &gSaveBlock1.oldMan;
+
+ oldMan->oldMan1.unk_2D94 = 1;
+ oldMan->oldMan1.unk_2D95 = 0;
+}
+
+void sub_80F7A7C(void)
+{
+ sub_80F83F8();
+}
+
+void sub_80F7A88(void)
+{
+ OldMan *oldMan = &gSaveBlock1.oldMan;
+
+ oldMan->oldMan1.unk_2D94 = 4;
+ oldMan->oldMan1.unk_2D95 = 0;
+}
+
+void sub_80F7A98(void)
+{
+ sub_81099CC();
+}
+
+void sub_80F7AA4(void)
+{
+ u32 var = ((u16)((gSaveBlock2.playerTrainerId[1] << 8 | gSaveBlock2.playerTrainerId[0])) % 10) / 2;
+
+ switch(var)
+ {
+ case 0:
+ sub_80F7A34();
+ break;
+ case 1:
+ sub_80F7A6C();
+ break;
+ case 2:
+ sub_80F7A98();
+ break;
+ case 3:
+ sub_80F7A7C();
+ break;
+ case 4:
+ sub_80F7A88();
+ break;
+ }
+ sub_80F83D0();
+}
+
+u8 GetCurrentMauvilleOldMan(void)
+{
+ OldMan *oldMan = &gSaveBlock1.oldMan;
+
+ return oldMan->oldMan1.unk_2D94;
+}
+
+void sub_80F7B14(void)
+{
+ gScriptResult = GetCurrentMauvilleOldMan();
+}
+
+void sub_80F7B2C(void)
+{
+ u16 *scriptPtr = &gScriptResult; // why??
+ OldMan *oldMan = &gSaveBlock1.oldMan;
+
+ *scriptPtr = oldMan->oldMan1.unk_2DBD;
+}
+
+void sub_80F7B40(void)
+{
+ u16 i;
+ OldMan *oldMan = &gSaveBlock1.oldMan;
+ //struct UnkMauvilleOldManStruct *oldManStruct = &gSaveBlock1.oldManStruct;
+
+ StringCopy(oldMan->oldMan1.playerName, gSaveBlock2.playerName);
+
+ for(i = 0; i < 4; i++)
+ oldMan->oldMan1.playerTrainerId[i] = gSaveBlock2.playerTrainerId[i];
+
+ for(i = 0; i < 6; i++)
+ oldMan->oldMan1.mauvilleOldMan_ecArray[i] = oldMan->oldMan1.mauvilleOldMan_ecArray2[i];
+
+ oldMan->oldMan1.unk_2DBD = 1;
+}
+
+// too mathy
+__attribute__((naked))
+void sub_80F7BA0(void)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ ldr r1, _080F7C48 @ =gSaveBlock1 + 0x2D94\n\
+ ldr r0, _080F7C4C @ =gSpecialVar_0x8004\n\
+ ldrh r0, [r0]\n\
+ adds r5, r1, 0\n\
+ adds r5, 0xE\n\
+ cmp r0, 0\n\
+ bne _080F7BB2\n\
+ adds r5, r1, 0x2\n\
+_080F7BB2:\n\
+ ldr r2, _080F7C50 @ =gStringVar4\n\
+ adds r4, r2, 0\n\
+ movs r6, 0\n\
+_080F7BB8:\n\
+ ldrh r1, [r5]\n\
+ adds r5, 0x2\n\
+ adds r0, r2, 0\n\
+ bl sub_80EB3FC\n\
+ adds r2, r0, 0\n\
+ adds r7, r6, 0x1\n\
+ cmp r2, r4\n\
+ beq _080F7BDA\n\
+ movs r1, 0x37\n\
+_080F7BCC:\n\
+ ldrb r0, [r4]\n\
+ cmp r0, 0\n\
+ bne _080F7BD4\n\
+ strb r1, [r4]\n\
+_080F7BD4:\n\
+ adds r4, 0x1\n\
+ cmp r2, r4\n\
+ bne _080F7BCC\n\
+_080F7BDA:\n\
+ adds r4, 0x1\n\
+ movs r0, 0\n\
+ strb r0, [r2]\n\
+ adds r2, 0x1\n\
+ ldrh r1, [r5]\n\
+ adds r5, 0x2\n\
+ adds r0, r2, 0\n\
+ bl sub_80EB3FC\n\
+ adds r2, r0, 0\n\
+ cmp r2, r4\n\
+ beq _080F7C02\n\
+ movs r1, 0x37\n\
+_080F7BF4:\n\
+ ldrb r0, [r4]\n\
+ cmp r0, 0\n\
+ bne _080F7BFC\n\
+ strb r1, [r4]\n\
+_080F7BFC:\n\
+ adds r4, 0x1\n\
+ cmp r2, r4\n\
+ bne _080F7BF4\n\
+_080F7C02:\n\
+ adds r4, 0x1\n\
+ movs r0, 0xFE\n\
+ strb r0, [r2]\n\
+ adds r2, 0x1\n\
+ ldrh r1, [r5]\n\
+ adds r5, 0x2\n\
+ adds r0, r2, 0\n\
+ bl sub_80EB3FC\n\
+ adds r2, r0, 0\n\
+ cmp r2, r4\n\
+ beq _080F7C2A\n\
+ movs r1, 0x37\n\
+_080F7C1C:\n\
+ ldrb r0, [r4]\n\
+ cmp r0, 0\n\
+ bne _080F7C24\n\
+ strb r1, [r4]\n\
+_080F7C24:\n\
+ adds r4, 0x1\n\
+ cmp r2, r4\n\
+ bne _080F7C1C\n\
+_080F7C2A:\n\
+ cmp r6, 0\n\
+ bne _080F7C3A\n\
+ movs r0, 0xFC\n\
+ strb r0, [r2]\n\
+ adds r2, 0x1\n\
+ movs r0, 0xF\n\
+ strb r0, [r2]\n\
+ adds r2, 0x1\n\
+_080F7C3A:\n\
+ lsls r0, r7, 16\n\
+ lsrs r6, r0, 16\n\
+ cmp r6, 0x1\n\
+ bls _080F7BB8\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_080F7C48: .4byte gSaveBlock1 + 0x2D94\n\
+_080F7C4C: .4byte gSpecialVar_0x8004\n\
+_080F7C50: .4byte gStringVar4\n\
+ .syntax divided");
+}
+
+void sub_80F7C54(void)
+{
+ sub_80F7F80(gSpecialVar_0x8004);
+ MenuDisplayMessageBox();
+ ScriptContext1_Stop();
+}
+
+void sub_80F7C70(void)
+{
+ u16 *scriptPtr = &gScriptResult; // again??
+ OldMan *oldMan = &gSaveBlock1.oldMan;
+
+ *scriptPtr = oldMan->oldMan1.unk_2D95;
+}
+
+void sub_80F7C84(void)
+{
+ OldMan *oldMan = &gSaveBlock1.oldMan;
+
+ oldMan->oldMan1.unk_2D95 = 1;
+}
+
+void sub_80F7C90(void)
+{
+ u16 var = sub_80EB8EC();
+
+ if(var == 0xFFFF)
+ {
+ gScriptResult = FALSE;
+ }
+ else
+ {
+ sub_80EB3FC(gStringVar1, var);
+ gScriptResult = TRUE;
+ }
+}
+
+void sub_80F7CC8(void)
+{
+ OldMan *oldMan = &gSaveBlock1.oldMan;
+
+ if(oldMan->oldMan1.unk_2D95 == 10)
+ {
+ gScriptResult = FALSE;
+ oldMan->oldMan1.unk_2D95 = 0;
+ }
+ else
+ gScriptResult = TRUE;
+}
+
+// someone fix this
+#ifdef NONMATCHING
+void sub_80F7CF4(void)
+{
+ u8 *stringPtr;
+ OldMan *oldMan = &gSaveBlock1.oldMan;
+
+ if(oldMan->oldMan2.unk1 == 0)
+ sub_80F7DC0();
+
+ if(oldMan->oldMan2.mauvilleOldMan_ecArray[oldMan->oldMan2.unk1] != 0xFFFF) // is not the last element of the array?
+ {
+ int random = (u16)Random();
+ random &= 7;
+ sub_80EB3FC(gStringVar4, oldMan->oldMan2.mauvilleOldMan_ecArray[oldMan->oldMan2.unk1]);
+ stringPtr = StringCopy(gStringVar4, gOtherText_Is);
+ stringPtr = StringCopy(stringPtr, (u8 *)gUnknown_083E5388[random]);
+ StringCopy(stringPtr, gOtherText_DontYouAgree);
+ }
+ else
+ {
+ StringCopy(gStringVar4, (u8 *)gUnknown_083E53A8[oldMan->oldMan2.mauvilleOldMan_ecArray2[oldMan->oldMan2.unk2++]]);
+ }
+ if(!(Random() % 10))
+ oldMan->oldMan2.unk1 = 10;
+ else
+ oldMan->oldMan2.unk1++;
+
+ gScriptResult = TRUE;
+}
+#else
+__attribute__((naked))
+void sub_80F7CF4(void)
+{
+ asm(".syntax unified\n\
+ push {r4-r6,lr}\n\
+ ldr r5, _080F7D50 @ =gSaveBlock1 + 0x2D94\n\
+ ldrb r0, [r5, 0x1]\n\
+ cmp r0, 0\n\
+ bne _080F7D02\n\
+ bl sub_80F7DC0\n\
+_080F7D02:\n\
+ ldrb r0, [r5, 0x1]\n\
+ lsls r0, 1\n\
+ adds r6, r5, 0x4\n\
+ adds r0, r6\n\
+ ldrh r1, [r0]\n\
+ ldr r0, _080F7D54 @ =0x0000ffff\n\
+ cmp r1, r0\n\
+ beq _080F7D68\n\
+ bl Random\n\
+ adds r4, r0, 0\n\
+ lsls r4, 16\n\
+ lsrs r4, 16\n\
+ movs r0, 0x7\n\
+ ands r4, r0\n\
+ ldr r0, _080F7D58 @ =gStringVar4\n\
+ ldrb r1, [r5, 0x1]\n\
+ lsls r1, 1\n\
+ adds r1, r6\n\
+ ldrh r1, [r1]\n\
+ bl sub_80EB3FC\n\
+ adds r2, r0, 0\n\
+ ldr r1, _080F7D5C @ =gOtherText_Is\n\
+ bl StringCopy\n\
+ adds r2, r0, 0\n\
+ ldr r0, _080F7D60 @ =gUnknown_083E5388\n\
+ lsls r4, 2\n\
+ adds r4, r0\n\
+ ldr r1, [r4]\n\
+ adds r0, r2, 0\n\
+ bl StringCopy\n\
+ adds r2, r0, 0\n\
+ ldr r1, _080F7D64 @ =gOtherText_DontYouAgree\n\
+ bl StringCopy\n\
+ b _080F7D88\n\
+ .align 2, 0\n\
+_080F7D50: .4byte gSaveBlock1 + 0x2D94\n\
+_080F7D54: .4byte 0x0000ffff\n\
+_080F7D58: .4byte gStringVar4\n\
+_080F7D5C: .4byte gOtherText_Is\n\
+_080F7D60: .4byte gUnknown_083E5388\n\
+_080F7D64: .4byte gOtherText_DontYouAgree\n\
+_080F7D68:\n\
+ ldr r0, _080F7DA0 @ =gStringVar4\n\
+ ldr r3, _080F7DA4 @ =gUnknown_083E53A8\n\
+ ldrb r1, [r5, 0x2]\n\
+ adds r2, r1, 0x1\n\
+ strb r2, [r5, 0x2]\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ adds r2, r5, 0\n\
+ adds r2, 0x18\n\
+ adds r1, r2\n\
+ ldrb r1, [r1]\n\
+ lsls r1, 2\n\
+ adds r1, r3\n\
+ ldr r1, [r1]\n\
+ bl StringCopy\n\
+_080F7D88:\n\
+ bl Random\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ movs r1, 0xA\n\
+ bl __umodsi3\n\
+ lsls r0, 16\n\
+ cmp r0, 0\n\
+ bne _080F7DA8\n\
+ movs r0, 0xA\n\
+ b _080F7DAC\n\
+ .align 2, 0\n\
+_080F7DA0: .4byte gStringVar4\n\
+_080F7DA4: .4byte gUnknown_083E53A8\n\
+_080F7DA8:\n\
+ ldrb r0, [r5, 0x1]\n\
+ adds r0, 0x1\n\
+_080F7DAC:\n\
+ strb r0, [r5, 0x1]\n\
+ ldr r1, _080F7DBC @ =gScriptResult\n\
+ movs r0, 0x1\n\
+ strh r0, [r1]\n\
+ pop {r4-r6}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_080F7DBC: .4byte gScriptResult\n\
+ .syntax divided");
+}
+#endif