diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/battle.h | 1 | ||||
-rw-r--r-- | include/battle_frontier_2.h | 1 | ||||
-rw-r--r-- | include/battle_tower.h | 72 | ||||
-rw-r--r-- | include/constants/battle_frontier.h | 17 | ||||
-rw-r--r-- | include/constants/battle_script_commands.h | 7 | ||||
-rw-r--r-- | include/constants/trainers.h | 15 | ||||
-rw-r--r-- | include/global.h | 79 | ||||
-rw-r--r-- | include/window.h | 4 |
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; |