finished documentation

This commit is contained in:
xXAbieGamingXx
2026-07-23 17:12:40 -07:00
parent f051b9cb48
commit eb69b0a76f
15 changed files with 244 additions and 261 deletions

View File

@@ -0,0 +1,50 @@
#ifndef POKEPLATINUM_BATTLE_FACTORY_SAVE_H
#define POKEPLATINUM_BATTLE_FACTORY_SAVE_H
#include "savedata.h"
#define FACTORY_SAVE_OPEN_LEVEL 0
#define FACTORY_SAVE_CHALLENGE_TYPE 1
#define FACTORY_SAVE_CURRENT_BATTLE 2
#define FACTORY_SAVE_TRAINER_IDS 3
#define FACTORY_SAVE_PLAYER_SETS 4
#define FACTORY_SAVE_PLAYER_IVS 5
#define FACTORY_SAVE_PLAYER_PERSONALITY 6
#define FACTORY_SAVE_OPPONENT_SETS 7
#define FACTORY_SAVE_OPPONENT_IVS 8
#define FACTORY_SAVE_OPPONENT_PERSONALITY 9
#define FACTORY_SAVE_STREAK_FLAGS 10
typedef struct BattleFactoryStreakFlags {
u8 streakActiveFlags;
u8 unused[3];
} BattleFactoryStreakFlags;
typedef struct BattleFactorySave {
u8 isOpenLevel: 1;
u8 challengeType: 3;
u8 didSave: 1;
u8 unused: 3;
u8 currentBattleNum;
u16 unused2;
u16 trainerIDs[14];
u16 playerPartySets[4];
u8 playerIVs[4];
u32 playerPersonality[4];
u16 opponentPartySets[4];
u8 opponentIVs[4];
u32 opponentPersonality[4];
} BattleFactorySave;
void BattleFactorySave_Init(BattleFactorySave *save);
BattleFactorySave *BattleFactorySave_Get(SaveData *saveData);
BOOL BattleFactorySave_HasSaved(BattleFactorySave *save);
void BattleFactorySave_RecordSave(BattleFactorySave *save, BOOL didSave);
void BattleFactorySave_SetMember(BattleFactorySave *save, u8 field, u8 index, const void *value);
u32 BattleFactorySave_GetMember(BattleFactorySave *save, u8 field, u8 index, void *unused);
void BattleFactoryStreakFlags_Init(BattleFactoryStreakFlags *flags);
void BattleFactoryStreakFlags_SetFlag(BattleFactoryStreakFlags *flags, u8 field, u8 challengeType, u8 *value);
u32 BattleFactoryStreakFlags_GetFlag(BattleFactoryStreakFlags *flags, u8 field, u8 challengeType, void *unused);
BattleFactoryStreakFlags *BattleFactoryStreakFlags_Get(SaveData *saveData);
#endif // POKEPLATINUM_BATTLE_FACTORY_SAVE_H

View File

