Document overlay 102 (diploma)

This commit is contained in:
cbt6 2025-09-06 02:54:17 +08:00
parent a2ac59a73b
commit fb260b382d
16 changed files with 461 additions and 490 deletions

View File

@ -2767,11 +2767,11 @@
.short \destVar
.endm
.macro ScrCmd_1EA
.macro ShowDiplomaSinnoh
.short 490
.endm
.macro ScrCmd_1EB
.macro ShowDiplomaNationalDex
.short 491
.endm

View File

@ -1,5 +1,5 @@
TEXT_BANK_MOVES_USED_IN_BATTLE
TEXT_BANK_UNK_0001
TEXT_BANK_DIPLOMA
TEXT_BANK_BATTLE_BAG
TEXT_BANK_BATTLE_PARTY
TEXT_BANK_UNK_0004

View File

@ -0,0 +1,16 @@
#ifndef POKEPLATINUM_APPLICATIONS_DIPLOMA_H
#define POKEPLATINUM_APPLICATIONS_DIPLOMA_H
#include "overlay_manager.h"
#include "savedata.h"
typedef struct DiplomaData {
SaveData *saveData;
BOOL isNatDex;
} DiplomaData;
BOOL Diploma_Init(ApplicationManager *appMan, int *state);
BOOL Diploma_Main(ApplicationManager *appMan, int *state);
BOOL Diploma_Exit(ApplicationManager *appMan, int *state);
#endif // POKEPLATINUM_APPLICATIONS_DIPLOMA_H

View File

@ -86,7 +86,7 @@ enum HeapID {
HEAP_ID_MAIN_MENU,
HEAP_ID_ROWAN_INTRO,
HEAP_ID_ROWAN_INTRO_TV,
HEAP_ID_84,
HEAP_ID_DIPLOMA,
HEAP_ID_85,
HEAP_ID_MYSTERY_GIFT_APP,
HEAP_ID_WONDER_CARDS_APP,

View File

@ -1,10 +0,0 @@
#ifndef POKEPLATINUM_OV102_021D0D80_H
#define POKEPLATINUM_OV102_021D0D80_H
#include "overlay_manager.h"
int ov102_021D0D80(ApplicationManager *appMan, int *param1);
int ov102_021D0E2C(ApplicationManager *appMan, int *param1);
int ov102_021D0F50(ApplicationManager *appMan, int *param1);
#endif // POKEPLATINUM_OV102_021D0D80_H

View File

@ -1,11 +0,0 @@
#ifndef POKEPLATINUM_STRUCT_0203E53C_H
#define POKEPLATINUM_STRUCT_0203E53C_H
#include "savedata.h"
typedef struct {
SaveData *saveData;
int unk_04;
} UnkStruct_0203E53C;
#endif // POKEPLATINUM_STRUCT_0203E53C_H

View File

@ -101,7 +101,7 @@ void sub_0203E2FC(FieldSystem *fieldSystem);
BOOL sub_0203E348(FieldSystem *fieldSystem, UnkStruct_0203E348 *param1);
void sub_0203E414(FieldTask *task, int slotMachineID);
void AccessoryShop_Init(FieldTask *task);
void *sub_0203E53C(FieldSystem *fieldSystem, int heapID, int param2);
void *FieldSystem_ShowDiploma(FieldSystem *fieldSystem, int heapID, BOOL isNatDex);
void *sub_0203E564(FieldSystem *fieldSystem, u8 param1, u8 param2, u16 param3, int heapID);
void *sub_0203E608(FieldSystem *fieldSystem, int heapID);
void *FieldSystem_OpenSummaryScreenTeachMove(int unused, FieldSystem *fieldSystem, u16 partySlot, u16 move);

View File

@ -1525,10 +1525,10 @@ Overlay overlay101
Object main.nef.p/src_overlay101_ov101_021D94D8.c.o
}
Overlay overlay102
Overlay diploma
{
After main
Object main.nef.p/src_overlay102_ov102_021D0D80.c.o
Object main.nef.p/src_applications_diploma.c.o
}
Overlay overlay103

View File

@ -100,7 +100,7 @@ af7de8e345ff25de55130069f313b57e85d72a4f *overlay96.sbin
e93f9eb3382856feb76c8b0ba400b7d2593db5c5 *overlay99.sbin
0033be85ba8a9f1eac53e0d97090911298c7de82 *overlay100.sbin
31b95069ac95b7e75df9d29ab410dc72c14ea3b5 *overlay101.sbin
20e1299cf7365fe4e84445238d3fd3712279b1a3 *overlay102.sbin
20e1299cf7365fe4e84445238d3fd3712279b1a3 *diploma.sbin
de8a847bff8c343d69b853a215e6ee775ef2ef96 *overlay103.sbin
a3f4dcf6634992ff3367fe5a377825fb913a39f6 *overlay104.sbin
0e6e923a1a359b9482646b3dd0a7a2562e140672 *overlay105.sbin

View File

@ -34,7 +34,7 @@ _0057:
CloseMessage
FadeScreenOut
WaitFadeScreen
ScrCmd_1EA
ShowDiplomaSinnoh
ReturnToField
FadeScreenIn
WaitFadeScreen
@ -51,7 +51,7 @@ _0095:
CloseMessage
FadeScreenOut
WaitFadeScreen
ScrCmd_1EB
ShowDiplomaNationalDex
ReturnToField
FadeScreenIn
WaitFadeScreen

View File

@ -2,11 +2,11 @@
"key": 15060,
"messages": [
{
"id": "pl_msg_00000001_00000",
"id": "Diploma_Text_Player",
"en_US": "PLAYER: {STRVAR_1 3, 0, 0}"
},
{
"id": "pl_msg_00000001_00001",
"id": "Diploma_Text_Sinnoh",
"en_US": [
"This document certifies that\n",
"you have made the great\n",
@ -15,7 +15,7 @@
]
},
{
"id": "pl_msg_00000001_00002",
"id": "Diploma_Text_NationalDex",
"en_US": [
"This document certifies\n",
"that you have successfully\n",
@ -24,7 +24,7 @@
]
},
{
"id": "pl_msg_00000001_00003",
"id": "Diploma_Text_GameFreak",
"en_US": "GAME FREAK"
}
]

407
src/applications/diploma.c Normal file
View File

