EngineProtocol.wiki
author nemo
Mon, 23 Oct 2017 10:01:59 -0400
changeset 1093 1fa6884340af
parent 1092 b26366ceabba
child 1094 860e2bd4e975
permissions -rw-r--r--
elaborate that string can be of variable length
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
     1
#summary Protocol for frontend/engine interaction.
1
d51ef96162d8 added explanation of returning array and fixed links
vittorio.giovara@gmail.com
parents: 0
diff changeset
     2
#labels Documentation,Engine,Frontend,Protocol
0
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
     3
745
99da4e68bc64 EngineProtocol: Add title
Wuzzy
parents: 592
diff changeset
     4
= Engine protocol =
99da4e68bc64 EngineProtocol: Add title
Wuzzy
parents: 592
diff changeset
     5
2
ba21be2f1b7a toc + fix
vittorio.giovara@gmail.com
parents: 1
diff changeset
     6
<wiki:toc max_depth="3" />
ba21be2f1b7a toc + fix
vittorio.giovara@gmail.com
parents: 1
diff changeset
     7
745
99da4e68bc64 EngineProtocol: Add title
Wuzzy
parents: 592
diff changeset
     8
== Introduction ==
0
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
     9
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    10
The frontend interacts with the engine in two separate occasions:
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    11
  * map preview generation;
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    12
  * game setup and statistics messages.
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    13
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    14
Messages are always in form of a string of bytes, and the first byte contains the message size (hence the maximum length is 255-1).
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    15
745
99da4e68bc64 EngineProtocol: Add title
Wuzzy
parents: 592
diff changeset
    16
== Map preview ==
0
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    17
Frontend needs to generate a preview of the map that is going to be used in game; there is no handshaking.
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    18
798
30c5f1ebd552 global replace of http with https for hedgewars.org wiki links
nemo
parents: 745
diff changeset
    19
