more documentation of save.c and some more mail info things

This commit is contained in:
Seth Barberee 2023-01-06 16:37:46 -08:00
parent 93370c9481
commit 6c6541f276
15 changed files with 151 additions and 168 deletions

View File

@ -1121,7 +1121,7 @@ _08000F5E:
.align 2, 0
_08000F64: .4byte 0x000f1209
_08000F68:
bl sub_809674C
bl GeneratePelipperJobs
bl sub_80961B4
bl sub_808ED00
adds r7, r4, 0

View File

@ -613,8 +613,8 @@ _0809650E:
bx r1
thumb_func_end sub_80964E4
thumb_func_start sub_8096514
sub_8096514:
thumb_func_start CountFilledPelipperBoardSlots
CountFilledPelipperBoardSlots:
push {r4,r5,lr}
movs r5, 0
movs r4, 0
@ -634,7 +634,7 @@ _0809652A:
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_8096514
thumb_func_end CountFilledPelipperBoardSlots
thumb_func_start sub_8096538
sub_8096538:

View File

@ -182,7 +182,7 @@ _0802E3FC:
movs r0, 0x5
str r0, [r1]
adds r0, r7, 0
bl sub_80968B0
bl IsMailinJobSlot
lsls r0, 24
cmp r0, 0
bne _0802E422

View File

@ -136,7 +136,7 @@ sub_802EC10:
str r0, [r1]
ldrb r0, [r2, 0x8]
bl GetPelliperBoardSlotInfo
bl sub_80968B0
bl IsMailinJobSlot
lsls r0, 24
cmp r0, 0
bne _0802EC40

View File

