summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/mauville_old_man.s360
-rw-r--r--src/mauville_old_man.c138
2 files changed, 137 insertions, 361 deletions
diff --git a/asm/mauville_old_man.s b/asm/mauville_old_man.s
index 368dedf93..00f4192f8 100644
--- a/asm/mauville_old_man.s
+++ b/asm/mauville_old_man.s
@@ -5,366 +5,6 @@
.text
- thumb_func_start sub_8120E08
-sub_8120E08: @ 8120E08
- push {r4,r5,lr}
- ldr r2, =gUnknown_0203A12C
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, =0x00002e28
- adds r0, r1
- str r0, [r2]
- movs r3, 0
- movs r1, 0x3
- strb r1, [r0]
- ldr r0, [r2]
- strb r3, [r0, 0x1]
- movs r5, 0
- movs r4, 0xFF
-_08120E24:
- ldr r0, [r2]
- adds r0, 0x4
- adds r0, r3
- strb r5, [r0]
- ldr r1, [r2]
- adds r1, 0x8
- adds r1, r3
- ldrb r0, [r1]
- orrs r0, r4
- strb r0, [r1]
- adds r3, 0x1
- cmp r3, 0x3
- ble _08120E24
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8120E08
-
- thumb_func_start sub_8120E50
-sub_8120E50: @ 8120E50
- ldr r3, =gUnknown_0203A12C
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, =0x00002e28
- adds r0, r1
- str r0, [r3]
- movs r2, 0
- movs r1, 0x3
- strb r1, [r0]
- ldr r0, [r3]
- strb r2, [r0, 0x1]
- bx lr
- .pool
- thumb_func_end sub_8120E50
-
- thumb_func_start sub_8120E74
-sub_8120E74: @ 8120E74
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x32
- bne _08120E80
- movs r0, 0
-_08120E80:
- bl GetGameStat
- pop {r1}
- bx r1
- thumb_func_end sub_8120E74
-
- thumb_func_start sub_8120E88
-sub_8120E88: @ 8120E88
- push {lr}
- adds r3, r0, 0
- movs r2, 0
- ldr r1, =gUnknown_0859F048
-_08120E90:
- ldrb r0, [r1]
- cmp r0, r3
- bne _08120EA0
- adds r0, r1, 0
- b _08120EAA
- .pool
-_08120EA0:
- adds r1, 0x10
- adds r2, 0x1
- cmp r2, 0x23
- ble _08120E90
- ldr r0, =gUnknown_0859F048+0x230
-_08120EAA:
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_8120E88
-
- thumb_func_start sub_8120EB4
-sub_8120EB4: @ 8120EB4
- push {lr}
- bl sub_8120E88
- ldr r0, [r0, 0x4]
- pop {r1}
- bx r1
- thumb_func_end sub_8120EB4
-
- thumb_func_start sub_8120EC0
-sub_8120EC0: @ 8120EC0
- push {lr}
- bl sub_8120E88
- ldr r0, [r0, 0xC]
- pop {r1}
- bx r1
- thumb_func_end sub_8120EC0
-
- thumb_func_start sub_8120ECC
-sub_8120ECC: @ 8120ECC
- push {lr}
- bl sub_8120E88
- ldr r0, [r0, 0x8]
- pop {r1}
- bx r1
- thumb_func_end sub_8120ECC
-
- thumb_func_start sub_8120ED8
-sub_8120ED8: @ 8120ED8
- push {lr}
- movs r1, 0
- ldr r2, =gUnknown_0203A12C
- ldr r0, [r2]
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- beq _08120EFC
-_08120EE6:
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x3
- bhi _08120EFC
- ldr r0, [r2]
- adds r0, 0x4
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _08120EE6
-_08120EFC:
- adds r0, r1, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_8120ED8
-
- thumb_func_start sub_8120F08
-sub_8120F08: @ 8120F08
- ldr r1, =gUnknown_0203A12C
- lsls r0, 2
- adds r0, 0x24
- ldr r2, [r1]
- adds r2, r0
- ldrb r0, [r2]
- ldrb r1, [r2, 0x1]
- lsls r1, 8
- orrs r0, r1
- ldrb r1, [r2, 0x2]
- lsls r1, 16
- orrs r0, r1
- ldrb r1, [r2, 0x3]
- lsls r1, 24
- orrs r0, r1
- bx lr
- .pool
- thumb_func_end sub_8120F08
-
- thumb_func_start sub_8120F2C
-sub_8120F2C: @ 8120F2C
- ldr r2, =gUnknown_0203A12C
- lsls r0, 2
- adds r0, 0x24
- ldr r2, [r2]
- adds r2, r0
- strb r1, [r2]
- lsrs r0, r1, 8
- strb r0, [r2, 0x1]
- lsrs r0, r1, 16
- strb r0, [r2, 0x2]
- lsrs r1, 24
- strb r1, [r2, 0x3]
- bx lr
- .pool
- thumb_func_end sub_8120F2C
-
- thumb_func_start sub_8120F4C
-sub_8120F4C: @ 8120F4C
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, =gUnknown_0203A12C
- ldr r0, [r0]
- adds r0, 0x4
- adds r0, r5
- ldrb r0, [r0]
- bl sub_8120E74
- adds r4, r0, 0
- adds r0, r5, 0
- bl sub_8120F08
- cmp r4, r0
- bhi _08120F74
- movs r0, 0
- b _08120F76
- .pool
-_08120F74:
- movs r0, 0x1
-_08120F76:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8120F4C
-
- thumb_func_start sub_8120F7C
-sub_8120F7C: @ 8120F7C
- push {r4,r5,lr}
- adds r5, r1, 0
- ldr r2, =gUnknown_0203A12C
- lsls r1, r0, 3
- subs r1, r0
- adds r1, 0x8
- ldr r4, [r2]
- adds r4, r1
- adds r0, r5, 0
- movs r1, 0xFF
- movs r2, 0x8
- bl memset
- adds r0, r5, 0
- adds r1, r4, 0
- movs r2, 0x7
- bl memcpy
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8120F7C
-
- thumb_func_start sub_8120FAC
-sub_8120FAC: @ 8120FAC
- push {r4,r5,lr}
- adds r5, r1, 0
- ldr r2, =gUnknown_0203A12C
- lsls r1, r0, 3
- subs r1, r0
- adds r1, 0x8
- ldr r4, [r2]
- adds r4, r1
- adds r0, r4, 0
- movs r1, 0xFF
- movs r2, 0x7
- bl memset
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0x7
- bl memcpy
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8120FAC
-
- thumb_func_start sub_8120FDC
-sub_8120FDC: @ 8120FDC
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- mov r8, r0
- adds r6, r1, 0
- ldr r0, =gUnknown_0203A12C
- mov r9, r0
- ldr r0, [r0]
- adds r0, 0x4
- add r0, r8
- strb r6, [r0]
- ldr r0, =gSaveBlock2Ptr
- ldr r1, [r0]
- mov r0, r8
- bl sub_8120FAC
- lsls r4, r6, 24
- lsrs r4, 24
- adds r0, r4, 0
- bl sub_8120E74
- adds r1, r0, 0
- mov r0, r8
- bl sub_8120F2C
- ldr r5, =gStringVar1
- adds r0, r4, 0
- bl sub_8120E74
- adds r1, r0, 0
- adds r0, r5, 0
- movs r2, 0
- movs r3, 0xA
- bl ConvertIntToDecimalStringN
- ldr r4, =gStringVar2
- adds r0, r6, 0
- bl sub_8120ECC
- adds r1, r0, 0
- adds r0, r4, 0
- bl StringCopy
- mov r1, r9
- ldr r0, [r1]
- adds r0, 0x34
- add r0, r8
- ldr r1, =gGameLanguage
- ldrb r1, [r1]
- strb r1, [r0]
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8120FDC
-
- thumb_func_start sub_8121064
-sub_8121064: @ 8121064
- push {r4-r7,lr}
- adds r7, r0, 0
- adds r6, r1, 0
- movs r5, 0
- cmp r5, r6
- bge _0812107A
-_08121070:
- adds r0, r7, r5
- strb r5, [r0]
- adds r5, 0x1
- cmp r5, r6
- blt _08121070
-_0812107A:
- cmp r6, 0
- ble _081210B0
- adds r5, r6, 0
-_08121080:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- adds r1, r6, 0
- bl __modsi3
- adds r4, r0, 0
- bl Random
- lsls r0, 16
- lsrs r0, 16
- adds r1, r6, 0
- bl __modsi3
- adds r4, r7, r4
- ldrb r2, [r4]
- adds r0, r7, r0
- ldrb r1, [r0]
- strb r1, [r4]
- strb r2, [r0]
- subs r5, 0x1
- cmp r5, 0
- bne _08121080
-_081210B0:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8121064
-
thumb_func_start sub_81210B8
sub_81210B8: @ 81210B8
push {r4-r7,lr}
diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c
index 1f398569c..04af0e066 100644
--- a/src/mauville_old_man.c
+++ b/src/mauville_old_man.c
@@ -18,6 +18,7 @@
#include "bard_music.h"
#include "sound.h"
#include "strings.h"
+#include "overworld.h"
#define CHAR_SONG_WORD_SEPARATOR 0x37
@@ -35,7 +36,7 @@ void sub_8133A60(void);
struct BardSong gUnknown_03006130;
EWRAM_DATA u16 gUnknown_0203A128 = 0;
-EWRAM_DATA struct MauvilleOldMan * gUnknown_0203A12C = NULL;
+EWRAM_DATA struct MauvilleManStoryteller * gUnknown_0203A12C = NULL;
EWRAM_DATA u8 gUnknown_0203A130 = 0;
static const u16 sDefaultBardSongLyrics[6] = {
@@ -949,3 +950,138 @@ const struct Story gUnknown_0859F048[] = {
{GAME_STAT_RODE_CABLE_CAR, 1, MauvilleCity_PokemonCenter_1F_Text_28FFDD, MauvilleCity_PokemonCenter_1F_Text_28FFFA, MauvilleCity_PokemonCenter_1F_Text_29000D},
{GAME_STAT_ENTERED_HOT_SPRINGS, 1, MauvilleCity_PokemonCenter_1F_Text_290097, MauvilleCity_PokemonCenter_1F_Text_2900B5, MauvilleCity_PokemonCenter_1F_Text_2900CB}
};
+
+void sub_8120E08(void) // StorytellerSetup
+{
+ s32 i;
+ gUnknown_0203A12C = &gSaveBlock1Ptr->oldMan.storyteller;
+
+ gUnknown_0203A12C->id = MAUVILLE_MAN_STORYTELLER;
+ gUnknown_0203A12C->alreadyRecorded = FALSE;
+ for (i = 0; i < 4; i++)
+ {
+ gUnknown_0203A12C->gameStatIDs[i] = 0;
+ gUnknown_0203A12C->trainerNames[0][i] = EOS; // Maybe they meant storyteller->trainerNames[i][0] instead?
+ }
+}
+
+void sub_8120E50(void)
+{
+ gUnknown_0203A12C = &gSaveBlock1Ptr->oldMan.storyteller;
+
+ gUnknown_0203A12C->id = MAUVILLE_MAN_STORYTELLER;
+ gUnknown_0203A12C->alreadyRecorded = FALSE;
+}
+
+u32 sub_8120E74(u8 stat) // StorytellerGetGameStat
+{
+ if (stat == 50)
+ stat = 0;
+ return GetGameStat(stat);
+}
+
+const struct Story *sub_8120E88(u32 stat) // GetStoryByStat
+{
+ s32 i;
+
+ for (i = 0; i < 36; i++)
+ {
+ if (gUnknown_0859F048[i].stat == stat)
+ return &gUnknown_0859F048[i];
+ }
+ return &gUnknown_0859F048[35];
+}
+
+const u8 *sub_8120EB4(u32 stat) // GetStoryTitleByStat
+{
+ return sub_8120E88(stat)->title;
+}
+
+const u8 *sub_8120EC0(u32 stat) // GetStoryTextByStat
+{
+ return sub_8120E88(stat)->fullText;
+}
+
+const u8 *sub_8120ECC(u32 stat) // GetStoryActionByStat
+{
+ return sub_8120E88(stat)->action;
+}
+
+u8 sub_8120ED8(void) // GetFreeStorySlot
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (gUnknown_0203A12C->gameStatIDs[i] == 0)
+ break;
+ }
+ return i;
+}
+
+u32 sub_8120F08(u32 trainer) // StorytellerGetRecordedTrainerStat
+{
+ u8 *ptr = gUnknown_0203A12C->statValues[trainer];
+
+ return ptr[0] | (ptr[1] << 8) | (ptr[2] << 16) | (ptr[3] << 24);
+}
+
+void sub_8120F2C(u32 trainer, u32 val) // StorytellerSetRecordedTrainerStat
+{
+ u8 *ptr = gUnknown_0203A12C->statValues[trainer];
+
+ ptr[0] = val;
+ ptr[1] = val >> 8;
+ ptr[2] = val >> 16;
+ ptr[3] = val >> 24;
+}
+
+bool32 sub_8120F4C(u32 trainer) // HasTrainerStatIncreased
+{
+ if (sub_8120E74(gUnknown_0203A12C->gameStatIDs[trainer]) > sub_8120F08(trainer))
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void sub_8120F7C(u32 player, void *dst) // GetStoryByStattellerPlayerName
+{
+ u8 *name = gUnknown_0203A12C->trainerNames[player];
+
+ memset(dst, EOS, 8);
+ memcpy(dst, name, 7);
+}
+
+void sub_8120FAC(u32 player, const u8 * src) // StorytellerSetPlayerName
+{
+ u8 * name = gUnknown_0203A12C->trainerNames[player];
+ memset(name, EOS, 7);
+ memcpy(name, src, 7);
+}
+
+
+void sub_8120FDC(u32 player, u32 stat) // StorytellerRecordNewStat
+{
+ gUnknown_0203A12C->gameStatIDs[player] = stat;
+ sub_8120FAC(player, gSaveBlock2Ptr->playerName);
+ sub_8120F2C(player, sub_8120E74(stat));
+ ConvertIntToDecimalStringN(gStringVar1, sub_8120E74(stat), STR_CONV_MODE_LEFT_ALIGN, 10);
+ StringCopy(gStringVar2, sub_8120ECC(stat));
+ gUnknown_0203A12C->unk34[player] = gGameLanguage;
+}
+
+void sub_8121064(u8 * arr, s32 count) // ScrambleStatList
+{
+ s32 i;
+
+ for (i = 0; i < count; i++)
+ arr[i] = i;
+ for (i = 0; i < count; i++)
+ {
+ u32 a = Random() % count;
+ u32 b = Random() % count;
+ u8 temp = arr[a];
+ arr[a] = arr[b];
+ arr[b] = temp;
+ }
+}