
syntax = "proto2";

package SC2APIProtocol;

message Score {
  enum ScoreType {
    Curriculum = 1;                // map generated score (from curriculum maps with special scoring)
    Melee = 2;                     // summation of in-progress and current units/buildings value + minerals + vespene
  }

  optional ScoreType score_type = 6;
  optional int32 score = 7;                 // Note: check score_type to know whether this is a melee score or curriculum score
  optional ScoreDetails score_details = 8;
}

message CategoryScoreDetails {
  optional float none = 1; // Used when no other category is configured in game data
  optional float army = 2;
  optional float economy = 3;
  optional float technology = 4;
  optional float upgrade = 5;
}

message VitalScoreDetails {
  optional float life = 1;
  optional float shields = 2;
  optional float energy = 3;
}

message ScoreDetails {
  // Sum of time any available structure able to produce a unit is not. The time stacks, as in, three idle barracks will increase idle_production_time three times quicker than just one.
  optional float idle_production_time = 1;
  // Sum of time any worker is not mining. Note a worker building is not idle and three idle workers will increase this value three times quicker than just one.
  optional float idle_worker_time = 2;

  // Sum of minerals and vespene spent on completed units.
  optional float total_value_units = 3;
  // Sum of minerals and vespene spent on completed structures.
  optional float total_value_structures = 4;

  // Sum of minerals and vespene of units, belonging to the opponent, that the player has destroyed.
  optional float killed_value_units = 5;
  // Sum of minerals and vespene of structures, belonging to the opponent, that the player has destroyed.
  optional float killed_value_structures = 6;

  // Sum of minerals collected by the player.
  optional float collected_minerals = 7;
  // Sum of vespene collected by the player.
  optional float collected_vespene = 8;

  // Estimated income of minerals over the next minute based on the players current income. The unit is minerals per minute.
  optional float collection_rate_minerals = 9;
  // Estimated income of vespene over the next minute based on the players current income. The unit is vespene per minute.
  optional float collection_rate_vespene = 10;

  // Sum of spent minerals at the moment it is spent. For example, this number is incremented by 50 the moment an scv is queued in a command center.  It is decremented by 50 if that unit is canceled.
  optional float spent_minerals = 11;
  // Sum of spent vespene at the moment it is spent. For example, this number is incremented by 50 when a reaper is queued but decremented by 50 if it is canceled.
  optional float spent_vespene = 12;

  // The following entries contains floating point values for the following catgories:
  //   none - There is no category defined in game data.
  //   army - This category includes all military units but not workers.
  //   economy - This category contains town halls, supply structures, vespene buildings and workers.
  //   technology - This category is any structure that produces units or upgrades, Barracks and Engineering Bays both fall in this category, for example.
  //   upgrade - This category is upgrades such as warp gate or weapons upgrades.

  // Sum of food, or supply, utilized in the categories above.
  optional CategoryScoreDetails food_used = 13;

  // Sum of enemies catagories destroyed in minerals.
  optional CategoryScoreDetails killed_minerals = 14;
  // Sum of enemies catagories destroyed in vespene.
  optional CategoryScoreDetails killed_vespene = 15;

  //  Sum of lost minerals for the player in each category.
  optional CategoryScoreDetails lost_minerals = 16;
  // Sum of lost vespene for the player in each category.
  optional CategoryScoreDetails lost_vespene = 17;

  // Sum of the lost minerals via destroying the players own units/buildings.
  optional CategoryScoreDetails friendly_fire_minerals = 18;
  // Sum of the lost vespene via destroying the players own units/buildings.
  optional CategoryScoreDetails friendly_fire_vespene = 19;

  // Sum of used minerals for the player in each category for each existing unit or upgrade. Therefore if a unit died worth 50 mierals this number will be decremented by 50.
  optional CategoryScoreDetails used_minerals = 20;
  // Sum of used vespene for the player in each category. Therefore if a unit died worth 50 vespene this number will be decremented by 50.
  optional CategoryScoreDetails used_vespene = 21;

  // Sum of used minerals throughout the entire game for each category. Unliked used_minerals, this value is never decremented.
  optional CategoryScoreDetails total_used_minerals = 22;
  // Sum of used vespene throughout the entire game for each category. Unliked used_vespene, this value is never decremented.
  optional CategoryScoreDetails total_used_vespene = 23;

  // Sum of damage dealt to the player's opponent for each category.
  optional VitalScoreDetails total_damage_dealt = 24;
  // Sum of damage taken by the player for each category.
  optional VitalScoreDetails total_damage_taken = 25;
  // Sum of health healed by the player. Note that technology can be healed (by queens) or repaired (by scvs).
  optional VitalScoreDetails total_healed = 26;

  // Recent raw APM.
  optional float current_apm = 27;
  // Recent effective APM.
  optional float current_effective_apm = 28;
}