@ -0,0 +1,407 @@
#include "applications/diploma.h"
#include <nitro.h>
#include <string.h>
#include "struct_defs/struct_02099F80.h"
#include "bg_window.h"
#include "font.h"
#include "graphics.h"
#include "gx_layers.h"
#include "heap.h"
#include "message.h"
#include "overlay_manager.h"
#include "palette.h"
#include "save_player.h"
#include "savedata.h"
#include "screen_fade.h"
#include "strbuf.h"
#include "string_template.h"
#include "system.h"
#include "text.h"
#include "trainer_info.h"
#include "res/text/bank/diploma.h"
typedef struct Diploma {
int heapID;
BOOL isNatDex;
SaveData *saveData;
TrainerInfo *trainerInfo;
BgConfig *bgConfig;
Window mainWindow;
Window subWindow;
MessageLoader *messageLoader;
StringTemplate *stringTemplate;
s16 yOffset;
int timer;
} Diploma;
static void Diploma_VBlankCallback(void *data);
static void Diploma_InitBgs(Diploma *data);
static void Diploma_FreeBgs(Diploma *data);
static void Diploma_InitWindows(Diploma *data);
static void Diploma_Free(Diploma *data);
static void Diploma_ResetYOffset(Diploma *data);
static void Diploma_UpdateYOffset(Diploma *data);
static void Diploma_LoadGraphics(Diploma *data);
static void Diploma_LoadText(Diploma *data);
BOOL Diploma_Init(ApplicationManager *appMan, int *state)
{
Diploma *data;
int heapID = HEAP_ID_DIPLOMA;
Heap_Create(HEAP_ID_APPLICATION, heapID, 0x20000);
data = ApplicationManager_NewData(appMan, sizeof(Diploma), heapID);
memset(data, 0, sizeof(Diploma));
data->heapID = heapID;
DiplomaData *diplomaData = (DiplomaData *)ApplicationManager_Args(appMan);
data->saveData = diplomaData->saveData;
data->isNatDex = diplomaData->isNatDex;
data->trainerInfo = SaveData_GetTrainerInfo(data->saveData);
SetScreenColorBrightness(DS_SCREEN_MAIN, COLOR_BLACK);
SetScreenColorBrightness(DS_SCREEN_SUB, COLOR_BLACK);
SetVBlankCallback(NULL, NULL);
SetHBlankCallback(NULL, NULL);
GXLayers_DisableEngineALayers();
GXLayers_DisableEngineBLayers();
GX_SetVisiblePlane(0);
GXS_SetVisiblePlane(0);
SetAutorepeat(4, 8);
Diploma_InitBgs(data);
Diploma_InitWindows(data);
SetVBlankCallback(Diploma_VBlankCallback, (void *)data);
GXLayers_TurnBothDispOn();
return TRUE;
}
int Diploma_Main(ApplicationManager *appMan, int *state)
{
Diploma *data = ApplicationManager_Data(appMan);
BOOL retVal = FALSE;
switch (*state) {
case 0:
Diploma_ResetYOffset(data);
Diploma_LoadGraphics(data);
Diploma_LoadText(data);
Bg_ToggleLayer(BG_LAYER_MAIN_0, TRUE);
Bg_ToggleLayer(BG_LAYER_MAIN_1, TRUE);
Bg_ToggleLayer(BG_LAYER_MAIN_3, TRUE);
Bg_ToggleLayer(BG_LAYER_SUB_0, TRUE);
Bg_ToggleLayer(BG_LAYER_SUB_1, TRUE);
Bg_ToggleLayer(BG_LAYER_SUB_3, TRUE);
StartScreenFade(FADE_BOTH_SCREENS, FADE_TYPE_BRIGHTNESS_IN, FADE_TYPE_BRIGHTNESS_IN, COLOR_BLACK, 6, 1, data->heapID);
*state = 1;
break;
case 1:
if (IsScreenFadeDone() == TRUE) {
data->timer = 0;
*state = 2;
}
break;
case 2:
if (data->timer < 60) {
data->timer++;
} else {
*state = 3;
}
break;
case 3:
if (data->yOffset > -8 * 24) {
data->yOffset -= 4;
Diploma_UpdateYOffset(data);
} else {
data->yOffset = -8 * 24;
Diploma_UpdateYOffset(data);
*state = 4;
}
break;
case 4:
if (JOY_NEW_ONLY(PAD_BUTTON_A) || JOY_NEW_ONLY(PAD_BUTTON_B) || gSystem.touchPressed) {
StartScreenFade(FADE_BOTH_SCREENS, FADE_TYPE_BRIGHTNESS_OUT, FADE_TYPE_BRIGHTNESS_OUT, COLOR_BLACK, 6, 1, data->heapID);
*state = 5;
}
break;
case 5:
if (IsScreenFadeDone() == TRUE) {
retVal = TRUE;
}
break;
}
return retVal;
}
BOOL Diploma_Exit(ApplicationManager *appMan, int *state)
{
Diploma *data = ApplicationManager_Data(appMan);
int heapID = data->heapID;
Diploma_Free(data);
Diploma_FreeBgs(data);
SetVBlankCallback(NULL, NULL);
ApplicationManager_FreeData(appMan);
Heap_Destroy(heapID);
return TRUE;
}
static void Diploma_VBlankCallback(void *data)
{
Bg_RunScheduledUpdates(((Diploma *)data)->bgConfig);
}
static void Diploma_InitBgs(Diploma *data)
{
UnkStruct_02099F80 banks = {
GX_VRAM_BG_128_B,
GX_VRAM_BGEXTPLTT_NONE,
GX_VRAM_SUB_BG_128_C,
GX_VRAM_SUB_BGEXTPLTT_NONE,
GX_VRAM_OBJ_NONE,
GX_VRAM_OBJEXTPLTT_NONE,
GX_VRAM_SUB_OBJ_NONE,
GX_VRAM_SUB_OBJEXTPLTT_NONE,
GX_VRAM_TEX_NONE,
GX_VRAM_TEXPLTT_NONE,
};
GXLayers_SetBanks(&banks);
data->bgConfig = BgConfig_New(data->heapID);
GraphicsModes graphicsModes = {
.displayMode = GX_DISPMODE_GRAPHICS,
.mainBgMode = GX_BGMODE_0,
.subBgMode = GX_BGMODE_0,
.bg0As2DOr3D = GX_BG0_AS_2D,
};
SetAllGraphicsModes(&graphicsModes);
BgTemplate template = {
.x = 0,
.y = 0,
.bufferSize = 0,
.baseTile = 0,
.screenSize = BG_SCREEN_SIZE_256x256,
.colorMode = GX_BG_COLORMODE_16,
.screenBase = 0,
.charBase = 0,
.bgExtPltt = GX_BG_EXTPLTT_01,
.priority = 0,
.areaOver = 0,
.mosaic = FALSE,
};
template.screenBase = GX_BG_SCRBASE_0x0000;
template.charBase = GX_BG_CHARBASE_0x10000;
template.bufferSize = 0x1000;
template.screenSize = BG_SCREEN_SIZE_256x512;
Bg_InitFromTemplate(data->bgConfig, BG_LAYER_MAIN_0, &template, BG_TYPE_STATIC);
Bg_ClearTilemap(data->bgConfig, BG_LAYER_MAIN_0);
template.screenBase = GX_BG_SCRBASE_0x1000;
template.charBase = GX_BG_CHARBASE_0x08000;
template.bufferSize = 0x1000;
template.screenSize = BG_SCREEN_SIZE_256x512;
Bg_InitFromTemplate(data->bgConfig, BG_LAYER_MAIN_1, &template, BG_TYPE_STATIC);
Bg_ClearTilemap(data->bgConfig, BG_LAYER_MAIN_1);
template.screenBase = GX_BG_SCRBASE_0x2000;
template.charBase = GX_BG_CHARBASE_0x04000;
template.bufferSize = 0x800;
template.screenSize = BG_SCREEN_SIZE_256x256;
Bg_InitFromTemplate(data->bgConfig, BG_LAYER_MAIN_3, &template, BG_TYPE_STATIC);
Bg_ClearTilemap(data->bgConfig, BG_LAYER_MAIN_3);
template.screenBase = GX_BG_SCRBASE_0x0000;
template.charBase = GX_BG_CHARBASE_0x10000;
template.bufferSize = 0x1000;
template.screenSize = BG_SCREEN_SIZE_256x512;
Bg_InitFromTemplate(data->bgConfig, BG_LAYER_SUB_0, &template, BG_TYPE_STATIC);
Bg_ClearTilemap(data->bgConfig, BG_LAYER_SUB_0);
template.screenBase = GX_BG_SCRBASE_0x1000;
template.charBase = GX_BG_CHARBASE_0x08000;
template.bufferSize = 0x1000;
template.screenSize = BG_SCREEN_SIZE_256x512;
Bg_InitFromTemplate(data->bgConfig, BG_LAYER_SUB_1, &template, BG_TYPE_STATIC);
Bg_ClearTilemap(data->bgConfig, BG_LAYER_SUB_1);
template.screenBase = GX_BG_SCRBASE_0x2000;
template.charBase = GX_BG_CHARBASE_0x04000;
template.bufferSize = 0x800;
template.screenSize = BG_SCREEN_SIZE_256x256;
Bg_InitFromTemplate(data->bgConfig, BG_LAYER_SUB_3, &template, BG_TYPE_STATIC);
Bg_ClearTilemap(data->bgConfig, BG_LAYER_SUB_3);
Bg_ToggleLayer(BG_LAYER_MAIN_0, FALSE);
Bg_ToggleLayer(BG_LAYER_MAIN_1, FALSE);
Bg_ToggleLayer(BG_LAYER_MAIN_2, FALSE);
Bg_ToggleLayer(BG_LAYER_MAIN_3, FALSE);
Bg_ToggleLayer(BG_LAYER_SUB_0, FALSE);
Bg_ToggleLayer(BG_LAYER_SUB_1, FALSE);
Bg_ToggleLayer(BG_LAYER_SUB_2, FALSE);
Bg_ToggleLayer(BG_LAYER_SUB_3, FALSE);
}
static void Diploma_FreeBgs(Diploma *data)
{
Bg_ToggleLayer(BG_LAYER_MAIN_0, FALSE);
Bg_ToggleLayer(BG_LAYER_MAIN_1, FALSE);
Bg_ToggleLayer(BG_LAYER_MAIN_2, FALSE);
Bg_ToggleLayer(BG_LAYER_MAIN_3, FALSE);
Bg_ToggleLayer(BG_LAYER_SUB_0, FALSE);
Bg_ToggleLayer(BG_LAYER_SUB_1, FALSE);
Bg_ToggleLayer(BG_LAYER_SUB_2, FALSE);
Bg_ToggleLayer(BG_LAYER_SUB_3, FALSE);
Bg_FreeTilemapBuffer(data->bgConfig, BG_LAYER_MAIN_0);
Bg_FreeTilemapBuffer(data->bgConfig, BG_LAYER_MAIN_1);
Bg_FreeTilemapBuffer(data->bgConfig, BG_LAYER_MAIN_3);
Bg_FreeTilemapBuffer(data->bgConfig, BG_LAYER_SUB_0);
Bg_FreeTilemapBuffer(data->bgConfig, BG_LAYER_SUB_1);
Bg_FreeTilemapBuffer(data->bgConfig, BG_LAYER_SUB_3);
Heap_Free(data->bgConfig);
}
static void Diploma_InitWindows(Diploma *data)
{
WindowTemplate template = {
.bgLayer = BG_LAYER_MAIN_0,
.tilemapLeft = 0,
.tilemapTop = 0,
.width = TILES_TO_PIXELS(4),
.height = TILES_TO_PIXELS(3),
.palette = PLTT_2,
.baseTile = 1,
};
Text_ResetAllPrinters();
data->messageLoader = MessageLoader_Init(MESSAGE_LOADER_NARC_HANDLE, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_DIPLOMA, data->heapID);
data->stringTemplate = StringTemplate_Default(data->heapID);
template.bgLayer = BG_LAYER_MAIN_0;
Window_AddFromTemplate(data->bgConfig, &data->mainWindow, &template);
Window_FillRectWithColor(&data->mainWindow, 0, 0, 0, TILES_TO_PIXELS(32), TILES_TO_PIXELS(24));
template.bgLayer = BG_LAYER_SUB_0;
Window_AddFromTemplate(data->bgConfig, &data->subWindow, &template);
Window_FillRectWithColor(&data->subWindow, 0, 0, 0, TILES_TO_PIXELS(32), TILES_TO_PIXELS(24));
}
static void Diploma_Free(Diploma *data)
{
Window_Remove(&data->subWindow);
Window_Remove(&data->mainWindow);
StringTemplate_Free(data->stringTemplate);
MessageLoader_Free(data->messageLoader);
}
static void Diploma_ResetYOffset(Diploma *data)
{
data->yOffset = 0;
Diploma_UpdateYOffset(data);
}
static void Diploma_UpdateYOffset(Diploma *data)
{
Bg_SetOffset(data->bgConfig, BG_LAYER_MAIN_1, BG_OFFSET_UPDATE_SET_Y, data->yOffset);
Bg_SetOffset(data->bgConfig, BG_LAYER_SUB_1, BG_OFFSET_UPDATE_SET_Y, data->yOffset + (8 * 24));
Bg_SetOffset(data->bgConfig, BG_LAYER_MAIN_0, BG_OFFSET_UPDATE_SET_Y, data->yOffset);
Bg_SetOffset(data->bgConfig, BG_LAYER_SUB_0, BG_OFFSET_UPDATE_SET_Y, data->yOffset + (8 * 24));
}
static void Diploma_LoadGraphics(Diploma *data)
{
int v0, v1, v2;
int v3, v4, v5;
if (data->isNatDex == FALSE) {
v0 = 10;
v1 = 2;
v2 = 6;
v3 = 8;
v4 = 0;
v5 = 4;
} else {
v0 = 11;
v1 = 3;
v2 = 7;
v3 = 9;
v4 = 1;
v5 = 5;
}
Graphics_LoadTilemapToBgLayer(NARC_INDEX_DEMO__SYOUJYOU__SYOUJYOU, v0, data->bgConfig, BG_LAYER_MAIN_3, 0, 0, FALSE, data->heapID);
Graphics_LoadTilesToBgLayer(NARC_INDEX_DEMO__SYOUJYOU__SYOUJYOU, v1, data->bgConfig, BG_LAYER_MAIN_3, 0, 0, FALSE, data->heapID);
Graphics_LoadPalette(NARC_INDEX_DEMO__SYOUJYOU__SYOUJYOU, v2, PAL_LOAD_MAIN_BG, PLTT_OFFSET(PLTT_0), PALETTE_SIZE_BYTES, data->heapID);
Graphics_LoadTilemapToBgLayer(NARC_INDEX_DEMO__SYOUJYOU__SYOUJYOU, v0, data->bgConfig, BG_LAYER_SUB_3, 0, 0, FALSE, data->heapID);
Graphics_LoadTilesToBgLayer(NARC_INDEX_DEMO__SYOUJYOU__SYOUJYOU, v1, data->bgConfig, BG_LAYER_SUB_3, 0, 0, FALSE, data->heapID);
Graphics_LoadPalette(NARC_INDEX_DEMO__SYOUJYOU__SYOUJYOU, v2, PAL_LOAD_SUB_BG, PLTT_OFFSET(PLTT_0), PALETTE_SIZE_BYTES, data->heapID);
Graphics_LoadTilemapToBgLayer(NARC_INDEX_DEMO__SYOUJYOU__SYOUJYOU, v3, data->bgConfig, BG_LAYER_MAIN_1, 0, 0, FALSE, data->heapID);
Bg_ChangeTilemapRectPalette(data->bgConfig, BG_LAYER_MAIN_1, 0, 0, TILES_TO_PIXELS(4), TILES_TO_PIXELS(3), PLTT_1);
Bg_CopyTilemapBufferToVRAM(data->bgConfig, BG_LAYER_MAIN_1);
Graphics_LoadTilesToBgLayer(NARC_INDEX_DEMO__SYOUJYOU__SYOUJYOU, v4, data->bgConfig, BG_LAYER_MAIN_1, 0, 0, FALSE, data->heapID);
Graphics_LoadPalette(NARC_INDEX_DEMO__SYOUJYOU__SYOUJYOU, v5, PAL_LOAD_MAIN_BG, PLTT_OFFSET(PLTT_1), PALETTE_SIZE_BYTES, data->heapID);
Graphics_LoadTilemapToBgLayer(NARC_INDEX_DEMO__SYOUJYOU__SYOUJYOU, v3, data->bgConfig, BG_LAYER_SUB_1, 0, 0, FALSE, data->heapID);
Bg_ChangeTilemapRectPalette(data->bgConfig, BG_LAYER_SUB_1, 0, 0, TILES_TO_PIXELS(4), TILES_TO_PIXELS(3), PLTT_1);
Bg_CopyTilemapBufferToVRAM(data->bgConfig, BG_LAYER_SUB_1);
Graphics_LoadTilesToBgLayer(NARC_INDEX_DEMO__SYOUJYOU__SYOUJYOU, v4, data->bgConfig, BG_LAYER_SUB_1, 0, 0, FALSE, data->heapID);
Graphics_LoadPalette(NARC_INDEX_DEMO__SYOUJYOU__SYOUJYOU, v5, PAL_LOAD_SUB_BG, PLTT_OFFSET(PLTT_1), PALETTE_SIZE_BYTES, data->heapID);
Bg_ClearTilesRange(BG_LAYER_MAIN_0, 32, 0, data->heapID);
Bg_ClearTilesRange(BG_LAYER_SUB_0, 32, 0, data->heapID);
Font_LoadTextPalette(PAL_LOAD_MAIN_BG, PLTT_OFFSET(PLTT_2), data->heapID);
Font_LoadTextPalette(PAL_LOAD_SUB_BG, PLTT_OFFSET(PLTT_2), data->heapID);
}
static void Diploma_LoadText(Diploma *data)
{
Strbuf *strbuf = Strbuf_Init(512, data->heapID);
Strbuf *formatString = Strbuf_Init(512, data->heapID);
MessageLoader_GetStrbuf(data->messageLoader, Diploma_Text_Player, formatString);
StringTemplate_SetPlayerName(data->stringTemplate, 0, data->trainerInfo);
StringTemplate_Format(data->stringTemplate, strbuf, formatString);
Text_AddPrinterWithParamsAndColor(&data->mainWindow, FONT_SYSTEM, strbuf, TILES_TO_PIXELS(6), TILES_TO_PIXELS(4), TEXT_SPEED_INSTANT, TEXT_COLOR(1, 2, 0), NULL);
Text_AddPrinterWithParamsAndColor(&data->subWindow, FONT_SYSTEM, strbuf, TILES_TO_PIXELS(6), TILES_TO_PIXELS(4), TEXT_SPEED_INSTANT, TEXT_COLOR(1, 2, 0), NULL);
Strbuf_Free(formatString);
MessageLoader_GetStrbuf(data->messageLoader, (data->isNatDex == FALSE) ? Diploma_Text_Sinnoh : Diploma_Text_NationalDex, strbuf);
Text_AddPrinterWithParamsAndColor(&data->mainWindow, FONT_SYSTEM, strbuf, TILES_TO_PIXELS(8), TILES_TO_PIXELS(8), TEXT_SPEED_INSTANT, TEXT_COLOR(1, 2, 0), NULL);
Text_AddPrinterWithParamsAndColor(&data->subWindow, FONT_SYSTEM, strbuf, TILES_TO_PIXELS(8), TILES_TO_PIXELS(8), TEXT_SPEED_INSTANT, TEXT_COLOR(1, 2, 0), NULL);
MessageLoader_GetStrbuf(data->messageLoader, Diploma_Text_GameFreak, strbuf);
Text_AddPrinterWithParamsAndColor(&data->mainWindow, FONT_SYSTEM, strbuf, TILES_TO_PIXELS(17.25), TILES_TO_PIXELS(18), TEXT_SPEED_INSTANT, TEXT_COLOR(1, 2, 0), NULL);
Text_AddPrinterWithParamsAndColor(&data->subWindow, FONT_SYSTEM, strbuf, TILES_TO_PIXELS(17.25), TILES_TO_PIXELS(18), TEXT_SPEED_INSTANT, TEXT_COLOR(1, 2, 0), NULL);
Strbuf_Free(strbuf);
}

