From 13c196eda57ebbdb3c7e14bebd2985f1edceae34 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 21 Oct 2017 19:51:28 -0700 Subject: More battle_tower work --- include/global.h | 85 +++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 69 insertions(+), 16 deletions(-) (limited to 'include/global.h') diff --git a/include/global.h b/include/global.h index 7c1ac9c68..6a7f6396c 100644 --- a/include/global.h +++ b/include/global.h @@ -727,26 +727,79 @@ struct Pokedex /*0x44*/ u8 seen[DEX_FLAGS_NO]; }; +// struct EReaderTrainerPokemon +// { +// /*0x00, 0x4CC*/u16 unk0; +// /*0x02, 0x4CE*/u16 unk2; +// /*0x04, 0x4D0*/u8 unk4[0x8]; +// /*0x0C, 0x4D8*/u8 level; +// /*0x0D, 0x4D9*/u8 unk9[0x1F]; +// }; + +// struct EReaderTrainer +// { +// /*0x00, 0x498*/u8 filler_0[2]; +// /*0x02, 0x49A*/u16 unk2; +// /*0x04, 0x49C*/u8 filler_4[0x30]; +// /*0x34, 0x4CC*/struct EReaderTrainerPokemon party[3]; +// /*0xB8, 0x550*/u32 unkB8; +// }; + +struct SaveBlock2_1 +{ + u32 filler_0[0x29]; +}; + +struct BattleTowerTrainer +{ + u8 trainerClass; + u8 name[8]; + u8 teamFlags; + u16 padding; + u16 easyChat[6]; +}; + +struct BattleTowerRecord // record mixing +{ + /*0x00*/u8 var_0; + /*0x01*/u8 trainerClass; + /*0x02*/u16 var_2; + /*0x04*/u8 name[8]; + /*0x0C*/u8 var_C[5]; + u8 filler[0x93]; +}; + +struct BattleTowerEReaderTrainer +{ + /*0x00*/u8 unk0; + /*0x01*/u8 trainerClass; + /*0x02*/u16 filler_2; + /*0x04*/u8 name[8]; + /*0x0B*/u8 ereaderTrainer[0xB0]; +}; + struct SaveBlock2_Sub { - /*0x0000, 0x00A8*/ u8 filler_000[0x3D8]; - /*0x03D8, 0x0480*/ u16 var_480; - /*0x03DA, 0x0482*/ u16 var_482; + /*0x0000, 0x00A8*/ struct BattleTowerRecord var_A8; + /*0x00A4, 0x014C*/ struct BattleTowerRecord var_14C[5]; + /*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 in their battle tower streak. /*0x03DC, 0x0484*/ u8 filler_3DC[0x14]; - /*0x03F0, 0x0498*/ u8 ereaderTrainer[0xBC]; - /*0x04AC, 0x0554*/ u8 var_4AC; - /*0x04AD, 0x0555*/ u8 var_4AD; + /*0x03F0, 0x0498*/ struct BattleTowerEReaderTrainer ereaderTrainer; + /*0x04AC, 0x0554*/ u8 battleTowerLevelType:1; // 0 = level 50; 1 = level 100 + /*0x04AD, 0x0555*/ u8 var_4AD; // used by tv, but ultimately does nothing, since both code paths are identical /*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 var_4B0[2]; + /*0x04B4, 0x055C*/ u16 var_4B4[2]; + /*0x04B8, 0x0560*/ u16 recordWinStreaks[2]; + /*0x04BC, 0x0564*/ u8 battleTowerTrainerId; // index for gBattleTowerTrainers table + /*0x04BD, 0x0565*/ u8 var_4BD[0x3]; + /*0x04C0, 0x0568*/ u8 var_4C0; + /*0x04C1, 0x0569*/ u8 var_4C1[0x7]; + /*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]; }; -- cgit v1.2.3 From f90bc99a49a3d4fa60e96cd6fbcb546f8e3a1da0 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Mon, 23 Oct 2017 17:45:02 -0700 Subject: Move all battle_tower data into src/ --- include/global.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'include/global.h') diff --git a/include/global.h b/include/global.h index 6a7f6396c..11611dc41 100644 --- a/include/global.h +++ b/include/global.h @@ -755,8 +755,9 @@ struct BattleTowerTrainer u8 trainerClass; u8 name[8]; u8 teamFlags; - u16 padding; - u16 easyChat[6]; + struct { + u16 easyChat[6]; + } greeting; }; struct BattleTowerRecord // record mixing -- cgit v1.2.3 From e27be38588bc1d2d3e26e10c87d5de91a5cbab21 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Mon, 23 Oct 2017 19:32:10 -0700 Subject: More decomp of battle_tower --- include/global.h | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'include/global.h') diff --git a/include/global.h b/include/global.h index 11611dc41..1431bf772 100644 --- a/include/global.h +++ b/include/global.h @@ -766,8 +766,11 @@ struct BattleTowerRecord // record mixing /*0x01*/u8 trainerClass; /*0x02*/u16 var_2; /*0x04*/u8 name[8]; - /*0x0C*/u8 var_C[5]; - u8 filler[0x93]; + /*0x0C*/u8 var_C[4]; + /*0x10*/struct { + u16 easyChat[6]; + } greeting; + /*0x1C*/u8 filler[0x87]; }; struct BattleTowerEReaderTrainer @@ -775,8 +778,14 @@ struct BattleTowerEReaderTrainer /*0x00*/u8 unk0; /*0x01*/u8 trainerClass; /*0x02*/u16 filler_2; - /*0x04*/u8 name[8]; - /*0x0B*/u8 ereaderTrainer[0xB0]; + /*0x04*/u8 name[7]; + /*0x0B*/u8 filler_B[0x5]; + /*0x10*/struct { + u16 easyChat[6]; + } greeting; + /*0x1C*/u8 filler_1C[0x18]; + /*0x34*/struct UnknownPokemonStruct party[3]; + /*0xB8*/u32 unk_B0; }; struct SaveBlock2_Sub @@ -788,6 +797,7 @@ struct SaveBlock2_Sub /*0x03DC, 0x0484*/ u8 filler_3DC[0x14]; /*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 var_4AD; // used by tv, but ultimately does nothing, since both code paths are identical /*0x04AE, 0x0556*/ u8 var_4AE[2]; /*0x04B0, 0x0558*/ u16 var_4B0[2]; -- cgit v1.2.3 From 978ca50dad8de72a3940b5423fd5c3b87c13eb46 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 28 Oct 2017 17:35:37 -0700 Subject: Even more battle tower decompilation --- include/global.h | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) (limited to 'include/global.h') diff --git a/include/global.h b/include/global.h index 1431bf772..4cc5f6bcc 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]; @@ -766,11 +768,12 @@ struct BattleTowerRecord // record mixing /*0x01*/u8 trainerClass; /*0x02*/u16 var_2; /*0x04*/u8 name[8]; - /*0x0C*/u8 var_C[4]; + /*0x0C*/u8 trainerId[4]; /*0x10*/struct { u16 easyChat[6]; } greeting; - /*0x1C*/u8 filler[0x87]; + /*0x1C*/struct UnknownPokemonStruct party[3]; + /*0xA0*/u32 checksum; }; struct BattleTowerEReaderTrainer @@ -785,7 +788,7 @@ struct BattleTowerEReaderTrainer } greeting; /*0x1C*/u8 filler_1C[0x18]; /*0x34*/struct UnknownPokemonStruct party[3]; - /*0xB8*/u32 unk_B0; + /*0xB8*/u32 checksum; }; struct SaveBlock2_Sub @@ -793,8 +796,9 @@ struct SaveBlock2_Sub /*0x0000, 0x00A8*/ struct BattleTowerRecord var_A8; /*0x00A4, 0x014C*/ struct BattleTowerRecord var_14C[5]; /*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 in their battle tower streak. - /*0x03DC, 0x0484*/ u8 filler_3DC[0x14]; + /*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; @@ -805,8 +809,8 @@ struct SaveBlock2_Sub /*0x04B8, 0x0560*/ u16 recordWinStreaks[2]; /*0x04BC, 0x0564*/ u8 battleTowerTrainerId; // index for gBattleTowerTrainers table /*0x04BD, 0x0565*/ u8 var_4BD[0x3]; - /*0x04C0, 0x0568*/ u8 var_4C0; - /*0x04C1, 0x0569*/ u8 var_4C1[0x7]; + /*0x04C0, 0x0568*/ u16 prizeItem; + /*0x04C2, 0x056A*/ u8 var_4C2[0x6]; /*0x04C8, 0x0570*/ u16 totalBattleTowerWins; /*0x04CA, 0x0572*/ u16 bestBattleTowerWinStreak; /*0x04CC, 0x0574*/ u16 currentWinStreaks[2]; -- cgit v1.2.3 From c677029e155aa5f0ef61de708588a36085fd36b4 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 28 Oct 2017 22:18:48 -0700 Subject: More battle_tower decomp --- include/global.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'include/global.h') diff --git a/include/global.h b/include/global.h index 4cc5f6bcc..41cffe3c2 100644 --- a/include/global.h +++ b/include/global.h @@ -786,7 +786,12 @@ struct BattleTowerEReaderTrainer /*0x10*/struct { u16 easyChat[6]; } greeting; - /*0x1C*/u8 filler_1C[0x18]; + /*0x1C*/struct { + u16 easyChat[6]; + } farewellPlayerLost; + /*0x28*/struct { + u16 easyChat[6]; + } farewellPlayerWon; /*0x34*/struct UnknownPokemonStruct party[3]; /*0xB8*/u32 checksum; }; -- cgit v1.2.3 From b9252e4f2803fe14bd7dd8385da595931b82c8d6 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 28 Oct 2017 22:59:19 -0700 Subject: Give more descriptive names for battle tower structs --- include/global.h | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'include/global.h') diff --git a/include/global.h b/include/global.h index 41cffe3c2..9b4320c81 100644 --- a/include/global.h +++ b/include/global.h @@ -780,7 +780,7 @@ struct BattleTowerEReaderTrainer { /*0x00*/u8 unk0; /*0x01*/u8 trainerClass; - /*0x02*/u16 filler_2; + /*0x02*/u16 filler_2; // TODO: this gets set in MEScrCmd_addtrainer /*0x04*/u8 name[7]; /*0x0B*/u8 filler_B[0x5]; /*0x10*/struct { @@ -796,10 +796,10 @@ struct BattleTowerEReaderTrainer /*0xB8*/u32 checksum; }; -struct SaveBlock2_Sub +struct BattleTowerData { - /*0x0000, 0x00A8*/ struct BattleTowerRecord var_A8; - /*0x00A4, 0x014C*/ struct BattleTowerRecord var_14C[5]; + /*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]; @@ -807,13 +807,13 @@ struct SaveBlock2_Sub /*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 var_4AD; // used by tv, but ultimately does nothing, since both code paths are identical + /*0x04AD, 0x0555*/ u8 battleOutcome; /*0x04AE, 0x0556*/ u8 var_4AE[2]; - /*0x04B0, 0x0558*/ u16 var_4B0[2]; - /*0x04B4, 0x055C*/ u16 var_4B4[2]; + /*0x04B0, 0x0558*/ u16 curChallengeWins[2]; // number of wins in the current challenge. (challenges consist of 7 battles) + /*0x04B4, 0x055C*/ u16 curStreakChallengesCompleted[2]; // number of challenges completed in the current streak. /*0x04B8, 0x0560*/ u16 recordWinStreaks[2]; /*0x04BC, 0x0564*/ u8 battleTowerTrainerId; // index for gBattleTowerTrainers table - /*0x04BD, 0x0565*/ u8 var_4BD[0x3]; + /*0x04BD, 0x0565*/ u8 selectedPartyMons[0x3]; // indices of the 3 selected player party mons. /*0x04C0, 0x0568*/ u16 prizeItem; /*0x04C2, 0x056A*/ u8 var_4C2[0x6]; /*0x04C8, 0x0570*/ u16 totalBattleTowerWins; @@ -844,7 +844,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 -- cgit v1.2.3 From fc786f80fd10732d23759e7c647f15406a5162d0 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 29 Oct 2017 16:51:25 -0700 Subject: Decompile a few nonmatchings in battle_tower --- include/global.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'include/global.h') diff --git a/include/global.h b/include/global.h index 9b4320c81..43ffcae0c 100644 --- a/include/global.h +++ b/include/global.h @@ -780,7 +780,7 @@ struct BattleTowerEReaderTrainer { /*0x00*/u8 unk0; /*0x01*/u8 trainerClass; - /*0x02*/u16 filler_2; // TODO: this gets set in MEScrCmd_addtrainer + /*0x02*/u16 var_2; // TODO: this gets set in MEScrCmd_addtrainer /*0x04*/u8 name[7]; /*0x0B*/u8 filler_B[0x5]; /*0x10*/struct { -- cgit v1.2.3 From fea6c54f45a22493768d57c16fb9b916cfdeadde Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Wed, 1 Nov 2017 21:33:03 -0700 Subject: Decompile Debug_FillEReaderTrainerWithPlayerData --- include/global.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'include/global.h') diff --git a/include/global.h b/include/global.h index 43ffcae0c..8461624cb 100644 --- a/include/global.h +++ b/include/global.h @@ -781,8 +781,8 @@ struct BattleTowerEReaderTrainer /*0x00*/u8 unk0; /*0x01*/u8 trainerClass; /*0x02*/u16 var_2; // TODO: this gets set in MEScrCmd_addtrainer - /*0x04*/u8 name[7]; - /*0x0B*/u8 filler_B[0x5]; + /*0x04*/u8 name[8]; + /*0x0C*/u8 trainerId[4]; /*0x10*/struct { u16 easyChat[6]; } greeting; -- cgit v1.2.3 From c5cda9f16442780794852af54635f6526c4c031a Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Wed, 1 Nov 2017 23:52:26 -0700 Subject: Use descriptive variable and function names for battle_tower code --- include/global.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'include/global.h') diff --git a/include/global.h b/include/global.h index 8461624cb..fcdd4109c 100644 --- a/include/global.h +++ b/include/global.h @@ -764,9 +764,9 @@ struct BattleTowerTrainer struct BattleTowerRecord // record mixing { - /*0x00*/u8 var_0; + /*0x00*/u8 battleTowerLevelType; // 0 = level 50, 1 = level 100 /*0x01*/u8 trainerClass; - /*0x02*/u16 var_2; + /*0x02*/u16 winStreak; /*0x04*/u8 name[8]; /*0x0C*/u8 trainerId[4]; /*0x10*/struct { @@ -780,7 +780,7 @@ struct BattleTowerEReaderTrainer { /*0x00*/u8 unk0; /*0x01*/u8 trainerClass; - /*0x02*/u16 var_2; // TODO: this gets set in MEScrCmd_addtrainer + /*0x02*/u16 winStreak; /*0x04*/u8 name[8]; /*0x0C*/u8 trainerId[4]; /*0x10*/struct { @@ -809,8 +809,8 @@ struct BattleTowerData /*0x04AC, 0x0554*/ u8 unk_554:1; /*0x04AD, 0x0555*/ u8 battleOutcome; /*0x04AE, 0x0556*/ u8 var_4AE[2]; - /*0x04B0, 0x0558*/ u16 curChallengeWins[2]; // number of wins in the current challenge. (challenges consist of 7 battles) - /*0x04B4, 0x055C*/ u16 curStreakChallengesCompleted[2]; // number of challenges completed in the current streak. + /*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. -- cgit v1.2.3 From 2a682aec81c9de708d19e0ade1efef0a4f9db245 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Thu, 2 Nov 2017 17:55:40 -0700 Subject: Define constants for special battle_tower trainer ids --- include/global.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'include/global.h') diff --git a/include/global.h b/include/global.h index fcdd4109c..d73cd5fdf 100644 --- a/include/global.h +++ b/include/global.h @@ -815,7 +815,7 @@ struct BattleTowerData /*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 var_4C2[0x6]; + /*0x04C2, 0x056A*/ u8 filler_4C2[0x6]; /*0x04C8, 0x0570*/ u16 totalBattleTowerWins; /*0x04CA, 0x0572*/ u16 bestBattleTowerWinStreak; /*0x04CC, 0x0574*/ u16 currentWinStreaks[2]; -- cgit v1.2.3 From 0a95d8d97fde65213b31ed2e0412dde218b61590 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Thu, 2 Nov 2017 17:57:33 -0700 Subject: Cleanup unused structs --- include/global.h | 23 ----------------------- 1 file changed, 23 deletions(-) (limited to 'include/global.h') diff --git a/include/global.h b/include/global.h index d73cd5fdf..29804a5a9 100644 --- a/include/global.h +++ b/include/global.h @@ -729,29 +729,6 @@ struct Pokedex /*0x44*/ u8 seen[DEX_FLAGS_NO]; }; -// struct EReaderTrainerPokemon -// { -// /*0x00, 0x4CC*/u16 unk0; -// /*0x02, 0x4CE*/u16 unk2; -// /*0x04, 0x4D0*/u8 unk4[0x8]; -// /*0x0C, 0x4D8*/u8 level; -// /*0x0D, 0x4D9*/u8 unk9[0x1F]; -// }; - -// struct EReaderTrainer -// { -// /*0x00, 0x498*/u8 filler_0[2]; -// /*0x02, 0x49A*/u16 unk2; -// /*0x04, 0x49C*/u8 filler_4[0x30]; -// /*0x34, 0x4CC*/struct EReaderTrainerPokemon party[3]; -// /*0xB8, 0x550*/u32 unkB8; -// }; - -struct SaveBlock2_1 -{ - u32 filler_0[0x29]; -}; - struct BattleTowerTrainer { u8 trainerClass; -- cgit v1.2.3