summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/help_system.s301
-rw-r--r--data/data_83FECCC.s62
-rw-r--r--data/help_system.s8
-rw-r--r--graphics/help_system/unk_8464008.pngbin0 -> 200 bytes
-rw-r--r--include/constants/songs.h6
-rw-r--r--include/help_system.h10
-rw-r--r--include/m4a.h5
-rw-r--r--include/songs.h468
-rw-r--r--include/strings.h4
-rw-r--r--ld_script.txt2
-rw-r--r--src/help_system.c124
11 files changed, 185 insertions, 805 deletions
diff --git a/asm/help_system.s b/asm/help_system.s
index 783bc19b8..a53ad9457 100644
--- a/asm/help_system.s
+++ b/asm/help_system.s
@@ -5,307 +5,6 @@
.text
- thumb_func_start sub_813B870
-sub_813B870: @ 813B870
- push {r4,r5,lr}
- ldr r0, _0813B888 @ =gUnknown_203F178
- ldrb r0, [r0, 0x15]
- cmp r0, 0x8
- bls _0813B87C
- b _0813BB24
-_0813B87C:
- lsls r0, 2
- ldr r1, _0813B88C @ =_0813B890
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0813B888: .4byte gUnknown_203F178
-_0813B88C: .4byte _0813B890
- .align 2, 0
-_0813B890:
- .4byte _0813B8B4
- .4byte _0813B968
- .4byte _0813B994
- .4byte _0813B9D8
- .4byte _0813BA40
- .4byte _0813BA78
- .4byte _0813BAA0
- .4byte _0813BAE0
- .4byte _0813BB14
-_0813B8B4:
- ldr r1, _0813B904 @ =gUnknown_203F177
- movs r0, 0
- strb r0, [r1]
- ldr r0, _0813B908 @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x13]
- cmp r0, 0
- bne _0813B900
- ldr r2, _0813B90C @ =gMain
- ldrh r1, [r2, 0x2E]
- movs r0, 0x80
- lsls r0, 1
- ands r0, r1
- cmp r0, 0
- beq _0813B8DA
- ldr r0, _0813B910 @ =gUnknown_203F175
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0813B900
-_0813B8DA:
- ldrh r1, [r2, 0x2E]
- movs r0, 0xC0
- lsls r0, 2
- ands r0, r1
- cmp r0, 0
- bne _0813B8E8
- b _0813BB24
-_0813B8E8:
- bl sub_812B45C
- lsls r0, 24
- cmp r0, 0
- beq _0813B8FA
- ldr r0, _0813B914 @ =gUnknown_3005ECC
- ldrb r0, [r0]
- cmp r0, 0
- bne _0813B918
-_0813B8FA:
- movs r0, 0xFC
- bl PlaySE
-_0813B900:
- movs r0, 0
- b _0813BB28
- .align 2, 0
-_0813B904: .4byte gUnknown_203F177
-_0813B908: .4byte gSaveBlock2Ptr
-_0813B90C: .4byte gMain
-_0813B910: .4byte gUnknown_203F175
-_0813B914: .4byte gUnknown_3005ECC
-_0813B918:
- ldr r0, _0813B94C @ =gMPlayInfo_SE1
- bl m4aMPlayStop
- ldr r0, _0813B950 @ =gMPlayInfo_SE2
- bl m4aMPlayStop
- movs r0, 0xFA
- bl PlaySE
- ldr r0, _0813B954 @ =gUnknown_203F174
- ldrb r0, [r0]
- cmp r0, 0
- bne _0813B93C
- ldr r0, _0813B958 @ =gMPlayInfo_BGM
- ldr r1, _0813B95C @ =0x0000ffff
- movs r2, 0x80
- bl m4aMPlayVolumeControl
-_0813B93C:
- bl sub_813BB38
- ldr r1, _0813B960 @ =gUnknown_203F177
- movs r0, 0x1
- strb r0, [r1]
- ldr r1, _0813B964 @ =gUnknown_203F178
- movs r0, 0x1
- b _0813BB22
- .align 2, 0
-_0813B94C: .4byte gMPlayInfo_SE1
-_0813B950: .4byte gMPlayInfo_SE2
-_0813B954: .4byte gUnknown_203F174
-_0813B958: .4byte gMPlayInfo_BGM
-_0813B95C: .4byte 0x0000ffff
-_0813B960: .4byte gUnknown_203F177
-_0813B964: .4byte gUnknown_203F178
-_0813B968:
- bl sub_813BBAC
- bl sub_813BB74
- bl sub_813BBC8
- movs r1, 0xA0
- lsls r1, 19
- ldr r0, _0813B98C @ =gUnknown_8464128
- ldrh r0, [r0, 0x1E]
- strh r0, [r1]
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- ldr r1, _0813B990 @ =gUnknown_203F178
- movs r0, 0x2
- b _0813BB22
- .align 2, 0
-_0813B98C: .4byte gUnknown_8464128
-_0813B990: .4byte gUnknown_203F178
-_0813B994:
- ldr r1, _0813B9C4 @ =0x0600c000
- movs r2, 0x80
- lsls r2, 7
- movs r0, 0
- movs r3, 0
- bl RequestDma3Fill
- ldr r0, _0813B9C8 @ =gUnknown_8464128
- movs r1, 0xA0
- lsls r1, 19
- movs r2, 0x20
- movs r3, 0
- bl RequestDma3Copy
- ldr r0, _0813B9CC @ =gUnknown_8464008
- ldr r1, _0813B9D0 @ =gDecompressionBuffer + 0x3EE0
- movs r2, 0x90
- lsls r2, 1
- movs r3, 0
- bl RequestDma3Copy
- ldr r1, _0813B9D4 @ =gUnknown_203F178
- movs r0, 0x3
- b _0813BB22
- .align 2, 0
-_0813B9C4: .4byte 0x0600c000
-_0813B9C8: .4byte gUnknown_8464128
-_0813B9CC: .4byte gUnknown_8464008
-_0813B9D0: .4byte gDecompressionBuffer + 0x3EE0
-_0813B9D4: .4byte gUnknown_203F178
-_0813B9D8:
- bl sub_813BCF4
- bl sub_813C5D4
- bl sub_813C5FC
- ldr r0, _0813BA08 @ =gUnknown_841CB49
- bl sub_813C454
- movs r0, 0x1
- bl sub_813BD14
- bl sub_812B40C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0813BA14
- ldr r0, _0813BA0C @ =gUnknown_203F190
- ldr r1, _0813BA10 @ =gUnknown_203F1AC
- bl sub_812BC54
- b _0813BA1C
- .align 2, 0
-_0813BA08: .4byte gUnknown_841CB49
-_0813BA0C: .4byte gUnknown_203F190
-_0813BA10: .4byte gUnknown_203F1AC
-_0813BA14:
- ldr r0, _0813BA34 @ =gUnknown_203F190
- ldr r1, _0813BA38 @ =gUnknown_203F1AC
- bl sub_812BCA8
-_0813BA1C:
- movs r0, 0x1
- bl sub_813BE78
- movs r0, 0x1
- bl sub_813BF50
- bl sub_813BC5C
- ldr r1, _0813BA3C @ =gUnknown_203F178
- movs r0, 0x4
- b _0813BB22
- .align 2, 0
-_0813BA34: .4byte gUnknown_203F190
-_0813BA38: .4byte gUnknown_203F1AC
-_0813BA3C: .4byte gUnknown_203F178
-_0813BA40:
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x10
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x12
- movs r1, 0
- bl SetGpuReg
- ldr r1, _0813BA70 @ =0x00001f0c
- movs r0, 0x8
- bl SetGpuReg
- movs r1, 0x80
- lsls r1, 1
- movs r0, 0
- bl SetGpuReg
- ldr r1, _0813BA74 @ =gUnknown_203F178
- movs r0, 0x5
- b _0813BB22
- .align 2, 0
-_0813BA70: .4byte 0x00001f0c
-_0813BA74: .4byte gUnknown_203F178
-_0813BA78:
- ldr r0, _0813BA94 @ =gUnknown_203F190
- ldr r1, _0813BA98 @ =gUnknown_203F1AC
- bl sub_812BB9C
- lsls r0, 24
- cmp r0, 0
- bne _0813BB24
- movs r0, 0xFB
- bl PlaySE
- ldr r1, _0813BA9C @ =gUnknown_203F178
- movs r0, 0x6
- b _0813BB22
- .align 2, 0
-_0813BA94: .4byte gUnknown_203F190
-_0813BA98: .4byte gUnknown_203F1AC
-_0813BA9C: .4byte gUnknown_203F178
-_0813BAA0:
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- bl sub_813BC2C
- movs r1, 0
- ldr r5, _0813BAD0 @ =0x000001ff
- movs r4, 0xA0
- lsls r4, 19
- ldr r0, _0813BAD4 @ =gUnknown_8464128
- ldrh r2, [r0, 0x1E]
- ldr r3, _0813BAD8 @ =0x05000200
-_0813BABA:
- adds r0, r1, r4
- strh r2, [r0]
- adds r0, r1, r3
- strh r2, [r0]
- adds r1, 0x2
- cmp r1, r5
- ble _0813BABA
- ldr r1, _0813BADC @ =gUnknown_203F178
- movs r0, 0x7
- b _0813BB22
- .align 2, 0
-_0813BAD0: .4byte 0x000001ff
-_0813BAD4: .4byte gUnknown_8464128
-_0813BAD8: .4byte 0x05000200
-_0813BADC: .4byte gUnknown_203F178
-_0813BAE0:
- ldr r0, _0813BB04 @ =gUnknown_203F174
- ldrb r0, [r0]
- cmp r0, 0
- bne _0813BAF4
- ldr r0, _0813BB08 @ =gMPlayInfo_BGM
- ldr r1, _0813BB0C @ =0x0000ffff
- movs r2, 0x80
- lsls r2, 1
- bl m4aMPlayVolumeControl
-_0813BAF4:
- bl sub_813BC48
- bl sub_813BBF4
- ldr r1, _0813BB10 @ =gUnknown_203F178
- movs r0, 0x8
- b _0813BB22
- .align 2, 0
-_0813BB04: .4byte gUnknown_203F174
-_0813BB08: .4byte gMPlayInfo_BGM
-_0813BB0C: .4byte 0x0000ffff
-_0813BB10: .4byte gUnknown_203F178
-_0813BB14:
- bl sub_813BBDC
- ldr r1, _0813BB30 @ =gUnknown_203F177
- movs r0, 0
- strb r0, [r1]
- ldr r1, _0813BB34 @ =gUnknown_203F178
- movs r0, 0
-_0813BB22:
- strb r0, [r1, 0x15]
-_0813BB24:
- ldr r0, _0813BB34 @ =gUnknown_203F178
- ldrb r0, [r0, 0x15]
-_0813BB28:
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0813BB30: .4byte gUnknown_203F177
-_0813BB34: .4byte gUnknown_203F178
- thumb_func_end sub_813B870
-
thumb_func_start sub_813BB38
sub_813BB38: @ 813BB38
ldr r2, _0813BB60 @ =gUnknown_203F178
diff --git a/data/data_83FECCC.s b/data/data_83FECCC.s
index eb922b028..1e47c8b2a 100644
--- a/data/data_83FECCC.s
+++ b/data/data_83FECCC.s
@@ -1913,76 +1913,90 @@ gUnknown_841B779:: @ 841B779
.include "data/text/teachy_tv.inc"
gUnknown_841CB3C:: @ 841CB3C
- .incbin "baserom.gba", 0x41CB3C, 0x5
+ .string "BILL$"
gUnknown_841CB41:: @ 841CB41
- .incbin "baserom.gba", 0x41CB41, 0x8
+ .string "SOMEONE$"
gUnknown_841CB49:: @ 841CB49
- .incbin "baserom.gba", 0x41CB49, 0x5
+ .string "HELP$"
gUnknown_841CB4E:: @ 841CB4E
- .incbin "baserom.gba", 0x41CB4E, 0x4
+ .string "{CLEAR_TO 8}$"
gUnknown_841CB52:: @ 841CB52
- .incbin "baserom.gba", 0x41CB52, 0x8
+ .string " points$"
gUnknown_841CB5A:: @ 841CB5A
- .incbin "baserom.gba", 0x41CB5A, 0x9
+ .string " time(s)$"
gUnknown_841CB63:: @ 841CB63
- .incbin "baserom.gba", 0x41CB63, 0x46
+ .string "POKéMON JUMP RECORDS$"
+ .string "Jumps in a row:$"
+ .string "Best score:$"
+ .string "EXCELLENTS in a row:$"
gUnknown_841CBA9:: @ 841CBA9
- .incbin "baserom.gba", 0x41CBA9, 0x21
+ .string "Awesome score! You've\n"
+ .string "won {UNKNOWN_F7 01} {UNKNOWN_F7 00}!$"
gUnknown_841CBCA:: @ 841CBCA
- .incbin "baserom.gba", 0x41CBCA, 0x1A
+ .string "There's no room left now.$"
gUnknown_841CBE4:: @ 841CBE4
- .incbin "baserom.gba", 0x41CBE4, 0x19
+ .string "You can't hold any more!$"
gUnknown_841CBFD:: @ 841CBFD
- .incbin "baserom.gba", 0x41CBFD, 0x14
+ .string "Want to play again?$"
gUnknown_841CC11:: @ 841CC11
- .incbin "baserom.gba", 0x41CC11, 0x31
+ .string "Somebody dropped out.\nThe link will be canceled.$"
gUnknown_841CC42:: @ 841CC42
- .incbin "baserom.gba", 0x41CC42, 0x22
+ .string "SAVING…\nDON'T TURN OFF THE POWER.$"
gUnknown_841CC64:: @ 841CC64
- .incbin "baserom.gba", 0x41CC64, 0x9F
+ .string "Communication standby…$"
+ .string "SAVING...\nDON'T TURN OFF THE POWER.$"
+ .string "DODRIO BERRY-PICKING RECORDS$"
+ .string "BERRIES picked:$"
+ .string "Best score:$"
+ .string "BERRIES picked in a row with\nfive players:$"
gUnknown_841CD03:: @ 841CD03
- .incbin "baserom.gba", 0x41CD03, 0x22
+ .string "Announcing BERRY-PICKING results!$"
gUnknown_841CD25:: @ 841CD25
- .incbin "baserom.gba", 0x41CD25, 0x1E
+ .string "10P 30P 50P {EXTRA 0xDD}50P$"
gUnknown_841CD43:: @ 841CD43
- .incbin "baserom.gba", 0x41CD43, 0x15
+ .string "Announcing rankings!$"
gUnknown_841CD58:: @ 841CD58
- .incbin "baserom.gba", 0x41CD58, 0x22
+ .string "Announcing prizes!$"
+ .string "1:$"
+ .string "2:$"
+ .string "3:$"
+ .string "4:$"
+ .string "5:$"
gUnknown_841CD7A:: @ 841CD7A
- .incbin "baserom.gba", 0x41CD7A, 0x25
+ .string "The first-place winner gets\nthis {UNKNOWN_F7 00}!$"
gUnknown_841CD9F:: @ 841CD9F
- .incbin "baserom.gba", 0x41CD9F, 0x1B
+ .string "You can't hold any more...$"
gUnknown_841CDBA:: @ 841CDBA
- .incbin "baserom.gba", 0x41CDBA, 0x1D
+ .string "It filled its storage space.$"
gUnknown_841CDD7:: @ 841CDD7
- .incbin "baserom.gba", 0x41CDD7, 0x14
+ .string "Want to play again?$"
gUnknown_841CDEB:: @ 841CDEB
- .incbin "baserom.gba", 0x41CDEB, 0x31
+ .string "Somebody dropped out.\nThe link will be canceled.$"
gUnknown_841CE1C:: @ 841CE1C
- .incbin "baserom.gba", 0x41CE1C, 0x8
+ .string " points$"
gUnknown_841CE24:: @ 841CE24
.incbin "baserom.gba", 0x41CE24, 0x1FC
diff --git a/data/help_system.s b/data/help_system.s
deleted file mode 100644
index 3031f4c7f..000000000
--- a/data/help_system.s
+++ /dev/null
@@ -1,8 +0,0 @@
- .section .rodata
- .align 2
-
-gUnknown_8464008:: @ 8464008
- .incbin "baserom.gba", 0x464008, 0x120
-
-gUnknown_8464128:: @ 8464128
- .incbin "baserom.gba", 0x464128, 0x20
diff --git a/graphics/help_system/unk_8464008.png b/graphics/help_system/unk_8464008.png
new file mode 100644
index 000000000..339a685d5
--- /dev/null
+++ b/graphics/help_system/unk_8464008.png
Binary files differ
diff --git a/include/constants/songs.h b/include/constants/songs.h
index b83b84f26..1f65585bd 100644
--- a/include/constants/songs.h
+++ b/include/constants/songs.h
@@ -252,6 +252,10 @@
#define SE_W063B 247
#define SE_CASHIER 248
+#define SE_HELP_OPEN 250
+#define SE_HELP_CLOSE 251
+#define SE_HELP_PAGE 252
+
#define MUS_ME_ASA 256
#define MUS_FANFA1 257
#define MUS_FANFA4 258
@@ -480,4 +484,4 @@
#define BGM_BATTLE30 483
#define BGM_ROUTE_118 0x7FFF // What is this for?
-#endif // GUARD_CONSTANTS_SONGS_H
+#endif \ No newline at end of file
diff --git a/include/help_system.h b/include/help_system.h
index 1f8b7bbbb..ff45125b2 100644
--- a/include/help_system.h
+++ b/include/help_system.h
@@ -27,11 +27,15 @@ extern struct ListMenuItem gUnknown_203F1AC[];
extern bool8 gUnknown_3005ECC;
extern u8 gUnknown_203F175;
+// help_system_812B1E0
void sub_812B1E0(u8);
-void sub_812B484(void);
-void sub_812B4B8(void);
void HelpSystem_SetSomeVariable2(u8);
+bool8 sub_812B40C(void);
+bool8 sub_812B45C(void);
void sub_812B478(void);
+void sub_812B484(void);
+void sub_812B4B8(void);
+bool8 sub_812BB9C(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1);
bool8 sub_812BC54(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1);
bool8 sub_812BC80(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1);
bool8 sub_812BCA8(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1);
@@ -42,6 +46,8 @@ bool8 sub_812BD98(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1
bool8 sub_812BE10(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1);
bool8 sub_812BEEC(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1);
bool8 sub_812BF18(struct HelpSystemStruct_203F190 * a0, struct ListMenuItem * a1);
+
+// help_system
void sub_813C64C(struct HelpSystemStruct_203F190 *, u8, u8);
void sub_813C4CC(const u8 *, u8, u8);
void sub_813BDA4(u8);
diff --git a/include/m4a.h b/include/m4a.h
index 24b454104..2bb7f2124 100644
--- a/include/m4a.h
+++ b/include/m4a.h
@@ -5,6 +5,11 @@
#include "gba/m4a_internal.h"
+extern struct MusicPlayerInfo gMPlayInfo_BGM;
+extern struct MusicPlayerInfo gMPlayInfo_SE1;
+extern struct MusicPlayerInfo gMPlayInfo_SE2;
+extern struct MusicPlayerInfo gMPlayInfo_SE3;
+
void m4aSoundVSync(void);
void m4aSoundVSyncOn(void);
diff --git a/include/songs.h b/include/songs.h
deleted file mode 100644
index f8d0fbf5b..000000000
--- a/include/songs.h
+++ /dev/null
@@ -1,468 +0,0 @@
-#ifndef GUARD_SONGS_H
-#define GUARD_SONGS_H
-
-#include "global.h"
-
-enum
-{
- /*0x00*/ SE_STOP,
- /*0x01*/ SE_KAIFUKU,
- /*0x02*/ SE_PC_LOGON,
- /*0x03*/ SE_PC_OFF,
- /*0x04*/ SE_PC_ON,
- /*0x05*/ SE_SELECT,
- /*0x06*/ SE_WIN_OPEN,
- /*0x07*/ SE_WALL_HIT,
- /*0x08*/ SE_DOOR,
- /*0x09*/ SE_KAIDAN,
- /*0x0A*/ SE_DANSA,
- /*0x0B*/ SE_JITENSYA,
- /*0x0C*/ SE_KOUKA_L, // Goggle told me Kouka means 'effectiveness' which makes sense, because
- /*0x0D*/ SE_KOUKA_M, // those three sounds play whenever you use a move
- /*0x0E*/ SE_KOUKA_H,
- /*0x0F*/ SE_BOWA2,
- /*0x10*/ SE_POKE_DEAD,
- /*0x11*/ SE_NIGERU,
- /*0x12*/ SE_JIDO_DOA,
- /*0x13*/ SE_NAMINORI,
- /*0x14*/ SE_BAN,
- /*0x15*/ SE_PIN,
- /*0x16*/ SE_BOO,
- /*0x17*/ SE_BOWA,
- /*0x18*/ SE_JYUNI,
- /*0x19*/ SE_A,
- /*0x1A*/ SE_I,
- /*0x1B*/ SE_U,
- /*0x1C*/ SE_E,
- /*0x1D*/ SE_O,
- /*0x1E*/ SE_N,
- /*0x1F*/ SE_SEIKAI,
- /*0x20*/ SE_HAZURE,
- /*0x21*/ SE_EXP,
- /*0x22*/ SE_JITE_PYOKO,
- /*0x23*/ SE_MU_PACHI,
- /*0x24*/ SE_TK_KASYA,
- /*0x25*/ SE_FU_ZAKU,
- /*0x26*/ SE_FU_ZAKU2,
- /*0x27*/ SE_FU_ZUZUZU,
- /*0x28*/ SE_RU_GASHIN,
- /*0x29*/ SE_RU_GASYAN,
- /*0x2A*/ SE_RU_BARI,
- /*0x2B*/ SE_RU_HYUU,
- /*0x2C*/ SE_KI_GASYAN,
- /*0x2D*/ SE_TK_WARPIN,
- /*0x2E*/ SE_TK_WARPOUT,
- /*0x2F*/ SE_TU_SAA,
- /*0x30*/ SE_HI_TURUN,
- /*0x31*/ SE_TRACK_MOVE,
- /*0x32*/ SE_TRACK_STOP,
- /*0x33*/ SE_TRACK_HAIK,
- /*0x34*/ SE_TRACK_DOOR,
- /*0x35*/ SE_MOTER,
- /*0x36*/ SE_CARD,
- /*0x37*/ SE_SAVE,
- /*0x38*/ SE_KON,
- /*0x39*/ SE_KON2,
- /*0x3A*/ SE_KON3,
- /*0x3B*/ SE_KON4,
- /*0x3C*/ SE_SUIKOMU,
- /*0x3D*/ SE_NAGERU,
- SE_TOY_C,
- SE_TOY_D,
- SE_TOY_E,
- SE_TOY_F,
- SE_TOY_G,
- SE_TOY_A,
- SE_TOY_B,
- SE_TOY_C1,
- SE_MIZU,
- SE_HASHI,
- SE_DAUGI,
- SE_PINPON,
- SE_FUUSEN1,
- SE_FUUSEN2,
- SE_FUUSEN3,
- SE_TOY_KABE,
- SE_TOY_DANGO,
- SE_DOKU,
- SE_ESUKA,
- SE_T_AME,
- SE_T_AME_E,
- SE_T_OOAME,
- SE_T_OOAME_E,
- SE_T_KOAME,
- SE_T_KOAME_E,
- SE_T_KAMI,
- SE_T_KAMI2,
- SE_ELEBETA,
- /*0x5A*/ SE_HINSI,
- /*0x5B*/ SE_EXPMAX,
- /*0x5C*/ SE_TAMAKORO,
- /*0x5D*/ SE_TAMAKORO_E,
- /*0x5E*/ SE_BASABASA,
- /*0x5F*/ SE_REGI,
- SE_C_GAJI,
- SE_C_MAKU_U,
- SE_C_MAKU_D,
- SE_C_PASI,
- SE_C_SYU,
- SE_C_PIKON,
- /*0x66*/ SE_REAPOKE,
- /*0x67*/ SE_OP_BASYU,
- /*0x68*/ SE_BT_START,
- SE_DENDOU,
- SE_JIHANKI,
- SE_TAMA,
- SE_Z_SCROLL,
- /*0x6D*/ SE_Z_PAGE,
- /*0x6E*/ SE_PN_ON,
- /*0x6F*/ SE_PN_OFF,
- /*0x70*/ SE_Z_SEARCH,
- /*0x71*/ SE_TAMAGO,
- /*0x72*/ SE_TB_START,
- /*0x73*/ SE_TB_KON,
- /*0x74*/ SE_TB_KARA,
- /*0x75*/ SE_BIDORO,
- /*0x76*/ SE_W085,
- /*0x77*/ SE_W085B,
- /*0x78*/ SE_W231,
- /*0x79*/ SE_W171,
- /*0x7A*/ SE_W233,
- /*0x7B*/ SE_W233B,
- /*0x7C*/ SE_W145,
- /*0x7D*/ SE_W145B,
- /*0x7E*/ SE_W145C,
- /*0x7F*/ SE_W240,
- /*0x80*/ SE_W015,
- /*0x81*/ SE_W081,
- /*0x82*/ SE_W081B,
- /*0x83*/ SE_W088,
- /*0x84*/ SE_W016,
- /*0x85*/ SE_W016B,
- /*0x86*/ SE_W003,
- /*0x87*/ SE_W104,
- /*0x88*/ SE_W013,
- /*0x89*/ SE_W196,
- /*0x8A*/ SE_W086,
- /*0x8B*/ SE_W004,
- /*0x8C*/ SE_W025,
- /*0x8D*/ SE_W025B,
- SE_W152,
- SE_W026,
- SE_W172,
- SE_W172B,
- SE_W053,
- SE_W007,
- SE_W092,
- SE_W221,
- SE_W221B,
- SE_W052,
- SE_W036,
- SE_W059,
- SE_W059B,
- SE_W010,
- SE_W011,
- SE_W017,
- SE_W019,
- SE_W028,
- SE_W013B,
- SE_W044,
- SE_W029,
- SE_W057,
- SE_W056,
- SE_W250,
- SE_W030,
- SE_W039,
- SE_W054,
- SE_W077,
- SE_W020,
- SE_W082,
- SE_W047,
- SE_W195,
- SE_W006,
- SE_W091,
- SE_W146,
- SE_W120,
- SE_W153,
- SE_W071B,
- SE_W071,
- SE_W103,
- /*0xB6*/ SE_W062,
- /*0xB7*/ SE_W062B,
- /*0xB8*/ SE_W048,
- /*0xB9*/ SE_W187,
- /*0xBA*/ SE_W118,
- /*0xBB*/ SE_W155,
- /*0xBC*/ SE_W122,
- /*0xBD*/ SE_W060,
- /*0xBE*/ SE_W185,
- /*0xBF*/ SE_W014,
- /*0xC0*/ SE_W043,
- /*0xC1*/ SE_W207,
- /*0xC2*/ SE_W207B,
- /*0xC3*/ SE_W215,
- /*0xC4*/ SE_W109,
- /*0xC5*/ SE_W173,
- /*0xC6*/ SE_W280,
- /*0xC7*/ SE_W202,
- /*0xC8*/ SE_W060B,
- /*0xC9*/ SE_W076,
- /*0xCA*/ SE_W080,
- /*0xCB*/ SE_W100,
- /*0xCC*/ SE_W107,
- SE_W166,
- SE_W129,
- SE_W115,
- SE_W112,
- SE_W197,
- SE_W199,
- SE_W236,
- SE_W204,
- SE_W268,
- SE_W070,
- SE_W063,
- SE_W127,
- SE_W179,
- SE_W151,
- SE_W201,
- SE_W161,
- SE_W161B,
- SE_W227,
- SE_W227B,
- SE_W226,
- SE_W208,
- SE_W213,
- SE_W213B,
- SE_W234,
- SE_W260,
- SE_W328,
- SE_W320,
- SE_W255,
- SE_W291,
- SE_W089,
- SE_W239,
- SE_W230,
- SE_W281,
- SE_W327,
- SE_W287,
- SE_W257,
- SE_W253,
- SE_W258,
- SE_W322,
- SE_W298,
- SE_W287B,
- SE_W114,
- SE_W063B,
- BGM_STOP = 349,
- /*0x15E*/ BGM_TETSUJI,
- /*0x15F*/ BGM_FIELD13,
- /*0x160*/ BGM_KACHI22,
- /*0x161*/ BGM_KACHI2,
- /*0x162*/ BGM_KACHI3,
- /*0x163*/ BGM_KACHI5,
- /*0x164*/ BGM_PCC,
- /*0x165*/ BGM_NIBI,
- /*0x166*/ BGM_SUIKUN,
- /*0x167*/ BGM_DOORO1,
- /*0x168*/ BGM_DOORO_X1,
- /*0x169*/ BGM_DOORO_X3,
- /*0x16A*/ BGM_MACHI_S2,
- /*0x16B*/ BGM_MACHI_S4,
- /*0x16C*/ BGM_GIM,
- /*0x16D*/ BGM_NAMINORI,
- /*0x16E*/ BGM_DAN01,
- /*0x16F*/ BGM_FANFA1,
- /*0x170*/ BGM_ME_ASA,
- /*0x171*/ BGM_ME_BACHI,
- /*0x172*/ BGM_FANFA4,
- /*0x173*/ BGM_FANFA5,
- /*0x174*/ BGM_ME_WAZA,
- /*0x175*/ BGM_BIJYUTU,
- /*0x176*/ BGM_DOORO_X4,
- /*0x177*/ BGM_FUNE_KAN,
- /*0x178*/ BGM_ME_SHINKA,
- /*0x179*/ BGM_SHINKA,
- /*0x17A*/ BGM_ME_WASURE,
- /*0x17B*/ BGM_SYOUJOEYE,
- /*0x17C*/ BGM_BOYEYE,
- /*0x17D*/ BGM_DAN02,
- /*0x17E*/ BGM_MACHI_S3,
- /*0x17F*/ BGM_ODAMAKI,
- /*0x180*/ BGM_B_TOWER,
- /*0x181*/ BGM_SWIMEYE,
- /*0x182*/ BGM_DAN03,
- /*0x183*/ BGM_ME_KINOMI,
- /*0x184*/ BGM_ME_TAMA,
- /*0x185*/ BGM_ME_B_BIG,
- /*0x186*/ BGM_ME_B_SMALL,
- /*0x187*/ BGM_ME_ZANNEN,
- /*0x188*/ BGM_BD_TIME,
- /*0x189*/ BGM_TEST1,
- /*0x18A*/ BGM_TEST2,
- /*0x18B*/ BGM_TEST3,
- /*0x18C*/ BGM_TEST4,
- /*0x18D*/ BGM_TEST,
- /*0x18E*/ BGM_GOMACHI0,
- /*0x18F*/ BGM_GOTOWN,
- /*0x190*/ BGM_POKECEN,
- /*0x191*/ BGM_NEXTROAD,
- /*0x192*/ BGM_GRANROAD,
- /*0x193*/ BGM_CYCLING,
- /*0x194*/ BGM_FRIENDLY,
- /*0x195*/ BGM_MISHIRO,
- /*0x196*/ BGM_TOZAN,
- /*0x197*/ BGM_GIRLEYE,
- /*0x198*/ BGM_MINAMO,
- /*0x199*/ BGM_ASHROAD,
- /*0x19A*/ BGM_EVENT0,
- /*0x19B*/ BGM_DEEPDEEP,
- /*0x19C*/ BGM_KACHI1,
- /*0x19D*/ BGM_TITLE3,
- /*0x19E*/ BGM_DEMO1,
- /*0x19F*/ BGM_GIRL_SUP,
- /*0x1A0*/ BGM_HAGESHII,
- /*0x1A1*/ BGM_KAKKOII,
- /*0x1A2*/ BGM_KAZANBAI,
- /*0x1A3*/ BGM_AQA_0,
- /*0x1A4*/ BGM_TSURETEK,
- /*0x1A5*/ BGM_BOY_SUP,
- /*0x1A6*/ BGM_RAINBOW,
- /*0x1A7*/ BGM_AYASII,
- /*0x1A8*/ BGM_KACHI4,
- /*0x1A9*/ BGM_ROPEWAY,
- /*0x1AA*/ BGM_CASINO,
- /*0x1AB*/ BGM_HIGHTOWN,
- /*0x1AC*/ BGM_SAFARI,
- BGM_C_ROAD,
- BGM_AJITO,
- BGM_M_BOAT,
- BGM_M_DUNGON,
- BGM_FINECITY,
- BGM_MACHUPI,
- BGM_P_SCHOOL,
- BGM_DENDOU,
- BGM_TONEKUSA,
- BGM_MABOROSI,
- BGM_CON_FAN,
- BGM_CONTEST0,
- BGM_MGM0,
- BGM_T_BATTLE,
- BGM_OOAME,
- BGM_HIDERI,
- BGM_RUNECITY,
- BGM_CON_K,
- BGM_EIKOU_R,
- BGM_KARAKURI,
- BGM_HUTAGO,
- BGM_SITENNOU,
- BGM_YAMA_EYE,
- BGM_CONLOBBY,
- BGM_INTER_V,
- BGM_DAIGO,
- BGM_THANKFOR,
- BGM_END,
- /*0x1C9*/ BGM_BATTLE_FRONTIER, // human-readable names start here because we don't know the actual filenames
- BGM_BATTLE_ARENA,
- BGM_ME_BATTLE_POINTS, // ME_ as in messagebox? Used for KINOMI (berries) and stuff above
- BGM_ME_MATCH_CALL,
- BGM_BATTLE_PYRAMID,
- BGM_BATTLE_PYRAMID_SUMMIT,
- BGM_BATTLE_PALACE,
- BGM_FANFA_RAYQUAZA,
- BGM_BATTLE_TOWER,
- BGM_ME_BATTLE_SYMBOL,
- BGM_BATTLE_DOME_TOURNAMENT,
- BGM_BATTLE_PIKE,
- BGM_BATTLE_FACTORY,
- BGM_BATTLE_LEGENDARY,
- BGM_BATTLE_FRONTIER_BRAIN,
- BGM_BATTLE_MEW,
- BGM_BATTLE_DOME, // end of the human-readable names
- /*0x1DA*/ 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
- /*0x1E4*/ BGM_FRLG_FOLLOW_ME, // FR/LG names not known, human-readable again!
- BGM_FRLG_GAMECORNER,
- BGM_FRLG_ROCKET_HIDEOUT,
- BGM_FRLG_GYM,
- BGM_FRLG_JIGGLYPUFF,
- BGM_FRLG_OPENING,
- BGM_FRLG_TITLE,
- BGM_FRLG_CINNABAR_ISLAND,
- BGM_FRLG_LAVENDER_TOWN,
- BGM_FRLG_HEALING_TEST,
- BGM_FRLG_BICYCLE,
- BGM_FRLG_SUSPICIOUS_EYE,
- BGM_FRLG_GIRL_EYE,
- BGM_FRLG_BOY_EYE,
- BGM_FRLG_CONGRATULATIONS_HALL_OF_FAME,
- BGM_FRLG_VIRIDIAN_FOREST,
- BGM_FRLG_MT_MOON,
- BGM_FRLG_POKEMON_MANSION,
- BGM_FRLG_CREDITS,
- BGM_FRLG_ROUTE_1,
- BGM_FRLG_ROUTE_24,
- BGM_FRLG_ROUTE_3,
- BGM_FRLG_ROUTE_11,
- BGM_FRLG_INDIGO_PLATEAU,
- BGM_FRLG_BATTLE_LEADER,
- BGM_FRLG_BATTLE_TRAINER,
- BGM_FRLG_BATTLE_WILD_POKEMON,
- BGM_FRLG_BATTLE_CHAMPION,
- BGM_FRLG_PALLET_TOWN,
- BGM_FRLG_OAK_LAB,
- BGM_FRLG_PROF_OAK,
- BGM_FRLG_POKEMON_CENTER,
- BGM_FRLG_SS_ANNE,
- BGM_FRLG_SURF,
- BGM_FRLG_POKEMON_TOWER,
- BGM_FRLG_SILPH,
- BGM_FRLG_CERULEAN_CITY,
- BGM_FRLG_CELADON_CITY,
- BGM_FRLG_KACHI_TRAINER, // KACHI used in RS test - victory
- BGM_FRLG_KACHI_WILD_POKEMON,
- BGM_FRLG_KACHI_LEADER,
- BGM_FRLG_VERMILION_CITY,
- BGM_FRLG_VIRIDIAN_CITY,
- BGM_FRLG_RIVAL,
- BGM_FRLG_RIVAL_POSTBATTLE,
- BGM_FRLG_ME_POKEDEX_EVAL,
- BGM_FRLG_ME_KEYITEM,
- BGM_FRLG_FANFA_POKEMON_CAUGHT,
- BGM_FRLG_FANFA_TRAINERCARD_PHOTO,
- BGM_FRLG_GAMEFREAK_LOGO,
- BGM_FRLG_CAUGHT_POKEMON,
- BGM_FRLG_GAME_EXPLANATION_START,
- BGM_FRLG_GAME_EXPLANATION_MIDDLE,
- BGM_FRLG_GAME_EXPLANATION_END,
- BGM_FRLG_POKEMON_JUMP,
- BGM_FRLG_UNION_ROOM,
- BGM_FRLG_POKEMON_NETWORK_CENTER,
- BGM_FRLG_MYSTERY_GIFT,
- BGM_FRLG_DODRIO_BERRY_PICK,
- BGM_FRLG_MT_EMBER,
- BGM_FRLG_TEACHY_TV_EPISODE,
- BGM_FRLG_SEVII_ISLANDS,
- BGM_FRLG_TANOBY_RUINS,
- BGM_FRLG_ISLAND_ONE,
- BGM_FRLG_ISLAND_FOUR,
- BGM_FRLG_ISLAND_SIX,
- BGM_FRLG_FLUTE,
- BGM_FRLG_BATTLE_DEOXYS,
- BGM_FRLG_BATTLE_MEWTWO,
- BGM_FRLG_BATTLE_LEGENDARY,
- BGM_FRLG_LEADER_EYE,
- BGM_FRLG_DEOXYS_EYE,
- BGM_FRLG_TRAINER_TOWER,
- BGM_FRLG_HALL_OF_FAME_PALLET_TOWN,
- /*0x22E*/BGM_FRLG_TEACHY_TV,
-};
-
-#endif // GUARD_SONGS_H
diff --git a/include/strings.h b/include/strings.h
index 6cc6b93c1..bc2aab3f8 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -142,4 +142,8 @@ extern const u8 gUnknown_841DFAC[];
extern const u8 gUnknown_841DFBE[];
extern const u8 gUnknown_841DFC9[];
+// help_system
+extern const u8 gUnknown_841CB49[];
+extern const u8 gUnknown_841CB4E[];
+
#endif //GUARD_STRINGS_H
diff --git a/ld_script.txt b/ld_script.txt
index 599d3711a..48b70b1b1 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -428,7 +428,7 @@ SECTIONS {
data/menu_indicators.o(.rodata);
data/pokedex_area_markers.o(.rodata);
data/pokemon_summary_screen.o(.rodata);
- data/help_system.o(.rodata);
+ src/help_system.o(.rodata);
data/wild_pokemon_area.o(.rodata);
data/unk_text_util.o(.rodata);
data/berry_pouch.o(.rodata);
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;
+}