diff options
author | ProjectRevoTPP <projectrevotpp@hotmail.com> | 2017-01-29 20:59:54 -0500 |
---|---|---|
committer | YamaArashi <YamaArashi@users.noreply.github.com> | 2017-01-29 17:59:54 -0800 |
commit | b6b5453431af46791fd9d211efac64464c1dff85 (patch) | |
tree | 44148fc13d5f707e426016ac33b8c34f4b6df948 | |
parent | 047c35d6f1ff8888cd25d449d544ce898e0b9fec (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.s | 2 | ||||
-rw-r--r-- | asm/mauville_old_man.s | 496 | ||||
-rw-r--r-- | asm/rotating_gate.s | 4 | ||||
-rw-r--r-- | include/asm.inc.h | 4 | ||||
-rw-r--r-- | include/global.h | 34 | ||||
-rw-r--r-- | include/songs.h | 20 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/bike.c | 35 | ||||
-rw-r--r-- | src/field_control_avatar.c | 2 | ||||
-rw-r--r-- | src/field_map_obj.c | 2 | ||||
-rw-r--r-- | src/field_player_avatar.c | 4 | ||||
-rw-r--r-- | src/mauville_old_man.c | 407 |
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 |