View File

@ -922,7 +922,7 @@ pokeplatinum_c = files(
'overlay101/ov101_021D59AC.c',
'overlay101/ov101_021D7E48.c',
'overlay101/ov101_021D94D8.c',
'overlay102/ov102_021D0D80.c',
'applications/diploma.c',
'overlay103/ov103_dummy.c',
'overlay104/ov104_0222DCE0.c',
'overlay104/ov104_0222E63C.c',

View File

@ -1,427 +0,0 @@
#include "overlay102/ov102_021D0D80.h"
#include <nitro.h>
#include <string.h>
#include "struct_defs/struct_0203E53C.h"
#include "struct_defs/struct_02099F80.h"
#include "bg_window.h"
#include "font.h"
#include "graphics.h"
#include "gx_layers.h"
#include "heap.h"
#include "message.h"
#include "overlay_manager.h"
#include "save_player.h"
#include "savedata.h"
#include "screen_fade.h"
#include "strbuf.h"
#include "string_template.h"
#include "system.h"
#include "text.h"
#include "trainer_info.h"
typedef struct {
int heapID;
int unk_04;
SaveData *saveData;
TrainerInfo *unk_0C;
BgConfig *unk_10;
Window unk_14;
Window unk_24;
MessageLoader *unk_34;
StringTemplate *unk_38;
s16 unk_3C;
int unk_40;
} UnkStruct_ov102_021D0F8C;
void EnqueueApplication(FSOverlayID param0, const ApplicationManagerTemplate *param1);
int ov102_021D0D80(ApplicationManager *appMan, int *param1);
int ov102_021D0E2C(ApplicationManager *appMan, int *param1);
int ov102_021D0F50(ApplicationManager *appMan, int *param1);
static void ov102_021D0F80(void *param0);
static void ov102_021D0F8C(UnkStruct_ov102_021D0F8C *param0);
static void ov102_021D10F8(UnkStruct_ov102_021D0F8C *param0);
static void ov102_021D1174(UnkStruct_ov102_021D0F8C *param0);
static void ov102_021D1204(UnkStruct_ov102_021D0F8C *param0);
static void ov102_021D1224(UnkStruct_ov102_021D0F8C *param0);
static void ov102_021D1230(UnkStruct_ov102_021D0F8C *param0);
static void ov102_021D1274(UnkStruct_ov102_021D0F8C *param0);
static void ov102_021D1420(UnkStruct_ov102_021D0F8C *param0);
int ov102_021D0D80(ApplicationManager *appMan, int *param1)
{
UnkStruct_ov102_021D0F8C *v0;
int heapID = HEAP_ID_84;
Heap_Create(HEAP_ID_APPLICATION, heapID, 0x20000);
v0 = ApplicationManager_NewData(appMan, sizeof(UnkStruct_ov102_021D0F8C), heapID);
memset(v0, 0, sizeof(UnkStruct_ov102_021D0F8C));
v0->heapID = heapID;
{
UnkStruct_0203E53C *v2 = (UnkStruct_0203E53C *)ApplicationManager_Args(appMan);
v0->saveData = v2->saveData;
v0->unk_04 = v2->unk_04;
v0->unk_0C = SaveData_GetTrainerInfo(v0->saveData);
}
SetScreenColorBrightness(DS_SCREEN_MAIN, COLOR_BLACK);
SetScreenColorBrightness(DS_SCREEN_SUB, COLOR_BLACK);
SetVBlankCallback(NULL, NULL);
SetHBlankCallback(NULL, NULL);
GXLayers_DisableEngineALayers();
GXLayers_DisableEngineBLayers();
GX_SetVisiblePlane(0);
GXS_SetVisiblePlane(0);
SetAutorepeat(4, 8);
ov102_021D0F8C(v0);
ov102_021D1174(v0);
SetVBlankCallback(ov102_021D0F80, (void *)v0);
GXLayers_TurnBothDispOn();
return 1;
}
int ov102_021D0E2C(ApplicationManager *appMan, int *param1)
{
UnkStruct_ov102_021D0F8C *v0 = ApplicationManager_Data(appMan);
int v1 = 0;
switch (*param1) {
case 0:
ov102_021D1224(v0);
ov102_021D1274(v0);
ov102_021D1420(v0);
Bg_ToggleLayer(BG_LAYER_MAIN_0, 1);
;
Bg_ToggleLayer(BG_LAYER_MAIN_1, 1);
;
Bg_ToggleLayer(BG_LAYER_MAIN_3, 1);
;
Bg_ToggleLayer(BG_LAYER_SUB_0, 1);
;
Bg_ToggleLayer(BG_LAYER_SUB_1, 1);
;
Bg_ToggleLayer(BG_LAYER_SUB_3, 1);
;
StartScreenFade(FADE_BOTH_SCREENS, FADE_TYPE_BRIGHTNESS_IN, FADE_TYPE_BRIGHTNESS_IN, COLOR_BLACK, 6, 1, v0->heapID);
*param1 = 1;
break;
case 1:
if (IsScreenFadeDone() == TRUE) {
v0->unk_40 = 0;
*param1 = 2;
}
break;
case 2:
if (v0->unk_40 < 60) {
v0->unk_40++;
} else {
*param1 = 3;
}
break;
case 3:
if (v0->unk_3C > -8 * 24) {
v0->unk_3C -= 4;
ov102_021D1230(v0);
} else {
v0->unk_3C = -8 * 24;
ov102_021D1230(v0);
*param1 = 4;
}
break;
case 4:
if (((gSystem.pressedKeys & PAD_BUTTON_A) == PAD_BUTTON_A) || ((gSystem.pressedKeys & PAD_BUTTON_B) == PAD_BUTTON_B) || (gSystem.touchPressed)) {
StartScreenFade(FADE_BOTH_SCREENS, FADE_TYPE_BRIGHTNESS_OUT, FADE_TYPE_BRIGHTNESS_OUT, COLOR_BLACK, 6, 1, v0->heapID);
*param1 = 5;
}
break;
case 5:
if (IsScreenFadeDone() == TRUE) {
v1 = 1;
}
break;
}
return v1;
}
int ov102_021D0F50(ApplicationManager *appMan, int *param1)
{
UnkStruct_ov102_021D0F8C *v0 = ApplicationManager_Data(appMan);
int heapID = v0->heapID;
ov102_021D1204(v0);
ov102_021D10F8(v0);
SetVBlankCallback(NULL, NULL);
ApplicationManager_FreeData(appMan);
Heap_Destroy(heapID);
return 1;
}
static void ov102_021D0F80(void *param0)
{
UnkStruct_ov102_021D0F8C *v0 = param0;
Bg_RunScheduledUpdates(v0->unk_10);
}
#define BGCONTSET(frame, scr, cgx, scrsiz, bufsiz) \
{ \
v2.unk_12 = scr; \
v2.unk_13 = cgx; \
v2.unk_08 = bufsiz; \
v2.unk_10 = scrsiz; \
Bg_InitFromTemplate(param0->unk_10, frame, &v2, 0); \
Bg_ClearTilemap(param0->unk_10, frame); \
}
static void ov102_021D0F8C(UnkStruct_ov102_021D0F8C *param0)
{
{
UnkStruct_02099F80 v0 = {
GX_VRAM_BG_128_B, GX_VRAM_BGEXTPLTT_NONE, GX_VRAM_SUB_BG_128_C, GX_VRAM_SUB_BGEXTPLTT_NONE, GX_VRAM_OBJ_NONE, GX_VRAM_OBJEXTPLTT_NONE, GX_VRAM_SUB_OBJ_NONE, GX_VRAM_SUB_OBJEXTPLTT_NONE, GX_VRAM_TEX_NONE, GX_VRAM_TEXPLTT_NONE
};
GXLayers_SetBanks(&v0);
}
{
param0->unk_10 = BgConfig_New(param0->heapID);
}
{
GraphicsModes v1 = {
GX_DISPMODE_GRAPHICS, GX_BGMODE_0, GX_BGMODE_0, GX_BG0_AS_2D
};
SetAllGraphicsModes(&v1);
}
{
BgTemplate v2 = {
.x = 0,
.y = 0,
.bufferSize = 0,
.baseTile = 0,
.screenSize = BG_SCREEN_SIZE_256x256,
.colorMode = GX_BG_COLORMODE_16,
.screenBase = 0,
.charBase = 0,
.bgExtPltt = GX_BG_EXTPLTT_01,
.priority = 0,
.areaOver = 0,
.mosaic = FALSE,
};
v2.screenBase = GX_BG_SCRBASE_0x0000;
v2.charBase = GX_BG_CHARBASE_0x10000;
v2.bufferSize = 0x1000;
v2.screenSize = 2;
Bg_InitFromTemplate(param0->unk_10, BG_LAYER_MAIN_0, &v2, 0);
Bg_ClearTilemap(param0->unk_10, BG_LAYER_MAIN_0);
v2.screenBase = GX_BG_SCRBASE_0x1000;
v2.charBase = GX_BG_CHARBASE_0x08000;
v2.bufferSize = 0x1000;
v2.screenSize = 2;
Bg_InitFromTemplate(param0->unk_10, BG_LAYER_MAIN_1, &v2, 0);
Bg_ClearTilemap(param0->unk_10, BG_LAYER_MAIN_1);
v2.screenBase = GX_BG_SCRBASE_0x2000;
v2.charBase = GX_BG_CHARBASE_0x04000;
v2.bufferSize = 0x800;
v2.screenSize = 1;
Bg_InitFromTemplate(param0->unk_10, BG_LAYER_MAIN_3, &v2, 0);
Bg_ClearTilemap(param0->unk_10, BG_LAYER_MAIN_3);
v2.screenBase = GX_BG_SCRBASE_0x0000;
v2.charBase = GX_BG_CHARBASE_0x10000;
v2.bufferSize = 0x1000;
v2.screenSize = 2;
Bg_InitFromTemplate(param0->unk_10, BG_LAYER_SUB_0, &v2, 0);
Bg_ClearTilemap(param0->unk_10, BG_LAYER_SUB_0);
v2.screenBase = GX_BG_SCRBASE_0x1000;
v2.charBase = GX_BG_CHARBASE_0x08000;
v2.bufferSize = 0x1000;
v2.screenSize = 2;
Bg_InitFromTemplate(param0->unk_10, BG_LAYER_SUB_1, &v2, 0);
Bg_ClearTilemap(param0->unk_10, BG_LAYER_SUB_1);
v2.screenBase = GX_BG_SCRBASE_0x2000;
v2.charBase = GX_BG_CHARBASE_0x04000;
v2.bufferSize = 0x800;
v2.screenSize = 1;
Bg_InitFromTemplate(param0->unk_10, BG_LAYER_SUB_3, &v2, 0);
Bg_ClearTilemap(param0->unk_10, BG_LAYER_SUB_3);
}
Bg_ToggleLayer(BG_LAYER_MAIN_0, 0);
Bg_ToggleLayer(BG_LAYER_MAIN_1, 0);
Bg_ToggleLayer(BG_LAYER_MAIN_2, 0);
Bg_ToggleLayer(BG_LAYER_MAIN_3, 0);
Bg_ToggleLayer(BG_LAYER_SUB_0, 0);
Bg_ToggleLayer(BG_LAYER_SUB_1, 0);
Bg_ToggleLayer(BG_LAYER_SUB_2, 0);
Bg_ToggleLayer(BG_LAYER_SUB_3, 0);
}
static void ov102_021D10F8(UnkStruct_ov102_021D0F8C *param0)
{
Bg_ToggleLayer(BG_LAYER_MAIN_0, 0);
Bg_ToggleLayer(BG_LAYER_MAIN_1, 0);
Bg_ToggleLayer(BG_LAYER_MAIN_2, 0);
Bg_ToggleLayer(BG_LAYER_MAIN_3, 0);
Bg_ToggleLayer(BG_LAYER_SUB_0, 0);
Bg_ToggleLayer(BG_LAYER_SUB_1, 0);
Bg_ToggleLayer(BG_LAYER_SUB_2, 0);
Bg_ToggleLayer(BG_LAYER_SUB_3, 0);
Bg_FreeTilemapBuffer(param0->unk_10, BG_LAYER_MAIN_0);
Bg_FreeTilemapBuffer(param0->unk_10, BG_LAYER_MAIN_1);
Bg_FreeTilemapBuffer(param0->unk_10, BG_LAYER_MAIN_3);
Bg_FreeTilemapBuffer(param0->unk_10, BG_LAYER_SUB_0);
Bg_FreeTilemapBuffer(param0->unk_10, BG_LAYER_SUB_1);
Bg_FreeTilemapBuffer(param0->unk_10, BG_LAYER_SUB_3);
Heap_Free(param0->unk_10);
}
static void ov102_021D1174(UnkStruct_ov102_021D0F8C *param0)
{
WindowTemplate v0 = { 0, 0, 0, 32, 24, 2, 1 };
Text_ResetAllPrinters();
param0->unk_34 = MessageLoader_Init(MESSAGE_LOADER_NARC_HANDLE, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_UNK_0001, param0->heapID);
param0->unk_38 = StringTemplate_Default(param0->heapID);
v0.bgLayer = 0;
Window_AddFromTemplate(param0->unk_10, &param0->unk_14, &v0);
Window_FillRectWithColor(&param0->unk_14, 0, 0, 0, 32 * 8, 24 * 8);
v0.bgLayer = 4;
Window_AddFromTemplate(param0->unk_10, &param0->unk_24, &v0);
Window_FillRectWithColor(&param0->unk_24, 0, 0, 0, 32 * 8, 24 * 8);
}
static void ov102_021D1204(UnkStruct_ov102_021D0F8C *param0)
{
Window_Remove(&param0->unk_24);
Window_Remove(&param0->unk_14);
StringTemplate_Free(param0->unk_38);
MessageLoader_Free(param0->unk_34);
}
static void ov102_021D1224(UnkStruct_ov102_021D0F8C *param0)
{
param0->unk_3C = 0;
ov102_021D1230(param0);
}
static void ov102_021D1230(UnkStruct_ov102_021D0F8C *param0)
{
Bg_SetOffset(param0->unk_10, BG_LAYER_MAIN_1, 3, param0->unk_3C);
Bg_SetOffset(param0->unk_10, BG_LAYER_SUB_1, 3, param0->unk_3C + (8 * 24));
Bg_SetOffset(param0->unk_10, BG_LAYER_MAIN_0, 3, param0->unk_3C);
Bg_SetOffset(param0->unk_10, BG_LAYER_SUB_0, 3, param0->unk_3C + (8 * 24));
}
static void ov102_021D1274(UnkStruct_ov102_021D0F8C *param0)
{
int v0, v1, v2;
int v3, v4, v5;
if (param0->unk_04 == 0) {
v0 = 10;
v1 = 2;
v2 = 6;
v3 = 8;
v4 = 0;
v5 = 4;
} else {
v0 = 11;
v1 = 3;
v2 = 7;
v3 = 9;
v4 = 1;
v5 = 5;
}
Graphics_LoadTilemapToBgLayer(NARC_INDEX_DEMO__SYOUJYOU__SYOUJYOU, v0, param0->unk_10, 3, 0, 0, 0, param0->heapID);
Graphics_LoadTilesToBgLayer(NARC_INDEX_DEMO__SYOUJYOU__SYOUJYOU, v1, param0->unk_10, 3, 0, 0, 0, param0->heapID);
Graphics_LoadPalette(NARC_INDEX_DEMO__SYOUJYOU__SYOUJYOU, v2, 0, 0 * (2 * 16), 2 * 16, param0->heapID);
Graphics_LoadTilemapToBgLayer(NARC_INDEX_DEMO__SYOUJYOU__SYOUJYOU, v0, param0->unk_10, 7, 0, 0, 0, param0->heapID);
Graphics_LoadTilesToBgLayer(NARC_INDEX_DEMO__SYOUJYOU__SYOUJYOU, v1, param0->unk_10, 7, 0, 0, 0, param0->heapID);
Graphics_LoadPalette(NARC_INDEX_DEMO__SYOUJYOU__SYOUJYOU, v2, 4, 0 * (2 * 16), 2 * 16, param0->heapID);
Graphics_LoadTilemapToBgLayer(NARC_INDEX_DEMO__SYOUJYOU__SYOUJYOU, v3, param0->unk_10, 1, 0, 0, 0, param0->heapID);
Bg_ChangeTilemapRectPalette(param0->unk_10, 1, 0, 0, 32, 24, 1);
Bg_CopyTilemapBufferToVRAM(param0->unk_10, 1);
Graphics_LoadTilesToBgLayer(NARC_INDEX_DEMO__SYOUJYOU__SYOUJYOU, v4, param0->unk_10, 1, 0, 0, 0, param0->heapID);
Graphics_LoadPalette(NARC_INDEX_DEMO__SYOUJYOU__SYOUJYOU, v5, 0, 1 * (2 * 16), 2 * 16, param0->heapID);
Graphics_LoadTilemapToBgLayer(NARC_INDEX_DEMO__SYOUJYOU__SYOUJYOU, v3, param0->unk_10, 5, 0, 0, 0, param0->heapID);
Bg_ChangeTilemapRectPalette(param0->unk_10, 5, 0, 0, 32, 24, 1);
Bg_CopyTilemapBufferToVRAM(param0->unk_10, 5);
Graphics_LoadTilesToBgLayer(NARC_INDEX_DEMO__SYOUJYOU__SYOUJYOU, v4, param0->unk_10, 5, 0, 0, 0, param0->heapID);
Graphics_LoadPalette(NARC_INDEX_DEMO__SYOUJYOU__SYOUJYOU, v5, 4, 1 * (2 * 16), 2 * 16, param0->heapID);
Bg_ClearTilesRange(BG_LAYER_MAIN_0, 32, 0, param0->heapID);
Bg_ClearTilesRange(4, 32, 0, param0->heapID);
Font_LoadTextPalette(0, 2 * (2 * 16), param0->heapID);
Font_LoadTextPalette(4, 2 * (2 * 16), param0->heapID);
}
static void ov102_021D1420(UnkStruct_ov102_021D0F8C *param0)
{
Strbuf *v0 = Strbuf_Init(0x200, param0->heapID);
{
Strbuf *v1 = Strbuf_Init(0x200, param0->heapID);
MessageLoader_GetStrbuf(param0->unk_34, 0, v1);
StringTemplate_SetPlayerName(param0->unk_38, 0, param0->unk_0C);
StringTemplate_Format(param0->unk_38, v0, v1);
Text_AddPrinterWithParamsAndColor(&param0->unk_14, FONT_SYSTEM, v0, 48, 32, TEXT_SPEED_INSTANT, TEXT_COLOR(1, 2, 0), NULL);
Text_AddPrinterWithParamsAndColor(&param0->unk_24, FONT_SYSTEM, v0, 48, 32, TEXT_SPEED_INSTANT, TEXT_COLOR(1, 2, 0), NULL);
Strbuf_Free(v1);
}
{
int v2;
if (param0->unk_04 == 0) {
v2 = 1;
} else {
v2 = 2;
}
MessageLoader_GetStrbuf(param0->unk_34, v2, v0);
Text_AddPrinterWithParamsAndColor(&param0->unk_14, FONT_SYSTEM, v0, 64, 64, TEXT_SPEED_INSTANT, TEXT_COLOR(1, 2, 0), NULL);
Text_AddPrinterWithParamsAndColor(&param0->unk_24, FONT_SYSTEM, v0, 64, 64, TEXT_SPEED_INSTANT, TEXT_COLOR(1, 2, 0), NULL);
}
{
MessageLoader_GetStrbuf(param0->unk_34, 3, v0);
Text_AddPrinterWithParamsAndColor(&param0->unk_14, FONT_SYSTEM, v0, 138, 144, TEXT_SPEED_INSTANT, TEXT_COLOR(1, 2, 0), NULL);
Text_AddPrinterWithParamsAndColor(&param0->unk_24, FONT_SYSTEM, v0, 138, 144, TEXT_SPEED_INSTANT, TEXT_COLOR(1, 2, 0), NULL);
}
Strbuf_Free(v0);
}

View File

@ -576,8 +576,8 @@ static BOOL ScrCmd_OpenPartyMenuForContest(ScriptContext *ctx);
static BOOL ScrCmd_195(ScriptContext *ctx);
static BOOL ScrCmd_CheckLocalDexCompleted(ScriptContext *ctx);
static BOOL ScrCmd_CheckNationalDexCompleted(ScriptContext *ctx);
static BOOL ScrCmd_1EA(ScriptContext *ctx);
static BOOL ScrCmd_1EB(ScriptContext *ctx);
static BOOL ScrCmd_ShowDiplomaSinnoh(ScriptContext *ctx);
static BOOL ScrCmd_ShowDiplomaNationalDex(ScriptContext *ctx);
static BOOL ScrCmd_AddTrophyGardenMon(ScriptContext *ctx);
static BOOL ScrCmd_GetTrophyGardenSlot1Species(ScriptContext *ctx);
static BOOL ScrCmd_Unused_1EF(ScriptContext *ctx);
@ -1260,8 +1260,8 @@ const ScrCmdFunc Unk_020EAC58[] = {
ScrCmd_Unused_1E7,
ScrCmd_CheckLocalDexCompleted,
ScrCmd_CheckNationalDexCompleted,
ScrCmd_1EA,
ScrCmd_1EB,
ScrCmd_ShowDiplomaSinnoh,
ScrCmd_ShowDiplomaNationalDex,
ScrCmd_AddTrophyGardenMon,
ScrCmd_GetTrophyGardenSlot1Species,
ScrCmd_GetPartyMonHeldItem_Unused,
@ -6019,21 +6019,21 @@ static BOOL ScrCmd_CheckNationalDexCompleted(ScriptContext *ctx)
return FALSE;
}
static BOOL ScrCmd_1EA(ScriptContext *ctx)
static BOOL ScrCmd_ShowDiplomaSinnoh(ScriptContext *ctx)
{
void **v0 = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_PARTY_MANAGEMENT_DATA);
void **data = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_PARTY_MANAGEMENT_DATA);
*v0 = sub_0203E53C(ctx->fieldSystem, HEAP_ID_FIELD3, 0);
*data = FieldSystem_ShowDiploma(ctx->fieldSystem, HEAP_ID_FIELD3, FALSE);
ScriptContext_Pause(ctx, sub_02041CC8);
return TRUE;
}
static BOOL ScrCmd_1EB(ScriptContext *ctx)
static BOOL ScrCmd_ShowDiplomaNationalDex(ScriptContext *ctx)
{
void **v0 = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_PARTY_MANAGEMENT_DATA);
void **data = FieldSystem_GetScriptMemberPtr(ctx->fieldSystem, SCRIPT_MANAGER_PARTY_MANAGEMENT_DATA);
*v0 = sub_0203E53C(ctx->fieldSystem, HEAP_ID_FIELD3, 1);
*data = FieldSystem_ShowDiploma(ctx->fieldSystem, HEAP_ID_FIELD3, TRUE);
ScriptContext_Pause(ctx, sub_02041CC8);
return TRUE;