Files in which this protocol is implemented: [https://hg.hedgewars.org/hedgewars/file/default/QTfrontend/hwmap.cpp hwmapp.cpp], [https://hg.hedgewars.org/hedgewars/file/default/project_files/HedgewarsMobile/Classes/MapConfigViewController.m MapConfigViewController.m]
1
d51ef96162d8 added explanation of returning array and fixed links
vittorio.giovara@gmail.com
parents: 0
diff changeset
    20
745
99da4e68bc64 EngineProtocol: Add title
Wuzzy
parents: 592
diff changeset
    21
=== Protocol ===
0
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    22
|| *Frontend*      || *Engine*          || *Format*                  ||
2
ba21be2f1b7a toc + fix
vittorio.giovara@gmail.com
parents: 1
diff changeset
    23
|| UUID            ||                   || {{{eseed { ... }}}}       ||
0
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    24
|| Template Filter ||                   || {{{e$template_filter N}}} ||
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    25
|| Map Type        ||                   || {{{e$mapgen N}}}          ||
7
a50f628f1564 fixed e$maze_size (thanks prg)
vittorio.giovara@gmail.com
parents: 2
diff changeset
    26
|| Maze Value      ||                   || {{{e$maze_size N}}}       ||
0
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    27
||                 || 128x32 byte array || {{{0YSD3 ... FSAD0}}}     ||
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    28
745
99da4e68bc64 EngineProtocol: Add title
Wuzzy
parents: 592
diff changeset
    29
=== Message format ===
1092
b26366ceabba fix some inaccuracy/missing information wrt seeds.
nemo
parents: 798
diff changeset
    30
==== Seed ====
b26366ceabba fix some inaccuracy/missing information wrt seeds.
nemo
parents: 798
diff changeset
    31
In the QT frontend, the seed is a UUID.
1
d51ef96162d8 added explanation of returning array and fixed links
vittorio.giovara@gmail.com
parents: 0
diff changeset
    32
The UUID is a 32 bytes array composed of ASCII characters; groups of letters should be separated by '-'. There are standard function calls to automatically generate this string depending on the tools used.
1093
1fa6884340af elaborate that string can be of variable length
nemo
parents: 1092
diff changeset
    33
1fa6884340af elaborate that string can be of variable length
nemo
parents: 1092
diff changeset
    34
This is however just due to convenience.  UUIDs are not a particularly good source of entropy and any 1-249 character string can be used.  If the string is of the form AAAAAAAAA|BBBBB (2 pipe separated strings) then only AAAAAAAAA will be used for terrain generation while AAAAAAAAA|BBBBB will be used for everything else.  This allows players to use keep a terrain they generated but change the rest of the seed to ensure new positions etc.
0
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    35
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    36
Example: _eseed {AERTB-62FASDSAD-NNIASDSADASD-12P}_
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    37
745
99da4e68bc64 EngineProtocol: Add title
Wuzzy
parents: 592
diff changeset
    38
==== Template filter ====
0
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    39
_N_ selects the type of map that is going to be generated. This command is ignored when MapGen is not 0, but it must be set anyways.
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    40
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    41
|| *Value* || *Filter Selected* ||
1
d51ef96162d8 added explanation of returning array and fixed links
vittorio.giovara@gmail.com
parents: 0
diff changeset
    42
|| 0       || None              ||
d51ef96162d8 added explanation of returning array and fixed links
vittorio.giovara@gmail.com
parents: 0
diff changeset
    43
|| 1       || Large             ||
d51ef96162d8 added explanation of returning array and fixed links
vittorio.giovara@gmail.com
parents: 0
diff changeset
    44
|| 2       || Medium            ||
d51ef96162d8 added explanation of returning array and fixed links
vittorio.giovara@gmail.com
parents: 0
diff changeset
    45
|| 3       || Small             ||
d51ef96162d8 added explanation of returning array and fixed links
vittorio.giovara@gmail.com
parents: 0
diff changeset
    46
|| 4       || Cavern            ||
d51ef96162d8 added explanation of returning array and fixed links
vittorio.giovara@gmail.com
parents: 0
diff changeset
    47
|| 5       || Wacky             ||
0
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    48
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    49
Example: _e$template_filter 0_
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    50
745
99da4e68bc64 EngineProtocol: Add title
Wuzzy
parents: 592
diff changeset
    51
==== Map type ====
0
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    52
_N_ is a boolean variable (0/1) that selects standard map generation or maze map generation.
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    53
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    54
|| *Value* || *Map Type*   ||
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    55
|| 0       || Standard Map ||
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    56
|| 1       || Maze Map     ||
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    57
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    58
Example: _e$mapgen 1_
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    59
745
99da4e68bc64 EngineProtocol: Add title
Wuzzy
parents: 592
diff changeset
    60
==== Maze value ====
0
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    61
_N_ selects the type of maze selected, similarly to Template Filter
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    62
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    63
|| *Value* || *Filter Selected*       ||
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    64
|| 0       || Small Tunnels           ||
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    65
|| 1       || Medium Tunnels          ||
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    66
|| 2       || Large Tunnels           ||
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    67
|| 3       || Small Floating Islands  ||
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    68
|| 4       || Medium Floating Islands ||
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    69
|| 5       || Large Floating Islands  ||
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    70
7
a50f628f1564 fixed e$maze_size (thanks prg)
vittorio.giovara@gmail.com
parents: 2
diff changeset
    71
Example: _e$maze_size 4_
0
89253999c825 Map preview protocol documentation
vittorio.giovara@gmail.com
parents:
diff changeset
    72
745
99da4e68bc64 EngineProtocol: Add title
Wuzzy
parents: 592
diff changeset
    73
==== Image array ====
1
d51ef96162d8 added explanation of returning array and fixed links
vittorio.giovara@gmail.com
parents: 0
diff changeset
    74
The reply from engine is a 128x32 bytes array which contains the preview image in pixel-dot notation: every bit represents a pixel of the image, 1 is black, 0 i white. Clearly it can only contain a monochromatic image, but it can be colored by the rendering engine of the frontend.
d51ef96162d8 added explanation of returning array and fixed links
vittorio.giovara@gmail.com
parents: 0
diff changeset
    75
d51ef96162d8 added explanation of returning array and fixed links
vittorio.giovara@gmail.com
parents: 0
diff changeset
    76
This image format is supported by many platforms, but it's very easy to parse anyways. The result is always a 256x128 pixel image.
d51ef96162d8 added explanation of returning array and fixed links
vittorio.giovara@gmail.com
parents: 0
diff changeset
    77
d51ef96162d8 added explanation of returning array and fixed links
vittorio.giovara@gmail.com
parents: 0
diff changeset
    78
_No example needed_
d51ef96162d8 added explanation of returning array and fixed links
vittorio.giovara@gmail.com
parents: 0
diff changeset
    79
745
99da4e68bc64 EngineProtocol: Add title
Wuzzy
parents: 592
diff changeset
    80
== In-game ==
204
feee16fc7297 Edited wiki page EngineProtocol through web user interface.
kyberneticist@gmail.com
parents: 7
diff changeset
    81
feee16fc7297 Edited wiki page EngineProtocol through web user interface.
kyberneticist@gmail.com
parents: 7
diff changeset
    82
This doc needs more fleshing out, but in the interest of contributing, submitting an image I'd made after reading a GCI task.
1092
b26366ceabba fix some inaccuracy/missing information wrt seeds.
nemo
parents: 798
diff changeset
    83
[https://hg.hedgewars.org/hedgewars/raw-file/default/doc/hwdemo.png HWD file] with a little colour markup of various interesting parts of the game.  BTW, if you ever need to debug a crashing demo, appending 032BFF to the end is a good way to make sure the demo doesn't close too early (see the image for why).