diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/battle_tower.h | 98 | ||||
-rw-r--r-- | include/easy_chat.h | 1 | ||||
-rw-r--r-- | include/global.h | 96 | ||||
-rw-r--r-- | include/pokemon.h | 46 | ||||
-rw-r--r-- | include/record_mixing.h | 2 | ||||
-rw-r--r-- | include/tv.h | 1 |
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 |