View File

@ -23,7 +23,6 @@
#include "struct_defs/struct_0203E274.h"
#include "struct_defs/struct_0203E2FC.h"
#include "struct_defs/struct_0203E348.h"
#include "struct_defs/struct_0203E53C.h"
#include "struct_defs/struct_0203E564.h"
#include "struct_defs/struct_0203E608.h"
#include "struct_defs/struct_0203E6C0.h"
@ -31,6 +30,7 @@
#include "struct_defs/struct_02097728.h"
#include "struct_defs/struct_020997B8.h"
#include "applications/diploma.h"
#include "applications/journal_display/journal_controller.h"
#include "applications/naming_screen.h"
#include "applications/options_menu.h"
@ -73,7 +73,6 @@
#include "overlay096/ov96_0223B6A0.h"
#include "overlay099/ov99_021D0D80.h"
#include "overlay101/ov101_021D0D80.h"
#include "overlay102/ov102_021D0D80.h"
#include "overlay110/ov110_021D0D80.h"
#include "overlay111/ov111_021D0D80.h"
#include "savedata/save_table.h"
@ -171,7 +170,6 @@ FS_EXTERN_OVERLAY(overlay95);
FS_EXTERN_OVERLAY(overlay96);
FS_EXTERN_OVERLAY(overlay99);
FS_EXTERN_OVERLAY(overlay101);
FS_EXTERN_OVERLAY(overlay102);
FS_EXTERN_OVERLAY(overlay110);
FS_EXTERN_OVERLAY(overlay111);
FS_EXTERN_OVERLAY(dw_warp);
@ -1657,26 +1655,24 @@ void AccessoryShop_Init(FieldTask *task)
FieldTask_InitCall(task, FieldTask_AccessoryShop, shop);
}
void *sub_0203E53C(FieldSystem *fieldSystem, int heapID, int param2)
void *FieldSystem_ShowDiploma(FieldSystem *fieldSystem, int heapID, BOOL isNatDex)
{
FS_EXTERN_OVERLAY(overlay102);
FS_EXTERN_OVERLAY(diploma);
static const ApplicationManagerTemplate v0 = {
ov102_021D0D80,
ov102_021D0E2C,
ov102_021D0F50,
FS_OVERLAY_ID(overlay102),
static const ApplicationManagerTemplate template = {
Diploma_Init,
Diploma_Main,
Diploma_Exit,
FS_OVERLAY_ID(diploma),
};
UnkStruct_0203E53C *v1 = Heap_Alloc(heapID, sizeof(UnkStruct_0203E53C));
DiplomaData *diplomaData = Heap_Alloc(heapID, sizeof(DiplomaData));
{
v1->unk_04 = param2;
v1->saveData = fieldSystem->saveData;
}
diplomaData->isNatDex = isNatDex;
diplomaData->saveData = fieldSystem->saveData;
FieldSystem_StartChildProcess(fieldSystem, &v0, v1);
FieldSystem_StartChildProcess(fieldSystem, &template, diplomaData);
return v1;
return diplomaData;
}
void *sub_0203E564(FieldSystem *fieldSystem, u8 param1, u8 param2, u16 param3, int heapID)