summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/battle.h1
-rw-r--r--include/battle_frontier_2.h1
-rw-r--r--include/battle_tower.h72
-rw-r--r--include/constants/battle_frontier.h17
-rw-r--r--include/constants/battle_script_commands.h7
-rw-r--r--include/constants/trainers.h15
-rw-r--r--include/global.h79
-rw-r--r--include/window.h4
8 files changed, 114 insertions, 82 deletions
diff --git a/include/battle.h b/include/battle.h
index 87aa2a45b..f34364ea6 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -561,6 +561,7 @@ struct BattleScripting
u8 field_23;
u8 windowsType; // 0 - normal, 1 - battle arena
u8 multiplayerId;
+ u8 specialTrainerBattleType;
};
// rom_80A5C6C
diff --git a/include/battle_frontier_2.h b/include/battle_frontier_2.h
index 573053f10..3bd605829 100644
--- a/include/battle_frontier_2.h
+++ b/include/battle_frontier_2.h
@@ -14,5 +14,6 @@ bool8 InBattlePike(void);
void sub_81AA078(u16*, u8);
void sub_81A4C30(void);
bool8 sub_81A6BF4(void);
+u8 sub_81A6CA8(u8, u8);
#endif // GUARD_BATTLE_FRONTIER_2_H
diff --git a/include/battle_tower.h b/include/battle_tower.h
index 5879a73bb..5fe8d1190 100644
--- a/include/battle_tower.h
+++ b/include/battle_tower.h
@@ -3,35 +3,25 @@
struct RSBattleTowerRecord
{
- /*0x00*/ u8 battleTowerLevelType; // 0 = level 50, 1 = level 100
- /*0x01*/ u8 trainerClass;
+ /*0x00*/ u8 lvlMode; // 0 = level 50, 1 = level 100
+ /*0x01*/ u8 facilityClass;
/*0x02*/ u16 winStreak;
/*0x04*/ u8 name[PLAYER_NAME_LENGTH + 1];
/*0x0C*/ u8 trainerId[4];
- /*0x10*/ struct {
- u16 easyChat[6];
- } greeting;
+ /*0x10*/ u16 greeting[6];
/*0x1C*/ struct UnknownPokemonStruct party[3];
/*0xA0*/ u32 checksum;
- /*0xA4*/ u16 unk_11c8;
};
-union BattleTowerRecord
-{
- struct RSBattleTowerRecord ruby_sapphire;
- struct EmeraldBattleTowerRecord emerald;
-};
-
-#define FRONTIER_TRAINER_NAME_LENGTH 7
-
struct BattleFrontierTrainer
{
- u32 facilityClass;
- u8 trainerName[FRONTIER_TRAINER_NAME_LENGTH + 1];
+ u8 facilityClass;
+ u8 filler1[3];
+ u8 trainerName[PLAYER_NAME_LENGTH + 1];
u16 speechBefore[6];
u16 speechWin[6];
u16 speechLose[6];
- const u16 *btMonPool;
+ const u16 *bfMonPool;
};
struct FacilityMon
@@ -43,17 +33,47 @@ struct FacilityMon
u8 nature;
};
+extern const u8 gTowerMaleFacilityClasses[30];
+extern const u8 gTowerMaleTrainerGfxIds[30];
+extern const u8 gTowerFemaleFacilityClasses[20];
+extern const u8 gTowerFemaleTrainerGfxIds[20];
+
extern const struct BattleFrontierTrainer *gFacilityTrainers;
extern const struct FacilityMon *gFacilityTrainerMons;
-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 *);
-void sub_8162614(u16 trainerId, u8);
-void ConvertBattleFrontierTrainerSpeechToString(const u16 *words);
-void GetFrontierTrainerName(u8 *dest, u16 trainerIdx);
-void GetEreaderTrainerName(u8 *dest);
+void sub_8161F74(void);
+u16 sub_8162548(u8 challengeNum, u8 battleNum);
+void SetBattleFacilityTrainerGfxId(u16 trainerId, u8 tempVarId);
+void SetEReaderTrainerGfxId(void);
+u8 GetBattleFacilityTrainerGfxId(u16 trainerId);
+void PutNewBattleTowerRecord(struct EmeraldBattleTowerRecord *newRecordEm);
+u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
+u8 GetFrontierOpponentClass(u16 trainerId);
+void GetFrontierTrainerName(u8 *dst, u16 trainerId);
+void FillFrontierTrainerParty(u8 monsCount);
+void FillFrontierTrainersParties(u8 monsCount);
+u16 RandomizeFacilityTrainerMonId(u16 trainerId);
+void FrontierSpeechToString(const u16 *words);
+void DoSpecialTrainerBattle(void);
+void CalcEmeraldBattleTowerChecksum(struct EmeraldBattleTowerRecord *record);
+void CalcRubyBattleTowerChecksum(struct RSBattleTowerRecord *record);
+u16 GetCurrentBattleTowerWinStreak(u8 lvlMode, u8 battleMode);
+u8 GetEreaderTrainerFrontSpriteId(void);
+u8 GetEreaderTrainerClassId(void);
+void GetEreaderTrainerName(u8 *dst);
+void ValidateEReaderTrainer(void);
+void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *ereaderTrainer);
+void CopyEReaderTrainerGreeting(void);
+void sub_81653CC(void);
+bool32 RubyBattleTowerRecordToEmerald(struct RSBattleTowerRecord *src, struct EmeraldBattleTowerRecord *dst);
+bool32 EmeraldBattleTowerRecordToRuby(struct EmeraldBattleTowerRecord *src, struct RSBattleTowerRecord *dst);
+void CalcApprenticeChecksum(struct Apprentice *apprentice);
+void GetBattleTowerTrainerLanguage(u8 *dst, u16 trainerId);
+u8 SetFacilityPtrsGetLevel(void);
+u8 GetFrontierEnemyMonLevel(u8 lvlMode);
+s32 GetHighestLevelInPlayerParty(void);
+u8 sub_81660B8(u8 facilityClass);
+bool32 ValidateBattleTowerRecord(u8 recordId); // unused
+void sub_8166188(void);
#endif //GUARD_BATTLE_TOWER_H
diff --git a/include/constants/battle_frontier.h b/include/constants/battle_frontier.h
index 1cd750a3d..204a09f60 100644
--- a/include/constants/battle_frontier.h
+++ b/include/constants/battle_frontier.h
@@ -10,6 +10,10 @@
#define FRONTIER_FACILITY_PIKE 5
#define FRONTIER_FACILITY_PYRAMID 6
+#define TENT_VERDANTURF 2
+#define TENT_FALLARBOR 3
+#define TENT_SLATEPORT 4
+
// Battle Frontier lvl modes.
#define FRONTIER_LVL_50 0
#define FRONTIER_LVL_OPEN 1
@@ -21,4 +25,17 @@
#define FRONTIER_MODE_MULTIS 2
#define FRONTIER_MODE_LINK_MULTIS 3
+// Special trainer battles.
+#define SPECIAL_BATTLE_TOWER 0
+#define SPECIAL_BATTLE_SECRET_BASE 1
+#define SPECIAL_BATTLE_EREADER 2
+#define SPECIAL_BATTLE_DOME 3
+#define SPECIAL_BATTLE_PALACE 4
+#define SPECIAL_BATTLE_ARENA 5
+#define SPECIAL_BATTLE_FACTORY 6
+#define SPECIAL_BATTLE_PIKE_SINGLE 7
+#define SPECIAL_BATTLE_STEVEN 8
+#define SPECIAL_BATTLE_PIKE_DOUBLE 9
+#define SPECIAL_BATTLE_PYRAMID 10
+
#endif // GUARD_CONSTANTS_BATTLE_FRONTIER_H
diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h
index bd9d8e67d..dc07fda6e 100644
--- a/include/constants/battle_script_commands.h
+++ b/include/constants/battle_script_commands.h
@@ -11,9 +11,9 @@
#define sB_ANIM_ARG2 gBattleScripting + 0x11
#define sTRIPLE_KICK_POWER gBattleScripting + 0x12
#define sMOVEEND_STATE gBattleScripting + 0x14
-#define sBANK_WITH_ABILITY gBattleScripting + 0x15
+#define sBATTLER_WITH_ABILITY gBattleScripting + 0x15
#define sMULTIHIT_EFFECT gBattleScripting + 0x16
-#define sBANK gBattleScripting + 0x17
+#define sBATTLER gBattleScripting + 0x17
#define sB_ANIM_TURN gBattleScripting + 0x18
#define sB_ANIM_TARGETS_HIT gBattleScripting + 0x19
#define sSTATCHANGER gBattleScripting + 0x1A
@@ -26,8 +26,9 @@
#define sRESHOW_MAIN_STATE gBattleScripting + 0x21
#define sRESHOW_HELPER_STATE gBattleScripting + 0x22
#define sFIELD_23 gBattleScripting + 0x23
-#define sFIELD_24 gBattleScripting + 0x24
+#define sWINDOWS_TYPE gBattleScripting + 0x24
#define sMULTIPLAYER_ID gBattleScripting + 0x25
+#define sSPECIAL_TRAINER_BATTLE_TYPE gBattleScripting + 0x26
#define cEFFECT_CHOOSER gBattleCommunication + 3
#define cMULTISTRING_CHOOSER gBattleCommunication + 5
diff --git a/include/constants/trainers.h b/include/constants/trainers.h
index f79216d94..2ea9f7c62 100644
--- a/include/constants/trainers.h
+++ b/include/constants/trainers.h
@@ -4,12 +4,15 @@
#include "constants/opponents.h"
// Special Trainer Ids.
-#define TRAINER_FRONTIER_BRAIN 1022
-#define TRAINER_PLAYER 1023
-#define TRAINER_SECRET_BASE 1024
-#define TRAINER_LINK_OPPONENT 2048
-#define TRAINER_OPPONENT_C00 3072
-#define TRAINER_STEVEN_PARTNER 3075
+#define TRAINER_RECORD_MIXING_FRIEND 300
+#define TRAINER_RECORD_MIXING_APPRENTICE 400
+#define TRAINER_EREADER 500
+#define TRAINER_FRONTIER_BRAIN 1022
+#define TRAINER_PLAYER 1023
+#define TRAINER_SECRET_BASE 1024
+#define TRAINER_LINK_OPPONENT 2048
+#define TRAINER_OPPONENT_C00 3072
+#define TRAINER_STEVEN_PARTNER 3075
#define TRAINER_PIC_HIKER 0
#define TRAINER_PIC_AQUA_GRUNT_M 1
diff --git a/include/global.h b/include/global.h
index b92f1097f..0cff281e7 100644
--- a/include/global.h
+++ b/include/global.h
@@ -275,26 +275,6 @@ struct BerryCrush
u32 unk;
};
-struct UnknownSaveBlock2Struct
-{
- u8 field_0;
- u8 field_1;
- u8 field_2[2];
- u8 field_4[8];
- u8 field_C[16];
- u16 field_1C[6];
- u16 field_28[6];
- u8 field_34[176];
- u8 field_E4;
- u8 field_E5;
- u8 field_E6;
- u8 field_E7;
- u8 field_E8;
- u8 field_E9;
- u8 field_EA;
- u8 field_EB;
-}; // sizeof = 0xEC
-
struct ApprenticeMon
{
u16 species;
@@ -308,12 +288,12 @@ struct Apprentice
u8 lvlMode:2; // + 1
u8 field_1;
u8 number;
- struct ApprenticeMon monData[3];
+ struct ApprenticeMon party[3];
u16 easyChatWords[6];
u8 playerId[4];
u8 playerName[PLAYER_NAME_LENGTH];
u8 language;
- u32 unk40;
+ u32 checksum;
};
struct UnknownPokemonStruct
@@ -345,20 +325,33 @@ struct UnknownPokemonStruct
struct EmeraldBattleTowerRecord
{
- /*0x00*/ u8 battleTowerLevelType; // 0 = level 50, 1 = level 100
- /*0x01*/ u8 trainerClass;
+ /*0x00*/ u8 lvlMode; // 0 = level 50, 1 = level 100
+ /*0x01*/ u8 facilityClass;
/*0x02*/ u16 winStreak;
/*0x04*/ u8 name[PLAYER_NAME_LENGTH + 1];
/*0x0C*/ u8 trainerId[4];
- /*0x10*/ struct {
- u16 easyChat[6];
- } greeting;
- /*0x1C*/ u8 filler_1c[0x18];
+ /*0x10*/ u16 greeting[6];
+ /*0x1C*/ u16 unk1C[6];
+ /*0x28*/ u16 unk28[6];
/*0x34*/ struct UnknownPokemonStruct party[4];
/*0xE4*/ u8 language;
/*0xE8*/ u32 checksum;
};
+struct BattleTowerEReaderTrainer
+{
+ /*0x00*/ u8 unk0;
+ /*0x01*/ u8 facilityClass;
+ /*0x02*/ u16 winStreak;
+ /*0x04*/ u8 name[PLAYER_NAME_LENGTH + 1];
+ /*0x0C*/ u8 trainerId[4];
+ /*0x10*/ u16 greeting[6];
+ /*0x1C*/ u16 farewellPlayerLost[6];
+ /*0x28*/ u16 farewellPlayerWon[6];
+ /*0x34*/ struct UnknownPokemonStruct party[3];
+ /*0xB8*/ u32 checksum;
+};
+
struct FrontierMonData
{
u16 moves[4];
@@ -386,18 +379,14 @@ struct BattleDomeTrainer
struct BattleFrontier
{
- /*0x64C*/ struct EmeraldBattleTowerRecord battleTower;
- /*0x738*/ struct UnknownSaveBlock2Struct field_738[5]; // No idea here, it's probably wrong, no clue.
+ /*0x64C*/ struct EmeraldBattleTowerRecord towerPlayer;
+ /*0x738*/ struct EmeraldBattleTowerRecord towerRecords[5]; // From record mixing.
/*0xBD4*/ u16 field_BD4;
/*0xBD6*/ u16 field_BD6;
- /*0xBD8*/ u8 field_BD8[11];
- /*0xBE3*/ u8 field_BE3[8];
+ /*0xBD8*/ u8 field_BD8[PLAYER_NAME_LENGTH + 1];
+ /*0xBE3*/ u8 field_BE0[POKEMON_NAME_LENGTH + 1];
/*0xBEB*/ u8 field_BEB;
- /*0xBEC*/ u8 filler_BEC[16];
- /*0xBFC*/ u16 ecwords_BFC[6];
- /*0xC08*/ u16 ecwords_C08[6];
- /*0xC14*/ u16 ecwords_C14[6];
- /*0xC20*/ u8 filler_C20[0x88];
+ /*0xBEC*/ struct BattleTowerEReaderTrainer ereaderTrainer;
/*0xCA8*/ u8 field_CA8;
/*0xCA9*/ u8 lvlMode:2; // 0x1, 0x2 -> 0x3
/*0xCA9*/ u8 field_CA9_a:1; // 0x4
@@ -406,16 +395,19 @@ struct BattleFrontier
/*0xCA9*/ u8 field_CA9_d:1; // 0x20
/*0xCA9*/ u8 field_CA9_e:1; // 0x40
/*0xCA9*/ u8 field_CA9_f:1; // 0x80
- /*0xCAA*/ u16 field_CAA[3];
+ /*0xCAA*/ u16 selectedPartyMons[3];
/*0xCB0*/ u16 field_CB0;
- /*0xCB2*/ u16 field_CB2;
+ /*0xCB2*/ u16 curChallengeBattleNum; // In case of battle pyramid, the floor.
/*0xCB4*/ u16 field_CB4[20];
/*0xCDC*/ u32 field_CDC;
- /*0xCE0*/ u16 field_CE0[4][2];
+ /*0xCE0*/ u16 winStreaks[4][2];
/*0xCF0*/ u16 field_CF0[2];
/*0xCF4*/ u16 field_CF4[2];
/*0xCF8*/ u16 field_CF8[2];
- /*0xCFC*/ u16 field_CFC[5];
+ /*0xCFC*/ u16 field_CFC[2];
+ /*0xD06*/ u16 field_D00;
+ /*0xD06*/ u16 field_D02;
+ /*0xD06*/ u16 field_D04;
/*0xD06*/ u8 field_D06;
/*0xD07*/ u8 field_D07;
/*0xD08*/ u8 field_D08_0:1;
@@ -466,10 +458,7 @@ struct BattleFrontier
/*0xEB8*/ u16 frontierBattlePoints;
/*0xEBA*/ u8 field_EBA;
/*0xEBB*/ u8 field_EBB;
- /*0xEBC*/ u8 field_EBC;
- /*0xEBD*/ u8 field_EBD;
- /*0xEBE*/ u8 field_EBE;
- /*0xEBF*/ u8 field_EBF;
+ /*0xEBC*/ u32 battlesCount;
/*0xEC0*/ u16 field_EC0[16];
/*0xEE0*/ u8 field_EE0;
/*0xEE1*/ u8 field_EE1[2][PLAYER_NAME_LENGTH + 1];
diff --git a/include/window.h b/include/window.h
index 29fdf8833..692ca1d81 100644
--- a/include/window.h
+++ b/include/window.h
@@ -3,7 +3,7 @@
enum
{
- WINDOW_PRIORITY,
+ WINDOW_BG,
WINDOW_TILEMAP_LEFT,
WINDOW_TILEMAP_TOP,
WINDOW_WIDTH,
@@ -15,7 +15,7 @@ enum
struct WindowTemplate
{
- u8 priority;
+ u8 bg;
u8 tilemapLeft;
u8 tilemapTop;
u8 width;