Difference between revisions of "MKWii Network Protocol/SELECT"

From Custom Mario Kart
Jump to: navigation, search
Line 9: Line 9:
 
  /*10*/  u16 rank_pl1;            // rank of previous race == start position of next race (Player 1)
 
  /*10*/  u16 rank_pl1;            // rank of previous race == start position of next race (Player 1)
 
  /*12*/  u16 sum_pts_pl1;          // accumulated event points (Player 1)
 
  /*12*/  u16 sum_pts_pl1;          // accumulated event points (Player 1)
  /*14*/  u16 unknown_1c;
+
  /*14*/  u8    driver_pl1;           // Driver of Player 1
 +
/*15*/  u8    vehicle_pl1;          // Vehicle of Player 1
 
  /*16*/  u8 user_track_pl1;      // 0x00-0x1f:course ID, 0x20-0x29:battle course ID, 0x43:none, 0xff:random
 
  /*16*/  u8 user_track_pl1;      // 0x00-0x1f:course ID, 0x20-0x29:battle course ID, 0x43:none, 0xff:random
 
  /*17*/  u8 unknown_1f;
 
  /*17*/  u8 unknown_1f;
Line 15: Line 16:
 
  /*18*/  u16 rank_pl2;            // rank of previous race (Player 2. 0x00 if there is only one player)
 
  /*18*/  u16 rank_pl2;            // rank of previous race (Player 2. 0x00 if there is only one player)
 
  /*1a*/  u16 sum_pts_pl2;          // accumulated event points (Player 2. 0x00 if there is only one player)
 
  /*1a*/  u16 sum_pts_pl2;          // accumulated event points (Player 2. 0x00 if there is only one player)
  /*1c*/  u16 unknown_24;
+
  /*1c*/  u8    driver_pl2;           // Driver of Player 2 (0x30 when only one player)
 +
/*1d*/  u8    vehicle_pl2;          // Vehicle of Player 2 (0x24 when only one player)
 
  /*1e*/  u8 user_track_pl2;      // 0x00-0x1f:course ID, 0x20-0x29:battle course ID, 0x43:none, 0xff:random (one player: 0x43; two players: same as user_track_pl1)
 
  /*1e*/  u8 user_track_pl2;      // 0x00-0x1f:course ID, 0x20-0x29:battle course ID, 0x43:none, 0xff:random (one player: 0x43; two players: same as user_track_pl1)
 
  /*1f*/  u8 unknown_27;
 
  /*1f*/  u8 unknown_27;

Revision as of 16:16, 23 June 2015

This pages is related to MKWii Network Protocol and describes the record type SELECT in GNU C notation.

typedef struct udp_select_t
{
 /*00*/  u64	time_sender;          // NULL or time of sender (milliseconds since 2000-01-01, based on real time clock)
 /*08*/  u64	time_receiver;        // NULL or assumed time of the receiver, based on the last received time

 /*10*/  u16	rank_pl1;             // rank of previous race == start position of next race (Player 1)
 /*12*/  u16	sum_pts_pl1;          // accumulated event points (Player 1)
 /*14*/  u8     driver_pl1;           // Driver of Player 1
 /*15*/  u8     vehicle_pl1;          // Vehicle of Player 1
 /*16*/  u8	user_track_pl1;       // 0x00-0x1f:course ID, 0x20-0x29:battle course ID, 0x43:none, 0xff:random
 /*17*/  u8	unknown_1f;

 /*18*/  u16	rank_pl2;             // rank of previous race (Player 2. 0x00 if there is only one player)
 /*1a*/  u16	sum_pts_pl2;          // accumulated event points (Player 2. 0x00 if there is only one player)
 /*1c*/  u8     driver_pl2;           // Driver of Player 2 (0x30 when only one player)
 /*1d*/  u8     vehicle_pl2;          // Vehicle of Player 2 (0x24 when only one player)
 /*1e*/  u8	user_track_pl2;       // 0x00-0x1f:course ID, 0x20-0x29:battle course ID, 0x43:none, 0xff:random (one player: 0x43; two players: same as user_track_pl1)
 /*1f*/  u8 	unknown_27;

 /*20*/  u16 	unknown_28;
 /*22*/  u16	unknown_2a;
 /*24*/  u8	battle_type;         // Value indicating if COIN or BOSS-Battle (in SEL1) (0x00: UNKNOWN or COIN, 0x80: BOSS)
 /*25*/  u24	team;                // 2 bits for each client slot. Bit is set for red team.

 /*28*/  u8	client_slot[12];     // relation race_slot(index) : client slot (0xff=none)
 /*34*/  u8	sel_track;           // game: selected track: 0xff:none
 /*35*/  u8	sel_phase;           // selection phase: 0:prepare, 1:wait, 2:lottery
 /*36*/  u8	sel_client;          // client index: who has selected the track (0xff: none)
 /*37*/  u8	sel_engine;          // 0:none, 1:100cc, 2:150cc 3:mirror (WW and 1st race of GP)
 /*38*/
}
__attribute__ ((packed)) udp_select_t;


During phase 1 (SEL/PREPARE), the wiis syncronize their clocks using "time_sender" and "time_receiver" so the race starts at the same time on all wiis.