forked from CTF-handbooks/ctf-handbooks.github.io
-
Notifications
You must be signed in to change notification settings - Fork 0
/
testing-a-map-for-capture-the-flag.html
30 lines (30 loc) · 34.4 KB
/
testing-a-map-for-capture-the-flag.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<!DOCTYPE html SYSTEM "about:legacy-compat">
<html lang="en-US" data-colors-preset="contrast" data-primary-color="#9F42BC"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta charset="UTF-8"><meta name="robots" content="noindex"><meta name="built-on" content="2024-02-27T21:16:33.9200987"><title>Testing a Map for Capture the Flag | CTF Handbooks</title><script type="application/json" id="virtual-toc-data">[{"id":"prerequisites","level":0,"title":"Prerequisites","anchor":"#prerequisites"},{"id":"structure-of-the-ctf-maps-repository","level":0,"title":"Structure of the CTF Maps Repository","anchor":"#structure-of-the-ctf-maps-repository"},{"id":"github-and-git","level":0,"title":"GitHub and Git","anchor":"#github-and-git"},{"id":"finding-map-prs","level":0,"title":"Finding Map PRs","anchor":"#finding-map-prs"},{"id":"fetching-pr-files-for-testing","level":0,"title":"Fetching PR Files for Testing","anchor":"#fetching-pr-files-for-testing"},{"id":"the-testing-begins","level":0,"title":"The Testing Begins","anchor":"#the-testing-begins"},{"id":"test-away","level":0,"title":"Test away!","anchor":"#test-away"}]</script><script type="application/json" id="topic-shortcuts"></script><link href="https://resources.jetbrains.com/writerside/apidoc/6.6.6-b205/app.css" rel="stylesheet"><link rel="apple-touch-icon" sizes="180x180" href="https://jetbrains.com/apple-touch-icon.png"><link rel="icon" type="image/png" sizes="32x32" href="https://jetbrains.com/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="https://jetbrains.com/favicon-16x16.png"><link rel="manifest" href="site.webmanifest"><meta name="msapplication-TileColor" content="#000000"><meta name="msapplication-TileImage" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-144x144.png"><meta name="msapplication-square70x70logo" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-70x70.png"><meta name="msapplication-square150x150logo" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-150x150.png"><meta name="msapplication-wide310x150logo" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-310x150.png"><meta name="msapplication-square310x310logo" content="https://resources.jetbrains.com/storage/ui/favicons/mstile-310x310.png"><meta name="image" content=""><!-- Open Graph --><meta property="og:title" content="Testing a Map for Capture the Flag | CTF Handbooks"><meta property="og:description" content=""><meta property="og:image" content=""><meta property="og:site_name" content="CTF Handbooks Help"><meta property="og:type" content="website"><meta property="og:locale" content="en_US"><meta property="og:url" content="/ch/1.0/testing-a-map-for-capture-the-flag.html"><!-- End Open Graph --><!-- Twitter Card --><meta name="twitter:card" content="summary_large_image"><meta name="twitter:site" content=""><meta name="twitter:title" content="Testing a Map for Capture the Flag | CTF Handbooks"><meta name="twitter:description" content=""><meta name="twitter:creator" content=""><meta name="twitter:image:src" content=""><!-- End Twitter Card --><!-- Schema.org WebPage --><script type="application/ld+json">{
"@context": "http://schema.org",
"@type": "WebPage",
"@id": "/ch/1.0/testing-a-map-for-capture-the-flag.html#webpage",
"url": "/ch/1.0/testing-a-map-for-capture-the-flag.html",
"name": "Testing a Map for Capture the Flag | CTF Handbooks",
"description": "",
"image": "",
"inLanguage":"en-US"
}</script><!-- End Schema.org --><!-- Schema.org WebSite --><script type="application/ld+json">{
"@type": "WebSite",
"@id": "/ch/#website",
"url": "/ch/",
"name": "CTF Handbooks Help"
}</script><!-- End Schema.org --></head><body data-id="Testing-a-Map-for-Capture-the-Flag" data-main-title="Testing a Map for Capture the Flag" data-article-props="{"seeAlsoStyle":"links"}" data-template="article" data-breadcrumbs="The-Map-Tester-s-Handbook.md|The Map Tester's Handbook"><div class="wrapper"><main class="panel _main"><header class="panel__header"><div class="container"><h3>CTF Handbooks 1.0 Help</h3><div class="panel-trigger"></div></div></header><section class="panel__content"><div class="container"><article class="article" data-shortcut-switcher="inactive"><h1 data-toc="Testing-a-Map-for-Capture-the-Flag" id="Testing-a-Map-for-Capture-the-Flag.md">Testing a Map for Capture the Flag</h1><section class="chapter"><h2 id="prerequisites" data-toc="prerequisites">Prerequisites</h2><ol class="list _decimal" id="b79498e9_264" type="1"><li class="list__item" id="b79498e9_265"><p id="b79498e9_266">Minetest version 5.7 or above. The latest stable version is always recommended.</p><aside class="prompt" data-type="note" data-title="" id="b79498e9_267"><p id="b79498e9_268">If your version is outdated, download the latest from the <a href="https://www.minetest.net/" id="b79498e9_269" data-external="true" rel="noopener noreferrer">official Minetest website</a>.</p></aside></li><li class="list__item" id="b79498e9_270"><p id="b79498e9_271">The <code class="code" id="b79498e9_272">Capture the Flag</code> game. To get it,</p><ul class="list _ul" id="b79498e9_273"><li class="list__item" id="b79498e9_274"><p>Go to the <code class="code" id="b79498e9_275">Content</code> tab in your Minetest client.</p></li><li class="list__item" id="b79498e9_276"><p>Click <code class="code" id="b79498e9_277">Browse Online Content</code></p></li><li class="list__item" id="b79498e9_278"><p>Search for <code class="code" id="b79498e9_279">capturetheflag</code> (make sure that the <code class="code" id="b79498e9_280">Games</code> category is selected)</p></li><li class="list__item" id="b79498e9_281"><p>Click on the <code class="code" id="b79498e9_282">+</code> icon to install it.</p></li></ul></li><li class="list__item" id="b79498e9_283"><p id="b79498e9_284"><code class="code" id="b79498e9_285">WorldEdit</code> mod.</p><ul class="list _ul" id="b79498e9_286"><li class="list__item" id="b79498e9_287"><p>Download it as you did for the CTF game, but you should have <code class="code" id="b79498e9_288">Mods</code> set as the category.</p></li></ul><aside class="prompt" data-type="note" data-title="" id="b79498e9_289"><p id="b79498e9_290">Although this is <span class="emphasis" id="b79498e9_291">optional</span>, you will need it for a holistic map review</p></aside></li></ol></section><section class="chapter"><h2 id="structure-of-the-ctf-maps-repository" data-toc="structure-of-the-ctf-maps-repository">Structure of the CTF Maps Repository</h2><section class="chapter"><h3 id="1-where-can-i-find-the-ctf-maps-and-those-that-require-testing" data-toc="1-where-can-i-find-the-ctf-maps-and-those-that-require-testing">1. Where can I find the CTF maps and those that require testing?</h3><p id="b79498e9_292">All the <a href="https://github.com/mt-CTF/maps" id="b79498e9_293" data-external="true" rel="noopener noreferrer">maps on CTF</a> are stored in a repository on <a href="https://en.wikipedia.org/wiki/GitHub" id="b79498e9_294" data-external="true" rel="noopener noreferrer">GitHub</a>, the website via which you may be reading this. As a map tester, you will review "Pull Requests" for maps. If you're unfamiliar with "Pull Requests" and GitHub in general, read along to learn more.</p></section><section class="chapter"><h3 id="2-how-are-the-map-folders-structured" data-toc="2-how-are-the-map-folders-structured">2. How are the map folders structured?</h3><p id="b79498e9_295">The repository contains folders for each map. For example, the “Intervention in the Ice Age” map files are in the <code class="code" id="b79498e9_296">iceage</code> folder. The files within a map folder are:</p><div class="code-block" data-lang="none">
<map folder>
├── barriers.data
├── map.conf
├── map.mts
└── screenshot.png
</div><ol class="list _decimal" id="b79498e9_298" type="1"><li class="list__item" id="b79498e9_299"><p><code class="code" id="b79498e9_300">barriers.data</code>: The calculated and compressed file containing the build-time barrier locations for the map. This speeds up the barrier removal (Note: <code class="code" id="b79498e9_301">barriers.data</code> is optional and is only supported by map version 3 or above).</p></li><li class="list__item" id="b79498e9_302"><p><code class="code" id="b79498e9_303">map.conf</code>: The configuration of various values and fields essential to the map.</p></li><li class="list__item" id="b79498e9_304"><p><code class="code" id="b79498e9_305">map.mts</code>: The schematic file used to import the map into the game world. The "map" itself is inside this file.</p></li><li class="list__item" id="b79498e9_306"><p><code class="code" id="b79498e9_307">screenshot.png</code>: A screenshot of the map. It should make the critical parts of the map visible, and it needs to have an aspect ratio of 3:2 (600×400px is suggested).</p></li></ol></section></section><section class="chapter"><h2 id="github-and-git" data-toc="github-and-git">GitHub and Git</h2><p id="b79498e9_308"><a href="https://en.wikipedia.org/wiki/GitHub" id="b79498e9_309" data-external="true" rel="noopener noreferrer">GitHub</a> is one of the many services for managing code and other projects using the version control system - <a href="https://git-scm.com/" id="b79498e9_310" data-external="true" rel="noopener noreferrer">Git</a>. For now, this handbook will only cover the primary ways of obtaining the files of the map you would like to test without any command line interface.</p><section class="chapter"><h3 id="git-terminology" data-toc="git-terminology">Git Terminology</h3><p id="b79498e9_311">Below is a list of a few terms you need to know while testing maps and using GitHub. Don't be intimidated by these; keep them in mind for future reference.</p><dl id="b79498e9_312" data-style="title-left" data-title-width="narrow"><dt id="b79498e9_313" data-expandable="false">Repository</dt><dd><p id="b79498e9_315">It is a virtual storage for projects that tracks all changes made to the project's files. In this case, the <a href="https://github.com/MT-CTF/maps" id="b79498e9_316" data-external="true" rel="noopener noreferrer">map's repository</a> is the remote storage of the maps for CTF.</p></dd><dt id="b79498e9_317" data-expandable="false">Fork</dt><dd><p id="b79498e9_319">It is a copy of the original repository. It can be modified without affecting the original repository and then be made into a <span class="control" id="b79498e9_320">pull request</span> if needed.</p></dd><dt id="b79498e9_321" data-expandable="false">Commit</dt><dd><p id="b79498e9_323">It is a snapshot of a project. As a verb, it means the action of saving a snapshot (you can understand this as "save" or "apply changes").</p></dd><dt id="b79498e9_324" data-expandable="false">Branch</dt><dd><p id="b79498e9_326">It refers to a separate version of the repository that initially has the same code base as the repository in which it was made. A new branch can have its own set of files and commits.</p></dd><dt id="b79498e9_327" data-expandable="false">Pull</dt><dd><p id="b79498e9_329">A <span class="control" id="b79498e9_330">pull</span> from a repository means getting the latest source code from the repository to one's local machine.</p></dd><dt id="b79498e9_331" data-expandable="false">Push</dt><dd><p id="b79498e9_333">It means updating ("pushing") the remote repository. with <span class="control" id="b79498e9_334">commits</span> made on a local machine.</p></dd><dt id="b79498e9_335" data-expandable="false">Pull Request (PR)</dt><dd><p id="b79498e9_337">It refers to when you make changes on the fork of the repository and request to merge those changes with the main repository. Here, those who wish to make maps first fork the maps repository, create a separate branch on that fork dedicated to adding the map, and make a <span class="control" id="b79498e9_338">pull request</span> to the maps repository upon completion.</p></dd></dl></section></section><section class="chapter"><h2 id="finding-map-prs" data-toc="finding-map-prs">Finding Map PRs</h2><ul class="list _ul" id="b79498e9_339"><li class="list__item" id="b79498e9_340"><p>Go to the <a href="https://github.com/mt-CTF/maps" id="b79498e9_341" data-external="true" rel="noopener noreferrer">CTF maps repository</a> using the web browser of your choice.</p></li><li class="list__item" id="b79498e9_342"><p>Click <code class="code" id="b79498e9_343">Pull Requests</code>:</p></li></ul><figure id="b79498e9_344"><img alt="PR button" src="images/pr-s_section_example.png" title="PR button" width="873" height="115"></figure><ul class="list _ul" id="b79498e9_345"><li class="list__item" id="b79498e9_346"><p>You will be directed to a webpage listing PRs with their respective labels. Clicking on a particular PR will take you to it.</p></li><li class="list__item" id="b79498e9_347"><p>There will be a series of tabs that will help you navigate through the things related to a specific PR. (An example image is shown below.)</p></li></ul><figure id="b79498e9_348"><img alt="Intra-PR Ribbon Example" src="images/ribbon_example.png" title="Intra-PR Ribbon Example" width="672" height="50"></figure><ul class="list _ul" id="b79498e9_349"><li class="list__item" id="b79498e9_350"><p>You discuss the PR and post your reviews in the <code class="code" id="b79498e9_351">Conversation</code> tab. The <code class="code" id="b79498e9_352">Commits</code> tab lists the commit history (basically the various series of changes made to it). Similarly, the <code class="code" id="b79498e9_353">Files changed</code> tab shows the files that have been added, removed, or modified.</p></li></ul><section class="chapter"><h3 id="labels-on-pull-requests" data-toc="labels-on-pull-requests">Labels on Pull Requests</h3><p id="b79498e9_354">The Map PRs have labels that indicate their current development stage and give information about them. You should look for the <span class="emphasis" id="b79498e9_355"><span class="control" id="b79498e9_356">"New Map"</span></span> and <span class="emphasis" id="b79498e9_357"><span class="control" id="b79498e9_358">"Review Required 🔍"</span></span> labels, as they are the ones that need a review. There are also others, such as, <span class="emphasis" id="b79498e9_359"><span class="control" id="b79498e9_360">"PR not created properly"</span></span>, <span class="emphasis" id="b79498e9_361"><span class="control" id="b79498e9_362">"WIP 🏗️"</span></span> (= Work In Progress), <span class="emphasis" id="b79498e9_363"><span class="control" id="b79498e9_364">"Enhancement"</span></span>, and <span class="emphasis" id="b79498e9_365"><span class="control" id="b79498e9_366">"Action/change needed ❕"</span></span>. A good example of a PR that you can test is:</p><figure id="b79498e9_367"><img alt="Labels Example" src="images/label_example.png" title="Labels Example" width="641" height="69"></figure></section></section><section class="chapter"><h2 id="fetching-pr-files-for-testing" data-toc="fetching-pr-files-for-testing">Fetching PR Files for Testing</h2><ul class="list _ul" id="b79498e9_368"><li class="list__item" id="b79498e9_369"><p>Go to the <code class="code" id="b79498e9_370">Pull Requests</code> tab and select the PR you want to review.</p></li><li class="list__item" id="b79498e9_371"><p>Click on the blue text indicating the <code class="code" id="b79498e9_372"><pr-author>:<branch-of-their-fork></code>, like:</p></li></ul><figure id="b79498e9_373"><img alt="PR Fork/Branch Example" src="images/pr-fork-branch-example.png" title="PR Fork/Branch Example" width="689" height="153"></figure><ul class="list _ul" id="b79498e9_374"><li class="list__item" id="b79498e9_375"><p>After doing so, press the <code class="code" id="b79498e9_376">Download ZIP</code> button:</p></li></ul><figure id="b79498e9_377"><img alt="Getting the files Example" src="images/pr-forked-repo-code-example.png" title="Getting the files Example" width="934" height="422"></figure><ul class="list _ul" id="b79498e9_378"><li class="list__item" id="b79498e9_379"><p>Extract the ZIP file.</p></li><li class="list__item" id="b79498e9_380"><p>From the extracted folder, select the map folder that the PR author has added. In the example PR mentioned, the folder is <code class="code" id="b79498e9_381">sewer_village</code>.</p></li><li class="list__item" id="b79498e9_382"><p>After successfully identifying the new map folder, copy and paste it to <code class="code" id="b79498e9_383"><YOUR MINETEST FOLDER>/games/capturetheflag/mods/ctf/ctf_map/maps/</code> on your computer. You can go to your Minetest folder and paste the following into your file manager's search/directory to navigate there quickly:</p></li></ul><div class="code-block" data-lang="none">
/games/capturetheflag/mods/ctf/ctf_map/maps
</div><aside class="prompt" data-type="warning" data-title="" id="b79498e9_385"><p id="b79498e9_386">If you experience a problem with the above path on certain file managers, copy it without the <code class="code" id="b79498e9_387">/</code> at the start.</p></aside><aside class="prompt" data-type="note" data-title="" id="b79498e9_388"><p id="b79498e9_389">Going to the <code class="code" id="b79498e9_390">About</code> section in Minetest and pressing the <code class="code" id="b79498e9_391">Open User Data Directory</code> button will lead you to your Minetest folder if you do not know it's location on your filesystem.</p></aside><ul class="list _ul" id="b79498e9_392"><li class="list__item" id="b79498e9_393"><p>You have now retrieved the map folder!</p></li></ul><aside class="prompt" data-type="tip" data-title="" id="b79498e9_394"><p id="b79498e9_395">Make sure that the map has all the required files as stated in the <a href="#2-how-are-the-map-folders-structured" id="b79498e9_396" data-tooltip="The repository contains folders for each map. For example, the “Intervention in the Ice Age” map files are in the iceage folder. The files within a map folder are:"><code class="code" id="b79498e9_397">How are the map folders structured?</code></a> chapter. If not the case, then drop a message regarding it in the PR if not addressed by others already.</p></aside></section><section class="chapter"><h2 id="the-testing-begins" data-toc="the-testing-begins">The Testing Begins</h2><section class="chapter"><h3 id="1-map-config" data-toc="1-map-config">1. Map config</h3><aside class="prompt" data-type="tip" data-title="" id="b79498e9_398"><p id="b79498e9_399">You can test how the below values affect the gameplay while testing the map in-game as well. See <a href="#2-making-the-world" id="b79498e9_400" data-tooltip="Open your Minetest client and go to settings. Under Capture the Flag, enable Low RAM mode. Enable this setting to prevent the game from crashing due to memory related crashes."><code class="code" id="b79498e9_401">Making the world</code></a> and the content that follows on how to do so.</p></aside><p id="b79498e9_402">The configuration values and fields for the map are in the <code class="code" id="b79498e9_403"><map_folder>/map.conf</code> file. Open it using a text editor and check if it satisfies these criteria:</p><ul class="list _ul" id="b79498e9_404"><li class="list__item" id="b79498e9_405"><p>Required fields such as <code class="code" id="b79498e9_406">game_modes</code>, <code class="code" id="b79498e9_407">name</code>, and <code class="code" id="b79498e9_408">author</code> are filled.</p></li><li class="list__item" id="b79498e9_409"><p>The map should be enabled, or else the map cannot be played. (Look for the line <code class="code" id="b79498e9_410">enable = true</code>)</p></li><li class="list__item" id="b79498e9_411"><p>The map has a license. It should be in the family of free (as in freedom) culture licenses like <code class="code" id="b79498e9_412">CC BY-SA 4.0</code>. Note that not all Creative Commons licenses are free. E.g. <code class="code" id="b79498e9_413">CC BY-ND</code> - these are not accepted. You can learn more about these licenses <a href="https://creativecommons.org/share-your-work/cclicenses/" id="b79498e9_414" data-external="true" rel="noopener noreferrer">here</a>.</p></li><li class="list__item" id="b79498e9_415"><p>The initial items for the map are appropriate for the map (take notes of the terrain, the ores, etc.).</p></li><li class="list__item" id="b79498e9_416"><p>If the map has a hint, it should be relevant for it.</p></li><li class="list__item" id="b79498e9_417"><p>If values of <a href="https://github.com/MT-CTF/capturetheflag/blob/master/mods/ctf/ctf_map/README.md#map-constants" id="b79498e9_418" data-external="true" rel="noopener noreferrer">these map constants</a> are overridden from the default, the modifications should not negatively impact gameplay. You can check for some of these before or after testing the map in-game.</p></li></ul></section><section class="chapter"><h3 id="2-making-the-world" data-toc="2-making-the-world">2. Making the world</h3><ul class="list _ul" id="b79498e9_419"><li class="list__item" id="b79498e9_420"><p id="b79498e9_421">Open your Minetest client and go to settings. Under Capture the Flag, enable <code class="code" id="b79498e9_422">Low RAM mode</code>. Enable this setting to prevent the game from crashing due to <a href="troubleshooting.html#low-ram-mode" id="b79498e9_423" data-tooltip="CTF can sometimes reduce CPU usage by calculating things once and putting them in the RAM. Turn on low ram mode if you're getting crashes related to RAM/Memory usage.">memory related crashes</a>.</p><figure id="b79498e9_424"><img alt="enable-low-ram-mode.png" src="images/enable-low-ram-mode.png" title="enable-low-ram-mode.png" width="767" height="645"></figure></li><li class="list__item" id="b79498e9_425"><p id="b79498e9_426">Return back and make sure you are in the <code class="code" id="b79498e9_427">Start Game</code> tab.</p></li><li class="list__item" id="b79498e9_428"><p id="b79498e9_429">Click the Capture the Flag game icon:</p></li></ul><figure id="b79498e9_430"><img alt="Game icon" src="images/game_icon.png" title="Game icon" width="106" height="92"></figure><ul class="list _ul" id="b79498e9_431"><li class="list__item" id="b79498e9_432"><p>Press <code class="code" id="b79498e9_433">New World</code>.</p></li><li class="list__item" id="b79498e9_434"><p>It is vital that you ensure you are setting the world's mapgen as <code class="code" id="b79498e9_435">singlenode</code> to play a match, like the screenshot below.</p></li></ul><figure id="b79498e9_436"><img alt="Mapgen example" src="images/mapgens.png" title="Mapgen example" width="412" height="204"></figure><ul class="list _ul" id="b79498e9_437"><li class="list__item" id="b79498e9_438"><p>Finally, click <code class="code" id="b79498e9_439">Create</code>.</p></li></ul></section><section class="chapter"><h3 id="3-playing-the-game" data-toc="3-playing-the-game">3. Playing the game</h3><ul class="list _ul" id="b79498e9_440"><li class="list__item" id="b79498e9_441"><p>Select the new world that you just created.</p></li><li class="list__item" id="b79498e9_442"><p>Disable <code class="code" id="b79498e9_443">Creative Mode</code> to play the game. You can turn off <code class="code" id="b79498e9_444">Enable Damage</code> as well.</p></li><li class="list__item" id="b79498e9_445"><p>Enable the <code class="code" id="b79498e9_446">WorldEdit</code> mod by pressing <code class="code" id="b79498e9_447">Select Mods</code> and double-clicking the <code class="code" id="b79498e9_448">WorldEdit</code> mod to enable it.</p></li><li class="list__item" id="b79498e9_449"><p>Then click <code class="code" id="b79498e9_450">Play Game</code> to begin.</p></li></ul><aside class="prompt" data-type="tip" data-title="" id="b79498e9_451"><p id="b79498e9_452">If you find yourself encountering issues while testing, please refer <a href="troubleshooting.html" id="b79498e9_453" data-tooltip="Always ensure that your client is up-to-date. The recommended Minetest version for the latest CTF game is 5.6 and above, per its ContentDB page.">Troubleshooting</a>. For problems other than the ones mentioned in <a href="troubleshooting.html" id="b79498e9_454" data-tooltip="Always ensure that your client is up-to-date. The recommended Minetest version for the latest CTF game is 5.6 and above, per its ContentDB page.">Troubleshooting</a> (making sure your Minetest client is <span class="control" id="b79498e9_455">up-to-date</span>), you can contact the Map Author in your <a href="#7-posting-your-review" id="b79498e9_456" data-tooltip="To post your review, go to the Conversation tab within the PR on GitHub. Write your review in the text box and press the green Comment button.">review</a> on GitHub regarding it or get support through links in the <a href="starter-topic.html" id="b79498e9_457" data-tooltip="Support: , (#maps channel)">Welcome Page</a>.</p></aside></section><section class="chapter"><h3 id="4-selecting-the-map" data-toc="4-selecting-the-map">4. Selecting the Map</h3><aside class="prompt" data-type="note" data-title="" id="b79498e9_458"><p id="b79498e9_459">You will need the <code class="code" id="b79498e9_460">ctf_admin</code> privilege to run most of the commands in this handbook. So, grant yourself the privs using <code class="code" id="b79498e9_461">/grantme ctf_admin</code>. If you would like other privileges such as <code class="code" id="b79498e9_462">fly</code>, <code class="code" id="b79498e9_463">nolcip</code>, <code class="code" id="b79498e9_464">fast</code>, etc., you can run <code class="code" id="b79498e9_465">/grantme all</code>.</p><p id="b79498e9_466">To view and modify the various keybindings for privs that support them, you can press <kbd class="keystroke" id="b79498e9_467" data-bypass="true"><span class="keystroke__value">Esc</span></kbd> and go to <code class="code" id="b79498e9_468">Change Keys</code>.</p></aside><ul class="list _ul" id="b79498e9_469"><li class="list__item" id="b79498e9_470"><p>Check the <code class="code" id="b79498e9_471">map.conf</code> file's <code class="code" id="b79498e9_472">game_modes</code> field, if the one you are voting for in-game is not included in the list, vote <code class="code" id="b79498e9_473">0</code> and go to the mode the map is set for... (To be changed based on <a href="https://github.com/MT-CTF/capturetheflag/pull/1241/" id="b79498e9_474" data-external="true" rel="noopener noreferrer">#1241</a>).</p></li><li class="list__item" id="b79498e9_475"><p>Upon starting the game, you will be playing like how the server works, with a random map at first. To choose your map, run <code class="code" id="b79498e9_476">/ctf_next -f <map_folder></code>. In the case of the example PR, it would be <code class="code" id="b79498e9_477">/ctf_next -f sewer_village</code>.</p></li><li class="list__item" id="b79498e9_478"><p>If you are playing the map in a mode not in the map's list of supported modes, you will receive a warning with the command you need to run to switch to a supported mode. E.g.:</p></li></ul><figure id="b79498e9_479"><img alt="Unsupported Mode Warning" src="images/unsupported_mode.png" title="Unsupported Mode Warning" width="986" height="120"></figure><ul class="list _ul" id="b79498e9_480"><li class="list__item" id="b79498e9_481"><p>In the above example, you can do <code class="code" id="b79498e9_482">/ctf_next -f classic skies_of_land</code>.</p></li></ul><aside class="prompt" data-type="tip" data-title="" id="b79498e9_483"><p id="b79498e9_484">Common commands:</p><ul class="list _ul" id="b79498e9_485"><li class="list__item" id="b79498e9_486"><p>To end build time, use the <code class="code" id="b79498e9_487">/ctf_start</code> command.</p></li><li class="list__item" id="b79498e9_488"><p>To set yourself to the other team, run:</p></li></ul><div class="code-block" data-lang="none">
/grantme ctf_team_admin
</div><p id="b79498e9_490">Then:</p><div class="code-block" data-lang="none">
/ctf_teams set singleplayer <team color>
</div><p id="b79498e9_492">For example:</p><div class="code-block" data-lang="none">
/ctf_teams set singleplayer blue
</div></aside></section><section class="chapter"><h3 id="5-map-requirements" data-toc="5-map-requirements">5. Map Requirements</h3><section class="chapter"><h4 id="basics" data-toc="basics">Basics</h4><ul class="list _ul" id="b79498e9_494"><li class="list__item" id="b79498e9_495"><p>No errors appear (red text in the chat) when loading/playing the map. The error would mention what is causing the issue, so bring it to the PR author's notice accordingly.</p></li><li class="list__item" id="b79498e9_496"><p>Base: </p><ul class="list _ul" id="b79498e9_497"><li class="list__item" id="b79498e9_498"><p>The area under the flag (base floor) is indestructible and has a surface area of 5x5 at minimum.</p></li><li class="list__item" id="b79498e9_499"><p>The flag is placed in the middle of the indestructible area.</p></li><li class="list__item" id="b79498e9_500"><p>It has a team chest.</p></li></ul></li><li class="list__item" id="b79498e9_501"><p>The map <span class="control" id="b79498e9_502">should</span> be inescapable. This means map's <span class="control" id="b79498e9_503">walls</span> and <span class="control" id="b79498e9_504">floor</span> should be made of "Indestructible Barrier Glass" (<code class="code" id="b79498e9_505">ctf_map:ind_glass</code>) or other indestructible blocks, or a mixture of them. The map may not have a roof while still not allowing the player to escape through it. Make sure you can't escape through the open roof!</p></li><li class="list__item" id="b79498e9_506"><p>It has red build-time barriers separating teams that disappear when build time is over. Check if all of these are correctly placed. Make sure no areas that need it are missing.</p></li><li class="list__item" id="b79498e9_507"><p>Treasure chests are functional.</p></li><li class="list__item" id="b79498e9_508"><p>Flags can be captured without any bugs.</p></li><li class="list__item" id="b79498e9_509"><p>All the team zones are to the extent of where they should be and work as intended. You can test if they function correctly by ensuring you <span class="emphasis" id="b79498e9_510">do not get teleported back to the base during build-time while at the edges of the map's walls and the build-time barriers</span>. It is also important to ensure you <span class="emphasis" id="b79498e9_511">get teleported back to base if you cross the barriers</span> (for example, by digging under the build-time barrier). You should also make sure that you <span class="emphasis" id="b79498e9_512">do not get teleported back to base during build-time if you dig straight down to the bottom layer</span> or <span class="emphasis" id="b79498e9_513">build up to the roof</span>.</p></li><li class="list__item" id="b79498e9_514"><p>The map is without any holes leading to the void, "misplaced" blocks/accidental inconsistencies, does not contain unsupported blocks, and so on.</p></li></ul></section><section class="chapter"><h4 id="mechanics" data-toc="mechanics">Mechanics</h4><ul class="list _ul" id="b79498e9_515"><li class="list__item" id="b79498e9_516"><p>All the teams should have an <span class="control" id="b79498e9_517">equal chance of winning</span> and <span class="control" id="b79498e9_518">be subject to the same amount of difficulty in gameplay</span>. Things that affect those are base position, terrain balance, chests, and ore count.</p></li></ul><aside class="prompt" data-type="tip" data-title="" id="b79498e9_519"><p id="b79498e9_520">To count ores in a region, you can use WorldEdit.</p><ol class="list _decimal" id="b79498e9_521" type="1"><li class="list__item" id="b79498e9_522"><p>Go to the first coordinate of the area and run <code class="code" id="b79498e9_523">//1</code>.</p></li><li class="list__item" id="b79498e9_524"><p>Go to the second position and run <code class="code" id="b79498e9_525">//2</code>.</p></li><li class="list__item" id="b79498e9_526"><p>Suppress (in other words, hiding without destroying) all the ores you want to find the count of (amount gets printed in the chat) by using <code class="code" id="b79498e9_527">//suppress <node name></code>. Ensure you are correctly typing the node name. For example, you will do <code class="code" id="b79498e9_528">//suppress Mese Ore</code> for "Mese Ore" (hover over blocks in the inventory to obtain their exact name). Use <code class="code" id="b79498e9_529">//restore</code> in a selected region to bring back the suppressed nodes.</p></li></ol></aside><ul class="list _ul" id="b79498e9_530"><li class="list__item" id="b79498e9_531"><p>The map should be unique and not be similar to other maps. Maps that are too plain or are very similar to existing maps such that they do not add new value have a higher chance of rejection. The map design should encourage differing gameplay and tactics, with creativity on the map maker's part.</p></li></ul></section></section><section class="chapter"><h3 id="6-your-opinion-is-the-key" data-toc="6-your-opinion-is-the-key">6. Your opinion is the key!</h3><p id="b79498e9_532">What's next? It is your thoughts on the map! Is it fun to play? What do you think about it? How can its mechanics/style/idea be improved? All this matters.</p></section><section class="chapter"><h3 id="7-posting-your-review" data-toc="7-posting-your-review">7. Posting your Review</h3><p id="b79498e9_533">To post your review, go to the <code class="code" id="b79498e9_534">Conversation</code> tab within the PR on GitHub. Write your review in the text box and press the green <code class="code" id="b79498e9_535">Comment</code> button.</p></section></section><section class="chapter"><h2 id="test-away" data-toc="test-away">Test away!</h2><p id="b79498e9_536">Now that you have completed reading this and can test a map, you can use the <a href="map-tester-s-checklist.html" id="b79498e9_537" data-tooltip="Map Tester's Checklist File requirements: map.mts, map.conf, screenshot.png, and barriers.data screenshot.png satisfies these criteria and has an aspect ratio of 3:2. map.conf: enabled = true Proper license (see the license section in the link) Suitable initial items Applicable hint…"><code class="code" id="b79498e9_538">Map Tester's Checklist</code></a> as a summary of the process so that you never miss a step. Thank you, and enjoy your time testing map PRs for CTF!</p></section><div class="last-modified">Last modified: 27 February 2024</div><div data-feedback-placeholder="true"></div><div class="navigation-links _bottom"><a href="the-map-tester-s-handbook.html" class="navigation-links__prev">The Map Tester's Handbook</a><a href="map-tester-s-checklist.html" class="navigation-links__next">Map Tester's Checklist</a></div></article><div id="disqus_thread"></div></div></section></main></div><script src="https://resources.jetbrains.com/writerside/apidoc/6.6.6-b205/app.js"></script></body></html>