summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/field_control_avatar.s4
-rw-r--r--asm/field_specials.s1350
-rw-r--r--asm/fldeff_cut.s4
-rw-r--r--data/event_scripts.s31
-rw-r--r--data/field_specials.s105
-rw-r--r--data/maps/BirthIsland_Exterior/scripts.inc4
-rw-r--r--data/maps/FiveIsland_WaterLabyrinth/scripts.inc4
-rw-r--r--data/maps/FourIsland_PokemonDayCare/scripts.inc2
-rw-r--r--data/maps/MtEmber_RubyPath_B5F/scripts.inc14
-rw-r--r--data/maps/NavelRock_Summit/scripts.inc4
-rw-r--r--data/maps/SixIsland_DottedHole_SapphireRoom/scripts.inc30
-rw-r--r--data/specials.inc24
-rw-r--r--include/constants/field_effects.h1
-rw-r--r--include/constants/flags.h8
-rw-r--r--include/field_effect.h1
-rw-r--r--include/field_specials.h2
-rw-r--r--include/fieldmap.h1
-rw-r--r--ld_script.txt2
-rw-r--r--src/field_specials.c613
-rw-r--r--src/item_use.c10
-rw-r--r--src/start_menu.c2
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);
}
}