Map Merger: различия между версиями

Материал из MassMeta
Перейти к навигации Перейти к поиску
imported>Thot slayer
м (close dreammaker ffs)
imported>San7890
(Adds link to the Guide to Mapping for Git Hooks.)
 
(не показана 21 промежуточная версия 6 участников)
Строка 1: Строка 1:
: [[Guide to contributing to the game]] > [[Guide to mapping]]


Before any change to a map, it is good to use the Map Merger tools. In a nutshell, it rewrites the map to minimize differences between different versions of the map (DreamMakers map editor rewrites a lot of the tile keys). This makes the git diff between different map changes much smaller. More recently a new way of laying out the map was invented by Remie, called TGM, this helps to further reduce conflicts in the map files.
/tg/station uses a tool called the '''Map Merger''' to make map changes easier for maintainers to review and less likely to conflict with map changes made by others.


This is good for a few reasons
There are a few ways of running the tool. If you have trouble or need help, ask in [[Community|#coderbus]]. You may find a visual guide [https://hackmd.io/@tgstation/SyVma0dS5#Git-Hooks here].


1) Maintainers can actually verify the changes you are making are what you say they are by simply viewing the diff (For small changes at least)
'''Summary''': for best results, open the <code>tools/hooks/</code> folder and double-click <code>Install.bat</code> to install the hooks, which will handle things automatically.


2) The less changes there are in any given map diff, the easier it is for git to merge it without running into unexpected conflicts, which in most cases you have to either manually resolve or require you to remap your changes
== TGM format conversion ==


The "map merge" operation describes the process of converting a map file written by the DreamMaker map editor to:
# Use a format more amenable to Git's conflict resolution, called "TGM" and originally developed by Remie. The TGM map format is like the standard Dream Maker map format, but arranged differently, meaning Dream Maker is able to open TGM maps.
# Keep the size of the difference between the old version and the new version of the map as small as possible.
This is accomplished by referencing the changed version of the map against the old version stored in the Git history.


However - to do all this is going to require you to put some elbow grease into understanding the map merger tool.
=== Use as a Git hook (recommended) ===