@ -1,3 +1,5 @@
#include "wonder_mail.h"
struct subStruct_203B490
{
// size: 0xC
@ -10,8 +12,8 @@ struct subStruct_203B490
struct unkStruct_203B490
{
// size: 0x330?
struct WonderMail mailboxSlots[4];
struct WonderMail pelliperBoardJobs[8];
/* 0x0 */ struct WonderMail mailboxSlots[4];
/* 0x50 */ struct WonderMail pelliperBoardJobs[8];
/* 0xF0 */ struct WonderMail jobSlots[8];
u8 unk190[0x28];
u8 unk1B8[0x78];

View File

@ -4,26 +4,7 @@
#include "code_8094F88.h"
#include "item.h"
#include "pokemon.h"
struct WonderMailStruct_203B2C0_sub
{
struct unkStruct_203B480 mail;
struct PokemonStruct pokemon;
};
struct unkStruct_802F204
{
/* 0x0 */ u8 clientName[POKEMON_NAME_LENGTH]; // client name?
/* 0xA */ u8 name2[POKEMON_NAME_LENGTH]; // target name?
/* 0x14 */ s16 unk14; // poke species (client??)
/* 0x16 */ u8 unk16;
/* 0x18 */ s32 moneyReward;
/* 0x1C */ u8 itemRewards[3]; // MAX_ITEM_REWARDS
/* 0x1F */ u8 numItems;
/* 0x20 */ u8 friendAreaReward;
u8 fill21[0x24 - 0x21];
/* 0x24 */ u32 teamRankPtsReward;
};
#include "wonder_mail.h"
struct WonderMailStruct_203B33C
{

View File

@ -7,6 +7,7 @@
#include "rescue_team_info.h"
#include "pokemon.h"
#include "item.h"
#include "code_80958E8.h"
enum
{
@ -27,20 +28,20 @@ struct UnkStruct_sub_8011DAC {
// size: 0x57D4
u8 fill000[0x4];
u8 unk004[0x400];
u8 unk404[0x10]; // has "POKE_DUNGEON__05"
u32 unk414;
u8 gameInternalName[0x10]; // has "POKE_DUNGEON__05"
u32 checksum;
u32 unk418;
u32 unk41C;
u32 RngState;
u32 savedRecruitedPokemon;
u32 unk428;
u8 fill42C[0x4];
u32 unk430;
u32 savedTeamInventory;
u32 savedRescueTeamInfo;
u32 savedFriendAreas;
u32 unk43C;
u32 unk440;
u32 unk444;
u32 savedMailInfo;
u8 unk448[0x538C];
};
@ -52,7 +53,7 @@ struct UnkStruct_203B184 {
/* 0xC */ u8 *unkC;
/* 0x10 */ u32 *unk10;
/* 0x14 */ u32 *unk14;
/* 0x18 */ u32 unk18;
/* 0x18 */ struct unkStruct_203B490 *mailInfo;
/* 0x1C */ struct RescueTeamData *RescueTeamInfo;
/* 0x20 */ u32 unk20;
/* 0x24 */ struct ExclusivePokemonData *ExclusivePokemon;
@ -75,7 +76,7 @@ u32 sub_8011C1C(void);
void sub_8011C28(u32 in);
s32 sub_8011C34(void);
void sub_8011C40(s32 in);
char *sub_8011C4C(void);
char *GetGameInternalName(void);
void sub_8011CA8(u32 *out, s32 size);
u32 ReadSaveFromPak(u32 *a);
u32 WriteSavetoPak(s32 *param_1, u32 param_2);

View File

@ -25,7 +25,7 @@ extern void LoadGameOptions(void);
extern void SetWindowBGColor(void);
extern void LoadItemParameters(void);
extern void sub_80950BC(void);
extern void sub_80958E8(void);
extern void LoadMailInfo(void);
extern void sub_800CD64(u32, u32);
extern void SetWindowTitle(char *);
extern void sub_800DAAC(void);
@ -41,7 +41,7 @@ extern void sub_800CDA8(u32);
extern void LoadTitleScreen(void);
extern void SetBGPaletteBufferColorRGB(s32, u8 *, s32, u8 *);
extern void sub_80095CC(u32, u32);
extern s32 sub_80953D4(u32);
extern s32 sub_80953D4(u8);
extern void sub_8095240(u8);
extern void nullsub_33(void);
extern u32 sub_80009D0(u32);
@ -93,7 +93,7 @@ void GameLoop(void)
LoadRescueTeamInfo();
LoadWazaParameters();
sub_80950BC();
sub_80958E8();
LoadMailInfo();
sub_800CD64(0x8000, 0);
sub_8012284();
InitializeGameOptions(TRUE);

View File

@ -27,12 +27,12 @@ extern bool8 ValidateWonderMail(struct WonderMail *);
extern struct unkStruct_203B490 *gUnknown_203B490;
extern struct unkStruct_203B490 gUnknown_2039448;
void sub_80958E8()
void LoadMailInfo(void)
{
gUnknown_203B490 = &gUnknown_2039448;
}
struct unkStruct_203B490 *sub_80958F8(void)
struct unkStruct_203B490 *GetMailInfo(void)
{
return &gUnknown_2039448;
}

View File

@ -1,8 +1,8 @@
#include "global.h"
#include "constants/dungeon.h"
#include "constants/species.h"
#include "constants/wonder_mail.h"
#include "item.h"
#include "wonder_mail.h"
#include "code_80958E8.h"
#include "team_inventory.h"
#include "random.h"
@ -23,12 +23,12 @@ extern void ResetJobSlot(u8);
extern void sub_8096C80(void);
extern void sub_8096D24(void);
extern void sub_80965F4();
extern void sub_8096698();
extern void SortPelipperJobs();
extern struct WonderMail *GetPelliperBoardSlotInfo(u8);
u8 sub_8097318(s16 param_1);
extern u8 sub_8095B28(struct WonderMail *);
void sub_8096698(void)
void SortPelipperJobs(void)
{
s32 index1;
s32 index2;
@ -39,7 +39,7 @@ void sub_8096698(void)
{
for(index2 = index1 + 1; index2 < 8; index2++)
{
if(gUnknown_203B490->pelliperBoardJobs[index2].mailType != 0)
if(gUnknown_203B490->pelliperBoardJobs[index2].mailType != WONDER_MAIL_TYPE_NONE)
{
if((gUnknown_203B490->pelliperBoardJobs[index1].dungeon.dungeonIndex > gUnknown_203B490->pelliperBoardJobs[index2].dungeon.dungeonIndex) ||
((gUnknown_203B490->pelliperBoardJobs[index1].dungeon.dungeonIndex == gUnknown_203B490->pelliperBoardJobs[index2].dungeon.dungeonIndex) && (gUnknown_203B490->pelliperBoardJobs[index1].dungeon.dungeonFloor > gUnknown_203B490->pelliperBoardJobs[index2].dungeon.dungeonFloor)))
@ -53,7 +53,7 @@ void sub_8096698(void)
}
}
void sub_809674C(void)
void GeneratePelipperJobs(void)
{
s32 range;
struct WonderMail *mail;
@ -62,7 +62,7 @@ void sub_809674C(void)
range = RandomRange(4,8);
for(index = 0; index < 8; index++)
{
gUnknown_203B490->pelliperBoardJobs[index].mailType = 0;
gUnknown_203B490->pelliperBoardJobs[index].mailType = WONDER_MAIL_TYPE_NONE;
}
index = 0;
@ -122,10 +122,10 @@ void sub_809674C(void)
gUnknown_203B490->pelliperBoardJobs[index].rewardType = RandomRange(MONEY, BLANK_4);
}
sub_80965F4();
sub_8096698();
SortPelipperJobs();
}
bool8 sub_80968B0(struct WonderMail *mail)
bool8 IsMailinJobSlot(struct WonderMail *mail)
{
struct WonderMail *jobSlot;
s32 index;
@ -279,7 +279,7 @@ void sub_8096AF8(struct unkStruct_8096AF8 *param_1, u8 slotIndex,u8 dungeon)
jobSlot = GetJobSlotInfo(slotIndex);
param_1->unk0 = FALSE;
param_1->clientSpecies = jobSlot->clientSpecies;
param_1->targetSpecies = 0;
param_1->targetSpecies = SPECIES_NONE;
if (jobSlot->dungeon.dungeonIndex == dungeon) {
switch(jobSlot->missionType) {
case WONDER_MAIL_MISSION_TYPE_FIND_ITEM:

View File

@ -10,7 +10,7 @@ extern void SaveDungeonLocation(struct unkStruct_8094924*, struct DungeonLocatio
extern void RestoreDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*);
extern void sub_80015C0(u32, u32);
extern u32 sub_8001784(u32, u32, u16);
extern void sub_809674C();
extern void GeneratePelipperJobs(void);
extern void sub_800199C(u32, s32, u32, s32);
bool8 sub_8096F50(struct WonderMail *mail)
@ -34,7 +34,7 @@ bool8 sub_8096F50(struct WonderMail *mail)
return FALSE;
}
u32 sub_8096FA0(u8 *r0, u32 size)
u32 RestoreMailInfo(u8 *r0, u32 size)
{
s32 index;
struct unkStruct_8094924 backup;
@ -79,7 +79,7 @@ u32 sub_8096FA0(u8 *r0, u32 size)
return backup.unk8;
}
u32 sub_80970D8(u8 *r0, u32 size)
u32 SaveMailInfo(u8 *r0, u32 size)
{
s32 index;
struct unkStruct_8094924 backup;
@ -199,7 +199,7 @@ void sub_809733C(short param_1,u32 param_2)
case 0xE:
case 0xF:
case 0x1C:
sub_809674C();
GeneratePelipperJobs();
break;
}
}

View File

@ -69,7 +69,7 @@ extern void sub_80015C0(u8, u8);
extern void sub_80018D8(u8, u8, u32);
extern void sub_800199C(u8, u8, u8, s32);
extern void sub_8098CC8();
extern void sub_809674C();
extern void GeneratePelipperJobs();
extern void sub_80961B4();
extern void ClearAllItems_8091FB4();
extern const char *sub_80A2B18(s16);
@ -180,7 +180,7 @@ void sub_8098CC8(void)
temp = 3;
}
ChooseKecleonShopInventory(temp);
sub_809674C();
GeneratePelipperJobs();
sub_80961B4();
ClearAllItems_8091FB4();
}

View File

@ -20,8 +20,8 @@ struct unk_struct
{
// size: 0x800
u32 unk0;
u8 unk4[0x10]; // has "POKE_DUNGEON__05
u32 unk14;
u8 gameInternalName[0x10]; // has "POKE_DUNGEON__05
u32 checksum;
u32 unk18;
u32 dungeonLocation;
u32 unk20;
@ -80,7 +80,6 @@ extern u8 *gUnknown_203B480;
extern u8 *gUnknown_203B484;
extern u32 *gUnknown_203B488;
extern u32 *gUnknown_203B48C;
extern u32 gUnknown_203B490;
extern u32 gUnknown_203B494;
ALIGNED(4) const char PokeDungeon_Text[] = _("POKE_DUNGEON__05");
@ -162,8 +161,8 @@ extern u32 *sub_8095110(void);
extern void sub_8095118(void);
extern u32 sub_80954CC(void* a, s32 b);
extern u32 sub_8095624(u8 *, u32);
extern u32 sub_8096FA0(void* a, s32 b);
extern u32 sub_80970D8(u8 *, u32);
extern u32 RestoreMailInfo(void* a, s32 b);
extern u32 SaveMailInfo(u8 *, u32);
extern void sub_80976A8();
extern u32 sub_8097D60(u8 *, u32);
extern u32 sub_8097D98(void* a, s32 b);
@ -171,7 +170,7 @@ extern void sub_80993E4();
extern void sub_800135C(void);
extern u8 *sub_80950F8(void);
extern void sub_80958E4(u32 *a, u32 b);
extern u32 sub_80958F8(void);
extern struct unkStruct_203B490 *GetMailInfo(void);
extern void InitializeMailJobsNews(void);
extern void sub_80972F4(void);
extern u32 sub_8097680(void);
@ -203,7 +202,7 @@ void sub_8011C40(s32 in)
gUnknown_202DE28 = in;
}
char *sub_8011C4C(void)
char *GetGameInternalName(void)
{
return gUnknown_203B180; // returns POKE_DUNGEON__05
}
@ -253,14 +252,14 @@ void sub_8011CA8(u32 *out, s32 size)
u32 WriteSaveSector(s32 *a, u8 *src, s32 size)
{
u32 r1;
s32 r6 = *a;
s32 sector = *a;
sub_8011CA8(a, size);
CalculateChecksum(src, size);
if (gUnknown_203B184 == NULL) {
r1 = WriteFlashData(r6, src, size);
r1 = WriteFlashData(sector, src, size);
}
else if (sub_800DAB8()) {
if (!sub_800DAB4(r6, src, size)) {
if (!sub_800DAB4(sector, src, size)) {
r1 = 3;
}
else {
@ -268,27 +267,27 @@ u32 WriteSaveSector(s32 *a, u8 *src, s32 size)
}
}
else {
return 2;
return SAVE_FAILED;
}
if (r1 == 4) {
return 1;
return SAVE_NOT_WRTTEN;
}
if (r1) {
return 2;
return SAVE_FAILED;
}
return 0;
return SAVE_COMPLETED;
}
u32 ReadSaveSector(s32 *a, u8 *dest, s32 size)
{
u32 r1;
s32 r6 = *a;
s32 sector = *a;
sub_8011CA8(a, size);
if (gUnknown_203B184 == NULL) {
r1 = ReadFlashData(r6, dest, size);
r1 = ReadFlashData(sector, dest, size);
}
else if (sub_800DAB8()) {
if (!sub_800DAB0(r6, dest, size)) {
if (!sub_800DAB0(sector, dest, size)) {
r1 = 1;
}
else {
@ -315,92 +314,92 @@ bool8 sub_8011DA8(void)
u32 ReadSaveFromPak(u32 *a)
{
struct UnkStruct_sub_8011DAC *r5 = MemoryAlloc(sizeof(struct UnkStruct_sub_8011DAC), 5);
u8 *r4 = (u8*)r5->unk448;
u32 r7 = ReadSaveSector(a, (u8*)r5, sizeof(struct UnkStruct_sub_8011DAC));
struct UnkStruct_sub_8011DAC *playerSave = MemoryAlloc(sizeof(struct UnkStruct_sub_8011DAC), 5);
u8 *r4 = playerSave->unk448;
u32 saveStatus = ReadSaveSector(a, (u8*)playerSave, sizeof(struct UnkStruct_sub_8011DAC));
u32 r1;
if (r7)
if (saveStatus)
{
r7 = ReadSaveSector(a, (u8*)r5, sizeof(struct UnkStruct_sub_8011DAC));
saveStatus = ReadSaveSector(a, (u8*)playerSave, sizeof(struct UnkStruct_sub_8011DAC));
}
else
{
sub_8011CA8(a, sizeof(struct UnkStruct_sub_8011DAC));
}
if (!r7)
if (!saveStatus)
{
if (r5->unk414 != 0x5071412) {
r7 = 4;
if (playerSave->checksum != 0x5071412) {
saveStatus = 4;
}
}
if (!r7)
if (!saveStatus)
{
if (gUnknown_203B184 == NULL) {
sub_8011C28(r5->unk41C);
sub_8011C40(r5->unk418);
SetRngState(r5->RngState);
sub_8011C28(playerSave->unk41C);
sub_8011C40(playerSave->unk418);
SetRngState(playerSave->RngState);
}
else {
gUnknown_203B184->unk054 = r5->unk41C;
gUnknown_203B184->unk050 = r5->unk418;
gUnknown_203B184->RngState = r5->RngState;
gUnknown_203B184->unk054 = playerSave->unk41C;
gUnknown_203B184->unk050 = playerSave->unk418;
gUnknown_203B184->RngState = playerSave->RngState;
}
}
if (!r7)
if (!saveStatus)
{
if (gUnknown_203B184 == NULL) {
if (!sub_8002718(r5->unk004)) {
r7 = 4;
if (!sub_8002718(playerSave->unk004)) {
saveStatus = 4;
}
}
else {
MemoryCopy8(gUnknown_203B184->unk04C, r5->unk004, ARRAY_COUNT(r5->unk004));
MemoryCopy8(gUnknown_203B184->unk04C, playerSave->unk004, ARRAY_COUNT(playerSave->unk004));
}
}
if (!r7)
if (!saveStatus)
{
r1 = RestoreRecruitedPokemon(r4, 0x4650);
if (r1 != r5->savedRecruitedPokemon) {
r7 = 3;
if (r1 != playerSave->savedRecruitedPokemon) {
saveStatus = 3;
}
r4 += 0x4650;
r1 = RestorePokemonStruct2(r4, 0x258);
if (r1 != r5->unk428) {
r7 = 3;
if (r1 != playerSave->unk428) {
saveStatus = 3;
}
r4 += 0x258;
r1 = RestoreTeamInventory(r4, 0x1D8);
if (r1 != r5->unk430) {
r7 = 3;
if (r1 != playerSave->savedTeamInventory) {
saveStatus = 3;
}
r4 += 0x1d8;
r1 = ReadRescueTeamInfo(r4, 0x10);
if (r1 != r5->savedRescueTeamInfo) {
r7 = 3;
if (r1 != playerSave->savedRescueTeamInfo) {
saveStatus = 3;
}
r4 += 0x10;
r1 = ReadSavedFriendAreas(r4, 0x8);
if (r1 != r5->savedFriendAreas) {
r7 = 3;
if (r1 != playerSave->savedFriendAreas) {
saveStatus = 3;
}
r4 += 0x8;
r1 = sub_8097D98(r4, 0x100);
if (r1 != r5->unk43C) {
r7 = 3;
if (r1 != playerSave->unk43C) {
saveStatus = 3;
}
r4 += 0x100;
r1 = sub_80954CC(r4, 0x594);
if (r1 != r5->unk440) {
r7 = 3;
if (r1 != playerSave->unk440) {
saveStatus = 3;
}
r4 += 0x594;
r1 = sub_8096FA0(r4, 0x221);
if (r1 != r5->unk444) {
r7 = 3;
r1 = RestoreMailInfo(r4, 0x221);
if (r1 != playerSave->savedMailInfo) {
saveStatus = 3;
}
}
MemoryFree(r5);
return r7;
MemoryFree(playerSave);
return saveStatus;
}
u32 sub_8011F9C(s32 *r0, u8 *dest, s32 size)
@ -410,21 +409,21 @@ u32 sub_8011F9C(s32 *r0, u8 *dest, s32 size)
u32 sub_8011FA8(void)
{
u32 temp2;
u32 saveStatus;
u32 temp3;
u32 temp;
struct unk_struct *r5 = MemoryAlloc(sizeof(struct unk_struct), 5);
temp = 0x1F;
temp2 = ReadSaveSector(&temp, (u8 *)r5, sizeof(struct unk_struct));
if( temp2 == READ_SAVE_VALID)
saveStatus = ReadSaveSector(&temp, (u8 *)r5, sizeof(struct unk_struct));
if( saveStatus == READ_SAVE_VALID)
{
if(r5->unk14 != 0x5071412)
if(r5->checksum != 0x5071412)
{
temp2 = 4;
saveStatus = 4;
}
}
temp3 = 0xf1209;
if(temp2 == READ_SAVE_VALID)
if(saveStatus == READ_SAVE_VALID)
{
temp3 = r5->unk18;
}
@ -441,7 +440,7 @@ bool8 IsSaveCorrupted(void)
isCorrupted = FALSE;
if(ReadSaveSector(&temp, (u8 *)r5, sizeof(struct unk_struct)) == READ_SAVE_VALID)
{
if(r5->unk14 == 0x5071412)
if(r5->checksum == 0x5071412)
{
isCorrupted = TRUE;
}
@ -452,58 +451,58 @@ bool8 IsSaveCorrupted(void)
u32 WriteSavetoPak(s32 *param_1, u32 param_2)
{
struct UnkStruct_sub_8011DAC *iVar1;
char *__src;
int r5;
int r4;
struct UnkStruct_sub_8011DAC *playerSave;
char *gameName;
int saveStatus1;
int saveStatus2;
u8 *array_ptr;
iVar1 = MemoryAlloc(sizeof(struct UnkStruct_sub_8011DAC),5);
array_ptr = iVar1->unk448;
playerSave = MemoryAlloc(sizeof(struct UnkStruct_sub_8011DAC),5);
array_ptr = playerSave->unk448;
if (gUnknown_203B184 == NULL) {
iVar1->unk41C = param_2;
iVar1->unk418 = sub_8011C34();
iVar1->RngState = GetRngState();
playerSave->unk41C = param_2;
playerSave->unk418 = sub_8011C34();
playerSave->RngState = GetRngState();
}
else {
iVar1->unk41C = gUnknown_203B184->unk054;
iVar1->unk418 = gUnknown_203B184->unk050;
iVar1->RngState = gUnknown_203B184->RngState;
playerSave->unk41C = gUnknown_203B184->unk054;
playerSave->unk418 = gUnknown_203B184->unk050;
playerSave->RngState = gUnknown_203B184->RngState;
}
iVar1->unk414 = 0x5071412;
__src = sub_8011C4C();
strncpy(iVar1->unk404,__src, ARRAY_COUNT(iVar1->unk404));
playerSave->checksum = 0x5071412;
gameName = GetGameInternalName();
strncpy(playerSave->gameInternalName,gameName, ARRAY_COUNT(playerSave->gameInternalName));
if (gUnknown_203B184 == NULL) {
sub_8002700(iVar1->unk004);
sub_8002700(playerSave->unk004);
}
else {
MemoryCopy8(iVar1->unk004,gUnknown_203B184->unk04C,ARRAY_COUNT(iVar1->unk004));
MemoryCopy8(playerSave->unk004,gUnknown_203B184->unk04C,ARRAY_COUNT(playerSave->unk004));
}
iVar1->savedRecruitedPokemon = SaveRecruitedPokemon(array_ptr,0x4650);
playerSave->savedRecruitedPokemon = SaveRecruitedPokemon(array_ptr,0x4650);
array_ptr += 0x4650;
iVar1->unk428 = SavePokemonStruct2(array_ptr,0x258);
playerSave->unk428 = SavePokemonStruct2(array_ptr,0x258);
array_ptr += 0x258;
iVar1->unk430 = SaveTeamInventory(array_ptr,0x1D8);
playerSave->savedTeamInventory = SaveTeamInventory(array_ptr,0x1D8);
array_ptr += 0x1D8;
iVar1->savedRescueTeamInfo = SaveRescueTeamInfo(array_ptr,0x10);
playerSave->savedRescueTeamInfo = SaveRescueTeamInfo(array_ptr,0x10);
array_ptr += 0x10;
iVar1->savedFriendAreas = SaveFriendAreas(array_ptr,8);
playerSave->savedFriendAreas = SaveFriendAreas(array_ptr,8);
array_ptr += 8;
iVar1->unk43C = sub_8097D60(array_ptr,0x100);
playerSave->unk43C = sub_8097D60(array_ptr,0x100);
array_ptr += 0x100;
iVar1->unk440 = sub_8095624(array_ptr,0x594);
playerSave->unk440 = sub_8095624(array_ptr,0x594);
array_ptr += 0x594;
iVar1->unk444 = sub_80970D8(array_ptr,0x221);
playerSave->savedMailInfo = SaveMailInfo(array_ptr,0x221);
r5 = WriteSaveSector(param_1,(u8 *)iVar1,sizeof(struct UnkStruct_sub_8011DAC));
r4 = WriteSaveSector(param_1,(u8 *)iVar1,sizeof(struct UnkStruct_sub_8011DAC));
MemoryFree(iVar1);
saveStatus1 = WriteSaveSector(param_1,(u8 *)playerSave,sizeof(struct UnkStruct_sub_8011DAC));
saveStatus2 = WriteSaveSector(param_1,(u8 *)playerSave,sizeof(struct UnkStruct_sub_8011DAC));
MemoryFree(playerSave);
if (r5 != SAVE_COMPLETED)
return r5;
if (r4 != SAVE_COMPLETED)
return r4;
if (saveStatus1 != SAVE_COMPLETED)
return saveStatus1;
if (saveStatus2 != SAVE_COMPLETED)
return saveStatus2;
return SAVE_COMPLETED;
}
@ -517,36 +516,36 @@ s32 sub_80121D4(s32 *a, u8 *src, s32 size)
u32 sub_80121E0(u32 r0)
{
u32 temp;
char *string;
u32 temp3;
char *gameName;
u32 saveStatus;
struct unk_struct *r4 = MemoryAlloc(sizeof(struct unk_struct), 5);
temp = 0x1F;
r4->unk18 = r0;
r4->dungeonLocation = *GetDungeonLocationInfo();
r4->unk14 = 0x5071412;
r4->checksum = 0x5071412;
string = sub_8011C4C();
strncpy(r4->unk4, string, ARRAY_COUNT(r4->unk4));
gameName = GetGameInternalName();
strncpy(r4->gameInternalName, gameName, ARRAY_COUNT(r4->gameInternalName));
sub_80958E4(&r4->unk20, 0);
temp3 = WriteSaveSector(&temp, (u8 *)r4, sizeof(struct unk_struct));
saveStatus = WriteSaveSector(&temp, (u8 *)r4, sizeof(struct unk_struct));
MemoryFree(r4);
return temp3;
return saveStatus;
}
u32 sub_8012240(void)
{
s32 temp;
s32 status;
struct unk_struct *r5 = MemoryAlloc(sizeof(struct unk_struct), 5);
MemoryFill8((u8 *)r5, 0xFF, 0x4);
sub_8011830();
temp = WriteFlashData(0x1F, (u8 *)r5, sizeof(struct unk_struct));
status = WriteFlashData(0x1F, (u8 *)r5, sizeof(struct unk_struct));
xxx_call_start_bg_music();
MemoryFree(r5);
if(temp != 0)
return 2;
if(status != 0)
return SAVE_FAILED;
else
return 0;
return SAVE_COMPLETED;
}
void sub_8012284(void)
@ -624,7 +623,7 @@ void sub_8012334(struct UnkStruct_203B184 *r0)
gUnknown_203B484 = r0->unkC;
gUnknown_203B488 = r0->unk10;
gUnknown_203B48C = r0->unk14;
gUnknown_203B490 = r0->unk18;
gUnknown_203B490 = r0->mailInfo;
gRescueTeamInfoRef = r0->RescueTeamInfo;
gUnknown_203B494 = r0->unk20;
gUnknown_203B498 = r0->ExclusivePokemon;
@ -639,7 +638,7 @@ void sub_8012334(struct UnkStruct_203B184 *r0)
gUnknown_203B484 = sub_8095100();
gUnknown_203B488 = sub_8095108();
gUnknown_203B48C = sub_8095110();
gUnknown_203B490 = sub_80958F8();
gUnknown_203B490 = GetMailInfo();
gRescueTeamInfoRef = GetRescueTeamInfo();
gUnknown_203B494 = sub_8097680();
gUnknown_203B498 = GetExclusivePokemon();

View File

@ -28,7 +28,7 @@ extern s32 sub_8013800(u32 *, s32);
extern struct WonderMail *GetPelliperBoardSlotInfo(u32);
extern void sub_803B35C(struct WonderMail *, u32 *);
extern u8 gBulletinBoardText[];
extern u8 sub_80968B0(struct WonderMail *);
extern bool8 IsMailinJobSlot(struct WonderMail *);
extern void CreateRescueTitle(void *);
extern void xxx_call_draw_string(s32, s32, u8 *, s32, s32);
extern void sub_8012BC4(s32, s32, s32, s32 ,s32 ,s32);
@ -132,7 +132,7 @@ void CreateMailMenu(void)
}
else {
sub_803B35C(mail,local.unk0);
if (sub_80968B0(mail) != 0) {
if (IsMailinJobSlot(mail)) {
local.unk3C[11] = 2;
}
CreateRescueTitle(&local);
@ -352,7 +352,7 @@ void sub_802C39C(void)
local.unk0[0] = gUnknown_203B2E0->unk3C;
local.unk4C = sub_8013800(&gUnknown_203B2E0->unk8,iVar6);
sub_803B35C(mail,local.unk0);
if (sub_80968B0(GetPelliperBoardSlotInfo(uVar1)) != '\0') {
if (IsMailinJobSlot(GetPelliperBoardSlotInfo(uVar1))) {
local.unk3C[11] = 2;
}
CreateRescueTitle(&local);

View File

@ -122,7 +122,7 @@ extern void sub_802D1B8();
extern void sub_802D2A8();
extern u8 sub_80968B0(struct WonderMail *);
extern bool8 IsMailinJobSlot(struct WonderMail *);
extern u8 sub_8096F50(struct WonderMail *);
extern u8 sub_802DAA8(void);
extern u8 sub_802DADC(void);
@ -297,7 +297,7 @@ void sub_802D2A8(void)
switch(gUnknown_203B2F8->state) {
case 0:
if (sub_80968B0(&gUnknown_203B2F8->unkC->wonderMail) != 0) {
if (IsMailinJobSlot(&gUnknown_203B2F8->unkC->wonderMail)) {
sub_802D1A0(3);
}
else if (sub_8096F50(&gUnknown_203B2F8->unkC->wonderMail) != 0) {