More Battle Factory
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user