@@ -1,10 +1,9 @@
#ifndef POKEPLATINUM_STRUCT_BATTLE_FACTORY_H
#define POKEPLATINUM_STRUCT_BATTLE_FACTORY_H
#include "struct_defs/struct_0202FF58.h"
#include "overlay104/frontier_data_transfer.h"
#include "battle_factory_save.h"
#include "field_battle_data_transfer.h"
#include "party.h"
#include "savedata.h"
@@ -13,7 +12,7 @@
typedef struct BattleFactory {
int unk_00;
u8 challengeType;
u8 unk_05;
u8 isOpenLevel;
u8 unk_06;
u8 unk_07;
u16 unk_08;
@@ -39,7 +38,7 @@ typedef struct BattleFactory {
Party *opponentsParty;
u16 unk_4DC[6];
u16 unk_4E8[6];
UnkStruct_0202FF58 *unk_4F4;
BattleFactorySave *factorySave;
SaveData *saveData;
FieldBattleDTO *dto;
SysTask *unk_500;

View File

@@ -9,7 +9,7 @@
#include "struct_defs/struct_020305B8.h"
#include "struct_defs/wifi_battle_tower_data.h"
#include "unk_0202FF4C.h"
#include "battle_factory_save.h"
#include "battle_castle_save.h"
#include "battle_hall_save.h"
#include "wifi_list.h"
@@ -23,7 +23,7 @@ typedef struct BattleFrontierSave {
BattleFrontierStats stats;
union {
WifiBattleTowerSave wifiBattleTowerSave;
UnkStruct_0202FF58 unk_8E0_val2;
BattleFactorySave factorySave;
BattleHallSave hallSave;
BattleCastleSave castleSave;
UnkStruct_020304A0 unk_8E0_val5;

View File

@@ -1,20 +1,5 @@
#ifndef POKEPLATINUM_STRUCT_0202FF58_H
#define POKEPLATINUM_STRUCT_0202FF58_H
typedef struct {
u8 unk_00_0 : 1;
u8 challengeType: 3;
u8 unk_00_4 : 1;
u8 unused: 3;
u8 unk_01; // likely battle num
u16 unused2;
u16 trainerIDs[14]; // almost certainly trainer ids
u16 unk_20[4]; // species info??
u8 playerIVs[4];
u32 playerPersonality[4];
u16 unk_3C[4]; // opponent species??
u8 opponentIVs[4];
u32 opponentPersonality[4];
} UnkStruct_0202FF58;
#endif // POKEPLATINUM_STRUCT_0202FF58_H

View File

@@ -1,26 +0,0 @@
#ifndef POKEPLATINUM_UNK_0202FF4C_H
#define POKEPLATINUM_UNK_0202FF4C_H
#include "struct_defs/struct_0202FF58.h"
#include "savedata.h"
#define FACTORY_SAVE_STREAK_FLAGS 10
typedef struct BattleFactoryStreakFlags {
u8 streakActiveFlags;
u8 unused[3];
} BattleFactoryStreakFlags;
void sub_0202FF4C(UnkStruct_0202FF58 *param0);
UnkStruct_0202FF58 *sub_0202FF58(SaveData *saveData);
BOOL sub_0202FF68(UnkStruct_0202FF58 *param0);
void sub_0202FF70(UnkStruct_0202FF58 *param0, BOOL param1);
void sub_0202FF84(UnkStruct_0202FF58 *param0, u8 field, u8 index, const void *value);
u32 sub_02030030(UnkStruct_0202FF58 *param0, u8 field, u8 index, void *unused);
void BattleFactoryStreakFlags_Init(BattleFactoryStreakFlags *flags);
void BattleFactoryStreakFlags_SetFlag(BattleFactoryStreakFlags *flags, u8 field, u8 challengeType, u8 *value);
u32 BattleFactoryStreakFlags_GetFlag(BattleFactoryStreakFlags *flags, u8 field, u8 challengeType, void *unused);
BattleFactoryStreakFlags *BattleFactoryStreakFlags_Get(SaveData *saveData);
#endif // POKEPLATINUM_UNK_0202FF4C_H

View File

@@ -143,7 +143,7 @@ Static main
Object main.nef.p/src_link_contest_records.c.o
Object main.nef.p/src_save_catchrecords.c.o
Object main.nef.p/src_unk_0202F1D4.c.o
Object main.nef.p/src_unk_0202FF4C.c.o
Object main.nef.p/src_battle_factory_save.c.o
Object main.nef.p/src_battle_hall_save.c.o
Object main.nef.p/src_battle_castle_save.c.o
Object main.nef.p/src_unk_02030494.c.o

View File

@@ -33,7 +33,7 @@
#include "string_template.h"
#include "system.h"
#include "text.h"
#include "unk_0202FF4C.h"
#include "battle_factory_save.h"
#include "unk_02030494.h"
#include "wifi_battle_tower_save.h"

130
src/battle_factory_save.c Normal file
View File

@@ -0,0 +1,130 @@
#include "battle_factory_save.h"
#include <nitro.h>
#include "struct_defs/battle_frontier.h"
#include "savedata.h"
void BattleFactorySave_Init(BattleFactorySave *save)
{
MI_CpuClear8(save, sizeof(BattleFactorySave));
}
BattleFactorySave *BattleFactorySave_Get(SaveData *saveData)
{
BattleFrontierSave *frontier = SaveData_SaveTable(saveData, SAVE_TABLE_ENTRY_FRONTIER);
return &frontier->factorySave;
}
BOOL BattleFactorySave_HasSaved(BattleFactorySave *save)
{
return save->didSave;
}
void BattleFactorySave_RecordSave(BattleFactorySave *save, BOOL didSave)
{
save->didSave = didSave;
}
// set value
void BattleFactorySave_SetMember(BattleFactorySave *save, u8 field, u8 index, const void *value)
{
switch (field) {
case FACTORY_SAVE_OPEN_LEVEL:
save->isOpenLevel = *(u8 *)value;
break;
case FACTORY_SAVE_CHALLENGE_TYPE:
save->challengeType = *(u8 *)value;
break;
case FACTORY_SAVE_CURRENT_BATTLE:
save->currentBattleNum = *(u8 *)value;
break;
case FACTORY_SAVE_TRAINER_IDS:
save->trainerIDs[index] = *(u16 *)value;
break;
case FACTORY_SAVE_PLAYER_SETS:
save->playerPartySets[index] = *(u16 *)value;
break;
case FACTORY_SAVE_PLAYER_IVS:
save->playerIVs[index] = *(u8 *)value;
break;
case FACTORY_SAVE_PLAYER_PERSONALITY:
save->playerPersonality[index] = *(u32 *)value;
break;
case FACTORY_SAVE_OPPONENT_SETS:
save->opponentPartySets[index] = *(u16 *)value;
break;
case FACTORY_SAVE_OPPONENT_IVS:
save->opponentIVs[index] = *(u8 *)value;
break;
case FACTORY_SAVE_OPPONENT_PERSONALITY:
save->opponentPersonality[index] = *(u32 *)value;
break;
}
}
u32 BattleFactorySave_GetMember(BattleFactorySave *save, u8 field, u8 index, void *unused)
{
switch (field) {
case FACTORY_SAVE_CHALLENGE_TYPE:
return (u32)save->challengeType;
case FACTORY_SAVE_OPEN_LEVEL:
return (u32)save->isOpenLevel;
case FACTORY_SAVE_CURRENT_BATTLE:
return (u32)save->currentBattleNum;
case FACTORY_SAVE_TRAINER_IDS:
return (u32)save->trainerIDs[index];
case FACTORY_SAVE_PLAYER_SETS:
return (u32)save->playerPartySets[index];
case FACTORY_SAVE_PLAYER_IVS:
return (u32)save->playerIVs[index];
case FACTORY_SAVE_PLAYER_PERSONALITY:
return (u32)save->playerPersonality[index];
case FACTORY_SAVE_OPPONENT_SETS:
return (u32)save->opponentPartySets[index];
case FACTORY_SAVE_OPPONENT_IVS:
return (u32)save->opponentIVs[index];
case FACTORY_SAVE_OPPONENT_PERSONALITY:
return (u32)save->opponentPersonality[index];
}
return 0;
}
void BattleFactoryStreakFlags_Init(BattleFactoryStreakFlags *flags)
{
MI_CpuClear8(flags, sizeof(BattleFactoryStreakFlags));
}
void BattleFactoryStreakFlags_SetFlag(BattleFactoryStreakFlags *flags, u8 field, u8 challengeType, u8 *value)
{
u8 *value_dupe = (u8 *)value;
switch (field) {
case FACTORY_SAVE_STREAK_FLAGS:
if (*value_dupe >= 1) {
flags->streakActiveFlags |= (1 << challengeType);
} else {
flags->streakActiveFlags &= (0xff ^ (1 << challengeType));
}
break;
}
return;
}
u32 BattleFactoryStreakFlags_GetFlag(BattleFactoryStreakFlags *flags, u8 field, u8 challengeType, void *unused)
{
switch (field) {
case FACTORY_SAVE_STREAK_FLAGS:
return (u32)((flags->streakActiveFlags >> challengeType) & 0x1);
}
return 0;
}
BattleFactoryStreakFlags *BattleFactoryStreakFlags_Get(SaveData *saveData)
{
BattleFrontierSave *frontier = SaveData_SaveTable(saveData, SAVE_TABLE_ENTRY_FRONTIER);
return &frontier->factory.streakFlags;
}

View File

@@ -7,7 +7,7 @@
#include "battle_castle_save.h"
#include "battle_hall_save.h"
#include "savedata.h"
#include "unk_0202FF4C.h"
#include "battle_factory_save.h"
#include "unk_02030494.h"
#include "wifi_battle_tower_save.h"
#include "wifi_list.h"

View File

@@ -132,7 +132,7 @@ pokeplatinum_c = files(
'link_contest_records.c',
'save_catchrecords.c',
'unk_0202F1D4.c',
'unk_0202FF4C.c',
'battle_factory_save.c',
'battle_hall_save.c',
'battle_castle_save.c',
'unk_02030494.c',

View File

@@ -25,7 +25,7 @@
#include "string_template.h"
#include "sys_task.h"
#include "sys_task_manager.h"
#include "unk_0202FF4C.h"
#include "battle_factory_save.h"
#include "unk_0209BA80.h"
#include "constdata/const_020EA358.h"
@@ -93,7 +93,7 @@ BOOL FrontierScrCmd_OpenBattleFactoryAppInitial(FrontierScriptContext *ctx)
args->saveData = fieldData->saveData;
args->challengeType = battleFactory->challengeType;
args->unk_05 = battleFactory->unk_05;
args->unk_05 = battleFactory->isOpenLevel;
args->isExchangeMode = FALSE;
args->personalParty = battleFactory->playersParty;
args->receivableParty = battleFactory->opponentsParty;
@@ -151,7 +151,7 @@ BOOL FrontierScrCmd_OpenBattleFactoryAppForTrade(FrontierScriptContext *ctx)
args->saveData = fieldData->saveData;
args->challengeType = battleFactory->challengeType;
args->unk_05 = battleFactory->unk_05;
args->unk_05 = battleFactory->isOpenLevel;
args->isExchangeMode = TRUE;
args->personalParty = battleFactory->playersParty;
args->receivableParty = battleFactory->opponentsParty;
@@ -216,7 +216,7 @@ BOOL FrontierScrCmd_CallBattleFactoryFunction(FrontierScriptContext *ctx)
battleFactory->unk_07 = arg1;
break;
case BF_FUNC_UNK_1:
battleFactory->unk_05 = arg1;
battleFactory->isOpenLevel = arg1;
break;
case BF_FUNC_SET_CHALLENGE_TYPE:
battleFactory->challengeType = arg1;
@@ -236,7 +236,7 @@ BOOL FrontierScrCmd_CallBattleFactoryFunction(FrontierScriptContext *ctx)
OS_ResetSystem(0);
break;
case BF_FUNC_UNK_9:
*returnVar = sub_0202FF68(battleFactory->unk_4F4);
*returnVar = BattleFactorySave_HasSaved(battleFactory->factorySave);
break;
case BF_FUNC_UNK_10:
ov104_02234148(battleFactory, 2);

View File

@@ -5,7 +5,6 @@
#include "generated/game_records.h"
#include "struct_defs/battle_frontier.h"
#include "struct_defs/struct_0202FF58.h"
#include "overlay104/ov104_0222DCE0.h"
#include "overlay104/ov104_0222ECE8.h"
@@ -22,7 +21,7 @@
#include "pokemon.h"
#include "savedata.h"
#include "system_vars.h"
#include "unk_0202FF4C.h"
#include "battle_factory_save.h"
#include "vars_flags.h"
void ov104_02233B98(BattleFactory *param0, u16 param1);
@@ -47,7 +46,7 @@ u16 ov104_022347F8(BattleFactory *param0);
BattleFactory *ov104_022339B4(SaveData *saveData, u16 param1, u8 param2, u8 param3)
{
UnkStruct_0202FF58 *v0;
BattleFactorySave *v0;
BattleFactoryStreakFlags *v1;
const UnkStruct_ov104_0224028C *v2;
u8 v3;
@@ -58,24 +57,24 @@ BattleFactory *ov104_022339B4(SaveData *saveData, u16 param1, u8 param2, u8 para
v7 = Heap_Alloc(HEAP_ID_FIELD2, sizeof(BattleFactory));
MI_CpuClear8(v7, sizeof(BattleFactory));
v7->unk_4F4 = sub_0202FF58(saveData);
v7->factorySave = BattleFactorySave_Get(saveData);
v7->saveData = saveData;
v7->unk_00 = 11;
v7->playersParty = Party_New(HEAP_ID_FIELD2);
v7->opponentsParty = Party_New(HEAP_ID_FIELD2);
v0 = v7->unk_4F4;
v0 = v7->factorySave;
v1 = BattleFactoryStreakFlags_Get(saveData);
if (param1 == 0) {
v7->challengeType = param2;
v7->unk_05 = param3;
v7->isOpenLevel= param3;
v7->unk_06 = 0;
sub_0202FF4C(v0);
BattleFactorySave_Init(v0);
if (v7->challengeType == 3) {
if (v7->unk_05 == 0) {
if (v7->isOpenLevel== 0) {
v6 = 102;
} else {
v6 = 104;
@@ -83,12 +82,12 @@ BattleFactory *ov104_022339B4(SaveData *saveData, u16 param1, u8 param2, u8 para
v3 = SystemVars_GetWiFiFrontierCleared(SaveData_GetVarsFlags(v7->saveData));
} else {
v3 = (u8)BattleFactoryStreakFlags_GetFlag(v1, 10, (v7->unk_05 * 4) + v7->challengeType, NULL);
v3 = (u8)BattleFactoryStreakFlags_GetFlag(v1, 10, (v7->isOpenLevel * 4) + v7->challengeType, NULL);
}
if (v3 == 1) {
v7->currentStreak = BattleFrontierSave_GetStatAutoHostIdx(SaveData_GetBattleFrontier(v7->saveData), BattleFrontierStats_GetFactoryLatestStreakIdx(v7->unk_05, v7->challengeType));
v7->unk_08 = BattleFrontierSave_GetStatAutoHostIdx(SaveData_GetBattleFrontier(v7->saveData), BattleFrontierStats_GetFactoryLatestTradeCountIndex(v7->unk_05, v7->challengeType));
v7->currentStreak = BattleFrontierSave_GetStatAutoHostIdx(SaveData_GetBattleFrontier(v7->saveData), BattleFrontierStats_GetFactoryLatestStreakIdx(v7->isOpenLevel, v7->challengeType));
v7->unk_08 = BattleFrontierSave_GetStatAutoHostIdx(SaveData_GetBattleFrontier(v7->saveData), BattleFrontierStats_GetFactoryLatestTradeCountIndex(v7->isOpenLevel, v7->challengeType));
} else {
v7->currentStreak = 0;
v7->unk_08 = 0;
@@ -96,11 +95,11 @@ BattleFactory *ov104_022339B4(SaveData *saveData, u16 param1, u8 param2, u8 para
v7->unk_10 = 0;
} else {
v7->challengeType = (u8)sub_02030030(v0, 1, 0, NULL);
v7->unk_05 = (u8)sub_02030030(v0, 0, 0, NULL);
v7->unk_06 = (u8)sub_02030030(v0, 2, 0, NULL);
v7->currentStreak = BattleFrontierSave_GetStatAutoHostIdx(SaveData_GetBattleFrontier(v7->saveData), BattleFrontierStats_GetFactoryLatestStreakIdx(v7->unk_05, v7->challengeType));
v7->unk_08 = BattleFrontierSave_GetStatAutoHostIdx(SaveData_GetBattleFrontier(v7->saveData), BattleFrontierStats_GetFactoryLatestTradeCountIndex(v7->unk_05, v7->challengeType));
v7->isOpenLevel= (u8)BattleFactorySave_GetMember(v0, 1, 0, NULL);
v7->challengeType = (u8)BattleFactorySave_GetMember(v0, 0, 0, NULL);
v7->unk_06 = (u8)BattleFactorySave_GetMember(v0, 2, 0, NULL);
v7->currentStreak = BattleFrontierSave_GetStatAutoHostIdx(SaveData_GetBattleFrontier(v7->saveData), BattleFrontierStats_GetFactoryLatestStreakIdx(v7->isOpenLevel, v7->challengeType));
v7->unk_08 = BattleFrontierSave_GetStatAutoHostIdx(SaveData_GetBattleFrontier(v7->saveData), BattleFrontierStats_GetFactoryLatestTradeCountIndex(v7->isOpenLevel, v7->challengeType));
}
v7->unk_0E = (u16)(v7->currentStreak / 7);
@@ -133,7 +132,7 @@ static void ov104_02233BAC(BattleFactory *param0)
ov104_0223A860(param0->challengeType, ov104_0223AF34(param0), param0->trainerIDs, 7 * 2);
ov104_0223AAA0(ov104_0223AF34(param0), param0->unk_05, param0->unk_254, param0->unk_280, param0->unk_260, param0->unk_268, param0->unk_08, NULL, NULL);
ov104_0223AAA0(ov104_0223AF34(param0), param0->isOpenLevel, param0->unk_254, param0->unk_280, param0->unk_260, param0->unk_268, param0->unk_08, NULL, NULL);
ov104_02233D80(param0, 4, 0);
ov104_02233D80(param0, 5, 0);
@@ -150,7 +149,7 @@ static void ov104_02233BAC(BattleFactory *param0)
v6[v0] = param0->unk_280[v0].item;
}
ov104_0223AAA0(ov104_0223AF34(param0), param0->unk_05, param0->unk_584, param0->unk_5B0, param0->unk_590, param0->unk_598, param0->unk_580, v5, v6);
ov104_0223AAA0(ov104_0223AF34(param0), param0->isOpenLevel, param0->unk_584, param0->unk_5B0, param0->unk_590, param0->unk_598, param0->unk_580, v5, v6);
ov104_02233D80(param0, 4, 1);
ov104_02233D80(param0, 5, 1);
@@ -162,7 +161,7 @@ static void ov104_02233BAC(BattleFactory *param0)
}
}
ov104_0223AB0C(BattleFactory_GetOpponentPartySize(param0->challengeType, 1), param0->trainerIDs[param0->unk_06], param0->unk_05, v2, param0->unk_3D2, param0->unk_3F0, param0->unk_3DA, param0->unk_3E0, v1);
ov104_0223AB0C(BattleFactory_GetOpponentPartySize(param0->challengeType, 1), param0->trainerIDs[param0->unk_06], param0->isOpenLevel, v2, param0->unk_3D2, param0->unk_3F0, param0->unk_3DA, param0->unk_3E0, v1);
for (v0 = 0; v0 < 6; v0++) {
v4 = Pokemon_New(HEAP_ID_FIELD2);
@@ -234,13 +233,13 @@ static void ov104_02233F1C(BattleFactory *param0)
u8 v3 = BattleFactory_GetPlayerPartySize(param0->challengeType);
for (v0 = 0; v0 < (7 * 2); v0++) {
param0->trainerIDs[v0] = (u16)sub_02030030(param0->unk_4F4, 3, v0, NULL);
param0->trainerIDs[v0] = (u16)BattleFactorySave_GetMember(param0->factorySave, 3, v0, NULL);
}
for (v0 = 0; v0 < 4; v0++) {
v6[v0] = (u16)sub_02030030(param0->unk_4F4, 4, v0, NULL);
v7[v0] = (u32)sub_02030030(param0->unk_4F4, 6, v0, NULL);
v5[v0] = (u8)sub_02030030(param0->unk_4F4, 5, v0, NULL);
v6[v0] = (u16)BattleFactorySave_GetMember(param0->factorySave, 4, v0, NULL);
v7[v0] = (u32)BattleFactorySave_GetMember(param0->factorySave, 6, v0, NULL);
v5[v0] = (u8)BattleFactorySave_GetMember(param0->factorySave, 5, v0, NULL);
param0->unk_4E8[v0] = v6[v0];
}
@@ -257,9 +256,9 @@ static void ov104_02233F1C(BattleFactory *param0)
Heap_Free(v1);
for (v0 = 0; v0 < 4; v0++) {
v6[v0] = (u16)sub_02030030(param0->unk_4F4, 7, v0, NULL);
v7[v0] = (u32)sub_02030030(param0->unk_4F4, 9, v0, NULL);
v5[v0] = (u8)sub_02030030(param0->unk_4F4, 8, v0, NULL);
v6[v0] = (u16)BattleFactorySave_GetMember(param0->factorySave, 7, v0, NULL);
v7[v0] = (u32)BattleFactorySave_GetMember(param0->factorySave, 9, v0, NULL);
v5[v0] = (u8)BattleFactorySave_GetMember(param0->factorySave, 8, v0, NULL);
param0->unk_3D2[v0] = v6[v0];
}
@@ -329,41 +328,41 @@ void ov104_02234148(BattleFactory *param0, u8 param1)
u32 v8, v9, v10;
BattleFrontierSave *frontier;
Pokemon *v12;
UnkStruct_0202FF58 *v13 = param0->unk_4F4;
BattleFactorySave *v13 = param0->factorySave;
BattleFactoryStreakFlags *v14 = BattleFactoryStreakFlags_Get(param0->saveData);
frontier = SaveData_GetBattleFrontier(param0->saveData);
v3 = BattleFactory_GetPlayerPartySize(param0->challengeType);
v4 = BattleFactory_GetOpponentPartySize(param0->challengeType, 1);
v5[0] = param0->unk_05;
sub_0202FF84(param0->unk_4F4, 0, 0, v5);
v5[0] = param0->isOpenLevel;
BattleFactorySave_SetMember(param0->factorySave, 0, 0, v5);
v5[0] = param0->challengeType;
sub_0202FF84(param0->unk_4F4, 1, 0, v5);
sub_0202FF70(param0->unk_4F4, 1);
BattleFactorySave_SetMember(param0->factorySave, 1, 0, v5);
BattleFactorySave_RecordSave(param0->factorySave, 1);
v5[0] = param0->unk_06;
sub_0202FF84(param0->unk_4F4, 2, 0, v5);
BattleFrontierSave_SetStatAutoHostIdx(frontier, BattleFrontierStats_GetFactoryLatestTradeCountIndex(param0->unk_05, param0->challengeType), param0->unk_08);
BattleFrontierSave_SetStatAutoHostIdx(frontier, BattleFrontierStats_GetFactoryLatestStreakIdx(param0->unk_05, param0->challengeType), param0->currentStreak);
BattleFactorySave_SetMember(param0->factorySave, 2, 0, v5);
BattleFrontierSave_SetStatAutoHostIdx(frontier, BattleFrontierStats_GetFactoryLatestTradeCountIndex(param0->isOpenLevel, param0->challengeType), param0->unk_08);
BattleFrontierSave_SetStatAutoHostIdx(frontier, BattleFrontierStats_GetFactoryLatestStreakIdx(param0->isOpenLevel, param0->challengeType), param0->currentStreak);
if (param1 != 2) {
v1 = BattleFrontierSave_GetStatAutoHostIdx(frontier, BattleFrontierStats_GetFactoryRecordStreakIdx(param0->unk_05, param0->challengeType));
v8 = BattleFrontierSave_SetIfBetterAutoHostIdx(frontier, BattleFrontierStats_GetFactoryRecordStreakIdx(param0->unk_05, param0->challengeType), param0->currentStreak);
v2 = BattleFrontierSave_GetStatAutoHostIdx(frontier, BattleFrontierStats_GetFactoryRecordStreakIdx(param0->unk_05, param0->challengeType));
v1 = BattleFrontierSave_GetStatAutoHostIdx(frontier, BattleFrontierStats_GetFactoryRecordStreakIdx(param0->isOpenLevel, param0->challengeType));
v8 = BattleFrontierSave_SetIfBetterAutoHostIdx(frontier, BattleFrontierStats_GetFactoryRecordStreakIdx(param0->isOpenLevel, param0->challengeType), param0->currentStreak);
v2 = BattleFrontierSave_GetStatAutoHostIdx(frontier, BattleFrontierStats_GetFactoryRecordStreakIdx(param0->isOpenLevel, param0->challengeType));
if (param0->currentStreak == v1) {
BattleFrontierSave_SetIfBetterAutoHostIdx(frontier, BattleFrontierStats_GetFactoryRecordTradeCountIndex(param0->unk_05, param0->challengeType), param0->unk_08);
BattleFrontierSave_SetIfBetterAutoHostIdx(frontier, BattleFrontierStats_GetFactoryRecordTradeCountIndex(param0->isOpenLevel, param0->challengeType), param0->unk_08);
} else if (v1 < v2) {
BattleFrontierSave_SetStatAutoHostIdx(frontier, BattleFrontierStats_GetFactoryRecordTradeCountIndex(param0->unk_05, param0->challengeType), param0->unk_08);
BattleFrontierSave_SetStatAutoHostIdx(frontier, BattleFrontierStats_GetFactoryRecordTradeCountIndex(param0->isOpenLevel, param0->challengeType), param0->unk_08);
}
v5[0] = param0->unk_0A;
BattleFactoryStreakFlags_SetFlag(v14, 10, (param0->unk_05 * 4) + param0->challengeType, v5);
BattleFactoryStreakFlags_SetFlag(v14, 10, (param0->isOpenLevel * 4) + param0->challengeType, v5);
if (param0->challengeType == 3) {
if (param0->unk_05 == 0) {
if (param0->isOpenLevel == 0) {
v10 = 102;
} else {
v10 = 104;
@@ -375,7 +374,7 @@ void ov104_02234148(BattleFactory *param0, u8 param1)
for (v0 = 0; v0 < (7 * 2); v0++) {
v6[0] = param0->trainerIDs[v0];
sub_0202FF84(param0->unk_4F4, 3, v0, v6);
BattleFactorySave_SetMember(param0->factorySave, 3, v0, v6);
}
v9 = Party_GetCurrentCount(param0->playersParty);
@@ -384,13 +383,13 @@ void ov104_02234148(BattleFactory *param0, u8 param1)
v12 = Party_GetPokemonBySlotIndex(param0->playersParty, v0);
v6[0] = param0->unk_4E8[v0];
sub_0202FF84(param0->unk_4F4, 4, v0, v6);
BattleFactorySave_SetMember(param0->factorySave, 4, v0, v6);
v5[0] = Pokemon_GetValue(v12, MON_DATA_ATK_IV, NULL);
sub_0202FF84(param0->unk_4F4, 5, v0, v5);
BattleFactorySave_SetMember(param0->factorySave, 5, v0, v5);
v7[0] = Pokemon_GetValue(v12, MON_DATA_PERSONALITY, NULL);
sub_0202FF84(param0->unk_4F4, 6, v0, v7);
BattleFactorySave_SetMember(param0->factorySave, 6, v0, v7);
}
v9 = Party_GetCurrentCount(param0->opponentsParty);
@@ -399,13 +398,13 @@ void ov104_02234148(BattleFactory *param0, u8 param1)
v12 = Party_GetPokemonBySlotIndex(param0->opponentsParty, v0);
v6[0] = param0->unk_3D2[v0];
sub_0202FF84(param0->unk_4F4, 7, v0, v6);
BattleFactorySave_SetMember(param0->factorySave, 7, v0, v6);
v5[0] = Pokemon_GetValue(v12, MON_DATA_ATK_IV, NULL);
sub_0202FF84(param0->unk_4F4, 8, v0, v5);
BattleFactorySave_SetMember(param0->factorySave, 8, v0, v5);
v7[0] = Pokemon_GetValue(v12, MON_DATA_PERSONALITY, NULL);
sub_0202FF84(param0->unk_4F4, 9, v0, v7);
BattleFactorySave_SetMember(param0->factorySave, 9, v0, v7);
}
return;
@@ -516,7 +515,7 @@ void ov104_02234570(BattleFactory *param0)
param0->unk_254[v0] = param0->unk_3D2[v0];
}
v7 = ov104_0223A8A8(param0->trainerIDs[param0->unk_06], param0->unk_05);
v7 = ov104_0223A8A8(param0->trainerIDs[param0->unk_06], param0->isOpenLevel);
ov104_0223A918(v4, v5, v2 + v1, v3, param0->unk_3D2, 11, v7, 0, param0->unk_3DA);
ov104_0222E330(param0->unk_3F0, param0->unk_3D2, param0->unk_3DA, NULL, param0->unk_3E0, v3, 11, 179);

View File

@@ -421,7 +421,7 @@ static u32 BattleFactory_GetBattleType(u8 challengeType)
u8 BattleFactory_GetPokemonLevel(BattleFactory *battleFactory)
{
if (battleFactory->unk_05 == 0) {
if (battleFactory->isOpenLevel == 0) {
return 50;
}

View File

@@ -1,154 +0,0 @@
#include "unk_0202FF4C.h"
#include <nitro.h>
#include <string.h>
#include "struct_defs/battle_frontier.h"
#include "struct_defs/struct_0202FF58.h"
#include "savedata.h"
void sub_0202FF4C(UnkStruct_0202FF58 *param0);
void BattleFactoryStreakFlags_Init(BattleFactoryStreakFlags *flags);
void BattleFactoryStreakFlags_SetFlag(BattleFactoryStreakFlags *flags, u8 field, u8 challengeType, u8 *value);
u32 BattleFactoryStreakFlags_GetFlag(BattleFactoryStreakFlags *flags, u8 field, u8 challengeType, void *unused);
BOOL sub_0202FF68(UnkStruct_0202FF58 *param0);
void sub_0202FF70(UnkStruct_0202FF58 *param0, BOOL param1);
void sub_0202FF84(UnkStruct_0202FF58 *param0, u8 field, u8 index, const void *value);
u32 sub_02030030(UnkStruct_0202FF58 *param0, u8 field, u8 index, void *unused);
void sub_0202FF4C(UnkStruct_0202FF58 *param0)
{
MI_CpuClear8(param0, sizeof(UnkStruct_0202FF58));
return;
}
UnkStruct_0202FF58 *sub_0202FF58(SaveData *saveData)
{
BattleFrontierSave *frontier = SaveData_SaveTable(saveData, SAVE_TABLE_ENTRY_FRONTIER);
return &frontier->unk_8E0_val2; // fetch the save file
}
BOOL sub_0202FF68(UnkStruct_0202FF58 *param0)
{
return param0->unk_00_4; // fetch 2nd :1
}
void sub_0202FF70(UnkStruct_0202FF58 *param0, BOOL param1)
{
param0->unk_00_4 = param1; // set 2nd :1
}
// set value
void sub_0202FF84(UnkStruct_0202FF58 *param0, u8 field, u8 index, const void *value)
{
u32 *v0 = (u32 *)value;
u16 *v1 = (u16 *)value;
u8 *v2 = (u8 *)value;
switch (field) {
case 0:
param0->unk_00_0 = v2[0];
break;
case 1:
param0->challengeType = v2[0];
break;
case 2:
param0->unk_01 = v2[0];
break;
case 3:
param0->trainerIDs[index] = v1[0];
break;
case 4:
param0->unk_20[index] = v1[0];
break;
case 5:
param0->playerIVs[index] = v2[0];
break;
case 6:
param0->playerPersonality[index] = v0[0];
break;
case 7:
param0->unk_3C[index] = v1[0];
break;
case 8:
param0->opponentIVs[index] = v2[0];
break;
case 9:
param0->opponentPersonality[index] = v0[0];
break;
}
}
// v7->challengeType = (u8)sub_02030030(v0, 1, 0, NULL);
// v7->unk_05 = (u8)sub_02030030(v0, 0, 0, NULL);
// v7->unk_06 = (u8)sub_02030030(v0, 2, 0, NULL);
// param0->trainerIDs[v0] = (u16)sub_02030030(param0->unk_4F4, 3, v0, NULL);
// get value
u32 sub_02030030(UnkStruct_0202FF58 *param0, u8 field, u8 index, void *unused)
{
switch (field) {
case 1:
return (u32)param0->challengeType;
case 0:
return (u32)param0->unk_00_0;
case 2:
return (u32)param0->unk_01;
case 3:
return (u32)param0->trainerIDs[index];
case 4:
return (u32)param0->unk_20[index];
case 5:
return (u32)param0->playerIVs[index];
case 6:
return (u32)param0->playerPersonality[index];
case 7:
return (u32)param0->unk_3C[index];
case 8:
return (u32)param0->opponentIVs[index];
case 9:
return (u32)param0->opponentPersonality[index];
default:
return 0;
}
}
void BattleFactoryStreakFlags_Init(BattleFactoryStreakFlags *flags)
{
MI_CpuClear8(flags, sizeof(BattleFactoryStreakFlags));
}
void BattleFactoryStreakFlags_SetFlag(BattleFactoryStreakFlags *flags, u8 field, u8 challengeType, u8 *value)
{
u8 *value_dupe = (u8 *)value;
switch (field) {
case FACTORY_SAVE_STREAK_FLAGS:
if (*value_dupe >= 1) {
flags->streakActiveFlags |= (1 << challengeType);
} else {
flags->streakActiveFlags &= (0xff ^ (1 << challengeType));
}
break;
default:
GF_ASSERT(FALSE);
break;
}
}
u32 BattleFactoryStreakFlags_GetFlag(BattleFactoryStreakFlags *flags, u8 field, u8 challengeType, void *unused)
{
switch (field) {
case FACTORY_SAVE_STREAK_FLAGS:
return (u32)((flags->streakActiveFlags >> challengeType) & 0x1);
default:
GF_ASSERT(FALSE);
break;
}
return FALSE;
}
BattleFactoryStreakFlags *BattleFactoryStreakFlags_Get(SaveData *saveData)
{
BattleFrontierSave *frontier = SaveData_SaveTable(saveData, SAVE_TABLE_ENTRY_FRONTIER);
return &frontier->factory.streakFlags;
}

View File

@@ -9,7 +9,7 @@
#include "battle_frontier_stats.h"
#include "field_script_context.h"
#include "inlines.h"
#include "unk_0202FF4C.h"
#include "battle_factory_save.h"
BOOL ScrCmd_2C5(ScriptContext *param0);