summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/berry.s311
-rw-r--r--asm/berry_crush_3.s4
-rw-r--r--asm/overworld.s2
-rw-r--r--asm/prof_pc.s204
-rw-r--r--asm/text_window_graphics.s30
-rw-r--r--data/data_835B488.s7
-rw-r--r--data/data_8468C98.s14
-rw-r--r--data/maps/PalletTown/scripts.inc2
-rw-r--r--data/maps/PalletTown_ProfessorOaksLab/scripts.inc2
-rw-r--r--data/maps/Route10_PokemonCenter_1F/scripts.inc2
-rw-r--r--data/maps/Route11_EastEntrance_2F/scripts.inc2
-rw-r--r--data/maps/Route15_WestEntrance_2F/scripts.inc2
-rw-r--r--data/maps/Route16_NorthEntrance_2F/scripts.inc2
-rw-r--r--data/maps/Route2_EastBuilding/scripts.inc2
-rw-r--r--data/specials.inc2
-rw-r--r--graphics/text_window/stdpal_0.pal19
-rw-r--r--graphics/text_window/stdpal_1.pal19
-rw-r--r--graphics/text_window/stdpal_2.pal19
-rw-r--r--graphics/text_window/stdpal_3.pal19
-rw-r--r--graphics/text_window/stdpal_4.pal19
-rw-r--r--graphics/text_window/unk_8470D6C.pngbin0 -> 190 bytes
-rw-r--r--graphics/text_window/unk_8470E8C.pngbin0 -> 183 bytes
-rw-r--r--graphics/text_window/unk_8470FCC.pngbin0 -> 190 bytes
-rw-r--r--graphics/text_window/unk_84710EC.pngbin0 -> 190 bytes
-rw-r--r--graphics/text_window/unk_847120C.pngbin0 -> 190 bytes
-rw-r--r--graphics/text_window/unk_847132C.pngbin0 -> 231 bytes
-rw-r--r--graphics/text_window/unk_847144C.pngbin0 -> 231 bytes
-rw-r--r--graphics/text_window/unk_847156C.pngbin0 -> 215 bytes
-rw-r--r--graphics/text_window/unk_84716AC.pngbin0 -> 203 bytes
-rw-r--r--graphics/text_window/unk_84717CC.pngbin0 -> 212 bytes
-rw-r--r--graphics/text_window/unk_8471A4C.pngbin0 -> 160 bytes
-rw-r--r--graphics/text_window/unk_8471B6C.pngbin0 -> 175 bytes
-rw-r--r--include/event_data.h1
-rw-r--r--include/pokedex.h1
-rw-r--r--include/text_window_graphics.h18
-rw-r--r--ld_script.txt7
-rw-r--r--src/berry.c169
-rw-r--r--src/heal_location.c137
-rw-r--r--src/prof_pc.c108
-rw-r--r--src/text_window_graphics.c58
40 files changed, 551 insertions, 631 deletions
diff --git a/asm/berry.s b/asm/berry.s
deleted file mode 100644
index 5537e3590..000000000
--- a/asm/berry.s
+++ /dev/null
@@ -1,311 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_809C718
-sub_809C718: @ 809C718
- push {r4,r5,lr}
- ldr r2, _0809C778 @ =gSaveBlock1Ptr
- ldr r1, [r2]
- ldr r0, _0809C77C @ =gUnknown_83DF7E8
- ldr r3, _0809C780 @ =0x000030ec
- adds r1, r3
- movs r4, 0x93
- lsls r4, 3
- adds r0, r4
- ldm r0!, {r3-r5}
- stm r1!, {r3-r5}
- ldm r0!, {r3-r5}
- stm r1!, {r3-r5}
- ldr r0, [r0]
- str r0, [r1]
- movs r1, 0
- adds r4, r2, 0
- adds r5, r4, 0
- ldr r3, _0809C784 @ =0x00003108
- movs r2, 0
-_0809C740:
- ldr r0, [r5]
- adds r0, r3
- adds r0, r1
- strb r2, [r0]
- adds r1, 0x1
- cmp r1, 0x11
- ble _0809C740
- ldr r0, [r4]
- ldr r5, _0809C788 @ =0x0000311a
- adds r0, r5
- movs r1, 0
- strb r1, [r0]
- ldr r0, [r4]
- ldr r2, _0809C78C @ =0x0000311b
- adds r0, r2
- strb r1, [r0]
- ldr r0, [r4]
- ldr r3, _0809C780 @ =0x000030ec
- adds r0, r3
- bl GetEnigmaBerryChecksum
- ldr r1, [r4]
- ldr r4, _0809C790 @ =0x0000311c
- adds r1, r4
- str r0, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0809C778: .4byte gSaveBlock1Ptr
-_0809C77C: .4byte gUnknown_83DF7E8
-_0809C780: .4byte 0x000030ec
-_0809C784: .4byte 0x00003108
-_0809C788: .4byte 0x0000311a
-_0809C78C: .4byte 0x0000311b
-_0809C790: .4byte 0x0000311c
- thumb_func_end sub_809C718
-
- thumb_func_start sub_809C794
-sub_809C794: @ 809C794
- push {lr}
- sub sp, 0x4
- mov r1, sp
- movs r0, 0
- strh r0, [r1]
- ldr r0, _0809C7B8 @ =gSaveBlock1Ptr
- ldr r1, [r0]
- ldr r0, _0809C7BC @ =0x000030ec
- adds r1, r0
- ldr r2, _0809C7C0 @ =0x0100001a
- mov r0, sp
- bl CpuSet
- bl sub_809C718
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_0809C7B8: .4byte gSaveBlock1Ptr
-_0809C7BC: .4byte 0x000030ec
-_0809C7C0: .4byte 0x0100001a
- thumb_func_end sub_809C794
-
- thumb_func_start SetEnigmaBerry
-SetEnigmaBerry: @ 809C7C4
- push {r4-r7,lr}
- adds r4, r0, 0
- bl sub_809C794
- adds r5, r4, 0
- ldr r0, _0809C824 @ =gSaveBlock1Ptr
- ldr r2, [r0]
- ldr r0, _0809C828 @ =0x000030ec
- adds r4, r2, r0
- adds r1, r4, 0
- adds r0, r5, 0
- ldm r0!, {r3,r6,r7}
- stm r1!, {r3,r6,r7}
- ldm r0!, {r3,r6,r7}
- stm r1!, {r3,r6,r7}
- ldr r0, [r0]
- str r0, [r1]
- movs r3, 0
- ldr r0, _0809C82C @ =0x00003108
- adds r6, r2, r0
- ldr r1, _0809C830 @ =0x00000516
- adds r2, r5, r1
-_0809C7F0:
- adds r0, r6, r3
- adds r1, r2, r3
- ldrb r1, [r1]
- strb r1, [r0]
- adds r3, 0x1
- cmp r3, 0x11
- ble _0809C7F0
- movs r3, 0xA5
- lsls r3, 3
- adds r0, r5, r3
- ldrb r0, [r0]
- adds r1, r4, 0
- adds r1, 0x2E
- strb r0, [r1]
- ldr r6, _0809C834 @ =0x00000529
- adds r0, r5, r6
- ldrb r0, [r0]
- adds r1, 0x1
- strb r0, [r1]
- adds r0, r4, 0
- bl GetEnigmaBerryChecksum
- str r0, [r4, 0x30]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0809C824: .4byte gSaveBlock1Ptr
-_0809C828: .4byte 0x000030ec
-_0809C82C: .4byte 0x00003108
-_0809C830: .4byte 0x00000516
-_0809C834: .4byte 0x00000529
- thumb_func_end SetEnigmaBerry
-
- thumb_func_start GetEnigmaBerryChecksum
-GetEnigmaBerryChecksum: @ 809C838
- push {lr}
- adds r3, r0, 0
- movs r2, 0
- movs r1, 0
-_0809C840:
- adds r0, r3, r1
- ldrb r0, [r0]
- adds r2, r0
- adds r1, 0x1
- cmp r1, 0x2F
- bls _0809C840
- adds r0, r2, 0
- pop {r1}
- bx r1
- thumb_func_end GetEnigmaBerryChecksum
-
- thumb_func_start IsEnigmaBerryValid
-IsEnigmaBerryValid: @ 809C854
- push {r4,lr}
- ldr r4, _0809C888 @ =gSaveBlock1Ptr
- ldr r1, [r4]
- movs r2, 0xC4
- lsls r2, 6
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _0809C898
- ldr r2, _0809C88C @ =0x000030f6
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _0809C898
- ldr r2, _0809C890 @ =0x000030ec
- adds r0, r1, r2
- bl GetEnigmaBerryChecksum
- ldr r1, [r4]
- ldr r2, _0809C894 @ =0x0000311c
- adds r1, r2
- ldr r1, [r1]
- cmp r0, r1
- bne _0809C898
- movs r0, 0x1
- b _0809C89A
- .align 2, 0
-_0809C888: .4byte gSaveBlock1Ptr
-_0809C88C: .4byte 0x000030f6
-_0809C890: .4byte 0x000030ec
-_0809C894: .4byte 0x0000311c
-_0809C898:
- movs r0, 0
-_0809C89A:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end IsEnigmaBerryValid
-
- thumb_func_start sub_809C8A0
-sub_809C8A0: @ 809C8A0
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x2B
- bne _0809C8C4
- bl IsEnigmaBerryValid
- cmp r0, 0
- beq _0809C8C4
- ldr r0, _0809C8BC @ =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, _0809C8C0 @ =0x000030ec
- b _0809C8D8
- .align 2, 0
-_0809C8BC: .4byte gSaveBlock1Ptr
-_0809C8C0: .4byte 0x000030ec
-_0809C8C4:
- subs r0, r4, 0x1
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2A
- bls _0809C8D0
- movs r4, 0x1
-_0809C8D0:
- lsls r0, r4, 3
- subs r0, r4
- lsls r0, 2
- ldr r1, _0809C8E0 @ =gUnknown_83DF7CC
-_0809C8D8:
- adds r0, r1
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0809C8E0: .4byte gUnknown_83DF7CC
- thumb_func_end sub_809C8A0
-
- thumb_func_start ItemIdToBerryType
-ItemIdToBerryType: @ 809C8E4
- push {lr}
- lsls r0, 16
- lsrs r1, r0, 16
- ldr r2, _0809C900 @ =0xff7b0000
- adds r0, r2
- lsrs r0, 16
- cmp r0, 0x2A
- bhi _0809C904
- adds r0, r1, 0
- adds r0, 0x7C
- lsls r0, 24
- lsrs r0, 24
- b _0809C906
- .align 2, 0
-_0809C900: .4byte 0xff7b0000
-_0809C904:
- movs r0, 0x1
-_0809C906:
- pop {r1}
- bx r1
- thumb_func_end ItemIdToBerryType
-
- thumb_func_start BerryTypeToItemId
-BerryTypeToItemId: @ 809C90C
- push {lr}
- lsls r0, 16
- lsrs r1, r0, 16
- ldr r2, _0809C928 @ =0xffff0000
- adds r0, r2
- lsrs r0, 16
- cmp r0, 0x2A
- bhi _0809C92C
- adds r0, r1, 0
- adds r0, 0x84
- lsls r0, 16
- lsrs r0, 16
- b _0809C92E
- .align 2, 0
-_0809C928: .4byte 0xffff0000
-_0809C92C:
- movs r0, 0x85
-_0809C92E:
- pop {r1}
- bx r1
- thumb_func_end BerryTypeToItemId
-
- thumb_func_start GetBerryNameByBerryType
-GetBerryNameByBerryType: @ 809C934
- push {r4,lr}
- adds r4, r1, 0
- lsls r0, 24
- lsrs r0, 24
- bl sub_809C8A0
- adds r1, r0, 0
- adds r0, r4, 0
- movs r2, 0x6
- bl memcpy
- movs r0, 0xFF
- strb r0, [r4, 0x6]
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end GetBerryNameByBerryType
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/berry_crush_3.s b/asm/berry_crush_3.s
index 23968f655..f837c4929 100644
--- a/asm/berry_crush_3.s
+++ b/asm/berry_crush_3.s
@@ -1537,7 +1537,7 @@ _0814E21A:
lsls r1, r2, 3
subs r1, r2
lsls r1, 2
- ldr r0, _0814E294 @ =gUnknown_83DF7E8
+ ldr r0, _0814E294 @ =sBerries
adds r1, r0
ldr r0, _0814E298 @ =gStringVar1
bl StringCopy
@@ -1591,7 +1591,7 @@ _0814E27E:
bl StringCopy
b _0814E2B8
.align 2, 0
-_0814E294: .4byte gUnknown_83DF7E8
+_0814E294: .4byte sBerries
_0814E298: .4byte gStringVar1
_0814E29C: .4byte gUnknown_846F4B8
_0814E2A0: .4byte gStringVar4
diff --git a/asm/overworld.s b/asm/overworld.s
index 4210aaa9d..103ed2c46 100644
--- a/asm/overworld.s
+++ b/asm/overworld.s
@@ -1178,7 +1178,7 @@ _080554B8: .4byte gSaveBlock1Ptr
sub_80554BC: @ 80554BC
push {lr}
ldr r0, _080554C8 @ =gUnknown_2031DBC
- bl sub_80BFCD0
+ bl SetBlackoutRespawnWarpAndHealerNpc
pop {r0}
bx r0
.align 2, 0
diff --git a/asm/prof_pc.s b/asm/prof_pc.s
deleted file mode 100644
index 9c9dfa79c..000000000
--- a/asm/prof_pc.s
+++ /dev/null
@@ -1,204 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_80CA3D8
-sub_80CA3D8: @ 80CA3D8
- push {lr}
- ldr r0, _080CA3F4 @ =gSpecialVar_0x8004
- ldrh r0, [r0]
- cmp r0, 0
- bne _080CA3FC
- movs r0, 0
- bl sub_8088EDC
- ldr r1, _080CA3F8 @ =gSpecialVar_0x8005
- strh r0, [r1]
- movs r0, 0x1
- bl sub_8088EDC
- b _080CA40C
- .align 2, 0
-_080CA3F4: .4byte gSpecialVar_0x8004
-_080CA3F8: .4byte gSpecialVar_0x8005
-_080CA3FC:
- movs r0, 0
- bl pokedex_count
- ldr r1, _080CA41C @ =gSpecialVar_0x8005
- strh r0, [r1]
- movs r0, 0x1
- bl pokedex_count
-_080CA40C:
- ldr r1, _080CA420 @ =gSpecialVar_0x8006
- strh r0, [r1]
- bl sub_806E25C
- lsls r0, 16
- lsrs r0, 16
- pop {r1}
- bx r1
- .align 2, 0
-_080CA41C: .4byte gSpecialVar_0x8005
-_080CA420: .4byte gSpecialVar_0x8006
- thumb_func_end sub_80CA3D8
-
- thumb_func_start sub_80CA424
-sub_80CA424: @ 80CA424
- push {lr}
- lsls r0, 16
- lsrs r2, r0, 16
- ldr r1, _080CA440 @ =gSpecialVar_Result
- movs r0, 0
- strh r0, [r1]
- cmp r2, 0x9
- bhi _080CA436
- b _080CA50C
-_080CA436:
- cmp r2, 0x13
- bhi _080CA448
- ldr r0, _080CA444 @ =gUnknown_81A6D6D
- b _080CA51A
- .align 2, 0
-_080CA440: .4byte gSpecialVar_Result
-_080CA444: .4byte gUnknown_81A6D6D
-_080CA448:
- cmp r2, 0x1D
- bhi _080CA454
- ldr r0, _080CA450 @ =gUnknown_81A6DDF
- b _080CA51A
- .align 2, 0
-_080CA450: .4byte gUnknown_81A6DDF
-_080CA454:
- cmp r2, 0x27
- bhi _080CA460
- ldr r0, _080CA45C @ =gUnknown_81A6E36
- b _080CA51A
- .align 2, 0
-_080CA45C: .4byte gUnknown_81A6E36
-_080CA460:
- cmp r2, 0x31
- bhi _080CA46C
- ldr r0, _080CA468 @ =gUnknown_81A6EA4
- b _080CA51A
- .align 2, 0
-_080CA468: .4byte gUnknown_81A6EA4
-_080CA46C:
- cmp r2, 0x3B
- bhi _080CA478
- ldr r0, _080CA474 @ =gUnknown_81A6F0B
- b _080CA51A
- .align 2, 0
-_080CA474: .4byte gUnknown_81A6F0B
-_080CA478:
- cmp r2, 0x45
- bhi _080CA484
- ldr r0, _080CA480 @ =gUnknown_81A6F71
- b _080CA51A
- .align 2, 0
-_080CA480: .4byte gUnknown_81A6F71
-_080CA484:
- cmp r2, 0x4F
- bhi _080CA490
- ldr r0, _080CA48C @ =gUnknown_81A6FAB
- b _080CA51A
- .align 2, 0
-_080CA48C: .4byte gUnknown_81A6FAB
-_080CA490:
- cmp r2, 0x59
- bhi _080CA49C
- ldr r0, _080CA498 @ =gUnknown_81A6FF1
- b _080CA51A
- .align 2, 0
-_080CA498: .4byte gUnknown_81A6FF1
-_080CA49C:
- cmp r2, 0x63
- bhi _080CA4A8
- ldr r0, _080CA4A4 @ =gUnknown_81A7031
- b _080CA51A
- .align 2, 0
-_080CA4A4: .4byte gUnknown_81A7031
-_080CA4A8:
- cmp r2, 0x6D
- bhi _080CA4B4
- ldr r0, _080CA4B0 @ =gUnknown_81A7063
- b _080CA51A
- .align 2, 0
-_080CA4B0: .4byte gUnknown_81A7063
-_080CA4B4:
- cmp r2, 0x77
- bhi _080CA4C0
- ldr r0, _080CA4BC @ =gUnknown_81A70A5
- b _080CA51A
- .align 2, 0
-_080CA4BC: .4byte gUnknown_81A70A5
-_080CA4C0:
- cmp r2, 0x81
- bhi _080CA4CC
- ldr r0, _080CA4C8 @ =gUnknown_81A70D8
- b _080CA51A
- .align 2, 0
-_080CA4C8: .4byte gUnknown_81A70D8
-_080CA4CC:
- cmp r2, 0x8B
- bhi _080CA4D8
- ldr r0, _080CA4D4 @ =gUnknown_81A7108
- b _080CA51A
- .align 2, 0
-_080CA4D4: .4byte gUnknown_81A7108
-_080CA4D8:
- cmp r2, 0x95
- bls _080CA4F6
- cmp r2, 0x96
- bne _080CA508
- movs r0, 0x97
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1
- bl GetSetPokedexFlag
- lsls r0, 24
- cmp r0, 0
- beq _080CA500
-_080CA4F6:
- ldr r0, _080CA4FC @ =gUnknown_81A7137
- b _080CA51A
- .align 2, 0
-_080CA4FC: .4byte gUnknown_81A7137
-_080CA500:
- ldr r1, _080CA504 @ =gSpecialVar_Result
- b _080CA514
- .align 2, 0
-_080CA504: .4byte gSpecialVar_Result
-_080CA508:
- cmp r2, 0x97
- beq _080CA514
-_080CA50C:
- ldr r0, _080CA510 @ =gUnknown_81A6D17
- b _080CA51A
- .align 2, 0
-_080CA510: .4byte gUnknown_81A6D17
-_080CA514:
- movs r0, 0x1
- strh r0, [r1]
- ldr r0, _080CA520 @ =gUnknown_81A7175
-_080CA51A:
- pop {r1}
- bx r1
- .align 2, 0
-_080CA520: .4byte gUnknown_81A7175
- thumb_func_end sub_80CA424
-
- thumb_func_start sub_80CA524
-sub_80CA524: @ 80CA524
- push {lr}
- ldr r0, _080CA538 @ =gSpecialVar_0x8004
- ldrh r0, [r0]
- bl sub_80CA424
- bl ShowFieldMessage
- pop {r0}
- bx r0
- .align 2, 0
-_080CA538: .4byte gSpecialVar_0x8004
- thumb_func_end sub_80CA524
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/text_window_graphics.s b/asm/text_window_graphics.s
deleted file mode 100644
index 6c725a553..000000000
--- a/asm/text_window_graphics.s
+++ /dev/null
@@ -1,30 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_8069788
-sub_8069788: @ 8069788
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x13
- bhi _080697A0
- lsls r0, 3
- ldr r1, _0806979C @ =gUnknown_8471E8C
- adds r0, r1
- b _080697A2
- .align 2, 0
-_0806979C: .4byte gUnknown_8471E8C
-_080697A0:
- ldr r0, _080697A8 @ =gUnknown_8471E8C
-_080697A2:
- pop {r1}
- bx r1
- .align 2, 0
-_080697A8: .4byte gUnknown_8471E8C
- thumb_func_end sub_8069788
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data/data_835B488.s b/data/data_835B488.s
index 00f0caecf..7970f26c4 100644
--- a/data/data_835B488.s
+++ b/data/data_835B488.s
@@ -605,12 +605,9 @@ gUnknown_83DF0F2:: @ 83DF0F2
.incbin "baserom.gba", 0x3DF0F2, 0x6
gUnknown_83DF0F8:: @ 83DF0F8
- .incbin "baserom.gba", 0x3DF0F8, 0x6D4
+ .incbin "baserom.gba", 0x3DF0F8, 0x6F0
-gUnknown_83DF7CC:: @ 83DF7CC
- .incbin "baserom.gba", 0x3DF7CC, 0x1C
-
-gUnknown_83DF7E8:: @ 83DF7E8
+sBerries:: @ 83DF7E8
.incbin "baserom.gba", 0x3DF7E8, 0x4B4
gUnknown_83DFC9C:: @ 83DFC9C
diff --git a/data/data_8468C98.s b/data/data_8468C98.s
index 0f3b039c1..629dcaf02 100644
--- a/data/data_8468C98.s
+++ b/data/data_8468C98.s
@@ -321,16 +321,4 @@ gUnknown_846FB0C:: @ 846FB0C
.incbin "baserom.gba", 0x46FB0C, 0x1000
gUnknown_8470B0C:: @ 8470B0C
- .incbin "baserom.gba", 0x470B0C, 0xF40
-
-gUnknown_8471A4C:: @ 8471A4C
- .incbin "baserom.gba", 0x471A4C, 0x120
-
-gUnknown_8471B6C:: @ 8471B6C
- .incbin "baserom.gba", 0x471B6C, 0x280
-
-gUnknown_8471DEC:: @ 8471DEC
- .incbin "baserom.gba", 0x471DEC, 0xA0
-
-gUnknown_8471E8C:: @ 8471E8C
- .incbin "baserom.gba", 0x471E8C, 0x50
+ .incbin "baserom.gba", 0x470B0C, 0x260
diff --git a/data/maps/PalletTown/scripts.inc b/data/maps/PalletTown/scripts.inc
index ed9d01395..c1790fb90 100644
--- a/data/maps/PalletTown/scripts.inc
+++ b/data/maps/PalletTown/scripts.inc
@@ -54,7 +54,7 @@ EventScript_1654D8:: @ 81654D8
goto_if 0, EventScript_1655A1
msgbox gUnknown_817D8BF
setvar VAR_0x8004, 0
- specialvar VAR_RESULT, sub_80CA3D8
+ specialvar VAR_RESULT, Special_GetPokedexCount
copyvar VAR_0x8008, VAR_0x8005
copyvar VAR_0x8009, VAR_0x8006
getnumberstring 0, VAR_0x8008
diff --git a/data/maps/PalletTown_ProfessorOaksLab/scripts.inc b/data/maps/PalletTown_ProfessorOaksLab/scripts.inc
index 44f6bbc5a..449c31027 100644
--- a/data/maps/PalletTown_ProfessorOaksLab/scripts.inc
+++ b/data/maps/PalletTown_ProfessorOaksLab/scripts.inc
@@ -836,7 +836,7 @@ Movement_1698D0:: @ 81698D0
EventScript_1698D6:: @ 81698D6
setvar VAR_0x8004, 0
- specialvar VAR_RESULT, sub_80CA3D8
+ specialvar VAR_RESULT, Special_GetPokedexCount
copyvar VAR_0x8008, VAR_0x8005
copyvar VAR_0x8009, VAR_0x8006
getnumberstring 0, VAR_0x8008
diff --git a/data/maps/Route10_PokemonCenter_1F/scripts.inc b/data/maps/Route10_PokemonCenter_1F/scripts.inc
index 15889ad8f..7d47d07df 100644
--- a/data/maps/Route10_PokemonCenter_1F/scripts.inc
+++ b/data/maps/Route10_PokemonCenter_1F/scripts.inc
@@ -37,7 +37,7 @@ Route10_PokemonCenter_1F_EventScript_16FC65:: @ 816FC65
compare_var_to_value VAR_RESULT, 0
goto_if_eq EventScript_1A7AD1
setvar VAR_0x8004, 0
- specialvar VAR_RESULT, sub_80CA3D8
+ specialvar VAR_RESULT, Special_GetPokedexCount
getnumberstring 2, VAR_0x8006
call EventScript_16FCF1
compare_var_to_value VAR_0x8006, 20
diff --git a/data/maps/Route11_EastEntrance_2F/scripts.inc b/data/maps/Route11_EastEntrance_2F/scripts.inc
index abc877c0e..334e71ec4 100644
--- a/data/maps/Route11_EastEntrance_2F/scripts.inc
+++ b/data/maps/Route11_EastEntrance_2F/scripts.inc
@@ -66,7 +66,7 @@ Route11_EastEntrance_2F_EventScript_16FDD8:: @ 816FDD8
compare_var_to_value VAR_RESULT, 0
goto_if_eq EventScript_1A7AD1
setvar VAR_0x8004, 0
- specialvar VAR_RESULT, sub_80CA3D8
+ specialvar VAR_RESULT, Special_GetPokedexCount
getnumberstring 2, VAR_0x8006
call EventScript_16FE64
compare_var_to_value VAR_0x8006, 30
diff --git a/data/maps/Route15_WestEntrance_2F/scripts.inc b/data/maps/Route15_WestEntrance_2F/scripts.inc
index 36ea31ca0..1e06c0394 100644
--- a/data/maps/Route15_WestEntrance_2F/scripts.inc
+++ b/data/maps/Route15_WestEntrance_2F/scripts.inc
@@ -27,7 +27,7 @@ Route15_WestEntrance_2F_EventScript_1700B9:: @ 81700B9
compare_var_to_value VAR_RESULT, 0
goto_if_eq EventScript_1A7AD1
setvar VAR_0x8004, 0
- specialvar VAR_RESULT, sub_80CA3D8
+ specialvar VAR_RESULT, Special_GetPokedexCount
getnumberstring 2, VAR_0x8006
call EventScript_170145
compare_var_to_value VAR_0x8006, 50
diff --git a/data/maps/Route16_NorthEntrance_2F/scripts.inc b/data/maps/Route16_NorthEntrance_2F/scripts.inc
index 32685e669..6fa870c27 100644
--- a/data/maps/Route16_NorthEntrance_2F/scripts.inc
+++ b/data/maps/Route16_NorthEntrance_2F/scripts.inc
@@ -27,7 +27,7 @@ Route16_NorthEntrance_2F_EventScript_1702E3:: @ 81702E3
compare_var_to_value VAR_RESULT, 0
goto_if_eq EventScript_1A7AD1
setvar VAR_0x8004, 0
- specialvar VAR_RESULT, sub_80CA3D8
+ specialvar VAR_RESULT, Special_GetPokedexCount
getnumberstring 2, VAR_0x8006
call EventScript_17036F
compare_var_to_value VAR_0x8006, 40
diff --git a/data/maps/Route2_EastBuilding/scripts.inc b/data/maps/Route2_EastBuilding/scripts.inc
index 9716879a1..a1b2d0e7a 100644
--- a/data/maps/Route2_EastBuilding/scripts.inc
+++ b/data/maps/Route2_EastBuilding/scripts.inc
@@ -11,7 +11,7 @@ Route2_EastBuilding_EventScript_16F67F:: @ 816F67F
compare_var_to_value VAR_RESULT, 0
goto_if_eq EventScript_1A7AD1
setvar VAR_0x8004, 0
- specialvar VAR_RESULT, sub_80CA3D8
+ specialvar VAR_RESULT, Special_GetPokedexCount
getnumberstring 2, VAR_0x8006
call EventScript_16F70B
compare_var_to_value VAR_0x8006, 10
diff --git a/data/specials.inc b/data/specials.inc
index ad439ae07..f40c3d3be 100644
--- a/data/specials.inc
+++ b/data/specials.inc
@@ -221,7 +221,7 @@ gSpecials:: @ 815FD60
def_special nullsub_75
def_special nullsub_75
def_special nullsub_75
- def_special sub_80CA3D8
+ def_special Special_GetPokedexCount
def_special sub_80CA524
def_special sub_80CA86C
def_special sub_80CA9A8
diff --git a/graphics/text_window/stdpal_0.pal b/graphics/text_window/stdpal_0.pal
new file mode 100644
index 000000000..c64668073
--- /dev/null
+++ b/graphics/text_window/stdpal_0.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+115 205 164
+255 255 255
+98 98 98
+213 213 205
+230 8 8
+255 189 115
+32 156 8
+148 246 148
+49 82 205
+164 197 246
+255 255 255
+213 230 246
+164 213 230
+230 246 255
+115 164 197
+74 115 164
diff --git a/graphics/text_window/stdpal_1.pal b/graphics/text_window/stdpal_1.pal
new file mode 100644
index 000000000..df5d3c337
--- /dev/null
+++ b/graphics/text_window/stdpal_1.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+115 205 164
+255 255 255
+98 98 98
+213 213 205
+230 8 8
+255 189 115
+32 156 8
+148 246 148
+49 82 205
+164 197 246
+255 255 255
+205 205 222
+205 205 222
+230 246 255
+205 205 222
+106 115 123
diff --git a/graphics/text_window/stdpal_2.pal b/graphics/text_window/stdpal_2.pal
new file mode 100644
index 000000000..6a14d67f0
--- /dev/null
+++ b/graphics/text_window/stdpal_2.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+115 205 164
+255 255 255
+98 98 98
+213 213 205
+230 8 8
+255 189 115
+32 156 8
+148 246 148
+49 82 205
+164 197 246
+255 255 255
+74 205 238
+16 172 222
+0 82 115
+0 115 139
+0 123 197
diff --git a/graphics/text_window/stdpal_3.pal b/graphics/text_window/stdpal_3.pal
new file mode 100644
index 000000000..9cbcdad4c
--- /dev/null
+++ b/graphics/text_window/stdpal_3.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+115 205 164
+255 255 255
+98 98 98
+213 213 205
+230 8 8
+255 189 115
+32 156 8
+148 246 148
+49 82 205
+164 197 246
+255 0 255
+205 213 213
+156 205 222
+98 115 123
+65 172 230
+131 164 180
diff --git a/graphics/text_window/stdpal_4.pal b/graphics/text_window/stdpal_4.pal
new file mode 100644
index 000000000..a004a081a
--- /dev/null
+++ b/graphics/text_window/stdpal_4.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+115 205 164
+255 255 255
+98 98 98
+213 213 205
+230 8 8
+255 189 115
+32 156 8
+148 246 148
+49 82 205
+164 197 246
+57 98 115
+131 131 131
+164 164 164
+197 197 205
+230 230 238
+65 90 106
diff --git a/graphics/text_window/unk_8470D6C.png b/graphics/text_window/unk_8470D6C.png
new file mode 100644
index 000000000..d14130f9a
--- /dev/null
+++ b/graphics/text_window/unk_8470D6C.png
Binary files differ
diff --git a/graphics/text_window/unk_8470E8C.png b/graphics/text_window/unk_8470E8C.png
new file mode 100644
index 000000000..747e243eb
--- /dev/null
+++ b/graphics/text_window/unk_8470E8C.png
Binary files differ
diff --git a/graphics/text_window/unk_8470FCC.png b/graphics/text_window/unk_8470FCC.png
new file mode 100644
index 000000000..c8b21542d
--- /dev/null
+++ b/graphics/text_window/unk_8470FCC.png
Binary files differ
diff --git a/graphics/text_window/unk_84710EC.png b/graphics/text_window/unk_84710EC.png
new file mode 100644
index 000000000..cb7e5383d
--- /dev/null
+++ b/graphics/text_window/unk_84710EC.png
Binary files differ
diff --git a/graphics/text_window/unk_847120C.png b/graphics/text_window/unk_847120C.png
new file mode 100644
index 000000000..dc7e1951c
--- /dev/null
+++ b/graphics/text_window/unk_847120C.png
Binary files differ
diff --git a/graphics/text_window/unk_847132C.png b/graphics/text_window/unk_847132C.png
new file mode 100644
index 000000000..ec72b2756
--- /dev/null
+++ b/graphics/text_window/unk_847132C.png
Binary files differ
diff --git a/graphics/text_window/unk_847144C.png b/graphics/text_window/unk_847144C.png
new file mode 100644
index 000000000..804df1a8b
--- /dev/null
+++ b/graphics/text_window/unk_847144C.png
Binary files differ
diff --git a/graphics/text_window/unk_847156C.png b/graphics/text_window/unk_847156C.png
new file mode 100644
index 000000000..b1292016f
--- /dev/null
+++ b/graphics/text_window/unk_847156C.png
Binary files differ
diff --git a/graphics/text_window/unk_84716AC.png b/graphics/text_window/unk_84716AC.png
new file mode 100644
index 000000000..94ec70d6e
--- /dev/null
+++ b/graphics/text_window/unk_84716AC.png
Binary files differ
diff --git a/graphics/text_window/unk_84717CC.png b/graphics/text_window/unk_84717CC.png
new file mode 100644
index 000000000..0ea4b9a45
--- /dev/null
+++ b/graphics/text_window/unk_84717CC.png
Binary files differ
diff --git a/graphics/text_window/unk_8471A4C.png b/graphics/text_window/unk_8471A4C.png
new file mode 100644
index 000000000..ed43f0c4a
--- /dev/null
+++ b/graphics/text_window/unk_8471A4C.png
Binary files differ
diff --git a/graphics/text_window/unk_8471B6C.png b/graphics/text_window/unk_8471B6C.png
new file mode 100644
index 000000000..c1fba5919
--- /dev/null
+++ b/graphics/text_window/unk_8471B6C.png
Binary files differ
diff --git a/include/event_data.h b/include/event_data.h
index 34d103967..013579ab5 100644
--- a/include/event_data.h
+++ b/include/event_data.h
@@ -36,6 +36,7 @@ bool32 sub_806E2BC(void);
void sub_806E6FC(void);
void sub_806E2D0(void);
void sub_806E370(void);
+bool32 sub_806E25C(void);
extern u16 gSpecialVar_0x8000;
extern u16 gSpecialVar_0x8001;
diff --git a/include/pokedex.h b/include/pokedex.h
index ca642ed1a..b389bf821 100644
--- a/include/pokedex.h
+++ b/include/pokedex.h
@@ -21,5 +21,6 @@ enum
s8 GetSetPokedexFlag(u16 nationalNum, u8 caseId);
u16 pokedex_count(u8);
u16 sub_80C0844(u8);
+u16 sub_8088EDC(u8);
#endif // GUARD_POKEDEX_H
diff --git a/include/text_window_graphics.h b/include/text_window_graphics.h
new file mode 100644
index 000000000..1d7b2b7c9
--- /dev/null
+++ b/include/text_window_graphics.h
@@ -0,0 +1,18 @@
+#ifndef GUARD_TEXT_WINDOW_GRAPHICS_H
+#define GUARD_TEXT_WINDOW_GRAPHICS_H
+
+struct TextWindowGraphics
+{
+ const void * tiles;
+ const void * palette;
+};
+
+extern const u16 gUnknown_8471A4C[];
+extern const u16 gUnknown_8471B6C[];
+extern const u16 gUnknown_8471DEC[][16];
+
+extern const struct TextWindowGraphics gUnknown_8471E8C[];
+
+const struct TextWindowGraphics * sub_8069788(u8 idx);
+
+#endif //GUARD_TEXT_WINDOW_GRAPHICS_H
diff --git a/ld_script.txt b/ld_script.txt
index eeb9f6564..5ff29f104 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -100,7 +100,7 @@ SECTIONS {
asm/map_obj_80688E4.o(.text);
asm/field_message_box.o(.text);
asm/map_obj_lock.o(.text);
- asm/text_window_graphics.o(.text);
+ src/text_window_graphics.o(.text);
src/script.o(.text);
src/scrcmd.o(.text);
asm/field_control_avatar.o(.text);
@@ -141,7 +141,7 @@ SECTIONS {
asm/battle_anim_80989F8.o(.text);
asm/item.o(.text);
asm/shop.o(.text);
- asm/berry.o(.text);
+ src/berry.o(.text);
asm/script_menu.o(.text);
asm/naming_screen.o(.text);
src/money.o(.text);
@@ -167,7 +167,7 @@ SECTIONS {
asm/rom6.o(.text);
asm/fldeff_flash.o(.text);
asm/post_battle_event_funcs.o(.text);
- asm/prof_pc.o(.text);
+ src/prof_pc.o(.text);
asm/hof_pc.o(.text);
asm/field_specials.o(.text);
asm/battle_records.o(.text);
@@ -428,6 +428,7 @@ SECTIONS {
. = ALIGN(4);
src/seagallop.o(.rodata);
data/data_8468C98.o(.rodata);
+ src/text_window_graphics.o(.rodata);
src/quest_log_8150454.o(.rodata);
data/data_8471F00.o(.rodata);
src/unk_815C980.o(.rodata);
diff --git a/src/berry.c b/src/berry.c
new file mode 100644
index 000000000..5cbcd4e90
--- /dev/null
+++ b/src/berry.c
@@ -0,0 +1,169 @@
+#include "global.h"
+#include "berry.h"
+#include "text.h"
+#include "constants/items.h"
+
+extern const struct Berry sBerries[];
+
+#define ENIGMA_BERRY_STRUCT ({const struct Berry2 *berries = (const struct Berry2 *)sBerries;berries[ITEM_ENIGMA_BERRY - ITEM_CHERI_BERRY];})
+
+void sub_809C718(void)
+{
+ s32 i;
+
+ gSaveBlock1Ptr->enigmaBerry.berry = ENIGMA_BERRY_STRUCT;
+ for (i = 0; i < 18; i++)
+ gSaveBlock1Ptr->enigmaBerry.itemEffect[i] = 0;
+ gSaveBlock1Ptr->enigmaBerry.holdEffect = 0;
+ gSaveBlock1Ptr->enigmaBerry.holdEffectParam = 0;
+ gSaveBlock1Ptr->enigmaBerry.checksum = GetEnigmaBerryChecksum(&gSaveBlock1Ptr->enigmaBerry);
+}
+
+void sub_809C794(void)
+{
+ CpuFill16(0, &gSaveBlock1Ptr->enigmaBerry, sizeof(gSaveBlock1Ptr->enigmaBerry));
+ sub_809C718();
+}
+
+#ifdef NONMATCHING
+void SetEnigmaBerry(u8 * berry)
+{
+ struct EnigmaBerry * enigmaBerry;
+
+ sub_809C794();
+
+ {
+ const struct Berry2 * src = (const struct Berry2 *)berry;
+ struct Berry2 * dest = &gSaveBlock1Ptr->enigmaBerry.berry;
+ *dest = *src;
+ }
+
+ enigmaBerry = &gSaveBlock1Ptr->enigmaBerry;
+ {
+ s32 i = 0;
+ u8 * dest = gSaveBlock1Ptr->enigmaBerry.itemEffect;
+ const u8 * src = berry + 0x516;
+
+ for (i = 0; i < 18; i++) dest[i] = src[i];
+ }
+ enigmaBerry->holdEffect = berry[0x528];
+ enigmaBerry->holdEffectParam = berry[0x529];
+ enigmaBerry->checksum = GetEnigmaBerryChecksum(enigmaBerry);
+}
+#else
+NAKED
+void SetEnigmaBerry(u8 * berry)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tadds r4, r0, 0\n"
+ "\tbl sub_809C794\n"
+ "\tadds r5, r4, 0\n"
+ "\tldr r0, _0809C824 @ =gSaveBlock1Ptr\n"
+ "\tldr r2, [r0]\n"
+ "\tldr r0, _0809C828 @ =0x000030ec\n"
+ "\tadds r4, r2, r0\n"
+ "\tadds r1, r4, 0\n"
+ "\tadds r0, r5, 0\n"
+ "\tldm r0!, {r3,r6,r7}\n"
+ "\tstm r1!, {r3,r6,r7}\n"
+ "\tldm r0!, {r3,r6,r7}\n"
+ "\tstm r1!, {r3,r6,r7}\n"
+ "\tldr r0, [r0]\n"
+ "\tstr r0, [r1]\n"
+ "\tmovs r3, 0\n"
+ "\tldr r0, _0809C82C @ =0x00003108\n"
+ "\tadds r6, r2, r0\n"
+ "\tldr r1, _0809C830 @ =0x00000516\n"
+ "\tadds r2, r5, r1\n"
+ "_0809C7F0:\n"
+ "\tadds r0, r6, r3\n"
+ "\tadds r1, r2, r3\n"
+ "\tldrb r1, [r1]\n"
+ "\tstrb r1, [r0]\n"
+ "\tadds r3, 0x1\n"
+ "\tcmp r3, 0x11\n"
+ "\tble _0809C7F0\n"
+ "\tmovs r3, 0xA5\n"
+ "\tlsls r3, 3\n"
+ "\tadds r0, r5, r3\n"
+ "\tldrb r0, [r0]\n"
+ "\tadds r1, r4, 0\n"
+ "\tadds r1, 0x2E\n"
+ "\tstrb r0, [r1]\n"
+ "\tldr r6, _0809C834 @ =0x00000529\n"
+ "\tadds r0, r5, r6\n"
+ "\tldrb r0, [r0]\n"
+ "\tadds r1, 0x1\n"
+ "\tstrb r0, [r1]\n"
+ "\tadds r0, r4, 0\n"
+ "\tbl GetEnigmaBerryChecksum\n"
+ "\tstr r0, [r4, 0x30]\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+ "_0809C824: .4byte gSaveBlock1Ptr\n"
+ "_0809C828: .4byte 0x000030ec\n"
+ "_0809C82C: .4byte 0x00003108\n"
+ "_0809C830: .4byte 0x00000516\n"
+ "_0809C834: .4byte 0x00000529");
+}
+#endif
+
+u32 GetEnigmaBerryChecksum(struct EnigmaBerry * enigmaBerry)
+{
+ const u8 * src = (const u8 *)enigmaBerry;
+ u32 result = 0;
+ u32 i;
+
+ for (i = 0; i < offsetof(struct EnigmaBerry, checksum); i++)
+ result += src[i];
+
+ return result;
+}
+
+bool32 IsEnigmaBerryValid(void)
+{
+ if (gSaveBlock1Ptr->enigmaBerry.berry.stageDuration == 0)
+ return FALSE;
+ if (gSaveBlock1Ptr->enigmaBerry.berry.maxYield == 0)
+ return FALSE;
+ if (GetEnigmaBerryChecksum(&gSaveBlock1Ptr->enigmaBerry) != gSaveBlock1Ptr->enigmaBerry.checksum)
+ return FALSE;
+
+ return TRUE;
+}
+
+const struct Berry * sub_809C8A0(u8 berryIdx)
+{
+ if (berryIdx == ITEM_ENIGMA_BERRY - ITEM_CHERI_BERRY + 1 && IsEnigmaBerryValid())
+ return (struct Berry *)&gSaveBlock1Ptr->enigmaBerry.berry;
+
+ if (berryIdx == 0 || berryIdx > ITEM_ENIGMA_BERRY - ITEM_CHERI_BERRY + 1)
+ berryIdx = 1;
+
+ return &sBerries[berryIdx - 1];
+}
+
+u8 ItemIdToBerryType(u16 itemId)
+{
+ if (itemId - ITEM_CHERI_BERRY < 0 || itemId - ITEM_CHERI_BERRY > ITEM_ENIGMA_BERRY - ITEM_CHERI_BERRY)
+ return 1;
+
+ return itemId - ITEM_CHERI_BERRY + 1;
+}
+
+u16 BerryTypeToItemId(u16 berryType)
+{
+ if (berryType - 1 < 0 || berryType - 1 > ITEM_ENIGMA_BERRY - ITEM_CHERI_BERRY)
+ return ITEM_CHERI_BERRY;
+
+ return berryType + ITEM_CHERI_BERRY - 1;
+}
+
+void GetBerryNameByBerryType(u8 berryType, u8 * dest)
+{
+ const struct Berry * berry = sub_809C8A0(berryType);
+ memcpy(dest, berry->name, 6);
+ dest[6] = EOS;
+}
diff --git a/src/heal_location.c b/src/heal_location.c
index 574c126e2..9756f0951 100644
--- a/src/heal_location.c
+++ b/src/heal_location.c
@@ -5,56 +5,85 @@
#include "constants/maps.h"
#include "constants/spawn_points.h"
-void sub_80BFE00(u32 healLocationIdx);
+void SetBlackoutRespawnHealerNpcAsLastTalked(u32 healLocationIdx);
+// This array defines the fly points for unlocked spawns.
static const struct HealLocation sSpawnPoints[] = {
- {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x06, 0x08},
- {MAP_GROUP(VIRIDIAN_CITY), MAP_NUM(VIRIDIAN_CITY), 0x1a, 0x1b},
- {MAP_GROUP(PEWTER_CITY), MAP_NUM(PEWTER_CITY), 0x11, 0x1a},
- {MAP_GROUP(CERULEAN_CITY), MAP_NUM(CERULEAN_CITY), 0x16, 0x14},
- {MAP_GROUP(LAVENDER_TOWN), MAP_NUM(LAVENDER_TOWN), 0x06, 0x06},
- {MAP_GROUP(VERMILION_CITY), MAP_NUM(VERMILION_CITY), 0x0f, 0x07},
- {MAP_GROUP(CELADON_CITY), MAP_NUM(CELADON_CITY), 0x30, 0x0c},
- {MAP_GROUP(FUCHSIA_CITY), MAP_NUM(FUCHSIA_CITY), 0x19, 0x20},
- {MAP_GROUP(CINNABAR_ISLAND), MAP_NUM(CINNABAR_ISLAND), 0x0e, 0x0c},
- {MAP_GROUP(INDIGO_PLATEAU_EXTERIOR), MAP_NUM(INDIGO_PLATEAU_EXTERIOR), 0x0b, 0x07},
- {MAP_GROUP(SAFFRON_CITY_DUPLICATE), MAP_NUM(SAFFRON_CITY_DUPLICATE), 0x18, 0x27},
- {MAP_GROUP(ROUTE4), MAP_NUM(ROUTE4), 0x0c, 0x06},
- {MAP_GROUP(ROUTE10), MAP_NUM(ROUTE10), 0x0d, 0x15},
- {MAP_GROUP(ONE_ISLAND), MAP_NUM(ONE_ISLAND), 0x0e, 0x06},
- {MAP_GROUP(TWO_ISLAND), MAP_NUM(TWO_ISLAND), 0x15, 0x08},
- {MAP_GROUP(THREE_ISLAND), MAP_NUM(THREE_ISLAND), 0x0e, 0x1c},
- {MAP_GROUP(FOUR_ISLAND), MAP_NUM(FOUR_ISLAND), 0x12, 0x15},
- {MAP_GROUP(FIVE_ISLAND), MAP_NUM(FIVE_ISLAND), 0x12, 0x07},
- {MAP_GROUP(SEVEN_ISLAND), MAP_NUM(SEVEN_ISLAND), 0x0c, 0x04},
- {MAP_GROUP(SIX_ISLAND), MAP_NUM(SIX_ISLAND), 0x0b, 0x0c},
+ [SPAWN_PALLET_TOWN - 1] = {MAP_GROUP(PALLET_TOWN), MAP_NUM(PALLET_TOWN), 0x06, 0x08},
+ [SPAWN_VIRIDIAN_CITY - 1] = {MAP_GROUP(VIRIDIAN_CITY), MAP_NUM(VIRIDIAN_CITY), 0x1a, 0x1b},
+ [SPAWN_PEWTER_CITY - 1] = {MAP_GROUP(PEWTER_CITY), MAP_NUM(PEWTER_CITY), 0x11, 0x1a},
+ [SPAWN_CERULEAN_CITY - 1] = {MAP_GROUP(CERULEAN_CITY), MAP_NUM(CERULEAN_CITY), 0x16, 0x14},
+ [SPAWN_LAVENDER_TOWN - 1] = {MAP_GROUP(LAVENDER_TOWN), MAP_NUM(LAVENDER_TOWN), 0x06, 0x06},
+ [SPAWN_VERMILION_CITY - 1] = {MAP_GROUP(VERMILION_CITY), MAP_NUM(VERMILION_CITY), 0x0f, 0x07},
+ [SPAWN_CELADON_CITY - 1] = {MAP_GROUP(CELADON_CITY), MAP_NUM(CELADON_CITY), 0x30, 0x0c},
+ [SPAWN_FUCHSIA_CITY - 1] = {MAP_GROUP(FUCHSIA_CITY), MAP_NUM(FUCHSIA_CITY), 0x19, 0x20},
+ [SPAWN_CINNABAR_ISLAND - 1] = {MAP_GROUP(CINNABAR_ISLAND), MAP_NUM(CINNABAR_ISLAND), 0x0e, 0x0c},
+ [SPAWN_INDIGO_PLATEAU - 1] = {MAP_GROUP(INDIGO_PLATEAU_EXTERIOR), MAP_NUM(INDIGO_PLATEAU_EXTERIOR), 0x0b, 0x07},
+ [SPAWN_SAFFRON_CITY - 1] = {MAP_GROUP(SAFFRON_CITY_DUPLICATE), MAP_NUM(SAFFRON_CITY_DUPLICATE), 0x18, 0x27},
+ [SPAWN_ROUTE4 - 1] = {MAP_GROUP(ROUTE4), MAP_NUM(ROUTE4), 0x0c, 0x06},
+ [SPAWN_ROUTE10 - 1] = {MAP_GROUP(ROUTE10), MAP_NUM(ROUTE10), 0x0d, 0x15},
+ [SPAWN_ONE_ISLAND - 1] = {MAP_GROUP(ONE_ISLAND), MAP_NUM(ONE_ISLAND), 0x0e, 0x06},
+ [SPAWN_TWO_ISLAND - 1] = {MAP_GROUP(TWO_ISLAND), MAP_NUM(TWO_ISLAND), 0x15, 0x08},
+ [SPAWN_THREE_ISLAND - 1] = {MAP_GROUP(THREE_ISLAND), MAP_NUM(THREE_ISLAND), 0x0e, 0x1c},
+ [SPAWN_FOUR_ISLAND - 1] = {MAP_GROUP(FOUR_ISLAND), MAP_NUM(FOUR_ISLAND), 0x12, 0x15},
+ [SPAWN_FIVE_ISLAND - 1] = {MAP_GROUP(FIVE_ISLAND), MAP_NUM(FIVE_ISLAND), 0x12, 0x07},
+ [SPAWN_SEVEN_ISLAND - 1] = {MAP_GROUP(SEVEN_ISLAND), MAP_NUM(SEVEN_ISLAND), 0x0c, 0x04},
+ [SPAWN_SIX_ISLAND - 1] = {MAP_GROUP(SIX_ISLAND), MAP_NUM(SIX_ISLAND), 0x0b, 0x0c},
};
-const u16 gUnknown_83EEC98[][2] = {
- {MAP_GROUP(PALLET_TOWN_PLAYERS_HOUSE_1F), MAP_NUM(PALLET_TOWN_PLAYERS_HOUSE_1F)},
- {MAP_GROUP(VIRIDIAN_CITY_POKEMON_CENTER_1F), MAP_NUM(VIRIDIAN_CITY_POKEMON_CENTER_1F)},
- {MAP_GROUP(PEWTER_CITY_POKEMON_CENTER_1F), MAP_NUM(PEWTER_CITY_POKEMON_CENTER_1F)},
- {MAP_GROUP(CERULEAN_CITY_POKEMON_CENTER_1F), MAP_NUM(CERULEAN_CITY_POKEMON_CENTER_1F)},
- {MAP_GROUP(LAVENDER_TOWN_POKEMON_CENTER_1F), MAP_NUM(LAVENDER_TOWN_POKEMON_CENTER_1F)},
- {MAP_GROUP(VERMILION_CITY_POKEMON_CENTER_1F), MAP_NUM(VERMILION_CITY_POKEMON_CENTER_1F)},
- {MAP_GROUP(CELADON_CITY_POKEMON_CENTER_1F), MAP_NUM(CELADON_CITY_POKEMON_CENTER_1F)},
- {MAP_GROUP(FUCHSIA_CITY_POKEMON_CENTER_1F), MAP_NUM(FUCHSIA_CITY_POKEMON_CENTER_1F)},
- {MAP_GROUP(CINNABAR_ISLAND_POKEMON_CENTER_1F), MAP_NUM(CINNABAR_ISLAND_POKEMON_CENTER_1F)},
- {MAP_GROUP(INDIGO_PLATEAU_POKEMON_CENTER_1F), MAP_NUM(INDIGO_PLATEAU_POKEMON_CENTER_1F)},
- {MAP_GROUP(SAFFRON_CITY_POKEMON_CENTER_1F), MAP_NUM(SAFFRON_CITY_POKEMON_CENTER_1F)},
- {MAP_GROUP(ROUTE4_POKEMON_CENTER_1F), MAP_NUM(ROUTE4_POKEMON_CENTER_1F)},
- {MAP_GROUP(ROUTE10_POKEMON_CENTER_1F), MAP_NUM(ROUTE10_POKEMON_CENTER_1F)},
- {MAP_GROUP(ONE_ISLAND_POKEMON_CENTER_1F), MAP_NUM(ONE_ISLAND_POKEMON_CENTER_1F)},
- {MAP_GROUP(TWO_ISLAND_POKEMON_CENTER_1F), MAP_NUM(TWO_ISLAND_POKEMON_CENTER_1F)},
- {MAP_GROUP(THREE_ISLAND_POKEMON_CENTER_1F), MAP_NUM(THREE_ISLAND_POKEMON_CENTER_1F)},
- {MAP_GROUP(FOUR_ISLAND_POKEMON_CENTER_1F), MAP_NUM(FOUR_ISLAND_POKEMON_CENTER_1F)},
- {MAP_GROUP(FIVE_ISLAND_POKEMON_CENTER_1F), MAP_NUM(FIVE_ISLAND_POKEMON_CENTER_1F)},
- {MAP_GROUP(SEVEN_ISLAND_POKEMON_CENTER_1F), MAP_NUM(SEVEN_ISLAND_POKEMON_CENTER_1F)},
- {MAP_GROUP(SIX_ISLAND_POKEMON_CENTER_1F), MAP_NUM(SIX_ISLAND_POKEMON_CENTER_1F)}
+// This array defines the map where you actually respawn when you black out,
+// based on where you last checkpointed.
+// This is either the player's house or a Pokémon Center.
+// The data are u16 instead of u8 for reasons unknown.
+const u16 sBlackoutRespawnHealCenterMapIdxs[][2] = {
+ [SPAWN_PALLET_TOWN - 1] = {MAP_GROUP(PALLET_TOWN_PLAYERS_HOUSE_1F), MAP_NUM(PALLET_TOWN_PLAYERS_HOUSE_1F)},
+ [SPAWN_VIRIDIAN_CITY - 1] = {MAP_GROUP(VIRIDIAN_CITY_POKEMON_CENTER_1F), MAP_NUM(VIRIDIAN_CITY_POKEMON_CENTER_1F)},
+ [SPAWN_PEWTER_CITY - 1] = {MAP_GROUP(PEWTER_CITY_POKEMON_CENTER_1F), MAP_NUM(PEWTER_CITY_POKEMON_CENTER_1F)},
+ [SPAWN_CERULEAN_CITY - 1] = {MAP_GROUP(CERULEAN_CITY_POKEMON_CENTER_1F), MAP_NUM(CERULEAN_CITY_POKEMON_CENTER_1F)},
+ [SPAWN_LAVENDER_TOWN - 1] = {MAP_GROUP(LAVENDER_TOWN_POKEMON_CENTER_1F), MAP_NUM(LAVENDER_TOWN_POKEMON_CENTER_1F)},
+ [SPAWN_VERMILION_CITY - 1] = {MAP_GROUP(VERMILION_CITY_POKEMON_CENTER_1F), MAP_NUM(VERMILION_CITY_POKEMON_CENTER_1F)},
+ [SPAWN_CELADON_CITY - 1] = {MAP_GROUP(CELADON_CITY_POKEMON_CENTER_1F), MAP_NUM(CELADON_CITY_POKEMON_CENTER_1F)},
+ [SPAWN_FUCHSIA_CITY - 1] = {MAP_GROUP(FUCHSIA_CITY_POKEMON_CENTER_1F), MAP_NUM(FUCHSIA_CITY_POKEMON_CENTER_1F)},
+ [SPAWN_CINNABAR_ISLAND - 1] = {MAP_GROUP(CINNABAR_ISLAND_POKEMON_CENTER_1F), MAP_NUM(CINNABAR_ISLAND_POKEMON_CENTER_1F)},
+ [SPAWN_INDIGO_PLATEAU - 1] = {MAP_GROUP(INDIGO_PLATEAU_POKEMON_CENTER_1F), MAP_NUM(INDIGO_PLATEAU_POKEMON_CENTER_1F)},
+ [SPAWN_SAFFRON_CITY - 1] = {MAP_GROUP(SAFFRON_CITY_POKEMON_CENTER_1F), MAP_NUM(SAFFRON_CITY_POKEMON_CENTER_1F)},
+ [SPAWN_ROUTE4 - 1] = {MAP_GROUP(ROUTE4_POKEMON_CENTER_1F), MAP_NUM(ROUTE4_POKEMON_CENTER_1F)},
+ [SPAWN_ROUTE10 - 1] = {MAP_GROUP(ROUTE10_POKEMON_CENTER_1F), MAP_NUM(ROUTE10_POKEMON_CENTER_1F)},
+ [SPAWN_ONE_ISLAND - 1] = {MAP_GROUP(ONE_ISLAND_POKEMON_CENTER_1F), MAP_NUM(ONE_ISLAND_POKEMON_CENTER_1F)},
+ [SPAWN_TWO_ISLAND - 1] = {MAP_GROUP(TWO_ISLAND_POKEMON_CENTER_1F), MAP_NUM(TWO_ISLAND_POKEMON_CENTER_1F)},
+ [SPAWN_THREE_ISLAND - 1] = {MAP_GROUP(THREE_ISLAND_POKEMON_CENTER_1F), MAP_NUM(THREE_ISLAND_POKEMON_CENTER_1F)},
+ [SPAWN_FOUR_ISLAND - 1] = {MAP_GROUP(FOUR_ISLAND_POKEMON_CENTER_1F), MAP_NUM(FOUR_ISLAND_POKEMON_CENTER_1F)},
+ [SPAWN_FIVE_ISLAND - 1] = {MAP_GROUP(FIVE_ISLAND_POKEMON_CENTER_1F), MAP_NUM(FIVE_ISLAND_POKEMON_CENTER_1F)},
+ [SPAWN_SEVEN_ISLAND - 1] = {MAP_GROUP(SEVEN_ISLAND_POKEMON_CENTER_1F), MAP_NUM(SEVEN_ISLAND_POKEMON_CENTER_1F)},
+ [SPAWN_SIX_ISLAND - 1] = {MAP_GROUP(SIX_ISLAND_POKEMON_CENTER_1F), MAP_NUM(SIX_ISLAND_POKEMON_CENTER_1F)}
};
-static const u8 gUnknown_83EECE8[] = {
- 0x01, 0x01, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01
+// When you respawn, your character scurries back to either their house
+// or a Pokémon Center, and hands their fainted Pokémon to their mother
+// or the Nurse for healing.
+// This array defines the index of the NPC on the map defined above
+// with whom your character interacts in this cutscene.
+static const u8 sBlackoutRespawnHealerNpcIds[] = {
+ [SPAWN_PALLET_TOWN - 1] = 1,
+ [SPAWN_VIRIDIAN_CITY - 1] = 1,
+ [SPAWN_PEWTER_CITY - 1] = 3,
+ [SPAWN_CERULEAN_CITY - 1] = 1,
+ [SPAWN_LAVENDER_TOWN - 1] = 1,
+ [SPAWN_VERMILION_CITY - 1] = 1,
+ [SPAWN_CELADON_CITY - 1] = 1,
+ [SPAWN_FUCHSIA_CITY - 1] = 1,
+ [SPAWN_CINNABAR_ISLAND - 1] = 1,
+ [SPAWN_INDIGO_PLATEAU - 1] = 2,
+ [SPAWN_SAFFRON_CITY - 1] = 1,
+ [SPAWN_ROUTE4 - 1] = 1,
+ [SPAWN_ROUTE10 - 1] = 1,
+ [SPAWN_ONE_ISLAND - 1] = 1,
+ [SPAWN_TWO_ISLAND - 1] = 1,
+ [SPAWN_THREE_ISLAND - 1] = 1,
+ [SPAWN_FOUR_ISLAND - 1] = 1,
+ [SPAWN_FIVE_ISLAND - 1] = 1,
+ [SPAWN_SEVEN_ISLAND - 1] = 1,
+ [SPAWN_SIX_ISLAND - 1] = 1
};
u32 GetHealLocationIndexFromMapGroupAndNum(u16 mapGroup, u16 mapNum)
@@ -89,7 +118,7 @@ const struct HealLocation * GetHealLocationPointer(u32 idx)
return &sSpawnPoints[idx - 1];
}
-void sub_80BFCD0(struct WarpData * warp)
+void SetBlackoutRespawnWarpAndHealerNpc(struct WarpData * warp)
{
u32 healLocationIdx;
@@ -107,26 +136,26 @@ void sub_80BFCD0(struct WarpData * warp)
else
{
healLocationIdx = GetHealLocationIndexFromMapGroupAndNum(gSaveBlock1Ptr->lastHealLocation.mapGroup, gSaveBlock1Ptr->lastHealLocation.mapNum);
- warp->mapGroup = gUnknown_83EEC98[healLocationIdx - 1][0];
- warp->mapNum = gUnknown_83EEC98[healLocationIdx - 1][1];
+ warp->mapGroup = sBlackoutRespawnHealCenterMapIdxs[healLocationIdx - 1][0];
+ warp->mapNum = sBlackoutRespawnHealCenterMapIdxs[healLocationIdx - 1][1];
warp->warpId = 0xFF;
- if (gUnknown_83EEC98[healLocationIdx - 1][0] == MAP_GROUP(PALLET_TOWN_PLAYERS_HOUSE_1F) && gUnknown_83EEC98[healLocationIdx - 1][1] == MAP_NUM(PALLET_TOWN_PLAYERS_HOUSE_1F))
+ if (sBlackoutRespawnHealCenterMapIdxs[healLocationIdx - 1][0] == MAP_GROUP(PALLET_TOWN_PLAYERS_HOUSE_1F) && sBlackoutRespawnHealCenterMapIdxs[healLocationIdx - 1][1] == MAP_NUM(PALLET_TOWN_PLAYERS_HOUSE_1F))
{
warp->x = 8;
warp->y = 5;
}
- else if (gUnknown_83EEC98[healLocationIdx - 1][0] == MAP_GROUP(INDIGO_PLATEAU_POKEMON_CENTER_1F) && gUnknown_83EEC98[healLocationIdx - 1][1] == MAP_NUM(INDIGO_PLATEAU_POKEMON_CENTER_1F))
+ else if (sBlackoutRespawnHealCenterMapIdxs[healLocationIdx - 1][0] == MAP_GROUP(INDIGO_PLATEAU_POKEMON_CENTER_1F) && sBlackoutRespawnHealCenterMapIdxs[healLocationIdx - 1][1] == MAP_NUM(INDIGO_PLATEAU_POKEMON_CENTER_1F))
{
warp->x = 13;
warp->y = 12;
}
- else if (gUnknown_83EEC98[healLocationIdx - 1][0] == MAP_GROUP(ONE_ISLAND_POKEMON_CENTER_1F) && gUnknown_83EEC98[healLocationIdx - 1][1] == MAP_NUM(ONE_ISLAND_POKEMON_CENTER_1F))
+ else if (sBlackoutRespawnHealCenterMapIdxs[healLocationIdx - 1][0] == MAP_GROUP(ONE_ISLAND_POKEMON_CENTER_1F) && sBlackoutRespawnHealCenterMapIdxs[healLocationIdx - 1][1] == MAP_NUM(ONE_ISLAND_POKEMON_CENTER_1F))
{
warp->x = 5;
warp->y = 4;
}
- else if (gUnknown_83EEC98[healLocationIdx - 1][0] == MAP_GROUP(SEVEN_ISLAND_TRAINER_TOWER_LOBBY) && gUnknown_83EEC98[healLocationIdx - 1][1] == MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_LOBBY))
+ else if (sBlackoutRespawnHealCenterMapIdxs[healLocationIdx - 1][0] == MAP_GROUP(SEVEN_ISLAND_TRAINER_TOWER_LOBBY) && sBlackoutRespawnHealCenterMapIdxs[healLocationIdx - 1][1] == MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER_LOBBY))
{
warp->x = 4;
warp->y = 11;
@@ -137,11 +166,11 @@ void sub_80BFCD0(struct WarpData * warp)
warp->x = 7;
warp->y = 4;
}
- sub_80BFE00(healLocationIdx);
+ SetBlackoutRespawnHealerNpcAsLastTalked(healLocationIdx);
}
}
-void sub_80BFE00(u32 healLocationIdx)
+void SetBlackoutRespawnHealerNpcAsLastTalked(u32 healLocationIdx)
{
- gSpecialVar_LastTalked = gUnknown_83EECE8[healLocationIdx - 1];
+ gSpecialVar_LastTalked = sBlackoutRespawnHealerNpcIds[healLocationIdx - 1];
}
diff --git a/src/prof_pc.c b/src/prof_pc.c
new file mode 100644
index 000000000..cfccbd6e3
--- /dev/null
+++ b/src/prof_pc.c
@@ -0,0 +1,108 @@
+#include "global.h"
+#include "event_data.h"
+#include "pokedex.h"
+#include "field_message_box.h"
+#include "constants/species.h"
+
+extern const u8 gUnknown_81A6D17[];
+extern const u8 gUnknown_81A6D6D[];
+extern const u8 gUnknown_81A6DDF[];
+extern const u8 gUnknown_81A6E36[];
+extern const u8 gUnknown_81A6EA4[];
+extern const u8 gUnknown_81A6F0B[];
+extern const u8 gUnknown_81A6F71[];
+extern const u8 gUnknown_81A6FAB[];
+extern const u8 gUnknown_81A6FF1[];
+extern const u8 gUnknown_81A7031[];
+extern const u8 gUnknown_81A7063[];
+extern const u8 gUnknown_81A70A5[];
+extern const u8 gUnknown_81A70D8[];
+extern const u8 gUnknown_81A7108[];
+extern const u8 gUnknown_81A7137[];
+extern const u8 gUnknown_81A7175[];
+
+u16 Special_GetPokedexCount(void)
+{
+ if (gSpecialVar_0x8004 == 0)
+ {
+ gSpecialVar_0x8005 = sub_8088EDC(0);
+ gSpecialVar_0x8006 = sub_8088EDC(1);
+ }
+ else
+ {
+ gSpecialVar_0x8005 = pokedex_count(0);
+ gSpecialVar_0x8006 = pokedex_count(1);
+ }
+ return sub_806E25C();
+}
+
+const u8 * sub_80CA424(u16 count)
+{
+ gSpecialVar_Result = FALSE;
+
+ if (count < 10)
+ return gUnknown_81A6D17;
+
+ if (count < 20)
+ return gUnknown_81A6D6D;
+
+ if (count < 30)
+ return gUnknown_81A6DDF;
+
+ if (count < 40)
+ return gUnknown_81A6E36;
+
+ if (count < 50)
+ return gUnknown_81A6EA4;
+
+ if (count < 60)
+ return gUnknown_81A6F0B;
+
+ if (count < 70)
+ return gUnknown_81A6F71;
+
+ if (count < 80)
+ return gUnknown_81A6FAB;
+
+ if (count < 90)
+ return gUnknown_81A6FF1;
+
+ if (count < 100)
+ return gUnknown_81A7031;
+
+ if (count < 110)
+ return gUnknown_81A7063;
+
+ if (count < 120)
+ return gUnknown_81A70A5;
+
+ if (count < 130)
+ return gUnknown_81A70D8;
+
+ if (count < 140)
+ return gUnknown_81A7108;
+
+ if (count < 150)
+ return gUnknown_81A7137;
+
+ if (count == 150)
+ {
+ if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_MEW), 1))
+ return gUnknown_81A7137;
+ gSpecialVar_Result = TRUE;
+ return gUnknown_81A7175;
+ }
+
+ if (count == 151)
+ {
+ gSpecialVar_Result = TRUE;
+ return gUnknown_81A7175;
+ }
+
+ return gUnknown_81A6D17;
+}
+
+void sub_80CA524(void)
+{
+ ShowFieldMessage(sub_80CA424(gSpecialVar_0x8004));
+}
diff --git a/src/text_window_graphics.c b/src/text_window_graphics.c
new file mode 100644
index 000000000..1133abbdb
--- /dev/null
+++ b/src/text_window_graphics.c
@@ -0,0 +1,58 @@
+#include "global.h"
+#include "text_window_graphics.h"
+
+static const u16 gUnknown_8470D6C[] = INCBIN_U16("graphics/text_window/unk_8470D6C.4bpp");
+static const u16 gUnknown_8470E8C[] = INCBIN_U16("graphics/text_window/unk_8470E8C.4bpp");
+static const u16 gUnk_Empty_Space_8470FAC[16] = {0};
+static const u16 gUnknown_8470FCC[] = INCBIN_U16("graphics/text_window/unk_8470FCC.4bpp");
+static const u16 gUnknown_84710EC[] = INCBIN_U16("graphics/text_window/unk_84710EC.4bpp");
+static const u16 gUnknown_847120C[] = INCBIN_U16("graphics/text_window/unk_847120C.4bpp");
+static const u16 gUnknown_847132C[] = INCBIN_U16("graphics/text_window/unk_847132C.4bpp");
+static const u16 gUnknown_847144C[] = INCBIN_U16("graphics/text_window/unk_847144C.4bpp");
+static const u16 gUnknown_847156C[] = INCBIN_U16("graphics/text_window/unk_847156C.4bpp");
+static const u16 gUnk_Empty_Space_847168C[16] = {0};
+static const u16 gUnknown_84716AC[] = INCBIN_U16("graphics/text_window/unk_84716AC.4bpp");
+static const u16 gUnknown_84717CC[] = INCBIN_U16("graphics/text_window/unk_84717CC.4bpp");
+static const u16 gUnk_Empty_Space_84718EC[16] = {0};
+static const u16 gUnknown_847190C[] = INCBIN_U16("graphics/text_window/unk_8470D6C.gbapal");
+static const u16 gUnknown_847192C[] = INCBIN_U16("graphics/text_window/unk_8470E8C.gbapal");
+static const u16 gUnknown_847194C[] = INCBIN_U16("graphics/text_window/unk_8470FCC.gbapal");
+static const u16 gUnknown_847196C[] = INCBIN_U16("graphics/text_window/unk_84710EC.gbapal");
+static const u16 gUnknown_847198C[] = INCBIN_U16("graphics/text_window/unk_847120C.gbapal");
+static const u16 gUnknown_84719AC[] = INCBIN_U16("graphics/text_window/unk_847132C.gbapal");
+static const u16 gUnknown_84719CC[] = INCBIN_U16("graphics/text_window/unk_847144C.gbapal");
+static const u16 gUnknown_84719EC[] = INCBIN_U16("graphics/text_window/unk_847156C.gbapal");
+static const u16 gUnknown_8471A0C[] = INCBIN_U16("graphics/text_window/unk_84716AC.gbapal");
+static const u16 gUnknown_8471A2C[] = INCBIN_U16("graphics/text_window/unk_84717CC.gbapal");
+
+const u16 gUnknown_8471A4C[] = INCBIN_U16("graphics/text_window/unk_8471A4C.4bpp");
+const u16 gUnknown_8471B6C[] = INCBIN_U16("graphics/text_window/unk_8471B6C.4bpp");
+
+const u16 gUnknown_8471DEC[][16] = {
+ INCBIN_U16("graphics/text_window/stdpal_0.gbapal"),
+ INCBIN_U16("graphics/text_window/stdpal_1.gbapal"),
+ INCBIN_U16("graphics/text_window/stdpal_2.gbapal"),
+ INCBIN_U16("graphics/text_window/stdpal_3.gbapal"),
+ INCBIN_U16("graphics/text_window/stdpal_4.gbapal")
+};
+
+const struct TextWindowGraphics gUnknown_8471E8C[] = {
+ {gUnknown_8470D6C, gUnknown_847190C},
+ {gUnknown_8470E8C, gUnknown_847192C},
+ {gUnknown_8470FCC, gUnknown_847194C},
+ {gUnknown_84710EC, gUnknown_847196C},
+ {gUnknown_847120C, gUnknown_847198C},
+ {gUnknown_847132C, gUnknown_84719AC},
+ {gUnknown_847144C, gUnknown_84719CC},
+ {gUnknown_847156C, gUnknown_84719EC},
+ {gUnknown_84716AC, gUnknown_8471A0C},
+ {gUnknown_84717CC, gUnknown_8471A2C}
+}; // NELEMS = 10
+
+const struct TextWindowGraphics * sub_8069788(u8 idx)
+{
+ if (idx >= 20) // if (idx >= NELEMS(gUnknown_8471E8C))
+ return &gUnknown_8471E8C[0];
+ else
+ return &gUnknown_8471E8C[idx];
+}