2018-02-17 10:55:32 +01:00
|
|
|
#include "global.h"
|
|
|
|
#include "palette.h"
|
|
|
|
#include "main.h"
|
|
|
|
#include "task.h"
|
|
|
|
#include "bg.h"
|
2019-09-09 03:07:54 +02:00
|
|
|
#include "malloc.h"
|
2018-02-17 10:55:32 +01:00
|
|
|
#include "window.h"
|
|
|
|
#include "text.h"
|
|
|
|
#include "menu.h"
|
|
|
|
#include "international_string_util.h"
|
|
|
|
#include "constants/songs.h"
|
|
|
|
#include "gpu_regs.h"
|
|
|
|
#include "m4a.h"
|
|
|
|
#include "constants/rgb.h"
|
2018-08-19 01:06:10 +02:00
|
|
|
#include "trainer_pokemon_sprites.h"
|
2018-02-17 10:55:32 +01:00
|
|
|
#include "starter_choose.h"
|
|
|
|
#include "decompress.h"
|
|
|
|
#include "intro_credits_graphics.h"
|
|
|
|
#include "sound.h"
|
|
|
|
#include "trig.h"
|
|
|
|
#include "graphics.h"
|
|
|
|
#include "pokedex.h"
|
|
|
|
#include "event_data.h"
|
|
|
|
#include "random.h"
|
|
|
|
|
|
|
|
enum
|
|
|
|
{
|
|
|
|
PAGE_TITLE,
|
|
|
|
PAGE_DIRECTOR,
|
|
|
|
PAGE_ART_DIRECTOR,
|
|
|
|
PAGE_WORLD_DIRECTOR,
|
|
|
|
PAGE_LEAD_PROGRAMMER,
|
|
|
|
PAGE_PROGRAMMERS_1,
|
|
|
|
PAGE_PROGRAMMERS_2,
|
|
|
|
PAGE_PROGRAMMERS_3,
|
|
|
|
PAGE_PROGRAMMERS_4,
|
|
|
|
PAGE_GRAPHIC_DESIGNERS_1,
|
|
|
|
PAGE_GRAPHIC_DESIGNERS_2,
|
|
|
|
PAGE_GRAPHIC_DESIGNERS_3,
|
|
|
|
PAGE_MUSIC_COMPOSITION,
|
|
|
|
PAGE_SOUND_EFFECTS,
|
|
|
|
PAGE_GAME_DESIGNERS_1,
|
|
|
|
PAGE_GAME_DESIGNERS_2,
|
|
|
|
PAGE_GAME_DESIGNERS_3,
|
|
|
|
PAGE_SCENARIO_PLOT,
|
|
|
|
PAGE_SCENARIO,
|
|
|
|
PAGE_SCRIPT_DESIGNERS,
|
|
|
|
PAGE_MAP_DESIGNERS,
|
|
|
|
PAGE_BATTLE_FRONTIER_DATA,
|
|
|
|
PAGE_PARAMETRIC_DESIGNERS,
|
|
|
|
PAGE_POKEDEX_TEXT,
|
|
|
|
PAGE_ENVIRONMENT_AND_TOOL_PROGRAMS_1,
|
|
|
|
PAGE_PKMN_DESIGNERS_1,
|
|
|
|
PAGE_PKMN_DESIGNERS_2,
|
|
|
|
PAGE_PKMN_DESIGNERS_3,
|
|
|
|
PAGE_PKMN_DESIGNERS_4,
|
|
|
|
PAGE_SUPPORT_PROGRAMMERS,
|
|
|
|
PAGE_NCL_PRODUCT_TESTING,
|
|
|
|
PAGE_PACKAGE_AND_MANUAL,
|
|
|
|
PAGE_SPECIAL_THANKS_1,
|
|
|
|
PAGE_SPECIAL_THANKS_2,
|
|
|
|
PAGE_SPECIAL_THANKS_3,
|
|
|
|
PAGE_SPECIAL_THANKS_4,
|
|
|
|
PAGE_INFORMATION_SUPERVISORS,
|
|
|
|
PAGE_ARTWORK_1,
|
|
|
|
PAGE_ARTWORK_2,
|
|
|
|
PAGE_ARTWORK_3,
|
|
|
|
PAGE_COORDINATORS,
|
|
|
|
PAGE_ENGLISH_VERSION,
|
|
|
|
PAGE_TRANSLATOR,
|
|
|
|
PAGE_TEXT_EDITOR,
|
|
|
|
PAGE_NCL_COORDINATOR,
|
|
|
|
PAGE_PROGRAMMERS_5,
|
|
|
|
PAGE_GRAPHIC_DESIGNER,
|
|
|
|
PAGE_ENVIRONMENT_AND_TOOL_PROGRAMS_2,
|
|
|
|
PAGE_NOA_TESTING,
|
|
|
|
PAGE_BRAILLE_CODE_CHECK_1,
|
|
|
|
PAGE_BRAILLE_CODE_CHECK_2,
|
|
|
|
PAGE_SPECIAL_THANKS_5,
|
|
|
|
PAGE_TASK_MANAGERS,
|
|
|
|
PAGE_PRODUCERS,
|
|
|
|
PAGE_EXECUTIVE_DIRECTOR,
|
|
|
|
PAGE_EXECUTIVE_PRODUCERS_1,
|
|
|
|
PAGE_EXECUTIVE_PRODUCERS_2,
|
|
|
|
PAGE_COUNT
|
|
|
|
};
|
|
|
|
|
|
|
|
#define COLOR_DARK_GREEN RGB(7, 11, 6)
|
|
|
|
#define COLOR_LIGHT_GREEN RGB(13, 20, 12)
|
|
|
|
|
|
|
|
enum
|
|
|
|
{
|
|
|
|
TDA_0 = 0,
|
|
|
|
TDA_TASK_C_ID = 1,
|
|
|
|
TDA_TASK_E_ID = 2,
|
|
|
|
TDA_TASK_D_ID = 3,
|
|
|
|
TDA_4 = 4,
|
|
|
|
TDA_PLAYER_CYCLIST = 5,
|
|
|
|
TDA_RIVAL_CYCLIST = 6,
|
|
|
|
TDA_7 = 7, // Has something to do with the bike scene
|
|
|
|
TDA_11 = 11, // Gets set depending on whether the bike or the grass scene should be shown
|
|
|
|
TDA_12 = 12,
|
|
|
|
TDA_13 = 13,
|
|
|
|
TDA_14 = 14,
|
|
|
|
TDA_TASK_B_ID = 15,
|
|
|
|
|
|
|
|
// Appears to be responsible for text
|
|
|
|
TDB_0 = 0,
|
|
|
|
TDB_TASK_A_ID = 1,
|
|
|
|
TDB_CURRENT_PAGE = 2,
|
|
|
|
TDB_3 = 3,
|
|
|
|
|
|
|
|
TDC_0 = 0,
|
|
|
|
TDC_1 = 1,
|
|
|
|
TDC_2 = 2,
|
|
|
|
TDC_3 = 3,
|
|
|
|
TDC_4 = 4,
|
|
|
|
TDC_5 = 5,
|
|
|
|
|
|
|
|
TDD_STATE = 0,
|
|
|
|
TDD_TASK_A_ID = 1,
|
|
|
|
TDD_2 = 2,
|
|
|
|
TDD_3 = 3,
|
|
|
|
|
|
|
|
TDE_0 = 0,
|
|
|
|
TDE_1 = 1,
|
|
|
|
TDE_TASK_A_ID = 2,
|
|
|
|
};
|
|
|
|
|
2019-11-04 17:38:09 +01:00
|
|
|
#define NUM_MON_SLIDES 71
|
2019-11-03 06:33:46 +01:00
|
|
|
struct CreditsData
|
|
|
|
{
|
2019-11-04 17:38:09 +01:00
|
|
|
u16 monToShow[NUM_MON_SLIDES]; // List of Pokemon species ids that will show during the credits
|
2019-11-03 06:33:46 +01:00
|
|
|
u16 imgCounter; //how many mon images have been shown
|
|
|
|
u16 nextImgPos; //if the next image spawns left/center/right
|
2019-11-04 17:38:09 +01:00
|
|
|
u16 currShownMon; //index into monToShow
|
|
|
|
u16 numMonToShow; //number of pokemon to show, always NUM_MON_SLIDES after determine function
|
|
|
|
u16 caughtMonIds[NATIONAL_DEX_COUNT]; //temporary location to hold a condensed array of all caught pokemon
|
|
|
|
u16 numCaughtMon; //count of filled spaces in caughtMonIds
|
2021-03-05 21:13:08 +01:00
|
|
|
u16 unused[7];
|
2018-02-17 10:55:32 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
struct CreditsEntry
|
|
|
|
{
|
|
|
|
u8 var_0;
|
2019-08-17 19:32:26 +02:00
|
|
|
bool8 isTitle;
|
2018-02-17 10:55:32 +01:00
|
|
|
const u8 *text;
|
|
|
|
};
|
|
|
|
|
|
|
|
static EWRAM_DATA s16 gUnknown_0203BCE0 = 0;
|
|
|
|
static EWRAM_DATA u16 gUnknown_0203BCE2 = 0; // TASK A
|
|
|
|
EWRAM_DATA bool8 gHasHallOfFameRecords = 0;
|
|
|
|
static EWRAM_DATA u8 gUnknown_0203BCE5 = 0;
|
2019-11-03 06:33:46 +01:00
|
|
|
static EWRAM_DATA struct CreditsData *sCreditsData = {0};
|
2018-02-17 10:55:32 +01:00
|
|
|
|
|
|
|
static const u16 gUnknown_085E56F0[][16] =
|
|
|
|
{
|
|
|
|
INCBIN_U16("graphics/credits/credits_1.gbapal"),
|
|
|
|
INCBIN_U16("graphics/credits/credits_2.gbapal"),
|
|
|
|
INCBIN_U16("graphics/credits/credits_3.gbapal"),
|
|
|
|
INCBIN_U16("graphics/credits/credits_4.gbapal"),
|
|
|
|
};
|
|
|
|
|
2021-03-05 21:13:08 +01:00
|
|
|
static const u32 sCreditsCopyrightEnd_Gfx[] = INCBIN_U32("graphics/credits/the_end_copyright.4bpp.lz");
|
2018-02-17 10:55:32 +01:00
|
|
|
|
|
|
|
static void sub_81772B8(struct Sprite *sprite);
|
|
|
|
|
2019-08-17 18:01:38 +02:00
|
|
|
static const u8 sTheEnd_LetterTMap[] =
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
0, 1, 0,
|
|
|
|
0xFF, 1, 0xFF,
|
|
|
|
0xFF, 1, 0xFF,
|
|
|
|
0xFF, 1, 0xFF,
|
|
|
|
0xFF, 1, 0xFF,
|
|
|
|
};
|
|
|
|
|
2019-08-17 18:01:38 +02:00
|
|
|
static const u8 sTheEnd_LetterHMap[] =
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
1, 0xFF, 1,
|
|
|
|
1, 0xFF, 1,
|
|
|
|
1, 2, 1,
|
|
|
|
1, 0xFF, 1,
|
|
|
|
1, 0xFF, 1,
|
|
|
|
};
|
|
|
|
|
2019-08-17 18:01:38 +02:00
|
|
|
static const u8 sTheEnd_LetterEMap[] =
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
1, 0, 0,
|
|
|
|
1, 0xFF, 0xFF,
|
|
|
|
1, 2, 2,
|
|
|
|
1, 0xFF, 0xFF,
|
|
|
|
1, 0x80, 0x80,
|
|
|
|
};
|
|
|
|
|
2019-08-17 18:01:38 +02:00
|
|
|
static const u8 sTheEnd_LetterNMap[] =
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
1, 3, 1,
|
|
|
|
1, 4, 1,
|
|
|
|
1, 5, 1,
|
|
|
|
1, 0xC4, 1,
|
|
|
|
1, 0xC3, 1,
|
|
|
|
};
|
|
|
|
|
2019-08-17 18:01:38 +02:00
|
|
|
static const u8 sTheEnd_LetterDMap[] =
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
1, 6, 7,
|
|
|
|
1, 8, 9,
|
|
|
|
1, 0xFF, 1,
|
|
|
|
1, 0x88, 0x89,
|
|
|
|
1, 0x86, 0x87,
|
|
|
|
};
|
|
|
|
|
2021-03-05 21:13:08 +01:00
|
|
|
static const u8 sCreditsText_EmptyString[] = _("");
|
|
|
|
static const u8 sCreditsText_PkmnEmeraldVersion[] = _("POKéMON EMERALD VERSION");
|
|
|
|
static const u8 sCreditsText_Credits[] = _("Credits");
|
|
|
|
static const u8 sCreditsText_ExecutiveDirector[] = _("Executive Director");
|
|
|
|
static const u8 sCreditsText_Director[] = _("Director");
|
|
|
|
static const u8 sCreditsText_ArtDirector[] = _("Art Director");
|
|
|
|
static const u8 sCreditsText_BattleDirector[] = _("Battle Director");
|
|
|
|
static const u8 sCreditsText_MainProgrammer[] = _("Main Programmer");
|
|
|
|
static const u8 sCreditsText_BattleSystemPgrms[] = _("Battle System Programmers");
|
|
|
|
static const u8 sCreditsText_FieldSystemPgrms[] = _("Field System Programmer");
|
|
|
|
static const u8 sCreditsText_Programmers[] = _("Programmers");
|
|
|
|
static const u8 sCreditsText_MainGraphicDesigner[] = _("Main Graphic Designer");
|
|
|
|
static const u8 sCreditsText_GraphicDesigners[] = _("Graphic Designers");
|
|
|
|
static const u8 sCreditsText_PkmnDesigners[] = _("POKéMON Designers");
|
|
|
|
static const u8 sCreditsText_MusicComposition[] = _("Music Composition");
|
|
|
|
static const u8 sCreditsText_SoundEffectsAndPkmnVoices[] = _("Sound Effects & POKéMON Voices");
|
|
|
|
static const u8 sCreditsText_GameDesigners[] = _("Game Designers");
|
|
|
|
static const u8 sCreditsText_ScenarioPlot[] = _("Scenario Plot");
|
|
|
|
static const u8 sCreditsText_Scenario[] = _("Scenario");
|
|
|
|
static const u8 sCreditsText_ScriptDesigners[] = _("Script Designers");
|
|
|
|
static const u8 sCreditsText_MapDesigners[] = _("Map Designers");
|
|
|
|
static const u8 sCreditsText_MapDataDesigners[] = _("Map Data Designers");
|
|
|
|
static const u8 sCreditsText_ParametricDesigners[] = _("Parametric Designers");
|
|
|
|
static const u8 sCreditsText_PokedexText[] = _("POKéDEX Text");
|
|
|
|
static const u8 sCreditsText_EnvAndToolPgrms[] = _("Environment & Tool Programmers");
|
|
|
|
static const u8 sCreditsText_NCLProductTesting[] = _("NCL Product Testing");
|
|
|
|
static const u8 sCreditsText_SpecialThanks[] = _("Special Thanks");
|
|
|
|
static const u8 sCreditsText_Coordinators[] = _("Coordinators");
|
|
|
|
static const u8 sCreditsText_Producers[] = _("Producers");
|
|
|
|
static const u8 sCreditsText_ExecProducers[] = _("Executive Producers");
|
|
|
|
static const u8 sCreditsText_InfoSupervisors[] = _("Information Supervisors");
|
|
|
|
static const u8 sCreditsText_TaskManagers[] = _("Task Managers");
|
|
|
|
static const u8 sCreditsText_BrailleCodeCheck[] = _("Braille Code Check");
|
|
|
|
static const u8 sCreditsText_WorldDirector[] = _("World Director");
|
|
|
|
static const u8 sCreditsText_BattleFrontierData[] = _("Battle Frontier Data");
|
|
|
|
static const u8 sCreditsText_SupportProgrammers[] = _("Support Programmers");
|
|
|
|
static const u8 sCreditsText_Artwork[] = _("Artwork");
|
|
|
|
static const u8 sCreditsText_LeadProgrammer[] = _("Lead Programmer");
|
|
|
|
static const u8 sCreditsText_LeadGraphicArtist[] = _("Lead Graphic Artist");
|
|
|
|
static const u8 sCreditsText_SatoshiTajiri[] = _("Satoshi Tajiri");
|
|
|
|
static const u8 sCreditsText_JunichiMasuda[] = _("Junichi Masuda");
|
|
|
|
static const u8 sCreditsText_KenSugimori[] = _("Ken Sugimori");
|
|
|
|
static const u8 sCreditsText_ShigekiMorimoto[] = _("Shigeki Morimoto");
|
|
|
|
static const u8 sCreditsText_TetsuyaWatanabe[] = _("Tetsuya Watanabe");
|
|
|
|
static const u8 sCreditsText_HisashiSogabe[] = _("Hisashi Sogabe");
|
|
|
|
static const u8 sCreditsText_SosukeTamada[] = _("Sosuke Tamada");
|
|
|
|
static const u8 sCreditsText_AkitoMori[] = _("Akito Mori");
|
|
|
|
static const u8 sCreditsText_KeitaKagaya[] = _("Keita Kagaya");
|
|
|
|
static const u8 sCreditsText_YoshinoriMatsuda[] = _("Yoshinori Matsuda");
|
|
|
|
static const u8 sCreditsText_HiroyukiNakamura[] = _("Hiroyuki Nakamura");
|
|
|
|
static const u8 sCreditsText_MasaoTaya[] = _("Masao Taya");
|
|
|
|
static const u8 sCreditsText_SatoshiNohara[] = _("Satoshi Nohara");
|
|
|
|
static const u8 sCreditsText_TomomichiOhta[] = _("Tomomichi Ohta");
|
|
|
|
static const u8 sCreditsText_MiyukiIwasawa[] = _("Miyuki Iwasawa");
|
|
|
|
static const u8 sCreditsText_TakenoriOhta[] = _("Takenori Ohta");
|
|
|
|
static const u8 sCreditsText_HironobuYoshida[] = _("Hironobu Yoshida");
|
|
|
|
static const u8 sCreditsText_MotofumiFujiwara[] = _("Motofumi Fujiwara");
|
|
|
|
static const u8 sCreditsText_SatoshiOhta[] = _("Satoshi Ohta");
|
|
|
|
static const u8 sCreditsText_AsukaIwashita[] = _("Asuka Iwashita");
|
|
|
|
static const u8 sCreditsText_AimiTomita[] = _("Aimi Tomita");
|
|
|
|
static const u8 sCreditsText_TakaoUnno[] = _("Takao Unno");
|
|
|
|
static const u8 sCreditsText_KanakoEo[] = _("Kanako Eo");
|
|
|
|
static const u8 sCreditsText_JunOkutani[] = _("Jun Okutani");
|
|
|
|
static const u8 sCreditsText_AtsukoNishida[] = _("Atsuko Nishida");
|
|
|
|
static const u8 sCreditsText_MuneoSaito[] = _("Muneo Saito");
|
|
|
|
static const u8 sCreditsText_RenaYoshikawa[] = _("Rena Yoshikawa");
|
|
|
|
static const u8 sCreditsText_GoIchinose[] = _("Go Ichinose");
|
|
|
|
static const u8 sCreditsText_MorikazuAoki[] = _("Morikazu Aoki");
|
|
|
|
static const u8 sCreditsText_KojiNishino[] = _("Koji Nishino");
|
|
|
|
static const u8 sCreditsText_KenjiMatsushima[] = _("Kenji Matsushima");
|
|
|
|
static const u8 sCreditsText_TetsujiOhta[] = _("Tetsuji Ohta");
|
|
|
|
static const u8 sCreditsText_HitomiSato[] = _("Hitomi Sato");
|
|
|
|
static const u8 sCreditsText_TakeshiKawachimaru[] = _("Takeshi Kawachimaru");
|
|
|
|
static const u8 sCreditsText_TeruyukiShimoyamada[] = _("Teruyuki Shimoyamada");
|
|
|
|
static const u8 sCreditsText_ShigeruOhmori[] = _("Shigeru Ohmori");
|
|
|
|
static const u8 sCreditsText_TadashiTakahashi[] = _("Tadashi Takahashi");
|
|
|
|
static const u8 sCreditsText_ToshinobuMatsumiya[] = _("Toshinobu Matsumiya");
|
|
|
|
static const u8 sCreditsText_AkihitoTomisawa[] = _("Akihito Tomisawa");
|
|
|
|
static const u8 sCreditsText_HirokiEnomoto[] = _("Hiroki Enomoto");
|
|
|
|
static const u8 sCreditsText_KazuyukiTerada[] = _("Kazuyuki Terada");
|
|
|
|
static const u8 sCreditsText_YuriSakurai[] = _("Yuri Sakurai");
|
|
|
|
static const u8 sCreditsText_HiromiSagawa[] = _("Hiromi Sagawa");
|
|
|
|
static const u8 sCreditsText_KenjiTominaga[] = _("Kenji Tominaga");
|
|
|
|
static const u8 sCreditsText_YoshioTajiri[] = _("Yoshio Tajiri");
|
|
|
|
static const u8 sCreditsText_TeikoSasaki[] = _("Teiko Sasaki");
|
|
|
|
static const u8 sCreditsText_SachikoHamano[] = _("Sachiko Hamano");
|
|
|
|
static const u8 sCreditsText_ChieMatsumiya[] = _("Chie Matsumiya");
|
|
|
|
static const u8 sCreditsText_AkikoShinozaki[] = _("Akiko Shinozaki");
|
|
|
|
static const u8 sCreditsText_AstukoFujii[] = _("Astuko Fujii");
|
|
|
|
static const u8 sCreditsText_NozomuSaito[] = _("Nozomu Saito");
|
|
|
|
static const u8 sCreditsText_KenkichiToyama[] = _("Kenkichi Toyama");
|
|
|
|
static const u8 sCreditsText_SuguruNakatsui[] = _("Suguru Nakatsui");
|
|
|
|
static const u8 sCreditsText_YumiFunasaka[] = _("Yumi Funasaka");
|
|
|
|
static const u8 sCreditsText_NaokoYanase[] = _("Naoko Yanase");
|
|
|
|
static const u8 sCreditsText_NCLSuperMarioClub[] = _("NCL Super Mario Club");
|
|
|
|
static const u8 sCreditsText_AtsushiTada[] = _("Atsushi Tada");
|
|
|
|
static const u8 sCreditsText_TakahiroOhnishi[] = _("Takahiro Ohnishi");
|
|
|
|
static const u8 sCreditsText_NorihideOkamura[] = _("Norihide Okamura");
|
|
|
|
static const u8 sCreditsText_HiroNakamura[] = _("Hiro Nakamura");
|
|
|
|
static const u8 sCreditsText_HiroyukiUesugi[] = _("Hiroyuki Uesugi");
|
|
|
|
static const u8 sCreditsText_TerukiMurakawa[] = _("Teruki Murakawa");
|
|
|
|
static const u8 sCreditsText_AkiraKinashi[] = _("Akira Kinashi");
|
|
|
|
static const u8 sCreditsText_MichikoTakizawa[] = _("Michiko Takizawa");
|
|
|
|
static const u8 sCreditsText_MakikoTakada[] = _("Makiko Takada");
|
|
|
|
static const u8 sCreditsText_TakanaoKondo[] = _("Takanao Kondo");
|
|
|
|
static const u8 sCreditsText_AiMashima[] = _("Ai Mashima");
|
|
|
|
static const u8 sCreditsText_GakujiNomoto[] = _("Gakuji Nomoto");
|
|
|
|
static const u8 sCreditsText_TakehiroIzushi[] = _("Takehiro Izushi");
|
|
|
|
static const u8 sCreditsText_HitoshiYamagami[] = _("Hitoshi Yamagami");
|
|
|
|
static const u8 sCreditsText_KyokoWatanabe[] = _("Kyoko Watanabe");
|
|
|
|
static const u8 sCreditsText_TakaoNakano[] = _("Takao Nakano");
|
|
|
|
static const u8 sCreditsText_HiroyukiJinnai[] = _("Hiroyuki Jinnai");
|
|
|
|
static const u8 sCreditsText_HiroakiTsuru[] = _("Hiroaki Tsuru");
|
|
|
|
static const u8 sCreditsText_TsunekazIshihara[] = _("Tsunekaz Ishihara");
|
|
|
|
static const u8 sCreditsText_SatoruIwata[] = _("Satoru Iwata");
|
|
|
|
static const u8 sCreditsText_KazuyaSuyama[] = _("Kazuya Suyama");
|
|
|
|
static const u8 sCreditsText_SatoshiMitsuhara[] = _("Satoshi Mitsuhara");
|
|
|
|
static const u8 sCreditsText_JapanBrailleLibrary[] = _("Japan Braille Library");
|
|
|
|
static const u8 sCreditsText_TomotakaKomura[] = _("Tomotaka Komura");
|
|
|
|
static const u8 sCreditsText_MikikoOhhashi[] = _("Mikiko Ohhashi");
|
|
|
|
static const u8 sCreditsText_DaisukeHoshino[] = _("Daisuke Hoshino");
|
|
|
|
static const u8 sCreditsText_KenjiroIto[] = _("Kenjiro Ito");
|
|
|
|
static const u8 sCreditsText_RuiKawaguchi[] = _("Rui Kawaguchi");
|
|
|
|
static const u8 sCreditsText_ShunsukeKohori[] = _("Shunsuke Kohori");
|
|
|
|
static const u8 sCreditsText_SachikoNakamichi[] = _("Sachiko Nakamichi");
|
|
|
|
static const u8 sCreditsText_FujikoNomura[] = _("Fujiko Nomura");
|
|
|
|
static const u8 sCreditsText_KazukiYoshihara[] = _("Kazuki Yoshihara");
|
|
|
|
static const u8 sCreditsText_RetsujiNomoto[] = _("Retsuji Nomoto");
|
|
|
|
static const u8 sCreditsText_AzusaTajima[] = _("Azusa Tajima");
|
|
|
|
static const u8 sCreditsText_ShusakuEgami[] = _("Shusaku Egami");
|
|
|
|
static const u8 sCreditsText_PackageAndManual[] = _("Package & Manual Illustration");
|
|
|
|
static const u8 sCreditsText_EnglishVersion[] = _("English Version Coordinators");
|
|
|
|
static const u8 sCreditsText_Translator[] = _("Translator");
|
|
|
|
static const u8 sCreditsText_TextEditor[] = _("Text Editor");
|
|
|
|
static const u8 sCreditsText_NCLCoordinator[] = _("NCL Coordinator");
|
|
|
|
static const u8 sCreditsText_GraphicDesigner[] = _("Graphic Designer");
|
|
|
|
static const u8 sCreditsText_NOAProductTesting[] = _("NOA Product Testing");
|
|
|
|
static const u8 sCreditsText_HideyukiNakajima[] = _("Hideyuki Nakajima");
|
|
|
|
static const u8 sCreditsText_HidenoriSaeki[] = _("Hidenori Saeki");
|
|
|
|
static const u8 sCreditsText_YokoWatanabe[] = _("Yoko Watanabe");
|
|
|
|
static const u8 sCreditsText_SakaeKimura[] = _("Sakae Kimura");
|
|
|
|
static const u8 sCreditsText_ChiakiShinkai[] = _("Chiaki Shinkai");
|
|
|
|
static const u8 sCreditsText_SethMcMahill[] = _("Seth McMahill");
|
|
|
|
static const u8 sCreditsText_NobOgasawara[] = _("Nob Ogasawara");
|
|
|
|
static const u8 sCreditsText_TeresaLillygren[] = _("Teresa Lillygren");
|
|
|
|
static const u8 sCreditsText_KimikoNakamichi[] = _("Kimiko Nakamichi");
|
|
|
|
static const u8 sCreditsText_SouichiYamamoto[] = _("Souichi Yamamoto");
|
|
|
|
static const u8 sCreditsText_YuichiroIto[] = _("Yuichiro Ito");
|
|
|
|
static const u8 sCreditsText_ThomasHertzog[] = _("Thomas Hertzog");
|
|
|
|
static const u8 sCreditsText_MikaKurosawa[] = _("Mika Kurosawa");
|
|
|
|
static const u8 sCreditsText_NationalFederationBlind[] = _("National Federation of the Blind");
|
|
|
|
static const u8 sCreditsText_PatriciaAMaurer[] = _("Patricia A. Maurer");
|
|
|
|
static const u8 sCreditsText_EuropeanBlindUnion[] = _("European Blind Union");
|
|
|
|
static const u8 sCreditsText_AustralianBrailleAuthority[] = _("Australian Braille Authority");
|
|
|
|
static const u8 sCreditsText_RoyalNewZealandFederationBlind[] = _("Royal New Zealand Federation for the Blind");
|
|
|
|
static const u8 sCreditsText_MotoyasuTojima[] = _("Motoyasu Tojima");
|
|
|
|
static const u8 sCreditsText_NicolaPrattBarlow[] = _("Nicola Pratt-Barlow");
|
|
|
|
static const u8 sCreditsText_ShellieDow[] = _("Shellie Dow");
|
|
|
|
static const u8 sCreditsText_ErikJohnson[] = _("Erik Johnson");
|
|
|
|
static const struct CreditsEntry sCreditsEntry_EmptyString[] = { 0, FALSE, sCreditsText_EmptyString};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_PkmnEmeraldVersion[] = { 7, TRUE, sCreditsText_PkmnEmeraldVersion};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_Credits[] = {11, TRUE, sCreditsText_Credits};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_ExecutiveDirector[] = { 8, TRUE, sCreditsText_ExecutiveDirector};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_Director[] = {12, TRUE, sCreditsText_Director};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_ArtDirector[] = {10, TRUE, sCreditsText_ArtDirector};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_BattleDirector[] = {10, TRUE, sCreditsText_BattleDirector};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_MainProgrammer[] = {10, TRUE, sCreditsText_MainProgrammer};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_BattleSystemPgrms[] = { 8, TRUE, sCreditsText_BattleSystemPgrms};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_FieldSystemPgrms[] = { 7, TRUE, sCreditsText_FieldSystemPgrms};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_Programmers[] = {12, TRUE, sCreditsText_Programmers};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_MainGraphicDesigner[] = { 7, TRUE, sCreditsText_MainGraphicDesigner};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_GraphicDesigners[] = { 9, TRUE, sCreditsText_GraphicDesigners};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_PkmnDesigners[] = {10, TRUE, sCreditsText_PkmnDesigners};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_MusicComposition[] = {13, TRUE, sCreditsText_MusicComposition};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_SoundEffectsAndPkmnVoices[] = { 4, TRUE, sCreditsText_SoundEffectsAndPkmnVoices};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_GameDesigners[] = {11, TRUE, sCreditsText_GameDesigners};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_ScenarioPlot[] = {11, TRUE, sCreditsText_ScenarioPlot};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_Scenario[] = {13, TRUE, sCreditsText_Scenario};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_ScriptDesigners[] = {10, TRUE, sCreditsText_ScriptDesigners};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_MapDesigners[] = {11, TRUE, sCreditsText_MapDesigners};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_MapDataDesigners[] = { 9, TRUE, sCreditsText_MapDataDesigners};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_ParametricDesigners[] = { 9, TRUE, sCreditsText_ParametricDesigners};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_PokedexText[] = {11, TRUE, sCreditsText_PokedexText};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_EnvAndToolPgrms[] = { 6, TRUE, sCreditsText_EnvAndToolPgrms};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_NCLProductTesting[] = {11, TRUE, sCreditsText_NCLProductTesting};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_SpecialThanks[] = {10, TRUE, sCreditsText_SpecialThanks};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_Coordinators[] = {11, TRUE, sCreditsText_Coordinators};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_Producers[] = {11, TRUE, sCreditsText_Producers};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_ExecProducers[] = { 7, TRUE, sCreditsText_ExecProducers};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_InfoSupervisors[] = {10, TRUE, sCreditsText_InfoSupervisors};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_TaskManagers[] = { 8, TRUE, sCreditsText_TaskManagers};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_BrailleCodeCheck[] = {10, TRUE, sCreditsText_BrailleCodeCheck};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_WorldDirector[] = {10, TRUE, sCreditsText_WorldDirector};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_BattleFrontierData[] = { 8, TRUE, sCreditsText_BattleFrontierData};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_SupportProgrammers[] = {10, TRUE, sCreditsText_SupportProgrammers};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_Artwork[] = {12, TRUE, sCreditsText_Artwork};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_LeadProgrammer[] = {10, TRUE, sCreditsText_LeadProgrammer};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_LeadGraphicArtist[] = { 9, TRUE, sCreditsText_LeadGraphicArtist};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_SatoshiTajiri[] = {11, FALSE, sCreditsText_SatoshiTajiri};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_JunichiMasuda[] = {11, FALSE, sCreditsText_JunichiMasuda};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_KenSugimori[] = {11, FALSE, sCreditsText_KenSugimori};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_ShigekiMorimoto[] = {11, FALSE, sCreditsText_ShigekiMorimoto};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_TetsuyaWatanabe[] = {11, FALSE, sCreditsText_TetsuyaWatanabe};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_HisashiSogabe[] = {11, FALSE, sCreditsText_HisashiSogabe};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_SosukeTamada[] = {11, FALSE, sCreditsText_SosukeTamada};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_AkitoMori[] = {11, FALSE, sCreditsText_AkitoMori};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_KeitaKagaya[] = {11, FALSE, sCreditsText_KeitaKagaya};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_YoshinoriMatsuda[] = {11, FALSE, sCreditsText_YoshinoriMatsuda};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_HiroyukiNakamura[] = {11, FALSE, sCreditsText_HiroyukiNakamura};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_MasaoTaya[] = {11, FALSE, sCreditsText_MasaoTaya};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_SatoshiNohara[] = {11, FALSE, sCreditsText_SatoshiNohara};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_TomomichiOhta[] = {11, FALSE, sCreditsText_TomomichiOhta};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_MiyukiIwasawa[] = {11, FALSE, sCreditsText_MiyukiIwasawa};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_TakenoriOhta[] = {11, FALSE, sCreditsText_TakenoriOhta};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_HironobuYoshida[] = {11, FALSE, sCreditsText_HironobuYoshida};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_MotofumiFujiwara[] = {11, FALSE, sCreditsText_MotofumiFujiwara};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_SatoshiOhta[] = {11, FALSE, sCreditsText_SatoshiOhta};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_AsukaIwashita[] = {11, FALSE, sCreditsText_AsukaIwashita};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_AimiTomita[] = {11, FALSE, sCreditsText_AimiTomita};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_TakaoUnno[] = {11, FALSE, sCreditsText_TakaoUnno};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_KanakoEo[] = {11, FALSE, sCreditsText_KanakoEo};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_JunOkutani[] = {11, FALSE, sCreditsText_JunOkutani};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_AtsukoNishida[] = {11, FALSE, sCreditsText_AtsukoNishida};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_MuneoSaito[] = {11, FALSE, sCreditsText_MuneoSaito};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_RenaYoshikawa[] = {11, FALSE, sCreditsText_RenaYoshikawa};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_GoIchinose[] = {11, FALSE, sCreditsText_GoIchinose};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_MorikazuAoki[] = {11, FALSE, sCreditsText_MorikazuAoki};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_KojiNishino[] = {11, FALSE, sCreditsText_KojiNishino};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_KenjiMatsushima[] = {11, FALSE, sCreditsText_KenjiMatsushima};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_TetsujiOhta[] = {11, FALSE, sCreditsText_TetsujiOhta};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_HitomiSato[] = {11, FALSE, sCreditsText_HitomiSato};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_TakeshiKawachimaru[] = {11, FALSE, sCreditsText_TakeshiKawachimaru};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_TeruyukiShimoyamada[] = {11, FALSE, sCreditsText_TeruyukiShimoyamada};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_ShigeruOhmori[] = {11, FALSE, sCreditsText_ShigeruOhmori};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_TadashiTakahashi[] = {11, FALSE, sCreditsText_TadashiTakahashi};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_ToshinobuMatsumiya[] = {11, FALSE, sCreditsText_ToshinobuMatsumiya};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_AkihitoTomisawa[] = {11, FALSE, sCreditsText_AkihitoTomisawa};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_HirokiEnomoto[] = {11, FALSE, sCreditsText_HirokiEnomoto};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_KazuyukiTerada[] = {11, FALSE, sCreditsText_KazuyukiTerada};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_YuriSakurai[] = {11, FALSE, sCreditsText_YuriSakurai};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_HiromiSagawa[] = {11, FALSE, sCreditsText_HiromiSagawa};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_KenjiTominaga[] = {11, FALSE, sCreditsText_KenjiTominaga};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_YoshioTajiri[] = {11, FALSE, sCreditsText_YoshioTajiri};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_TeikoSasaki[] = {11, FALSE, sCreditsText_TeikoSasaki};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_SachikoHamano[] = {11, FALSE, sCreditsText_SachikoHamano};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_ChieMatsumiya[] = {11, FALSE, sCreditsText_ChieMatsumiya};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_AkikoShinozaki[] = {11, FALSE, sCreditsText_AkikoShinozaki};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_AstukoFujii[] = {11, FALSE, sCreditsText_AstukoFujii};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_NozomuSaito[] = {11, FALSE, sCreditsText_NozomuSaito};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_KenkichiToyama[] = {11, FALSE, sCreditsText_KenkichiToyama};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_SuguruNakatsui[] = {11, FALSE, sCreditsText_SuguruNakatsui};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_YumiFunasaka[] = {11, FALSE, sCreditsText_YumiFunasaka};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_NaokoYanase[] = {11, FALSE, sCreditsText_NaokoYanase};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_NCLSuperMarioClub[] = {11, FALSE, sCreditsText_NCLSuperMarioClub};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_AtsushiTada[] = {11, FALSE, sCreditsText_AtsushiTada};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_TakahiroOhnishi[] = {11, FALSE, sCreditsText_TakahiroOhnishi};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_NorihideOkamura[] = {11, FALSE, sCreditsText_NorihideOkamura};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_HiroNakamura[] = {11, FALSE, sCreditsText_HiroNakamura};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_HiroyukiUesugi[] = {11, FALSE, sCreditsText_HiroyukiUesugi};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_TerukiMurakawa[] = {11, FALSE, sCreditsText_TerukiMurakawa};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_AkiraKinashi[] = {11, FALSE, sCreditsText_AkiraKinashi};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_MichikoTakizawa[] = {11, FALSE, sCreditsText_MichikoTakizawa};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_MakikoTakada[] = {11, FALSE, sCreditsText_MakikoTakada};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_TakanaoKondo[] = {11, FALSE, sCreditsText_TakanaoKondo};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_AiMashima[] = {11, FALSE, sCreditsText_AiMashima};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_GakujiNomoto[] = {11, FALSE, sCreditsText_GakujiNomoto};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_TakehiroIzushi[] = {11, FALSE, sCreditsText_TakehiroIzushi};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_HitoshiYamagami[] = {11, FALSE, sCreditsText_HitoshiYamagami};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_KyokoWatanabe[] = {11, FALSE, sCreditsText_KyokoWatanabe};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_TakaoNakano[] = {11, FALSE, sCreditsText_TakaoNakano};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_HiroyukiJinnai[] = {11, FALSE, sCreditsText_HiroyukiJinnai};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_HiroakiTsuru[] = {11, FALSE, sCreditsText_HiroakiTsuru};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_TsunekazIshihara[] = {11, FALSE, sCreditsText_TsunekazIshihara};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_SatoruIwata[] = {11, FALSE, sCreditsText_SatoruIwata};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_KazuyaSuyama[] = {11, FALSE, sCreditsText_KazuyaSuyama};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_SatoshiMitsuhara[] = {11, FALSE, sCreditsText_SatoshiMitsuhara};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_JapanBrailleLibrary[] = { 9, FALSE, sCreditsText_JapanBrailleLibrary};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_TomotakaKomura[] = {11, FALSE, sCreditsText_TomotakaKomura};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_MikikoOhhashi[] = {11, FALSE, sCreditsText_MikikoOhhashi};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_DaisukeHoshino[] = {11, FALSE, sCreditsText_DaisukeHoshino};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_KenjiroIto[] = {11, FALSE, sCreditsText_KenjiroIto};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_RuiKawaguchi[] = {11, FALSE, sCreditsText_RuiKawaguchi};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_ShunsukeKohori[] = {11, FALSE, sCreditsText_ShunsukeKohori};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_SachikoNakamichi[] = {11, FALSE, sCreditsText_SachikoNakamichi};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_FujikoNomura[] = {11, FALSE, sCreditsText_FujikoNomura};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_KazukiYoshihara[] = {11, FALSE, sCreditsText_KazukiYoshihara};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_RetsujiNomoto[] = {11, FALSE, sCreditsText_RetsujiNomoto};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_AzusaTajima[] = {11, FALSE, sCreditsText_AzusaTajima};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_ShusakuEgami[] = {11, FALSE, sCreditsText_ShusakuEgami};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_PackageAndManual[] = { 0, TRUE, sCreditsText_PackageAndManual};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_EnglishVersion[] = { 0, TRUE, sCreditsText_EnglishVersion};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_Translator[] = { 0, TRUE, sCreditsText_Translator};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_TextEditor[] = { 0, TRUE, sCreditsText_TextEditor};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_NCLCoordinator[] = { 0, TRUE, sCreditsText_NCLCoordinator};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_GraphicDesigner[] = { 0, TRUE, sCreditsText_GraphicDesigner};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_NOAProductTesting[] = { 0, TRUE, sCreditsText_NOAProductTesting};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_HideyukiNakajima[] = { 0, FALSE, sCreditsText_HideyukiNakajima};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_HidenoriSaeki[] = { 0, FALSE, sCreditsText_HidenoriSaeki};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_YokoWatanabe[] = { 0, FALSE, sCreditsText_YokoWatanabe};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_SakaeKimura[] = { 0, FALSE, sCreditsText_SakaeKimura};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_ChiakiShinkai[] = { 0, FALSE, sCreditsText_ChiakiShinkai};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_SethMcMahill[] = { 0, FALSE, sCreditsText_SethMcMahill};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_NobOgasawara[] = { 0, FALSE, sCreditsText_NobOgasawara};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_TeresaLillygren[] = { 0, FALSE, sCreditsText_TeresaLillygren};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_KimikoNakamichi[] = { 0, FALSE, sCreditsText_KimikoNakamichi};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_SouichiYamamoto[] = { 0, FALSE, sCreditsText_SouichiYamamoto};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_YuichiroIto[] = { 0, FALSE, sCreditsText_YuichiroIto};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_ThomasHertzog[] = { 0, FALSE, sCreditsText_ThomasHertzog};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_MikaKurosawa[] = { 0, FALSE, sCreditsText_MikaKurosawa};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_NationalFederationBlind[] = { 0, FALSE, sCreditsText_NationalFederationBlind};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_PatriciaAMaurer[] = { 0, FALSE, sCreditsText_PatriciaAMaurer};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_EuropeanBlindUnion[] = { 0, FALSE, sCreditsText_EuropeanBlindUnion};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_AustralianBrailleAuthority[] = { 0, FALSE, sCreditsText_AustralianBrailleAuthority};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_RoyalNewZealandFederationBlind[] = { 0, FALSE, sCreditsText_RoyalNewZealandFederationBlind};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_MotoyasuTojima[] = { 0, FALSE, sCreditsText_MotoyasuTojima};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_NicolaPrattBarlow[] = { 0, FALSE, sCreditsText_NicolaPrattBarlow};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_ShellieDow[] = { 0, FALSE, sCreditsText_ShellieDow};
|
|
|
|
static const struct CreditsEntry sCreditsEntry_ErikJohnson[] = { 0, FALSE, sCreditsText_ErikJohnson};
|
|
|
|
|
|
|
|
#define _ sCreditsEntry_EmptyString
|
2018-02-17 10:55:32 +01:00
|
|
|
static const struct CreditsEntry *const gCreditsEntryPointerTable[][5] =
|
|
|
|
{
|
|
|
|
{
|
|
|
|
_,
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_PkmnEmeraldVersion,
|
|
|
|
sCreditsEntry_Credits,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
_
|
|
|
|
},
|
|
|
|
{
|
|
|
|
_,
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_Director,
|
|
|
|
sCreditsEntry_ShigekiMorimoto,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
_,
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_ArtDirector,
|
|
|
|
sCreditsEntry_KenSugimori,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
_,
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_WorldDirector,
|
|
|
|
sCreditsEntry_JunichiMasuda,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_LeadProgrammer,
|
|
|
|
sCreditsEntry_HisashiSogabe,
|
|
|
|
sCreditsEntry_LeadGraphicArtist,
|
|
|
|
sCreditsEntry_MotofumiFujiwara,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_Programmers,
|
|
|
|
sCreditsEntry_HisashiSogabe,
|
|
|
|
sCreditsEntry_TomomichiOhta,
|
|
|
|
sCreditsEntry_NozomuSaito,
|
|
|
|
sCreditsEntry_EmptyString,
|
2018-02-17 10:55:32 +01:00
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_Programmers,
|
|
|
|
sCreditsEntry_AkitoMori,
|
|
|
|
sCreditsEntry_HiroyukiNakamura,
|
|
|
|
sCreditsEntry_MasaoTaya,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_Programmers,
|
|
|
|
sCreditsEntry_SatoshiNohara,
|
|
|
|
sCreditsEntry_MiyukiIwasawa,
|
|
|
|
sCreditsEntry_YoshinoriMatsuda,
|
|
|
|
sCreditsEntry_KeitaKagaya,
|
2018-02-17 10:55:32 +01:00
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_Programmers,
|
|
|
|
sCreditsEntry_TetsuyaWatanabe,
|
|
|
|
sCreditsEntry_SosukeTamada,
|
|
|
|
sCreditsEntry_TakenoriOhta,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
_,
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_GraphicDesigners,
|
|
|
|
sCreditsEntry_MotofumiFujiwara,
|
|
|
|
sCreditsEntry_SatoshiOhta,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_GraphicDesigners,
|
|
|
|
sCreditsEntry_KenkichiToyama,
|
|
|
|
sCreditsEntry_AsukaIwashita,
|
|
|
|
sCreditsEntry_TakaoUnno,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_GraphicDesigners,
|
|
|
|
sCreditsEntry_KenSugimori,
|
|
|
|
sCreditsEntry_HironobuYoshida,
|
|
|
|
sCreditsEntry_AimiTomita,
|
|
|
|
sCreditsEntry_KanakoEo,
|
2018-02-17 10:55:32 +01:00
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_MusicComposition,
|
|
|
|
sCreditsEntry_GoIchinose,
|
|
|
|
sCreditsEntry_JunichiMasuda,
|
|
|
|
sCreditsEntry_MorikazuAoki,
|
|
|
|
sCreditsEntry_HitomiSato,
|
2018-02-17 10:55:32 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
_,
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_SoundEffectsAndPkmnVoices,
|
|
|
|
sCreditsEntry_GoIchinose,
|
|
|
|
sCreditsEntry_MorikazuAoki,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_GameDesigners,
|
|
|
|
sCreditsEntry_ShigekiMorimoto,
|
|
|
|
sCreditsEntry_TeruyukiShimoyamada,
|
|
|
|
sCreditsEntry_TakeshiKawachimaru,
|
|
|
|
sCreditsEntry_AkihitoTomisawa,
|
2018-02-17 10:55:32 +01:00
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_GameDesigners,
|
|
|
|
sCreditsEntry_SuguruNakatsui,
|
|
|
|
sCreditsEntry_TetsujiOhta,
|
|
|
|
sCreditsEntry_HitomiSato,
|
|
|
|
sCreditsEntry_KenjiMatsushima,
|
2018-02-17 10:55:32 +01:00
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_GameDesigners,
|
|
|
|
sCreditsEntry_JunichiMasuda,
|
|
|
|
sCreditsEntry_KojiNishino,
|
|
|
|
sCreditsEntry_ShigeruOhmori,
|
|
|
|
sCreditsEntry_TadashiTakahashi,
|
2018-02-17 10:55:32 +01:00
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_ScenarioPlot,
|
|
|
|
sCreditsEntry_AkihitoTomisawa,
|
|
|
|
sCreditsEntry_JunichiMasuda,
|
|
|
|
sCreditsEntry_KojiNishino,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_Scenario,
|
|
|
|
sCreditsEntry_AkihitoTomisawa,
|
|
|
|
sCreditsEntry_HitomiSato,
|
|
|
|
sCreditsEntry_ToshinobuMatsumiya,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_ScriptDesigners,
|
|
|
|
sCreditsEntry_TomomichiOhta,
|
|
|
|
sCreditsEntry_SatoshiNohara,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_MapDesigners,
|
|
|
|
sCreditsEntry_SuguruNakatsui,
|
|
|
|
sCreditsEntry_TeruyukiShimoyamada,
|
|
|
|
sCreditsEntry_ShigeruOhmori,
|
|
|
|
sCreditsEntry_TetsujiOhta,
|
2018-02-17 10:55:32 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
_,
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_BattleFrontierData,
|
|
|
|
sCreditsEntry_TetsujiOhta,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_ParametricDesigners,
|
|
|
|
sCreditsEntry_TeruyukiShimoyamada,
|
|
|
|
sCreditsEntry_ShigekiMorimoto,
|
|
|
|
sCreditsEntry_TetsujiOhta,
|
|
|
|
sCreditsEntry_KojiNishino,
|
2018-02-17 10:55:32 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
_,
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_PokedexText,
|
|
|
|
sCreditsEntry_KenjiMatsushima,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_EnvAndToolPgrms,
|
|
|
|
sCreditsEntry_HisashiSogabe,
|
|
|
|
sCreditsEntry_SosukeTamada,
|
|
|
|
sCreditsEntry_HiroyukiNakamura,
|
|
|
|
sCreditsEntry_AkitoMori,
|
2018-02-17 10:55:32 +01:00
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_PkmnDesigners,
|
|
|
|
sCreditsEntry_KenSugimori,
|
|
|
|
sCreditsEntry_MotofumiFujiwara,
|
|
|
|
sCreditsEntry_ShigekiMorimoto,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_PkmnDesigners,
|
|
|
|
sCreditsEntry_HironobuYoshida,
|
|
|
|
sCreditsEntry_SatoshiOhta,
|
|
|
|
sCreditsEntry_AsukaIwashita,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_PkmnDesigners,
|
|
|
|
sCreditsEntry_TakaoUnno,
|
|
|
|
sCreditsEntry_KanakoEo,
|
|
|
|
sCreditsEntry_AimiTomita,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_PkmnDesigners,
|
|
|
|
sCreditsEntry_AtsukoNishida,
|
|
|
|
sCreditsEntry_MuneoSaito,
|
|
|
|
sCreditsEntry_RenaYoshikawa,
|
|
|
|
sCreditsEntry_JunOkutani,
|
2018-02-17 10:55:32 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
_,
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_SupportProgrammers,
|
|
|
|
sCreditsEntry_SatoshiMitsuhara,
|
|
|
|
sCreditsEntry_DaisukeHoshino,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
_,
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_NCLProductTesting,
|
|
|
|
sCreditsEntry_NCLSuperMarioClub,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
_,
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_PackageAndManual,
|
|
|
|
sCreditsEntry_KenSugimori,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
_,
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_SpecialThanks,
|
|
|
|
sCreditsEntry_KenjiTominaga,
|
|
|
|
sCreditsEntry_HirokiEnomoto,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_SpecialThanks,
|
|
|
|
sCreditsEntry_KazuyaSuyama,
|
|
|
|
sCreditsEntry_KenjiroIto,
|
|
|
|
sCreditsEntry_MichikoTakizawa,
|
|
|
|
sCreditsEntry_MakikoTakada,
|
2018-02-17 10:55:32 +01:00
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_SpecialThanks,
|
|
|
|
sCreditsEntry_MikikoOhhashi,
|
|
|
|
sCreditsEntry_TakanaoKondo,
|
|
|
|
sCreditsEntry_RuiKawaguchi,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_SpecialThanks,
|
|
|
|
sCreditsEntry_TakahiroOhnishi,
|
|
|
|
sCreditsEntry_NorihideOkamura,
|
|
|
|
sCreditsEntry_ShunsukeKohori,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_InfoSupervisors,
|
|
|
|
sCreditsEntry_KazuyukiTerada,
|
|
|
|
sCreditsEntry_YuriSakurai,
|
|
|
|
sCreditsEntry_YumiFunasaka,
|
|
|
|
sCreditsEntry_NaokoYanase,
|
2018-02-17 10:55:32 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
_,
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_Artwork,
|
|
|
|
sCreditsEntry_SachikoNakamichi,
|
|
|
|
sCreditsEntry_FujikoNomura,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
_,
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_Artwork,
|
|
|
|
sCreditsEntry_HideyukiNakajima,
|
|
|
|
sCreditsEntry_HidenoriSaeki,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_Artwork,
|
|
|
|
sCreditsEntry_YokoWatanabe,
|
|
|
|
sCreditsEntry_SakaeKimura,
|
|
|
|
sCreditsEntry_ChiakiShinkai,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_Coordinators,
|
|
|
|
sCreditsEntry_KazukiYoshihara,
|
|
|
|
sCreditsEntry_AkiraKinashi,
|
|
|
|
sCreditsEntry_RetsujiNomoto,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
_,
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_EnglishVersion,
|
|
|
|
sCreditsEntry_HiroNakamura,
|
|
|
|
sCreditsEntry_SethMcMahill,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
_,
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_Translator,
|
|
|
|
sCreditsEntry_NobOgasawara,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
_,
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_TextEditor,
|
|
|
|
sCreditsEntry_TeresaLillygren,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
_,
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_NCLCoordinator,
|
|
|
|
sCreditsEntry_KimikoNakamichi,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_Programmers,
|
|
|
|
sCreditsEntry_TerukiMurakawa,
|
|
|
|
sCreditsEntry_SouichiYamamoto,
|
|
|
|
sCreditsEntry_YuichiroIto,
|
|
|
|
sCreditsEntry_AkiraKinashi,
|
2018-02-17 10:55:32 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
_,
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_GraphicDesigner,
|
|
|
|
sCreditsEntry_AkiraKinashi,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_EnvAndToolPgrms,
|
|
|
|
sCreditsEntry_TerukiMurakawa,
|
|
|
|
sCreditsEntry_SouichiYamamoto,
|
|
|
|
sCreditsEntry_KimikoNakamichi,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_NOAProductTesting,
|
|
|
|
sCreditsEntry_ThomasHertzog,
|
|
|
|
sCreditsEntry_ErikJohnson,
|
|
|
|
sCreditsEntry_MikaKurosawa,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_BrailleCodeCheck,
|
|
|
|
sCreditsEntry_NationalFederationBlind,
|
|
|
|
sCreditsEntry_PatriciaAMaurer,
|
|
|
|
sCreditsEntry_JapanBrailleLibrary,
|
|
|
|
sCreditsEntry_EuropeanBlindUnion,
|
2018-02-17 10:55:32 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
_,
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_BrailleCodeCheck,
|
|
|
|
sCreditsEntry_AustralianBrailleAuthority,
|
|
|
|
sCreditsEntry_RoyalNewZealandFederationBlind,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_SpecialThanks,
|
|
|
|
sCreditsEntry_HiroyukiUesugi,
|
|
|
|
sCreditsEntry_MotoyasuTojima,
|
|
|
|
sCreditsEntry_NicolaPrattBarlow,
|
|
|
|
sCreditsEntry_ShellieDow,
|
2018-02-17 10:55:32 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
_,
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_TaskManagers,
|
|
|
|
sCreditsEntry_AzusaTajima,
|
|
|
|
sCreditsEntry_ShusakuEgami,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_Producers,
|
|
|
|
sCreditsEntry_HiroyukiJinnai,
|
|
|
|
sCreditsEntry_HitoshiYamagami,
|
|
|
|
sCreditsEntry_GakujiNomoto,
|
|
|
|
sCreditsEntry_HiroakiTsuru,
|
2018-02-17 10:55:32 +01:00
|
|
|
},
|
|
|
|
{
|
|
|
|
_,
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_ExecutiveDirector,
|
|
|
|
sCreditsEntry_SatoshiTajiri,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
_,
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_ExecProducers,
|
|
|
|
sCreditsEntry_SatoruIwata,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
_,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
_,
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsEntry_ExecProducers,
|
|
|
|
sCreditsEntry_TsunekazIshihara,
|
2018-02-17 10:55:32 +01:00
|
|
|
_,
|
|
|
|
_,
|
|
|
|
},
|
|
|
|
};
|
|
|
|
#undef _
|
|
|
|
|
2019-08-17 18:01:38 +02:00
|
|
|
static const struct BgTemplate sBackgroundTemplates[] =
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
{
|
|
|
|
.bg = 0,
|
|
|
|
.charBaseIndex = 2,
|
|
|
|
.mapBaseIndex = 28,
|
|
|
|
.screenSize = 0,
|
|
|
|
.paletteMode = 0,
|
|
|
|
.priority = 0,
|
|
|
|
.baseTile = 0
|
|
|
|
},
|
|
|
|
};
|
2019-08-17 18:01:38 +02:00
|
|
|
static const struct WindowTemplate sWindowTemplates[] =
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
2018-09-02 18:53:52 +02:00
|
|
|
{
|
2018-10-27 00:53:07 +02:00
|
|
|
.bg = 0,
|
2018-09-02 18:53:52 +02:00
|
|
|
.tilemapLeft = 0,
|
|
|
|
.tilemapTop = 9,
|
|
|
|
.width = 30,
|
|
|
|
.height = 12,
|
|
|
|
.paletteNum = 8,
|
|
|
|
.baseBlock = 1
|
|
|
|
},
|
2018-02-17 10:55:32 +01:00
|
|
|
DUMMY_WIN_TEMPLATE,
|
|
|
|
};
|
2019-11-03 06:33:46 +01:00
|
|
|
static const u8 sMonSpritePos[][2] =
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
{104, 36},
|
|
|
|
{120, 36},
|
|
|
|
{136, 36},
|
|
|
|
};
|
|
|
|
|
|
|
|
static const union AnimCmd gUnknown_085E6F84[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 8),
|
|
|
|
ANIMCMD_FRAME(64, 8),
|
|
|
|
ANIMCMD_FRAME(128, 8),
|
|
|
|
ANIMCMD_FRAME(192, 8),
|
|
|
|
ANIMCMD_JUMP(0),
|
|
|
|
};
|
|
|
|
|
|
|
|
static const union AnimCmd gUnknown_085E6F98[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 4),
|
|
|
|
ANIMCMD_FRAME(64, 4),
|
|
|
|
ANIMCMD_FRAME(128, 4),
|
|
|
|
ANIMCMD_FRAME(192, 4),
|
|
|
|
ANIMCMD_JUMP(0),
|
|
|
|
};
|
|
|
|
|
|
|
|
static const union AnimCmd gUnknown_085E6FAC[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(256, 4),
|
|
|
|
ANIMCMD_FRAME(320, 4),
|
|
|
|
ANIMCMD_FRAME(384, 4),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
static const union AnimCmd gUnknown_085E6FBC[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(384, 30),
|
|
|
|
ANIMCMD_FRAME(320, 30),
|
|
|
|
ANIMCMD_FRAME(256, 30),
|
|
|
|
ANIMCMD_FRAME(256, 30),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
static const union AnimCmd *const gUnknown_085E6FD0[] =
|
|
|
|
{
|
|
|
|
gUnknown_085E6F84,
|
|
|
|
gUnknown_085E6F98,
|
|
|
|
gUnknown_085E6FAC,
|
|
|
|
gUnknown_085E6FBC,
|
|
|
|
};
|
|
|
|
|
|
|
|
static const union AnimCmd gUnknown_085E6FE0[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 8),
|
|
|
|
ANIMCMD_FRAME(64, 8),
|
|
|
|
ANIMCMD_FRAME(128, 8),
|
|
|
|
ANIMCMD_FRAME(192, 8),
|
|
|
|
ANIMCMD_JUMP(0),
|
|
|
|
};
|
|
|
|
|
|
|
|
static const union AnimCmd gUnknown_085E6FF4[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 4),
|
|
|
|
ANIMCMD_FRAME(64, 4),
|
|
|
|
ANIMCMD_FRAME(128, 4),
|
|
|
|
ANIMCMD_FRAME(192, 4),
|
|
|
|
ANIMCMD_JUMP(0),
|
|
|
|
};
|
|
|
|
|
|
|
|
static const union AnimCmd gUnknown_085E7008[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 4),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
static const union AnimCmd *const gUnknown_085E7010[] =
|
|
|
|
{
|
|
|
|
gUnknown_085E6FE0,
|
|
|
|
gUnknown_085E6FF4,
|
|
|
|
gUnknown_085E7008,
|
|
|
|
};
|
|
|
|
|
|
|
|
static const struct SpriteSheet gUnknown_085E701C[] = {
|
|
|
|
{ gDecompressionBuffer, 6144, 1001 },
|
|
|
|
{ NULL },
|
|
|
|
};
|
|
|
|
static const struct SpritePalette gUnknown_085E702C[] = {
|
|
|
|
{ (const u16 *)(gDecompressionBuffer + 0x1800), 1001 },
|
|
|
|
{ NULL },
|
|
|
|
};
|
|
|
|
|
|
|
|
static const struct OamData gUnknown_085E703C =
|
|
|
|
{
|
|
|
|
.y = 160,
|
2019-12-04 21:25:13 +01:00
|
|
|
.affineMode = ST_OAM_AFFINE_OFF,
|
|
|
|
.objMode = ST_OAM_OBJ_NORMAL,
|
2018-02-17 10:55:32 +01:00
|
|
|
.mosaic = 0,
|
2019-12-04 21:25:13 +01:00
|
|
|
.bpp = ST_OAM_4BPP,
|
2019-03-11 08:12:15 +01:00
|
|
|
.shape = SPRITE_SHAPE(64x64),
|
2018-02-17 10:55:32 +01:00
|
|
|
.x = 0,
|
|
|
|
.matrixNum = 0,
|
2019-03-11 08:12:15 +01:00
|
|
|
.size = SPRITE_SIZE(64x64),
|
2018-02-17 10:55:32 +01:00
|
|
|
.tileNum = 0,
|
|
|
|
.priority = 1,
|
|
|
|
.paletteNum = 0,
|
|
|
|
.affineParam = 0,
|
|
|
|
};
|
|
|
|
|
|
|
|
static const union AnimCmd gUnknown_085E7044[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(0, 8),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
static const union AnimCmd gUnknown_085E704C[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(64, 8),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
static const union AnimCmd gUnknown_085E7054[] =
|
|
|
|
{
|
|
|
|
ANIMCMD_FRAME(128, 8),
|
|
|
|
ANIMCMD_END,
|
|
|
|
};
|
|
|
|
|
|
|
|
static const union AnimCmd *const gUnknown_085E705C[] =
|
|
|
|
{
|
|
|
|
gUnknown_085E7044,
|
|
|
|
gUnknown_085E704C,
|
|
|
|
gUnknown_085E7054,
|
|
|
|
};
|
|
|
|
|
|
|
|
static const struct SpriteTemplate gUnknown_085E7068 =
|
|
|
|
{
|
|
|
|
.tileTag = 1001,
|
|
|
|
.paletteTag = 1001,
|
|
|
|
.oam = &gUnknown_085E703C,
|
|
|
|
.anims = gUnknown_085E705C,
|
|
|
|
.images = NULL,
|
|
|
|
.affineAnims = gDummySpriteAffineAnimTable,
|
|
|
|
.callback = sub_81772B8,
|
|
|
|
};
|
|
|
|
|
2019-08-17 18:01:38 +02:00
|
|
|
static void Task_WaitPaletteFade(u8 taskIdA);
|
|
|
|
static void Task_ProgressCreditTasks(u8 taskIdA);
|
2018-02-17 10:55:32 +01:00
|
|
|
static void sub_8175808(u8 taskIdA);
|
|
|
|
static void c2_080C9BFC(u8 taskIdA);
|
2019-08-17 18:01:38 +02:00
|
|
|
static void Task_CreditsLoadGrassScene(u8 taskIdA);
|
2018-02-17 10:55:32 +01:00
|
|
|
static void sub_81758A4(u8 taskIdA);
|
2019-08-17 18:01:38 +02:00
|
|
|
static void Task_CreditsTheEnd1(u8 taskIdA);
|
|
|
|
static void Task_CreditsTheEnd2(u8 taskIdA);
|
|
|
|
static void Task_CreditsTheEnd3(u8 taskIdA);
|
|
|
|
static void Task_CreditsTheEnd4(u8 taskIdA);
|
|
|
|
static void Task_CreditsTheEnd5(u8 taskIdA);
|
|
|
|
static void Task_CreditsTheEnd6(u8 taskIdA);
|
|
|
|
static void Task_CreditsSoftReset(u8 taskIdA);
|
|
|
|
static void ResetGpuAndVram(void);
|
2018-02-17 10:55:32 +01:00
|
|
|
static void sub_8175DA0(u8 taskIdB);
|
2019-08-17 18:01:38 +02:00
|
|
|
static u8 CheckChangeScene(u8 page, u8 taskIdA);
|
2018-02-17 10:55:32 +01:00
|
|
|
static void sub_81760FC(u8 taskIdA);
|
|
|
|
static void sub_817651C(u8 taskIdA);
|
|
|
|
static void sub_817624C(u8 taskIdA);
|
|
|
|
static bool8 sub_8176AB0(u8 data, u8 taskIdA);
|
2019-08-17 18:01:38 +02:00
|
|
|
static void ResetCreditsTasks(u8 taskIdA);
|
|
|
|
static void LoadTheEndScreen(u16, u16, u16);
|
2018-02-17 10:55:32 +01:00
|
|
|
static void sub_8176E40(u16 arg0, u16 palette);
|
|
|
|
static void sub_8176EE8(struct Sprite *sprite);
|
|
|
|
static void sub_8176F90(struct Sprite *sprite);
|
2019-11-03 06:33:46 +01:00
|
|
|
static u8 MakeMonSprite(u16 species, s16 x, s16 y, u16 position);
|
|
|
|
static void DeterminePokemonToShow(void);
|
2018-02-17 10:55:32 +01:00
|
|
|
|
2019-08-17 18:01:38 +02:00
|
|
|
static void CreditsVBlankCallback(void)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
LoadOam();
|
|
|
|
ProcessSpriteCopyRequests();
|
|
|
|
TransferPlttBuffer();
|
|
|
|
}
|
|
|
|
|
2019-08-17 18:01:38 +02:00
|
|
|
static void CB2_RunCreditsSequence(void)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
RunTasks();
|
|
|
|
AnimateSprites();
|
2018-10-27 00:53:07 +02:00
|
|
|
|
2020-09-05 03:11:55 +02:00
|
|
|
if ((JOY_HELD(B_BUTTON))
|
2018-02-17 10:55:32 +01:00
|
|
|
&& gHasHallOfFameRecords != 0
|
2019-08-17 18:01:38 +02:00
|
|
|
&& gTasks[gUnknown_0203BCE2].func == Task_ProgressCreditTasks)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
2019-08-17 18:01:38 +02:00
|
|
|
CreditsVBlankCallback();
|
2018-02-17 10:55:32 +01:00
|
|
|
RunTasks();
|
|
|
|
AnimateSprites();
|
|
|
|
gUnknown_0203BCE5 = 1;
|
|
|
|
}
|
|
|
|
BuildOamBuffer();
|
|
|
|
UpdatePaletteFade();
|
|
|
|
}
|
|
|
|
|
2021-03-05 21:13:08 +01:00
|
|
|
static void InitCreditsBgsAndWindows(void)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
ResetBgsAndClearDma3BusyFlags(0);
|
2021-01-19 10:09:46 +01:00
|
|
|
InitBgsFromTemplates(0, sBackgroundTemplates, ARRAY_COUNT(sBackgroundTemplates));
|
2020-08-24 00:50:57 +02:00
|
|
|
SetBgTilemapBuffer(0, AllocZeroed(BG_SCREEN_SIZE));
|
2018-02-17 10:55:32 +01:00
|
|
|
LoadPalette(gUnknown_085E56F0, 0x80, 0x40);
|
2019-08-17 18:01:38 +02:00
|
|
|
InitWindows(sWindowTemplates);
|
2018-02-17 10:55:32 +01:00
|
|
|
DeactivateAllTextPrinters();
|
|
|
|
PutWindowTilemap(0);
|
|
|
|
CopyWindowToVram(0, 3);
|
|
|
|
ShowBg(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_81755A4(void)
|
|
|
|
{
|
|
|
|
void *ptr;
|
|
|
|
FreeAllWindowBuffers();
|
|
|
|
ptr = GetBgTilemapBuffer(0);
|
|
|
|
if (ptr)
|
|
|
|
Free(ptr);
|
|
|
|
}
|
|
|
|
|
2019-08-17 19:32:26 +02:00
|
|
|
static void PrintCreditsText(const u8 *string, u8 y, bool8 isTitle)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
u8 x;
|
|
|
|
u8 color[3];
|
2018-10-27 00:53:07 +02:00
|
|
|
|
2018-02-17 10:55:32 +01:00
|
|
|
color[0] = 0;
|
2018-10-27 00:53:07 +02:00
|
|
|
|
2019-08-17 19:32:26 +02:00
|
|
|
if (isTitle == TRUE)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
color[1] = 3;
|
|
|
|
color[2] = 4;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
color[1] = 1;
|
|
|
|
color[2] = 2;
|
|
|
|
}
|
2018-10-27 00:53:07 +02:00
|
|
|
|
2018-02-17 10:55:32 +01:00
|
|
|
x = GetStringCenterAlignXOffsetWithLetterSpacing(1, string, 0xF0, 1);
|
2018-09-08 23:38:30 +02:00
|
|
|
AddTextPrinterParameterized4(0, 1, x, y, 1, 0, color, -1, string);
|
2018-02-17 10:55:32 +01:00
|
|
|
}
|
|
|
|
|
2019-08-17 18:01:38 +02:00
|
|
|
void CB2_StartCreditsSequence(void)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
u8 taskIdA;
|
|
|
|
s16 taskIdC;
|
|
|
|
u8 taskIdB;
|
|
|
|
|
2019-08-17 18:01:38 +02:00
|
|
|
ResetGpuAndVram();
|
2018-02-17 10:55:32 +01:00
|
|
|
SetVBlankCallback(NULL);
|
|
|
|
InitHeap(gHeap, HEAP_SIZE);
|
|
|
|
ResetPaletteFade();
|
|
|
|
ResetTasks();
|
2021-03-05 21:13:08 +01:00
|
|
|
InitCreditsBgsAndWindows();
|
2018-02-17 10:55:32 +01:00
|
|
|
|
2019-08-17 18:01:38 +02:00
|
|
|
taskIdA = CreateTask(Task_WaitPaletteFade, 0);
|
2018-02-17 10:55:32 +01:00
|
|
|
|
|
|
|
gTasks[taskIdA].data[TDA_4] = 0;
|
|
|
|
gTasks[taskIdA].data[TDA_7] = 0;
|
|
|
|
gTasks[taskIdA].data[TDA_11] = 0;
|
|
|
|
gTasks[taskIdA].data[TDA_13] = 1;
|
|
|
|
|
|
|
|
while (TRUE)
|
|
|
|
{
|
|
|
|
if (sub_8176AB0(0, taskIdA))
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
taskIdC = gTasks[taskIdA].data[TDA_TASK_C_ID];
|
|
|
|
gTasks[taskIdC].data[TDC_0] = 40;
|
|
|
|
|
|
|
|
SetGpuReg(REG_OFFSET_BG0VOFS, 0xFFFC);
|
2018-10-27 00:53:07 +02:00
|
|
|
|
2018-02-17 10:55:32 +01:00
|
|
|
taskIdB = CreateTask(sub_8175DA0, 0);
|
|
|
|
|
|
|
|
gTasks[taskIdB].data[TDB_TASK_A_ID] = taskIdA;
|
|
|
|
gTasks[taskIdA].data[TDA_TASK_B_ID] = taskIdB;
|
|
|
|
|
2021-02-24 17:01:02 +01:00
|
|
|
BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK);
|
2018-02-17 10:55:32 +01:00
|
|
|
EnableInterrupts(INTR_FLAG_VBLANK);
|
2019-08-17 18:01:38 +02:00
|
|
|
SetVBlankCallback(CreditsVBlankCallback);
|
2020-08-21 00:02:00 +02:00
|
|
|
m4aSongNumStart(MUS_CREDITS);
|
2019-08-17 18:01:38 +02:00
|
|
|
SetMainCallback2(CB2_RunCreditsSequence);
|
2018-02-17 10:55:32 +01:00
|
|
|
gUnknown_0203BCE5 = 0;
|
2019-11-03 06:33:46 +01:00
|
|
|
sCreditsData = AllocZeroed(sizeof(struct CreditsData));
|
2018-02-17 10:55:32 +01:00
|
|
|
|
2019-11-03 06:33:46 +01:00
|
|
|
DeterminePokemonToShow();
|
2018-02-17 10:55:32 +01:00
|
|
|
|
2019-11-03 06:33:46 +01:00
|
|
|
sCreditsData->imgCounter = 0;
|
|
|
|
sCreditsData->nextImgPos = 0;
|
2019-11-04 17:38:09 +01:00
|
|
|
sCreditsData->currShownMon = 0;
|
2018-02-17 10:55:32 +01:00
|
|
|
|
|
|
|
gUnknown_0203BCE2 = taskIdA;
|
|
|
|
}
|
|
|
|
|
2019-08-17 18:01:38 +02:00
|
|
|
static void Task_WaitPaletteFade(u8 taskIdA)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
if (!gPaletteFade.active)
|
2019-08-17 18:01:38 +02:00
|
|
|
gTasks[taskIdA].func = Task_ProgressCreditTasks;
|
2018-02-17 10:55:32 +01:00
|
|
|
}
|
|
|
|
|
2019-08-17 18:01:38 +02:00
|
|
|
static void Task_ProgressCreditTasks(u8 taskIdA)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
u16 data1;
|
|
|
|
|
|
|
|
if (gTasks[taskIdA].data[TDA_4])
|
|
|
|
{
|
|
|
|
s16 taskIdC;
|
|
|
|
|
|
|
|
taskIdC = gTasks[taskIdA].data[TDA_TASK_C_ID];
|
|
|
|
gTasks[taskIdC].data[TDC_0] = 30;
|
|
|
|
|
|
|
|
gTasks[taskIdA].data[TDA_12] = 0x100;
|
2019-08-17 18:01:38 +02:00
|
|
|
gTasks[taskIdA].func = Task_CreditsTheEnd1;
|
2018-02-17 10:55:32 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
gUnknown_0203BCE0 = 0;
|
|
|
|
data1 = gTasks[taskIdA].data[TDA_11];
|
|
|
|
|
|
|
|
if (gTasks[taskIdA].data[TDA_11] == 1)
|
|
|
|
{
|
|
|
|
gTasks[taskIdA].data[TDA_13] = data1;
|
|
|
|
gTasks[taskIdA].data[TDA_11] = 0;
|
2021-02-24 17:01:02 +01:00
|
|
|
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK);
|
2018-02-17 10:55:32 +01:00
|
|
|
gTasks[taskIdA].func = sub_8175808;
|
|
|
|
}
|
|
|
|
else if (gTasks[taskIdA].data[TDA_11] == 2)
|
|
|
|
{
|
|
|
|
gTasks[taskIdA].data[TDA_13] = data1;
|
|
|
|
gTasks[taskIdA].data[TDA_11] = 0;
|
2021-02-24 17:01:02 +01:00
|
|
|
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK);
|
2018-02-17 10:55:32 +01:00
|
|
|
gTasks[taskIdA].func = sub_81758A4;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8175808(u8 taskIdA)
|
|
|
|
{
|
|
|
|
if (!gPaletteFade.active)
|
|
|
|
{
|
|
|
|
SetGpuReg(REG_OFFSET_DISPCNT, 0);
|
2019-08-17 18:01:38 +02:00
|
|
|
ResetCreditsTasks(taskIdA);
|
2018-02-17 10:55:32 +01:00
|
|
|
gTasks[taskIdA].func = c2_080C9BFC;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void c2_080C9BFC(u8 taskIdA)
|
|
|
|
{
|
|
|
|
SetVBlankCallback(NULL);
|
|
|
|
|
|
|
|
if (sub_8176AB0(gTasks[taskIdA].data[TDA_7], taskIdA))
|
|
|
|
{
|
2021-02-24 17:01:02 +01:00
|
|
|
BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK);
|
2018-02-17 10:55:32 +01:00
|
|
|
EnableInterrupts(INTR_FLAG_VBLANK);
|
2019-08-17 18:01:38 +02:00
|
|
|
SetVBlankCallback(CreditsVBlankCallback);
|
|
|
|
gTasks[taskIdA].func = Task_WaitPaletteFade;
|
2018-02-17 10:55:32 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_81758A4(u8 taskIdA)
|
|
|
|
{
|
|
|
|
if (!gPaletteFade.active)
|
|
|
|
{
|
|
|
|
SetGpuReg(REG_OFFSET_DISPCNT, 0);
|
2019-08-17 18:01:38 +02:00
|
|
|
ResetCreditsTasks(taskIdA);
|
|
|
|
gTasks[taskIdA].func = Task_CreditsLoadGrassScene;
|
2018-02-17 10:55:32 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-08-17 18:01:38 +02:00
|
|
|
static void Task_CreditsLoadGrassScene(u8 taskIdA)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
switch (gMain.state)
|
|
|
|
{
|
|
|
|
default:
|
|
|
|
case 0:
|
|
|
|
{
|
|
|
|
u16 i;
|
|
|
|
u16 *temp;
|
|
|
|
|
|
|
|
ResetSpriteData();
|
2018-08-19 01:06:10 +02:00
|
|
|
ResetAllPicSprites();
|
2018-02-17 10:55:32 +01:00
|
|
|
FreeAllSpritePalettes();
|
|
|
|
gReservedSpritePaletteCount = 8;
|
2018-10-21 09:24:57 +02:00
|
|
|
LZ77UnCompVram(gBirchHelpGfx, (void *)VRAM);
|
2019-02-17 06:25:48 +01:00
|
|
|
LZ77UnCompVram(gBirchGrassTilemap, (void *)(BG_SCREEN_ADDR(7)));
|
2018-02-17 10:55:32 +01:00
|
|
|
LoadPalette(gBirchBagGrassPal[0] + 1, 1, 31 * 2);
|
|
|
|
|
|
|
|
for (i = 0; i < 0x800; i++)
|
|
|
|
gDecompressionBuffer[i] = 0x11;
|
|
|
|
for (i = 0; i < 0x800; i++)
|
|
|
|
(gDecompressionBuffer + 0x800)[i] = 0x22;
|
|
|
|
for (i = 0; i < 0x800; i++)
|
|
|
|
(gDecompressionBuffer + 0x1000)[i] = 0x33;
|
|
|
|
|
|
|
|
temp = (u16 *)(&gDecompressionBuffer[0x1800]);
|
|
|
|
temp[0] = RGB_BLACK;
|
|
|
|
temp[1] = RGB(31, 31, 20); // light yellow
|
|
|
|
temp[2] = RGB(31, 20, 20); // light red
|
|
|
|
temp[3] = RGB(20, 20, 31); // light blue
|
|
|
|
|
|
|
|
LoadSpriteSheet(gUnknown_085E701C);
|
|
|
|
LoadSpritePalette(gUnknown_085E702C);
|
|
|
|
|
|
|
|
gMain.state += 1;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 1:
|
|
|
|
gTasks[taskIdA].data[TDA_TASK_D_ID] = CreateTask(sub_81760FC, 0);
|
|
|
|
gTasks[gTasks[taskIdA].data[TDA_TASK_D_ID]].data[TDD_STATE] = 1;
|
|
|
|
gTasks[gTasks[taskIdA].data[TDA_TASK_D_ID]].data[TDD_TASK_A_ID] = taskIdA;
|
|
|
|
gTasks[gTasks[taskIdA].data[TDA_TASK_D_ID]].data[TDD_2] = gTasks[taskIdA].data[TDA_7];
|
|
|
|
|
2021-02-24 17:01:02 +01:00
|
|
|
BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK);
|
2018-02-17 10:55:32 +01:00
|
|
|
SetGpuReg(REG_OFFSET_BG3HOFS, 0);
|
|
|
|
SetGpuReg(REG_OFFSET_BG3VOFS, 32);
|
|
|
|
SetGpuReg(REG_OFFSET_BG3CNT, BGCNT_PRIORITY(3)
|
|
|
|
| BGCNT_CHARBASE(0)
|
|
|
|
| BGCNT_SCREENBASE(7)
|
|
|
|
| BGCNT_16COLOR
|
|
|
|
| BGCNT_TXT256x256);
|
|
|
|
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0
|
|
|
|
| DISPCNT_OBJ_1D_MAP
|
|
|
|
| DISPCNT_BG0_ON
|
|
|
|
| DISPCNT_BG3_ON
|
|
|
|
| DISPCNT_OBJ_ON);
|
|
|
|
|
|
|
|
gMain.state = 0;
|
2021-03-05 21:13:08 +01:00
|
|
|
gIntroCredits_MovingSceneryState = INTROCRED_SCENERY_MOVING;
|
2019-08-17 18:01:38 +02:00
|
|
|
gTasks[taskIdA].func = Task_WaitPaletteFade;
|
2018-02-17 10:55:32 +01:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-08-17 18:01:38 +02:00
|
|
|
static void Task_CreditsTheEnd1(u8 taskIdA)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
if (gTasks[taskIdA].data[TDA_12])
|
|
|
|
{
|
|
|
|
gTasks[taskIdA].data[TDA_12] -= 1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2021-02-24 17:01:02 +01:00
|
|
|
BeginNormalPaletteFade(PALETTES_ALL, 12, 0, 16, RGB_BLACK);
|
2019-08-17 18:01:38 +02:00
|
|
|
gTasks[taskIdA].func = Task_CreditsTheEnd2;
|
2018-02-17 10:55:32 +01:00
|
|
|
}
|
|
|
|
|
2019-08-17 18:01:38 +02:00
|
|
|
static void Task_CreditsTheEnd2(u8 taskIdA)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
if (!gPaletteFade.active)
|
|
|
|
{
|
2019-08-17 18:01:38 +02:00
|
|
|
ResetCreditsTasks(taskIdA);
|
|
|
|
gTasks[taskIdA].func = Task_CreditsTheEnd3;
|
2018-02-17 10:55:32 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-08-17 18:01:38 +02:00
|
|
|
static void Task_CreditsTheEnd3(u8 taskIdA)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
2019-08-17 18:01:38 +02:00
|
|
|
ResetGpuAndVram();
|
2018-02-17 10:55:32 +01:00
|
|
|
ResetPaletteFade();
|
2019-08-17 18:01:38 +02:00
|
|
|
LoadTheEndScreen(0, 0x3800, 0);
|
2018-02-17 10:55:32 +01:00
|
|
|
ResetSpriteData();
|
|
|
|
FreeAllSpritePalettes();
|
2021-02-24 17:01:02 +01:00
|
|
|
BeginNormalPaletteFade(PALETTES_ALL, 8, 16, 0, RGB_BLACK);
|
2018-02-17 10:55:32 +01:00
|
|
|
|
|
|
|
SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(0)
|
|
|
|
| BGCNT_CHARBASE(0)
|
|
|
|
| BGCNT_SCREENBASE(7)
|
|
|
|
| BGCNT_16COLOR
|
|
|
|
| BGCNT_TXT256x256);
|
|
|
|
EnableInterrupts(INTR_FLAG_VBLANK);
|
|
|
|
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0
|
|
|
|
| DISPCNT_OBJ_1D_MAP
|
|
|
|
| DISPCNT_BG0_ON);
|
|
|
|
|
2019-08-17 18:01:38 +02:00
|
|
|
gTasks[taskIdA].data[TDA_0] = 235; //set this to 215 to actually show "THE END" in time to the last song beat
|
|
|
|
gTasks[taskIdA].func = Task_CreditsTheEnd4;
|
2018-02-17 10:55:32 +01:00
|
|
|
}
|
|
|
|
|
2019-08-17 18:01:38 +02:00
|
|
|
static void Task_CreditsTheEnd4(u8 taskIdA)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
if (gTasks[taskIdA].data[TDA_0])
|
|
|
|
{
|
|
|
|
gTasks[taskIdA].data[TDA_0] -= 1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2021-02-24 17:01:02 +01:00
|
|
|
BeginNormalPaletteFade(PALETTES_ALL, 6, 0, 16, RGB_BLACK);
|
2019-08-17 18:01:38 +02:00
|
|
|
gTasks[taskIdA].func = Task_CreditsTheEnd5;
|
2018-02-17 10:55:32 +01:00
|
|
|
}
|
|
|
|
|
2019-08-17 18:01:38 +02:00
|
|
|
static void Task_CreditsTheEnd5(u8 taskIdA)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
if (!gPaletteFade.active)
|
|
|
|
{
|
|
|
|
sub_8176E40(0x3800, 0);
|
|
|
|
|
2021-02-24 17:01:02 +01:00
|
|
|
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0, RGB_BLACK);
|
2018-02-17 10:55:32 +01:00
|
|
|
gTasks[taskIdA].data[TDA_0] = 7200;
|
2019-08-17 18:01:38 +02:00
|
|
|
gTasks[taskIdA].func = Task_CreditsTheEnd6;
|
2018-02-17 10:55:32 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-08-17 18:01:38 +02:00
|
|
|
static void Task_CreditsTheEnd6(u8 taskIdA)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
if (!gPaletteFade.active)
|
|
|
|
{
|
|
|
|
if (gTasks[taskIdA].data[TDA_0] == 0 || gMain.newKeys)
|
|
|
|
{
|
|
|
|
FadeOutBGM(4);
|
2021-02-24 17:01:02 +01:00
|
|
|
BeginNormalPaletteFade(PALETTES_ALL, 8, 0, 16, RGB_WHITEALPHA);
|
2019-08-17 18:01:38 +02:00
|
|
|
gTasks[taskIdA].func = Task_CreditsSoftReset;
|
2018-02-17 10:55:32 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (gTasks[taskIdA].data[TDA_0] == 7144)
|
|
|
|
FadeOutBGM(8);
|
|
|
|
|
|
|
|
if (gTasks[taskIdA].data[TDA_0] == 6840)
|
|
|
|
m4aSongNumStart(MUS_END);
|
|
|
|
|
|
|
|
gTasks[taskIdA].data[TDA_0] -= 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-08-17 18:01:38 +02:00
|
|
|
static void Task_CreditsSoftReset(u8 taskIdA)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
if (!gPaletteFade.active)
|
|
|
|
SoftReset(0xFF);
|
|
|
|
}
|
|
|
|
|
2019-08-17 18:01:38 +02:00
|
|
|
static void ResetGpuAndVram(void)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
SetGpuReg(REG_OFFSET_DISPCNT, 0);
|
|
|
|
|
|
|
|
SetGpuReg(REG_OFFSET_BG3HOFS, 0);
|
|
|
|
SetGpuReg(REG_OFFSET_BG3VOFS, 0);
|
|
|
|
SetGpuReg(REG_OFFSET_BG2HOFS, 0);
|
|
|
|
SetGpuReg(REG_OFFSET_BG2VOFS, 0);
|
|
|
|
SetGpuReg(REG_OFFSET_BG1HOFS, 0);
|
|
|
|
SetGpuReg(REG_OFFSET_BG1VOFS, 0);
|
|
|
|
SetGpuReg(REG_OFFSET_BG0HOFS, 0);
|
|
|
|
SetGpuReg(REG_OFFSET_BG0VOFS, 0);
|
|
|
|
|
|
|
|
SetGpuReg(REG_OFFSET_BLDCNT, 0);
|
|
|
|
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
|
|
|
|
SetGpuReg(REG_OFFSET_BLDY, 0);
|
|
|
|
|
|
|
|
DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE);
|
|
|
|
DmaFill32(3, 0, (void *)OAM, OAM_SIZE);
|
|
|
|
DmaFill16(3, 0, (void *)(PLTT + 2), PLTT_SIZE - 2);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8175DA0(u8 taskIdB)
|
|
|
|
{
|
|
|
|
int i;
|
|
|
|
|
|
|
|
switch (gTasks[taskIdB].data[TDB_0])
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
case 6:
|
|
|
|
case 7:
|
|
|
|
case 8:
|
|
|
|
case 9:
|
|
|
|
default:
|
|
|
|
if (!gPaletteFade.active)
|
|
|
|
{
|
|
|
|
gTasks[taskIdB].data[TDB_0] = 1;
|
|
|
|
gTasks[taskIdB].data[TDB_3] = 0x48;
|
|
|
|
gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_14] = 0;
|
|
|
|
gUnknown_0203BCE0 = 0;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 1:
|
|
|
|
if (gTasks[taskIdB].data[TDB_3] != 0)
|
|
|
|
{
|
|
|
|
gTasks[taskIdB].data[TDB_3] -= 1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
gTasks[taskIdB].data[TDB_0] += 1;
|
|
|
|
return;
|
|
|
|
case 2:
|
2019-08-17 18:01:38 +02:00
|
|
|
if (gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].func == Task_ProgressCreditTasks)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
if (gTasks[taskIdB].data[TDB_CURRENT_PAGE] < PAGE_COUNT)
|
|
|
|
{
|
|
|
|
for (i = 0; i < 5; i++)
|
2019-08-17 18:01:38 +02:00
|
|
|
PrintCreditsText(
|
|
|
|
gCreditsEntryPointerTable[gTasks[taskIdB].data[TDB_CURRENT_PAGE]][i]->text,
|
|
|
|
5 + i * 16,
|
|
|
|
gCreditsEntryPointerTable[gTasks[taskIdB].data[TDB_CURRENT_PAGE]][i]->isTitle);
|
2018-10-27 00:53:07 +02:00
|
|
|
|
2018-02-17 10:55:32 +01:00
|
|
|
CopyWindowToVram(0, 2);
|
2018-10-27 00:53:07 +02:00
|
|
|
|
2018-02-17 10:55:32 +01:00
|
|
|
gTasks[taskIdB].data[TDB_CURRENT_PAGE] += 1;
|
|
|
|
gTasks[taskIdB].data[TDB_0] += 1;
|
|
|
|
|
|
|
|
gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_14] = 1;
|
|
|
|
|
|
|
|
if (gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_13] == 1)
|
|
|
|
BeginNormalPaletteFade(0x00000300, 0, 16, 0, COLOR_LIGHT_GREEN);
|
|
|
|
else
|
|
|
|
BeginNormalPaletteFade(0x00000300, 0, 16, 0, COLOR_DARK_GREEN);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
gTasks[taskIdB].data[TDB_0] = 10;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_14] = 0;
|
|
|
|
return;
|
|
|
|
case 3:
|
|
|
|
if (!gPaletteFade.active)
|
|
|
|
{
|
|
|
|
gTasks[taskIdB].data[TDB_3] = 0x73;
|
|
|
|
gTasks[taskIdB].data[TDB_0] += 1;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 4:
|
|
|
|
if (gTasks[taskIdB].data[TDB_3] != 0)
|
|
|
|
{
|
|
|
|
gTasks[taskIdB].data[TDB_3] -= 1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2019-08-17 18:01:38 +02:00
|
|
|
if (CheckChangeScene((u8)gTasks[taskIdB].data[TDB_CURRENT_PAGE], (u8)gTasks[taskIdB].data[TDB_TASK_A_ID]))
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
gTasks[taskIdB].data[TDB_0] += 1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
gTasks[taskIdB].data[TDB_0] += 1;
|
|
|
|
if (gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_13] == 1)
|
|
|
|
BeginNormalPaletteFade(0x00000300, 0, 0, 16, COLOR_LIGHT_GREEN);
|
|
|
|
else
|
|
|
|
BeginNormalPaletteFade(0x00000300, 0, 0, 16, COLOR_DARK_GREEN);
|
|
|
|
return;
|
|
|
|
case 5:
|
|
|
|
if (!gPaletteFade.active)
|
|
|
|
{
|
2019-03-02 23:25:39 +01:00
|
|
|
FillWindowPixelBuffer(0, PIXEL_FILL(0));
|
2018-02-17 10:55:32 +01:00
|
|
|
CopyWindowToVram(0, 2);
|
|
|
|
gTasks[taskIdB].data[TDB_0] = 2;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 10:
|
|
|
|
gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_4] = 1;
|
|
|
|
DestroyTask(taskIdB);
|
|
|
|
sub_81755A4();
|
2019-11-03 06:33:46 +01:00
|
|
|
FREE_AND_SET_NULL(sCreditsData);
|
2018-02-17 10:55:32 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-08-17 18:01:38 +02:00
|
|
|
static u8 CheckChangeScene(u8 page, u8 taskIdA)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
// Starts with bike + ocean + morning
|
|
|
|
|
|
|
|
if (page == 6)
|
|
|
|
{
|
|
|
|
// Grass patch
|
|
|
|
gTasks[taskIdA].data[TDA_11] = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (page == 12)
|
|
|
|
{
|
|
|
|
// Bike + ocean + sunset
|
|
|
|
gTasks[taskIdA].data[TDA_7] = 1;
|
|
|
|
gTasks[taskIdA].data[TDA_11] = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (page == 18)
|
|
|
|
{
|
|
|
|
// Grass patch
|
|
|
|
gTasks[taskIdA].data[TDA_11] = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (page == 24)
|
|
|
|
{
|
|
|
|
// Bike + forest + sunset
|
|
|
|
gTasks[taskIdA].data[TDA_7] = 2;
|
|
|
|
gTasks[taskIdA].data[TDA_11] = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (page == 30)
|
|
|
|
{
|
|
|
|
// Grass patch
|
|
|
|
gTasks[taskIdA].data[TDA_11] = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (page == 36)
|
|
|
|
{
|
|
|
|
// Bike + forest + sunset
|
|
|
|
gTasks[taskIdA].data[TDA_7] = 3;
|
|
|
|
gTasks[taskIdA].data[TDA_11] = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (page == 42)
|
|
|
|
{
|
|
|
|
// Grass patch
|
|
|
|
gTasks[taskIdA].data[TDA_11] = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (page == 48)
|
|
|
|
{
|
|
|
|
// Bike + town + night
|
|
|
|
gTasks[taskIdA].data[TDA_7] = 4;
|
|
|
|
gTasks[taskIdA].data[TDA_11] = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (gTasks[taskIdA].data[TDA_11] != 0)
|
|
|
|
{
|
|
|
|
// Returns true if changed?
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_81760FC(u8 taskIdD)
|
|
|
|
{
|
|
|
|
u8 r2;
|
|
|
|
|
|
|
|
switch (gTasks[taskIdD].data[TDD_STATE])
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
break;
|
|
|
|
case 1:
|
2019-11-03 06:33:46 +01:00
|
|
|
if (sCreditsData->nextImgPos == 0 && gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].data[TDA_14] == 0)
|
2018-02-17 10:55:32 +01:00
|
|
|
break;
|
|
|
|
gTasks[taskIdD].data[TDD_STATE]++;
|
|
|
|
break;
|
|
|
|
case 2:
|
2019-11-04 17:38:09 +01:00
|
|
|
if (sCreditsData->imgCounter == NUM_MON_SLIDES || gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].func != Task_ProgressCreditTasks)
|
2018-02-17 10:55:32 +01:00
|
|
|
break;
|
2019-11-04 17:38:09 +01:00
|
|
|
r2 = MakeMonSprite(sCreditsData->monToShow[sCreditsData->currShownMon], sMonSpritePos[sCreditsData->nextImgPos][0], sMonSpritePos[sCreditsData->nextImgPos][1], sCreditsData->nextImgPos);
|
|
|
|
if (sCreditsData->currShownMon < sCreditsData->numMonToShow - 1)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
2019-11-04 17:38:09 +01:00
|
|
|
sCreditsData->currShownMon++;
|
2018-02-17 10:55:32 +01:00
|
|
|
gSprites[r2].data[3] = 50;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2019-11-04 17:38:09 +01:00
|
|
|
sCreditsData->currShownMon = 0;
|
2018-02-17 10:55:32 +01:00
|
|
|
gSprites[r2].data[3] = 512;
|
|
|
|
}
|
2019-11-03 06:33:46 +01:00
|
|
|
sCreditsData->imgCounter++;
|
|
|
|
if (sCreditsData->nextImgPos == 2)
|
|
|
|
sCreditsData->nextImgPos = 0;
|
2018-02-17 10:55:32 +01:00
|
|
|
else
|
2019-11-03 06:33:46 +01:00
|
|
|
sCreditsData->nextImgPos++;
|
2018-02-17 10:55:32 +01:00
|
|
|
gTasks[taskIdD].data[TDD_3] = 50;
|
|
|
|
gTasks[taskIdD].data[TDD_STATE]++;
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
if (gTasks[taskIdD].data[TDD_3] != 0)
|
|
|
|
gTasks[taskIdD].data[TDD_3]--;
|
|
|
|
else
|
|
|
|
gTasks[taskIdD].data[TDD_STATE] = 1;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_817624C(u8 taskIdC)
|
|
|
|
{
|
|
|
|
switch (gTasks[taskIdC].data[TDC_0])
|
|
|
|
{
|
|
|
|
case 0:
|
2021-03-05 21:13:08 +01:00
|
|
|
gIntroCredits_MovingSceneryVOffset = Sin((gTasks[taskIdC].data[TDC_5] >> 1) & 0x7F, 12);
|
2018-02-17 10:55:32 +01:00
|
|
|
gTasks[taskIdC].data[TDC_5]++;
|
|
|
|
break;
|
|
|
|
case 1:
|
2021-03-05 21:13:08 +01:00
|
|
|
if (gIntroCredits_MovingSceneryVOffset != 0)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
gIntroCredits_MovingSceneryVOffset = Sin((gTasks[taskIdC].data[TDC_5] >> 1) & 0x7F, 12);
|
2018-02-17 10:55:32 +01:00
|
|
|
gTasks[taskIdC].data[TDC_5]++;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
gSprites[gTasks[taskIdC].data[TDC_2]].data[0] = 2;
|
|
|
|
gTasks[taskIdC].data[TDC_5] = 0;
|
|
|
|
gTasks[taskIdC].data[TDC_0]++;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
if (gTasks[taskIdC].data[TDC_5] < 64)
|
|
|
|
{
|
|
|
|
gTasks[taskIdC].data[TDC_5]++;
|
2021-03-05 21:13:08 +01:00
|
|
|
gIntroCredits_MovingSceneryVOffset = Sin(gTasks[taskIdC].data[TDC_5] & 0x7F, 20);
|
2018-02-17 10:55:32 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
gTasks[taskIdC].data[TDC_0]++;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
gSprites[gTasks[taskIdC].data[TDC_2]].data[0] = 3;
|
|
|
|
gSprites[gTasks[taskIdC].data[TDC_3]].data[0] = 1;
|
|
|
|
gTasks[taskIdC].data[TDC_4] = 120;
|
|
|
|
gTasks[taskIdC].data[TDC_0]++;
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
if (gTasks[taskIdC].data[TDC_4] != 0)
|
|
|
|
{
|
|
|
|
gTasks[taskIdC].data[TDC_4]--;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
gTasks[taskIdC].data[TDC_5] = 64;
|
|
|
|
gTasks[taskIdC].data[TDC_0]++;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 5:
|
|
|
|
if (gTasks[taskIdC].data[TDC_5] > 0)
|
|
|
|
{
|
|
|
|
gTasks[taskIdC].data[TDC_5]--;
|
2021-03-05 21:13:08 +01:00
|
|
|
gIntroCredits_MovingSceneryVOffset = Sin(gTasks[taskIdC].data[TDC_5] & 0x7F, 20);
|
2018-02-17 10:55:32 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
gSprites[gTasks[taskIdC].data[TDC_2]].data[0] = 1;
|
|
|
|
gTasks[taskIdC].data[TDC_0]++;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 6:
|
|
|
|
gTasks[taskIdC].data[TDC_0] = 50;
|
|
|
|
break;
|
|
|
|
case 10:
|
|
|
|
gSprites[gTasks[taskIdC].data[TDC_3]].data[0] = 2;
|
|
|
|
gTasks[taskIdC].data[TDC_0] = 50;
|
|
|
|
break;
|
|
|
|
case 20:
|
|
|
|
gSprites[gTasks[taskIdC].data[TDC_2]].data[0] = 4;
|
|
|
|
gTasks[taskIdC].data[TDC_0] = 50;
|
|
|
|
break;
|
|
|
|
case 30:
|
|
|
|
gSprites[gTasks[taskIdC].data[TDC_2]].data[0] = 5;
|
|
|
|
gSprites[gTasks[taskIdC].data[TDC_3]].data[0] = 3;
|
|
|
|
gTasks[taskIdC].data[TDC_0] = 50;
|
|
|
|
break;
|
|
|
|
case 50:
|
|
|
|
gTasks[taskIdC].data[TDC_0] = 0;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_817651C(u8 taskIdE)
|
|
|
|
{
|
|
|
|
s16 taskIdC;
|
|
|
|
|
|
|
|
switch (gTasks[taskIdE].data[TDE_0])
|
|
|
|
{
|
|
|
|
default:
|
|
|
|
case 0:
|
|
|
|
if (gTasks[taskIdE].data[TDE_1] != 0x7FFF)
|
|
|
|
{
|
|
|
|
|
|
|
|
if (gTasks[gTasks[gTasks[taskIdE].data[TDE_TASK_A_ID]].data[TDA_TASK_B_ID]].data[TDB_CURRENT_PAGE] == 2)
|
|
|
|
{
|
|
|
|
gTasks[gTasks[gTasks[taskIdE].data[TDE_TASK_A_ID]].data[TDA_TASK_C_ID]].data[TDC_0] = 20;
|
|
|
|
gTasks[taskIdE].data[TDE_1] = 0x7FFF;
|
|
|
|
}
|
|
|
|
}
|
2021-03-05 21:13:08 +01:00
|
|
|
CycleSceneryPalette(0);
|
2018-02-17 10:55:32 +01:00
|
|
|
break;
|
|
|
|
case 1:
|
2021-03-05 21:13:08 +01:00
|
|
|
CycleSceneryPalette(0);
|
2018-02-17 10:55:32 +01:00
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
if (gTasks[taskIdE].data[TDE_1] != 0x7FFF)
|
|
|
|
{
|
|
|
|
taskIdC = gTasks[gTasks[taskIdE].data[TDE_TASK_A_ID]].data[TDA_TASK_C_ID];
|
|
|
|
|
|
|
|
// Floor to multiple of 128
|
|
|
|
if ((gTasks[taskIdC].data[TDC_5] & -128) == 640)
|
|
|
|
{
|
|
|
|
gTasks[taskIdC].data[TDC_0] = 1;
|
|
|
|
gTasks[taskIdE].data[TDE_1] = 0x7FFF;
|
|
|
|
}
|
|
|
|
}
|
2021-03-05 21:13:08 +01:00
|
|
|
CycleSceneryPalette(1);
|
2018-02-17 10:55:32 +01:00
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
if (gTasks[taskIdE].data[TDE_1] != 0x7FFF)
|
|
|
|
{
|
|
|
|
|
|
|
|
if (gTasks[taskIdE].data[TDE_1] == 0x248)
|
|
|
|
{
|
|
|
|
gTasks[gTasks[gTasks[taskIdE].data[TDE_TASK_A_ID]].data[TDA_TASK_C_ID]].data[TDC_0] = 10;
|
|
|
|
gTasks[taskIdE].data[TDE_1] = 0x7FFF;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
gTasks[taskIdE].data[TDE_1] += 1;
|
|
|
|
}
|
|
|
|
}
|
2021-03-05 21:13:08 +01:00
|
|
|
CycleSceneryPalette(1);
|
2018-02-17 10:55:32 +01:00
|
|
|
break;
|
|
|
|
case 4:
|
2021-03-05 21:13:08 +01:00
|
|
|
CycleSceneryPalette(2);
|
2018-02-17 10:55:32 +01:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-03-05 21:13:08 +01:00
|
|
|
static void sub_817664C(u8 scene, u8 taskIdA)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
switch (scene)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
case 0:
|
2018-09-10 17:25:58 +02:00
|
|
|
gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = FALSE;
|
|
|
|
gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = FALSE;
|
2018-02-17 10:55:32 +01:00
|
|
|
gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 272;
|
|
|
|
gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = 272;
|
|
|
|
gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46;
|
|
|
|
gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46;
|
|
|
|
gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data[0] = 0;
|
|
|
|
gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data[0] = 0;
|
2021-03-05 21:13:08 +01:00
|
|
|
gTasks[taskIdA].data[TDA_0] = CreateBicycleBgAnimationTask(0, 0x2000, 0x20, 8);
|
2018-02-17 10:55:32 +01:00
|
|
|
break;
|
|
|
|
case 1:
|
2018-09-10 17:25:58 +02:00
|
|
|
gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = FALSE;
|
|
|
|
gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = FALSE;
|
2018-02-17 10:55:32 +01:00
|
|
|
gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 120;
|
|
|
|
gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = 272;
|
|
|
|
gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46;
|
|
|
|
gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46;
|
|
|
|
gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data[0] = 0;
|
|
|
|
gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data[0] = 0;
|
2021-03-05 21:13:08 +01:00
|
|
|
gTasks[taskIdA].data[TDA_0] = CreateBicycleBgAnimationTask(0, 0x2000, 0x20, 8);
|
2018-02-17 10:55:32 +01:00
|
|
|
break;
|
|
|
|
case 2:
|
2018-09-10 17:25:58 +02:00
|
|
|
gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = FALSE;
|
|
|
|
gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = FALSE;
|
2018-02-17 10:55:32 +01:00
|
|
|
gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 120;
|
|
|
|
gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = 272;
|
|
|
|
gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46;
|
|
|
|
gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46;
|
|
|
|
gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data[0] = 0;
|
|
|
|
gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data[0] = 0;
|
2021-03-05 21:13:08 +01:00
|
|
|
gTasks[taskIdA].data[TDA_0] = CreateBicycleBgAnimationTask(1, 0x2000, 0x200, 8);
|
2018-02-17 10:55:32 +01:00
|
|
|
break;
|
|
|
|
case 3:
|
2018-09-10 17:25:58 +02:00
|
|
|
gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = FALSE;
|
|
|
|
gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = FALSE;
|
2018-02-17 10:55:32 +01:00
|
|
|
gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 120;
|
|
|
|
gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = -32;
|
|
|
|
gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46;
|
|
|
|
gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46;
|
|
|
|
gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data[0] = 0;
|
|
|
|
gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data[0] = 0;
|
2021-03-05 21:13:08 +01:00
|
|
|
gTasks[taskIdA].data[TDA_0] = CreateBicycleBgAnimationTask(1, 0x2000, 0x200, 8);
|
2018-02-17 10:55:32 +01:00
|
|
|
break;
|
|
|
|
case 4:
|
2018-09-10 17:25:58 +02:00
|
|
|
gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = FALSE;
|
|
|
|
gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = FALSE;
|
2018-02-17 10:55:32 +01:00
|
|
|
gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 88;
|
|
|
|
gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = 152;
|
|
|
|
gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46;
|
|
|
|
gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46;
|
|
|
|
gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data[0] = 0;
|
|
|
|
gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data[0] = 0;
|
2021-03-05 21:13:08 +01:00
|
|
|
gTasks[taskIdA].data[TDA_0] = CreateBicycleBgAnimationTask(2, 0x2000, 0x200, 8);
|
2018-02-17 10:55:32 +01:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
gTasks[taskIdA].data[TDA_TASK_E_ID] = CreateTask(sub_817651C, 0);
|
2021-03-05 21:13:08 +01:00
|
|
|
gTasks[gTasks[taskIdA].data[TDA_TASK_E_ID]].data[TDE_0] = scene;
|
2018-02-17 10:55:32 +01:00
|
|
|
gTasks[gTasks[taskIdA].data[TDA_TASK_E_ID]].data[TDE_1] = 0;
|
|
|
|
gTasks[gTasks[taskIdA].data[TDA_TASK_E_ID]].data[TDE_TASK_A_ID] = taskIdA;
|
|
|
|
|
|
|
|
gTasks[taskIdA].data[TDA_TASK_C_ID] = CreateTask(sub_817624C, 0);
|
|
|
|
gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_0] = 0;
|
|
|
|
gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_1] = taskIdA;
|
|
|
|
gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_2] = gTasks[taskIdA].data[TDA_PLAYER_CYCLIST];
|
|
|
|
gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_3] = gTasks[taskIdA].data[TDA_RIVAL_CYCLIST];
|
|
|
|
gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_4] = 0;
|
|
|
|
|
2021-03-05 21:13:08 +01:00
|
|
|
if (scene == 2)
|
2018-02-17 10:55:32 +01:00
|
|
|
gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_5] = 0x45;
|
|
|
|
}
|
|
|
|
|
2021-03-05 21:13:08 +01:00
|
|
|
static bool8 sub_8176AB0(u8 scene, u8 taskIdA)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
u8 spriteId;
|
|
|
|
|
|
|
|
switch (gMain.state)
|
|
|
|
{
|
|
|
|
default:
|
|
|
|
case 0:
|
|
|
|
SetGpuReg(REG_OFFSET_DISPCNT, 0);
|
|
|
|
SetGpuReg(REG_OFFSET_BG3HOFS, 8);
|
|
|
|
SetGpuReg(REG_OFFSET_BG3VOFS, 0);
|
|
|
|
SetGpuReg(REG_OFFSET_BG2HOFS, 0);
|
|
|
|
SetGpuReg(REG_OFFSET_BG2VOFS, 0);
|
|
|
|
SetGpuReg(REG_OFFSET_BG1HOFS, 0);
|
|
|
|
SetGpuReg(REG_OFFSET_BG1VOFS, 0);
|
|
|
|
SetGpuReg(REG_OFFSET_BLDCNT, 0);
|
|
|
|
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
|
|
|
|
ResetSpriteData();
|
|
|
|
FreeAllSpritePalettes();
|
|
|
|
gMain.state = 1;
|
|
|
|
break;
|
|
|
|
case 1:
|
2021-03-05 21:13:08 +01:00
|
|
|
gIntroCredits_MovingSceneryVBase = 34;
|
|
|
|
gIntroCredits_MovingSceneryVOffset = 0;
|
|
|
|
LoadCreditsSceneGraphics(scene);
|
2018-02-17 10:55:32 +01:00
|
|
|
gMain.state += 1;
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
if (gSaveBlock2Ptr->playerGender == MALE)
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
LoadCompressedSpriteSheet(gSpriteSheet_CreditsBrendan);
|
|
|
|
LoadCompressedSpriteSheet(gSpriteSheet_CreditsRivalMay);
|
|
|
|
LoadCompressedSpriteSheet(gSpriteSheet_CreditsBicycle);
|
|
|
|
LoadSpritePalettes(gSpritePalettes_Credits);
|
2018-02-17 10:55:32 +01:00
|
|
|
|
2021-03-05 21:13:08 +01:00
|
|
|
spriteId = CreateIntroBrendanSprite(120, 46);
|
2018-02-17 10:55:32 +01:00
|
|
|
gTasks[taskIdA].data[TDA_PLAYER_CYCLIST] = spriteId;
|
|
|
|
gSprites[spriteId].callback = sub_8176EE8;
|
|
|
|
gSprites[spriteId].anims = gUnknown_085E6FD0;
|
|
|
|
|
2021-03-05 21:13:08 +01:00
|
|
|
spriteId = CreateIntroMaySprite(272, 46);
|
2018-02-17 10:55:32 +01:00
|
|
|
gTasks[taskIdA].data[TDA_RIVAL_CYCLIST] = spriteId;
|
|
|
|
gSprites[spriteId].callback = sub_8176F90;
|
|
|
|
gSprites[spriteId].anims = gUnknown_085E7010;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
LoadCompressedSpriteSheet(gSpriteSheet_CreditsMay);
|
|
|
|
LoadCompressedSpriteSheet(gSpriteSheet_CreditsRivalBrendan);
|
|
|
|
LoadCompressedSpriteSheet(gSpriteSheet_CreditsBicycle);
|
|
|
|
LoadSpritePalettes(gSpritePalettes_Credits);
|
2018-02-17 10:55:32 +01:00
|
|
|
|
2021-03-05 21:13:08 +01:00
|
|
|
spriteId = CreateIntroMaySprite(120, 46);
|
2018-02-17 10:55:32 +01:00
|
|
|
gTasks[taskIdA].data[TDA_PLAYER_CYCLIST] = spriteId;
|
|
|
|
gSprites[spriteId].callback = sub_8176EE8;
|
|
|
|
gSprites[spriteId].anims = gUnknown_085E6FD0;
|
|
|
|
|
2021-03-05 21:13:08 +01:00
|
|
|
spriteId = CreateIntroBrendanSprite(272, 46);
|
2018-02-17 10:55:32 +01:00
|
|
|
gTasks[taskIdA].data[TDA_RIVAL_CYCLIST] = spriteId;
|
|
|
|
gSprites[spriteId].callback = sub_8176F90;
|
|
|
|
gSprites[spriteId].anims = gUnknown_085E7010;
|
|
|
|
};
|
|
|
|
gMain.state += 1;
|
|
|
|
break;
|
|
|
|
case 3:
|
2021-03-05 21:13:08 +01:00
|
|
|
sub_817664C(scene, taskIdA);
|
|
|
|
SetCreditsSceneBgCnt(scene);
|
2018-02-17 10:55:32 +01:00
|
|
|
gMain.state = 0;
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2019-08-17 18:01:38 +02:00
|
|
|
static void ResetCreditsTasks(u8 taskIdA)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
if (gTasks[taskIdA].data[TDA_0] != 0)
|
|
|
|
{
|
|
|
|
DestroyTask(gTasks[taskIdA].data[TDA_0]);
|
|
|
|
gTasks[taskIdA].data[TDA_0] = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (gTasks[taskIdA].data[TDA_TASK_C_ID] != 0)
|
|
|
|
{
|
|
|
|
DestroyTask(gTasks[taskIdA].data[TDA_TASK_C_ID]);
|
|
|
|
gTasks[taskIdA].data[TDA_TASK_C_ID] = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (gTasks[taskIdA].data[TDA_TASK_E_ID] != 0)
|
|
|
|
{
|
|
|
|
DestroyTask(gTasks[taskIdA].data[TDA_TASK_E_ID]);
|
|
|
|
gTasks[taskIdA].data[TDA_TASK_E_ID] = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (gTasks[taskIdA].data[TDA_TASK_D_ID] != 0)
|
|
|
|
{
|
|
|
|
DestroyTask(gTasks[taskIdA].data[TDA_TASK_D_ID]);
|
|
|
|
gTasks[taskIdA].data[TDA_TASK_D_ID] = 0;
|
|
|
|
}
|
|
|
|
|
2021-03-05 21:13:08 +01:00
|
|
|
gIntroCredits_MovingSceneryState = INTROCRED_SCENERY_DESTROY;
|
2018-02-17 10:55:32 +01:00
|
|
|
}
|
|
|
|
|
2019-08-17 18:01:38 +02:00
|
|
|
static void LoadTheEndScreen(u16 arg0, u16 arg1, u16 arg2)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
u16 baseTile;
|
|
|
|
u16 i;
|
|
|
|
|
2021-03-05 21:13:08 +01:00
|
|
|
LZ77UnCompVram(sCreditsCopyrightEnd_Gfx, (void *)(VRAM + arg0));
|
2018-02-17 10:55:32 +01:00
|
|
|
LoadPalette(gIntroCopyright_Pal, arg2, sizeof(gIntroCopyright_Pal));
|
|
|
|
|
|
|
|
baseTile = (arg2 / 16) << 12;
|
|
|
|
|
|
|
|
for (i = 0; i < 32 * 32; i++)
|
|
|
|
((u16 *) (VRAM + arg1))[i] = baseTile + 1;
|
|
|
|
}
|
|
|
|
|
2021-03-05 21:13:08 +01:00
|
|
|
static u16 sub_8176D78(u8 baseTiles)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
u16 out = (baseTiles & 0x3F) + 80;
|
2018-02-17 10:55:32 +01:00
|
|
|
|
2021-03-05 21:13:08 +01:00
|
|
|
if (baseTiles == 0xFF)
|
2018-02-17 10:55:32 +01:00
|
|
|
return 1;
|
|
|
|
|
2021-03-05 21:13:08 +01:00
|
|
|
if (baseTiles & (1 << 7))
|
2018-02-17 10:55:32 +01:00
|
|
|
out |= 1 << 11;
|
2021-03-05 21:13:08 +01:00
|
|
|
if (baseTiles & (1 << 6))
|
2018-02-17 10:55:32 +01:00
|
|
|
out |= 1 << 10;
|
|
|
|
|
|
|
|
return out;
|
|
|
|
}
|
|
|
|
|
2021-03-05 21:13:08 +01:00
|
|
|
static void sub_8176DBC(const u8 baseTiles[], u8 baseX, u8 baseY, u16 arg3, u16 palette)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
u8 y, x;
|
|
|
|
const u16 tileOffset = (palette / 16) << 12;
|
|
|
|
|
|
|
|
for (y = 0; y < 5; y++)
|
|
|
|
{
|
|
|
|
for (x = 0; x < 3; x++)
|
2021-03-05 21:13:08 +01:00
|
|
|
((u16 *) (VRAM + arg3 + (baseY + y) * 64))[baseX + x] = tileOffset + sub_8176D78(baseTiles[y * 3 + x]);
|
2018-02-17 10:55:32 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8176E40(u16 arg0, u16 palette)
|
|
|
|
{
|
|
|
|
u16 pos;
|
|
|
|
u16 baseTile = (palette / 16) << 12;
|
|
|
|
|
|
|
|
for (pos = 0; pos < 32 * 32; pos++)
|
|
|
|
((u16 *) (VRAM + arg0))[pos] = baseTile + 1;
|
|
|
|
|
2019-08-17 18:01:38 +02:00
|
|
|
sub_8176DBC(sTheEnd_LetterTMap, 3, 7, arg0, palette);
|
|
|
|
sub_8176DBC(sTheEnd_LetterHMap, 7, 7, arg0, palette);
|
|
|
|
sub_8176DBC(sTheEnd_LetterEMap, 11, 7, arg0, palette);
|
|
|
|
sub_8176DBC(sTheEnd_LetterEMap, 16, 7, arg0, palette);
|
|
|
|
sub_8176DBC(sTheEnd_LetterNMap, 20, 7, arg0, palette);
|
|
|
|
sub_8176DBC(sTheEnd_LetterDMap, 24, 7, arg0, palette);
|
2018-02-17 10:55:32 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8176EE8(struct Sprite *sprite)
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
if (gIntroCredits_MovingSceneryState != INTROCRED_SCENERY_MOVING)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
DestroySprite(sprite);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (sprite->data[0])
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
StartSpriteAnimIfDifferent(sprite, 0);
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
StartSpriteAnimIfDifferent(sprite, 1);
|
|
|
|
if (sprite->pos1.x > -32)
|
|
|
|
sprite->pos1.x -= 1;
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
StartSpriteAnimIfDifferent(sprite, 2);
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
StartSpriteAnimIfDifferent(sprite, 3);
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
StartSpriteAnimIfDifferent(sprite, 0);
|
|
|
|
if (sprite->pos1.x > 120)
|
|
|
|
sprite->pos1.x -= 1;
|
|
|
|
break;
|
|
|
|
case 5:
|
|
|
|
StartSpriteAnimIfDifferent(sprite, 0);
|
|
|
|
if (sprite->pos1.x > -32)
|
|
|
|
sprite->pos1.x -= 1;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8176F90(struct Sprite *sprite)
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
if (gIntroCredits_MovingSceneryState != INTROCRED_SCENERY_MOVING)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
DestroySprite(sprite);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (sprite->data[0])
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
sprite->pos2.y = 0;
|
|
|
|
StartSpriteAnimIfDifferent(sprite, 0);
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
if (sprite->pos1.x > 200)
|
|
|
|
StartSpriteAnimIfDifferent(sprite, 1);
|
|
|
|
else
|
|
|
|
StartSpriteAnimIfDifferent(sprite, 2);
|
|
|
|
if (sprite->pos1.x > -32)
|
|
|
|
sprite->pos1.x -= 2;
|
2021-03-05 21:13:08 +01:00
|
|
|
sprite->pos2.y = -gIntroCredits_MovingSceneryVOffset;
|
2018-02-17 10:55:32 +01:00
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
sprite->data[7] += 1;
|
|
|
|
StartSpriteAnimIfDifferent(sprite, 0);
|
|
|
|
if ((sprite->data[7] & 3) == 0)
|
|
|
|
sprite->pos1.x += 1;
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
StartSpriteAnimIfDifferent(sprite, 0);
|
|
|
|
if (sprite->pos1.x > -32)
|
|
|
|
sprite->pos1.x -= 1;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_8177050(struct Sprite *sprite)
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
if (gIntroCredits_MovingSceneryState != INTROCRED_SCENERY_MOVING)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
2018-08-19 01:06:10 +02:00
|
|
|
FreeAndDestroyMonPicSprite(sprite->data[6]);
|
2018-02-17 10:55:32 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->data[7] += 1;
|
|
|
|
switch (sprite->data[0])
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
default:
|
2019-12-05 03:00:45 +01:00
|
|
|
sprite->oam.affineMode = ST_OAM_AFFINE_NORMAL;
|
2018-02-17 10:55:32 +01:00
|
|
|
sprite->oam.matrixNum = sprite->data[1];
|
|
|
|
sprite->data[2] = 16;
|
|
|
|
SetOamMatrix(sprite->data[1], 0x10000 / sprite->data[2], 0, 0, 0x10000 / sprite->data[2]);
|
|
|
|
sprite->invisible = FALSE;
|
|
|
|
sprite->data[0] = 1;
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
if (sprite->data[2] < 256)
|
|
|
|
{
|
|
|
|
sprite->data[2] += 8;
|
|
|
|
SetOamMatrix(sprite->data[1], 0x10000 / sprite->data[2], 0, 0, 0x10000 / sprite->data[2]);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sprite->data[0] += 1;
|
|
|
|
}
|
|
|
|
switch (sprite->data[1])
|
|
|
|
{
|
|
|
|
case 1:
|
|
|
|
if ((sprite->data[7] & 3) == 0)
|
|
|
|
sprite->pos1.y += 1;
|
|
|
|
sprite->pos1.x -= 2;
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
if ((sprite->data[7] & 3) == 0)
|
|
|
|
sprite->pos1.y += 1;
|
|
|
|
sprite->pos1.x += 2;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
if (sprite->data[3] != 0)
|
|
|
|
{
|
|
|
|
sprite->data[3] -= 1;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2018-12-26 13:43:07 +01:00
|
|
|
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3);
|
2018-12-26 14:03:48 +01:00
|
|
|
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0));
|
2019-12-05 03:00:45 +01:00
|
|
|
sprite->oam.objMode = ST_OAM_OBJ_BLEND;
|
2018-02-17 10:55:32 +01:00
|
|
|
sprite->data[3] = 16;
|
|
|
|
sprite->data[0] += 1;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
if (sprite->data[3] != 0)
|
|
|
|
{
|
|
|
|
int data3;
|
|
|
|
|
|
|
|
sprite->data[3] -= 1;
|
|
|
|
|
|
|
|
data3 = 16 - sprite->data[3];
|
|
|
|
SetGpuReg(REG_OFFSET_BLDALPHA, (data3 << 8) + sprite->data[3]);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sprite->invisible = TRUE;
|
|
|
|
sprite->data[0] = 9;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 9:
|
|
|
|
sprite->data[0] += 1;
|
|
|
|
break;
|
|
|
|
case 10:
|
|
|
|
SetGpuReg(REG_OFFSET_BLDCNT, 0);
|
|
|
|
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
|
2018-08-19 01:06:10 +02:00
|
|
|
FreeAndDestroyMonPicSprite(sprite->data[6]);
|
2018-02-17 10:55:32 +01:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-11-03 06:33:46 +01:00
|
|
|
static u8 MakeMonSprite(u16 nationalDexNum, s16 x, s16 y, u16 position)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
u8 spriteId;
|
|
|
|
u8 spriteId2;
|
|
|
|
|
2018-12-16 00:32:50 +01:00
|
|
|
spriteId = CreateMonSpriteFromNationalDexNumber(nationalDexNum, x, y, position);
|
2018-02-17 10:55:32 +01:00
|
|
|
gSprites[spriteId].oam.priority = 1;
|
|
|
|
gSprites[spriteId].data[1] = position + 1;
|
|
|
|
gSprites[spriteId].invisible = TRUE;
|
|
|
|
gSprites[spriteId].callback = sub_8177050;
|
|
|
|
gSprites[spriteId].data[6] = spriteId;
|
|
|
|
|
|
|
|
spriteId2 = CreateSprite(&gUnknown_085E7068, gSprites[spriteId].pos1.x, gSprites[spriteId].pos1.y, 1);
|
|
|
|
gSprites[spriteId2].data[0] = spriteId;
|
|
|
|
|
|
|
|
StartSpriteAnimIfDifferent(&gSprites[spriteId2], position);
|
|
|
|
|
|
|
|
return spriteId;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void sub_81772B8(struct Sprite *sprite)
|
|
|
|
{
|
2021-03-05 21:13:08 +01:00
|
|
|
if (gSprites[sprite->data[0]].data[0] == 10 || gIntroCredits_MovingSceneryState != INTROCRED_SCENERY_MOVING)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
|
|
|
DestroySprite(sprite);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
sprite->invisible = gSprites[sprite->data[0]].invisible;
|
|
|
|
sprite->oam.objMode = gSprites[sprite->data[0]].oam.objMode;
|
|
|
|
sprite->oam.affineMode = gSprites[sprite->data[0]].oam.affineMode;
|
|
|
|
sprite->oam.matrixNum = gSprites[sprite->data[0]].oam.matrixNum;
|
|
|
|
sprite->pos1.x = gSprites[sprite->data[0]].pos1.x;
|
|
|
|
sprite->pos1.y = gSprites[sprite->data[0]].pos1.y;
|
|
|
|
}
|
|
|
|
|
2019-11-03 06:33:46 +01:00
|
|
|
static void DeterminePokemonToShow(void)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
2018-08-08 10:37:12 +02:00
|
|
|
u16 starter = SpeciesToNationalPokedexNum(GetStarterPokemon(VarGet(VAR_STARTER_MON)));
|
2018-02-17 10:55:32 +01:00
|
|
|
u16 page;
|
|
|
|
u16 dexNum;
|
|
|
|
u16 j;
|
2019-11-03 06:33:46 +01:00
|
|
|
|
|
|
|
// Go through the Pokedex, and anything that has gotten caught we put into our massive array.
|
|
|
|
// This basically packs all of the caught pokemon into the front of the array
|
2018-12-15 21:12:28 +01:00
|
|
|
for (dexNum = 1, j = 0; dexNum < NATIONAL_DEX_COUNT; dexNum++)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
2018-12-15 21:12:28 +01:00
|
|
|
if (GetSetPokedexFlag(dexNum, FLAG_GET_CAUGHT))
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
2019-11-04 17:38:09 +01:00
|
|
|
sCreditsData->caughtMonIds[j] = dexNum;
|
2018-02-17 10:55:32 +01:00
|
|
|
j++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-11-03 06:33:46 +01:00
|
|
|
// Fill the rest of the array with zeroes
|
2018-12-15 21:12:28 +01:00
|
|
|
for (dexNum = j; dexNum < NATIONAL_DEX_COUNT; dexNum++)
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsData->caughtMonIds[dexNum] = NATIONAL_DEX_NONE;
|
2018-02-17 10:55:32 +01:00
|
|
|
|
2019-11-04 17:38:09 +01:00
|
|
|
// Cap the number of pokemon we care about to NUM_MON_SLIDES, the max we show in the credits scene (-1 for the starter)
|
|
|
|
sCreditsData->numCaughtMon = j;
|
|
|
|
if (sCreditsData->numCaughtMon < NUM_MON_SLIDES)
|
|
|
|
sCreditsData->numMonToShow = j;
|
2018-02-17 10:55:32 +01:00
|
|
|
else
|
2019-11-04 17:38:09 +01:00
|
|
|
sCreditsData->numMonToShow = NUM_MON_SLIDES;
|
2018-02-17 10:55:32 +01:00
|
|
|
|
2019-11-03 06:33:46 +01:00
|
|
|
// Loop through our list of caught pokemon and select randomly from it to fill the images to show
|
2018-02-17 10:55:32 +01:00
|
|
|
j = 0;
|
|
|
|
do
|
|
|
|
{
|
2019-11-03 06:33:46 +01:00
|
|
|
// Select a random mon, insert into array
|
2019-11-04 17:38:09 +01:00
|
|
|
page = Random() % sCreditsData->numCaughtMon;
|
|
|
|
sCreditsData->monToShow[j] = sCreditsData->caughtMonIds[page];
|
2019-11-03 06:33:46 +01:00
|
|
|
|
|
|
|
// Remove the select mon from the array, and condense array entries
|
2018-02-17 10:55:32 +01:00
|
|
|
j++;
|
2019-11-04 17:38:09 +01:00
|
|
|
sCreditsData->caughtMonIds[page] = 0;
|
|
|
|
sCreditsData->numCaughtMon--;
|
|
|
|
if (page != sCreditsData->numCaughtMon)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
2019-11-03 06:33:46 +01:00
|
|
|
// Instead of looping through and moving everything down, just take from the end. Order doesn't matter after all.
|
2019-11-04 17:38:09 +01:00
|
|
|
sCreditsData->caughtMonIds[page] = sCreditsData->caughtMonIds[sCreditsData->numCaughtMon];
|
|
|
|
sCreditsData->caughtMonIds[sCreditsData->numCaughtMon] = 0;
|
2018-02-17 10:55:32 +01:00
|
|
|
}
|
|
|
|
}
|
2019-11-04 17:38:09 +01:00
|
|
|
while (sCreditsData->numCaughtMon != 0 && j < NUM_MON_SLIDES);
|
2018-02-17 10:55:32 +01:00
|
|
|
|
2019-11-03 06:33:46 +01:00
|
|
|
// If we don't have enough pokemon in the dex to fill everything, copy the selected mon into the end of the array, so it loops
|
2019-11-04 17:38:09 +01:00
|
|
|
if (sCreditsData->numMonToShow < NUM_MON_SLIDES)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
2019-11-04 17:38:09 +01:00
|
|
|
for (j = sCreditsData->numMonToShow, page = 0; j < NUM_MON_SLIDES; j++)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
2019-11-04 17:38:09 +01:00
|
|
|
sCreditsData->monToShow[j] = sCreditsData->monToShow[page];
|
2018-02-17 10:55:32 +01:00
|
|
|
|
|
|
|
page++;
|
2019-11-04 17:38:09 +01:00
|
|
|
if (page == sCreditsData->numMonToShow)
|
2018-02-17 10:55:32 +01:00
|
|
|
page = 0;
|
|
|
|
}
|
2019-11-03 06:33:46 +01:00
|
|
|
// Ensure the last pokemon is our starter
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsData->monToShow[NUM_MON_SLIDES - 1] = starter;
|
2018-02-17 10:55:32 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2019-11-03 06:33:46 +01:00
|
|
|
// Check to see if our starter has already appeared in this list, break if it has
|
2019-11-04 17:38:09 +01:00
|
|
|
for (dexNum = 0; sCreditsData->monToShow[dexNum] != starter && dexNum < NUM_MON_SLIDES; dexNum++);
|
2018-02-17 10:55:32 +01:00
|
|
|
|
2019-11-03 06:33:46 +01:00
|
|
|
// If it has, swap it with the last pokemon, to ensure our starter is the last image
|
2019-11-04 17:38:09 +01:00
|
|
|
if (dexNum < sCreditsData->numMonToShow - 1)
|
2018-02-17 10:55:32 +01:00
|
|
|
{
|
2019-11-04 17:38:09 +01:00
|
|
|
sCreditsData->monToShow[dexNum] = sCreditsData->monToShow[NUM_MON_SLIDES-1];
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsData->monToShow[NUM_MON_SLIDES - 1] = starter;
|
2018-02-17 10:55:32 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2019-11-03 06:33:46 +01:00
|
|
|
// Ensure the last pokemon is our starter
|
2021-03-05 21:13:08 +01:00
|
|
|
sCreditsData->monToShow[NUM_MON_SLIDES - 1] = starter;
|
2018-02-17 10:55:32 +01:00
|
|
|
}
|
|
|
|
}
|
2019-11-04 17:38:09 +01:00
|
|
|
sCreditsData->numMonToShow = NUM_MON_SLIDES;
|
2018-02-17 10:55:32 +01:00
|
|
|
}
|