summaryrefslogtreecommitdiff
path: root/src/help_system.c
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2019-06-13 09:56:44 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2019-06-13 09:56:44 -0400
commit63b2153402e68856e56fbacdc0d74daf53cfa9fc (patch)
treea6584f66fbffb70b85e4317aebb8faba3aacbd23 /src/help_system.c
parent9a1408797c83d9ce3d212d644fe5cf05bc989d10 (diff)
help_system: sub_813B870
Diffstat (limited to 'src/help_system.c')
-rw-r--r--src/help_system.c124
1 files changed, 124 insertions, 0 deletions
diff --git a/src/help_system.c b/src/help_system.c
index 522890780..e7c29a39d 100644
--- a/src/help_system.c
+++ b/src/help_system.c
@@ -1,7 +1,14 @@
#include "global.h"
+#include "decompress.h"
+#include "gpu_regs.h"
#include "main.h"
+#include "m4a.h"
+#include "dma3.h"
#include "help_system.h"
#include "list_menu.h"
+#include "sound.h"
+#include "strings.h"
+#include "constants/songs.h"
struct HelpSystemVideoState
{
@@ -16,6 +23,21 @@ struct HelpSystemVideoState
/*0x15*/ u8 state;
};
+void sub_813BB38(void);
+void sub_813BB74(void);
+void sub_813BBAC(void);
+void sub_813BBC8(void);
+void sub_813BBDC(void);
+void sub_813BCF4(void);
+void sub_813BBF4(void);
+void sub_813BD14(u8);
+void sub_813BF50(u8);
+void sub_813BC2C(void);
+void sub_813BC48(void);
+void sub_813BC5C(void);
+void sub_813C454(const u8 * str);
+void sub_813C5D4(void);
+
EWRAM_DATA u8 gUnknown_203B174[0x4000] = {0};
EWRAM_DATA u8 gUnknown_203F174 = 0;
EWRAM_DATA u8 gUnknown_203F175 = 0;
@@ -24,3 +46,105 @@ EWRAM_DATA u8 gUnknown_203F177 = 0;
EWRAM_DATA struct HelpSystemVideoState gUnknown_203F178 = {0};
EWRAM_DATA struct HelpSystemStruct_203F190 gUnknown_203F190 = {0};
EWRAM_DATA struct ListMenuItem gUnknown_203F1AC[52] = {0};
+
+const u16 gUnknown_8464008[] = INCBIN_U16("graphics/help_system/unk_8464008.4bpp");
+const u16 gUnknown_8464128[] = INCBIN_U16("graphics/help_system/unk_8464008.gbapal");
+
+u8 sub_813B870(void)
+{
+ s32 i;
+
+ switch (gUnknown_203F178.state)
+ {
+ case 0:
+ gUnknown_203F177 = 0;
+ if (gSaveBlock2Ptr->optionsButtonMode != OPTIONS_BUTTON_MODE_NORMAL)
+ return 0;
+ if (JOY_NEW(R_BUTTON) && gUnknown_203F175 == 1)
+ return 0;
+ if (JOY_NEW(L_BUTTON | R_BUTTON))
+ {
+ if (!sub_812B45C() || !gUnknown_3005ECC)
+ {
+ PlaySE(SE_HELP_PAGE);
+ return 0;
+ }
+ m4aMPlayStop(&gMPlayInfo_SE1);
+ m4aMPlayStop(&gMPlayInfo_SE2);
+ PlaySE(SE_HELP_OPEN);
+ if (!gUnknown_203F174)
+ m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x80);
+ sub_813BB38();
+ gUnknown_203F177 = 1;
+ gUnknown_203F178.state = 1;
+ }
+ break;
+ case 1:
+ sub_813BBAC();
+ sub_813BB74();
+ sub_813BBC8();
+ (*(vu16 *)PLTT) = gUnknown_8464128[15];
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ gUnknown_203F178.state = 2;
+ break;
+ case 2:
+ RequestDma3Fill(0, (void *)BG_CHAR_ADDR(3), BG_CHAR_SIZE, 0);
+ RequestDma3Copy(gUnknown_8464128, (void *)PLTT, sizeof(gUnknown_8464128), 0);
+ RequestDma3Copy(gUnknown_8464008, gDecompressionBuffer + 0x3EE0, sizeof(gUnknown_8464008), 0);
+ gUnknown_203F178.state = 3;
+ break;
+ case 3:
+ sub_813BCF4();
+ sub_813C5D4();
+ sub_813C5FC();
+ sub_813C454(gUnknown_841CB49);
+ sub_813BD14(1);
+ if (sub_812B40C() == TRUE)
+ sub_812BC54(&gUnknown_203F190, gUnknown_203F1AC);
+ else
+ sub_812BCA8(&gUnknown_203F190, gUnknown_203F1AC);
+ sub_813BE78(1);
+ sub_813BF50(1);
+ sub_813BC5C();
+ gUnknown_203F178.state = 4;
+ break;
+ case 4:
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BG0HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(3) | BGCNT_16COLOR | BGCNT_SCREENBASE(31));
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_BG0_ON);
+ gUnknown_203F178.state = 5;
+ break;
+ case 5:
+ if (!sub_812BB9C(&gUnknown_203F190, gUnknown_203F1AC))
+ {
+ PlaySE(SE_HELP_CLOSE);
+ gUnknown_203F178.state = 6;
+ }
+ break;
+ case 6:
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ sub_813BC2C();
+ for (i = 0; i < 0x200; i += 2)
+ {
+ *((vu16 *)(PLTT + 0x000 + i)) = gUnknown_8464128[15];
+ *((vu16 *)(PLTT + 0x200 + i)) = gUnknown_8464128[15];
+ }
+ gUnknown_203F178.state = 7;
+ break;
+ case 7:
+ if (!gUnknown_203F174)
+ m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100);
+ sub_813BC48();
+ sub_813BBF4();
+ gUnknown_203F178.state = 8;
+ break;
+ case 8:
+ sub_813BBDC();
+ gUnknown_203F177 = 0;
+ gUnknown_203F178.state = 0;
+ break;
+ }
+ return gUnknown_203F178.state;
+}