Document battle factory functions

This commit is contained in:
Marcus Huderle 2019-02-07 12:58:09 -06:00
parent b52871433a
commit 4785a07acd
6 changed files with 121 additions and 117 deletions

View File

@ -2,10 +2,10 @@
#define GUARD_BATTLE_FACTORY_H #define GUARD_BATTLE_FACTORY_H
void CallBattleFactoryFunction(void); void CallBattleFactoryFunction(void);
bool8 sub_81A6BF4(void); bool8 InBattleFactory(void);
u8 GetFactoryMonFixedIV(u8 arg0, u8 arg1); u8 GetFactoryMonFixedIV(u8 arg0, u8 arg1);
void FillFactoryBrainParty(void); void FillFactoryBrainParty(void);
u8 sub_81A6F70(u8 battleMode, u8 lvlMode); u8 GetNumPastRentalsRank(u8 battleMode, u8 lvlMode);
u32 GetAiScriptsInBattleFactory(void); u32 GetAiScriptsInBattleFactory(void);
void SetMonMoveAvoidReturn(struct Pokemon *mon, u16 moveArg, u8 moveSlot); void SetMonMoveAvoidReturn(struct Pokemon *mon, u16 moveArg, u8 moveSlot);

View File

@ -277,7 +277,7 @@ struct FrontierMonData
u8 nature; u8 nature;
}; };
struct Struct_field_E70 struct RentalMon
{ {
u16 monId; u16 monId;
u32 personality; u32 personality;
@ -370,7 +370,7 @@ struct BattleFrontier
/*0xE6A*/ u16 field_E6A; /*0xE6A*/ u16 field_E6A;
/*0xE6C*/ u16 field_E6C; /*0xE6C*/ u16 field_E6C;
/*0xE6E*/ u16 field_E6E; /*0xE6E*/ u16 field_E6E;
/*0xE70*/ struct Struct_field_E70 field_E70[6]; /*0xE70*/ struct RentalMon rentalMons[6];
/*0xEB8*/ u16 battlePoints; /*0xEB8*/ u16 battlePoints;
/*0xEBA*/ u16 field_EBA; /*0xEBA*/ u16 field_EBA;
/*0xEBC*/ u32 battlesCount; /*0xEBC*/ u32 battlesCount;

View File

@ -16,28 +16,28 @@
#include "constants/moves.h" #include "constants/moves.h"
// IWRAM bss // IWRAM bss
static IWRAM_DATA bool8 gUnknown_03001288; static IWRAM_DATA bool8 sPerformedRentalSwap;
// This file's functions. // This file's functions.
static void sub_81A5E94(void); static void InitFactoryChallenge(void);
static void sub_81A5FA8(void); static void GetBattleFactoryData(void);
static void sub_81A6054(void); static void SetBattleFactoryData(void);
static void sub_81A613C(void); static void sub_81A613C(void);
static void nullsub_75(void); static void nullsub_75(void);
static void nullsub_123(void); static void nullsub_123(void);
static void sub_81A6188(void); static void SelectInitialRentalMons(void);
static void sub_81A6198(void); static void SwapRentalMons(void);
static void sub_81A61A4(void); static void SetPerformedRentalSwap(void);
static void sub_81A63CC(void); static void SetRentalsToOpponentParty(void);
static void sub_81A64C4(void); static void SetPlayerAndOpponentParties(void);
static void sub_81A63B8(void); static void SetOpponentGfxVar(void);
static void sub_81A61B0(void); static void GenerateOpponentMons(void);
static void sub_81A67EC(void); static void GenerateInitialRentalMons(void);
static void sub_81A6A08(void); static void GetOpponentMostCommonMonType(void);
static void sub_81A6AEC(void); static void GetOpponentBattleStyle(void);
static void sub_81A6C1C(void); static void RestorePlayerPartyHeldItems(void);
static u16 GetMonSetId(u8 lvlMode, u8 challengeNum, bool8 arg2); static u16 GetMonSetId(u8 lvlMode, u8 challengeNum, bool8 arg2);
static u8 GetStyleForMove(u16 move); static u8 GetMoveBattleStyle(u16 move);
// Const rom data. // Const rom data.
static const u8 sRequiredMoveCounts[] = {3, 3, 3, 2, 2, 2, 2}; static const u8 sRequiredMoveCounts[] = {3, 3, 3, 2, 2, 2, 2};
@ -110,25 +110,25 @@ static const u16 *const sMoveStyles[] =
sMoves_DependsOnTheBattlesFlow, sMoves_DependsOnTheBattlesFlow,
}; };
static void (* const gUnknown_08612120[])(void) = static void (* const sBattleFactoryFunctions[])(void) =
{ {
sub_81A5E94, InitFactoryChallenge,
sub_81A5FA8, GetBattleFactoryData,
sub_81A6054, SetBattleFactoryData,
sub_81A613C, sub_81A613C,
nullsub_75, nullsub_75,
nullsub_123, nullsub_123,
sub_81A6188, SelectInitialRentalMons,
sub_81A6198, SwapRentalMons,
sub_81A61A4, SetPerformedRentalSwap,
sub_81A63CC, SetRentalsToOpponentParty,
sub_81A64C4, SetPlayerAndOpponentParties,
sub_81A63B8, SetOpponentGfxVar,
sub_81A61B0, GenerateOpponentMons,
sub_81A67EC, GenerateInitialRentalMons,
sub_81A6A08, GetOpponentMostCommonMonType,
sub_81A6AEC, GetOpponentBattleStyle,
sub_81A6C1C, RestorePlayerPartyHeldItems,
}; };
static const u32 gUnknown_08612164[][2] = static const u32 gUnknown_08612164[][2] =
@ -178,10 +178,10 @@ static const u16 sMonsToChooseFrom[][2] =
// code // code
void CallBattleFactoryFunction(void) void CallBattleFactoryFunction(void)
{ {
gUnknown_08612120[gSpecialVar_0x8004](); sBattleFactoryFunctions[gSpecialVar_0x8004]();
} }
static void sub_81A5E94(void) static void InitFactoryChallenge(void)
{ {
u8 i; u8 i;
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
@ -197,9 +197,9 @@ static void sub_81A5E94(void)
gSaveBlock2Ptr->frontier.factoryRentsCount[battleMode][lvlMode] = 0; gSaveBlock2Ptr->frontier.factoryRentsCount[battleMode][lvlMode] = 0;
} }
gUnknown_03001288 = FALSE; sPerformedRentalSwap = FALSE;
for (i = 0; i < 6; i++) for (i = 0; i < 6; i++)
gSaveBlock2Ptr->frontier.field_E70[i].monId = 0xFFFF; gSaveBlock2Ptr->frontier.rentalMons[i].monId = 0xFFFF;
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
gUnknown_03006298[i] = 0xFFFF; gUnknown_03006298[i] = 0xFFFF;
@ -207,10 +207,10 @@ static void sub_81A5E94(void)
gTrainerBattleOpponent_A = 0; gTrainerBattleOpponent_A = 0;
} }
static void sub_81A5FA8(void) static void GetBattleFactoryData(void)
{ {
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; int lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); int battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
switch (gSpecialVar_0x8005) switch (gSpecialVar_0x8005)
{ {
@ -226,10 +226,10 @@ static void sub_81A5FA8(void)
} }
} }
static void sub_81A6054(void) static void SetBattleFactoryData(void)
{ {
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; int lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); int battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
switch (gSpecialVar_0x8005) switch (gSpecialVar_0x8005)
{ {
@ -243,10 +243,10 @@ static void sub_81A6054(void)
gSaveBlock2Ptr->frontier.field_CDC &= gUnknown_08612174[battleMode][lvlMode]; gSaveBlock2Ptr->frontier.field_CDC &= gUnknown_08612174[battleMode][lvlMode];
break; break;
case 3: case 3:
if (gUnknown_03001288 == TRUE) if (sPerformedRentalSwap == TRUE)
{ {
gSaveBlock2Ptr->frontier.factoryRentsCount[battleMode][lvlMode] = gSpecialVar_0x8006; gSaveBlock2Ptr->frontier.factoryRentsCount[battleMode][lvlMode] = gSpecialVar_0x8006;
gUnknown_03001288 = FALSE; sPerformedRentalSwap = FALSE;
} }
break; break;
} }
@ -270,28 +270,28 @@ static void nullsub_123(void)
} }
static void sub_81A6188(void) static void SelectInitialRentalMons(void)
{ {
ZeroPlayerPartyMons(); ZeroPlayerPartyMons();
DoBattleFactorySelectScreen(); DoBattleFactorySelectScreen();
} }
static void sub_81A6198(void) static void SwapRentalMons(void)
{ {
DoBattleFactorySwapScreen(); DoBattleFactorySwapScreen();
} }
static void sub_81A61A4(void) static void SetPerformedRentalSwap(void)
{ {
gUnknown_03001288 = TRUE; sPerformedRentalSwap = TRUE;
} }
static void sub_81A61B0(void) static void GenerateOpponentMons(void)
{ {
s32 i, j, k; int i, j, k;
u16 species[3]; u16 species[3];
u16 heldItems[3]; u16 heldItems[3];
s32 firstMonId = 0; int firstMonId = 0;
u16 trainerId = 0; u16 trainerId = 0;
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
@ -322,7 +322,7 @@ static void sub_81A61B0(void)
for (j = 0; j < 6; j++) for (j = 0; j < 6; j++)
{ {
if (gFacilityTrainerMons[monSetId].species == gFacilityTrainerMons[gSaveBlock2Ptr->frontier.field_E70[j].monId].species) if (gFacilityTrainerMons[monSetId].species == gFacilityTrainerMons[gSaveBlock2Ptr->frontier.rentalMons[j].monId].species)
break; break;
} }
if (j != 6) if (j != 6)
@ -333,6 +333,7 @@ static void sub_81A61B0(void)
for (k = firstMonId; k < firstMonId + i; k++) for (k = firstMonId; k < firstMonId + i; k++)
{ {
// BUG: Small undefined behavior bug, since species array values were not initialized.
if (species[k] == gFacilityTrainerMons[monSetId].species) if (species[k] == gFacilityTrainerMons[monSetId].species)
break; break;
} }
@ -341,6 +342,7 @@ static void sub_81A61B0(void)
for (k = firstMonId; k < firstMonId + i; k++) for (k = firstMonId; k < firstMonId + i; k++)
{ {
// BUG: Small undefined behavior bug, since heldItems array values were not initialized.
if (heldItems[k] != 0 && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]) if (heldItems[k] != 0 && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId])
break; break;
} }
@ -354,12 +356,12 @@ static void sub_81A61B0(void)
} }
} }
static void sub_81A63B8(void) static void SetOpponentGfxVar(void)
{ {
SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0); SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0);
} }
static void sub_81A63CC(void) static void SetRentalsToOpponentParty(void)
{ {
u8 i; u8 i;
@ -370,18 +372,18 @@ static void sub_81A63CC(void)
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
{ {
gSaveBlock2Ptr->frontier.field_E70[i + 3].monId = gUnknown_03006298[i]; gSaveBlock2Ptr->frontier.rentalMons[i + 3].monId = gUnknown_03006298[i];
gSaveBlock2Ptr->frontier.field_E70[i + 3].ivs = GetBoxMonData(&gEnemyParty[i].box, MON_DATA_ATK_IV, NULL); gSaveBlock2Ptr->frontier.rentalMons[i + 3].ivs = GetBoxMonData(&gEnemyParty[i].box, MON_DATA_ATK_IV, NULL);
gSaveBlock2Ptr->frontier.field_E70[i + 3].personality = GetMonData(&gEnemyParty[i], MON_DATA_PERSONALITY, NULL); gSaveBlock2Ptr->frontier.rentalMons[i + 3].personality = GetMonData(&gEnemyParty[i], MON_DATA_PERSONALITY, NULL);
gSaveBlock2Ptr->frontier.field_E70[i + 3].abilityBit = GetBoxMonData(&gEnemyParty[i].box, MON_DATA_ALT_ABILITY, NULL); gSaveBlock2Ptr->frontier.rentalMons[i + 3].abilityBit = GetBoxMonData(&gEnemyParty[i].box, MON_DATA_ALT_ABILITY, NULL);
SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[gUnknown_03006298[i]].itemTableId]); SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[gUnknown_03006298[i]].itemTableId]);
} }
} }
static void sub_81A64C4(void) static void SetPlayerAndOpponentParties(void)
{ {
s32 i, j, k; int i, j, k;
s32 count = 0; int count = 0;
u8 bits = 0; u8 bits = 0;
u8 monLevel; u8 monLevel;
u16 monSetId; u16 monSetId;
@ -408,13 +410,13 @@ static void sub_81A64C4(void)
ZeroPlayerPartyMons(); ZeroPlayerPartyMons();
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
{ {
monSetId = gSaveBlock2Ptr->frontier.field_E70[i].monId; monSetId = gSaveBlock2Ptr->frontier.rentalMons[i].monId;
ivs = gSaveBlock2Ptr->frontier.field_E70[i].ivs; ivs = gSaveBlock2Ptr->frontier.rentalMons[i].ivs;
CreateMon(&gPlayerParty[i], CreateMon(&gPlayerParty[i],
gFacilityTrainerMons[monSetId].species, gFacilityTrainerMons[monSetId].species,
monLevel, monLevel,
ivs, ivs,
TRUE, gSaveBlock2Ptr->frontier.field_E70[i].personality, TRUE, gSaveBlock2Ptr->frontier.rentalMons[i].personality,
0, 0); 0, 0);
count = 0; count = 0;
@ -439,7 +441,7 @@ static void sub_81A64C4(void)
SetMonMoveAvoidReturn(&gPlayerParty[i], gFacilityTrainerMons[monSetId].moves[k], k); SetMonMoveAvoidReturn(&gPlayerParty[i], gFacilityTrainerMons[monSetId].moves[k], k);
SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, &friendship); SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, &friendship);
SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]); SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]);
SetMonData(&gPlayerParty[i], MON_DATA_ALT_ABILITY, &gSaveBlock2Ptr->frontier.field_E70[i].abilityBit); SetMonData(&gPlayerParty[i], MON_DATA_ALT_ABILITY, &gSaveBlock2Ptr->frontier.rentalMons[i].abilityBit);
} }
} }
@ -449,13 +451,13 @@ static void sub_81A64C4(void)
case 2: case 2:
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
{ {
monSetId = gSaveBlock2Ptr->frontier.field_E70[i + 3].monId; monSetId = gSaveBlock2Ptr->frontier.rentalMons[i + 3].monId;
ivs = gSaveBlock2Ptr->frontier.field_E70[i + 3].ivs; ivs = gSaveBlock2Ptr->frontier.rentalMons[i + 3].ivs;
CreateMon(&gEnemyParty[i], CreateMon(&gEnemyParty[i],
gFacilityTrainerMons[monSetId].species, gFacilityTrainerMons[monSetId].species,
monLevel, monLevel,
ivs, ivs,
TRUE, gSaveBlock2Ptr->frontier.field_E70[i + 3].personality, TRUE, gSaveBlock2Ptr->frontier.rentalMons[i + 3].personality,
0, 0); 0, 0);
count = 0; count = 0;
@ -478,15 +480,15 @@ static void sub_81A64C4(void)
for (k = 0; k < MAX_MON_MOVES; k++) for (k = 0; k < MAX_MON_MOVES; k++)
SetMonMoveAvoidReturn(&gEnemyParty[i], gFacilityTrainerMons[monSetId].moves[k], k); SetMonMoveAvoidReturn(&gEnemyParty[i], gFacilityTrainerMons[monSetId].moves[k], k);
SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]); SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]);
SetMonData(&gEnemyParty[i], MON_DATA_ALT_ABILITY, &gSaveBlock2Ptr->frontier.field_E70[i + 3].abilityBit); SetMonData(&gEnemyParty[i], MON_DATA_ALT_ABILITY, &gSaveBlock2Ptr->frontier.rentalMons[i + 3].abilityBit);
} }
break; break;
} }
} }
static void sub_81A67EC(void) static void GenerateInitialRentalMons(void)
{ {
s32 i, j; int i, j;
u8 firstMonId; u8 firstMonId;
u8 battleMode; u8 battleMode;
u8 lvlMode; u8 lvlMode;
@ -526,7 +528,7 @@ static void sub_81A67EC(void)
factoryLvlMode = FRONTIER_LVL_50; factoryLvlMode = FRONTIER_LVL_50;
firstMonId = 0; firstMonId = 0;
} }
var_40 = sub_81A6F70(factoryBattleMode, factoryLvlMode); var_40 = GetNumPastRentalsRank(factoryBattleMode, factoryLvlMode);
currSpecies = SPECIES_NONE; currSpecies = SPECIES_NONE;
i = 0; i = 0;
@ -570,7 +572,7 @@ static void sub_81A67EC(void)
if (j != firstMonId + i) if (j != firstMonId + i)
continue; continue;
gSaveBlock2Ptr->frontier.field_E70[i].monId = monSetId; gSaveBlock2Ptr->frontier.rentalMons[i].monId = monSetId;
species[i] = gFacilityTrainerMons[monSetId].species; species[i] = gFacilityTrainerMons[monSetId].species;
heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]; heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId];
monIds[i] = monSetId; monIds[i] = monSetId;
@ -578,7 +580,7 @@ static void sub_81A67EC(void)
} }
} }
static void sub_81A6A08(void) static void GetOpponentMostCommonMonType(void)
{ {
u8 i; u8 i;
u8 typesCount[NUMBER_OF_MON_TYPES]; u8 typesCount[NUMBER_OF_MON_TYPES];
@ -613,7 +615,7 @@ static void sub_81A6A08(void)
gSpecialVar_Result = NUMBER_OF_MON_TYPES; gSpecialVar_Result = NUMBER_OF_MON_TYPES;
} }
static void sub_81A6AEC(void) static void GetOpponentBattleStyle(void)
{ {
u8 i, j, count; u8 i, j, count;
u8 stylePoints[8]; u8 stylePoints[8];
@ -622,13 +624,14 @@ static void sub_81A6AEC(void)
gFacilityTrainerMons = gBattleFrontierMons; gFacilityTrainerMons = gBattleFrontierMons;
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
stylePoints[i] = 0; stylePoints[i] = 0;
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
{ {
u16 monSetId = gUnknown_03006298[i]; u16 monSetId = gUnknown_03006298[i];
for (j = 0; j < MAX_MON_MOVES; j++) for (j = 0; j < MAX_MON_MOVES; j++)
{ {
u8 id = GetStyleForMove(gFacilityTrainerMons[monSetId].moves[j]); u8 battleStyle = GetMoveBattleStyle(gFacilityTrainerMons[monSetId].moves[j]);
stylePoints[id]++; stylePoints[battleStyle]++;
} }
} }
@ -641,11 +644,12 @@ static void sub_81A6AEC(void)
count++; count++;
} }
} }
if (count > 2) if (count > 2)
gSpecialVar_Result = 8; gSpecialVar_Result = 8;
} }
static u8 GetStyleForMove(u16 move) static u8 GetMoveBattleStyle(u16 move)
{ {
const u16 *moves; const u16 *moves;
u8 i, j; u8 i, j;
@ -661,13 +665,13 @@ static u8 GetStyleForMove(u16 move)
return 0; return 0;
} }
bool8 sub_81A6BF4(void) bool8 InBattleFactory(void)
{ {
return gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_FACTORY_PRE_BATTLE_ROOM return gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_FACTORY_PRE_BATTLE_ROOM
|| gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_FACTORY_BATTLE_ROOM; || gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_FACTORY_BATTLE_ROOM;
} }
static void sub_81A6C1C(void) static void RestorePlayerPartyHeldItems(void)
{ {
u8 i; u8 i;
@ -680,7 +684,7 @@ static void sub_81A6C1C(void)
{ {
SetMonData(&gPlayerParty[i], SetMonData(&gPlayerParty[i],
MON_DATA_HELD_ITEM, MON_DATA_HELD_ITEM,
&gBattleFrontierHeldItems[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.field_E70[i].monId].itemTableId]); &gBattleFrontierHeldItems[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.rentalMons[i].monId].itemTableId]);
} }
} }
@ -699,11 +703,11 @@ u8 GetFactoryMonFixedIV(u8 arg0, u8 arg1)
void FillFactoryBrainParty(void) void FillFactoryBrainParty(void)
{ {
s32 i, j, k; int i, j, k;
u16 species[3]; u16 species[3];
u16 heldItems[3]; u16 heldItems[3];
u8 friendship; u8 friendship;
s32 monLevel; int monLevel;
u8 fixedIV; u8 fixedIV;
u32 otId; u32 otId;
@ -726,7 +730,7 @@ void FillFactoryBrainParty(void)
for (j = 0; j < 6; j++) for (j = 0; j < 6; j++)
{ {
if (monSetId == gSaveBlock2Ptr->frontier.field_E70[j].monId) if (monSetId == gSaveBlock2Ptr->frontier.rentalMons[j].monId)
break; break;
} }
if (j != 6) if (j != 6)
@ -769,7 +773,7 @@ void FillFactoryBrainParty(void)
static u16 GetMonSetId(u8 lvlMode, u8 challengeNum, bool8 arg2) static u16 GetMonSetId(u8 lvlMode, u8 challengeNum, bool8 arg2)
{ {
u16 range, ret; u16 range, monSetId;
u16 adder; u16 adder;
if (lvlMode == FRONTIER_LVL_50) if (lvlMode == FRONTIER_LVL_50)
@ -782,14 +786,14 @@ static u16 GetMonSetId(u8 lvlMode, u8 challengeNum, bool8 arg2)
if (arg2) if (arg2)
{ {
range = (sMonsToChooseFrom[adder + challengeNum + 1][1] - sMonsToChooseFrom[adder + challengeNum + 1][0]) + 1; range = (sMonsToChooseFrom[adder + challengeNum + 1][1] - sMonsToChooseFrom[adder + challengeNum + 1][0]) + 1;
ret = Random() % range; monSetId = Random() % range;
ret += sMonsToChooseFrom[adder + challengeNum + 1][0]; monSetId += sMonsToChooseFrom[adder + challengeNum + 1][0];
} }
else else
{ {
range = (sMonsToChooseFrom[adder + challengeNum][1] - sMonsToChooseFrom[adder + challengeNum][0]) + 1; range = (sMonsToChooseFrom[adder + challengeNum][1] - sMonsToChooseFrom[adder + challengeNum][0]) + 1;
ret = Random() % range; monSetId = Random() % range;
ret += sMonsToChooseFrom[adder + challengeNum][0]; monSetId += sMonsToChooseFrom[adder + challengeNum][0];
} }
} }
else else
@ -798,14 +802,14 @@ static u16 GetMonSetId(u8 lvlMode, u8 challengeNum, bool8 arg2)
if (num != 7) if (num != 7)
num = 7; num = 7;
range = (sMonsToChooseFrom[adder + num][1] - sMonsToChooseFrom[adder + num][0]) + 1; range = (sMonsToChooseFrom[adder + num][1] - sMonsToChooseFrom[adder + num][0]) + 1;
ret = Random() % range; monSetId = Random() % range;
ret += sMonsToChooseFrom[adder + num][0]; monSetId += sMonsToChooseFrom[adder + num][0];
} }
return ret; return monSetId;
} }
u8 sub_81A6F70(u8 battleMode, u8 lvlMode) u8 GetNumPastRentalsRank(u8 battleMode, u8 lvlMode)
{ {
u8 ret; u8 ret;
u8 rents = gSaveBlock2Ptr->frontier.factoryRentsCount[battleMode][lvlMode]; u8 rents = gSaveBlock2Ptr->frontier.factoryRentsCount[battleMode][lvlMode];
@ -828,7 +832,7 @@ u8 sub_81A6F70(u8 battleMode, u8 lvlMode)
u32 GetAiScriptsInBattleFactory(void) u32 GetAiScriptsInBattleFactory(void)
{ {
s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; int lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
if (lvlMode == FRONTIER_LVL_TENT) if (lvlMode == FRONTIER_LVL_TENT)
{ {
@ -836,8 +840,8 @@ u32 GetAiScriptsInBattleFactory(void)
} }
else else
{ {
s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); int battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
s32 challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / 7; int challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / 7;
if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN)
return AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY; return AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY;

View File

@ -1673,12 +1673,12 @@ static void CreateFrontierFactorySelectableMons(u8 firstMonId)
else else
level = 50; level = 50;
var_28 = sub_81A6F70(battleMode, lvlMode); var_28 = GetNumPastRentalsRank(battleMode, lvlMode);
otId = T1_READ_32(gSaveBlock2Ptr->playerTrainerId); otId = T1_READ_32(gSaveBlock2Ptr->playerTrainerId);
for (i = 0; i < SELECTABLE_MONS_COUNT; i++) for (i = 0; i < SELECTABLE_MONS_COUNT; i++)
{ {
u16 monSetId = gSaveBlock2Ptr->frontier.field_E70[i].monId; u16 monSetId = gSaveBlock2Ptr->frontier.rentalMons[i].monId;
sFactorySelectScreen->mons[i + firstMonId].monSetId = monSetId; sFactorySelectScreen->mons[i + firstMonId].monSetId = monSetId;
if (i < var_28) if (i < var_28)
ivs = GetFactoryMonFixedIV(challengeNum + 1, 0); ivs = GetFactoryMonFixedIV(challengeNum + 1, 0);
@ -1712,7 +1712,7 @@ static void CreateTentFactorySelectableMons(u8 firstMonId)
for (i = 0; i < SELECTABLE_MONS_COUNT; i++) for (i = 0; i < SELECTABLE_MONS_COUNT; i++)
{ {
u16 monSetId = gSaveBlock2Ptr->frontier.field_E70[i].monId; u16 monSetId = gSaveBlock2Ptr->frontier.rentalMons[i].monId;
sFactorySelectScreen->mons[i + firstMonId].monSetId = monSetId; sFactorySelectScreen->mons[i + firstMonId].monSetId = monSetId;
CreateMonWithEVSpreadNatureOTID(&sFactorySelectScreen->mons[i + firstMonId].monData, CreateMonWithEVSpreadNatureOTID(&sFactorySelectScreen->mons[i + firstMonId].monData,
gFacilityTrainerMons[monSetId].species, gFacilityTrainerMons[monSetId].species,
@ -1740,10 +1740,10 @@ static void Select_CopyMonsToPlayerParty(void)
if (sFactorySelectScreen->mons[j].selectedId == i + 1) if (sFactorySelectScreen->mons[j].selectedId == i + 1)
{ {
gPlayerParty[i] = sFactorySelectScreen->mons[j].monData; gPlayerParty[i] = sFactorySelectScreen->mons[j].monData;
gSaveBlock2Ptr->frontier.field_E70[i].monId = sFactorySelectScreen->mons[j].monSetId; gSaveBlock2Ptr->frontier.rentalMons[i].monId = sFactorySelectScreen->mons[j].monSetId;
gSaveBlock2Ptr->frontier.field_E70[i].personality = GetMonData(&gPlayerParty[i].box, MON_DATA_PERSONALITY, NULL); gSaveBlock2Ptr->frontier.rentalMons[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.rentalMons[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); gSaveBlock2Ptr->frontier.rentalMons[i].ivs = GetBoxMonData(&gPlayerParty[i].box, MON_DATA_ATK_IV, NULL);
break; break;
} }
} }
@ -2263,10 +2263,10 @@ static void CopySwappedMonData(void)
gPlayerParty[sFactorySwapScreen->playerMonId] = gEnemyParty[sFactorySwapScreen->enemyMonId]; gPlayerParty[sFactorySwapScreen->playerMonId] = gEnemyParty[sFactorySwapScreen->enemyMonId];
happiness = 0; happiness = 0;
SetMonData(&gPlayerParty[sFactorySwapScreen->playerMonId], MON_DATA_FRIENDSHIP, &happiness); 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.rentalMons[sFactorySwapScreen->playerMonId].monId = gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->enemyMonId + 3].monId;
gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->playerMonId].ivs = gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->enemyMonId + 3].ivs; gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->playerMonId].ivs = gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->enemyMonId + 3].ivs;
gSaveBlock2Ptr->frontier.field_E70[sFactorySwapScreen->playerMonId].personality = GetMonData(&gEnemyParty[sFactorySwapScreen->enemyMonId], MON_DATA_PERSONALITY, NULL); gSaveBlock2Ptr->frontier.rentalMons[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); gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->playerMonId].abilityBit = GetBoxMonData(&gEnemyParty[sFactorySwapScreen->enemyMonId].box, MON_DATA_ALT_ABILITY, NULL);
} }
static void Task_FromSwapScreenToSummaryScreen(u8 taskId) static void Task_FromSwapScreenToSummaryScreen(u8 taskId)

View File

@ -329,7 +329,7 @@ static void sub_81B9EC0(void)
if (j != i + firstMonId) if (j != i + firstMonId)
continue; continue;
gSaveBlock2Ptr->frontier.field_E70[i].monId = monSetId; gSaveBlock2Ptr->frontier.rentalMons[i].monId = monSetId;
species[i] = gFacilityTrainerMons[monSetId].species; species[i] = gFacilityTrainerMons[monSetId].species;
heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]; heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId];
monIds[i] = monSetId; monIds[i] = monSetId;
@ -379,7 +379,7 @@ static void sub_81BA040(void)
sRandMonSetId = monSets[Random() % setsCount]; sRandMonSetId = monSets[Random() % setsCount];
for (j = 0; j < 6; j++) for (j = 0; j < 6; j++)
{ {
if (gFacilityTrainerMons[sRandMonSetId].species == gFacilityTrainerMons[gSaveBlock2Ptr->frontier.field_E70[j].monId].species) if (gFacilityTrainerMons[sRandMonSetId].species == gFacilityTrainerMons[gSaveBlock2Ptr->frontier.rentalMons[j].monId].species)
break; break;
} }
if (j != 6) if (j != 6)

