Hostile Architect - Location Builder Tool

Hey folks! Welcome to “Hostile Architect”.

I’ve created a free tool to help with creating new locations in Cataclysm. There have been a few of these in the past, but they seemed to be not actively maintained. In essence, what these tools do is create a graphical interface that exports the JSON files required to make a location in Cataclysm.

For a long time, I’ve wanted to create my own locations but found the process too difficult, and honestly pretty creatively stifling. And that’s coming from a guy who can already code… So, I went to herculean efforts to create a tool to make this easier. In total it look maybe 20 hours (EDIT: We’re running up around 40 hours including updates). And those efforts will pay off hundredfold if the community goes ahead and make a bunch of cool locations using this.

In its current form, it provides a “painting” and “palette mixer” interface, as well as an “export” screen where you can copy and create the files locally. I’ve recorded a video walkthrough showing how to go from A to Z, which is from loading the app to fully testing in-game.

It doesn’t do everything, and I don’t think it should either. It’s meant to reduce the burden of the most difficult part of making a map, while doing easy things like adding other JSON tags (such as monster spawns) are not included. You can do easy things like that by editing the JSON the normal way.

This thread is where you should post any comments or feedback regarding Hostile Architect.

Here’s the link to the tool:

Version 1.0 Downloadable Standalone: CDDA Hostile Architect (Standalone) by PossessedLemon
(Old Version 0.3 Alpha Web-based): CDDA Hostile Architect Alpha by PossessedLemon

V0.1 Walkthrough (Start here!):

V0.2 Walkthrough (City Regions & Roofs):

V1.0 Walkthrough

V1.2 Walkthrough (Importing Maps)

6 Likes

Judging solely by video: in palette creation/selection sections, selected item should be highlighted in some way.

So far I’m working on getting all the terrains, furniture, and items in the dropdown lists.

I should also note that you can use custom itemgroups or terrains with this, just type their name in when you’re defining your palettes, rather than using the dropdown lists.

@Turn478 offered some advice on roofs, and so the next update will include the first foray into multi-tile buildings (floor + roof)! That will give users the infrastructure to make their own multi-tile buildings. That can be done via light JSON editing, rather than in the app, but I’ll record a tutorial on how to use the app to speed that along.

As well, will be adding in proper inner-city spawning (including regional_map_settings.json file), as I was informed that I hadn’t quite reached that as I had hoped through the other files.

Have been getting great encouragement from the Reddit post. Going to try and keep focusing on apprentice-level enhancements. There will be another updated walkthrough following the patch.

Wow! Great job on this. It looks like a lot of work went into it. As a non-programmer who essentially built a crude version of this in spreadsheets for my own modding purposes, I have to say I think this will make a huge difference to people who just want to start building stuff!

1 Like

Something you may want to add to your vid/consider when testing to makes things easier on yourself:

  1. spawn a clairvoyance artifact that will let you see your character’s immediate surroundings. This makes it easier for taking screenshots,etc. – debug/ (s)pawn/ (c)lairvoyance artifact

  2. You can map reveal to see where your locations might have spawned-- debug/ (m)ap / (r)eveal map

  3. if you don’t see anything in your immediate vicinity, you can also just spawn as many instances of your location in as you want using debug/ (m)ap/ (O)vermap editor and then in the little overmap that pops up, choose a location and use (s) to add a special from the populated list

1 Like

Thanks! I was totally scratching my head on how to do it in Excel. I’d spent hundreds of hours in Unity on practice projects in the past, so I figured “Hey, why not do it in Unity!”

Appreciate the tips, the step-by-step instructions will be helpful for all creators who pass through here. I didn’t know about debug spawning overmaps, that’s going in my toolbox for sure!

Yeah, it took a loooot of combing through the jsons by hand and copying and pasting what might work in a given palette (ie - certain types of walls for use in residential houses) onto a spreadsheet. Once your palette is created, it’s mad copy and pasting the symbols onto the “canvas”. While it takes a long time to set it up, once you have it dialed you can use it to pump out variations of buildings really quickly. I made over 40+ houses this way.

If I had use of your tool to begin with, it probably would have saved me a lot of time making my own tools and really focused on creation. It looks like it could be really powerful and easy to use.

Did you program in terrain/furniture/item groups by hand, or do you have a way of “scraping” them from game files so that it’s easy to update between versions of the game?

The reason I ask is in the case of someone wanting to use custom item groups, or furniture from mods, for example

1 Like

It’s currently possible in the app to set a palette to any modded item group, furniture, or terrain by just typing it in. The dropdowns are just a way to help folks fill in that text field faster. :wink:

So far I define all the lists by hand, while watching YouTube videos. There’s a certain level where I’m content to just vegg out and copy + paste. I’ve seen other attempts at these tools, and I honestly think they’ve gotten “lost in the weeds”. At a certain point less is more, and it’s better to keep thing simple than try and get the tool to do everything.

1 Like

I can appreciate that. Ambition outpaces time/energy :slight_smile:

As a non-coder myself, I have no idea if this is feasible, but would there be a way of importing existing palettes from a .json file? I think if you could do that, creating content and having it be ready for easy submission/integration into the base game would be extremely streamlined, and it might be an easy way of taking the load off you for adding certain features to the editor. Usually the devs seem to want standardized palettes for new additions (ex - all the houses in vanilla use the same standardized palette).

Anyway, thanks for your replies/time! I appreciate it

1 Like

Yeah! I think importing palettes would be feasible. I’d just need to set up a place to paste the info in, and then code a JSON “parser” to digest the info. I’ll add that to my short-term “Goals” list, especially since that will help with generating locations that have a higher chance of being merged into vanilla.

I appreciate the feedback and ideas! It all helps orient me towards what makes the most sense. Talking it through like this helps with planning, thanks a bunch for your inputs!

