Lately, i have been thinking of building a Map Editor for creating new custom Mapgen Files.
I have in fact already tried this, although i abandoned the project because the styling of the UI got too difficult and tedious and that overall, the code got pretty messy.
I have found some other people that tried the same thing, although it seems that most of these Projects have been abandoned.
Is there some better, more modern, built in way of creating Maps and is there even a demand for a Graphical Map Editor?
If there is, i want to take another crack at creating one.
To better undestand, what kind of things a Map Editor needs to be able to do, i want to ask for some suggestions for features.
During the developement of the last Project, i’ve created a initial Mockup for the editor.
While I think a graphical map editor is a fantastic idea (which I’ve thought of creating myself at certain points), the potential for feature creep is huge. Were you thinking of keeping this as a smaller program for people that can navigate the JSON files or something full featured for complete beginners?
Off the top of my head, for something I’d want in a program like this:
MINIMUM (Basic Functionality)
import/export maps
choosing map size (24x24, 48x24, 48x48, etc.)
import palette file settings automatically from the map file or manually select palette when creating new map
work with and switch between multiple z levels
easy copy and paste of chunks of the map’s tiles
a way to view details or write notes about a specific tile in the palette as you likely have multiple versions of the same tile that spawn different items (ex - in the house palette there’s a dining room table and a hallway table)
item/vehicle/trap/etc. generation at specific map coordinates
displaying the x and y coordinates on the grid layout for easy reference, and also maybe with mouse hover?
ability to add additional furniture/terrain (including item spawns) to a specific map in addition to palette entries
NICE TO HAVE
create palette files, including browsing/assigning item groups to furniture/tiles
create nested chunks
browse and add nested chunks to maps, either by assigned symbol or coordinates
PROBABLY JUST ME
being able to switch between orientations (ie - north to south and south to north)
separate terrain from furniture tiles. more for organization and workflow
Being able to “paint” with the symbols but “preview” the graphic version. I’m likely in the minority, but I personally have no interest in painting with the tiles. However, it’s tedious reloading the game to view what I’m creating.
I have not created any “real” maps myself, only really a few small ones for testing purposes. This is also partly the reason as to why i am asking for some suggestions since i want to get to know the process for creating maps from more experienced people.
Generally i was thinking of making this a larger program for beginners (like myself). So people like me don’t have to wrangle with JSON files when trying to create a Map. I also found that it was pretty annoying that you have to restart the game when you make changes to a map.
You also bring up a good point with the feature creep issue. There have been many graphical editors over the years, most of which are now abandoned due to what is assume is exactly this problem.
I’ll probably have to think about how i want to execute this idea a bit more before i go and start developing.
I almost wish some devs would spend more time making tools to make content than actually making content. I think a decent amount of people would be interested in contributing if it were a bit easier to get setup. The development time spent creating a tool would probably be a good trade off in the amount of content that the community would make.
The good news is, ultimately, we’re talking about a graphical editor that sits on top of relatively easy to parse text files, and produces a few text files of its own. The bad news is, creating something robust enough to make it so a person would never need to look at the JSON themselves would probably be time and feature intensive. I say this as someone with virtually no programming skills, but has thought of making something similar, so correct me if I’m wrong there.
Maybe you could make a minimum viable product and let the community play around with it? I think the single most painful thing about making maps is actually generating and working with that 24x24 grid, and also seeing the graphical result of your work with all of those symbols (ie - reloading the game). The extra bells and whistles I mentioned could be future features if people requested them.
Being able to load up a config file for your program for a palette would be key, I think. Even if a person would need to set it up themselves, if it were easily shareable between users of your program, that would be an easy way to let people input some of the functionality I listed above and likely cut down on development time for a first iteration.
Feel free to message me if you want more feedback or if you need people to test something. Otherwise, I’m interested to see if anyone else chimes in here with some thoughts/interest on this.
Sorry if i’m being kinda stupid, but what do you mean when saying:
Do you mean that people can load existing palettes and use them when creating a map?
Yeah, i agree. Making a abstraction for the JSON format is pretty difficult. I noticed this in my last attempt where i was a bit overwhelmed with all of the features that are supported by mapgen files.
That will probably be my plan for the near future. Right now as a first step i was thinking of just implementing the following features and releasing it as a mvp:
Creating a 24x24 map
Adding Palettes
Loading a Tileset
Painting tiles with the loaded palettes
Exporting to a JSON file
I think you can already do alot with just these few features.
Sadly i kind of have alot going on in my life right now and it would probably take a bit until i can release something that people can use. Also considering the fact that alot of the things i am trying to do are pretty new to me so i am learning as im developing the application.
To end it off, i am kind of curious about the process of steps you do when you’re creating a new map. In what order do you do them in? Do you first pick out the palettes that you want to use or do you add them as you go along? How do you know which palettes to use, is this just experience or are these documented somewhere?
You said that it would be nice to split the terrain and furniture views into separate columns. Is the idea that you can paint terrain and furniture without bothering to map them to individual characters?
Or do you think it would be better if the user would map certain tiles to characters and then paint with those characters. That is kind of the way i was thinking of implementing this.
For example, in the house_general_palette.json the character a as mapped as:
This would probably be easier to implement with the second method i mentioned. Although the drawback with this method is that you need to map characters to tiles which feels a bit clunky in my opinion.
What do you think is the best way of implementing this?
When I get the chance to sit down at my comp I plan to write a more detailed response to both your posts above but in the meantime just wanted to say you bring up an interesting example above. The house palette is probably the most complicated palette – there’s a lot of entries, some with terrain under the furniture like the fireplace you mentioned.
If you were to put the symbol “a” down on the grid thinking you were going to get a concrete floor tile, you’re actually going to get a fireplace. If you were to smash the fireplace the concrete floor would be found underneath. Not only that but if an item spawn was tied to the “a” symbol, that would appear as well. Another example is (if I remember correctly) the “!” Symbol, which in the house landscaping palette, which is called after the regular house palette, will spawn a dirt mound terrain with a flower furniture on it, and perhaps some gardening items if it’s linked to the ! as well.
It gets a little complicated, which is why when I was brainstorming this concept myself, I was thinking of making “overlay” skins that a user could create with the terrain and furniture items separate, but also with a space to write notes beside each entry, as there are repeat entries with identical visual tiles. For example, there is a desk as well as a bedroom desk in the house palette, which should go in distinct rooms.
It would be easier to show you what I mean, which I’ll try to do when I can sit down at my computer as opposed to my phone.
OK, I wanted to respond to some of your questions and comments
You definitely aren’t, I’m just having difficulty explaining what I mean. Essentially, what I referred to in my other post, which is a way to setup a palette’s entries for easy reference for what you need in a map. That might include being able to color-code symbols or add notes besides tile entries. I’ll explain further down this post.
I agree with all of the above. I think this alone would be a great step in the right direction for having a tool everyone can use (with the right pointers to the relevant JSON docs to reference). The only other feature I might add is importing maps, as that would be a way to save your work and then pick up where you left off in another session. I’ve definitely finished maps in a sitting, but only after I’d made 30+ and had experience under my belt.
My idea for this is based on the fact these items are distinct in a JSON building file. You can also spawn furniture on different kinds of terrain tied to the same symbol definition, like how you brought up the fireplace in the house palette spawning on a concrete floor, by using the “A” symbol. That is enough in my mind to cement the fact that the “A” symbol for the fireplace should only be selectable under the furniture column, as otherwise if a player chose the “A” symbol to lay down concrete flooring in a room, they’re going to get a room full of fireplaces.
For the reason above, in my mind it’s important for me to keep the symbols straight, and why I personally don’t want a “tile” based editor. I want to look at what symbols I’ve laid down and know what items might spawn on that tile.
When looking at your mockup, I was thinking that I personally don’t really want to create maps using just the tile view. Likewise the toolbar with the tiles to choose from isn’t conveying the information I quickly want from my map in progress.
To be clear, I don’t imagine that mine is a popular opinion. I suspect most people would want to quickly build a map graphically. To me, having the symbols allows me to see all sorts of nuance, including nested spawns which don’t necessarily have a tile associated to them if they’re spawning monsters, items, etc.
I might be misreading what you’re saying here, but you need to map characters to tiles, because you are ultimately creating something like this:
What’s more, you want to have the capability to map characters to tiles, because you might find the need for having (for example) more than one kind of bookcase and its attendant itemgroup spawns in a map. Maybe you want a specific group of items to spawn on a specific bookcase, or maybe no items to spawn, in which case you wouldn’t be able to use the already mapped “R” symbol for regular bookcases if you’re using the house palette.
Having a ready-made palette to use is great, but I almost always add additional defined symbols in my houses, sometimes being as simple as having specific tables that spawn with a particular color of carpet terrain spawning under them.
I’ve only contributed houses to the main game, though I’ve made other buildings that I included in a previous mod. Since I mostly only use the house palette, I’ll stick to that in my explanation below:
Steps:
Use my personal template docs (the individual house entry, multitile_city_buildings entry, regional_settings docs) for houses that have the unique entries for that house left blank for me to fill in. These three documents are necessary to have your house spawn in-game.
The house palette is pre-defined in my template, but if for example I wanted to create a bar I would reference the existing bar entries or else check the json/mapgen_palettes folder to see if that template currently exists and I want to use it
I have a spreadsheet template setup with 24x24 grid (or larger) which I add my entries to, including symbols that I then color-code for easy viewing on the grid. Example of a house layout is below.
The below pics are of my entries for the furniture and terrain. I build that by hand by looking at the palette file. I have notes to tell me what item groups spawn on a particular symbol. I’ve also color coded the entries according to room (red for kitchen, blue for bathroom, etc.) I copy and paste each symbol onto the grid, which isn’t quite as painful as it sounds once you’re used to it.
The 24 x 24 grid above is composed of individual cells. The symbol in each cell is added into a string. I copy and paste the 24 “string amalgamation” lines (the yellow boxes beside the grid) into the WIP template that is placed into the game directory so it can be read and then spawned in-game to check.
Once the map is to my satisfaction, I have a workflow document to keep me organized. It tells me what files to “de-lint” using the official de-linter web tool, what files to move from my playtest directory into my repository directory for submitting the main game. The process for submitting PRs to the main game is complicated unto itself, and not relevant to your potential editor.
Essentially, I have a very crude mock-up of a program layout that I just manually execute using spreadsheets, doc templates and my workflow document. It’s a bit tedious at times, and I would never expect another person to look at my workflow and think it’s something to emulate. I don’t necessarily think this is the best way to look at designing a potential UI, but I wanted to share this to explain what I was referring to as an “overlay” on a palette. If your program could populate the palette entries and the user had a way of saving some personalized color coding or notes into a “config” file that could potentially be shared with other users of a program, that could be beneficial.
The current mapgen is powerful and somewhat versatile but it can be finicky to get a grasp on. That’s why having a program to fill in the most painful parts is so worthwhile. The goals you mentioned above would take care of some of the messiest parts.
I don’t want to take up more space in this thread than I already have, so I’ll leave it at that. Feel free to DM me if you have questions or want clarification on any of the above.