View File

@ -2801,7 +2801,7 @@ static void CreatePageWindowTilemaps(u8 page)
case PSS_PAGE_INFO: case PSS_PAGE_INFO:
PutWindowTilemap(0); PutWindowTilemap(0);
PutWindowTilemap(4); PutWindowTilemap(4);
if (sub_81A6BF4() == TRUE || sub_81B9E94() == TRUE) if (InBattleFactory() == TRUE || sub_81B9E94() == TRUE)
PutWindowTilemap(8); PutWindowTilemap(8);
PutWindowTilemap(9); PutWindowTilemap(9);
break; break;
@ -2852,7 +2852,7 @@ static void ClearPageWindowTilemaps(u8 page)
{ {
case PSS_PAGE_INFO: case PSS_PAGE_INFO:
ClearWindowTilemap(4); ClearWindowTilemap(4);
if (sub_81A6BF4() == TRUE || sub_81B9E94() == TRUE) if (InBattleFactory() == TRUE || sub_81B9E94() == TRUE)
ClearWindowTilemap(8); ClearWindowTilemap(8);
ClearWindowTilemap(9); ClearWindowTilemap(9);
break; break;
@ -2985,7 +2985,7 @@ static void PrintMonOTName(void)
{ {
u8 windowId; u8 windowId;
int x; int x;
if (sub_81A6BF4() != TRUE && sub_81B9E94() != TRUE) if (InBattleFactory() != TRUE && sub_81B9E94() != TRUE)
{ {
windowId = AddWindowFromTemplateList(gUnknown_0861CCCC, 0); windowId = AddWindowFromTemplateList(gUnknown_0861CCCC, 0);
SummaryScreen_PrintTextOnWindow(windowId, gText_OTSlash, 0, 1, 0, 1); SummaryScreen_PrintTextOnWindow(windowId, gText_OTSlash, 0, 1, 0, 1);
@ -3000,7 +3000,7 @@ static void PrintMonOTName(void)
static void PrintMonOTID(void) static void PrintMonOTID(void)
{ {
int xPos; int xPos;
if (sub_81A6BF4() != TRUE && sub_81B9E94() != TRUE) if (InBattleFactory() != TRUE && sub_81B9E94() != TRUE)
{ {
ConvertIntToDecimalStringN(StringCopy(gStringVar1, gText_UnkCtrlF907F908), (u16)pssData->summary.OTID, 2, 5); ConvertIntToDecimalStringN(StringCopy(gStringVar1, gText_UnkCtrlF907F908), (u16)pssData->summary.OTID, 2, 5);
xPos = GetStringRightAlignXOffset(1, gStringVar1, 56); xPos = GetStringRightAlignXOffset(1, gStringVar1, 56);
@ -3030,7 +3030,7 @@ static void BufferMonTrainerMemo(void)
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gUnknown_0861CE7B); DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gUnknown_0861CE7B);
BufferNatureString(); BufferNatureString();
if (sub_81A6BF4() == TRUE || sub_81B9E94() == TRUE || IsInGamePartnerMon() == TRUE) if (InBattleFactory() == TRUE || sub_81B9E94() == TRUE || IsInGamePartnerMon() == TRUE)
{ {
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_XNature); DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_XNature);
} }