@@ -17,7 +17,7 @@ pub enum ShieldBatteryDataError {
1717#[ derive( Debug , Clone ) ]
1818pub enum ShieldBatteryData {
1919 Version0 ( ShieldBatteryDataV0 ) ,
20- Version1 ( ShieldBatteryDataV1 ) ,
20+ Version1 ( ShieldBatteryDataV0 , ShieldBatteryDataV1 ) ,
2121}
2222
2323#[ derive( Debug , Clone ) ]
@@ -32,64 +32,64 @@ pub struct ShieldBatteryDataV0 {
3232
3333#[ derive( Debug , Clone ) ]
3434pub struct ShieldBatteryDataV1 {
35- // Same as v0 at the beginning
36- pub starcraft_exe_build : u32 ,
37- pub shieldbattery_version : String ,
38- pub team_game_main_players : [ u8 ; 4 ] ,
39- pub starting_races : [ u8 ; 12 ] ,
40- pub game_id : u128 ,
41- pub user_ids : [ u32 ; 8 ] ,
42- // New fields in v1
4335 game_logic_version : u16 ,
4436}
4537
4638impl ShieldBatteryData {
39+ /// The build number of the StarCraft executable used to play the game.
4740 pub fn starcraft_exe_build ( & self ) -> u32 {
4841 match self {
4942 ShieldBatteryData :: Version0 ( data) => data. starcraft_exe_build ,
50- ShieldBatteryData :: Version1 ( data) => data. starcraft_exe_build ,
43+ ShieldBatteryData :: Version1 ( data, _ ) => data. starcraft_exe_build ,
5144 }
5245 }
5346
47+ /// The version string of the ShieldBattery client used to play the game.
5448 pub fn shieldbattery_version ( & self ) -> & str {
5549 match self {
5650 ShieldBatteryData :: Version0 ( data) => & data. shieldbattery_version ,
57- ShieldBatteryData :: Version1 ( data) => & data. shieldbattery_version ,
51+ ShieldBatteryData :: Version1 ( data, _ ) => & data. shieldbattery_version ,
5852 }
5953 }
6054
55+ /// Which players were the "main" players in a team game (e.g. Team Melee).
6156 pub fn team_game_main_players ( & self ) -> & [ u8 ; 4 ] {
6257 match self {
6358 ShieldBatteryData :: Version0 ( data) => & data. team_game_main_players ,
64- ShieldBatteryData :: Version1 ( data) => & data. team_game_main_players ,
59+ ShieldBatteryData :: Version1 ( data, _ ) => & data. team_game_main_players ,
6560 }
6661 }
6762
63+ /// The starting race for each player in the game.
6864 pub fn starting_races ( & self ) -> & [ u8 ; 12 ] {
6965 match self {
7066 ShieldBatteryData :: Version0 ( data) => & data. starting_races ,
71- ShieldBatteryData :: Version1 ( data) => & data. starting_races ,
67+ ShieldBatteryData :: Version1 ( data, _ ) => & data. starting_races ,
7268 }
7369 }
7470
71+ /// The game's ID on ShieldBattery (a UUID as a u128).
7572 pub fn game_id ( & self ) -> u128 {
7673 match self {
7774 ShieldBatteryData :: Version0 ( data) => data. game_id ,
78- ShieldBatteryData :: Version1 ( data) => data. game_id ,
75+ ShieldBatteryData :: Version1 ( data, _ ) => data. game_id ,
7976 }
8077 }
8178
79+ /// The ShieldBattery user IDs of the players ingame, in the same order as the players in the
80+ /// replay header.
8281 pub fn user_ids ( & self ) -> & [ u32 ; 8 ] {
8382 match self {
8483 ShieldBatteryData :: Version0 ( data) => & data. user_ids ,
85- ShieldBatteryData :: Version1 ( data) => & data. user_ids ,
84+ ShieldBatteryData :: Version1 ( data, _ ) => & data. user_ids ,
8685 }
8786 }
8887
88+ /// The version of ShieldBattery game logic modifications used to play the game.
8989 pub fn game_logic_version ( & self ) -> Option < u16 > {
9090 match self {
9191 ShieldBatteryData :: Version0 ( _) => None ,
92- ShieldBatteryData :: Version1 ( data) => Some ( data. game_logic_version ) ,
92+ ShieldBatteryData :: Version1 ( _ , data) => Some ( data. game_logic_version ) ,
9393 }
9494 }
9595}
@@ -113,27 +113,21 @@ pub fn parse_shieldbattery_section(
113113 let mut user_ids = [ 0u32 ; 8 ] ;
114114 data. read_u32_into :: < LE > ( & mut user_ids) ?;
115115
116+ let v0 = ShieldBatteryDataV0 {
117+ starcraft_exe_build,
118+ shieldbattery_version,
119+ team_game_main_players,
120+ starting_races,
121+ game_id,
122+ user_ids,
123+ } ;
116124 if version == 0 {
117- Ok ( ShieldBatteryData :: Version0 ( ShieldBatteryDataV0 {
118- starcraft_exe_build,
119- shieldbattery_version,
120- team_game_main_players,
121- starting_races,
122- game_id,
123- user_ids,
124- } ) )
125+ Ok ( ShieldBatteryData :: Version0 ( v0) )
125126 } else
126127 /* if version >= 1 */
127128 {
128129 let game_logic_version = data. read_u16 :: < LE > ( ) ?;
129- Ok ( ShieldBatteryData :: Version1 ( ShieldBatteryDataV1 {
130- starcraft_exe_build,
131- shieldbattery_version,
132- team_game_main_players,
133- starting_races,
134- game_id,
135- user_ids,
136- game_logic_version,
137- } ) )
130+ let v1 = ShieldBatteryDataV1 { game_logic_version } ;
131+ Ok ( ShieldBatteryData :: Version1 ( v0, v1) )
138132 }
139133}
0 commit comments