If you have difficulty using these tools, ask for help in [[Community|#coderbus]]
# '''Install the hook''': Open the <code>tools/hooks/</code> folder and double-click <code>Install.bat</code>
#* Linux users: run <code>tools/hooks/install.sh</code>
 
Once complete, the map merger will run '''automatically''' every time you commit in Git. The console log can be reviewed if there are any errors.
 
=== Or: Run manually before committing ===
 
You can also manually run a .bat file just before each time you commit:
 
# Ensure you have saved all your changes
# Open the <code>tools/mapmerge2/</code> folder and double-click <code>Run Before Committing.bat</code>
# Commit
 
=== If you forgot to map merge ===
 
For first-time contributors who committed map edits without map merging, a script is available to automatically commit a fix to your PR branch:
 
# Ensure you have no unsaved changes
# Open the <code>tools/mapmerge2/</code> folder and double-click <code>I Forgot To Map Merge.bat</code>
# Push your branch
 
== Automatic conflict resolver ==
 
We also have a rudimentary conflict resolver to cover some cases that the TGM conversion couldn't prevent.
 
When run, the console output will indicate whether further manual action is needed, including conflicting coordinates.
 
=== Use as a Git hook ===
 
# '''Install the hook''': Open the <code>tools/hooks/</code> folder and double-click <code>Install.bat</code>
#* Linux users: run <code>tools/hooks/install.sh</code>
 
Once complete, the conflict resolver will run '''automatically''' every time you merge in Git.
 
=== Or: Resolve conflicts on an in-progress merge ===
 
If you are using a Git GUI which does not run the hook on merge, you can also run the conflict resolver on an in-progress merge by request:
# Open the <code>tools/mapmerge2/</code> folder and double-click <code>Resolve Map Conflicts.bat</code>
#* Linux users: run <code>tools/hooks/dmm.merge --posthoc</code>
 
Note that to use this, you must merge your updated local master branch into the branch with conflicts so that your Git GUI reports a conflict on the map file.
== Implementation details ==
 
Information on the tool's implementation is stored with [https://github.com/tgstation/tgstation/blob/master/tools/mapmerge2/ the code].


== Using the tools ==
{|
|-
|'''1. Install Python 3.5 or greater'''
|If you don't have Python already installed it can be downloaded from: https://www.python.org/downloads/ - make sure you grab the latest python 3, again, it must be 3.5 or greater
|-
|'''2. PATH Python'''
|This step is mostly applicable to windows users, you must make sure you ask the windows installer to add python to your path.
|-
|
|This image shows the correct setting to ensure is set https://file.house/DA6H.png
|-
|'''3. Prepare Maps'''
|Run "Prepare Maps.bat" in the tools/mapmerge/ directory.
|-
|'''4. Edit your map'''
|Make your changes to the map here. Remember to save them!
|-
|'''4a. Exit DreamMaker'''
|We're about to rewrite the entire MAP into a better format that works better with git, if DreamMaker is still open you may accidentally resave the map or autosave, undoing the next step.
|-
|'''5. Clean map'''
|Run "Run Map Merge - TGM.bat" in the tools/mapmerge/ directory.
|-
|'''7. Check differences'''
|Use your git application of choice to look at the differences between revisions of your code and commit the result.
|-
|'''8. Commit'''
|Your map is now ready to be committed, rejoice and wait for conflicts.
|}


==Gotcha's==
*Reviewing the map in dreammaker after mapmerging but before committing changes to git., this will cause DreamMaker to rewrite it back to the dmm format, stage your maps with git add, then view in dreammaker and once you've verified they look good, use git commit (not restaging) to commit the changes
*Leaving DreamMaker open while running mapmerger, can sometimes cause DreamMaker to write over the TGM's changes
[[Category:Guides]] [[Category:Game Resources]]
{{Contribution guides}}
{{Contribution guides}}

Текущая версия от 06:46, 25 июля 2022

Guide to contributing to the game > Guide to mapping

/tg/station uses a tool called the Map Merger to make map changes easier for maintainers to review and less likely to conflict with map changes made by others.

There are a few ways of running the tool. If you have trouble or need help, ask in #coderbus. You may find a visual guide here.

Summary: for best results, open the tools/hooks/ folder and double-click Install.bat to install the hooks, which will handle things automatically.

TGM format conversion[править | править код]

The "map merge" operation describes the process of converting a map file written by the DreamMaker map editor to:

  1. Use a format more amenable to Git's conflict resolution, called "TGM" and originally developed by Remie. The TGM map format is like the standard Dream Maker map format, but arranged differently, meaning Dream Maker is able to open TGM maps.
  2. Keep the size of the difference between the old version and the new version of the map as small as possible.

This is accomplished by referencing the changed version of the map against the old version stored in the Git history.

Use as a Git hook (recommended)[править | править код]

  1. Install the hook: Open the tools/hooks/ folder and double-click Install.bat
    • Linux users: run tools/hooks/install.sh

Once complete, the map merger will run automatically every time you commit in Git. The console log can be reviewed if there are any errors.

Or: Run manually before committing[править | править код]

You can also manually run a .bat file just before each time you commit:

  1. Ensure you have saved all your changes
  2. Open the tools/mapmerge2/ folder and double-click Run Before Committing.bat
  3. Commit

If you forgot to map merge[править | править код]

For first-time contributors who committed map edits without map merging, a script is available to automatically commit a fix to your PR branch:

  1. Ensure you have no unsaved changes
  2. Open the tools/mapmerge2/ folder and double-click I Forgot To Map Merge.bat
  3. Push your branch

Automatic conflict resolver[править | править код]

We also have a rudimentary conflict resolver to cover some cases that the TGM conversion couldn't prevent.

When run, the console output will indicate whether further manual action is needed, including conflicting coordinates.

Use as a Git hook[править | править код]

  1. Install the hook: Open the tools/hooks/ folder and double-click Install.bat
    • Linux users: run tools/hooks/install.sh

Once complete, the conflict resolver will run automatically every time you merge in Git.

Or: Resolve conflicts on an in-progress merge[править | править код]

If you are using a Git GUI which does not run the hook on merge, you can also run the conflict resolver on an in-progress merge by request:

  1. Open the tools/mapmerge2/ folder and double-click Resolve Map Conflicts.bat
    • Linux users: run tools/hooks/dmm.merge --posthoc

Note that to use this, you must merge your updated local master branch into the branch with conflicts so that your Git GUI reports a conflict on the map file.

Implementation details[править | править код]

Information on the tool's implementation is stored with the code.


Hosting Hosting a serverSetting up the databaseWorking with /tg/station as an upstream repository
Contributing Guide to contributing to the gameSetting up gitDownloading the source codeReporting issuesChangelogs
Coding Understanding SS13 codeSS13 for experienced programmersCode docsCoding standardsGetting Your Pull AcceptedBinary flags‎Text FormattingMySQL
Mapping Guide to mappingMap mergerGuide to door access
Spriting Guide to spritingResolving icon conflicts
Wiki Guide to contributing to the wikiWikicodeAutowiki