Extra tools: Difference between revisions

Rafaelff (talk | contribs)
packetgen: improve explanation
m better spacing (now checked that only unnecessary spaces are deleted)
 
(11 intermediate revisions by 4 users not shown)
Line 1: Line 1:
Extra tools are available for running some non-gaming-related tasks, like map optimization by mappers, or debugging and testing by developers. These tools must be run from command-line interface (e.g. Command Prompt on Windows or Terminal on Linux) either by adding their containing directory to the PATH variable or by running directly from the containing directory.
<languages/>
<translate>
<!--T:1-->
'''''Extra tools''''' are available for running some non-gaming-related tasks, like map optimization by mappers, or debugging and testing by developers. These tools must be run from command-line interface (e.g. Command Prompt on Windows or Terminal on Linux) either by adding their containing directory to the PATH variable or by running directly from the containing directory.


== Getting the extra tools ==
== Getting the extra tools == <!--T:2-->


These tools are '''not''' provided in the binary DDNet game in the [https://ddnet.tw/downloads/ Downloads page]. Having that said, extra tools mapping-related can be download for different platforms in the Downloads page, under the name "Graphics Tools".
<!--T:3-->
These tools are '''not''' provided in the binary DDNet game in the [https://ddnet.org/downloads/ Downloads page]. Having that said, extra tools mapping-related can be download for different platforms in the Downloads page, under the name "Graphics Tools".


<!--T:4-->
These and other extra tools (listed below) can be found on the [https://github.com/ddnet/ddnet DDNet source code] under [https://github.com/ddnet/ddnet/tree/master/src/tools src/tools] directory.
These and other extra tools (listed below) can be found on the [https://github.com/ddnet/ddnet DDNet source code] under [https://github.com/ddnet/ddnet/tree/master/src/tools src/tools] directory.


== List of extra tools ==
== List of extra tools == <!--T:5-->


<!--T:6-->
See below the list and description of the tools.
See below the list and description of the tools.


=== config_retrieve ===
=== config_retrieve === <!--T:7-->


  config_retrieve ''map_file''
<!--T:8-->
config_retrieve ''map_file''


<!--T:9-->
Retrieves configuration embedded in a DDNet map file ''map_file'' and stores it in a DDNet map configuration file with same filename (e.g. "Kobra 4.map" returns "Kobra 4.cfg")
Retrieves configuration embedded in a DDNet map file ''map_file'' and stores it in a DDNet map configuration file with same filename (e.g. "Kobra 4.map" returns "Kobra 4.cfg")


<!--T:10-->
''Available since: DDNet 9.0''
''Available since: DDNet 9.0''


=== config_store ===
=== config_store === <!--T:11-->


  config_store ''map_file''
<!--T:12-->
config_store ''map_file''


<!--T:13-->
Stores configuration from a map's configuration file into the ''map_file''.  Both configuration and map files must have the same filename in the same directory, otherwise the operation will fail.
Stores configuration from a map's configuration file into the ''map_file''.  Both configuration and map files must have the same filename in the same directory, otherwise the operation will fail.


<!--T:14-->
If there is no difference between the configuration to stored and the configuration embedded in the map, then operation will be canceled with message <code>configs coincide, not updating map</code>.
If there is no difference between the configuration to stored and the configuration embedded in the map, then operation will be canceled with message <code>configs coincide, not updating map</code>.


<!--T:15-->
''Available since: DDNet 9.0''
''Available since: DDNet 9.0''


=== crapnet ===
=== crapnet === <!--T:16-->


  crapnet
<!--T:17-->
crapnet


<!--T:18-->
Tests connection by setting a client–server connection locally and running ping between them. Reports dropped packets with message <code>dropped packet</code> and successes with <code>cfg = ''number''</code>, where ''number'' varies from 0 to 2.
Tests connection by setting a client–server connection locally and running ping between them. Reports dropped packets with message <code>dropped packet</code> and successes with <code>cfg = ''number''</code>, where ''number'' varies from 0 to 2.


=== dilate ===


  dilate ''image_file1'' [''image_file2'' ... ]
=== dilate === <!--T:19-->


<!--T:20-->
dilate ''image_file1'' [''image_file2'' ... ]
<!--T:21-->
It is a graphics tool, mainly useful for mappers. It takes care of transparent areas to prevent black/white outlines around your images ingame, therefore avoiding blending and mipmap issues. See [http://wiki.polycount.com/wiki/Edge_padding Edge padding] for more info.
It is a graphics tool, mainly useful for mappers. It takes care of transparent areas to prevent black/white outlines around your images ingame, therefore avoiding blending and mipmap issues. See [http://wiki.polycount.com/wiki/Edge_padding Edge padding] for more info.


Note this works only in RGBA image files. So, it will not work for, for instance, in JPEG files.
<!--T:22-->
Note this works only in RGBA image files (e.g. PNG files). So, it will fail in e.g. JPEG files.


=== dummy_map ===
=== dummy_map === <!--T:23-->


   dummy_map
   <!--T:24-->
dummy_map


<!--T:25-->
Creates a dummy, small empty map to be used to start a server. See [https://github.com/ddnet/ddnet/blob/a66379918832e5ad93332bbe0475394b156b5c24/src/engine/shared/network_server.cpp#L371] for more info.
Creates a dummy, small empty map to be used to start a server. See [https://github.com/ddnet/ddnet/blob/a66379918832e5ad93332bbe0475394b156b5c24/src/engine/shared/network_server.cpp#L371] for more info.


=== fake_server ===
=== fake_server === <!--T:26-->


  fake_server
<!--T:27-->
fake_server


<!--T:28-->
Creates a fake server for testing.
Creates a fake server for testing.


=== map_convert_07 ===
=== map_convert_07 === <!--T:29-->


  map_convert_07 ''src_map_file'' ''dest_map_file''
<!--T:30-->
map_convert_07 ''src_map_file'' ''dest_map_file''


<!--T:31-->
Makes <code>''dest_map_file''</code> compatible with Teeworlds version 7.x that otherwise it would be compatible '''only''' with Teeworlds version 6.x. If successfully, it creates a valid 07-compatible destination map; otherwise, it returns one of the following:
Makes <code>''dest_map_file''</code> compatible with Teeworlds version 7.x that otherwise it would be compatible '''only''' with Teeworlds version 6.x. If successfully, it creates a valid 07-compatible destination map; otherwise, it returns one of the following:


<!--T:32-->
* an usage message if incorrect arguments are provided
* an usage message if incorrect arguments are provided
* <code>failed to open source map</code> if an error happens when opening the source map
* <code>failed to open source map</code> if an error happens when opening the source map
Line 68: Line 94:
* <code>invalid image format</code> if incorrectly formatted PNG.
* <code>invalid image format</code> if incorrectly formatted PNG.


<!--T:33-->
''Available since: DDNet 12.9''
''Available since: DDNet 12.9''


=== map_diff ===
=== map_diff === <!--T:34-->


  map_diff ''map_file1'' ''map_file2''
<!--T:35-->
map_diff ''map_file1'' ''map_file2''


<!--T:36-->
Compares two map files, reporting one of the follow:
Compares two map files, reporting one of the follow:
* no diff output, meaning the maps are the same
* no diff output, meaning the maps are the same
Line 80: Line 109:
* lastly, the index and flags positions that differ.
* lastly, the index and flags positions that differ.


<!--T:37-->
If there is no difference between maps, returns 0; otherwise, returns 1.
If there is no difference between maps, returns 0; otherwise, returns 1.


=== map_extract ===
=== map_extract === <!--T:38-->


  map_extract ''map_file'' [''directory'']
<!--T:39-->
map_extract ''map_file'' [''directory'']


<!--T:40-->
Extracts contents from ''map_file'' into the ''directory''. If optional argument ''directory'' is not provided, extracts to the current directory.
Extracts contents from ''map_file'' into the ''directory''. If optional argument ''directory'' is not provided, extracts to the current directory.


=== map_optimize ===
=== map_optimize === <!--T:41-->


  map_optimize ''source_map_filepath'' [''dest_map_filepath'']
<!--T:42-->
map_optimize ''source_map_filepath'' [''dest_map_filepath'']


<!--T:43-->
Optimizes the map file in the <code>''source_map_filepath''</code> given (see [https://github.com/ddnet/ddnet/pull/3201 how it works]) and stores the output in the given <code>''dest_map_filepath''</code>; if <code>''dest_map_filepath''</code> is unset, output path defaults to <code>out/''source_map_filename''.map</code>, stripping the path and the extension of the source file.
Optimizes the map file in the <code>''source_map_filepath''</code> given (see [https://github.com/ddnet/ddnet/pull/3201 how it works]) and stores the output in the given <code>''dest_map_filepath''</code>; if <code>''dest_map_filepath''</code> is unset, output path defaults to <code>out/''source_map_filename''.map</code>, stripping the path and the extension of the source file.


<!--T:44-->
Note the name of the embedded images optimized is changed from <code>''originalname''</code> to <code>''originalname''_cut_''newSHA256''</code> (where <code>''newSHA256''</code> is the new sha256 of the embedded optimized image). It is renamed is to make clear it was optimized because this tool '''will''' make changes in the mapres used by the map file.
Note the name of the embedded images optimized is changed from <code>''originalname''</code> to <code>''originalname''_cut_''newSHA256''</code> (where <code>''newSHA256''</code> is the new sha256 of the embedded optimized image). It is renamed is to make clear it was optimized because this tool '''will''' make changes in the mapres used by the map file.


<!--T:45-->
If failed to open source or target file, returns -1.
If failed to open source or target file, returns -1.


<!--T:46-->
''Available since:'' DDNet 15.5.4
''Available since:'' DDNet 15.5.4


=== map_replace_image ===
=== map_replace_image === <!--T:47-->


  map_replace_image ''map_file1'' ''map_file2'' ''imagename'' ''image_file''
<!--T:48-->
map_replace_image ''map_file1'' ''map_file2'' ''imagename'' ''image_file''


<!--T:49-->
Replaces the image ''imagename'' currently inside the map filename ''map_file1'' with the image filepath ''image_file'', and save into the map filename ''map_file2.map''.
Replaces the image ''imagename'' currently inside the map filename ''map_file1'' with the image filepath ''image_file'', and save into the map filename ''map_file2.map''.


<!--T:50-->
Please note:
Please note:
* Both map filenames must be relative to user default DDNet folder
* Both map filenames must be relative to user default DDNet folder
* New image filepath can be absolute, or relative to the current directory
* New image filepath can be absolute, or relative to the current directory


=== map_resave ===
=== map_resave === <!--T:51-->


  map_resave ''map_file'' ''image_file''
<!--T:52-->
map_resave ''map_file'' ''image_file''


<!--T:53-->
Updates the map file ''map_file.map'' with the provided file ''image_file''.
Updates the map file ''map_file.map'' with the provided file ''image_file''.


<!--T:54-->
The error status 255 is returned if 1) a number of arguments different from 2 is provided, 2) if the ''map_file.map'' is not valid, or 3) if ''image_file'' is not a valid image file (e.g. it is a text file); otherwise, return 0.
The error status 255 is returned if 1) a number of arguments different from 2 is provided, 2) if the ''map_file.map'' is not valid, or 3) if ''image_file'' is not a valid image file (e.g. it is a text file); otherwise, return 0.


=== packetgen ===
=== packetgen === <!--T:55-->


  packetgen
<!--T:56-->
packetgen


<!--T:57-->
Generates and sends network packets to 127.0.0.1:8303 (localhost, in default server port) to test communication with a local server instance.
Generates and sends network packets to 127.0.0.1:8303 (localhost, in default server port) to test communication with a local server instance.


=== unicode_confusables ===
=== unicode_confusables === <!--T:58-->


  unicode_confusables ''string1'' ''string2''
<!--T:59-->
unicode_confusables ''string1'' ''string2''


<!--T:60-->
Compares ''string1'' with ''string2'' and report if they are "confusable", i.e. if the characters are "equal" and could cause confusion. For this to work, the characters with accents or other things around them are considered the "confusable" with the base character. Therefore, ''aa'' and ''aá'' are confusable (''á'' was considered as ''a''), while ''aa'' and ''ab'' are not.
Compares ''string1'' with ''string2'' and report if they are "confusable", i.e. if the characters are "equal" and could cause confusion. For this to work, the characters with accents or other things around them are considered the "confusable" with the base character. Therefore, ''aa'' and ''aá'' are confusable (''á'' was considered as ''a''), while ''aa'' and ''ab'' are not.


<!--T:61-->
If they are confusable, it returns <code>not_confusable=0</code>, otherwise, returns <code>not_confusable=1</code>.
If they are confusable, it returns <code>not_confusable=0</code>, otherwise, returns <code>not_confusable=1</code>.


<!--T:62-->
''Available since: DDNet version 10.3.5''
''Available since: DDNet version 10.3.5''


<!--T:63-->
''New in DDNet version 12.9:'' Unicode 12.0 support and the tool name was renamed from ''confusables'' to ''unicode_confusables''.
''New in DDNet version 12.9:'' Unicode 12.0 support and the tool name was renamed from ''confusables'' to ''unicode_confusables''.


=== uuid ===
=== uuid === <!--T:64-->


  uuid ''name''
<!--T:65-->
uuid ''name''


<!--T:66-->
Prints uuid for the provided ''name''.
Prints uuid for the provided ''name''.


<!--T:67-->
The uuid system was implemented to be easily extended by independent authors without collisions, something that the old system – with increasing integers – did not allow. This works for engine and game messages, snapshot items and events.
The uuid system was implemented to be easily extended by independent authors without collisions, something that the old system – with increasing integers – did not allow. This works for engine and game messages, snapshot items and events.


<!--T:68-->
Exits with error status 255 if ''name'' is not provided.
Exits with error status 255 if ''name'' is not provided.


<!--T:69-->
''Available since: DDNet 10.6.1''
''Available since: DDNet 10.6.1''
</translate>