From 10eb952db5d52dbbcba98314f6042e981de2f942 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 2 Sep 2018 18:10:36 +0200 Subject: Start battle factory --- src/battle_frontier_2.c | 337 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 337 insertions(+) create mode 100644 src/battle_frontier_2.c (limited to 'src') diff --git a/src/battle_frontier_2.c b/src/battle_frontier_2.c new file mode 100644 index 000000000..958aa4692 --- /dev/null +++ b/src/battle_frontier_2.c @@ -0,0 +1,337 @@ +#include "global.h" +#include "sprite.h" +#include "event_data.h" +#include "overworld.h" +#include "random.h" +#include "battle_tower.h" +#include "text.h" +#include "palette.h" +#include "task.h" +#include "main.h" +#include "malloc.h" +#include "bg.h" +#include "gpu_regs.h" +#include "window.h" +#include "decompress.h" +#include "constants/battle_frontier.h" + +#define SELECTABLE_MONS_COUNT 6 +#define TAG_PAL_BALL_GREY 0x64 +#define TAG_PAL_BALL_SELECTED 0x65 + +struct FactorySelecteableMon +{ + u16 unk0; + u16 spriteId; + bool8 selected; + u8 filler6[0x6A - 6]; + u8 unk6A; +}; + +struct UnkStructTempName +{ + u8 menuCursorPos; + u8 unk1; + u8 unk2; + u8 cursorPos; + u8 unk4; + u8 unk5; + bool8 fromSummaryScreen; + u8 unk7; + u8 unk8; + u8 unk9; + struct FactorySelecteableMon mons[SELECTABLE_MONS_COUNT]; + u8 filler294[0x2a1 - 0x294]; + u8 unk2A1; + u8 unk2A2; + u8 unk2A3; + u16 unk2A4; + u16 unk2A6; + u16 unk2A8; + u16 unk2AA; +}; + +extern struct UnkStructTempName *gUnknown_0300127C; +extern u8 *gUnknown_0203CE2C; +extern u8 *gUnknown_0203CE30; +extern u8 *gUnknown_0203CE34; +extern u8 *gUnknown_0203CE38; +extern struct Pokemon *gUnknown_0203CE3C; +extern u8 gUnknown_0203CF20; + +// This file's functions. +void sub_819A514(void); +void sub_819C5D0(u16 mWin0H, u16 nWin0H, u16 mWin0V, u16 nWin0V); +void sub_819A9AC(void); +void sub_819AA18(void); +void sub_819BE34(void); +void sub_819BA64(void); +void sub_819BCF8(void); +void sub_819B9E8(void); +void sub_819B9B4(void); +void sub_819C69C(u8 taskId); +void sub_819B378(u8 taskId); +void sub_819B124(u8 taskId); +void sub_819B484(u8 arg0); +void sub_819B63C(u8 arg0); +void SetBallSpritePaletteNum(u8 id); + +// Const rom data. +extern const struct BgTemplate gUnknown_08610428[3]; +extern const struct WindowTemplate gUnknown_08610434[]; +extern const u8 gUnknown_0861033C[]; +extern const u8 gUnknown_0861023C[]; +extern const u16 gUnknown_0861046C[]; +extern const u16 gUnknown_0861039C[]; +extern const struct SpritePalette gUnknown_086103F4[]; +extern const struct SpriteSheet gUnknown_086103BC[]; +extern const struct CompressedSpriteSheet gUnknown_086103E4[]; +extern const struct SpriteTemplate gUnknown_086105D8; + +// gfx +extern const u8 gFrontierFactorySelectMenu_Gfx[]; +extern const u8 gFrontierFactorySelectMenu_Tilemap[]; +extern const u16 gFrontierFactorySelectMenu_Pal[]; + +// code +void sub_819A44C(struct Sprite *sprite) +{ + if (sprite->oam.paletteNum == IndexOfSpritePaletteTag(TAG_PAL_BALL_SELECTED)) + { + if (sprite->animEnded) + { + if (sprite->data[0] != 0) + { + sprite->data[0]--; + } + else if (Random() % 5 == 0) + { + StartSpriteAnim(sprite, 0); + sprite->data[0] = 32; + } + else + { + StartSpriteAnim(sprite, 1); + } + } + else + { + StartSpriteAnimIfDifferent(sprite, 1); + } + } + else + { + StartSpriteAnimIfDifferent(sprite, 0); + } +} + +void sub_819A4C8(void) +{ + AnimateSprites(); + BuildOamBuffer(); + RunTextPrinters(); + UpdatePaletteFade(); + RunTasks(); +} + +void sub_819A4E4(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_819A4F8(void) +{ + gUnknown_0300127C = NULL; + SetMainCallback2(sub_819A514); +} + +void sub_819A514(void) +{ + u8 taskId; + + switch (gMain.state) + { + case 0: + if (gUnknown_0203CE3C != NULL) + FREE_AND_SET_NULL(gUnknown_0203CE3C); + SetHBlankCallback(NULL); + SetVBlankCallback(NULL); + CpuFill32(0, (void *)VRAM, VRAM_SIZE); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_08610428, ARRAY_COUNT(gUnknown_08610428)); + InitWindows(gUnknown_08610434); + DeactivateAllTextPrinters(); + gMain.state++; + break; + case 1: + gUnknown_0203CE2C = Alloc(0x440); + gUnknown_0203CE30 = AllocZeroed(0x440); + gUnknown_0203CE34 = Alloc(0x800); + gUnknown_0203CE38 = AllocZeroed(0x800); + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + SetGpuReg(REG_OFFSET_BLDY, 0); + SetGpuReg(REG_OFFSET_MOSAIC, 0); + SetGpuReg(REG_OFFSET_WIN0H, 0); + SetGpuReg(REG_OFFSET_WIN0V, 0); + SetGpuReg(REG_OFFSET_WIN1H, 0); + SetGpuReg(REG_OFFSET_WIN1V, 0); + SetGpuReg(REG_OFFSET_WININ, 0); + SetGpuReg(REG_OFFSET_WINOUT, 0); + gMain.state++; + break; + case 2: + ResetPaletteFade(); + ResetSpriteData(); + ResetTasks(); + FreeAllSpritePalettes(); + CpuCopy16(gFrontierFactorySelectMenu_Gfx, gUnknown_0203CE2C, 0x440); + CpuCopy16(gUnknown_0861033C, gUnknown_0203CE30, 0x60); + LoadBgTiles(1, gUnknown_0203CE2C, 0x440, 0); + LoadBgTiles(3, gUnknown_0203CE30, 0x60, 0); + CpuCopy16(gFrontierFactorySelectMenu_Tilemap, gUnknown_0203CE34, 0x800); + LoadBgTilemap(1, gUnknown_0203CE34, 0x800, 0); + LoadPalette(gFrontierFactorySelectMenu_Pal, 0, 0x40); + LoadPalette(gUnknown_0861046C, 0xF0, 8); + LoadPalette(gUnknown_0861046C, 0xE0, 10); + if (gUnknown_0300127C->fromSummaryScreen == TRUE) + gPlttBufferUnfaded[228] = gUnknown_0300127C->unk2A4; + LoadPalette(gUnknown_0861039C, 0x20, 4); + gMain.state++; + break; + case 3: + SetBgTilemapBuffer(3, gUnknown_0203CE38); + CopyToBgTilemapBufferRect(3, gUnknown_0861023C, 11, 4, 8, 8); + CopyToBgTilemapBufferRect(3, gUnknown_0861023C, 2, 4, 8, 8); + CopyToBgTilemapBufferRect(3, gUnknown_0861023C, 20, 4, 8, 8); + CopyBgTilemapBufferToVram(3); + gMain.state++; + break; + case 4: + LoadSpritePalettes(gUnknown_086103F4); + LoadSpriteSheets(gUnknown_086103BC); + LoadCompressedObjectPic(gUnknown_086103E4); + ShowBg(0); + ShowBg(1); + SetVBlankCallback(sub_819A4E4); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_1D_MAP); + if (gUnknown_0300127C->fromSummaryScreen == TRUE) + { + sub_819C5D0(88, 152, 32, 96); + ShowBg(3); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_OBJ); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4)); + } + else + { + HideBg(3); + } + gMain.state++; + break; + case 5: + if (gUnknown_0300127C->fromSummaryScreen == TRUE) + gUnknown_0300127C->cursorPos = gUnknown_0203CF20; + sub_819A9AC(); + sub_819AA18(); + if (gUnknown_0300127C->fromSummaryScreen == TRUE) + sub_819BE34(); + gMain.state++; + break; + case 6: + sub_819BA64(); + PutWindowTilemap(2); + gMain.state++; + break; + case 7: + sub_819BCF8(); + PutWindowTilemap(5); + gMain.state++; + break; + case 8: + sub_819B9E8(); + PutWindowTilemap(1); + gMain.state++; + break; + case 9: + sub_819B9B4(); + PutWindowTilemap(0); + gMain.state++; + break; + case 10: + gUnknown_0300127C->unk2A1 = CreateTask(sub_819C69C, 0); + if (!gUnknown_0300127C->fromSummaryScreen) + { + gTasks[gUnknown_0300127C->unk2A1].data[0] = 0; + taskId = CreateTask(sub_819B378, 0); + gTasks[taskId].data[0] = 0; + } + else + { + gTasks[gUnknown_0300127C->unk2A1].data[0] = 1; + gUnknown_0300127C->unk2A2 = 0; + taskId = CreateTask(sub_819B124, 0); + gTasks[taskId].data[0] = 13; + } + SetMainCallback2(sub_819A4C8); + break; + } +} + +void sub_819A9AC(void) +{ + u8 i; + + if (gUnknown_0300127C != NULL) + return; + + gUnknown_0300127C = AllocZeroed(sizeof(*gUnknown_0300127C)); + gUnknown_0300127C->cursorPos = 0; + gUnknown_0300127C->unk5 = 1; + gUnknown_0300127C->fromSummaryScreen = FALSE; + for (i = 0; i < SELECTABLE_MONS_COUNT; i++) + gUnknown_0300127C->mons[i].selected = FALSE; + + if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_TENT) + sub_819B484(0); + else + sub_819B63C(0); +} + +extern const struct SpriteTemplate gUnknown_086105F0; +extern const struct SpriteTemplate gUnknown_08610608; +extern const struct SpriteTemplate gUnknown_08610620; + +void sub_819AA18(void) +{ + u8 i, cursorPos; + s16 x; + + for (i = 0; i < SELECTABLE_MONS_COUNT; i++) + { + gUnknown_0300127C->mons[i].spriteId = CreateSprite(&gUnknown_086105D8, (35 * i) + 32, 64, 1); + gSprites[gUnknown_0300127C->mons[i].spriteId].data[0] = 0; + SetBallSpritePaletteNum(i); + } + cursorPos = gUnknown_0300127C->cursorPos; + x = gSprites[gUnknown_0300127C->mons[cursorPos].spriteId].pos1.x; + gUnknown_0300127C->unk4 = CreateSprite(&gUnknown_086105F0, x, 88, 0); + gUnknown_0300127C->unk1 = CreateSprite(&gUnknown_08610608, 176, 112, 0); + gUnknown_0300127C->unk2 = CreateSprite(&gUnknown_08610620, 176, 144, 0); + + gSprites[gUnknown_0300127C->unk1].invisible = 1; + gSprites[gUnknown_0300127C->unk2].invisible = 1; + + gSprites[gUnknown_0300127C->unk1].centerToCornerVecX = 0; + gSprites[gUnknown_0300127C->unk1].centerToCornerVecY = 0; + gSprites[gUnknown_0300127C->unk2].centerToCornerVecX = 0; + gSprites[gUnknown_0300127C->unk2].centerToCornerVecY = 0; +} -- cgit v1.2.3 From 0238b1c8ec6a7793917dcc9f358b964a3090715f Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 2 Sep 2018 19:41:33 +0200 Subject: More battle factory work --- src/battle_factory.c | 602 ++++++++++++++++++++++++++++++++++++++++++++++++ src/battle_frontier_2.c | 337 --------------------------- 2 files changed, 602 insertions(+), 337 deletions(-) create mode 100644 src/battle_factory.c delete mode 100644 src/battle_frontier_2.c (limited to 'src') diff --git a/src/battle_factory.c b/src/battle_factory.c new file mode 100644 index 000000000..e1c955122 --- /dev/null +++ b/src/battle_factory.c @@ -0,0 +1,602 @@ +#include "global.h" +#include "sprite.h" +#include "event_data.h" +#include "overworld.h" +#include "random.h" +#include "battle_tower.h" +#include "text.h" +#include "palette.h" +#include "task.h" +#include "main.h" +#include "malloc.h" +#include "bg.h" +#include "gpu_regs.h" +#include "window.h" +#include "decompress.h" +#include "pokemon_summary_screen.h" +#include "sound.h" +#include "constants/battle_frontier.h" +#include "constants/songs.h" + +#define MENU_SUMMARY 0 +#define MENU_RENT 1 +#define MENU_DESELECT 1 +#define MENU_OTHERS 2 +#define MENU_OPTIONS_COUNT 3 + +#define SELECTABLE_MONS_COUNT 6 +#define TAG_PAL_BALL_GREY 0x64 +#define TAG_PAL_BALL_SELECTED 0x65 + +struct FactorySelecteableMon +{ + u16 unk0; + u16 spriteId; + u8 selectetedId; // 0 - not selected, 1 - first pokemon, 2 - second pokemon, 3 - third pokemon + struct Pokemon monData; +}; + +struct FactorySelectMonsStruct +{ + u8 menuCursorPos; + u8 menuCursor1SpriteId; + u8 menuCursor2SpriteId; + u8 cursorPos; + u8 cursorSpriteId; + u8 selectingMonsState; + bool8 fromSummaryScreen; + u8 yesNoCursorPos; + u8 unk8; + u8 unk9; + struct FactorySelecteableMon mons[SELECTABLE_MONS_COUNT]; + u32 unk294; + u32 unk298; + u32 unk29C; + u8 unk2A0; + u8 unk2A1; + u8 unk2A2; + u8 unk2A3; + u16 unk2A4; + u16 unk2A6; + u16 unk2A8; + u16 unk2AA; +}; + +extern struct FactorySelectMonsStruct *gUnknown_0300127C; +extern u8 gUnknown_0203CF20; + +// This file's functions. +void sub_819A514(void); +void sub_819C5D0(u16 mWin0H, u16 nWin0H, u16 mWin0V, u16 nWin0V); +void sub_819A9AC(void); +void sub_819AA18(void); +void sub_819BE34(void); +void sub_819BA64(void); +void sub_819BCF8(void); +void sub_819B9E8(void); +void sub_819B9B4(void); +void sub_819B764(void); +void sub_819C4B4(void); +void sub_819B8D4(void); +void sub_819C568(void); +void sub_819BC9C(void); +void sub_819C69C(u8 taskId); +void sub_819B378(u8 taskId); +void sub_819B124(u8 taskId); +void sub_819B484(u8 arg0); +void sub_819B63C(u8 arg0); +void SetBallSpritePaletteNum(u8 id); +void sub_819F444(u32 spriteId, u8 *arg1); +void sub_819B958(u8 arg0); + +// Ewram variables +EWRAM_DATA u8 *gUnknown_0203CE2C = NULL; +EWRAM_DATA u8 *gUnknown_0203CE30 = NULL; +EWRAM_DATA u8 *gUnknown_0203CE34 = NULL; +EWRAM_DATA u8 *gUnknown_0203CE38 = NULL; +static EWRAM_DATA struct Pokemon *sFactorySelectMons = NULL; + +// Const rom data. +extern const struct BgTemplate gUnknown_08610428[3]; +extern const struct WindowTemplate gUnknown_08610434[]; +extern const u8 gUnknown_0861033C[]; +extern const u8 gUnknown_0861023C[]; +extern const u16 gUnknown_0861046C[]; +extern const u16 gUnknown_0861039C[]; +extern const struct SpritePalette gUnknown_086103F4[]; +extern const struct SpriteSheet gUnknown_086103BC[]; +extern const struct CompressedSpriteSheet gUnknown_086103E4[]; +extern const struct SpriteTemplate gUnknown_086105D8; + +// gfx +extern const u8 gFrontierFactorySelectMenu_Gfx[]; +extern const u8 gFrontierFactorySelectMenu_Tilemap[]; +extern const u16 gFrontierFactorySelectMenu_Pal[]; + +// code +void sub_819A44C(struct Sprite *sprite) +{ + if (sprite->oam.paletteNum == IndexOfSpritePaletteTag(TAG_PAL_BALL_SELECTED)) + { + if (sprite->animEnded) + { + if (sprite->data[0] != 0) + { + sprite->data[0]--; + } + else if (Random() % 5 == 0) + { + StartSpriteAnim(sprite, 0); + sprite->data[0] = 32; + } + else + { + StartSpriteAnim(sprite, 1); + } + } + else + { + StartSpriteAnimIfDifferent(sprite, 1); + } + } + else + { + StartSpriteAnimIfDifferent(sprite, 0); + } +} + +void sub_819A4C8(void) +{ + AnimateSprites(); + BuildOamBuffer(); + RunTextPrinters(); + UpdatePaletteFade(); + RunTasks(); +} + +void sub_819A4E4(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_819A4F8(void) +{ + gUnknown_0300127C = NULL; + SetMainCallback2(sub_819A514); +} + +void sub_819A514(void) +{ + u8 taskId; + + switch (gMain.state) + { + case 0: + if (sFactorySelectMons != NULL) + FREE_AND_SET_NULL(sFactorySelectMons); + SetHBlankCallback(NULL); + SetVBlankCallback(NULL); + CpuFill32(0, (void *)VRAM, VRAM_SIZE); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_08610428, ARRAY_COUNT(gUnknown_08610428)); + InitWindows(gUnknown_08610434); + DeactivateAllTextPrinters(); + gMain.state++; + break; + case 1: + gUnknown_0203CE2C = Alloc(0x440); + gUnknown_0203CE30 = AllocZeroed(0x440); + gUnknown_0203CE34 = Alloc(0x800); + gUnknown_0203CE38 = AllocZeroed(0x800); + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + SetGpuReg(REG_OFFSET_BLDY, 0); + SetGpuReg(REG_OFFSET_MOSAIC, 0); + SetGpuReg(REG_OFFSET_WIN0H, 0); + SetGpuReg(REG_OFFSET_WIN0V, 0); + SetGpuReg(REG_OFFSET_WIN1H, 0); + SetGpuReg(REG_OFFSET_WIN1V, 0); + SetGpuReg(REG_OFFSET_WININ, 0); + SetGpuReg(REG_OFFSET_WINOUT, 0); + gMain.state++; + break; + case 2: + ResetPaletteFade(); + ResetSpriteData(); + ResetTasks(); + FreeAllSpritePalettes(); + CpuCopy16(gFrontierFactorySelectMenu_Gfx, gUnknown_0203CE2C, 0x440); + CpuCopy16(gUnknown_0861033C, gUnknown_0203CE30, 0x60); + LoadBgTiles(1, gUnknown_0203CE2C, 0x440, 0); + LoadBgTiles(3, gUnknown_0203CE30, 0x60, 0); + CpuCopy16(gFrontierFactorySelectMenu_Tilemap, gUnknown_0203CE34, 0x800); + LoadBgTilemap(1, gUnknown_0203CE34, 0x800, 0); + LoadPalette(gFrontierFactorySelectMenu_Pal, 0, 0x40); + LoadPalette(gUnknown_0861046C, 0xF0, 8); + LoadPalette(gUnknown_0861046C, 0xE0, 10); + if (gUnknown_0300127C->fromSummaryScreen == TRUE) + gPlttBufferUnfaded[228] = gUnknown_0300127C->unk2A4; + LoadPalette(gUnknown_0861039C, 0x20, 4); + gMain.state++; + break; + case 3: + SetBgTilemapBuffer(3, gUnknown_0203CE38); + CopyToBgTilemapBufferRect(3, gUnknown_0861023C, 11, 4, 8, 8); + CopyToBgTilemapBufferRect(3, gUnknown_0861023C, 2, 4, 8, 8); + CopyToBgTilemapBufferRect(3, gUnknown_0861023C, 20, 4, 8, 8); + CopyBgTilemapBufferToVram(3); + gMain.state++; + break; + case 4: + LoadSpritePalettes(gUnknown_086103F4); + LoadSpriteSheets(gUnknown_086103BC); + LoadCompressedObjectPic(gUnknown_086103E4); + ShowBg(0); + ShowBg(1); + SetVBlankCallback(sub_819A4E4); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_1D_MAP); + if (gUnknown_0300127C->fromSummaryScreen == TRUE) + { + sub_819C5D0(88, 152, 32, 96); + ShowBg(3); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_OBJ); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4)); + } + else + { + HideBg(3); + } + gMain.state++; + break; + case 5: + if (gUnknown_0300127C->fromSummaryScreen == TRUE) + gUnknown_0300127C->cursorPos = gUnknown_0203CF20; + sub_819A9AC(); + sub_819AA18(); + if (gUnknown_0300127C->fromSummaryScreen == TRUE) + sub_819BE34(); + gMain.state++; + break; + case 6: + sub_819BA64(); + PutWindowTilemap(2); + gMain.state++; + break; + case 7: + sub_819BCF8(); + PutWindowTilemap(5); + gMain.state++; + break; + case 8: + sub_819B9E8(); + PutWindowTilemap(1); + gMain.state++; + break; + case 9: + sub_819B9B4(); + PutWindowTilemap(0); + gMain.state++; + break; + case 10: + gUnknown_0300127C->unk2A1 = CreateTask(sub_819C69C, 0); + if (!gUnknown_0300127C->fromSummaryScreen) + { + gTasks[gUnknown_0300127C->unk2A1].data[0] = 0; + taskId = CreateTask(sub_819B378, 0); + gTasks[taskId].data[0] = 0; + } + else + { + gTasks[gUnknown_0300127C->unk2A1].data[0] = 1; + gUnknown_0300127C->unk2A2 = 0; + taskId = CreateTask(sub_819B124, 0); + gTasks[taskId].data[0] = 13; + } + SetMainCallback2(sub_819A4C8); + break; + } +} + +void sub_819A9AC(void) +{ + u8 i; + + if (gUnknown_0300127C != NULL) + return; + + gUnknown_0300127C = AllocZeroed(sizeof(*gUnknown_0300127C)); + gUnknown_0300127C->cursorPos = 0; + gUnknown_0300127C->selectingMonsState = 1; + gUnknown_0300127C->fromSummaryScreen = FALSE; + for (i = 0; i < SELECTABLE_MONS_COUNT; i++) + gUnknown_0300127C->mons[i].selectetedId = 0; + + if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_TENT) + sub_819B484(0); + else + sub_819B63C(0); +} + +extern const struct SpriteTemplate gUnknown_086105F0; +extern const struct SpriteTemplate gUnknown_08610608; +extern const struct SpriteTemplate gUnknown_08610620; + +void sub_819AA18(void) +{ + u8 i, cursorPos; + s16 x; + + for (i = 0; i < SELECTABLE_MONS_COUNT; i++) + { + gUnknown_0300127C->mons[i].spriteId = CreateSprite(&gUnknown_086105D8, (35 * i) + 32, 64, 1); + gSprites[gUnknown_0300127C->mons[i].spriteId].data[0] = 0; + SetBallSpritePaletteNum(i); + } + cursorPos = gUnknown_0300127C->cursorPos; + x = gSprites[gUnknown_0300127C->mons[cursorPos].spriteId].pos1.x; + gUnknown_0300127C->cursorSpriteId = CreateSprite(&gUnknown_086105F0, x, 88, 0); + gUnknown_0300127C->menuCursor1SpriteId = CreateSprite(&gUnknown_08610608, 176, 112, 0); + gUnknown_0300127C->menuCursor2SpriteId = CreateSprite(&gUnknown_08610620, 176, 144, 0); + + gSprites[gUnknown_0300127C->menuCursor1SpriteId].invisible = 1; + gSprites[gUnknown_0300127C->menuCursor2SpriteId].invisible = 1; + + gSprites[gUnknown_0300127C->menuCursor1SpriteId].centerToCornerVecX = 0; + gSprites[gUnknown_0300127C->menuCursor1SpriteId].centerToCornerVecY = 0; + gSprites[gUnknown_0300127C->menuCursor2SpriteId].centerToCornerVecX = 0; + gSprites[gUnknown_0300127C->menuCursor2SpriteId].centerToCornerVecY = 0; +} + +void sub_819AB40(void) +{ + u8 i; + + for (i = 0; i < SELECTABLE_MONS_COUNT; i++) + DestroySprite(&gSprites[gUnknown_0300127C->mons[i].spriteId]); + + DestroySprite(&gSprites[gUnknown_0300127C->cursorSpriteId]); + DestroySprite(&gSprites[gUnknown_0300127C->menuCursor1SpriteId]); + DestroySprite(&gSprites[gUnknown_0300127C->menuCursor2SpriteId]); +} + +void UpdateBallCursorPosition(s8 direction) +{ + u8 cursorPos; + if (direction > 0) // Move cursor right. + { + if (gUnknown_0300127C->cursorPos != SELECTABLE_MONS_COUNT - 1) + gUnknown_0300127C->cursorPos++; + else + gUnknown_0300127C->cursorPos = 0; + } + else // Move cursor left. + { + if (gUnknown_0300127C->cursorPos != 0) + gUnknown_0300127C->cursorPos--; + else + gUnknown_0300127C->cursorPos = SELECTABLE_MONS_COUNT - 1; + } + + cursorPos = gUnknown_0300127C->cursorPos; + gSprites[gUnknown_0300127C->cursorSpriteId].pos1.x = gSprites[gUnknown_0300127C->mons[cursorPos].spriteId].pos1.x; +} + +void UpdateMenuCursorPosition(s8 direction) +{ + if (direction > 0) // Move cursor down. + { + if (gUnknown_0300127C->menuCursorPos != MENU_OPTIONS_COUNT - 1) + gUnknown_0300127C->menuCursorPos++; + else + gUnknown_0300127C->menuCursorPos = 0; + } + else // Move cursor up. + { + if (gUnknown_0300127C->menuCursorPos != 0) + gUnknown_0300127C->menuCursorPos--; + else + gUnknown_0300127C->menuCursorPos = MENU_OPTIONS_COUNT - 1; + } + + gSprites[gUnknown_0300127C->menuCursor1SpriteId].pos1.y = (gUnknown_0300127C->menuCursorPos * 16) + 112; + gSprites[gUnknown_0300127C->menuCursor2SpriteId].pos1.y = (gUnknown_0300127C->menuCursorPos * 16) + 112; +} + +void UpdateYesNoCursorPosition(s8 direction) +{ + if (direction > 0) // Move cursor down. + { + if (gUnknown_0300127C->yesNoCursorPos != 1) + gUnknown_0300127C->yesNoCursorPos++; + else + gUnknown_0300127C->yesNoCursorPos = 0; + } + else // Move cursor up. + { + if (gUnknown_0300127C->yesNoCursorPos != 0) + gUnknown_0300127C->yesNoCursorPos--; + else + gUnknown_0300127C->yesNoCursorPos = 1; + } + + gSprites[gUnknown_0300127C->menuCursor1SpriteId].pos1.y = (gUnknown_0300127C->yesNoCursorPos * 16) + 112; + gSprites[gUnknown_0300127C->menuCursor2SpriteId].pos1.y = (gUnknown_0300127C->yesNoCursorPos * 16) + 112; +} + +void HandleMonSelectionChange(void) +{ + u8 i, paletteNum; + u8 cursorPos = gUnknown_0300127C->cursorPos; + if (gUnknown_0300127C->mons[cursorPos].selectetedId) // Deselect a mon. + { + paletteNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_GREY); + if (gUnknown_0300127C->selectingMonsState == 3 && gUnknown_0300127C->mons[cursorPos].selectetedId == 1) + { + for (i = 0; i < SELECTABLE_MONS_COUNT; i++) + { + if (gUnknown_0300127C->mons[i].selectetedId == 2) + break; + } + if (i == SELECTABLE_MONS_COUNT) + return; + else + gUnknown_0300127C->mons[i].selectetedId = 1; + } + gUnknown_0300127C->mons[cursorPos].selectetedId = 0; + gUnknown_0300127C->selectingMonsState--; + } + else // Select a mon. + { + paletteNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_SELECTED); + gUnknown_0300127C->mons[cursorPos].selectetedId = gUnknown_0300127C->selectingMonsState; + gUnknown_0300127C->selectingMonsState++; + } + + gSprites[gUnknown_0300127C->mons[cursorPos].spriteId].oam.paletteNum = paletteNum; +} + +void SetBallSpritePaletteNum(u8 id) +{ + u8 palNum; + + if (gUnknown_0300127C->mons[id].selectetedId) + palNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_SELECTED); + else + palNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_GREY); + + gSprites[gUnknown_0300127C->mons[id].spriteId].oam.paletteNum = palNum; +} + +void Task_FromSelectScreenToSummaryScreen(u8 taskId) +{ + u8 i; + u8 currMonId; + + switch (gTasks[taskId].data[0]) + { + case 6: + gPlttBufferUnfaded[228] = gPlttBufferFaded[228]; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); + gTasks[taskId].data[0] = 7; + break; + case 7: + if (!gPaletteFade.active) + { + DestroyTask(gUnknown_0300127C->unk2A1); + sub_819F444(gUnknown_0300127C->unk298, &gUnknown_0300127C->unk2A0); + sub_819AB40(); + FREE_AND_SET_NULL(gUnknown_0203CE2C); + FREE_AND_SET_NULL(gUnknown_0203CE30); + FREE_AND_SET_NULL(gUnknown_0203CE34); + FREE_AND_SET_NULL(gUnknown_0203CE38); + FreeAllWindowBuffers(); + gTasks[taskId].data[0] = 8; + } + break; + case 8: + gUnknown_0300127C->unk2A4 = gPlttBufferUnfaded[228]; + DestroyTask(taskId); + gUnknown_0300127C->fromSummaryScreen = TRUE; + currMonId = gUnknown_0300127C->cursorPos; + sFactorySelectMons = AllocZeroed(sizeof(struct Pokemon) * SELECTABLE_MONS_COUNT); + for (i = 0; i < SELECTABLE_MONS_COUNT; i++) + sFactorySelectMons[i] = gUnknown_0300127C->mons[i].monData; + ShowPokemonSummaryScreen(1, sFactorySelectMons, currMonId, SELECTABLE_MONS_COUNT - 1, sub_819A514); + break; + } +} + +void Task_CloseSelectionScreen(u8 taskId) +{ + if (gUnknown_0300127C->unk2A0 != 1) + { + switch (gTasks[taskId].data[0]) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); + gTasks[taskId].data[0]++; + break; + case 1: + if (!UpdatePaletteFade()) + { + sub_819B764(); + DestroyTask(gUnknown_0300127C->unk2A1); + sub_819AB40(); + FREE_AND_SET_NULL(gUnknown_0203CE2C); + FREE_AND_SET_NULL(gUnknown_0203CE34); + FREE_AND_SET_NULL(gUnknown_0203CE38); + FREE_AND_SET_NULL(gUnknown_0300127C); + FreeAllWindowBuffers(); + SetMainCallback2(CB2_ReturnToFieldContinueScript); + DestroyTask(taskId); + } + break; + } + } +} + +void Task_HandleSelectionScreenYesNo(u8 taskId) +{ + if (gUnknown_0300127C->unk2A0 != 1) + { + switch (gTasks[taskId].data[0]) + { + case 10: + sub_819C4B4(); + gTasks[taskId].data[0] = 4; + break; + case 4: + sub_819B8D4(); + gTasks[taskId].data[0] = 5; + break; + case 5: + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + if (gUnknown_0300127C->yesNoCursorPos == 0) + { + sub_819C568(); + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = Task_CloseSelectionScreen; + } + else + { + sub_819B958(4); + sub_819BC9C(); + gUnknown_0300127C->unk2A2 = 1; + gTasks[taskId].data[0] = 1; + gTasks[taskId].func = sub_819B378; + } + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + sub_819B958(4); + sub_819BC9C(); + gUnknown_0300127C->unk2A2 = 1; + gTasks[taskId].data[0] = 1; + gTasks[taskId].func = sub_819B378; + } + else if (gMain.newAndRepeatedKeys & DPAD_UP) + { + PlaySE(SE_SELECT); + UpdateYesNoCursorPosition(-1); + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + PlaySE(SE_SELECT); + UpdateYesNoCursorPosition(1); + } + break; + } + } +} diff --git a/src/battle_frontier_2.c b/src/battle_frontier_2.c deleted file mode 100644 index 958aa4692..000000000 --- a/src/battle_frontier_2.c +++ /dev/null @@ -1,337 +0,0 @@ -#include "global.h" -#include "sprite.h" -#include "event_data.h" -#include "overworld.h" -#include "random.h" -#include "battle_tower.h" -#include "text.h" -#include "palette.h" -#include "task.h" -#include "main.h" -#include "malloc.h" -#include "bg.h" -#include "gpu_regs.h" -#include "window.h" -#include "decompress.h" -#include "constants/battle_frontier.h" - -#define SELECTABLE_MONS_COUNT 6 -#define TAG_PAL_BALL_GREY 0x64 -#define TAG_PAL_BALL_SELECTED 0x65 - -struct FactorySelecteableMon -{ - u16 unk0; - u16 spriteId; - bool8 selected; - u8 filler6[0x6A - 6]; - u8 unk6A; -}; - -struct UnkStructTempName -{ - u8 menuCursorPos; - u8 unk1; - u8 unk2; - u8 cursorPos; - u8 unk4; - u8 unk5; - bool8 fromSummaryScreen; - u8 unk7; - u8 unk8; - u8 unk9; - struct FactorySelecteableMon mons[SELECTABLE_MONS_COUNT]; - u8 filler294[0x2a1 - 0x294]; - u8 unk2A1; - u8 unk2A2; - u8 unk2A3; - u16 unk2A4; - u16 unk2A6; - u16 unk2A8; - u16 unk2AA; -}; - -extern struct UnkStructTempName *gUnknown_0300127C; -extern u8 *gUnknown_0203CE2C; -extern u8 *gUnknown_0203CE30; -extern u8 *gUnknown_0203CE34; -extern u8 *gUnknown_0203CE38; -extern struct Pokemon *gUnknown_0203CE3C; -extern u8 gUnknown_0203CF20; - -// This file's functions. -void sub_819A514(void); -void sub_819C5D0(u16 mWin0H, u16 nWin0H, u16 mWin0V, u16 nWin0V); -void sub_819A9AC(void); -void sub_819AA18(void); -void sub_819BE34(void); -void sub_819BA64(void); -void sub_819BCF8(void); -void sub_819B9E8(void); -void sub_819B9B4(void); -void sub_819C69C(u8 taskId); -void sub_819B378(u8 taskId); -void sub_819B124(u8 taskId); -void sub_819B484(u8 arg0); -void sub_819B63C(u8 arg0); -void SetBallSpritePaletteNum(u8 id); - -// Const rom data. -extern const struct BgTemplate gUnknown_08610428[3]; -extern const struct WindowTemplate gUnknown_08610434[]; -extern const u8 gUnknown_0861033C[]; -extern const u8 gUnknown_0861023C[]; -extern const u16 gUnknown_0861046C[]; -extern const u16 gUnknown_0861039C[]; -extern const struct SpritePalette gUnknown_086103F4[]; -extern const struct SpriteSheet gUnknown_086103BC[]; -extern const struct CompressedSpriteSheet gUnknown_086103E4[]; -extern const struct SpriteTemplate gUnknown_086105D8; - -// gfx -extern const u8 gFrontierFactorySelectMenu_Gfx[]; -extern const u8 gFrontierFactorySelectMenu_Tilemap[]; -extern const u16 gFrontierFactorySelectMenu_Pal[]; - -// code -void sub_819A44C(struct Sprite *sprite) -{ - if (sprite->oam.paletteNum == IndexOfSpritePaletteTag(TAG_PAL_BALL_SELECTED)) - { - if (sprite->animEnded) - { - if (sprite->data[0] != 0) - { - sprite->data[0]--; - } - else if (Random() % 5 == 0) - { - StartSpriteAnim(sprite, 0); - sprite->data[0] = 32; - } - else - { - StartSpriteAnim(sprite, 1); - } - } - else - { - StartSpriteAnimIfDifferent(sprite, 1); - } - } - else - { - StartSpriteAnimIfDifferent(sprite, 0); - } -} - -void sub_819A4C8(void) -{ - AnimateSprites(); - BuildOamBuffer(); - RunTextPrinters(); - UpdatePaletteFade(); - RunTasks(); -} - -void sub_819A4E4(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); -} - -void sub_819A4F8(void) -{ - gUnknown_0300127C = NULL; - SetMainCallback2(sub_819A514); -} - -void sub_819A514(void) -{ - u8 taskId; - - switch (gMain.state) - { - case 0: - if (gUnknown_0203CE3C != NULL) - FREE_AND_SET_NULL(gUnknown_0203CE3C); - SetHBlankCallback(NULL); - SetVBlankCallback(NULL); - CpuFill32(0, (void *)VRAM, VRAM_SIZE); - ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_08610428, ARRAY_COUNT(gUnknown_08610428)); - InitWindows(gUnknown_08610434); - DeactivateAllTextPrinters(); - gMain.state++; - break; - case 1: - gUnknown_0203CE2C = Alloc(0x440); - gUnknown_0203CE30 = AllocZeroed(0x440); - gUnknown_0203CE34 = Alloc(0x800); - gUnknown_0203CE38 = AllocZeroed(0x800); - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgX(3, 0, 0); - ChangeBgY(3, 0, 0); - SetGpuReg(REG_OFFSET_BLDCNT, 0); - SetGpuReg(REG_OFFSET_BLDALPHA, 0); - SetGpuReg(REG_OFFSET_BLDY, 0); - SetGpuReg(REG_OFFSET_MOSAIC, 0); - SetGpuReg(REG_OFFSET_WIN0H, 0); - SetGpuReg(REG_OFFSET_WIN0V, 0); - SetGpuReg(REG_OFFSET_WIN1H, 0); - SetGpuReg(REG_OFFSET_WIN1V, 0); - SetGpuReg(REG_OFFSET_WININ, 0); - SetGpuReg(REG_OFFSET_WINOUT, 0); - gMain.state++; - break; - case 2: - ResetPaletteFade(); - ResetSpriteData(); - ResetTasks(); - FreeAllSpritePalettes(); - CpuCopy16(gFrontierFactorySelectMenu_Gfx, gUnknown_0203CE2C, 0x440); - CpuCopy16(gUnknown_0861033C, gUnknown_0203CE30, 0x60); - LoadBgTiles(1, gUnknown_0203CE2C, 0x440, 0); - LoadBgTiles(3, gUnknown_0203CE30, 0x60, 0); - CpuCopy16(gFrontierFactorySelectMenu_Tilemap, gUnknown_0203CE34, 0x800); - LoadBgTilemap(1, gUnknown_0203CE34, 0x800, 0); - LoadPalette(gFrontierFactorySelectMenu_Pal, 0, 0x40); - LoadPalette(gUnknown_0861046C, 0xF0, 8); - LoadPalette(gUnknown_0861046C, 0xE0, 10); - if (gUnknown_0300127C->fromSummaryScreen == TRUE) - gPlttBufferUnfaded[228] = gUnknown_0300127C->unk2A4; - LoadPalette(gUnknown_0861039C, 0x20, 4); - gMain.state++; - break; - case 3: - SetBgTilemapBuffer(3, gUnknown_0203CE38); - CopyToBgTilemapBufferRect(3, gUnknown_0861023C, 11, 4, 8, 8); - CopyToBgTilemapBufferRect(3, gUnknown_0861023C, 2, 4, 8, 8); - CopyToBgTilemapBufferRect(3, gUnknown_0861023C, 20, 4, 8, 8); - CopyBgTilemapBufferToVram(3); - gMain.state++; - break; - case 4: - LoadSpritePalettes(gUnknown_086103F4); - LoadSpriteSheets(gUnknown_086103BC); - LoadCompressedObjectPic(gUnknown_086103E4); - ShowBg(0); - ShowBg(1); - SetVBlankCallback(sub_819A4E4); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_1D_MAP); - if (gUnknown_0300127C->fromSummaryScreen == TRUE) - { - sub_819C5D0(88, 152, 32, 96); - ShowBg(3); - SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_OBJ); - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4)); - } - else - { - HideBg(3); - } - gMain.state++; - break; - case 5: - if (gUnknown_0300127C->fromSummaryScreen == TRUE) - gUnknown_0300127C->cursorPos = gUnknown_0203CF20; - sub_819A9AC(); - sub_819AA18(); - if (gUnknown_0300127C->fromSummaryScreen == TRUE) - sub_819BE34(); - gMain.state++; - break; - case 6: - sub_819BA64(); - PutWindowTilemap(2); - gMain.state++; - break; - case 7: - sub_819BCF8(); - PutWindowTilemap(5); - gMain.state++; - break; - case 8: - sub_819B9E8(); - PutWindowTilemap(1); - gMain.state++; - break; - case 9: - sub_819B9B4(); - PutWindowTilemap(0); - gMain.state++; - break; - case 10: - gUnknown_0300127C->unk2A1 = CreateTask(sub_819C69C, 0); - if (!gUnknown_0300127C->fromSummaryScreen) - { - gTasks[gUnknown_0300127C->unk2A1].data[0] = 0; - taskId = CreateTask(sub_819B378, 0); - gTasks[taskId].data[0] = 0; - } - else - { - gTasks[gUnknown_0300127C->unk2A1].data[0] = 1; - gUnknown_0300127C->unk2A2 = 0; - taskId = CreateTask(sub_819B124, 0); - gTasks[taskId].data[0] = 13; - } - SetMainCallback2(sub_819A4C8); - break; - } -} - -void sub_819A9AC(void) -{ - u8 i; - - if (gUnknown_0300127C != NULL) - return; - - gUnknown_0300127C = AllocZeroed(sizeof(*gUnknown_0300127C)); - gUnknown_0300127C->cursorPos = 0; - gUnknown_0300127C->unk5 = 1; - gUnknown_0300127C->fromSummaryScreen = FALSE; - for (i = 0; i < SELECTABLE_MONS_COUNT; i++) - gUnknown_0300127C->mons[i].selected = FALSE; - - if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_TENT) - sub_819B484(0); - else - sub_819B63C(0); -} - -extern const struct SpriteTemplate gUnknown_086105F0; -extern const struct SpriteTemplate gUnknown_08610608; -extern const struct SpriteTemplate gUnknown_08610620; - -void sub_819AA18(void) -{ - u8 i, cursorPos; - s16 x; - - for (i = 0; i < SELECTABLE_MONS_COUNT; i++) - { - gUnknown_0300127C->mons[i].spriteId = CreateSprite(&gUnknown_086105D8, (35 * i) + 32, 64, 1); - gSprites[gUnknown_0300127C->mons[i].spriteId].data[0] = 0; - SetBallSpritePaletteNum(i); - } - cursorPos = gUnknown_0300127C->cursorPos; - x = gSprites[gUnknown_0300127C->mons[cursorPos].spriteId].pos1.x; - gUnknown_0300127C->unk4 = CreateSprite(&gUnknown_086105F0, x, 88, 0); - gUnknown_0300127C->unk1 = CreateSprite(&gUnknown_08610608, 176, 112, 0); - gUnknown_0300127C->unk2 = CreateSprite(&gUnknown_08610620, 176, 144, 0); - - gSprites[gUnknown_0300127C->unk1].invisible = 1; - gSprites[gUnknown_0300127C->unk2].invisible = 1; - - gSprites[gUnknown_0300127C->unk1].centerToCornerVecX = 0; - gSprites[gUnknown_0300127C->unk1].centerToCornerVecY = 0; - gSprites[gUnknown_0300127C->unk2].centerToCornerVecX = 0; - gSprites[gUnknown_0300127C->unk2].centerToCornerVecY = 0; -} -- cgit v1.2.3 From 24b9cd721ff1f5c7f2fdd674299d0d2d9f396be2 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 3 Sep 2018 22:55:55 +0200 Subject: More Battle Factory --- src/battle_factory.c | 569 ++++++++++++++++++++++++++++++++++++++++--- src/berry_fix_program.c | 10 +- src/hall_of_fame.c | 26 +- src/link.c | 10 +- src/mail.c | 4 +- src/main_menu.c | 44 ++-- src/menu.c | 6 +- src/naming_screen.c | 6 +- src/pokemon_storage_system.c | 4 +- src/starter_choose.c | 4 +- 10 files changed, 593 insertions(+), 90 deletions(-) (limited to 'src') diff --git a/src/battle_factory.c b/src/battle_factory.c index e1c955122..9cb773ea3 100644 --- a/src/battle_factory.c +++ b/src/battle_factory.c @@ -11,10 +11,15 @@ #include "malloc.h" #include "bg.h" #include "gpu_regs.h" +#include "string_util.h" +#include "international_string_util.h" #include "window.h" +#include "data2.h" #include "decompress.h" #include "pokemon_summary_screen.h" #include "sound.h" +#include "pokedex.h" +#include "trainer_pokemon_sprites.h" #include "constants/battle_frontier.h" #include "constants/songs.h" @@ -30,12 +35,18 @@ struct FactorySelecteableMon { - u16 unk0; + u16 monSetId; u16 spriteId; - u8 selectetedId; // 0 - not selected, 1 - first pokemon, 2 - second pokemon, 3 - third pokemon + u8 selectedId; // 0 - not selected, 1 - first pokemon, 2 - second pokemon, 3 - third pokemon struct Pokemon monData; }; +struct UnkFactoryStruct +{ + u8 field0; + u8 field1; +}; + struct FactorySelectMonsStruct { u8 menuCursorPos; @@ -50,7 +61,7 @@ struct FactorySelectMonsStruct u8 unk9; struct FactorySelecteableMon mons[SELECTABLE_MONS_COUNT]; u32 unk294; - u32 unk298; + struct UnkFactoryStruct unk298; u32 unk29C; u8 unk2A0; u8 unk2A1; @@ -63,31 +74,49 @@ struct FactorySelectMonsStruct }; extern struct FactorySelectMonsStruct *gUnknown_0300127C; +extern u8 (*gUnknown_030062E8)(void); extern u8 gUnknown_0203CF20; +extern const u16 gBattleFrontierHeldItems[]; +extern const struct FacilityMon gBattleFrontierMons[]; +extern const struct FacilityMon gSlateportBattleTentMons[]; +extern const struct BattleFrontierTrainer gBattleFrontierTrainers[]; + +extern void SetMonMoveAvoidReturn(struct Pokemon *mon, u16 move, u8 moveSlot); + // This file's functions. void sub_819A514(void); void sub_819C5D0(u16 mWin0H, u16 nWin0H, u16 mWin0V, u16 nWin0V); void sub_819A9AC(void); void sub_819AA18(void); void sub_819BE34(void); -void sub_819BA64(void); -void sub_819BCF8(void); +void PrintSelectMonString(void); +void PrintMonSpecies(void); +void PrintMonCategory(void); void sub_819B9E8(void); -void sub_819B9B4(void); -void sub_819B764(void); +void PrintRentalPkmnString(void); +void CopySelectedMonsToPlayerParty(void); void sub_819C4B4(void); void sub_819B8D4(void); void sub_819C568(void); -void sub_819BC9C(void); +void sub_819B844(void); +void PrintSelectableMenuOptions(void); +void PrintSelectableYesNo(void); void sub_819C69C(u8 taskId); -void sub_819B378(u8 taskId); -void sub_819B124(u8 taskId); -void sub_819B484(u8 arg0); -void sub_819B63C(u8 arg0); +void Task_HandleSelectionScreenChooseMons(u8 taskId); +void Task_HandleSelectionScreenMenu(u8 taskId); +void CreateFrontierFactorySelectableMons(u8 firstMonId); +void CreateTentFactorySelectableMons(u8 firstMonId); void SetBallSpritePaletteNum(u8 id); -void sub_819F444(u32 spriteId, u8 *arg1); -void sub_819B958(u8 arg0); +void sub_819F444(struct UnkFactoryStruct arg0, u8 *arg1); +void sub_819B958(u8 windowId); +void sub_819F2B4(u8 *arg0, u8 *arg1, u8 arg2); +void sub_819F3F8(struct UnkFactoryStruct arg0, u8 *arg1, u8 arg2); +u8 sub_819BC04(void); +u8 sub_819BC9C(void); +u8 sub_81A6F70(u8 battleMode, u8 lvlMode); +u8 sub_81A6CA8(u8 arg0, u8 arg1); +bool32 sub_819C634(u16 monSetId); // Ewram variables EWRAM_DATA u8 *gUnknown_0203CE2C = NULL; @@ -113,6 +142,20 @@ extern const u8 gFrontierFactorySelectMenu_Gfx[]; extern const u8 gFrontierFactorySelectMenu_Tilemap[]; extern const u16 gFrontierFactorySelectMenu_Pal[]; +// text +extern const u8 gText_RentalPkmn2[]; +extern const u8 gText_SelectFirstPkmn[]; +extern const u8 gText_SelectSecondPkmn[]; +extern const u8 gText_SelectThirdPkmn[]; +extern const u8 gText_TheseThreePkmnOkay[]; +extern const u8 gText_CantSelectSamePkmn[]; +extern const u8 gText_Summary[]; +extern const u8 gText_Deselect[]; +extern const u8 gText_Rent[]; +extern const u8 gText_Others2[]; +extern const u8 gText_Yes2[]; +extern const u8 gText_No2[]; + // code void sub_819A44C(struct Sprite *sprite) { @@ -267,22 +310,22 @@ void sub_819A514(void) gMain.state++; break; case 6: - sub_819BA64(); + PrintSelectMonString(); PutWindowTilemap(2); gMain.state++; break; case 7: - sub_819BCF8(); + PrintMonCategory(); PutWindowTilemap(5); gMain.state++; break; case 8: - sub_819B9E8(); + PrintMonSpecies(); PutWindowTilemap(1); gMain.state++; break; case 9: - sub_819B9B4(); + PrintRentalPkmnString(); PutWindowTilemap(0); gMain.state++; break; @@ -291,14 +334,14 @@ void sub_819A514(void) if (!gUnknown_0300127C->fromSummaryScreen) { gTasks[gUnknown_0300127C->unk2A1].data[0] = 0; - taskId = CreateTask(sub_819B378, 0); + taskId = CreateTask(Task_HandleSelectionScreenChooseMons, 0); gTasks[taskId].data[0] = 0; } else { gTasks[gUnknown_0300127C->unk2A1].data[0] = 1; gUnknown_0300127C->unk2A2 = 0; - taskId = CreateTask(sub_819B124, 0); + taskId = CreateTask(Task_HandleSelectionScreenMenu, 0); gTasks[taskId].data[0] = 13; } SetMainCallback2(sub_819A4C8); @@ -318,12 +361,12 @@ void sub_819A9AC(void) gUnknown_0300127C->selectingMonsState = 1; gUnknown_0300127C->fromSummaryScreen = FALSE; for (i = 0; i < SELECTABLE_MONS_COUNT; i++) - gUnknown_0300127C->mons[i].selectetedId = 0; + gUnknown_0300127C->mons[i].selectedId = 0; if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_TENT) - sub_819B484(0); + CreateFrontierFactorySelectableMons(0); else - sub_819B63C(0); + CreateTentFactorySelectableMons(0); } extern const struct SpriteTemplate gUnknown_086105F0; @@ -436,28 +479,28 @@ void HandleMonSelectionChange(void) { u8 i, paletteNum; u8 cursorPos = gUnknown_0300127C->cursorPos; - if (gUnknown_0300127C->mons[cursorPos].selectetedId) // Deselect a mon. + if (gUnknown_0300127C->mons[cursorPos].selectedId) // Deselect a mon. { paletteNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_GREY); - if (gUnknown_0300127C->selectingMonsState == 3 && gUnknown_0300127C->mons[cursorPos].selectetedId == 1) + if (gUnknown_0300127C->selectingMonsState == 3 && gUnknown_0300127C->mons[cursorPos].selectedId == 1) { for (i = 0; i < SELECTABLE_MONS_COUNT; i++) { - if (gUnknown_0300127C->mons[i].selectetedId == 2) + if (gUnknown_0300127C->mons[i].selectedId == 2) break; } if (i == SELECTABLE_MONS_COUNT) return; else - gUnknown_0300127C->mons[i].selectetedId = 1; + gUnknown_0300127C->mons[i].selectedId = 1; } - gUnknown_0300127C->mons[cursorPos].selectetedId = 0; + gUnknown_0300127C->mons[cursorPos].selectedId = 0; gUnknown_0300127C->selectingMonsState--; } else // Select a mon. { paletteNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_SELECTED); - gUnknown_0300127C->mons[cursorPos].selectetedId = gUnknown_0300127C->selectingMonsState; + gUnknown_0300127C->mons[cursorPos].selectedId = gUnknown_0300127C->selectingMonsState; gUnknown_0300127C->selectingMonsState++; } @@ -468,7 +511,7 @@ void SetBallSpritePaletteNum(u8 id) { u8 palNum; - if (gUnknown_0300127C->mons[id].selectetedId) + if (gUnknown_0300127C->mons[id].selectedId) palNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_SELECTED); else palNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_GREY); @@ -528,7 +571,7 @@ void Task_CloseSelectionScreen(u8 taskId) case 1: if (!UpdatePaletteFade()) { - sub_819B764(); + CopySelectedMonsToPlayerParty(); DestroyTask(gUnknown_0300127C->unk2A1); sub_819AB40(); FREE_AND_SET_NULL(gUnknown_0203CE2C); @@ -574,7 +617,7 @@ void Task_HandleSelectionScreenYesNo(u8 taskId) sub_819BC9C(); gUnknown_0300127C->unk2A2 = 1; gTasks[taskId].data[0] = 1; - gTasks[taskId].func = sub_819B378; + gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; } } else if (gMain.newKeys & B_BUTTON) @@ -584,7 +627,7 @@ void Task_HandleSelectionScreenYesNo(u8 taskId) sub_819BC9C(); gUnknown_0300127C->unk2A2 = 1; gTasks[taskId].data[0] = 1; - gTasks[taskId].func = sub_819B378; + gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; } else if (gMain.newAndRepeatedKeys & DPAD_UP) { @@ -600,3 +643,463 @@ void Task_HandleSelectionScreenYesNo(u8 taskId) } } } + +void Task_HandleSelectionScreenMenu(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 2: + if (!gUnknown_0300127C->fromSummaryScreen) + sub_819F2B4(&gUnknown_0300127C->unk298.field1, &gUnknown_0300127C->unk2A0, 0); + gTasks[taskId].data[0] = 9; + break; + case 9: + if (gUnknown_0300127C->unk2A0 != 1) + { + sub_819B844(); + gUnknown_0300127C->fromSummaryScreen = FALSE; + gTasks[taskId].data[0] = 3; + } + break; + case 3: + if (gMain.newKeys & A_BUTTON) + { + u8 retVal; + PlaySE(SE_SELECT); + retVal = sub_819BC04(); + if (retVal == 1) + { + gUnknown_0300127C->unk2A2 = 1; + gTasks[taskId].data[0] = 1; + gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; + } + else if (retVal == 2) + { + gTasks[taskId].data[0] = 10; + gTasks[taskId].func = Task_HandleSelectionScreenYesNo; + } + else if (retVal == 3) + { + gTasks[taskId].data[0] = 11; + gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; + } + else + { + gTasks[taskId].data[0] = 6; + gTasks[taskId].func = Task_FromSelectScreenToSummaryScreen; + } + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + sub_819F3F8(gUnknown_0300127C->unk298, &gUnknown_0300127C->unk2A0, 0); + sub_819B958(3); + gUnknown_0300127C->unk2A2 = 1; + gTasks[taskId].data[0] = 1; + gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; + } + else if (gMain.newAndRepeatedKeys & DPAD_UP) + { + PlaySE(SE_SELECT); + UpdateMenuCursorPosition(-1); + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + PlaySE(SE_SELECT); + UpdateMenuCursorPosition(1); + } + break; + case 12: + if (!gPaletteFade.active) + { + if (gUnknown_0300127C->fromSummaryScreen == TRUE) + { + gPlttBufferFaded[228] = gUnknown_0300127C->unk2A4; + gPlttBufferUnfaded[228] = gPlttBufferUnfaded[244]; + } + gUnknown_0300127C->fromSummaryScreen = FALSE; + gTasks[taskId].data[0] = 3; + } + break; + case 13: + sub_819B844(); + gTasks[taskId].data[0] = 12; + break; + } +} + +void Task_HandleSelectionScreenChooseMons(u8 taskId) +{ + if (gUnknown_0300127C->unk2A0 != 1) + { + switch (gTasks[taskId].data[0]) + { + case 0: + if (!gPaletteFade.active) + { + gTasks[taskId].data[0] = 1; + gUnknown_0300127C->unk2A2 = 1; + } + break; + case 1: + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + gUnknown_0300127C->unk2A2 = 0; + gTasks[taskId].data[0] = 2; + gTasks[taskId].func = Task_HandleSelectionScreenMenu; + } + else if (gMain.newAndRepeatedKeys & DPAD_LEFT) + { + PlaySE(SE_SELECT); + UpdateBallCursorPosition(-1); + PrintMonCategory(); + PrintMonSpecies(); + } + else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) + { + PlaySE(SE_SELECT); + UpdateBallCursorPosition(1); + PrintMonCategory(); + PrintMonSpecies(); + } + break; + case 11: + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + sub_819F3F8(gUnknown_0300127C->unk298, &gUnknown_0300127C->unk2A0, 0); + PrintSelectMonString(); + gUnknown_0300127C->unk2A2 = 1; + gTasks[taskId].data[0] = 1; + } + break; + } + } +} + +void CreateFrontierFactorySelectableMons(u8 firstMonId) +{ + u8 i, j = 0; + u8 ivs = 0; + u8 level = 0; + u8 happiness = 0; + u32 otId = 0; + u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + u8 var_2C = gSaveBlock2Ptr->frontier.field_DE2[battleMode][lvlMode] / 7; + u8 var_28 = 0; + + gFacilityTrainerMons = gBattleFrontierMons; + if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_50) + level = 100; + else + level = 50; + + var_28 = sub_81A6F70(battleMode, lvlMode); + otId = T1_READ_32(gSaveBlock2Ptr->playerTrainerId); + + for (i = 0; i < SELECTABLE_MONS_COUNT; i++) + { + u16 monSetId = gSaveBlock2Ptr->frontier.field_E70[i].monId; + gUnknown_0300127C->mons[i + firstMonId].monSetId = monSetId; + if (i < var_28) + ivs = sub_81A6CA8(var_2C + 1, 0); + else + ivs = sub_81A6CA8(var_2C, 0); + CreateMonWithEVSpreadPersonalityOTID(&gUnknown_0300127C->mons[i + firstMonId].monData, + gFacilityTrainerMons[monSetId].species, + level, + gFacilityTrainerMons[monSetId].nature, + ivs, + gFacilityTrainerMons[monSetId].evSpread, + otId); + happiness = 0; + for (j = 0; j < 4; j++) + SetMonMoveAvoidReturn(&gUnknown_0300127C->mons[i + firstMonId].monData, gFacilityTrainerMons[monSetId].moves[j], j); + SetMonData(&gUnknown_0300127C->mons[i + firstMonId].monData, MON_DATA_FRIENDSHIP, &happiness); + SetMonData(&gUnknown_0300127C->mons[i + firstMonId].monData, MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]); + } +} + +void CreateTentFactorySelectableMons(u8 firstMonId) +{ + u8 i, j; + u8 ivs = 0; + u8 level = 30; + u8 happiness = 0; + u32 otId = 0; + + gFacilityTrainerMons = gSlateportBattleTentMons; + otId = T1_READ_32(gSaveBlock2Ptr->playerTrainerId); + + for (i = 0; i < SELECTABLE_MONS_COUNT; i++) + { + u16 monSetId = gSaveBlock2Ptr->frontier.field_E70[i].monId; + gUnknown_0300127C->mons[i + firstMonId].monSetId = monSetId; + CreateMonWithEVSpreadPersonalityOTID(&gUnknown_0300127C->mons[i + firstMonId].monData, + gFacilityTrainerMons[monSetId].species, + level, + gFacilityTrainerMons[monSetId].nature, + ivs, + gFacilityTrainerMons[monSetId].evSpread, + otId); + happiness = 0; + for (j = 0; j < 4; j++) + SetMonMoveAvoidReturn(&gUnknown_0300127C->mons[i + firstMonId].monData, gFacilityTrainerMons[monSetId].moves[j], j); + SetMonData(&gUnknown_0300127C->mons[i + firstMonId].monData, MON_DATA_FRIENDSHIP, &happiness); + SetMonData(&gUnknown_0300127C->mons[i + firstMonId].monData, MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]); + } +} + +void CopySelectedMonsToPlayerParty(void) +{ + u8 i, j; + + for (i = 0; i < 3; i++) + { + for (j = 0; j < SELECTABLE_MONS_COUNT; j++) + { + if (gUnknown_0300127C->mons[j].selectedId == i + 1) + { + gPlayerParty[i] = gUnknown_0300127C->mons[j].monData; + gSaveBlock2Ptr->frontier.field_E70[i].monId = gUnknown_0300127C->mons[j].monSetId; + gSaveBlock2Ptr->frontier.field_E70[i].personality = GetMonData(&gPlayerParty[i].box, MON_DATA_PERSONALITY, NULL); + gSaveBlock2Ptr->frontier.field_E70[i].abilityBit = GetBoxMonData(&gPlayerParty[i].box, MON_DATA_ALT_ABILITY, NULL); + gSaveBlock2Ptr->frontier.field_E70[i].ivs = GetBoxMonData(&gPlayerParty[i].box, MON_DATA_ATK_IV, NULL); + break; + } + } + } + CalculatePlayerPartyCount(); +} + +void sub_819B844(void) +{ + if (!gUnknown_0300127C->fromSummaryScreen) + gUnknown_0300127C->menuCursorPos = 0; + + gSprites[gUnknown_0300127C->menuCursor1SpriteId].pos1.x = 176; + gSprites[gUnknown_0300127C->menuCursor1SpriteId].pos1.y = (gUnknown_0300127C->menuCursorPos * 16) + 112; + gSprites[gUnknown_0300127C->menuCursor2SpriteId].pos1.x = 208; + gSprites[gUnknown_0300127C->menuCursor2SpriteId].pos1.y = (gUnknown_0300127C->menuCursorPos * 16) + 112; + + gSprites[gUnknown_0300127C->menuCursor1SpriteId].invisible = 0; + gSprites[gUnknown_0300127C->menuCursor2SpriteId].invisible = 0; + + PrintSelectableMenuOptions(); +} + +void sub_819B8D4(void) +{ + gUnknown_0300127C->yesNoCursorPos = 0; + + gSprites[gUnknown_0300127C->menuCursor1SpriteId].pos1.x = 176; + gSprites[gUnknown_0300127C->menuCursor1SpriteId].pos1.y = 112; + gSprites[gUnknown_0300127C->menuCursor2SpriteId].pos1.x = 208; + gSprites[gUnknown_0300127C->menuCursor2SpriteId].pos1.y = 112; + + gSprites[gUnknown_0300127C->menuCursor1SpriteId].invisible = 0; + gSprites[gUnknown_0300127C->menuCursor2SpriteId].invisible = 0; + + PrintSelectableYesNo(); +} + +void sub_819B958(u8 windowId) +{ + gSprites[gUnknown_0300127C->menuCursor1SpriteId].invisible = 1; + gSprites[gUnknown_0300127C->menuCursor2SpriteId].invisible = 1; + FillWindowPixelBuffer(windowId, 0); + CopyWindowToVram(windowId, 2); + ClearWindowTilemap(windowId); +} + +void PrintRentalPkmnString(void) +{ + FillWindowPixelBuffer(0, 0); + PrintTextOnWindow(0, 1, gText_RentalPkmn2, 2, 1, 0, NULL); + CopyWindowToVram(0, 3); +} + +extern const u8 gUnknown_08610479[]; +extern const u8 gUnknown_08610476[]; + +void PrintMonSpecies(void) +{ + u16 species; + u8 x; + u8 monId = gUnknown_0300127C->cursorPos; + + FillWindowPixelBuffer(1, 0); + species = GetMonData(&gUnknown_0300127C->mons[monId].monData, MON_DATA_SPECIES, NULL); + StringCopy(gStringVar4, gSpeciesNames[species]); + x = GetStringRightAlignXOffset(1, gStringVar4, 86); + AddTextPrinterParameterized3(1, 1, x, 1, gUnknown_08610479, 0, gStringVar4); + CopyWindowToVram(1, 2); +} + +void PrintSelectMonString(void) +{ + const u8 *str = NULL; + + FillWindowPixelBuffer(2, 0); + if (gUnknown_0300127C->selectingMonsState == 1) + str = gText_SelectFirstPkmn; + else if (gUnknown_0300127C->selectingMonsState == 2) + str = gText_SelectSecondPkmn; + else if (gUnknown_0300127C->selectingMonsState == 3) + str = gText_SelectThirdPkmn; + else + str = gText_TheseThreePkmnOkay; + + PrintTextOnWindow(2, 1, str, 2, 5, 0, NULL); + CopyWindowToVram(2, 2); +} + +void PrintCantSelectSameMon(void) +{ + FillWindowPixelBuffer(2, 0); + PrintTextOnWindow(2, 1, gText_CantSelectSamePkmn, 2, 5, 0, NULL); + CopyWindowToVram(2, 2); +} + +void PrintSelectableMenuOptions(void) +{ + u8 selectedId = gUnknown_0300127C->mons[gUnknown_0300127C->cursorPos].selectedId; + + PutWindowTilemap(3); + FillWindowPixelBuffer(3, 0); + AddTextPrinterParameterized3(3, 1, 7, 1, gUnknown_08610476, 0, gText_Summary); + if (selectedId != 0) + AddTextPrinterParameterized3(3, 1, 7, 17, gUnknown_08610476, 0, gText_Deselect); + else + AddTextPrinterParameterized3(3, 1, 7, 17, gUnknown_08610476, 0, gText_Rent); + + AddTextPrinterParameterized3(3, 1, 7, 33, gUnknown_08610476, 0, gText_Others2); + CopyWindowToVram(3, 3); +} + +void PrintSelectableYesNo(void) +{ + PutWindowTilemap(4); + FillWindowPixelBuffer(4, 0); + AddTextPrinterParameterized3(4, 1, 7, 1, gUnknown_08610476, 0, gText_Yes2); + AddTextPrinterParameterized3(4, 1, 7, 17, gUnknown_08610476, 0, gText_No2); + CopyWindowToVram(4, 3); +} + +extern u8 (* const gUnknown_0861041C[])(void); + +u8 sub_819BC04(void) +{ + gUnknown_030062E8 = gUnknown_0861041C[gUnknown_0300127C->menuCursorPos]; + return gUnknown_030062E8(); +} + +u8 sub_819BC30(void) +{ + u8 selectedId = gUnknown_0300127C->mons[gUnknown_0300127C->cursorPos].selectedId; + u16 monSetId = gUnknown_0300127C->mons[gUnknown_0300127C->cursorPos].monSetId; + if (selectedId == 0 && !sub_819C634(monSetId)) + { + PrintCantSelectSameMon(); + sub_819B958(3); + return 3; + } + else + { + sub_819F3F8(gUnknown_0300127C->unk298, &gUnknown_0300127C->unk2A0, 0); + HandleMonSelectionChange(); + PrintSelectMonString(); + sub_819B958(3); + if (gUnknown_0300127C->selectingMonsState > 3) + return 2; + else + return 1; + } +} + +u8 sub_819BC9C(void) +{ + sub_819C568(); + HandleMonSelectionChange(); + PrintSelectMonString(); + sub_819B958(3); + if (gUnknown_0300127C->selectingMonsState > 3) + return 2; + else + return 1; +} + +u8 sub_819BCCC(void) +{ + return 0; +} + +u8 sub_819BCD0(void) +{ + sub_819F3F8(gUnknown_0300127C->unk298, &gUnknown_0300127C->unk2A0, 0); + sub_819B958(3); + return 1; +} + +void PrintMonCategory(void) +{ + u16 species; + u8 text[30]; + u8 x; + u8 monId = gUnknown_0300127C->cursorPos; + if (monId < SELECTABLE_MONS_COUNT) + { + PutWindowTilemap(5); + FillWindowPixelBuffer(5, 0); + species = GetMonData(&gUnknown_0300127C->mons[monId].monData, MON_DATA_SPECIES, NULL); + CopyMonCategoryText(SpeciesToNationalPokedexNum(species), text); + x = GetStringRightAlignXOffset(1, text, 0x76); + PrintTextOnWindow(5, 1, text, x, 1, 0, NULL); + CopyWindowToVram(5, 2); + } +} + +void sub_819BD70(void) +{ + u8 monId = gUnknown_0300127C->cursorPos; + struct Pokemon *mon = &gUnknown_0300127C->mons[monId].monData; + u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); + u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); + u32 otId = GetMonData(mon, MON_DATA_OT_ID, NULL); + + gUnknown_0300127C->unk298.field0 = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, 88, 32, 15, 0xFFFF); + gSprites[gUnknown_0300127C->unk298.field0].centerToCornerVecX = 0; + gSprites[gUnknown_0300127C->unk298.field0].centerToCornerVecY = 0; + + gUnknown_0300127C->unk2A0 = 0; +} + +extern const struct SpriteTemplate gUnknown_08610638; + +void sub_819BE20(u8 arg0) +{ + gUnknown_0300127C->unk2A0 = arg0; +} + +void sub_819BE34(void) +{ + struct Pokemon *mon; + u16 species; + u32 personality, otId; + + gUnknown_0300127C->unk298.field1 = CreateSprite(&gUnknown_08610638, 120, 64, 1); + StartSpriteAffineAnim(&gSprites[gUnknown_0300127C->unk298.field1], 2); + + mon = &gUnknown_0300127C->mons[gUnknown_0300127C->cursorPos].monData; + species = GetMonData(mon, MON_DATA_SPECIES, NULL); + personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); + otId = GetMonData(mon, MON_DATA_OT_ID, NULL); + + gUnknown_0300127C->unk298.field0 = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, 88, 32, 15, 0xFFFF); + gSprites[gUnknown_0300127C->unk298.field0].centerToCornerVecX = 0; + gSprites[gUnknown_0300127C->unk298.field0].centerToCornerVecY = 0; + + gSprites[gUnknown_0300127C->unk298.field1].invisible = 1; +} diff --git a/src/berry_fix_program.c b/src/berry_fix_program.c index f6a5895a9..2ae15a806 100644 --- a/src/berry_fix_program.c +++ b/src/berry_fix_program.c @@ -250,19 +250,19 @@ static void berry_fix_gpu_set(void) width = GetStringWidth(0, sUnknown_08617E9B, 0); left = (0x78 - width) / 2; - box_print(2, 0, left, 3, sUnknown_0861815B, TEXT_SPEED_FF, sUnknown_08617E9B); + AddTextPrinterParameterized3(2, 0, left, 3, sUnknown_0861815B, TEXT_SPEED_FF, sUnknown_08617E9B); width = GetStringWidth(0, sUnknown_08617E8D, 0); left = (0x78 - width) / 2 + 0x78; - box_print(2, 0, left, 3, sUnknown_0861815B, TEXT_SPEED_FF, sUnknown_08617E8D); + AddTextPrinterParameterized3(2, 0, left, 3, sUnknown_0861815B, TEXT_SPEED_FF, sUnknown_08617E8D); width = GetStringWidth(0, sUnknown_08617E8D, 0); left = (0x70 - width) / 2; - box_print(3, 0, left, 0, sUnknown_0861815B, TEXT_SPEED_FF, sUnknown_08617E8D); + AddTextPrinterParameterized3(3, 0, left, 0, sUnknown_0861815B, TEXT_SPEED_FF, sUnknown_08617E8D); width = GetStringWidth(1, sUnknown_08617E78, 0); left = (0xD0 - width) / 2; - box_print(0, 1, left, 2, sUnknown_08618158, TEXT_SPEED_FF, sUnknown_08617E78); + AddTextPrinterParameterized3(0, 1, left, 2, sUnknown_08618158, TEXT_SPEED_FF, sUnknown_08617E78); CopyWindowToVram(2, 2); CopyWindowToVram(3, 2); @@ -292,7 +292,7 @@ static void berry_fix_text_print(int scene) { FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32); FillWindowPixelBuffer(1, 0xAA); - box_print(1, 1, 0, 0, sUnknown_08618158, -1, gUnknown_08618160[scene]); + AddTextPrinterParameterized3(1, 1, 0, 0, sUnknown_08618158, -1, gUnknown_08618160[scene]); PutWindowTilemap(1); CopyWindowToVram(1, 2); switch (scene) diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index 33c85d448..081c963ee 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -1128,7 +1128,7 @@ static void HallOfFame_PrintWelcomeText(u8 unusedPossiblyWindowId, u8 unused2) { FillWindowPixelBuffer(0, 0); PutWindowTilemap(0); - box_print(0, 1, GetStringCenterAlignXOffset(1, gText_WelcomeToHOF, 0xD0), 1, sUnknown_085E5388, 0, gText_WelcomeToHOF); + AddTextPrinterParameterized3(0, 1, GetStringCenterAlignXOffset(1, gText_WelcomeToHOF, 0xD0), 1, sUnknown_085E5388, 0, gText_WelcomeToHOF); CopyWindowToVram(0, 3); } @@ -1164,7 +1164,7 @@ static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u *(stringPtr)++ = CHAR_QUESTION_MARK; } stringPtr[0] = EOS; - box_print(0, 1, 0x10, 1, sUnknown_085E5388, -1, text); + AddTextPrinterParameterized3(0, 1, 0x10, 1, sUnknown_085E5388, -1, text); } // nick, species names, gender and level @@ -1173,13 +1173,13 @@ static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u if (currMon->species == SPECIES_EGG) { width = GetStringCenterAlignXOffset(1, text, 0xD0); - box_print(0, 1, width, 1, sUnknown_085E5388, -1, text); + AddTextPrinterParameterized3(0, 1, width, 1, sUnknown_085E5388, -1, text); CopyWindowToVram(0, 3); } else { width = GetStringRightAlignXOffset(1, text, 0x80); - box_print(0, 1, width, 1, sUnknown_085E5388, -1, text); + AddTextPrinterParameterized3(0, 1, width, 1, sUnknown_085E5388, -1, text); text[0] = CHAR_SLASH; stringPtr = StringCopy(text + 1, gSpeciesNames[currMon->species]); @@ -1200,15 +1200,15 @@ static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u } stringPtr[0] = EOS; - box_print(0, 1, 0x80, 1, sUnknown_085E5388, -1, text); + AddTextPrinterParameterized3(0, 1, 0x80, 1, sUnknown_085E5388, -1, text); stringPtr = StringCopy(text, gText_Level); ConvertIntToDecimalStringN(stringPtr, currMon->lvl, STR_CONV_MODE_LEFT_ALIGN, 3); - box_print(0, 1, 0x24, 0x11, sUnknown_085E5388, -1, text); + AddTextPrinterParameterized3(0, 1, 0x24, 0x11, sUnknown_085E5388, -1, text); stringPtr = StringCopy(text, gText_IDNumber); ConvertIntToDecimalStringN(stringPtr, (u16)(currMon->tid), STR_CONV_MODE_LEADING_ZEROS, 5); - box_print(0, 1, 0x68, 0x11, sUnknown_085E5388, -1, text); + AddTextPrinterParameterized3(0, 1, 0x68, 0x11, sUnknown_085E5388, -1, text); CopyWindowToVram(0, 3); } @@ -1223,13 +1223,13 @@ static void HallOfFame_PrintPlayerInfo(u8 unused1, u8 unused2) FillWindowPixelBuffer(1, 0x11); PutWindowTilemap(1); SetWindowBorderStyle(1, FALSE, 0x21D, 0xD); - box_print(1, 1, 0, 1, sUnknown_085E538C, -1, gText_Name); + AddTextPrinterParameterized3(1, 1, 0, 1, sUnknown_085E538C, -1, gText_Name); width = GetStringRightAlignXOffset(1, gSaveBlock2Ptr->playerName, 0x70); - box_print(1, 1, width, 1, sUnknown_085E538C, -1, gSaveBlock2Ptr->playerName); + AddTextPrinterParameterized3(1, 1, width, 1, sUnknown_085E538C, -1, gSaveBlock2Ptr->playerName); trainerId = (gSaveBlock2Ptr->playerTrainerId[0]) | (gSaveBlock2Ptr->playerTrainerId[1] << 8); - box_print(1, 1, 0, 0x11, sUnknown_085E538C, 0, gText_IDNumber); + AddTextPrinterParameterized3(1, 1, 0, 0x11, sUnknown_085E538C, 0, gText_IDNumber); text[0] = (trainerId % 100000) / 10000 + CHAR_0; text[1] = (trainerId % 10000) / 1000 + CHAR_0; text[2] = (trainerId % 1000) / 100 + CHAR_0; @@ -1237,9 +1237,9 @@ static void HallOfFame_PrintPlayerInfo(u8 unused1, u8 unused2) text[4] = (trainerId % 10) / 1 + CHAR_0; text[5] = EOS; width = GetStringRightAlignXOffset(1, text, 0x70); - box_print(1, 1, width, 0x11, sUnknown_085E538C, -1, text); + AddTextPrinterParameterized3(1, 1, width, 0x11, sUnknown_085E538C, -1, text); - box_print(1, 1, 0, 0x21, sUnknown_085E538C, -1, gText_MainMenuTime); + AddTextPrinterParameterized3(1, 1, 0, 0x21, sUnknown_085E538C, -1, gText_MainMenuTime); text[0] = (gSaveBlock2Ptr->playTimeHours / 100) + CHAR_0; text[1] = (gSaveBlock2Ptr->playTimeHours % 100) / 10 + CHAR_0; text[2] = (gSaveBlock2Ptr->playTimeHours % 10) + CHAR_0; @@ -1255,7 +1255,7 @@ static void HallOfFame_PrintPlayerInfo(u8 unused1, u8 unused2) text[6] = EOS; width = GetStringRightAlignXOffset(1, text, 0x70); - box_print(1, 1, width, 0x21, sUnknown_085E538C, -1, text); + AddTextPrinterParameterized3(1, 1, width, 0x21, sUnknown_085E538C, -1, text); CopyWindowToVram(1, 3); } diff --git a/src/link.c b/src/link.c index 457e44a01..627327181 100644 --- a/src/link.c +++ b/src/link.c @@ -1685,8 +1685,8 @@ static void sub_800B080(void) LoadPalette(gWirelessLinkDisplayPal, 0, 0x20); FillWindowPixelBuffer(0, 0x00); FillWindowPixelBuffer(2, 0x00); - box_print(0, 3, 2, 6, gUnknown_082ED224, 0, gText_CommErrorEllipsis); - box_print(2, 3, 2, 1, gUnknown_082ED224, 0, gText_MoveCloserToLinkPartner); + AddTextPrinterParameterized3(0, 3, 2, 6, gUnknown_082ED224, 0, gText_CommErrorEllipsis); + AddTextPrinterParameterized3(2, 3, 2, 1, gUnknown_082ED224, 0, gText_MoveCloserToLinkPartner); PutWindowTilemap(0); PutWindowTilemap(2); CopyWindowToVram(0, 0); @@ -1698,7 +1698,7 @@ static void sub_800B138(void) LoadBgTiles(0, g2BlankTilesGfx, 0x20, 0); FillWindowPixelBuffer(1, 0x00); FillWindowPixelBuffer(2, 0x00); - box_print(1, 3, 2, 0, gUnknown_082ED224, 0, gText_CommErrorCheckConnections); + AddTextPrinterParameterized3(1, 3, 2, 0, gUnknown_082ED224, 0, gText_CommErrorCheckConnections); PutWindowTilemap(1); PutWindowTilemap(2); CopyWindowToVram(1, 0); @@ -1738,11 +1738,11 @@ static void CB2_PrintErrorMessage(void) case 130: if (gWirelessCommType == 2) { - box_print(0, 3, 2, 20, gUnknown_082ED224, 0, gText_ABtnTitleScreen); + AddTextPrinterParameterized3(0, 3, 2, 20, gUnknown_082ED224, 0, gText_ABtnTitleScreen); } else if (gWirelessCommType == 1) { - box_print(0, 3, 2, 20, gUnknown_082ED224, 0, gText_ABtnRegistrationCounter); + AddTextPrinterParameterized3(0, 3, 2, 20, gUnknown_082ED224, 0, gText_ABtnRegistrationCounter); } break; } diff --git a/src/mail.c b/src/mail.c index 625b52de3..3c12bed3f 100644 --- a/src/mail.c +++ b/src/mail.c @@ -485,14 +485,14 @@ static void sub_8121B1C(void) { continue; } - box_print(0, 1, sMailRead->layout->var8[i].xOffset + sMailRead->layout->wordsYPos, y + sMailRead->layout->wordsXPos, sUnknown_0859F2AC, 0, sMailRead->strbuf[i]); + AddTextPrinterParameterized3(0, 1, sMailRead->layout->var8[i].xOffset + sMailRead->layout->wordsYPos, y + sMailRead->layout->wordsXPos, sUnknown_0859F2AC, 0, sMailRead->strbuf[i]); y += sMailRead->layout->var8[i].lineHeight; } bufptr = StringCopy(strbuf, gText_FromSpace); StringCopy(bufptr, sMailRead->playerName); box_x = GetStringCenterAlignXOffset(1, strbuf, sMailRead->signatureWidth) + 0x68; box_y = sMailRead->layout->signatureYPos + 0x58; - box_print(0, 1, box_x, box_y, sUnknown_0859F2AC, 0, strbuf); + AddTextPrinterParameterized3(0, 1, box_x, box_y, sUnknown_0859F2AC, 0, strbuf); CopyWindowToVram(0, 3); CopyWindowToVram(1, 3); } diff --git a/src/main_menu.c b/src/main_menu.c index e28faf986..b4b343fc6 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -527,8 +527,8 @@ void Task_DisplayMainMenu(u8 taskId) default: FillWindowPixelBuffer(0, 0xAA); FillWindowPixelBuffer(1, 0xAA); - box_print(0, 1, 0, 1, gTextColor_Headers, -1, gText_MainMenuNewGame); - box_print(1, 1, 0, 1, gTextColor_Headers, -1, gText_MainMenuOption); + AddTextPrinterParameterized3(0, 1, 0, 1, gTextColor_Headers, -1, gText_MainMenuNewGame); + AddTextPrinterParameterized3(1, 1, 0, 1, gTextColor_Headers, -1, gText_MainMenuOption); PutWindowTilemap(0); PutWindowTilemap(1); CopyWindowToVram(0, 2); @@ -540,9 +540,9 @@ void Task_DisplayMainMenu(u8 taskId) FillWindowPixelBuffer(2, 0xAA); FillWindowPixelBuffer(3, 0xAA); FillWindowPixelBuffer(4, 0xAA); - box_print(2, 1, 0, 1, gTextColor_Headers, -1, gText_MainMenuContinue); - box_print(3, 1, 0, 1, gTextColor_Headers, -1, gText_MainMenuNewGame); - box_print(4, 1, 0, 1, gTextColor_Headers, -1, gText_MainMenuOption); + AddTextPrinterParameterized3(2, 1, 0, 1, gTextColor_Headers, -1, gText_MainMenuContinue); + AddTextPrinterParameterized3(3, 1, 0, 1, gTextColor_Headers, -1, gText_MainMenuNewGame); + AddTextPrinterParameterized3(4, 1, 0, 1, gTextColor_Headers, -1, gText_MainMenuOption); fmt_savegame(); PutWindowTilemap(2); PutWindowTilemap(3); @@ -559,10 +559,10 @@ void Task_DisplayMainMenu(u8 taskId) FillWindowPixelBuffer(3, 0xAA); FillWindowPixelBuffer(4, 0xAA); FillWindowPixelBuffer(5, 0xAA); - box_print(2, 1, 0, 1, gTextColor_Headers, -1, gText_MainMenuContinue); - box_print(3, 1, 0, 1, gTextColor_Headers, -1, gText_MainMenuNewGame); - box_print(4, 1, 0, 1, gTextColor_Headers, -1, gText_MainMenuMysteryGift); - box_print(5, 1, 0, 1, gTextColor_Headers, -1, gText_MainMenuOption); + AddTextPrinterParameterized3(2, 1, 0, 1, gTextColor_Headers, -1, gText_MainMenuContinue); + AddTextPrinterParameterized3(3, 1, 0, 1, gTextColor_Headers, -1, gText_MainMenuNewGame); + AddTextPrinterParameterized3(4, 1, 0, 1, gTextColor_Headers, -1, gText_MainMenuMysteryGift); + AddTextPrinterParameterized3(5, 1, 0, 1, gTextColor_Headers, -1, gText_MainMenuOption); fmt_savegame(); PutWindowTilemap(2); PutWindowTilemap(3); @@ -583,11 +583,11 @@ void Task_DisplayMainMenu(u8 taskId) FillWindowPixelBuffer(4, 0xAA); FillWindowPixelBuffer(5, 0xAA); FillWindowPixelBuffer(6, 0xAA); - box_print(2, 1, 0, 1, gTextColor_Headers, -1, gText_MainMenuContinue); - box_print(3, 1, 0, 1, gTextColor_Headers, -1, gText_MainMenuNewGame); - box_print(4, 1, 0, 1, gTextColor_Headers, -1, gText_MainMenuMysteryGift2); - box_print(5, 1, 0, 1, gTextColor_Headers, -1, gText_MainMenuMysteryEvents); - box_print(6, 1, 0, 1, gTextColor_Headers, -1, gText_MainMenuOption); + AddTextPrinterParameterized3(2, 1, 0, 1, gTextColor_Headers, -1, gText_MainMenuContinue); + AddTextPrinterParameterized3(3, 1, 0, 1, gTextColor_Headers, -1, gText_MainMenuNewGame); + AddTextPrinterParameterized3(4, 1, 0, 1, gTextColor_Headers, -1, gText_MainMenuMysteryGift2); + AddTextPrinterParameterized3(5, 1, 0, 1, gTextColor_Headers, -1, gText_MainMenuMysteryEvents); + AddTextPrinterParameterized3(6, 1, 0, 1, gTextColor_Headers, -1, gText_MainMenuOption); fmt_savegame(); PutWindowTilemap(2); PutWindowTilemap(3); @@ -1839,8 +1839,8 @@ void fmt_savegame(void) void fmt_time(void) { StringExpandPlaceholders(gStringVar4, gText_ContinueMenuPlayer); - box_print(2, 1, 0, 17, gUnknown_082FF0E3, -1, gStringVar4); - box_print(2, 1, GetStringRightAlignXOffset(1, gSaveBlock2Ptr->playerName, 100), 17, gUnknown_082FF0E3, -1, gSaveBlock2Ptr->playerName); + AddTextPrinterParameterized3(2, 1, 0, 17, gUnknown_082FF0E3, -1, gStringVar4); + AddTextPrinterParameterized3(2, 1, GetStringRightAlignXOffset(1, gSaveBlock2Ptr->playerName, 100), 17, gUnknown_082FF0E3, -1, gSaveBlock2Ptr->playerName); } void fmt_player(void) @@ -1849,11 +1849,11 @@ void fmt_player(void) u8* ptr; StringExpandPlaceholders(gStringVar4, gText_ContinueMenuTime); - box_print(2, 1, 0x6C, 17, gUnknown_082FF0E3, -1, gStringVar4); + AddTextPrinterParameterized3(2, 1, 0x6C, 17, gUnknown_082FF0E3, -1, gStringVar4); ptr = ConvertIntToDecimalStringN(str, gSaveBlock2Ptr->playTimeHours, 0, 3); *ptr = 0xF0; ConvertIntToDecimalStringN(ptr + 1, gSaveBlock2Ptr->playTimeMinutes, 2, 2); - box_print(2, 1, GetStringRightAlignXOffset(1, str, 0xD0), 17, gUnknown_082FF0E3, -1, str); + AddTextPrinterParameterized3(2, 1, GetStringRightAlignXOffset(1, str, 0xD0), 17, gUnknown_082FF0E3, -1, str); } void fmt_pokedex(void) @@ -1868,9 +1868,9 @@ void fmt_pokedex(void) else dexCount = GetHoennPokedexCount(1); StringExpandPlaceholders(gStringVar4, gText_ContinueMenuPokedex); - box_print(2, 1, 0, 33, gUnknown_082FF0E3, -1, gStringVar4); + AddTextPrinterParameterized3(2, 1, 0, 33, gUnknown_082FF0E3, -1, gStringVar4); ConvertIntToDecimalStringN(str, dexCount, 0, 3); - box_print(2, 1, GetStringRightAlignXOffset(1, str, 100), 33, gUnknown_082FF0E3, -1, str); + AddTextPrinterParameterized3(2, 1, GetStringRightAlignXOffset(1, str, 100), 33, gUnknown_082FF0E3, -1, str); } } @@ -1886,9 +1886,9 @@ void fmt_badges(void) badgeCount++; } StringExpandPlaceholders(gStringVar4, gText_ContinueMenuBadges); - box_print(2, 1, 0x6C, 33, gUnknown_082FF0E3, -1, gStringVar4); + AddTextPrinterParameterized3(2, 1, 0x6C, 33, gUnknown_082FF0E3, -1, gStringVar4); ConvertIntToDecimalStringN(str, badgeCount, 2, 1); - box_print(2, 1, GetStringRightAlignXOffset(1, str, 0xD0), 33, gUnknown_082FF0E3, -1, str); + AddTextPrinterParameterized3(2, 1, GetStringRightAlignXOffset(1, str, 0xD0), 33, gUnknown_082FF0E3, -1, str); } void LoadMainMenuWindowFrameTiles(u8 bgId, u16 tileOffset) diff --git a/src/menu.c b/src/menu.c index 8a4b4fce5..7c9c2f8a8 100644 --- a/src/menu.c +++ b/src/menu.c @@ -799,7 +799,7 @@ void sub_8198180(const u8 *string, u8 a2, bool8 copyToVram) PutWindowTilemap(gUnknown_0203CDA0); FillWindowPixelBuffer(gUnknown_0203CDA0, 0xFF); width = GetStringWidth(0, string, 0); - box_print(gUnknown_0203CDA0, + AddTextPrinterParameterized3(gUnknown_0203CDA0, 0, 0xEC - (GetWindowAttribute(gUnknown_0203CDA0, WINDOW_TILEMAP_LEFT) * 8) - a2 - width, 1, @@ -835,7 +835,7 @@ void sub_8198204(const u8 *string, const u8 *string2, u8 a3, u8 a4, bool8 copyTo if (string2 != NULL) { width = GetStringWidth(0, string2, 0); - box_print(gUnknown_0203CDA0, + AddTextPrinterParameterized3(gUnknown_0203CDA0, 0, 0xEC - (GetWindowAttribute(gUnknown_0203CDA0, WINDOW_TILEMAP_LEFT) * 8) - a4 - width, 1, @@ -1925,7 +1925,7 @@ void sub_8199DF0(u32 bg, u8 a1, int a2, int a3) RequestDma3Fill(a1 << 24 | a1 << 16 | a1 << 8 | a1, addr + VRAM, a3 * temp, 1); } -void box_print(u8 windowId, u8 fontId, u8 left, u8 top, const u8 *color, s8 speed, const u8 *str) +void AddTextPrinterParameterized3(u8 windowId, u8 fontId, u8 left, u8 top, const u8 *color, s8 speed, const u8 *str) { struct TextSubPrinter printer; diff --git a/src/naming_screen.c b/src/naming_screen.c index f99d23bc3..35a05499b 100644 --- a/src/naming_screen.c +++ b/src/naming_screen.c @@ -1515,7 +1515,7 @@ static void sub_80E49BC(void) StringCopy(genderSymbol, gText_FemaleSymbol); isFemale = TRUE; } - box_print(gNamingScreenData->windows[2], 1, 0x68, 1, sGenderColors[isFemale], -1, genderSymbol); + AddTextPrinterParameterized3(gNamingScreenData->windows[2], 1, 0x68, 1, sGenderColors[isFemale], -1, genderSymbol); } } @@ -1694,7 +1694,7 @@ static void sub_80E4DE4(u8 window, u8 a1) for (i = 0; i < 4; i++) { - box_print(window, 1, 0, i * 16 + 1, sUnkColors[a1], 0, gUnknown_0858C198[a1][i]); + AddTextPrinterParameterized3(window, 1, 0, i * 16 + 1, sUnkColors[a1], 0, gUnknown_0858C198[a1][i]); } PutWindowTilemap(window); @@ -1739,7 +1739,7 @@ static void sub_80E4EF0(void) const u8 color[3] = { 15, 1, 2 }; FillWindowPixelBuffer(gNamingScreenData->windows[4], 0xFF); - box_print(gNamingScreenData->windows[4], 0, 2, 1, color, 0, gText_MoveOkBack); + AddTextPrinterParameterized3(gNamingScreenData->windows[4], 0, 2, 1, color, 0, gText_MoveOkBack); PutWindowTilemap(gNamingScreenData->windows[4]); CopyWindowToVram(gNamingScreenData->windows[4], 3); } diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 7c622c223..eae868134 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -627,12 +627,12 @@ void sub_80C7BE4(void) FillWindowPixelBuffer(windowId, 0x44); center = GetStringCenterAlignXOffset(1, boxName, 0x40); - box_print(windowId, 1, center, 1, gUnknown_08571734, TEXT_SPEED_FF, boxName); + AddTextPrinterParameterized3(windowId, 1, center, 1, gUnknown_08571734, TEXT_SPEED_FF, boxName); ConvertIntToDecimalStringN(text, nPokemonInBox, 1, 2); StringAppend(text, gUnknown_08571737); center = GetStringCenterAlignXOffset(1, text, 0x40); - box_print(windowId, 1, center, 0x11, gUnknown_08571734, TEXT_SPEED_FF, text); + AddTextPrinterParameterized3(windowId, 1, center, 0x11, gUnknown_08571734, TEXT_SPEED_FF, text); winTileData = GetWindowAttribute(windowId, WINDOW_TILE_DATA); CpuCopy32((void *)winTileData, (void *)OBJ_VRAM0 + 0x100 + (GetSpriteTileStartByTag(gUnknown_02039D04->unk_0240) * 32), 0x400); diff --git a/src/starter_choose.c b/src/starter_choose.c index c1e7eea40..5625b6184 100644 --- a/src/starter_choose.c +++ b/src/starter_choose.c @@ -301,10 +301,10 @@ static void CreateStarterPokemonLabel(u8 selection) FillWindowPixelBuffer(sStarterChooseWindowId, 0); width = GetStringCenterAlignXOffset(7, text, 0x68); - box_print(sStarterChooseWindowId, 7, width, 1, gUnknown_085B1E0C, 0, text); + AddTextPrinterParameterized3(sStarterChooseWindowId, 7, width, 1, gUnknown_085B1E0C, 0, text); width = GetStringCenterAlignXOffset(1, speciesName, 0x68); - box_print(sStarterChooseWindowId, 1, width, 0x11, gUnknown_085B1E0C, 0, speciesName); + AddTextPrinterParameterized3(sStarterChooseWindowId, 1, width, 0x11, gUnknown_085B1E0C, 0, speciesName); PutWindowTilemap(sStarterChooseWindowId); schedule_bg_copy_tilemap_to_vram(0); -- cgit v1.2.3 From 75384546b51fa87fe4c3fe768fbe4e72149af8e7 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 5 Sep 2018 23:30:15 +0200 Subject: More factory decomp and documentation. --- src/battle_factory.c | 888 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 598 insertions(+), 290 deletions(-) (limited to 'src') diff --git a/src/battle_factory.c b/src/battle_factory.c index 9cb773ea3..f7568055c 100644 --- a/src/battle_factory.c +++ b/src/battle_factory.c @@ -19,10 +19,14 @@ #include "pokemon_summary_screen.h" #include "sound.h" #include "pokedex.h" +#include "blend_palette.h" #include "trainer_pokemon_sprites.h" #include "constants/battle_frontier.h" #include "constants/songs.h" +// Select_ refers to the first Pokemon selection screen where you choose 3 Pokemon. +// Swap_ refers to the consecutive selection screen where you can keep your Pokemon or swap one with beaten trainer's. + #define MENU_SUMMARY 0 #define MENU_RENT 1 #define MENU_DESELECT 1 @@ -57,23 +61,19 @@ struct FactorySelectMonsStruct u8 selectingMonsState; bool8 fromSummaryScreen; u8 yesNoCursorPos; - u8 unk8; - u8 unk9; + u8 unused8; struct FactorySelecteableMon mons[SELECTABLE_MONS_COUNT]; - u32 unk294; - struct UnkFactoryStruct unk298; - u32 unk29C; + struct UnkFactoryStruct unk294[3]; u8 unk2A0; - u8 unk2A1; - u8 unk2A2; - u8 unk2A3; + u8 palBlendTaskId; + bool8 unk2A2; u16 unk2A4; - u16 unk2A6; - u16 unk2A8; - u16 unk2AA; + bool8 unk2A6; + u8 unk2A7; + u8 unk2A8; + u8 unk2A9; }; -extern struct FactorySelectMonsStruct *gUnknown_0300127C; extern u8 (*gUnknown_030062E8)(void); extern u8 gUnknown_0203CF20; @@ -81,42 +81,46 @@ extern const u16 gBattleFrontierHeldItems[]; extern const struct FacilityMon gBattleFrontierMons[]; extern const struct FacilityMon gSlateportBattleTentMons[]; extern const struct BattleFrontierTrainer gBattleFrontierTrainers[]; +extern const u8 gUnknown_085B18AC[]; extern void SetMonMoveAvoidReturn(struct Pokemon *mon, u16 move, u8 moveSlot); // This file's functions. -void sub_819A514(void); -void sub_819C5D0(u16 mWin0H, u16 nWin0H, u16 mWin0V, u16 nWin0V); -void sub_819A9AC(void); -void sub_819AA18(void); -void sub_819BE34(void); -void PrintSelectMonString(void); -void PrintMonSpecies(void); -void PrintMonCategory(void); -void sub_819B9E8(void); -void PrintRentalPkmnString(void); -void CopySelectedMonsToPlayerParty(void); -void sub_819C4B4(void); -void sub_819B8D4(void); -void sub_819C568(void); -void sub_819B844(void); -void PrintSelectableMenuOptions(void); -void PrintSelectableYesNo(void); -void sub_819C69C(u8 taskId); -void Task_HandleSelectionScreenChooseMons(u8 taskId); -void Task_HandleSelectionScreenMenu(u8 taskId); -void CreateFrontierFactorySelectableMons(u8 firstMonId); -void CreateTentFactorySelectableMons(u8 firstMonId); -void SetBallSpritePaletteNum(u8 id); +static void CB2_InitSelectScreen(void); +static void Select_SetWinRegs(s16 mWin0H, s16 nWin0H, s16 mWin0V, s16 nWin0V); +static void Select_InitMonsData(void); +static void Select_InitAllSprites(void); +static void Select_ShowCheckedMonSprite(void); +static void Select_PrintSelectMonString(void); +static void Select_PrintMonSpecies(void); +static void Select_PrintMonCategory(void); +static void Select_PrintRentalPkmnString(void); +static void Select_CopyMonsToPlayerParty(void); +static void sub_819C4B4(void); +static void Select_ShowYesNoOptions(void); +static void sub_819C568(void); +static void Select_ShowMenuOptions(void); +static void Select_PrintMenuOptions(void); +static void Select_PrintYesNoOptions(void); +static void Task_SelectBlendPalette(u8 taskId); +static void sub_819C1D0(u8 taskId); +static void Task_HandleSelectionScreenChooseMons(u8 taskId); +static void Task_HandleSelectionScreenMenu(u8 taskId); +static void CreateFrontierFactorySelectableMons(u8 firstMonId); +static void CreateTentFactorySelectableMons(u8 firstMonId); +static void Select_SetBallSpritePaletteNum(u8 id); void sub_819F444(struct UnkFactoryStruct arg0, u8 *arg1); -void sub_819B958(u8 windowId); +static void sub_819B958(u8 windowId); void sub_819F2B4(u8 *arg0, u8 *arg1, u8 arg2); void sub_819F3F8(struct UnkFactoryStruct arg0, u8 *arg1, u8 arg2); -u8 sub_819BC04(void); -u8 sub_819BC9C(void); +static u8 Select_RunMenuOptionFunc(void); +static u8 sub_819BC9C(void); +static u8 Select_OptionSummary(void); +static u8 Select_OptionOthers(void); +static u8 Select_OptionRentDeselect(void); u8 sub_81A6F70(u8 battleMode, u8 lvlMode); u8 sub_81A6CA8(u8 arg0, u8 arg1); -bool32 sub_819C634(u16 monSetId); +static bool32 Select_AreSpeciesValid(u16 monSetId); // Ewram variables EWRAM_DATA u8 *gUnknown_0203CE2C = NULL; @@ -125,17 +129,68 @@ EWRAM_DATA u8 *gUnknown_0203CE34 = NULL; EWRAM_DATA u8 *gUnknown_0203CE38 = NULL; static EWRAM_DATA struct Pokemon *sFactorySelectMons = NULL; +// IWRAM bss +static IWRAM_DATA struct FactorySelectMonsStruct *sFactorySelectScreen; + // Const rom data. +const u16 gUnknown_0860F13C[] = INCBIN_U16("graphics/unknown/unknown_60F13C.gbapal"); +const u16 gUnknown_0860F15C[] = INCBIN_U16("graphics/unknown/unknown_60F15C.gbapal"); +const u16 gUnknown_0860F17C[] = INCBIN_U16("graphics/unknown/unknown_60F17C.gbapal"); +const u8 gUnknown_0860F1BC[] = INCBIN_U8("graphics/unknown/unknown_60F1BC.4bpp"); +const u8 gUnknown_0860F3BC[] = INCBIN_U8("graphics/unknown/unknown_60F3BC.4bpp"); +const u8 gUnknown_0860F43C[] = INCBIN_U8("graphics/unknown/unknown_60F43C.4bpp"); +const u8 gUnknown_0860F53C[] = INCBIN_U8("graphics/unknown/unknown_60F53C.4bpp"); +const u8 gUnknown_0860F63C[] = INCBIN_U8("graphics/unknown/unknown_60F63C.4bpp"); +const u8 gUnknown_0860F6BC[] = INCBIN_U8("graphics/unknown/unknown_60F6BC.4bpp"); +const u8 gUnknown_0860F7BC[] = INCBIN_U8("graphics/unknown/unknown_60F7BC.4bpp"); +const u8 gUnknown_0860F83C[] = INCBIN_U8("graphics/unknown/unknown_60F83C.4bpp"); +const u8 gUnknown_0860F93C[] = INCBIN_U8("graphics/unknown/unknown_60F93C.4bpp"); +const u8 gUnknown_0860FA3C[] = INCBIN_U8("graphics/unknown/unknown_60FA3C.4bpp"); +const u8 gUnknown_0861023C[] = INCBIN_U8("graphics/unknown/unknown_61023C.bin"); +const u8 gUnknown_0861033C[] = INCBIN_U8("graphics/unknown/unknown_61033C.4bpp"); +const u16 gUnknown_0861039C[] = INCBIN_U16("graphics/unknown/unknown_61039C.gbapal"); + +const struct SpriteSheet gUnknown_086103BC[] = +{ + {gUnknown_0860F3BC, sizeof(gUnknown_0860F3BC), 0x65}, + {gUnknown_0860F43C, sizeof(gUnknown_0860F43C), 0x66}, + {gUnknown_0860F53C, sizeof(gUnknown_0860F53C), 0x67}, + {gUnknown_0860FA3C, sizeof(gUnknown_0860FA3C), 0x6D}, + {}, +}; + +const struct CompressedSpriteSheet gUnknown_086103E4[] = +{ + {gUnknown_085B18AC, 0x800, 0x64}, + {}, +}; + +const struct SpritePalette gUnknown_086103F4[] = +{ + {gUnknown_0860F13C, 0x64}, + {gUnknown_0860F15C, 0x65}, + {gUnknown_0860F17C, 0x66}, + {gUnknown_0861039C, 0x67}, + {}, +}; + +u8 (* const sSelect_MenuOptionFuncs[])(void) = +{ + [MENU_SUMMARY] = Select_OptionSummary, + [MENU_RENT] /*Or Deselect*/ = Select_OptionRentDeselect, + [MENU_OTHERS] = Select_OptionOthers +}; + extern const struct BgTemplate gUnknown_08610428[3]; extern const struct WindowTemplate gUnknown_08610434[]; -extern const u8 gUnknown_0861033C[]; -extern const u8 gUnknown_0861023C[]; extern const u16 gUnknown_0861046C[]; -extern const u16 gUnknown_0861039C[]; -extern const struct SpritePalette gUnknown_086103F4[]; -extern const struct SpriteSheet gUnknown_086103BC[]; -extern const struct CompressedSpriteSheet gUnknown_086103E4[]; extern const struct SpriteTemplate gUnknown_086105D8; +extern const struct SpriteTemplate gUnknown_086105F0; +extern const struct SpriteTemplate gUnknown_08610608; +extern const struct SpriteTemplate gUnknown_08610620; +extern const struct SpriteTemplate gUnknown_08610638; +extern const u8 gUnknown_08610479[]; +extern const u8 gUnknown_08610476[]; // gfx extern const u8 gFrontierFactorySelectMenu_Gfx[]; @@ -188,7 +243,7 @@ void sub_819A44C(struct Sprite *sprite) } } -void sub_819A4C8(void) +static void Select_CB2(void) { AnimateSprites(); BuildOamBuffer(); @@ -197,7 +252,7 @@ void sub_819A4C8(void) RunTasks(); } -void sub_819A4E4(void) +static void Select_VblankCb(void) { LoadOam(); ProcessSpriteCopyRequests(); @@ -206,11 +261,11 @@ void sub_819A4E4(void) void sub_819A4F8(void) { - gUnknown_0300127C = NULL; - SetMainCallback2(sub_819A514); + sFactorySelectScreen = NULL; + SetMainCallback2(CB2_InitSelectScreen); } -void sub_819A514(void) +static void CB2_InitSelectScreen(void) { u8 taskId; @@ -265,8 +320,8 @@ void sub_819A514(void) LoadPalette(gFrontierFactorySelectMenu_Pal, 0, 0x40); LoadPalette(gUnknown_0861046C, 0xF0, 8); LoadPalette(gUnknown_0861046C, 0xE0, 10); - if (gUnknown_0300127C->fromSummaryScreen == TRUE) - gPlttBufferUnfaded[228] = gUnknown_0300127C->unk2A4; + if (sFactorySelectScreen->fromSummaryScreen == TRUE) + gPlttBufferUnfaded[228] = sFactorySelectScreen->unk2A4; LoadPalette(gUnknown_0861039C, 0x20, 4); gMain.state++; break; @@ -284,12 +339,12 @@ void sub_819A514(void) LoadCompressedObjectPic(gUnknown_086103E4); ShowBg(0); ShowBg(1); - SetVBlankCallback(sub_819A4E4); + SetVBlankCallback(Select_VblankCb); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_1D_MAP); - if (gUnknown_0300127C->fromSummaryScreen == TRUE) + if (sFactorySelectScreen->fromSummaryScreen == TRUE) { - sub_819C5D0(88, 152, 32, 96); + Select_SetWinRegs(88, 152, 32, 96); ShowBg(3); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_OBJ); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4)); @@ -301,67 +356,67 @@ void sub_819A514(void) gMain.state++; break; case 5: - if (gUnknown_0300127C->fromSummaryScreen == TRUE) - gUnknown_0300127C->cursorPos = gUnknown_0203CF20; - sub_819A9AC(); - sub_819AA18(); - if (gUnknown_0300127C->fromSummaryScreen == TRUE) - sub_819BE34(); + if (sFactorySelectScreen->fromSummaryScreen == TRUE) + sFactorySelectScreen->cursorPos = gUnknown_0203CF20; + Select_InitMonsData(); + Select_InitAllSprites(); + if (sFactorySelectScreen->fromSummaryScreen == TRUE) + Select_ShowCheckedMonSprite(); gMain.state++; break; case 6: - PrintSelectMonString(); + Select_PrintSelectMonString(); PutWindowTilemap(2); gMain.state++; break; case 7: - PrintMonCategory(); + Select_PrintMonCategory(); PutWindowTilemap(5); gMain.state++; break; case 8: - PrintMonSpecies(); + Select_PrintMonSpecies(); PutWindowTilemap(1); gMain.state++; break; case 9: - PrintRentalPkmnString(); + Select_PrintRentalPkmnString(); PutWindowTilemap(0); gMain.state++; break; case 10: - gUnknown_0300127C->unk2A1 = CreateTask(sub_819C69C, 0); - if (!gUnknown_0300127C->fromSummaryScreen) + sFactorySelectScreen->palBlendTaskId = CreateTask(Task_SelectBlendPalette, 0); + if (!sFactorySelectScreen->fromSummaryScreen) { - gTasks[gUnknown_0300127C->unk2A1].data[0] = 0; + gTasks[sFactorySelectScreen->palBlendTaskId].data[0] = 0; taskId = CreateTask(Task_HandleSelectionScreenChooseMons, 0); gTasks[taskId].data[0] = 0; } else { - gTasks[gUnknown_0300127C->unk2A1].data[0] = 1; - gUnknown_0300127C->unk2A2 = 0; + gTasks[sFactorySelectScreen->palBlendTaskId].data[0] = 1; + sFactorySelectScreen->unk2A2 = FALSE; taskId = CreateTask(Task_HandleSelectionScreenMenu, 0); gTasks[taskId].data[0] = 13; } - SetMainCallback2(sub_819A4C8); + SetMainCallback2(Select_CB2); break; } } -void sub_819A9AC(void) +static void Select_InitMonsData(void) { u8 i; - if (gUnknown_0300127C != NULL) + if (sFactorySelectScreen != NULL) return; - gUnknown_0300127C = AllocZeroed(sizeof(*gUnknown_0300127C)); - gUnknown_0300127C->cursorPos = 0; - gUnknown_0300127C->selectingMonsState = 1; - gUnknown_0300127C->fromSummaryScreen = FALSE; + sFactorySelectScreen = AllocZeroed(sizeof(*sFactorySelectScreen)); + sFactorySelectScreen->cursorPos = 0; + sFactorySelectScreen->selectingMonsState = 1; + sFactorySelectScreen->fromSummaryScreen = FALSE; for (i = 0; i < SELECTABLE_MONS_COUNT; i++) - gUnknown_0300127C->mons[i].selectedId = 0; + sFactorySelectScreen->mons[i].selectedId = 0; if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_TENT) CreateFrontierFactorySelectableMons(0); @@ -369,157 +424,153 @@ void sub_819A9AC(void) CreateTentFactorySelectableMons(0); } -extern const struct SpriteTemplate gUnknown_086105F0; -extern const struct SpriteTemplate gUnknown_08610608; -extern const struct SpriteTemplate gUnknown_08610620; - -void sub_819AA18(void) +static void Select_InitAllSprites(void) { u8 i, cursorPos; s16 x; for (i = 0; i < SELECTABLE_MONS_COUNT; i++) { - gUnknown_0300127C->mons[i].spriteId = CreateSprite(&gUnknown_086105D8, (35 * i) + 32, 64, 1); - gSprites[gUnknown_0300127C->mons[i].spriteId].data[0] = 0; - SetBallSpritePaletteNum(i); + sFactorySelectScreen->mons[i].spriteId = CreateSprite(&gUnknown_086105D8, (35 * i) + 32, 64, 1); + gSprites[sFactorySelectScreen->mons[i].spriteId].data[0] = 0; + Select_SetBallSpritePaletteNum(i); } - cursorPos = gUnknown_0300127C->cursorPos; - x = gSprites[gUnknown_0300127C->mons[cursorPos].spriteId].pos1.x; - gUnknown_0300127C->cursorSpriteId = CreateSprite(&gUnknown_086105F0, x, 88, 0); - gUnknown_0300127C->menuCursor1SpriteId = CreateSprite(&gUnknown_08610608, 176, 112, 0); - gUnknown_0300127C->menuCursor2SpriteId = CreateSprite(&gUnknown_08610620, 176, 144, 0); - - gSprites[gUnknown_0300127C->menuCursor1SpriteId].invisible = 1; - gSprites[gUnknown_0300127C->menuCursor2SpriteId].invisible = 1; - - gSprites[gUnknown_0300127C->menuCursor1SpriteId].centerToCornerVecX = 0; - gSprites[gUnknown_0300127C->menuCursor1SpriteId].centerToCornerVecY = 0; - gSprites[gUnknown_0300127C->menuCursor2SpriteId].centerToCornerVecX = 0; - gSprites[gUnknown_0300127C->menuCursor2SpriteId].centerToCornerVecY = 0; + cursorPos = sFactorySelectScreen->cursorPos; + x = gSprites[sFactorySelectScreen->mons[cursorPos].spriteId].pos1.x; + sFactorySelectScreen->cursorSpriteId = CreateSprite(&gUnknown_086105F0, x, 88, 0); + sFactorySelectScreen->menuCursor1SpriteId = CreateSprite(&gUnknown_08610608, 176, 112, 0); + sFactorySelectScreen->menuCursor2SpriteId = CreateSprite(&gUnknown_08610620, 176, 144, 0); + + gSprites[sFactorySelectScreen->menuCursor1SpriteId].invisible = 1; + gSprites[sFactorySelectScreen->menuCursor2SpriteId].invisible = 1; + + gSprites[sFactorySelectScreen->menuCursor1SpriteId].centerToCornerVecX = 0; + gSprites[sFactorySelectScreen->menuCursor1SpriteId].centerToCornerVecY = 0; + gSprites[sFactorySelectScreen->menuCursor2SpriteId].centerToCornerVecX = 0; + gSprites[sFactorySelectScreen->menuCursor2SpriteId].centerToCornerVecY = 0; } -void sub_819AB40(void) +static void Select_DestroyAllSprites(void) { u8 i; for (i = 0; i < SELECTABLE_MONS_COUNT; i++) - DestroySprite(&gSprites[gUnknown_0300127C->mons[i].spriteId]); + DestroySprite(&gSprites[sFactorySelectScreen->mons[i].spriteId]); - DestroySprite(&gSprites[gUnknown_0300127C->cursorSpriteId]); - DestroySprite(&gSprites[gUnknown_0300127C->menuCursor1SpriteId]); - DestroySprite(&gSprites[gUnknown_0300127C->menuCursor2SpriteId]); + DestroySprite(&gSprites[sFactorySelectScreen->cursorSpriteId]); + DestroySprite(&gSprites[sFactorySelectScreen->menuCursor1SpriteId]); + DestroySprite(&gSprites[sFactorySelectScreen->menuCursor2SpriteId]); } -void UpdateBallCursorPosition(s8 direction) +static void Select_UpdateBallCursorPosition(s8 direction) { u8 cursorPos; if (direction > 0) // Move cursor right. { - if (gUnknown_0300127C->cursorPos != SELECTABLE_MONS_COUNT - 1) - gUnknown_0300127C->cursorPos++; + if (sFactorySelectScreen->cursorPos != SELECTABLE_MONS_COUNT - 1) + sFactorySelectScreen->cursorPos++; else - gUnknown_0300127C->cursorPos = 0; + sFactorySelectScreen->cursorPos = 0; } else // Move cursor left. { - if (gUnknown_0300127C->cursorPos != 0) - gUnknown_0300127C->cursorPos--; + if (sFactorySelectScreen->cursorPos != 0) + sFactorySelectScreen->cursorPos--; else - gUnknown_0300127C->cursorPos = SELECTABLE_MONS_COUNT - 1; + sFactorySelectScreen->cursorPos = SELECTABLE_MONS_COUNT - 1; } - cursorPos = gUnknown_0300127C->cursorPos; - gSprites[gUnknown_0300127C->cursorSpriteId].pos1.x = gSprites[gUnknown_0300127C->mons[cursorPos].spriteId].pos1.x; + cursorPos = sFactorySelectScreen->cursorPos; + gSprites[sFactorySelectScreen->cursorSpriteId].pos1.x = gSprites[sFactorySelectScreen->mons[cursorPos].spriteId].pos1.x; } -void UpdateMenuCursorPosition(s8 direction) +static void Select_UpdateMenuCursorPosition(s8 direction) { if (direction > 0) // Move cursor down. { - if (gUnknown_0300127C->menuCursorPos != MENU_OPTIONS_COUNT - 1) - gUnknown_0300127C->menuCursorPos++; + if (sFactorySelectScreen->menuCursorPos != MENU_OPTIONS_COUNT - 1) + sFactorySelectScreen->menuCursorPos++; else - gUnknown_0300127C->menuCursorPos = 0; + sFactorySelectScreen->menuCursorPos = 0; } else // Move cursor up. { - if (gUnknown_0300127C->menuCursorPos != 0) - gUnknown_0300127C->menuCursorPos--; + if (sFactorySelectScreen->menuCursorPos != 0) + sFactorySelectScreen->menuCursorPos--; else - gUnknown_0300127C->menuCursorPos = MENU_OPTIONS_COUNT - 1; + sFactorySelectScreen->menuCursorPos = MENU_OPTIONS_COUNT - 1; } - gSprites[gUnknown_0300127C->menuCursor1SpriteId].pos1.y = (gUnknown_0300127C->menuCursorPos * 16) + 112; - gSprites[gUnknown_0300127C->menuCursor2SpriteId].pos1.y = (gUnknown_0300127C->menuCursorPos * 16) + 112; + gSprites[sFactorySelectScreen->menuCursor1SpriteId].pos1.y = (sFactorySelectScreen->menuCursorPos * 16) + 112; + gSprites[sFactorySelectScreen->menuCursor2SpriteId].pos1.y = (sFactorySelectScreen->menuCursorPos * 16) + 112; } -void UpdateYesNoCursorPosition(s8 direction) +static void Select_UpdateYesNoCursorPosition(s8 direction) { if (direction > 0) // Move cursor down. { - if (gUnknown_0300127C->yesNoCursorPos != 1) - gUnknown_0300127C->yesNoCursorPos++; + if (sFactorySelectScreen->yesNoCursorPos != 1) + sFactorySelectScreen->yesNoCursorPos++; else - gUnknown_0300127C->yesNoCursorPos = 0; + sFactorySelectScreen->yesNoCursorPos = 0; } else // Move cursor up. { - if (gUnknown_0300127C->yesNoCursorPos != 0) - gUnknown_0300127C->yesNoCursorPos--; + if (sFactorySelectScreen->yesNoCursorPos != 0) + sFactorySelectScreen->yesNoCursorPos--; else - gUnknown_0300127C->yesNoCursorPos = 1; + sFactorySelectScreen->yesNoCursorPos = 1; } - gSprites[gUnknown_0300127C->menuCursor1SpriteId].pos1.y = (gUnknown_0300127C->yesNoCursorPos * 16) + 112; - gSprites[gUnknown_0300127C->menuCursor2SpriteId].pos1.y = (gUnknown_0300127C->yesNoCursorPos * 16) + 112; + gSprites[sFactorySelectScreen->menuCursor1SpriteId].pos1.y = (sFactorySelectScreen->yesNoCursorPos * 16) + 112; + gSprites[sFactorySelectScreen->menuCursor2SpriteId].pos1.y = (sFactorySelectScreen->yesNoCursorPos * 16) + 112; } -void HandleMonSelectionChange(void) +static void Select_HandleMonSelectionChange(void) { u8 i, paletteNum; - u8 cursorPos = gUnknown_0300127C->cursorPos; - if (gUnknown_0300127C->mons[cursorPos].selectedId) // Deselect a mon. + u8 cursorPos = sFactorySelectScreen->cursorPos; + if (sFactorySelectScreen->mons[cursorPos].selectedId) // Deselect a mon. { paletteNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_GREY); - if (gUnknown_0300127C->selectingMonsState == 3 && gUnknown_0300127C->mons[cursorPos].selectedId == 1) + if (sFactorySelectScreen->selectingMonsState == 3 && sFactorySelectScreen->mons[cursorPos].selectedId == 1) { for (i = 0; i < SELECTABLE_MONS_COUNT; i++) { - if (gUnknown_0300127C->mons[i].selectedId == 2) + if (sFactorySelectScreen->mons[i].selectedId == 2) break; } if (i == SELECTABLE_MONS_COUNT) return; else - gUnknown_0300127C->mons[i].selectedId = 1; + sFactorySelectScreen->mons[i].selectedId = 1; } - gUnknown_0300127C->mons[cursorPos].selectedId = 0; - gUnknown_0300127C->selectingMonsState--; + sFactorySelectScreen->mons[cursorPos].selectedId = 0; + sFactorySelectScreen->selectingMonsState--; } else // Select a mon. { paletteNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_SELECTED); - gUnknown_0300127C->mons[cursorPos].selectedId = gUnknown_0300127C->selectingMonsState; - gUnknown_0300127C->selectingMonsState++; + sFactorySelectScreen->mons[cursorPos].selectedId = sFactorySelectScreen->selectingMonsState; + sFactorySelectScreen->selectingMonsState++; } - gSprites[gUnknown_0300127C->mons[cursorPos].spriteId].oam.paletteNum = paletteNum; + gSprites[sFactorySelectScreen->mons[cursorPos].spriteId].oam.paletteNum = paletteNum; } -void SetBallSpritePaletteNum(u8 id) +static void Select_SetBallSpritePaletteNum(u8 id) { u8 palNum; - if (gUnknown_0300127C->mons[id].selectedId) + if (sFactorySelectScreen->mons[id].selectedId) palNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_SELECTED); else palNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_GREY); - gSprites[gUnknown_0300127C->mons[id].spriteId].oam.paletteNum = palNum; + gSprites[sFactorySelectScreen->mons[id].spriteId].oam.paletteNum = palNum; } -void Task_FromSelectScreenToSummaryScreen(u8 taskId) +static void Task_FromSelectScreenToSummaryScreen(u8 taskId) { u8 i; u8 currMonId; @@ -534,9 +585,9 @@ void Task_FromSelectScreenToSummaryScreen(u8 taskId) case 7: if (!gPaletteFade.active) { - DestroyTask(gUnknown_0300127C->unk2A1); - sub_819F444(gUnknown_0300127C->unk298, &gUnknown_0300127C->unk2A0); - sub_819AB40(); + DestroyTask(sFactorySelectScreen->palBlendTaskId); + sub_819F444(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0); + Select_DestroyAllSprites(); FREE_AND_SET_NULL(gUnknown_0203CE2C); FREE_AND_SET_NULL(gUnknown_0203CE30); FREE_AND_SET_NULL(gUnknown_0203CE34); @@ -546,21 +597,21 @@ void Task_FromSelectScreenToSummaryScreen(u8 taskId) } break; case 8: - gUnknown_0300127C->unk2A4 = gPlttBufferUnfaded[228]; + sFactorySelectScreen->unk2A4 = gPlttBufferUnfaded[228]; DestroyTask(taskId); - gUnknown_0300127C->fromSummaryScreen = TRUE; - currMonId = gUnknown_0300127C->cursorPos; + sFactorySelectScreen->fromSummaryScreen = TRUE; + currMonId = sFactorySelectScreen->cursorPos; sFactorySelectMons = AllocZeroed(sizeof(struct Pokemon) * SELECTABLE_MONS_COUNT); for (i = 0; i < SELECTABLE_MONS_COUNT; i++) - sFactorySelectMons[i] = gUnknown_0300127C->mons[i].monData; - ShowPokemonSummaryScreen(1, sFactorySelectMons, currMonId, SELECTABLE_MONS_COUNT - 1, sub_819A514); + sFactorySelectMons[i] = sFactorySelectScreen->mons[i].monData; + ShowPokemonSummaryScreen(1, sFactorySelectMons, currMonId, SELECTABLE_MONS_COUNT - 1, CB2_InitSelectScreen); break; } } -void Task_CloseSelectionScreen(u8 taskId) +static void Task_CloseSelectionScreen(u8 taskId) { - if (gUnknown_0300127C->unk2A0 != 1) + if (sFactorySelectScreen->unk2A0 != 1) { switch (gTasks[taskId].data[0]) { @@ -571,13 +622,13 @@ void Task_CloseSelectionScreen(u8 taskId) case 1: if (!UpdatePaletteFade()) { - CopySelectedMonsToPlayerParty(); - DestroyTask(gUnknown_0300127C->unk2A1); - sub_819AB40(); + Select_CopyMonsToPlayerParty(); + DestroyTask(sFactorySelectScreen->palBlendTaskId); + Select_DestroyAllSprites(); FREE_AND_SET_NULL(gUnknown_0203CE2C); FREE_AND_SET_NULL(gUnknown_0203CE34); FREE_AND_SET_NULL(gUnknown_0203CE38); - FREE_AND_SET_NULL(gUnknown_0300127C); + FREE_AND_SET_NULL(sFactorySelectScreen); FreeAllWindowBuffers(); SetMainCallback2(CB2_ReturnToFieldContinueScript); DestroyTask(taskId); @@ -587,9 +638,9 @@ void Task_CloseSelectionScreen(u8 taskId) } } -void Task_HandleSelectionScreenYesNo(u8 taskId) +static void Task_HandleSelectionScreenYesNo(u8 taskId) { - if (gUnknown_0300127C->unk2A0 != 1) + if (sFactorySelectScreen->unk2A0 != 1) { switch (gTasks[taskId].data[0]) { @@ -598,14 +649,14 @@ void Task_HandleSelectionScreenYesNo(u8 taskId) gTasks[taskId].data[0] = 4; break; case 4: - sub_819B8D4(); + Select_ShowYesNoOptions(); gTasks[taskId].data[0] = 5; break; case 5: if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); - if (gUnknown_0300127C->yesNoCursorPos == 0) + if (sFactorySelectScreen->yesNoCursorPos == 0) { sub_819C568(); gTasks[taskId].data[0] = 0; @@ -615,7 +666,7 @@ void Task_HandleSelectionScreenYesNo(u8 taskId) { sub_819B958(4); sub_819BC9C(); - gUnknown_0300127C->unk2A2 = 1; + sFactorySelectScreen->unk2A2 = TRUE; gTasks[taskId].data[0] = 1; gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; } @@ -625,39 +676,39 @@ void Task_HandleSelectionScreenYesNo(u8 taskId) PlaySE(SE_SELECT); sub_819B958(4); sub_819BC9C(); - gUnknown_0300127C->unk2A2 = 1; + sFactorySelectScreen->unk2A2 = TRUE; gTasks[taskId].data[0] = 1; gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; } else if (gMain.newAndRepeatedKeys & DPAD_UP) { PlaySE(SE_SELECT); - UpdateYesNoCursorPosition(-1); + Select_UpdateYesNoCursorPosition(-1); } else if (gMain.newAndRepeatedKeys & DPAD_DOWN) { PlaySE(SE_SELECT); - UpdateYesNoCursorPosition(1); + Select_UpdateYesNoCursorPosition(1); } break; } } } -void Task_HandleSelectionScreenMenu(u8 taskId) +static void Task_HandleSelectionScreenMenu(u8 taskId) { switch (gTasks[taskId].data[0]) { case 2: - if (!gUnknown_0300127C->fromSummaryScreen) - sub_819F2B4(&gUnknown_0300127C->unk298.field1, &gUnknown_0300127C->unk2A0, 0); + if (!sFactorySelectScreen->fromSummaryScreen) + sub_819F2B4(&sFactorySelectScreen->unk294[1].field1, &sFactorySelectScreen->unk2A0, 0); gTasks[taskId].data[0] = 9; break; case 9: - if (gUnknown_0300127C->unk2A0 != 1) + if (sFactorySelectScreen->unk2A0 != 1) { - sub_819B844(); - gUnknown_0300127C->fromSummaryScreen = FALSE; + Select_ShowMenuOptions(); + sFactorySelectScreen->fromSummaryScreen = FALSE; gTasks[taskId].data[0] = 3; } break; @@ -666,10 +717,10 @@ void Task_HandleSelectionScreenMenu(u8 taskId) { u8 retVal; PlaySE(SE_SELECT); - retVal = sub_819BC04(); + retVal = Select_RunMenuOptionFunc(); if (retVal == 1) { - gUnknown_0300127C->unk2A2 = 1; + sFactorySelectScreen->unk2A2 = TRUE; gTasks[taskId].data[0] = 1; gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; } @@ -692,45 +743,45 @@ void Task_HandleSelectionScreenMenu(u8 taskId) else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); - sub_819F3F8(gUnknown_0300127C->unk298, &gUnknown_0300127C->unk2A0, 0); + sub_819F3F8(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, 0); sub_819B958(3); - gUnknown_0300127C->unk2A2 = 1; + sFactorySelectScreen->unk2A2 = TRUE; gTasks[taskId].data[0] = 1; gTasks[taskId].func = Task_HandleSelectionScreenChooseMons; } else if (gMain.newAndRepeatedKeys & DPAD_UP) { PlaySE(SE_SELECT); - UpdateMenuCursorPosition(-1); + Select_UpdateMenuCursorPosition(-1); } else if (gMain.newAndRepeatedKeys & DPAD_DOWN) { PlaySE(SE_SELECT); - UpdateMenuCursorPosition(1); + Select_UpdateMenuCursorPosition(1); } break; case 12: if (!gPaletteFade.active) { - if (gUnknown_0300127C->fromSummaryScreen == TRUE) + if (sFactorySelectScreen->fromSummaryScreen == TRUE) { - gPlttBufferFaded[228] = gUnknown_0300127C->unk2A4; + gPlttBufferFaded[228] = sFactorySelectScreen->unk2A4; gPlttBufferUnfaded[228] = gPlttBufferUnfaded[244]; } - gUnknown_0300127C->fromSummaryScreen = FALSE; + sFactorySelectScreen->fromSummaryScreen = FALSE; gTasks[taskId].data[0] = 3; } break; case 13: - sub_819B844(); + Select_ShowMenuOptions(); gTasks[taskId].data[0] = 12; break; } } -void Task_HandleSelectionScreenChooseMons(u8 taskId) +static void Task_HandleSelectionScreenChooseMons(u8 taskId) { - if (gUnknown_0300127C->unk2A0 != 1) + if (sFactorySelectScreen->unk2A0 != 1) { switch (gTasks[taskId].data[0]) { @@ -738,39 +789,39 @@ void Task_HandleSelectionScreenChooseMons(u8 taskId) if (!gPaletteFade.active) { gTasks[taskId].data[0] = 1; - gUnknown_0300127C->unk2A2 = 1; + sFactorySelectScreen->unk2A2 = TRUE; } break; case 1: if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); - gUnknown_0300127C->unk2A2 = 0; + sFactorySelectScreen->unk2A2 = FALSE; gTasks[taskId].data[0] = 2; gTasks[taskId].func = Task_HandleSelectionScreenMenu; } else if (gMain.newAndRepeatedKeys & DPAD_LEFT) { PlaySE(SE_SELECT); - UpdateBallCursorPosition(-1); - PrintMonCategory(); - PrintMonSpecies(); + Select_UpdateBallCursorPosition(-1); + Select_PrintMonCategory(); + Select_PrintMonSpecies(); } else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) { PlaySE(SE_SELECT); - UpdateBallCursorPosition(1); - PrintMonCategory(); - PrintMonSpecies(); + Select_UpdateBallCursorPosition(1); + Select_PrintMonCategory(); + Select_PrintMonSpecies(); } break; case 11: if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); - sub_819F3F8(gUnknown_0300127C->unk298, &gUnknown_0300127C->unk2A0, 0); - PrintSelectMonString(); - gUnknown_0300127C->unk2A2 = 1; + sub_819F3F8(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, 0); + Select_PrintSelectMonString(); + sFactorySelectScreen->unk2A2 = TRUE; gTasks[taskId].data[0] = 1; } break; @@ -778,7 +829,7 @@ void Task_HandleSelectionScreenChooseMons(u8 taskId) } } -void CreateFrontierFactorySelectableMons(u8 firstMonId) +static void CreateFrontierFactorySelectableMons(u8 firstMonId) { u8 i, j = 0; u8 ivs = 0; @@ -802,12 +853,12 @@ void CreateFrontierFactorySelectableMons(u8 firstMonId) for (i = 0; i < SELECTABLE_MONS_COUNT; i++) { u16 monSetId = gSaveBlock2Ptr->frontier.field_E70[i].monId; - gUnknown_0300127C->mons[i + firstMonId].monSetId = monSetId; + sFactorySelectScreen->mons[i + firstMonId].monSetId = monSetId; if (i < var_28) ivs = sub_81A6CA8(var_2C + 1, 0); else ivs = sub_81A6CA8(var_2C, 0); - CreateMonWithEVSpreadPersonalityOTID(&gUnknown_0300127C->mons[i + firstMonId].monData, + CreateMonWithEVSpreadPersonalityOTID(&sFactorySelectScreen->mons[i + firstMonId].monData, gFacilityTrainerMons[monSetId].species, level, gFacilityTrainerMons[monSetId].nature, @@ -816,13 +867,13 @@ void CreateFrontierFactorySelectableMons(u8 firstMonId) otId); happiness = 0; for (j = 0; j < 4; j++) - SetMonMoveAvoidReturn(&gUnknown_0300127C->mons[i + firstMonId].monData, gFacilityTrainerMons[monSetId].moves[j], j); - SetMonData(&gUnknown_0300127C->mons[i + firstMonId].monData, MON_DATA_FRIENDSHIP, &happiness); - SetMonData(&gUnknown_0300127C->mons[i + firstMonId].monData, MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]); + SetMonMoveAvoidReturn(&sFactorySelectScreen->mons[i + firstMonId].monData, gFacilityTrainerMons[monSetId].moves[j], j); + SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_FRIENDSHIP, &happiness); + SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]); } } -void CreateTentFactorySelectableMons(u8 firstMonId) +static void CreateTentFactorySelectableMons(u8 firstMonId) { u8 i, j; u8 ivs = 0; @@ -836,8 +887,8 @@ void CreateTentFactorySelectableMons(u8 firstMonId) for (i = 0; i < SELECTABLE_MONS_COUNT; i++) { u16 monSetId = gSaveBlock2Ptr->frontier.field_E70[i].monId; - gUnknown_0300127C->mons[i + firstMonId].monSetId = monSetId; - CreateMonWithEVSpreadPersonalityOTID(&gUnknown_0300127C->mons[i + firstMonId].monData, + sFactorySelectScreen->mons[i + firstMonId].monSetId = monSetId; + CreateMonWithEVSpreadPersonalityOTID(&sFactorySelectScreen->mons[i + firstMonId].monData, gFacilityTrainerMons[monSetId].species, level, gFacilityTrainerMons[monSetId].nature, @@ -846,13 +897,13 @@ void CreateTentFactorySelectableMons(u8 firstMonId) otId); happiness = 0; for (j = 0; j < 4; j++) - SetMonMoveAvoidReturn(&gUnknown_0300127C->mons[i + firstMonId].monData, gFacilityTrainerMons[monSetId].moves[j], j); - SetMonData(&gUnknown_0300127C->mons[i + firstMonId].monData, MON_DATA_FRIENDSHIP, &happiness); - SetMonData(&gUnknown_0300127C->mons[i + firstMonId].monData, MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]); + SetMonMoveAvoidReturn(&sFactorySelectScreen->mons[i + firstMonId].monData, gFacilityTrainerMons[monSetId].moves[j], j); + SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_FRIENDSHIP, &happiness); + SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]); } } -void CopySelectedMonsToPlayerParty(void) +static void Select_CopyMonsToPlayerParty(void) { u8 i, j; @@ -860,10 +911,10 @@ void CopySelectedMonsToPlayerParty(void) { for (j = 0; j < SELECTABLE_MONS_COUNT; j++) { - if (gUnknown_0300127C->mons[j].selectedId == i + 1) + if (sFactorySelectScreen->mons[j].selectedId == i + 1) { - gPlayerParty[i] = gUnknown_0300127C->mons[j].monData; - gSaveBlock2Ptr->frontier.field_E70[i].monId = gUnknown_0300127C->mons[j].monSetId; + gPlayerParty[i] = sFactorySelectScreen->mons[j].monData; + gSaveBlock2Ptr->frontier.field_E70[i].monId = sFactorySelectScreen->mons[j].monSetId; gSaveBlock2Ptr->frontier.field_E70[i].personality = GetMonData(&gPlayerParty[i].box, MON_DATA_PERSONALITY, NULL); gSaveBlock2Ptr->frontier.field_E70[i].abilityBit = GetBoxMonData(&gPlayerParty[i].box, MON_DATA_ALT_ABILITY, NULL); gSaveBlock2Ptr->frontier.field_E70[i].ivs = GetBoxMonData(&gPlayerParty[i].box, MON_DATA_ATK_IV, NULL); @@ -874,80 +925,77 @@ void CopySelectedMonsToPlayerParty(void) CalculatePlayerPartyCount(); } -void sub_819B844(void) +static void Select_ShowMenuOptions(void) { - if (!gUnknown_0300127C->fromSummaryScreen) - gUnknown_0300127C->menuCursorPos = 0; + if (!sFactorySelectScreen->fromSummaryScreen) + sFactorySelectScreen->menuCursorPos = 0; - gSprites[gUnknown_0300127C->menuCursor1SpriteId].pos1.x = 176; - gSprites[gUnknown_0300127C->menuCursor1SpriteId].pos1.y = (gUnknown_0300127C->menuCursorPos * 16) + 112; - gSprites[gUnknown_0300127C->menuCursor2SpriteId].pos1.x = 208; - gSprites[gUnknown_0300127C->menuCursor2SpriteId].pos1.y = (gUnknown_0300127C->menuCursorPos * 16) + 112; + gSprites[sFactorySelectScreen->menuCursor1SpriteId].pos1.x = 176; + gSprites[sFactorySelectScreen->menuCursor1SpriteId].pos1.y = (sFactorySelectScreen->menuCursorPos * 16) + 112; + gSprites[sFactorySelectScreen->menuCursor2SpriteId].pos1.x = 208; + gSprites[sFactorySelectScreen->menuCursor2SpriteId].pos1.y = (sFactorySelectScreen->menuCursorPos * 16) + 112; - gSprites[gUnknown_0300127C->menuCursor1SpriteId].invisible = 0; - gSprites[gUnknown_0300127C->menuCursor2SpriteId].invisible = 0; + gSprites[sFactorySelectScreen->menuCursor1SpriteId].invisible = 0; + gSprites[sFactorySelectScreen->menuCursor2SpriteId].invisible = 0; - PrintSelectableMenuOptions(); + Select_PrintMenuOptions(); } -void sub_819B8D4(void) +static void Select_ShowYesNoOptions(void) { - gUnknown_0300127C->yesNoCursorPos = 0; + sFactorySelectScreen->yesNoCursorPos = 0; - gSprites[gUnknown_0300127C->menuCursor1SpriteId].pos1.x = 176; - gSprites[gUnknown_0300127C->menuCursor1SpriteId].pos1.y = 112; - gSprites[gUnknown_0300127C->menuCursor2SpriteId].pos1.x = 208; - gSprites[gUnknown_0300127C->menuCursor2SpriteId].pos1.y = 112; + gSprites[sFactorySelectScreen->menuCursor1SpriteId].pos1.x = 176; + gSprites[sFactorySelectScreen->menuCursor1SpriteId].pos1.y = 112; + gSprites[sFactorySelectScreen->menuCursor2SpriteId].pos1.x = 208; + gSprites[sFactorySelectScreen->menuCursor2SpriteId].pos1.y = 112; - gSprites[gUnknown_0300127C->menuCursor1SpriteId].invisible = 0; - gSprites[gUnknown_0300127C->menuCursor2SpriteId].invisible = 0; + gSprites[sFactorySelectScreen->menuCursor1SpriteId].invisible = 0; + gSprites[sFactorySelectScreen->menuCursor2SpriteId].invisible = 0; - PrintSelectableYesNo(); + Select_PrintYesNoOptions(); } -void sub_819B958(u8 windowId) +static void sub_819B958(u8 windowId) { - gSprites[gUnknown_0300127C->menuCursor1SpriteId].invisible = 1; - gSprites[gUnknown_0300127C->menuCursor2SpriteId].invisible = 1; + gSprites[sFactorySelectScreen->menuCursor1SpriteId].invisible = 1; + gSprites[sFactorySelectScreen->menuCursor2SpriteId].invisible = 1; FillWindowPixelBuffer(windowId, 0); CopyWindowToVram(windowId, 2); ClearWindowTilemap(windowId); } -void PrintRentalPkmnString(void) +static void Select_PrintRentalPkmnString(void) { FillWindowPixelBuffer(0, 0); PrintTextOnWindow(0, 1, gText_RentalPkmn2, 2, 1, 0, NULL); CopyWindowToVram(0, 3); } -extern const u8 gUnknown_08610479[]; -extern const u8 gUnknown_08610476[]; - -void PrintMonSpecies(void) +static void Select_PrintMonSpecies(void) { u16 species; u8 x; - u8 monId = gUnknown_0300127C->cursorPos; + u8 monId = sFactorySelectScreen->cursorPos; FillWindowPixelBuffer(1, 0); - species = GetMonData(&gUnknown_0300127C->mons[monId].monData, MON_DATA_SPECIES, NULL); + species = GetMonData(&sFactorySelectScreen->mons[monId].monData, MON_DATA_SPECIES, NULL); StringCopy(gStringVar4, gSpeciesNames[species]); x = GetStringRightAlignXOffset(1, gStringVar4, 86); AddTextPrinterParameterized3(1, 1, x, 1, gUnknown_08610479, 0, gStringVar4); CopyWindowToVram(1, 2); } -void PrintSelectMonString(void) +static void Select_PrintSelectMonString(void) { const u8 *str = NULL; FillWindowPixelBuffer(2, 0); - if (gUnknown_0300127C->selectingMonsState == 1) + if (sFactorySelectScreen->selectingMonsState == 1) str = gText_SelectFirstPkmn; - else if (gUnknown_0300127C->selectingMonsState == 2) + else if (sFactorySelectScreen->selectingMonsState == 2) str = gText_SelectSecondPkmn; - else if (gUnknown_0300127C->selectingMonsState == 3) + else if (sFactorySelectScreen->selectingMonsState == 3) str = gText_SelectThirdPkmn; else str = gText_TheseThreePkmnOkay; @@ -956,16 +1004,16 @@ void PrintSelectMonString(void) CopyWindowToVram(2, 2); } -void PrintCantSelectSameMon(void) +static void Select_PrintCantSelectSameMon(void) { FillWindowPixelBuffer(2, 0); PrintTextOnWindow(2, 1, gText_CantSelectSamePkmn, 2, 5, 0, NULL); CopyWindowToVram(2, 2); } -void PrintSelectableMenuOptions(void) +static void Select_PrintMenuOptions(void) { - u8 selectedId = gUnknown_0300127C->mons[gUnknown_0300127C->cursorPos].selectedId; + u8 selectedId = sFactorySelectScreen->mons[sFactorySelectScreen->cursorPos].selectedId; PutWindowTilemap(3); FillWindowPixelBuffer(3, 0); @@ -979,7 +1027,7 @@ void PrintSelectableMenuOptions(void) CopyWindowToVram(3, 3); } -void PrintSelectableYesNo(void) +static void Select_PrintYesNoOptions(void) { PutWindowTilemap(4); FillWindowPixelBuffer(4, 0); @@ -988,72 +1036,70 @@ void PrintSelectableYesNo(void) CopyWindowToVram(4, 3); } -extern u8 (* const gUnknown_0861041C[])(void); - -u8 sub_819BC04(void) +static u8 Select_RunMenuOptionFunc(void) { - gUnknown_030062E8 = gUnknown_0861041C[gUnknown_0300127C->menuCursorPos]; + gUnknown_030062E8 = sSelect_MenuOptionFuncs[sFactorySelectScreen->menuCursorPos]; return gUnknown_030062E8(); } -u8 sub_819BC30(void) +static u8 Select_OptionRentDeselect(void) { - u8 selectedId = gUnknown_0300127C->mons[gUnknown_0300127C->cursorPos].selectedId; - u16 monSetId = gUnknown_0300127C->mons[gUnknown_0300127C->cursorPos].monSetId; - if (selectedId == 0 && !sub_819C634(monSetId)) + u8 selectedId = sFactorySelectScreen->mons[sFactorySelectScreen->cursorPos].selectedId; + u16 monSetId = sFactorySelectScreen->mons[sFactorySelectScreen->cursorPos].monSetId; + if (selectedId == 0 && !Select_AreSpeciesValid(monSetId)) { - PrintCantSelectSameMon(); + Select_PrintCantSelectSameMon(); sub_819B958(3); return 3; } else { - sub_819F3F8(gUnknown_0300127C->unk298, &gUnknown_0300127C->unk2A0, 0); - HandleMonSelectionChange(); - PrintSelectMonString(); + sub_819F3F8(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, 0); + Select_HandleMonSelectionChange(); + Select_PrintSelectMonString(); sub_819B958(3); - if (gUnknown_0300127C->selectingMonsState > 3) + if (sFactorySelectScreen->selectingMonsState > 3) return 2; else return 1; } } -u8 sub_819BC9C(void) +static u8 sub_819BC9C(void) { sub_819C568(); - HandleMonSelectionChange(); - PrintSelectMonString(); + Select_HandleMonSelectionChange(); + Select_PrintSelectMonString(); sub_819B958(3); - if (gUnknown_0300127C->selectingMonsState > 3) + if (sFactorySelectScreen->selectingMonsState > 3) return 2; else return 1; } -u8 sub_819BCCC(void) +static u8 Select_OptionSummary(void) { return 0; } -u8 sub_819BCD0(void) +static u8 Select_OptionOthers(void) { - sub_819F3F8(gUnknown_0300127C->unk298, &gUnknown_0300127C->unk2A0, 0); + sub_819F3F8(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, 0); sub_819B958(3); return 1; } -void PrintMonCategory(void) +static void Select_PrintMonCategory(void) { u16 species; u8 text[30]; u8 x; - u8 monId = gUnknown_0300127C->cursorPos; + u8 monId = sFactorySelectScreen->cursorPos; if (monId < SELECTABLE_MONS_COUNT) { PutWindowTilemap(5); FillWindowPixelBuffer(5, 0); - species = GetMonData(&gUnknown_0300127C->mons[monId].monData, MON_DATA_SPECIES, NULL); + species = GetMonData(&sFactorySelectScreen->mons[monId].monData, MON_DATA_SPECIES, NULL); CopyMonCategoryText(SpeciesToNationalPokedexNum(species), text); x = GetStringRightAlignXOffset(1, text, 0x76); PrintTextOnWindow(5, 1, text, x, 1, 0, NULL); @@ -1063,43 +1109,305 @@ void PrintMonCategory(void) void sub_819BD70(void) { - u8 monId = gUnknown_0300127C->cursorPos; - struct Pokemon *mon = &gUnknown_0300127C->mons[monId].monData; + u8 monId = sFactorySelectScreen->cursorPos; + struct Pokemon *mon = &sFactorySelectScreen->mons[monId].monData; u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); u32 otId = GetMonData(mon, MON_DATA_OT_ID, NULL); - gUnknown_0300127C->unk298.field0 = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, 88, 32, 15, 0xFFFF); - gSprites[gUnknown_0300127C->unk298.field0].centerToCornerVecX = 0; - gSprites[gUnknown_0300127C->unk298.field0].centerToCornerVecY = 0; + sFactorySelectScreen->unk294[1].field0 = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, 88, 32, 15, 0xFFFF); + gSprites[sFactorySelectScreen->unk294[1].field0].centerToCornerVecX = 0; + gSprites[sFactorySelectScreen->unk294[1].field0].centerToCornerVecY = 0; - gUnknown_0300127C->unk2A0 = 0; + sFactorySelectScreen->unk2A0 = 0; } -extern const struct SpriteTemplate gUnknown_08610638; - void sub_819BE20(u8 arg0) { - gUnknown_0300127C->unk2A0 = arg0; + sFactorySelectScreen->unk2A0 = arg0; } -void sub_819BE34(void) +static void Select_ShowCheckedMonSprite(void) { struct Pokemon *mon; u16 species; u32 personality, otId; - gUnknown_0300127C->unk298.field1 = CreateSprite(&gUnknown_08610638, 120, 64, 1); - StartSpriteAffineAnim(&gSprites[gUnknown_0300127C->unk298.field1], 2); + sFactorySelectScreen->unk294[1].field1 = CreateSprite(&gUnknown_08610638, 120, 64, 1); + StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->unk294[1].field1], 2); - mon = &gUnknown_0300127C->mons[gUnknown_0300127C->cursorPos].monData; + mon = &sFactorySelectScreen->mons[sFactorySelectScreen->cursorPos].monData; species = GetMonData(mon, MON_DATA_SPECIES, NULL); personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); otId = GetMonData(mon, MON_DATA_OT_ID, NULL); - gUnknown_0300127C->unk298.field0 = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, 88, 32, 15, 0xFFFF); - gSprites[gUnknown_0300127C->unk298.field0].centerToCornerVecX = 0; - gSprites[gUnknown_0300127C->unk298.field0].centerToCornerVecY = 0; + sFactorySelectScreen->unk294[1].field0 = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, 88, 32, 15, 0xFFFF); + gSprites[sFactorySelectScreen->unk294[1].field0].centerToCornerVecX = 0; + gSprites[sFactorySelectScreen->unk294[1].field0].centerToCornerVecY = 0; + + gSprites[sFactorySelectScreen->unk294[1].field1].invisible = 1; +} + +static void Select_ShowChosenMonsSprites(void) +{ + u8 i, j; + + for (i = 0; i < 3; i++) + { + for (j = 0; j < SELECTABLE_MONS_COUNT; j++) + { + if (sFactorySelectScreen->mons[j].selectedId == i + 1) + { + struct Pokemon *mon = &sFactorySelectScreen->mons[j].monData; + u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); + u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); + u32 otId = GetMonData(mon, MON_DATA_OT_ID, NULL); + + sFactorySelectScreen->unk294[i].field0 = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, (i * 72) + 16, 32, i + 13, 0xFFFF); + gSprites[sFactorySelectScreen->unk294[i].field0].centerToCornerVecX = 0; + gSprites[sFactorySelectScreen->unk294[i].field0].centerToCornerVecY = 0; + break; + } + } + } + sFactorySelectScreen->unk2A0 = 0; +} + +static void sub_819C040(struct Sprite *sprite) +{ + u8 taskId; + + if (sprite->affineAnimEnded + && gSprites[sFactorySelectScreen->unk294[0].field1].affineAnimEnded + && gSprites[sFactorySelectScreen->unk294[2].field1].affineAnimEnded) + { + sprite->invisible = 1; + gSprites[sFactorySelectScreen->unk294[0].field1].invisible = 1; + gSprites[sFactorySelectScreen->unk294[2].field1].invisible = 1; + + taskId = CreateTask(sub_819C1D0, 1); + gTasks[taskId].func(taskId); + + sprite->callback = SpriteCallbackDummy; + } +} + +static void sub_819C100(struct Sprite *sprite) +{ + if (sprite->affineAnimEnded + && gSprites[sFactorySelectScreen->unk294[0].field1].affineAnimEnded + && gSprites[sFactorySelectScreen->unk294[2].field1].affineAnimEnded) + { + FreeOamMatrix(sprite->oam.matrixNum); + FreeOamMatrix(gSprites[sFactorySelectScreen->unk294[0].field1].oam.matrixNum); + FreeOamMatrix(gSprites[sFactorySelectScreen->unk294[2].field1].oam.matrixNum); + + sFactorySelectScreen->unk2A0 = 0; + + DestroySprite(&gSprites[sFactorySelectScreen->unk294[0].field1]); + DestroySprite(&gSprites[sFactorySelectScreen->unk294[2].field1]); + DestroySprite(sprite); + } +} + +static void sub_819C1D0(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + switch (task->data[0]) + { + case 0: + task->data[3] = 16; + task->data[24] = 224; // BUG: writing outside the array's bounds. + task->data[5] = 64; + task->data[8] = 65; + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + SetGpuReg(REG_OFFSET_WIN0H, WINHV_COORDS(task->data[3], task->data[24])); + SetGpuReg(REG_OFFSET_WIN0V, WINHV_COORDS(task->data[5], task->data[8])); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR | WINOUT_WIN01_OBJ); + break; + case 1: + ShowBg(3); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_OBJ); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4)); + break; + case 2: + task->data[5] -= 4; + task->data[8] += 4; + if (task->data[5] <= 32 || task->data[8] >= 96) + { + task->data[5] = 32; + task->data[8] = 96; + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + } + SetGpuReg(REG_OFFSET_WIN0V, WINHV_COORDS(task->data[5], task->data[8])); + if (task->data[5] != 32) + return; + break; + default: + DestroyTask(taskId); + Select_ShowChosenMonsSprites(); + return; + } + task->data[0]++; +} + +static void sub_819C2D4(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + switch (task->data[0]) + { + default: + HideBg(3); + gSprites[sFactorySelectScreen->unk294[1].field1].invisible = 0; + gSprites[sFactorySelectScreen->unk294[1].field1].callback = sub_819C100; + gSprites[sFactorySelectScreen->unk294[0].field1].invisible = 0; + gSprites[sFactorySelectScreen->unk294[0].field1].callback = SpriteCallbackDummy; + gSprites[sFactorySelectScreen->unk294[2].field1].invisible = 0; + gSprites[sFactorySelectScreen->unk294[2].field1].callback = SpriteCallbackDummy; + StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->unk294[1].field1], 1); + StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->unk294[0].field1], 1); + StartSpriteAffineAnim(&gSprites[sFactorySelectScreen->unk294[2].field1], 1); + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + DestroyTask(taskId); + break; + case 0: + task->data[3] = 16; + task->data[24] = 224; // BUG: writing outside the array's bounds. + task->data[5] = 32; + task->data[8] = 96; + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + SetGpuReg(REG_OFFSET_WIN0H, WINHV_COORDS(task->data[3], task->data[24])); + SetGpuReg(REG_OFFSET_WIN0V, WINHV_COORDS(task->data[5], task->data[8])); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR | WINOUT_WIN01_OBJ); + task->data[0]++; + break; + case 1: + task->data[5] += 4; + task->data[8] -= 4; + if (task->data[5] >= 64 || task->data[8] <= 65) + { + task->data[5] = 64; + task->data[8] = 65; + } + SetGpuReg(REG_OFFSET_WIN0V, WINHV_COORDS(task->data[5], task->data[8])); + if (task->data[5] == 64) + task->data[0]++; + break; + } +} + +static void sub_819C4B4(void) +{ + sFactorySelectScreen->unk294[1].field1 = CreateSprite(&gUnknown_08610638, 120, 64, 1); + sFactorySelectScreen->unk294[0].field1 = CreateSprite(&gUnknown_08610638, 44, 64, 1); + sFactorySelectScreen->unk294[2].field1 = CreateSprite(&gUnknown_08610638, 196, 64, 1); + + gSprites[sFactorySelectScreen->unk294[1].field1].callback = sub_819C040; + gSprites[sFactorySelectScreen->unk294[0].field1].callback = SpriteCallbackDummy; + gSprites[sFactorySelectScreen->unk294[2].field1].callback = SpriteCallbackDummy; + + sFactorySelectScreen->unk2A0 = 1; +} + +static void sub_819C568(void) +{ + u8 taskId; + + FreeAndDestroyMonPicSprite(sFactorySelectScreen->unk294[0].field0); + FreeAndDestroyMonPicSprite(sFactorySelectScreen->unk294[1].field0); + FreeAndDestroyMonPicSprite(sFactorySelectScreen->unk294[2].field0); + + taskId = CreateTask(sub_819C2D4, 1); + gTasks[taskId].func(taskId); + + sFactorySelectScreen->unk2A0 = 1; +} + +static void Select_SetWinRegs(s16 mWin0H, s16 nWin0H, s16 mWin0V, s16 nWin0V) +{ + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + SetGpuReg(REG_OFFSET_WIN0H, WINHV_COORDS(mWin0H, nWin0H)); + SetGpuReg(REG_OFFSET_WIN0V, WINHV_COORDS(mWin0V, nWin0V)); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_CLR | WINOUT_WIN01_OBJ); +} + +static bool32 Select_AreSpeciesValid(u16 monSetId) +{ + u8 i, j; + u32 species = gFacilityTrainerMons[monSetId].species; + u8 selectState = sFactorySelectScreen->selectingMonsState; + + for (i = 1; i < selectState; i++) + { + for (j = 0; j < SELECTABLE_MONS_COUNT; j++) + { + if (sFactorySelectScreen->mons[j].selectedId == i) + { + if (gFacilityTrainerMons[sFactorySelectScreen->mons[j].monSetId].species == species) + return FALSE; - gSprites[gUnknown_0300127C->unk298.field1].invisible = 1; + break; + } + } + } + + return TRUE; +} + +static void Task_SelectBlendPalette(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 0: + sFactorySelectScreen->unk2A7 = 0; + sFactorySelectScreen->unk2A8 = 0; + sFactorySelectScreen->unk2A6 = TRUE; + gTasks[taskId].data[0] = 1; + break; + case 1: + if (sFactorySelectScreen->unk2A2) + { + if (sFactorySelectScreen->unk2A9) + { + gTasks[taskId].data[0] = 2; + } + else + { + sFactorySelectScreen->unk2A7++; + if (sFactorySelectScreen->unk2A7 > 6) + { + sFactorySelectScreen->unk2A7 = 0; + if (!sFactorySelectScreen->unk2A6) + sFactorySelectScreen->unk2A8--; + else + sFactorySelectScreen->unk2A8++; + } + BlendPalettes(0x4000, sFactorySelectScreen->unk2A8, 0); + if (sFactorySelectScreen->unk2A8 > 5) + { + sFactorySelectScreen->unk2A6 = FALSE; + } + else if (sFactorySelectScreen->unk2A8 == 0) + { + gTasks[taskId].data[0] = 2; + sFactorySelectScreen->unk2A6 = TRUE; + } + } + } + break; + case 2: + if (sFactorySelectScreen->unk2A9 > 14) + { + sFactorySelectScreen->unk2A9 = 0; + gTasks[taskId].data[0] = 1; + } + else + { + sFactorySelectScreen->unk2A9++; + } + break; + } } -- cgit v1.2.3 From 1283b87505b508750a22317d548484e851ce6cad Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 6 Sep 2018 23:02:16 +0200 Subject: up to sub_819d064 --- src/battle_factory.c | 497 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 496 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/battle_factory.c b/src/battle_factory.c index f7568055c..1609658f3 100644 --- a/src/battle_factory.c +++ b/src/battle_factory.c @@ -74,6 +74,53 @@ struct FactorySelectMonsStruct u8 unk2A9; }; +struct FactorySwapMonsStruct +{ + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; + u8 unk4; + u8 unk5; + u8 unk6; + u8 unk7; + u8 unk8; + u8 unk9; + u8 unkA; + u8 unkB; + u8 unkC; + u8 unkD; + u8 unkE; + u8 unkF; + u8 unk10; + u8 unk11; + u8 unk12; + u8 unk13; + u8 unk14; + bool8 fromSummaryScreen; + u8 yesNoCursorPos; + u8 unk17; + u8 unk18; + u8 unk19; + u8 unk1A; + u8 unk1B; + u8 unk1C; + u8 unk1D; + u8 unk1E; + u8 unk1F; + u8 unk20; + u8 unk21; + u8 unk22; + u8 unk23; + u16 unk24; + bool8 unk26; + u8 unk27; + u8 unk28; + u8 unk29; + struct UnkFactoryStruct unk2C; + u8 unk30; +}; + extern u8 (*gUnknown_030062E8)(void); extern u8 gUnknown_0203CF20; @@ -121,6 +168,25 @@ static u8 Select_OptionRentDeselect(void); u8 sub_81A6F70(u8 battleMode, u8 lvlMode); u8 sub_81A6CA8(u8 arg0, u8 arg1); static bool32 Select_AreSpeciesValid(u16 monSetId); +void sub_819E538(void); +void sub_819DC1C(void); +void sub_819E9E0(void); +void sub_819EE08(void); +void sub_819EAC0(void); +void Swap_UpdateYesNoCursorPosition(s8 direction); +void Swap_UpdateMenuCursorPosition(s8 direction); +void sub_819EA64(u8 windowId); +void sub_819D770(u8 taskId); +void Task_HandleSwapScreenChooseMons(u8 taskId); +void sub_819D588(u8 taskId); +void Swap_PrintOnYesNoQuestionWindow(const u8 *str); +void Swap_ShowMenuOptions(void); +void Swap_PrintMonSpecies(void); +void Swap_PrintMonCategory(void); +void Swap_UpdateActionCursorPosition(s8 direction); +void Swap_UpdateBallCursorPosition(s8 direction); +void Swap_RunMenuOptionFunc(u8 taskId); +void sub_819F184(u8 taskId); // Ewram variables EWRAM_DATA u8 *gUnknown_0203CE2C = NULL; @@ -128,9 +194,15 @@ EWRAM_DATA u8 *gUnknown_0203CE30 = NULL; EWRAM_DATA u8 *gUnknown_0203CE34 = NULL; EWRAM_DATA u8 *gUnknown_0203CE38 = NULL; static EWRAM_DATA struct Pokemon *sFactorySelectMons = NULL; +extern u8 *gUnknown_0203CE40; +extern u8 *gUnknown_0203CE44; +extern u8 *gUnknown_0203CE48; +extern u8 *gUnknown_0203CE4C; // IWRAM bss -static IWRAM_DATA struct FactorySelectMonsStruct *sFactorySelectScreen; +IWRAM_DATA struct FactorySelectMonsStruct *sFactorySelectScreen; +IWRAM_DATA u8 (*gUnknown_03001280)(void); +IWRAM_DATA struct FactorySwapMonsStruct *sFactorySwapScreen; // Const rom data. const u16 gUnknown_0860F13C[] = INCBIN_U16("graphics/unknown/unknown_60F13C.gbapal"); @@ -210,6 +282,8 @@ extern const u8 gText_Rent[]; extern const u8 gText_Others2[]; extern const u8 gText_Yes2[]; extern const u8 gText_No2[]; +extern const u8 gText_QuitSwapping[]; +extern const u8 gText_AcceptThisPkmn[]; // code void sub_819A44C(struct Sprite *sprite) @@ -1411,3 +1485,424 @@ static void Task_SelectBlendPalette(u8 taskId) break; } } + +void sub_819C7E0(void) +{ + AnimateSprites(); + BuildOamBuffer(); + RunTextPrinters(); + UpdatePaletteFade(); + RunTasks(); +} + +void sub_819C7FC(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_819C810(void) +{ + u8 happiness; + + gPlayerParty[sFactorySwapScreen->unk12] = gEnemyParty[sFactorySwapScreen->unk13]; + happiness = 0; + SetMonData(&gPlayerParty[sFactorySwapScreen->unk12], MON_DATA_FRIENDSHIP, &happiness); + gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->unk12].monId = gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->unk13 + 3].monId; + gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->unk12].ivs = gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->unk13 + 3].ivs; + gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->unk12].personality = GetMonData(&gEnemyParty[sFactorySwapScreen->unk13], MON_DATA_PERSONALITY, NULL); + gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->unk12].abilityBit = GetBoxMonData(&gEnemyParty[sFactorySwapScreen->unk13].box, MON_DATA_ALT_ABILITY, NULL); +} + +void sub_819C90C(u8 taskId) // Task_FromSelectScreenToSummaryScreen +{ + switch (gTasks[taskId].data[0]) + { + case 6: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); + gTasks[taskId].data[0] = 7; + break; + case 7: + if (!gPaletteFade.active) + { + DestroyTask(sFactorySwapScreen->unk21); + sub_819F444(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30); + sub_819E538(); + FREE_AND_SET_NULL(gUnknown_0203CE40); + FREE_AND_SET_NULL(gUnknown_0203CE44); + FREE_AND_SET_NULL(gUnknown_0203CE48); + FREE_AND_SET_NULL(gUnknown_0203CE4C); + FreeAllWindowBuffers(); + gTasks[taskId].data[0] = 8; + } + break; + case 8: + DestroyTask(taskId); + sFactorySwapScreen->fromSummaryScreen = TRUE; + sFactorySwapScreen->unk24 = gPlttBufferUnfaded[244]; + ShowPokemonSummaryScreen(0, gPlayerParty, sFactorySwapScreen->unk3, 3 - 1, sub_819DC1C); + break; + } +} + +void sub_819CA08(u8 taskId) // Task_CloseSelectionScreen +{ + if (sFactorySwapScreen->unk30 != 1) + { + switch (gTasks[taskId].data[0]) + { + case 0: + if (sFactorySwapScreen->unk20 == 1) + { + gTasks[taskId].data[0]++; + gSpecialVar_Result = 0; + } + else + { + gTasks[taskId].data[0] = 2; + gSpecialVar_Result = 1; + } + break; + case 1: + if (sFactorySwapScreen->unk20 == 1) + { + sFactorySwapScreen->unk13 = sFactorySwapScreen->unk3; + sub_819C810(); + } + gTasks[taskId].data[0]++; + break; + case 2: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); + gTasks[taskId].data[0]++; + break; + case 3: + if (!UpdatePaletteFade()) + { + DestroyTask(sFactorySwapScreen->unk21); + sub_819E538(); + FREE_AND_SET_NULL(gUnknown_0203CE40); + FREE_AND_SET_NULL(gUnknown_0203CE44); + FREE_AND_SET_NULL(gUnknown_0203CE48); + FREE_AND_SET_NULL(gUnknown_0203CE4C); + FREE_AND_SET_NULL(sFactorySwapScreen); + FreeAllWindowBuffers(); + SetMainCallback2(CB2_ReturnToFieldContinueScript); + DestroyTask(taskId); + } + break; + } + } +} + +void Task_HandleSwapScreenYesNo(u8 taskId) +{ + u16 loPtr, hiPtr; + + if (sFactorySwapScreen->unk30 != 1) + { + switch (gTasks[taskId].data[0]) + { + case 4: + sub_819E9E0(); + gTasks[taskId].data[0] = 5; + break; + case 5: + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + if (sFactorySwapScreen->yesNoCursorPos == 0) + { + gTasks[taskId].data[1] = 1; + hiPtr = gTasks[taskId].data[6]; + loPtr = gTasks[taskId].data[7]; + gTasks[taskId].func = (void*)((hiPtr << 16) | loPtr); + } + else + { + gTasks[taskId].data[1] = 0; + sub_819EA64(4); + hiPtr = gTasks[taskId].data[6]; + loPtr = gTasks[taskId].data[7]; + gTasks[taskId].func = (void*)((hiPtr << 16) | loPtr); + } + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + gTasks[taskId].data[1] = 0; + sub_819EA64(4); + hiPtr = gTasks[taskId].data[6]; + loPtr = gTasks[taskId].data[7]; + gTasks[taskId].func = (void*)((hiPtr << 16) | loPtr); + } + else if (gMain.newAndRepeatedKeys & DPAD_UP) + { + PlaySE(SE_SELECT); + Swap_UpdateYesNoCursorPosition(-1); + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + PlaySE(SE_SELECT); + Swap_UpdateYesNoCursorPosition(1); + } + break; + } + } +} + +void sub_819CBDC(u8 taskId) +{ + if (gTasks[taskId].data[1] == 1) + { + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = sub_819CA08; + } + else + { + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenChooseMons) >> 16; + gTasks[taskId].data[7] = (u32)(Task_HandleSwapScreenChooseMons); + gTasks[taskId].data[5] = 1; + gTasks[taskId].func = sub_819D770; + } +} + +void sub_819CC24(u8 taskId) +{ + if (gTasks[taskId].data[0] == 0) + { + Swap_PrintOnYesNoQuestionWindow(gText_QuitSwapping); + sFactorySwapScreen->unk20 = 0; + gTasks[taskId].data[0] = 4; + gTasks[taskId].data[6] = (u32)(sub_819CBDC) >> 16; + gTasks[taskId].data[7] = (u32)(sub_819CBDC); + gTasks[taskId].func = Task_HandleSwapScreenYesNo; + } +} + +void sub_819CC74(u8 taskId) +{ + sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, 1); + if (gTasks[taskId].data[1] == 1) + { + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = sub_819CA08; + } + else + { + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenChooseMons) >> 16; + gTasks[taskId].data[7] = (u32)(Task_HandleSwapScreenChooseMons); + gTasks[taskId].data[5] = 1; + gTasks[taskId].func = sub_819D770; + } +} + +void sub_819CCD4(u8 taskId) +{ + if (gTasks[taskId].data[0] == 0) + { + sub_819F2B4(&sFactorySwapScreen->unk2C.field1, &sFactorySwapScreen->unk30, 1); + Swap_PrintOnYesNoQuestionWindow(gText_AcceptThisPkmn); + sFactorySwapScreen->unk20 = 1; + gTasks[taskId].data[0] = 4; + gTasks[taskId].data[6] = (u32)(sub_819CC74) >> 16; + gTasks[taskId].data[7] = (u32)(sub_819CC74); + gTasks[taskId].func = Task_HandleSwapScreenYesNo; + } +} + +void Task_HandleSwapScreenMenu(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 2: + if (!sFactorySwapScreen->fromSummaryScreen) + sub_819F2B4(&sFactorySwapScreen->unk2C.field1, &sFactorySwapScreen->unk30, 1); + gTasks[taskId].data[0] = 9; + break; + case 9: + if (sFactorySwapScreen->unk30 != 1) + { + Swap_ShowMenuOptions(); + gTasks[taskId].data[0] = 3; + } + break; + case 3: + if (sFactorySwapScreen->unk30 != 1) + { + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + Swap_RunMenuOptionFunc(taskId); + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, 1); + sub_819EA64(3); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenChooseMons) >> 16; + gTasks[taskId].data[7] = (u32)(Task_HandleSwapScreenChooseMons); + gTasks[taskId].data[5] = 1; + gTasks[taskId].func = sub_819D770; + } + else if (gMain.newAndRepeatedKeys & DPAD_UP) + { + Swap_UpdateMenuCursorPosition(-1); + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + Swap_UpdateMenuCursorPosition(1); + } + } + break; + } +} + +void Task_HandleSwapScreenChooseMons(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 0: + if (!gPaletteFade.active) + { + sFactorySwapScreen->unk22 = 1; + gTasks[taskId].data[0] = 1; + } + break; + case 1: + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + sFactorySwapScreen->unk22 = 0; + sub_819EE08(); + sub_819EAC0(); + sub_819F184(taskId); + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + sFactorySwapScreen->unk22 = 0; + sub_819EE08(); + sub_819EAC0(); + gTasks[taskId].data[6] = (u32)(sub_819CC24) >> 16; + gTasks[taskId].data[7] = (u32)(sub_819CC24); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[5] = 0; + gTasks[taskId].func = sub_819D588; + } + else if (gMain.newAndRepeatedKeys & DPAD_LEFT) + { + Swap_UpdateBallCursorPosition(-1); + Swap_PrintMonCategory(); + Swap_PrintMonSpecies(); + } + else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) + { + Swap_UpdateBallCursorPosition(1); + Swap_PrintMonCategory(); + Swap_PrintMonSpecies(); + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + Swap_UpdateActionCursorPosition(1); + Swap_PrintMonCategory(); + Swap_PrintMonSpecies(); + } + else if (gMain.newAndRepeatedKeys & DPAD_UP) + { + Swap_UpdateActionCursorPosition(-1); + Swap_PrintMonCategory(); + Swap_PrintMonSpecies(); + } + break; + } +} + +void sub_819CF54(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 0: + sFactorySwapScreen->unk27 = 0; + sFactorySwapScreen->unk28 = 0; + sFactorySwapScreen->unk26 = TRUE; + gTasks[taskId].data[0] = 1; + break; + case 1: + if (sFactorySwapScreen->unk22) + { + if (sFactorySwapScreen->unk29) + { + gTasks[taskId].data[0] = 2; + } + else + { + sFactorySwapScreen->unk27++; + if (sFactorySwapScreen->unk27 > 6) + { + sFactorySwapScreen->unk27 = 0; + if (!sFactorySwapScreen->unk26) + sFactorySwapScreen->unk28--; + else + sFactorySwapScreen->unk28++; + } + BlendPalettes(0x4000, sFactorySwapScreen->unk28, 0); + if (sFactorySwapScreen->unk28 > 5) + { + sFactorySwapScreen->unk26 = FALSE; + } + else if (sFactorySwapScreen->unk28 == 0) + { + gTasks[taskId].data[0] = 2; + sFactorySwapScreen->unk26 = TRUE; + } + } + } + break; + case 2: + if (sFactorySwapScreen->unk29 > 14) + { + sFactorySwapScreen->unk29 = 0; + gTasks[taskId].data[0] = 1; + } + else + { + sFactorySwapScreen->unk29++; + } + break; + } +} + +void sub_819D064(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 0: + sFactorySwapScreen->unk27 = 0; + gTasks[taskId].data[4] = 0; + gTasks[taskId].data[0]++; + break; + case 1: + LoadPalette(&gPlttBufferUnfaded[0xF0], 0xE0, 0xA); + gTasks[taskId].data[0]++; + break; + case 2: + if (sFactorySwapScreen->unk28 > 15) + { + gTasks[taskId].data[4] = 1; + gTasks[taskId].data[0]++; + } + sFactorySwapScreen->unk27++; + if (sFactorySwapScreen->unk27 > 3) + { + sFactorySwapScreen->unk27 = 0; + gPlttBufferUnfaded[244] = gPlttBufferFaded[228]; + sFactorySwapScreen->unk28++; + } + BlendPalettes(0x4000, sFactorySwapScreen->unk28, 0); + break; + } +} -- cgit v1.2.3 From 1616c254d21b216ecf652461a0cb0b7772450651 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 8 Sep 2018 22:33:07 +0200 Subject: Swap_InitAllSprites done --- src/battle_factory.c | 805 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 761 insertions(+), 44 deletions(-) (limited to 'src') diff --git a/src/battle_factory.c b/src/battle_factory.c index 1609658f3..6324f4040 100644 --- a/src/battle_factory.c +++ b/src/battle_factory.c @@ -34,8 +34,22 @@ #define MENU_OPTIONS_COUNT 3 #define SELECTABLE_MONS_COUNT 6 + #define TAG_PAL_BALL_GREY 0x64 #define TAG_PAL_BALL_SELECTED 0x65 +#define TAG_PAL_66 0x66 +#define TAG_PAL_67 0x67 + +#define TAG_TILE_64 0x64 +#define TAG_TILE_65 0x65 +#define TAG_TILE_66 0x66 +#define TAG_TILE_67 0x67 +#define TAG_TILE_68 0x68 +#define TAG_TILE_69 0x69 +#define TAG_TILE_6A 0x6A +#define TAG_TILE_6B 0x6B +#define TAG_TILE_6C 0x6C +#define TAG_TILE_6D 0x6D struct FactorySelecteableMon { @@ -74,29 +88,21 @@ struct FactorySelectMonsStruct u8 unk2A9; }; +// 'Action' refers to the Cancel, Pknm for swap windows. + struct FactorySwapMonsStruct { - u8 unk0; - u8 unk1; - u8 unk2; - u8 unk3; - u8 unk4; - u8 unk5; - u8 unk6; - u8 unk7; - u8 unk8; - u8 unk9; - u8 unkA; - u8 unkB; - u8 unkC; - u8 unkD; - u8 unkE; - u8 unkF; - u8 unk10; - u8 unk11; + u8 menuCursorPos; + u8 menuCursor1SpriteId; + u8 menuCursor2SpriteId; + u8 cursorPos; + u8 cursorSpriteId; + u8 ballSpriteIds[3]; + u8 unk8[2][3]; + u8 unkE[2][2]; u8 unk12; u8 unk13; - u8 unk14; + u8 actionsState; bool8 fromSummaryScreen; u8 yesNoCursorPos; u8 unk17; @@ -109,7 +115,7 @@ struct FactorySwapMonsStruct u8 unk1E; u8 unk1F; u8 unk20; - u8 unk21; + u8 palBlendTaskId; u8 unk22; u8 unk23; u16 unk24; @@ -169,9 +175,7 @@ u8 sub_81A6F70(u8 battleMode, u8 lvlMode); u8 sub_81A6CA8(u8 arg0, u8 arg1); static bool32 Select_AreSpeciesValid(u16 monSetId); void sub_819E538(void); -void sub_819DC1C(void); void sub_819E9E0(void); -void sub_819EE08(void); void sub_819EAC0(void); void Swap_UpdateYesNoCursorPosition(s8 direction); void Swap_UpdateMenuCursorPosition(s8 direction); @@ -179,14 +183,26 @@ void sub_819EA64(u8 windowId); void sub_819D770(u8 taskId); void Task_HandleSwapScreenChooseMons(u8 taskId); void sub_819D588(u8 taskId); -void Swap_PrintOnYesNoQuestionWindow(const u8 *str); +void Swap_PrintOnInfoWindow(const u8 *str); void Swap_ShowMenuOptions(void); void Swap_PrintMonSpecies(void); +void Swap_PrintMonSpecies2(void); +void Swap_PrintMonSpecies3(void); void Swap_PrintMonCategory(void); +void Swap_InitAllSprites(void); +void Swap_PrintPkmnSwap(void); +void sub_819EADC(void); +void sub_819EAF8(void); +void CB2_InitSwapScreen(void); +void Swap_ShowSummaryMonSprite(void); void Swap_UpdateActionCursorPosition(s8 direction); void Swap_UpdateBallCursorPosition(s8 direction); void Swap_RunMenuOptionFunc(u8 taskId); void sub_819F184(u8 taskId); +void Swap_PrintActionStrings(void); +void Swap_PrintActionStrings2(void); +void Swap_PrintActionStrings3(u8 field); +void sub_819F048(u8 field); // Ewram variables EWRAM_DATA u8 *gUnknown_0203CE2C = NULL; @@ -224,25 +240,25 @@ const u16 gUnknown_0861039C[] = INCBIN_U16("graphics/unknown/unknown_61039C.gbap const struct SpriteSheet gUnknown_086103BC[] = { - {gUnknown_0860F3BC, sizeof(gUnknown_0860F3BC), 0x65}, - {gUnknown_0860F43C, sizeof(gUnknown_0860F43C), 0x66}, - {gUnknown_0860F53C, sizeof(gUnknown_0860F53C), 0x67}, - {gUnknown_0860FA3C, sizeof(gUnknown_0860FA3C), 0x6D}, + {gUnknown_0860F3BC, sizeof(gUnknown_0860F3BC), TAG_TILE_65}, + {gUnknown_0860F43C, sizeof(gUnknown_0860F43C), TAG_TILE_66}, + {gUnknown_0860F53C, sizeof(gUnknown_0860F53C), TAG_TILE_67}, + {gUnknown_0860FA3C, sizeof(gUnknown_0860FA3C), TAG_TILE_6D}, {}, }; const struct CompressedSpriteSheet gUnknown_086103E4[] = { - {gUnknown_085B18AC, 0x800, 0x64}, + {gUnknown_085B18AC, 0x800, TAG_TILE_64}, {}, }; const struct SpritePalette gUnknown_086103F4[] = { - {gUnknown_0860F13C, 0x64}, - {gUnknown_0860F15C, 0x65}, - {gUnknown_0860F17C, 0x66}, - {gUnknown_0861039C, 0x67}, + {gUnknown_0860F13C, TAG_PAL_BALL_GREY}, + {gUnknown_0860F15C, TAG_PAL_BALL_SELECTED}, + {gUnknown_0860F17C, TAG_PAL_66}, + {gUnknown_0861039C, TAG_PAL_67}, {}, }; @@ -254,8 +270,11 @@ u8 (* const sSelect_MenuOptionFuncs[])(void) = }; extern const struct BgTemplate gUnknown_08610428[3]; +extern const struct BgTemplate gUnknown_086108B8[4]; extern const struct WindowTemplate gUnknown_08610434[]; +extern const struct WindowTemplate gUnknown_086108C8[]; extern const u16 gUnknown_0861046C[]; +extern const u16 gUnknown_08610918[]; extern const struct SpriteTemplate gUnknown_086105D8; extern const struct SpriteTemplate gUnknown_086105F0; extern const struct SpriteTemplate gUnknown_08610608; @@ -263,6 +282,9 @@ extern const struct SpriteTemplate gUnknown_08610620; extern const struct SpriteTemplate gUnknown_08610638; extern const u8 gUnknown_08610479[]; extern const u8 gUnknown_08610476[]; +extern const struct SpritePalette gUnknown_086106B0[]; +extern const struct SpriteSheet gUnknown_08610650[]; +extern const struct CompressedSpriteSheet gUnknown_086106A0[]; // gfx extern const u8 gFrontierFactorySelectMenu_Gfx[]; @@ -284,6 +306,8 @@ extern const u8 gText_Yes2[]; extern const u8 gText_No2[]; extern const u8 gText_QuitSwapping[]; extern const u8 gText_AcceptThisPkmn[]; +extern const u8 gText_SelectPkmnToAccept[]; +extern const u8 gText_SelectPkmnToSwap[]; // code void sub_819A44C(struct Sprite *sprite) @@ -1486,7 +1510,9 @@ static void Task_SelectBlendPalette(u8 taskId) } } -void sub_819C7E0(void) +// Swap Screen's section begins here. + +void Swap_CB2(void) { AnimateSprites(); BuildOamBuffer(); @@ -1495,7 +1521,7 @@ void sub_819C7E0(void) RunTasks(); } -void sub_819C7FC(void) +void Swap_VblankCb(void) { LoadOam(); ProcessSpriteCopyRequests(); @@ -1526,7 +1552,7 @@ void sub_819C90C(u8 taskId) // Task_FromSelectScreenToSummaryScreen case 7: if (!gPaletteFade.active) { - DestroyTask(sFactorySwapScreen->unk21); + DestroyTask(sFactorySwapScreen->palBlendTaskId); sub_819F444(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30); sub_819E538(); FREE_AND_SET_NULL(gUnknown_0203CE40); @@ -1541,7 +1567,7 @@ void sub_819C90C(u8 taskId) // Task_FromSelectScreenToSummaryScreen DestroyTask(taskId); sFactorySwapScreen->fromSummaryScreen = TRUE; sFactorySwapScreen->unk24 = gPlttBufferUnfaded[244]; - ShowPokemonSummaryScreen(0, gPlayerParty, sFactorySwapScreen->unk3, 3 - 1, sub_819DC1C); + ShowPokemonSummaryScreen(0, gPlayerParty, sFactorySwapScreen->cursorPos, 3 - 1, CB2_InitSwapScreen); break; } } @@ -1567,7 +1593,7 @@ void sub_819CA08(u8 taskId) // Task_CloseSelectionScreen case 1: if (sFactorySwapScreen->unk20 == 1) { - sFactorySwapScreen->unk13 = sFactorySwapScreen->unk3; + sFactorySwapScreen->unk13 = sFactorySwapScreen->cursorPos; sub_819C810(); } gTasks[taskId].data[0]++; @@ -1579,7 +1605,7 @@ void sub_819CA08(u8 taskId) // Task_CloseSelectionScreen case 3: if (!UpdatePaletteFade()) { - DestroyTask(sFactorySwapScreen->unk21); + DestroyTask(sFactorySwapScreen->palBlendTaskId); sub_819E538(); FREE_AND_SET_NULL(gUnknown_0203CE40); FREE_AND_SET_NULL(gUnknown_0203CE44); @@ -1672,7 +1698,7 @@ void sub_819CC24(u8 taskId) { if (gTasks[taskId].data[0] == 0) { - Swap_PrintOnYesNoQuestionWindow(gText_QuitSwapping); + Swap_PrintOnInfoWindow(gText_QuitSwapping); sFactorySwapScreen->unk20 = 0; gTasks[taskId].data[0] = 4; gTasks[taskId].data[6] = (u32)(sub_819CBDC) >> 16; @@ -1704,7 +1730,7 @@ void sub_819CCD4(u8 taskId) if (gTasks[taskId].data[0] == 0) { sub_819F2B4(&sFactorySwapScreen->unk2C.field1, &sFactorySwapScreen->unk30, 1); - Swap_PrintOnYesNoQuestionWindow(gText_AcceptThisPkmn); + Swap_PrintOnInfoWindow(gText_AcceptThisPkmn); sFactorySwapScreen->unk20 = 1; gTasks[taskId].data[0] = 4; gTasks[taskId].data[6] = (u32)(sub_819CC74) >> 16; @@ -1777,7 +1803,7 @@ void Task_HandleSwapScreenChooseMons(u8 taskId) { PlaySE(SE_SELECT); sFactorySwapScreen->unk22 = 0; - sub_819EE08(); + Swap_PrintMonSpecies2(); sub_819EAC0(); sub_819F184(taskId); } @@ -1785,7 +1811,7 @@ void Task_HandleSwapScreenChooseMons(u8 taskId) { PlaySE(SE_SELECT); sFactorySwapScreen->unk22 = 0; - sub_819EE08(); + Swap_PrintMonSpecies2(); sub_819EAC0(); gTasks[taskId].data[6] = (u32)(sub_819CC24) >> 16; gTasks[taskId].data[7] = (u32)(sub_819CC24); @@ -1821,7 +1847,7 @@ void Task_HandleSwapScreenChooseMons(u8 taskId) } } -void sub_819CF54(u8 taskId) +void Task_SwapBlendPalette(u8 taskId) { switch (gTasks[taskId].data[0]) { @@ -1876,7 +1902,7 @@ void sub_819CF54(u8 taskId) } } -void sub_819D064(u8 taskId) +void Task_SwapBlendPalette2(u8 taskId) { switch (gTasks[taskId].data[0]) { @@ -1906,3 +1932,694 @@ void sub_819D064(u8 taskId) break; } } + +void sub_819D12C(u8 taskId) +{ + s8 i; + u8 var_2C; + bool8 r7; + + switch (gTasks[taskId].data[0]) + { + case 0: + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[0] = 1; + break; + case 1: + var_2C = 0; + for (i = 2; i >= 0; i--) + { + if (i != 2) + { + u8 posX = var_2C - gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x; + if (posX == 16 || gTasks[taskId].data[i + 2] == 1) + { + var_2C = gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x; + gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x += 10; + } + else if (posX > 16) + { + gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x = gSprites[sFactorySwapScreen->ballSpriteIds[i + 1]].pos1.x - 48; + } + } + else + { + var_2C = gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x; + gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x += 10; + } + + if (gTasks[taskId].data[i + 1] == 1) + { + if (gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x > (i * 48) + 72) + { + gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x = (i * 48) + 72; + r7 = TRUE; + } + else if (gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x == (i * 48) + 72) + { + r7 = TRUE; + } + else + { + r7 = FALSE; + } + } + else + { + r7 = FALSE; + } + + if (gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x - 16 > 240) + { + var_2C = gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x; + gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x = -16; + if (sFactorySwapScreen->actionsState == 1) + gSprites[sFactorySwapScreen->ballSpriteIds[i]].oam.paletteNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_SELECTED); + else + gSprites[sFactorySwapScreen->ballSpriteIds[i]].oam.paletteNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_GREY); + + gTasks[taskId].data[i + 1] = 1; + } + } + if (r7 == TRUE) + DestroyTask(taskId); + break; + } +} + +void sub_819D324(u8 taskId) +{ + u8 i, j; + s32 posX = 0; + s8 r4 = gTasks[taskId].data[3]; + bool8 r1; + s16 currPosX; + u8 taskId2; + + if (gTasks[taskId].data[2] == 1) + r4 *= -1; + + switch (gTasks[taskId].data[0]) + { + case 0: + currPosX = gSprites[sFactorySwapScreen->unk8[0][0]].pos1.x; + if (!gTasks[taskId].data[2]) + { + if (currPosX + r4 < 240) + { + r1 = TRUE; + } + else + { + r1 = FALSE; + posX = 240; + } + } + else + { + if (currPosX + r4 > 160) + { + r1 = TRUE; + } + else + { + r1 = FALSE; + posX = 160; + } + } + + if (r1 == TRUE) + { + for (i = 0; i < 3; i++) + { + for (j = 0; j < 2; j++) + gSprites[sFactorySwapScreen->unk8[j][i]].pos1.x += r4; + } + } + else + { + for (j = 0; j < 2; j++) + { + gSprites[sFactorySwapScreen->unk8[j][0]].pos1.x = posX; + gSprites[sFactorySwapScreen->unk8[j][1]].pos1.x = posX + 16; + gSprites[sFactorySwapScreen->unk8[j][2]].pos1.x = posX + 48; + } + taskId2 = gTasks[taskId].data[1]; + gTasks[taskId2].data[3] = 1; + DestroyTask(taskId); + } + break; + case 1: + currPosX = gSprites[sFactorySwapScreen->unkE[0][0]].pos1.x; + if (!gTasks[taskId].data[2]) + { + if (currPosX + r4 < 240) + { + r1 = TRUE; + } + else + { + r1 = FALSE; + posX = 240; + } + } + else + { + if (currPosX + r4 > 192) + { + r1 = TRUE; + } + else + { + r1 = FALSE; + posX = 192; + } + } + + if (r1 == TRUE) + { + for (i = 0; i < 2; i++) + { + for (j = 0; j < 2; j++) + gSprites[sFactorySwapScreen->unkE[j][i]].pos1.x += r4; + } + } + else + { + for (j = 0; j < 2; j++) + { + gSprites[sFactorySwapScreen->unkE[j][0]].pos1.x = posX; + gSprites[sFactorySwapScreen->unkE[j][1]].pos1.x = posX + 16; + } + taskId2 = gTasks[taskId].data[1]; + gTasks[taskId2].data[4] = 1; + DestroyTask(taskId); + } + break; + } +} + +void sub_819D588(u8 taskId) +{ + u8 anotherTaskId; + u16 loPtr, hiPtr; + + switch (gTasks[taskId].data[0]) + { + case 0: + LoadPalette(gUnknown_08610918, 0xE0, 0xA); + Swap_PrintActionStrings(); + PutWindowTilemap(5); + gTasks[taskId].data[0]++; + break; + case 1: + sub_819EA64(3); + gTasks[taskId].data[0]++; + break; + case 2: + BeginNormalPaletteFade(0x4000, 0, 0, 0x10, gUnknown_0860F13C[37]); + gTasks[taskId].data[0]++; + break; + case 3: + if (!gPaletteFade.active) + { + FillWindowPixelBuffer(5, 0); + CopyWindowToVram(5, 2); + if (sFactorySwapScreen->actionsState == 1) + { + anotherTaskId = CreateTask(sub_819D324, 0); + gTasks[taskId].data[3] = 0; + gTasks[anotherTaskId].data[1] = taskId; + gTasks[anotherTaskId].data[0] = 0; + gTasks[anotherTaskId].data[2] = 0; + gTasks[anotherTaskId].data[3] = 6; + gTasks[taskId].data[2] = 5; + gTasks[taskId].data[0]++; + } + else + { + anotherTaskId = CreateTask(sub_819D324, 0); + gTasks[taskId].data[3] = 1; + gTasks[taskId].data[4] = 0; + gTasks[anotherTaskId].data[1] = taskId; + gTasks[anotherTaskId].data[0] = 1; + gTasks[anotherTaskId].data[2] = 0; + gTasks[anotherTaskId].data[3] = 6; + gTasks[taskId].data[0] += 2; + } + } + break; + case 4: + if (gTasks[taskId].data[2] == 0) + { + anotherTaskId = CreateTask(sub_819D324, 0); + gTasks[taskId].data[4] = 0; + gTasks[anotherTaskId].data[1] = taskId; + gTasks[anotherTaskId].data[0] = 1; + gTasks[anotherTaskId].data[2] = 0; + gTasks[anotherTaskId].data[3] = 6; + gTasks[taskId].data[0]++; + } + else + { + gTasks[taskId].data[2]--; + } + break; + case 5: + if (gTasks[taskId].data[3] == 1 && gTasks[taskId].data[4] == 1) + { + gTasks[taskId].data[0] = gTasks[taskId].data[5]; + loPtr = gTasks[taskId].data[6]; + hiPtr = gTasks[taskId].data[7]; + gTasks[taskId].func = (void *)((loPtr << 0x10) | (hiPtr)); + } + break; + } +} + +void sub_819D770(u8 taskId) +{ + u8 anotherTaskId; + u16 loPtr, hiPtr; + if (sFactorySwapScreen->unk30 == 1) + return; + + switch (gTasks[taskId].data[0]) + { + case 0: + if (sFactorySwapScreen->actionsState == 1) + { + anotherTaskId = CreateTask(sub_819D324, 0); + gTasks[taskId].data[3] = 0; + gTasks[anotherTaskId].data[1] = taskId; + gTasks[anotherTaskId].data[0] = 0; + gTasks[anotherTaskId].data[2] = 1; + gTasks[anotherTaskId].data[3] = 6; + gTasks[taskId].data[2] = 10; + gTasks[taskId].data[0]++; + } + else + { + anotherTaskId = CreateTask(sub_819D324, 0); + gTasks[taskId].data[3] = 1; + gTasks[taskId].data[4] = 0; + gTasks[anotherTaskId].data[1] = taskId; + gTasks[anotherTaskId].data[0] = 1; + gTasks[anotherTaskId].data[2] = 1; + gTasks[anotherTaskId].data[3] = 6; + gTasks[taskId].data[0] += 2; + } + break; + case 1: + if (gTasks[taskId].data[2] == 0) + { + anotherTaskId = CreateTask(sub_819D324, 0); + gTasks[taskId].data[4] = 0; + gTasks[anotherTaskId].data[1] = taskId; + gTasks[anotherTaskId].data[0] = 1; + gTasks[anotherTaskId].data[2] = 1; + gTasks[anotherTaskId].data[3] = 6; + gTasks[taskId].data[0]++; + } + else + { + gTasks[taskId].data[2]--; + } + break; + case 2: + if (gTasks[taskId].data[3] == 1 && gTasks[taskId].data[4] == 1) + { + gPlttBufferFaded[226] = gUnknown_0860F13C[37]; + Swap_PrintActionStrings(); + PutWindowTilemap(5); + gTasks[taskId].data[0]++; + } + break; + case 3: + BeginNormalPaletteFade(0x4000, 0, 0x10, 0, gUnknown_0860F13C[37]); + gTasks[taskId].data[0]++; + break; + case 4: + if (!gPaletteFade.active) + { + Swap_PrintActionStrings3(0); + gTasks[taskId].data[0]++; + } + break; + case 5: + Swap_PrintActionStrings3(1); + PutWindowTilemap(3); + gTasks[taskId].data[0]++; + break; + case 6: + FillWindowPixelBuffer(5, 0); + CopyWindowToVram(5, 2); + gTasks[taskId].data[0]++; + break; + case 7: + if (sFactorySwapScreen->actionsState == 0) + Swap_PrintOnInfoWindow(gText_SelectPkmnToSwap); + else + Swap_PrintOnInfoWindow(gText_SelectPkmnToAccept); + if (sFactorySwapScreen->cursorPos < 3) + gSprites[sFactorySwapScreen->cursorSpriteId].invisible = 0; + Swap_PrintMonCategory(); + gTasks[taskId].data[0]++; + break; + case 8: + Swap_PrintMonSpecies3(); + sub_819EADC(); + sFactorySwapScreen->unk22 = 1; + gTasks[taskId].data[0] = gTasks[taskId].data[5]; + loPtr = gTasks[taskId].data[6]; + hiPtr = gTasks[taskId].data[7]; + gTasks[taskId].func = (void *)((loPtr << 0x10) | (hiPtr)); + break; + } +} + +void sub_819D9EC(u8 taskId) +{ + u8 i; + if (sFactorySwapScreen->unk30 == 1) + return; + + switch (gTasks[taskId].data[0]) + { + case 0: + Swap_PrintMonSpecies3(); + gTasks[taskId].data[0]++; + break; + case 1: + sub_819EADC(); + gSprites[sFactorySwapScreen->cursorSpriteId].invisible = 1; + gTasks[taskId].data[0]++; + break; + case 2: + CreateTask(sub_819D12C, 0); + gTasks[sFactorySwapScreen->palBlendTaskId].func = Task_SwapBlendPalette2; + gTasks[taskId].data[0]++; + break; + case 3: + if (!FuncIsActiveTask(sub_819D12C) && gTasks[sFactorySwapScreen->palBlendTaskId].data[4] == 1) + { + sub_819EAC0(); + if (sFactorySwapScreen->actionsState == 0) + { + sub_819F048(1); + } + else + { + sub_819F048(0); + for (i = 0; i < 3; i++) + gSprites[sFactorySwapScreen->unk8[1][i]].invisible = 1; + } + gSprites[sFactorySwapScreen->cursorSpriteId].pos1.x = gSprites[sFactorySwapScreen->ballSpriteIds[sFactorySwapScreen->cursorPos]].pos1.x; + gTasks[sFactorySwapScreen->palBlendTaskId].func = Task_SwapBlendPalette; + sFactorySwapScreen->unk27 = 0; + sFactorySwapScreen->unk28 = 6; + sFactorySwapScreen->unk26 = FALSE; + gTasks[sFactorySwapScreen->palBlendTaskId].data[0] = 1; + gTasks[taskId].data[0]++; + } + break; + case 4: + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenChooseMons) >> 0x10; + gTasks[taskId].data[7] = (u32)(Task_HandleSwapScreenChooseMons); + gTasks[taskId].data[5] = 1; + gTasks[taskId].func = sub_819D770; + break; + } +} + +void Swap_InitStruct(void) +{ + if (sFactorySwapScreen == NULL) + { + sFactorySwapScreen = AllocZeroed(sizeof(*sFactorySwapScreen)); + sFactorySwapScreen->cursorPos = 0; + sFactorySwapScreen->unk30 = 0; + sFactorySwapScreen->fromSummaryScreen = FALSE; + } +} + +void sub_819DC00(void) +{ + sFactorySwapScreen = NULL; + SetMainCallback2(CB2_InitSwapScreen); +} + +void CB2_InitSwapScreen(void) +{ + u8 taskId; + + switch (gMain.state) + { + case 0: + SetHBlankCallback(NULL); + SetVBlankCallback(NULL); + CpuFill32(0, (void *)VRAM, VRAM_SIZE); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_086108B8, ARRAY_COUNT(gUnknown_086108B8)); + InitWindows(gUnknown_086108C8); + DeactivateAllTextPrinters(); + gMain.state++; + break; + case 1: + gUnknown_0203CE40 = Alloc(0x440); + gUnknown_0203CE44 = AllocZeroed(0x440); + gUnknown_0203CE48 = Alloc(0x800); + gUnknown_0203CE4C = AllocZeroed(0x800); + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + SetGpuReg(REG_OFFSET_BLDY, 0); + SetGpuReg(REG_OFFSET_MOSAIC, 0); + SetGpuReg(REG_OFFSET_WIN0H, 0); + SetGpuReg(REG_OFFSET_WIN0V, 0); + SetGpuReg(REG_OFFSET_WIN1H, 0); + SetGpuReg(REG_OFFSET_WIN1V, 0); + SetGpuReg(REG_OFFSET_WININ, 0); + SetGpuReg(REG_OFFSET_WINOUT, 0); + gMain.state++; + break; + case 2: + ResetPaletteFade(); + ResetSpriteData(); + ResetTasks(); + FreeAllSpritePalettes(); + ResetAllPicSprites(); + CpuCopy16(gFrontierFactorySelectMenu_Gfx, gUnknown_0203CE40, 0x440); + CpuCopy16(gUnknown_0861033C, gUnknown_0203CE44, 0x60); + LoadBgTiles(1, gUnknown_0203CE40, 0x440, 0); + LoadBgTiles(3, gUnknown_0203CE44, 0x60, 0); + CpuCopy16(gFrontierFactorySelectMenu_Tilemap, gUnknown_0203CE48, 0x800); + LoadBgTilemap(1, gUnknown_0203CE48, 0x800, 0); + LoadPalette(gFrontierFactorySelectMenu_Pal, 0, 0x40); + LoadPalette(gUnknown_08610918, 0xF0, 10); + LoadPalette(gUnknown_08610918, 0xE0, 10); + LoadPalette(gUnknown_0861039C, 0x20, 4); + gMain.state++; + break; + case 3: + SetBgTilemapBuffer(3, gUnknown_0203CE4C); + CopyToBgTilemapBufferRect(3, gUnknown_0861023C, 11, 4, 8, 8); + CopyBgTilemapBufferToVram(3); + gMain.state++; + break; + case 4: + LoadSpritePalettes(gUnknown_086106B0); + LoadSpriteSheets(gUnknown_08610650); + LoadCompressedObjectPic(gUnknown_086106A0); + SetVBlankCallback(Swap_VblankCb); + gMain.state++; + break; + case 5: + if (sFactorySwapScreen->fromSummaryScreen == TRUE) + sFactorySwapScreen->cursorPos = gUnknown_0203CF20; + gMain.state++; + break; + case 6: + Swap_InitStruct(); + Swap_InitAllSprites(); + if (sFactorySwapScreen->fromSummaryScreen == TRUE) + Swap_ShowSummaryMonSprite(); + sub_819F048(0); + gMain.state++; + break; + case 7: + Swap_PrintOnInfoWindow(gText_SelectPkmnToSwap); + PutWindowTilemap(2); + gMain.state++; + break; + case 8: + Swap_PrintMonCategory(); + PutWindowTilemap(8); + gMain.state++; + break; + case 9: + if (!sFactorySwapScreen->fromSummaryScreen) + Swap_PrintMonSpecies(); + PutWindowTilemap(1); + gMain.state++; + break; + case 10: + Swap_PrintPkmnSwap(); + PutWindowTilemap(0); + gMain.state++; + break; + case 11: + gMain.state++; + break; + case 12: + if (sFactorySwapScreen->fromSummaryScreen) + Swap_PrintMonSpecies2(); + gMain.state++; + break; + case 13: + Swap_PrintActionStrings2(); + PutWindowTilemap(3); + gMain.state++; + break; + case 14: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); + ShowBg(0); + ShowBg(1); + ShowBg(2); + if (sFactorySwapScreen->fromSummaryScreen == TRUE) + { + ShowBg(3); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_OBJ); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4)); + } + else + { + HideBg(3); + } + gMain.state++; + break; + case 15: + sFactorySwapScreen->palBlendTaskId = CreateTask(Task_SwapBlendPalette, 0); + if (!sFactorySwapScreen->fromSummaryScreen) + { + gTasks[sFactorySwapScreen->palBlendTaskId].data[0] = 0; + taskId = CreateTask(Task_HandleSwapScreenChooseMons, 0); + gTasks[taskId].data[0] = 0; + } + else + { + sub_819EAF8(); + gTasks[sFactorySwapScreen->palBlendTaskId].data[0] = 1; + sFactorySwapScreen->unk22 = FALSE; + taskId = CreateTask(Task_HandleSwapScreenMenu, 0); + gTasks[taskId].data[0] = 2; + } + SetMainCallback2(Swap_CB2); + break; + } +} + +extern const struct SpriteTemplate gUnknown_08610834; +extern const struct SpriteTemplate gUnknown_0861084C; +extern const struct SpriteTemplate gUnknown_08610864; +extern const struct SpriteTemplate gUnknown_0861087C; + +void Swap_InitAllSprites(void) +{ + u8 i; + u8 x; + struct SpriteTemplate spriteTemplate; + + spriteTemplate = gUnknown_08610834; + spriteTemplate.paletteTag = TAG_PAL_BALL_SELECTED; + + for (i = 0; i < 3; i++) + { + sFactorySwapScreen->ballSpriteIds[i] = CreateSprite(&spriteTemplate, (48 * i) + 72, 64, 1); + gSprites[sFactorySwapScreen->ballSpriteIds[i]].data[0] = 0; + } + sFactorySwapScreen->cursorSpriteId = CreateSprite(&gUnknown_0861084C, gSprites[sFactorySwapScreen->ballSpriteIds[sFactorySwapScreen->cursorPos]].pos1.x, 88, 0); + sFactorySwapScreen->menuCursor1SpriteId = CreateSprite(&gUnknown_08610864, 176, 112, 0); + sFactorySwapScreen->menuCursor2SpriteId = CreateSprite(&gUnknown_0861087C, 176, 144, 0); + gSprites[sFactorySwapScreen->menuCursor1SpriteId].invisible = 1; + gSprites[sFactorySwapScreen->menuCursor2SpriteId].invisible = 1; + gSprites[sFactorySwapScreen->menuCursor1SpriteId].centerToCornerVecX = 0; + gSprites[sFactorySwapScreen->menuCursor1SpriteId].centerToCornerVecY = 0; + gSprites[sFactorySwapScreen->menuCursor2SpriteId].centerToCornerVecX = 0; + gSprites[sFactorySwapScreen->menuCursor2SpriteId].centerToCornerVecY = 0; + + if (sFactorySwapScreen->fromSummaryScreen == TRUE) + x = 240; + else + x = 192; + + spriteTemplate = gUnknown_0861084C; + spriteTemplate.tileTag = TAG_TILE_68; + sFactorySwapScreen->unk8[0][0] = CreateSprite(&spriteTemplate, 240, 120, 10); + + spriteTemplate = gUnknown_08610864; + spriteTemplate.tileTag = TAG_TILE_69; + sFactorySwapScreen->unk8[0][1] = CreateSprite(&spriteTemplate, 256, 120, 10); + sFactorySwapScreen->unk8[0][2] = CreateSprite(&spriteTemplate, 288, 120, 10); + + spriteTemplate = gUnknown_0861084C; + spriteTemplate.tileTag = TAG_TILE_6A; + sFactorySwapScreen->unk8[1][0] = CreateSprite(&spriteTemplate, 240, 120, 1); + + spriteTemplate = gUnknown_08610864; + spriteTemplate.tileTag = TAG_TILE_6B; + sFactorySwapScreen->unk8[1][1] = CreateSprite(&spriteTemplate, 256, 120, 1); + spriteTemplate.tileTag = TAG_TILE_6C; + sFactorySwapScreen->unk8[1][2] = CreateSprite(&spriteTemplate, 288, 120, 1); + + spriteTemplate = gUnknown_0861084C; + spriteTemplate.tileTag = TAG_TILE_68; + sFactorySwapScreen->unkE[0][0] = CreateSprite(&spriteTemplate, x, 144, 10); + + spriteTemplate = gUnknown_08610864; + spriteTemplate.tileTag = TAG_TILE_69; + sFactorySwapScreen->unkE[0][1] = CreateSprite(&spriteTemplate, x + 16, 144, 10); + + spriteTemplate = gUnknown_0861084C; + spriteTemplate.tileTag = TAG_TILE_6A; + sFactorySwapScreen->unkE[1][0] = CreateSprite(&spriteTemplate, x, 144, 1); + + spriteTemplate = gUnknown_08610864; + spriteTemplate.tileTag = TAG_TILE_6C; + sFactorySwapScreen->unkE[1][1] = CreateSprite(&spriteTemplate, x + 16, 144, 1); + + for (i = 0; i < 2; i++) + { + gSprites[sFactorySwapScreen->unk8[i][0]].centerToCornerVecX = 0; + gSprites[sFactorySwapScreen->unk8[i][0]].centerToCornerVecY = 0; + gSprites[sFactorySwapScreen->unk8[i][1]].centerToCornerVecX = 0; + gSprites[sFactorySwapScreen->unk8[i][1]].centerToCornerVecY = 0; + gSprites[sFactorySwapScreen->unk8[i][2]].centerToCornerVecX = 0; + gSprites[sFactorySwapScreen->unk8[i][2]].centerToCornerVecY = 0; + gSprites[sFactorySwapScreen->unkE[i][0]].centerToCornerVecX = 0; + gSprites[sFactorySwapScreen->unkE[i][0]].centerToCornerVecY = 0; + gSprites[sFactorySwapScreen->unkE[i][1]].centerToCornerVecX = 0; + gSprites[sFactorySwapScreen->unkE[i][1]].centerToCornerVecY = 0; + + gSprites[sFactorySwapScreen->unk8[i][0]].invisible = 1; + gSprites[sFactorySwapScreen->unk8[i][1]].invisible = 1; + gSprites[sFactorySwapScreen->unk8[i][2]].invisible = 1; + gSprites[sFactorySwapScreen->unkE[i][0]].invisible = 1; + gSprites[sFactorySwapScreen->unkE[i][1]].invisible = 1; + } + + gSprites[sFactorySwapScreen->unkE[0][0]].invisible = 0; + gSprites[sFactorySwapScreen->unkE[0][1]].invisible = 0; + gSprites[sFactorySwapScreen->unk8[0][0]].invisible = 0; + gSprites[sFactorySwapScreen->unk8[0][1]].invisible = 0; + gSprites[sFactorySwapScreen->unk8[0][2]].invisible = 0; +} -- cgit v1.2.3 From 2f59df03ab8dbd5d9edb28b5680cc668aafc6684 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 8 Sep 2018 23:38:30 +0200 Subject: Standartize AddTextPrinterParametrized functions, --- src/battle_factory.c | 315 ++++++++++++++++++++++++++++++++++++++++--- src/battle_interface.c | 2 +- src/battle_pyramid_bag.c | 8 +- src/battle_records.c | 22 +-- src/berry_blender.c | 8 +- src/berry_tag_screen.c | 18 +-- src/clear_save_data_screen.c | 4 +- src/coins.c | 2 +- src/credits.c | 2 +- src/decoration.c | 10 +- src/diploma.c | 4 +- src/egg_hatch.c | 2 +- src/field_region_map.c | 4 +- src/field_specials.c | 28 ++-- src/hall_of_fame.c | 6 +- src/item_menu.c | 6 +- src/learn_move.c | 4 +- src/list_menu.c | 4 +- src/main_menu.c | 2 +- src/map_name_popup.c | 2 +- src/mauville_old_man.c | 6 +- src/menu.c | 32 ++--- src/menu_helpers.c | 2 +- src/money.c | 2 +- src/mystery_event_menu.c | 2 +- src/naming_screen.c | 8 +- src/option_menu.c | 6 +- src/player_pc.c | 16 +-- src/pokeblock.c | 2 +- src/pokeblock_feed.c | 2 +- src/pokedex.c | 8 +- src/pokemon_storage_system.c | 14 +- src/pokemon_summary_screen.c | 2 +- src/record_mixing.c | 2 +- src/region_map.c | 8 +- src/reset_rtc_screen.c | 10 +- src/save_failed_screen.c | 2 +- src/scrcmd.c | 4 +- src/slot_machine.c | 8 +- src/start_menu.c | 24 ++-- src/starter_choose.c | 4 +- src/text.c | 4 +- src/trader.c | 6 +- src/wallclock.c | 6 +- 44 files changed, 453 insertions(+), 180 deletions(-) (limited to 'src') diff --git a/src/battle_factory.c b/src/battle_factory.c index 6324f4040..6d7514504 100644 --- a/src/battle_factory.c +++ b/src/battle_factory.c @@ -90,6 +90,12 @@ struct FactorySelectMonsStruct // 'Action' refers to the Cancel, Pknm for swap windows. +struct UnkField18Struct +{ + u8 unk0; + u8 unk1[7]; +}; + struct FactorySwapMonsStruct { u8 menuCursorPos; @@ -105,11 +111,8 @@ struct FactorySwapMonsStruct u8 actionsState; bool8 fromSummaryScreen; u8 yesNoCursorPos; - u8 unk17; - u8 unk18; - u8 unk19; - u8 unk1A; - u8 unk1B; + u8 actionsCount; + struct UnkField18Struct *unk18; u8 unk1C; u8 unk1D; u8 unk1E; @@ -174,8 +177,9 @@ static u8 Select_OptionRentDeselect(void); u8 sub_81A6F70(u8 battleMode, u8 lvlMode); u8 sub_81A6CA8(u8 arg0, u8 arg1); static bool32 Select_AreSpeciesValid(u16 monSetId); -void sub_819E538(void); -void sub_819E9E0(void); +void Swap_DestroyAllSprites(void); +void Swap_ShowYesNoOptions(void); +void sub_819E8EC(void); void sub_819EAC0(void); void Swap_UpdateYesNoCursorPosition(s8 direction); void Swap_UpdateMenuCursorPosition(s8 direction); @@ -185,6 +189,8 @@ void Task_HandleSwapScreenChooseMons(u8 taskId); void sub_819D588(u8 taskId); void Swap_PrintOnInfoWindow(const u8 *str); void Swap_ShowMenuOptions(void); +void Swap_PrintMenuOptions(void); +void Swap_PrintYesNoOptions(void); void Swap_PrintMonSpecies(void); void Swap_PrintMonSpecies2(void); void Swap_PrintMonSpecies3(void); @@ -201,19 +207,20 @@ void Swap_RunMenuOptionFunc(u8 taskId); void sub_819F184(u8 taskId); void Swap_PrintActionStrings(void); void Swap_PrintActionStrings2(void); -void Swap_PrintActionStrings3(u8 field); -void sub_819F048(u8 field); +void Swap_PrintActionStrings3(u8 arg0); +void sub_819F048(u8 arg0); +void sub_819E838(u8 arg0); // Ewram variables EWRAM_DATA u8 *gUnknown_0203CE2C = NULL; EWRAM_DATA u8 *gUnknown_0203CE30 = NULL; EWRAM_DATA u8 *gUnknown_0203CE34 = NULL; EWRAM_DATA u8 *gUnknown_0203CE38 = NULL; -static EWRAM_DATA struct Pokemon *sFactorySelectMons = NULL; -extern u8 *gUnknown_0203CE40; -extern u8 *gUnknown_0203CE44; -extern u8 *gUnknown_0203CE48; -extern u8 *gUnknown_0203CE4C; +EWRAM_DATA struct Pokemon *sFactorySelectMons = NULL; +EWRAM_DATA u8 *gUnknown_0203CE40 = NULL; +EWRAM_DATA u8 *gUnknown_0203CE44 = NULL; +EWRAM_DATA u8 *gUnknown_0203CE48 = NULL; +EWRAM_DATA u8 *gUnknown_0203CE4C = NULL; // IWRAM bss IWRAM_DATA struct FactorySelectMonsStruct *sFactorySelectScreen; @@ -281,6 +288,7 @@ extern const struct SpriteTemplate gUnknown_08610608; extern const struct SpriteTemplate gUnknown_08610620; extern const struct SpriteTemplate gUnknown_08610638; extern const u8 gUnknown_08610479[]; +extern const u8 gUnknown_08610925[]; extern const u8 gUnknown_08610476[]; extern const struct SpritePalette gUnknown_086106B0[]; extern const struct SpriteSheet gUnknown_08610650[]; @@ -308,6 +316,7 @@ extern const u8 gText_QuitSwapping[]; extern const u8 gText_AcceptThisPkmn[]; extern const u8 gText_SelectPkmnToAccept[]; extern const u8 gText_SelectPkmnToSwap[]; +extern const u8 gText_PkmnSwap[]; // code void sub_819A44C(struct Sprite *sprite) @@ -1066,7 +1075,7 @@ static void sub_819B958(u8 windowId) static void Select_PrintRentalPkmnString(void) { FillWindowPixelBuffer(0, 0); - PrintTextOnWindow(0, 1, gText_RentalPkmn2, 2, 1, 0, NULL); + AddTextPrinterParameterized(0, 1, gText_RentalPkmn2, 2, 1, 0, NULL); CopyWindowToVram(0, 3); } @@ -1098,14 +1107,14 @@ static void Select_PrintSelectMonString(void) else str = gText_TheseThreePkmnOkay; - PrintTextOnWindow(2, 1, str, 2, 5, 0, NULL); + AddTextPrinterParameterized(2, 1, str, 2, 5, 0, NULL); CopyWindowToVram(2, 2); } static void Select_PrintCantSelectSameMon(void) { FillWindowPixelBuffer(2, 0); - PrintTextOnWindow(2, 1, gText_CantSelectSamePkmn, 2, 5, 0, NULL); + AddTextPrinterParameterized(2, 1, gText_CantSelectSamePkmn, 2, 5, 0, NULL); CopyWindowToVram(2, 2); } @@ -1200,7 +1209,7 @@ static void Select_PrintMonCategory(void) species = GetMonData(&sFactorySelectScreen->mons[monId].monData, MON_DATA_SPECIES, NULL); CopyMonCategoryText(SpeciesToNationalPokedexNum(species), text); x = GetStringRightAlignXOffset(1, text, 0x76); - PrintTextOnWindow(5, 1, text, x, 1, 0, NULL); + AddTextPrinterParameterized(5, 1, text, x, 1, 0, NULL); CopyWindowToVram(5, 2); } } @@ -1554,7 +1563,7 @@ void sub_819C90C(u8 taskId) // Task_FromSelectScreenToSummaryScreen { DestroyTask(sFactorySwapScreen->palBlendTaskId); sub_819F444(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30); - sub_819E538(); + Swap_DestroyAllSprites(); FREE_AND_SET_NULL(gUnknown_0203CE40); FREE_AND_SET_NULL(gUnknown_0203CE44); FREE_AND_SET_NULL(gUnknown_0203CE48); @@ -1606,7 +1615,7 @@ void sub_819CA08(u8 taskId) // Task_CloseSelectionScreen if (!UpdatePaletteFade()) { DestroyTask(sFactorySwapScreen->palBlendTaskId); - sub_819E538(); + Swap_DestroyAllSprites(); FREE_AND_SET_NULL(gUnknown_0203CE40); FREE_AND_SET_NULL(gUnknown_0203CE44); FREE_AND_SET_NULL(gUnknown_0203CE48); @@ -1630,7 +1639,7 @@ void Task_HandleSwapScreenYesNo(u8 taskId) switch (gTasks[taskId].data[0]) { case 4: - sub_819E9E0(); + Swap_ShowYesNoOptions(); gTasks[taskId].data[0] = 5; break; case 5: @@ -2623,3 +2632,267 @@ void Swap_InitAllSprites(void) gSprites[sFactorySwapScreen->unk8[0][1]].invisible = 0; gSprites[sFactorySwapScreen->unk8[0][2]].invisible = 0; } + +void Swap_DestroyAllSprites(void) +{ + u8 i, j; + + for (i = 0; i < 3; i++) + DestroySprite(&gSprites[sFactorySwapScreen->ballSpriteIds[i]]); + DestroySprite(&gSprites[sFactorySwapScreen->cursorSpriteId]); + DestroySprite(&gSprites[sFactorySwapScreen->menuCursor1SpriteId]); + DestroySprite(&gSprites[sFactorySwapScreen->menuCursor2SpriteId]); + for (i = 0; i < 2; i++) + { + for (j = 0; j < 3; j++) + DestroySprite(&gSprites[sFactorySwapScreen->unk8[i][j]]); + } + for (i = 0; i < 2; i++) + { + for (j = 0; j < 2; j++) + DestroySprite(&gSprites[sFactorySwapScreen->unkE[i][j]]); + } +} + +void Swap_HandleActionCursorChange(u8 cursorId) +{ + if (cursorId < 3) + { + gSprites[sFactorySwapScreen->cursorSpriteId].invisible = 0; + sub_819E8EC(); + gSprites[sFactorySwapScreen->cursorSpriteId].pos1.x = gSprites[sFactorySwapScreen->ballSpriteIds[cursorId]].pos1.x; + } + else + { + gSprites[sFactorySwapScreen->cursorSpriteId].invisible = 1; + sub_819E838(sFactorySwapScreen->unk18[cursorId].unk0); + } +} + +void Swap_UpdateBallCursorPosition(s8 direction) +{ + u8 cursorPos; + PlaySE(SE_SELECT); + if (direction > 0) // Move cursor right. + { + if (sFactorySwapScreen->cursorPos + 1 != sFactorySwapScreen->actionsCount) + sFactorySwapScreen->cursorPos++; + else + sFactorySwapScreen->cursorPos = 0; + } + else // Move cursor left. + { + if (sFactorySwapScreen->cursorPos != 0) + sFactorySwapScreen->cursorPos--; + else + sFactorySwapScreen->cursorPos = sFactorySwapScreen->actionsCount - 1; + } + + cursorPos = sFactorySwapScreen->cursorPos; + Swap_HandleActionCursorChange(cursorPos); +} + +void Swap_UpdateActionCursorPosition(s8 direction) +{ + u8 cursorPos; + PlaySE(SE_SELECT); + if (direction > 0) // Move cursor down. + { + if (sFactorySwapScreen->cursorPos < 3) + sFactorySwapScreen->cursorPos = 3; + else if (sFactorySwapScreen->cursorPos + 1 != sFactorySwapScreen->actionsCount) + sFactorySwapScreen->cursorPos++; + else + sFactorySwapScreen->cursorPos = 0; + } + else // Move cursor up. + { + if (sFactorySwapScreen->cursorPos < 3) + sFactorySwapScreen->cursorPos = sFactorySwapScreen->actionsCount - 1; + else if (sFactorySwapScreen->cursorPos != 0) + sFactorySwapScreen->cursorPos--; + else + sFactorySwapScreen->cursorPos = sFactorySwapScreen->actionsCount - 1; + } + + cursorPos = sFactorySwapScreen->cursorPos; + Swap_HandleActionCursorChange(cursorPos); +} + +void Swap_UpdateYesNoCursorPosition(s8 direction) +{ + if (direction > 0) // Move cursor down. + { + if (sFactorySwapScreen->yesNoCursorPos != 1) + sFactorySwapScreen->yesNoCursorPos++; + else + sFactorySwapScreen->yesNoCursorPos = 0; + } + else // Move cursor up. + { + if (sFactorySwapScreen->yesNoCursorPos != 0) + sFactorySwapScreen->yesNoCursorPos--; + else + sFactorySwapScreen->yesNoCursorPos = 1; + } + + gSprites[sFactorySwapScreen->menuCursor1SpriteId].pos1.y = (sFactorySwapScreen->yesNoCursorPos * 16) + 112; + gSprites[sFactorySwapScreen->menuCursor2SpriteId].pos1.y = (sFactorySwapScreen->yesNoCursorPos * 16) + 112; +} + +void Swap_UpdateMenuCursorPosition(s8 direction) +{ + PlaySE(SE_SELECT); + if (direction > 0) // Move cursor down. + { + if (sFactorySwapScreen->menuCursorPos != MENU_OPTIONS_COUNT - 1) + sFactorySwapScreen->menuCursorPos++; + else + sFactorySwapScreen->menuCursorPos = 0; + } + else // Move cursor up. + { + if (sFactorySwapScreen->menuCursorPos != 0) + sFactorySwapScreen->menuCursorPos--; + else + sFactorySwapScreen->menuCursorPos = MENU_OPTIONS_COUNT - 1; + } + + gSprites[sFactorySwapScreen->menuCursor1SpriteId].pos1.y = (sFactorySwapScreen->menuCursorPos * 16) + 112; + gSprites[sFactorySwapScreen->menuCursor2SpriteId].pos1.y = (sFactorySwapScreen->menuCursorPos * 16) + 112; +} + +void sub_819E838(u8 arg0) +{ + u8 i; + + for (i = 0; i < 3; i++) + { + if (arg0 == 2) + { + gSprites[sFactorySwapScreen->unk8[1][i]].invisible = 0; + if (i < 2) + gSprites[sFactorySwapScreen->unkE[1][i]].invisible = 1; + } + else if (arg0 == 3) + { + if (i < 2) + gSprites[sFactorySwapScreen->unkE[1][i]].invisible = 0; + gSprites[sFactorySwapScreen->unk8[1][i]].invisible = 1; + } + } +} + +void sub_819E8EC(void) +{ + u8 i; + + for (i = 0; i < 3; i++) + { + gSprites[sFactorySwapScreen->unk8[1][i]].invisible = 1; + if (i < 2) + gSprites[sFactorySwapScreen->unkE[1][i]].invisible = 1; + } +} + +void Swap_ShowMenuOptions(void) +{ + if (sFactorySwapScreen->fromSummaryScreen == TRUE) + sFactorySwapScreen->fromSummaryScreen = FALSE; + else + sFactorySwapScreen->menuCursorPos = 0; + + gSprites[sFactorySwapScreen->menuCursor1SpriteId].pos1.x = 176; + gSprites[sFactorySwapScreen->menuCursor1SpriteId].pos1.y = (sFactorySwapScreen->menuCursorPos * 16) + 112; + gSprites[sFactorySwapScreen->menuCursor2SpriteId].pos1.x = 208; + gSprites[sFactorySwapScreen->menuCursor2SpriteId].pos1.y = (sFactorySwapScreen->menuCursorPos * 16) + 112; + + gSprites[sFactorySwapScreen->menuCursor1SpriteId].invisible = 0; + gSprites[sFactorySwapScreen->menuCursor2SpriteId].invisible = 0; + + Swap_PrintMenuOptions(); +} + +void Swap_ShowYesNoOptions(void) +{ + sFactorySwapScreen->yesNoCursorPos = 0; + + gSprites[sFactorySwapScreen->menuCursor1SpriteId].pos1.x = 176; + gSprites[sFactorySwapScreen->menuCursor1SpriteId].pos1.y = 112; + gSprites[sFactorySwapScreen->menuCursor2SpriteId].pos1.x = 208; + gSprites[sFactorySwapScreen->menuCursor2SpriteId].pos1.y = 112; + + gSprites[sFactorySwapScreen->menuCursor1SpriteId].invisible = 0; + gSprites[sFactorySwapScreen->menuCursor2SpriteId].invisible = 0; + + Swap_PrintYesNoOptions(); +} + +void sub_819EA64(u8 windowId) +{ + gSprites[sFactorySwapScreen->menuCursor1SpriteId].invisible = 1; + gSprites[sFactorySwapScreen->menuCursor2SpriteId].invisible = 1; + FillWindowPixelBuffer(windowId, 0); + CopyWindowToVram(windowId, 2); + ClearWindowTilemap(windowId); +} + +void sub_819EAC0(void) +{ + PutWindowTilemap(1); + FillWindowPixelBuffer(1, 0); + CopyWindowToVram(1, 2); +} + +void sub_819EADC(void) +{ + PutWindowTilemap(7); + FillWindowPixelBuffer(7, 0); + CopyWindowToVram(7, 2); +} + +void sub_819EAF8(void) +{ + sub_819EAC0(); + PutWindowTilemap(5); + FillWindowPixelBuffer(5, 0); + CopyWindowToVram(5, 2); +} + +void Swap_PrintPkmnSwap(void) +{ + FillWindowPixelBuffer(0, 0x11); + AddTextPrinterParameterized(0, 1, gText_PkmnSwap, 2, 1, 0, NULL); + CopyWindowToVram(0, 3); +} + +void Swap_PrintMonSpecies(void) +{ + u16 species; + u8 x; + + FillWindowPixelBuffer(1, 0); + if (sFactorySwapScreen->cursorPos > 2) + { + CopyWindowToVram(1, 2); + } + else + { + u8 monId = sFactorySwapScreen->cursorPos; + if (sFactorySwapScreen->actionsState == 0) + species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, NULL); + else + species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); + StringCopy(gStringVar4, gSpeciesNames[species]); + x = GetStringRightAlignXOffset(1, gStringVar4, 86); + AddTextPrinterParameterized3(1, 1, x, 1, gUnknown_08610925, 0, gStringVar4); + CopyWindowToVram(1, 3); + } +} + +void Swap_PrintOnInfoWindow(const u8 *str) +{ + FillWindowPixelBuffer(2, 0); + AddTextPrinterParameterized(2, 1, str, 2, 5, 0, NULL); + CopyWindowToVram(2, 2); +} diff --git a/src/battle_interface.c b/src/battle_interface.c index 278edb6f4..e45af2bf0 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -2589,7 +2589,7 @@ static u8* AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, color[1] = 1; color[2] = 3; - AddTextPrinterParameterized2(winId, 0, x, y, 0, 0, color, -1, str); + AddTextPrinterParameterized4(winId, 0, x, y, 0, 0, color, -1, str); *windowId = winId; return (u8*)(GetWindowAttribute(winId, WINDOW_TILE_DATA)); diff --git a/src/battle_pyramid_bag.c b/src/battle_pyramid_bag.c index 8a5ce7a99..5a31554b4 100644 --- a/src/battle_pyramid_bag.c +++ b/src/battle_pyramid_bag.c @@ -997,7 +997,7 @@ static void sub_81C6404(void) StringExpandPlaceholders(gStringVar4, gText_xVar1); sub_81C6CEC(3); x = GetStringCenterAlignXOffset(1, gStringVar4, 0x28); - PrintTextOnWindow(3, 1, gStringVar4, x, 2, 0, NULL); + AddTextPrinterParameterized(3, 1, gStringVar4, x, 2, 0, NULL); } static void sub_81C645C(s16 value) @@ -1007,7 +1007,7 @@ static void sub_81C645C(s16 value) ConvertIntToDecimalStringN(gStringVar1, value, STR_CONV_MODE_LEADING_ZEROS, 2); StringExpandPlaceholders(gStringVar4, gText_xVar1); x = GetStringCenterAlignXOffset(1, gStringVar4, 0x28); - PrintTextOnWindow(3, 1, gStringVar4, x, 2, 0, NULL); + AddTextPrinterParameterized(3, 1, gStringVar4, x, 2, 0, NULL); } static void sub_81C64B4(u8 taskId) @@ -1280,12 +1280,12 @@ static void sub_81C6BD8(void) static void PrintOnWindow_Font1(u8 windowId, const u8 *src, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorTableId) { - AddTextPrinterParameterized2(windowId, 1, x, y, letterSpacing, lineSpacing, sColorTable[colorTableId], speed, src); + AddTextPrinterParameterized4(windowId, 1, x, y, letterSpacing, lineSpacing, sColorTable[colorTableId], speed, src); } static void PrintOnWindow_Font7(u8 windowId, const u8 *src, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorTableId) { - AddTextPrinterParameterized2(windowId, 7, x, y, letterSpacing, lineSpacing, sColorTable[colorTableId], speed, src); + AddTextPrinterParameterized4(windowId, 7, x, y, letterSpacing, lineSpacing, sColorTable[colorTableId], speed, src); } static void sub_81C6CEC(u8 windowId) diff --git a/src/battle_records.c b/src/battle_records.c index 1680f3cc4..762cb8aae 100644 --- a/src/battle_records.c +++ b/src/battle_records.c @@ -266,7 +266,7 @@ static void PrintLinkBattleWinsLossesDraws(struct LinkBattleRecord *records) StringExpandPlaceholders(gStringVar4, gText_TotalRecordWLD); x = GetStringCenterAlignXOffset(1, gStringVar4, 0xD0); - PrintTextOnWindow(gRecordsWindowId, 1, gStringVar4, x, 0x11, 0, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x, 0x11, 0, NULL); } static void PrintLinkBattleRecord(struct LinkBattleRecord *record, u8 y, s32 language) @@ -274,10 +274,10 @@ static void PrintLinkBattleRecord(struct LinkBattleRecord *record, u8 y, s32 lan if (record->wins == 0 && record->losses == 0 && record->draws == 0) { // empty slot - PrintTextOnWindow(gRecordsWindowId, 1, sText_DashesNoPlayer, 8, (y * 8) + 1, 0, NULL); - PrintTextOnWindow(gRecordsWindowId, 1, sText_DashesNoScore, 80, (y * 8) + 1, 0, NULL); - PrintTextOnWindow(gRecordsWindowId, 1, sText_DashesNoScore, 128, (y * 8) + 1, 0, NULL); - PrintTextOnWindow(gRecordsWindowId, 1, sText_DashesNoScore, 176, (y * 8) + 1, 0, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, sText_DashesNoPlayer, 8, (y * 8) + 1, 0, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, sText_DashesNoScore, 80, (y * 8) + 1, 0, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, sText_DashesNoScore, 128, (y * 8) + 1, 0, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, sText_DashesNoScore, 176, (y * 8) + 1, 0, NULL); } else { @@ -285,16 +285,16 @@ static void PrintLinkBattleRecord(struct LinkBattleRecord *record, u8 y, s32 lan StringCopyN(gStringVar1, record->name, 7); ConvertInternationalString(gStringVar1, language); - PrintTextOnWindow(gRecordsWindowId, 1, gStringVar1, 8, (y * 8) + 1, 0, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar1, 8, (y * 8) + 1, 0, NULL); ConvertIntToDecimalStringN(gStringVar1, record->wins, STR_CONV_MODE_RIGHT_ALIGN, 4); - PrintTextOnWindow(gRecordsWindowId, 1, gStringVar1, 80, (y * 8) + 1, 0, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar1, 80, (y * 8) + 1, 0, NULL); ConvertIntToDecimalStringN(gStringVar1, record->losses, STR_CONV_MODE_RIGHT_ALIGN, 4); - PrintTextOnWindow(gRecordsWindowId, 1, gStringVar1, 128, (y * 8) + 1, 0, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar1, 128, (y * 8) + 1, 0, NULL); ConvertIntToDecimalStringN(gStringVar1, record->draws, STR_CONV_MODE_RIGHT_ALIGN, 4); - PrintTextOnWindow(gRecordsWindowId, 1, gStringVar1, 176, (y * 8) + 1, 0, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar1, 176, (y * 8) + 1, 0, NULL); } } @@ -308,11 +308,11 @@ void ShowLinkBattleRecords(void) StringExpandPlaceholders(gStringVar4, gText_PlayersBattleResults); x = GetStringCenterAlignXOffset(1, gStringVar4, 208); - PrintTextOnWindow(gRecordsWindowId, 1, gStringVar4, x, 1, 0, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x, 1, 0, NULL); PrintLinkBattleWinsLossesDraws(gSaveBlock1Ptr->linkBattleRecords.entries); StringExpandPlaceholders(gStringVar4, gText_WinLoseDraw); - PrintTextOnWindow(gRecordsWindowId, 1, gStringVar4, 0, 41, 0, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, 0, 41, 0, NULL); for (i = 0; i < LINK_B_RECORDS_COUNT; i++) { diff --git a/src/berry_blender.c b/src/berry_blender.c index 02df933f2..92d44ea78 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -3487,8 +3487,8 @@ void ShowBerryBlenderRecordWindow(void) FillWindowPixelBuffer(gRecordsWindowId, 0x11); xPos = GetStringCenterAlignXOffset(1, gText_BlenderMaxSpeedRecord, 0x90); - PrintTextOnWindow(gRecordsWindowId, 1, gText_BlenderMaxSpeedRecord, xPos, 1, 0, NULL); - PrintTextOnWindow(gRecordsWindowId, 1, gText_234Players, 4, 0x29, 0, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_BlenderMaxSpeedRecord, xPos, 1, 0, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_234Players, 4, 0x29, 0, NULL); for (i = 0, yPos = 0x29; i < BLENDER_SCORES_NO; i++) { @@ -3503,7 +3503,7 @@ void ShowBerryBlenderRecordWindow(void) txtPtr = StringAppend(txtPtr, sText_RPM); xPos = GetStringRightAlignXOffset(1, text, 0x8C); - PrintTextOnWindow(gRecordsWindowId, 1, text, xPos, yPos + (i * 16), 0, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, text, xPos, yPos + (i * 16), 0, NULL); } PutWindowTilemap(gRecordsWindowId); @@ -3596,7 +3596,7 @@ static void Blender_AddTextPrinter(u8 windowId, const u8 *string, u8 x, u8 y, s3 FillWindowPixelBuffer(windowId, txtColor[0] | (txtColor[0] << 4)); } - AddTextPrinterParameterized2(windowId, 1, x, y, letterSpacing, 1, txtColor, speed, string); + AddTextPrinterParameterized4(windowId, 1, x, y, letterSpacing, 1, txtColor, speed, string); } static bool32 Blender_PrintText(s16 *textState, const u8 *string, s32 textSpeed) diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index fb4bf6817..7623decd3 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -343,7 +343,7 @@ static void HandleInitWindows(void) static void PrintTextInBerryTagScreen(u8 windowId, const u8 *text, u8 x, u8 y, s32 speed, u8 colorStructId) { - AddTextPrinterParameterized2(windowId, 1, x, y, 0, 0, sTextColors[colorStructId], speed, text); + AddTextPrinterParameterized4(windowId, 1, x, y, 0, 0, sTextColors[colorStructId], speed, text); } static void AddBerryTagTextToBg0(void) @@ -376,7 +376,7 @@ static void PrintBerryNumberAndName(void) static void PrintBerrySize(void) { const struct Berry *berry = GetBerryInfo(sBerryTag->berryId); - PrintTextOnWindow(WIN_SIZE_FIRM, 1, gText_SizeSlash, 0, 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(WIN_SIZE_FIRM, 1, gText_SizeSlash, 0, 1, TEXT_SPEED_FF, NULL); if (berry->size != 0) { u32 inches, fraction; @@ -390,34 +390,34 @@ static void PrintBerrySize(void) ConvertIntToDecimalStringN(gStringVar1, inches, 0, 2); ConvertIntToDecimalStringN(gStringVar2, fraction, 0, 2); StringExpandPlaceholders(gStringVar4, gText_Var1DotVar2); - PrintTextOnWindow(WIN_SIZE_FIRM, 1, gStringVar4, 0x28, 1, 0, NULL); + AddTextPrinterParameterized(WIN_SIZE_FIRM, 1, gStringVar4, 0x28, 1, 0, NULL); } else { - PrintTextOnWindow(WIN_SIZE_FIRM, 1, gText_ThreeMarks, 0x28, 1, 0, NULL); + AddTextPrinterParameterized(WIN_SIZE_FIRM, 1, gText_ThreeMarks, 0x28, 1, 0, NULL); } } static void PrintBerryFirmness(void) { const struct Berry *berry = GetBerryInfo(sBerryTag->berryId); - PrintTextOnWindow(WIN_SIZE_FIRM, 1, gText_FirmSlash, 0, 0x11, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(WIN_SIZE_FIRM, 1, gText_FirmSlash, 0, 0x11, TEXT_SPEED_FF, NULL); if (berry->firmness != 0) - PrintTextOnWindow(WIN_SIZE_FIRM, 1, sBerryFirmnessStrings[berry->firmness - 1], 0x28, 0x11, 0, NULL); + AddTextPrinterParameterized(WIN_SIZE_FIRM, 1, sBerryFirmnessStrings[berry->firmness - 1], 0x28, 0x11, 0, NULL); else - PrintTextOnWindow(WIN_SIZE_FIRM, 1, gText_ThreeMarks, 0x28, 0x11, 0, NULL); + AddTextPrinterParameterized(WIN_SIZE_FIRM, 1, gText_ThreeMarks, 0x28, 0x11, 0, NULL); } static void PrintBerryDescription1(void) { const struct Berry *berry = GetBerryInfo(sBerryTag->berryId); - PrintTextOnWindow(WIN_DESC, 1, berry->description1, 0, 1, 0, NULL); + AddTextPrinterParameterized(WIN_DESC, 1, berry->description1, 0, 1, 0, NULL); } static void PrintBerryDescription2(void) { const struct Berry *berry = GetBerryInfo(sBerryTag->berryId); - PrintTextOnWindow(WIN_DESC, 1, berry->description2, 0, 0x11, 0, NULL); + AddTextPrinterParameterized(WIN_DESC, 1, berry->description2, 0, 0x11, 0, NULL); } static void CreateBerrySprite(void) diff --git a/src/clear_save_data_screen.c b/src/clear_save_data_screen.c index 5c1f7db20..839a77e4a 100644 --- a/src/clear_save_data_screen.c +++ b/src/clear_save_data_screen.c @@ -79,7 +79,7 @@ void CB2_InitClearSaveDataScreen(void) static void Task_DoClearSaveDataScreenYesNo(u8 taskId) { SetWindowBorderStyle(0, 0, 2, 14); - PrintTextOnWindow(0, 1, gText_ClearAllSaveData, 0, 1, 0, 0); + AddTextPrinterParameterized(0, 1, gText_ClearAllSaveData, 0, 1, 0, 0); CreateYesNoMenu(sClearSaveYesNo, 2, 14, 1); gTasks[taskId].func = Task_ClearSaveDataScreenYesNoChoice; } @@ -90,7 +90,7 @@ static void Task_ClearSaveDataScreenYesNoChoice(u8 taskId) { case 0: FillWindowPixelBuffer(0, 17); - PrintTextOnWindow(0, 1, gText_ClearingData, 0, 1, 0, 0); + AddTextPrinterParameterized(0, 1, gText_ClearingData, 0, 1, 0, 0); gTasks[taskId].func = Task_ClearSaveData; break; case 1: diff --git a/src/coins.c b/src/coins.c index 12e0bd4ef..967eb92ac 100644 --- a/src/coins.c +++ b/src/coins.c @@ -19,7 +19,7 @@ void PrintCoinsString(u32 coinAmount) StringExpandPlaceholders(gStringVar4, gText_Coins); xAlign = GetStringRightAlignXOffset(1, gStringVar4, 0x40); - PrintTextOnWindow(sCoinsWindowId, 1, gStringVar4, xAlign, 1, 0, NULL); + AddTextPrinterParameterized(sCoinsWindowId, 1, gStringVar4, xAlign, 1, 0, NULL); } void ShowCoinsWindow(u32 coinAmount, u8 x, u8 y) diff --git a/src/credits.c b/src/credits.c index c054958ce..8e641fdb5 100644 --- a/src/credits.c +++ b/src/credits.c @@ -1189,7 +1189,7 @@ static void sub_81755BC(const u8 *string, u8 y, u8 a2) } x = GetStringCenterAlignXOffsetWithLetterSpacing(1, string, 0xF0, 1); - AddTextPrinterParameterized2(0, 1, x, y, 1, 0, color, -1, string); + AddTextPrinterParameterized4(0, 1, x, y, 1, 0, color, -1, string); } void sub_8175620(void) diff --git a/src/decoration.c b/src/decoration.c index b21d51278..442c66d7f 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -499,7 +499,7 @@ void sub_8126B80(u8 taskId) void sub_8126C08(void) { FillWindowPixelBuffer(0, 0x11); - AddTextPrinterParameterized(0, 1, sSecretBasePCMenuItemDescriptions[sSecretBasePCMenuCursorPos], 0, 0, 2, 1, 3); + AddTextPrinterParameterized2(0, 1, sSecretBasePCMenuItemDescriptions[sSecretBasePCMenuCursorPos], 0, 0, 2, 1, 3); } void SecretBasePC_Decorate(u8 taskId) @@ -622,7 +622,7 @@ void sub_8126E8C(u8 taskId) sub_8126F68(r5, i, 8, i << 4, FALSE, 0xFF); } } - PrintTextOnWindow(r5, 1, gTasks[taskId].data[11] == 2 ? gText_Exit : gText_Cancel, 8, (i << 4) + 1, 0, 0); + AddTextPrinterParameterized(r5, 1, gTasks[taskId].data[11] == 2 ? gText_Exit : gText_Cancel, 8, (i << 4) + 1, 0, 0); schedule_bg_copy_tilemap_to_vram(0); } @@ -636,12 +636,12 @@ void sub_8126F68(u8 winid, u8 decorCat, u8 x, u8 y, bool8 flag, u8 speed) sub_8127058(gStringVar4, flag); strbuf = StringLength(gStringVar4) + gStringVar4; StringCopy(strbuf, sDecorCatNames[decorCat]); - PrintTextOnWindow(winid, 1, gStringVar4, x, y, speed, NULL); + AddTextPrinterParameterized(winid, 1, gStringVar4, x, y, speed, NULL); strbuf = ConvertIntToDecimalStringN(strbuf, CountDecorationCategoryN(decorCat), STR_CONV_MODE_RIGHT_ALIGN, 2); *strbuf++ = CHAR_SLASH; ConvertIntToDecimalStringN(strbuf, gDecorationInventories[decorCat].size, STR_CONV_MODE_RIGHT_ALIGN, 2); x = GetStringRightAlignXOffset(1, gStringVar4, width); - PrintTextOnWindow(winid, 1, gStringVar4, x, y, speed, NULL); + AddTextPrinterParameterized(winid, 1, gStringVar4, x, y, speed, NULL); } void sub_8127058(u8 *str, bool8 flag) @@ -932,7 +932,7 @@ void sub_8127744(u32 a0) { txt = gDecorations[gCurDecorInventoryItems[a0]].description; } - PrintTextOnWindow(winidx, 1, txt, 0, 1, 0, 0); + AddTextPrinterParameterized(winidx, 1, txt, 0, 1, 0, 0); } void sub_81277A8(void) diff --git a/src/diploma.c b/src/diploma.c index 599ceec72..8e0b48ed3 100644 --- a/src/diploma.c +++ b/src/diploma.c @@ -17,7 +17,7 @@ extern int decompress_and_copy_tile_data_to_vram(u8 bg_id, void *src, int size, extern bool8 free_temp_tile_data_buffers_if_possible(void); extern void sub_80861E8(void); // rom4 extern bool16 sub_80C0944(void); -extern void AddTextPrinterParameterized2(u8 windowId, u8 fontId, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 *color, s8 speed, u8 *str); +extern void AddTextPrinterParameterized4(u8 windowId, u8 fontId, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 *color, s8 speed, u8 *str); extern u16 gUnknown_0860F074[]; @@ -210,5 +210,5 @@ static void PrintDiplomaText(u8 *text, u8 var1, u8 var2) { u8 color[3] = {0, 2, 3}; - AddTextPrinterParameterized2(0, 1, var1, var2, 0, 0, color, -1, text); + AddTextPrinterParameterized4(0, 1, var1, var2, 0, 0, color, -1, text); } diff --git a/src/egg_hatch.c b/src/egg_hatch.c index 1c626cc86..f72ca04a3 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -856,7 +856,7 @@ static void EggHatchPrintMessage(u8 windowId, u8* string, u8 x, u8 y, u8 speed) sEggHatchData->textColor[0] = 0; sEggHatchData->textColor[1] = 5; sEggHatchData->textColor[2] = 6; - AddTextPrinterParameterized2(windowId, 1, x, y, 0, 0, sEggHatchData->textColor, speed, string); + AddTextPrinterParameterized4(windowId, 1, x, y, 0, 0, sEggHatchData->textColor, speed, string); } u8 GetEggStepsToSubtract(void) diff --git a/src/field_region_map.c b/src/field_region_map.c index f56548068..14b4cdd2f 100644 --- a/src/field_region_map.c +++ b/src/field_region_map.c @@ -126,7 +126,7 @@ static void FieldUpdateRegionMap(void) case 1: SetWindowBorderStyle(1, 0, 0x27, 0xd); offset = GetStringCenterAlignXOffset(1, gText_Hoenn, 0x38); - PrintTextOnWindow(1, 1, gText_Hoenn, offset, 1, 0, NULL); + AddTextPrinterParameterized(1, 1, gText_Hoenn, offset, 1, 0, NULL); schedule_bg_copy_tilemap_to_vram(0); SetWindowBorderStyle(0, 0, 0x27, 0xd); PrintRegionMapSecName(); @@ -182,7 +182,7 @@ static void PrintRegionMapSecName(void) if (sFieldRegionMapHandler->regionMap.iconDrawType != MAPSECTYPE_NONE) { FillWindowPixelBuffer(0, 0x11); - PrintTextOnWindow(0, 1, sFieldRegionMapHandler->regionMap.mapSecName, 0, 1, 0, NULL); + AddTextPrinterParameterized(0, 1, sFieldRegionMapHandler->regionMap.mapSecName, 0, 1, 0, NULL); schedule_bg_copy_tilemap_to_vram(0); } else diff --git a/src/field_specials.c b/src/field_specials.c index 84852e6b5..a6c0a1baf 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -1836,10 +1836,10 @@ void sub_8139B60(void) SetStandardWindowBorderStyle(gUnknown_0203AB5E, 0); xPos = GetStringCenterAlignXOffset(1, gText_ElevatorNowOn, 64); - PrintTextOnWindow(gUnknown_0203AB5E, 1, gText_ElevatorNowOn, xPos, 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gUnknown_0203AB5E, 1, gText_ElevatorNowOn, xPos, 1, TEXT_SPEED_FF, NULL); xPos = GetStringCenterAlignXOffset(1, gElevatorFloorsTable[gSpecialVar_0x8005], 64); - PrintTextOnWindow(gUnknown_0203AB5E, 1, gElevatorFloorsTable[gSpecialVar_0x8005], xPos, 17, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gUnknown_0203AB5E, 1, gElevatorFloorsTable[gSpecialVar_0x8005], xPos, 17, TEXT_SPEED_FF, NULL); PutWindowTilemap(gUnknown_0203AB5E); CopyWindowToVram(gUnknown_0203AB5E, 3); @@ -2178,13 +2178,13 @@ void sub_8139F20(void) } break; case 5: - if (gSaveBlock2Ptr->frontier.field_DE2[0] >= gSaveBlock2Ptr->frontier.field_DE2[1]) + if (gSaveBlock2Ptr->frontier.field_DE2[0][0] >= gSaveBlock2Ptr->frontier.field_DE2[0][1]) { - unk = gSaveBlock2Ptr->frontier.field_DE2[0]; + unk = gSaveBlock2Ptr->frontier.field_DE2[0][0]; } else { - unk = gSaveBlock2Ptr->frontier.field_DE2[1]; + unk = gSaveBlock2Ptr->frontier.field_DE2[0][1]; } break; case 6: @@ -3063,7 +3063,7 @@ void sub_813A8FC(void) u32 x; StringCopy(ConvertIntToDecimalStringN(string, gSaveBlock2Ptr->frontier.frontierBattlePoints, STR_CONV_MODE_RIGHT_ALIGN, 4), gText_BP); x = GetStringRightAlignXOffset(1, string, 48); - PrintTextOnWindow(gUnknown_0203AB6D, 1, string, x, 1, 0, NULL); + AddTextPrinterParameterized(gUnknown_0203AB6D, 1, string, x, 1, 0, NULL); } void sub_813A958(void) @@ -3201,7 +3201,7 @@ static void sub_813AA60(u16 a0, u16 a1) switch (a0) { case 3: - AddTextPrinterParameterized(0, 1, gUnknown_085B3170[a1], 0, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, 1, gUnknown_085B3170[a1], 0, NULL, 2, 1, 3); if (gUnknown_085B312C[a1] == 0xFFFF) { sub_813ABD4(gUnknown_085B312C[a1]); @@ -3214,7 +3214,7 @@ static void sub_813AA60(u16 a0, u16 a1) } break; case 4: - AddTextPrinterParameterized(0, 1, gUnknown_085B319C[a1], 0, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, 1, gUnknown_085B319C[a1], 0, NULL, 2, 1, 3); if (gUnknown_085B3142[a1] == 0xFFFF) { sub_813ABD4(gUnknown_085B3142[a1]); @@ -3227,11 +3227,11 @@ static void sub_813AA60(u16 a0, u16 a1) } break; case 5: - AddTextPrinterParameterized(0, 1, gUnknown_085B31B4[a1], 0, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, 1, gUnknown_085B31B4[a1], 0, NULL, 2, 1, 3); sub_813ABD4(gUnknown_085B314E[a1]); break; case 6: - AddTextPrinterParameterized(0, 1, gUnknown_085B31D0[a1], 0, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, 1, gUnknown_085B31D0[a1], 0, NULL, 2, 1, 3); sub_813ABD4(gUnknown_085B315C[a1]); break; } @@ -3339,11 +3339,11 @@ static void sub_813AD34(u8 a0, u16 a1) FillWindowPixelRect(gUnknown_0203AB5E, 0x11, 0, 0, 96, 48); if (a0 == 10) { - PrintTextOnWindow(gUnknown_0203AB5E, 1, gUnknown_085B3254[a1], 0, 1, 0, NULL); + AddTextPrinterParameterized(gUnknown_0203AB5E, 1, gUnknown_085B3254[a1], 0, 1, 0, NULL); } else { - PrintTextOnWindow(gUnknown_0203AB5E, 1, gUnknown_085B3228[a1], 0, 1, 0, NULL); + AddTextPrinterParameterized(gUnknown_0203AB5E, 1, gUnknown_085B3228[a1], 0, 1, 0, NULL); } } } @@ -3367,10 +3367,10 @@ void sub_813ADD4(void) for (i = 0; i < 6; i++) { - sub_8199F74(task->data[13], 1, gUnknown_085B2CF0[gSpecialVar_0x8004][scrollOffset + i], 10, i * 16, TEXT_SPEED_FF, NULL, 0, 0); + AddTextPrinterParameterized5(task->data[13], 1, gUnknown_085B2CF0[gSpecialVar_0x8004][scrollOffset + i], 10, i * 16, TEXT_SPEED_FF, NULL, 0, 0); } - PrintTextOnWindow(task->data[13], 1, gText_SelectorArrow, 0, selectedRow * 16, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(task->data[13], 1, gText_SelectorArrow, 0, selectedRow * 16, TEXT_SPEED_FF, NULL); PutWindowTilemap(task->data[13]); CopyWindowToVram(task->data[13], 3); } diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index 081c963ee..b739ba66d 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -531,7 +531,7 @@ static void Task_Hof_InitTeamSaveData(u8 taskId) *lastSavedTeam = *sHofMonPtr; NewMenuHelpers_DrawDialogueFrame(0, 0); - AddTextPrinterParameterized(0, 1, gText_SavingDontTurnOffPower, 0, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, 1, gText_SavingDontTurnOffPower, 0, NULL, 2, 1, 3); CopyWindowToVram(0, 3); gTasks[taskId].func = Task_Hof_TrySaveData; } @@ -738,7 +738,7 @@ static void Task_Hof_WaitAndPrintPlayerInfo(u8 taskId) FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20); HallOfFame_PrintPlayerInfo(1, 2); NewMenuHelpers_DrawDialogueFrame(0, 0); - AddTextPrinterParameterized(0, 1, gText_LeagueChamp, 0, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, 1, gText_LeagueChamp, 0, NULL, 2, 1, 3); CopyWindowToVram(0, 3); gTasks[taskId].func = Task_Hof_ExitOnKeyPressed; } @@ -1107,7 +1107,7 @@ static void Task_HofPC_PrintDataIsCorrupted(u8 taskId) { sub_8198180(gText_UnkCtrlF800Exit, 8, 1); NewMenuHelpers_DrawDialogueFrame(0, 0); - AddTextPrinterParameterized(0, 1, gText_HOFCorrupted, 0, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, 1, gText_HOFCorrupted, 0, NULL, 2, 1, 3); CopyWindowToVram(0, 3); gTasks[taskId].func = Task_HofPC_ExitOnButtonPress; } diff --git a/src/item_menu.c b/src/item_menu.c index f58c2b8b3..c9b19fc3f 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -884,7 +884,7 @@ void sub_81ABC54(u8 a, s16 b) u8 r3 = (gUnknown_0203CE58.pocket == 3) ? 3 : 2; ConvertIntToDecimalStringN(gStringVar1, b, 2, r3); StringExpandPlaceholders(gStringVar4, gText_xVar1); - PrintTextOnWindow(a, 1, gStringVar4, GetStringCenterAlignXOffset(1, gStringVar4, 0x28), 2, 0, 0); + AddTextPrinterParameterized(a, 1, gStringVar4, GetStringCenterAlignXOffset(1, gStringVar4, 0x28), 2, 0, 0); } void sub_81ABCC0(int a, int b, int c) @@ -892,7 +892,7 @@ void sub_81ABCC0(int a, int b, int c) u8 r3 = (gUnknown_0203CE58.pocket == 3) ? 3 : 2; ConvertIntToDecimalStringN(gStringVar1, b, 2, r3); StringExpandPlaceholders(gStringVar4, gText_xVar1); - PrintTextOnWindow(a, 1, gStringVar4, 0, 1, -1, 0); + AddTextPrinterParameterized(a, 1, gStringVar4, 0, 1, -1, 0); PrintMoneyAmount(a, 0x26, 1, c, 0); } @@ -2118,7 +2118,7 @@ void setup_bag_menu_textboxes(void) void bag_menu_print(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 h) { - AddTextPrinterParameterized2(windowId, fontId, left, top, letterSpacing, lineSpacing, gUnknown_08614164[h], speed, str); + AddTextPrinterParameterized4(windowId, fontId, left, top, letterSpacing, lineSpacing, gUnknown_08614164[h], speed, str); } u8 sub_81AE124(u8 a) diff --git a/src/learn_move.c b/src/learn_move.c index e288a393d..ff23cb3dc 100644 --- a/src/learn_move.c +++ b/src/learn_move.c @@ -632,7 +632,7 @@ static void HideSpritesAndPrintTeachText(bool8 a) { StringExpandPlaceholders(gStringVar4, gText_TeachWhichMoveToPkmn); FillWindowPixelBuffer(3, 0x11); - PrintTextOnWindow(3, 1, gStringVar4, 0, 1, 0, NULL); + AddTextPrinterParameterized(3, 1, gStringVar4, 0, 1, 0, NULL); } } @@ -696,7 +696,7 @@ static void ShowTeachMoveText(bool8 showContest) { StringExpandPlaceholders(gStringVar4, gText_TeachWhichMoveToPkmn); FillWindowPixelBuffer(3, 0x11); - PrintTextOnWindow(3, 1, gStringVar4, 0, 1, 0, NULL); + AddTextPrinterParameterized(3, 1, gStringVar4, 0, 1, 0, NULL); } } diff --git a/src/list_menu.c b/src/list_menu.c index 6b5c3af94..ec45ba3e4 100644 --- a/src/list_menu.c +++ b/src/list_menu.c @@ -600,7 +600,7 @@ static void ListMenuPrint(struct ListMenu *list, const u8 *str, u8 x, u8 y) colors[0] = gListMenuOverride.fillValue; colors[1] = gListMenuOverride.cursorPal; colors[2] = gListMenuOverride.cursorShadowPal; - AddTextPrinterParameterized2(list->template.windowId, + AddTextPrinterParameterized4(list->template.windowId, gListMenuOverride.fontId, x, y, gListMenuOverride.lettersSpacing, @@ -613,7 +613,7 @@ static void ListMenuPrint(struct ListMenu *list, const u8 *str, u8 x, u8 y) colors[0] = list->template.fillValue; colors[1] = list->template.cursorPal; colors[2] = list->template.cursorShadowPal; - AddTextPrinterParameterized2(list->template.windowId, + AddTextPrinterParameterized4(list->template.windowId, list->template.fontId, x, y, list->template.lettersSpacing, diff --git a/src/main_menu.c b/src/main_menu.c index b4b343fc6..19f11efab 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -1820,7 +1820,7 @@ void set_default_player_name(u8 nameId) void CreateMainMenuErrorWindow(const u8* str) { FillWindowPixelBuffer(7, 17); - PrintTextOnWindow(7, 1, str, 0, 1, 2, 0); + AddTextPrinterParameterized(7, 1, str, 0, 1, 2, 0); PutWindowTilemap(7); CopyWindowToVram(7, 2); DrawMainMenuWindowBorder(sWindowTemplate_ErrorWindow, MAIN_MENU_BORDER_TILE); diff --git a/src/map_name_popup.c b/src/map_name_popup.c index 578636d40..1876f2ca4 100644 --- a/src/map_name_popup.c +++ b/src/map_name_popup.c @@ -251,7 +251,7 @@ static void ShowMapNamePopUpWindow(void) mapDisplayHeader[0] = EXT_CTRL_CODE_BEGIN; mapDisplayHeader[1] = EXT_CTRL_CODE_HIGHLIGHT; mapDisplayHeader[2] = TEXT_COLOR_TRANSPARENT; - PrintTextOnWindow(GetMapNamePopUpWindowId(), 7, mapDisplayHeader, x, 3, 0xFF, NULL); + AddTextPrinterParameterized(GetMapNamePopUpWindowId(), 7, mapDisplayHeader, x, 3, 0xFF, NULL); CopyWindowToVram(GetMapNamePopUpWindowId(), 3); } diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index 591e3ad9a..6ebc7affa 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -438,7 +438,7 @@ static void BardSong_TextSubPrinter(struct TextSubPrinter * printer, u16 a1) static void sub_8120708(const u8 * src) { NewMenuHelpers_DrawDialogueFrame(0, 0); - PrintTextOnWindow(0, 1, src, 0, 1, 1, BardSong_TextSubPrinter); + AddTextPrinterParameterized(0, 1, src, 0, 1, 1, BardSong_TextSubPrinter); gUnknown_03002F84 = TRUE; CopyWindowToVram(0, 3); } @@ -1160,9 +1160,9 @@ static void PrintStoryList(void) u16 gameStatID = sStorytellerPtr->gameStatIDs[i]; if (gameStatID == 0) break; - PrintTextOnWindow(sStorytellerWindowId, 1, GetStoryTitleByStat(gameStatID), 8, 16 * i + 1, 0xFF, NULL); + AddTextPrinterParameterized(sStorytellerWindowId, 1, GetStoryTitleByStat(gameStatID), 8, 16 * i + 1, 0xFF, NULL); } - PrintTextOnWindow(sStorytellerWindowId, 1, gText_Exit, 8, 16 * i + 1, 0xFF, NULL); + AddTextPrinterParameterized(sStorytellerWindowId, 1, gText_Exit, 8, 16 * i + 1, 0xFF, NULL); InitMenuInUpperLeftCornerPlaySoundWhenAPressed(sStorytellerWindowId, GetFreeStorySlot() + 1, 0); CopyWindowToVram(sStorytellerWindowId, 3); } diff --git a/src/menu.c b/src/menu.c index 7c9c2f8a8..38d355cf2 100644 --- a/src/menu.c +++ b/src/menu.c @@ -149,7 +149,7 @@ u16 sub_8197224(void) return IsTextPrinterActive(0); } -u16 AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 speed, void (*callback)(struct TextSubPrinter *, u16), u8 fgColor, u8 bgColor, u8 shadowColor) +u16 AddTextPrinterParameterized2(u8 windowId, u8 fontId, const u8 *str, u8 speed, void (*callback)(struct TextSubPrinter *, u16), u8 fgColor, u8 bgColor, u8 shadowColor) { struct TextSubPrinter printer; @@ -175,19 +175,19 @@ void AddTextPrinterForMessage(bool8 allowSkippingDelayWithButtonPress) { void (*callback)(struct TextSubPrinter *, u16) = NULL; gTextFlags.flag_0 = allowSkippingDelayWithButtonPress; - AddTextPrinterParameterized(0, 1, gStringVar4, GetPlayerTextSpeed(), callback, 2, 1, 3); + AddTextPrinterParameterized2(0, 1, gStringVar4, GetPlayerTextSpeed(), callback, 2, 1, 3); } void AddTextPrinterForMessage_2(bool8 allowSkippingDelayWithButtonPress) { gTextFlags.flag_0 = allowSkippingDelayWithButtonPress; - AddTextPrinterParameterized(0, 1, gStringVar4, GetPlayerTextSpeed(), NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, 1, gStringVar4, GetPlayerTextSpeed(), NULL, 2, 1, 3); } void AddTextPrinterWithCustomSpeedForMessage(bool8 allowSkippingDelayWithButtonPress, u8 speed) { gTextFlags.flag_0 = allowSkippingDelayWithButtonPress; - AddTextPrinterParameterized(0, 1, gStringVar4, speed, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, 1, gStringVar4, speed, NULL, 2, 1, 3); } void sub_81973A4(void) @@ -525,7 +525,7 @@ void RemoveMapNamePopUpWindow(void) void AddTextPrinterWithCallbackForMessage(bool8 a1, void (*callback)(struct TextSubPrinter *, u16)) { gTextFlags.flag_0 = a1; - AddTextPrinterParameterized(0, 1, gStringVar4, GetPlayerTextSpeed(), callback, 2, 1, 3); + AddTextPrinterParameterized2(0, 1, gStringVar4, GetPlayerTextSpeed(), callback, 2, 1, 3); } void sub_8197AE8(bool8 copyToVram) @@ -843,7 +843,7 @@ void sub_8198204(const u8 *string, const u8 *string2, u8 a3, u8 a4, bool8 copyTo 0, string2); } - AddTextPrinterParameterized2(gUnknown_0203CDA0, 1, 4, 1, 0, 0, color, 0, string); + AddTextPrinterParameterized4(gUnknown_0203CDA0, 1, 4, 1, 0, 0, color, 0, string); if (copyToVram) CopyWindowToVram(gUnknown_0203CDA0, 3); } @@ -918,7 +918,7 @@ void RedrawMenuCursor(u8 oldPos, u8 newPos) width = GetMenuCursorDimensionByFont(gUnknown_0203CD90.fontId, 0); height = GetMenuCursorDimensionByFont(gUnknown_0203CD90.fontId, 1); FillWindowPixelRect(gUnknown_0203CD90.windowId, 0x11, gUnknown_0203CD90.left, gUnknown_0203CD90.optionHeight * oldPos + gUnknown_0203CD90.top, width, height); - PrintTextOnWindow(gUnknown_0203CD90.windowId, gUnknown_0203CD90.fontId, gText_SelectorArrow3, gUnknown_0203CD90.left, gUnknown_0203CD90.optionHeight * newPos + gUnknown_0203CD90.top, 0, 0); + AddTextPrinterParameterized(gUnknown_0203CD90.windowId, gUnknown_0203CD90.fontId, gText_SelectorArrow3, gUnknown_0203CD90.left, gUnknown_0203CD90.optionHeight * newPos + gUnknown_0203CD90.top, 0, 0); } u8 MoveMenuCursor(s8 cursorDelta) @@ -1079,7 +1079,7 @@ void PrintTextArray(u8 windowId, u8 fontId, u8 left, u8 top, u8 lineHeight, u8 i u8 i; for (i = 0; i < itemCount; i++) { - PrintTextOnWindow(windowId, fontId, strs[i].text, left, (lineHeight * i) + top, 0xFF, NULL); + AddTextPrinterParameterized(windowId, fontId, strs[i].text, left, (lineHeight * i) + top, 0xFF, NULL); } CopyWindowToVram(windowId, 2); } @@ -1089,7 +1089,7 @@ void sub_81987BC(u8 windowId, u8 fontId, u8 left, u8 top, u8 lineHeight, u8 item u8 i; for (i = 0; i < itemCount; i++) { - sub_8199F74(windowId, fontId, strs[i].text, left, (lineHeight * i) + top, 0xFF, NULL, a6, a7); + AddTextPrinterParameterized5(windowId, fontId, strs[i].text, left, (lineHeight * i) + top, 0xFF, NULL, a6, a7); } CopyWindowToVram(windowId, 2); } @@ -1209,7 +1209,7 @@ void sub_8198C94(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 a5, u8 a6, u { for (j = 0; j < a6; j++) { - PrintTextOnWindow(windowId, fontId, strs[(i * a6) + j].text, (a4 * j) + left, (a5 * i) + top, 0xFF, NULL); + AddTextPrinterParameterized(windowId, fontId, strs[(i * a6) + j].text, (a4 * j) + left, (a5 * i) + top, 0xFF, NULL); } } CopyWindowToVram(windowId, 2); @@ -1303,7 +1303,7 @@ void sub_8199060(u8 oldCursorPos, u8 newCursorPos) cursorHeight); xPos = (newCursorPos % gUnknown_0203CD90.horizontalCount) * gUnknown_0203CD90.optionWidth + gUnknown_0203CD90.left; yPos = (newCursorPos / gUnknown_0203CD90.horizontalCount) * gUnknown_0203CD90.optionHeight + gUnknown_0203CD90.top; - PrintTextOnWindow(gUnknown_0203CD90.windowId, + AddTextPrinterParameterized(gUnknown_0203CD90.windowId, gUnknown_0203CD90.fontId, gText_SelectorArrow3, xPos, @@ -1588,7 +1588,7 @@ void PrintMenuTable(u8 windowId, u8 itemCount, const struct MenuAction *strs) for (i = 0; i < itemCount; i++) { - PrintTextOnWindow(windowId, 1, strs[i].text, 8, (i * 16) + 1, 0xFF, NULL); + AddTextPrinterParameterized(windowId, 1, strs[i].text, 8, (i * 16) + 1, 0xFF, NULL); } CopyWindowToVram(windowId, 2); @@ -1654,7 +1654,7 @@ void sub_81997AC(u8 windowId, u8 a4, u8 a6, u8 a7, const struct MenuAction *strs { for (j = 0; j < a6; j++) { - PrintTextOnWindow(windowId, 1, strs[(i * a6) + j].text, (a4 * j) + 8, (i * 16) + 1, 0xFF, NULL); + AddTextPrinterParameterized(windowId, 1, strs[(i * a6) + j].text, (a4 * j) + 8, (i * 16) + 1, 0xFF, NULL); } } CopyWindowToVram(windowId, 2); @@ -1946,7 +1946,7 @@ void AddTextPrinterParameterized3(u8 windowId, u8 fontId, u8 left, u8 top, const AddTextPrinter(&printer, speed, NULL); } -void AddTextPrinterParameterized2(u8 windowId, u8 fontId, u8 left, u8 top, u8 letterSpacing, u8 lineSpacing, const u8 *color, s8 speed, const u8 *str) +void AddTextPrinterParameterized4(u8 windowId, u8 fontId, u8 left, u8 top, u8 letterSpacing, u8 lineSpacing, const u8 *color, s8 speed, const u8 *str) { struct TextSubPrinter printer; @@ -1967,7 +1967,7 @@ void AddTextPrinterParameterized2(u8 windowId, u8 fontId, u8 left, u8 top, u8 le AddTextPrinter(&printer, speed, NULL); } -void sub_8199F74(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top, u8 speed, void (*callback)(struct TextSubPrinter *, u16), u8 letterSpacing, u8 lineSpacing) +void AddTextPrinterParameterized5(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top, u8 speed, void (*callback)(struct TextSubPrinter *, u16), u8 letterSpacing, u8 lineSpacing) { struct TextSubPrinter printer; @@ -1997,7 +1997,7 @@ void PrintPlayerNameOnWindow(u8 windowId, const u8 *src, u16 x, u16 y) StringExpandPlaceholders(gStringVar4, src); - PrintTextOnWindow(windowId, 1, gStringVar4, x, y, 0xFF, 0); + AddTextPrinterParameterized(windowId, 1, gStringVar4, x, y, 0xFF, 0); } //Screw this function, it's long and unreferenced and ugh diff --git a/src/menu_helpers.c b/src/menu_helpers.c index 217fdabae..0f6d5aa38 100644 --- a/src/menu_helpers.c +++ b/src/menu_helpers.c @@ -137,7 +137,7 @@ void DisplayMessageAndContinueTask(u8 taskId, u8 windowId, u16 arg2, u8 arg3, u8 StringExpandPlaceholders(gStringVar4, string); gTextFlags.flag_0 = 1; - AddTextPrinterParameterized(windowId, fontId, gStringVar4, textSpeed, NULL, 2, 1, 3); + AddTextPrinterParameterized2(windowId, fontId, gStringVar4, textSpeed, NULL, 2, 1, 3); gUnknown_0300117C = taskFunc; gTasks[taskId].func = Task_ContinueTaskAfterMessagePrints; } diff --git a/src/money.c b/src/money.c index 98f25a42a..7b78dda92 100644 --- a/src/money.c +++ b/src/money.c @@ -152,7 +152,7 @@ void PrintMoneyAmount(u8 windowId, u8 x, u8 y, int amount, u8 speed) *(txtPtr++) = 0x77; StringExpandPlaceholders(txtPtr, gText_PokedollarVar1); - PrintTextOnWindow(windowId, 1, gStringVar4, x, y, speed, NULL); + AddTextPrinterParameterized(windowId, 1, gStringVar4, x, y, speed, NULL); } void PrintMoneyAmountInMoneyBoxWithBorder(u8 windowId, u16 tileStart, u8 pallete, int amount) diff --git a/src/mystery_event_menu.c b/src/mystery_event_menu.c index 68f31584b..d3119190c 100644 --- a/src/mystery_event_menu.c +++ b/src/mystery_event_menu.c @@ -298,5 +298,5 @@ static void PrintMysteryMenuText(u8 windowId, const u8 *text, u8 x, u8 y, s32 sp textColor[2] = 3; FillWindowPixelBuffer(windowId, (textColor[0]) | (textColor[0] << 4)); - AddTextPrinterParameterized2(windowId, 1, x, y, letterSpacing, lineSpacing, textColor, speed, text); + AddTextPrinterParameterized4(windowId, 1, x, y, letterSpacing, lineSpacing, textColor, speed, text); } diff --git a/src/naming_screen.c b/src/naming_screen.c index 35a05499b..c5a44cb82 100644 --- a/src/naming_screen.c +++ b/src/naming_screen.c @@ -531,7 +531,7 @@ static void DisplaySentToPCMessage(void) StringExpandPlaceholders(gStringVar4, gUnknown_0858BDB8[stringToDisplay]); NewMenuHelpers_DrawDialogueFrame(0, 0); gTextFlags.flag_0 = TRUE; - AddTextPrinterParameterized(0, 1, gStringVar4, GetPlayerTextSpeed(), 0, 2, 1, 3); + AddTextPrinterParameterized2(0, 1, gStringVar4, GetPlayerTextSpeed(), 0, 2, 1, 3); CopyWindowToVram(0, 3); } @@ -1447,7 +1447,7 @@ static void HandleDpadMovement(struct Task *task) static void sub_80E4894(void) { FillWindowPixelBuffer(gNamingScreenData->windows[3], 0x11); - PrintTextOnWindow(gNamingScreenData->windows[3], 1, gNamingScreenData->template->title, 8, 1, 0, 0); + AddTextPrinterParameterized(gNamingScreenData->windows[3], 1, gNamingScreenData->template->title, 8, 1, 0, 0); PutWindowTilemap(gNamingScreenData->windows[3]); } @@ -1458,7 +1458,7 @@ static void sub_80E48E8(void) StringCopy(buffer, gSpeciesNames[gNamingScreenData->monSpecies]); StringAppendN(buffer, gNamingScreenData->template->title, 15); FillWindowPixelBuffer(gNamingScreenData->windows[3], 0x11); - PrintTextOnWindow(gNamingScreenData->windows[3], 1, buffer, 8, 1, 0, 0); + AddTextPrinterParameterized(gNamingScreenData->windows[3], 1, buffer, 8, 1, 0, 0); PutWindowTilemap(gNamingScreenData->windows[3]); } @@ -1652,7 +1652,7 @@ static void sub_80E4D10(void) temp[1] = gExpandedPlaceholder_Empty[0]; unk2 = (sub_80E503C(temp[0]) == 1) ? 2 : 0; - PrintTextOnWindow(gNamingScreenData->windows[2], 1, temp, i * 8 + unk + unk2, 1, 0xFF, NULL); + AddTextPrinterParameterized(gNamingScreenData->windows[2], 1, temp, i * 8 + unk + unk2, 1, 0xFF, NULL); } sub_80E498C(); diff --git a/src/option_menu.c b/src/option_menu.c index fc0c0c24e..a650545b1 100644 --- a/src/option_menu.c +++ b/src/option_menu.c @@ -379,7 +379,7 @@ static void DrawOptionMenuChoice(const u8 *text, u8 x, u8 y, u8 style) } dst[i] = EOS; - PrintTextOnWindow(WIN_OPTIONS, 1, dst, x, y + 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(WIN_OPTIONS, 1, dst, x, y + 1, TEXT_SPEED_FF, NULL); } static u8 TextSpeed_ProcessInput(u8 selection) @@ -605,7 +605,7 @@ static void ButtonMode_DrawChoices(u8 selection) static void DrawTextOption(void) { FillWindowPixelBuffer(WIN_TEXT_OPTION, 0x11); - PrintTextOnWindow(WIN_TEXT_OPTION, 1, gText_Option, 8, 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(WIN_TEXT_OPTION, 1, gText_Option, 8, 1, TEXT_SPEED_FF, NULL); CopyWindowToVram(WIN_TEXT_OPTION, 3); } @@ -616,7 +616,7 @@ static void DrawOptionMenuTexts(void) FillWindowPixelBuffer(WIN_OPTIONS, 0x11); for (i = 0; i < MENUITEM_COUNT; i++) { - PrintTextOnWindow(WIN_OPTIONS, 1, sOptionMenuItemsNames[i], 8, (i * 16) + 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(WIN_OPTIONS, 1, sOptionMenuItemsNames[i], 8, (i * 16) + 1, TEXT_SPEED_FF, NULL); } CopyWindowToVram(WIN_OPTIONS, 3); } diff --git a/src/player_pc.c b/src/player_pc.c index ef00e2e06..b09db0e73 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -371,7 +371,7 @@ static void InitItemStorageMenu(u8 taskId, u8 var) static void ItemStorageMenuPrint(const u8 *textPtr) { NewMenuHelpers_DrawDialogueFrame(0, 0); - PrintTextOnWindow(0, 1, textPtr, 0, 1, 0, 0); + AddTextPrinterParameterized(0, 1, textPtr, 0, 1, 0, 0); } static void ItemStorageMenuProcessInput(u8 taskId) @@ -544,7 +544,7 @@ static void Mailbox_DrawMailboxMenu(u8 taskId) windowId = sub_81D1C84(0); sub_81D1C84(1); - PrintTextOnWindow(windowId, 1, gText_Mailbox, GetStringCenterAlignXOffset(1, gText_Mailbox, 0x40), 1, 0, NULL); + AddTextPrinterParameterized(windowId, 1, gText_Mailbox, GetStringCenterAlignXOffset(1, gText_Mailbox, 0x40), 1, 0, NULL); schedule_bg_copy_tilemap_to_vram(0); gTasks[taskId].data[5] = sub_81D1DC0(&playerPCItemPageInfo); sub_81D1E90(&playerPCItemPageInfo); @@ -883,7 +883,7 @@ static void fish4_goto_x5_or_x6(u8 windowId, s32 id, u8 yOffset) } ConvertIntToDecimalStringN(gStringVar1, gSaveBlock1Ptr->pcItems[id].quantity, STR_CONV_MODE_RIGHT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_xVar1); - PrintTextOnWindow(windowId, 7, gStringVar4, GetStringRightAlignXOffset(7, gStringVar4, 104), yOffset, 0xFF, NULL); + AddTextPrinterParameterized(windowId, 7, gStringVar4, GetStringRightAlignXOffset(7, gStringVar4, 104), yOffset, 0xFF, NULL); } } @@ -897,7 +897,7 @@ static void sub_816BEF0(s32 id) else description = ItemStorage_GetItemPcResponse(ITEMPC_GO_BACK_TO_PREV); FillWindowPixelBuffer(windowId, 17); - PrintTextOnWindow(windowId, 1, description, 0, 1, 0, NULL); + AddTextPrinterParameterized(windowId, 1, description, 0, 1, 0, NULL); } static void ItemStorage_StartScrollIndicator(void) @@ -926,7 +926,7 @@ static void sub_816BFE0(u8 y, u8 b, u8 speed) if(b == 0xFF) FillWindowPixelRect(windowId, 17, 0, y, GetMenuCursorDimensionByFont(1, 0), GetMenuCursorDimensionByFont(1, 1)); else - AddTextPrinterParameterized2(windowId, 1, 0, y, 0, 0, gUnknown_085DFF8C, speed, gText_SelectorArrow2); + AddTextPrinterParameterized4(windowId, 1, 0, y, 0, 0, gUnknown_085DFF8C, speed, gText_SelectorArrow2); } static void sub_816C060(u16 itemId) @@ -988,7 +988,7 @@ static void ItemStorage_ProcessWithdrawTossInput(u8 taskId) if(!toss) text = gText_WithdrawItem; x = GetStringCenterAlignXOffset(1, text, 104); - PrintTextOnWindow(gUnknown_0203BCC4->windowIds[3], 1, text, x, 1, 0, NULL); + AddTextPrinterParameterized(gUnknown_0203BCC4->windowIds[3], 1, text, x, 1, 0, NULL); CopyWindowToVram(gUnknown_0203BCC4->windowIds[2], 2); sub_816C110(); sub_816C140(); @@ -1044,7 +1044,7 @@ static void ItemStorage_PrintItemPcResponse(const u8 *string) u8 windowId = gUnknown_0203BCC4->windowIds[1]; FillWindowPixelBuffer(windowId, 0x11); StringExpandPlaceholders(gStringVar4, string); - PrintTextOnWindow(windowId, 1, gStringVar4, 0, 1, 0, NULL); + AddTextPrinterParameterized(windowId, 1, gStringVar4, 0, 1, 0, NULL); } static void ItemStorage_ProcessInput(u8 taskId) @@ -1202,7 +1202,7 @@ static void sub_816C6BC(u8 windowId, u16 value, u32 mode, u8 x, u8 y, u8 n) { ConvertIntToDecimalStringN(gStringVar1, value, mode, n); StringExpandPlaceholders(gStringVar4, gText_xVar1); - PrintTextOnWindow(windowId, 1, gStringVar4, GetStringCenterAlignXOffset(1, gStringVar4, 48), y, 0, NULL); + AddTextPrinterParameterized(windowId, 1, gStringVar4, GetStringCenterAlignXOffset(1, gStringVar4, 48), y, 0, NULL); } static void ItemStorage_DoItemAction(u8 taskId) diff --git a/src/pokeblock.c b/src/pokeblock.c index e615693b9..ea38c559d 100644 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -580,7 +580,7 @@ static void HandleInitWindows(void) static void PrintOnPokeblockWindow(u8 windowId, const u8 *string, s32 x) { - AddTextPrinterParameterized2(windowId, 1, x, 1, 0, 0, sTextColorInPokeblockMenu, 0, string); + AddTextPrinterParameterized4(windowId, 1, x, 1, 0, 0, sTextColorInPokeblockMenu, 0, string); } static void PutPokeblockInfoText(void) diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c index 5f06ed7e8..1449d4a00 100644 --- a/src/pokeblock_feed.c +++ b/src/pokeblock_feed.c @@ -789,7 +789,7 @@ static void Task_HandleMonAtePokeblock(u8 taskId) StringExpandPlaceholders(gStringVar4, gText_Var1DisdainfullyAteVar2); gTextFlags.flag_0 = 1; - AddTextPrinterParameterized(0, 1, gStringVar4, GetPlayerTextSpeed(), NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, 1, gStringVar4, GetPlayerTextSpeed(), NULL, 2, 1, 3); gTasks[taskId].func = Task_WaitForAtePokeblockText; } diff --git a/src/pokedex.c b/src/pokedex.c index 2cb3c153f..d27f0d89c 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -1637,7 +1637,7 @@ void sub_80BCE2C(u8 windowId, u8 fontId, const u8* str, u8 left, u8 top) color[0] = 0; color[1] = 15; color[2] = 3; - AddTextPrinterParameterized2(windowId, fontId, left * 8, (top * 8) + 1, 0, 0, color, -1, str); + AddTextPrinterParameterized4(windowId, fontId, left * 8, (top * 8) + 1, 0, 0, color, -1, str); } void sub_80BCE84(u8 a, u16 b, u16 c) @@ -2450,7 +2450,7 @@ void sub_80BE8DC(const u8* str, u8 left, u8 top) color[1] = 15; color[2] = 3; - AddTextPrinterParameterized2(0, 1, left, top, 0, 0, color, -1, str); + AddTextPrinterParameterized4(0, 1, left, top, 0, 0, color, -1, str); } u8 sub_80BE91C(struct PokedexListItem* item, u8 b) @@ -4065,7 +4065,7 @@ void sub_80C0A88(u8 windowId, const u8 *str, u8 left, u8 top) color[1] = 15; color[2] = 3; - AddTextPrinterParameterized2(windowId, 1, left, top, 0, 0, color, -1, str); + AddTextPrinterParameterized4(windowId, 1, left, top, 0, 0, color, -1, str); } void sub_80C0AC4(u8 windowId, u16 order, u8 left, u8 top) @@ -4368,7 +4368,7 @@ void sub_80C1270(const u8 *str, u32 left, u32 top) color[0] = 0; color[1] = 15; color[2] = 2; - AddTextPrinterParameterized2(0, 1, left, top, 0, 0, color, -1, str); + AddTextPrinterParameterized4(0, 1, left, top, 0, 0, color, -1, str); } void sub_80C12B0(u32 x, u32 y, u32 width, u32 height) diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index eae868134..031f704a4 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -258,7 +258,7 @@ void Task_PokemonStorageSystem(u8 taskId) sub_81973A4(); NewMenuHelpers_DrawDialogueFrame(0, 0); FillWindowPixelBuffer(0, 0x11); - AddTextPrinterParameterized(0, 1, gUnknown_085716C0[task->data[1]].desc, TEXT_SPEED_FF, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, 1, gUnknown_085716C0[task->data[1]].desc, TEXT_SPEED_FF, NULL, 2, 1, 3); CopyWindowToVram(0, 3); CopyWindowToVram(task->data[15], 3); task->data[0]++; @@ -284,7 +284,7 @@ void Task_PokemonStorageSystem(u8 taskId) { task->data[1] = task->data[3]; FillWindowPixelBuffer(0, 0x11); - AddTextPrinterParameterized(0, 1, gUnknown_085716C0[task->data[1]].desc, 0, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, 1, gUnknown_085716C0[task->data[1]].desc, 0, NULL, 2, 1, 3); } break; case -1: @@ -299,13 +299,13 @@ void Task_PokemonStorageSystem(u8 taskId) if (task->data[2] == 0 && CountPartyMons() == PARTY_SIZE) { FillWindowPixelBuffer(0, 0x11); - AddTextPrinterParameterized(0, 1, gText_PartyFull, 0, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, 1, gText_PartyFull, 0, NULL, 2, 1, 3); task->data[0] = 3; } else if (task->data[2] == 1 && CountPartyMons() == 1) { FillWindowPixelBuffer(0, 0x11); - AddTextPrinterParameterized(0, 1, gText_JustOnePkmn, 0, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, 1, gText_JustOnePkmn, 0, NULL, 2, 1, 3); task->data[0] = 3; } else @@ -320,7 +320,7 @@ void Task_PokemonStorageSystem(u8 taskId) if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { FillWindowPixelBuffer(0, 0x11); - AddTextPrinterParameterized(0, 1, gUnknown_085716C0[task->data[1]].desc, 0, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, 1, gUnknown_085716C0[task->data[1]].desc, 0, NULL, 2, 1, 3); task->data[0] = 2; } else if (gMain.newKeys & DPAD_UP) @@ -330,7 +330,7 @@ void Task_PokemonStorageSystem(u8 taskId) MoveMenuCursor(-1); task->data[1] = GetMenuCursorPos(); FillWindowPixelBuffer(0, 0x11); - AddTextPrinterParameterized(0, 1, gUnknown_085716C0[task->data[1]].desc, 0, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, 1, gUnknown_085716C0[task->data[1]].desc, 0, NULL, 2, 1, 3); task->data[0] = 2; } else if (gMain.newKeys & DPAD_DOWN) @@ -340,7 +340,7 @@ void Task_PokemonStorageSystem(u8 taskId) MoveMenuCursor(1); task->data[1] = GetMenuCursorPos(); FillWindowPixelBuffer(0, 0x11); - AddTextPrinterParameterized(0, 1, gUnknown_085716C0[task->data[1]].desc, 0, NULL, 2, 1, 3); + AddTextPrinterParameterized2(0, 1, gUnknown_085716C0[task->data[1]].desc, 0, NULL, 2, 1, 3); task->data[0] = 2; } break; diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index 9648747e7..baf4b128e 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -2379,7 +2379,7 @@ static void sub_81C2554(void) static void SummaryScreen_PrintTextOnWindow(u8 windowId, const u8 *string, u8 x, u8 y, u8 lineSpacing, u8 colorId) { - AddTextPrinterParameterized2(windowId, 1, x, y, 0, lineSpacing, sTextColors_861CD2C[colorId], 0, string); + AddTextPrinterParameterized4(windowId, 1, x, y, 0, lineSpacing, sTextColors_861CD2C[colorId], 0, string); } static void sub_81C25E8(void) diff --git a/src/record_mixing.c b/src/record_mixing.c index 552c32d38..6c6f69fa8 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -306,7 +306,7 @@ static void ReceiveExchangePacket(u32 which) static void PrintTextOnRecordMixing(const u8 *src) { NewMenuHelpers_DrawDialogueFrame(0, 0); - PrintTextOnWindow(0, 1, src, 0, 1, 0, NULL); + AddTextPrinterParameterized(0, 1, src, 0, 1, 0, NULL); CopyWindowToVram(0, 3); } diff --git a/src/region_map.c b/src/region_map.c index 3214ae185..e06d121e9 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -1631,7 +1631,7 @@ void MCB2_FlyMap(void) LoadPalette(sRegionMapFramePal, 0x10, 0x20); PutWindowTilemap(2); FillWindowPixelBuffer(2, 0x00); - PrintTextOnWindow(2, 1, gText_FlyToWhere, 0, 1, 0, NULL); + AddTextPrinterParameterized(2, 1, gText_FlyToWhere, 0, 1, 0, NULL); schedule_bg_copy_tilemap_to_vram(0); gMain.state++; break; @@ -1697,9 +1697,9 @@ static void sub_8124904(void) flag = TRUE; sub_8198070(0, FALSE); SetWindowBorderStyle(1, FALSE, 0x65, 0x0d); - PrintTextOnWindow(1, 1, sFlyMap->regionMap.mapSecName, 0, 1, 0, NULL); + AddTextPrinterParameterized(1, 1, sFlyMap->regionMap.mapSecName, 0, 1, 0, NULL); name = gUnknown_085A1EDC[i].name[sFlyMap->regionMap.posWithinMapSec]; - PrintTextOnWindow(1, 1, name, GetStringRightAlignXOffset(1, name, 0x60), 0x11, 0, NULL); + AddTextPrinterParameterized(1, 1, name, GetStringRightAlignXOffset(1, name, 0x60), 0x11, 0, NULL); schedule_bg_copy_tilemap_to_vram(0); gUnknown_03001180 = TRUE; } @@ -1717,7 +1717,7 @@ static void sub_8124904(void) { FillWindowPixelBuffer(0, 0x11); } - PrintTextOnWindow(0, 1, sFlyMap->regionMap.mapSecName, 0, 1, 0, NULL); + AddTextPrinterParameterized(0, 1, sFlyMap->regionMap.mapSecName, 0, 1, 0, NULL); schedule_bg_copy_tilemap_to_vram(0); gUnknown_03001180 = FALSE; } diff --git a/src/reset_rtc_screen.c b/src/reset_rtc_screen.c index 416a8da9d..34444cbf4 100644 --- a/src/reset_rtc_screen.c +++ b/src/reset_rtc_screen.c @@ -314,14 +314,14 @@ static void PrintTime(u8 windowId, u8 x, u8 y, u16 days, u8 hours, u8 minutes, u ConvertIntToDecimalStringN(gStringVar1, seconds, 2, 2); dest = StringCopy(dest, gStringVar1); - PrintTextOnWindow(windowId, 1, gStringVar4, x, y, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(windowId, 1, gStringVar4, x, y, TEXT_SPEED_FF, NULL); } static void ShowChooseTimeWindow(u8 windowId, u16 days, u8 hours, u8 minutes, u8 seconds) { SetWindowBorderStyle(windowId, FALSE, 0x214, 0xE); PrintTime(windowId, 0, 1, days, hours, minutes, seconds); - PrintTextOnWindow(windowId, 1, gText_Confirm2, 126, 1, 0, NULL); + AddTextPrinterParameterized(windowId, 1, gText_Confirm2, 126, 1, 0, NULL); schedule_bg_copy_tilemap_to_vram(0); } @@ -496,7 +496,7 @@ static void VBlankCB(void) static void ShowMessage(const u8 *str) { sub_8197B1C(1, FALSE, 0x200, 0xF); - PrintTextOnWindow(1, 1, str, 0, 1, 0, NULL); + AddTextPrinterParameterized(1, 1, str, 0, 1, 0, NULL); schedule_bg_copy_tilemap_to_vram(0); } @@ -508,7 +508,7 @@ static void Task_ShowResetRtcPrompt(u8 taskId) { case 0: SetWindowBorderStyle(0, FALSE, 0x214, 0xE); - PrintTextOnWindow(0, 1, gText_PresentTime, 0, 1, TEXT_SPEED_FF, 0); + AddTextPrinterParameterized(0, 1, gText_PresentTime, 0, 1, TEXT_SPEED_FF, 0); PrintTime( 0, 0, @@ -517,7 +517,7 @@ static void Task_ShowResetRtcPrompt(u8 taskId) gLocalTime.hours, gLocalTime.minutes, gLocalTime.seconds); - PrintTextOnWindow(0, 1, gText_PreviousTime, 0, 33, TEXT_SPEED_FF, 0); + AddTextPrinterParameterized(0, 1, gText_PreviousTime, 0, 33, TEXT_SPEED_FF, 0); PrintTime( 0, 0, diff --git a/src/save_failed_screen.c b/src/save_failed_screen.c index b207d7e74..4c1da8620 100644 --- a/src/save_failed_screen.c +++ b/src/save_failed_screen.c @@ -173,7 +173,7 @@ static void SaveFailedScreenTextPrint(u8 *text, u8 var1, u8 var2) color[0] = 0; color[1] = 15; color[2] = 3; - AddTextPrinterParameterized2(gSaveFailedWindowIds[TEXT_WIN_ID], 1, var1 * 8, var2 * 8 + 1, 0, 0, color, 0, text); + AddTextPrinterParameterized4(gSaveFailedWindowIds[TEXT_WIN_ID], 1, var1 * 8, var2 * 8 + 1, 0, 0, color, 0, text); } void DoSaveFailedScreen(u8 saveType) diff --git a/src/scrcmd.c b/src/scrcmd.c index 01d04704a..b9a8a37af 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -1304,7 +1304,7 @@ bool8 ScrCmd_cmdDB(struct ScriptContext *ctx) msg = (const u8 *)ctx->data[0]; sub_81973A4(); NewMenuHelpers_DrawDialogueFrame(0, 1); - PrintTextOnWindow(0, 1, msg, 0, 1, 0, 0); + AddTextPrinterParameterized(0, 1, msg, 0, 1, 0, 0); return FALSE; } @@ -1521,7 +1521,7 @@ bool8 ScrCmd_braillemessage(struct ScriptContext *ctx) NewMenuHelpers_DrawStdWindowFrame(gUnknown_03000F30, 0); PutWindowTilemap(gUnknown_03000F30); FillWindowPixelBuffer(gUnknown_03000F30, 0x11); - PrintTextOnWindow(gUnknown_03000F30, 6, gStringVar4, xText, yText, 0xFF, 0x0); + AddTextPrinterParameterized(gUnknown_03000F30, 6, gStringVar4, xText, yText, 0xFF, 0x0); CopyWindowToVram(gUnknown_03000F30, 3); return FALSE; } diff --git a/src/slot_machine.c b/src/slot_machine.c index 6b6a46cf8..ed00f41c2 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -725,7 +725,7 @@ extern const u8 gText_YouveRunOutOfCoins[]; bool8 sub_8101F44(struct Task *task) { NewMenuHelpers_DrawDialogueFrame(0, 0); - PrintTextOnWindow(0, 1, gText_YouDontHaveThreeCoins, 0, 1, 0, 0); + AddTextPrinterParameterized(0, 1, gText_YouDontHaveThreeCoins, 0, 1, 0, 0); CopyWindowToVram(0, 3); sSlotMachine->state = 7; return FALSE; @@ -966,7 +966,7 @@ bool8 sub_81022F0(struct Task *task) bool8 sub_8102318(struct Task *task) { NewMenuHelpers_DrawDialogueFrame(0, 0); - PrintTextOnWindow(0, 1, gText_QuitTheGame, 0, 1, 0, 0); + AddTextPrinterParameterized(0, 1, gText_QuitTheGame, 0, 1, 0, 0); CopyWindowToVram(0, 3); sub_80323CC(0x15, 7, 0x214, 0x180, 0xE, 0xF); sSlotMachine->state = 22; @@ -996,7 +996,7 @@ bool8 sub_8102344(struct Task *task) bool8 sub_810239C(struct Task *task) { NewMenuHelpers_DrawDialogueFrame(0, 0); - PrintTextOnWindow(0, 1, gText_YouveGot9999Coins, 0, 1, 0, 0); + AddTextPrinterParameterized(0, 1, gText_YouveGot9999Coins, 0, 1, 0, 0); CopyWindowToVram(0, 3); sSlotMachine->state = 24; return FALSE; @@ -1015,7 +1015,7 @@ bool8 sub_81023B8(struct Task *task) bool8 sub_81023E0_(struct Task *task) { NewMenuHelpers_DrawDialogueFrame(0, 0); - PrintTextOnWindow(0, 1, gText_YouveRunOutOfCoins, 0, 1, 0, 0); + AddTextPrinterParameterized(0, 1, gText_YouveRunOutOfCoins, 0, 1, 0, 0); CopyWindowToVram(0, 3); sSlotMachine->state = 26; return FALSE; diff --git a/src/start_menu.c b/src/start_menu.c index 4a58c146e..56dad89f7 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -377,7 +377,7 @@ static void ShowSafariBallsWindow(void) NewMenuHelpers_DrawStdWindowFrame(sSafariBallsWindowId, FALSE); ConvertIntToDecimalStringN(gStringVar1, gNumSafariBalls, STR_CONV_MODE_RIGHT_ALIGN, 2); StringExpandPlaceholders(gStringVar4, gText_SafariBallStock); - PrintTextOnWindow(sSafariBallsWindowId, 1, gStringVar4, 0, 1, 0xFF, NULL); + AddTextPrinterParameterized(sSafariBallsWindowId, 1, gStringVar4, 0, 1, 0xFF, NULL); CopyWindowToVram(sSafariBallsWindowId, 2); } @@ -392,7 +392,7 @@ static void ShowPyramidFloorWindow(void) NewMenuHelpers_DrawStdWindowFrame(sBattlePyramidFloorWindowId, FALSE); StringCopy(gStringVar1, sPyramindFloorNames[gSaveBlock2Ptr->frontier.field_CB2]); StringExpandPlaceholders(gStringVar4, gText_BattlePyramidFloor); - PrintTextOnWindow(sBattlePyramidFloorWindowId, 1, gStringVar4, 0, 1, 0xFF, NULL); + AddTextPrinterParameterized(sBattlePyramidFloorWindowId, 1, gStringVar4, 0, 1, 0xFF, NULL); CopyWindowToVram(sBattlePyramidFloorWindowId, 2); } @@ -422,7 +422,7 @@ static bool32 PrintStartMenuActions(s8 *pIndex, u32 count) } else { StringExpandPlaceholders(gStringVar4, sStartMenuItems[sCurrentStartMenuActions[index]].text); - PrintTextOnWindow(GetStartMenuWindowId(), 1, gStringVar4, 8, (index << 4) + 9, 0xFF, NULL); + AddTextPrinterParameterized(GetStartMenuWindowId(), 1, gStringVar4, 8, (index << 4) + 9, 0xFF, NULL); } index++; @@ -1249,7 +1249,7 @@ static void sub_80A0550(u8 taskId) { case 0: FillWindowPixelBuffer(0, 17); - AddTextPrinterParameterized(0, + AddTextPrinterParameterized2(0, 1, gText_SavingDontTurnOffPower, 255, @@ -1342,38 +1342,38 @@ static void ShowSaveInfoWindow(void) // Print region name yOffset = 1; sub_819A344(3, gStringVar4, TEXT_COLOR_GREEN); - PrintTextOnWindow(sSaveInfoWindowId, 1, gStringVar4, 0, yOffset, 0xFF, NULL); + AddTextPrinterParameterized(sSaveInfoWindowId, 1, gStringVar4, 0, yOffset, 0xFF, NULL); // Print player name yOffset = 0x11; - PrintTextOnWindow(sSaveInfoWindowId, 1, gText_SavingPlayer, 0, yOffset, 0xFF, NULL); + AddTextPrinterParameterized(sSaveInfoWindowId, 1, gText_SavingPlayer, 0, yOffset, 0xFF, NULL); sub_819A344(0, gStringVar4, color); xOffset = GetStringRightAlignXOffset(1, gStringVar4, 0x70); PrintPlayerNameOnWindow(sSaveInfoWindowId, gStringVar4, xOffset, yOffset); // Print badge count yOffset = 0x21; - PrintTextOnWindow(sSaveInfoWindowId, 1, gText_SavingBadges, 0, yOffset, 0xFF, NULL); + AddTextPrinterParameterized(sSaveInfoWindowId, 1, gText_SavingBadges, 0, yOffset, 0xFF, NULL); sub_819A344(4, gStringVar4, color); xOffset = GetStringRightAlignXOffset(1, gStringVar4, 0x70); - PrintTextOnWindow(sSaveInfoWindowId, 1, gStringVar4, xOffset, yOffset, 0xFF, NULL); + AddTextPrinterParameterized(sSaveInfoWindowId, 1, gStringVar4, xOffset, yOffset, 0xFF, NULL); if (FlagGet(FLAG_SYS_POKEDEX_GET) == TRUE) { // Print pokedex count yOffset = 0x31; - PrintTextOnWindow(sSaveInfoWindowId, 1, gText_SavingPokedex, 0, yOffset, 0xFF, NULL); + AddTextPrinterParameterized(sSaveInfoWindowId, 1, gText_SavingPokedex, 0, yOffset, 0xFF, NULL); sub_819A344(1, gStringVar4, color); xOffset = GetStringRightAlignXOffset(1, gStringVar4, 0x70); - PrintTextOnWindow(sSaveInfoWindowId, 1, gStringVar4, xOffset, yOffset, 0xFF, NULL); + AddTextPrinterParameterized(sSaveInfoWindowId, 1, gStringVar4, xOffset, yOffset, 0xFF, NULL); } // Print play time yOffset += 0x10; - PrintTextOnWindow(sSaveInfoWindowId, 1, gText_SavingTime, 0, yOffset, 0xFF, NULL); + AddTextPrinterParameterized(sSaveInfoWindowId, 1, gText_SavingTime, 0, yOffset, 0xFF, NULL); sub_819A344(2, gStringVar4, color); xOffset = GetStringRightAlignXOffset(1, gStringVar4, 0x70); - PrintTextOnWindow(sSaveInfoWindowId, 1, gStringVar4, xOffset, yOffset, 0xFF, NULL); + AddTextPrinterParameterized(sSaveInfoWindowId, 1, gStringVar4, xOffset, yOffset, 0xFF, NULL); CopyWindowToVram(sSaveInfoWindowId, 2); } diff --git a/src/starter_choose.c b/src/starter_choose.c index 5625b6184..80d909c26 100644 --- a/src/starter_choose.c +++ b/src/starter_choose.c @@ -189,7 +189,7 @@ static void Task_StarterChoose1(u8 taskId) { CreateStarterPokemonLabel(gTasks[taskId].tStarterSelection); SetWindowBorderStyle(0, FALSE, 0x2A8, 0xD); - PrintTextOnWindow(0, 1, gText_BirchInTrouble, 0, 1, 0, NULL); + AddTextPrinterParameterized(0, 1, gText_BirchInTrouble, 0, 1, 0, NULL); PutWindowTilemap(0); schedule_bg_copy_tilemap_to_vram(0); gTasks[taskId].func = Task_StarterChoose2; @@ -243,7 +243,7 @@ static void Task_StarterChoose4(u8 taskId) { PlayCry1(GetStarterPokemon(gTasks[taskId].tStarterSelection), 0); FillWindowPixelBuffer(0, 0x11); - PrintTextOnWindow(0, 1, gText_ConfirmStarterChoice, 0, 1, 0, NULL); + AddTextPrinterParameterized(0, 1, gText_ConfirmStarterChoice, 0, 1, 0, NULL); schedule_bg_copy_tilemap_to_vram(0); CreateYesNoMenu(&gUnknown_085B1DDC, 0x2A8, 0xD, 0); gTasks[taskId].func = Task_StarterChoose5; diff --git a/src/text.c b/src/text.c index ed70f767b..e5a9feed8 100644 --- a/src/text.c +++ b/src/text.c @@ -139,14 +139,14 @@ void SetFontsPointer(const struct FontInfo *fonts) gFonts = fonts; } -void DeactivateAllTextPrinters (void) +void DeactivateAllTextPrinters(void) { int printer; for (printer = 0; printer < NUM_TEXT_PRINTERS; ++printer) gTextPrinters[printer].sub_union.sub.active = 0; } -u16 PrintTextOnWindow(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextSubPrinter *, u16)) +u16 AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextSubPrinter *, u16)) { struct TextSubPrinter subPrinter; diff --git a/src/trader.c b/src/trader.c index c4d70ac9a..f081d7e95 100644 --- a/src/trader.c +++ b/src/trader.c @@ -77,11 +77,11 @@ void CreateAvailableDecorationsMenu(u8 taskId) for (i = 0; i < 4; i++) { if (trader->decorIds[i] > NUM_DECORATIONS) - PrintTextOnWindow(data[3], 1, gText_FiveMarks, 8, 16 * i + 1, 255, NULL); + AddTextPrinterParameterized(data[3], 1, gText_FiveMarks, 8, 16 * i + 1, 255, NULL); else - PrintTextOnWindow(data[3], 1, gDecorations[trader->decorIds[i]].name, 8, 16 * i + 1, 255, NULL); + AddTextPrinterParameterized(data[3], 1, gDecorations[trader->decorIds[i]].name, 8, 16 * i + 1, 255, NULL); } - PrintTextOnWindow(data[3], 1, gText_Exit, 8, 16 * i + 1, 255, NULL); + AddTextPrinterParameterized(data[3], 1, gText_Exit, 8, 16 * i + 1, 255, NULL); InitMenuInUpperLeftCornerPlaySoundWhenAPressed(data[3], 5, 0); schedule_bg_copy_tilemap_to_vram(0); } diff --git a/src/wallclock.c b/src/wallclock.c index 5be20d5c9..138dfcc38 100644 --- a/src/wallclock.c +++ b/src/wallclock.c @@ -639,7 +639,7 @@ void CB2_StartWallClock(void) WallClockInit(); - PrintTextOnWindow(1, 1, gText_Confirm3, 0, 1, 0, NULL); + AddTextPrinterParameterized(1, 1, gText_Confirm3, 0, 1, 0, NULL); PutWindowTilemap(1); schedule_bg_copy_tilemap_to_vram(2); } @@ -687,7 +687,7 @@ void CB2_ViewWallClock(void) WallClockInit(); - PrintTextOnWindow(1, 1, gText_Cancel4, 0, 1, 0, NULL); + AddTextPrinterParameterized(1, 1, gText_Cancel4, 0, 1, 0, NULL); PutWindowTilemap(1); schedule_bg_copy_tilemap_to_vram(2); } @@ -754,7 +754,7 @@ static void Task_SetClock2(u8 taskId) static void Task_SetClock3(u8 taskId) { SetWindowBorderStyle(0, FALSE, 0x250, 0x0d); - PrintTextOnWindow(0, 1, gText_IsThisTheCorrectTime, 0, 1, 0, NULL); + AddTextPrinterParameterized(0, 1, gText_IsThisTheCorrectTime, 0, 1, 0, NULL); PutWindowTilemap(0); schedule_bg_copy_tilemap_to_vram(0); CreateYesNoMenu(&gUnknown_085B21F4, 0x250, 0x0d, 1); -- cgit v1.2.3 From 6454740587f9a97105c45d54bf4284015a20d6d1 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 9 Sep 2018 13:12:26 +0200 Subject: More battle factory --- src/battle_factory.c | 576 ++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 479 insertions(+), 97 deletions(-) (limited to 'src') diff --git a/src/battle_factory.c b/src/battle_factory.c index 6d7514504..f85a14b48 100644 --- a/src/battle_factory.c +++ b/src/battle_factory.c @@ -78,8 +78,8 @@ struct FactorySelectMonsStruct u8 unused8; struct FactorySelecteableMon mons[SELECTABLE_MONS_COUNT]; struct UnkFactoryStruct unk294[3]; - u8 unk2A0; - u8 palBlendTaskId; + bool8 unk2A0; + u8 fadeSpeciesNameTaskId; bool8 unk2A2; u16 unk2A4; bool8 unk2A6; @@ -88,12 +88,14 @@ struct FactorySelectMonsStruct u8 unk2A9; }; -// 'Action' refers to the Cancel, Pknm for swap windows. +// 'Action' refers to the 3 Selectable mons, Cancel, Pknm for swap windows. +#define ACTIONS_PLAYER_SCREEN 0 +#define ACTIONS_ENEMY_SCREEN 1 -struct UnkField18Struct +struct SwapActionIdAndFunc { - u8 unk0; - u8 unk1[7]; + u8 id; + void (*func)(u8 taskId); }; struct FactorySwapMonsStruct @@ -106,19 +108,19 @@ struct FactorySwapMonsStruct u8 ballSpriteIds[3]; u8 unk8[2][3]; u8 unkE[2][2]; - u8 unk12; - u8 unk13; - u8 actionsState; + u8 playerMonId; + u8 enemyMonId; + bool8 inEnemyScreen; bool8 fromSummaryScreen; u8 yesNoCursorPos; u8 actionsCount; - struct UnkField18Struct *unk18; + const struct SwapActionIdAndFunc *actionsData; u8 unk1C; u8 unk1D; u8 unk1E; u8 unk1F; - u8 unk20; - u8 palBlendTaskId; + bool8 monSwapped; + u8 fadeSpeciesNameTaskId; u8 unk22; u8 unk23; u16 unk24; @@ -127,7 +129,7 @@ struct FactorySwapMonsStruct u8 unk28; u8 unk29; struct UnkFactoryStruct unk2C; - u8 unk30; + bool8 unk30; }; extern u8 (*gUnknown_030062E8)(void); @@ -146,7 +148,7 @@ static void CB2_InitSelectScreen(void); static void Select_SetWinRegs(s16 mWin0H, s16 nWin0H, s16 mWin0V, s16 nWin0V); static void Select_InitMonsData(void); static void Select_InitAllSprites(void); -static void Select_ShowCheckedMonSprite(void); +static void Select_ShowSummaryMonSprite(void); static void Select_PrintSelectMonString(void); static void Select_PrintMonSpecies(void); static void Select_PrintMonCategory(void); @@ -158,17 +160,17 @@ static void sub_819C568(void); static void Select_ShowMenuOptions(void); static void Select_PrintMenuOptions(void); static void Select_PrintYesNoOptions(void); -static void Task_SelectBlendPalette(u8 taskId); +static void Task_SelectFadeSpeciesName(u8 taskId); static void sub_819C1D0(u8 taskId); static void Task_HandleSelectionScreenChooseMons(u8 taskId); static void Task_HandleSelectionScreenMenu(u8 taskId); static void CreateFrontierFactorySelectableMons(u8 firstMonId); static void CreateTentFactorySelectableMons(u8 firstMonId); static void Select_SetBallSpritePaletteNum(u8 id); -void sub_819F444(struct UnkFactoryStruct arg0, u8 *arg1); +void sub_819F444(struct UnkFactoryStruct arg0, bool8 *arg1); static void sub_819B958(u8 windowId); -void sub_819F2B4(u8 *arg0, u8 *arg1, u8 arg2); -void sub_819F3F8(struct UnkFactoryStruct arg0, u8 *arg1, u8 arg2); +void sub_819F2B4(u8 *arg0, bool8 *arg1, bool8 swapScreen); +void sub_819F3F8(struct UnkFactoryStruct arg0, bool8 *arg1, bool8 swapScreen); static u8 Select_RunMenuOptionFunc(void); static u8 sub_819BC9C(void); static u8 Select_OptionSummary(void); @@ -187,6 +189,7 @@ void sub_819EA64(u8 windowId); void sub_819D770(u8 taskId); void Task_HandleSwapScreenChooseMons(u8 taskId); void sub_819D588(u8 taskId); +void sub_819F7B4(u8 taskId); void Swap_PrintOnInfoWindow(const u8 *str); void Swap_ShowMenuOptions(void); void Swap_PrintMenuOptions(void); @@ -204,12 +207,15 @@ void Swap_ShowSummaryMonSprite(void); void Swap_UpdateActionCursorPosition(s8 direction); void Swap_UpdateBallCursorPosition(s8 direction); void Swap_RunMenuOptionFunc(u8 taskId); -void sub_819F184(u8 taskId); +void Swap_RunActionFunc(u8 taskId); +void Task_SwapCantHaveSameMons(u8 taskId); void Swap_PrintActionStrings(void); void Swap_PrintActionStrings2(void); -void Swap_PrintActionStrings3(u8 arg0); -void sub_819F048(u8 arg0); +void Swap_PrintOneActionString(u8 which); +void Swap_InitActions(u8 id); void sub_819E838(u8 arg0); +bool8 Swap_AlreadyHasSameSpecies(u8 monId); +void sub_819F600(struct Sprite *sprite); // Ewram variables EWRAM_DATA u8 *gUnknown_0203CE2C = NULL; @@ -224,7 +230,7 @@ EWRAM_DATA u8 *gUnknown_0203CE4C = NULL; // IWRAM bss IWRAM_DATA struct FactorySelectMonsStruct *sFactorySelectScreen; -IWRAM_DATA u8 (*gUnknown_03001280)(void); +IWRAM_DATA void (*gUnknown_03001280)(u8 taskId); IWRAM_DATA struct FactorySwapMonsStruct *sFactorySwapScreen; // Const rom data. @@ -276,6 +282,8 @@ u8 (* const sSelect_MenuOptionFuncs[])(void) = [MENU_OTHERS] = Select_OptionOthers }; +extern void (* const sSwap_MenuOptionFuncs[])(u8 taskId); + extern const struct BgTemplate gUnknown_08610428[3]; extern const struct BgTemplate gUnknown_086108B8[4]; extern const struct WindowTemplate gUnknown_08610434[]; @@ -290,6 +298,7 @@ extern const struct SpriteTemplate gUnknown_08610638; extern const u8 gUnknown_08610479[]; extern const u8 gUnknown_08610925[]; extern const u8 gUnknown_08610476[]; +extern const u8 gUnknown_08610922[]; extern const struct SpritePalette gUnknown_086106B0[]; extern const struct SpriteSheet gUnknown_08610650[]; extern const struct CompressedSpriteSheet gUnknown_086106A0[]; @@ -307,16 +316,24 @@ extern const u8 gText_SelectThirdPkmn[]; extern const u8 gText_TheseThreePkmnOkay[]; extern const u8 gText_CantSelectSamePkmn[]; extern const u8 gText_Summary[]; +extern const u8 gText_Rechoose[]; extern const u8 gText_Deselect[]; extern const u8 gText_Rent[]; extern const u8 gText_Others2[]; extern const u8 gText_Yes2[]; +extern const u8 gText_Yes3[]; extern const u8 gText_No2[]; +extern const u8 gText_No3[]; extern const u8 gText_QuitSwapping[]; extern const u8 gText_AcceptThisPkmn[]; extern const u8 gText_SelectPkmnToAccept[]; extern const u8 gText_SelectPkmnToSwap[]; extern const u8 gText_PkmnSwap[]; +extern const u8 gText_Swap[]; +extern const u8 gText_Summary2[]; +extern const u8 gText_PkmnForSwap[]; +extern const u8 gText_SamePkmnInPartyAlready[]; +extern const u8 gText_Cancel3[]; // code void sub_819A44C(struct Sprite *sprite) @@ -468,7 +485,7 @@ static void CB2_InitSelectScreen(void) Select_InitMonsData(); Select_InitAllSprites(); if (sFactorySelectScreen->fromSummaryScreen == TRUE) - Select_ShowCheckedMonSprite(); + Select_ShowSummaryMonSprite(); gMain.state++; break; case 6: @@ -492,16 +509,16 @@ static void CB2_InitSelectScreen(void) gMain.state++; break; case 10: - sFactorySelectScreen->palBlendTaskId = CreateTask(Task_SelectBlendPalette, 0); + sFactorySelectScreen->fadeSpeciesNameTaskId = CreateTask(Task_SelectFadeSpeciesName, 0); if (!sFactorySelectScreen->fromSummaryScreen) { - gTasks[sFactorySelectScreen->palBlendTaskId].data[0] = 0; + gTasks[sFactorySelectScreen->fadeSpeciesNameTaskId].data[0] = 0; taskId = CreateTask(Task_HandleSelectionScreenChooseMons, 0); gTasks[taskId].data[0] = 0; } else { - gTasks[sFactorySelectScreen->palBlendTaskId].data[0] = 1; + gTasks[sFactorySelectScreen->fadeSpeciesNameTaskId].data[0] = 1; sFactorySelectScreen->unk2A2 = FALSE; taskId = CreateTask(Task_HandleSelectionScreenMenu, 0); gTasks[taskId].data[0] = 13; @@ -692,7 +709,7 @@ static void Task_FromSelectScreenToSummaryScreen(u8 taskId) case 7: if (!gPaletteFade.active) { - DestroyTask(sFactorySelectScreen->palBlendTaskId); + DestroyTask(sFactorySelectScreen->fadeSpeciesNameTaskId); sub_819F444(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0); Select_DestroyAllSprites(); FREE_AND_SET_NULL(gUnknown_0203CE2C); @@ -718,7 +735,7 @@ static void Task_FromSelectScreenToSummaryScreen(u8 taskId) static void Task_CloseSelectionScreen(u8 taskId) { - if (sFactorySelectScreen->unk2A0 != 1) + if (sFactorySelectScreen->unk2A0 != TRUE) { switch (gTasks[taskId].data[0]) { @@ -730,7 +747,7 @@ static void Task_CloseSelectionScreen(u8 taskId) if (!UpdatePaletteFade()) { Select_CopyMonsToPlayerParty(); - DestroyTask(sFactorySelectScreen->palBlendTaskId); + DestroyTask(sFactorySelectScreen->fadeSpeciesNameTaskId); Select_DestroyAllSprites(); FREE_AND_SET_NULL(gUnknown_0203CE2C); FREE_AND_SET_NULL(gUnknown_0203CE34); @@ -747,7 +764,7 @@ static void Task_CloseSelectionScreen(u8 taskId) static void Task_HandleSelectionScreenYesNo(u8 taskId) { - if (sFactorySelectScreen->unk2A0 != 1) + if (sFactorySelectScreen->unk2A0 != TRUE) { switch (gTasks[taskId].data[0]) { @@ -808,11 +825,11 @@ static void Task_HandleSelectionScreenMenu(u8 taskId) { case 2: if (!sFactorySelectScreen->fromSummaryScreen) - sub_819F2B4(&sFactorySelectScreen->unk294[1].field1, &sFactorySelectScreen->unk2A0, 0); + sub_819F2B4(&sFactorySelectScreen->unk294[1].field1, &sFactorySelectScreen->unk2A0, FALSE); gTasks[taskId].data[0] = 9; break; case 9: - if (sFactorySelectScreen->unk2A0 != 1) + if (sFactorySelectScreen->unk2A0 != TRUE) { Select_ShowMenuOptions(); sFactorySelectScreen->fromSummaryScreen = FALSE; @@ -850,7 +867,7 @@ static void Task_HandleSelectionScreenMenu(u8 taskId) else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); - sub_819F3F8(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, 0); + sub_819F3F8(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, FALSE); sub_819B958(3); sFactorySelectScreen->unk2A2 = TRUE; gTasks[taskId].data[0] = 1; @@ -888,7 +905,7 @@ static void Task_HandleSelectionScreenMenu(u8 taskId) static void Task_HandleSelectionScreenChooseMons(u8 taskId) { - if (sFactorySelectScreen->unk2A0 != 1) + if (sFactorySelectScreen->unk2A0 != TRUE) { switch (gTasks[taskId].data[0]) { @@ -926,7 +943,7 @@ static void Task_HandleSelectionScreenChooseMons(u8 taskId) if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); - sub_819F3F8(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, 0); + sub_819F3F8(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, FALSE); Select_PrintSelectMonString(); sFactorySelectScreen->unk2A2 = TRUE; gTasks[taskId].data[0] = 1; @@ -1161,7 +1178,7 @@ static u8 Select_OptionRentDeselect(void) } else { - sub_819F3F8(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, 0); + sub_819F3F8(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, FALSE); Select_HandleMonSelectionChange(); Select_PrintSelectMonString(); sub_819B958(3); @@ -1191,7 +1208,7 @@ static u8 Select_OptionSummary(void) static u8 Select_OptionOthers(void) { - sub_819F3F8(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, 0); + sub_819F3F8(sFactorySelectScreen->unk294[1], &sFactorySelectScreen->unk2A0, FALSE); sub_819B958(3); return 1; } @@ -1226,15 +1243,15 @@ void sub_819BD70(void) gSprites[sFactorySelectScreen->unk294[1].field0].centerToCornerVecX = 0; gSprites[sFactorySelectScreen->unk294[1].field0].centerToCornerVecY = 0; - sFactorySelectScreen->unk2A0 = 0; + sFactorySelectScreen->unk2A0 = FALSE; } -void sub_819BE20(u8 arg0) +void sub_819BE20(bool8 arg0) { sFactorySelectScreen->unk2A0 = arg0; } -static void Select_ShowCheckedMonSprite(void) +static void Select_ShowSummaryMonSprite(void) { struct Pokemon *mon; u16 species; @@ -1277,7 +1294,7 @@ static void Select_ShowChosenMonsSprites(void) } } } - sFactorySelectScreen->unk2A0 = 0; + sFactorySelectScreen->unk2A0 = FALSE; } static void sub_819C040(struct Sprite *sprite) @@ -1309,7 +1326,7 @@ static void sub_819C100(struct Sprite *sprite) FreeOamMatrix(gSprites[sFactorySelectScreen->unk294[0].field1].oam.matrixNum); FreeOamMatrix(gSprites[sFactorySelectScreen->unk294[2].field1].oam.matrixNum); - sFactorySelectScreen->unk2A0 = 0; + sFactorySelectScreen->unk2A0 = FALSE; DestroySprite(&gSprites[sFactorySelectScreen->unk294[0].field1]); DestroySprite(&gSprites[sFactorySelectScreen->unk294[2].field1]); @@ -1415,7 +1432,7 @@ static void sub_819C4B4(void) gSprites[sFactorySelectScreen->unk294[0].field1].callback = SpriteCallbackDummy; gSprites[sFactorySelectScreen->unk294[2].field1].callback = SpriteCallbackDummy; - sFactorySelectScreen->unk2A0 = 1; + sFactorySelectScreen->unk2A0 = TRUE; } static void sub_819C568(void) @@ -1429,7 +1446,7 @@ static void sub_819C568(void) taskId = CreateTask(sub_819C2D4, 1); gTasks[taskId].func(taskId); - sFactorySelectScreen->unk2A0 = 1; + sFactorySelectScreen->unk2A0 = TRUE; } static void Select_SetWinRegs(s16 mWin0H, s16 nWin0H, s16 mWin0V, s16 nWin0V) @@ -1464,7 +1481,7 @@ static bool32 Select_AreSpeciesValid(u16 monSetId) return TRUE; } -static void Task_SelectBlendPalette(u8 taskId) +static void Task_SelectFadeSpeciesName(u8 taskId) { switch (gTasks[taskId].data[0]) { @@ -1537,20 +1554,20 @@ void Swap_VblankCb(void) TransferPlttBuffer(); } -void sub_819C810(void) +void CopySwappedMonData(void) { u8 happiness; - gPlayerParty[sFactorySwapScreen->unk12] = gEnemyParty[sFactorySwapScreen->unk13]; + gPlayerParty[sFactorySwapScreen->playerMonId] = gEnemyParty[sFactorySwapScreen->enemyMonId]; happiness = 0; - SetMonData(&gPlayerParty[sFactorySwapScreen->unk12], MON_DATA_FRIENDSHIP, &happiness); - gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->unk12].monId = gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->unk13 + 3].monId; - gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->unk12].ivs = gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->unk13 + 3].ivs; - gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->unk12].personality = GetMonData(&gEnemyParty[sFactorySwapScreen->unk13], MON_DATA_PERSONALITY, NULL); - gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->unk12].abilityBit = GetBoxMonData(&gEnemyParty[sFactorySwapScreen->unk13].box, MON_DATA_ALT_ABILITY, NULL); + SetMonData(&gPlayerParty[sFactorySwapScreen->playerMonId], MON_DATA_FRIENDSHIP, &happiness); + gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->playerMonId].monId = gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->enemyMonId + 3].monId; + gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->playerMonId].ivs = gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->enemyMonId + 3].ivs; + gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->playerMonId].personality = GetMonData(&gEnemyParty[sFactorySwapScreen->enemyMonId], MON_DATA_PERSONALITY, NULL); + gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->playerMonId].abilityBit = GetBoxMonData(&gEnemyParty[sFactorySwapScreen->enemyMonId].box, MON_DATA_ALT_ABILITY, NULL); } -void sub_819C90C(u8 taskId) // Task_FromSelectScreenToSummaryScreen +void Task_FromSwapScreenToSummaryScreen(u8 taskId) { switch (gTasks[taskId].data[0]) { @@ -1561,7 +1578,7 @@ void sub_819C90C(u8 taskId) // Task_FromSelectScreenToSummaryScreen case 7: if (!gPaletteFade.active) { - DestroyTask(sFactorySwapScreen->palBlendTaskId); + DestroyTask(sFactorySwapScreen->fadeSpeciesNameTaskId); sub_819F444(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30); Swap_DestroyAllSprites(); FREE_AND_SET_NULL(gUnknown_0203CE40); @@ -1581,14 +1598,14 @@ void sub_819C90C(u8 taskId) // Task_FromSelectScreenToSummaryScreen } } -void sub_819CA08(u8 taskId) // Task_CloseSelectionScreen +void Task_CloseSwapScreen(u8 taskId) { - if (sFactorySwapScreen->unk30 != 1) + if (sFactorySwapScreen->unk30 != TRUE) { switch (gTasks[taskId].data[0]) { case 0: - if (sFactorySwapScreen->unk20 == 1) + if (sFactorySwapScreen->monSwapped == TRUE) { gTasks[taskId].data[0]++; gSpecialVar_Result = 0; @@ -1600,10 +1617,10 @@ void sub_819CA08(u8 taskId) // Task_CloseSelectionScreen } break; case 1: - if (sFactorySwapScreen->unk20 == 1) + if (sFactorySwapScreen->monSwapped == TRUE) { - sFactorySwapScreen->unk13 = sFactorySwapScreen->cursorPos; - sub_819C810(); + sFactorySwapScreen->enemyMonId = sFactorySwapScreen->cursorPos; + CopySwappedMonData(); } gTasks[taskId].data[0]++; break; @@ -1614,7 +1631,7 @@ void sub_819CA08(u8 taskId) // Task_CloseSelectionScreen case 3: if (!UpdatePaletteFade()) { - DestroyTask(sFactorySwapScreen->palBlendTaskId); + DestroyTask(sFactorySwapScreen->fadeSpeciesNameTaskId); Swap_DestroyAllSprites(); FREE_AND_SET_NULL(gUnknown_0203CE40); FREE_AND_SET_NULL(gUnknown_0203CE44); @@ -1634,7 +1651,7 @@ void Task_HandleSwapScreenYesNo(u8 taskId) { u16 loPtr, hiPtr; - if (sFactorySwapScreen->unk30 != 1) + if (sFactorySwapScreen->unk30 != TRUE) { switch (gTasks[taskId].data[0]) { @@ -1691,7 +1708,7 @@ void sub_819CBDC(u8 taskId) if (gTasks[taskId].data[1] == 1) { gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_819CA08; + gTasks[taskId].func = Task_CloseSwapScreen; } else { @@ -1708,7 +1725,7 @@ void sub_819CC24(u8 taskId) if (gTasks[taskId].data[0] == 0) { Swap_PrintOnInfoWindow(gText_QuitSwapping); - sFactorySwapScreen->unk20 = 0; + sFactorySwapScreen->monSwapped = FALSE; gTasks[taskId].data[0] = 4; gTasks[taskId].data[6] = (u32)(sub_819CBDC) >> 16; gTasks[taskId].data[7] = (u32)(sub_819CBDC); @@ -1718,11 +1735,11 @@ void sub_819CC24(u8 taskId) void sub_819CC74(u8 taskId) { - sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, 1); + sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); if (gTasks[taskId].data[1] == 1) { gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_819CA08; + gTasks[taskId].func = Task_CloseSwapScreen; } else { @@ -1738,9 +1755,9 @@ void sub_819CCD4(u8 taskId) { if (gTasks[taskId].data[0] == 0) { - sub_819F2B4(&sFactorySwapScreen->unk2C.field1, &sFactorySwapScreen->unk30, 1); + sub_819F2B4(&sFactorySwapScreen->unk2C.field1, &sFactorySwapScreen->unk30, TRUE); Swap_PrintOnInfoWindow(gText_AcceptThisPkmn); - sFactorySwapScreen->unk20 = 1; + sFactorySwapScreen->monSwapped = TRUE; gTasks[taskId].data[0] = 4; gTasks[taskId].data[6] = (u32)(sub_819CC74) >> 16; gTasks[taskId].data[7] = (u32)(sub_819CC74); @@ -1754,18 +1771,18 @@ void Task_HandleSwapScreenMenu(u8 taskId) { case 2: if (!sFactorySwapScreen->fromSummaryScreen) - sub_819F2B4(&sFactorySwapScreen->unk2C.field1, &sFactorySwapScreen->unk30, 1); + sub_819F2B4(&sFactorySwapScreen->unk2C.field1, &sFactorySwapScreen->unk30, TRUE); gTasks[taskId].data[0] = 9; break; case 9: - if (sFactorySwapScreen->unk30 != 1) + if (sFactorySwapScreen->unk30 != TRUE) { Swap_ShowMenuOptions(); gTasks[taskId].data[0] = 3; } break; case 3: - if (sFactorySwapScreen->unk30 != 1) + if (sFactorySwapScreen->unk30 != TRUE) { if (gMain.newKeys & A_BUTTON) { @@ -1775,7 +1792,7 @@ void Task_HandleSwapScreenMenu(u8 taskId) else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); - sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, 1); + sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); sub_819EA64(3); gTasks[taskId].data[0] = 0; gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenChooseMons) >> 16; @@ -1814,7 +1831,7 @@ void Task_HandleSwapScreenChooseMons(u8 taskId) sFactorySwapScreen->unk22 = 0; Swap_PrintMonSpecies2(); sub_819EAC0(); - sub_819F184(taskId); + Swap_RunActionFunc(taskId); } else if (gMain.newKeys & B_BUTTON) { @@ -1856,7 +1873,7 @@ void Task_HandleSwapScreenChooseMons(u8 taskId) } } -void Task_SwapBlendPalette(u8 taskId) +void Task_SwapFadeSpeciesName(u8 taskId) { switch (gTasks[taskId].data[0]) { @@ -1911,7 +1928,7 @@ void Task_SwapBlendPalette(u8 taskId) } } -void Task_SwapBlendPalette2(u8 taskId) +void Task_SwapFadeSpeciesName2(u8 taskId) { switch (gTasks[taskId].data[0]) { @@ -2004,7 +2021,7 @@ void sub_819D12C(u8 taskId) { var_2C = gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x; gSprites[sFactorySwapScreen->ballSpriteIds[i]].pos1.x = -16; - if (sFactorySwapScreen->actionsState == 1) + if (sFactorySwapScreen->inEnemyScreen == TRUE) gSprites[sFactorySwapScreen->ballSpriteIds[i]].oam.paletteNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_SELECTED); else gSprites[sFactorySwapScreen->ballSpriteIds[i]].oam.paletteNum = IndexOfSpritePaletteTag(TAG_PAL_BALL_GREY); @@ -2156,7 +2173,7 @@ void sub_819D588(u8 taskId) { FillWindowPixelBuffer(5, 0); CopyWindowToVram(5, 2); - if (sFactorySwapScreen->actionsState == 1) + if (sFactorySwapScreen->inEnemyScreen == TRUE) { anotherTaskId = CreateTask(sub_819D324, 0); gTasks[taskId].data[3] = 0; @@ -2212,13 +2229,13 @@ void sub_819D770(u8 taskId) { u8 anotherTaskId; u16 loPtr, hiPtr; - if (sFactorySwapScreen->unk30 == 1) + if (sFactorySwapScreen->unk30 == TRUE) return; switch (gTasks[taskId].data[0]) { case 0: - if (sFactorySwapScreen->actionsState == 1) + if (sFactorySwapScreen->inEnemyScreen == TRUE) { anotherTaskId = CreateTask(sub_819D324, 0); gTasks[taskId].data[3] = 0; @@ -2273,12 +2290,12 @@ void sub_819D770(u8 taskId) case 4: if (!gPaletteFade.active) { - Swap_PrintActionStrings3(0); + Swap_PrintOneActionString(0); gTasks[taskId].data[0]++; } break; case 5: - Swap_PrintActionStrings3(1); + Swap_PrintOneActionString(1); PutWindowTilemap(3); gTasks[taskId].data[0]++; break; @@ -2288,7 +2305,7 @@ void sub_819D770(u8 taskId) gTasks[taskId].data[0]++; break; case 7: - if (sFactorySwapScreen->actionsState == 0) + if (!sFactorySwapScreen->inEnemyScreen) Swap_PrintOnInfoWindow(gText_SelectPkmnToSwap); else Swap_PrintOnInfoWindow(gText_SelectPkmnToAccept); @@ -2312,7 +2329,7 @@ void sub_819D770(u8 taskId) void sub_819D9EC(u8 taskId) { u8 i; - if (sFactorySwapScreen->unk30 == 1) + if (sFactorySwapScreen->unk30 == TRUE) return; switch (gTasks[taskId].data[0]) @@ -2328,29 +2345,29 @@ void sub_819D9EC(u8 taskId) break; case 2: CreateTask(sub_819D12C, 0); - gTasks[sFactorySwapScreen->palBlendTaskId].func = Task_SwapBlendPalette2; + gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].func = Task_SwapFadeSpeciesName2; gTasks[taskId].data[0]++; break; case 3: - if (!FuncIsActiveTask(sub_819D12C) && gTasks[sFactorySwapScreen->palBlendTaskId].data[4] == 1) + if (!FuncIsActiveTask(sub_819D12C) && gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].data[4] == 1) { sub_819EAC0(); - if (sFactorySwapScreen->actionsState == 0) + if (!sFactorySwapScreen->inEnemyScreen) { - sub_819F048(1); + Swap_InitActions(ACTIONS_ENEMY_SCREEN); } else { - sub_819F048(0); + Swap_InitActions(ACTIONS_PLAYER_SCREEN); for (i = 0; i < 3; i++) gSprites[sFactorySwapScreen->unk8[1][i]].invisible = 1; } gSprites[sFactorySwapScreen->cursorSpriteId].pos1.x = gSprites[sFactorySwapScreen->ballSpriteIds[sFactorySwapScreen->cursorPos]].pos1.x; - gTasks[sFactorySwapScreen->palBlendTaskId].func = Task_SwapBlendPalette; + gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].func = Task_SwapFadeSpeciesName; sFactorySwapScreen->unk27 = 0; sFactorySwapScreen->unk28 = 6; sFactorySwapScreen->unk26 = FALSE; - gTasks[sFactorySwapScreen->palBlendTaskId].data[0] = 1; + gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].data[0] = 1; gTasks[taskId].data[0]++; } break; @@ -2370,7 +2387,7 @@ void Swap_InitStruct(void) { sFactorySwapScreen = AllocZeroed(sizeof(*sFactorySwapScreen)); sFactorySwapScreen->cursorPos = 0; - sFactorySwapScreen->unk30 = 0; + sFactorySwapScreen->unk30 = FALSE; sFactorySwapScreen->fromSummaryScreen = FALSE; } } @@ -2461,7 +2478,7 @@ void CB2_InitSwapScreen(void) Swap_InitAllSprites(); if (sFactorySwapScreen->fromSummaryScreen == TRUE) Swap_ShowSummaryMonSprite(); - sub_819F048(0); + Swap_InitActions(ACTIONS_PLAYER_SCREEN); gMain.state++; break; case 7: @@ -2517,17 +2534,17 @@ void CB2_InitSwapScreen(void) gMain.state++; break; case 15: - sFactorySwapScreen->palBlendTaskId = CreateTask(Task_SwapBlendPalette, 0); + sFactorySwapScreen->fadeSpeciesNameTaskId = CreateTask(Task_SwapFadeSpeciesName, 0); if (!sFactorySwapScreen->fromSummaryScreen) { - gTasks[sFactorySwapScreen->palBlendTaskId].data[0] = 0; + gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].data[0] = 0; taskId = CreateTask(Task_HandleSwapScreenChooseMons, 0); gTasks[taskId].data[0] = 0; } else { sub_819EAF8(); - gTasks[sFactorySwapScreen->palBlendTaskId].data[0] = 1; + gTasks[sFactorySwapScreen->fadeSpeciesNameTaskId].data[0] = 1; sFactorySwapScreen->unk22 = FALSE; taskId = CreateTask(Task_HandleSwapScreenMenu, 0); gTasks[taskId].data[0] = 2; @@ -2541,6 +2558,7 @@ extern const struct SpriteTemplate gUnknown_08610834; extern const struct SpriteTemplate gUnknown_0861084C; extern const struct SpriteTemplate gUnknown_08610864; extern const struct SpriteTemplate gUnknown_0861087C; +extern const struct SpriteTemplate gUnknown_08610894; void Swap_InitAllSprites(void) { @@ -2665,7 +2683,7 @@ void Swap_HandleActionCursorChange(u8 cursorId) else { gSprites[sFactorySwapScreen->cursorSpriteId].invisible = 1; - sub_819E838(sFactorySwapScreen->unk18[cursorId].unk0); + sub_819E838(sFactorySwapScreen->actionsData[cursorId].id); } } @@ -2879,7 +2897,7 @@ void Swap_PrintMonSpecies(void) else { u8 monId = sFactorySwapScreen->cursorPos; - if (sFactorySwapScreen->actionsState == 0) + if (!sFactorySwapScreen->inEnemyScreen) species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, NULL); else species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); @@ -2896,3 +2914,367 @@ void Swap_PrintOnInfoWindow(const u8 *str) AddTextPrinterParameterized(2, 1, str, 2, 5, 0, NULL); CopyWindowToVram(2, 2); } + +void Swap_PrintMenuOptions(void) +{ + PutWindowTilemap(3); + FillWindowPixelBuffer(3, 0); + AddTextPrinterParameterized3(3, 1, 15, 1, gUnknown_08610922, 0, gText_Summary2); + AddTextPrinterParameterized3(3, 1, 15, 17, gUnknown_08610922, 0, gText_Swap); + AddTextPrinterParameterized3(3, 1, 15, 33, gUnknown_08610922, 0, gText_Rechoose); + CopyWindowToVram(3, 3); +} + +void Swap_PrintYesNoOptions(void) +{ + PutWindowTilemap(4); + FillWindowPixelBuffer(4, 0); + AddTextPrinterParameterized3(4, 1, 7, 1, gUnknown_08610922, 0, gText_Yes3); + AddTextPrinterParameterized3(4, 1, 7, 17, gUnknown_08610922, 0, gText_No3); + CopyWindowToVram(4, 3); +} + +void Swap_PrintActionString(const u8 *str, u32 y, u32 windowId) +{ + s32 x = GetStringRightAlignXOffset(0, str, 0x46); + AddTextPrinterParameterized3(windowId, 0, x, y, gUnknown_08610922, 0, str); +} + +void Swap_PrintActionStrings(void) +{ + FillWindowPixelBuffer(5, 0); + switch (sFactorySwapScreen->inEnemyScreen) + { + case TRUE: + Swap_PrintActionString(gText_PkmnForSwap, 0, 5); + case FALSE: + Swap_PrintActionString(gText_Cancel3, 24, 5); + break; + } + CopyWindowToVram(5, 3); +} + +void Swap_PrintActionStrings2(void) +{ + FillWindowPixelBuffer(3, 0); + switch (sFactorySwapScreen->inEnemyScreen) + { + case TRUE: + Swap_PrintActionString(gText_PkmnForSwap, 8, 3); + case FALSE: + Swap_PrintActionString(gText_Cancel3, 32, 3); + break; + } + CopyWindowToVram(3, 3); +} + +void Swap_PrintOneActionString(u8 which) +{ + switch (which) + { + case 0: + if (sFactorySwapScreen->inEnemyScreen == TRUE) + Swap_PrintActionString(gText_PkmnForSwap, 8, 3); + break; + case 1: + Swap_PrintActionString(gText_Cancel3, 32, 3); + break; + } + CopyWindowToVram(3, 3); +} + +void Swap_PrintMonSpecies2(void) +{ + u16 species; + u8 x; + u16 pal[5]; + + CpuCopy16(gUnknown_08610918, pal, 8); + if (!sFactorySwapScreen->fromSummaryScreen) + pal[4] = gPlttBufferFaded[228]; + else + pal[4] = sFactorySwapScreen->unk24; + LoadPalette(pal, 0xF0, 0xA); + + PutWindowTilemap(7); + FillWindowPixelBuffer(7, 0); + if (sFactorySwapScreen->cursorPos > 2) + { + CopyWindowToVram(7, 3); + } + else + { + u8 monId = sFactorySwapScreen->cursorPos; + if (!sFactorySwapScreen->inEnemyScreen) + species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, NULL); + else + species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); + StringCopy(gStringVar4, gSpeciesNames[species]); + x = GetStringRightAlignXOffset(1, gStringVar4, 86); + AddTextPrinterParameterized3(7, 1, x, 1, gUnknown_08610925, 0, gStringVar4); + CopyWindowToVram(7, 3); + } +} + +void Swap_PrintMonSpecies3(void) +{ + u16 species; + u8 x; + + LoadPalette(gUnknown_08610918, 0xE0, 0xA); + CpuCopy16(gPlttBufferUnfaded + 240, gPlttBufferFaded + 224, 10); + + if (sFactorySwapScreen->cursorPos > 2) + { + CopyWindowToVram(1, 2); + } + else + { + u8 monId = sFactorySwapScreen->cursorPos; + if (!sFactorySwapScreen->inEnemyScreen) + species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, NULL); + else + species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); + StringCopy(gStringVar4, gSpeciesNames[species]); + x = GetStringRightAlignXOffset(1, gStringVar4, 86); + AddTextPrinterParameterized3(1, 1, x, 1, gUnknown_08610925, 0, gStringVar4); + CopyWindowToVram(1, 3); + } +} + +void Swap_PrintMonCategory(void) +{ + u16 species; + u8 text[30]; + u8 x; + u8 monId = sFactorySwapScreen->cursorPos; + + FillWindowPixelBuffer(8, 0); + if (monId > 2) + { + CopyWindowToVram(8, 2); + } + else + { + PutWindowTilemap(8); + if (!sFactorySwapScreen->inEnemyScreen) + species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES, NULL); + else + species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); + CopyMonCategoryText(SpeciesToNationalPokedexNum(species), text); + x = GetStringRightAlignXOffset(1, text, 0x76); + AddTextPrinterParameterized(8, 1, text, x, 1, 0, NULL); + CopyWindowToVram(8, 2); + } +} + +extern const struct SwapActionIdAndFunc gUnknown_08610928[4]; +extern const struct SwapActionIdAndFunc gUnknown_08610948[5]; + +void Swap_InitActions(u8 id) +{ + if (sFactorySwapScreen->fromSummaryScreen != TRUE) + { + switch (id) + { + case ACTIONS_PLAYER_SCREEN: + sFactorySwapScreen->inEnemyScreen = FALSE; + sFactorySwapScreen->cursorPos = 0; + sFactorySwapScreen->actionsCount = ARRAY_COUNT(gUnknown_08610928); + sFactorySwapScreen->actionsData = gUnknown_08610928; + break; + case ACTIONS_ENEMY_SCREEN: + sFactorySwapScreen->inEnemyScreen = TRUE; + sFactorySwapScreen->cursorPos = 0; + sFactorySwapScreen->actionsCount = ARRAY_COUNT(gUnknown_08610948); + sFactorySwapScreen->actionsData = gUnknown_08610948; + break; + } + } +} + +void Swap_RunMenuOptionFunc(u8 taskId) +{ + gUnknown_03001280 = sSwap_MenuOptionFuncs[sFactorySwapScreen->menuCursorPos]; + gUnknown_03001280(taskId); +} + +void sub_819F0CC(u8 taskId) +{ + sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); + sFactorySwapScreen->playerMonId = sFactorySwapScreen->cursorPos; + sub_819EA64(3); + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = sub_819D9EC; +} + +void sub_819F114(u8 taskId) +{ + gTasks[taskId].data[0] = 6; + gTasks[taskId].func = Task_FromSwapScreenToSummaryScreen; +} + +void sub_819F134(u8 taskId) +{ + sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); + sub_819EA64(3); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenChooseMons) >> 0x10; + gTasks[taskId].data[7] = (u32)(Task_HandleSwapScreenChooseMons); + gTasks[taskId].data[5] = 1; + gTasks[taskId].func = sub_819D770; +} + +void Swap_RunActionFunc(u8 taskId) +{ + gUnknown_03001280 = sFactorySwapScreen->actionsData[sFactorySwapScreen->cursorPos].func; + gUnknown_03001280(taskId); +} + +void sub_819F1AC(u8 taskId) +{ + gTasks[taskId].data[6] = (u32)(sub_819CC24) >> 0x10; + gTasks[taskId].data[7] = (u32)(sub_819CC24); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[5] = 0; + gTasks[taskId].func = sub_819D588; +} + +void sub_819F1DC(u8 taskId) +{ + gTasks[taskId].data[6] = (u32)(sub_819D9EC) >> 0x10; + gTasks[taskId].data[7] = (u32)(sub_819D9EC); + gTasks[taskId].data[5] = 0; + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = sub_819D588; +} + +void sub_819F20C(u8 taskId) +{ + if (!sFactorySwapScreen->inEnemyScreen) + { + gTasks[taskId].data[6] = (u32)(Task_HandleSwapScreenMenu) >> 0x10; + gTasks[taskId].data[7] = (u32)(Task_HandleSwapScreenMenu); + gTasks[taskId].data[5] = 2; + } + else if (Swap_AlreadyHasSameSpecies(sFactorySwapScreen->cursorPos) == TRUE) + { + sub_819F2B4(&sFactorySwapScreen->unk2C.field1, &sFactorySwapScreen->unk30, TRUE); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[5] = 1; + gTasks[taskId].func = Task_SwapCantHaveSameMons; + return; + } + else + { + gTasks[taskId].data[6] = (u32)(sub_819CCD4) >> 0x10; + gTasks[taskId].data[7] = (u32)(sub_819CCD4); + gTasks[taskId].data[5] = 0; + } + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = sub_819D588; +} + +void sub_819F2B4(u8 *arg0, bool8 *arg1, bool8 swapScreen) +{ + *arg0 = CreateSprite(&gUnknown_08610894, 120, 64, 1); + gSprites[*arg0].callback = sub_819F600; + gSprites[*arg0].data[7] = swapScreen; + *arg1 = TRUE; +} + +void Swap_ShowSummaryMonSprite(void) +{ + struct Pokemon *mon; + u16 species; + u32 personality, otId; + + sFactorySwapScreen->unk2C.field1 = CreateSprite(&gUnknown_08610894, 120, 64, 1); + StartSpriteAffineAnim(&gSprites[sFactorySwapScreen->unk2C.field1], 2); + + mon = &gPlayerParty[sFactorySwapScreen->cursorPos]; + species = GetMonData(mon, MON_DATA_SPECIES, NULL); + personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); + otId = GetMonData(mon, MON_DATA_OT_ID, NULL); + + sFactorySwapScreen->unk2C.field0 = CreateMonPicSprite_HandleDeoxys(species, personality, otId, TRUE, 88, 32, 15, 0xFFFF); // BUG: otId and personality should be switched. + gSprites[sFactorySwapScreen->unk2C.field0].centerToCornerVecX = 0; + gSprites[sFactorySwapScreen->unk2C.field0].centerToCornerVecY = 0; + + gSprites[sFactorySwapScreen->unk2C.field1].invisible = 1; +} + +void sub_819F3F8(struct UnkFactoryStruct arg0, bool8 *arg1, bool8 swapScreen) +{ + u8 taskId; + + FreeAndDestroyMonPicSprite(arg0.field0); + taskId = CreateTask(sub_819F7B4, 1); + gTasks[taskId].data[7] = swapScreen; + gTasks[taskId].data[6] = arg0.field1; + gTasks[taskId].func(taskId); + *arg1 = TRUE; +} + +void sub_819F444(struct UnkFactoryStruct arg0, bool8 *arg1) +{ + FreeAndDestroyMonPicSprite(arg0.field0); + FreeOamMatrix(gSprites[arg0.field1].oam.matrixNum); + DestroySprite(&gSprites[arg0.field1]); + *arg1 = FALSE; +} + +void Task_SwapCantHaveSameMons(u8 taskId) +{ + if (sFactorySwapScreen->unk30 == TRUE) + return; + + switch (gTasks[taskId].data[0]) + { + case 0: + Swap_PrintOnInfoWindow(gText_SamePkmnInPartyAlready); + sFactorySwapScreen->monSwapped = FALSE; + gTasks[taskId].data[0]++; + break; + case 1: + if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + sub_819F3F8(sFactorySwapScreen->unk2C, &sFactorySwapScreen->unk30, TRUE); + gTasks[taskId].data[0]++; + } + break; + case 2: + if (sFactorySwapScreen->unk30 != TRUE) + { + FillWindowPixelBuffer(5, 0); + CopyWindowToVram(5, 2); + gTasks[taskId].data[0]++; + } + break; + case 3: + Swap_PrintOnInfoWindow(gText_SelectPkmnToAccept); + gTasks[taskId].data[0]++; + break; + case 4: + Swap_PrintMonSpecies3(); + sub_819EADC(); + sFactorySwapScreen->unk22 = 1; + gTasks[taskId].data[0] = gTasks[taskId].data[5]; + gTasks[taskId].func = Task_HandleSwapScreenChooseMons; + break; + } +} + +bool8 Swap_AlreadyHasSameSpecies(u8 monId) +{ + u8 i; + u16 species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL); + + for (i = 0; i < 3; i++) + { + if (i != sFactorySwapScreen->playerMonId && (u16)(GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL)) == species) + return TRUE; + } + return FALSE; +} -- cgit v1.2.3