Hey, I’ll reply here this time.

Checked out your 2nd iteration. A few things came up:

  • City buildings don’t get road connections (they are all connected to the city grid already).

  • Fill_ter (fill terrain): I see you are setting it to be the outside t_region_groundcover. It may be better to auto-assign the blank symbol to that terrain in the palette and instead put your t_floor (or whatever the user chooses as their main flooring) to be the fill_ter. This tells it to be used under all furniture and you won’t need to duplicate symbols for the chair and the floor under it.

Minor interface comments:

  • In the palette builder: foreground and background are a little confusing, and you may want to just call them terrain and furniture instead. This will also help future proof it in case we ever get more map layers added.

  • The palette builder could use a delete entry option.

  • The painter could use drag to fill the same symbol.

I really appreciated the extra context about mapgen that you included in the 2nd video. It was all well explained.

2 Likes

Oh, and that roof addition is just fantastic. Thanks for doing that, it will give new users enough z level experience to get into mutli-tile buildings.

1 Like

Ok, 1.0 released! This version adds:

  • Palette import (This was a laborious one! But essential for using this tool to make Vanilla maps!)
  • Default symbol selector (for use with palettes, to fill in every tile with this symbol when generating)
  • Hex color picker
  • Selected Palette Details
  • Delete Palette, Clear Palette buttons

Plus a slew of other minor additions. It’s also downloadable now, which was a requirement for the JSON input parsing.

I had forgotten about starting this project, but some of the notes may be useful if you want to expand on your program. I made this for KorGenT and can expand it if it’s useful. It already has plenty of mapgen facets to think about.

That’s really cool! Appreciate that you guys mapped it out like that. I’ll treat this like a dictionary of ideas that I could set up, if I ever want to build up the tool more.

1 Like

Added ability to paint and export 48x (4 OMAPs) and 96x (16 OMAPs) sized maps! Be warned that 96x will cause a fair amount of CPU strain, as it does mean 9,216 tiles!! However it should be stable, just give it time to process when it hangs. I get no delay for 48x on my rig.

That amount of strain means I won’t get it making anything larger than 96x, so if you want to make things like a new Mall (which is 49 OMAP tiles), you’ll have to stitch together multiple 96x maps. I believe the mall itself was originally made in 24x chunks, so that should be no problem. You would need about 3 96x maps to match the size.

Added a ‘Map Import’ function now, so you don’t have to keep the tool open for days on end while making complex maps! You can export and then import your map from JSON to keep improving it!

Also finished the functionality for 48x and 96x size maps. Now you can generate really huge maps!!

There’s a fourth video walkthrough now as well, which shows how to import draft maps!

It’s really interesting watching this develop. Thanks for continuing to add to this!

I don’t have the tech know-how, but I’ve been thinking about a tool like this since I started making maps, so I have a couple suggestions. Of course you’ve mentioned you want to keep it simple and this is unsolicited, so feel free to disregard, but I think these would be real QoL improvements for users and also for yourself since you mention you’ve started making maps.

  1. Splitting terrain and furniture into separate columns in both the palette and the painter window, and possibly including the associated item beside it in the column. Here’s a screenshot of my spreadsheet by way of example

  1. Numbering rows so it’s easy to determine the x,y of a given cell. This comes in handy when you’re placing items (ex- “place_loot”: [ { “item”: “television”, “x”: 17, “y”: 5, “chance”: 100 }. Maybe this could be displayed in a box on the side panel or perhaps a mouse over tooltip rather than constantly displaying the x,y at the top and sides. I have no idea how hard that would be to implement.

This might be tricky, however, since the x,y points might change depending on orientation of the canvas. This isn’t my area of expertise, but changing the road connection point to north, south, etc. might skew the x,y. I’ve always used my own standard orientation, so not sure how dynamically changing things would affect that.

  1. You’ve hard-coded some default hex colours for certain terrain types which is a great idea! Is it feasible to add an .ini file or something similar, like a text file that is easily editable with notepad or something similar so people can define their own default hex colours for certain types of terrain or furniture? That would be an easy way for people to customize their palettes without having to set it up again over multiple sessions. Also, it would allow people to share their custom palette colour schemes with a simple copy and paste.

Even if you called the tool done now this is a useful, feature-heavy tool that the community can use and you’ve obviously put in a lot of time and effort. Thanks again!

1 Like

Thanks! I appreciate the feedback and input. Even if I don’t implement it it’s still useful to see ideas.

For your #2, I patched in a X Y coordinate viewer, which updates when you put your mouse over a tile. I was setting up Monster Spawns in a file, and this sped up the process and was way better than manually counting. I did notice the X Y coordinate calculation seemed off, and your info on that is useful. Currently my X Y counter works just for south-facing locations, which is what I’m building right now, but once I run into another location I’ll set the other directions up too.

A lot of the development on this extends from what’s available technically in Unity. It may be interesting to know that I did almost zero pre-planning, it was almost entirely a technical development. From previous projects I’ve found that pre-planning can actually hurt, because a lot of times what one imagines can be very different from what is available. Part of how the project was deployed so fast was that it just extended from “Ok, now I just need one more feature!” and adding the bare minimum to get that done.

For #3, it is possible, although currently the app doesn’t read from any files on your computer. I’m being selfish on this project, so I’m focusing on the features I need rather than expanding customizability.

I am finding myself continuing to patch, even though I’m trying to minimize any further time spent. I’ll likely build the tool out more whenever I run into a roadblock preventing my own map-making, and I like to keep the public version as up-to-date as possible. :stuck_out_tongue:

BTW: Here’s a preview of a map I’ve been working on the last 2 days! It’s a medium-security prison.

1 Like