Merge pull request #370 from DizzyEggg/battle_tower
Decompile Battle Tower
This commit is contained in:
@@ -344,13 +344,6 @@ extern struct Unk030062ECStruct *gUnknown_030062EC;
|
||||
extern struct Unk030062F0Struct *gUnknown_030062F0;
|
||||
extern void (*gUnknown_030062F4)(void);
|
||||
|
||||
extern void sub_8165AE8(struct Apprentice *);
|
||||
|
||||
extern const u8 gUnknown_085DCEDC[];
|
||||
extern const u8 gUnknown_085DCF0E[];
|
||||
extern const u8 gUnknown_085DCEFA[];
|
||||
extern const u8 gUnknown_085DCF2C[];
|
||||
|
||||
// This file's functions.
|
||||
static u16 sub_819FF98(u8 arg0);
|
||||
static bool8 sub_81A0194(u8 arg0, u16 moveId);
|
||||
@@ -382,7 +375,7 @@ static void sub_81A1218(void);
|
||||
static void sub_81A1224(void);
|
||||
static void sub_81A1438(void);
|
||||
static void sub_81A150C(void);
|
||||
static void sub_81A15A4(void);
|
||||
static void Script_SetPlayerApprenticeTrainerGfxId(void);
|
||||
static void sub_81A1644(void);
|
||||
static void sub_81A1370(void);
|
||||
|
||||
@@ -1030,7 +1023,7 @@ static void (* const sApprenticeFunctions[])(void) =
|
||||
sub_81A1224,
|
||||
sub_81A1438,
|
||||
sub_81A150C,
|
||||
sub_81A15A4,
|
||||
Script_SetPlayerApprenticeTrainerGfxId,
|
||||
sub_81A1644,
|
||||
sub_81A1370,
|
||||
};
|
||||
@@ -1092,7 +1085,7 @@ void ResetAllApprenticeData(void)
|
||||
for (j = 0; j < 4; j++)
|
||||
gSaveBlock2Ptr->apprentices[i].playerId[j] = 0;
|
||||
gSaveBlock2Ptr->apprentices[i].language = gGameLanguage;
|
||||
gSaveBlock2Ptr->apprentices[i].unk40 = 0;
|
||||
gSaveBlock2Ptr->apprentices[i].checksum = 0;
|
||||
}
|
||||
|
||||
Script_ResetPlayerApprentice();
|
||||
@@ -1435,16 +1428,16 @@ static void sub_81A0390(u8 arg0)
|
||||
|
||||
for (i = 0; i < 3; i++)
|
||||
{
|
||||
gSaveBlock2Ptr->apprentices[0].monData[i].species = 0;
|
||||
gSaveBlock2Ptr->apprentices[0].monData[i].item = 0;
|
||||
gSaveBlock2Ptr->apprentices[0].party[i].species = 0;
|
||||
gSaveBlock2Ptr->apprentices[0].party[i].item = 0;
|
||||
for (j = 0; j < 4; j++)
|
||||
gSaveBlock2Ptr->apprentices[0].monData[i].moves[j] = 0;
|
||||
gSaveBlock2Ptr->apprentices[0].party[i].moves[j] = 0;
|
||||
}
|
||||
|
||||
j = PLAYER_APPRENTICE.field_B1_2;
|
||||
for (i = 0; i < 3; i++)
|
||||
{
|
||||
apprenticeMons[j] = &gSaveBlock2Ptr->apprentices[0].monData[i];
|
||||
apprenticeMons[j] = &gSaveBlock2Ptr->apprentices[0].party[i];
|
||||
j = (j + 1) % 3;
|
||||
}
|
||||
|
||||
@@ -1975,7 +1968,7 @@ static void sub_81A0FFC(void)
|
||||
StringCopy(stringDst, gText_OpenLevel);
|
||||
break;
|
||||
case APPRENTICE_BUFF_EASY_CHAT:
|
||||
ConvertBattleFrontierTrainerSpeechToString(gSaveBlock2Ptr->apprentices[0].easyChatWords);
|
||||
FrontierSpeechToString(gSaveBlock2Ptr->apprentices[0].easyChatWords);
|
||||
StringCopy(stringDst, gStringVar4);
|
||||
break;
|
||||
case APPRENTICE_BUFF_SPECIES4:
|
||||
@@ -2261,7 +2254,7 @@ static void sub_81A1438(void)
|
||||
|
||||
StringCopy(gSaveBlock2Ptr->apprentices[0].playerName, gSaveBlock2Ptr->playerName);
|
||||
gSaveBlock2Ptr->apprentices[0].language = gGameLanguage;
|
||||
sub_8165AE8(&gSaveBlock2Ptr->apprentices[0]);
|
||||
CalcApprenticeChecksum(&gSaveBlock2Ptr->apprentices[0]);
|
||||
}
|
||||
|
||||
static void sub_81A150C(void)
|
||||
@@ -2270,51 +2263,46 @@ static void sub_81A150C(void)
|
||||
u8 mapObjectGfxId;
|
||||
u8 class = gApprentices[gSaveBlock2Ptr->apprentices[0].id].facilityClass;
|
||||
|
||||
for (i = 0; i < 30 && gUnknown_085DCEDC[i] != class; i++)
|
||||
// Search male classes.
|
||||
for (i = 0; i < ARRAY_COUNT(gTowerMaleFacilityClasses) && gTowerMaleFacilityClasses[i] != class; i++)
|
||||
;
|
||||
|
||||
if (i != 30)
|
||||
if (i != ARRAY_COUNT(gTowerMaleFacilityClasses))
|
||||
{
|
||||
mapObjectGfxId = gUnknown_085DCF0E[i];
|
||||
mapObjectGfxId = gTowerMaleTrainerGfxIds[i];
|
||||
VarSet(VAR_OBJ_GFX_ID_0, mapObjectGfxId);
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; i < 20 && gUnknown_085DCEFA[i] != class; i++)
|
||||
;
|
||||
|
||||
if (i != 20)
|
||||
{
|
||||
mapObjectGfxId = gUnknown_085DCF2C[i];
|
||||
VarSet(VAR_OBJ_GFX_ID_0, mapObjectGfxId);
|
||||
}
|
||||
for (i = 0; i < ARRAY_COUNT(gTowerFemaleFacilityClasses) && gTowerFemaleFacilityClasses[i] != class; i++)
|
||||
;
|
||||
if (i != ARRAY_COUNT(gTowerFemaleFacilityClasses))
|
||||
{
|
||||
mapObjectGfxId = gTowerFemaleTrainerGfxIds[i];
|
||||
VarSet(VAR_OBJ_GFX_ID_0, mapObjectGfxId);
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_81A15A4(void)
|
||||
static void Script_SetPlayerApprenticeTrainerGfxId(void)
|
||||
{
|
||||
u8 i;
|
||||
u8 mapObjectGfxId;
|
||||
u8 class = gApprentices[PLAYER_APPRENTICE.id].facilityClass;
|
||||
|
||||
for (i = 0; i < 30 && gUnknown_085DCEDC[i] != class; i++)
|
||||
for (i = 0; i < ARRAY_COUNT(gTowerMaleFacilityClasses) && gTowerMaleFacilityClasses[i] != class; i++)
|
||||
;
|
||||
|
||||
if (i != 30)
|
||||
if (i != ARRAY_COUNT(gTowerMaleFacilityClasses))
|
||||
{
|
||||
mapObjectGfxId = gUnknown_085DCF0E[i];
|
||||
mapObjectGfxId = gTowerMaleTrainerGfxIds[i];
|
||||
VarSet(VAR_OBJ_GFX_ID_0, mapObjectGfxId);
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; i < 20 && gUnknown_085DCEFA[i] != class; i++)
|
||||
;
|
||||
|
||||
if (i != 20)
|
||||
{
|
||||
mapObjectGfxId = gUnknown_085DCF2C[i];
|
||||
VarSet(VAR_OBJ_GFX_ID_0, mapObjectGfxId);
|
||||
}
|
||||
for (i = 0; i < ARRAY_COUNT(gTowerFemaleFacilityClasses) && gTowerFemaleFacilityClasses[i] != class; i++)
|
||||
;
|
||||
if (i != ARRAY_COUNT(gTowerFemaleFacilityClasses))
|
||||
{
|
||||
mapObjectGfxId = gTowerFemaleTrainerGfxIds[i];
|
||||
VarSet(VAR_OBJ_GFX_ID_0, mapObjectGfxId);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -57,18 +57,12 @@ struct UnkStruct_860DD10
|
||||
|
||||
extern void sub_81B8558(void);
|
||||
extern u32 sub_81A39C4(void);
|
||||
extern u16 sub_8162548(u8, u8);
|
||||
extern u16 RandomizeFacilityTrainerMonId(u16);
|
||||
extern u8 GetFacilityEnemyMonLevel(void);
|
||||
extern u16 sub_81A5060(u8 monId, u8 moveSlotId);
|
||||
extern u8 sub_81A50F0(u8, u8);
|
||||
extern u8 sub_81A50B0(u8);
|
||||
extern void sub_8162614(u16, u8);
|
||||
extern void sub_81A4C30(void);
|
||||
extern bool8 sub_81A3610(void);
|
||||
extern u16 sub_81A4FF0(u8);
|
||||
extern u8 GetFrontierTrainerFrontSpriteId(u16);
|
||||
extern u8 GetFrontierOpponentClass(u16);
|
||||
extern void ReducePlayerPartyToThree(void);
|
||||
|
||||
extern u8 gUnknown_0203CEF8[];
|
||||
@@ -2410,7 +2404,7 @@ static void sub_818E9CC(void)
|
||||
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
|
||||
|
||||
gSaveBlock2Ptr->frontier.field_CA8 = 0;
|
||||
gSaveBlock2Ptr->frontier.field_CB2 = 0;
|
||||
gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0;
|
||||
gSaveBlock2Ptr->frontier.field_CA9_a = 0;
|
||||
gSaveBlock2Ptr->frontier.field_CA9_b = 0;
|
||||
if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860D0EC[battleMode][lvlMode]))
|
||||
@@ -2581,13 +2575,13 @@ static void InitDomeTrainers(void)
|
||||
|
||||
for (i = 0; i < 3; i++)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.domeMonId[0][i] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.field_CAA[i] - 1], MON_DATA_SPECIES, NULL);
|
||||
gSaveBlock2Ptr->frontier.domeMonId[0][i] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], MON_DATA_SPECIES, NULL);
|
||||
for (j = 0; j < 4; j++)
|
||||
gSaveBlock2Ptr->frontier.field_EFC[i].moves[j] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.field_CAA[i] - 1], MON_DATA_MOVE1 + j, NULL);
|
||||
gSaveBlock2Ptr->frontier.field_EFC[i].moves[j] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], MON_DATA_MOVE1 + j, NULL);
|
||||
for (j = 0; j < 6; j++)
|
||||
gSaveBlock2Ptr->frontier.field_EFC[i].evs[j] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.field_CAA[i] - 1], MON_DATA_HP_EV + j, NULL);
|
||||
gSaveBlock2Ptr->frontier.field_EFC[i].evs[j] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], MON_DATA_HP_EV + j, NULL);
|
||||
|
||||
gSaveBlock2Ptr->frontier.field_EFC[i].nature = GetNature(&gPlayerParty[gSaveBlock2Ptr->frontier.field_CAA[i] - 1]);
|
||||
gSaveBlock2Ptr->frontier.field_EFC[i].nature = GetNature(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1]);
|
||||
}
|
||||
|
||||
for (i = 1; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++)
|
||||
@@ -2649,7 +2643,7 @@ static void InitDomeTrainers(void)
|
||||
statSums[0] = 0;
|
||||
for (i = 0; i < 3; i++)
|
||||
{
|
||||
trainerId = gSaveBlock2Ptr->frontier.field_CAA[i] - 1; // Great variable choice, gamefreak.
|
||||
trainerId = gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1; // Great variable choice, gamefreak.
|
||||
statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_ATK, NULL);
|
||||
statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_DEF, NULL);
|
||||
statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_SPATK, NULL);
|
||||
@@ -2667,7 +2661,7 @@ static void InitDomeTrainers(void)
|
||||
monTypesBits >>= 1;
|
||||
}
|
||||
|
||||
monLevel = GetFacilityEnemyMonLevel();
|
||||
monLevel = SetFacilityPtrsGetLevel();
|
||||
statSums[0] += (monTypesCount * monLevel) / 20;
|
||||
|
||||
for (i = 1; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++)
|
||||
@@ -2810,12 +2804,12 @@ static void SwapDomeTrainers(s32 id1, s32 id2, u16 *statsArray)
|
||||
|
||||
static void sub_818F9B0(void)
|
||||
{
|
||||
StringCopy(gStringVar1, gRoundsStringTable[gSaveBlock2Ptr->frontier.field_CB2]);
|
||||
StringCopy(gStringVar1, gRoundsStringTable[gSaveBlock2Ptr->frontier.curChallengeBattleNum]);
|
||||
}
|
||||
|
||||
static void sub_818F9E0(void)
|
||||
{
|
||||
StringCopy(gStringVar1, gRoundsStringTable[gSaveBlock2Ptr->frontier.field_CB2]);
|
||||
StringCopy(gStringVar1, gRoundsStringTable[gSaveBlock2Ptr->frontier.curChallengeBattleNum]);
|
||||
CopyDomeTrainerName(gStringVar2, gTrainerBattleOpponent_A);
|
||||
}
|
||||
|
||||
@@ -2833,7 +2827,7 @@ static void CreateDomeMon(u8 monPartyId, u16 tournamentTrainerId, u8 tournamentM
|
||||
s32 i;
|
||||
u8 happiness = 0xFF;
|
||||
u8 fixedIv = GetDomeTrainerMonIvs(tournamentTrainerId); // BUG: Should be using trainerId instead of tournamentTrainerId. As a result, all Pokemon have ivs of 3.
|
||||
u8 level = GetFacilityEnemyMonLevel();
|
||||
u8 level = SetFacilityPtrsGetLevel();
|
||||
CreateMonWithEVSpreadPersonalityOTID(&gEnemyParty[monPartyId],
|
||||
gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].species,
|
||||
level,
|
||||
@@ -3466,12 +3460,12 @@ static void sub_8190298(void)
|
||||
|
||||
static u16 TrainerIdOfPlayerOpponent(void)
|
||||
{
|
||||
return gSaveBlock2Ptr->frontier.domeTrainers[TournamentIdOfOpponent(gSaveBlock2Ptr->frontier.field_CB2, TRAINER_PLAYER)].trainerId;
|
||||
return gSaveBlock2Ptr->frontier.domeTrainers[TournamentIdOfOpponent(gSaveBlock2Ptr->frontier.curChallengeBattleNum, TRAINER_PLAYER)].trainerId;
|
||||
}
|
||||
|
||||
static void sub_81902E4(void)
|
||||
{
|
||||
sub_8162614(gTrainerBattleOpponent_A, 0);
|
||||
SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0);
|
||||
}
|
||||
|
||||
static void sub_81902F8(void)
|
||||
@@ -3805,7 +3799,7 @@ static void sub_8190B40(struct Sprite *sprite)
|
||||
s32 taskId1 = sprite->data[0];
|
||||
s32 arrId = gTasks[gTasks[taskId1].data[4]].data[1];
|
||||
s32 tournmanetTrainerId = gUnknown_0860D080[arrId];
|
||||
s32 r12 = gSaveBlock2Ptr->frontier.field_CB2;
|
||||
s32 roundId = gSaveBlock2Ptr->frontier.curChallengeBattleNum;
|
||||
|
||||
if (gTasks[taskId1].data[3] == 1)
|
||||
{
|
||||
@@ -3817,7 +3811,7 @@ static void sub_8190B40(struct Sprite *sprite)
|
||||
sprite->invisible = FALSE;
|
||||
}
|
||||
else if (!gSaveBlock2Ptr->frontier.domeTrainers[tournmanetTrainerId].isEliminated
|
||||
&& sBattleDomeStruct->unk_10 - 1 < r12)
|
||||
&& sBattleDomeStruct->unk_10 - 1 < roundId)
|
||||
{
|
||||
sprite->invisible = FALSE;
|
||||
}
|
||||
@@ -4621,7 +4615,7 @@ static u8 sub_819221C(u8 taskId)
|
||||
s32 taskId2 = gTasks[taskId].data[4];
|
||||
s32 r5 = gTasks[taskId2].data[1];
|
||||
u8 r10 = gUnknown_0860D080[r5];
|
||||
u16 roundId = gSaveBlock2Ptr->frontier.field_CB2;
|
||||
u16 roundId = gSaveBlock2Ptr->frontier.curChallengeBattleNum;
|
||||
|
||||
if (gMain.newKeys & (A_BUTTON | B_BUTTON))
|
||||
retVal = 9;
|
||||
@@ -5373,7 +5367,7 @@ static void sub_81938E0(void)
|
||||
|
||||
sub_8194D48();
|
||||
gSaveBlock2Ptr->frontier.lvlMode = gSaveBlock2Ptr->frontier.field_D0A - 1;
|
||||
gSaveBlock2Ptr->frontier.field_CB2 = 3;
|
||||
gSaveBlock2Ptr->frontier.curChallengeBattleNum = 3;
|
||||
taskId = CreateTask(sub_8194220, 0);
|
||||
gTasks[taskId].data[0] = 0;
|
||||
gTasks[taskId].data[1] = 0;
|
||||
@@ -5475,7 +5469,7 @@ static u8 sub_8193BDC(u8 taskId)
|
||||
u8 retVal = 1;
|
||||
s32 arrId = 4;
|
||||
s32 spriteId = gTasks[taskId].data[1];
|
||||
s32 roundId = gSaveBlock2Ptr->frontier.field_CB2;
|
||||
s32 roundId = gSaveBlock2Ptr->frontier.curChallengeBattleNum;
|
||||
|
||||
if (gMain.newKeys == B_BUTTON || (gMain.newKeys & A_BUTTON && spriteId == 31))
|
||||
{
|
||||
@@ -5536,19 +5530,19 @@ static void sub_8193D7C(void)
|
||||
if (gSpecialVar_0x8005 == 1)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(gTrainerBattleOpponent_A)].isEliminated = 1;
|
||||
gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(gTrainerBattleOpponent_A)].eliminatedAt = gSaveBlock2Ptr->frontier.field_CB2;
|
||||
gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(gTrainerBattleOpponent_A)].eliminatedAt = gSaveBlock2Ptr->frontier.curChallengeBattleNum;
|
||||
gSaveBlock2Ptr->frontier.field_EC0[TrainerIdToTournamentId(gTrainerBattleOpponent_A)] = gBattleResults.lastUsedMovePlayer;
|
||||
if (gSaveBlock2Ptr->frontier.field_CB2 < DOME_FINAL)
|
||||
DecideRoundWinners(gSaveBlock2Ptr->frontier.field_CB2);
|
||||
if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < DOME_FINAL)
|
||||
DecideRoundWinners(gSaveBlock2Ptr->frontier.curChallengeBattleNum);
|
||||
}
|
||||
else
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(TRAINER_PLAYER)].isEliminated = 1;
|
||||
gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(TRAINER_PLAYER)].eliminatedAt = gSaveBlock2Ptr->frontier.field_CB2;
|
||||
gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(TRAINER_PLAYER)].eliminatedAt = gSaveBlock2Ptr->frontier.curChallengeBattleNum;
|
||||
gSaveBlock2Ptr->frontier.field_EC0[TrainerIdToTournamentId(TRAINER_PLAYER)] = gBattleResults.lastUsedMoveOpponent;
|
||||
if (gBattleOutcome == B_OUTCOME_FORFEITED || gSpecialVar_0x8005 == 9)
|
||||
gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(TRAINER_PLAYER)].unk3 = 1;
|
||||
for (i = gSaveBlock2Ptr->frontier.field_CB2; i < DOME_ROUNDS_COUNT; i++)
|
||||
for (i = gSaveBlock2Ptr->frontier.curChallengeBattleNum; i < DOME_ROUNDS_COUNT; i++)
|
||||
DecideRoundWinners(i);
|
||||
}
|
||||
}
|
||||
@@ -5561,7 +5555,7 @@ static u16 GetWinningMove(s32 winnerTournamentId, s32 loserTournamentId, u8 roun
|
||||
u16 bestScore = 0;
|
||||
u16 bestId = 0;
|
||||
s32 movePower = 0;
|
||||
GetFacilityEnemyMonLevel(); // Unused return variable.
|
||||
SetFacilityPtrsGetLevel();
|
||||
|
||||
// Calc move points of all 4 moves for all 3 pokemon hitting all 3 target mons.
|
||||
for (i = 0; i < 3; i++)
|
||||
@@ -5761,7 +5755,7 @@ static void sub_8194220(u8 taskId)
|
||||
AddTextPrinter(&textPrinter, 0, NULL);
|
||||
for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++)
|
||||
{
|
||||
s32 var, var2;
|
||||
s32 roundId, var2;
|
||||
|
||||
CopyDomeTrainerName(gDisplayedStringBattle, gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId);
|
||||
if (r10 == 1)
|
||||
@@ -5774,9 +5768,9 @@ static void sub_8194220(u8 taskId)
|
||||
sub_81948EC(i, var2);
|
||||
}
|
||||
}
|
||||
else if (gSaveBlock2Ptr->frontier.field_CB2 != DOME_ROUND2)
|
||||
else if (gSaveBlock2Ptr->frontier.curChallengeBattleNum != DOME_ROUND2)
|
||||
{
|
||||
sub_81948EC(i, gSaveBlock2Ptr->frontier.field_CB2 - 2);
|
||||
sub_81948EC(i, gSaveBlock2Ptr->frontier.curChallengeBattleNum - 2);
|
||||
}
|
||||
}
|
||||
else if (r10 == 0)
|
||||
@@ -5789,23 +5783,23 @@ static void sub_8194220(u8 taskId)
|
||||
sub_81948EC(i, var2);
|
||||
}
|
||||
}
|
||||
else if (gSaveBlock2Ptr->frontier.field_CB2 != DOME_ROUND1)
|
||||
else if (gSaveBlock2Ptr->frontier.curChallengeBattleNum != DOME_ROUND1)
|
||||
{
|
||||
if (gTasks[taskId].data[4])
|
||||
var2 = gSaveBlock2Ptr->frontier.field_CB2;
|
||||
var2 = gSaveBlock2Ptr->frontier.curChallengeBattleNum;
|
||||
else
|
||||
var2 = gSaveBlock2Ptr->frontier.field_CB2 - 1;
|
||||
var2 = gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1;
|
||||
sub_81948EC(i, var2);
|
||||
}
|
||||
}
|
||||
|
||||
if (gTasks[taskId].data[4])
|
||||
var = gSaveBlock2Ptr->frontier.field_CB2;
|
||||
roundId = gSaveBlock2Ptr->frontier.curChallengeBattleNum;
|
||||
else
|
||||
var = gSaveBlock2Ptr->frontier.field_CB2 - 1;
|
||||
roundId = gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1;
|
||||
|
||||
if ( ((r10 == 1 && gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt < gSaveBlock2Ptr->frontier.field_CB2 - 1)
|
||||
|| (r10 == 0 && gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt <= var))
|
||||
if ( ((r10 == 1 && gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt < gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1)
|
||||
|| (r10 == 0 && gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt <= roundId))
|
||||
&& gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated)
|
||||
{
|
||||
if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == TRAINER_PLAYER)
|
||||
@@ -5930,7 +5924,7 @@ static void sub_8194950(u8 taskId)
|
||||
for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++)
|
||||
{
|
||||
CopyDomeTrainerName(gDisplayedStringBattle, gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId);
|
||||
if (gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt == gSaveBlock2Ptr->frontier.field_CB2 - 1
|
||||
if (gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt == gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1
|
||||
&& gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated)
|
||||
{
|
||||
if (gUnknown_0860D3F1[i][0] == 0)
|
||||
@@ -5945,8 +5939,8 @@ static void sub_8194950(u8 taskId)
|
||||
}
|
||||
if (!gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated)
|
||||
{
|
||||
s32 var = gSaveBlock2Ptr->frontier.field_CB2 - 1;
|
||||
sub_81948EC(i, var);
|
||||
s32 roundId = gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1;
|
||||
sub_81948EC(i, roundId);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6084,7 +6078,7 @@ static void sub_8194D68(void)
|
||||
|
||||
for (i = 0; i < 2; i++)
|
||||
{
|
||||
s32 playerMonId = gSaveBlock2Ptr->frontier.field_CAA[gUnknown_0203CEF8[i] - 1] - 1;
|
||||
s32 playerMonId = gSaveBlock2Ptr->frontier.selectedPartyMons[gUnknown_0203CEF8[i] - 1] - 1;
|
||||
s32 count;
|
||||
|
||||
for (moveSlot = 0; moveSlot < 4; moveSlot++)
|
||||
@@ -6110,7 +6104,7 @@ static void sub_8194E44(void)
|
||||
|
||||
for (i = 0; i < 2; i++)
|
||||
{
|
||||
s32 playerMonId = gSaveBlock2Ptr->frontier.field_CAA[gUnknown_0203CEF8[i] - 1] - 1;
|
||||
s32 playerMonId = gSaveBlock2Ptr->frontier.selectedPartyMons[gUnknown_0203CEF8[i] - 1] - 1;
|
||||
u16 item = GetMonData(&gSaveBlock1Ptr->playerParty[playerMonId], MON_DATA_HELD_ITEM, NULL);
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &item);
|
||||
}
|
||||
@@ -6425,7 +6419,7 @@ static void DecideRoundWinners(u8 roundId)
|
||||
static void CopyDomeTrainerName(u8 *dst, u16 trainerId)
|
||||
{
|
||||
s32 i = 0;
|
||||
GetFacilityEnemyMonLevel(); // Unused return value.
|
||||
SetFacilityPtrsGetLevel();
|
||||
|
||||
if (trainerId == TRAINER_FRONTIER_BRAIN)
|
||||
{
|
||||
@@ -6440,7 +6434,7 @@ static void CopyDomeTrainerName(u8 *dst, u16 trainerId)
|
||||
}
|
||||
else if (trainerId < 300)
|
||||
{
|
||||
for (i = 0; i < FRONTIER_TRAINER_NAME_LENGTH; i++)
|
||||
for (i = 0; i < PLAYER_NAME_LENGTH; i++)
|
||||
dst[i] = gFacilityTrainers[trainerId].trainerName[i];
|
||||
}
|
||||
dst[i] = EOS;
|
||||
@@ -6461,7 +6455,7 @@ static void CopyDomeBrainTrainerName(u8 *dst)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < FRONTIER_TRAINER_NAME_LENGTH; i++)
|
||||
for (i = 0; i < PLAYER_NAME_LENGTH; i++)
|
||||
dst[i] = gTrainers[TRAINER_TUCKER].trainerName[i];
|
||||
dst[i] = EOS;
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#include "random.h"
|
||||
#include "battle_tower.h"
|
||||
|
||||
extern void sub_8162614(u16, u8);
|
||||
extern void SetBattleFacilityTrainerGfxId(u16, u8);
|
||||
|
||||
extern void (* const gUnknown_0860DE50[])(void);
|
||||
extern const u32 gUnknown_0860DE98[][2];
|
||||
@@ -23,7 +23,7 @@ void sub_8195980(void)
|
||||
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
|
||||
|
||||
gSaveBlock2Ptr->frontier.field_CA8 = 0;
|
||||
gSaveBlock2Ptr->frontier.field_CB2 = 0;
|
||||
gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0;
|
||||
gSaveBlock2Ptr->frontier.field_CA9_a = 0;
|
||||
gSaveBlock2Ptr->frontier.field_CA9_b = 0;
|
||||
if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860DE98[battleMode][lvlMode]))
|
||||
@@ -90,13 +90,13 @@ void sub_8195BB0(void)
|
||||
void sub_8195C20(void)
|
||||
{
|
||||
gTrainerBattleOpponent_A = 5 *(Random() % 255) / 64u;
|
||||
sub_8162614(gTrainerBattleOpponent_A, 0);
|
||||
SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0);
|
||||
}
|
||||
|
||||
void sub_8195C50(void)
|
||||
{
|
||||
if (gTrainerBattleOpponent_A < 300)
|
||||
ConvertBattleFrontierTrainerSpeechToString(gFacilityTrainers[gTrainerBattleOpponent_A].speechBefore);
|
||||
FrontierSpeechToString(gFacilityTrainers[gTrainerBattleOpponent_A].speechBefore);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -52,6 +52,7 @@
|
||||
#include "international_string_util.h"
|
||||
#include "pokeball.h"
|
||||
#include "party_menu.h"
|
||||
#include "battle_tower.h"
|
||||
|
||||
struct UnknownPokemonStruct4
|
||||
{
|
||||
@@ -106,9 +107,6 @@ extern const u8 gText_Confusion[];
|
||||
extern const u8 gText_Love[];
|
||||
|
||||
// functions
|
||||
extern void GetFrontierTrainerName(u8* dst, u16 trainerId); // battle tower
|
||||
extern void sub_8166188(void); // battle tower, sets link battle mons level but why?
|
||||
extern void sub_8165B88(u8* dst, u16 trainerId); // battle tower, gets language
|
||||
extern void sub_81B9150(void);
|
||||
extern void sub_80B3AF8(u8 taskId); // cable club
|
||||
extern void sub_81A56B4(void); // battle frontier 2
|
||||
@@ -1159,9 +1157,9 @@ static void CB2_HandleStartMultiPartnerBattle(void)
|
||||
gLinkPlayers[3].id = 3;
|
||||
GetFrontierTrainerName(gLinkPlayers[2].name, gTrainerBattleOpponent_A);
|
||||
GetFrontierTrainerName(gLinkPlayers[3].name, gTrainerBattleOpponent_B);
|
||||
sub_8165B88(&language, gTrainerBattleOpponent_A);
|
||||
GetBattleTowerTrainerLanguage(&language, gTrainerBattleOpponent_A);
|
||||
gLinkPlayers[2].language = language;
|
||||
sub_8165B88(&language, gTrainerBattleOpponent_B);
|
||||
GetBattleTowerTrainerLanguage(&language, gTrainerBattleOpponent_B);
|
||||
gLinkPlayers[3].language = language;
|
||||
|
||||
if (sub_800A520())
|
||||
|
||||
@@ -18,6 +18,8 @@
|
||||
#include "recorded_battle.h"
|
||||
#include "international_string_util.h"
|
||||
#include "battle_frontier_2.h"
|
||||
#include "battle_tower.h"
|
||||
#include "data2.h"
|
||||
|
||||
struct BattleWindowText
|
||||
{
|
||||
@@ -35,7 +37,6 @@ struct BattleWindowText
|
||||
|
||||
extern u8 gUnknown_0203C7B4;
|
||||
|
||||
extern const u8 gMoveNames[MOVES_COUNT][13];
|
||||
extern const u8 gTrainerClassNames[][13];
|
||||
extern const u16 gUnknown_08D85620[];
|
||||
|
||||
@@ -46,14 +47,10 @@ extern const u8 gText_PkmnTransferredSomeonesPC[];
|
||||
extern const u8 gText_PkmnTransferredLanettesPC[];
|
||||
|
||||
extern u8 GetFrontierBrainTrainerClass(void); // battle_frontier_2
|
||||
extern u8 GetFrontierOpponentClass(u16 trainerId); // battle_tower
|
||||
extern u8 GetTrainerHillOpponentClass(u16 trainerId); // pokenav
|
||||
extern u8 GetEreaderTrainerClassId(void); // battle_tower
|
||||
extern void CopyFrontierBrainTrainerName(u8 *txtPtr); // battle_frontier_2
|
||||
extern void GetTrainerHillTrainerName(u8 *txtPtr, u16 trainerId); // pokenav
|
||||
extern void GetEreaderTrainerName(u8 *txtPtr);
|
||||
extern void CopyTrainerHillTrainerText(u8 arg0, u16 trainerId); // pokenav
|
||||
extern void GetFrontierTrainerName(u8 *dst, u16 trainerId);
|
||||
|
||||
// this file's functions
|
||||
static void ChooseMoveUsedParticle(u8 *textPtr);
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
#include "string_util.h"
|
||||
#include "overworld.h"
|
||||
#include "field_weather.h"
|
||||
#include "battle_tower.h"
|
||||
#include "gym_leader_rematch.h"
|
||||
#include "constants/map_types.h"
|
||||
#include "constants/battle_frontier.h"
|
||||
@@ -67,8 +68,6 @@ extern u16 sub_81D6180(u8 localId);
|
||||
extern bool8 GetBattlePyramidTrainerFlag(u8 eventObjId);
|
||||
extern bool8 GetTrainerHillTrainerFlag(u8 eventObjId);
|
||||
extern bool8 sub_81D5C18(void);
|
||||
extern void sub_816306C(u8 a0);
|
||||
extern void sub_8163048(u8 a0);
|
||||
extern void sub_81A9B04(void);
|
||||
extern void sub_81D639C(void);
|
||||
extern void sub_81D6384(void);
|
||||
@@ -885,8 +884,8 @@ u8 sub_80B100C(s32 arg0)
|
||||
return sUnknown_0854FE98[Random() % ARRAY_COUNT(sUnknown_0854FE98)];
|
||||
}
|
||||
|
||||
var = gSaveBlock2Ptr->frontier.field_CB4[gSaveBlock2Ptr->frontier.field_CB2 * 2 + 0]
|
||||
+ gSaveBlock2Ptr->frontier.field_CB4[gSaveBlock2Ptr->frontier.field_CB2 * 2 + 1];
|
||||
var = gSaveBlock2Ptr->frontier.field_CB4[gSaveBlock2Ptr->frontier.curChallengeBattleNum * 2 + 0]
|
||||
+ gSaveBlock2Ptr->frontier.field_CB4[gSaveBlock2Ptr->frontier.curChallengeBattleNum * 2 + 1];
|
||||
|
||||
return sUnknown_0854FE98[var % ARRAY_COUNT(sUnknown_0854FE98)];
|
||||
}
|
||||
@@ -1264,7 +1263,7 @@ void BattleSetup_StartTrainerBattle(void)
|
||||
|
||||
if (gNoOfApproachingTrainers == 2)
|
||||
{
|
||||
sub_816306C(1);
|
||||
FillFrontierTrainersParties(1);
|
||||
ZeroMonData(&gEnemyParty[1]);
|
||||
ZeroMonData(&gEnemyParty[2]);
|
||||
ZeroMonData(&gEnemyParty[4]);
|
||||
@@ -1272,7 +1271,7 @@ void BattleSetup_StartTrainerBattle(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_8163048(1);
|
||||
FillFrontierTrainerParty(1);
|
||||
ZeroMonData(&gEnemyParty[1]);
|
||||
ZeroMonData(&gEnemyParty[2]);
|
||||
}
|
||||
|
||||
@@ -102,7 +102,7 @@ void sub_81B99B4(void)
|
||||
static void sub_81B99D4(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.field_CA8 = 0;
|
||||
gSaveBlock2Ptr->frontier.field_CB2 = 0;
|
||||
gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0;
|
||||
gSaveBlock2Ptr->frontier.field_CA9_a = FALSE;
|
||||
saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
|
||||
}
|
||||
@@ -120,13 +120,13 @@ static void sub_81B9A44(void)
|
||||
static void sub_81B9A60(void)
|
||||
{
|
||||
gTrainerBattleOpponent_A = (u32)((Random() % 255) * 5) / 64;
|
||||
sub_8162614(gTrainerBattleOpponent_A, 0);
|
||||
SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0);
|
||||
}
|
||||
|
||||
static void sub_81B9A90(void)
|
||||
{
|
||||
if (gTrainerBattleOpponent_A < 300)
|
||||
ConvertBattleFrontierTrainerSpeechToString(gFacilityTrainers[gTrainerBattleOpponent_A].speechBefore);
|
||||
FrontierSpeechToString(gFacilityTrainers[gTrainerBattleOpponent_A].speechBefore);
|
||||
}
|
||||
|
||||
static void sub_81B9ABC(void)
|
||||
@@ -164,7 +164,7 @@ void sub_81B9B80(void)
|
||||
static void sub_81B9BA0(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.field_CA8 = 0;
|
||||
gSaveBlock2Ptr->frontier.field_CB2 = 0;
|
||||
gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0;
|
||||
gSaveBlock2Ptr->frontier.field_CA9_a = FALSE;
|
||||
saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
|
||||
}
|
||||
@@ -219,7 +219,7 @@ void sub_81B9D08(void)
|
||||
static void sub_81B9D28(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.field_CA8 = 0;
|
||||
gSaveBlock2Ptr->frontier.field_CB2 = 0;
|
||||
gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0;
|
||||
gSaveBlock2Ptr->frontier.field_CA9_a = FALSE;
|
||||
saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
|
||||
}
|
||||
@@ -551,25 +551,25 @@ static void sub_81BA040(void)
|
||||
do
|
||||
{
|
||||
trainerId = Random() % 30;
|
||||
for (i = 0; i < gSaveBlock2Ptr->frontier.field_CB2; i++)
|
||||
for (i = 0; i < gSaveBlock2Ptr->frontier.curChallengeBattleNum; i++)
|
||||
{
|
||||
if (gSaveBlock2Ptr->frontier.field_CB4[i] == trainerId)
|
||||
break;
|
||||
}
|
||||
} while (i != gSaveBlock2Ptr->frontier.field_CB2);
|
||||
} while (i != gSaveBlock2Ptr->frontier.curChallengeBattleNum);
|
||||
|
||||
gTrainerBattleOpponent_A = trainerId;
|
||||
while (gFacilityTrainers[gTrainerBattleOpponent_A].btMonPool[monPoolCount] != 0xFFFF)
|
||||
while (gFacilityTrainers[gTrainerBattleOpponent_A].bfMonPool[monPoolCount] != 0xFFFF)
|
||||
monPoolCount++;
|
||||
if (monPoolCount > 8)
|
||||
break;
|
||||
monPoolCount = 0;
|
||||
}
|
||||
|
||||
if (gSaveBlock2Ptr->frontier.field_CB2 < 2)
|
||||
gSaveBlock2Ptr->frontier.field_CB4[gSaveBlock2Ptr->frontier.field_CB2] = gTrainerBattleOpponent_A;
|
||||
if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < 2)
|
||||
gSaveBlock2Ptr->frontier.field_CB4[gSaveBlock2Ptr->frontier.curChallengeBattleNum] = gTrainerBattleOpponent_A;
|
||||
|
||||
monSetsPool = gFacilityTrainers[gTrainerBattleOpponent_A].btMonPool;
|
||||
monSetsPool = gFacilityTrainers[gTrainerBattleOpponent_A].bfMonPool;
|
||||
i = 0;
|
||||
while (i != 3)
|
||||
{
|
||||
|
||||
2798
src/battle_tower.c
2798
src/battle_tower.c
File diff suppressed because it is too large
Load Diff
@@ -2158,13 +2158,13 @@ void sub_8139F20(void)
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
if (gSaveBlock2Ptr->frontier.field_CE0[var][0] >= gSaveBlock2Ptr->frontier.field_CE0[var][1])
|
||||
if (gSaveBlock2Ptr->frontier.winStreaks[var][0] >= gSaveBlock2Ptr->frontier.winStreaks[var][1])
|
||||
{
|
||||
unk = gSaveBlock2Ptr->frontier.field_CE0[var][0];
|
||||
unk = gSaveBlock2Ptr->frontier.winStreaks[var][0];
|
||||
}
|
||||
else
|
||||
{
|
||||
unk = gSaveBlock2Ptr->frontier.field_CE0[var][1];
|
||||
unk = gSaveBlock2Ptr->frontier.winStreaks[var][1];
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
@@ -2244,7 +2244,7 @@ void sub_813A080(void)
|
||||
u16 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
|
||||
u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
|
||||
if (battleMode == 2 && !FlagGet(FLAG_0x152))
|
||||
if (battleMode == FRONTIER_MODE_MULTIS && !FlagGet(FLAG_0x152))
|
||||
{
|
||||
gSpecialVar_0x8005 = 5;
|
||||
gSpecialVar_0x8006 = 4;
|
||||
@@ -2253,7 +2253,7 @@ void sub_813A080(void)
|
||||
|
||||
for (i = 0; i < 9; i++)
|
||||
{
|
||||
if (gUnknown_085B2CDC[i] > gSaveBlock2Ptr->frontier.field_CE0[battleMode][lvlMode])
|
||||
if (gUnknown_085B2CDC[i] > gSaveBlock2Ptr->frontier.winStreaks[battleMode][lvlMode])
|
||||
{
|
||||
gSpecialVar_0x8005 = 4;
|
||||
gSpecialVar_0x8006 = i + 5;
|
||||
@@ -2733,8 +2733,6 @@ static void sub_813A46C(s32 itemIndex, bool8 onInit, struct ListMenu *list)
|
||||
}
|
||||
}
|
||||
|
||||
// stupid r5<->r6 swap
|
||||
#ifdef NONMATCHING
|
||||
static void sub_813A4EC(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
@@ -2752,7 +2750,11 @@ static void sub_813A4EC(u8 taskId)
|
||||
default:
|
||||
gSpecialVar_Result = itemId;
|
||||
PlaySE(SE_SELECT);
|
||||
if (!task->data[6] || itemId == task->data[1] - 1)
|
||||
if (!task->data[6])
|
||||
{
|
||||
sub_813A570(taskId);
|
||||
}
|
||||
else if (itemId == task->data[1] - 1)
|
||||
{
|
||||
sub_813A570(taskId);
|
||||
}
|
||||
@@ -2765,72 +2767,6 @@ static void sub_813A4EC(u8 taskId)
|
||||
break;
|
||||
}
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
static void sub_813A4EC(u8 taskId)
|
||||
{
|
||||
asm_unified("push {r4-r6,lr}\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r5, r0, 24\n\
|
||||
lsls r0, r5, 2\n\
|
||||
adds r0, r5\n\
|
||||
lsls r0, 3\n\
|
||||
ldr r1, =gTasks\n\
|
||||
adds r6, r0, r1\n\
|
||||
ldrh r0, [r6, 0x24]\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r0, 24\n\
|
||||
bl ListMenuHandleInputGetItemId\n\
|
||||
adds r4, r0, 0\n\
|
||||
movs r0, 0x2\n\
|
||||
negs r0, r0\n\
|
||||
cmp r4, r0\n\
|
||||
beq _0813A51C\n\
|
||||
adds r0, 0x1\n\
|
||||
cmp r4, r0\n\
|
||||
bne _0813A530\n\
|
||||
b _0813A566\n\
|
||||
.pool\n\
|
||||
_0813A51C:\n\
|
||||
ldr r1, =gSpecialVar_Result\n\
|
||||
movs r0, 0x7F\n\
|
||||
strh r0, [r1]\n\
|
||||
movs r0, 0x5\n\
|
||||
bl PlaySE\n\
|
||||
b _0813A54C\n\
|
||||
.pool\n\
|
||||
_0813A530:\n\
|
||||
ldr r0, =gSpecialVar_Result\n\
|
||||
strh r4, [r0]\n\
|
||||
movs r0, 0x5\n\
|
||||
bl PlaySE\n\
|
||||
movs r1, 0x14\n\
|
||||
ldrsh r0, [r6, r1]\n\
|
||||
cmp r0, 0\n\
|
||||
beq _0813A54C\n\
|
||||
movs r1, 0xA\n\
|
||||
ldrsh r0, [r6, r1]\n\
|
||||
subs r0, 0x1\n\
|
||||
cmp r4, r0\n\
|
||||
bne _0813A558\n\
|
||||
_0813A54C:\n\
|
||||
adds r0, r5, 0\n\
|
||||
bl sub_813A570\n\
|
||||
b _0813A566\n\
|
||||
.pool\n\
|
||||
_0813A558:\n\
|
||||
adds r0, r5, 0\n\
|
||||
bl sub_813A738\n\
|
||||
ldr r0, =sub_813A600\n\
|
||||
str r0, [r6]\n\
|
||||
bl EnableBothScriptContexts\n\
|
||||
_0813A566:\n\
|
||||
pop {r4-r6}\n\
|
||||
pop {r0}\n\
|
||||
bx r0\n\
|
||||
.pool");
|
||||
}
|
||||
#endif // NONMATCHING
|
||||
|
||||
static void sub_813A570(u8 taskId)
|
||||
{
|
||||
|
||||
@@ -314,7 +314,7 @@ static void ShowMapNamePopUpWindow(void)
|
||||
else
|
||||
{
|
||||
withoutPrefixPtr = &(mapDisplayHeader[3]);
|
||||
mapDisplayHeaderSource = gBattlePyramid_MapHeaderStrings[gSaveBlock2Ptr->frontier.field_CB2];
|
||||
mapDisplayHeaderSource = gBattlePyramid_MapHeaderStrings[gSaveBlock2Ptr->frontier.curChallengeBattleNum];
|
||||
}
|
||||
StringCopy(withoutPrefixPtr, mapDisplayHeaderSource);
|
||||
}
|
||||
|
||||
@@ -2879,10 +2879,10 @@ void CreateApprenticeMon(struct Pokemon *mon, const struct Apprentice *src, u8 m
|
||||
u8 language;
|
||||
u32 otId = gApprentices[src->id].otId;
|
||||
u32 personality = ((gApprentices[src->id].otId >> 8) | ((gApprentices[src->id].otId & 0xFF) << 8))
|
||||
+ src->monData[monId].species + src->number;
|
||||
+ src->party[monId].species + src->number;
|
||||
|
||||
CreateMon(mon,
|
||||
src->monData[monId].species,
|
||||
src->party[monId].species,
|
||||
GetFrontierEnemyMonLevel(src->lvlMode - 1),
|
||||
0x1F,
|
||||
TRUE,
|
||||
@@ -2890,9 +2890,9 @@ void CreateApprenticeMon(struct Pokemon *mon, const struct Apprentice *src, u8 m
|
||||
TRUE,
|
||||
otId);
|
||||
|
||||
SetMonData(mon, MON_DATA_HELD_ITEM, &src->monData[monId].item);
|
||||
SetMonData(mon, MON_DATA_HELD_ITEM, &src->party[monId].item);
|
||||
for (i = 0; i < 4; i++)
|
||||
SetMonMoveSlot(mon, src->monData[monId].moves[i], i);
|
||||
SetMonMoveSlot(mon, src->party[monId].moves[i], i);
|
||||
|
||||
evAmount = MAX_TOTAL_EVS / NUM_STATS;
|
||||
for (i = 0; i < NUM_STATS; i++)
|
||||
|
||||
@@ -69,6 +69,7 @@ struct PlayerRecordsRS
|
||||
struct EasyChatPair easyChatPairs[5];
|
||||
struct RecordMixingDayCareMail dayCareMail;
|
||||
struct RSBattleTowerRecord battleTowerRecord;
|
||||
u16 giftItem;
|
||||
u16 filler11C8[0x32];
|
||||
};
|
||||
|
||||
@@ -81,7 +82,7 @@ struct PlayerRecordsEmerald
|
||||
/* 0x1084 */ struct EasyChatPair easyChatPairs[5];
|
||||
/* 0x10ac */ struct RecordMixingDayCareMail dayCareMail;
|
||||
/* 0x1124 */ struct EmeraldBattleTowerRecord battleTowerRecord;
|
||||
/* 0x1210 */ u16 unk_1210;
|
||||
/* 0x1210 */ u16 giftItem;
|
||||
/* 0x1214 */ LilycoveLady lilycoveLady;
|
||||
/* 0x1254 */ struct Apprentice apprentice[2];
|
||||
/* 0x12dc */ struct UnkRecordMixingStruct2 unk_12dc;
|
||||
@@ -132,7 +133,7 @@ static void ReceiveBattleTowerData(void *battleTowerRecord, size_t, u8);
|
||||
static void ReceiveLilycoveLadyData(LilycoveLady *, size_t, u8);
|
||||
static void sub_80E7B2C(const u8 *);
|
||||
static void ReceiveDaycareMailData(struct RecordMixingDayCareMail *, size_t, u8, TVShow *);
|
||||
static void sub_80E7F68(u16 *item, u8 which);
|
||||
static void ReceiveGiftItem(u16 *item, u8 which);
|
||||
static void sub_80E7FF8(u8 taskId);
|
||||
static void sub_80E8110(struct Apprentice *arg0, struct Apprentice *arg1);
|
||||
static void ReceiveApprenticeData(struct Apprentice *arg0, size_t arg1, u32 arg2);
|
||||
@@ -197,10 +198,10 @@ static void SetSrcLookupPointers(void)
|
||||
sOldManSave = &gSaveBlock1Ptr->oldMan;
|
||||
sEasyChatPairsSave = gSaveBlock1Ptr->easyChatPairs;
|
||||
gUnknown_03001148 = &gUnknown_02039F9C;
|
||||
sBattleTowerSave = &gSaveBlock2Ptr->frontier.battleTower;
|
||||
sBattleTowerSave = &gSaveBlock2Ptr->frontier.towerPlayer;
|
||||
sLilycoveLadySave = &gSaveBlock1Ptr->lilycoveLady;
|
||||
gUnknown_03001154 = gSaveBlock2Ptr->apprentices;
|
||||
sBattleTowerSave_Duplicate = &gSaveBlock2Ptr->frontier.battleTower;
|
||||
sBattleTowerSave_Duplicate = &gSaveBlock2Ptr->frontier.towerPlayer;
|
||||
}
|
||||
|
||||
static void PrepareUnknownExchangePacket(struct PlayerRecordsRS *dest)
|
||||
@@ -212,10 +213,10 @@ static void PrepareUnknownExchangePacket(struct PlayerRecordsRS *dest)
|
||||
memcpy(&dest->oldMan, sOldManSave, sizeof(dest->oldMan));
|
||||
memcpy(dest->easyChatPairs, sEasyChatPairsSave, sizeof(dest->easyChatPairs));
|
||||
sub_80E89F8(&dest->dayCareMail);
|
||||
sub_81659DC(sBattleTowerSave, &dest->battleTowerRecord);
|
||||
EmeraldBattleTowerRecordToRuby(sBattleTowerSave, &dest->battleTowerRecord);
|
||||
|
||||
if (GetMultiplayerId() == 0)
|
||||
dest->battleTowerRecord.unk_11c8 = GetRecordMixingGift();
|
||||
dest->giftItem = GetRecordMixingGift();
|
||||
}
|
||||
|
||||
static void PrepareExchangePacketForRubySapphire(struct PlayerRecordsRS *dest)
|
||||
@@ -230,11 +231,11 @@ static void PrepareExchangePacketForRubySapphire(struct PlayerRecordsRS *dest)
|
||||
memcpy(dest->easyChatPairs, sEasyChatPairsSave, sizeof(dest->easyChatPairs));
|
||||
sub_80E89F8(&dest->dayCareMail);
|
||||
SanitizeDayCareMailForRuby(&dest->dayCareMail);
|
||||
sub_81659DC(sBattleTowerSave, &dest->battleTowerRecord);
|
||||
EmeraldBattleTowerRecordToRuby(sBattleTowerSave, &dest->battleTowerRecord);
|
||||
SanitizeRubyBattleTowerRecord(&dest->battleTowerRecord);
|
||||
|
||||
if (GetMultiplayerId() == 0)
|
||||
dest->battleTowerRecord.unk_11c8 = GetRecordMixingGift();
|
||||
dest->giftItem = GetRecordMixingGift();
|
||||
}
|
||||
|
||||
static void PrepareExchangePacket(void)
|
||||
@@ -263,7 +264,7 @@ static void PrepareExchangePacket(void)
|
||||
SanitizeEmeraldBattleTowerRecord(&sSentRecord->emerald.battleTowerRecord);
|
||||
|
||||
if (GetMultiplayerId() == 0)
|
||||
sSentRecord->emerald.unk_1210 = GetRecordMixingGift();
|
||||
sSentRecord->emerald.giftItem = GetRecordMixingGift();
|
||||
|
||||
sub_80E8110(sSentRecord->emerald.apprentice, gUnknown_03001154);
|
||||
sub_80E8260(&sSentRecord->emerald.unk_12dc);
|
||||
@@ -283,7 +284,7 @@ static void ReceiveExchangePacket(u32 which)
|
||||
ReceivePokeNewsData(sReceivedRecords->ruby.pokeNews, sizeof(struct PlayerRecordsRS), which);
|
||||
ReceiveOldManData(&sReceivedRecords->ruby.oldMan, sizeof(struct PlayerRecordsRS), which);
|
||||
ReceiveEasyChatPairsData(sReceivedRecords->ruby.easyChatPairs, sizeof(struct PlayerRecordsRS), which);
|
||||
sub_80E7F68(&sReceivedRecords->ruby.battleTowerRecord.unk_11c8, which);
|
||||
ReceiveGiftItem(&sReceivedRecords->ruby.giftItem, which);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -296,7 +297,7 @@ static void ReceiveExchangePacket(u32 which)
|
||||
ReceiveEasyChatPairsData(sReceivedRecords->emerald.easyChatPairs, sizeof(struct PlayerRecordsEmerald), which);
|
||||
ReceiveDaycareMailData(&sReceivedRecords->emerald.dayCareMail, sizeof(struct PlayerRecordsEmerald), which, sReceivedRecords->emerald.tvShows);
|
||||
ReceiveBattleTowerData(&sReceivedRecords->emerald.battleTowerRecord, sizeof(struct PlayerRecordsEmerald), which);
|
||||
sub_80E7F68(&sReceivedRecords->emerald.unk_1210, which);
|
||||
ReceiveGiftItem(&sReceivedRecords->emerald.giftItem, which);
|
||||
ReceiveLilycoveLadyData(&sReceivedRecords->emerald.lilycoveLady, sizeof(struct PlayerRecordsEmerald), which);
|
||||
ReceiveApprenticeData(sReceivedRecords->emerald.apprentice, sizeof(struct PlayerRecordsEmerald), (u8) which);
|
||||
sub_80E89AC(&sReceivedRecords->emerald.unk_12dc, sizeof(struct PlayerRecordsEmerald), (u8) which);
|
||||
@@ -667,7 +668,7 @@ static void ReceiveBattleTowerData(void *battleTowerRecord, size_t recordSize, u
|
||||
ShufflePlayerIndices(mixIndices);
|
||||
if (Link_AnyPartnersPlayingRubyOrSapphire())
|
||||
{
|
||||
if (sub_816587C((void *)battleTowerRecord + recordSize * mixIndices[which], (void *)battleTowerRecord + recordSize * which) == TRUE)
|
||||
if (RubyBattleTowerRecordToEmerald((void *)battleTowerRecord + recordSize * mixIndices[which], (void *)battleTowerRecord + recordSize * which) == TRUE)
|
||||
{
|
||||
dest = (void *)battleTowerRecord + recordSize * which;
|
||||
dest->language = gLinkPlayers[mixIndices[which]].language;
|
||||
@@ -676,7 +677,7 @@ static void ReceiveBattleTowerData(void *battleTowerRecord, size_t recordSize, u
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy((void *)battleTowerRecord + recordSize * which, (void *)battleTowerRecord + recordSize * mixIndices[which], sizeof(union BattleTowerRecord));
|
||||
memcpy((void *)battleTowerRecord + recordSize * which, (void *)battleTowerRecord + recordSize * mixIndices[which], sizeof(struct EmeraldBattleTowerRecord));
|
||||
dest = (void *)battleTowerRecord + recordSize * which;
|
||||
for (i = 0; i < 4; i ++)
|
||||
{
|
||||
@@ -686,7 +687,7 @@ static void ReceiveBattleTowerData(void *battleTowerRecord, size_t recordSize, u
|
||||
}
|
||||
CalcEmeraldBattleTowerChecksum(dest);
|
||||
}
|
||||
sub_81628A0((void *)battleTowerRecord + recordSize * which);
|
||||
PutNewBattleTowerRecord((void *)battleTowerRecord + recordSize * which);
|
||||
}
|
||||
|
||||
static void ReceiveLilycoveLadyData(LilycoveLady *lilycoveLady, size_t recordSize, u8 which)
|
||||
@@ -1460,7 +1461,7 @@ static void ReceiveDaycareMailData(struct RecordMixingDayCareMail *src, size_t r
|
||||
}
|
||||
#endif // NONMATCHING
|
||||
|
||||
static void sub_80E7F68(u16 *item, u8 which)
|
||||
static void ReceiveGiftItem(u16 *item, u8 which)
|
||||
{
|
||||
if (which != 0 && *item != ITEM_NONE && GetPocketByItemId(*item) == POCKET_KEY_ITEMS)
|
||||
{
|
||||
|
||||
@@ -402,73 +402,73 @@ u32 MoveRecordedBattleToSaveData(void)
|
||||
{
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
battleSave->field_504[i] = gSaveBlock2Ptr->field_738[gTrainerBattleOpponent_A - 300].field_4[i];
|
||||
battleSave->field_504[i] = gSaveBlock2Ptr->records[gTrainerBattleOpponent_A - 300].field_4[i];
|
||||
}
|
||||
battleSave->field_50C = gSaveBlock2Ptr->field_738[gTrainerBattleOpponent_A - 300].field_1;
|
||||
battleSave->field_50C = gSaveBlock2Ptr->records[gTrainerBattleOpponent_A - 300].field_1;
|
||||
|
||||
if (sUnknown_0203CCE8 == 1)
|
||||
{
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
battleSave->field_50E[i] = gSaveBlock2Ptr->field_738[gTrainerBattleOpponent_A - 300].field_28[i];
|
||||
battleSave->field_50E[i] = gSaveBlock2Ptr->records[gTrainerBattleOpponent_A - 300].field_28[i];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
battleSave->field_50E[i] = gSaveBlock2Ptr->field_738[gTrainerBattleOpponent_A - 300].field_1C[i];
|
||||
battleSave->field_50E[i] = gSaveBlock2Ptr->records[gTrainerBattleOpponent_A - 300].field_1C[i];
|
||||
}
|
||||
}
|
||||
battleSave->field_51A = gSaveBlock2Ptr->field_738[gTrainerBattleOpponent_A - 300].field_E4;
|
||||
battleSave->field_51A = gSaveBlock2Ptr->records[gTrainerBattleOpponent_A - 300].field_E4;
|
||||
}
|
||||
else if (gTrainerBattleOpponent_B >= 300 && gTrainerBattleOpponent_B <= 399)
|
||||
{
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
battleSave->field_504[i] = gSaveBlock2Ptr->field_738[gTrainerBattleOpponent_B - 300].field_4[i];
|
||||
battleSave->field_504[i] = gSaveBlock2Ptr->records[gTrainerBattleOpponent_B - 300].field_4[i];
|
||||
}
|
||||
battleSave->field_50C = gSaveBlock2Ptr->field_738[gTrainerBattleOpponent_B - 300].field_1;
|
||||
battleSave->field_50C = gSaveBlock2Ptr->records[gTrainerBattleOpponent_B - 300].field_1;
|
||||
|
||||
if (sUnknown_0203CCE8 == 1)
|
||||
{
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
battleSave->field_50E[i] = gSaveBlock2Ptr->field_738[gTrainerBattleOpponent_B - 300].field_28[i];
|
||||
battleSave->field_50E[i] = gSaveBlock2Ptr->records[gTrainerBattleOpponent_B - 300].field_28[i];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
battleSave->field_50E[i] = gSaveBlock2Ptr->field_738[gTrainerBattleOpponent_B - 300].field_1C[i];
|
||||
battleSave->field_50E[i] = gSaveBlock2Ptr->records[gTrainerBattleOpponent_B - 300].field_1C[i];
|
||||
}
|
||||
}
|
||||
battleSave->field_51A = gSaveBlock2Ptr->field_738[gTrainerBattleOpponent_B - 300].field_E4;
|
||||
battleSave->field_51A = gSaveBlock2Ptr->records[gTrainerBattleOpponent_B - 300].field_E4;
|
||||
}
|
||||
else if (gPartnerTrainerId >= 300 && gPartnerTrainerId <= 399)
|
||||
{
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
battleSave->field_504[i] = gSaveBlock2Ptr->field_738[gPartnerTrainerId - 300].field_4[i];
|
||||
battleSave->field_504[i] = gSaveBlock2Ptr->records[gPartnerTrainerId - 300].field_4[i];
|
||||
}
|
||||
battleSave->field_50C = gSaveBlock2Ptr->field_738[gPartnerTrainerId - 300].field_1;
|
||||
battleSave->field_50C = gSaveBlock2Ptr->records[gPartnerTrainerId - 300].field_1;
|
||||
|
||||
if (sUnknown_0203CCE8 == 1)
|
||||
{
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
battleSave->field_50E[i] = gSaveBlock2Ptr->field_738[gPartnerTrainerId - 300].field_28[i];
|
||||
battleSave->field_50E[i] = gSaveBlock2Ptr->records[gPartnerTrainerId - 300].field_28[i];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
battleSave->field_50E[i] = gSaveBlock2Ptr->field_738[gPartnerTrainerId - 300].field_1C[i];
|
||||
battleSave->field_50E[i] = gSaveBlock2Ptr->records[gPartnerTrainerId - 300].field_1C[i];
|
||||
}
|
||||
}
|
||||
battleSave->field_51A = gSaveBlock2Ptr->field_738[gPartnerTrainerId - 300].field_E4;
|
||||
battleSave->field_51A = gSaveBlock2Ptr->records[gPartnerTrainerId - 300].field_E4;
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
#include "tv.h"
|
||||
#include "secret_base.h"
|
||||
#include "constants/map_types.h"
|
||||
#include "constants/trainers.h"
|
||||
|
||||
extern void mapldr_default(void);
|
||||
|
||||
@@ -1143,7 +1144,7 @@ const u8 *GetSecretBaseTrainerLoseText(void)
|
||||
void sub_80EA2E4(void)
|
||||
{
|
||||
sub_813BADC(TRUE);
|
||||
gTrainerBattleOpponent_A = 0x400;
|
||||
gTrainerBattleOpponent_A = TRAINER_SECRET_BASE;
|
||||
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_SECRET_BASE;
|
||||
}
|
||||
|
||||
|
||||
@@ -383,14 +383,14 @@ static void ShowSafariBallsWindow(void)
|
||||
|
||||
static void ShowPyramidFloorWindow(void)
|
||||
{
|
||||
if (gSaveBlock2Ptr->frontier.field_CB2 == 7)
|
||||
if (gSaveBlock2Ptr->frontier.curChallengeBattleNum == 7)
|
||||
sBattlePyramidFloorWindowId = AddWindow(&sPyramidFloorWindowTemplate_1);
|
||||
else
|
||||
sBattlePyramidFloorWindowId = AddWindow(&sPyramidFloorWindowTemplate_2);
|
||||
|
||||
PutWindowTilemap(sBattlePyramidFloorWindowId);
|
||||
NewMenuHelpers_DrawStdWindowFrame(sBattlePyramidFloorWindowId, FALSE);
|
||||
StringCopy(gStringVar1, sPyramindFloorNames[gSaveBlock2Ptr->frontier.field_CB2]);
|
||||
StringCopy(gStringVar1, sPyramindFloorNames[gSaveBlock2Ptr->frontier.curChallengeBattleNum]);
|
||||
StringExpandPlaceholders(gStringVar4, gText_BattlePyramidFloor);
|
||||
AddTextPrinterParameterized(sBattlePyramidFloorWindowId, 1, gStringVar4, 0, 1, 0xFF, NULL);
|
||||
CopyWindowToVram(sBattlePyramidFloorWindowId, 2);
|
||||
|
||||
6
src/tv.c
6
src/tv.c
@@ -1544,7 +1544,7 @@ static void InterviewAfter_BravoTrainerBattleTowerProfile(void)
|
||||
StringCopy(show->bravoTrainerTower.pokemonName, gSaveBlock2Ptr->frontier.field_BD8);
|
||||
show->bravoTrainerTower.species = gSaveBlock2Ptr->frontier.field_BD4;
|
||||
show->bravoTrainerTower.defeatedSpecies = gSaveBlock2Ptr->frontier.field_BD6;
|
||||
show->bravoTrainerTower.numFights = sub_8164FCC(gSaveBlock2Ptr->frontier.field_D07, 0);
|
||||
show->bravoTrainerTower.numFights = GetCurrentBattleTowerWinStreak(gSaveBlock2Ptr->frontier.field_D07, 0);
|
||||
show->bravoTrainerTower.wonTheChallenge = gSaveBlock2Ptr->frontier.field_D06;
|
||||
if (gSaveBlock2Ptr->frontier.field_D07 == 0)
|
||||
{
|
||||
@@ -2540,8 +2540,8 @@ void sub_80EE8C8(u16 winStreak, u8 facility)
|
||||
show->frontier.species2 = GetMonData(&gPlayerParty[1], MON_DATA_SPECIES, NULL);
|
||||
break;
|
||||
case 4:
|
||||
show->frontier.species1 = GetMonData(&gSaveBlock1Ptr->playerParty[gSaveBlock2Ptr->frontier.field_CAA[0] - 1], MON_DATA_SPECIES, NULL);
|
||||
show->frontier.species2 = GetMonData(&gSaveBlock1Ptr->playerParty[gSaveBlock2Ptr->frontier.field_CAA[1] - 1], MON_DATA_SPECIES, NULL);
|
||||
show->frontier.species1 = GetMonData(&gSaveBlock1Ptr->playerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[0] - 1], MON_DATA_SPECIES, NULL);
|
||||
show->frontier.species2 = GetMonData(&gSaveBlock1Ptr->playerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[1] - 1], MON_DATA_SPECIES, NULL);
|
||||
break;
|
||||
}
|
||||
tv_store_id_3x(show);
|
||||
|
||||
@@ -5102,7 +5102,7 @@ bool8 StandardWildEncounter(u16 currMetaTileBehavior, u16 previousMetaTileBehavi
|
||||
}
|
||||
if (gMapHeader.mapLayoutId == 0x169)
|
||||
{
|
||||
headerId = gSaveBlock2Ptr->frontier.field_CB2;
|
||||
headerId = gSaveBlock2Ptr->frontier.curChallengeBattleNum;
|
||||
if (previousMetaTileBehavior != currMetaTileBehavior && !DoGlobalWildEncounterDiceRoll())
|
||||
return FALSE;
|
||||
else if (DoWildEncounterRateTest(gBattlePyramidWildMonHeaders[headerId].landMonsInfo->encounterRate, FALSE) != TRUE)
|
||||
@@ -5240,7 +5240,7 @@ bool8 SweetScentWildEncounter(void)
|
||||
}
|
||||
if (gMapHeader.mapLayoutId == 0x169)
|
||||
{
|
||||
headerId = gSaveBlock2Ptr->frontier.field_CB2;
|
||||
headerId = gSaveBlock2Ptr->frontier.curChallengeBattleNum;
|
||||
if (TryGenerateWildMon(gBattlePyramidWildMonHeaders[headerId].landMonsInfo, WILD_AREA_LAND, 0) != TRUE)
|
||||
return FALSE;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user