summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/battle_interface.s2
-rw-r--r--asm/battle_script_commands.s4
-rw-r--r--asm/battle_tower.s10
-rw-r--r--asm/berry.s6
-rw-r--r--asm/easy_chat.s14
-rw-r--r--asm/egg_hatch.s4
-rw-r--r--asm/event_data.s6
-rw-r--r--asm/evolution_scene.s12
-rw-r--r--asm/field_specials.s6
-rw-r--r--asm/mystery_event_script.s722
-rw-r--r--asm/pokedex.s20
-rw-r--r--asm/pokemon_3.s4
-rw-r--r--asm/prof_pc.s2
-rw-r--r--asm/scrcmd.s2
-rw-r--r--asm/script_pokemon_util_80A0058.s4
-rw-r--r--asm/trade.s2
-rw-r--r--data/data_83FECCC.s2
-rw-r--r--data/data_8471F00.s46
-rw-r--r--data/mystery_event_script_cmd_table.s3
-rw-r--r--include/battle_tower.h2
-rw-r--r--include/constants/vars.h10
-rw-r--r--include/easy_chat.h1
-rw-r--r--include/global.berry.h1
-rw-r--r--include/mail_data.h1
-rw-r--r--include/mystery_event_msg.h18
-rw-r--r--include/mystery_event_script.h2
-rw-r--r--include/strings.h2
-rw-r--r--ld_script.txt2
-rw-r--r--src/mevent_server.c2
-rw-r--r--src/mystery_event_script.c322
-rw-r--r--sym_ewram.txt5
31 files changed, 433 insertions, 806 deletions
diff --git a/asm/battle_interface.s b/asm/battle_interface.s
index 3a27c29ea..8e109b6d6 100644
--- a/asm/battle_interface.s
+++ b/asm/battle_interface.s
@@ -3770,7 +3770,7 @@ sub_804981C: @ 804981C
lsls r0, 16
lsrs r0, 16
movs r1, 0x1
- bl sub_8088E74
+ bl GetSetPokedexFlag
lsls r0, 24
cmp r0, 0
beq _0804991C
diff --git a/asm/battle_script_commands.s b/asm/battle_script_commands.s
index 1e99186bc..ed0e6cb50 100644
--- a/asm/battle_script_commands.s
+++ b/asm/battle_script_commands.s
@@ -31945,7 +31945,7 @@ _0802D5D8:
lsls r0, 16
lsrs r0, 16
movs r1, 0x1
- bl sub_8088E74
+ bl GetSetPokedexFlag
lsls r0, 24
movs r4, 0xA
cmp r0, 0
@@ -32356,7 +32356,7 @@ sub_802D95C: @ 802D95C
lsls r0, 16
lsrs r0, 16
movs r1, 0x1
- bl sub_8088E74
+ bl GetSetPokedexFlag
lsls r0, 24
cmp r0, 0
beq _0802D9B4
diff --git a/asm/battle_tower.s b/asm/battle_tower.s
index 10b07d2e0..f1cf4d3fa 100644
--- a/asm/battle_tower.s
+++ b/asm/battle_tower.s
@@ -143,7 +143,7 @@ sub_80E5A70: @ 80E5A70
add r4, sp, 0x28
movs r0, 0
strb r0, [r4]
- bl sub_80E7490
+ bl ValidateEReaderTrainer
ldr r0, _080E5AA4 @ =gUnknown_20370D0
ldrh r0, [r0]
adds r7, r4, 0
@@ -1506,7 +1506,7 @@ sub_80E64C0: @ 80E64C0
lsls r0, 16
lsrs r0, 16
movs r1, 0x1
- bl sub_8088E74
+ bl GetSetPokedexFlag
lsls r0, 24
cmp r0, 0
beq _080E6554
@@ -3497,8 +3497,8 @@ _080E7488: .4byte gSaveBlock2Ptr
_080E748C: .4byte 0x000004a4
thumb_func_end sub_80E7460
- thumb_func_start sub_80E7490
-sub_80E7490: @ 80E7490
+ thumb_func_start ValidateEReaderTrainer
+ValidateEReaderTrainer: @ 80E7490
push {r4-r6,lr}
ldr r2, _080E74C0 @ =gUnknown_20370D0
movs r0, 0
@@ -3556,7 +3556,7 @@ _080E74F6:
bx r0
.align 2, 0
_080E74FC: .4byte gUnknown_20370D0
- thumb_func_end sub_80E7490
+ thumb_func_end ValidateEReaderTrainer
thumb_func_start sub_80E7500
sub_80E7500: @ 80E7500
diff --git a/asm/berry.s b/asm/berry.s
index 8b9593a2a..5537e3590 100644
--- a/asm/berry.s
+++ b/asm/berry.s
@@ -89,8 +89,8 @@ _0809C7BC: .4byte 0x000030ec
_0809C7C0: .4byte 0x0100001a
thumb_func_end sub_809C794
- thumb_func_start sub_809C7C4
-sub_809C7C4: @ 809C7C4
+ thumb_func_start SetEnigmaBerry
+SetEnigmaBerry: @ 809C7C4
push {r4-r7,lr}
adds r4, r0, 0
bl sub_809C794
@@ -144,7 +144,7 @@ _0809C828: .4byte 0x000030ec
_0809C82C: .4byte 0x00003108
_0809C830: .4byte 0x00000516
_0809C834: .4byte 0x00000529
- thumb_func_end sub_809C7C4
+ thumb_func_end SetEnigmaBerry
thumb_func_start GetEnigmaBerryChecksum
GetEnigmaBerryChecksum: @ 809C838
diff --git a/asm/easy_chat.s b/asm/easy_chat.s
index 1b4879bf3..b8e9f7162 100644
--- a/asm/easy_chat.s
+++ b/asm/easy_chat.s
@@ -622,8 +622,8 @@ _080BDB68: .4byte gSaveBlock1Ptr
_080BDB6C: .4byte 0x00002f10
thumb_func_end sub_80BDB48
- thumb_func_start sub_80BDB70
-sub_80BDB70: @ 80BDB70
+ thumb_func_start EnableRareWord
+EnableRareWord: @ 80BDB70
push {lr}
lsls r0, 24
lsrs r1, r0, 24
@@ -648,7 +648,7 @@ _080BDB94:
.align 2, 0
_080BDB98: .4byte gSaveBlock1Ptr
_080BDB9C: .4byte 0x00002f10
- thumb_func_end sub_80BDB70
+ thumb_func_end EnableRareWord
thumb_func_start sub_80BDBA0
sub_80BDBA0: @ 80BDBA0
@@ -687,7 +687,7 @@ sub_80BDBCC: @ 80BDBCC
b _080BDC32
_080BDBDC:
adds r0, r5, 0
- bl sub_80BDB70
+ bl EnableRareWord
ldr r0, _080BDBF4 @ =0x000001ff
ands r4, r0
movs r1, 0xA0
@@ -841,7 +841,7 @@ _080BDCF6:
lsls r0, 16
lsrs r0, 16
movs r1, 0
- bl sub_8088E74
+ bl GetSetPokedexFlag
lsls r0, 24
cmp r0, 0
beq _080BDD16
@@ -1769,7 +1769,7 @@ _080BE3BC:
lsls r0, 16
lsrs r0, 16
movs r1, 0
- bl sub_8088E74
+ bl GetSetPokedexFlag
lsls r0, 24
lsrs r0, 24
b _080BE40C
@@ -1783,7 +1783,7 @@ _080BE3D6:
lsls r0, 16
lsrs r0, 16
movs r1, 0
- bl sub_8088E74
+ bl GetSetPokedexFlag
lsls r0, 24
lsrs r0, 24
b _080BE40C
diff --git a/asm/egg_hatch.s b/asm/egg_hatch.s
index 078dadb29..278cc855e 100644
--- a/asm/egg_hatch.s
+++ b/asm/egg_hatch.s
@@ -214,10 +214,10 @@ AddHatchedMonToParty: @ 8046D60
lsrs r4, 16
adds r0, r4, 0
movs r1, 0x2
- bl sub_8088E74
+ bl GetSetPokedexFlag
adds r0, r4, 0
movs r1, 0x3
- bl sub_8088E74
+ bl GetSetPokedexFlag
ldr r1, _08046E1C @ =gStringVar1
adds r0, r5, 0
bl GetMonNick
diff --git a/asm/event_data.s b/asm/event_data.s
index d620e3142..416c777eb 100644
--- a/asm/event_data.s
+++ b/asm/event_data.s
@@ -170,8 +170,8 @@ _0806E224: .4byte 0x0000404e
_0806E228: .4byte gSaveBlock2Ptr
thumb_func_end sub_806E204
- thumb_func_start sub_806E22C
-sub_806E22C: @ 806E22C
+ thumb_func_start EnableNationalPokedex
+EnableNationalPokedex: @ 806E22C
push {lr}
ldr r0, _0806E250 @ =0x0000404e
bl GetVarPointer
@@ -191,7 +191,7 @@ sub_806E22C: @ 806E22C
_0806E250: .4byte 0x0000404e
_0806E254: .4byte gSaveBlock2Ptr
_0806E258: .4byte 0x00006258
- thumb_func_end sub_806E22C
+ thumb_func_end EnableNationalPokedex
thumb_func_start sub_806E25C
sub_806E25C: @ 806E25C
diff --git a/asm/evolution_scene.s b/asm/evolution_scene.s
index 4aa868a77..f6f5a83e2 100644
--- a/asm/evolution_scene.s
+++ b/asm/evolution_scene.s
@@ -1252,13 +1252,13 @@ _080CE80C:
lsls r0, 16
lsrs r0, 16
movs r1, 0x2
- bl sub_8088E74
+ bl GetSetPokedexFlag
ldrh r0, [r4, 0xC]
bl SpeciesToNationalPokedexNum
lsls r0, 16
lsrs r0, 16
movs r1, 0x3
- bl sub_8088E74
+ bl GetSetPokedexFlag
mov r0, r9
movs r1, 0xB
bl GetMonData
@@ -1829,13 +1829,13 @@ _080CED3A:
lsls r0, 16
lsrs r0, 16
movs r1, 0x2
- bl sub_8088E74
+ bl GetSetPokedexFlag
ldrh r0, [r4, 0xC]
bl SpeciesToNationalPokedexNum
lsls r0, 16
lsrs r0, 16
movs r1, 0x3
- bl sub_8088E74
+ bl GetSetPokedexFlag
movs r0, 0xE
bl IncrementGameStat
b _080CF528
@@ -3136,13 +3136,13 @@ _080CF8A8:
lsls r0, 16
lsrs r0, 16
movs r1, 0x2
- bl sub_8088E74
+ bl GetSetPokedexFlag
ldrh r0, [r4, 0xC]
bl SpeciesToNationalPokedexNum
lsls r0, 16
lsrs r0, 16
movs r1, 0x3
- bl sub_8088E74
+ bl GetSetPokedexFlag
movs r0, 0xE
bl IncrementGameStat
b _080D003A
diff --git a/asm/field_specials.s b/asm/field_specials.s
index c6df3442d..18b0401a4 100644
--- a/asm/field_specials.s
+++ b/asm/field_specials.s
@@ -1491,7 +1491,7 @@ _080CB128:
lsls r0, 16
lsrs r0, 16
movs r1, 0
- bl sub_8088E74
+ bl GetSetPokedexFlag
lsls r0, 24
asrs r0, 24
cmp r0, 0x1
@@ -1521,7 +1521,7 @@ _080CB176:
lsls r0, 16
lsrs r0, 16
movs r1, 0
- bl sub_8088E74
+ bl GetSetPokedexFlag
lsls r0, 24
asrs r0, 24
cmp r0, 0x1
@@ -3129,7 +3129,7 @@ sub_80CBDCC: @ 80CBDCC
lsls r0, 16
lsrs r0, 16
movs r1, 0x2
- bl sub_8088E74
+ bl GetSetPokedexFlag
pop {r0}
bx r0
.align 2, 0
diff --git a/asm/mystery_event_script.s b/asm/mystery_event_script.s
deleted file mode 100644
index b150bb586..000000000
--- a/asm/mystery_event_script.s
+++ /dev/null
@@ -1,722 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_80DA800
-sub_80DA800: @ 80DA800
- push {r4,lr}
- lsls r0, 16
- lsrs r0, 16
- lsls r2, 16
- lsrs r2, 16
- movs r4, 0x1
- ands r0, r4
- cmp r0, 0
- beq _080DA828
- ands r1, r4
- cmp r1, 0
- beq _080DA828
- ands r2, r4
- cmp r2, 0
- beq _080DA828
- ands r3, r4
- cmp r3, 0
- beq _080DA828
- movs r0, 0x1
- b _080DA82A
-_080DA828:
- movs r0, 0
-_080DA82A:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80DA800
-
- thumb_func_start SetIncompatible
-SetIncompatible: @ 80DA830
- push {lr}
- ldr r0, _080DA844 @ =gStringVar4
- ldr r1, _080DA848 @ =gUnknown_8488DFD
- bl StringExpandPlaceholders
- movs r0, 0x3
- bl sub_80DA8E8
- pop {r0}
- bx r0
- .align 2, 0
-_080DA844: .4byte gStringVar4
-_080DA848: .4byte gUnknown_8488DFD
- thumb_func_end SetIncompatible
-
- thumb_func_start InitMysteryEventScript
-InitMysteryEventScript: @ 80DA84C
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldr r1, _080DA874 @ =gUnknown_81DBCF0
- ldr r2, _080DA878 @ =0x081dbd34
- bl InitScriptContext
- adds r0, r4, 0
- adds r1, r5, 0
- bl SetupBytecodeScript
- str r5, [r4, 0x64]
- movs r0, 0
- str r0, [r4, 0x68]
- str r0, [r4, 0x6C]
- str r0, [r4, 0x70]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080DA874: .4byte gUnknown_81DBCF0
-_080DA878: .4byte 0x081dbd34
- thumb_func_end InitMysteryEventScript
-
- thumb_func_start RunMysteryEventScriptCommand
-RunMysteryEventScriptCommand: @ 80DA87C
- push {r4,lr}
- adds r4, r0, 0
- bl RunScriptCommand
- lsls r0, 24
- cmp r0, 0
- beq _080DA894
- ldr r0, [r4, 0x70]
- cmp r0, 0
- beq _080DA894
- movs r0, 0x1
- b _080DA896
-_080DA894:
- movs r0, 0
-_080DA896:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end RunMysteryEventScriptCommand
-
- thumb_func_start sub_80DA89C
-sub_80DA89C: @ 80DA89C
- push {lr}
- adds r1, r0, 0
- ldr r0, _080DA8AC @ =gUnknown_203AA3C
- bl InitMysteryEventScript
- pop {r0}
- bx r0
- .align 2, 0
-_080DA8AC: .4byte gUnknown_203AA3C
- thumb_func_end sub_80DA89C
-
- thumb_func_start sub_80DA8B0
-sub_80DA8B0: @ 80DA8B0
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r4, _080DA8C8 @ =gUnknown_203AA3C
- adds r0, r4, 0
- bl RunMysteryEventScriptCommand
- ldr r1, [r4, 0x6C]
- str r1, [r5]
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_080DA8C8: .4byte gUnknown_203AA3C
- thumb_func_end sub_80DA8B0
-
- thumb_func_start sub_80DA8CC
-sub_80DA8CC: @ 80DA8CC
- push {lr}
- sub sp, 0x4
- bl sub_80DA89C
-_080DA8D4:
- mov r0, sp
- bl sub_80DA8B0
- cmp r0, 0
- bne _080DA8D4
- ldr r0, [sp]
- add sp, 0x4
- pop {r1}
- bx r1
- thumb_func_end sub_80DA8CC
-
- thumb_func_start sub_80DA8E8
-sub_80DA8E8: @ 80DA8E8
- ldr r1, _080DA8F0 @ =gUnknown_203AA3C
- str r0, [r1, 0x6C]
- bx lr
- .align 2, 0
-_080DA8F0: .4byte gUnknown_203AA3C
- thumb_func_end sub_80DA8E8
-
- thumb_func_start script_status_stop_and_ret_1
-script_status_stop_and_ret_1: @ 80DA8F4
- push {lr}
- bl StopScript
- movs r0, 0x1
- pop {r1}
- bx r1
- thumb_func_end script_status_stop_and_ret_1
-
- thumb_func_start MEScrCmd_checkcompat
-MEScrCmd_checkcompat: @ 80DA900
- push {r4-r7,lr}
- adds r7, r0, 0
- bl ScriptReadWord
- str r0, [r7, 0x68]
- adds r0, r7, 0
- bl ScriptReadHalfword
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- adds r0, r7, 0
- bl ScriptReadWord
- adds r6, r0, 0
- adds r0, r7, 0
- bl ScriptReadHalfword
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r7, 0
- bl ScriptReadWord
- adds r3, r0, 0
- adds r0, r5, 0
- adds r1, r6, 0
- adds r2, r4, 0
- bl sub_80DA800
- cmp r0, 0x1
- bne _080DA944
- str r0, [r7, 0x70]
- b _080DA948
-_080DA944:
- bl SetIncompatible
-_080DA948:
- movs r0, 0x1
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end MEScrCmd_checkcompat
-
- thumb_func_start sub_80DA950
-sub_80DA950: @ 80DA950
- movs r0, 0
- bx lr
- thumb_func_end sub_80DA950
-
- thumb_func_start MEScrCmd_setstatus
-MEScrCmd_setstatus: @ 80DA954
- ldr r1, [r0, 0x8]
- ldrb r2, [r1]
- adds r1, 0x1
- str r1, [r0, 0x8]
- str r2, [r0, 0x6C]
- movs r0, 0
- bx lr
- thumb_func_end MEScrCmd_setstatus
-
- thumb_func_start MEScrCmd_setmsg
-MEScrCmd_setmsg: @ 80DA964
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r0, [r4, 0x8]
- ldrb r5, [r0]
- adds r0, 0x1
- str r0, [r4, 0x8]
- adds r0, r4, 0
- bl ScriptReadWord
- ldr r1, [r4, 0x68]
- subs r0, r1
- ldr r1, [r4, 0x64]
- adds r1, r0, r1
- cmp r5, 0xFF
- beq _080DA988
- ldr r0, [r4, 0x6C]
- cmp r5, r0
- bne _080DA98E
-_080DA988:
- ldr r0, _080DA998 @ =gStringVar4
- bl StringExpandPlaceholders
-_080DA98E:
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_080DA998: .4byte gStringVar4
- thumb_func_end MEScrCmd_setmsg
-
- thumb_func_start MEScrCmd_runscript
-MEScrCmd_runscript: @ 80DA99C
- push {r4,lr}
- adds r4, r0, 0
- bl ScriptReadWord
- ldr r1, [r4, 0x68]
- subs r0, r1
- ldr r1, [r4, 0x64]
- adds r0, r1
- bl ScriptContext2_RunNewScript
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end MEScrCmd_runscript
-
- thumb_func_start MEScrCmd_setenigmaberry
-MEScrCmd_setenigmaberry: @ 80DA9B8
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r7, r0, 0
- bl IsEnigmaBerryValid
- mov r8, r0
- adds r0, r7, 0
- bl ScriptReadWord
- adds r4, r0, 0
- ldr r0, [r7, 0x68]
- subs r4, r0
- ldr r0, [r7, 0x64]
- adds r4, r0
- ldr r0, _080DAA0C @ =gStringVar1
- mov r9, r0
- ldr r6, _080DAA10 @ =gSaveBlock1Ptr
- ldr r1, [r6]
- ldr r5, _080DAA14 @ =0x000030ec
- adds r1, r5
- movs r2, 0x7
- bl StringCopyN
- adds r0, r4, 0
- bl sub_809C7C4
- ldr r4, _080DAA18 @ =gStringVar2
- ldr r1, [r6]
- adds r1, r5
- adds r0, r4, 0
- movs r2, 0x7
- bl StringCopyN
- mov r0, r8
- cmp r0, 0
- bne _080DAA24
- ldr r0, _080DAA1C @ =gStringVar4
- ldr r1, _080DAA20 @ =gUnknown_8488C70
- b _080DAA44
- .align 2, 0
-_080DAA0C: .4byte gStringVar1
-_080DAA10: .4byte gSaveBlock1Ptr
-_080DAA14: .4byte 0x000030ec
-_080DAA18: .4byte gStringVar2
-_080DAA1C: .4byte gStringVar4
-_080DAA20: .4byte gUnknown_8488C70
-_080DAA24:
- mov r0, r9
- adds r1, r4, 0
- bl StringCompare
- cmp r0, 0
- beq _080DAA40
- ldr r0, _080DAA38 @ =gStringVar4
- ldr r1, _080DAA3C @ =gUnknown_8488CA2
- b _080DAA44
- .align 2, 0
-_080DAA38: .4byte gStringVar4
-_080DAA3C: .4byte gUnknown_8488CA2
-_080DAA40:
- ldr r0, _080DAA60 @ =gStringVar4
- ldr r1, _080DAA64 @ =gUnknown_8488CCE
-_080DAA44:
- bl StringExpandPlaceholders
- movs r0, 0x2
- str r0, [r7, 0x6C]
- bl IsEnigmaBerryValid
- cmp r0, 0x1
- bne _080DAA6C
- ldr r0, _080DAA68 @ =0x00004033
- movs r1, 0x1
- bl VarSet
- b _080DAA70
- .align 2, 0
-_080DAA60: .4byte gStringVar4
-_080DAA64: .4byte gUnknown_8488CCE
-_080DAA68: .4byte 0x00004033
-_080DAA6C:
- movs r0, 0x1
- str r0, [r7, 0x6C]
-_080DAA70:
- movs r0, 0
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end MEScrCmd_setenigmaberry
-
- thumb_func_start MEScrCmd_giveribbon
-MEScrCmd_giveribbon: @ 80DAA80
- push {r4,lr}
- adds r4, r0, 0
- ldr r2, [r4, 0x8]
- ldrb r0, [r2]
- adds r2, 0x1
- str r2, [r4, 0x8]
- ldrb r1, [r2]
- adds r2, 0x1
- str r2, [r4, 0x8]
- bl GiveGiftRibbonToParty
- ldr r0, _080DAAAC @ =gStringVar4
- ldr r1, _080DAAB0 @ =gUnknown_8488CF6
- bl StringExpandPlaceholders
- movs r0, 0x2
- str r0, [r4, 0x6C]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080DAAAC: .4byte gStringVar4
-_080DAAB0: .4byte gUnknown_8488CF6
- thumb_func_end MEScrCmd_giveribbon
-
- thumb_func_start MEScrCmd_initramscript
-MEScrCmd_initramscript: @ 80DAAB4
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- sub sp, 0x4
- adds r4, r0, 0
- ldr r0, [r4, 0x8]
- ldrb r1, [r0]
- mov r9, r1
- adds r0, 0x1
- str r0, [r4, 0x8]
- ldrb r1, [r0]
- mov r8, r1
- adds r1, r0, 0x1
- str r1, [r4, 0x8]
- ldrb r6, [r0, 0x1]
- adds r1, 0x1
- str r1, [r4, 0x8]
- adds r0, r4, 0
- bl ScriptReadWord
- adds r5, r0, 0
- ldr r0, [r4, 0x68]
- subs r5, r0
- ldr r0, [r4, 0x64]
- adds r5, r0
- adds r0, r4, 0
- bl ScriptReadWord
- adds r1, r0, 0
- ldr r0, [r4, 0x68]
- subs r1, r0
- ldr r0, [r4, 0x64]
- adds r1, r0
- subs r1, r5
- lsls r1, 16
- lsrs r1, 16
- str r6, [sp]
- adds r0, r5, 0
- mov r2, r9
- mov r3, r8
- bl InitRamScript
- movs r0, 0
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end MEScrCmd_initramscript
-
- thumb_func_start sub_80DAB1C
-sub_80DAB1C: @ 80DAB1C
- push {r4,lr}
- adds r4, r0, 0
- bl sub_806E22C
- ldr r0, _080DAB38 @ =gStringVar4
- ldr r1, _080DAB3C @ =gUnknown_8488D2A
- bl StringExpandPlaceholders
- movs r0, 0x2
- str r0, [r4, 0x6C]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080DAB38: .4byte gStringVar4
-_080DAB3C: .4byte gUnknown_8488D2A
- thumb_func_end sub_80DAB1C
-
- thumb_func_start MEScrCmd_addrareword
-MEScrCmd_addrareword: @ 80DAB40
- push {r4,lr}
- adds r4, r0, 0
- ldr r1, [r4, 0x8]
- ldrb r0, [r1]
- adds r1, 0x1
- str r1, [r4, 0x8]
- bl sub_80BDB70
- ldr r0, _080DAB64 @ =gStringVar4
- ldr r1, _080DAB68 @ =gUnknown_8488D60
- bl StringExpandPlaceholders
- movs r0, 0x2
- str r0, [r4, 0x6C]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080DAB64: .4byte gStringVar4
-_080DAB68: .4byte gUnknown_8488D60
- thumb_func_end MEScrCmd_addrareword
-
- thumb_func_start sub_80DAB6C
-sub_80DAB6C: @ 80DAB6C
- push {r4,lr}
- adds r4, r0, 0
- bl SetIncompatible
- movs r0, 0
- str r0, [r4, 0x70]
- movs r0, 0x1
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80DAB6C
-
- thumb_func_start sub_80DAB80
-sub_80DAB80: @ 80DAB80
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x88
- adds r6, r0, 0
- bl ScriptReadWord
- ldr r1, [r6, 0x68]
- subs r0, r1
- ldr r1, [r6, 0x64]
- adds r5, r0, r1
- movs r0, 0x64
- adds r0, r5
- mov r8, r0
- add r4, sp, 0x24
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0x64
- bl memcpy
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- lsls r0, 16
- lsrs r4, r0, 16
- movs r0, 0xCE
- lsls r0, 1
- cmp r4, r0
- bne _080DABD0
- ldr r0, _080DABC8 @ =gStringVar1
- ldr r1, _080DABCC @ =gText_EggNickname
- movs r2, 0xB
- bl StringCopyN
- b _080DABDA
- .align 2, 0
-_080DABC8: .4byte gStringVar1
-_080DABCC: .4byte gText_EggNickname
-_080DABD0:
- ldr r0, _080DABF0 @ =gStringVar1
- ldr r1, _080DABF4 @ =gUnknown_8415A66
- movs r2, 0xB
- bl StringCopyN
-_080DABDA:
- ldr r0, _080DABF8 @ =gPlayerPartyCount
- ldrb r0, [r0]
- cmp r0, 0x6
- bne _080DAC04
- ldr r0, _080DABFC @ =gStringVar4
- ldr r1, _080DAC00 @ =gUnknown_8488D8E
- bl StringExpandPlaceholders
- movs r0, 0x3
- b _080DAC6E
- .align 2, 0
-_080DABF0: .4byte gStringVar1
-_080DABF4: .4byte gUnknown_8415A66
-_080DABF8: .4byte gPlayerPartyCount
-_080DABFC: .4byte gStringVar4
-_080DAC00: .4byte gUnknown_8488D8E
-_080DAC04:
- ldr r7, _080DAC80 @ =gUnknown_2024478
- adds r0, r7, 0
- adds r1, r5, 0
- movs r2, 0x64
- bl memcpy
- mov r0, sp
- mov r1, r8
- movs r2, 0x24
- bl memcpy
- movs r0, 0xCE
- lsls r0, 1
- cmp r4, r0
- beq _080DAC3E
- adds r0, r4, 0
- bl SpeciesToNationalPokedexNum
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r4, 0
- movs r1, 0x2
- bl sub_8088E74
- adds r0, r4, 0
- movs r1, 0x3
- bl sub_8088E74
-_080DAC3E:
- adds r0, r7, 0
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- bl itemid_is_mail
- lsls r0, 24
- cmp r0, 0
- beq _080DAC5C
- adds r0, r7, 0
- mov r1, sp
- bl GiveMailToMon2
-_080DAC5C:
- bl CompactPartySlots
- bl CalculatePlayerPartyCount
- ldr r0, _080DAC84 @ =gStringVar4
- ldr r1, _080DAC88 @ =gUnknown_8488D7C
- bl StringExpandPlaceholders
- movs r0, 0x2
-_080DAC6E:
- str r0, [r6, 0x6C]
- movs r0, 0
- add sp, 0x88
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080DAC80: .4byte gUnknown_2024478
-_080DAC84: .4byte gStringVar4
-_080DAC88: .4byte gUnknown_8488D7C
- thumb_func_end sub_80DAB80
-
- thumb_func_start sub_80DAC8C
-sub_80DAC8C: @ 80DAC8C
- push {r4,lr}
- adds r4, r0, 0
- bl ScriptReadWord
- adds r1, r0, 0
- ldr r0, [r4, 0x68]
- subs r1, r0
- ldr r0, [r4, 0x64]
- adds r1, r0
- ldr r0, _080DACC8 @ =gSaveBlock2Ptr
- ldr r0, [r0]
- movs r2, 0x94
- lsls r2, 3
- adds r0, r2
- movs r2, 0xBC
- bl memcpy
- bl sub_80E7490
- ldr r0, _080DACCC @ =gStringVar4
- ldr r1, _080DACD0 @ =gUnknown_8488DBD
- bl StringExpandPlaceholders
- movs r0, 0x2
- str r0, [r4, 0x6C]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080DACC8: .4byte gSaveBlock2Ptr
-_080DACCC: .4byte gStringVar4
-_080DACD0: .4byte gUnknown_8488DBD
- thumb_func_end sub_80DAC8C
-
- thumb_func_start sub_80DACD4
-sub_80DACD4: @ 80DACD4
- push {r4,lr}
- adds r4, r0, 0
- bl SetIncompatible
- movs r0, 0
- str r0, [r4, 0x70]
- movs r0, 0x1
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80DACD4
-
- thumb_func_start MEScrCmd_checksum
-MEScrCmd_checksum: @ 80DACE8
- push {r4-r6,lr}
- adds r6, r0, 0
- bl ScriptReadWord
- adds r5, r0, 0
- adds r0, r6, 0
- bl ScriptReadWord
- adds r4, r0, 0
- ldr r0, [r6, 0x68]
- subs r4, r0
- ldr r0, [r6, 0x64]
- adds r4, r0
- adds r0, r6, 0
- bl ScriptReadWord
- adds r1, r0, 0
- ldr r0, [r6, 0x68]
- subs r1, r0
- ldr r0, [r6, 0x64]
- adds r1, r0
- subs r1, r4
- adds r0, r4, 0
- bl CalcByteArraySum
- cmp r5, r0
- beq _080DAD26
- movs r0, 0
- str r0, [r6, 0x70]
- movs r0, 0x1
- str r0, [r6, 0x6C]
-_080DAD26:
- movs r0, 0x1
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end MEScrCmd_checksum
-
- thumb_func_start MEScrCmd_crc
-MEScrCmd_crc: @ 80DAD30
- push {r4-r6,lr}
- adds r6, r0, 0
- bl ScriptReadWord
- adds r5, r0, 0
- adds r0, r6, 0
- bl ScriptReadWord
- adds r4, r0, 0
- ldr r0, [r6, 0x68]
- subs r4, r0
- ldr r0, [r6, 0x64]
- adds r4, r0
- adds r0, r6, 0
- bl ScriptReadWord
- adds r1, r0, 0
- ldr r0, [r6, 0x68]
- subs r1, r0
- ldr r0, [r6, 0x64]
- adds r1, r0
- subs r1, r4
- adds r0, r4, 0
- bl CalcCRC16
- lsls r0, 16
- lsrs r0, 16
- cmp r5, r0
- beq _080DAD72
- movs r0, 0
- str r0, [r6, 0x70]
- movs r0, 0x1
- str r0, [r6, 0x6C]
-_080DAD72:
- movs r0, 0x1
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end MEScrCmd_crc
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/pokedex.s b/asm/pokedex.s
index 6ec2ca7be..279270fbb 100644
--- a/asm/pokedex.s
+++ b/asm/pokedex.s
@@ -57,8 +57,8 @@ _08088E6C:
_08088E70: .4byte gUnknown_844E850
thumb_func_end sub_8088E38
- thumb_func_start sub_8088E74
-sub_8088E74: @ 8088E74
+ thumb_func_start GetSetPokedexFlag
+GetSetPokedexFlag: @ 8088E74
push {lr}
lsls r0, 16
lsrs r0, 16
@@ -70,7 +70,7 @@ sub_8088E74: @ 8088E74
asrs r0, 24
pop {r1}
bx r1
- thumb_func_end sub_8088E74
+ thumb_func_end GetSetPokedexFlag
thumb_func_start pokedex_count
pokedex_count: @ 8088E8C
@@ -101,7 +101,7 @@ _08088EB2:
lsrs r0, 16
movs r1, 0x1
_08088EBA:
- bl sub_8088E74
+ bl GetSetPokedexFlag
lsls r0, 24
cmp r0, 0
beq _08088ECA
@@ -145,7 +145,7 @@ _08088EFC:
lsrs r0, 16
movs r1, 0x1
_08088F04:
- bl sub_8088E74
+ bl GetSetPokedexFlag
lsls r0, 24
cmp r0, 0
beq _08088F14
@@ -176,7 +176,7 @@ _08088F28:
lsls r0, 16
lsrs r0, 16
movs r1, 0x1
- bl sub_8088E74
+ bl GetSetPokedexFlag
lsls r0, 24
cmp r0, 0
bne _08088F48
@@ -203,7 +203,7 @@ _08088F5C:
lsrs r4, r0, 16
adds r0, r4, 0
movs r1, 0x1
- bl sub_8088E74
+ bl GetSetPokedexFlag
lsls r0, 24
cmp r0, 0
bne _08088F74
@@ -230,7 +230,7 @@ _08088F88:
lsrs r4, r0, 16
adds r0, r4, 0
movs r1, 0x1
- bl sub_8088E74
+ bl GetSetPokedexFlag
lsls r0, 24
cmp r0, 0
beq _08088FD6
@@ -244,7 +244,7 @@ _08088FA4:
lsrs r4, r0, 16
adds r0, r4, 0
movs r1, 0x1
- bl sub_8088E74
+ bl GetSetPokedexFlag
lsls r0, 24
cmp r0, 0
beq _08088FD6
@@ -259,7 +259,7 @@ _08088FC2:
lsrs r4, r0, 16
adds r0, r4, 0
movs r1, 0x1
- bl sub_8088E74
+ bl GetSetPokedexFlag
lsls r0, 24
cmp r0, 0
bne _08088FE0
diff --git a/asm/pokemon_3.s b/asm/pokemon_3.s
index fab76b56f..c717ac119 100644
--- a/asm/pokemon_3.s
+++ b/asm/pokemon_3.s
@@ -482,13 +482,13 @@ sub_8044898: @ 8044898
orrs r1, r0
lsrs r1, 31
adds r0, r4, 0
- bl sub_8088E74
+ bl GetSetPokedexFlag
lsls r0, 24
cmp r0, 0
bne _080448EE
adds r0, r4, 0
adds r1, r5, 0
- bl sub_8088E74
+ bl GetSetPokedexFlag
adds r0, r4, 0
bl NationalPokedexNumToSpecies
lsls r0, 16
diff --git a/asm/prof_pc.s b/asm/prof_pc.s
index ae8c68ded..2a449ff76 100644
--- a/asm/prof_pc.s
+++ b/asm/prof_pc.s
@@ -155,7 +155,7 @@ _080CA4D8:
lsls r0, 16
lsrs r0, 16
movs r1, 0x1
- bl sub_8088E74
+ bl GetSetPokedexFlag
lsls r0, 24
cmp r0, 0
beq _080CA500
diff --git a/asm/scrcmd.s b/asm/scrcmd.s
index b4f3678de..9bb17887a 100644
--- a/asm/scrcmd.s
+++ b/asm/scrcmd.s
@@ -525,7 +525,7 @@ ScrCmd_setmysteryeventstatus: @ 806A274
adds r1, 0x1
str r1, [r0, 0x8]
adds r0, r2, 0
- bl sub_80DA8E8
+ bl SetMysteryEventScriptStatus
movs r0, 0
pop {r1}
bx r1
diff --git a/asm/script_pokemon_util_80A0058.s b/asm/script_pokemon_util_80A0058.s
index 18c2d7ecb..4dd5da652 100644
--- a/asm/script_pokemon_util_80A0058.s
+++ b/asm/script_pokemon_util_80A0058.s
@@ -154,10 +154,10 @@ ScriptGiveMon: @ 80A011C
blt _080A0196
adds r0, r5, 0
movs r1, 0x2
- bl sub_8088E74
+ bl GetSetPokedexFlag
adds r0, r5, 0
movs r1, 0x3
- bl sub_8088E74
+ bl GetSetPokedexFlag
_080A0196:
adds r0, r7, 0
bl Free
diff --git a/asm/trade.s b/asm/trade.s
index 5df1c0534..8ae34f179 100644
--- a/asm/trade.s
+++ b/asm/trade.s
@@ -8131,7 +8131,7 @@ sub_80507A0: @ 80507A0
lsrs r4, 16
adds r0, r4, 0
movs r1, 0x2
- bl sub_8088E74
+ bl GetSetPokedexFlag
adds r0, r4, 0
movs r1, 0x3
adds r2, r5, 0
diff --git a/data/data_83FECCC.s b/data/data_83FECCC.s
index c89f5f308..9c39a96d2 100644
--- a/data/data_83FECCC.s
+++ b/data/data_83FECCC.s
@@ -556,7 +556,7 @@ gExpandedPlaceholder_Green:: @ 8415A5C
gText_EggNickname:: @ 8415A62
.incbin "baserom.gba", 0x415A62, 0x4
-gUnknown_8415A66:: @ 8415A66
+gText_Pokemon:: @ 8415A66
.incbin "baserom.gba", 0x415A66, 0x8
gUnknown_8415A6E:: @ 8415A6E
diff --git a/data/data_8471F00.s b/data/data_8471F00.s
index b9767d933..93d5ea372 100644
--- a/data/data_8471F00.s
+++ b/data/data_8471F00.s
@@ -337,32 +337,38 @@ gUnknown_84827B4:: @ 84827B4
gUnknown_84886E8:: @ 84886E8
.incbin "baserom.gba", 0x4886E8, 0x588
-gUnknown_8488C70:: @ 8488C70
- .incbin "baserom.gba", 0x488C70, 0x32
+gText_MysteryGiftBerry:: @ 8488C70
+ .string "Obtained a {STR_VAR_2} BERRY!\nDad has it at PETALBURG GYM.$"
-gUnknown_8488CA2:: @ 8488CA2
- .incbin "baserom.gba", 0x488CA2, 0x2C
+gText_MysteryGiftBerryTransform:: @ 8488CA2
+ .string "The {STR_VAR_1} BERRY transformed into\none {STR_VAR_2} BERRY.$"
-gUnknown_8488CCE:: @ 8488CCE
- .incbin "baserom.gba", 0x488CCE, 0x28
+gText_MysteryGiftBerryObtained:: @ 8488CCE
+ .string "The {STR_VAR_1} BERRY has already been\nobtained.$"
-gUnknown_8488CF6:: @ 8488CF6
- .incbin "baserom.gba", 0x488CF6, 0x34
+gText_MysteryGiftSpecialRibbon:: @ 8488CF6
+ .string "A special RIBBON was awarded to\nyour party POKéMON.$"
-gUnknown_8488D2A:: @ 8488D2A
- .incbin "baserom.gba", 0x488D2A, 0x36
+gText_MysteryGiftNationalDex:: @ 8488D2A
+ .string "The POKéDEX has been upgraded\nwith the NATIONAL MODE.$"
-gUnknown_8488D60:: @ 8488D60
- .incbin "baserom.gba", 0x488D60, 0x1C
+gText_MysteryGiftRareWord:: @ 8488D60
+ .string "A rare word has been added.$"
-gUnknown_8488D7C:: @ 8488D7C
- .incbin "baserom.gba", 0x488D7C, 0x12
+gText_MysteryGiftSentOver:: @ 8488D7C
+ .string "{STR_VAR_1} was sent over!$"
-gUnknown_8488D8E:: @ 8488D8E
- .incbin "baserom.gba", 0x488D8E, 0x2F
+gText_MysteryGiftFullParty:: @ 8488D8E
+ .string "Your party is full.\n{STR_VAR_1} could not be sent over.$"
-gUnknown_8488DBD:: @ 8488DBD
- .incbin "baserom.gba", 0x488DBD, 0x40
+gText_MysteryGiftNewTrainer:: @ 8488DBD
+ .string "A new TRAINER has arrived in\nHOENN.$"
-gUnknown_8488DFD:: @ 8488DFD
- .incbin "baserom.gba", 0x488DFD, 0xB6B
+gUnknown_8488DE1::
+ .incbin "baserom.gba", 0x488DE1, 0x1C
+
+gText_MysteryGiftCantBeUsed:: @ 8488DFD
+ .string "This data can’t be used in\nthis version.$"
+
+gUnknown_8488E26::
+ .incbin "baserom.gba", 0x488E26, 0xB42
diff --git a/data/mystery_event_script_cmd_table.s b/data/mystery_event_script_cmd_table.s
index 76b7ab5a5..4b85804a1 100644
--- a/data/mystery_event_script_cmd_table.s
+++ b/data/mystery_event_script_cmd_table.s
@@ -1,4 +1,5 @@
.section script_data, "aw", %progbits
-gUnknown_81DBCF0:: @ 81DBCF0
+gMysteryEventScriptCmdTable:: @ 81DBCF0
.incbin "baserom.gba", 0x1DBCF0, 0x44
+gMysteryEventScriptCmdTableEnd:: @ 81DBD34
diff --git a/include/battle_tower.h b/include/battle_tower.h
index 0782725b6..ec00d1f96 100644
--- a/include/battle_tower.h
+++ b/include/battle_tower.h
@@ -5,6 +5,6 @@
u16 sub_8164FCC(u8, u8);
void sub_80E7524(u32 *);
-void sub_80E7490(void);
+void ValidateEReaderTrainer(void);
#endif //GUARD_BATTLE_TOWER_H
diff --git a/include/constants/vars.h b/include/constants/vars.h
index 6dc8d0ccd..c9340a3b4 100644
--- a/include/constants/vars.h
+++ b/include/constants/vars.h
@@ -51,12 +51,12 @@
#define VAR_0x402D 0x402D
#define VAR_0x402E 0x402E
-#define VAR_FRONTIER_MANIAC_FACILITY 0x402F
+#define VAR_0x402F 0x402F
-#define VAR_FRONTIER_GAMBLER_FACILITY 0x4030
-#define VAR_FRONTIER_GAMBLER_SET_FACILITY_F 0x4031
-#define VAR_FRONTIER_GAMBLER_AMOUNT_BET 0x4032
-#define VAR_FRONTIER_GAMBLER_PLACED_BET_F 0x4033
+#define VAR_0x4030 0x4030
+#define VAR_0x4031 0x4031
+#define VAR_0x4032 0x4032
+#define VAR_ENIGMA_BERRY_AVAILABLE 0x4033
#define VAR_0x4034 0x4034
#define VAR_0x4035 0x4035
diff --git a/include/easy_chat.h b/include/easy_chat.h
index 78e371cbb..bd5c9a026 100644
--- a/include/easy_chat.h
+++ b/include/easy_chat.h
@@ -38,5 +38,6 @@ void InitializeEasyChatWordArray(u16 *words, u16 length);
void ConvertEasyChatWordsToString(u8 *dest, const u16 *src, u16 length1, u16 length2);
bool8 ECWord_CheckIfOutsideOfValidRange(u16 word);
void sub_80BDE28(void);
+void EnableRareWord(u8);
#endif // GUARD_EASYCHAT_H
diff --git a/include/global.berry.h b/include/global.berry.h
index 5c8a43a02..148bbc957 100644
--- a/include/global.berry.h
+++ b/include/global.berry.h
@@ -1,6 +1,7 @@
#ifndef GUARD_GLOBAL_BERRY_H
#define GUARD_GLOBAL_BERRY_H
+#define BERRY_NAME_LENGTH 6
#define BERRY_NAME_COUNT 7
#define BERRY_ITEM_EFFECT_COUNT 18
diff --git a/include/mail_data.h b/include/mail_data.h
index bbe695203..0275d8dc6 100644
--- a/include/mail_data.h
+++ b/include/mail_data.h
@@ -10,5 +10,6 @@
// Exported ROM declarations
u16 sub_80D45E8(u16, u16 *);
+bool8 itemid_is_mail(u16 itemId);
#endif //GUARD_MAIL_DATA_H
diff --git a/include/mystery_event_msg.h b/include/mystery_event_msg.h
new file mode 100644
index 000000000..e96c3069b
--- /dev/null
+++ b/include/mystery_event_msg.h
@@ -0,0 +1,18 @@
+#ifndef GUARD_MYSTERY_EVENT_MSG_H
+#define GUARD_MYSTERY_EVENT_MSG_H
+
+#include <gba/gba.h>
+
+extern const u8 gText_MysteryGiftBerry[];
+extern const u8 gText_MysteryGiftBerryTransform[];
+extern const u8 gText_MysteryGiftBerryObtained[];
+extern const u8 gText_MysteryGiftSpecialRibbon[];
+extern const u8 gText_MysteryGiftNationalDex[];
+extern const u8 gText_MysteryGiftRareWord[];
+extern const u8 gText_MysteryGiftSentOver[];
+extern const u8 gText_MysteryGiftFullParty[];
+extern const u8 gText_MysteryGiftNewTrainer[];
+extern const u8 gText_MysteryGiftNewAdversaryInBattleTower[];
+extern const u8 gText_MysteryGiftCantBeUsed[];
+
+#endif // GUARD_MYSTERY_EVENT_MSG_H
diff --git a/include/mystery_event_script.h b/include/mystery_event_script.h
index 8f90ccf53..be64663ed 100644
--- a/include/mystery_event_script.h
+++ b/include/mystery_event_script.h
@@ -7,7 +7,7 @@ u32 RunMysteryEventScript(u8 *);
void SetMysteryEventScriptStatus(u32 val);
u16 GetRecordMixingGift(void);
-void sub_80DA89C(void *);
+void sub_80DA89C(u8 *);
bool32 sub_80DA8B0(u32 *);
#endif // GUARD_MYSTERY_EVENT_SCRIPT_H
diff --git a/include/strings.h b/include/strings.h
index 90c84c9b9..40021a01d 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -89,5 +89,7 @@ extern const u8 gText_Cancel4[];
extern const u8 gText_IsThisTheCorrectTime[];
extern const u8 gText_PkmnFainted3[];
extern const u8 gText_Coins[];
+extern const u8 gText_EggNickname[];
+extern const u8 gText_Pokemon[];
#endif //GUARD_STRINGS_H
diff --git a/ld_script.txt b/ld_script.txt
index 9238e0e71..a34e55e05 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -182,7 +182,7 @@ SECTIONS {
asm/roulette_util.o(.text);
asm/cable_car_util.o(.text);
src/save.o(.text);
- asm/mystery_event_script.o(.text);
+ src/mystery_event_script.o(.text);
asm/field_effect_helpers.o(.text);
asm/battle_anim_sound_tasks.o(.text);
asm/battle_controller_safari.o(.text);
diff --git a/src/mevent_server.c b/src/mevent_server.c
index d5a9a0c0e..5e384ae0b 100644
--- a/src/mevent_server.c
+++ b/src/mevent_server.c
@@ -227,7 +227,7 @@ static u32 ish_mainseq_4(struct mevent_srv_ish * svr)
break;
case 18:
memcpy(gSaveBlock2Ptr->unk_4A0, svr->recvBuffer, 0xbc);
- sub_80E7490();
+ ValidateEReaderTrainer();
break;
case 21:
memcpy(gDecompressionBuffer, svr->recvBuffer, ME_SEND_BUF_SIZE);
diff --git a/src/mystery_event_script.c b/src/mystery_event_script.c
new file mode 100644
index 000000000..c9dc6ae81
--- /dev/null
+++ b/src/mystery_event_script.c
@@ -0,0 +1,322 @@
+#include "global.h"
+#include "berry.h"
+#include "battle_tower.h"
+#include "easy_chat.h"
+#include "event_data.h"
+#include "mail.h"
+#include "mail_data.h"
+#include "mystery_event_script.h"
+#include "pokedex.h"
+#include "pokemon.h"
+#include "pokemon_size_record.h"
+#include "script.h"
+#include "constants/species.h"
+#include "strings.h"
+#include "string_util.h"
+#include "text.h"
+#include "util.h"
+#include "mystery_event_msg.h"
+#include "pokemon_storage_system.h"
+
+extern ScrCmdFunc gMysteryEventScriptCmdTable[];
+extern ScrCmdFunc gMysteryEventScriptCmdTableEnd[];
+
+#define LANGUAGE_MASK 0x1
+#define VERSION_MASK 0x1
+
+EWRAM_DATA static struct ScriptContext sMysteryEventScriptContext = {0};
+
+static bool32 CheckCompatibility(u16 a1, u32 a2, u16 a3, u32 a4)
+{
+ if (!(a1 & LANGUAGE_MASK))
+ return FALSE;
+
+ if (!(a2 & LANGUAGE_MASK))
+ return FALSE;
+
+ if (!(a3 & 0x1))
+ return FALSE;
+
+ if (!(a4 & VERSION_MASK))
+ return FALSE;
+
+ return TRUE;
+}
+
+static void SetIncompatible(void)
+{
+ StringExpandPlaceholders(gStringVar4, gText_MysteryGiftCantBeUsed);
+ SetMysteryEventScriptStatus(3);
+}
+
+static void InitMysteryEventScript(struct ScriptContext *ctx, u8 *script)
+{
+ InitScriptContext(ctx, gMysteryEventScriptCmdTable, gMysteryEventScriptCmdTableEnd);
+ SetupBytecodeScript(ctx, script);
+ ctx->data[0] = (u32)script;
+ ctx->data[1] = 0;
+ ctx->data[2] = 0;
+ ctx->data[3] = 0;
+}
+
+static bool32 RunMysteryEventScriptCommand(struct ScriptContext *ctx)
+{
+ if (RunScriptCommand(ctx) && ctx->data[3])
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void sub_80DA89C(u8 *script)
+{
+ InitMysteryEventScript(&sMysteryEventScriptContext, script);
+}
+
+bool32 sub_80DA8B0(u32 *a0)
+{
+ bool32 ret = RunMysteryEventScriptCommand(&sMysteryEventScriptContext);
+ *a0 = sMysteryEventScriptContext.data[2];
+
+ return ret;
+}
+
+u32 RunMysteryEventScript(u8 *script)
+{
+ u32 ret;
+ sub_80DA89C(script);
+ while (sub_80DA8B0(&ret));
+
+ return ret;
+}
+
+void SetMysteryEventScriptStatus(u32 val)
+{
+ sMysteryEventScriptContext.data[2] = val;
+}
+
+bool8 MEScrCmd_end(struct ScriptContext *ctx)
+{
+ StopScript(ctx);
+ return TRUE;
+}
+
+bool8 MEScrCmd_checkcompat(struct ScriptContext *ctx)
+{
+ u16 v1;
+ u32 v2;
+ u16 v3;
+ u32 v4;
+
+ ctx->data[1] = ScriptReadWord(ctx);
+ v1 = ScriptReadHalfword(ctx);
+ v2 = ScriptReadWord(ctx);
+ v3 = ScriptReadHalfword(ctx);
+ v4 = ScriptReadWord(ctx);
+
+ if (CheckCompatibility(v1, v2, v3, v4) == TRUE)
+ ctx->data[3] = 1;
+ else
+ SetIncompatible();
+
+ return TRUE;
+}
+
+bool8 MEScrCmd_nop(struct ScriptContext *ctx)
+{
+ return FALSE;
+}
+
+bool8 MEScrCmd_setstatus(struct ScriptContext *ctx)
+{
+ u8 value = ScriptReadByte(ctx);
+ ctx->data[2] = value;
+ return FALSE;
+}
+
+bool8 MEScrCmd_setmsg(struct ScriptContext *ctx)
+{
+ u8 value = ScriptReadByte(ctx);
+ u8 *str = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]);
+ if (value == 0xFF || value == ctx->data[2])
+ StringExpandPlaceholders(gStringVar4, str);
+ return FALSE;
+}
+
+bool8 MEScrCmd_runscript(struct ScriptContext *ctx)
+{
+ u8 *script = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]);
+ ScriptContext2_RunNewScript(script);
+ return FALSE;
+}
+
+bool8 MEScrCmd_setenigmaberry(struct ScriptContext *ctx)
+{
+ u8 *str;
+ const u8 *message;
+ bool32 haveBerry = IsEnigmaBerryValid();
+ u8 *berry = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]);
+ StringCopyN(gStringVar1, gSaveBlock1Ptr->enigmaBerry.berry.name, BERRY_NAME_LENGTH + 1);
+ SetEnigmaBerry(berry);
+ StringCopyN(gStringVar2, gSaveBlock1Ptr->enigmaBerry.berry.name, BERRY_NAME_LENGTH + 1);
+
+ if (!haveBerry)
+ {
+ str = gStringVar4;
+ message = gText_MysteryGiftBerry;
+ }
+ else if (StringCompare(gStringVar1, gStringVar2))
+ {
+ str = gStringVar4;
+ message = gText_MysteryGiftBerryTransform;
+ }
+ else
+ {
+ str = gStringVar4;
+ message = gText_MysteryGiftBerryObtained;
+ }
+
+ StringExpandPlaceholders(str, message);
+
+ ctx->data[2] = 2;
+
+ if (IsEnigmaBerryValid() == TRUE)
+ VarSet(VAR_ENIGMA_BERRY_AVAILABLE, 1);
+ else
+ ctx->data[2] = 1;
+
+ return FALSE;
+}
+
+bool8 MEScrCmd_giveribbon(struct ScriptContext *ctx)
+{
+ u8 index = ScriptReadByte(ctx);
+ u8 ribbonId = ScriptReadByte(ctx);
+ GiveGiftRibbonToParty(index, ribbonId);
+ StringExpandPlaceholders(gStringVar4, gText_MysteryGiftSpecialRibbon);
+ ctx->data[2] = 2;
+ return FALSE;
+}
+
+bool8 MEScrCmd_initramscript(struct ScriptContext *ctx)
+{
+ u8 mapGroup = ScriptReadByte(ctx);
+ u8 mapNum = ScriptReadByte(ctx);
+ u8 objectId = ScriptReadByte(ctx);
+ u8 *script = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]);
+ u8 *scriptEnd = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]);
+ InitRamScript(script, scriptEnd - script, mapGroup, mapNum, objectId);
+ return FALSE;
+}
+
+bool8 MEScrCmd_givenationaldex(struct ScriptContext *ctx)
+{
+ EnableNationalPokedex();
+ StringExpandPlaceholders(gStringVar4, gText_MysteryGiftNationalDex);
+ ctx->data[2] = 2;
+ return FALSE;
+}
+
+bool8 MEScrCmd_addrareword(struct ScriptContext *ctx)
+{
+ EnableRareWord(ScriptReadByte(ctx));
+ StringExpandPlaceholders(gStringVar4, gText_MysteryGiftRareWord);
+ ctx->data[2] = 2;
+ return FALSE;
+}
+
+bool8 MEScrCmd_setrecordmixinggift(struct ScriptContext *ctx)
+{
+ SetIncompatible();
+ ctx->data[3] = 0;
+ return TRUE;
+}
+
+bool8 MEScrCmd_givepokemon(struct ScriptContext *ctx)
+{
+ struct MailStruct mail;
+ struct Pokemon pokemon;
+ u16 species;
+ u16 heldItem;
+ u32 data = ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0];
+ void *pokemonPtr = (void *)data;
+ void *mailPtr = (void *)(data + sizeof(struct Pokemon));
+
+ pokemon = *(struct Pokemon *)pokemonPtr;
+ species = GetMonData(&pokemon, MON_DATA_SPECIES2);
+
+ if (species == SPECIES_EGG)
+ StringCopyN(gStringVar1, gText_EggNickname, POKEMON_NAME_LENGTH + 1);
+ else
+ StringCopyN(gStringVar1, gText_Pokemon, POKEMON_NAME_LENGTH + 1);
+
+ if (gPlayerPartyCount == PARTY_SIZE)
+ {
+ StringExpandPlaceholders(gStringVar4, gText_MysteryGiftFullParty);
+ ctx->data[2] = 3;
+ }
+ else
+ {
+ memcpy(&gPlayerParty[5], pokemonPtr, sizeof(struct Pokemon));
+ memcpy(&mail, mailPtr, sizeof(struct MailStruct));
+
+ if (species != SPECIES_EGG)
+ {
+ u16 pokedexNum = SpeciesToNationalPokedexNum(species);
+ GetSetPokedexFlag(pokedexNum, FLAG_SET_SEEN);
+ GetSetPokedexFlag(pokedexNum, FLAG_SET_CAUGHT);
+ }
+
+ heldItem = GetMonData(&gPlayerParty[5], MON_DATA_HELD_ITEM);
+ if (itemid_is_mail(heldItem))
+ GiveMailToMon2(&gPlayerParty[5], &mail);
+ CompactPartySlots();
+ CalculatePlayerPartyCount();
+ StringExpandPlaceholders(gStringVar4, gText_MysteryGiftSentOver);
+ ctx->data[2] = 2;
+ }
+
+ return FALSE;
+}
+
+bool8 MEScrCmd_addtrainer(struct ScriptContext *ctx)
+{
+ u32 data = ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0];
+ memcpy(gSaveBlock2Ptr->unk_4A0, (void *)data, 0xBC);
+ ValidateEReaderTrainer();
+ StringExpandPlaceholders(gStringVar4, gText_MysteryGiftNewTrainer);
+ ctx->data[2] = 2;
+ return FALSE;
+}
+
+bool8 MEScrCmd_enableresetrtc(struct ScriptContext *ctx)
+{
+ SetIncompatible();
+ ctx->data[3] = 0;
+ return TRUE;
+}
+
+bool8 MEScrCmd_checksum(struct ScriptContext *ctx)
+{
+ int checksum = ScriptReadWord(ctx);
+ u8 *data = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]);
+ u8 *dataEnd = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]);
+ if (checksum != CalcByteArraySum(data, dataEnd - data))
+ {
+ ctx->data[3] = 0;
+ ctx->data[2] = 1;
+ }
+ return TRUE;
+}
+
+bool8 MEScrCmd_crc(struct ScriptContext *ctx)
+{
+ int crc = ScriptReadWord(ctx);
+ u8 *data = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]);
+ u8 *dataEnd = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]);
+ if (crc != CalcCRC16(data, dataEnd - data))
+ {
+ ctx->data[3] = 0;
+ ctx->data[2] = 1;
+ }
+ return TRUE;
+}
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 9e638c025..9c5d6022b 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -1197,10 +1197,7 @@ gUnknown_2039A34: @ 2039A34
.space 0x4
.include "src/save.o"
-
- .align 2
-gUnknown_203AA3C: @ 203AA3C
- .space 0x74
+ .include "src/mystery_event_script.o"
gUnknown_203AAB0: @ 203AAB0
.space 0x4