summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/battle_tower.h98
-rw-r--r--include/easy_chat.h1
-rw-r--r--include/global.h96
-rw-r--r--include/pokemon.h46
-rw-r--r--include/record_mixing.h2
-rw-r--r--include/tv.h1
6 files changed, 195 insertions, 49 deletions
diff --git a/include/battle_tower.h b/include/battle_tower.h
index 75ea405ab..8f179a68c 100644
--- a/include/battle_tower.h
+++ b/include/battle_tower.h
@@ -1,8 +1,102 @@
#ifndef GUARD_BATTLE_TOWER_H
#define GUARD_BATTLE_TOWER_H
-void sub_8134AC0(void *);
+#define BATTLE_TOWER_EREADER_TRAINER_ID 200
+#define BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID 100
+
+enum
+{
+ F_EV_SPREAD_HP = 1 << 0,
+ F_EV_SPREAD_ATTACK = 1 << 1,
+ F_EV_SPREAD_DEFENSE = 1 << 2,
+ F_EV_SPREAD_SPEED = 1 << 3,
+ F_EV_SPREAD_SP_ATTACK = 1 << 4,
+ F_EV_SPREAD_SP_DEFENSE = 1 << 5,
+};
+
+enum
+{
+ BATTLE_TOWER_ITEM_NONE,
+ BATTLE_TOWER_ITEM_KINGS_ROCK,
+ BATTLE_TOWER_ITEM_SITRUS_BERRY,
+ BATTLE_TOWER_ITEM_ORAN_BERRY,
+ BATTLE_TOWER_ITEM_CHESTO_BERRY,
+ BATTLE_TOWER_ITEM_HARD_STONE,
+ BATTLE_TOWER_ITEM_FOCUS_BAND,
+ BATTLE_TOWER_ITEM_PERSIM_BERRY,
+ BATTLE_TOWER_ITEM_MIRACLE_SEED,
+ BATTLE_TOWER_ITEM_BERRY_JUICE,
+ BATTLE_TOWER_ITEM_MACHO_BRACE,
+ BATTLE_TOWER_ITEM_SILVER_POWDER,
+ BATTLE_TOWER_ITEM_CHERI_BERRY,
+ BATTLE_TOWER_ITEM_BLACK_GLASSES,
+ BATTLE_TOWER_ITEM_BLACK_BELT,
+ BATTLE_TOWER_ITEM_SOUL_DEW,
+ BATTLE_TOWER_ITEM_CHOICE_BAND,
+ BATTLE_TOWER_ITEM_MAGNET,
+ BATTLE_TOWER_ITEM_SILK_SCARF,
+ BATTLE_TOWER_ITEM_WHITE_HERB,
+ BATTLE_TOWER_ITEM_DEEP_SEA_SCALE,
+ BATTLE_TOWER_ITEM_DEEP_SEA_TOOTH,
+ BATTLE_TOWER_ITEM_MYSTIC_WATER,
+ BATTLE_TOWER_ITEM_SHARP_BEAK,
+ BATTLE_TOWER_ITEM_QUICK_CLAW,
+ BATTLE_TOWER_ITEM_LEFTOVERS,
+ BATTLE_TOWER_ITEM_RAWST_BERRY,
+ BATTLE_TOWER_ITEM_LIGHT_BALL,
+ BATTLE_TOWER_ITEM_POISON_BARB,
+ BATTLE_TOWER_ITEM_NEVER_MELT_ICE,
+ BATTLE_TOWER_ITEM_ASPEAR_BERRY,
+ BATTLE_TOWER_ITEM_SPELL_TAG,
+ BATTLE_TOWER_ITEM_BRIGHT_POWDER,
+ BATTLE_TOWER_ITEM_LEPPA_BERRY,
+ BATTLE_TOWER_ITEM_SCOPE_LENS,
+ BATTLE_TOWER_ITEM_TWISTED_SPOON,
+ BATTLE_TOWER_ITEM_METAL_COAT,
+ BATTLE_TOWER_ITEM_MENTAL_HERB,
+ BATTLE_TOWER_ITEM_CHARCOAL,
+ BATTLE_TOWER_ITEM_PECHA_BERRY,
+ BATTLE_TOWER_ITEM_SOFT_SAND,
+ BATTLE_TOWER_ITEM_LUM_BERRY,
+ BATTLE_TOWER_ITEM_DRAGON_SCALE,
+ BATTLE_TOWER_ITEM_DRAGON_FANG,
+ BATTLE_TOWER_ITEM_IAPAPA_BERRY,
+ BATTLE_TOWER_ITEM_WIKI_BERRY,
+ BATTLE_TOWER_ITEM_SEA_INCENSE,
+ BATTLE_TOWER_ITEM_SHELL_BELL,
+ BATTLE_TOWER_ITEM_SALAC_BERRY,
+ BATTLE_TOWER_ITEM_LANSAT_BERRY,
+ BATTLE_TOWER_ITEM_APICOT_BERRY,
+ BATTLE_TOWER_ITEM_STARF_BERRY,
+ BATTLE_TOWER_ITEM_LIECHI_BERRY,
+ BATTLE_TOWER_ITEM_STICK,
+ BATTLE_TOWER_ITEM_LAX_INCENSE,
+ BATTLE_TOWER_ITEM_AGUAV_BERRY,
+ BATTLE_TOWER_ITEM_FIGY_BERRY,
+ BATTLE_TOWER_ITEM_THICK_CLUB,
+ BATTLE_TOWER_ITEM_MAGO_BERRY,
+ BATTLE_TOWER_ITEM_METAL_POWDER,
+ BATTLE_TOWER_ITEM_PETAYA_BERRY,
+ BATTLE_TOWER_ITEM_LUCKY_PUNCH,
+ BATTLE_TOWER_ITEM_GANLON_BERRY,
+};
+
+struct BattleTowerPokemon
+{
+ /*0x00*/u16 species;
+ /*0x02*/u8 heldItem; // entry in sBattleTowerHeldItems
+ /*0x03*/u8 teamFlags;
+ /*0x04*/u16 moves[4];
+ /*0x0C*/u8 evSpread;
+ /*0x0D*/u8 nature;
+};
+
+u16 GetCurrentBattleTowerWinStreak(u8);
+void sub_8134AC0(struct BattleTowerRecord *);
u16 sub_8135D3C(u8);
-void sub_8135FF4(u8*);
+void SetEReaderTrainerName(u8*);
+u8 GetEReaderTrainerPicIndex(void);
+u8 GetEReaderTrainerClassNameIndex(void);
+void ValidateEReaderTrainer(void);
#endif // GUARD_BATTLE_TOWER_H
diff --git a/include/easy_chat.h b/include/easy_chat.h
index 8a820353f..b59adedd5 100644
--- a/include/easy_chat.h
+++ b/include/easy_chat.h
@@ -1080,6 +1080,7 @@ u8 sub_80EB868(u8);
void sub_80EB890(u8);
u8 sub_80EB8C0(void);
u16 sub_80EB8EC(void);
+u8 *sub_80EB544(u8 *dst, u16 *words, u16 arg2, u16 arg3);
#if GERMAN
u32 de_sub_80EB748(u32, u32);
diff --git a/include/global.h b/include/global.h
index 7c1ac9c68..29804a5a9 100644
--- a/include/global.h
+++ b/include/global.h
@@ -681,10 +681,12 @@ struct SaveBlock1 /* 0x02025734 */
/*0x2B0D*/ u8 outbreakPokemonProbability;
/*0x2B0E*/ u16 outbreakUnk5;
/*0x2B10*/ struct GabbyAndTyData gabbyAndTyData;
- /*0x2B1C*/ u16 unk2B1C[6];
- /*0x2B28*/ u16 unk2B28[6];
- /*0x2B34*/ u16 unk2B34[6];
- /*0x2B40*/ u16 unk2B40[6];
+ /*0x2B1C*/ struct {
+ /*0x2B1C*/ u16 unk2B1C[6];
+ /*0x2B28*/ u16 unk2B28[6];
+ /*0x2B34*/ u16 unk2B34[6];
+ /*0x2B40*/ u16 unk2B40[6];
+ } easyChats;
/*0x2B4C*/ struct MailStruct mail[16];
/*0x2D8C*/ u8 unk2D8C[4];
/*0x2D90*/ u8 filler_2D90[0x4];
@@ -727,26 +729,74 @@ struct Pokedex
/*0x44*/ u8 seen[DEX_FLAGS_NO];
};
-struct SaveBlock2_Sub
+struct BattleTowerTrainer
{
- /*0x0000, 0x00A8*/ u8 filler_000[0x3D8];
- /*0x03D8, 0x0480*/ u16 var_480;
- /*0x03DA, 0x0482*/ u16 var_482;
- /*0x03DC, 0x0484*/ u8 filler_3DC[0x14];
- /*0x03F0, 0x0498*/ u8 ereaderTrainer[0xBC];
- /*0x04AC, 0x0554*/ u8 var_4AC;
- /*0x04AD, 0x0555*/ u8 var_4AD;
+ u8 trainerClass;
+ u8 name[8];
+ u8 teamFlags;
+ struct {
+ u16 easyChat[6];
+ } greeting;
+};
+
+struct BattleTowerRecord // record mixing
+{
+ /*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;
+};
+
+struct BattleTowerEReaderTrainer
+{
+ /*0x00*/u8 unk0;
+ /*0x01*/u8 trainerClass;
+ /*0x02*/u16 winStreak;
+ /*0x04*/u8 name[8];
+ /*0x0C*/u8 trainerId[4];
+ /*0x10*/struct {
+ u16 easyChat[6];
+ } greeting;
+ /*0x1C*/struct {
+ u16 easyChat[6];
+ } farewellPlayerLost;
+ /*0x28*/struct {
+ u16 easyChat[6];
+ } farewellPlayerWon;
+ /*0x34*/struct UnknownPokemonStruct party[3];
+ /*0xB8*/u32 checksum;
+};
+
+struct BattleTowerData
+{
+ /*0x0000, 0x00A8*/ struct BattleTowerRecord playerRecord;
+ /*0x00A4, 0x014C*/ struct BattleTowerRecord records[5]; // from record mixing
+ /*0x03D8, 0x0480*/ u16 firstMonSpecies; // species of the first pokemon in the player's battle tower party
+ /*0x03DA, 0x0482*/ u16 defeatedBySpecies; // species of the pokemon that defated the player
+ /*0x03DC, 0x0484*/ u8 defeatedByTrainerName[8];
+ /*0x03E4, 0x048C*/ u8 firstMonNickname[POKEMON_NAME_LENGTH]; // nickname of the first pokemon in the player's battle tower party
+ /*0x03F0, 0x0498*/ struct BattleTowerEReaderTrainer ereaderTrainer;
+ /*0x04AC, 0x0554*/ u8 battleTowerLevelType:1; // 0 = level 50; 1 = level 100
+ /*0x04AC, 0x0554*/ u8 unk_554:1;
+ /*0x04AD, 0x0555*/ u8 battleOutcome;
/*0x04AE, 0x0556*/ u8 var_4AE[2];
- /*0x04B0, 0x0558*/ u16 var_4B0;
- /*0x04B2, 0x055A*/ u16 var_4B2;
- /*0x04B4, 0x055C*/ u16 var_4B4;
- /*0x04B6, 0x055E*/ u16 var_4B6;
- /*0x04B8, 0x0560*/ u16 recordWinStreak[2];
- /*0x04BC, 0x0564*/ u8 filler_4BC[0xC];
- /*0x04C8, 0x0570*/ u16 var_4C8;
- /*0x04CA, 0x0572*/ u16 var_4CA;
- /*0x04CC, 0x0574*/ u16 winStreak[2];
- /*0x04D0, 0x0578*/ u8 var_4D0;
+ /*0x04B0, 0x0558*/ u16 curChallengeBattleNum[2]; // 1-based index of battle in the current challenge. (challenges consist of 7 battles)
+ /*0x04B4, 0x055C*/ u16 curStreakChallengesNum[2]; // 1-based index of the current challenge in the current streak.
+ /*0x04B8, 0x0560*/ u16 recordWinStreaks[2];
+ /*0x04BC, 0x0564*/ u8 battleTowerTrainerId; // index for gBattleTowerTrainers table
+ /*0x04BD, 0x0565*/ u8 selectedPartyMons[0x3]; // indices of the 3 selected player party mons.
+ /*0x04C0, 0x0568*/ u16 prizeItem;
+ /*0x04C2, 0x056A*/ u8 filler_4C2[0x6];
+ /*0x04C8, 0x0570*/ u16 totalBattleTowerWins;
+ /*0x04CA, 0x0572*/ u16 bestBattleTowerWinStreak;
+ /*0x04CC, 0x0574*/ u16 currentWinStreaks[2];
+ /*0x04D0, 0x0578*/ u8 lastStreakLevelType; // 0 = level 50, 1 = level 100. level type of the last streak. Used by tv to report the level mode.
/*0x04D1, 0x0579*/ u8 filler_4D1[0x317];
};
@@ -771,7 +821,7 @@ struct SaveBlock2 /* 0x02024EA4 */
/*0x90*/ u8 filler_90[0x8];
/*0x98*/ struct Time localTimeOffset;
/*0xA0*/ struct Time lastBerryTreeUpdate;
- /*0xA8*/ struct SaveBlock2_Sub filler_A8;
+ /*0xA8*/ struct BattleTowerData battleTower;
};
struct MapPosition
diff --git a/include/pokemon.h b/include/pokemon.h
index 0fbc325c3..572862b8f 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -288,29 +288,29 @@ struct Pokemon
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;
+ /*0x00*/u16 species;
+ /*0x02*/u16 heldItem;
+ /*0x04*/u16 moves[4];
+ /*0x0C*/u8 level;
+ /*0x0D*/u8 ppBonuses;
+ /*0x0E*/u8 hpEV;
+ /*0x0F*/u8 attackEV;
+ /*0x10*/u8 defenseEV;
+ /*0x11*/u8 speedEV;
+ /*0x12*/u8 spAttackEV;
+ /*0x13*/u8 spDefenseEV;
+ /*0x14*/u32 otId;
+ /*0x18*/u32 hpIV:5;
+ /*0x18*/u32 attackIV:5;
+ /*0x19*/u32 defenseIV:5;
+ /*0x19*/u32 speedIV:5;
+ /*0x1A*/u32 spAttackIV:5;
+ /*0x1A*/u32 spDefenseIV:5;
+ /*0x1B*/u32 gap:1;
+ /*0x1B*/u32 altAbility:1;
+ /*0x1C*/u32 personality;
+ /*0x20*/u8 nickname[POKEMON_NAME_LENGTH + 1];
+ /*0x2B*/u8 friendship;
};
struct BattlePokemon
diff --git a/include/record_mixing.h b/include/record_mixing.h
index ca60b04a7..96105f3f7 100644
--- a/include/record_mixing.h
+++ b/include/record_mixing.h
@@ -21,7 +21,7 @@ u16 *GetPlayerRecvBuffer(u8 player);
void sub_80B9A78(void);
void sub_80B9A88(u8 *a);
void sub_80B9B1C(u8 *a, size_t size, u8 index);
-void sub_80B9B70(u8 *a, size_t size, u8 index);
+void sub_80B9B70(void *a, u32 size, u8 index);
u8 sub_80B9BBC(u16 *a);
void sub_80B9BC4(u8 *, size_t, u8[][2], u8 d, u8 e);
u8 sub_80B9C4C(u8 *a);
diff --git a/include/tv.h b/include/tv.h
index 3243fff2c..a933e1779 100644
--- a/include/tv.h
+++ b/include/tv.h
@@ -107,5 +107,6 @@ void sub_80BE3BC(void);
void UpdateTVShowsPerDay(u16);
void sub_80C045C();
void sub_80BF088(u8, s32);
+void sub_80BFD20(void);
#endif // GUARD_TV_H