summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcamthesaxman <cameronghall@cox.net>2017-08-24 13:40:03 -0500
committercamthesaxman <cameronghall@cox.net>2017-08-24 13:40:03 -0500
commita277e60789d9ea78fe03a4bcded2edf7b91e548e (patch)
treeecba97443221cbd008a270d3835a1a2e175921f3
parent988f5a685a36d3591d07f71ca778d988fb26720a (diff)
finish decompiling mauville_old_man
-rw-r--r--asm/mauville_old_man.s402
-rw-r--r--include/global.h2
-rw-r--r--include/mauville_old_man.h1
-rw-r--r--src/mauville_old_man.c168
4 files changed, 166 insertions, 407 deletions
diff --git a/asm/mauville_old_man.s b/asm/mauville_old_man.s
index 8fc7f90f8..ef4d313d4 100644
--- a/asm/mauville_old_man.s
+++ b/asm/mauville_old_man.s
@@ -6,406 +6,4 @@
.text
- thumb_func_start sub_80F85FC
-sub_80F85FC: @ 80F85FC
- push {r4-r7,lr}
- adds r7, r0, 0
- adds r6, r1, 0
- movs r5, 0
- cmp r5, r6
- bge _080F8612
-_080F8608:
- adds r0, r7, r5
- strb r5, [r0]
- adds r5, 0x1
- cmp r5, r6
- blt _080F8608
-_080F8612:
- cmp r6, 0
- ble _080F8648
- adds r5, r6, 0
-_080F8618:
- 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 _080F8618
-_080F8648:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80F85FC
-
- thumb_func_start sub_80F8650
-sub_80F8650: @ 80F8650
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- mov r7, sp
- mov r10, sp
- ldr r0, _080F86D4 @ =gUnknown_083E5620
- ldr r0, [r0]
- lsls r0, 3
- lsrs r0, 3
- adds r0, 0x3
- lsrs r0, 2
- lsls r0, 2
- mov r1, sp
- subs r1, r0
- mov sp, r1
- mov r8, sp
- mov r0, sp
- movs r1, 0x24
- bl sub_80F85FC
- movs r5, 0
- ldr r0, _080F86D8 @ =gUnknown_083E53E0
- mov r9, r0
- ldr r3, _080F86DC @ =gSaveBlock1 + 0x2D94
-_080F8686:
- mov r1, r8
- adds r0, r1, r5
- ldrb r0, [r0]
- lsls r0, 4
- add r0, r9
- ldrb r4, [r0]
- ldrb r6, [r0, 0x1]
- movs r1, 0
- ldrb r0, [r3, 0x4]
- cmp r0, r4
- beq _080F86AC
- ldr r2, _080F86E0 @ =gSaveBlock1 + 0x2D98
-_080F869E:
- adds r1, 0x1
- cmp r1, 0x3
- bgt _080F86AC
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, r4
- bne _080F869E
-_080F86AC:
- cmp r1, 0x4
- bne _080F86E4
- adds r0, r4, 0
- str r3, [r7]
- bl sub_80F8438
- ldr r3, [r7]
- cmp r0, r6
- bcc _080F86E4
- movs r0, 0x1
- strb r0, [r3, 0x1]
- bl sub_80F849C
- lsls r0, 24
- lsrs r0, 24
- adds r1, r4, 0
- bl sub_80F8598
- movs r0, 0x1
- b _080F86EC
- .align 2, 0
-_080F86D4: .4byte gUnknown_083E5620
-_080F86D8: .4byte gUnknown_083E53E0
-_080F86DC: .4byte gSaveBlock1 + 0x2D94
-_080F86E0: .4byte gSaveBlock1 + 0x2D98
-_080F86E4:
- adds r5, 0x1
- cmp r5, 0x23
- ble _080F8686
- movs r0, 0
-_080F86EC:
- mov sp, r10
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80F8650
-
- thumb_func_start sub_80F8700
-sub_80F8700: @ 80F8700
- push {r4-r6,lr}
- adds r5, r0, 0
- ldr r0, _080F8748 @ =gSaveBlock1 + 0x2D94
- adds r0, 0x4
- adds r0, r5, r0
- ldrb r6, [r0]
- ldr r4, _080F874C @ =gStringVar1
- adds r0, r5, 0
- bl sub_80F84C8
- adds r1, r0, 0
- adds r0, r4, 0
- movs r2, 0
- movs r3, 0xA
- bl ConvertIntToDecimalStringN
- ldr r4, _080F8750 @ =gStringVar2
- adds r0, r6, 0
- bl sub_80F8490
- adds r1, r0, 0
- adds r0, r4, 0
- bl StringCopy
- ldr r1, _080F8754 @ =gStringVar3
- adds r0, r5, 0
- bl sub_80F8534
- adds r0, r6, 0
- bl sub_80F8484
- bl ShowFieldMessage
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F8748: .4byte gSaveBlock1 + 0x2D94
-_080F874C: .4byte gStringVar1
-_080F8750: .4byte gStringVar2
-_080F8754: .4byte gStringVar3
- thumb_func_end sub_80F8700
-
- thumb_func_start sub_80F8758
-sub_80F8758: @ 80F8758
- push {r4-r6,lr}
- bl sub_80F849C
- adds r3, r0, 0
- lsls r3, 25
- movs r0, 0x80
- lsls r0, 19
- adds r3, r0
- lsrs r3, 24
- movs r0, 0
- movs r1, 0
- movs r2, 0x19
- bl MenuDrawTextWindow
- movs r4, 0
- ldr r1, _080F87BC @ =gSaveBlock1 + 0x2D94
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _080F87A4
- adds r6, r1, 0x4
- movs r5, 0x80
- lsls r5, 18
-_080F8784:
- bl sub_80F8478
- lsrs r2, r5, 24
- movs r1, 0x1
- bl MenuPrint
- movs r1, 0x80
- lsls r1, 18
- adds r5, r1
- adds r4, 0x1
- cmp r4, 0x3
- bgt _080F87A4
- adds r0, r4, r6
- ldrb r0, [r0]
- cmp r0, 0
- bne _080F8784
-_080F87A4:
- ldr r0, _080F87C0 @ =gPCText_Cancel
- lsls r2, r4, 25
- movs r1, 0x80
- lsls r1, 18
- adds r2, r1
- lsrs r2, 24
- movs r1, 0x1
- bl MenuPrint
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F87BC: .4byte gSaveBlock1 + 0x2D94
-_080F87C0: .4byte gPCText_Cancel
- thumb_func_end sub_80F8758
-
- thumb_func_start sub_80F87C4
-sub_80F87C4: @ 80F87C4
- push {r4-r6,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, _080F87E4 @ =gTasks
- adds r4, r0, r1
- movs r0, 0x8
- ldrsh r5, [r4, r0]
- cmp r5, 0
- beq _080F87E8
- cmp r5, 0x1
- beq _080F8810
- b _080F8862
- .align 2, 0
-_080F87E4: .4byte gTasks
-_080F87E8:
- bl sub_80F8758
- bl sub_80F849C
- adds r3, r0, 0
- adds r3, 0x1
- lsls r3, 24
- lsrs r3, 24
- str r5, [sp]
- movs r0, 0x18
- str r0, [sp, 0x4]
- movs r0, 0
- movs r1, 0x1
- movs r2, 0x2
- bl InitMenu
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _080F8862
-_080F8810:
- bl ProcessMenuInput
- lsls r0, 24
- asrs r4, r0, 24
- movs r0, 0x2
- negs r0, r0
- cmp r4, r0
- beq _080F8862
- adds r0, 0x1
- cmp r4, r0
- beq _080F8832
- bl sub_80F849C
- lsls r0, 24
- lsrs r0, 24
- cmp r4, r0
- bne _080F8840
-_080F8832:
- ldr r1, _080F883C @ =gScriptResult
- movs r0, 0
- strh r0, [r1]
- b _080F8848
- .align 2, 0
-_080F883C: .4byte gScriptResult
-_080F8840:
- ldr r0, _080F886C @ =gScriptResult
- strh r5, [r0]
- ldr r0, _080F8870 @ =gUnknown_03000748
- strb r4, [r0]
-_080F8848:
- bl HandleDestroyMenuCursors
- movs r0, 0
- movs r1, 0
- movs r2, 0x19
- movs r3, 0xC
- bl MenuZeroFillWindowRect
- adds r0, r6, 0
- bl DestroyTask
- bl EnableBothScriptContexts
-_080F8862:
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F886C: .4byte gScriptResult
-_080F8870: .4byte gUnknown_03000748
- thumb_func_end sub_80F87C4
-
- thumb_func_start sub_80F8874
-sub_80F8874: @ 80F8874
- push {lr}
- ldr r0, _080F8884 @ =sub_80F87C4
- movs r1, 0x50
- bl CreateTask
- pop {r0}
- bx r0
- .align 2, 0
-_080F8884: .4byte sub_80F87C4
- thumb_func_end sub_80F8874
-
- thumb_func_start sub_80F8888
-sub_80F8888: @ 80F8888
- push {lr}
- ldr r0, _080F8898 @ =gUnknown_03000748
- ldrb r0, [r0]
- bl sub_80F8700
- pop {r0}
- bx r0
- .align 2, 0
-_080F8898: .4byte gUnknown_03000748
- thumb_func_end sub_80F8888
-
- thumb_func_start sub_80F889C
-sub_80F889C: @ 80F889C
- push {lr}
- bl sub_80F849C
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end sub_80F889C
-
- thumb_func_start sub_80F88AC
-sub_80F88AC: @ 80F88AC
- push {r4,r5,lr}
- ldr r1, _080F88C8 @ =gSaveBlock1 + 0x2D94
- ldr r5, _080F88CC @ =gUnknown_03000748
- ldrb r0, [r5]
- adds r1, 0x4
- adds r1, r0, r1
- ldrb r4, [r1]
- bl sub_80F8508
- cmp r0, 0x1
- beq _080F88D0
- movs r0, 0
- b _080F88DA
- .align 2, 0
-_080F88C8: .4byte gSaveBlock1 + 0x2D94
-_080F88CC: .4byte gUnknown_03000748
-_080F88D0:
- ldrb r0, [r5]
- adds r1, r4, 0
- bl sub_80F8598
- movs r0, 0x1
-_080F88DA:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_80F88AC
-
- thumb_func_start sub_80F88E0
-sub_80F88E0: @ 80F88E0
- push {lr}
- ldr r0, _080F88F0 @ =gSaveBlock1 + 0x2D94
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _080F88F4
- movs r0, 0x1
- b _080F88F6
- .align 2, 0
-_080F88F0: .4byte gSaveBlock1 + 0x2D94
-_080F88F4:
- movs r0, 0
-_080F88F6:
- pop {r1}
- bx r1
- thumb_func_end sub_80F88E0
-
- thumb_func_start sub_80F88FC
-sub_80F88FC: @ 80F88FC
- push {lr}
- bl sub_80F8650
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end sub_80F88FC
-
.align 2, 0 @ Don't pad with nop.
diff --git a/include/global.h b/include/global.h
index 67039d50e..f172c12a3 100644
--- a/include/global.h
+++ b/include/global.h
@@ -484,7 +484,7 @@ struct MauvilleManTrader
struct MauvilleManStoryteller
{
u8 id;
- u8 unk1;
+ bool8 unk1;
u8 filler2[2];
u8 unk4[4];
u8 unk8[4][7];
diff --git a/include/mauville_old_man.h b/include/mauville_old_man.h
index 2fd467029..43bf3e093 100644
--- a/include/mauville_old_man.h
+++ b/include/mauville_old_man.h
@@ -16,6 +16,5 @@ void sub_80F7DC0(void);
void sub_80F7F30(void);
void sub_80F7F80(u8);
void sub_80F83D0(void);
-void StorytellerSetup(void);
#endif // GUARD_MAUVILLE_OLD_MAN_H
diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c
index 87bc87e3b..9400dfc32 100644
--- a/src/mauville_old_man.c
+++ b/src/mauville_old_man.c
@@ -4,6 +4,7 @@
#include "easy_chat.h"
#include "easy_chat_constants.h"
#include "event_data.h"
+#include "field_message_box.h"
#include "m4a.h"
#include "menu.h"
#include "rom4.h"
@@ -70,6 +71,7 @@ const u8 *const gGiddyQuestions[] =
};
void sub_80F8184(u8);
+void StorytellerSetup(void);
void sub_80F8428(void);
void SetupBard(void)
@@ -889,7 +891,7 @@ void StorytellerSetup(void)
s32 i;
storyteller->id = MAUVILLE_MAN_STORYTELLER;
- storyteller->unk1 = 0;
+ storyteller->unk1 = FALSE;
for (i = 0; i < 4; i++)
{
storyteller->unk4[i] = 0;
@@ -902,7 +904,7 @@ void sub_80F8428(void)
struct MauvilleManStoryteller *storyteller = &gSaveBlock1.oldMan.storyteller;
storyteller->id = MAUVILLE_MAN_STORYTELLER;
- storyteller->unk1 = 0;
+ storyteller->unk1 = FALSE;
}
u32 sub_80F8438(u8 stat)
@@ -981,7 +983,7 @@ void sub_80F84EC(u32 a, u32 b)
ptr[3] = b >> 24;
}
-bool8 sub_80F8508(u32 a)
+bool32 sub_80F8508(u32 a)
{
struct MauvilleManStoryteller *storyteller = &gSaveBlock1.oldMan.storyteller;
@@ -1018,3 +1020,163 @@ void sub_80F8598(u32 a, u32 b)
ConvertIntToDecimalStringN(gStringVar1, sub_80F8438(b), 0, 10);
StringCopy(gStringVar2, sub_80F8490(b));
}
+
+void sub_80F85FC(u8 *arr, s32 count)
+{
+ 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;
+ }
+}
+
+extern const struct {u32 unk0; struct MauvilleManStoryteller *unk4; u32 unk8;} gUnknown_083E5620;
+/*
+static const struct {u32 unk0; struct MauvilleManStoryteller *unk4; u32 unk8;} gUnknown_083E5620 =
+{
+ 36,
+ &gSaveBlock1.oldMan.storyteller,
+ 12,
+};
+*/
+
+bool8 sub_80F8650(void)
+{
+ u8 arr[gUnknown_083E5620.unk0];
+ s32 i;
+ s32 j;
+
+ sub_80F85FC(arr, 36);
+ for (i = 0; i < 36; i++)
+ {
+ u8 r4 = gUnknown_083E53E0[arr[i]].unk0;
+ u8 r6 = gUnknown_083E53E0[arr[i]].unk1;
+ struct MauvilleManStoryteller *storyteller = &gSaveBlock1.oldMan.storyteller;
+
+ for (j = 0; j < 4; j++)
+ {
+ if (gSaveBlock1.oldMan.storyteller.unk4[j] == r4)
+ break;
+ }
+ if (j == 4 && sub_80F8438(r4) >= r6)
+ {
+ storyteller->unk1 = TRUE;
+ sub_80F8598(sub_80F849C(), r4);
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+void sub_80F8700(u32 a)
+{
+ struct MauvilleManStoryteller *storyteller = &gSaveBlock1.oldMan.storyteller;
+ u8 r6 = storyteller->unk4[a];
+
+ ConvertIntToDecimalStringN(gStringVar1, sub_80F84C8(a), 0, 10);
+ StringCopy(gStringVar2, sub_80F8490(r6));
+ sub_80F8534(a, gStringVar3);
+ ShowFieldMessage(sub_80F8484(r6));
+}
+
+void sub_80F8758(void)
+{
+ s32 i;
+
+ MenuDrawTextWindow(0, 0, 25, 4 + sub_80F849C() * 2);
+ for (i = 0; i < 4; i++)
+ {
+ struct MauvilleManStoryteller *storyteller = &gSaveBlock1.oldMan.storyteller;
+ u8 r0 = storyteller->unk4[i];
+
+ if (r0 == 0)
+ break;
+ MenuPrint(sub_80F8478(r0), 1, 2 + i * 2);
+ }
+ MenuPrint(gPCText_Cancel, 1, 2 + i * 2);
+}
+
+extern u8 gUnknown_03000748;
+
+void sub_80F87C4(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+ s32 selection;
+
+ switch (task->data[0])
+ {
+ case 0:
+ sub_80F8758();
+ InitMenu(0, 1, 2, sub_80F849C() + 1, 0, 24);
+ task->data[0]++;
+ break;
+ case 1:
+ selection = ProcessMenuInput();
+ if (selection == -2)
+ break;
+ if (selection == -1 || selection == sub_80F849C())
+ {
+ gScriptResult = 0;
+ }
+ else
+ {
+ gScriptResult = 1;
+ gUnknown_03000748 = selection;
+ }
+ HandleDestroyMenuCursors();
+ MenuZeroFillWindowRect(0, 0, 25, 12);
+ DestroyTask(taskId);
+ EnableBothScriptContexts();
+ break;
+ }
+}
+
+void sub_80F8874(void)
+{
+ CreateTask(sub_80F87C4, 0x50);
+}
+
+void sub_80F8888(void)
+{
+ sub_80F8700(gUnknown_03000748);
+}
+
+u8 sub_80F889C(void)
+{
+ return sub_80F849C();
+}
+
+bool8 sub_80F88AC(void)
+{
+ struct MauvilleManStoryteller *storyteller = &gSaveBlock1.oldMan.storyteller;
+ u8 r4 = storyteller->unk4[gUnknown_03000748];
+
+ if (sub_80F8508(gUnknown_03000748) == TRUE)
+ {
+ sub_80F8598(gUnknown_03000748, r4);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool8 sub_80F88E0(void)
+{
+ struct MauvilleManStoryteller *storyteller = &gSaveBlock1.oldMan.storyteller;
+
+ if (storyteller->unk1 == FALSE)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+bool8 sub_80F88FC(void)
+{
+ return sub_80F8650();
+}