author | Wuzzy |
Wed, 28 Jun 2023 22:14:36 +0000 | |
changeset 2261 | 55bd0ae9d187 |
parent 1105 | 4d7c2358c51a |
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: |
|
1096 | 11 |
* map preview generation; |
12 |
* game setup and statistics messages. |
|
0 | 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 === |
1097 | 22 |
|| *Frontend* || *Engine* || *Format* || |
23 |
|| UUID || || `eseed { ... }` || |
|
24 |
|| Template Filter || || `e$template_filter N` || |
|
25 |
|| Map Type || || `e$mapgen N` || |
|
26 |
|| Maze Value || || `e$maze_size N` || |
|
27 |
|| || 128×32 byte array || `0YSD3 ... FSAD0` || |
|
0 | 28 |
|
745 | 29 |
=== Message format === |
1092 | 30 |
==== Seed ==== |
1096 | 31 |
In the Qt frontend, the seed is a UUID. |
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 |
|
1096 | 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. |
1094
860e2bd4e975
oh, what the heck, include a utf-8 string to make the point.
nemo
parents:
1093
diff
changeset
|
35 |
|
1105 | 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 keep using a terrain they generated but change the rest of the seed to ensure new positions etc. |
0 | 37 |
|
1096 | 38 |
Example: `eseed {AERTB-62FASDSAD-NNIASDSADASD-12P}` |
0 | 39 |
|
745 | 40 |
==== Template filter ==== |
1098 | 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. |
0 | 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 |
|
1096 | 51 |
Example: `e$template_filter 0` |
0 | 52 |
|
745 | 53 |
==== Map type ==== |
1096 | 54 |
`N` is a boolean variable (0/1) that selects standard map generation or maze map generation. |
0 | 55 |
|
56 |
|| *Value* || *Map Type* || |
|
57 |
|| 0 || Standard Map || |
|
58 |
|| 1 || Maze Map || |
|
59 |
||
1096 | 60 |
Example: `e$mapgen 1` |
0 | 61 |
|
745 | 62 |
==== Maze value ==== |
1096 | 63 |
`N` selects the type of maze selected, similarly to Template Filter. |
0 | 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 |
||
1096 | 73 |
Example: `e$maze_size 4` |
0 | 74 |
|
745 | 75 |
==== Image array ==== |
1096 | 76 |
The reply from engine is a 128×32 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. |
1
d51ef96162d8
added explanation of returning array and fixed links
vittorio.giovara@gmail.com
parents:
0
diff
changeset
|
77 |
|
1096 | 78 |
This image format is supported by many platforms, but it's very easy to parse anyways. The result is always a 256×128 pixel image. |
1
d51ef96162d8
added explanation of returning array and fixed links
vittorio.giovara@gmail.com
parents:
0
diff
changeset
|
79 |
|
1096 | 80 |
_No example needed._ |
1
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 |
|
1096 | 84 |
This document needs more fleshing out, but in the interest of contributing, submitting an image I'd made after reading a GCI task. |
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. By the way, 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 to see why). |