diff options
-rw-r--r-- | asm/field_control_avatar.s | 4 | ||||
-rw-r--r-- | asm/field_specials.s | 1350 | ||||
-rw-r--r-- | asm/fldeff_cut.s | 4 | ||||
-rw-r--r-- | data/event_scripts.s | 31 | ||||
-rw-r--r-- | data/field_specials.s | 105 | ||||
-rw-r--r-- | data/maps/BirthIsland_Exterior/scripts.inc | 4 | ||||
-rw-r--r-- | data/maps/FiveIsland_WaterLabyrinth/scripts.inc | 4 | ||||
-rw-r--r-- | data/maps/FourIsland_PokemonDayCare/scripts.inc | 2 | ||||
-rw-r--r-- | data/maps/MtEmber_RubyPath_B5F/scripts.inc | 14 | ||||
-rw-r--r-- | data/maps/NavelRock_Summit/scripts.inc | 4 | ||||
-rw-r--r-- | data/maps/SixIsland_DottedHole_SapphireRoom/scripts.inc | 30 | ||||
-rw-r--r-- | data/specials.inc | 24 | ||||
-rw-r--r-- | include/constants/field_effects.h | 1 | ||||
-rw-r--r-- | include/constants/flags.h | 8 | ||||
-rw-r--r-- | include/field_effect.h | 1 | ||||
-rw-r--r-- | include/field_specials.h | 2 | ||||
-rw-r--r-- | include/fieldmap.h | 1 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/field_specials.c | 613 | ||||
-rw-r--r-- | src/item_use.c | 10 | ||||
-rw-r--r-- | src/start_menu.c | 2 |
21 files changed, 665 insertions, 1551 deletions
diff --git a/asm/field_control_avatar.s b/asm/field_control_avatar.s index 515d4b606..c265d7d01 100644 --- a/asm/field_control_avatar.s +++ b/asm/field_control_avatar.s @@ -366,9 +366,9 @@ sub_806CAC8: @ 806CAC8 bl IncrementGameStat bl MENewsJisanStepCounter bl IncrementRenewableHiddenItemStepCounter - bl sub_80CC918 + bl RunMassageCooldownStepCounter bl IncrementResortGorgeousStepCounter - bl sub_80CCFBC + bl BirthIslandDeoxysStepCounter mov r0, sp adds r1, r4, 0 adds r2, r6, 0 diff --git a/asm/field_specials.s b/asm/field_specials.s deleted file mode 100644 index 919622482..000000000 --- a/asm/field_specials.s +++ /dev/null @@ -1,1350 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start set_unknown_box_id -set_unknown_box_id: @ 80CC79C - ldr r1, _080CC7A4 @ =gUnknown_2039A1A - strb r0, [r1] - bx lr - .align 2, 0 -_080CC7A4: .4byte gUnknown_2039A1A - thumb_func_end set_unknown_box_id - - thumb_func_start get_unknown_box_id -get_unknown_box_id: @ 80CC7A8 - ldr r0, _080CC7B0 @ =gUnknown_2039A1A - ldrb r0, [r0] - bx lr - .align 2, 0 -_080CC7B0: .4byte gUnknown_2039A1A - thumb_func_end get_unknown_box_id - - thumb_func_start sub_80CC7B4 -sub_80CC7B4: @ 80CC7B4 - push {r4,r5,lr} - ldr r5, _080CC7E8 @ =0x00000843 - adds r0, r5, 0 - bl FlagGet - lsls r0, 24 - cmp r0, 0 - bne _080CC7F0 - bl StorageGetCurrentBox - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _080CC7EC @ =0x00004037 - bl VarGet - lsls r0, 16 - lsrs r0, 16 - cmp r4, r0 - beq _080CC7F0 - adds r0, r5, 0 - bl FlagSet - movs r0, 0x1 - b _080CC7F2 - .align 2, 0 -_080CC7E8: .4byte 0x00000843 -_080CC7EC: .4byte 0x00004037 -_080CC7F0: - movs r0, 0 -_080CC7F2: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80CC7B4 - - thumb_func_start sub_80CC7F8 -sub_80CC7F8: @ 80CC7F8 - push {r4-r7,lr} - ldr r0, _080CC850 @ =0x00004037 - bl VarGet - lsls r0, 24 - lsrs r0, 24 - bl set_unknown_box_id - bl StorageGetCurrentBox - lsls r0, 24 - lsrs r4, r0, 24 -_080CC810: - movs r5, 0 - lsls r6, r4, 24 - lsls r7, r4, 16 -_080CC816: - lsls r1, r5, 24 - lsrs r1, 24 - lsrs r0, r6, 24 - bl GetBoxedMonPtr - movs r1, 0xB - movs r2, 0 - bl GetBoxMonData - cmp r0, 0 - bne _080CC858 - bl get_unknown_box_id - lsls r0, 16 - lsrs r0, 16 - cmp r0, r4 - beq _080CC83E - ldr r0, _080CC854 @ =0x00000843 - bl FlagClear -_080CC83E: - ldr r0, _080CC850 @ =0x00004037 - lsrs r1, r7, 16 - bl VarSet - bl sub_80CC7B4 - lsls r0, 24 - lsrs r0, 24 - b _080CC874 - .align 2, 0 -_080CC850: .4byte 0x00004037 -_080CC854: .4byte 0x00000843 -_080CC858: - adds r5, 0x1 - cmp r5, 0x1D - ble _080CC816 - adds r4, 0x1 - cmp r4, 0xE - bne _080CC866 - movs r4, 0 -_080CC866: - bl StorageGetCurrentBox - lsls r0, 24 - lsrs r0, 24 - cmp r4, r0 - bne _080CC810 - movs r0, 0 -_080CC874: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80CC7F8 - - thumb_func_start sub_80CC87C -sub_80CC87C: @ 80CC87C - push {r4,lr} - ldr r0, _080CC8AC @ =gUnknown_2031DB4 - movs r1, 0 - ldrsb r1, [r0, r1] - lsls r1, 8 - ldrb r0, [r0, 0x1] - lsls r0, 24 - asrs r0, 24 - adds r0, r1 - lsls r0, 16 - lsrs r3, r0, 16 - ldr r2, _080CC8B0 @ =gUnknown_83F5F26 - ldrh r0, [r2] - ldr r1, _080CC8B4 @ =0x0000ffff - cmp r0, r1 - beq _080CC8C2 - adds r4, r1, 0 - adds r1, r2, 0 -_080CC8A0: - ldrh r0, [r2] - cmp r0, r3 - bne _080CC8B8 - movs r0, 0x1 - b _080CC8C4 - .align 2, 0 -_080CC8AC: .4byte gUnknown_2031DB4 -_080CC8B0: .4byte gUnknown_83F5F26 -_080CC8B4: .4byte 0x0000ffff -_080CC8B8: - adds r1, 0x2 - adds r2, 0x2 - ldrh r0, [r1] - cmp r0, r4 - bne _080CC8A0 -_080CC8C2: - movs r0, 0 -_080CC8C4: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80CC87C - - thumb_func_start sub_80CC8CC -sub_80CC8CC: @ 80CC8CC - push {r4,lr} - ldr r1, _080CC8E4 @ =gSpecialVar_0x8004 - ldr r2, _080CC8E8 @ =0xfffffedf - adds r0, r2, 0 - ldrh r2, [r1] - adds r0, r2 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x39 - bls _080CC8EC - movs r0, 0 - b _080CC908 - .align 2, 0 -_080CC8E4: .4byte gSpecialVar_0x8004 -_080CC8E8: .4byte 0xfffffedf -_080CC8EC: - ldr r4, _080CC910 @ =gStringVar1 - ldrh r0, [r1] - bl ItemIdToBattleMoveId - lsls r0, 16 - lsrs r0, 16 - movs r1, 0xD - muls r1, r0 - ldr r0, _080CC914 @ =gMoveNames - adds r1, r0 - adds r0, r4, 0 - bl StringCopy - movs r0, 0x1 -_080CC908: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080CC910: .4byte gStringVar1 -_080CC914: .4byte gMoveNames - thumb_func_end sub_80CC8CC - - thumb_func_start sub_80CC918 -sub_80CC918: @ 80CC918 - push {r4,lr} - ldr r4, _080CC940 @ =0x00004025 - adds r0, r4, 0 - bl VarGet - lsls r0, 16 - lsrs r1, r0, 16 - ldr r0, _080CC944 @ =0x000001f3 - cmp r1, r0 - bhi _080CC938 - adds r1, 0x1 - lsls r1, 16 - lsrs r1, 16 - adds r0, r4, 0 - bl VarSet -_080CC938: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080CC940: .4byte 0x00004025 -_080CC944: .4byte 0x000001f3 - thumb_func_end sub_80CC918 - - thumb_func_start Special_DaisyMassageServices -Special_DaisyMassageServices: @ 80CC948 - push {lr} - ldr r0, _080CC968 @ =gSpecialVar_0x8004 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080CC96C @ =gPlayerParty - adds r0, r1 - movs r1, 0x6 - bl AdjustFriendship - ldr r0, _080CC970 @ =0x00004025 - movs r1, 0 - bl VarSet - pop {r0} - bx r0 - .align 2, 0 -_080CC968: .4byte gSpecialVar_0x8004 -_080CC96C: .4byte gPlayerParty -_080CC970: .4byte 0x00004025 - thumb_func_end Special_DaisyMassageServices - - thumb_func_start sub_80CC974 -sub_80CC974: @ 80CC974 - push {r4-r6,lr} - ldr r0, _080CC9A8 @ =sub_80CCA18 - movs r1, 0x8 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r5, r1, 3 - ldr r6, _080CC9AC @ =gTasks+0x8 - adds r4, r5, r6 - movs r0, 0x3 - bl FlagGet - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080CC9B4 - adds r0, r6, 0 - subs r0, 0x8 - adds r0, r5, r0 - ldr r1, _080CC9B0 @ =sub_80CCAF4 - str r1, [r0] - b _080CCA08 - .align 2, 0 -_080CC9A8: .4byte sub_80CCA18 -_080CC9AC: .4byte gTasks+0x8 -_080CC9B0: .4byte sub_80CCAF4 -_080CC9B4: - ldr r0, _080CC9D8 @ =gSaveBlock1Ptr - ldr r0, [r0] - ldrh r1, [r0, 0x4] - ldr r0, _080CC9DC @ =0x00004f01 - cmp r1, r0 - bne _080CC9E8 - ldr r0, _080CC9E0 @ =gUnknown_83F61FB - ldrb r0, [r0] - strh r0, [r4] - movs r0, 0x8 - strh r0, [r4, 0x4] - ldr r0, _080CC9E4 @ =gUnknown_83F60D0 - movs r1, 0x70 - movs r2, 0x20 - bl LoadPalette - b _080CC9FC - .align 2, 0 -_080CC9D8: .4byte gSaveBlock1Ptr -_080CC9DC: .4byte 0x00004f01 -_080CC9E0: .4byte gUnknown_83F61FB -_080CC9E4: .4byte gUnknown_83F60D0 -_080CC9E8: - ldr r0, _080CCA10 @ =gUnknown_83F61F0 - ldrb r0, [r0] - strh r0, [r4] - movs r0, 0xB - strh r0, [r4, 0x4] - ldr r0, _080CCA14 @ =gUnknown_83F5F50 - movs r1, 0x70 - movs r2, 0x20 - bl LoadPalette -_080CC9FC: - movs r0, 0 - strh r0, [r4, 0x2] - movs r0, 0x7 - movs r1, 0x1 - bl sub_8059948 -_080CCA08: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080CCA10: .4byte gUnknown_83F61F0 -_080CCA14: .4byte gUnknown_83F5F50 - thumb_func_end sub_80CC974 - - thumb_func_start sub_80CCA18 -sub_80CCA18: @ 80CCA18 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080CCAA4 @ =gTasks+0x8 - adds r4, r1, r0 - ldr r0, _080CCAA8 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080CCAE6 - movs r0, 0x2 - bl FlagGet - lsls r0, 24 - cmp r0, 0 - beq _080CCAE6 - movs r0, 0x5 - bl FlagGet - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _080CCAE6 - ldr r0, _080CCAAC @ =gUnknown_2036E28 - ldrb r0, [r0] - cmp r0, 0x3 - beq _080CCAE6 - ldrh r0, [r4] - subs r0, 0x1 - strh r0, [r4] - lsls r0, 16 - asrs r2, r0, 16 - cmp r2, 0 - bne _080CCAE6 - ldrh r0, [r4, 0x2] - adds r0, 0x1 - strh r0, [r4, 0x2] - lsls r0, 16 - asrs r0, 16 - movs r3, 0x4 - ldrsh r1, [r4, r3] - cmp r0, r1 - bne _080CCA78 - strh r2, [r4, 0x2] -_080CCA78: - ldr r0, _080CCAB0 @ =gSaveBlock1Ptr - ldr r0, [r0] - ldrh r1, [r0, 0x4] - ldr r0, _080CCAB4 @ =0x00004f01 - cmp r1, r0 - bne _080CCAC0 - ldr r1, _080CCAB8 @ =gUnknown_83F61FB - movs r2, 0x2 - ldrsh r0, [r4, r2] - adds r0, r1 - ldrb r0, [r0] - strh r0, [r4] - movs r3, 0x2 - ldrsh r0, [r4, r3] - lsls r0, 5 - ldr r1, _080CCABC @ =gUnknown_83F60D0 - adds r0, r1 - movs r1, 0x70 - movs r2, 0x20 - bl LoadPalette - b _080CCADE - .align 2, 0 -_080CCAA4: .4byte gTasks+0x8 -_080CCAA8: .4byte gPaletteFade -_080CCAAC: .4byte gUnknown_2036E28 -_080CCAB0: .4byte gSaveBlock1Ptr -_080CCAB4: .4byte 0x00004f01 -_080CCAB8: .4byte gUnknown_83F61FB -_080CCABC: .4byte gUnknown_83F60D0 -_080CCAC0: - ldr r1, _080CCAEC @ =gUnknown_83F61F0 - movs r2, 0x2 - ldrsh r0, [r4, r2] - adds r0, r1 - ldrb r0, [r0] - strh r0, [r4] - movs r3, 0x2 - ldrsh r0, [r4, r3] - lsls r0, 5 - ldr r1, _080CCAF0 @ =gUnknown_83F5F50 - adds r0, r1 - movs r1, 0x70 - movs r2, 0x20 - bl LoadPalette -_080CCADE: - movs r0, 0x7 - movs r1, 0x1 - bl sub_8059948 -_080CCAE6: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080CCAEC: .4byte gUnknown_83F61F0 -_080CCAF0: .4byte gUnknown_83F5F50 - thumb_func_end sub_80CCA18 - - thumb_func_start sub_80CCAF4 -sub_80CCAF4: @ 80CCAF4 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - movs r0, 0x4 - bl FlagGet - lsls r0, 24 - cmp r0, 0 - beq _080CCB5A - ldr r0, _080CCB20 @ =gSaveBlock1Ptr - ldr r0, [r0] - ldrh r1, [r0, 0x4] - ldr r0, _080CCB24 @ =0x00004f01 - cmp r1, r0 - bne _080CCB2C - ldr r0, _080CCB28 @ =gUnknown_83F61D0 - movs r1, 0x70 - movs r2, 0x20 - bl LoadPalette - b _080CCB36 - .align 2, 0 -_080CCB20: .4byte gSaveBlock1Ptr -_080CCB24: .4byte 0x00004f01 -_080CCB28: .4byte gUnknown_83F61D0 -_080CCB2C: - ldr r0, _080CCB60 @ =gUnknown_83F60B0 - movs r1, 0x70 - movs r2, 0x20 - bl LoadPalette -_080CCB36: - movs r0, 0x7 - movs r1, 0x1 - bl sub_8059948 - ldr r0, _080CCB64 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080CCB54 - movs r0, 0x80 - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes -_080CCB54: - adds r0, r4, 0 - bl DestroyTask -_080CCB5A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080CCB60: .4byte gUnknown_83F60B0 -_080CCB64: .4byte gPaletteFade - thumb_func_end sub_80CCAF4 - - thumb_func_start sub_80CCB68 -sub_80CCB68: @ 80CCB68 - push {r4,lr} - ldr r4, _080CCB90 @ =sub_80CCA18 - adds r0, r4, 0 - bl FuncIsActiveTask - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080CCB88 - adds r0, r4, 0 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_080CCB88: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080CCB90: .4byte sub_80CCA18 - thumb_func_end sub_80CCB68 - - thumb_func_start sub_80CCB94 -sub_80CCB94: @ 80CCB94 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - movs r7, 0 - movs r6, 0 - bl GetLeadMonIndex - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r0, _080CCBC0 @ =gSpecialVar_0x8007 - mov r1, r8 - strh r1, [r0] - movs r4, 0 - movs r0, 0x64 - mov r5, r8 - muls r5, r0 - ldr r0, _080CCBC4 @ =gPlayerParty - mov r9, r0 - b _080CCBCE - .align 2, 0 -_080CCBC0: .4byte gSpecialVar_0x8007 -_080CCBC4: .4byte gPlayerParty -_080CCBC8: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 -_080CCBCE: - cmp r4, 0x2 - bhi _080CCBEA - mov r1, r9 - adds r0, r5, r1 - movs r1, 0x41 - movs r2, 0 - bl GetMonData - ldr r1, _080CCC1C @ =gUnknown_83F6203 - adds r1, r4, r1 - ldrb r1, [r1] - cmp r0, r1 - bne _080CCBC8 - adds r7, r4, 0 -_080CCBEA: - cmp r4, 0x3 - beq _080CCC7A - movs r0, 0x64 - mov r1, r8 - muls r1, r0 - adds r0, r1, 0 - ldr r1, _080CCC20 @ =gPlayerParty - adds r0, r1 - movs r1, 0x20 - bl GetMonData - cmp r0, 0xFF - bne _080CCC7A - cmp r7, 0 - bne _080CCC34 - ldr r0, _080CCC24 @ =gStringVar2 - ldr r1, _080CCC28 @ =gMoveNames + 0x112A FRENZY PLANT - bl StringCopy - ldr r1, _080CCC2C @ =gSpecialVar_0x8005 - movs r0, 0xF - strh r0, [r1] - ldr r0, _080CCC30 @ =0x000002de - b _080CCC6E - .align 2, 0 -_080CCC1C: .4byte gUnknown_83F6203 -_080CCC20: .4byte gPlayerParty -_080CCC24: .4byte gStringVar2 -_080CCC28: .4byte gMoveNames + 0x112A -_080CCC2C: .4byte gSpecialVar_0x8005 -_080CCC30: .4byte 0x000002de -_080CCC34: - cmp r7, 0x1 - bne _080CCC5C - ldr r0, _080CCC4C @ =gStringVar2 - ldr r1, _080CCC50 @ =gMoveNames + 0xF97 BLAST BURN - bl StringCopy - ldr r1, _080CCC54 @ =gSpecialVar_0x8005 - movs r0, 0x10 - strh r0, [r1] - ldr r0, _080CCC58 @ =0x000002df - b _080CCC6E - .align 2, 0 -_080CCC4C: .4byte gStringVar2 -_080CCC50: .4byte gMoveNames + 0xF97 -_080CCC54: .4byte gSpecialVar_0x8005 -_080CCC58: .4byte 0x000002df -_080CCC5C: - ldr r0, _080CCC80 @ =gStringVar2 - ldr r1, _080CCC84 @ =gMoveNames + 0xFA4 HYDRO CANNON - bl StringCopy - ldr r1, _080CCC88 @ =gSpecialVar_0x8005 - movs r0, 0x11 - strh r0, [r1] - movs r0, 0xB8 - lsls r0, 2 -_080CCC6E: - bl FlagGet - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080CCC8C -_080CCC7A: - movs r0, 0 - b _080CCCE4 - .align 2, 0 -_080CCC80: .4byte gStringVar2 -_080CCC84: .4byte gMoveNames + 0xFA4 -_080CCC88: .4byte gSpecialVar_0x8005 -_080CCC8C: - movs r0, 0x64 - mov r1, r8 - muls r1, r0 - ldr r0, _080CCCF0 @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0xD - bl GetMonData - cmp r0, 0 - beq _080CCCA8 - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 -_080CCCA8: - adds r0, r4, 0 - movs r1, 0xE - bl GetMonData - cmp r0, 0 - beq _080CCCBA - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 -_080CCCBA: - adds r0, r4, 0 - movs r1, 0xF - bl GetMonData - cmp r0, 0 - beq _080CCCCC - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 -_080CCCCC: - adds r0, r4, 0 - movs r1, 0x10 - bl GetMonData - cmp r0, 0 - beq _080CCCDE - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 -_080CCCDE: - ldr r0, _080CCCF4 @ =gSpecialVar_0x8006 - strh r6, [r0] - movs r0, 0x1 -_080CCCE4: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080CCCF0: .4byte gPlayerParty -_080CCCF4: .4byte gSpecialVar_0x8006 - thumb_func_end sub_80CCB94 - - thumb_func_start sub_80CCCF8 -sub_80CCCF8: @ 80CCCF8 - push {r4,lr} - movs r4, 0 - ldr r0, _080CCD0C @ =gSpecialVar_0x8005 - ldrh r0, [r0] - cmp r0, 0xF - bne _080CCD14 - ldr r0, _080CCD10 @ =0x000002de - bl FlagSet - b _080CCD2C - .align 2, 0 -_080CCD0C: .4byte gSpecialVar_0x8005 -_080CCD10: .4byte 0x000002de -_080CCD14: - cmp r0, 0x10 - bne _080CCD24 - ldr r0, _080CCD20 @ =0x000002df - bl FlagSet - b _080CCD2C - .align 2, 0 -_080CCD20: .4byte 0x000002df -_080CCD24: - movs r0, 0xB8 - lsls r0, 2 - bl FlagSet -_080CCD2C: - ldr r0, _080CCD74 @ =0x000002de - bl FlagGet - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080CCD40 - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 -_080CCD40: - ldr r0, _080CCD78 @ =0x000002df - bl FlagGet - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080CCD54 - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 -_080CCD54: - movs r0, 0xB8 - lsls r0, 2 - bl FlagGet - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080CCD6A - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 -_080CCD6A: - cmp r4, 0x3 - beq _080CCD7C - movs r0, 0 - b _080CCD7E - .align 2, 0 -_080CCD74: .4byte 0x000002de -_080CCD78: .4byte 0x000002df -_080CCD7C: - movs r0, 0x1 -_080CCD7E: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80CCCF8 - - thumb_func_start sub_80CCD84 -sub_80CCD84: @ 80CCD84 - push {lr} - ldr r0, _080CCDB8 @ =0x000002e3 - bl FlagGet - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _080CCDC8 - ldr r0, _080CCDBC @ =gSaveBlock1Ptr - ldr r2, [r0] - ldrh r1, [r2, 0x4] - ldr r0, _080CCDC0 @ =0x00003d03 - cmp r1, r0 - bne _080CCDC8 - ldr r1, [r2] - ldr r0, _080CCDC4 @ =0x00190018 - cmp r1, r0 - bne _080CCDC8 - bl GetPlayerFacingDirection - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bne _080CCDC8 - movs r0, 0x1 - b _080CCDCA - .align 2, 0 -_080CCDB8: .4byte 0x000002e3 -_080CCDBC: .4byte gSaveBlock1Ptr -_080CCDC0: .4byte 0x00003d03 -_080CCDC4: .4byte 0x00190018 -_080CCDC8: - movs r0, 0 -_080CCDCA: - pop {r1} - bx r1 - thumb_func_end sub_80CCD84 - - thumb_func_start sub_80CCDD0 -sub_80CCDD0: @ 80CCDD0 - push {lr} - movs r2, 0xD6 - lsls r2, 2 - movs r0, 0x1F - movs r1, 0x1F - bl MapGridSetMetatileIdAt - bl DrawWholeMapView - movs r0, 0x14 - bl PlaySE - ldr r0, _080CCDF8 @ =0x000002e3 - bl FlagSet - bl ScriptContext2_Disable - pop {r0} - bx r0 - .align 2, 0 -_080CCDF8: .4byte 0x000002e3 - thumb_func_end sub_80CCDD0 - - thumb_func_start sub_80CCDFC -sub_80CCDFC: @ 80CCDFC - push {lr} - ldr r0, _080CCE0C @ =task_deoxys_sound - movs r1, 0x8 - bl CreateTask - pop {r0} - bx r0 - .align 2, 0 -_080CCE0C: .4byte task_deoxys_sound - thumb_func_end sub_80CCDFC - - thumb_func_start task_deoxys_sound -task_deoxys_sound: @ 80CCE10 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r7, r0, 24 - ldr r0, _080CCE30 @ =0x00000848 - bl FlagGet - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080CCE38 - ldr r1, _080CCE34 @ =gSpecialVar_Result - movs r0, 0x3 - b _080CCE9E - .align 2, 0 -_080CCE30: .4byte 0x00000848 -_080CCE34: .4byte gSpecialVar_Result -_080CCE38: - ldr r0, _080CCE80 @ =0x0000403e - mov r8, r0 - bl VarGet - lsls r0, 16 - lsrs r5, r0, 16 - ldr r4, _080CCE84 @ =0x00004026 - adds r0, r4, 0 - bl VarGet - lsls r0, 16 - lsrs r6, r0, 16 - adds r0, r4, 0 - movs r1, 0 - bl VarSet - cmp r5, 0 - beq _080CCE90 - ldr r0, _080CCE88 @ =gUnknown_83F637C - subs r1, r5, 0x1 - adds r1, r0 - ldrb r0, [r1] - cmp r0, r6 - bcs _080CCE90 - movs r0, 0 - bl sub_80CCEE8 - mov r0, r8 - movs r1, 0 - bl VarSet - ldr r1, _080CCE8C @ =gSpecialVar_Result - movs r0, 0 - strh r0, [r1] - b _080CCEA4 - .align 2, 0 -_080CCE80: .4byte 0x0000403e -_080CCE84: .4byte 0x00004026 -_080CCE88: .4byte gUnknown_83F637C -_080CCE8C: .4byte gSpecialVar_Result -_080CCE90: - cmp r5, 0xA - bne _080CCEB4 - ldr r0, _080CCEAC @ =0x00000848 - bl FlagSet - ldr r1, _080CCEB0 @ =gSpecialVar_Result - movs r0, 0x2 -_080CCE9E: - strh r0, [r1] - bl EnableBothScriptContexts -_080CCEA4: - adds r0, r7, 0 - bl DestroyTask - b _080CCED6 - .align 2, 0 -_080CCEAC: .4byte 0x00000848 -_080CCEB0: .4byte gSpecialVar_Result -_080CCEB4: - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - lsls r0, r5, 24 - lsrs r0, 24 - bl sub_80CCEE8 - ldr r0, _080CCEE0 @ =0x0000403e - adds r1, r5, 0 - bl VarSet - ldr r1, _080CCEE4 @ =gSpecialVar_Result - movs r0, 0x1 - strh r0, [r1] - adds r0, r7, 0 - bl DestroyTask -_080CCED6: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080CCEE0: .4byte 0x0000403e -_080CCEE4: .4byte gSpecialVar_Result - thumb_func_end task_deoxys_sound - - thumb_func_start sub_80CCEE8 -sub_80CCEE8: @ 80CCEE8 - push {r4,r5,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 5 - ldr r1, _080CCF24 @ =gUnknown_83F6206 - adds r0, r1 - movs r1, 0xD0 - lsls r1, 1 - movs r2, 0x8 - bl LoadPalette - movs r0, 0xA - bl sub_8083598 - ldr r0, _080CCF28 @ =gSaveBlock1Ptr - ldr r0, [r0] - ldrb r1, [r0, 0x5] - ldrb r2, [r0, 0x4] - movs r0, 0x1 - mov r3, sp - bl TryGetFieldObjectIdByLocalIdAndMap - cmp r4, 0 - bne _080CCF2C - movs r0, 0xBD - bl PlaySE - b _080CCF32 - .align 2, 0 -_080CCF24: .4byte gUnknown_83F6206 -_080CCF28: .4byte gSaveBlock1Ptr -_080CCF2C: - movs r0, 0xFD - bl PlaySE -_080CCF32: - ldr r0, _080CCF64 @ =sub_80CCF98 - movs r1, 0x8 - bl CreateTask - ldr r3, _080CCF68 @ =gFieldEffectArguments - movs r0, 0x1 - str r0, [r3] - movs r0, 0x38 - str r0, [r3, 0x4] - movs r0, 0x2 - str r0, [r3, 0x8] - ldr r0, _080CCF6C @ =gUnknown_83F6366 - lsls r2, r4, 1 - adds r1, r2, r0 - ldrb r1, [r1] - str r1, [r3, 0xC] - adds r0, 0x1 - adds r0, r2, r0 - ldrb r0, [r0] - str r0, [r3, 0x10] - adds r5, r2, 0 - cmp r4, 0 - bne _080CCF70 - movs r0, 0x3C - b _080CCF72 - .align 2, 0 -_080CCF64: .4byte sub_80CCF98 -_080CCF68: .4byte gFieldEffectArguments -_080CCF6C: .4byte gUnknown_83F6366 -_080CCF70: - movs r0, 0x5 -_080CCF72: - str r0, [r3, 0x14] - movs r0, 0x43 - bl FieldEffectStart - ldr r0, _080CCF94 @ =gUnknown_83F6366 - adds r1, r5, r0 - ldrb r1, [r1] - adds r0, 0x1 - adds r0, r5, r0 - ldrb r2, [r0] - movs r0, 0x1 - bl Overworld_SetMapObjTemplateCoords - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080CCF94: .4byte gUnknown_83F6366 - thumb_func_end sub_80CCEE8 - - thumb_func_start sub_80CCF98 -sub_80CCF98: @ 80CCF98 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - movs r0, 0x43 - bl FieldEffectActiveListContains - lsls r0, 24 - cmp r0, 0 - bne _080CCFB4 - bl EnableBothScriptContexts - adds r0, r4, 0 - bl DestroyTask -_080CCFB4: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80CCF98 - - thumb_func_start sub_80CCFBC -sub_80CCFBC: @ 80CCFBC - push {r4,lr} - ldr r4, _080CCFEC @ =0x00004026 - adds r0, r4, 0 - bl VarGet - lsls r0, 16 - lsrs r2, r0, 16 - ldr r0, _080CCFF0 @ =gSaveBlock1Ptr - ldr r0, [r0] - ldrh r1, [r0, 0x4] - ldr r0, _080CCFF4 @ =0x00003802 MAP_BIRTH_ISLAND_EXTERIOR - cmp r1, r0 - bne _080CD000 - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0x63 - bls _080CCFF8 - adds r0, r4, 0 - movs r1, 0 - bl VarSet - b _080CD000 - .align 2, 0 -_080CCFEC: .4byte 0x00004026 -_080CCFF0: .4byte gSaveBlock1Ptr -_080CCFF4: .4byte 0x00003802 -_080CCFF8: - adds r0, r4, 0 - adds r1, r2, 0 - bl VarSet -_080CD000: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80CCFBC - - thumb_func_start sub_80CD008 -sub_80CD008: @ 80CD008 - push {lr} - ldr r0, _080CD02C @ =0x0000403e - bl VarGet - lsls r0, 24 - lsrs r0, 19 - ldr r1, _080CD030 @ =gUnknown_83F6206 - adds r0, r1 - movs r1, 0xD0 - lsls r1, 1 - movs r2, 0x8 - bl LoadPalette - movs r0, 0xA - bl sub_8083598 - pop {r0} - bx r0 - .align 2, 0 -_080CD02C: .4byte 0x0000403e -_080CD030: .4byte gUnknown_83F6206 - thumb_func_end sub_80CD008 - - thumb_func_start sub_80CD034 -sub_80CD034: @ 80CD034 - push {r4,r5,lr} - bl CalculatePlayerPartyCount - lsls r0, 24 - lsrs r5, r0, 24 - movs r4, 0 - cmp r4, r5 - bcs _080CD06A -_080CD044: - movs r0, 0x64 - muls r0, r4 - ldr r1, _080CD05C @ =gPlayerParty - adds r0, r1 - movs r1, 0x4 - bl GetMonData - cmp r0, 0x1 - bne _080CD060 - movs r0, 0x1 - b _080CD06C - .align 2, 0 -_080CD05C: .4byte gPlayerParty -_080CD060: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, r5 - bcc _080CD044 -_080CD06A: - movs r0, 0 -_080CD06C: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80CD034 - - thumb_func_start sub_80CD074 -sub_80CD074: @ 80CD074 - push {lr} - ldr r0, _080CD088 @ =gSaveBlock1Ptr - ldr r0, [r0] - ldrh r1, [r0, 0x4] - ldr r0, _080CD08C @ =0x00000a02 - cmp r1, r0 - beq _080CD090 - movs r0, 0x1 - b _080CD092 - .align 2, 0 -_080CD088: .4byte gSaveBlock1Ptr -_080CD08C: .4byte 0x00000a02 -_080CD090: - movs r0, 0 -_080CD092: - pop {r1} - bx r1 - thumb_func_end sub_80CD074 - - thumb_func_start sub_80CD098 -sub_80CD098: @ 80CD098 - push {lr} - sub sp, 0x4 - ldr r0, _080CD0CC @ =gUnknown_203ADFA - ldrb r0, [r0] - cmp r0, 0x2 - beq _080CD0E8 - ldr r0, _080CD0D0 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - adds r0, 0x1B - lsls r0, 16 - lsrs r1, r0, 16 - ldr r0, _080CD0D4 @ =gSpecialVar_0x8006 - ldrh r3, [r0] - cmp r3, 0 - bne _080CD0E0 - ldr r0, _080CD0D8 @ =gSpecialVar_0x8005 - ldrh r2, [r0] - str r3, [sp] - movs r0, 0 - movs r3, 0 - bl CreateTextCursorSpriteForOakSpeech - ldr r1, _080CD0DC @ =gUnknown_2039A1B - strb r0, [r1] - b _080CD0E8 - .align 2, 0 -_080CD0CC: .4byte gUnknown_203ADFA -_080CD0D0: .4byte gSpecialVar_0x8004 -_080CD0D4: .4byte gSpecialVar_0x8006 -_080CD0D8: .4byte gSpecialVar_0x8005 -_080CD0DC: .4byte gUnknown_2039A1B -_080CD0E0: - ldr r0, _080CD0F0 @ =gUnknown_2039A1B - ldrb r0, [r0] - bl sub_8006398 -_080CD0E8: - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_080CD0F0: .4byte gUnknown_2039A1B - thumb_func_end sub_80CD098 - - thumb_func_start sub_80CD0F4 -sub_80CD0F4: @ 80CD0F4 - push {r4-r7,lr} - bl CalculatePlayerPartyCount - lsls r0, 24 - lsrs r7, r0, 24 - movs r6, 0 - cmp r6, r7 - bcs _080CD14A -_080CD104: - movs r0, 0x64 - adds r1, r6, 0 - muls r1, r0 - ldr r0, _080CD138 @ =gPlayerParty - adds r5, r1, r0 - adds r0, r5, 0 - movs r1, 0x41 - movs r2, 0 - bl GetMonData - ldr r1, _080CD13C @ =gSpecialVar_0x8004 - ldrh r1, [r1] - cmp r0, r1 - bne _080CD140 - bl GetPlayerTrainerId - adds r4, r0, 0 - adds r0, r5, 0 - movs r1, 0x1 - movs r2, 0 - bl GetMonData - cmp r4, r0 - bne _080CD140 - movs r0, 0x1 - b _080CD14C - .align 2, 0 -_080CD138: .4byte gPlayerParty -_080CD13C: .4byte gSpecialVar_0x8004 -_080CD140: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, r7 - bcc _080CD104 -_080CD14A: - movs r0, 0 -_080CD14C: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80CD0F4 - - @ Determines which of Lorelei's doll collection to show - @ based on how many times you've entered the Hall of Fame. - thumb_func_start Special_ComputeLoreleiDollCollection -Special_ComputeLoreleiDollCollection: @ 80CD154 - push {r4,lr} - movs r0, 0xA - bl GetGameStat - adds r4, r0, 0 - cmp r4, 0x18 - bls _080CD1AE - movs r0, 0xA5 - bl FlagClear - cmp r4, 0x31 - bls _080CD172 - movs r0, 0xA6 - bl FlagClear -_080CD172: - cmp r4, 0x4A - bls _080CD17C - movs r0, 0xA7 - bl FlagClear -_080CD17C: - cmp r4, 0x63 - bls _080CD186 - movs r0, 0xA8 - bl FlagClear -_080CD186: - cmp r4, 0x7C - bls _080CD190 - movs r0, 0xA9 - bl FlagClear -_080CD190: - cmp r4, 0x95 - bls _080CD19A - movs r0, 0xAA - bl FlagClear -_080CD19A: - cmp r4, 0xAE - bls _080CD1A4 - movs r0, 0xAB - bl FlagClear -_080CD1A4: - cmp r4, 0xC7 - bls _080CD1AE - movs r0, 0xAC - bl FlagClear -_080CD1AE: - pop {r4} - pop {r0} - bx r0 - thumb_func_end Special_ComputeLoreleiDollCollection - - thumb_func_start sub_80CD1B4 -sub_80CD1B4: @ 80CD1B4 - push {lr} - ldr r0, _080CD1C8 @ =sub_80CD1CC - movs r1, 0x8 - bl CreateTask - movs r0, 0x96 - bl PlaySE - pop {r0} - bx r0 - .align 2, 0 -_080CD1C8: .4byte sub_80CD1CC - thumb_func_end sub_80CD1B4 - - thumb_func_start sub_80CD1CC -sub_80CD1CC: @ 80CD1CC - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _080CD21C @ =gTasks+0x8 - adds r4, r0, r1 - ldrh r0, [r4, 0x2] - adds r0, 0x1 - strh r0, [r4, 0x2] - movs r0, 0x2 - ldrsh r1, [r4, r0] - ldr r0, _080CD220 @ =gSpecialVar_0x8005 - ldrh r0, [r0] - cmp r1, r0 - bne _080CD200 - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - movs r0, 0 - strh r0, [r4, 0x2] - movs r0, 0x96 - bl PlaySE -_080CD200: - movs r0, 0 - ldrsh r1, [r4, r0] - ldr r0, _080CD224 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - subs r0, 0x1 - cmp r1, r0 - bne _080CD214 - adds r0, r5, 0 - bl DestroyTask -_080CD214: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080CD21C: .4byte gTasks+0x8 -_080CD220: .4byte gSpecialVar_0x8005 -_080CD224: .4byte gSpecialVar_0x8004 - thumb_func_end sub_80CD1CC - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/fldeff_cut.s b/asm/fldeff_cut.s index 3452841c4..ec892e0bb 100644 --- a/asm/fldeff_cut.s +++ b/asm/fldeff_cut.s @@ -33,7 +33,7 @@ sub_8097898: @ 8097898 ldr r4, _080978CC @ =gUnknown_2039874 movs r0, 0 strb r0, [r4] - bl sub_80CCD84 + bl CutMoveRuinValleyCheck lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -232,7 +232,7 @@ sub_8097A20: @ 8097A20 ldrb r0, [r0] cmp r0, 0x1 bne _08097A3C - bl sub_80CCDD0 + bl CutMoveOpenDottedHoleDoor b _08097A42 .align 2, 0 _08097A38: .4byte gUnknown_2039874 diff --git a/data/event_scripts.s b/data/event_scripts.s index f4276cc9c..eedbea313 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -15,6 +15,7 @@ #include "constants/map_objects.h" #include "constants/fame_checker.h" #include "constants/seagallop.h" +#include "constants/game_stat.h" .include "asm/macros.inc" .include "asm/macros/event.inc" .set FALSE, 0 @@ -1599,7 +1600,7 @@ EventScript_1A6578:: @ 81A6578 end EventScript_1A65B8:: @ 81A65B8 - incrementgamestat 15 + incrementgamestat GAME_STAT_USED_POKECENTER message Text_1A54E1 waitmessage call EventScript_1A65CE @@ -1618,7 +1619,7 @@ EventScript_1A65CE:: @ 81A65CE return EventScript_1A65EC:: @ 81A65EC - specialvar VAR_RESULT, sub_80CD074 + specialvar VAR_RESULT, Special_PlayerIsNotInTrainerTowerLobby compare_var_to_value VAR_RESULT, 0 goto_if eq, EventScript_1A661D specialvar VAR_RESULT, sp182_move_string @@ -1797,7 +1798,7 @@ gStdScript_1:: @ 81A67B3 EventScript_1A67EE:: @ 81A67EE removeobject VAR_LAST_TALKED additem VAR_0x8004, VAR_0x8005 - specialvar VAR_RESULT, sub_80CC8CC + specialvar VAR_RESULT, Special_ItemIsTM_GetMoveName copyvar VAR_0x8008, VAR_RESULT compare_var_to_value VAR_0x8008, 1 call_if eq, EventScript_1A6821 @@ -2500,7 +2501,7 @@ Movement_1A75D3:: @ 81A75D3 step_end EventScript_1A75D5:: @ 81A75D5 - special sub_80CC974 + special Special_PokemonLeagueLightingEffect return Movement_1A75D9:: @ 81A75D9 @@ -2704,7 +2705,7 @@ gUnknown_81A7702:: @ 81A7702 call EventScript_1A6AC0 lock faceplayer - specialvar VAR_0x8008, sub_80CC4D4 + specialvar VAR_0x8008, Special_GetMartClerkObjectId textcolor 0 compare_var_to_value VAR_0x8004, 0 goto_if eq, EventScript_1A774D @@ -4392,12 +4393,12 @@ EventScript_1A925E:: @ 81A925E doweather return -EventScript_1A926C:: @ 81A926C - special sub_80CD098 +EventScript_BrailleCursorWaitButton:: @ 81A926C + special Special_BrailleCursorToggle waitbuttonpress playse SE_SELECT setvar VAR_0x8006, 1 - special sub_80CD098 + special Special_BrailleCursorToggle return EventScript_1A927C:: @ 81A927C @@ -9182,7 +9183,7 @@ EventScript_1BBA04:: @ 81BBA04 faceplayer checkflag FLAG_SYS_POKEDEX_GET goto_if FALSE, EventScript_1BB877 - specialvar VAR_RESULT, sub_80CD034 + specialvar VAR_RESULT, Special_BadEggInParty compare_var_to_value VAR_RESULT, 1 goto_if eq, EventScript_1BB867 copyvar VAR_0x8007, VAR_LAST_TALKED @@ -9304,7 +9305,7 @@ EventScript_1BBB9C:: @ 81BBB9C faceplayer checkflag FLAG_SYS_POKEDEX_GET goto_if FALSE, EventScript_1BB877 - specialvar VAR_RESULT, sub_80CD034 + specialvar VAR_RESULT, Special_BadEggInParty compare_var_to_value VAR_RESULT, 1 goto_if eq, EventScript_1BB867 specialvar VAR_RESULT, IsWirelessAdapterConnected @@ -11504,7 +11505,7 @@ EventScript_1BF3DD:: @ 81BF3DD msgbox Text_19DE24 waitmoncry special PutMonInRoute5Daycare - incrementgamestat 47 + incrementgamestat GAME_STAT_USED_DAYCARE goto EventScript_1BF541 end @@ -13879,13 +13880,13 @@ TwoIsland_CapeBrink_House_EventScript_1C4DEC:: @ 81C4DEC special sub_8112364 lock faceplayer - checkflag FLAG_LEARNED_MOVE_AT_CAPE_BRINK + checkflag FLAG_LEARNED_ALL_MOVES_AT_CAPE_BRINK goto_if TRUE, EventScript_1C4EA1 checkflag FLAG_TEMP_2 goto_if TRUE, EventScript_1C4E97 getfirstpartymonname 0 msgbox Text_1A46C6 - specialvar VAR_RESULT, sub_80CCB94 + specialvar VAR_RESULT, Special_CapeBrinkGetMoveToTeachLeadPokemon compare_var_to_value VAR_RESULT, 0 goto_if eq, EventScript_1C4F26 copyvar VAR_0x8009, VAR_0x8005 @@ -13925,7 +13926,7 @@ EventScript_1C4EA1:: @ 81C4EA1 EventScript_1C4EAB:: @ 81C4EAB copyvar VAR_0x8005, VAR_0x8009 - specialvar VAR_RESULT, sub_80CCCF8 + specialvar VAR_RESULT, Special_HasLearnedAllMovesFromCapeBrinkTutor compare_var_to_value VAR_RESULT, 1 goto_if eq, EventScript_1C4ECD msgbox Text_1A4865 @@ -13935,7 +13936,7 @@ EventScript_1C4EAB:: @ 81C4EAB EventScript_1C4ECD:: @ 81C4ECD msgbox Text_1A48F3 - setflag FLAG_LEARNED_MOVE_AT_CAPE_BRINK + setflag FLAG_LEARNED_ALL_MOVES_AT_CAPE_BRINK release end diff --git a/data/field_specials.s b/data/field_specials.s deleted file mode 100644 index 6c38b46a6..000000000 --- a/data/field_specials.s +++ /dev/null @@ -1,105 +0,0 @@ -#include "constants/species.h" -#include "constants/items.h" -#include "constants/maps.h" - .include "asm/macros.inc" - .include "constants/constants.inc" - .section .rodata - - .align 2 -gUnknown_83F5F50:: @ 83F5F50 - .incbin "data/field_specials/unk_83F5F50.gbapal" - .incbin "data/field_specials/unk_83F5F70.gbapal" - .incbin "data/field_specials/unk_83F5F90.gbapal" - .incbin "data/field_specials/unk_83F5FB0.gbapal" - .incbin "data/field_specials/unk_83F5FD0.gbapal" - .incbin "data/field_specials/unk_83F5FF0.gbapal" - .incbin "data/field_specials/unk_83F6010.gbapal" - .incbin "data/field_specials/unk_83F6030.gbapal" - .incbin "data/field_specials/unk_83F6050.gbapal" - .incbin "data/field_specials/unk_83F6070.gbapal" - .incbin "data/field_specials/unk_83F6090.gbapal" - -gUnknown_83F60B0:: @ 83F60B0 - .incbin "data/field_specials/unk_83F60B0.gbapal" - -gUnknown_83F60D0:: @ 83F60D0 - .incbin "data/field_specials/unk_83F60D0.gbapal" - .incbin "data/field_specials/unk_83F60F0.gbapal" - .incbin "data/field_specials/unk_83F6110.gbapal" - .incbin "data/field_specials/unk_83F6130.gbapal" - .incbin "data/field_specials/unk_83F6150.gbapal" - .incbin "data/field_specials/unk_83F6170.gbapal" - .incbin "data/field_specials/unk_83F6190.gbapal" - .incbin "data/field_specials/unk_83F61B0.gbapal" - -gUnknown_83F61D0:: @ 83F61D0 - .incbin "data/field_specials/unk_83F61D0.gbapal" - -gUnknown_83F61F0:: @ 83F61F0 - .byte 40 - .byte 12 - .byte 12 - .byte 12 - .byte 12 - .byte 12 - .byte 12 - .byte 12 - .byte 12 - .byte 12 - .byte 12 - -gUnknown_83F61FB:: @ 83F61FB - .byte 20 - .byte 8 - .byte 8 - .byte 8 - .byte 8 - .byte 8 - .byte 8 - .byte 8 - -gUnknown_83F6203:: @ 83F6203 - .byte 3 - .byte 6 - .byte 9 - - .align 1 -gUnknown_83F6206:: @ 83F6206 - .incbin "data/field_specials/unk_83F6206.gbapal" - .incbin "data/field_specials/unk_83F6226.gbapal" - .incbin "data/field_specials/unk_83F6246.gbapal" - .incbin "data/field_specials/unk_83F6266.gbapal" - .incbin "data/field_specials/unk_83F6286.gbapal" - .incbin "data/field_specials/unk_83F62A6.gbapal" - .incbin "data/field_specials/unk_83F62C6.gbapal" - .incbin "data/field_specials/unk_83F62E6.gbapal" - .incbin "data/field_specials/unk_83F6306.gbapal" - .incbin "data/field_specials/unk_83F6326.gbapal" - .incbin "data/field_specials/unk_83F6346.gbapal" - -gUnknown_83F6366:: @ 83F6366 - .byte 0x0f, 0x0c - .byte 0x0b, 0x0e - .byte 0x0f, 0x08 - .byte 0x13, 0x0e - .byte 0x0c, 0x0b - .byte 0x12, 0x0b - .byte 0x0f, 0x0e - .byte 0x0b, 0x0e - .byte 0x13, 0x0e - .byte 0x0f, 0x0f - .byte 0x0f, 0x0a - -gUnknown_83F637C:: @ 83F637C - .byte 0x04 - .byte 0x08 - .byte 0x08 - .byte 0x08 - .byte 0x04 - .byte 0x04 - .byte 0x04 - .byte 0x06 - .byte 0x03 - .byte 0x03 - - .align 2 diff --git a/data/maps/BirthIsland_Exterior/scripts.inc b/data/maps/BirthIsland_Exterior/scripts.inc index f23c73615..05ef15804 100644 --- a/data/maps/BirthIsland_Exterior/scripts.inc +++ b/data/maps/BirthIsland_Exterior/scripts.inc @@ -5,7 +5,7 @@ BirthIsland_Exterior_MapScripts:: @ 8165203 .byte 0 BirthIsland_Exterior_MapScript3_165213:: @ 8165213 - special sub_80CD008 + special Special_SetDeoxysTriangleObjectPal end BirthIsland_Exterior_MapScript1_165217:: @ 8165217 @@ -50,7 +50,7 @@ BirthIsland_Exterior_EventScript_165271:: @ 8165271 compare_var_to_value VAR_RESULT, 2 goto_if eq, EventScript_1A7AE0 special sub_8112364 - special sub_80CCDFC + special Special_DeoxysSound waitstate switch VAR_RESULT case 0, EventScript_1652BA diff --git a/data/maps/FiveIsland_WaterLabyrinth/scripts.inc b/data/maps/FiveIsland_WaterLabyrinth/scripts.inc index 437df0fe8..a334ab2df 100644 --- a/data/maps/FiveIsland_WaterLabyrinth/scripts.inc +++ b/data/maps/FiveIsland_WaterLabyrinth/scripts.inc @@ -49,12 +49,12 @@ EventScript_1688BA:: @ 81688BA EventScript_1688E3:: @ 81688E3 getspeciesname 1, SPECIES_TOGEPI setvar VAR_0x8004, SPECIES_TOGEPI - specialvar VAR_RESULT, sub_80CD0F4 + specialvar VAR_RESULT, Special_PlayerPartyContainsSpeciesWithPlayerID compare_var_to_value VAR_RESULT, 1 goto_if eq, EventScript_168895 getspeciesname 1, SPECIES_TOGETIC setvar VAR_0x8004, SPECIES_TOGETIC - specialvar VAR_RESULT, sub_80CD0F4 + specialvar VAR_RESULT, Special_PlayerPartyContainsSpeciesWithPlayerID compare_var_to_value VAR_RESULT, 1 goto_if eq, EventScript_168895 msgbox gUnknown_818A9C0 diff --git a/data/maps/FourIsland_PokemonDayCare/scripts.inc b/data/maps/FourIsland_PokemonDayCare/scripts.inc index 7ca07b4ba..c91cc86e5 100644 --- a/data/maps/FourIsland_PokemonDayCare/scripts.inc +++ b/data/maps/FourIsland_PokemonDayCare/scripts.inc @@ -40,7 +40,7 @@ EventScript_171993:: @ 8171993 msgbox gUnknown_81BF860 waitmoncry special StoreSelectedPokemonInDaycare - incrementgamestat 47 + incrementgamestat GAME_STAT_USED_DAYCARE specialvar VAR_RESULT, GetDaycareState compare_var_to_value VAR_RESULT, 2 goto_if eq, EventScript_171A01 diff --git a/data/maps/MtEmber_RubyPath_B5F/scripts.inc b/data/maps/MtEmber_RubyPath_B5F/scripts.inc index c3d8b7320..53aec5282 100644 --- a/data/maps/MtEmber_RubyPath_B5F/scripts.inc +++ b/data/maps/MtEmber_RubyPath_B5F/scripts.inc @@ -7,31 +7,31 @@ MtEmber_RubyPath_B5F_EventScript_163BAB:: @ 8163BAB setvar VAR_0x8006, 0 braillemessage gUnknown_81A92C5 getbraillestringwidth gUnknown_81A92C5 - call EventScript_1A926C + call EventScript_BrailleCursorWaitButton setvar VAR_0x8006, 0 braillemessage gUnknown_81A92D0 getbraillestringwidth gUnknown_81A92D0 - call EventScript_1A926C + call EventScript_BrailleCursorWaitButton setvar VAR_0x8006, 0 braillemessage gUnknown_81A92DC getbraillestringwidth gUnknown_81A92DC - call EventScript_1A926C + call EventScript_BrailleCursorWaitButton setvar VAR_0x8006, 0 braillemessage gUnknown_81A92E6 getbraillestringwidth gUnknown_81A92E6 - call EventScript_1A926C + call EventScript_BrailleCursorWaitButton setvar VAR_0x8006, 0 braillemessage gUnknown_81A92F2 getbraillestringwidth gUnknown_81A92F2 - call EventScript_1A926C + call EventScript_BrailleCursorWaitButton setvar VAR_0x8006, 0 braillemessage gUnknown_81A92FE getbraillestringwidth gUnknown_81A92FE - call EventScript_1A926C + call EventScript_BrailleCursorWaitButton setvar VAR_0x8006, 0 braillemessage gUnknown_81A930A getbraillestringwidth gUnknown_81A930A - call EventScript_1A926C + call EventScript_BrailleCursorWaitButton braillemessage gUnknown_81A9316 waitbuttonpress releaseall diff --git a/data/maps/NavelRock_Summit/scripts.inc b/data/maps/NavelRock_Summit/scripts.inc index f73aaf1ec..59499f1cf 100644 --- a/data/maps/NavelRock_Summit/scripts.inc +++ b/data/maps/NavelRock_Summit/scripts.inc @@ -45,7 +45,7 @@ NavelRock_Summit_EventScript_164FFB:: @ 8164FFB special SpawnCameraObject setvar VAR_0x8004, 3 setvar VAR_0x8005, 35 - special sub_80CD1B4 + special Special_LoopWingFlapSound applymovement 1, Movement_1650E0 applymovement 127, Movement_1650CD waitmovement 0 @@ -59,7 +59,7 @@ NavelRock_Summit_EventScript_164FFB:: @ 8164FFB delay 60 setvar VAR_0x8004, 3 setvar VAR_0x8005, 35 - special sub_80CD1B4 + special Special_LoopWingFlapSound applymovement 127, Movement_1650D1 applymovement 1, Movement_1650D7 waitmovement 0 diff --git a/data/maps/SixIsland_DottedHole_SapphireRoom/scripts.inc b/data/maps/SixIsland_DottedHole_SapphireRoom/scripts.inc index 5d6fcfe53..64ef24b72 100644 --- a/data/maps/SixIsland_DottedHole_SapphireRoom/scripts.inc +++ b/data/maps/SixIsland_DottedHole_SapphireRoom/scripts.inc @@ -241,63 +241,63 @@ SixIsland_DottedHole_SapphireRoom_EventScript_16441F:: @ 816441F setvar VAR_0x8006, 0 braillemessage gUnknown_81A9321 getbraillestringwidth gUnknown_81A9321 - call EventScript_1A926C + call EventScript_BrailleCursorWaitButton setvar VAR_0x8006, 0 braillemessage gUnknown_81A932D getbraillestringwidth gUnknown_81A932D - call EventScript_1A926C + call EventScript_BrailleCursorWaitButton setvar VAR_0x8006, 0 braillemessage gUnknown_81A9338 getbraillestringwidth gUnknown_81A9338 - call EventScript_1A926C + call EventScript_BrailleCursorWaitButton setvar VAR_0x8006, 0 braillemessage gUnknown_81A933F getbraillestringwidth gUnknown_81A933F - call EventScript_1A926C + call EventScript_BrailleCursorWaitButton setvar VAR_0x8006, 0 braillemessage gUnknown_81A934A getbraillestringwidth gUnknown_81A934A - call EventScript_1A926C + call EventScript_BrailleCursorWaitButton setvar VAR_0x8006, 0 braillemessage gUnknown_81A9356 getbraillestringwidth gUnknown_81A9356 - call EventScript_1A926C + call EventScript_BrailleCursorWaitButton setvar VAR_0x8006, 0 braillemessage gUnknown_81A9362 getbraillestringwidth gUnknown_81A9362 - call EventScript_1A926C + call EventScript_BrailleCursorWaitButton setvar VAR_0x8006, 0 braillemessage gUnknown_81A9368 getbraillestringwidth gUnknown_81A9368 - call EventScript_1A926C + call EventScript_BrailleCursorWaitButton setvar VAR_0x8006, 0 braillemessage gUnknown_81A9374 getbraillestringwidth gUnknown_81A9374 - call EventScript_1A926C + call EventScript_BrailleCursorWaitButton setvar VAR_0x8006, 0 braillemessage gUnknown_81A937C getbraillestringwidth gUnknown_81A937C - call EventScript_1A926C + call EventScript_BrailleCursorWaitButton setvar VAR_0x8006, 0 braillemessage gUnknown_81A9387 getbraillestringwidth gUnknown_81A9387 - call EventScript_1A926C + call EventScript_BrailleCursorWaitButton setvar VAR_0x8006, 0 braillemessage gUnknown_81A9393 getbraillestringwidth gUnknown_81A9393 - call EventScript_1A926C + call EventScript_BrailleCursorWaitButton setvar VAR_0x8006, 0 braillemessage gUnknown_81A939F getbraillestringwidth gUnknown_81A939F - call EventScript_1A926C + call EventScript_BrailleCursorWaitButton setvar VAR_0x8006, 0 braillemessage gUnknown_81A93AB getbraillestringwidth gUnknown_81A93AB - call EventScript_1A926C + call EventScript_BrailleCursorWaitButton setvar VAR_0x8006, 0 braillemessage gUnknown_81A93B4 getbraillestringwidth gUnknown_81A93B4 - call EventScript_1A926C + call EventScript_BrailleCursorWaitButton braillemessage gUnknown_81A93C0 waitbuttonpress releaseall diff --git a/data/specials.inc b/data/specials.inc index 3efb437bf..8bef2748a 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -398,7 +398,7 @@ gSpecials:: @ 815FD60 def_special sub_811999C def_special sp182_move_string def_special sub_811390C - def_special sub_80CC4D4 + def_special Special_GetMartClerkObjectId def_special Special_BattleCardAction def_special sub_8110AB4 def_special sub_8112364 @@ -415,7 +415,7 @@ gSpecials:: @ 815FD60 def_special IsNationalPokedexEnabled def_special sub_815D9E8 def_special sub_814B504 - def_special sub_80CC8CC + def_special Special_ItemIsTM_GetMoveName def_special Special_DaisyMassageServices def_special HelpSystem_Disable def_special HelpSystem_Enable @@ -426,31 +426,31 @@ gSpecials:: @ 815FD60 def_special sub_815EEB0 def_special sub_815EF5C def_special sub_815F070 - def_special sub_80CC974 + def_special Special_PokemonLeagueLightingEffect def_special sub_814EA7C - def_special sub_80CCB94 - def_special sub_80CCCF8 + def_special Special_CapeBrinkGetMoveToTeachLeadPokemon + def_special Special_HasLearnedAllMovesFromCapeBrinkTutor def_special Special_Credits def_special sub_8153810 def_special sub_809D764 def_special sub_809D8C0 def_special sub_8147500 def_special GetPlayerFacingDirection - def_special sub_80CCDFC - def_special sub_80CD008 + def_special Special_DeoxysSound + def_special Special_SetDeoxysTriangleObjectPal def_special sub_8147594 - def_special sub_80CD034 + def_special Special_BadEggInParty def_special sub_815D834 def_special HasAllMons - def_special sub_80CD074 - def_special sub_80CD098 + def_special Special_PlayerIsNotInTrainerTowerLobby + def_special Special_BrailleCursorToggle def_special sub_811B15C - def_special sub_80CD0F4 + def_special Special_PlayerPartyContainsSpeciesWithPlayerID def_special sub_809C4A8 def_special sub_81537C0 def_special sub_809C5FC def_special Special_InitElevatorFloorSelectMenuPos def_special Special_ComputeLoreleiDollCollection - def_special sub_80CD1B4 + def_special Special_LoopWingFlapSound def_special CreateObedientEnemyMon gSpecialsEnd:: diff --git a/include/constants/field_effects.h b/include/constants/field_effects.h index 62ab5af0c..8a5e11fcf 100644 --- a/include/constants/field_effects.h +++ b/include/constants/field_effects.h @@ -67,6 +67,7 @@ #define FLDEFF_USE_TELEPORT 63 #define FLDEFF_UNK_40 64 #define FLDEFF_UNK_41 65 // TODO: related to vs_seeker +#define FLDEFF_UNK_43 67 // TODO: related to deoxys #define FLDEFF_UNK_45 69 // TODO: related to fame checker photos #endif // GUARD_CONSTANTS_FIELD_EFFECTS_H diff --git a/include/constants/flags.h b/include/constants/flags.h index 50619c941..226032b2d 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -748,10 +748,10 @@ #define FLAG_NO_ROOM_FOR_TOGEPI_EGG 0x2DB #define FLAG_RECOVERED_SAPPHIRE 0x2DC #define FLAG_GOT_RUBY 0x2DD -#define FLAG_0x2DE 0x2DE -#define FLAG_0x2DF 0x2DF -#define FLAG_0x2E0 0x2E0 -#define FLAG_LEARNED_MOVE_AT_CAPE_BRINK 0x2E1 +#define FLAG_TUTOR_FRENZY_PLANT 0x2DE +#define FLAG_TUTOR_BLAST_BURN 0x2DF +#define FLAG_TUTOR_HYDRO_CANNON 0x2E0 +#define FLAG_LEARNED_ALL_MOVES_AT_CAPE_BRINK 0x2E1 #define FLAG_GOT_NUGGET_FROM_DUNSPARCE_TUNNEL 0x2E2 #define FLAG_USED_CUT_ON_RUIN_VALLEY_BRAILLE 0x2E3 #define FLAG_FOUGHT_DEOXYS 0x2E4 diff --git a/include/field_effect.h b/include/field_effect.h index fa66929ea..70398313b 100644 --- a/include/field_effect.h +++ b/include/field_effect.h @@ -20,5 +20,6 @@ void sub_8084454(void); void sub_8084784(u8 a0, u8 a1); void sub_8084F2C(u8 a0); void sub_80853CC(u8 a0); +void sub_8083598(u8 a0); #endif //GUARD_FIELD_EFFECTS_H diff --git a/include/field_specials.h b/include/field_specials.h index e82439fe7..c435bdaee 100644 --- a/include/field_specials.h +++ b/include/field_specials.h @@ -15,7 +15,7 @@ u8 GetLeadMonIndex(void); s32 CountDigits(s32 number); void TV_PrintIntToStringVar(u8, int); u16 ScrSpecial_GetStarter(void); -void sub_80CCB68(void); +void StopPokemonLeagueLightingEffectTask(void); void nullsub_60(void); void nullsub_61(void); u8 ContextNpcGetTextColor(void); diff --git a/include/fieldmap.h b/include/fieldmap.h index dde05b7ed..c3709c616 100644 --- a/include/fieldmap.h +++ b/include/fieldmap.h @@ -25,6 +25,7 @@ bool32 CanCameraMoveInDirection(s32); u32 GetBehaviorByMetatileIdAndMapData(struct MapData *mapData, u16 metatile, u8 attr); const struct MapHeader * mapconnection_get_mapheader(struct MapConnection * connection); struct MapConnection * GetMapConnectionAtPos(s16 x, s16 y); +void sub_8059948(u8 a0, u8 a1); void save_serialize_map(void); diff --git a/ld_script.txt b/ld_script.txt index 4cd208c7c..6f0b839cb 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -188,7 +188,6 @@ SECTIONS { src/prof_pc.o(.text); src/hof_pc.o(.text); src/field_specials.o(.text); - asm/field_specials.o(.text); src/battle_records.o(.text); asm/evolution_scene.o(.text); src/coins.o(.text); @@ -447,7 +446,6 @@ SECTIONS { src/battle_ai_script_commands.o(.rodata); data/data_83F5738.o(.rodata); src/field_specials.o(.rodata); - data/field_specials.o(.rodata); src/battle_records.o(.rodata); data/data_83F5738.o(.rodata.83F6C90); src/battle_transition.o(.rodata); diff --git a/src/field_specials.c b/src/field_specials.c index b0efd1c35..4db5fc64d 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -1,5 +1,6 @@ #include "global.h" #include "malloc.h" +#include "palette.h" #include "quest_log.h" #include "list_menu.h" #include "diploma.h" @@ -17,6 +18,7 @@ #include "task.h" #include "battle_tower.h" #include "field_camera.h" +#include "field_effect.h" #include "field_map_obj.h" #include "menu_indicators.h" #include "random.h" @@ -33,6 +35,7 @@ #include "menu.h" #include "mevent.h" #include "naming_screen.h" +#include "party_menu.h" #include "dynamic_placeholder_text_util.h" #include "new_menu_helpers.h" #include "constants/songs.h" @@ -41,13 +44,14 @@ #include "constants/map_objects.h" #include "constants/maps.h" #include "constants/region_map.h" +#include "constants/moves.h" EWRAM_DATA u8 sElevatorCurrentFloorWindowId = 0; EWRAM_DATA u16 sElevatorScroll = 0; EWRAM_DATA u16 sElevatorCursorPos = 0; EWRAM_DATA struct ListMenuItem * gUnknown_2039A14 = NULL; EWRAM_DATA u16 gUnknown_2039A18 = 0; -EWRAM_DATA u8 gUnknown_2039A1A = 0; +EWRAM_DATA u8 sUnknownBoxId = 0; EWRAM_DATA u8 gUnknown_2039A1B = 0; struct ListMenuTemplate gUnknown_3005360; @@ -74,8 +78,14 @@ static void Task_ListMenuRemoveScrollIndicatorArrowPair(u8 taskId); static u16 GetStarterPokemon(u16 starterIdx); static void ChangeBoxPokemonNickname_CB(void); static void ChangePokemonNickname_CB(void); - -static u8 *const gUnknown_83F5AF8[] = { +static void Task_RunPokemonLeagueLightingEffect(u8 taskId); +static void Task_CancelPokemonLeagueLightingEffect(u8 taskId); +static void task_deoxys_sound(u8 taskId); +static void MoveDeoxysObject(u8 num); +static void Task_WaitDeoxysFieldEffect(u8 taskId); +static void Task_WingFlapSound(u8 taskId); + +static u8 *const sStringVarPtrs[] = { gStringVar1, gStringVar2, gStringVar3 @@ -319,7 +329,7 @@ void Special_BufferEReaderTrainerName5(void) CopyEReaderTrainerName5(gStringVar1); } -static const u8 gUnknown_83F5B04[] = { +static const u8 sUnused_83F5B04[] = { 13, 14, 15, @@ -736,7 +746,7 @@ static const u8 *const sFloorNamePointers[] = { gUnknown_841806D }; -static const u8 gUnknown_83F5B84[] = { +static const u8 sUnused_83F5B84[] = { 26, 26, 26, @@ -1214,7 +1224,7 @@ void Special_ListMenu(void) } } -static const u8 *const gUnknown_83F5BCC[][12] = { +static const u8 *const sListMenuLabels[][12] = { { gUnknown_8417FD9, gUnknown_8417FE6, @@ -1293,7 +1303,7 @@ static void Task_CreateScriptListMenu(u8 taskId) mwidth = 0; for (i = 0; i < task->data[1]; i++) { - gUnknown_2039A14[i].label = gUnknown_83F5BCC[gSpecialVar_0x8004][i]; + gUnknown_2039A14[i].label = sListMenuLabels[gSpecialVar_0x8004][i]; gUnknown_2039A14[i].index = i; width = GetStringWidth(2, gUnknown_2039A14[i].label, 0); if (width > mwidth) @@ -1530,7 +1540,7 @@ bool8 Special_HasLeadMonBeenRenamed(void) void TV_PrintIntToStringVar(u8 varidx, s32 number) { s32 n = CountDigits(number); - ConvertIntToDecimalStringN(gUnknown_83F5AF8[varidx], number, STR_CONV_MODE_LEFT_ALIGN, n); + ConvertIntToDecimalStringN(sStringVarPtrs[varidx], number, STR_CONV_MODE_LEFT_ALIGN, n); } s32 CountDigits(s32 number) @@ -1714,7 +1724,7 @@ bool8 Special_PlayerPartyContainsSpecies(void) return FALSE; } -static const u8 gUnknown_83F5D32[][3] = { +static const u8 sMartMaps[][3] = { {MAP_GROUP(VIRIDIAN_CITY_MART), MAP_NUM(VIRIDIAN_CITY_MART), 1}, {MAP_GROUP(PEWTER_CITY_MART), MAP_NUM(PEWTER_CITY_MART), 3}, {MAP_GROUP(CERULEAN_CITY_MART), MAP_NUM(CERULEAN_CITY_MART), 1}, @@ -1729,13 +1739,13 @@ static const u8 gUnknown_83F5D32[][3] = { {MAP_GROUP(SIX_ISLAND_MART), MAP_NUM(SIX_ISLAND_MART), 1} }; -u8 sub_80CC4D4(void) +u8 Special_GetMartClerkObjectId(void) { u8 i; - for (i = 0; i < NELEMS(gUnknown_83F5D32); i++) + for (i = 0; i < NELEMS(sMartMaps); i++) { - if (gSaveBlock1Ptr->location.mapGroup == gUnknown_83F5D32[i][0] && gSaveBlock1Ptr->location.mapNum == gUnknown_83F5D32[i][1]) - return gUnknown_83F5D32[i][2]; + if (gSaveBlock1Ptr->location.mapGroup == sMartMaps[i][0] && gSaveBlock1Ptr->location.mapNum == sMartMaps[i][1]) + return sMartMaps[i][2]; } return 1; } @@ -1750,7 +1760,7 @@ static const struct { u16 num; u16 grp2; u16 num2; -} gUnknown_83F5D58[51] = { +} sInsideOutsidePairs[51] = { {MAP_GROUP(PALLET_TOWN_PLAYERS_HOUSE_1F), MAP_NUM(PALLET_TOWN_PLAYERS_HOUSE_1F), MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN)}, {MAP_GROUP(PALLET_TOWN_PROFESSOR_OAKS_LAB), MAP_NUM(PALLET_TOWN_PROFESSOR_OAKS_LAB), MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN)}, {MAP_GROUP(VIRIDIAN_CITY_GYM), MAP_NUM(VIRIDIAN_CITY_GYM), MAP_GROUP(VIRIDIAN_CITY), MAP_NUM(VIRIDIAN_CITY)}, @@ -1807,9 +1817,9 @@ static const struct { void sub_80CC534(void) { u8 i; - for (i = 0; i < NELEMS(gUnknown_83F5D58); i++) + for (i = 0; i < NELEMS(sInsideOutsidePairs); i++) { - if (gSaveBlock1Ptr->location.mapGroup == gUnknown_83F5D58[i].grp && gSaveBlock1Ptr->location.mapNum == gUnknown_83F5D58[i].num) + if (gSaveBlock1Ptr->location.mapGroup == sInsideOutsidePairs[i].grp && gSaveBlock1Ptr->location.mapNum == sInsideOutsidePairs[i].num) { if (VarGet(VAR_0x404D) != 35 || i != 32) { @@ -1851,7 +1861,7 @@ void sub_80CC59C(void) { if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE22) && (gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE22) || gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE23))) { - sp0.unk0 = get_mapheader_by_bank_and_number(gUnknown_83F5D58[r5].grp, gUnknown_83F5D58[r5].num)->regionMapSectionId; + sp0.unk0 = get_mapheader_by_bank_and_number(sInsideOutsidePairs[r5].grp, sInsideOutsidePairs[r5].num)->regionMapSectionId; if (gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE22)) sp0.unk1 = r5; else @@ -1861,9 +1871,9 @@ void sub_80CC59C(void) return; } } - if (gSaveBlock1Ptr->location.mapGroup == gUnknown_83F5D58[r5].grp2 && gSaveBlock1Ptr->location.mapNum == gUnknown_83F5D58[r5].num2) + if (gSaveBlock1Ptr->location.mapGroup == sInsideOutsidePairs[r5].grp2 && gSaveBlock1Ptr->location.mapNum == sInsideOutsidePairs[r5].num2) { - sp0.unk0 = get_mapheader_by_bank_and_number(gUnknown_83F5D58[r5].grp, gUnknown_83F5D58[r5].num)->regionMapSectionId; + sp0.unk0 = get_mapheader_by_bank_and_number(sInsideOutsidePairs[r5].grp, sInsideOutsidePairs[r5].num)->regionMapSectionId; sp0.unk1 = r5; if (r5 == 22) { @@ -1888,9 +1898,6 @@ void sub_80CC59C(void) } } -extern const char gUnknown_83F5EF0[]; -extern const char gUnknown_83F5F24[]; - u16 Special_BattleCardAction(void) { switch (gSpecialVar_Result) @@ -1911,7 +1918,52 @@ u16 Special_BattleCardAction(void) } } -const u16 gUnknown_83F5F26[] = { +void set_unknown_box_id(u8 boxId) +{ + sUnknownBoxId = boxId; +} + +u16 get_unknown_box_id(void) +{ + return sUnknownBoxId; +} + +bool8 sub_80CC7B4(void) +{ + if (FlagGet(FLAG_SYS_CHANGED_BOX_TO_STORE_MON)) + return FALSE; + if (StorageGetCurrentBox() == VarGet(VAR_0x4037)) + return FALSE; + FlagSet(FLAG_SYS_CHANGED_BOX_TO_STORE_MON); + return TRUE; +} + +bool8 sub_80CC7F8(void) +{ + s32 i; + s32 j; + set_unknown_box_id(VarGet(VAR_0x4037)); + i = StorageGetCurrentBox(); + do + { + for (j = 0; j < IN_BOX_COUNT; j++) + { + if (GetBoxMonData(GetBoxedMonPtr(i, j), MON_DATA_SPECIES, NULL) == SPECIES_NONE) + { + if (get_unknown_box_id() != i) + FlagClear(FLAG_SYS_CHANGED_BOX_TO_STORE_MON); + VarSet(VAR_0x4037, i); + return sub_80CC7B4(); + } + } + i++; + if (i == TOTAL_BOXES_COUNT) + i = 0; + } while (i != StorageGetCurrentBox()); + return FALSE; +} + +const u16 sPokeCenter1FMaps[] = { MAP_VIRIDIAN_CITY_POKEMON_CENTER_1F, MAP_PEWTER_CITY_POKEMON_CENTER_1F, MAP_CERULEAN_CITY_POKEMON_CENTER_1F, @@ -1934,3 +1986,518 @@ const u16 gUnknown_83F5F26[] = { MAP_UNKNOWN_MAP_00_04, MAP_UNDEFINED }; + +bool8 sub_80CC87C(void) +{ + s32 i; + u16 mapno = (gUnknown_2031DB4.mapGroup << 8) + gUnknown_2031DB4.mapNum; + for (i = 0; sPokeCenter1FMaps[i] != MAP_UNDEFINED; i++) + { + if (sPokeCenter1FMaps[i] == mapno) + return TRUE; + } + return FALSE; +} + +bool8 Special_ItemIsTM_GetMoveName(void) +{ + // 8004 = item ID + if (gSpecialVar_0x8004 >= ITEM_TM01 && gSpecialVar_0x8004 <= ITEM_HM08) + { + StringCopy(gStringVar1, gMoveNames[ItemIdToBattleMoveId(gSpecialVar_0x8004)]); + return TRUE; + } + else + return FALSE; +} + +void RunMassageCooldownStepCounter(void) +{ + u16 count = VarGet(VAR_MASSAGE_COOLDOWN_STEP_COUNTER); + if (count < 500) + VarSet(VAR_MASSAGE_COOLDOWN_STEP_COUNTER, count + 1); +} + +void Special_DaisyMassageServices(void) +{ + AdjustFriendship(&gPlayerParty[gSpecialVar_0x8004], 6); + VarSet(VAR_MASSAGE_COOLDOWN_STEP_COUNTER, 0); +} + +static const u16 sEliteFourLightingPalettes[][16] = { + INCBIN_U16("data/field_specials/unk_83F5F50.gbapal"), + INCBIN_U16("data/field_specials/unk_83F5F70.gbapal"), + INCBIN_U16("data/field_specials/unk_83F5F90.gbapal"), + INCBIN_U16("data/field_specials/unk_83F5FB0.gbapal"), + INCBIN_U16("data/field_specials/unk_83F5FD0.gbapal"), + INCBIN_U16("data/field_specials/unk_83F5FF0.gbapal"), + INCBIN_U16("data/field_specials/unk_83F6010.gbapal"), + INCBIN_U16("data/field_specials/unk_83F6030.gbapal"), + INCBIN_U16("data/field_specials/unk_83F6050.gbapal"), + INCBIN_U16("data/field_specials/unk_83F6070.gbapal"), + INCBIN_U16("data/field_specials/unk_83F6090.gbapal"), + INCBIN_U16("data/field_specials/unk_83F60B0.gbapal") +}; + +static const u16 sChampionRoomLightingPalettes[][16] = { + INCBIN_U16("data/field_specials/unk_83F60D0.gbapal"), + INCBIN_U16("data/field_specials/unk_83F60F0.gbapal"), + INCBIN_U16("data/field_specials/unk_83F6110.gbapal"), + INCBIN_U16("data/field_specials/unk_83F6130.gbapal"), + INCBIN_U16("data/field_specials/unk_83F6150.gbapal"), + INCBIN_U16("data/field_specials/unk_83F6170.gbapal"), + INCBIN_U16("data/field_specials/unk_83F6190.gbapal"), + INCBIN_U16("data/field_specials/unk_83F61B0.gbapal"), + INCBIN_U16("data/field_specials/unk_83F61D0.gbapal") +}; + +static const u8 sEliteFourLightingTimers[] = { + 40, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12 +}; + +static const u8 sChampionRoomLightingTimers[] = { + 20, + 8, + 8, + 8, + 8, + 8, + 8, + 8 +}; + +void Special_PokemonLeagueLightingEffect(void) +{ + u8 taskId = CreateTask(Task_RunPokemonLeagueLightingEffect, 8); + s16 *data = gTasks[taskId].data; + if (FlagGet(FLAG_TEMP_3) == TRUE) + { + gTasks[taskId].func = Task_CancelPokemonLeagueLightingEffect; + } + else + { + if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(POKEMON_LEAGUE_CHAMPIONS_ROOM) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(POKEMON_LEAGUE_CHAMPIONS_ROOM)) + { + data[0] = sChampionRoomLightingTimers[0]; + data[2] = 8; + LoadPalette(sChampionRoomLightingPalettes[0], 0x70, 0x20); + } + else + { + data[0] = sEliteFourLightingTimers[0]; + data[2] = 11; + LoadPalette(sEliteFourLightingPalettes[0], 0x70, 0x20); + } + data[1] = 0; + sub_8059948(7, 1); + } +} + +static void Task_RunPokemonLeagueLightingEffect(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (!gPaletteFade.active + && FlagGet(FLAG_TEMP_2) != FALSE + && FlagGet(FLAG_TEMP_5) != TRUE + && gUnknown_2036E28 != 3 + && --data[0] == 0 + ) + { + if (++data[1] == data[2]) + data[1] = 0; + + if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(POKEMON_LEAGUE_CHAMPIONS_ROOM) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(POKEMON_LEAGUE_CHAMPIONS_ROOM)) + { + data[0] = sChampionRoomLightingTimers[data[1]]; + LoadPalette(sChampionRoomLightingPalettes[data[1]], 0x70, 0x20); + } + else + { + data[0] = sEliteFourLightingTimers[data[1]]; + LoadPalette(sEliteFourLightingPalettes[data[1]], 0x70, 0x20); + } + sub_8059948(7, 1); + } +} + +static void Task_CancelPokemonLeagueLightingEffect(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (FlagGet(FLAG_TEMP_4) != FALSE) + { + if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(POKEMON_LEAGUE_CHAMPIONS_ROOM) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(POKEMON_LEAGUE_CHAMPIONS_ROOM)) + { + LoadPalette(sChampionRoomLightingPalettes[8], 0x70, 0x20); + } + else + { + LoadPalette(sEliteFourLightingPalettes[11], 0x70, 0x20); + } + sub_8059948(7, 1); + if (gPaletteFade.active) + { + BlendPalettes(0x00000080, 16, RGB_BLACK); + } + DestroyTask(taskId); + } +} + +void StopPokemonLeagueLightingEffectTask(void) +{ + if (FuncIsActiveTask(Task_RunPokemonLeagueLightingEffect) == TRUE) + { + DestroyTask(FindTaskIdByFunc(Task_RunPokemonLeagueLightingEffect)); + } +} + +static const u8 sCapeBrinkCompatibleSpecies[] = { + SPECIES_VENUSAUR, + SPECIES_CHARIZARD, + SPECIES_BLASTOISE +}; + +bool8 Special_CapeBrinkGetMoveToTeachLeadPokemon(void) +{ + // Returns: + // 8005 = Move tutor index + // 8006 = Num moves known by lead mon + // 8007 = Index of lead mon + // to specialvar = whether a move can be taught in the first place + u8 r7 = 0; + u8 r6 = 0; + u8 r8 = GetLeadMonIndex(); + u8 r4; + gSpecialVar_0x8007 = r8; + for (r4 = 0; r4 < NELEMS(sCapeBrinkCompatibleSpecies); r4++) + { + if (GetMonData(&gPlayerParty[r8], MON_DATA_SPECIES2, NULL) == sCapeBrinkCompatibleSpecies[r4]) + { + r7 = r4; + break; + } + } + if (r4 == NELEMS(sCapeBrinkCompatibleSpecies) || GetMonData(&gPlayerParty[r8], MON_DATA_FRIENDSHIP) != 255) + return FALSE; + if (r7 == 0) + { + StringCopy(gStringVar2, gMoveNames[MOVE_FRENZY_PLANT]); + gSpecialVar_0x8005 = MOVETUTOR_FRENZY_PLANT; + if (FlagGet(FLAG_TUTOR_FRENZY_PLANT) == TRUE) + return FALSE; + } + else if (r7 == 1) + { + StringCopy(gStringVar2, gMoveNames[MOVE_BLAST_BURN]); + gSpecialVar_0x8005 = MOVETUTOR_BLAST_BURN; + if (FlagGet(FLAG_TUTOR_BLAST_BURN) == TRUE) + return FALSE; + } + else + { + StringCopy(gStringVar2, gMoveNames[MOVE_HYDRO_CANNON]); + gSpecialVar_0x8005 = MOVETUTOR_HYDRO_CANNON; + if (FlagGet(FLAG_TUTOR_HYDRO_CANNON) == TRUE) + return FALSE; + } + if (GetMonData(&gPlayerParty[r8], MON_DATA_MOVE1) != MOVE_NONE) + r6++; + if (GetMonData(&gPlayerParty[r8], MON_DATA_MOVE2) != MOVE_NONE) + r6++; + if (GetMonData(&gPlayerParty[r8], MON_DATA_MOVE3) != MOVE_NONE) + r6++; + if (GetMonData(&gPlayerParty[r8], MON_DATA_MOVE4) != MOVE_NONE) + r6++; + gSpecialVar_0x8006 = r6; + return TRUE; +} + +bool8 Special_HasLearnedAllMovesFromCapeBrinkTutor(void) +{ + // 8005 is set by Special_CapeBrinkGetMoveToTeachLeadPokemon + u8 r4 = 0; + if (gSpecialVar_0x8005 == MOVETUTOR_FRENZY_PLANT) + FlagSet(FLAG_TUTOR_FRENZY_PLANT); + else if (gSpecialVar_0x8005 == MOVETUTOR_BLAST_BURN) + FlagSet(FLAG_TUTOR_BLAST_BURN); + else + FlagSet(FLAG_TUTOR_HYDRO_CANNON); + if (FlagGet(FLAG_TUTOR_FRENZY_PLANT) == TRUE) + r4++; + if (FlagGet(FLAG_TUTOR_BLAST_BURN) == TRUE) + r4++; + if (FlagGet(FLAG_TUTOR_HYDRO_CANNON) == TRUE) + r4++; + if (r4 == 3) + return TRUE; + else + return FALSE; +} + +bool8 CutMoveRuinValleyCheck(void) +{ + if (FlagGet(FLAG_USED_CUT_ON_RUIN_VALLEY_BRAILLE) != TRUE + && gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SIX_ISLAND_RUIN_VALLEY) + && gSaveBlock1Ptr->location.mapNum == MAP_NUM(SIX_ISLAND_RUIN_VALLEY) + && gSaveBlock1Ptr->pos.x == 24 + && gSaveBlock1Ptr->pos.y == 25 + && GetPlayerFacingDirection() == DIR_NORTH) + return TRUE; + else + return FALSE; +} + +void CutMoveOpenDottedHoleDoor(void) +{ + MapGridSetMetatileIdAt(31, 31, 0x358); + DrawWholeMapView(); + PlaySE(SE_BAN); + FlagSet(FLAG_USED_CUT_ON_RUIN_VALLEY_BRAILLE); + ScriptContext2_Disable(); +} + +static const u16 sDeoxysObjectPals[][16] = { + INCBIN_U16("data/field_specials/unk_83F6206.gbapal"), + INCBIN_U16("data/field_specials/unk_83F6226.gbapal"), + INCBIN_U16("data/field_specials/unk_83F6246.gbapal"), + INCBIN_U16("data/field_specials/unk_83F6266.gbapal"), + INCBIN_U16("data/field_specials/unk_83F6286.gbapal"), + INCBIN_U16("data/field_specials/unk_83F62A6.gbapal"), + INCBIN_U16("data/field_specials/unk_83F62C6.gbapal"), + INCBIN_U16("data/field_specials/unk_83F62E6.gbapal"), + INCBIN_U16("data/field_specials/unk_83F6306.gbapal"), + INCBIN_U16("data/field_specials/unk_83F6326.gbapal"), + INCBIN_U16("data/field_specials/unk_83F6346.gbapal") +}; + +static const u8 sDeoxysCoords[][2] = { + {15, 12}, + {11, 14}, + {15, 8}, + {19, 14}, + {12, 11}, + {18, 11}, + {15, 14}, + {11, 14}, + {19, 14}, + {15, 15}, + {15, 10} +}; + +static const u8 sDeoxysStepCaps[] = { + 4, + 8, + 8, + 8, + 4, + 4, + 4, + 6, + 3, + 3 +}; + +void Special_DeoxysSound(void) +{ + CreateTask(task_deoxys_sound, 8); +} + +static void task_deoxys_sound(u8 taskId) +{ + u16 r5; + u16 r6; + if (FlagGet(FLAG_SYS_DEOXYS_AWAKENED) == TRUE) + { + gSpecialVar_Result = 3; + EnableBothScriptContexts(); + DestroyTask(taskId); + } + else + { + r5 = VarGet(VAR_DEOXYS_INTERACTION_NUM); + r6 = VarGet(VAR_DEOXYS_INTERACTION_STEP_COUNTER); + VarSet(VAR_DEOXYS_INTERACTION_STEP_COUNTER, 0); + if (r5 != 0 && sDeoxysStepCaps[r5 - 1] < r6) + { + MoveDeoxysObject(0); + VarSet(VAR_DEOXYS_INTERACTION_NUM, 0); + gSpecialVar_Result = 0; + DestroyTask(taskId); + } + else if (r5 == 10) + { + FlagSet(FLAG_SYS_DEOXYS_AWAKENED); + gSpecialVar_Result = 2; + EnableBothScriptContexts(); + DestroyTask(taskId); + } + else + { + r5++; + MoveDeoxysObject(r5); + VarSet(VAR_DEOXYS_INTERACTION_NUM, r5); + gSpecialVar_Result = 1; + DestroyTask(taskId); + } + } +} + +static void MoveDeoxysObject(u8 num) +{ + u8 mapObjId; + LoadPalette(sDeoxysObjectPals[num], 0x1A0, 0x08); + sub_8083598(10); + TryGetFieldObjectIdByLocalIdAndMap(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &mapObjId); + if (num == 0) + PlaySE(SE_W109); + else + PlaySE(SE_DEOMOV); + CreateTask(Task_WaitDeoxysFieldEffect, 8); + gFieldEffectArguments[0] = 1; + gFieldEffectArguments[1] = 56; + gFieldEffectArguments[2] = 2; + gFieldEffectArguments[3] = sDeoxysCoords[num][0]; + gFieldEffectArguments[4] = sDeoxysCoords[num][1]; + if (num == 0) + gFieldEffectArguments[5] = 60; + else + gFieldEffectArguments[5] = 5; + FieldEffectStart(FLDEFF_UNK_43); + Overworld_SetMapObjTemplateCoords(1, sDeoxysCoords[num][0], sDeoxysCoords[num][1]); +} + +static void Task_WaitDeoxysFieldEffect(u8 taskId) +{ + if (!FieldEffectActiveListContains(FLDEFF_UNK_43)) + { + EnableBothScriptContexts(); + DestroyTask(taskId); + } +} + +void BirthIslandDeoxysStepCounter(void) +{ + u16 count = VarGet(VAR_DEOXYS_INTERACTION_STEP_COUNTER); + if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(BIRTH_ISLAND_EXTERIOR) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(BIRTH_ISLAND_EXTERIOR)) + { + count++; + if (count > 99) + VarSet(VAR_DEOXYS_INTERACTION_STEP_COUNTER, 0); + else + VarSet(VAR_DEOXYS_INTERACTION_STEP_COUNTER, count); + } +} + +void Special_SetDeoxysTriangleObjectPal(void) +{ + u8 num = VarGet(VAR_DEOXYS_INTERACTION_NUM); + LoadPalette(sDeoxysObjectPals[num], 0x1A0, 0x08); + sub_8083598(10); +} + +bool8 Special_BadEggInParty(void) +{ + u8 partyCount = CalculatePlayerPartyCount(); + u8 i; + for (i = 0; i < partyCount; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_IS_BAD_EGG) == TRUE) + return TRUE; + } + return FALSE; +} + +bool8 Special_PlayerIsNotInTrainerTowerLobby(void) +{ + if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SEVEN_ISLAND_TRAINER_TOWER_LOBBY) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_LOBBY)) + return FALSE; + else + return TRUE; +} + +void Special_BrailleCursorToggle(void) +{ + // 8004 = x - 27 + // 8005 = y + // 8006 = action (0 = create, 1 = delete) + u16 x; + if (gUnknown_203ADFA != 2) + { + x = gSpecialVar_0x8004 + 27; + if (gSpecialVar_0x8006 == 0) + gUnknown_2039A1B = CreateTextCursorSpriteForOakSpeech(0, x, gSpecialVar_0x8005, 0, 0); + else + sub_8006398(gUnknown_2039A1B); + } +} + +bool8 Special_PlayerPartyContainsSpeciesWithPlayerID(void) +{ + // 8004 = species + u8 playerCount = CalculatePlayerPartyCount(); + u8 i; + for (i = 0; i < playerCount; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) == gSpecialVar_0x8004 && GetPlayerTrainerId() == GetMonData(&gPlayerParty[i], MON_DATA_OT_ID, NULL)) + return TRUE; + } + return FALSE; +} + +/* + * Determines which of Lorelei's doll collection to show + * based on how many times you've entered the Hall of Fame. + */ +void Special_ComputeLoreleiDollCollection(void) +{ + u32 numHofClears = GetGameStat(GAME_STAT_ENTERED_HOF); + if (numHofClears >= 25) + { + FlagClear(FLAG_HIDE_LORELEI_HOUSE_MEOWTH_DOLL); + if (numHofClears >= 50) + FlagClear(FLAG_HIDE_LORELEI_HOUSE_CHANSEY_DOLL); + if (numHofClears >= 75) + FlagClear(FLAG_HIDE_LORELEIS_HOUSE_NIDORAN_F_DOLL); + if (numHofClears >= 100) + FlagClear(FLAG_HIDE_LORELEI_HOUSE_JIGGLYPUFF_DOLL); + if (numHofClears >= 125) + FlagClear(FLAG_HIDE_LORELEIS_HOUSE_NIDORAN_M_DOLL); + if (numHofClears >= 150) + FlagClear(FLAG_HIDE_LORELEIS_HOUSE_FEAROW_DOLL); + if (numHofClears >= 175) + FlagClear(FLAG_HIDE_LORELEIS_HOUSE_PIDGEOT_DOLL); + if (numHofClears >= 200) + FlagClear(FLAG_HIDE_LORELEIS_HOUSE_LAPRAS_DOLL); + } +} + +void Special_LoopWingFlapSound(void) +{ + // 8004 = Num flaps + // 8005 = Frame delay between flaps + CreateTask(Task_WingFlapSound, 8); + PlaySE(SE_W017); +} + +static void Task_WingFlapSound(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + data[1]++; + if (data[1] == gSpecialVar_0x8005) + { + data[0]++; + data[1] = 0; + PlaySE(SE_W017); + } + if (data[0] == gSpecialVar_0x8004 - 1) + DestroyTask(taskId); +} diff --git a/src/item_use.c b/src/item_use.c index fd247acbb..679a3b8cc 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -396,7 +396,7 @@ void FieldUseFunc_TmCase(u8 taskId) } else { - sub_80CCB68(); + StopPokemonLeagueLightingEffectTask(); fade_screen(1, 0); gTasks[taskId].func = Task_InitTMCaseFromField; } @@ -427,7 +427,7 @@ void FieldUseFunc_BerryPouch(u8 taskId) } else { - sub_80CCB68(); + StopPokemonLeagueLightingEffectTask(); fade_screen(1, 0); gTasks[taskId].func = Task_InitBerryPouchFromField; } @@ -470,7 +470,7 @@ void FieldUseFunc_TeachyTv(u8 taskId) } else { - sub_80CCB68(); + StopPokemonLeagueLightingEffectTask(); fade_screen(1, 0); gTasks[taskId].func = Task_InitTeachyTvFromField; } @@ -600,7 +600,7 @@ void FieldUseFunc_TownMap(u8 taskId) } else { - sub_80CCB68(); + StopPokemonLeagueLightingEffectTask(); fade_screen(1, 0); gTasks[taskId].func = sub_80A1CC0; } @@ -632,7 +632,7 @@ void FieldUseFunc_FameChecker(u8 taskId) } else { - sub_80CCB68(); + StopPokemonLeagueLightingEffectTask(); fade_screen(1, 0); gTasks[taskId].func = sub_80A1D68; } diff --git a/src/start_menu.c b/src/start_menu.c index 442884c05..221ae1f1f 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -445,7 +445,7 @@ static void StartMenu_FadeScreenIfLeavingOverworld(void) && sStartMenuCallback != StartMenuExitCallback && sStartMenuCallback != StartMenuSafariZoneRetireCallback) { - sub_80CCB68(); + StopPokemonLeagueLightingEffectTask(); fade_screen(1, 0); } } |