|
|
(7 intermediate revisions by 2 users not shown) |
Line 1: |
Line 1: |
| =Overview= | | =Overview= |
− | This page describes the BZRobots Enhanced Protocol that is part of the Programmable Computer Player Client project for the [[Google Summer Of Code]]. | + | This page describes the [[BZRobots]] Enhanced Protocol that forms the internals of the BZFlag Programmable Computer Player Client |
| | | |
− | =Protocol Description= | + | =Description= |
− | The protocol is linebased, and works on a request-reply basis. Below is a table of all available requests. | + | The [[BZRobots]] client currently consists of two parts called the "backend" and the "frontend". The "backend" is a lightweight game client that communicates with BZFS. It also runs a lightweight line-by-line text-based server, on which commands can be sent to control a robot. The "frontend" is an instance of a BZAdvancedRobot, including the necessary parts to communicate with the "backend". |
− | The backend has something called a ''steady-state'' - this is basically when the backend is idle, and the tank likewise. Some commands will only work in this steady-state (because they will only make sense when the bot is not doing anything), and if one of these commands are sent when the bot is in ''active-state'' the backend will '''not reply''' until the backend has entered ''steady-state'' (and any commands sent after the first command are queued for handling until the ''blocking'' command has been handled). These commands are marked with "'''Yes'''" in the "Steady-state required?"-column.
| + | |
| | | |
− | '''Frontend To Backend Messages'''
| + | ==Available Commands== |
− | {| cellspacing="0" border="1"
| + | See the [[BZRobots/API]] for the commands currently available to the BZRobots protocol. |
− | !Message syntax
| + | |
− | !Description
| + | |
− | !Steady-state required?
| + | |
− | !Implemented?
| + | |
− | |-
| + | |
− | |Execute <bot>
| + | |
− | |Runs a tick of the 'planned actions', and perhaps fires a shot (see SetFire).
| + | |
− | |'''Yes'''
| + | |
− | !style="background-color: #55ff55"|Yes
| + | |
− | |-
| + | |
− | |GetBases
| + | |
− | |<explain>
| + | |
− | |No
| + | |
− | !style="background-color: #ff3333"|No
| + | |
− | |-
| + | |
− | |GetBattleFieldHeight <bot>
| + | |
− | |Gives a 'GetBattleFieldHeight'-reply with the height of the map in "units".
| + | |
− | |No
| + | |
− | !style="background-color: #ff3333"|No
| + | |
− | |-
| + | |
− | |GetBattleFieldWidth <bot>
| + | |
− | |Gives a '|GetBattleFieldWidth'-reply with the width of the map in "units".
| + | |
− | |No
| + | |
− | !style="background-color: #ff3333"|No
| + | |
− | |-
| + | |
− | |GetConstants
| + | |
− | |<explain>
| + | |
− | |No
| + | |
− | !style="background-color: #ff3333"|No
| + | |
− | |-
| + | |
− | |GetFlags
| + | |
− | |<explain>
| + | |
− | |No
| + | |
− | !style="background-color: #ff3333"|No
| + | |
− | |-
| + | |
− | |GetDistanceRemaining <bot>
| + | |
− | |Gives a 'GetDistanceRemaining'-reply with how much is left of the currently planned movement.
| + | |
− | |'''Yes'''
| + | |
− | !style="background-color: #55ff55"|Yes
| + | |
− | |-
| + | |
− | |GetGunHeat <bot>
| + | |
− | |Gives a 'GetGunHeat'-reply with how many seconds are left of the gun cooldown.
| + | |
− | |'''Yes'''
| + | |
− | !style="background-color: #55ff55"|Yes
| + | |
− | |-
| + | |
− | |GetHeading <bot>
| + | |
− | |Gives a 'GetHeading'-reply with heading of the tank.
| + | |
− | |'''Yes'''
| + | |
− | !style="background-color: #ff3333"|No
| + | |
− | |-
| + | |
− | |GetHeight <bot>
| + | |
− | |Gives a 'GetHeight'-reply with height of the tank.
| + | |
− | |No
| + | |
− | !style="background-color: #ff3333"|No
| + | |
− | |-
| + | |
− | |GetMyTanks
| + | |
− | |<explain>
| + | |
− | |No
| + | |
− | !style="background-color: #ff3333"|No
| + | |
− | |-
| + | |
− | |GetNumRounds <bot>
| + | |
− | |To be defined (or removed?)
| + | |
− | |No
| + | |
− | !style="background-color: #ff3333"|No
| + | |
− | |-
| + | |
− | |GetObstacles
| + | |
− | |<explain>
| + | |
− | |No
| + | |
− | !style="background-color: #ff3333"|No
| + | |
− | |-
| + | |
− | |GetOtherTanks
| + | |
− | |<explain>
| + | |
− | |No
| + | |
− | !style="background-color: #ff3333"|No
| + | |
− | |-
| + | |
− | |GetRoundNum <bot>
| + | |
− | |Returns the number of times the bot has died (or?).
| + | |
− | |No
| + | |
− | !style="background-color: #ff3333"|No
| + | |
− | |-
| + | |
− | |GetShots
| + | |
− | |<explain>
| + | |
− | |No
| + | |
− | !style="background-color: #ff3333"|No
| + | |
− | |-
| + | |
− | |GetSpeed <bot>
| + | |
− | |Returns the current velocity, as per default - or as per last SetSpeed.
| + | |
− | |No
| + | |
− | !style="background-color: #ff3333"|No
| + | |
− | |-
| + | |
− | |GetTeams
| + | |
− | |<explain>
| + | |
− | |No
| + | |
− | !style="background-color: #ff3333"|No
| + | |
− | |-
| + | |
− | |GetTickDuration <bot>
| + | |
− | |Gives a 'GetTickDuration'-reply with how many seconds makes up one tick.
| + | |
− | |No
| + | |
− | !style="background-color: #55ff55"|Yes
| + | |
− | |-
| + | |
− | |GetTickRemaining <bot>
| + | |
− | |Gives a 'GetTickRemaining'-reply with how many seconds are left of this tick.
| + | |
− | |No
| + | |
− | !style="background-color: #55ff55"|Yes
| + | |
− | |-
| + | |
− | |GetTime <bot>
| + | |
− | |RoboCode: "Returns the game time of the current round, where the time is equal to the current turn in the round." - Will most likely return number of times you've 'execute'-d. Alternatively; return elapsed seconds / tickDuration (but tickDuration can change), or elapsed seconds.
| + | |
− | |'''Yes'''
| + | |
− | !style="background-color: #ff3333"|No
| + | |
− | |-
| + | |
− | |GetTurnRemaining <bot>
| + | |
− | |Gives a 'GetTurnRemaining'-reply with how much is left of the currently planned turn.
| + | |
− | |'''Yes'''
| + | |
− | !style="background-color: #55ff55"|Yes
| + | |
− | |-
| + | |
− | |GetWidth <bot>
| + | |
− | |Gives a 'GetWidth'-reply with width of the tank.
| + | |
− | |No
| + | |
− | !style="background-color: #ff3333"|No
| + | |
− | |-
| + | |
− | |GetX <bot>
| + | |
− | |Gives a 'GetX'-reply with x-coordinate of the tank.
| + | |
− | |'''Yes'''
| + | |
− | !style="background-color: #ff3333"|No
| + | |
− | |-
| + | |
− | |GetY <bot>
| + | |
− | |Gives a 'GetY'-reply with y-coordinate of the tank.
| + | |
− | |'''Yes'''
| + | |
− | !style="background-color: #ff3333"|No
| + | |
− | |-
| + | |
− | |IdentifyFrontend 0001
| + | |
− | |Greets the backend. (specifying protocol-version 0001)
| + | |
− | |No
| + | |
− | !style="background-color: #55ff55"|Yes
| + | |
− | |-
| + | |
− | |SetAhead <bot> <distance>
| + | |
− | |Sets planned movement (for next 'execute'-s) that moves 'distance' units.
| + | |
− | |No
| + | |
− | !style="background-color: #55ff55"|Yes
| + | |
− | |-
| + | |
− | |SetFire <bot>
| + | |
− | |Sets a planned shot (for next 'execute')
| + | |
− | |No
| + | |
− | !style="background-color: #55ff55"|Yes
| + | |
− | |-
| + | |
− | |SetResume <bot>
| + | |
− | |Overwrites and restores the bots current actions (distance and turn) from a previous call to SetStop. This will fail if there are no previous SetStop-calls. Will not restore until you 'execute'. (If you call SetAhead, SetTurn etc before this, they will be overwritten unless SetResume fails)
| + | |
− | |No
| + | |
− | !style="background-color: #ff3333"|No
| + | |
− | |-
| + | |
− | |SetStop <bot> <overwrite>
| + | |
− | |Stores and clears the bots current actions (distance and turn). If you've previously called SetStop and not SetResume, this will fail unless you've Set overwrite to true. Does not store & clear until you call 'execute'. (You can call SetAhead, SetTurn etc after this, and they will become the 'new' values, instead of 0.)
| + | |
− | |No
| + | |
− | !style="background-color: #ff3333"|No
| + | |
− | |-
| + | |
− | |SetSpeed <bot> <factor>
| + | |
− | |Sets next actions speed, value between 0 and 1.0. (for future 'execute'-s)
| + | |
− | |No
| + | |
− | !style="background-color: #55ff55"|Yes
| + | |
− | |-
| + | |
− | |SetTickDuration <bot> <seconds>
| + | |
− | |Sets the duration of a tick, in seconds.
| + | |
− | |No
| + | |
− | !style="background-color: #55ff55"|Yes
| + | |
− | |-
| + | |
− | |SetTurnLeft <bot> <degrees>
| + | |
− | |Sets planned turn (for next 'execute'-s) that turns 'degrees' degrees to the left.
| + | |
− | |No
| + | |
− | !style="background-color: #55ff55"|Yes
| + | |
− | |-
| + | |
− | |SetTurnRate <bot> <factor>
| + | |
− | |Sets next actions turnrate, value between 0 and 1.0. (for next 'execute'-s)
| + | |
− | |No
| + | |
− | !style="background-color: #55ff55"|Yes
| + | |
− | |}
| + | |
| | | |
− | =See Also= | + | ==Legacy== |
− | [[BZRobots/About]] - Project Overview
| + | Eventually, in an effort to simplify the internals of BZRobots, the "frontend" and "backend" will likely be altogether removed, thereby eliminating the internal protocol. It is recommended to develop bots in C or Python using the published API, rather than attempting to develop a seperate client for the BZRobot backend. |
− | | + | |
− | [[BZRobots/Ideas]] - Feature suggestions / thoughts
| + | |
Eventually, in an effort to simplify the internals of BZRobots, the "frontend" and "backend" will likely be altogether removed, thereby eliminating the internal protocol. It is recommended to develop bots in C or Python using the published API, rather than attempting to develop a seperate client for the BZRobot backend.