diff options
-rw-r--r-- | asm/battle_interface.s | 2 | ||||
-rw-r--r-- | asm/battle_script_commands.s | 4 | ||||
-rw-r--r-- | asm/battle_tower.s | 10 | ||||
-rw-r--r-- | asm/berry.s | 6 | ||||
-rw-r--r-- | asm/easy_chat.s | 14 | ||||
-rw-r--r-- | asm/egg_hatch.s | 4 | ||||
-rw-r--r-- | asm/event_data.s | 6 | ||||
-rw-r--r-- | asm/evolution_scene.s | 12 | ||||
-rw-r--r-- | asm/field_specials.s | 6 | ||||
-rw-r--r-- | asm/mystery_event_script.s | 722 | ||||
-rw-r--r-- | asm/pokedex.s | 20 | ||||
-rw-r--r-- | asm/pokemon_3.s | 4 | ||||
-rw-r--r-- | asm/prof_pc.s | 2 | ||||
-rw-r--r-- | asm/scrcmd.s | 2 | ||||
-rw-r--r-- | asm/script_pokemon_util_80A0058.s | 4 | ||||
-rw-r--r-- | asm/trade.s | 2 | ||||
-rw-r--r-- | data/data_83FECCC.s | 2 | ||||
-rw-r--r-- | data/data_8471F00.s | 46 | ||||
-rw-r--r-- | data/mystery_event_script_cmd_table.s | 3 | ||||
-rw-r--r-- | include/battle_tower.h | 2 | ||||
-rw-r--r-- | include/constants/vars.h | 10 | ||||
-rw-r--r-- | include/easy_chat.h | 1 | ||||
-rw-r--r-- | include/global.berry.h | 1 | ||||
-rw-r--r-- | include/mail_data.h | 1 | ||||
-rw-r--r-- | include/mystery_event_msg.h | 18 | ||||
-rw-r--r-- | include/mystery_event_script.h | 2 | ||||
-rw-r--r-- | include/strings.h | 2 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/mevent_server.c | 2 | ||||
-rw-r--r-- | src/mystery_event_script.c | 322 | ||||
-rw-r--r-- | sym_ewram.txt | 5 |
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 |