syntax = "proto2"; package tm; message GameWrapper { optional bytes data = 1; optional bytes auth = 2; } message TournamentRound { enum RoundType { RANDOM_MATCHES = 1; SINGLE_ELIM_WIN_2 = 2; ROUND_ROBIN = 3; TOP_N = 4; } enum RankingType { NO_RANKINGS = 1; WP_SP = 2; WIN_PCT_WP_SP = 3; TOTAL_PTS_3_OF_4 = 4; TOTAL_PTS_PREV_ROUND = 5; WP_HEADTOHEAD_TOT_PTS = 6; AVG_SCORE_HIGH_SCORES = 7; AVG_PTS_3_OF_4 = 8; WP_AP_SP = 9; WIN_PCT_WP_AP_SP = 10; TOTAL_PTS_WP = 11; AVG_WP_AP_SP = 12; AVG_WP_AVG_SCORE_HIGH_SCORES = 13; } optional tm.TournamentRound.RoundType type = 1; optional uint32 numTeams = 2; optional string displayName = 3; optional uint32 roundNum = 4; optional uint32 teamsPerAlliance = 5 [default = 2]; optional uint32 alliancesPerMatch = 6 [default = 2]; optional tm.Game.Scoring scoring = 7; optional tm.TournamentRound.RankingType rankings = 8 [default = NO_RANKINGS]; repeated tm.Game.MatchTimeEntry matchTimes = 9; repeated tm.Game.MatchSound sounds = 10; optional tm.TournamentRound.RankingType leagueRankings = 11 [default = NO_RANKINGS]; } message Game { message Scoring { optional string matchScoreFormula = 1; optional string allianceScoreFormula = 2; optional string teamScoreFormula = 3; repeated string scoringConstraints = 4; optional string apFormula = 10; optional string wpFormula = 11; optional string spFormula = 12; optional string awpFormula = 13; } message MatchTimeEntry { enum BlockType { TIMER_ONLY = 1; AUTONOMOUS = 2; DRIVER_CTRL = 3; PAUSE = 4; } optional int32 seconds = 1; optional tm.Game.MatchTimeEntry.BlockType type = 2; optional string name = 3; } message MatchSound { optional string state = 1; optional string cause = 2; optional string fileName = 3; optional uint32 timeLeft = 4; } message ScoreObject { required string name = 1; required int32 val = 2; } message Skills { message Ranking { enum Type { HIGH_SCORES = 1; HIGH_SCORE_FORMULA = 2; TOTAL_POINTS_RECURSIVE = 3; } optional tm.Game.Skills.Ranking.Type type = 1; optional string formula = 2; } enum SkillsType { PROGRAMMING = 1; DRIVER = 2; } optional uint32 obsolete_robotSkillsDuration = 1 [default = 60]; optional uint32 obsolete_progSkillsDuration = 2 [default = 60]; optional tm.Game.Scoring scoring = 3; repeated tm.Game.Skills.Ranking rankings = 4; optional string name = 5; repeated tm.Game.MatchTimeEntry skillsTimes = 9; repeated tm.Game.MatchSound sounds = 10; optional tm.Game.Skills.SkillsType skillsType = 11; } message SkillsRanking { enum RankingType { COMBINED_HIGH_SCORES = 1; ALTERNATING_HIGH_SCORES = 2; HIGH_SCORE_FORMULA = 3; ALTERNATING_HIGH_SCORES_LIMIT_2 = 4; STOP_TIME_SUM_FROM_HIGH_SCORE_MATCHES = 5; STOP_TIME_FROM_HIGH_SCORE_MATCH = 6; ALTERNATING_HIGH_SCORES_THIRD = 7; STOP_TIME_SUM_FROM_SECOND_HIGHEST_SCORE_MATCHES = 8; STOP_TIME_SUM_FROM_THIRD_HIGHEST_SCORE_MATCHES = 9; SUM_THREE_DRIVER_ONE_PROGRAMMING = 10; } enum SkillsType { PROGRAMMING = 1; DRIVER = 2; } optional tm.Game.SkillsRanking.RankingType rankingType = 1; optional tm.Game.SkillsRanking.SkillsType skillsType = 2; optional string formula = 3; } enum VexProgram { VRC = 10; VEXU = 20; VEXIQ = 30; VEXAI = 40; RADC = 50; BELL = 60; TSA = 100; } optional uint32 apiVersion = 1 [default = 1]; optional string uuid = 2; optional uint32 version = 3; optional tm.Game.VexProgram program = 4; optional string name = 5; optional string season = 6; repeated tm.Game.MatchSound defaultSounds = 7; optional tm.Game.Scoring defaultScoring = 8; repeated tm.Game.MatchTimeEntry defaultMatchTimes = 9; repeated tm.TournamentRound rounds = 10; repeated tm.Game.Skills skills = 11; optional bytes interfaceXml = 12; repeated tm.Game.SkillsRanking skillsRankings = 13; repeated tm.Game.ScoreObject skillsInitialObjectStates = 14; }