mirror of
https://github.com/pret/pokeheartgold.git
synced 2026-05-05 20:46:28 -05:00
Merge branch 'master' into contributing-ai-policy
This commit is contained in:
commit
abdf42ce8a
|
|
@ -9,15 +9,15 @@
|
|||
.public sub_0203769C
|
||||
.public sub_02037C0C
|
||||
.public sub_02037C44
|
||||
.public sub_0204A68C
|
||||
.public sub_0204AA2C
|
||||
.public sub_0204AC78
|
||||
.public sub_0204AC7C
|
||||
.public sub_0204AD04
|
||||
.public sub_0204AE20
|
||||
.public sub_0204AF2C
|
||||
.public sub_0204B05C
|
||||
.public sub_0204B068
|
||||
.public ResetSystem
|
||||
.public FrontierFieldSystem_Free
|
||||
.public FrontierFieldSystem_GetFrontierBattleNumber
|
||||
.public FrontierFieldSystem_0204AC7C
|
||||
.public FrontierFieldSystem_0204AD04
|
||||
.public FrontierFieldSystem_0204AE20
|
||||
.public FrontierFieldSystem_0204AF2C
|
||||
.public FrontierFieldSystem_GetBattleTowerMode
|
||||
.public FrontierFieldSystem_AwardTowerBattlePoints
|
||||
.public BattleSetup_Delete
|
||||
.public IsBattleResultWin
|
||||
.public Frontier_GetLaunchArgs
|
||||
|
|
|
|||
|
|
@ -9,9 +9,9 @@
|
|||
.public sub_02031108
|
||||
.public sub_0203769C
|
||||
.public sub_02037B5C
|
||||
.public sub_0204A824
|
||||
.public sub_0204AA2C
|
||||
.public sub_0204ABC8
|
||||
.public FrontierFieldSystem_New
|
||||
.public FrontierFieldSystem_Free
|
||||
.public FrontierFieldSystem_SetRandomFrontierTrainers
|
||||
.public sub_0204F878
|
||||
.public sub_0205C048
|
||||
.public sub_0205C11C
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@
|
|||
.public sub_0202D804
|
||||
.public sub_0202D928
|
||||
.public sub_02034818
|
||||
.public sub_0204B4D4
|
||||
.public sub_0204B510
|
||||
.public GetFrontierTrainerIVs
|
||||
.public FrontierFieldSystem_0204B510
|
||||
.public BattleSetup_New
|
||||
.public BattleSetup_AddMonToParty
|
||||
.public sub_02051D18
|
||||
|
|
|
|||
|
|
@ -83,10 +83,10 @@ _022354CC:
|
|||
beq _0223556A
|
||||
b _0223557A
|
||||
_022354D2:
|
||||
bl sub_0204A68C
|
||||
bl ResetSystem
|
||||
b _0223557E
|
||||
_022354D8:
|
||||
bl sub_0204B068
|
||||
bl FrontierFieldSystem_AwardTowerBattlePoints
|
||||
strh r0, [r4]
|
||||
ldr r0, [r5, #8]
|
||||
bl Save_GameStats_Get
|
||||
|
|
@ -102,7 +102,7 @@ _022354EE:
|
|||
strh r0, [r4]
|
||||
b _0223557E
|
||||
_022354FC:
|
||||
bl sub_0204AC78
|
||||
bl FrontierFieldSystem_GetFrontierBattleNumber
|
||||
strh r0, [r4]
|
||||
b _0223557E
|
||||
_02235504:
|
||||
|
|
@ -110,7 +110,7 @@ _02235504:
|
|||
strh r0, [r4]
|
||||
b _0223557E
|
||||
_0223550C:
|
||||
bl sub_0204AC7C
|
||||
bl FrontierFieldSystem_0204AC7C
|
||||
strh r0, [r4]
|
||||
b _0223557E
|
||||
_02235514:
|
||||
|
|
@ -118,7 +118,7 @@ _02235514:
|
|||
strh r0, [r4]
|
||||
b _0223557E
|
||||
_0223551C:
|
||||
bl sub_0204B05C
|
||||
bl FrontierFieldSystem_GetBattleTowerMode
|
||||
strh r0, [r4]
|
||||
b _0223557E
|
||||
_02235524:
|
||||
|
|
@ -136,14 +136,14 @@ _02235536:
|
|||
b _0223557E
|
||||
_0223553E:
|
||||
ldr r1, [r5, #8]
|
||||
bl sub_0204AD04
|
||||
bl FrontierFieldSystem_0204AD04
|
||||
b _0223557E
|
||||
_02235546:
|
||||
ldr r1, [r5, #8]
|
||||
bl sub_0204AE20
|
||||
bl FrontierFieldSystem_0204AE20
|
||||
b _0223557E
|
||||
_0223554E:
|
||||
bl sub_0204AF2C
|
||||
bl FrontierFieldSystem_0204AF2C
|
||||
b _0223557E
|
||||
_02235554:
|
||||
ldr r1, _02235584 ; =0x00000884
|
||||
|
|
@ -259,7 +259,7 @@ FrtCmd_134: ; 0x02235610
|
|||
ldr r0, [r0]
|
||||
ldr r0, [r0]
|
||||
bl Frontier_GetData
|
||||
bl sub_0204AA2C
|
||||
bl FrontierFieldSystem_Free
|
||||
mov r0, #0
|
||||
pop {r3, pc}
|
||||
.balign 4, 0
|
||||
|
|
|
|||
|
|
@ -738,7 +738,7 @@ _02235EA4:
|
|||
ldr r0, [r7, #8]
|
||||
mov r1, #0
|
||||
mov r2, #6
|
||||
bl sub_0204A824
|
||||
bl FrontierFieldSystem_New
|
||||
add r4, r0, #0
|
||||
ldr r0, [r5]
|
||||
add r1, r4, #0
|
||||
|
|
@ -803,7 +803,7 @@ _02235F10:
|
|||
bne _02235F44
|
||||
ldr r1, [r7, #8]
|
||||
add r0, r4, #0
|
||||
bl sub_0204ABC8
|
||||
bl FrontierFieldSystem_SetRandomFrontierTrainers
|
||||
_02235F44:
|
||||
ldr r0, [r7, #8]
|
||||
bl SaveArray_Party_Get
|
||||
|
|
@ -872,7 +872,7 @@ FrtCmd_182: ; 0x02235FB4
|
|||
ldr r0, [r0]
|
||||
ldr r0, [r0]
|
||||
bl Frontier_GetData
|
||||
bl sub_0204AA2C
|
||||
bl FrontierFieldSystem_Free
|
||||
mov r0, #0
|
||||
pop {r3, pc}
|
||||
.balign 4, 0
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@ _022364DE:
|
|||
str r0, [sp, #0x24]
|
||||
_022364E2:
|
||||
add r0, r7, #0
|
||||
bl sub_0204B510
|
||||
bl FrontierFieldSystem_0204B510
|
||||
ldr r1, [sp, #0x14]
|
||||
ldrh r1, [r1, #2]
|
||||
bl _s32_div_f
|
||||
|
|
@ -223,13 +223,13 @@ _022365E8:
|
|||
b _022364E2
|
||||
_022365EE:
|
||||
ldr r0, [sp, #0x18]
|
||||
bl sub_0204B4D4
|
||||
bl GetFrontierTrainerIVs
|
||||
str r0, [sp, #0x3c]
|
||||
add r0, r7, #0
|
||||
bl sub_0204B510
|
||||
bl FrontierFieldSystem_0204B510
|
||||
add r5, r0, #0
|
||||
add r0, r7, #0
|
||||
bl sub_0204B510
|
||||
bl FrontierFieldSystem_0204B510
|
||||
lsl r0, r0, #0x10
|
||||
orr r0, r5
|
||||
str r0, [sp, #0x38]
|
||||
|
|
@ -462,10 +462,10 @@ _022367AA:
|
|||
bne _022367F0
|
||||
_022367BE:
|
||||
add r0, r4, #0
|
||||
bl sub_0204B510
|
||||
bl FrontierFieldSystem_0204B510
|
||||
add r6, r0, #0
|
||||
add r0, r4, #0
|
||||
bl sub_0204B510
|
||||
bl FrontierFieldSystem_0204B510
|
||||
lsl r0, r0, #0x10
|
||||
add r7, r6, #0
|
||||
orr r7, r0
|
||||
|
|
|
|||
|
|
@ -148,7 +148,7 @@ struct FieldSystem {
|
|||
BagCursor *bagCursor;
|
||||
u8 filler_98[0x4];
|
||||
void *unk9C;
|
||||
UnkStruct_Fsys_A0 *unkA0;
|
||||
FrontierFieldSystem *frontierFsys;
|
||||
Save_LinkBattleRuleset *linkBattleRuleset;
|
||||
UnkStruct_02092BB8 *unkA8;
|
||||
u32 unkAC;
|
||||
|
|
|
|||
|
|
@ -3,9 +3,9 @@
|
|||
|
||||
#include "save.h"
|
||||
|
||||
typedef struct FRONTIERDATA FRONTIERDATA;
|
||||
typedef struct FrontierData FrontierData;
|
||||
|
||||
FRONTIERDATA *Save_FrontierData_Get(SaveData *saveData);
|
||||
u32 FrontierData_BattlePointAction(FRONTIERDATA *frontierData, u32 param, u32 action);
|
||||
FrontierData *Save_FrontierData_Get(SaveData *saveData);
|
||||
u32 FrontierData_BattlePointAction(FrontierData *frontierData, u32 param, u32 action);
|
||||
|
||||
#endif // POKEHEARTGOLD_FRONTIER_DATA_H
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
#include "save.h"
|
||||
|
||||
typedef struct NintendoWifiConnectArgs {
|
||||
FRONTIERDATA *frontierData;
|
||||
FrontierData *frontierData;
|
||||
u32 unk4;
|
||||
SysInfo *sysInfo;
|
||||
SaveData *saveData;
|
||||
|
|
|
|||
|
|
@ -2,9 +2,18 @@
|
|||
#define POKEHEARTGOLD_SCRCMD_9_H
|
||||
|
||||
#include "frontier_data.h"
|
||||
#include "mail_message.h"
|
||||
#include "save.h"
|
||||
|
||||
typedef struct UnkStruct_0204B470 {
|
||||
#define TOWER_MODE_SINGLE 0
|
||||
#define TOWER_MODE_DOUBLE 1
|
||||
#define TOWER_MODE_MULTI 2
|
||||
#define TOWER_MODE_LINK 3
|
||||
#define TOWER_MODE_WIFI 4
|
||||
#define TOWER_MODE_WIFI_PRACTICE 5
|
||||
#define TOWER_MODE_6 6
|
||||
|
||||
typedef struct FrontierMon {
|
||||
u16 species : 11;
|
||||
u16 form : 5;
|
||||
u16 item;
|
||||
|
|
@ -29,72 +38,70 @@ typedef struct UnkStruct_0204B470 {
|
|||
u8 ability;
|
||||
u8 friendship;
|
||||
u16 nickname[11];
|
||||
} UnkStruct_0204B470;
|
||||
} FrontierMon;
|
||||
|
||||
typedef struct UnkStruct_0204B7D0 {
|
||||
u32 unk00;
|
||||
u16 unk04;
|
||||
typedef struct FrontierTrainer {
|
||||
u32 index;
|
||||
u16 trainerClass;
|
||||
u8 filler06[2];
|
||||
u16 unk08[8];
|
||||
u16 unk18;
|
||||
u16 unk1a;
|
||||
u8 filler1c[0x14];
|
||||
UnkStruct_0204B470 unk30[2];
|
||||
u16 name[8];
|
||||
MailMessage introMessage;
|
||||
u8 filler20[0x10];
|
||||
FrontierMon frontierMons[2];
|
||||
u8 fillera0[0x70];
|
||||
} UnkStruct_0204B7D0;
|
||||
} FrontierTrainer; // size: 0x110
|
||||
|
||||
typedef struct UnkStruct_0204A824_7E8 {
|
||||
typedef struct FrontierMultiBattleAllyData {
|
||||
u32 otId;
|
||||
u16 unk04[2];
|
||||
u32 unk08[2];
|
||||
} UnkStruct_0204A824_7E8;
|
||||
u16 frontierMonIDs[2];
|
||||
u32 frontierMonPIDs[2];
|
||||
} FrontierMultiBattleAllyData;
|
||||
|
||||
typedef struct UnkStruct_Fsys_A0 {
|
||||
u32 unk00;
|
||||
typedef struct FrontierFieldSystem {
|
||||
u32 initMagicNumber;
|
||||
enum HeapID heapID;
|
||||
u32 unk08;
|
||||
u8 unk0c;
|
||||
u8 currentBattleNumber; // Total battles won on current streak.
|
||||
u8 curWinStreak;
|
||||
u8 unk0e;
|
||||
u8 unk0f;
|
||||
u8 numMons;
|
||||
u8 towerMode;
|
||||
u8 unk10_0 : 1;
|
||||
u8 unk10_1 : 2;
|
||||
u8 palmerDefeated : 2;
|
||||
u8 unk10_3 : 1;
|
||||
u8 unk10_4 : 1;
|
||||
u8 unk10_5 : 3;
|
||||
u8 unk11;
|
||||
u8 unk12;
|
||||
u8 multiBattleAllyID : 3;
|
||||
u8 trainerGender;
|
||||
u8 linkAllyGender;
|
||||
u8 filler13;
|
||||
u16 unk14;
|
||||
u16 unk16;
|
||||
u16 unk18;
|
||||
u16 unk1a;
|
||||
u16 unk1c;
|
||||
u16 linkAllyRound; // Takes precedence over currentRound in Link Mode if it is higher.
|
||||
u16 linkAllyMonSpecies[2];
|
||||
u16 currentBattleInSession; // Battles won in this session.
|
||||
u16 currentRound; // Rounds (sets of 7 battles) won in the current streak.
|
||||
u8 filler1e[2];
|
||||
u32 unk20;
|
||||
u32 totalTowerWins;
|
||||
u16 unk24;
|
||||
u16 unk26;
|
||||
u16 unk28;
|
||||
u8 unk2a[4];
|
||||
u16 unk2e[4];
|
||||
u16 unk36[4];
|
||||
u16 unk3e[0xe];
|
||||
u8 partyMonIndexes[4];
|
||||
u16 partyMonSpecies[4];
|
||||
u16 partyMonItems[4];
|
||||
u16 trainersInCurrentRound[14];
|
||||
u8 filler5a[0x13];
|
||||
u32 unk70;
|
||||
FRONTIERDATA *unk74;
|
||||
UnkStruct_0204B7D0 unk78[2];
|
||||
UnkStruct_0204B7D0 unk298[5];
|
||||
UnkStruct_0204A824_7E8 unk7e8[5];
|
||||
u8 unk838[5];
|
||||
u32 unk70; // Seems to be some sort of frontier save data.
|
||||
FrontierData *frontierData;
|
||||
FrontierTrainer unk78[2];
|
||||
FrontierTrainer frontierStatTrainers[5];
|
||||
FrontierMultiBattleAllyData multiBattleAllyData[5];
|
||||
u8 unk838[5]; // Related to multi battle allies' replaced items.
|
||||
u8 filler83d;
|
||||
u16 unk83e[0x23];
|
||||
u16 unk884[0x23];
|
||||
u16 unk83e[0x23]; // Related to unk10_3 somehow. Also player gender? Also species??? these seem to be some sort of struct?
|
||||
u16 unk884[0x23]; // Seemingly never set. Probably relates to tag partner somehow.
|
||||
u8 filler8CA[0xa];
|
||||
u8 unk8D4;
|
||||
u8 unk8D5;
|
||||
u8 filler8D6[2];
|
||||
u16 unk8D8;
|
||||
u16 unk8DA;
|
||||
} UnkStruct_Fsys_A0;
|
||||
} FrontierFieldSystem;
|
||||
|
||||
#endif // POKEHEARTGOLD_SCRCMD_9_H
|
||||
|
|
|
|||
|
|
@ -12,15 +12,15 @@ void sub_0202D308(u32 a0, u32 a1, void *a2);
|
|||
void sub_0202D3B0(u32 a0, u8 a1, u32 a2, u32 a3);
|
||||
u32 sub_0202D3DC(void);
|
||||
void sub_0202D3E4(u32 a0, u32 a1);
|
||||
u32 sub_0202D450(FRONTIERDATA *a0, u32 a1);
|
||||
u32 sub_0202D488(FRONTIERDATA *a0, u32 a1);
|
||||
void sub_0202D4B8(FRONTIERDATA *a0, u32 a1, void *a2);
|
||||
void sub_0202D4DC(FRONTIERDATA *a0, s32 a1, UnkStruct_02069528 *a2);
|
||||
void sub_0202D4FC(FRONTIERDATA *a0, u32 a1);
|
||||
s16 sub_0202D564(FRONTIERDATA *a0);
|
||||
u32 sub_0202D450(FrontierData *frontierData, u32 a1);
|
||||
u32 sub_0202D488(FrontierData *frontierData, u32 a1);
|
||||
void sub_0202D4B8(FrontierData *frontierData, u32 a1, void *a2);
|
||||
void sub_0202D4DC(FrontierData *frontierData, s32 a1, UnkStruct_02069528 *a2);
|
||||
void sub_0202D4FC(FrontierData *frontierData, u32 a1);
|
||||
s16 sub_0202D564(FrontierData *frontierData);
|
||||
u32 sub_0202D57C(void *a0, u32 a1, u32 a2);
|
||||
u32 sub_0202D5C4(FRONTIERDATA *a0, u32 a1, u16 a2);
|
||||
u32 sub_0202D5DC(FRONTIERDATA *a0, u16 a1, u32 a2);
|
||||
u32 sub_0202D5C4(FrontierData *frontierData, u32 a1, u16 a2);
|
||||
u32 sub_0202D5DC(FrontierData *frontierData, u16 a1, u32 a2);
|
||||
void sub_0202D640(SaveData *saveData, int a1, MailMessage *mailMessage);
|
||||
u32 sub_0202D7B0(u32 a0);
|
||||
u32 sub_0202D7B8(u32 a0);
|
||||
|
|
|
|||
|
|
@ -4,8 +4,8 @@
|
|||
#include "field_system.h"
|
||||
#include "scrcmd_9.h"
|
||||
|
||||
BOOL sub_0204A5B0(u16 numRequired, SaveData *saveData, BOOL checkDuplicateItems);
|
||||
void sub_0204A68C(void);
|
||||
BOOL PartyIsValidForFrontier(u16 numRequired, SaveData *saveData, BOOL checkDuplicateItems);
|
||||
void ResetSystem(void);
|
||||
void sub_0204A698(u32 a0);
|
||||
u32 sub_0204A6A0(u32 a0);
|
||||
void sub_0204A6A8(FieldSystem *fieldSystem);
|
||||
|
|
@ -15,29 +15,29 @@ void sub_0204A730(SaveData *saveData, u8 a1);
|
|||
u16 sub_0204A750(SaveData *saveData);
|
||||
u32 sub_0204A764(SaveData *saveData);
|
||||
u16 sub_0204A800(SaveData *saveData);
|
||||
void sub_0204A810(UnkStruct_Fsys_A0 **a0);
|
||||
UnkStruct_Fsys_A0 *sub_0204A824(SaveData *saveData, BOOL resumeFromPrevious, u32 a2);
|
||||
void sub_0204AA2C(UnkStruct_Fsys_A0 *a0);
|
||||
void sub_0204AA58(UnkStruct_Fsys_A0 *a0, TaskManager *taskManager, void *a2);
|
||||
BOOL sub_0204AA78(UnkStruct_Fsys_A0 *a0, void **a1, SaveData *saveData);
|
||||
u32 sub_0204AB10(UnkStruct_Fsys_A0 *a0, SaveData *saveData);
|
||||
void sub_0204ABC8(UnkStruct_Fsys_A0 *a0, SaveData *saveData);
|
||||
u8 sub_0204AC78(UnkStruct_Fsys_A0 *a0);
|
||||
BOOL sub_0204AC7C(UnkStruct_Fsys_A0 *a0);
|
||||
void sub_0204AD04(UnkStruct_Fsys_A0 *a0, SaveData *saveData);
|
||||
void sub_0204AE20(UnkStruct_Fsys_A0 *a0, SaveData *saveData);
|
||||
void sub_0204AF2C(UnkStruct_Fsys_A0 *a0);
|
||||
void sub_0204AFE0(UnkStruct_Fsys_A0 *a0);
|
||||
u32 sub_0204B044(UnkStruct_Fsys_A0 *a0, u32 a1);
|
||||
u32 sub_0204B05C(UnkStruct_Fsys_A0 *a0);
|
||||
u32 sub_0204B060(UnkStruct_Fsys_A0 *a0);
|
||||
u32 sub_0204B068(UnkStruct_Fsys_A0 *a0);
|
||||
BOOL sub_0204B0E0(UnkStruct_Fsys_A0 *a0, SaveData *saveData);
|
||||
u32 sub_0204B120(UnkStruct_Fsys_A0 *a0, SaveData *saveData, u32 a2);
|
||||
BOOL sub_0204B1CC(UnkStruct_Fsys_A0 *a0, SaveData *saveData);
|
||||
BOOL sub_0204B204(UnkStruct_Fsys_A0 *a0, SaveData *saveData);
|
||||
u16 sub_0204B258(UnkStruct_Fsys_A0 *a0, SaveData *saveData);
|
||||
u8 sub_0204B4D4(u32 a0);
|
||||
u16 sub_0204B510(UnkStruct_Fsys_A0 *a0);
|
||||
void FrontierFieldSystem_0204A810(FrontierFieldSystem **frontierFsys);
|
||||
FrontierFieldSystem *FrontierFieldSystem_New(SaveData *saveData, BOOL resumeFromPrevious, u32 a2);
|
||||
void FrontierFieldSystem_Free(FrontierFieldSystem *frontierFsys);
|
||||
void FrontierFieldSystem_0204AA58(FrontierFieldSystem *frontierFsys, TaskManager *taskManager, void *a2);
|
||||
BOOL FrontierFieldSystem_0204AA78(FrontierFieldSystem *frontierFsys, void **a1, SaveData *saveData);
|
||||
u32 FrontierFieldSystem_PartyHasDuplicateSpeciesOrItems(FrontierFieldSystem *frontierFsys, SaveData *saveData);
|
||||
void FrontierFieldSystem_SetRandomFrontierTrainers(FrontierFieldSystem *frontierFsys, SaveData *saveData);
|
||||
u8 FrontierFieldSystem_GetFrontierBattleNumber(FrontierFieldSystem *frontierFsys);
|
||||
BOOL FrontierFieldSystem_0204AC7C(FrontierFieldSystem *frontierFsys);
|
||||
void FrontierFieldSystem_0204AD04(FrontierFieldSystem *frontierFsys, SaveData *saveData);
|
||||
void FrontierFieldSystem_0204AE20(FrontierFieldSystem *frontierFsys, SaveData *saveData);
|
||||
void FrontierFieldSystem_0204AF2C(FrontierFieldSystem *frontierFsys);
|
||||
void FrontierFieldSystem_0204AFE0(FrontierFieldSystem *frontierFsys);
|
||||
u32 FrontierFieldSystem_0204B044(FrontierFieldSystem *frontierFsys, u32 a1);
|
||||
u32 FrontierFieldSystem_GetBattleTowerMode(FrontierFieldSystem *frontierFsys);
|
||||
u32 FrontierFieldSystem_GetPalmerDefeated(FrontierFieldSystem *frontierFsys);
|
||||
u32 FrontierFieldSystem_AwardTowerBattlePoints(FrontierFieldSystem *frontierFsys);
|
||||
BOOL FrontierFieldSystem_0204B0E0(FrontierFieldSystem *frontierFsys, SaveData *saveData);
|
||||
u32 FrontierFieldSystem_0204B120(FrontierFieldSystem *frontierFsys, SaveData *saveData, u32 a2);
|
||||
BOOL FrontierFieldSystem_TryGivePalmerRibbons(FrontierFieldSystem *frontierFsys, SaveData *saveData);
|
||||
BOOL FrontierFieldSystem_TryGiveOtherTowerRibbons(FrontierFieldSystem *frontierFsys, SaveData *saveData);
|
||||
u16 FrontierFieldSystem_0204B258(FrontierFieldSystem *frontierFsys, SaveData *saveData);
|
||||
u8 GetFrontierTrainerIVs(u32 frontierTrainerIndex);
|
||||
u16 FrontierFieldSystem_0204B510(FrontierFieldSystem *frontierFsys);
|
||||
|
||||
#endif // POKEHEARTGOLD_UNK_0204A3F4_H
|
||||
|
|
|
|||
|
|
@ -6,15 +6,15 @@
|
|||
#include "scrcmd_9.h"
|
||||
|
||||
MessageFormat *sub_0204B538(SaveData *saveData, u16 numEligiblePokemon, u16 a2, u8 a3, u8 *numLegendaryPokemonSeen);
|
||||
u32 sub_0204B5E8(u8 a0);
|
||||
u16 sub_0204B610(FieldSystem *fieldSystem, u16 *a1);
|
||||
u32 GetFrontierTrainerOverworld(u8 trainerClass);
|
||||
u16 sub_0204B610(FieldSystem *fieldSystem, u16 *linkAllyData); // SetLinkAllyData?
|
||||
BOOL sub_0204B66C(FieldSystem *fieldSystem, u16 *a1);
|
||||
BOOL sub_0204B690(FieldSystem *fieldSystem, u16 *a1);
|
||||
void sub_0204B6AC(UnkStruct_Fsys_A0 *a0, SaveData *saveData);
|
||||
void sub_0204B708(UnkStruct_Fsys_A0 *a0);
|
||||
void sub_0204B720(UnkStruct_Fsys_A0 *a0, u32 a1);
|
||||
u16 sub_0204B73C(UnkStruct_Fsys_A0 *a0, u8 a1, u8 a2, u32 a3);
|
||||
u32 sub_0204BA04(UnkStruct_Fsys_A0 *a0, UnkStruct_0204B7D0 *a1, u16 a2, u32 a3, u16 *a4, u16 *a5, UnkStruct_0204A824_7E8 *a6, enum HeapID heapID);
|
||||
void sub_0204BA50(UnkStruct_Fsys_A0 *a0, UnkStruct_0204B7D0 *a1, u16 a2, u32 a3, UnkStruct_0204A824_7E8 *a4, enum HeapID heapID);
|
||||
void FrontierFieldSystem_0204B6AC(FrontierFieldSystem *frontierFsys, SaveData *saveData);
|
||||
void FrontierFieldSystem_0204B708(FrontierFieldSystem *frontierFsys);
|
||||
void FrontierFieldSystem_0204B720(FrontierFieldSystem *frontierFsys, u32 a1);
|
||||
u16 FrontierFieldSystem_GetRandomFrontierTrainerID(FrontierFieldSystem *frontierFsys, u8 difficultyBracket, u8 winsThisRound, u32 towerMode);
|
||||
u32 FrontierFieldSystem_0204BA04(FrontierFieldSystem *frontierFsys, FrontierTrainer *frontierTrainer, u16 frontierTrainerIndex, u32 numPokemon, u16 *partySpecies, u16 *partyItems, FrontierMultiBattleAllyData *allyData, enum HeapID heapID);
|
||||
void FrontierFieldSystem_GenerateAllyFrontierMons(FrontierFieldSystem *frontierFsys, FrontierTrainer *frontierTrainer, u16 frontierTrainerIndex, u32 replaceItem, FrontierMultiBattleAllyData *allyData, enum HeapID heapID);
|
||||
|
||||
#endif // POKEHEARTGOLD_UNK_0204B538_H
|
||||
|
|
|
|||
|
|
@ -271,7 +271,7 @@ static BOOL Task_020509F0(TaskManager *taskManager) {
|
|||
break;
|
||||
case 3:
|
||||
sub_02052444(encounter->setup, fieldSystem);
|
||||
if (fieldSystem->unkA0 != NULL) {
|
||||
if (fieldSystem->frontierFsys != NULL) {
|
||||
sub_02067484(fieldSystem, &encounter->setup->unk138);
|
||||
}
|
||||
Encounter_GetResult(encounter, fieldSystem);
|
||||
|
|
|
|||
|
|
@ -98,18 +98,18 @@ BOOL ScrCmd_442(ScriptContext *ctx) {
|
|||
}
|
||||
|
||||
BOOL ScrCmd_443(ScriptContext *ctx) {
|
||||
u8 r1 = ScriptReadByte(ctx);
|
||||
void *r2 = ctx->fieldSystem->unkA0;
|
||||
if (r2 == NULL) {
|
||||
u8 index = ScriptReadByte(ctx);
|
||||
FrontierFieldSystem *frontierFsys = ctx->fieldSystem->frontierFsys;
|
||||
if (frontierFsys == NULL) {
|
||||
return FALSE;
|
||||
}
|
||||
u16 *r4 = r2 + 0x90 + r1 * 0x110;
|
||||
if (r4[0] == 0xFFFF) {
|
||||
MailMessage *intro = &frontierFsys->unk78[index].introMessage;
|
||||
if (intro->msg_bank == 0xFFFF) {
|
||||
MsgData *messageData = NewMsgDataFromNarc(MSGDATA_LOAD_LAZY, NARC_msgdata_msg, 723, HEAP_ID_FIELD3);
|
||||
ov01_021EF4DC(ctx, messageData, r4[1], TRUE, NULL);
|
||||
ov01_021EF4DC(ctx, messageData, intro->msg_no, TRUE, NULL);
|
||||
DestroyMsgData(messageData);
|
||||
} else {
|
||||
ov01_021EF564(ctx, r4[0], r4[1], r4[2], (s16)r4[3], TRUE);
|
||||
ov01_021EF564(ctx, intro->msg_bank, intro->msg_no, intro->fields[0], intro->fields[1], TRUE);
|
||||
}
|
||||
SetupNativeScript(ctx, ov01_021EF348);
|
||||
return TRUE;
|
||||
|
|
|
|||
|
|
@ -205,7 +205,7 @@ void TrainerHouse_StartBattle(FieldSystem *fieldSystem, u32 trainerNum) {
|
|||
} else {
|
||||
setup = TrainerHouse_NewBattleSetup(fieldSystem, &trainerHouse->sets[trainerNum]);
|
||||
}
|
||||
fieldSystem->unkA0 = NULL;
|
||||
fieldSystem->frontierFsys = NULL;
|
||||
u32 effect = BattleSetup_GetWildTransitionEffect(setup);
|
||||
u32 bgm = BattleSetup_GetWildBattleMusic(setup);
|
||||
u32 *winFlag = FieldSysGetAttrAddr(fieldSystem, SCRIPTENV_BATTLE_WIN_FLAG);
|
||||
|
|
|
|||
128
src/scrcmd_9.c
128
src/scrcmd_9.c
|
|
@ -36,25 +36,25 @@
|
|||
#include "unk_02096910.h"
|
||||
|
||||
static BOOL sub_0204A1E8(ScriptContext *ctx);
|
||||
static u32 sub_0204A2A8(UnkStruct_Fsys_A0 *unkStruct, u8 a1);
|
||||
static u32 FrontierFieldSystem_0204A2A8(FrontierFieldSystem *frontierFsys, u8 a1);
|
||||
|
||||
static const u16 _020FBF70[] = { 141, 145, 142, 143, 144 };
|
||||
static const u16 StatTrainerOverworlds[] = { SPRITE_SEVEN1, SPRITE_SEVEN5, SPRITE_SEVEN2, SPRITE_SEVEN3, SPRITE_SEVEN4 };
|
||||
|
||||
BOOL ScrCmd_410(ScriptContext *ctx) {
|
||||
u16 unk4 = ScriptReadHalfword(ctx);
|
||||
u16 unk6 = ScriptReadHalfword(ctx);
|
||||
ctx->fieldSystem->unkA0 = sub_0204A824(FieldSystem_GetSaveData(ctx->fieldSystem), unk4, unk6);
|
||||
u16 resumeFromPrevious = ScriptReadHalfword(ctx);
|
||||
u16 towerMode = ScriptReadHalfword(ctx);
|
||||
ctx->fieldSystem->frontierFsys = FrontierFieldSystem_New(FieldSystem_GetSaveData(ctx->fieldSystem), resumeFromPrevious, towerMode);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL ScrCmd_409(ScriptContext *ctx) {
|
||||
sub_0204A810(&(ctx->fieldSystem->unkA0));
|
||||
FrontierFieldSystem_0204A810(&ctx->fieldSystem->frontierFsys);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL ScrCmd_411(ScriptContext *ctx) {
|
||||
sub_0204AA2C(ctx->fieldSystem->unkA0);
|
||||
ctx->fieldSystem->unkA0 = NULL;
|
||||
FrontierFieldSystem_Free(ctx->fieldSystem->frontierFsys);
|
||||
ctx->fieldSystem->frontierFsys = NULL;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
|
@ -64,17 +64,17 @@ BOOL ScrCmd_412(ScriptContext *ctx) {
|
|||
u16 arg = ScriptGetVar(ctx);
|
||||
u16 resultVarId = ScriptReadHalfword(ctx);
|
||||
u16 *result = GetVarPointer(ctx->fieldSystem, resultVarId);
|
||||
UnkStruct_Fsys_A0 *unkStruct = ctx->fieldSystem->unkA0;
|
||||
FrontierFieldSystem *frontierFsys = ctx->fieldSystem->frontierFsys;
|
||||
switch (id) {
|
||||
case 1:
|
||||
if (arg == 0) {
|
||||
*result = sub_0204A5B0(unkStruct->unk0e, ctx->fieldSystem->saveData, TRUE);
|
||||
*result = PartyIsValidForFrontier(frontierFsys->numMons, ctx->fieldSystem->saveData, TRUE);
|
||||
} else {
|
||||
*result = sub_0204A5B0(arg, ctx->fieldSystem->saveData, TRUE);
|
||||
*result = PartyIsValidForFrontier(arg, ctx->fieldSystem->saveData, TRUE);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
sub_0204A68C();
|
||||
ResetSystem();
|
||||
break;
|
||||
case 3:
|
||||
sub_0204A698(sub_0202D908(ctx->fieldSystem->saveData));
|
||||
|
|
@ -92,10 +92,10 @@ BOOL ScrCmd_412(ScriptContext *ctx) {
|
|||
*result = sub_0204A6F8(ctx->fieldSystem->saveData, arg);
|
||||
break;
|
||||
case 9:
|
||||
*result = sub_0204B120(NULL, ctx->fieldSystem->saveData, 2);
|
||||
*result = FrontierFieldSystem_0204B120(NULL, ctx->fieldSystem->saveData, 2);
|
||||
break;
|
||||
case 10:
|
||||
*result = sub_0204B120(NULL, ctx->fieldSystem->saveData, 0);
|
||||
*result = FrontierFieldSystem_0204B120(NULL, ctx->fieldSystem->saveData, 0);
|
||||
break;
|
||||
case 11:
|
||||
sub_0204A730(ctx->fieldSystem->saveData, arg);
|
||||
|
|
@ -114,78 +114,78 @@ BOOL ScrCmd_412(ScriptContext *ctx) {
|
|||
return TRUE;
|
||||
case 30:
|
||||
unk = FieldSysGetAttrAddr(ctx->fieldSystem, SCRIPTENV_RUNNING_APP_DATA);
|
||||
sub_0204AA58(unkStruct, ctx->taskman, unk);
|
||||
FrontierFieldSystem_0204AA58(frontierFsys, ctx->taskman, unk);
|
||||
return TRUE;
|
||||
case 31:
|
||||
unk = FieldSysGetAttrAddr(ctx->fieldSystem, SCRIPTENV_RUNNING_APP_DATA);
|
||||
*result = sub_0204AA78(unkStruct, unk, ctx->fieldSystem->saveData);
|
||||
*result = FrontierFieldSystem_0204AA78(frontierFsys, unk, ctx->fieldSystem->saveData);
|
||||
break;
|
||||
case 32:
|
||||
*result = sub_0204AB10(unkStruct, ctx->fieldSystem->saveData);
|
||||
*result = FrontierFieldSystem_PartyHasDuplicateSpeciesOrItems(frontierFsys, ctx->fieldSystem->saveData);
|
||||
break;
|
||||
case 35:
|
||||
*result = sub_0204AC7C(unkStruct);
|
||||
*result = FrontierFieldSystem_0204AC7C(frontierFsys);
|
||||
break;
|
||||
case 37: // unused
|
||||
sub_0204AD04(unkStruct, ctx->fieldSystem->saveData);
|
||||
FrontierFieldSystem_0204AD04(frontierFsys, ctx->fieldSystem->saveData);
|
||||
break;
|
||||
case 38: // unused
|
||||
sub_0204AE20(unkStruct, ctx->fieldSystem->saveData);
|
||||
FrontierFieldSystem_0204AE20(frontierFsys, ctx->fieldSystem->saveData);
|
||||
break;
|
||||
case 39:
|
||||
sub_0204AF2C(unkStruct);
|
||||
FrontierFieldSystem_0204AF2C(frontierFsys);
|
||||
break;
|
||||
case 56:
|
||||
sub_0204AFE0(unkStruct);
|
||||
FrontierFieldSystem_0204AFE0(frontierFsys);
|
||||
break;
|
||||
case 41: // unused
|
||||
*result = sub_0204B044(unkStruct, arg);
|
||||
*result = FrontierFieldSystem_0204B044(frontierFsys, arg);
|
||||
break;
|
||||
case 43:
|
||||
*result = sub_0204B05C(unkStruct);
|
||||
*result = FrontierFieldSystem_GetBattleTowerMode(frontierFsys);
|
||||
break;
|
||||
case 45:
|
||||
*result = sub_0204B060(unkStruct);
|
||||
*result = FrontierFieldSystem_GetPalmerDefeated(frontierFsys);
|
||||
break;
|
||||
case 47: // unused
|
||||
sub_0204B0E0(unkStruct, ctx->fieldSystem->saveData);
|
||||
FrontierFieldSystem_0204B0E0(frontierFsys, ctx->fieldSystem->saveData);
|
||||
break;
|
||||
case 48:
|
||||
*result = sub_0204B1CC(unkStruct, ctx->fieldSystem->saveData);
|
||||
*result = FrontierFieldSystem_TryGivePalmerRibbons(frontierFsys, ctx->fieldSystem->saveData);
|
||||
break;
|
||||
case 49:
|
||||
*result = sub_0204B204(unkStruct, ctx->fieldSystem->saveData);
|
||||
*result = FrontierFieldSystem_TryGiveOtherTowerRibbons(frontierFsys, ctx->fieldSystem->saveData);
|
||||
break;
|
||||
case 50:
|
||||
unkStruct->unk10_5 = arg;
|
||||
frontierFsys->multiBattleAllyID = arg;
|
||||
break;
|
||||
case 51:
|
||||
*result = unkStruct->unk10_5;
|
||||
*result = frontierFsys->multiBattleAllyID;
|
||||
break;
|
||||
case 52:
|
||||
sub_0204ABC8(unkStruct, ctx->fieldSystem->saveData);
|
||||
FrontierFieldSystem_SetRandomFrontierTrainers(frontierFsys, ctx->fieldSystem->saveData);
|
||||
break;
|
||||
case 53:
|
||||
*result = unkStruct->unk2a[arg];
|
||||
*result = frontierFsys->partyMonIndexes[arg];
|
||||
break;
|
||||
case 54:
|
||||
*result = sub_0204B120(unkStruct, ctx->fieldSystem->saveData, 1);
|
||||
*result = FrontierFieldSystem_0204B120(frontierFsys, ctx->fieldSystem->saveData, 1);
|
||||
break;
|
||||
case 55:
|
||||
*result = sub_0204A2A8(unkStruct, arg);
|
||||
*result = FrontierFieldSystem_0204A2A8(frontierFsys, arg);
|
||||
break;
|
||||
case 57:
|
||||
*result = sub_0204B258(unkStruct, ctx->fieldSystem->saveData);
|
||||
*result = FrontierFieldSystem_0204B258(frontierFsys, ctx->fieldSystem->saveData);
|
||||
break;
|
||||
case 100:
|
||||
if (unkStruct == NULL) {
|
||||
if (frontierFsys == NULL) {
|
||||
*result = TRUE;
|
||||
} else {
|
||||
*result = FALSE;
|
||||
}
|
||||
break;
|
||||
case 58:
|
||||
MI_CpuClear8(unkStruct->unk884, sizeof(unkStruct->unk884));
|
||||
MI_CpuClear8(frontierFsys->unk884, sizeof(frontierFsys->unk884));
|
||||
break;
|
||||
default:
|
||||
GF_ASSERT(FALSE);
|
||||
|
|
@ -196,13 +196,13 @@ BOOL ScrCmd_412(ScriptContext *ctx) {
|
|||
}
|
||||
|
||||
BOOL ScrCmd_413(ScriptContext *ctx) {
|
||||
UnkStruct_Fsys_A0 *unkStruct = ctx->fieldSystem->unkA0;
|
||||
u16 unk6 = ScriptGetVar(ctx);
|
||||
u16 unk7 = ScriptGetVar(ctx);
|
||||
FrontierFieldSystem *frontierFsys = ctx->fieldSystem->frontierFsys;
|
||||
u16 multiBattleAllyIndex = ScriptGetVar(ctx);
|
||||
u16 allyMonIndex = ScriptGetVar(ctx);
|
||||
u16 *speciesPtr = ScriptGetVarPointer(ctx);
|
||||
u16 *movePtr = ScriptGetVarPointer(ctx);
|
||||
*speciesPtr = unkStruct->unk298[unk6].unk30[unk7].species;
|
||||
*movePtr = unkStruct->unk298[unk6].unk30[unk7].moves[0];
|
||||
*speciesPtr = frontierFsys->frontierStatTrainers[multiBattleAllyIndex].frontierMons[allyMonIndex].species;
|
||||
*movePtr = frontierFsys->frontierStatTrainers[multiBattleAllyIndex].frontierMons[allyMonIndex].moves[0];
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
|
@ -222,32 +222,32 @@ BOOL ScrCmd_416(ScriptContext *ctx) {
|
|||
u16 unk7 = ScriptGetVar(ctx);
|
||||
u16 unk4 = ScriptGetVar(ctx);
|
||||
u16 *unkPtr = ScriptGetVarPointer(ctx);
|
||||
UnkStruct_Fsys_A0 *unkStruct = ctx->fieldSystem->unkA0;
|
||||
FrontierFieldSystem *frontierFsys = ctx->fieldSystem->frontierFsys;
|
||||
*unkPtr = FALSE;
|
||||
u32 unk0;
|
||||
switch (unk7) {
|
||||
case 0:
|
||||
unk0 = 62;
|
||||
sub_0204B6AC(ctx->fieldSystem->unkA0, ctx->fieldSystem->saveData);
|
||||
FrontierFieldSystem_0204B6AC(ctx->fieldSystem->frontierFsys, ctx->fieldSystem->saveData);
|
||||
break;
|
||||
case 1:
|
||||
unk0 = 63;
|
||||
sub_0204B708(ctx->fieldSystem->unkA0);
|
||||
FrontierFieldSystem_0204B708(ctx->fieldSystem->frontierFsys);
|
||||
break;
|
||||
case 2:
|
||||
unk0 = 64;
|
||||
sub_0204B720(ctx->fieldSystem->unkA0, unk4);
|
||||
FrontierFieldSystem_0204B720(ctx->fieldSystem->frontierFsys, unk4);
|
||||
break;
|
||||
}
|
||||
if (sub_0205C298(ctx->fieldSystem->saveData) == 1) {
|
||||
if (sub_02037C0C(sub_0203769C(), unkStruct->unk83e) == 1) {
|
||||
if (sub_02037C0C(sub_0203769C(), frontierFsys->unk83e) == 1) {
|
||||
*unkPtr = TRUE;
|
||||
} else {
|
||||
return TRUE;
|
||||
}
|
||||
} else {
|
||||
sub_02096910((void *)unkStruct);
|
||||
if (sub_02037030(unk0, unkStruct->unk83e, sizeof(unkStruct->unk83e)) == 1) {
|
||||
sub_02096910((void *)frontierFsys);
|
||||
if (sub_02037030(unk0, frontierFsys->unk83e, sizeof(frontierFsys->unk83e)) == 1) {
|
||||
*unkPtr = TRUE;
|
||||
}
|
||||
}
|
||||
|
|
@ -255,26 +255,26 @@ BOOL ScrCmd_416(ScriptContext *ctx) {
|
|||
}
|
||||
|
||||
BOOL ScrCmd_417(ScriptContext *ctx) {
|
||||
UnkStruct_Fsys_A0 *unkStruct = ctx->fieldSystem->unkA0;
|
||||
FrontierFieldSystem *frontierFsys = ctx->fieldSystem->frontierFsys;
|
||||
u16 unk6 = ScriptGetVar(ctx);
|
||||
u16 unk7 = ScriptReadHalfword(ctx);
|
||||
if (sub_0205C298(ctx->fieldSystem->saveData) == 1) {
|
||||
sub_020672A4(ctx->fieldSystem->taskman, unk6, unk7);
|
||||
} else {
|
||||
unkStruct->unk8DA = unk7;
|
||||
unkStruct->unk8D5 = unk6;
|
||||
frontierFsys->unk8DA = unk7;
|
||||
frontierFsys->unk8D5 = unk6;
|
||||
SetupNativeScript(ctx, sub_0204A1E8);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static BOOL sub_0204A1E8(ScriptContext *ctx) {
|
||||
UnkStruct_Fsys_A0 *unkStruct = ctx->fieldSystem->unkA0;
|
||||
u16 *unkPtr = GetVarPointer(ctx->fieldSystem, unkStruct->unk8DA);
|
||||
u32 unk = unkStruct->unk8D5 == 1 ? 1 : 2;
|
||||
if (unkStruct->unk8D4 == unk) {
|
||||
unkStruct->unk8D4 = 0;
|
||||
*unkPtr = unkStruct->unk8D8;
|
||||
FrontierFieldSystem *frontierFsys = ctx->fieldSystem->frontierFsys;
|
||||
u16 *unkPtr = GetVarPointer(ctx->fieldSystem, frontierFsys->unk8DA);
|
||||
u32 unk = frontierFsys->unk8D5 == 1 ? 1 : 2;
|
||||
if (frontierFsys->unk8D4 == unk) {
|
||||
frontierFsys->unk8D4 = 0;
|
||||
*unkPtr = frontierFsys->unk8D8;
|
||||
return TRUE;
|
||||
} else {
|
||||
return FALSE;
|
||||
|
|
@ -297,16 +297,16 @@ BOOL ScrCmd_419(ScriptContext *ctx) {
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
static u32 sub_0204A2A8(UnkStruct_Fsys_A0 *unkStruct, u8 a1) {
|
||||
static u32 FrontierFieldSystem_0204A2A8(FrontierFieldSystem *frontierFsys, u8 a1) {
|
||||
if (a1 == 2) {
|
||||
return unkStruct->unk10_5;
|
||||
return frontierFsys->multiBattleAllyID;
|
||||
} else if (a1 == 1) {
|
||||
if (unkStruct->unk0f == 2) {
|
||||
return _020FBF70[unkStruct->unk10_5];
|
||||
if (frontierFsys->towerMode == TOWER_MODE_MULTI) {
|
||||
return StatTrainerOverworlds[frontierFsys->multiBattleAllyID];
|
||||
}
|
||||
return unkStruct->unk12 ? 97 : 0;
|
||||
return frontierFsys->linkAllyGender ? SPRITE_HEROINE : SPRITE_HERO;
|
||||
} else {
|
||||
return unkStruct->unk11 ? 97 : 0;
|
||||
return frontierFsys->trainerGender ? SPRITE_HEROINE : SPRITE_HERO;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ BOOL ScrCmd_643(ScriptContext *ctx) {
|
|||
void *unk1 = FieldSysGetAttrAddr(ctx->fieldSystem, SCRIPTENV_RUNNING_APP_DATA);
|
||||
switch (arg0) {
|
||||
case 0:
|
||||
*result = sub_0204A5B0(arg1, ctx->fieldSystem->saveData, 0);
|
||||
*result = PartyIsValidForFrontier(arg1, ctx->fieldSystem->saveData, 0);
|
||||
break;
|
||||
case 1: // Unused
|
||||
if (arg1 == 3) {
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ BOOL ScrCmd_637(ScriptContext *ctx) {
|
|||
void *unk1 = FieldSysGetAttrAddr(ctx->fieldSystem, SCRIPTENV_RUNNING_APP_DATA);
|
||||
switch (arg0) {
|
||||
case 0:
|
||||
*result = sub_0204A5B0(arg1, ctx->fieldSystem->saveData, 0);
|
||||
*result = PartyIsValidForFrontier(arg1, ctx->fieldSystem->saveData, 0);
|
||||
break;
|
||||
case 1: // Unused
|
||||
if (arg1 == 3) {
|
||||
|
|
|
|||
|
|
@ -4152,7 +4152,7 @@ BOOL ScrCmd_627(ScriptContext *ctx) {
|
|||
MI_CpuClear8(args, sizeof(FrontierLaunchArgs));
|
||||
*pArgs = args;
|
||||
if (r6 == 5 || r6 == 6) {
|
||||
args->unk0 = ctx->fieldSystem->unkA0;
|
||||
args->unk0 = ctx->fieldSystem->frontierFsys;
|
||||
} else {
|
||||
args->unk0 = NULL;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,34 +28,34 @@ typedef struct SpeciesAndItem {
|
|||
u16 item;
|
||||
} SpeciesAndItem;
|
||||
|
||||
static u32 sub_0204B318(UnkStruct_Fsys_A0 *a0);
|
||||
static void sub_0204B470(UnkStruct_Fsys_A0 *a0, SaveData *saveData, u32 a2);
|
||||
static BOOL sub_0204B2B8(SaveData *saveData, u32 ribbon, UnkStruct_Fsys_A0 *a2);
|
||||
static u32 FrontierFieldSystem_0204B318(FrontierFieldSystem *frontierFsys);
|
||||
static void FrontierFieldSystem_SetFrontierMons(FrontierFieldSystem *frontierFsys, SaveData *saveData, BOOL isWifiRoom);
|
||||
static BOOL TryGiveTowerRibbons(SaveData *saveData, u32 ribbon, FrontierFieldSystem *frontierFsys);
|
||||
|
||||
static const u8 _020FBF98[] = { 0, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 0 };
|
||||
static const u8 WifiBattlePointRewards[] = { 0, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 0 };
|
||||
static const u8 _020FBF8C[] = { 0, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0 };
|
||||
static const u8 _020FBF84[] = { 0, 3, 3, 4, 4, 5, 5, 7 };
|
||||
static const u8 _020FBF7C[] = { 0, 8, 9, 11, 12, 14, 15, 18 };
|
||||
static const u8 RegularBattlePointRewards[] = { 0, 3, 3, 4, 4, 5, 5, 7 };
|
||||
static const u8 LinkBattlePointRewards[] = { 0, 8, 9, 11, 12, 14, 15, 18 };
|
||||
|
||||
static u32 sub_0204A3F4(u32 a0) {
|
||||
switch (a0) {
|
||||
case 0:
|
||||
case 4:
|
||||
case 5:
|
||||
static u32 NumMonsForTowerMode(u32 towerMode) {
|
||||
switch (towerMode) {
|
||||
case TOWER_MODE_SINGLE:
|
||||
case TOWER_MODE_WIFI:
|
||||
case TOWER_MODE_WIFI_PRACTICE:
|
||||
return 3;
|
||||
case 1:
|
||||
case TOWER_MODE_DOUBLE:
|
||||
return 4;
|
||||
case 2:
|
||||
case 3:
|
||||
case 6:
|
||||
case TOWER_MODE_MULTI:
|
||||
case TOWER_MODE_LINK:
|
||||
case TOWER_MODE_6:
|
||||
return 2;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static BOOL sub_0204A424(SpeciesAndItem *validMons, u32 species, u32 item, s32 size) {
|
||||
for (s32 i = 0; i < size; i++) {
|
||||
static BOOL SpeciesAndItem_Contains(SpeciesAndItem *validMons, u32 species, u32 item, s32 partySize) {
|
||||
for (s32 i = 0; i < partySize; i++) {
|
||||
if (species == validMons[i].species
|
||||
&& item != ITEM_NONE
|
||||
&& item == validMons[i].item) {
|
||||
|
|
@ -65,7 +65,7 @@ static BOOL sub_0204A424(SpeciesAndItem *validMons, u32 species, u32 item, s32 s
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
static BOOL sub_0204A450(SpeciesAndItem *mons, s32 size) {
|
||||
static BOOL SpeciesAndItem_ValidateUnique(SpeciesAndItem *mons, s32 size) {
|
||||
for (s32 i = 0; i < size - 1; i++) {
|
||||
for (s32 j = i + 1; j < size; j++) {
|
||||
if (mons[i].species == mons[j].species) {
|
||||
|
|
@ -79,8 +79,7 @@ static BOOL sub_0204A450(SpeciesAndItem *mons, s32 size) {
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static BOOL sub_0204A4A0(SpeciesAndItem *validMons, u32 numRequired, s32 numValid, s32 n) {
|
||||
// this assumes that numRequired is always either 2, 3, or 4
|
||||
static BOOL SpeciesAndItem_ValidateAllUnique(SpeciesAndItem *validMons, u32 numRequired, s32 numValid, s32 n) {
|
||||
SpeciesAndItem mons[4];
|
||||
MI_CpuClear8(mons, sizeof(SpeciesAndItem) * NELEMS(mons));
|
||||
for (s32 i = 0; i < n; i++) {
|
||||
|
|
@ -88,7 +87,7 @@ static BOOL sub_0204A4A0(SpeciesAndItem *validMons, u32 numRequired, s32 numVali
|
|||
for (s32 j = i + 1; j < numValid; j++) {
|
||||
mons[1] = validMons[j];
|
||||
if (numRequired == 2) {
|
||||
if (sub_0204A450(mons, numRequired)) {
|
||||
if (SpeciesAndItem_ValidateUnique(mons, numRequired)) {
|
||||
return TRUE;
|
||||
}
|
||||
continue;
|
||||
|
|
@ -96,14 +95,14 @@ static BOOL sub_0204A4A0(SpeciesAndItem *validMons, u32 numRequired, s32 numVali
|
|||
for (s32 k = j + 1; k < numValid; k++) {
|
||||
mons[2] = validMons[k];
|
||||
if (numRequired == 3) {
|
||||
if (sub_0204A450(mons, numRequired)) {
|
||||
if (SpeciesAndItem_ValidateUnique(mons, numRequired)) {
|
||||
return TRUE;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
for (s32 l = k + 1; l < numValid; l++) {
|
||||
mons[3] = validMons[l];
|
||||
if (sub_0204A450(mons, numRequired)) {
|
||||
if (SpeciesAndItem_ValidateUnique(mons, numRequired)) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
|
@ -113,7 +112,7 @@ static BOOL sub_0204A4A0(SpeciesAndItem *validMons, u32 numRequired, s32 numVali
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL sub_0204A5B0(u16 numRequired, SaveData *saveData, BOOL checkDuplicateItems) {
|
||||
BOOL PartyIsValidForFrontier(u16 numRequired, SaveData *saveData, BOOL checkDuplicateItems) {
|
||||
u8 i;
|
||||
u8 partyCount;
|
||||
u8 numValid;
|
||||
|
|
@ -138,7 +137,7 @@ BOOL sub_0204A5B0(u16 numRequired, SaveData *saveData, BOOL checkDuplicateItems)
|
|||
if (IsPokemonBannedFromBattleFrontier(species, form) == TRUE) {
|
||||
continue;
|
||||
}
|
||||
if (checkDuplicateItems == TRUE && sub_0204A424(validMons, species, item, numValid) == TRUE) {
|
||||
if (checkDuplicateItems == TRUE && SpeciesAndItem_Contains(validMons, species, item, numValid) == TRUE) {
|
||||
continue;
|
||||
}
|
||||
validMons[numValid].species = species;
|
||||
|
|
@ -148,10 +147,10 @@ BOOL sub_0204A5B0(u16 numRequired, SaveData *saveData, BOOL checkDuplicateItems)
|
|||
if (numValid < numRequired) {
|
||||
return FALSE;
|
||||
}
|
||||
return sub_0204A4A0(validMons, numRequired, numValid, numValid - numRequired + 1);
|
||||
return SpeciesAndItem_ValidateAllUnique(validMons, numRequired, numValid, numValid - numRequired + 1);
|
||||
}
|
||||
|
||||
void sub_0204A68C(void) {
|
||||
void ResetSystem(void) {
|
||||
OS_ResetSystem(0);
|
||||
}
|
||||
|
||||
|
|
@ -159,7 +158,7 @@ void sub_0204A698(u32 a0) {
|
|||
sub_0202D234(a0);
|
||||
}
|
||||
|
||||
u32 sub_0204A6A0(u32 a0) {
|
||||
u32 sub_0204A6A0(u32 unused_0) {
|
||||
return sub_0202D3DC();
|
||||
}
|
||||
|
||||
|
|
@ -179,18 +178,18 @@ void sub_0204A6E8(FieldSystem *fieldSystem) {
|
|||
ClearFlag966(Save_VarsFlags_Get(fieldSystem->saveData));
|
||||
}
|
||||
|
||||
u32 sub_0204A6F8(SaveData *saveData, u32 a1) {
|
||||
if (a1 == 5) {
|
||||
u32 sub_0204A6F8(SaveData *saveData, u32 towerMode) {
|
||||
if (towerMode == TOWER_MODE_WIFI_PRACTICE) {
|
||||
return FALSE;
|
||||
} else if (a1 == 6) {
|
||||
} else if (towerMode == TOWER_MODE_6) {
|
||||
return FrontierSave_GetStat(Save_Frontier_GetStatic(saveData), 113, sub_0205C268(113));
|
||||
} else {
|
||||
return FrontierSave_GetStat(Save_Frontier_GetStatic(saveData), 2 * a1 + 1, 0xff);
|
||||
return FrontierSave_GetStat(Save_Frontier_GetStatic(saveData), 2 * towerMode + 1, 0xff);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0204A730(SaveData *saveData, u8 a1) {
|
||||
FRONTIERDATA *frontierData = Save_FrontierData_Get(saveData);
|
||||
FrontierData *frontierData = Save_FrontierData_Get(saveData);
|
||||
if (a1 == 0) {
|
||||
sub_0202D5DC(frontierData, 5, 2);
|
||||
} else {
|
||||
|
|
@ -204,116 +203,116 @@ u16 sub_0204A750(SaveData *saveData) {
|
|||
|
||||
u32 sub_0204A764(SaveData *saveData) {
|
||||
u32 unk = sub_0202D908(saveData);
|
||||
FRONTIERDATA *frontierData = Save_FrontierData_Get(saveData);
|
||||
u8 unk4 = sub_0202D284(unk, 0, 0);
|
||||
if (unk4 == 5) {
|
||||
return unk4;
|
||||
FrontierData *frontierData = Save_FrontierData_Get(saveData);
|
||||
u8 towerMode = sub_0202D284(unk, 0, 0);
|
||||
if (towerMode == TOWER_MODE_WIFI_PRACTICE) {
|
||||
return towerMode;
|
||||
}
|
||||
if (unk4 == 6) {
|
||||
if (towerMode == TOWER_MODE_6) {
|
||||
sub_02031108(Save_Frontier_GetStatic(saveData), 100, sub_0205C268(100), 0);
|
||||
} else {
|
||||
sub_0202D5DC(frontierData, unk4 + 8, 2);
|
||||
sub_0202D5DC(frontierData, towerMode + 8, 2);
|
||||
}
|
||||
sub_0202D57C(frontierData, unk4, 2);
|
||||
sub_02031108(Save_Frontier_GetStatic(saveData), sub_0205C310(unk4), sub_0205C268(sub_0205C310(unk4)), 0);
|
||||
if (unk4 != 4 && unk4 != 6) {
|
||||
sub_0202D57C(frontierData, towerMode, 2);
|
||||
sub_02031108(Save_Frontier_GetStatic(saveData), sub_0205C310(towerMode), sub_0205C268(sub_0205C310(towerMode)), 0);
|
||||
if (towerMode != TOWER_MODE_WIFI && towerMode != TOWER_MODE_6) {
|
||||
sub_020674E0(saveData);
|
||||
}
|
||||
return unk4;
|
||||
return towerMode;
|
||||
}
|
||||
|
||||
u16 sub_0204A800(SaveData *saveData) {
|
||||
return sub_0202D7B0(sub_0202D928(saveData));
|
||||
}
|
||||
|
||||
void sub_0204A810(UnkStruct_Fsys_A0 **a0) {
|
||||
GF_ASSERT(*a0 == NULL);
|
||||
*a0 = NULL;
|
||||
void FrontierFieldSystem_0204A810(FrontierFieldSystem **frontierFsys) {
|
||||
GF_ASSERT(*frontierFsys == NULL);
|
||||
*frontierFsys = NULL;
|
||||
}
|
||||
|
||||
UnkStruct_Fsys_A0 *sub_0204A824(SaveData *saveData, BOOL resumeFromPrevious, u32 a2) {
|
||||
UnkStruct_Fsys_A0 *unkStruct = Heap_Alloc(HEAP_ID_FIELD2, sizeof(UnkStruct_Fsys_A0));
|
||||
MI_CpuClear8(unkStruct, sizeof(UnkStruct_Fsys_A0));
|
||||
unkStruct->heapID = HEAP_ID_FIELD2;
|
||||
unkStruct->unk70 = sub_0202D908(saveData);
|
||||
unkStruct->unk74 = Save_FrontierData_Get(saveData);
|
||||
unkStruct->unk00 = 0x12345678;
|
||||
sub_0202D3E4(unkStruct->unk70, 0);
|
||||
FrontierFieldSystem *FrontierFieldSystem_New(SaveData *saveData, BOOL resumeFromPrevious, u32 towerMode) {
|
||||
FrontierFieldSystem *frontierFsys = Heap_Alloc(HEAP_ID_FIELD2, sizeof(FrontierFieldSystem));
|
||||
MI_CpuClear8(frontierFsys, sizeof(FrontierFieldSystem));
|
||||
frontierFsys->heapID = HEAP_ID_FIELD2;
|
||||
frontierFsys->unk70 = sub_0202D908(saveData);
|
||||
frontierFsys->frontierData = Save_FrontierData_Get(saveData);
|
||||
frontierFsys->initMagicNumber = 0x12345678;
|
||||
sub_0202D3E4(frontierFsys->unk70, 0);
|
||||
if (!resumeFromPrevious) {
|
||||
unkStruct->unk0f = a2;
|
||||
unkStruct->unk0e = sub_0204A3F4(unkStruct->unk0f);
|
||||
unkStruct->unk0c = 1;
|
||||
unkStruct->curWinStreak = 0;
|
||||
frontierFsys->towerMode = towerMode;
|
||||
frontierFsys->numMons = NumMonsForTowerMode(frontierFsys->towerMode);
|
||||
frontierFsys->currentBattleNumber = 1;
|
||||
frontierFsys->curWinStreak = 0;
|
||||
for (u16 i = 0; i < 4; i++) {
|
||||
unkStruct->unk2a[i] = 0xff;
|
||||
frontierFsys->partyMonIndexes[i] = 0xff;
|
||||
}
|
||||
for (u16 i = 0; i < 14; i++) {
|
||||
unkStruct->unk3e[i] = 0xffff;
|
||||
frontierFsys->trainersInCurrentRound[i] = 0xffff;
|
||||
}
|
||||
sub_0202D234(unkStruct->unk70);
|
||||
u8 unk = unkStruct->unk0f;
|
||||
sub_0202D308(unkStruct->unk70, 0, &unk);
|
||||
sub_0202D234(frontierFsys->unk70);
|
||||
u8 data = frontierFsys->towerMode;
|
||||
sub_0202D308(frontierFsys->unk70, 0, &data);
|
||||
} else {
|
||||
unkStruct->unk0f = sub_0202D284(unkStruct->unk70, 0, 0);
|
||||
unkStruct->unk0c = sub_0202D284(unkStruct->unk70, 1, 0);
|
||||
unkStruct->curWinStreak = unkStruct->unk0c - 1;
|
||||
unkStruct->unk0e = sub_0204A3F4(unkStruct->unk0f);
|
||||
sub_0202D284(unkStruct->unk70, 5, unkStruct->unk2a);
|
||||
sub_0202D284(unkStruct->unk70, 8, unkStruct->unk3e);
|
||||
unkStruct->unk08 = sub_0202D284(unkStruct->unk70, 10, 0);
|
||||
if (unkStruct->unk0f == 2) {
|
||||
unkStruct->unk10_5 = sub_0202D284(unkStruct->unk70, 9, 0);
|
||||
sub_0202D284(unkStruct->unk70, 6, &unkStruct->unk7e8[unkStruct->unk10_5]);
|
||||
sub_0204BA50(unkStruct,
|
||||
&unkStruct->unk298[unkStruct->unk10_5],
|
||||
300 + unkStruct->unk10_5,
|
||||
sub_0202D284(unkStruct->unk70, 7, 0),
|
||||
&unkStruct->unk7e8[unkStruct->unk10_5],
|
||||
unkStruct->heapID);
|
||||
frontierFsys->towerMode = sub_0202D284(frontierFsys->unk70, 0, 0);
|
||||
frontierFsys->currentBattleNumber = sub_0202D284(frontierFsys->unk70, 1, 0);
|
||||
frontierFsys->curWinStreak = frontierFsys->currentBattleNumber - 1;
|
||||
frontierFsys->numMons = NumMonsForTowerMode(frontierFsys->towerMode);
|
||||
sub_0202D284(frontierFsys->unk70, 5, frontierFsys->partyMonIndexes);
|
||||
sub_0202D284(frontierFsys->unk70, 8, frontierFsys->trainersInCurrentRound);
|
||||
frontierFsys->unk08 = sub_0202D284(frontierFsys->unk70, 10, 0);
|
||||
if (frontierFsys->towerMode == TOWER_MODE_MULTI) {
|
||||
frontierFsys->multiBattleAllyID = sub_0202D284(frontierFsys->unk70, 9, 0);
|
||||
sub_0202D284(frontierFsys->unk70, 6, &frontierFsys->multiBattleAllyData[frontierFsys->multiBattleAllyID]);
|
||||
FrontierFieldSystem_GenerateAllyFrontierMons(frontierFsys,
|
||||
&frontierFsys->frontierStatTrainers[frontierFsys->multiBattleAllyID],
|
||||
300 + frontierFsys->multiBattleAllyID,
|
||||
sub_0202D284(frontierFsys->unk70, 7, 0),
|
||||
&frontierFsys->multiBattleAllyData[frontierFsys->multiBattleAllyID],
|
||||
frontierFsys->heapID);
|
||||
}
|
||||
}
|
||||
unkStruct->unk11 = PlayerProfile_GetTrainerGender(Save_PlayerData_GetProfile(saveData));
|
||||
if (unkStruct->unk0f != 5) {
|
||||
frontierFsys->trainerGender = PlayerProfile_GetTrainerGender(Save_PlayerData_GetProfile(saveData));
|
||||
if (frontierFsys->towerMode != TOWER_MODE_WIFI_PRACTICE) {
|
||||
FrontierSave *frontierSaveData = Save_Frontier_GetStatic(saveData);
|
||||
GameStats *gameStats = Save_GameStats_Get(saveData);
|
||||
u16 unk0;
|
||||
if (unkStruct->unk0f == 6) {
|
||||
if (frontierFsys->towerMode == TOWER_MODE_6) {
|
||||
unk0 = Save_VarsFlags_GetVar4052(Save_VarsFlags_Get(saveData));
|
||||
} else {
|
||||
unk0 = sub_0202D5DC(unkStruct->unk74, unkStruct->unk0f + 8, 0);
|
||||
unk0 = sub_0202D5DC(frontierFsys->frontierData, frontierFsys->towerMode + 8, 0);
|
||||
}
|
||||
if (unk0 != 0) {
|
||||
u32 unk0;
|
||||
if (unkStruct->unk0f == 6) {
|
||||
if (frontierFsys->towerMode == TOWER_MODE_6) {
|
||||
unk0 = FrontierSave_GetStat(frontierSaveData, 113, sub_0205C268(113));
|
||||
} else {
|
||||
unk0 = FrontierSave_GetStat(frontierSaveData, 2 * unkStruct->unk0f + 1, 0xff);
|
||||
unk0 = FrontierSave_GetStat(frontierSaveData, 2 * frontierFsys->towerMode + 1, 0xff);
|
||||
}
|
||||
unkStruct->unk1a = unk0;
|
||||
unkStruct->unk1c = sub_0202D57C(unkStruct->unk74, unkStruct->unk0f, 0);
|
||||
frontierFsys->currentBattleInSession = unk0;
|
||||
frontierFsys->currentRound = sub_0202D57C(frontierFsys->frontierData, frontierFsys->towerMode, 0);
|
||||
}
|
||||
unkStruct->unk20 = GameStats_GetCapped(gameStats, GAME_STAT_BATTLE_TOWER_WIN_COUNT);
|
||||
frontierFsys->totalTowerWins = GameStats_GetCapped(gameStats, GAME_STAT_BATTLE_TOWER_WIN_COUNT);
|
||||
}
|
||||
if (unkStruct->unk0f == 6) {
|
||||
unkStruct->unk1c = sub_0202D5C4(unkStruct->unk74, 6, unkStruct->unk1a / 7);
|
||||
if (frontierFsys->towerMode == TOWER_MODE_6) {
|
||||
frontierFsys->currentRound = sub_0202D5C4(frontierFsys->frontierData, 6, frontierFsys->currentBattleInSession / 7);
|
||||
}
|
||||
return unkStruct;
|
||||
return frontierFsys;
|
||||
}
|
||||
|
||||
void sub_0204AA2C(UnkStruct_Fsys_A0 *a0) {
|
||||
if (a0 == NULL) {
|
||||
void FrontierFieldSystem_Free(FrontierFieldSystem *frontierFsys) {
|
||||
if (frontierFsys == NULL) {
|
||||
return;
|
||||
}
|
||||
GF_ASSERT(a0->unk00 == 0x12345678);
|
||||
MI_CpuClear8(a0, sizeof(UnkStruct_Fsys_A0));
|
||||
Heap_Free(a0);
|
||||
GF_ASSERT(frontierFsys->initMagicNumber == 0x12345678);
|
||||
MI_CpuClear8(frontierFsys, sizeof(FrontierFieldSystem));
|
||||
Heap_Free(frontierFsys);
|
||||
}
|
||||
|
||||
void sub_0204AA58(UnkStruct_Fsys_A0 *a0, TaskManager *taskManager, void *a2) {
|
||||
sub_02067118(taskManager, a2, 17, 0, a0->unk0e, a0->unk0e, 100, 0);
|
||||
void FrontierFieldSystem_0204AA58(FrontierFieldSystem *frontierFsys, TaskManager *taskManager, void *a2) {
|
||||
sub_02067118(taskManager, a2, 17, 0, frontierFsys->numMons, frontierFsys->numMons, 100, 0);
|
||||
}
|
||||
|
||||
BOOL sub_0204AA78(UnkStruct_Fsys_A0 *a0, void **a1, SaveData *saveData) {
|
||||
BOOL FrontierFieldSystem_0204AA78(FrontierFieldSystem *frontierFsys, void **a1, SaveData *saveData) {
|
||||
Party *party;
|
||||
u8 *unk = *a1;
|
||||
if (unk[0x27] != 0 || unk[0x26] == 7) {
|
||||
|
|
@ -322,23 +321,23 @@ BOOL sub_0204AA78(UnkStruct_Fsys_A0 *a0, void **a1, SaveData *saveData) {
|
|||
return FALSE;
|
||||
}
|
||||
party = SaveArray_Party_Get(saveData);
|
||||
for (u16 i = 0; i < a0->unk0e; i++) {
|
||||
a0->unk2a[i] = unk[0x30 + i] - 1;
|
||||
Pokemon *mon = Party_GetMonByIndex(party, a0->unk2a[i]);
|
||||
a0->unk2e[i] = GetMonData(mon, MON_DATA_SPECIES, NULL);
|
||||
a0->unk36[i] = GetMonData(mon, MON_DATA_HELD_ITEM, NULL);
|
||||
for (u16 i = 0; i < frontierFsys->numMons; i++) {
|
||||
frontierFsys->partyMonIndexes[i] = unk[0x30 + i] - 1;
|
||||
Pokemon *mon = Party_GetMonByIndex(party, frontierFsys->partyMonIndexes[i]);
|
||||
frontierFsys->partyMonSpecies[i] = GetMonData(mon, MON_DATA_SPECIES, NULL);
|
||||
frontierFsys->partyMonItems[i] = GetMonData(mon, MON_DATA_HELD_ITEM, NULL);
|
||||
}
|
||||
Heap_Free(*a1);
|
||||
*a1 = NULL;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
u32 sub_0204AB10(UnkStruct_Fsys_A0 *a0, SaveData *saveData) {
|
||||
u32 FrontierFieldSystem_PartyHasDuplicateSpeciesOrItems(FrontierFieldSystem *frontierFsys, SaveData *saveData) {
|
||||
u16 species[4];
|
||||
u16 items[4];
|
||||
Party *party = SaveArray_Party_Get(saveData);
|
||||
for (u16 i = 0; i < a0->unk0e; i++) {
|
||||
Pokemon *mon = Party_GetMonByIndex(party, a0->unk2a[i]);
|
||||
for (u16 i = 0; i < frontierFsys->numMons; i++) {
|
||||
Pokemon *mon = Party_GetMonByIndex(party, frontierFsys->partyMonIndexes[i]);
|
||||
species[i] = GetMonData(mon, MON_DATA_SPECIES, NULL);
|
||||
items[i] = GetMonData(mon, MON_DATA_HELD_ITEM, NULL);
|
||||
if (i == 0) {
|
||||
|
|
@ -356,240 +355,238 @@ u32 sub_0204AB10(UnkStruct_Fsys_A0 *a0, SaveData *saveData) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
static BOOL sub_0204ABA0(u16 *a0, u32 a1, u16 a2) {
|
||||
for (u16 i = 0; i < a2; i++) {
|
||||
if (a1 == a0[i]) {
|
||||
static BOOL FrontierTrainerAlreadyInCurrentRound(u16 *existingIDs, u32 frontierTrainerID, u16 comparisons) {
|
||||
for (u16 i = 0; i < comparisons; i++) {
|
||||
if (frontierTrainerID == existingIDs[i]) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void sub_0204ABC8(UnkStruct_Fsys_A0 *a0, SaveData *saveData) {
|
||||
void FrontierFieldSystem_SetRandomFrontierTrainers(FrontierFieldSystem *frontierFsys, SaveData *saveData) {
|
||||
// saveData is unused
|
||||
s32 i;
|
||||
u32 unk;
|
||||
u8 sp00;
|
||||
if (a0->unk0f == 2 || a0->unk0f == 6 || a0->unk0f == 3) {
|
||||
u32 temp;
|
||||
if ((a0->unk0f == 3 && a0->unk14 > a0->unk1c)
|
||||
|| (a0->unk0f == 6 && a0->unk14 > a0->unk1c)) {
|
||||
temp = a0->unk14;
|
||||
u32 frontierTrainerID;
|
||||
u8 difficultyBracket;
|
||||
if (frontierFsys->towerMode == TOWER_MODE_MULTI || frontierFsys->towerMode == TOWER_MODE_6 || frontierFsys->towerMode == TOWER_MODE_LINK) {
|
||||
u32 round;
|
||||
if ((frontierFsys->towerMode == TOWER_MODE_LINK && frontierFsys->linkAllyRound > frontierFsys->currentRound)
|
||||
|| (frontierFsys->towerMode == TOWER_MODE_6 && frontierFsys->linkAllyRound > frontierFsys->currentRound)) {
|
||||
round = frontierFsys->linkAllyRound;
|
||||
} else {
|
||||
temp = a0->unk1c;
|
||||
round = frontierFsys->currentRound;
|
||||
}
|
||||
sp00 = temp;
|
||||
difficultyBracket = round;
|
||||
for (i = 0; i < 14; i++) {
|
||||
do {
|
||||
unk = sub_0204B73C(a0, sp00, i / 2, a0->unk0f);
|
||||
} while (sub_0204ABA0(a0->unk3e, unk, i));
|
||||
a0->unk3e[i] = unk;
|
||||
frontierTrainerID = FrontierFieldSystem_GetRandomFrontierTrainerID(frontierFsys, difficultyBracket, i / 2, frontierFsys->towerMode);
|
||||
} while (FrontierTrainerAlreadyInCurrentRound(frontierFsys->trainersInCurrentRound, frontierTrainerID, i));
|
||||
frontierFsys->trainersInCurrentRound[i] = frontierTrainerID;
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < 7; i++) {
|
||||
do {
|
||||
unk = sub_0204B73C(a0, a0->unk1c, i, a0->unk0f);
|
||||
} while (sub_0204ABA0(a0->unk3e, unk, i));
|
||||
a0->unk3e[i] = unk;
|
||||
frontierTrainerID = FrontierFieldSystem_GetRandomFrontierTrainerID(frontierFsys, frontierFsys->currentRound, i, frontierFsys->towerMode);
|
||||
} while (FrontierTrainerAlreadyInCurrentRound(frontierFsys->trainersInCurrentRound, frontierTrainerID, i));
|
||||
frontierFsys->trainersInCurrentRound[i] = frontierTrainerID;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
u8 sub_0204AC78(UnkStruct_Fsys_A0 *a0) {
|
||||
return a0->unk0c;
|
||||
u8 FrontierFieldSystem_GetFrontierBattleNumber(FrontierFieldSystem *frontierFsys) {
|
||||
return frontierFsys->currentBattleNumber;
|
||||
}
|
||||
|
||||
BOOL sub_0204AC7C(UnkStruct_Fsys_A0 *a0) {
|
||||
if (a0->unk10_0) {
|
||||
BOOL FrontierFieldSystem_0204AC7C(FrontierFieldSystem *frontierFsys) {
|
||||
if (frontierFsys->unk10_0) {
|
||||
return TRUE;
|
||||
}
|
||||
if (a0->unk0c > 7) {
|
||||
a0->unk10_0 = TRUE;
|
||||
if (frontierFsys->currentBattleNumber > 7) {
|
||||
frontierFsys->unk10_0 = TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void sub_0204ACA0(UnkStruct_Fsys_A0 *a0, SaveData *saveData, BOOL a2, u16 a3) {
|
||||
// a2 and a3 are unused
|
||||
switch (a0->unk0f) {
|
||||
case 0:
|
||||
sub_0204B470(a0, saveData, 0);
|
||||
static void sub_0204ACA0(FrontierFieldSystem *frontierFsys, SaveData *saveData, BOOL unused_2, u16 unused_3) {
|
||||
switch (frontierFsys->towerMode) {
|
||||
case TOWER_MODE_SINGLE:
|
||||
FrontierFieldSystem_SetFrontierMons(frontierFsys, saveData, FALSE);
|
||||
break;
|
||||
case 1:
|
||||
case TOWER_MODE_DOUBLE:
|
||||
break;
|
||||
case 4:
|
||||
sub_0204B470(a0, saveData, 1);
|
||||
sub_0202D3B0(a0->unk70, a0->unk28, a0->unk24, a0->unk26);
|
||||
u8 unk = a0->unk0f;
|
||||
sub_0202D308(a0->unk70, 0, &unk);
|
||||
unk = a0->unk0c;
|
||||
sub_0202D308(a0->unk70, 1, &unk);
|
||||
sub_0202D4FC(a0->unk74, a0->unk70);
|
||||
case TOWER_MODE_WIFI:
|
||||
FrontierFieldSystem_SetFrontierMons(frontierFsys, saveData, TRUE);
|
||||
sub_0202D3B0(frontierFsys->unk70, frontierFsys->unk28, frontierFsys->unk24, frontierFsys->unk26);
|
||||
u8 data = frontierFsys->towerMode;
|
||||
sub_0202D308(frontierFsys->unk70, 0, &data);
|
||||
data = frontierFsys->currentBattleNumber;
|
||||
sub_0202D308(frontierFsys->unk70, 1, &data);
|
||||
sub_0202D4FC(frontierFsys->frontierData, frontierFsys->unk70);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0204AD04(UnkStruct_Fsys_A0 *a0, SaveData *saveData) {
|
||||
void FrontierFieldSystem_0204AD04(FrontierFieldSystem *frontierFsys, SaveData *saveData) {
|
||||
GameStats *gameStats = Save_GameStats_Get(saveData);
|
||||
FrontierSave *frontierSaveData = Save_Frontier_GetStatic(saveData);
|
||||
if (a0->unk0f == 5) {
|
||||
if (frontierFsys->towerMode == TOWER_MODE_WIFI_PRACTICE) {
|
||||
return;
|
||||
}
|
||||
u32 unk4 = a0->unk0f == 6 ? 112 : a0->unk0f * 2;
|
||||
u32 unk4 = frontierFsys->towerMode == TOWER_MODE_6 ? 112 : frontierFsys->towerMode * 2;
|
||||
FrontierSave_GetStat(frontierSaveData, unk4, sub_0205C268(unk4));
|
||||
sub_0203126C(frontierSaveData, unk4, sub_0205C268(unk4), a0->unk1a + a0->curWinStreak);
|
||||
if (a0->unk0f == 6) {
|
||||
sub_0203126C(frontierSaveData, unk4, sub_0205C268(unk4), frontierFsys->currentBattleInSession + frontierFsys->curWinStreak);
|
||||
if (frontierFsys->towerMode == TOWER_MODE_6) {
|
||||
FrontierSave_GetStat(Save_Frontier_GetStatic(saveData), 100, sub_0205C268(100));
|
||||
} else {
|
||||
sub_0202D5DC(a0->unk74, a0->unk0f + 8, 0);
|
||||
sub_0202D5DC(frontierFsys->frontierData, frontierFsys->towerMode + 8, 0);
|
||||
}
|
||||
u32 unk = sub_02031108(frontierSaveData, unk4 + 1, sub_0205C268(unk4 + 1), a0->unk1a + a0->curWinStreak);
|
||||
if (a0->unk0f == 6) {
|
||||
u32 unk = sub_02031108(frontierSaveData, unk4 + 1, sub_0205C268(unk4 + 1), frontierFsys->currentBattleInSession + frontierFsys->curWinStreak);
|
||||
if (frontierFsys->towerMode == TOWER_MODE_6) {
|
||||
sub_02031108(Save_Frontier_GetStatic(saveData), 100, sub_0205C268(100), 0);
|
||||
} else {
|
||||
sub_0202D5DC(a0->unk74, a0->unk0f + 8, 2);
|
||||
sub_0202D5DC(frontierFsys->frontierData, frontierFsys->towerMode + 8, 2);
|
||||
}
|
||||
GameStats_Add(gameStats, GAME_STAT_BATTLE_TOWER_WIN_COUNT, a0->curWinStreak);
|
||||
sub_0202D57C(a0->unk74, a0->unk0f, 2);
|
||||
if (a0->unk0f != 6) {
|
||||
GameStats_Add(gameStats, GAME_STAT_BATTLE_TOWER_WIN_COUNT, frontierFsys->curWinStreak);
|
||||
sub_0202D57C(frontierFsys->frontierData, frontierFsys->towerMode, 2);
|
||||
if (frontierFsys->towerMode != TOWER_MODE_6) {
|
||||
GameStats_Add(Save_GameStats_Get(saveData), GAME_STAT_BATTLE_TOWER_BATTLE_COUNT, 1);
|
||||
}
|
||||
sub_0204B318(a0);
|
||||
FrontierFieldSystem_0204B318(frontierFsys);
|
||||
unk++;
|
||||
if (unk > 9999) {
|
||||
unk = 9999;
|
||||
}
|
||||
sub_0204ACA0(a0, saveData, 0, unk);
|
||||
sub_0204ACA0(frontierFsys, saveData, 0, unk);
|
||||
}
|
||||
|
||||
void sub_0204AE20(UnkStruct_Fsys_A0 *a0, SaveData *saveData) {
|
||||
if (a0->unk0f == 5) {
|
||||
void FrontierFieldSystem_0204AE20(FrontierFieldSystem *frontierFsys, SaveData *saveData) {
|
||||
if (frontierFsys->towerMode == TOWER_MODE_WIFI_PRACTICE) {
|
||||
return;
|
||||
}
|
||||
GameStats *gameStats = Save_GameStats_Get(saveData);
|
||||
FrontierSave *frontierSaveData = Save_Frontier_GetStatic(saveData);
|
||||
u32 unk4 = a0->unk0f == 6 ? 112 : a0->unk0f * 2;
|
||||
if (a0->unk0f == 6) {
|
||||
u32 unk4 = frontierFsys->towerMode == TOWER_MODE_6 ? 112 : frontierFsys->towerMode * 2;
|
||||
if (frontierFsys->towerMode == TOWER_MODE_6) {
|
||||
FrontierSave_GetStat(Save_Frontier_GetStatic(saveData), 100, sub_0205C268(100));
|
||||
} else {
|
||||
sub_0202D5DC(a0->unk74, a0->unk0f + 8, 0);
|
||||
sub_0202D5DC(frontierFsys->frontierData, frontierFsys->towerMode + 8, 0);
|
||||
}
|
||||
u32 unk6 = sub_02031108(frontierSaveData, unk4 + 1, sub_0205C268(unk4 + 1), a0->unk1a + a0->curWinStreak);
|
||||
if (a0->unk0f == 6) {
|
||||
u32 unk6 = sub_02031108(frontierSaveData, unk4 + 1, sub_0205C268(unk4 + 1), frontierFsys->currentBattleInSession + frontierFsys->curWinStreak);
|
||||
if (frontierFsys->towerMode == TOWER_MODE_6) {
|
||||
sub_02031108(Save_Frontier_GetStatic(saveData), 100, sub_0205C268(100), 1);
|
||||
} else {
|
||||
sub_0202D5DC(a0->unk74, a0->unk0f + 8, 1);
|
||||
sub_0202D5DC(frontierFsys->frontierData, frontierFsys->towerMode + 8, 1);
|
||||
}
|
||||
FrontierSave_GetStat(frontierSaveData, unk4, sub_0205C268(unk4));
|
||||
sub_0203126C(frontierSaveData, unk4, sub_0205C268(unk4), unk6);
|
||||
GameStats_Add(gameStats, GAME_STAT_BATTLE_TOWER_WIN_COUNT, 7);
|
||||
sub_0202D57C(a0->unk74, a0->unk0f, 3);
|
||||
if (a0->unk0f != 6) {
|
||||
sub_0202D57C(frontierFsys->frontierData, frontierFsys->towerMode, 3);
|
||||
if (frontierFsys->towerMode != TOWER_MODE_6) {
|
||||
GameStats_Add(gameStats, GAME_STAT_BATTLE_TOWER_BATTLE_COUNT, 1);
|
||||
}
|
||||
GameStats_AddScore(gameStats, SCORE_EVENT_14);
|
||||
sub_0204B318(a0);
|
||||
sub_0204ACA0(a0, saveData, 1, unk6);
|
||||
FrontierFieldSystem_0204B318(frontierFsys);
|
||||
sub_0204ACA0(frontierFsys, saveData, 1, unk6);
|
||||
}
|
||||
|
||||
void sub_0204AF2C(UnkStruct_Fsys_A0 *a0) {
|
||||
u8 unk = a0->unk0f;
|
||||
sub_0202D308(a0->unk70, 0, &unk);
|
||||
unk = a0->unk0c;
|
||||
sub_0202D308(a0->unk70, 1, &unk);
|
||||
sub_0202D308(a0->unk70, 5, a0->unk2a);
|
||||
sub_0202D3B0(a0->unk70, a0->unk28, a0->unk24, a0->unk26);
|
||||
sub_0202D308(a0->unk70, 8, a0->unk3e);
|
||||
sub_0202D308(a0->unk70, 10, &a0->unk08);
|
||||
sub_0202D3E4(a0->unk70, 1);
|
||||
if (a0->unk0f == 2) {
|
||||
unk = a0->unk10_5;
|
||||
sub_0202D308(a0->unk70, 9, &unk);
|
||||
sub_0202D308(a0->unk70, 6, &a0->unk7e8[a0->unk10_5]);
|
||||
sub_0202D308(a0->unk70, 7, &a0->unk838[a0->unk10_5]);
|
||||
void FrontierFieldSystem_0204AF2C(FrontierFieldSystem *frontierFsys) {
|
||||
u8 data = frontierFsys->towerMode;
|
||||
sub_0202D308(frontierFsys->unk70, 0, &data);
|
||||
data = frontierFsys->currentBattleNumber;
|
||||
sub_0202D308(frontierFsys->unk70, 1, &data);
|
||||
sub_0202D308(frontierFsys->unk70, 5, frontierFsys->partyMonIndexes);
|
||||
sub_0202D3B0(frontierFsys->unk70, frontierFsys->unk28, frontierFsys->unk24, frontierFsys->unk26);
|
||||
sub_0202D308(frontierFsys->unk70, 8, frontierFsys->trainersInCurrentRound);
|
||||
sub_0202D308(frontierFsys->unk70, 10, &frontierFsys->unk08);
|
||||
sub_0202D3E4(frontierFsys->unk70, 1);
|
||||
if (frontierFsys->towerMode == TOWER_MODE_MULTI) {
|
||||
data = frontierFsys->multiBattleAllyID;
|
||||
sub_0202D308(frontierFsys->unk70, 9, &data);
|
||||
sub_0202D308(frontierFsys->unk70, 6, &frontierFsys->multiBattleAllyData[frontierFsys->multiBattleAllyID]);
|
||||
sub_0202D308(frontierFsys->unk70, 7, &frontierFsys->unk838[frontierFsys->multiBattleAllyID]);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_0204AFE0(UnkStruct_Fsys_A0 *a0) {
|
||||
void FrontierFieldSystem_0204AFE0(FrontierFieldSystem *frontierFsys) {
|
||||
for (s32 i = 0; i < 5; i++) {
|
||||
a0->unk838[i] = sub_0204BA04(a0, &a0->unk298[i], 300 + i, a0->unk0e, a0->unk2e, a0->unk36, &a0->unk7e8[i], a0->heapID);
|
||||
frontierFsys->unk838[i] = FrontierFieldSystem_0204BA04(frontierFsys, &frontierFsys->frontierStatTrainers[i], 300 + i, frontierFsys->numMons, frontierFsys->partyMonSpecies, frontierFsys->partyMonItems, &frontierFsys->multiBattleAllyData[i], frontierFsys->heapID);
|
||||
}
|
||||
}
|
||||
|
||||
u32 sub_0204B044(UnkStruct_Fsys_A0 *a0, u32 a1) {
|
||||
sub_0204B5E8(a0->unk78[a1].unk04);
|
||||
u32 FrontierFieldSystem_0204B044(FrontierFieldSystem *frontierFsys, u32 a1) {
|
||||
GetFrontierTrainerOverworld(frontierFsys->unk78[a1].trainerClass);
|
||||
}
|
||||
|
||||
u32 sub_0204B05C(UnkStruct_Fsys_A0 *a0) {
|
||||
return a0->unk0f;
|
||||
u32 FrontierFieldSystem_GetBattleTowerMode(FrontierFieldSystem *frontierFsys) {
|
||||
return frontierFsys->towerMode;
|
||||
}
|
||||
|
||||
u32 sub_0204B060(UnkStruct_Fsys_A0 *a0) {
|
||||
return a0->unk10_1;
|
||||
u32 FrontierFieldSystem_GetPalmerDefeated(FrontierFieldSystem *frontierFsys) {
|
||||
return frontierFsys->palmerDefeated;
|
||||
}
|
||||
|
||||
u32 sub_0204B068(UnkStruct_Fsys_A0 *a0) {
|
||||
u32 unk;
|
||||
if (a0->unk0f == 5) {
|
||||
u32 FrontierFieldSystem_AwardTowerBattlePoints(FrontierFieldSystem *frontierFsys) {
|
||||
u32 battlePoints;
|
||||
if (frontierFsys->towerMode == TOWER_MODE_WIFI_PRACTICE) {
|
||||
return 0;
|
||||
}
|
||||
if (a0->unk0f == 4) {
|
||||
unk = _020FBF98[sub_0202D488(a0->unk74, 0)];
|
||||
if (frontierFsys->towerMode == TOWER_MODE_WIFI) {
|
||||
battlePoints = WifiBattlePointRewards[sub_0202D488(frontierFsys->frontierData, 0)];
|
||||
} else {
|
||||
if (a0->unk0f == 3 || a0->unk0f == 6) {
|
||||
u32 index = sub_0202D57C(a0->unk74, a0->unk0f, 0);
|
||||
if (index >= 7) {
|
||||
unk = 18;
|
||||
if (frontierFsys->towerMode == TOWER_MODE_LINK || frontierFsys->towerMode == TOWER_MODE_6) {
|
||||
u32 round = sub_0202D57C(frontierFsys->frontierData, frontierFsys->towerMode, 0);
|
||||
if (round >= 7) {
|
||||
battlePoints = 18;
|
||||
} else {
|
||||
unk = _020FBF7C[index];
|
||||
battlePoints = LinkBattlePointRewards[round];
|
||||
}
|
||||
} else {
|
||||
u32 index = sub_0202D57C(a0->unk74, a0->unk0f, 0);
|
||||
if (a0->unk10_1) {
|
||||
unk = 20;
|
||||
} else if (index >= 7) {
|
||||
unk = 7;
|
||||
u32 round = sub_0202D57C(frontierFsys->frontierData, frontierFsys->towerMode, 0);
|
||||
if (frontierFsys->palmerDefeated) {
|
||||
battlePoints = 20;
|
||||
} else if (round >= 7) {
|
||||
battlePoints = 7;
|
||||
} else {
|
||||
unk = _020FBF84[index];
|
||||
battlePoints = RegularBattlePointRewards[round];
|
||||
}
|
||||
}
|
||||
}
|
||||
FrontierData_BattlePointAction(a0->unk74, unk, 5);
|
||||
return unk;
|
||||
FrontierData_BattlePointAction(frontierFsys->frontierData, battlePoints, 5);
|
||||
return battlePoints;
|
||||
}
|
||||
|
||||
BOOL sub_0204B0E0(UnkStruct_Fsys_A0 *a0, SaveData *saveData) {
|
||||
u32 unk = sub_0204A6F8(saveData, a0->unk0f);
|
||||
BOOL FrontierFieldSystem_0204B0E0(FrontierFieldSystem *frontierFsys, SaveData *saveData) {
|
||||
u32 unk = sub_0204A6F8(saveData, frontierFsys->towerMode);
|
||||
if (unk < 50) {
|
||||
return FALSE;
|
||||
} else if (unk >= 100) {
|
||||
if (sub_0202D5DC(a0->unk74, 1, 0)) {
|
||||
if (sub_0202D5DC(frontierFsys->frontierData, 1, 0)) {
|
||||
return FALSE;
|
||||
}
|
||||
} else if (sub_0202D5DC(a0->unk74, 0, 0)) {
|
||||
} else if (sub_0202D5DC(frontierFsys->frontierData, 0, 0)) {
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
u32 sub_0204B120(UnkStruct_Fsys_A0 *a0, SaveData *saveData, u32 a2) {
|
||||
FRONTIERDATA *frontierData = Save_FrontierData_Get(saveData);
|
||||
u32 FrontierFieldSystem_0204B120(FrontierFieldSystem *frontierFsys, SaveData *saveData, u32 a2) {
|
||||
FrontierData *frontierData = Save_FrontierData_Get(saveData);
|
||||
switch (a2) {
|
||||
case 0:
|
||||
return sub_0202D488(frontierData, 0);
|
||||
case 1: {
|
||||
case 1:
|
||||
sub_0202D5DC(frontierData, 4, 2);
|
||||
s32 unk0 = sub_0202D488(frontierData, 0);
|
||||
s32 unk0 = sub_0202D488(frontierData, 0); // Wifi Battle Rank?
|
||||
if (unk0 == 10) {
|
||||
a0->unk10_4 = TRUE;
|
||||
frontierFsys->unk10_4 = TRUE;
|
||||
return 0;
|
||||
}
|
||||
sub_0202D488(frontierData, 3);
|
||||
if (unk0 + 1 >= 5) {
|
||||
a0->unk10_4 = TRUE;
|
||||
frontierFsys->unk10_4 = TRUE;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
case 2: {
|
||||
u32 unk4 = sub_0202D450(frontierData, 3);
|
||||
s32 unk0 = sub_0202D488(frontierData, 0);
|
||||
|
|
@ -609,68 +606,68 @@ u32 sub_0204B120(UnkStruct_Fsys_A0 *a0, SaveData *saveData, u32 a2) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
BOOL sub_0204B1CC(UnkStruct_Fsys_A0 *a0, SaveData *saveData) {
|
||||
if (a0->unk0f != 0) {
|
||||
BOOL FrontierFieldSystem_TryGivePalmerRibbons(FrontierFieldSystem *frontierFsys, SaveData *saveData) {
|
||||
if (frontierFsys->towerMode != TOWER_MODE_SINGLE) {
|
||||
return FALSE;
|
||||
}
|
||||
switch (a0->unk10_1) {
|
||||
switch (frontierFsys->palmerDefeated) {
|
||||
case 1:
|
||||
return sub_0204B2B8(saveData, MON_DATA_ABILITY_RIBBON, a0);
|
||||
return TryGiveTowerRibbons(saveData, MON_DATA_ABILITY_RIBBON, frontierFsys);
|
||||
case 2:
|
||||
return sub_0204B2B8(saveData, MON_DATA_GREAT_ABILITY_RIBBON, a0);
|
||||
return TryGiveTowerRibbons(saveData, MON_DATA_GREAT_ABILITY_RIBBON, frontierFsys);
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL sub_0204B204(UnkStruct_Fsys_A0 *a0, SaveData *saveData) {
|
||||
if (a0->unk0f == 5) {
|
||||
BOOL FrontierFieldSystem_TryGiveOtherTowerRibbons(FrontierFieldSystem *frontierFsys, SaveData *saveData) {
|
||||
if (frontierFsys->towerMode == TOWER_MODE_WIFI_PRACTICE) {
|
||||
return FALSE;
|
||||
}
|
||||
if (a0->unk0f == 6) {
|
||||
if (frontierFsys->towerMode == TOWER_MODE_6) {
|
||||
return FALSE;
|
||||
}
|
||||
if (!a0->unk10_4) {
|
||||
if (!frontierFsys->unk10_4) {
|
||||
return FALSE;
|
||||
}
|
||||
u32 ribbon;
|
||||
switch (a0->unk0f) {
|
||||
case 1:
|
||||
switch (frontierFsys->towerMode) {
|
||||
case TOWER_MODE_DOUBLE:
|
||||
ribbon = MON_DATA_DOUBLE_ABILITY_RIBBON;
|
||||
break;
|
||||
case 2:
|
||||
case TOWER_MODE_MULTI:
|
||||
ribbon = MON_DATA_MULTI_ABILITY_RIBBON;
|
||||
break;
|
||||
case 3:
|
||||
case TOWER_MODE_LINK:
|
||||
ribbon = MON_DATA_PAIR_ABILITY_RIBBON;
|
||||
break;
|
||||
case 4:
|
||||
case TOWER_MODE_WIFI:
|
||||
ribbon = MON_DATA_WORLD_ABILITY_RIBBON;
|
||||
break;
|
||||
}
|
||||
return sub_0204B2B8(saveData, ribbon, a0);
|
||||
return TryGiveTowerRibbons(saveData, ribbon, frontierFsys);
|
||||
}
|
||||
|
||||
u16 sub_0204B258(UnkStruct_Fsys_A0 *a0, SaveData *saveData) {
|
||||
u16 FrontierFieldSystem_0204B258(FrontierFieldSystem *frontierFsys, SaveData *saveData) {
|
||||
u8 unk;
|
||||
if (a0->unk0f == 6) {
|
||||
if (frontierFsys->towerMode == TOWER_MODE_6) {
|
||||
unk = FrontierSave_GetStat(Save_Frontier_GetStatic(saveData), 100, sub_0205C268(100));
|
||||
} else {
|
||||
unk = sub_0202D5DC(a0->unk74, a0->unk0f + 8, 0);
|
||||
unk = sub_0202D5DC(frontierFsys->frontierData, frontierFsys->towerMode + 8, 0);
|
||||
}
|
||||
if (unk == 0) {
|
||||
a0->unk08 = sub_020674E0(saveData);
|
||||
frontierFsys->unk08 = sub_020674E0(saveData);
|
||||
} else {
|
||||
a0->unk08 = sub_0206751C(saveData);
|
||||
frontierFsys->unk08 = sub_0206751C(saveData);
|
||||
}
|
||||
return a0->unk08 / 0xffff;
|
||||
return frontierFsys->unk08 / 0xffff; // unk08 is a u32, so this should return between 0-3.
|
||||
}
|
||||
|
||||
static BOOL sub_0204B2B8(SaveData *saveData, u32 ribbon, UnkStruct_Fsys_A0 *a2) {
|
||||
static BOOL TryGiveTowerRibbons(SaveData *saveData, u32 ribbon, FrontierFieldSystem *a2) {
|
||||
u8 value = TRUE;
|
||||
Party *party = SaveArray_Party_Get(saveData);
|
||||
u8 count = 0;
|
||||
for (s32 i = 0; i < a2->unk0e; i++) {
|
||||
Pokemon *mon = Party_GetMonByIndex(party, a2->unk2a[i]);
|
||||
for (s32 i = 0; i < a2->numMons; i++) {
|
||||
Pokemon *mon = Party_GetMonByIndex(party, a2->partyMonIndexes[i]);
|
||||
if (GetMonData(mon, ribbon, NULL) == FALSE) {
|
||||
SetMonData(mon, ribbon, &value);
|
||||
count++;
|
||||
|
|
@ -683,50 +680,50 @@ static BOOL sub_0204B2B8(SaveData *saveData, u32 ribbon, UnkStruct_Fsys_A0 *a2)
|
|||
}
|
||||
}
|
||||
|
||||
static u32 sub_0204B318(UnkStruct_Fsys_A0 *a0) {
|
||||
if (a0->unk0f == 5 || a0->unk0f == 0 || a0->unk0f == 6 || a0->unk0f == 4) {
|
||||
static u32 FrontierFieldSystem_0204B318(FrontierFieldSystem *frontierFsys) {
|
||||
if (frontierFsys->towerMode == TOWER_MODE_WIFI_PRACTICE || frontierFsys->towerMode == TOWER_MODE_SINGLE || frontierFsys->towerMode == TOWER_MODE_6 || frontierFsys->towerMode == TOWER_MODE_WIFI) {
|
||||
return FALSE;
|
||||
}
|
||||
if ((u16)(a0->unk1a + a0->curWinStreak) < 50) {
|
||||
if ((u16)(frontierFsys->currentBattleInSession + frontierFsys->curWinStreak) < 50) {
|
||||
return FALSE;
|
||||
}
|
||||
a0->unk10_4 = TRUE;
|
||||
frontierFsys->unk10_4 = TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void sub_0204B34C(UnkStruct_0204B470 *a0, Pokemon *mon) {
|
||||
a0->species = GetMonData(mon, MON_DATA_SPECIES, NULL);
|
||||
a0->form = GetMonData(mon, MON_DATA_FORM, NULL);
|
||||
a0->item = GetMonData(mon, MON_DATA_HELD_ITEM, NULL);
|
||||
static void SetFrontierMon(FrontierMon *frontierMon, Pokemon *mon) {
|
||||
frontierMon->species = GetMonData(mon, MON_DATA_SPECIES, NULL);
|
||||
frontierMon->form = GetMonData(mon, MON_DATA_FORM, NULL);
|
||||
frontierMon->item = GetMonData(mon, MON_DATA_HELD_ITEM, NULL);
|
||||
for (s32 i = 0; i < MAX_MON_MOVES; i++) {
|
||||
a0->moves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, NULL);
|
||||
a0->ppUp |= GetMonData(mon, MON_DATA_MOVE1_PP_UPS + i, NULL) << (i * 2);
|
||||
frontierMon->moves[i] = GetMonData(mon, MON_DATA_MOVE1 + i, NULL);
|
||||
frontierMon->ppUp |= GetMonData(mon, MON_DATA_MOVE1_PP_UPS + i, NULL) << (i * 2);
|
||||
}
|
||||
a0->language = GetMonData(mon, MON_DATA_LANGUAGE, NULL);
|
||||
a0->otId = GetMonData(mon, MON_DATA_OT_ID, NULL);
|
||||
a0->pid = GetMonData(mon, MON_DATA_PERSONALITY, NULL);
|
||||
a0->ivsWord = GetMonData(mon, MON_DATA_COMBINED_IVS, NULL);
|
||||
frontierMon->language = GetMonData(mon, MON_DATA_LANGUAGE, NULL);
|
||||
frontierMon->otId = GetMonData(mon, MON_DATA_OT_ID, NULL);
|
||||
frontierMon->pid = GetMonData(mon, MON_DATA_PERSONALITY, NULL);
|
||||
frontierMon->ivsWord = GetMonData(mon, MON_DATA_COMBINED_IVS, NULL);
|
||||
for (s32 i = 0; i < NUM_STATS; i++) {
|
||||
a0->evs[i] = GetMonData(mon, MON_DATA_HP_EV + i, NULL);
|
||||
frontierMon->evs[i] = GetMonData(mon, MON_DATA_HP_EV + i, NULL);
|
||||
}
|
||||
a0->ability = GetMonData(mon, MON_DATA_ABILITY, NULL);
|
||||
a0->friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL);
|
||||
GetMonData(mon, MON_DATA_NICKNAME, a0->nickname);
|
||||
frontierMon->ability = GetMonData(mon, MON_DATA_ABILITY, NULL);
|
||||
frontierMon->friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL);
|
||||
GetMonData(mon, MON_DATA_NICKNAME, frontierMon->nickname);
|
||||
}
|
||||
|
||||
static void sub_0204B470(UnkStruct_Fsys_A0 *a0, SaveData *saveData, u32 a2) {
|
||||
UnkStruct_0204B470 *unkStructs = Heap_AllocAtEnd(a0->heapID, 3 * sizeof(UnkStruct_0204B470));
|
||||
MI_CpuClear8(unkStructs, 3 * sizeof(UnkStruct_0204B470));
|
||||
static void FrontierFieldSystem_SetFrontierMons(FrontierFieldSystem *frontierFsys, SaveData *saveData, BOOL isWifiRoom) {
|
||||
FrontierMon *frontierMons = Heap_AllocAtEnd(frontierFsys->heapID, 3 * sizeof(FrontierMon));
|
||||
MI_CpuClear8(frontierMons, 3 * sizeof(FrontierMon));
|
||||
Party *party = SaveArray_Party_Get(saveData);
|
||||
for (s32 i = 0; i < 3; i++) {
|
||||
sub_0204B34C(&unkStructs[i], Party_GetMonByIndex(party, a0->unk2a[i]));
|
||||
SetFrontierMon(&frontierMons[i], Party_GetMonByIndex(party, frontierFsys->partyMonIndexes[i]));
|
||||
}
|
||||
sub_0202D4B8(a0->unk74, a2, unkStructs);
|
||||
MI_CpuClear8(unkStructs, 3 * sizeof(UnkStruct_0204B470));
|
||||
Heap_Free(unkStructs);
|
||||
sub_0202D4B8(frontierFsys->frontierData, isWifiRoom, frontierMons); // FrontierData_SetFrontierMons?
|
||||
MI_CpuClear8(frontierMons, 3 * sizeof(FrontierMon));
|
||||
Heap_Free(frontierMons);
|
||||
}
|
||||
|
||||
u8 sub_0204B4D4(u32 frontierTrainerIndex) {
|
||||
u8 GetFrontierTrainerIVs(u32 frontierTrainerIndex) {
|
||||
if (frontierTrainerIndex < 100) {
|
||||
return 3;
|
||||
}
|
||||
|
|
@ -751,10 +748,10 @@ u8 sub_0204B4D4(u32 frontierTrainerIndex) {
|
|||
return 31;
|
||||
}
|
||||
|
||||
u16 sub_0204B510(UnkStruct_Fsys_A0 *a0) {
|
||||
if (a0->unk0f == 6) {
|
||||
u16 FrontierFieldSystem_0204B510(FrontierFieldSystem *frontierFsys) {
|
||||
if (frontierFsys->towerMode == TOWER_MODE_6) {
|
||||
return LCRandom();
|
||||
}
|
||||
a0->unk08 = sub_020674A4(a0->unk08);
|
||||
return a0->unk08 / 0xffff;
|
||||
frontierFsys->unk08 = sub_020674A4(frontierFsys->unk08);
|
||||
return frontierFsys->unk08 / 0xffff; // unk08 is a u32, so this should return between 0-3.
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
#include "constants/abilities.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/moves.h"
|
||||
#include "constants/sprites.h"
|
||||
|
||||
#include "msgdata/msg.naix"
|
||||
|
||||
|
|
@ -22,104 +23,108 @@
|
|||
#include "unk_02035900.h"
|
||||
#include "unk_0204A3F4.h"
|
||||
|
||||
typedef struct FrontierMon {
|
||||
typedef struct FrontierMonNarcData {
|
||||
u16 species;
|
||||
u16 moves[4];
|
||||
u8 evs;
|
||||
u8 nature;
|
||||
u16 item;
|
||||
u16 form;
|
||||
} FrontierMon;
|
||||
} FrontierMonNarcData;
|
||||
|
||||
static u32 sub_0204BABC(UnkStruct_Fsys_A0 *a0, u16 *a1, u16 frontierTrainerIndex, UnkStruct_0204B470 *a3, u8 a4, u16 *a5, u16 *a6, UnkStruct_0204A824_7E8 *a7, enum HeapID heapID);
|
||||
static u16 *sub_0204BC7C(u32 frontierTrainerIndex, enum HeapID heapID);
|
||||
static void GetFrontierMon(FrontierMon *mon, u32 frontierMonIndex);
|
||||
static u32 FrontierFieldSystem_0204BABC(FrontierFieldSystem *frontierFsys, u16 *frontierTrainerData, u16 frontierTrainerIndex, FrontierMon *frontierMon, u8 numPokemon, u16 *partySpecies, u16 *partyItems, FrontierMultiBattleAllyData *allyData, enum HeapID heapID);
|
||||
static u16 *GetFrontierTrainerData(u32 frontierTrainerIndex, enum HeapID heapID);
|
||||
static void GetFrontierMonNarcData(FrontierMonNarcData *mon, u32 frontierMonIndex);
|
||||
|
||||
static const u16 _020FBFA4[] = { ITEM_BRIGHTPOWDER, ITEM_LUM_BERRY, ITEM_LEFTOVERS, ITEM_QUICK_CLAW };
|
||||
static const u16 _020FBFAC[][2] = {
|
||||
{ 0, 99 },
|
||||
{ 80, 119 },
|
||||
{ 100, 139 },
|
||||
{ 120, 159 },
|
||||
{ 140, 179 },
|
||||
{ 160, 199 },
|
||||
{ 180, 219 },
|
||||
{ 200, 299 },
|
||||
static const u16 ItemReplacementList[] = { ITEM_BRIGHTPOWDER, ITEM_LUM_BERRY, ITEM_LEFTOVERS, ITEM_QUICK_CLAW };
|
||||
|
||||
// Frontier Trainer IDs grouped by when they show up normally. IDs 0-99 show up normally in battles 1-7, IDs 80-119 show up normally in battles 8-14, etc.
|
||||
static const u16 FrontierTrainerDifficultyBracket[][2] = {
|
||||
{ 0, 99 }, // Bracket 0: 1-7.
|
||||
{ 80, 119 }, // Bracket 1: 8-14.
|
||||
{ 100, 139 }, // Bracket 2: 15-21.
|
||||
{ 120, 159 }, // Bracket 3: 22-28.
|
||||
{ 140, 179 }, // Bracket 4: 29-35.
|
||||
{ 160, 199 }, // Bracket 5: 36-42.
|
||||
{ 180, 219 }, // Bracket 6: 43-49.
|
||||
{ 200, 299 }, // Bracket 7: 50+. Unused.
|
||||
};
|
||||
static const u16 _020FBFEC[][2] = {
|
||||
{ 90, 141 },
|
||||
{ 91, 142 },
|
||||
{ 92, 143 },
|
||||
{ 93, 144 },
|
||||
{ 94, 145 },
|
||||
{ 2, 4 },
|
||||
{ 3, 6 },
|
||||
{ 60, 3 },
|
||||
{ 61, 8 },
|
||||
{ 32, 62 },
|
||||
{ 33, 63 },
|
||||
{ 4, 52 },
|
||||
{ 5, 53 },
|
||||
{ 44, 1 },
|
||||
{ 45, 2 },
|
||||
{ 20, 15 },
|
||||
{ 21, 16 },
|
||||
{ 81, 59 },
|
||||
{ 26, 60 },
|
||||
{ 16, 9 },
|
||||
{ 17, 12 },
|
||||
{ 83, 23 },
|
||||
{ 84, 22 },
|
||||
{ 71, 41 },
|
||||
{ 18, 42 },
|
||||
{ 12, 38 },
|
||||
{ 13, 39 },
|
||||
{ 14, 51 },
|
||||
{ 10, 7 },
|
||||
{ 27, 17 },
|
||||
{ 35, 37 },
|
||||
{ 49, 70 },
|
||||
{ 50, 70 },
|
||||
{ 39, 11 },
|
||||
{ 40, 14 },
|
||||
{ 24, 11 },
|
||||
{ 25, 14 },
|
||||
{ 53, 68 },
|
||||
{ 54, 69 },
|
||||
{ 29, 11 },
|
||||
{ 6, 5 },
|
||||
{ 28, 1 },
|
||||
{ 19, 45 },
|
||||
{ 11, 54 },
|
||||
{ 46, 56 },
|
||||
{ 9, 20 },
|
||||
{ 48, 50 },
|
||||
{ 52, 10 },
|
||||
{ 37, 19 },
|
||||
{ 57, 31 },
|
||||
{ 78, 29 },
|
||||
{ 34, 36 },
|
||||
{ 59, 40 },
|
||||
{ 58, 43 },
|
||||
{ 38, 34 },
|
||||
{ 51, 62 },
|
||||
{ 69, 14 },
|
||||
{ 80, 55 },
|
||||
{ 36, 13 },
|
||||
{ 7, 12 },
|
||||
{ 85, 35 },
|
||||
{ 15, 44 },
|
||||
{ 22, 71 },
|
||||
// Unused.
|
||||
static const u16 FrontierTrainerOverworlds[][2] = {
|
||||
{ TRAINERCLASS_PKMN_TRAINER_CHERYL, SPRITE_SEVEN1 },
|
||||
{ TRAINERCLASS_PKMN_TRAINER_RILEY, SPRITE_SEVEN2 },
|
||||
{ TRAINERCLASS_PKMN_TRAINER_BUCK, SPRITE_SEVEN3 },
|
||||
{ TRAINERCLASS_PKMN_TRAINER_MIRA, SPRITE_SEVEN4 },
|
||||
{ TRAINERCLASS_PKMN_TRAINER_MARLEY, SPRITE_SEVEN5 },
|
||||
{ TRAINERCLASS_YOUNGSTER, SPRITE_BOY2 },
|
||||
{ TRAINERCLASS_LASS, SPRITE_GIRL1 },
|
||||
{ TRAINERCLASS_SCHOOL_KID_M, SPRITE_BOY1 },
|
||||
{ TRAINERCLASS_SCHOOL_KID_F, SPRITE_GIRL3 },
|
||||
{ TRAINERCLASS_RICH_BOY, SPRITE_GORGGEOUSM },
|
||||
{ TRAINERCLASS_LADY, SPRITE_GORGGEOUSW },
|
||||
{ TRAINERCLASS_CAMPER, SPRITE_CAMPBOY },
|
||||
{ TRAINERCLASS_PICNICKER, SPRITE_PICNICGIRL },
|
||||
{ TRAINERCLASS_TUBER_M, SPRITE_BABYBOY1 }, // Seems to be mislabelled.
|
||||
{ TRAINERCLASS_TUBER_F, SPRITE_BABYGIRL1 }, // Same here.
|
||||
{ TRAINERCLASS_POKEFAN_M, SPRITE_MIDDLEMAN1 },
|
||||
{ TRAINERCLASS_POKEFAN, SPRITE_MIDDLEWOMAN1 },
|
||||
{ TRAINERCLASS_WAITER, SPRITE_WAITER },
|
||||
{ TRAINERCLASS_WAITRESS, SPRITE_WAITRESS },
|
||||
{ TRAINERCLASS_PKMN_BREEDER_M, SPRITE_MAN1 },
|
||||
{ TRAINERCLASS_PKMN_BREEDER_F, SPRITE_WOMAN1 },
|
||||
{ TRAINERCLASS_CAMERAMAN, SPRITE_CAMERAMAN },
|
||||
{ TRAINERCLASS_REPORTER, SPRITE_REPORTER },
|
||||
{ TRAINERCLASS_RANCHER, SPRITE_FARMER },
|
||||
{ TRAINERCLASS_COWGIRL, SPRITE_COWGIRL },
|
||||
{ TRAINERCLASS_CYCLIST_M, SPRITE_CYCLEM },
|
||||
{ TRAINERCLASS_CYCLIST_F, SPRITE_CYCLEW },
|
||||
{ TRAINERCLASS_BLACK_BELT, SPRITE_FIGHTER },
|
||||
{ TRAINERCLASS_BATTLE_GIRL, SPRITE_GIRL2 },
|
||||
{ TRAINERCLASS_VETERAN, SPRITE_OLDMAN1 },
|
||||
{ TRAINERCLASS_SOCIALITE, SPRITE_LADY },
|
||||
{ TRAINERCLASS_PSYCHIC_M, SPRITE_MYSTERY },
|
||||
{ TRAINERCLASS_PSYCHIC_F, SPRITE_MYSTERY },
|
||||
{ TRAINERCLASS_PKMN_RANGER_M, SPRITE_MAN3 },
|
||||
{ TRAINERCLASS_PKMN_RANGER_F, SPRITE_WOMAN3 },
|
||||
{ TRAINERCLASS_ACE_TRAINER_M, SPRITE_MAN3 },
|
||||
{ TRAINERCLASS_ACE_TRAINER_F, SPRITE_WOMAN3 },
|
||||
{ TRAINERCLASS_ACE_TRAINER_M_GS, SPRITE_MAN5 },
|
||||
{ TRAINERCLASS_ACE_TRAINER_F_GS, SPRITE_WOMAN5 },
|
||||
{ TRAINERCLASS_DRAGON_TAMER, SPRITE_MAN3 },
|
||||
{ TRAINERCLASS_BUG_CATCHER, SPRITE_BOY3 },
|
||||
{ TRAINERCLASS_NINJA_BOY, SPRITE_BABYBOY1 },
|
||||
{ TRAINERCLASS_JOGGER, SPRITE_SPORTSMAN },
|
||||
{ TRAINERCLASS_FISHERMAN, SPRITE_FISHING },
|
||||
{ TRAINERCLASS_SAILOR, SPRITE_SEAMAN },
|
||||
{ TRAINERCLASS_HIKER, SPRITE_MOUNT },
|
||||
{ TRAINERCLASS_RUIN_MANIAC, SPRITE_EXPLORE },
|
||||
{ TRAINERCLASS_GUITARIST, SPRITE_MAN2 },
|
||||
{ TRAINERCLASS_COLLECTOR, SPRITE_BIGMAN },
|
||||
{ TRAINERCLASS_ROUGHNECK, SPRITE_BADMAN },
|
||||
{ TRAINERCLASS_SUPER_NERD, SPRITE_ASSISTANTM },
|
||||
{ TRAINERCLASS_GENTLEMAN, SPRITE_GENTLEMAN },
|
||||
{ TRAINERCLASS_WORKER, SPRITE_WORKMAN },
|
||||
{ TRAINERCLASS_CLOWN, SPRITE_CLOWN },
|
||||
{ TRAINERCLASS_POLICEMAN, SPRITE_POLICEMAN },
|
||||
{ TRAINERCLASS_PI, SPRITE_GORGGEOUSM },
|
||||
{ TRAINERCLASS_BIRD_KEEPER_GS, SPRITE_WOMAN3 },
|
||||
{ TRAINERCLASS_PARASOL_LADY, SPRITE_AMBRELLA },
|
||||
{ TRAINERCLASS_BEAUTY, SPRITE_WOMAN2 },
|
||||
{ TRAINERCLASS_AROMA_LADY, SPRITE_WOMAN1 },
|
||||
{ TRAINERCLASS_IDOL, SPRITE_IDOL },
|
||||
{ TRAINERCLASS_ARTIST, SPRITE_ARTIST },
|
||||
{ TRAINERCLASS_POKE_KID, SPRITE_PIKACHU },
|
||||
};
|
||||
static const u16 _020FBFCC[][2] = {
|
||||
{ 100, 119 },
|
||||
{ 120, 139 },
|
||||
{ 140, 159 },
|
||||
{ 160, 179 },
|
||||
{ 180, 199 },
|
||||
{ 200, 219 },
|
||||
{ 220, 239 },
|
||||
{ 200, 299 },
|
||||
// Trainer IDs grouped by when they show up as bracket bosses.
|
||||
static const u16 FrontierTrainerBracketBosses[][2] = {
|
||||
{ 100, 119 }, // Bracket 0: Battle 7
|
||||
{ 120, 139 }, // Bracket 1: Battle 14
|
||||
{ 140, 159 }, // Bracket 2: Battle 21
|
||||
{ 160, 179 }, // Bracket 3: Battle 28
|
||||
{ 180, 199 }, // Bracket 4: Battle 35
|
||||
{ 200, 219 }, // Bracket 5: Battle 42
|
||||
{ 220, 239 }, // Bracket 6: Battle 49
|
||||
{ 200, 299 }, // Bracket 7: All trainers are no longer special. This appears to be unused.
|
||||
};
|
||||
|
||||
MessageFormat *sub_0204B538(SaveData *saveData, u16 numEligiblePokemon, u16 a2, u8 a3, u8 *numLegendaryPokemonSeen) {
|
||||
|
|
@ -148,137 +153,139 @@ MessageFormat *sub_0204B538(SaveData *saveData, u16 numEligiblePokemon, u16 a2,
|
|||
return messageFormat;
|
||||
}
|
||||
|
||||
u32 sub_0204B5E8(u8 a0) {
|
||||
for (u32 i = 0; i < NELEMS(_020FBFEC); i++) {
|
||||
if (a0 == _020FBFEC[i][0]) {
|
||||
return _020FBFEC[i][1];
|
||||
u32 GetFrontierTrainerOverworld(u8 trainerClass) {
|
||||
for (u32 i = 0; i < NELEMS(FrontierTrainerOverworlds); i++) {
|
||||
if (trainerClass == FrontierTrainerOverworlds[i][0]) {
|
||||
return FrontierTrainerOverworlds[i][1];
|
||||
}
|
||||
}
|
||||
return 3;
|
||||
return SPRITE_BOY1;
|
||||
}
|
||||
|
||||
u16 sub_0204B610(FieldSystem *fieldSystem, u16 *a1) {
|
||||
u16 unk = 0;
|
||||
UnkStruct_Fsys_A0 *unkStruct = fieldSystem->unkA0;
|
||||
unkStruct->unk12 = a1[0];
|
||||
unkStruct->unk16 = a1[1];
|
||||
unkStruct->unk18 = a1[2];
|
||||
unkStruct->unk14 = a1[3];
|
||||
unkStruct->unk10_5 = unkStruct->unk12 + 5;
|
||||
if (unkStruct->unk2e[0] == unkStruct->unk16 || unkStruct->unk2e[0] == unkStruct->unk18) {
|
||||
unk++;
|
||||
u16 sub_0204B610(FieldSystem *fieldSystem, u16 *linkAllyData) { // SetLinkAllyData?
|
||||
u16 match = 0;
|
||||
FrontierFieldSystem *frontierFsys = fieldSystem->frontierFsys;
|
||||
frontierFsys->linkAllyGender = linkAllyData[0];
|
||||
frontierFsys->linkAllyMonSpecies[0] = linkAllyData[1];
|
||||
frontierFsys->linkAllyMonSpecies[1] = linkAllyData[2];
|
||||
frontierFsys->linkAllyRound = linkAllyData[3];
|
||||
frontierFsys->multiBattleAllyID = frontierFsys->linkAllyGender + 5; // Either 5 or 6.
|
||||
if (frontierFsys->partyMonSpecies[0] == frontierFsys->linkAllyMonSpecies[0] || frontierFsys->partyMonSpecies[0] == frontierFsys->linkAllyMonSpecies[1]) {
|
||||
match++;
|
||||
}
|
||||
if (unkStruct->unk2e[1] == unkStruct->unk16 || unkStruct->unk2e[1] == unkStruct->unk18) {
|
||||
unk += 2;
|
||||
if (frontierFsys->partyMonSpecies[1] == frontierFsys->linkAllyMonSpecies[0] || frontierFsys->partyMonSpecies[1] == frontierFsys->linkAllyMonSpecies[1]) {
|
||||
match += 2;
|
||||
}
|
||||
return unk;
|
||||
return match; // return 1 if partyMonSpecies[0] matches, 2 if partyMonSpecies[1] matches, 3 if both match.
|
||||
}
|
||||
|
||||
BOOL sub_0204B66C(FieldSystem *fieldSystem, u16 *a1) {
|
||||
UnkStruct_Fsys_A0 *unkStruct = fieldSystem->unkA0;
|
||||
FrontierFieldSystem *frontierFsys = fieldSystem->frontierFsys;
|
||||
if (sub_0203769C() == 0) {
|
||||
return FALSE;
|
||||
}
|
||||
MI_CpuCopy8(a1, unkStruct->unk3e, sizeof(unkStruct->unk3e));
|
||||
MI_CpuCopy8(a1, frontierFsys->trainersInCurrentRound, sizeof(frontierFsys->trainersInCurrentRound));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL sub_0204B690(FieldSystem *fieldSystem, u16 *a1) {
|
||||
return fieldSystem->unkA0->unk10_3 || a1[0] != 0;
|
||||
return fieldSystem->frontierFsys->unk10_3 || a1[0] != 0;
|
||||
}
|
||||
|
||||
void sub_0204B6AC(UnkStruct_Fsys_A0 *a0, SaveData *saveData) {
|
||||
a0->unk83e[0] = PlayerProfile_GetTrainerGender(Save_PlayerData_GetProfile(saveData));
|
||||
void FrontierFieldSystem_0204B6AC(FrontierFieldSystem *frontierFsys, SaveData *saveData) {
|
||||
frontierFsys->unk83e[0] = PlayerProfile_GetTrainerGender(Save_PlayerData_GetProfile(saveData));
|
||||
Party *party = SaveArray_Party_Get(saveData);
|
||||
for (s32 i = 0; i < 2; i++) {
|
||||
Pokemon *mon = Party_GetMonByIndex(party, a0->unk2a[i]);
|
||||
a0->unk83e[1 + i] = GetMonData(mon, MON_DATA_SPECIES, NULL);
|
||||
Pokemon *mon = Party_GetMonByIndex(party, frontierFsys->partyMonIndexes[i]);
|
||||
frontierFsys->unk83e[1 + i] = GetMonData(mon, MON_DATA_SPECIES, NULL);
|
||||
}
|
||||
a0->unk83e[3] = sub_0202D57C(a0->unk74, 3, 0);
|
||||
frontierFsys->unk83e[3] = sub_0202D57C(frontierFsys->frontierData, 3, 0);
|
||||
}
|
||||
|
||||
void sub_0204B708(UnkStruct_Fsys_A0 *a0) {
|
||||
MI_CpuCopy8(a0->unk3e, a0->unk83e, sizeof(a0->unk3e));
|
||||
void FrontierFieldSystem_0204B708(FrontierFieldSystem *frontierFsys) {
|
||||
MI_CpuCopy8(frontierFsys->trainersInCurrentRound, frontierFsys->unk83e, sizeof(frontierFsys->trainersInCurrentRound));
|
||||
}
|
||||
|
||||
void sub_0204B720(UnkStruct_Fsys_A0 *a0, u32 a1) {
|
||||
a0->unk10_3 = a1;
|
||||
a0->unk83e[0] = a1;
|
||||
void FrontierFieldSystem_0204B720(FrontierFieldSystem *frontierFsys, u32 a1) {
|
||||
frontierFsys->unk10_3 = a1;
|
||||
frontierFsys->unk83e[0] = a1;
|
||||
}
|
||||
|
||||
u16 sub_0204B73C(UnkStruct_Fsys_A0 *a0, u8 a1, u8 a2, u32 a3) {
|
||||
if (a3 == 0) {
|
||||
if (a1 == 2 && a2 == 6) {
|
||||
return 305;
|
||||
u16 FrontierFieldSystem_GetRandomFrontierTrainerID(FrontierFieldSystem *frontierFsys, u8 difficultyBracket, u8 winsThisRound, u32 towerMode) {
|
||||
if (towerMode == TOWER_MODE_SINGLE) {
|
||||
// If we are between battles 15-21 and have completed 6 battles in our current round, meaning this is battle 21:
|
||||
if (difficultyBracket == 2 && winsThisRound == 6) {
|
||||
return 305; // Palmer (Silver Print)
|
||||
}
|
||||
if (a1 == 6 && a2 == 6) {
|
||||
return 306;
|
||||
// If we are between battles 43-49 and have completed 6 battles in our current round, meaning this is battle 49:
|
||||
if (difficultyBracket == 6 && winsThisRound == 6) {
|
||||
return 306; // Palmer (Gold Print)
|
||||
}
|
||||
}
|
||||
if (a1 < 7) {
|
||||
if (a2 == 6) {
|
||||
u16 mod = _020FBFCC[a1][1] - _020FBFCC[a1][0] + 1;
|
||||
return sub_0204B510(a0) % mod + _020FBFCC[a1][0];
|
||||
if (difficultyBracket < 7) {
|
||||
if (winsThisRound == 6) {
|
||||
u16 mod = FrontierTrainerBracketBosses[difficultyBracket][1] - FrontierTrainerBracketBosses[difficultyBracket][0] + 1;
|
||||
return FrontierFieldSystem_0204B510(frontierFsys) % mod + FrontierTrainerBracketBosses[difficultyBracket][0];
|
||||
} else {
|
||||
u16 mod = _020FBFAC[a1][1] - _020FBFAC[a1][0] + 1;
|
||||
return sub_0204B510(a0) % mod + _020FBFAC[a1][0];
|
||||
u16 mod = FrontierTrainerDifficultyBracket[difficultyBracket][1] - FrontierTrainerDifficultyBracket[difficultyBracket][0] + 1;
|
||||
return FrontierFieldSystem_0204B510(frontierFsys) % mod + FrontierTrainerDifficultyBracket[difficultyBracket][0];
|
||||
}
|
||||
} else {
|
||||
return sub_0204B510(a0) % 100 + 200;
|
||||
return FrontierFieldSystem_0204B510(frontierFsys) % 100 + 200;
|
||||
}
|
||||
}
|
||||
|
||||
static u16 *sub_0204B7D0(UnkStruct_0204B7D0 *a0, u32 frontierTrainerIndex, enum HeapID heapID) {
|
||||
static u16 *sub_0204B7D0(FrontierTrainer *frontierTrainer, u32 frontierTrainerIndex, enum HeapID heapID) {
|
||||
MsgData *messageData = NewMsgDataFromNarc(MSGDATA_LOAD_LAZY, NARC_msgdata_msg, NARC_msg_msg_0027_bin, heapID);
|
||||
MI_CpuClear8(a0, sizeof(UnkStruct_0204B7D0));
|
||||
u16 *unk = sub_0204BC7C(frontierTrainerIndex, heapID);
|
||||
a0->unk00 = frontierTrainerIndex;
|
||||
a0->unk18 = 0xffff;
|
||||
a0->unk1a = frontierTrainerIndex * 3;
|
||||
a0->unk04 = unk[0];
|
||||
MI_CpuClear8(frontierTrainer, sizeof(FrontierTrainer));
|
||||
u16 *frontierTrainerData = GetFrontierTrainerData(frontierTrainerIndex, heapID);
|
||||
frontierTrainer->index = frontierTrainerIndex;
|
||||
frontierTrainer->introMessage.msg_bank = 0xffff;
|
||||
frontierTrainer->introMessage.msg_no = frontierTrainerIndex * 3;
|
||||
frontierTrainer->trainerClass = frontierTrainerData[0];
|
||||
String *trainerName = NewString_ReadMsgData(messageData, frontierTrainerIndex);
|
||||
CopyStringToU16Array(trainerName, a0->unk08, NELEMS(a0->unk08));
|
||||
CopyStringToU16Array(trainerName, frontierTrainer->name, NELEMS(frontierTrainer->name));
|
||||
String_Delete(trainerName);
|
||||
DestroyMsgData(messageData);
|
||||
return unk;
|
||||
return frontierTrainerData;
|
||||
}
|
||||
|
||||
static u32 sub_0204B834(UnkStruct_Fsys_A0 *a0, UnkStruct_0204B470 *a1, u16 frontierMonIndex, u32 otId, u32 a4, u8 iv, u8 a6, BOOL a7, enum HeapID heapID) {
|
||||
static u32 sub_0204B834(FrontierFieldSystem *frontierFsys, FrontierMon *frontierMon, u16 frontierMonIndex, u32 otId, u32 pid, u8 iv, u8 replacementItemIndex, BOOL replaceItem, enum HeapID heapID) {
|
||||
s32 i;
|
||||
FrontierMon frontierMon;
|
||||
MI_CpuClear8(a1, sizeof(UnkStruct_0204B470));
|
||||
GetFrontierMon(&frontierMon, frontierMonIndex);
|
||||
a1->species = frontierMon.species;
|
||||
a1->form = frontierMon.form;
|
||||
a1->item = a7 ? _020FBFA4[a6] : frontierMon.item;
|
||||
FrontierMonNarcData frontierMonNarcData;
|
||||
MI_CpuClear8(frontierMon, sizeof(FrontierMon));
|
||||
GetFrontierMonNarcData(&frontierMonNarcData, frontierMonIndex);
|
||||
frontierMon->species = frontierMonNarcData.species;
|
||||
frontierMon->form = frontierMonNarcData.form;
|
||||
frontierMon->item = replaceItem ? ItemReplacementList[replacementItemIndex] : frontierMonNarcData.item;
|
||||
u32 friendship = FRIENDSHIP_MAX;
|
||||
for (i = 0; i < MAX_MON_MOVES; i++) {
|
||||
a1->moves[i] = frontierMon.moves[i];
|
||||
if (frontierMon.moves[i] == MOVE_FRUSTRATION) {
|
||||
frontierMon->moves[i] = frontierMonNarcData.moves[i];
|
||||
if (frontierMonNarcData.moves[i] == MOVE_FRUSTRATION) {
|
||||
friendship = 0;
|
||||
}
|
||||
}
|
||||
a1->otId = otId;
|
||||
u32 pid;
|
||||
if (a4 == 0) {
|
||||
frontierMon->otId = otId;
|
||||
u32 pidGen;
|
||||
if (pid == 0) {
|
||||
do {
|
||||
pid = sub_0204B510(a0) | sub_0204B510(a0) << 16;
|
||||
} while (frontierMon.nature != GetNatureFromPersonality(pid)
|
||||
|| CalcShininessByOtIdAndPersonality(otId, pid) == TRUE);
|
||||
a1->pid = pid;
|
||||
pidGen = FrontierFieldSystem_0204B510(frontierFsys) | FrontierFieldSystem_0204B510(frontierFsys) << 16;
|
||||
} while (frontierMonNarcData.nature != GetNatureFromPersonality(pidGen)
|
||||
|| CalcShininessByOtIdAndPersonality(otId, pidGen) == TRUE);
|
||||
frontierMon->pid = pidGen;
|
||||
} else {
|
||||
a1->pid = a4;
|
||||
pid = a4;
|
||||
frontierMon->pid = pid;
|
||||
pidGen = pid;
|
||||
}
|
||||
a1->hpIv = iv;
|
||||
a1->atkIv = iv;
|
||||
a1->defIv = iv;
|
||||
a1->spdIv = iv;
|
||||
a1->spAtkIv = iv;
|
||||
a1->spDefIv = iv;
|
||||
frontierMon->hpIv = iv;
|
||||
frontierMon->atkIv = iv;
|
||||
frontierMon->defIv = iv;
|
||||
frontierMon->spdIv = iv;
|
||||
frontierMon->spAtkIv = iv;
|
||||
frontierMon->spDefIv = iv;
|
||||
s32 ev = 0;
|
||||
for (i = 0; i < NUM_STATS; i++) {
|
||||
if (frontierMon.evs & MaskOfFlagNo(i)) {
|
||||
if (frontierMonNarcData.evs & MaskOfFlagNo(i)) {
|
||||
ev++;
|
||||
}
|
||||
}
|
||||
|
|
@ -287,130 +294,131 @@ static u32 sub_0204B834(UnkStruct_Fsys_A0 *a0, UnkStruct_0204B470 *a1, u16 front
|
|||
ev = 255;
|
||||
}
|
||||
for (i = 0; i < NUM_STATS; i++) {
|
||||
if (frontierMon.evs & MaskOfFlagNo(i)) {
|
||||
a1->evs[i] = ev;
|
||||
if (frontierMonNarcData.evs & MaskOfFlagNo(i)) {
|
||||
frontierMon->evs[i] = ev;
|
||||
}
|
||||
}
|
||||
a1->ppUp = 0;
|
||||
a1->language = gGameLanguage;
|
||||
u32 ability = GetMonBaseStat(a1->species, BASE_ABILITY_2);
|
||||
frontierMon->ppUp = 0;
|
||||
frontierMon->language = gGameLanguage;
|
||||
u32 ability = GetMonBaseStat(frontierMon->species, BASE_ABILITY_2);
|
||||
if (ability != ABILITY_NONE) {
|
||||
if (a1->pid % 2) {
|
||||
a1->ability = ability;
|
||||
if (frontierMon->pid % 2) {
|
||||
frontierMon->ability = ability;
|
||||
} else {
|
||||
a1->ability = GetMonBaseStat(a1->species, BASE_ABILITY_1);
|
||||
frontierMon->ability = GetMonBaseStat(frontierMon->species, BASE_ABILITY_1);
|
||||
}
|
||||
} else {
|
||||
a1->ability = GetMonBaseStat(a1->species, BASE_ABILITY_1);
|
||||
frontierMon->ability = GetMonBaseStat(frontierMon->species, BASE_ABILITY_1);
|
||||
}
|
||||
a1->friendship = friendship;
|
||||
GetSpeciesNameIntoArray(a1->species, heapID, a1->nickname);
|
||||
return pid;
|
||||
frontierMon->friendship = friendship;
|
||||
GetSpeciesNameIntoArray(frontierMon->species, heapID, frontierMon->nickname);
|
||||
return pidGen;
|
||||
}
|
||||
|
||||
u32 sub_0204BA04(UnkStruct_Fsys_A0 *a0, UnkStruct_0204B7D0 *a1, u16 frontierTrainerIndex, u32 a3, u16 *a4, u16 *a5, UnkStruct_0204A824_7E8 *a6, enum HeapID heapID) {
|
||||
u16 *unk7 = sub_0204B7D0(a1, frontierTrainerIndex, heapID);
|
||||
u32 unk4 = sub_0204BABC(a0, unk7, frontierTrainerIndex, a1->unk30, a3, a4, a5, a6, heapID);
|
||||
Heap_Free(unk7);
|
||||
return unk4;
|
||||
u32 FrontierFieldSystem_0204BA04(FrontierFieldSystem *frontierFsys, FrontierTrainer *frontierTrainer, u16 frontierTrainerIndex, u32 numPokemon, u16 *partySpecies, u16 *partyItems, FrontierMultiBattleAllyData *allyData, enum HeapID heapID) {
|
||||
u16 *frontierTrainerData = sub_0204B7D0(frontierTrainer, frontierTrainerIndex, heapID);
|
||||
u32 replaceItem = FrontierFieldSystem_0204BABC(frontierFsys, frontierTrainerData, frontierTrainerIndex, frontierTrainer->frontierMons, numPokemon, partySpecies, partyItems, allyData, heapID);
|
||||
Heap_Free(frontierTrainerData);
|
||||
return replaceItem;
|
||||
}
|
||||
|
||||
void sub_0204BA50(UnkStruct_Fsys_A0 *a0, UnkStruct_0204B7D0 *a1, u16 frontierTrainerIndex, u32 a3, UnkStruct_0204A824_7E8 *a4, enum HeapID heapID) {
|
||||
void FrontierFieldSystem_GenerateAllyFrontierMons(FrontierFieldSystem *frontierFsys, FrontierTrainer *frontierTrainer, u16 frontierTrainerIndex, u32 replaceItem, FrontierMultiBattleAllyData *allyData, enum HeapID heapID) {
|
||||
u8 iv;
|
||||
u16 *unk = sub_0204B7D0(a1, frontierTrainerIndex, heapID);
|
||||
iv = sub_0204B4D4(frontierTrainerIndex);
|
||||
u16 *frontierTrainerData = sub_0204B7D0(frontierTrainer, frontierTrainerIndex, heapID);
|
||||
iv = GetFrontierTrainerIVs(frontierTrainerIndex);
|
||||
for (s32 i = 0; i < 2; i++) {
|
||||
sub_0204B834(a0, &a1->unk30[i], a4->unk04[i], a4->otId, a4->unk08[i], iv, i, a3, heapID);
|
||||
sub_0204B834(frontierFsys, &frontierTrainer->frontierMons[i], allyData->frontierMonIDs[i], allyData->otId, allyData->frontierMonPIDs[i], iv, i, replaceItem, heapID);
|
||||
}
|
||||
Heap_Free(unk);
|
||||
Heap_Free(frontierTrainerData);
|
||||
}
|
||||
|
||||
static u32 sub_0204BABC(UnkStruct_Fsys_A0 *a0, u16 *a1, u16 frontierTrainerIndex, UnkStruct_0204B470 *a3, u8 a4, u16 *a5, u16 *a6, UnkStruct_0204A824_7E8 *a7, enum HeapID heapID) {
|
||||
static u32 FrontierFieldSystem_0204BABC(FrontierFieldSystem *frontierFsys, u16 *frontierTrainerData, u16 frontierTrainerIndex, FrontierMon *frontierMon, u8 numPokemon, u16 *partySpecies, u16 *partyItems, FrontierMultiBattleAllyData *allyData, enum HeapID heapID) {
|
||||
s32 i;
|
||||
u8 iv;
|
||||
u32 otId;
|
||||
u32 frontierMonIndex;
|
||||
u32 unk6c[4];
|
||||
u32 unk5c[4];
|
||||
s32 unk2c;
|
||||
BOOL unk28 = FALSE;
|
||||
FrontierMon unk3c;
|
||||
FrontierMon unk4c;
|
||||
GF_ASSERT(a4 <= 4);
|
||||
s32 unk = 0;
|
||||
unk2c = 0;
|
||||
while (unk != a4) {
|
||||
u8 index = sub_0204B510(a0) % a1[1];
|
||||
frontierMonIndex = a1[2 + index];
|
||||
GetFrontierMon(&unk4c, frontierMonIndex);
|
||||
for (i = 0; i < unk; i++) {
|
||||
GetFrontierMon(&unk3c, unk6c[i]);
|
||||
if (unk3c.species == unk4c.species) {
|
||||
u32 frontierMonIDs[4];
|
||||
u32 frontierMonPIDs[4];
|
||||
s32 failedItemGenAttempts;
|
||||
BOOL replaceItem = FALSE;
|
||||
FrontierMonNarcData frontierMonNarcData_1;
|
||||
FrontierMonNarcData frontierMonNarcData_2;
|
||||
GF_ASSERT(numPokemon <= 4);
|
||||
|
||||
s32 count = 0;
|
||||
failedItemGenAttempts = 0;
|
||||
while (count != numPokemon) {
|
||||
u8 index = FrontierFieldSystem_0204B510(frontierFsys) % frontierTrainerData[1];
|
||||
frontierMonIndex = frontierTrainerData[2 + index];
|
||||
GetFrontierMonNarcData(&frontierMonNarcData_2, frontierMonIndex);
|
||||
for (i = 0; i < count; i++) {
|
||||
GetFrontierMonNarcData(&frontierMonNarcData_1, frontierMonIDs[i]);
|
||||
if (frontierMonNarcData_1.species == frontierMonNarcData_2.species) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i != unk) {
|
||||
if (i != count) {
|
||||
continue;
|
||||
}
|
||||
if (a5) {
|
||||
for (i = 0; i < a4; i++) {
|
||||
if (a5[i] == unk4c.species) {
|
||||
if (partySpecies) {
|
||||
for (i = 0; i < numPokemon; i++) {
|
||||
if (partySpecies[i] == frontierMonNarcData_2.species) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i != a4) {
|
||||
if (i != numPokemon) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (unk2c < 50) {
|
||||
for (i = 0; i < unk; i++) {
|
||||
GetFrontierMon(&unk3c, unk6c[i]);
|
||||
if (unk3c.item && unk3c.item == unk4c.item) {
|
||||
if (failedItemGenAttempts < 50) {
|
||||
for (i = 0; i < count; i++) {
|
||||
GetFrontierMonNarcData(&frontierMonNarcData_1, frontierMonIDs[i]);
|
||||
if (frontierMonNarcData_1.item && frontierMonNarcData_1.item == frontierMonNarcData_2.item) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i != unk) {
|
||||
unk2c++;
|
||||
if (i != count) {
|
||||
failedItemGenAttempts++;
|
||||
continue;
|
||||
}
|
||||
if (a6) {
|
||||
for (i = 0; i < a4; i++) {
|
||||
if (a6[i] == unk4c.item && a6[i] != ITEM_NONE) {
|
||||
if (partyItems) {
|
||||
for (i = 0; i < numPokemon; i++) {
|
||||
if (partyItems[i] == frontierMonNarcData_2.item && partyItems[i] != ITEM_NONE) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i != a4) {
|
||||
unk2c++;
|
||||
if (i != numPokemon) {
|
||||
failedItemGenAttempts++;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
unk6c[unk] = frontierMonIndex;
|
||||
unk++;
|
||||
frontierMonIDs[count] = frontierMonIndex;
|
||||
count++;
|
||||
}
|
||||
iv = sub_0204B4D4(frontierTrainerIndex);
|
||||
otId = sub_0204B510(a0) | sub_0204B510(a0) << 16;
|
||||
if (unk2c >= 50) {
|
||||
unk28 = TRUE;
|
||||
iv = GetFrontierTrainerIVs(frontierTrainerIndex);
|
||||
otId = FrontierFieldSystem_0204B510(frontierFsys) | FrontierFieldSystem_0204B510(frontierFsys) << 16;
|
||||
if (failedItemGenAttempts >= 50) {
|
||||
replaceItem = TRUE;
|
||||
}
|
||||
for (i = 0; i < unk; i++) {
|
||||
unk5c[i] = sub_0204B834(a0, &a3[i], unk6c[i], otId, 0, iv, i, unk28, heapID);
|
||||
for (i = 0; i < count; i++) {
|
||||
frontierMonPIDs[i] = sub_0204B834(frontierFsys, &frontierMon[i], frontierMonIDs[i], otId, 0, iv, i, replaceItem, heapID);
|
||||
}
|
||||
if (a7 == NULL) {
|
||||
return unk28;
|
||||
if (allyData == NULL) {
|
||||
return replaceItem;
|
||||
}
|
||||
a7->otId = otId;
|
||||
allyData->otId = otId;
|
||||
for (i = 0; i < 2; i++) {
|
||||
a7->unk04[i] = unk6c[i];
|
||||
a7->unk08[i] = unk5c[i];
|
||||
allyData->frontierMonIDs[i] = frontierMonIDs[i];
|
||||
allyData->frontierMonPIDs[i] = frontierMonPIDs[i];
|
||||
}
|
||||
return unk28;
|
||||
return replaceItem;
|
||||
}
|
||||
|
||||
static u16 *sub_0204BC7C(u32 frontierTrainerIndex, enum HeapID heapID) {
|
||||
static u16 *GetFrontierTrainerData(u32 frontierTrainerIndex, enum HeapID heapID) {
|
||||
return AllocAndReadWholeNarcMemberByIdPair(NARC_a_2_0_2, frontierTrainerIndex, heapID);
|
||||
}
|
||||
|
||||
static void GetFrontierMon(FrontierMon *mon, u32 frontierMonIndex) {
|
||||
static void GetFrontierMonNarcData(FrontierMonNarcData *mon, u32 frontierMonIndex) {
|
||||
ReadWholeNarcMemberByIdPair(mon, NARC_a_2_0_3, frontierMonIndex);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
void sub_02069528(SaveData *saveData, s32 a1, UnkStruct_02069528 *a2) {
|
||||
PlayerProfile *playerProfile = Save_PlayerData_GetProfile(saveData);
|
||||
SaveWiFiHistory *saveWiFiHistory = Save_WiFiHistory_Get(saveData);
|
||||
FRONTIERDATA *frontierData = Save_FrontierData_Get(saveData);
|
||||
FrontierData *frontierData = Save_FrontierData_Get(saveData);
|
||||
MI_CpuFill8(a2, 0, sizeof(UnkStruct_02069528));
|
||||
MI_CpuCopy8(PlayerProfile_GetNamePtr(playerProfile), &a2->playerName, (PLAYER_NAME_LENGTH + 1) * sizeof(u16));
|
||||
a2->trainerId = PlayerProfile_GetTrainerID(playerProfile);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user