diff --git a/data/data_8107010.s b/data/data_8107010.s index a1a85cfd..a67be11c 100644 --- a/data/data_8107010.s +++ b/data/data_8107010.s @@ -1647,248 +1647,8 @@ gWindowBGColors: @ 8109954 .global gUnknown_8109984 gUnknown_8109984: @ 8109984 .byte 0x00, 0x01, 0x02, 0x03, 0x04, 0x02, 0x01, 0x00 + @ ??? .string "pksdir0\0" .align 2,0 -.global gStoryMissionText -gStoryMissionText: @ 8109994 -@ replacing .incbin "baserom.gba", 0x109994, 0x314 -.4byte gUnknown_8109C94 -.byte 0xff, 0xff, 0x00, 0x00 -.4byte gUnknown_8109C80 -.byte 0xff, 0xff, 0x00, 0x00 -.4byte gUnknown_8109C70 -.byte 0x00, 0x01, 0x00, 0x00 -.4byte gUnknown_8109C60 -.byte 0x02, 0x03, 0x00, 0x00 -.4byte gUnknown_8109C4C -.byte 0xff, 0xff, 0x00, 0x00 -.4byte gUnknown_8109C3C -.byte 0x04, 0x05, 0x00, 0x00 -.4byte gUnknown_8109C30 -.byte 0xff, 0xff, 0x00, 0x00 -.4byte gUnknown_8109C24 -.byte 0xff, 0xff, 0x00, 0x00 -.4byte gUnknown_8109C24 -.byte 0x06, 0x07, 0x00, 0x00 -.4byte gUnknown_8109C24 -.byte 0x08, 0x09, 0x00, 0x00 -.4byte gUnknown_8109C14 -.byte 0xff, 0x0a, 0x00, 0x00 -.4byte gUnknown_8109C00 -.byte 0x0b, 0x0c, 0x00, 0x00 -.4byte gUnknown_8109BE8 -.byte 0x0e, 0x0f, 0x00, 0x00 -.4byte gUnknown_8109BC8 -.byte 0xff, 0xff, 0x00, 0x00 -.4byte gUnknown_8109BB4 -.byte 0x10, 0x11, 0x00, 0x00 -.4byte gUnknown_8109BA0 -.byte 0xff, 0x21, 0x00, 0x00 -.4byte gUnknown_8109B8C -.byte 0xff, 0xff, 0x00, 0x00 -.4byte gUnknown_8109B78 -.byte 0xff, 0xff, 0x00, 0x00 -.4byte gUnknown_8109B60 -.byte 0xff, 0xff, 0x00, 0x00 -.4byte gUnknown_8109C30 -.byte 0xff, 0xff, 0x00, 0x00 -.4byte gUnknown_8109B4C -.byte 0x14, 0x15, 0x00, 0x00 -.4byte gUnknown_8109B38 -.byte 0x16, 0x17, 0x00, 0x00 -.4byte gUnknown_8109B24 -.byte 0x18, 0x19, 0x00, 0x00 -.4byte gUnknown_8109B10 -.byte 0xff, 0x1a, 0x00, 0x00 -.4byte gUnknown_8109AF8 -.byte 0x12, 0x13, 0x00, 0x00 -.4byte gUnknown_8109AE8 -.byte 0x1b, 0x1c, 0x00, 0x00 -.4byte gUnknown_8109AD8 -.byte 0xff, 0xff, 0x00, 0x00 -.4byte gUnknown_8109AC4 -.byte 0xff, 0xff, 0x00, 0x00 -.4byte gUnknown_8109AB0 -.byte 0xff, 0x20, 0x00, 0x00 -.4byte gUnknown_8109C14 -.byte 0xff, 0xff, 0x00, 0x00 -.4byte gUnknown_8109A94 -.byte 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00 - -.global gUnknown_8109A94 -gUnknown_8109A94: @ 8109A94 -.string "Break Gardevoir{APOSTROPHE}s curse.\0" -.align 2, 0 - -.global gUnknown_8109AB0 -gUnknown_8109AB0: @ 8109AB0 -.string "Rescue Medicham.\0" -.align 2, 0 - -.global gUnknown_8109AC4 -gUnknown_8109AC4: @ 8109AC4 -.string "Investigate Relic.\0" -.align 2, 0 - -.global gUnknown_8109AD8 -gUnknown_8109AD8: @ 8109AD8 -.string "Rescue Latias.\0" -.align 2, 0 - -.global gUnknown_8109AE8 -gUnknown_8109AE8: @ 8109AE8 -.string "Catch thief.\0" -.align 2, 0 - -.global gUnknown_8109AF8 -gUnknown_8109AF8: @ 8109AF8 -.string "Meet toughest Pokémon.\0" -.align 2, 0 - -.global gUnknown_8109B10 -gUnknown_8109B10: @ 8109B10 -.string "Mirage Pokémon 4\0" -.align 2, 0 - -.global gUnknown_8109B24 -gUnknown_8109B24: @ 8109B24 -.string "Mirage Pokémon 3\0" -.align 2, 0 - -.global gUnknown_8109B38 -gUnknown_8109B38: @ 8109B38 -.string "Mirage Pokémon 2\0" -.align 2, 0 - -.global gUnknown_8109B4C -gUnknown_8109B4C: @ 8109B4C -.string "Mirage Pokémon 1\0" -.align 2, 0 - -.global gUnknown_8109B60 -gUnknown_8109B60: @ 8109B60 -.string "Check mystery Pokémon.\0" -.align 2, 0 - -.global gUnknown_8109B78 -gUnknown_8109B78: @ 8109B78 -.string "Meet sea guardian.\0" -.align 2, 0 - -.global gUnknown_8109B8C -gUnknown_8109B8C: @ 8109B8C -.string "Explore seafloor.\0" -.align 2, 0 - -.global gUnknown_8109BA0 -gUnknown_8109BA0: @ 8109BA0 -.string "Rescue Smeargle.\0" -.align 2, 0 - -.global gUnknown_8109BB4 -gUnknown_8109BB4: @ 8109BB4 -.string "Punish bad Mankey.\0" -.align 2, 0 - -.global gUnknown_8109BC8 -gUnknown_8109BC8: @ 8109BC8 -.string "{COLOR_1 YELLOW_3}Scenario Progress Dummy{END_COLOR_TEXT_1}\0" -.align 2, 0 - -.global gUnknown_8109BE8 -gUnknown_8109BE8: @ 8109BE8 -.string "Seek Rayquaza{APOSTROPHE}s help.\0" -.align 2, 0 - -.global gUnknown_8109C00 -gUnknown_8109C00: @ 8109C00 -.string "Rescue Alakazam.\0" -.align 2, 0 - -.global gUnknown_8109C14 -gUnknown_8109C14: @ 8109C14 -.string "Meet Ninetales.\0" -.align 2, 0 - -.global gUnknown_8109C24 -gUnknown_8109C24: @ 8109C24 -.string "Fugitive\0" -.align 2, 0 - -.global gUnknown_8109C30 -gUnknown_8109C30: @ 8109C30 -.string "Meet Xatu.\0" -.align 2, 0 - -.global gUnknown_8109C3C -gUnknown_8109C3C: @ 8109C3C -.string "Rescue Shiftry.\0" -.align 2, 0 - -.global gUnknown_8109C4C -gUnknown_8109C4C: @ 8109C4C -.string "Rescue Jumpluff.\0" -.align 2, 0 - -.global gUnknown_8109C60 -gUnknown_8109C60: @ 8109C60 -.string "Rescue Metapod.\0" -.align 2, 0 - -.global gUnknown_8109C70 -gUnknown_8109C70: @ 8109C70 -.string "Rescue Diglett.\0" -.align 2, 0 - -.global gUnknown_8109C80 -gUnknown_8109C80: @ 8109C80 -.string "Rescue Magnemite.\0" -.align 2, 0 - -.global gUnknown_8109C94 -gUnknown_8109C94: @ 8109C94 -.string "Rescue Caterpie.\0" -.align 2, 0 - -.global gDummyScenarioText -gDummyScenarioText: @ 8109CA8 -.string "{COLOR_1 YELLOW_3}Scenario try dummy{END_COLOR_TEXT_1}\0" -.align 2,0 - -.global gUnknown_8109CC0 -gUnknown_8109CC0: @ 8109CC0 -.string "{COLOR_1 RED_2}???{END_COLOR_TEXT_1}\0" -.align 2,0 -@ code_80972F4.c -.string "pksdir0\0" - -.global gMeetNinetalesText -gMeetNinetalesText: @ 8109CD4 -.string "Meet Ninetales.\0" -.align 2,0 - -.global gAvoidCaptureText -gAvoidCaptureText: @ 8109CE4 -.string "Avoid capture.\0" -.align 2,0 - -.global gFinalScenarioText -gFinalScenarioText: @ 8109CF4 -@ replacing .incbin "baserom.gba", 0x109CF4, 0x3C -.string "Defeat the final Pokémon.\0" -.align 2, 0 -@ ??? -.string "pksdir0\0" -@ ??? -.string "pksdir0\0" -@ ??? -.string "pksdir0\0" -@ ???.c -.string "pksdir0\0" -@ 8109D30 -#include "dungeon/dungeon_data.inc" - -.align 2,0 - diff --git a/data/data_8109D10.s b/data/data_8109D10.s new file mode 100644 index 00000000..e370b90a --- /dev/null +++ b/data/data_8109D10.s @@ -0,0 +1,15 @@ +.section .rodata + +@ ??? +.string "pksdir0\0" +@ ??? +.string "pksdir0\0" +@ ??? +.string "pksdir0\0" +@ ???.c +.string "pksdir0\0" +@ 8109D30 +#include "dungeon/dungeon_data.inc" + +.align 2,0 + diff --git a/include/code_80972F4.h b/include/code_80972F4.h index aed85c25..67634339 100644 --- a/include/code_80972F4.h +++ b/include/code_80972F4.h @@ -6,7 +6,7 @@ // size: 0x8 typedef struct MissionText { - /* 0x0 */ u8 *text; + /* 0x0 */ const u8 *text; u8 unk4; u8 unk5; u8 unk6; @@ -26,4 +26,4 @@ const u8 *sub_80975DC(u32); //bool8 sub_8097384(s16); //bool8 sub_80973F4(s16); -#endif // GUARD_CODE_80972F4_H \ No newline at end of file +#endif // GUARD_CODE_80972F4_H diff --git a/ld_script.txt b/ld_script.txt index 0c099b76..fc8177c5 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -322,6 +322,7 @@ SECTIONS { src/code_80958E8_1.o(.text); asm/code_8096AF8.o(.text); src/code_80972F4.o(.text); + src/code_8097504.o(.text); src/code_8097670.o(.text); asm/code_8097670.o(.text); src/code_8097DD0.o(.text); @@ -545,6 +546,9 @@ SECTIONS { src/dungeon_capabilities.o(.rodata); src/dungeon_ai_targeting.o(.rodata); data/data_8107010.o(.rodata); + src/code_80972F4.o(.rodata); + src/code_8097504.o(.rodata); + data/data_8109D10.o(.rodata); src/pokemon_3.o(.rodata); src/items.o(.rodata); src/code_8048480.o(.rodata); diff --git a/src/code_80972F4.c b/src/code_80972F4.c index 6090e479..c1821e00 100644 --- a/src/code_80972F4.c +++ b/src/code_80972F4.c @@ -8,12 +8,10 @@ #include "code_80A26CC.h" #include "code_80972F4.h" -extern MissionText gStoryMissionText[]; -extern const char gFinalScenarioText[]; -extern const char gMeetNinetalesText[]; -extern const char gAvoidCaptureText[]; -extern const u8 gUnknown_8109CC0[]; -extern const u8 gDummyScenarioText[]; +#include "data/story_missions.h" + +ALIGNED(4) const u8 gDummyScenarioText[] = _("{COLOR_1 YELLOW_3}Scenario try dummy{END_COLOR_TEXT_1}"); +ALIGNED(4) const u8 gBlankMission[] = _("{COLOR_1 RED_2}???{END_COLOR_TEXT_1}"); extern void sub_800199C(u8, u8, u16, s32); extern void SaveDungeonLocation(struct unkStruct_8094924*, DungeonLocation*); @@ -392,7 +390,7 @@ void sub_8097418(s16 index,bool32 param_2) bool8 param_2_u8 = param_2; if (index_s32 != 0xd) { if ((param_2_u8) && (sub_800199C(0,0x2c,index_s32,0), index_s32 < 0x1f)) { - MissionText *mt = &gStoryMissionText[index_s32]; + const MissionText *mt = &gStoryMissionText[index_s32]; if (mt->unk4 != 0xFF) { sub_8097FA8(mt->unk4); } @@ -436,12 +434,12 @@ const u8 *GetCurrentMissionText(s16 index) { if(index < 0x1F) { - MissionText *mt = &gStoryMissionText[index]; + const MissionText *mt = &gStoryMissionText[index]; return mt->text; } else { - return gUnknown_8109CC0; + return gBlankMission; } } @@ -454,122 +452,3 @@ void sub_80974E8(void) void nullsub_208(void) { } - -bool8 sub_8097504(s16 mazeIndex) -{ - s32 mazeIndex_s32; - -#ifndef NONMATCHING - register s32 mazeIndex_s32_1 asm("r1"); -#else - s32 mazeIndex_s32_1; -#endif - s32 uVar3; - - mazeIndex_s32 = mazeIndex; - mazeIndex_s32_1 = mazeIndex_s32; - - if(mazeIndex_s32 < 17) - { - switch(mazeIndex_s32) { - case 2: - case 10: - case 11: - case 12: - uVar3 = 14; - break; - case 0: - case 1: - case 5: - case 7: - case 9: - case 14: - uVar3 = 15; - break; - case 3: - case 4: - case 6: - case 8: - return TRUE; - case 13: - uVar3 = 6; - break; - default: - return TRUE; - } - } - else - { - if (mazeIndex_s32_1 > 22) return FALSE; - if (mazeIndex_s32_1 == 22) return FALSE; - if (mazeIndex_s32_1 == 21) return FALSE; - uVar3 = 6; - } - - if (!sub_80023E4(uVar3)) { - return FALSE; - } - else { - return TRUE; - } -} - -// TODO: this should probably be bool8 but can't get a match just yet -bool32 IsMazeCompleted(s16 mazeIndex) -{ - bool32 mazeCompletion; - - mazeCompletion = sub_8001784(0, 0x2e, mazeIndex); - if (mazeCompletion) { - mazeCompletion = TRUE; - } - return mazeCompletion; -} - -void sub_80975A8(s16 param_1,u8 param_2) -{ - u16 param_1_u16 = param_1; - sub_800199C(0,0x2e,param_1_u16,param_2); -} - -const u8 *sub_80975C4(s16 index) -{ - return GetDungeonName1(sub_80A2728(index)); -} - -const u8 *sub_80975DC(u32 r0) -{ - // TODO: slight hack but matches - r0 <<= 16; - if((0xffe90000 + r0) >> 16 < 2) - if(sub_8001D08(0x3, 0xE, -1)) - return gMeetNinetalesText; - else - return gAvoidCaptureText; - else - return gFinalScenarioText; -} - -bool8 HasCompletedAllMazes(void) -{ - s32 index; - for(index = 0; index < NUM_BASIC_DUNGEON_MAZE; index++) - { - if(!(bool8)IsMazeCompleted(index)) - return FALSE; - } - return TRUE; -} - -bool8 sub_8097640(void) -{ - if(sub_8001784(0, 0x2E, 0x1F) == 0 && HasCompletedAllMazes()) - { - sub_800199C(0, 0x2E, 0x1F, 1); - return TRUE; - } - else - { - return FALSE; - } -} diff --git a/src/code_8097504.c b/src/code_8097504.c new file mode 100644 index 00000000..0d3c792f --- /dev/null +++ b/src/code_8097504.c @@ -0,0 +1,135 @@ +#include "global.h" +#include "globaldata.h" +#include "constants/dungeon.h" +#include "dungeon.h" +#include "event_flag.h" +#include "code_80A26CC.h" + +ALIGNED(4) const char gMeetNinetalesText[] = "Meet Ninetales."; +ALIGNED(4) const char gAvoidCaptureText[] = "Avoid capture."; +ALIGNED(4) const char gFinalScenarioText[] = _("Defeat the final Pokémon."); + +extern void sub_800199C(u8, u8, u16, s32); +extern u32 sub_8001784(u32, u32, u16); +extern void sub_80018D8(u8, u8, u32); + + +bool8 sub_8097504(s16 mazeIndex) +{ + s32 mazeIndex_s32; + +#ifndef NONMATCHING + register s32 mazeIndex_s32_1 asm("r1"); +#else + s32 mazeIndex_s32_1; +#endif + s32 uVar3; + + mazeIndex_s32 = mazeIndex; + mazeIndex_s32_1 = mazeIndex_s32; + + if(mazeIndex_s32 < 17) + { + switch(mazeIndex_s32) { + case 2: + case 10: + case 11: + case 12: + uVar3 = 14; + break; + case 0: + case 1: + case 5: + case 7: + case 9: + case 14: + uVar3 = 15; + break; + case 3: + case 4: + case 6: + case 8: + return TRUE; + case 13: + uVar3 = 6; + break; + default: + return TRUE; + } + } + else + { + if (mazeIndex_s32_1 > 22) return FALSE; + if (mazeIndex_s32_1 == 22) return FALSE; + if (mazeIndex_s32_1 == 21) return FALSE; + uVar3 = 6; + } + + if (!sub_80023E4(uVar3)) { + return FALSE; + } + else { + return TRUE; + } +} + +// TODO: this should probably be bool8 but can't get a match just yet +bool32 IsMazeCompleted(s16 mazeIndex) +{ + bool32 mazeCompletion; + + mazeCompletion = sub_8001784(0, 0x2e, mazeIndex); + if (mazeCompletion) { + mazeCompletion = TRUE; + } + return mazeCompletion; +} + +void sub_80975A8(s16 param_1,u8 param_2) +{ + u16 param_1_u16 = param_1; + sub_800199C(0,0x2e,param_1_u16,param_2); +} + +const u8 *sub_80975C4(s16 index) +{ + return GetDungeonName1(sub_80A2728(index)); +} + +const u8 *sub_80975DC(u32 r0) +{ + // TODO: slight hack but matches + r0 <<= 16; + if((0xffe90000 + r0) >> 16 < 2) + if(sub_8001D08(0x3, 0xE, -1)) + return gMeetNinetalesText; + else + return gAvoidCaptureText; + else + return gFinalScenarioText; +} + +bool8 HasCompletedAllMazes(void) +{ + s32 index; + for(index = 0; index < NUM_BASIC_DUNGEON_MAZE; index++) + { + if(!(bool8)IsMazeCompleted(index)) + return FALSE; + } + return TRUE; +} + +bool8 sub_8097640(void) +{ + if(sub_8001784(0, 0x2E, 0x1F) == 0 && HasCompletedAllMazes()) + { + sub_800199C(0, 0x2E, 0x1F, 1); + return TRUE; + } + else + { + return FALSE; + } +} + diff --git a/src/data/story_missions.h b/src/data/story_missions.h new file mode 100644 index 00000000..b2123634 --- /dev/null +++ b/src/data/story_missions.h @@ -0,0 +1,94 @@ +static const u8 gUnknown_8109C94[]; +static const u8 gUnknown_8109C80[]; +static const u8 gUnknown_8109C70[]; +static const u8 gUnknown_8109C60[]; +static const u8 gUnknown_8109C4C[]; +static const u8 gUnknown_8109C3C[]; +static const u8 gUnknown_8109C30[]; +static const u8 gUnknown_8109C24[]; +static const u8 gUnknown_8109C24[]; +static const u8 gUnknown_8109C24[]; +static const u8 gUnknown_8109C14[]; +static const u8 gUnknown_8109C00[]; +static const u8 gUnknown_8109BE8[]; +static const u8 gUnknown_8109BC8[]; +static const u8 gUnknown_8109BB4[]; +static const u8 gUnknown_8109BA0[]; +static const u8 gUnknown_8109B8C[]; +static const u8 gUnknown_8109B78[]; +static const u8 gUnknown_8109B60[]; +static const u8 gUnknown_8109C30[]; +static const u8 gUnknown_8109B4C[]; +static const u8 gUnknown_8109B38[]; +static const u8 gUnknown_8109B24[]; +static const u8 gUnknown_8109B10[]; +static const u8 gUnknown_8109AF8[]; +static const u8 gUnknown_8109AE8[]; +static const u8 gUnknown_8109AD8[]; +static const u8 gUnknown_8109AC4[]; +static const u8 gUnknown_8109AB0[]; +static const u8 gUnknown_8109C14[]; +static const u8 gUnknown_8109A94[]; + +static const MissionText gStoryMissionText[] = { + { gUnknown_8109C94, -1, -1, 0, 0 }, + { gUnknown_8109C80, -1, -1, 0, 0 }, + { gUnknown_8109C70, 0, 1, 0, 0 }, + { gUnknown_8109C60, 2, 3, 0, 0 }, + { gUnknown_8109C4C, -1, -1, 0, 0 }, + { gUnknown_8109C3C, 4, 5, 0, 0 }, + { gUnknown_8109C30, -1, -1, 0, 0 }, + { gUnknown_8109C24, -1, -1, 0, 0 }, + { gUnknown_8109C24, 6, 7, 0, 0 }, + { gUnknown_8109C24, 8, 9, 0, 0 }, + { gUnknown_8109C14, -1, 10, 0, 0 }, + { gUnknown_8109C00, 11, 12, 0, 0 }, + { gUnknown_8109BE8, 14, 15, 0, 0 }, + { gUnknown_8109BC8, -1, -1, 0, 0 }, + { gUnknown_8109BB4, 16, 17, 0, 0 }, + { gUnknown_8109BA0, -1, 33, 0, 0 }, + { gUnknown_8109B8C, -1, -1, 0, 0 }, + { gUnknown_8109B78, -1, -1, 0, 0 }, + { gUnknown_8109B60, -1, -1, 0, 0 }, + { gUnknown_8109C30, -1, -1, 0, 0 }, + { gUnknown_8109B4C, 20, 21, 0, 0 }, + { gUnknown_8109B38, 22, 23, 0, 0 }, + { gUnknown_8109B24, 24, 25, 0, 0 }, + { gUnknown_8109B10, -1, 26, 0, 0 }, + { gUnknown_8109AF8, 18, 19, 0, 0 }, + { gUnknown_8109AE8, 27, 28, 0, 0 }, + { gUnknown_8109AD8, -1, -1, 0, 0 }, + { gUnknown_8109AC4, -1, -1, 0, 0 }, + { gUnknown_8109AB0, -1, 32, 0, 0 }, + { gUnknown_8109C14, -1, -1, 0, 0 }, + { gUnknown_8109A94, -1, -1, 0, 0 }, + { NULL, -1, -1, 0, 0 }, +}; + +ALIGNED(4) const u8 gUnknown_8109A94[] = _("Break Gardevoir{APOSTROPHE}s curse."); +ALIGNED(4) const u8 gUnknown_8109AB0[] = _("Rescue Medicham."); +ALIGNED(4) const u8 gUnknown_8109AC4[] = _("Investigate Relic."); +ALIGNED(4) const u8 gUnknown_8109AD8[] = _("Rescue Latias."); +ALIGNED(4) const u8 gUnknown_8109AE8[] = _("Catch thief."); +ALIGNED(4) const u8 gUnknown_8109AF8[] = _("Meet toughest Pokémon."); +ALIGNED(4) const u8 gUnknown_8109B10[] = _("Mirage Pokémon 4"); +ALIGNED(4) const u8 gUnknown_8109B24[] = _("Mirage Pokémon 3"); +ALIGNED(4) const u8 gUnknown_8109B38[] = _("Mirage Pokémon 2"); +ALIGNED(4) const u8 gUnknown_8109B4C[] = _("Mirage Pokémon 1"); +ALIGNED(4) const u8 gUnknown_8109B60[] = _("Check mystery Pokémon."); +ALIGNED(4) const u8 gUnknown_8109B78[] = _("Meet sea guardian."); +ALIGNED(4) const u8 gUnknown_8109B8C[] = _("Explore seafloor."); +ALIGNED(4) const u8 gUnknown_8109BA0[] = _("Rescue Smeargle."); +ALIGNED(4) const u8 gUnknown_8109BB4[] = _("Punish bad Mankey."); +ALIGNED(4) const u8 gUnknown_8109BC8[] = _("{COLOR_1 YELLOW_3}Scenario Progress Dummy{END_COLOR_TEXT_1}"); +ALIGNED(4) const u8 gUnknown_8109BE8[] = _("Seek Rayquaza{APOSTROPHE}s help."); +ALIGNED(4) const u8 gUnknown_8109C00[] = _("Rescue Alakazam."); +ALIGNED(4) const u8 gUnknown_8109C14[] = _("Meet Ninetales."); +ALIGNED(4) const u8 gUnknown_8109C24[] = _("Fugitive"); +ALIGNED(4) const u8 gUnknown_8109C30[] = _("Meet Xatu."); +ALIGNED(4) const u8 gUnknown_8109C3C[] = _("Rescue Shiftry."); +ALIGNED(4) const u8 gUnknown_8109C4C[] = _("Rescue Jumpluff."); +ALIGNED(4) const u8 gUnknown_8109C60[] = _("Rescue Metapod."); +ALIGNED(4) const u8 gUnknown_8109C70[] = _("Rescue Diglett."); +ALIGNED(4) const u8 gUnknown_8109C80[] = _("Rescue Magnemite."); +ALIGNED(4) const u8 gUnknown_8109C94[] = _("Rescue Caterpie.");