# san7890's A-Z Guide to Mapping ### Pre-Amble *This guide is written to be a **comprehensive quick-start guide** for anyone wishing to get their toes started in mapping but have absolutely zero idea where to start. If you know what to do for one step or “get the gist”, hop around as you like. If you are completely clueless/scared, I advise sitting back and reading. Feel free to follow along as if this were a recipe, do as you read.* Mapping is easy. Historically, it was lauded to be one of the more difficult parts of our repository, but recent advancements in technology have removed the need for this. That being said, previous guides (such as [Metacide](https://tgstation13.org/wiki/User:Metacide)’s, the creator of MetaStation) de-emphasized the importance of needing to get yourself set up, saying stuff like “just get a ZIP file and play around!” However, this pattern of thinking has negative effects down the line when you eventually want to push your mapping endeavor to our beloved repository. This guide is rather /tg/station-centric, but any downstream worth its salt should be capable of doing the stuff presented in this guide (otherwise, they are setting themselves up for a disadvantage). However, this guide has been written to still contain a lot of "general" information about mapping that should still be useful to anyone who wishes to contribute anywhere. This is why I strongly advocate for each and every person to get all their bases covered, and then enjoy the beautiful art of mapping. Doing it this way leads to less weird roadblocks and an easier review process. After all, what’s the point of creating a beautiful piece of work if the world can not see it? If you already have some workflow for something set up, that's great! Feel free to skip around. If you really want to read in-depth, I've included links to the various code references on a per-word basis. **Already know how to map? Check out the [Mapping Reference Collection](https://hackmd.io/@tgstation/ry4-gbKH5)!** --- [ToC] ## Ingredients You will need the following ingredients. This list may be a bit long and arduous, but these are all the simplest, most modern programs to work with. You will not go wrong by having all of this prepared. I will be using everything in bold for the matters of creating this guide, with substitutions listed above. ### Git Utilities - [Git (Windows)](https://git-scm.com/download/win) - No getting around this one. - [Github Desktop (and a GitHub Account)](https://desktop.github.com/) - You may substitute this for any Git client that you know how to use already (Bash or GitKraken). If you do not know how to use any Git client, Github Desktop remains an acceptable client for mapping changes, and I will be using it throughout this guide. There is no getting around this, you need to learn how to Git (in any way) eventually. ### Mapping Utilities - [StrongDMM Map Editor (available for Windows, Linux, and MacOS)](https://github.com/SpaiR/StrongDMM) - If you prefer to use a web-based utility, you may use [FastDMM2](https://github.com/monster860/FastDMM2). - *Never, ever use Dream Maker to map. You will only harm yourself and any passion you may have for mapping.* - [Visual Studio Code](https://code.visualstudio.com/) with the [Goonstation Extension Pack ](https://marketplace.visualstudio.com/items?itemName=Goonstation.goonstation-extpack) - This is recommended because you will need to test your mapping changes! In the words of MMMiracles (creator of [Cere](https://tgstation13.org/wiki/CereStation), [Donut](https://tgstation13.org/wiki/DonutStation), and [Tram](https://tgstation13.org/wiki/Tramstation)): “Knowing how to code greatly expands your mapping horizons.” You will not need to know how to code in order to map but having this set up at the very start will greatly assist your future endeavors! - We use the Goonstation Extension Pack for easy interaction with BYOND’s Dream Maker code, it is a must-have. Don’t fret the name (because /tg/ coders made most of the stuff anyways). - [Python](https://www.python.org/downloads/) - This is needed for Git Hooks, which are important in your mapping endeavors. - [Love!](https://hackmd.io/@tgstation/ry4-gbKH5#The-Inexorable-Passage-of-Time---A-Closing-Note) ## Gitting Set Up If you don't want to use GitHub Desktop, or would like something more in depth, feel free to consult [this guide](https://hackmd.io/@tgstation/HJ8OdjNBc#-So-how-do-I-get-started) for a method of doing it using Visual Studio Code. There are overlaps between the information provided in both guides, and if you just need mapping specific stuff, feel free to [jump down a few sections](#Git-Hooks). ### GitHub.com Operations Alright, I hope you have enough technical expertise to get all of those downloaded, because I’m going to assume you were able to use the download links I provided above. This guide will have many pictures, though. Some things are required for other portions to work (dependencies), but it’s pretty easy to diagnose if something is missing. Firstly, you need a [fork](https://git-scm.com/book/en/v2/GitHub-Contributing-to-a-Project). *A fork will be your very own copy of our repository*, free do with as you wish! Just hit this button on https://github.com/tgstation/tgstation. <img src="https://i.imgur.com/55RIdwj.png" style="display: block; margin: 0 auto"/> Once it’s forked, you’ll be able to access something like this. Feel free to be creative with the name of your fork. Once you’ve got that, you should have something like this on your base GitHub profile: <img src="https://i.imgur.com/EtKqHNA.png" style="display: block; margin: 0 auto"/> --- ### GitHub Desktop (or associated client) Nice! Alright, did you get Github Desktop? This next part is a cinch, just hit this handy button under “Code” right here: <img src="https://i.imgur.com/gk4hdiz.png" style="display: block; margin: 0 auto"/> You’ll get a screen that looks like this, just make sure you have a clean folder for Git to clone itself into, and hit “[Clone](https://git-scm.com/docs/git-clone)”: <img src="https://i.imgur.com/4qtaSnR.png" style="display: block; margin: 0 auto"/> This screen will start up, just let it run, it takes a few minutes. <img src="https://i.imgur.com/uk2ZIZP.png" style="display: block; margin: 0 auto"/> Alright, at this screen, you want to hit “[Contribute to the parent project](https://git-scm.com/book/en/v2/GitHub-Contributing-to-a-Project)”. That’s important because it’ll make your life a tad bit easier in later steps (the Pull Request portion). <img src="https://i.imgur.com/NnAmxM3.png" style="display: block; margin: 0 auto"/> Cool, now you have a copy of the /tg/station repository! However, one BIG thing you want to do before you touch a map: <img src="https://i.imgur.com/KzI7ErT.png" style="display: block; margin: 0 auto"/> #### [Make a new branch](https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell)! This is super-duper important, because [you want to keep your “master” branch on your fork as clean as possible](https://git-scm.com/book/en/v2/Git-Branching-Branch-Management), since it’s a pain to clean out and send pull requests to. For every individual project you work on and submit a [Pull Request](https://git-scm.com/docs/git-request-pull) for, you want to be on a brand new branch. Feel free to name it whatever you want, can be as goofy or as organizational as you want. It’s your fork, after all. <img src="https://i.imgur.com/uAHTg21.png" style="display: block; margin: 0 auto"/> You may also get a screen that says “[base it off the current branch](https://git-scm.com/docs/git-checkout)” or “base it off the [upstream/master](https://git-scm.com/book/en/v2/Git-Branching-Remote-Branches)”. That depends on what you want, but if you want to start fresh on a new project, always hit “base it off the upstream/master”. <img src="https://i.imgur.com/xANg86t.png" style="display: block; margin: 0 auto"/> This should be what it looks like at this point in time. You’ve done a good job keeping along so far, so let’s keep going. ## **Git Hooks** > Hey, listen! This is important! [color=#FF0000] /tg/station's repository is quite large, and has an innumerable amount of people working on an innumerable number of projects on the same maps at the same time. Thus, conflicts on the file itself can arise. We have a brilliant suite of tools to aid us with this conflicts, and getting these [Git Hooks](https://git-scm.com/docs/git-hook) installed at this point in time is one of the best things you can do. [*You can read more on resolving merge conflicts here.*](https://hackmd.io/@tgstation/ry4-gbKH5#Assured-Merge-Conflict-Resolution) Firstly, from the root of your repository, go into `/tools/hooks` and run `Install.bat` (or the file that corresponds to your operating system). This will automatically set up your Git hooks (specifically, [MapMerge2](https://github.com/tgstation/tgstation/blob/master/tools/mapmerge2/README.md)) that will save you many a struggle in your mapping endeavors. This hook will "merge" your changes as you edit maps and others edit maps around you. If you install everything correct, you should end up with a screen that looks like this in your [terminal](https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/windows-commands): <img src="https://i.imgur.com/sx9dQ25.png" style="display: block; margin: 0 auto"/> Hopefully, `tools/hooks` will also look like this: <img src="https://i.imgur.com/9Yd3grW.png" style="display: block; margin: 0 auto"/> This may vary from system to system, but you should definitely have new files in that folder once the install completes. This utility is literal gold when it comes to resolving Merge Conflicts. ## StrongDMM and You: The Basics ### Shifting into First Gear Time to boot up StrongDMM! At the time of me writing this guide, it is currently in an “alpha state” (Versions 2.0.0 and up). I will be using the alpha version since it’s the path the program is going to take in the future, but if you’re hesitant about an alpha version, feel free to downgrade to [Version 1.9.1](https://github.com/SpaiR/StrongDMM/releases/tag/v1.9.1) (it has a few features 2.0.0 is missing, and vice-versa). You can actually run both concurrently, too! Irregardless, let’s start mapping! <img src="https://i.imgur.com/FIKJ5vX.png" style="display: block; margin: 0 auto"/> Go into File, and hit “Open Environment”. The [Environment](http://www.byond.com/docs/guide/chap01.html) is how StrongDMM (or any mapping program) is able to find, collect, and parse the atoms that make up every part of every map. This is an important step, and make sure you always use the .DME (Dream Maker Environment) file on your repository, to keep things as straightforward as possible. Just get `tgstation.dme`. <img src="https://i.imgur.com/FR5q385.png" style="display: block; margin: 0 auto"/> Now that you’re in the proper environment, `tgstation.dme` (or whatever you use) should show up in the top-left corner. Let’s go ahead and open up a map (from our repository folder). If you wanna start a fresh slate, you can also hit `New Map`. <img src="https://i.imgur.com/zreYxdE.png" style="display: block; margin: 0 auto"/> Every single [map](https://www.byond.com/docs/guide/chap14.html) in our codebase is in the `_maps` directory, so no need to dig through oodles and zoodles of code folders. Just click through and find a map you wanna work on. Let’s use the timeless classic, [*Metastation*](https://tgstation13.org/wiki/MetaStation). `_maps\map_files\MetaStation\MetaStation.dmm` <img src="https://i.imgur.com/QMvu8jp.png" style="display: block; margin: 0 auto"/> As of 2.6.0, after you load `tgstation.dme`, you will be greeted with this screen once you boot up StrongDMM: <img src="https://i.imgur.com/Fveklmh.png" style="display: block; margin: 0 auto"/> This is great, you can now load any map. If you want, you can even find any `.DMM` file and it'll automatically search and load into `tgstation.dme` as well. You can even load multiple maps at once, how handy! Both this and the "long" way works perfectly fine. A .DMM file stands for [Dream Maker Map](https://www.byond.com/docs/ref/#/map). That’s why it’s 37.5% of the name of the program we’re using, StrongDMM. You should now see something like this: <img src="https://i.imgur.com/fSjaei1.png" style="display: block; margin: 0 auto"/> That’s… mildly interesting. [Use middle-click to drag your way around the map. You can also use your scroll wheel to zoom in-and-out. Arrow keys are also a supported option, but you really shouldn't use them unless you have no other choice.](https://github.com/SpaiR/StrongDMM/tree/main/docs#faq) --- ### Use Once Loaded <img src="https://i.imgur.com/Muf7qow.jpg" style="display: block; margin: 0 auto"/> Beautiful… Let’s talk about those colors. Those are [areas](https://www.byond.com/docs/ref/#/area) and those are important for the game to understand what discrete location is what, and we use it for several things code-side. For example, the [bridge](https://tgstation13.org/wiki/Bridge) is a different area than the [bar](https://tgstation13.org/wiki/Bar), so you want to make sure everything is defined appropriately. They tend to be a bit distracting through, so you can hit `Ctrl+1` to get rid of those. Do make sure you define them properly when you're done, though. <img src="https://i.imgur.com/QIxYo2d.jpg" style="display: block; margin: 0 auto"/> Much nicer. Areas are one of four different, distinct "layers" we use in BYOND. The other three are [turfs](https://www.byond.com/docs/ref/#/turf), [objs](https://www.byond.com/docs/ref/#/obj) (for Objects), and [mob](https://www.byond.com/docs/ref/#/mob) (for creatures/animals/what-have-you). Their progenitor species is the [atom](https://www.byond.com/docs/ref/#/atom). You can go into the options tab or hit the respective keybind to quickly filter for those. <img src="https://i.imgur.com/6x6pFy7.png" style="display: block; margin: 0 auto"/> Quick rundown: You can only ever have one area and one turf per “[tile](https://www.byond.com/docs/ref/#/{notes}/renderer)”. You may have as many objects and mobs as you wish. Areas are always areas, but there are two types of turf: open and closed. To be blunt: open is floors, closed is walls. The code does the heavy lifting for you on this part, but it’s important to understand the distinction. Let’s zoom in and check some stuff out. <img src="https://i.imgur.com/waN5a0z.png" style="display: block; margin: 0 auto"/> Ah, yes, the [captain’s quarters](https://tgstation13.org/wiki/Captain%27s_Quarters). I’ve taken the liberty to right-click that door in the center there. You can see the [x](https://www.byond.com/docs/ref/#/atom/var/x)/[y](https://www.byond.com/docs/ref/#/atom/var/y)/[z](https://www.byond.com/docs/ref/#/atom/var/z) coordinates of this tile, a few options to deal with this tile, and a listing of all of the objects, the turf, and the area of the tile. All of this information are stored in [map keys](https://hackmd.io/@tgstation/ry4-gbKH5#Map-Keys-no-holds-barred). Very nice. In blue, you can see that I’ve hovered over one of the objects on this tile. This prompts another contextual menu per-entity to quickly adjust the x/y coordinate of the atom (using [pixel_x](https://www.byond.com/docs/ref/#/atom/var/pixel_x)/[pixel_y](https://www.byond.com/docs/ref/#/atom/var/pixel_y), *NOT step_x/step_y*) as well as the [dir](https://www.byond.com/docs/ref/#/atom/var/dir) for “direction”. Dirs are pretty interesting though, they allow you to switch a specific objects direction around (if it has a compatible sprite). Feel free to toy around with that in your later mapping pursuits (or now, even!). --- ### Time To Edit <img src="https://i.imgur.com/VjJ2FHA.png" style="display: block; margin: 0 auto"/> These are your tools to edit with. From left to right, they are: - Add (1) - Fill (2) - Grab (3) - Pick (Hold S) - Delete (Hold D) - Replace (Hold R) They each do their own thing, and you can hover over them in the program to see what you might want to use. Feel free to get a feel with the tools by ravaging Meta a bit and toying around with stuff, and eventually getting to work on your own maps as you desire. Let’s say that I play around a bit, and I come up with my masterpiece: <img src="https://i.imgur.com/EskiZAK.png" style="display: block; margin: 0 auto"/> Man, I’m such a great mapper. There’s a lot of functionality in StrongDMM that I won’t get into right now, but you can do nearly anything with both 1.9.1 and the 2.0+ versions. Anyways, save your changes `Ctrl+S`, and let's test it out. ## Testing Your Map ### Leveraging Visual Studio Code You should always test your code, test your maps, test your sprites, test *everything* whenever it's a non-trivial amount of work. There's an incredibly simple way to do this, which I'll reveal to you now: The easiest/fastest way to do this is to go into Github Desktop and find this button. <img src="https://i.imgur.com/zO2BSzd.png" style="display: block; margin: 0 auto"/> That should say "Open in Visual Studio Code". If it doesn't, [set your default editor](https://docs.github.com/en/desktop/installing-and-configuring-github-desktop/configuring-and-customizing-github-desktop/configuring-a-default-editor) to Visual Studio Code. You can also do `Ctrl+Shift+A`. <img src="https://i.imgur.com/RgoTQ4y.png" style="display: block; margin: 0 auto"/> You should be met with something like this, maybe a welcome screen should it be your first time. Now, you just want to hit `Ctrl+F5` (or just `F5`). This will start [compiling your code](https://github.com/tgstation/tgstation/blob/master/tools/build/README.md), which shouldn't take more than a few minutes. Once done, it'll boot up BYOND's Dream Seeker, connect you to the [local server](https://github.com/tgstation/tgstation/blob/master/.github/guides/RUNNING_A_SERVER.md#installation), and automatically give you the highest permissions. This is because you're doing everything in the debugging mode, which is quite nifty. This is arguably the simplest way to do it, just look! --- ### Booting It All Up <img src="https://i.imgur.com/NYwd07n.png" style="display: block; margin: 0 auto"/> Now, go into the `Server` tab (tip of the blue arrow) in your Stat-Panel (this is within the red box). Then, find the verb `Start Now` (or just type `Start-Now` into your chat bar). This just starts your game in as soon as initilization finishes. Then, hit observe. You should be in the [Ghost/Observer](https://tgstation13.org/wiki/Ghost) mode, where you can wander around the map freely (just like playing [Space Station 13](https://spacestation13.com/) as an [admin](https://tgstation13.org/wiki/Starter_guide_to_admin_tools)). Just go to where your map was saved and- <img src="https://i.imgur.com/8Laa19u.png" style="display: block; margin: 0 auto"/> I don't know if I expected anything different. Anyways, compiling your map is great because you get to tell the... subtle nuances that you weren't able to pick up on just editing the static DMM file in StrongDMM. This includes (but is certainly not limited to): lighting, door accesses, mob interactions, and just figuring out if it just looks good. --- ### Things To Look Out For ##### [*With Regards to Ikarrus*](https://tgstation13.org/phpBB/viewtopic.php?f=11&t=327) ([who](https://steamcommunity.com/id/icaruswong/) would later go on to make the Team Fortress 2 Map: [Coldfront](https://wiki.teamfortress.com/wiki/Coldfront)) Simply follow these steps and you should be able to catch most errors mapping brings. [This following checklist](https://hackmd.io/@tgstation/ry4-gbKH5#Pre-Commit-Checklist) best applies to outright Station Mapping, and may not be applicable to ruins/away missions/shuttles/etc., but it's still quite good to check as much as you can rather than assume that it works. - In the Stat Panel (mentioned previously), go into the `Debug` Tab. Now, select the `Mapping Verbs - Enable` verb. - You should now have the `Mapping` Tab. - Check for errors for cameras, power cables, and atmos pipes. - Powersink the station and ghost around to check for unconnected powernets (APCs that aren't discharging/charging). - Ride disposals from start to finish to check for broken disposals. - Make yourself an AI and check for blindspots in camera networks. You can also use the Camera Range Display Verb. - Spawn yourself in (check [Debugging Hottips](#Debugging-Hottips)) - Fix your errors, and run through this list again to double check, because chances are you missed something or you broke something else. That's just how it is. Doing so will save everyone a lot of headaches down the line. Specifically, yours, because *you will have to fix your own shit.* --- ### Checking Logs In mapping, there are a lot of errors that may come up during [Initialization of the world](http://www.byond.com/forum/post/2012623). However, we do check for a lot of these errors. Here's how you can check these out and get them ironed out before we have to catch it for you. Assuming your world is already compiled, wait for Initialization to finish ([the end of this step](#Booting-It-All-Up)), and then type in this verb into your chat box `Get-Current-Logs`. You should see a pop-up with a whole list of logs. You just want to go down this list and select the option that says `map_errors.log`. Go ahead and either "View" or "Download" this log file ("Open" doesn't typically work for me). We also now do this check for you on every pull request for *station* maps through our GitHub [Continuous Integration](https://en.wikipedia.org/wiki/Continuous_integration) process. I would advise checking this for non-station maps, though. --- ### Debugging Hottips Pro-tip: You can `Ctrl+LMB` your ghost to spawn it in as a carbon (human) for quick "suvivability tests". You can also `Right-Click` to pull up the context menu, and then hit `Select Equipment`. Type "Debug" into the search bar, and spawn yourself in with the Debug outfit. This will give you a lot of gear to help you debug your map. <img src="https://i.imgur.com/2SYmK2f.png" style="display: block; margin: 0 auto"/> Just look for other silly mapping errors (that you already haven't debugged for). We'll (hopefully) catch you if you fall, but it's a good way to double-check your work and save everyone some time as you do some quick edits to fix your own stuff (before we request that you fix your own stuff before we [merge](https://git-scm.com/docs/git-merge) it). Once you're all done, feel free to close out of your world. You can also learn more about testing maps [here](https://github.com/tgstation/tgstation/blob/master/.github/guides/MAPS_AND_AWAY_MISSIONS.md#maps). Now, let’s get back to Github Desktop. ## Committing Your Changes | Requesting A Pull ### Back To Gitting <img src="https://i.imgur.com/hwH6KdB.png" style="display: block; margin: 0 auto"/> Ok, really, you don’t actually want to put a shitpost up. If you accidentally save but still have good changed files on your repository, just right-click the file you wanna axe and hit “[Discard Changes](https://git-scm.com/docs/git-stash)”. Let’s say I feel proud of what I did, then what? Psst: if you look at the line changes, you can actually see the exact [map keys](https://hackmd.io/@tgstation/ry4-gbKH5#Map-Keys-no-holds-barred) you altered. A map key is just how we mass-define and place tiles. We can use the same key across multiple tiles on the same map. <img src="https://i.imgur.com/UoJNSON.png" style="display: block; margin: 0 auto"/> The commit menu! Perfect! [Maintainers at /tg/ really do appreciate if you write out a thoughtful commit title and description, because you will need to justify your changes in one way or another when you submit it for review through the Pull Request Process!](https://github.com/tgstation/tgstation/blob/master/.github/CONTRIBUTING.md#pull-request-process) Let’s do that. <img src="https://i.imgur.com/iklHrfD.png" style="display: block; margin: 0 auto"/> That should work fine. Let’s hit “[Commit](https://git-scm.com/docs/git-commit) to (your branch name here)”. If it says “Commit to Master/Main”, don’t hit that button because you’ll dirty the master branch of your forked repository. Make a new branch, and base it off what you’re currently on: <img src="https://i.imgur.com/HEEnqK9.png" style="display: block; margin: 0 auto"/> If it doesn’t say that, everything’s just fine. Congratulations, you’ve “committed” your changes! What if you didn’t like that, realize you made a typo, or just wanna go back? You can always just go back into StrongDMM to edit your map and make a new commit, but you can also go to the History tab, and hit this button: <img src="https://i.imgur.com/LZw9Dy1.png" style="display: block; margin: 0 auto"/> “[Undo Commit](https://git-scm.com/book/en/v2/Git-Basics-Undoing-Things)” will just undo your commit, and then you can make as many changes as you please, then recommit. This is one of the greatest advantages of Git, [it has a powerful versioning system](https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control) that you can easily use to hop from one day's work to another. However, if you’re happy, then seek out these buttons: <img src="https://i.imgur.com/GTSa1is.png" style="display: block; margin: 0 auto"/> Either one of these will work, it’ll [upload your branch](https://git-scm.com/docs/git-remote) to the remote (github.com). Once all the “[deltas are resolved](https://git-scm.com/docs/pack-heuristics)” and what-not, this will show up: --- <img src="https://i.imgur.com/7ndAGIf.png" style="display: block; margin: 0 auto"/> ### Blending It All Together Wow, an easy button to make your pull request! You can just hit it from GitHub Desktop, and it’ll open it up in your [web browser](https://en.wikipedia.org/wiki/Web_browser). <img src="https://i.imgur.com/YGIuTrp.png" style="display: block; margin: 0 auto"/> Ta-da, just fill in the template just like the descriptions in the contributing template say (including an image or two of your changes is always well appreciated), hit “Create Pull Request”, and wait for the feedback to roll through. I would advise viewing some example PRs, open up a few of them (if you haven't already been tracking how people write Pull Requests) and try to learn well. For more advice on making a Pull Request, you can read more [here](https://hackmd.io/@tgstation/ry4-gbKH5#The-Pull-Request-Process-on-the-Technical-and-Emotional-Levels). You’ve done it! You’ve done mapping! I hope that wasn’t too painful, and the rest of this page (or the links below) will introduce you to some deeper contents that I briefly touched on in regards to mapping. ## Closing Notes ### More Information And Where To Find It #### Scattered throughout this document, there are references to the [Mapping Reference Collection](https://hackmd.io/@tgstation/ry4-gbKH5). While this guide is meant to contain the bare-bones of information to get people started on mapping, this collection will contain a wealth of information for mappers. I heavily recommend reading this. [You can always reference the /tg/station wiki for more information and tips on mapping](https://tgstation13.org/wiki/Guide_to_mapping). I've scattered references to official code documentation throughout this guide, but that will probably be a good place to collect and make it a tad bit more understandable. A lot of the menus are based out of Dream Maker, but the same basic principles apply. You should be able to flesh some of it out on your own. You can also learn a bit by asking questions in mapping channels (like the [/tg/station13 Discord](https://tgstation13.org/phpBB/viewforum.php?f=60)). ### A Personal Note I personally find the best way to learn is to do. Poke around Github Desktop and get a feel for it. Poke around StrongDMM and toy around with the buttons until you know what they do! A deeper knowledge is always great to have. Best of luck in your mapping endeavors! ###### tags: `Guide` `Mapping` {%hackmd theme-dark %}