syntax = "proto3";
package cade_api.rpc;
option cc_enable_arenas = true;
option optimize_for = SPEED;
service CadeRemote {
rpc Info(InfoRequest) returns (InfoResponse);
rpc Pause(PauseRequest) returns (PauseResponse);
rpc SetFogOfWar(SetFogOfWarRequest) returns (SetFogOfWarResponse);
rpc SetPerspective(SetPerspectiveRequest) returns (SetPerspectiveResponse);
rpc Frames(FramesRequest) returns (stream FrameSequence);
}
message InfoRequest {
}
message InfoResponse {
uint32 gameVersion = 1;
uint32 apiVersion = 2;
string baseDirectory = 3;
repeated string enabledModDirectories = 4;
}
message PauseRequest {
bool paused = 1;
}
message PauseResponse {
bool success = 1;
bool changed = 2;
}
message SetFogOfWarRequest {
bool fogOfWar = 1;
}
message SetFogOfWarResponse {
bool success = 1;
bool changed = 2;
}
message SetPerspectiveRequest {
int32 playerId = 1;
}
message SetPerspectiveResponse {
bool success = 1;
int32 playerId = 2;
}
message FramesRequest {
repeated ResolutionEntry desiredResolutions = 1;
message ResolutionEntry {
Category key = 1;
enum Category {
TIME_STEP = 0;
LOW_PRIORITY = 1;
SLEEPING_UNIT = 2;
PARTICLES = 3;
GAME_OPTIONS = 4;
PARTICLES_SIMULATION_OUTPUT = 5;
}
int32 gameTimeResolution = 2;
}
bool disableCommands = 2;
bool disableParticles = 3;
repeated string particleDefinitionWhitelist = 4;
bool disableParticleCulling = 5;
}
message FrameSequence {
repeated Frame frame = 1;
uint32 sendingWorldTime = 2;
uint32 numberOfFramesQueued = 3;
}
message Frame {
uint32 time = 1;
bytes patch = 2;
repeated Event event = 3;
bytes reversePatch = 4;
uint32 timeStepsSkipped = 7;
repeated MetricEntry metrics = 5;
message MetricEntry {
Region key = 1;
enum Region {
ALL = 0;
ENTITIES = 1;
SLEEPING_ENTITIES = 2;
MAP_TILES = 3;
UNIFIED_VISIBLE_MAP = 4;
PARTICLES = 5;
MASTER_ENTITIES = 6;
RESEARCH_STATES = 7;
VICTORY_POINTS = 8;
APPLY_PATCH = 9;
GAME_OPTIONS = 10;
}
uint32 timeMeasured = 2;
uint32 count = 3;
}
repeated Command command = 6;
}
message Event {
oneof event {
EntityKilled entityKilled = 1;
MarketTransaction marketTransaction = 2;
Tribute tribute = 3;
PlayerChat playerChat = 4;
CombatNotificationSound combatNotificationSound = 5;
}
message EntityKilled {
int32 id = 1;
int32 killerId = 2;
}
message MarketTransaction {
uint32 playerId = 1;
uint32 attributeType = 2;
float attributeBefore = 3;
float goldBefore = 4;
float attributeExchanged = 5;
float goldRate = 6;
float goldExchanged = 7;
}
message Tribute {
uint32 senderId = 1;
uint32 receiverId = 2;
uint32 attributeType = 3;
float senderValueBefore = 4;
float senderValueChange = 5;
float receiverValueBefore = 6;
float receiverValueChange = 7;
}
message PlayerChat {
int32 playerId = 1;
int32 commPlayerId = 2;
Channel channel = 3;
enum Channel {
Default = 0;
AllChat = 1;
TeamChat = 2;
EnemyChat = 3;
}
string text = 4;
int32 taunt = 5;
}
message CombatNotificationSound {
int32 receiverId = 1;
Type type = 2;
enum Type {
Normal = 0;
Wolf = 1;
Town = 2;
}
int32 attackedObjectId = 3;
}
}
message Command {
oneof command {
Interact interact = 1000;
Stop stop = 1001;
Work work = 1002;
Move move = 1003;
Create create = 1004;
AddAttribute addAttribute = 1005;
AiOrder aiOrder = 1010;
Resign resign = 1011;
AddWaypoint addWaypoint = 112;
Pause pause = 1013;
GroupWaypoint groupWaypoint = 1016;
GroupAiOrder groupAiOrder = 1017;
UnitAiState unitAiState = 1018;
Guard guard = 1019;
Follow follow = 1020;
Patrol patrol = 1021;
Scout scout = 1022;
FormFormation formFormation = 1023;
MultiplayerSave multiplayerSave = 1027;
GroupMultiWaypoints groupMultiWaypoints = 1031;
Chapter chapter = 1032;
AttackMove attackMove = 1033;
AttackMoveTarget attackMoveTarget = 1034;
Retreat retreat = 1035;
UnitTypeAiState unitTypeAiState = 1037;
AutoScout autoScout = 1038;
StopAll stopAll = 1039;
MoreTechs moreTechs = 1040;
TransformObject transformObject = 1041;
Make make = 1100;
Research research = 1101;
Build build = 1102;
Game game = 1103;
Explore explore = 1104;
BuildWall buildWall = 1105;
CancelBuild cancelBuild = 1106;
AttackGround attackGround = 1107;
GiveAttribute2 giveAttribute2 = 1108;
TradeAttribute tradeAttribute = 1109;
Repair repair = 1110;
Unload unload = 1111;
Gate gate = 1114;
Flare flare = 1115;
UnitOrder unitOrder = 1117;
Diplomacy diplomacy = 1118;
Queue queue = 1119;
SetGatherPoint setGatherPoint = 1120;
SellCommodity sellCommodity = 1122;
BuyCommodity buyCommodity = 1123;
UnitTransform unitTransform = 1125;
DropRelic dropRelic = 1126;
TownBell townBell = 1127;
GoBackToWork goBackToWork = 1128;
MultiQueue multiQueue = 1129;
SetGatherState setGatherState = 1130;
DeleteObjects deleteObjects = 1131;
ResetBuildings resetBuildings = 1132;
MultiGate multiGate = 1133;
GoBackToWork2 goBackToWork2 = 1134;
ChangePlayerName changePlayerName = 1135;
UnknownCommand unknownCommand = 2000;
}
message XyzUintPoint {
uint32 x = 1;
uint32 y = 2;
uint32 z = 3;
}
message XyzFloatPoint {
float x = 1;
float y = 2;
float z = 3;
}
message XyUintPoint {
uint32 x = 1;
uint32 y = 2;
}
message XyFloatPoint {
float x = 1;
float y = 2;
}
message Interact {
uint32 commPlayerId = 1;
int32 targetId = 2;
XyFloatPoint location = 4;
bool extend = 5;
bool instant = 6;
bool humanOrder = 7;
bool controlHeld = 8;
repeated int32 unitIds = 9;
}
message Stop {
repeated int32 unitIds = 2;
}
message Work {
uint32 commPlayerId = 1;
int32 targetId = 2;
XyFloatPoint location = 4;
bool extend = 5;
bool instant = 6;
bool humanOrder = 7;
bool controlHeld = 8;
repeated int32 unitIds = 9;
}
message Move {
uint32 commPlayerId = 1;
int32 targetId = 2;
XyFloatPoint location = 4;
bool extend = 5;
bool instant = 6;
bool humanOrder = 7;
bool controlHeld = 8;
repeated int32 unitIds = 9;
}
message Create {
int32 objCategory = 1;
uint32 playerId = 2;
XyzFloatPoint location = 3;
}
message AddAttribute {
uint32 playerId = 1;
uint32 attrId = 2;
float attrAmount = 3;
}
message AiOrder {
uint32 playerId = 2;
uint32 issuer = 3;
int32 recipient = 4;
int32 orderType = 5;
uint32 orderPriority = 6;
uint32 targetOwner = 8;
XyzFloatPoint location = 9;
float range = 10;
bool immediate = 11;
bool inFront = 12;
repeated int32 unitIds = 13;
}
message Resign {
uint32 playerId = 1;
uint32 commPlayerId = 2;
bool dropped = 3;
}
message AddWaypoint {
uint32 playerId = 1;
int32 recipient = 2;
repeated XyzUintPoint waypoints = 4;
}
message Pause {
repeated int32 unitIds = 2;
}
message GroupWaypoint {
uint32 commPlayerId = 1;
XyUintPoint location = 3;
repeated int32 unitIds = 4;
}
message GroupAiOrder {
uint32 playerId = 1;
uint32 issuer = 2;
int32 orderType = 4;
uint32 orderPriority = 5;
int32 targetId = 6;
uint32 targetOwner = 7;
XyzFloatPoint location = 8;
float range = 9;
bool immediate = 10;
bool inFront = 11;
repeated int32 unitIds = 12;
}
message UnitAiState {
uint32 state = 2;
repeated int32 unitIds = 3;
}
message UnitTypeAiState {
uint32 state = 2;
int32 unitType = 3;
int32 playerId = 4;
}
message Guard {
int32 targetId = 2;
repeated int32 unitIds = 3;
}
message Follow {
int32 targetId = 2;
repeated int32 unitIds = 3;
}
message Patrol {
bool reset = 3;
repeated XyFloatPoint wayPoints = 4;
repeated int32 unitIds = 5;
}
message Scout {
XyFloatPoint location = 2;
repeated int32 unitIds = 3;
}
message FormFormation {
uint32 playerId = 2;
int32 formationType = 3;
repeated int32 unitIds = 4;
}
message MultiplayerSave {
bool exitAfterSave = 1;
uint32 commPlayer = 2;
}
message GroupMultiWaypoints {
repeated int32 unitIds = 3;
repeated XyUintPoint waypoints = 4;
}
message Chapter {
uint32 commPlayerId = 1;
}
message AttackMove {
bool reset = 3;
repeated XyFloatPoint waypoints = 4;
repeated int32 unitIds = 5;
}
message AttackMoveTarget {
int32 targetId = 2;
repeated XyFloatPoint waypoints = 4;
repeated int32 unitIds = 5;
}
message Retreat {
uint32 commPlayerId = 1;
int32 targetId = 2;
XyFloatPoint location = 4;
bool extend = 5;
bool instant = 6;
bool humanOrder = 7;
bool controlHeld = 8;
repeated int32 unitIds = 9;
}
message AutoScout {
repeated int32 unitIds = 2;
}
message StopAll {
uint32 playerID = 1;
}
message MoreTechs {
uint32 playerID = 1;
}
message TransformObject {
uint32 playerID = 1;
int32 masterId = 2;
int32 objId = 3;
}
message Make {
int32 unitId = 1;
uint32 unitPlayerId = 2;
int32 objId = 3;
int32 uniqueId = 4;
}
message Research {
int32 unitId = 1;
uint32 unitPlayerId = 2;
int32 techId = 4;
int32 uniqueId = 5;
bool extend = 6;
repeated int32 buildingIds = 7;
}
message Build {
uint32 unitPlayerId = 2;
XyFloatPoint location = 3;
int32 objId = 4;
int32 uniqueId = 5;
uint32 frame = 6;
bool extend = 7;
bool instant = 8;
int32 spriteOverrideId = 9;
repeated int32 unitIds = 10;
}
message Game {
uint32 gameCommandId = 1;
int32 var1 = 2;
int32 var2 = 3;
float var3 = 4;
uint32 var4 = 5;
}
message Explore {
uint32 unitPlayerId = 2;
XyFloatPoint location = 3;
repeated int32 unitIds = 4;
}
message BuildWall {
uint32 unitPlayerId = 2;
XyUintPoint location1 = 3;
XyUintPoint location2 = 4;
int32 objId = 5;
int32 uniqueId = 6;
bool extend = 7;
bool instant = 8;
repeated int32 unitIds = 9;
}
message CancelBuild {
int32 unitId = 1;
int32 unitPlayerId = 2;
}
message AttackGround {
XyFloatPoint location = 2;
bool extend = 3;
bool instant = 4;
bool humanOrder = 5;
repeated int32 unitIds = 6;
}
message GiveAttribute2 {
uint32 playerId = 1;
uint32 toPlayerId = 2;
uint32 attrId = 3;
float attrAmount = 4;
float attrCost = 5;
}
message TradeAttribute {
int32 attribute = 2;
repeated int32 unitIds = 3;
}
message Repair {
int32 targetId = 2;
bool extend = 3;
bool instant = 4;
repeated int32 unitIds = 5;
}
message Unload {
XyFloatPoint location = 2;
uint32 unloadFlag = 3;
int32 unloadUnitType = 4;
repeated int32 unitIds = 5;
}
message Gate {
int32 unitId = 1;
}
message Flare {
int32 unitId = 1;
bytes flareFlags = 2;
XyFloatPoint location = 3;
uint32 playerId = 4;
uint32 commPlayerId = 5;
}
message UnitOrder {
int32 targetId = 2;
uint32 action = 3;
uint32 param = 4;
XyFloatPoint location = 5;
int32 unique_id = 6;
bool extend = 7;
bool instant = 8;
bool humanOrder = 9;
repeated int32 unitIds = 10;
}
message Diplomacy {
uint32 playerId1 = 1;
uint32 playerId2 = 2;
uint32 sequence = 3;
uint32 status = 4;
uint32 declare = 5;
uint32 diplomacy = 6;
uint32 intelligence = 7;
uint32 trade = 8;
uint32 demand = 9;
int32 gold = 10;
string message = 11;
}
message Queue {
int32 buildingId = 1;
int32 trainId = 2;
int32 trainCount = 3;
}
message SetGatherPoint {
int32 targetId = 2;
int32 targetMasterId = 3;
XyFloatPoint location = 4;
repeated int32 unitIds = 5;
}
message SellCommodity {
uint32 playerId = 1;
uint32 attrId = 2;
uint32 lotCount = 3;
int32 unitId = 4;
}
message BuyCommodity {
uint32 playerId = 1;
uint32 attrId = 2;
uint32 lotCount = 3;
int32 unitId = 4;
}
message UnitTransform {
uint32 unitPlayerId = 2;
int32 objId = 3;
int32 uniqueId = 4;
repeated int32 unitIds = 5;
}
message DropRelic {
int32 unitId = 1;
}
message TownBell {
int32 unitId = 1;
uint32 activateFlag = 2;
}
message GoBackToWork {
int32 unitId = 1;
}
message MultiQueue {
uint32 playerId = 1;
int32 selectedBuildingId = 2;
int32 trainId = 4;
int32 trainCount = 5;
repeated int32 buildingIds = 6;
}
message SetGatherState {
uint32 state = 2;
repeated int32 unitIds = 3;
}
message DeleteObjects {
uint32 playerId = 2;
repeated int32 unitIds = 3;
}
message ResetBuildings {
uint32 state = 2;
repeated int32 unitIds = 3;
}
message MultiGate {
uint32 state = 1;
repeated int32 unitIds = 3;
}
message GoBackToWork2 {
repeated int32 unitIds = 2;
}
message ChangePlayerName {
uint32 playerId = 1;
string newName = 2;
}
message UnknownCommand {
uint32 commandId = 1;
}
}