author | nemo |
Mon, 23 Oct 2017 11:38:46 -0400 | |
changeset 1095 | 3e447fab8d32 |
parent 1094 | 860e2bd4e975 |
child 1096 | 79417f0b3cfe |
permissions | -rw-r--r-- |
0 | 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 | 3 |
|
745 | 4 |
= Engine protocol = |
5 |
||
2 | 6 |
<wiki:toc max_depth="3" /> |
7 |
||
745 | 8 |
== Introduction == |
0 | 9 |
|
10 |
The frontend interacts with the engine in two separate occasions: |
|
11 |
* map preview generation; |
|
12 |
* game setup and statistics messages. |
|
13 |
||
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). |
|
15 |
||
745 | 16 |
== Map preview == |
0 | 17 |
Frontend needs to generate a preview of the map that is going to be used in game; there is no handshaking. |
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 | 21 |
=== Protocol === |
0 | 22 |
|| *Frontend* || *Engine* || *Format* || |
1095 | 23 |
|| Seed || || {{{eseed { ... }}}} || |
0 | 24 |
|| Template Filter || || {{{e$template_filter N}}} || |
25 |
|| Map Type || || {{{e$mapgen N}}} || |
|
7 | 26 |
|| Maze Value || || {{{e$maze_size N}}} || |
0 | 27 |
|| || 128x32 byte array || {{{0YSD3 ... FSAD0}}} || |
28 |
||
745 | 29 |
=== Message format === |
1092 | 30 |
==== Seed ==== |
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 | 33 |
|
1094
860e2bd4e975
oh, what the heck, include a utf-8 string to make the point.
nemo
parents:
1093
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. For example. 人算不如天算 is a valid seed. |
860e2bd4e975
oh, what the heck, include a utf-8 string to make the point.
nemo
parents:
1093
diff
changeset
|
35 |
|
860e2bd4e975
oh, what the heck, include a utf-8 string to make the point.
nemo
parents:
1093
diff
changeset
|
36 |
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 | 37 |
|
38 |
Example: _eseed {AERTB-62FASDSAD-NNIASDSADASD-12P}_ |
|
39 |
||
745 | 40 |
==== Template filter ==== |
0 | 41 |
_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. |
42 |
||
43 |
|| *Value* || *Filter Selected* || |
|
1
d51ef96162d8
added explanation of returning array and fixed links
vittorio.giovara@gmail.com
parents:
0
diff
changeset
|
44 |
|| 0 || None || |
d51ef96162d8
added explanation of returning array and fixed links
vittorio.giovara@gmail.com
parents:
0
diff
changeset
|
45 |
|| 1 || Large || |
d51ef96162d8
added explanation of returning array and fixed links
vittorio.giovara@gmail.com
parents:
0
diff
changeset
|
46 |
|| 2 || Medium || |
d51ef96162d8
added explanation of returning array and fixed links
vittorio.giovara@gmail.com
parents:
0
diff
changeset
|
47 |
|| 3 || Small || |
d51ef96162d8
added explanation of returning array and fixed links
vittorio.giovara@gmail.com
parents:
0
diff
changeset
|
48 |
|| 4 || Cavern || |
d51ef96162d8
added explanation of returning array and fixed links
vittorio.giovara@gmail.com
parents:
0
diff
changeset
|
49 |
|| 5 || Wacky || |
0 | 50 |
|
51 |
Example: _e$template_filter 0_ |
|
52 |
||
745 | 53 |
==== Map type ==== |
0 | 54 |
_N_ is a boolean variable (0/1) that selects standard map generation or maze map generation. |
55 |
||
56 |
|| *Value* || *Map Type* || |
|
57 |
|| 0 || Standard Map || |
|
58 |
|| 1 || Maze Map || |
|
59 |
||
60 |
Example: _e$mapgen 1_ |
|
61 |
||
745 | 62 |
==== Maze value ==== |
0 | 63 |
_N_ selects the type of maze selected, similarly to Template Filter |
64 |
||
65 |
|| *Value* || *Filter Selected* || |
|
66 |
|| 0 || Small Tunnels || |
|
67 |
|| 1 || Medium Tunnels || |
|
68 |
|| 2 || Large Tunnels || |
|
69 |
|| 3 || Small Floating Islands || |
|
70 |
|| 4 || Medium Floating Islands || |
|
71 |
|| 5 || Large Floating Islands || |
|
72 |
||
7 | 73 |
Example: _e$maze_size 4_ |
0 | 74 |
|
745 | 75 |
==== Image array ==== |
1
d51ef96162d8
added explanation of returning array and fixed links
vittorio.giovara@gmail.com
parents:
0
diff
changeset
|
76 |
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
|
77 |
|
d51ef96162d8
added explanation of returning array and fixed links
vittorio.giovara@gmail.com
parents:
0
diff
changeset
|
78 |
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
|
79 |
|
d51ef96162d8
added explanation of returning array and fixed links
vittorio.giovara@gmail.com
parents:
0
diff
changeset
|
80 |
_No example needed_ |
d51ef96162d8
added explanation of returning array and fixed links
vittorio.giovara@gmail.com
parents:
0
diff
changeset
|
81 |
|
745 | 82 |
== In-game == |
204
feee16fc7297
Edited wiki page EngineProtocol through web user interface.
kyberneticist@gmail.com
parents:
7
diff
changeset
|
83 |
|
feee16fc7297
Edited wiki page EngineProtocol through web user interface.
kyberneticist@gmail.com
parents:
7
diff
changeset
|
84 |
This doc needs more fleshing out, but in the interest of contributing, submitting an image I'd made after reading a GCI task. |
1092 | 85 |
[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). |