summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorDiegoisawesome <Diegoisawesome@users.noreply.github.com>2018-05-30 16:51:30 -0700
committerGitHub <noreply@github.com>2018-05-30 16:51:30 -0700
commitdd28854a226753e2da53b35dcf1f67b142b75b77 (patch)
tree61864daf48aad5dfcf697c36e8acac88ce9f4d4c /include
parentf6350bc00373dc824a02522b6c6c9e4695534884 (diff)
parent42731e4b88115bada3aed8ebc3b2c3dabecbb020 (diff)
Merge pull request #255 from DizzyEggg/decomp_record_mixing
Fix pika's Record Mixing PR Also closes #107.
Diffstat (limited to 'include')
-rw-r--r--include/battle_tower.h25
-rw-r--r--include/cable_club.h13
-rw-r--r--include/field_screen.h1
-rw-r--r--include/fldeff_80F9BCC.h2
-rw-r--r--include/global.h137
-rw-r--r--include/lilycove_lady.h2
-rw-r--r--include/link.h9
-rw-r--r--include/link_rfu.h1
-rw-r--r--include/mauville_old_man.h9
-rw-r--r--include/pokemon.h27
-rw-r--r--include/record_mixing.h35
-rw-r--r--include/save.h3
-rw-r--r--include/secret_base.h2
-rw-r--r--include/strings.h2
-rw-r--r--include/tv.h8
15 files changed, 222 insertions, 54 deletions
diff --git a/include/battle_tower.h b/include/battle_tower.h
index 25b439c1b..9d4553132 100644
--- a/include/battle_tower.h
+++ b/include/battle_tower.h
@@ -1,6 +1,31 @@
#ifndef GUARD_BATTLE_TOWER_H
#define GUARD_BATTLE_TOWER_H
+struct RSBattleTowerRecord
+{
+ /*0x00*/ u8 battleTowerLevelType; // 0 = level 50, 1 = level 100
+ /*0x01*/ u8 trainerClass;
+ /*0x02*/ u16 winStreak;
+ /*0x04*/ u8 name[8];
+ /*0x0C*/ u8 trainerId[4];
+ /*0x10*/ struct {
+ u16 easyChat[6];
+ } greeting;
+ /*0x1C*/ struct UnknownPokemonStruct party[3];
+ /*0xA0*/ u32 checksum;
+ /*0xA4*/ u16 unk_11c8;
+};
+
+union BattleTowerRecord
+{
+ struct RSBattleTowerRecord ruby_sapphire;
+ struct EmeraldBattleTowerRecord emerald;
+};
+
u16 sub_8164FCC(u8, u8);
+void sub_81659DC(struct RSBattleTowerRecord *a0, struct RSBattleTowerRecord *a1);
+bool32 sub_816587C(union BattleTowerRecord *, union BattleTowerRecord *);
+void CalcEmeraldBattleTowerChecksum(struct EmeraldBattleTowerRecord *);
+void sub_81628A0(union BattleTowerRecord *);
#endif //GUARD_BATTLE_TOWER_H
diff --git a/include/cable_club.h b/include/cable_club.h
new file mode 100644
index 000000000..44831235c
--- /dev/null
+++ b/include/cable_club.h
@@ -0,0 +1,13 @@
+#ifndef GUARD_CABLE_CLUB_H
+#define GUARD_CABLE_CLUB_H
+
+// Exported type declarations
+
+// Exported RAM declarations
+
+// Exported ROM declarations
+
+void sub_80B37D4(TaskFunc taskFunc);
+u8 sub_80B3050(void);
+
+#endif //GUARD_CABLE_CLUB_H
diff --git a/include/field_screen.h b/include/field_screen.h
index 2eea5b505..d9a2bb5fa 100644
--- a/include/field_screen.h
+++ b/include/field_screen.h
@@ -9,6 +9,7 @@
void pal_fill_black(void);
bool8 IsWeatherNotFadingIn(void);
void sub_80AF168(void);
+void sub_80AF2B4(u8 taskId);
void UpdateWeatherPerDay(u16 days);
void sub_80AC3D0(void);
void sub_80AC3E4(void);
diff --git a/include/fldeff_80F9BCC.h b/include/fldeff_80F9BCC.h
index 84015065e..ba775cd6d 100644
--- a/include/fldeff_80F9BCC.h
+++ b/include/fldeff_80F9BCC.h
@@ -9,6 +9,8 @@
void sub_80FA5E4(s16 id, s16 x, s16 y);
void sub_80FA794(s16 x, s16 y);
+void CreateRecordMixingSprite(void);
+void DestroyRecordMixingSprite(void);
void overworld_poison_effect(void);
bool8 sub_80FADE4(u16, u8);
diff --git a/include/global.h b/include/global.h
index 46413b197..f9e0aa66e 100644
--- a/include/global.h
+++ b/include/global.h
@@ -103,6 +103,8 @@ enum LanguageId
#define VARS_COUNT 256
#define MAIL_COUNT 16
#define SECRET_BASES_COUNT 20
+#define TV_SHOWS_COUNT 25
+#define POKE_NEWS_COUNT 16
#define PC_ITEMS_COUNT 50
#define BAG_ITEMS_COUNT 30
#define BAG_KEYITEMS_COUNT 30
@@ -256,6 +258,56 @@ struct UnknownSaveBlock2Struct
u8 field_EB;
}; // sizeof = 0xEC
+struct UnkRecordMixingStruct
+{
+ u8 field_0[0x34];
+ u8 playerId[4];
+ u8 field_38[10];
+};
+
+struct UnknownPokemonStruct
+{
+ u16 species;
+ u16 heldItem;
+ u16 moves[4];
+ u8 level;
+ u8 ppBonuses;
+ u8 hpEV;
+ u8 attackEV;
+ u8 defenseEV;
+ u8 speedEV;
+ u8 spAttackEV;
+ u8 spDefenseEV;
+ u32 otId;
+ u32 hpIV:5;
+ u32 attackIV:5;
+ u32 defenseIV:5;
+ u32 speedIV:5;
+ u32 spAttackIV:5;
+ u32 spDefenseIV:5;
+ u32 gap:1;
+ u32 altAbility:1;
+ u32 personality;
+ u8 nickname[POKEMON_NAME_LENGTH + 1];
+ u8 friendship;
+};
+
+struct EmeraldBattleTowerRecord
+{
+ /*0x00*/ u8 battleTowerLevelType; // 0 = level 50, 1 = level 100
+ /*0x01*/ u8 trainerClass;
+ /*0x02*/ u16 winStreak;
+ /*0x04*/ u8 name[8];
+ /*0x0C*/ u8 trainerId[4];
+ /*0x10*/ struct {
+ u16 easyChat[6];
+ } greeting;
+ /*0x1C*/ u8 filler_1c[0x18];
+ /*0x34*/ struct UnknownPokemonStruct party[4];
+ /*0xE4*/ u8 language;
+ /*0xE8*/ u32 checksum;
+};
+
struct SaveBlock2
{
/*0x00*/ u8 playerName[PLAYER_NAME_LENGTH];
@@ -281,7 +333,12 @@ struct SaveBlock2
/*0xAC*/ u32 encryptionKey;
// TODO: fix and verify labels
- /*0xB0*/ u8 field_B0[316];
+ /*0xB0*/ u8 field_B0;
+ /*0xB1*/ u8 field_B1;
+ /*0xB2*/ u8 field_B2_0:3;
+ /*0xB2*/ u8 field_B2_1:2;
+ /*0xB3*/ u8 field_B3[0x29];
+ /*0xDC*/ struct UnkRecordMixingStruct field_DC[4];
/*0x1EC*/ struct BerryCrush berryCrush;
/*0x1FC*/ struct PokemonJumpResults pokeJump;
/*0x20C*/ struct BerryPickingResults berryPick;
@@ -290,7 +347,7 @@ struct SaveBlock2
// All below could be a one giant struct
- /*0x64C*/ u8 field_64C[236];
+ /*0x64C*/ struct EmeraldBattleTowerRecord battleTower;
/*0x738*/ struct UnknownSaveBlock2Struct field_738[5]; // No idea here, it's probably wrong, no clue.
/*0xBD4*/ u16 field_BD4;
/*0xBD6*/ u16 field_BD6;
@@ -307,22 +364,64 @@ struct SaveBlock2
/*0xCA9*/ u8 field_CA9_f : 1; // 0x80
/*0xCAA*/ u16 field_CAA[4];
/*0xCB2*/ u16 battlePyramidWildHeaderId;
- /*0xCB4*/ u16 field_CB4[41];
+ /*0xCB4*/ u16 field_CB4[30];
+ /*0xCF0*/ u16 field_CF0[2];
+ /*0xCF4*/ u16 field_CF4[2];
+ /*0xCF8*/ u16 field_CF8[2];
+ /*0xCFC*/ u16 field_CFC[5];
/*0xD06*/ u8 field_D06;
/*0xD07*/ u8 field_D07;
- /*0xD08*/ u8 filler_D08[0x112];
+ /*0xD08*/ u8 filler_D08;
+ /*0xD09*/ u8 filler_D09;
+ /*0xD0A*/ u8 filler_D0A;
+ /*0xD0B*/ u8 filler_D0B;
+ /*0xD0C*/ u8 filler_D0C;
+ /*0xD0D*/ u8 filler_D0D;
+ /*0xD0E*/ u8 filler_D0E;
+ /*0xD0F*/ u8 filler_D0F;
+ /*0xD10*/ u8 filler_D10;
+ /*0xD11*/ u8 filler_D11;
+ /*0xD12*/ u8 filler_D12;
+ /*0xD13*/ u8 filler_D13;
+ /*0xD14*/ u16 field_D14[2];
+ /*0xD18*/ u8 field_D18[0xB8];
+ /*0xDD0*/ u16 field_DD0[2];
+ /*0xDD4*/ u16 field_DD4[2];
+ /*0xDD8*/ u16 field_DD8;
+ /*0xDDA*/ u16 field_DDA;
+ /*0xDDC*/ u16 field_DDC;
+ /*0xDDE*/ u16 field_DDE[2];
+ /*0xDE2*/ u16 field_DE2;
+ /*0xDE4*/ u16 field_DE4;
+ /*0xDE6*/ u16 field_DE6;
+ /*0xDE8*/ u16 field_DE8;
+ /*0xDEA*/ u16 field_DEA[2];
+ /*0xDEE*/ u16 field_DEE;
+ /*0xDF0*/ u16 field_DF0;
+ /*0xDF2*/ u16 field_DF2;
+ /*0xDF4*/ u16 field_DF4;
+ /*0xDF6*/ u16 field_DF6;
+ /*0xDF8*/ u16 field_DF8;
+ /*0xDFA*/ u16 field_DFA;
+ /*0xDFC*/ u16 field_DFC;
+ /*0xDFE*/ u16 field_DFE;
+ /*0xE00*/ u16 field_E00;
+ /*0xE02*/ u16 field_E02;
+ /*0xE04*/ u16 field_E04;
+ /*0xE06*/ u16 field_E06;
+ /*0xE08*/ u16 field_E08[9];
/*0xE1A*/ u16 battlePyramidFloor; // possibly?
- /*0xE1C*/ u8 field_E1C[16];
+ /*0xE1C*/ u16 field_E1C;
+ /*0xE1E*/ u16 field_E1E[7];
/*0xE2C*/ struct PyramidBag pyramidBag;
/*0x???*/ u8 field_unkown[6];
/*0xE6E*/ u16 battleTentWinStreak;
/*0xE70*/ u8 field_E70[72];
/*0xEB8*/ u16 frontierBattlePoints;
/*0xEBA*/ u8 field_EBA[39];
- /*0xEE1*/ u8 field_EE1;
- /*0xEE2*/ u8 field_EE2[7];
- /*0xEE9*/ u8 field_EE9;
- /*0xEEA*/ u8 field_EEA[66];
+ /*0xEE1*/ u8 field_EE1[2][PLAYER_NAME_LENGTH];
+ /*0xEF1*/ u8 field_EF1[2][4];
+ /*0xEF9*/ u8 field_EF9[51];
// sizeof=0xF2C
};
@@ -558,9 +657,9 @@ struct ContestWinner
u8 contestRank;
};
-struct DaycareMiscMon
+struct DayCareMail
{
- struct MailStruct mail;
+ struct MailStruct message;
u8 OT_name[OT_NAME_LENGTH + 1];
u8 monName[POKEMON_NAME_LENGTH + 1];
u8 gameLanguage:4;
@@ -570,7 +669,7 @@ struct DaycareMiscMon
struct DaycareMon
{
struct BoxPokemon mon;
- struct DaycareMiscMon misc;
+ struct DayCareMail mail;
u32 steps;
};
@@ -581,12 +680,6 @@ struct DayCare
u8 stepCounter;
};
-struct DayCareMail
-{
- /*0x00*/ struct MailStruct message;
- /*0x24*/ u8 names[19];
-};
-
struct RecordMixingDayCareMail
{
struct DayCareMail mail[DAYCARE_MON_COUNT];
@@ -642,12 +735,13 @@ struct LilycoveLadyContest
/*0x00e*/ u8 language;
};
-typedef union // TODO
+typedef union
{
struct LilycoveLadyQuiz quiz;
struct LilycoveLadyFavour favour;
struct LilycoveLadyContest contest;
u8 id;
+ u8 pad[0x40];
} LilycoveLady;
struct WaldaPhrase
@@ -714,8 +808,8 @@ struct SaveBlock1
/*0x????*/ u8 decorDoll[40];
/*0x????*/ u8 decorCushion[10];
/*0x27CA*/ u8 padding_27CA[2];
- /*0x27CC*/ TVShow tvShows[25];
- /*0x2B50*/ PokeNews pokeNews[16];
+ /*0x27CC*/ TVShow tvShows[TV_SHOWS_COUNT];
+ /*0x2B50*/ PokeNews pokeNews[POKE_NEWS_COUNT];
/*0x2B90*/ u16 outbreakPokemonSpecies;
/*0x2B92*/ u8 outbreakLocationMapNum;
/*0x2B93*/ u8 outbreakLocationMapGroup;
@@ -747,7 +841,6 @@ struct SaveBlock1
/*0x3B14*/ struct RecordMixingGift recordMixingGift;
/*0x3B24*/ u8 seen2[52];
/*0x3B58*/ LilycoveLady lilycoveLady;
- /*0x3B88*/ u8 filler_3B88[0x10];
/*0x3B98*/ struct UnkSaveSubstruct_3b98 unk_3B98[20];
/*0x3C88*/ u8 filler_3C88[0xE8];
/*0x3D70*/ struct WaldaPhrase waldaPhrase;
diff --git a/include/lilycove_lady.h b/include/lilycove_lady.h
index 084e5722e..f26285d68 100644
--- a/include/lilycove_lady.h
+++ b/include/lilycove_lady.h
@@ -6,7 +6,7 @@ void SetLilycoveLady(void);
void sub_818DA78(void);
void sub_818DEF4(void);
void sub_818E564(void);
-void sub_818E570(const struct LilycoveLadyQuiz *quiz);
+void sub_818E570(const LilycoveLady *lilycoveLady);
bool8 GivePokeblockToContestLady(struct Pokeblock *pokeblock);
void sub_818E7E0(u8 *dest1, u8 *dest2);
void sub_818E81C(u8 *dest);
diff --git a/include/link.h b/include/link.h
index 051370897..5b3cd26ca 100644
--- a/include/link.h
+++ b/include/link.h
@@ -293,4 +293,13 @@ extern u32 gFiller_03004138;
extern u32 gFiller_0300413C;
extern u32 gFiller_03003080;
+bool32 Link_AnyPartnersPlayingRubyOrSapphire(void);
+bool32 sub_800A03C(void);
+void sub_8009628(u8);
+u8 sub_800AA48(void);
+void sub_8009FAC(void);
+bool8 sub_800A4D8(u8 a0);
+u8 sub_800A9D8(void);
+u8 sub_800A0C8(s32, s32);
+
#endif // GUARD_LINK_H
diff --git a/include/link_rfu.h b/include/link_rfu.h
index a6084b138..ca39c2fb2 100644
--- a/include/link_rfu.h
+++ b/include/link_rfu.h
@@ -231,5 +231,6 @@ struct UnkLinkRfuStruct_02022B14 *sub_800F7DC(void);
void sub_8011068(u8 a0);
void sub_8011170(u32 a0);
void sub_8011A64(u8 a0, u16 a1);
+u8 sub_801048C(bool32 a0);
#endif //GUARD_LINK_RFU_H
diff --git a/include/mauville_old_man.h b/include/mauville_old_man.h
index 696f12cc7..e318ac8bb 100644
--- a/include/mauville_old_man.h
+++ b/include/mauville_old_man.h
@@ -11,9 +11,16 @@ enum MauvilleOldManType
MAUVILLE_MAN_GIDDY
};
+extern struct BardSong gBardSong;
+
void SetMauvilleOldMan(void);
u8 GetCurrentMauvilleOldMan(void);
-extern struct BardSong gBardSong;
void ScrSpecial_SetMauvilleOldManMapObjGfx(void);
+u8 sub_81201C8(void);
+void sub_8120B70(OldMan *dest);
+void sub_8120670(void);
+void SanitizeReceivedRubyOldMan(union OldMan * oldMan, u32 r1, u32 r6);
+void SanitizeReceivedEmeraldOldMan(union OldMan * oldMan, u32 unused, u32 a2);
+void ResetMauvilleOldManFlag(void);
#endif // GUARD_MAUVILLE_OLD_MAN_H
diff --git a/include/pokemon.h b/include/pokemon.h
index b6b0d6d36..37028821a 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -240,33 +240,6 @@ struct PokemonStorage
/*0x83C2*/ u8 boxWallpapers[14];
};
-struct UnknownPokemonStruct
-{
- u16 species;
- u16 heldItem;
- u16 moves[4];
- u8 level;
- u8 ppBonuses;
- u8 hpEV;
- u8 attackEV;
- u8 defenseEV;
- u8 speedEV;
- u8 spAttackEV;
- u8 spDefenseEV;
- u32 otId;
- u32 hpIV:5;
- u32 attackIV:5;
- u32 defenseIV:5;
- u32 speedIV:5;
- u32 spAttackIV:5;
- u32 spDefenseIV:5;
- u32 gap:1;
- u32 altAbility:1;
- u32 personality;
- u8 nickname[POKEMON_NAME_LENGTH + 1];
- u8 friendship;
-};
-
struct UnknownPokemonSubStruct2
{
u16 species;
diff --git a/include/record_mixing.h b/include/record_mixing.h
new file mode 100644
index 000000000..3cd4d649e
--- /dev/null
+++ b/include/record_mixing.h
@@ -0,0 +1,35 @@
+#ifndef GUARD_RECORD_MIXING_H
+#define GUARD_RECORD_MIXING_H
+
+// Exported type declarations
+struct UnkRecordMixingStruct2a
+{
+ u8 playerId[4];
+ u16 field_4;
+ u8 playerName[PLAYER_NAME_LENGTH];
+ u8 language;
+};
+
+struct UnkRecordMixingStruct2b
+{
+ u8 playerId1[4];
+ u8 playerId2[4];
+ u16 field_8;
+ u8 playerName1[PLAYER_NAME_LENGTH];
+ u8 playerName2[PLAYER_NAME_LENGTH];
+ u8 language;
+};
+
+struct UnkRecordMixingStruct2
+{
+ struct UnkRecordMixingStruct2a field_0[9][2];
+ struct UnkRecordMixingStruct2b field_120[2];
+};
+
+// Exported RAM declarations
+
+// Exported ROM declarations
+void sub_80E6BE8(void);
+void sub_80E8260(struct UnkRecordMixingStruct2 *arg0);
+
+#endif //GUARD_RECORD_MIXING_H
diff --git a/include/save.h b/include/save.h
index f06db2955..7b271129a 100644
--- a/include/save.h
+++ b/include/save.h
@@ -90,6 +90,9 @@ u8 sub_8153430(void);
bool8 sub_8153474(void);
u8 Save_LoadGameData(u8 a1);
u16 sub_815355C(void);
+u8 sub_81534D0(u8);
+u8 sub_8153430(void);
+bool8 sub_8153474(void);
u32 TryCopySpecialSaveSection(u8 sector, u8* dst);
u32 sub_8153634(u8 sector, u8* src);
void sub_8153688(u8 taskId);
diff --git a/include/secret_base.h b/include/secret_base.h
index 7deb3fd96..c20533698 100644
--- a/include/secret_base.h
+++ b/include/secret_base.h
@@ -8,6 +8,8 @@
// Exported ROM declarations
void sub_80E9578(void);
void sub_80E980C(void);
+void sub_80EB18C(struct SecretBaseRecord *dest);
+void sub_80E9914(void);
u8 *GetSecretBaseMapName(u8 *dest);
const u8 *GetSecretBaseTrainerLoseText(void);
void sub_80E8EE0(struct MapEvents const *events);
diff --git a/include/strings.h b/include/strings.h
index f9b752176..a86ab25fe 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -110,6 +110,8 @@ extern const u8 gText_MoveCloserToLinkPartner[];
extern const u8 gText_CommErrorCheckConnections[];
extern const u8 gText_ABtnTitleScreen[];
extern const u8 gText_ABtnRegistrationCounter[];
+extern const u8 gText_MixingRecords[];
+extern const u8 gText_RecordMixingComplete[];
extern const u8 gText_EmptyString2[];
extern const u8 gText_Confirm3[];
extern const u8 gText_Cancel4[];
diff --git a/include/tv.h b/include/tv.h
index 1e05a680e..17be8c43c 100644
--- a/include/tv.h
+++ b/include/tv.h
@@ -16,7 +16,7 @@ void sub_80EED10(void);
void sub_80EED34(void);
void sub_80EED60(u16 delta);
void sub_80F01B8(void);
-void sub_80F01E8(void *src, u32 size, u8 masterIdx);
+void ReceiveTvShowsData(void *src, u32 size, u8 masterIdx);
void sub_80EE4DC(struct Pokemon *pokemon, u8 ribbonMonDataIdx);
u32 GetPlayerIDAsU32(void);
bool8 GetPriceReduction(u8 newsKind);
@@ -30,7 +30,7 @@ void sub_80EEA70(void);
void sub_80EDB44(void);
void sub_80EDC60(const u16 *words);
void sub_80EDA80(void);
-void sub_80F0C7C(void *src, u32 size, u8 masterIdx);
+void ReceivePokeNewsData(void *src, u32 size, u8 masterIdx);
void sub_80F0BB8(void);
void sub_80ED950(bool8 flag);
void sub_80EEC80(void);
@@ -39,11 +39,13 @@ void sub_80EECC8(void);
void sub_80EECEC(void);
void sub_80F1208(TVShow *shows);
void sub_80EE44C(u8 nMonsCaught, u8 nPkblkUsed);
+void sub_80F14F8(TVShow *shows);
+size_t sub_80EF370(int value);
+bool8 Put3CheersForPokeblocksOnTheAir(const u8 *partnersName, u8 flavor, u8 unused, u8 sheen, u8 language);
void SetPokemonAnglerSpecies(u16 species);
void UpdateTVShowsPerDay(u16 days);
void PutPokemonTodayCaughtOnAir(void);
void TV_PutSecretBaseVisitOnTheAir(void);
-bool8 Put3CheersForPokeblocksOnTheAir(const u8 *partnersName, u8 flavor, u8 unused, u8 sheen, u8 language);
void PutBattleUpdateOnTheAir(u8 opponentLinkPlayerId, u16 move, u16 speciesPlayer, u16 speciesOpponent);
void UpdateTVScreensOnMap(int, int);