1. Iron Village
  2. News

Iron Village News

Diary #57 – Iron Village 1.2 Features

[p]It’s been almost 3 months since the last major update, and it’s time to give a full preview of what’s coming in the update. The plan is to release the 1.2 update on Thursday, September 18th – all of the major features are done, it’s mostly just some minor bugfixes I’m trying to squeeze in, plus some more thorough testing, so I don’t see a reason why the date will change. Here’s what you can expect in this update:[/p][p][/p][h2]UI Updates[/h2][p][/p][p]The lower right corner of the user interface with the new graphics applied.[/p][p][/p][p]Probably one of the first things you’ll notice. I’ve implemented the updated Minifantasy UI (with some modifications), giving the panel textures a more crisp look that contrasts them better against the background. I think this brings it more in line with rest of the game’s aesthetic as well.[/p][p][/p][p][/p][p]A tree waiting to be chopped down.[/p][p][/p][p]There’s also new bubbles that pop up on buildings & trees that you are demolishing/chopping down, which should better communicate the status of things.[/p][p][/p][p]The new version of the Railway Status Window[/p][p][/p][p]The biggest change in the functionality of the UI is the use of Windows instead of PanelContainers for many UI elements. These are two different UII objects in Godot: the PanelContainer is a simple box with a background, whereas the Window is a little more finicky, but more powerful object that acts as a window, complete with resizing and moving. (These can also be used to create “native” windows, that show up outside of the game window.) Many windows can now be dragged around and resized so they won’t get in the way of you playing.[/p][p][/p][h2]Production Data Charts & Other Analyses[/h2][p]The Current Production Rates window[/p][p][/p][p]I would consider this the main feature of 1.2, if you had to assign that title to one feature. Although Iron Village has 88% positive reviews (out of 45: go add to that number if you haven’t already!), and half of the negative reviews are transphobia, there’s always room for improvement. One item that has come up multiple times is the lack of production data: basically, how do you figure out the rates resources are being produced so that you can find bottlenecks?[/p][p]Originally I didn’t have this as a necessary feature, given that Iron Village’s gameplay is relatively short and simple. However, the importance of some sort of data analysis screen came apparent for a few different reasons:[/p]
  1. [p]Review comments & discord feedback about feeling like they were missing that information.[/p]
  2. [p]Since I literally programmed the game, I have a decent understanding of what’s going on just by looking at the movement of villagers and the flow of the resource counts. New players would probably not have this intuitive understanding, no matter how well I otherwise designed the user experience.[/p]
  3. [p]The late gameplay came together rather late in the game’s development cycle. While it’s fairly easy to keep track of what you need in the early game, the late game gets a lot busier and can really be helped with that extra information.[/p]
[p]There were four new windows designed for this feature, although the last one is only tangentially related and covered in a section below. The first two are the Maximum & Current Production Rates: What can your buildings theoretically produce (so you can find out what buildings are missing or superfluous), and what have they actually been producing (which will hint at other problems like low population). More details about these can be found in Diary #53 – OK, What’s Next?, with some implementation details in Diary #54 – Workers and Resources: Iron Village.[/p][p][/p][p]Spreadsheets![/p][p][/p][p]The third window (which actually gets unlocked between the two, more on unlocking below) is Population Statistics, giving you an overview of the population, housing, and job counts; summaries of urgent needs such as hunger or homelessness; and the production and consumption of food and water. This should get you an idea of if your villagers are having their needs met.[/p][p][/p][h2]Railway Headquarters & Immigration Office[/h2][p][/p][p]Level 1 of the Railway HQ[/p][p][/p][p][/p][p]Level 2 of the Railway HQ[/p][p][/p][p]You don’t get all of that information right away though – there’s in-game reasoning for it instead. You have to build a Railway Headquarters (available in the 2nd level, the Light Industrial Permit) to get the Maximum Production Rates. This HQ upgrades again in level 3 (Full Agricultural Permit) to grant access to Population Statistics, and again in level 4 (Heavy Industrial Permit) to get the Current Production Rates.[/p][p][/p][p]Level 3 of the Railway HQ on the top of the screen, connected to the Immigration Office across the railway[/p][p][/p][p]The fourth window I alluded to above is the Immigration Controls window, which unlocks with the Immigration Office (itself unlocked in level 5, City Status). This office acts as an extension to the HQ, and handles another bug/issue/feature request from players: why does my population stall at just above 120 villagers? I had programmed in some population caps per level to avoid the player having to take care of more villagers than they could realistically handle. For level 5, this was set to 120, and as long as the population was at least 120, passenger trains would stop carrying new villagers. However, since City Status is the highest level you can achieve, that places a permanent cap of 120 villagers on your town/city.[/p][p][/p][p]The Immigration Controls window[/p][p][/p][p]With the Immigration Office, you now get the ability to increase that cap, so now the main limiting factor will be the size of the map. You can also decrease the cap, although this won’t actually kick anyone out. Instead, it will just prevent new villagers from coming in.[/p][p][/p][h2]New Resource Graphics[/h2][p][/p][p]In the middle: a pile of steel. To the bottom left is a new decoration available for construction.[/p][p][/p][p]This was also covered in Diary #53, many of the resource piles have been graphically updated and should better fit in with everything else.[/p][p][/p][h2]Villager Housing Logic Improvements[/h2][p]Upgrading houses used to come with a semi-hidden drawback: doing so would evict the current residents. They might end up getting to live in the new building, but they might also just get moved to another random house, or in the worst case scenario become homeless. Either way, the eviction comes with a happiness penalty. Depending on where you live, this may be realistic, but that’s not a good enough excuse to mistreat the poor villagers. Now whenever there’s a housing upgrade, the existing residents get automatically rehoused in the upgraded house.[/p][p]The villagers can also take the opportunity to rehouse themselves – if there’s a nicer building (defined by the resting rate – how quickly they regain energy) with open space, they have the opportunity to change homes when they’re ready to go back to sleep.[/p][p][/p][h2]Excess Resource Disposal[/h2][p]Until 1.2, demolishing a building would require that you have enough storage space for the resulting resources. For example, demolishing a stone building would require sufficient stone storage for the resulting building materials, and demolishing a stone storage area would require sufficient capacity to store the resources that were present.[/p][p]The new method of dealing with excess resources.[/p][p][/p][p]Now you’ll receive a warning when trying to do this, but you won’t be completely locked out from the bulldozer. Instead, you’ll just lose the resources that can’t be stored.[/p][p]This also now applies to upgrades. Some upgrades, such as upgrading wooden houses to stone, included a refund (in this case wood). Before 1.2, you would end up over capacity, but now the excess is removed.[/p][p][/p][h2]New Achievements (Steam Only)[/h2][p]New large construction projects means new achievements of course! The first and third levels of the HQ come with achievements, and reaching 200 villagers will get you a shiny badge as well.[/p][p][/p][h2]Steam Input API (Also Steam Only)[/h2][p]This isn’t full support for key remapping, but this should enable playing Iron Village with just about any game controller, with fully customizable button choices.[/p][p][/p][h2]Chop & Mine Sound & Animation Alignment[/h2][p][/p][p]A villager mid-chop.[/p][p][/p][p]The some buildings emit sounds when villagers are working inside them. You get fiery forge sounds from the Steelforge, windmill swooshes from the windmill, etc. With the new mining and chopping animations in 1.1 though, you can clearly notice that these sounds do not line up with what the villagers are actually doing. This is fixed in 1.2, and the sounds should play as the pickaxes and axes impact the rocks and trees, respectively.[/p][p][/p][h2]Train Graphics “Overhaul”[/h2][p]Iterations on the steam engine, counterclockwise from top right: (1) The original steam engine asset. (2) The first experiment that I posted on Bluesky: removing two pixels of height. (3) The finished modification, I settled on 1 pixel instead of 2, and fixed the extra smokestacks.[/p][p][/p][p]A lot of the locomotives and train cars have been tweaked to be a whole pixel shorter. You probably won’t notice, but if you compare side-by-side it’s surprising how much of a difference it makes. The locomotives have been tweaked too, with slightly longer cab roof overhangs, and I removed the excess smokestacks to make things a bit more realistic.[/p][p][/p][h2]Job-Finding Overhaul, a.k.a. LinkedIn[/h2][p]Before 1.2, villagers were in charge of finding jobs. When they were idle (that is, they already sorted out their basic needs), they would ask the JobManager to find an open job, which would then look through all of the jobs and assign one of the highest priority ones. This system did work, but could cause some issues in larger towns, since the location of the villager was not taken into account.[/p][p]To fix this, the JobManager is now in charge of the whole process. When an idle villager decides they are ready for a job, they set their state to LINKEDIN (Yes, that’s literally what I called it, but it’s less humiliating than #opentowork.) The JobManager keeps track of the job market, and each frame goes through the open jobs in priority order, assigning them to the closest villagers that have indicated they are #lookingforwork. This is a greedy algorithm, so it could potentially be more efficient, but it at least means your orders to chop down trees will be taken by villagers who are actually nearby.[/p][p][/p][h2]Full Town Screenshots[/h2][p]A screenshot of the whole town that has been used for testing so far.[/p][p][/p][p]This was a little tricky to figure out, since it's not super well documented IMO, but thanks to this video I managed to get a second camera set up in the game. What does this special camera do? It lets you take a picture of your entire town. When you open up Screenshot Mode (the camera button in the lower right), a second button also appears. That button takes a picture from the second camera and saves it to user://screenshots/. (user:// varies by OS, for example on my Windows machine it's C:\\Users\\(USERNAME)\\AppData\\Roaming\\Godot\\app_userdata\\Iron Village.) I need to figure out the best way to document the feature, since that description is trickier to fit into the game, but I at least want to make it available for 1.2.[/p][p][/p][h2]And More![/h2][p]There's a few more minor tweaks and fixes that would've made this even longer, so you'll have to wait for full patch notes to see those. Anyway, I'm looking forward to sharing this with all of you on the 19th![/p]

Diary #56 – The Iron Village Cinematic Universe

[p]When I stopped working at my corpo tech job, I assumed that I would magically get the time to put out some sort of dev diary every week. Maybe that’ll still happen, especially if I do start a Patreon, but that has definitely not been the case recently. Instead, it’s been the two weeks between my two oldest kids going to summer camp, and them going to school. Some highlights include:[/p]
  • [p]Trying to get my oldest to not spend all of his time on the computer without being a hypocrite.[/p]
  • [p]A reintroduction to Hand, Foot, and Mouth Disease, this time in my youngest kid.[/p]
  • [p]Moderating interpersonal conflicts between the three of them. (Yes, it is frustrating dealing with a toddler in their terrible twos. No, you don’t get to scream whenever they touch you.)[/p]
[p]Somehow in the midst of all of this, I did get some work done on Iron Village: Steam Input API integration. It’s a best practice for Steam Deck integration, and will finally let you rebind keys in the game. It’s also been a bit of a pain to get working properly, there’s a decent amount that just hasn’t been documented – so fun! 🙃[/p][p][/p][p]A topographic map of a continent, placeholder name “Amé”, in a window of Inkscape. Just to show the insane scope of what I’m talking about.[/p][p][/p][p]Instead of talking about that though, I want to talk about something related to both Iron Village and the unannounced next game: world building. A couple of years ago, I had the luck/misfortune of stumbling across Artifexian’s worldbuilding channel (and subsequently, Worldbuilding Pasta’s blog and Madeline James’s Worldbuilding blog & channel). There’s something really neat about designing a world using ridiculously unnecessary levels of detail, so of course I started that as a little side project. (Editor’s note: it was not little.)[/p][p]In parallel though, I started doing a little bit of very basic background for Iron Village. Back around November/December 2024, some feedback I was getting pointed to my neglect of details for the setting – like, why are we building in terra null? Up until this point there was this vague idea of “urban fantasy” – there’s magic and fantastic themes, but they’re not the focus of everything. After this feedback came the first bit of setting: the mission to administer a new town in “the borderlands” (the excuse for why they’re empty) to facilitate trade with Nova Porthladd. This mission is assigned by a Monarch Faearn of the Kingdom you name at the start, otherwise known as the Iron Realm. There’s not a ton, but it’s enough to put across the feeling that you’re part of a larger world, even if you’re building everything in this part.[/p][p][/p][p]This is a Köppen Climate Map of the same area, to give you a sense of the info I’ve been tracking.[/p][p][/p][p]For the next game, I have the audacious plan of combining the two: using this much more developed world as the setting, and shoehorning the Iron Village “story” into it as well. Technically, this means I’m developing… the Iron Village Cinematic Universe! Don’t worry, it won’t actually be that insane, I am perfectly happy to retcon things as needed, but I thought it would be a neat way to tie the games together.[/p][p][/p][p][/p][p]Some very rough sketching I did to try to vaguely map where the Iron Realm (cyan), Iron Village (purple), and Nova Porthladd (Maroon) would be. Note that Nova Porthladd is probably going to be a tiny bit south of that circle, at the mouth of the slightly larger river.[/p][p][/p][p]I’ll be talking more about this in the future, but at least wanted to introduce the concept now. Next up should be some more 1.2 info, hopefully including a release date! (I was thinking of doing something silly and releasing on the same day as Hollow Knight: Silksong – but that timing is definitely too soon.) Thanks for reading![/p]

Diary #55 – Turning Points

[p][/p][p]Disclaimer: Not in game footage. No curved tracks are planned for Iron Village, sorry.\\[/p][p][/p][p]So things are changing over here, and I’m going to potentially overshare personal life things that are relevant to Iron Village & Lunar Chippy Games as a whole.[/p][p]First off, the job at the global megacorp, or whatever I called it back at the start of these dev diaries, is coming to an end. There was a “voluntary exit program” with severance pay offered, and I figured it was time to make the jump. I’m not going to go into all of the details (personal privacy reasons mainly; everything I’m talking about is discussing working conditions and is therefore protected activity in the US – at least as long as the NLRB exists 🙃), but the gist of it is:[/p]
  • [p]Growing disillusionment with the company, its direction, and especially its leadership[/p]
  • [p]Other parts of the company allegedly profiting off of genocide (according to the UN)[/p]
  • [p]Having vaguely defined “performance issues” or nitpicks raised by my manager every week, only for the goal posts to shift every time I successfully deal with them.[/p]
  • [p]All of the above completely destroying any semblance of mental health.[/p]
[p]Based on some of that, I probably should have left a couple of years ago, but now the opportunity has lined up to bail out of that job. With a decent amount of savings, I’ll be working full time on a combination of recovery & Lunar Chippy Games.[/p][p][/p][p][/p][p]The Immigration Office has been built across the tracks from the Headquarters, with an overpass connecting the two.[/p][p][/p][p]So where is Iron Village right now? The different analysis windows are now done, as are the HQ buildings. The fifth level technically isn’t a headquarters upgrade, instead there’s a separate building on the other side of the tracks: the Immigration Office. This is the answer to the question, “why can’t I have more than 12x villagers?” (usually 122 or 124) – there’s a population cap. With the Immigration Office, you can adjust the cap to your heart’s content. Want to set it to 0? Sure, it won’t kick anyone out, but you want get any new villagers. Want to modestly increase it to 2147483647 + 1? You’re limited to going up in 5s, so that may take awhile. But theoretically, sure! Otherwise though, this lets you keep growing your town/city as much as you want, until you run out of space.[/p][p]With that, the “star features” are done, although there’s a decent set of other features & bugfixes to go. The main thing I’m trying to do this time is get all of the text finalized now, so I only have to send over one batch of text to the translators. Every time I thought I got everything together, a week or two later I’d discover, “oh shit, I need to add text here too”. So instead, I’m trying to wait until I get way more done before sending it over, and hopefully this time I’ll actually pull it off. With this plan, I should be able to get 1.2 out some time in September 🤞.[/p][p]Now above I mentioned I would be working on “Lunar Chippy Games”, not just “Iron Village”. When I started work on Iron Village, the plan was to make a small game as a learning exercise, and see if getting into game dev is a feasible plan. The answer so far is… maybe? Last time I ran the numbers myself (a few days ago), the company has lost about $100 USD. Considering the profit margin the last time I went through expenses, that isn’t terrible? This whole thing is so close to actually making profit, not bad for a little game without enough marketing! But obviously that isn’t enough to live off of, so it’s time for game #2: this time with full time work and actual marketing! I’ll have a proper announcement at some point, but this is a heads up that Iron Village development will be slowing down.[/p][p]The thing I’m going back and forth on is Patreon: I think it could be a helpful way to make this a little more sustainable, but also it just doesn’t seem to be a common way to fund a lot of games. (The huge exception here is adult games – but I don’t know if that’s just because it’s a different market, or if that funding model is actually applicable here.) Is there a reason for that? Is it just gamers™ thinking it’s greedy, or is it actually too much? Do I have to start putting some dev diaries behind a paywall, or just figure out something else I can do that’s more easily monetizable? Maybe it’s a bad idea, maybe it’s a good one, I’m curious if anyone has thoughts?[/p][p]Anyway, TL;DR is the full time job is ending, so there’s going to be more dev time – but not on Iron Village. I still might put some more updates into it post-1.2, but I have to start deprioritizing it in favor of the next game.[/p]

Diary #54 – Workers and Resources: Iron Village

[p][/p][p]The theme of the 1.2 update. Original logo ©3Division. I hope you'll forgive my very dumb visual gag 😅. I had an idea and it stuck in my head.[/p][p][/p][p]I haven’t put one of these dev diaries together in a bit, life has been a bit hectic, but I wanted to talk about the infrastructure behind the new UI windows that let you get a closer look at your… workers and resources.[/p][p]I showed the maximum production rates in the last diary, but compared to implementing the current production rate charts, that was pretty easy: check the building counts (how many of each building we have), look up the inputs, outputs, and production times, and calculate the maximum output. All of that information was already there, I just chose to refactor things to make that data more easily and efficiently accessible.[/p][p](Discussion of coding practices follows, feel free to skip down to the pretty pictures later on.)[/p][p]Meanwhile for current production rates, I needed data on what resources were produced, and when. That was information that just wasn’t being saved. There was the recent approval events feature in the Railway Status window, which records changes in approval rating and their times, but that was specifically designed just for approval events. So, using knowledge of Godot best practices that I acquired after starting development of Iron Village, I started putting together an EventLogManager.[/p][p]A lot of the code in Iron Village uses singletons: basically, an object that’s designed to only have one instance at a time. Some of these are “autoloads”, and are always-on global instances. This isn’t necessarily the best practice in normal coding, but in the scope of a single player game there’s a few areas that this is perfect for, including the GlobalSettings object that manages client settings, and the SteamworksManager which handles connecting to and communicating with Steam. Some of the singletons are specific to the root scene, where the actual gameplay takes place (as opposed to the main menu scene) – the best example for this dev diary is the ApprovalManager, which handles tracking the railway’s approval of your work. It doesn’t make sense to have multiple managers for this, so it’s a singleton.[/p][p]Singletons by themselves aren’t bad, and are actually really useful in the context of single player games. What wasn’t so great was that the ResourceVehicle class (a train car carrying cargo) was directly calling this singleton to report approval changes. It’s not the end of the world, but making a bunch of these calls from various different nodes can turn things into a bit of a confusing web. Godot is designed to work as a “tree”: basically, there’s a root “node” (an object, e.g. an image, a sound player, a collision shape, or just an abstract invisible thing), and that node can have a bunch of children, and each child node can have its own children, etc. In this case, a great grandchild node of the root (the ResourceVehicle) was calling a separate child node (ApprovalManager).[/p][p]The saying goes (yes, Godot is big and old enough that it has its own sayings), “call down, signal up”. Basically, a parent node will tell its children what to do (this is a fantasy of course, because the children actually listen), but the child should emit a signal: it yells into the void, and the parent may or may not react to that signal (that part is super realistic). This makes the flow of the program much more predictable, and hopefully avoids confusing bugs where the game isn’t doing what you think it should have done.[/p][p]To start the EventLogManager, I rewrote the approval event code to use the upward signaling. This did involve a decent amount of boilerplate code unfortunately, since the call would have to go ResourceVehicle -> Train -> TrainManager -> GameManager -> ApprovalManager, instead of ResourceVehicle -> ApprovalManager. (In most cases, it is actually even worse, the water for a locomotive is represented by a ResourceVehicle child of a Locomotive.) However, the code flow is at least quite a bit easier to track.[/p][p]I also did the same thing for buildings producing and consuming resources (ResourceProducer -> Building -> BuildingsManager -> GameManager -> EventLogManager), and so now there’s a system for signaling and recording resource production, resource consumption, and approval changes. The current production rates and railway status windows can just refer to the EventLogManager for these events, and make any calculations from the logs.[/p][p]Since you made it this far (or just skipped ahead), here’s a side-by-side comparison of the level 2, 3, and 4 railway HQs (not including additional props rendered in game):[/p][p][/p][p][/p][p][/p][p]Iron Village 1.2 is definitely coming together now, there was just a lot of underlying infrastructure to put together to support it. Hope that was at least somewhat interesting. 😊[/p]

Dev Diary #53 – OK, What’s Next?

[p]Developer's note: apparently this has been sitting as an unpublished draft for two weeks - sorry about that![/p][p]OK, so the latest patch has been out for a bit, and is mostly stable. It feels like it's been awhile since my last dev diary, but apparently it's only been around 2 weeks? Blame that on mental health and work shenanigans I guess? (That'll probably be a separate dev diary, but I'm not ready to write that just yet.)[/p][p]So what's happening now? First of all, the 1.2 update. The star feature of 1.2 will be... data analysis! Sounds super exciting, right? But really, one feature that was requested by some players was a way to better see what's going on. Especially in the later game, it was hard to gauge if you had enough of a particular kind of building, for instance, do you have enough magick pepper fields to handle your electricity requirements? The big feature now is a window you can open that will tell you, "yes, you have enough", or "no, you probably don't have enough".[/p][p][/p][p]The top half of the Maximum Production window. As you can see, there is (theoretically) plenty of supply for making more advanced goods, although this does not include usage by trains or villagers.[/p][p]There's actually four new windows planned. The first one, shown above, is Maximum Production, which tells you the theoretical output of the buildings you have built. This does not take into account how long it takes for your villagers to get there, interruptions from eating, drinking, and sleeping, or if you even have the spare workforce to fill the job. It will, as an example, help you get the right number of farms and windmills to fully supply your bakery.[/p][p][/p][p]The version of the HQ built in level 2, a small structure on the hill with a giant clock. (Yes, that clock is functional!)[/p][p]These windows are unlocked by building the Railway HQ, a further-upgradeable building that represents the railway's presence in your town. Starting with the Light Industrial Permit (Level 2), each permit unlocks a new level of HQ, and each level of HQ unlocks a new analysis window to help support your administration.[/p][p]I'll have more details once I actually build them, but I'll at least mention the other three windows. After maximum production is Population Statistics. This will have information about how many job openings you have compared to your population, how you are doing with fulfilling their food, water, and shelter needs, etc. Third is Current Production, which shows the actual output of your buildings, allowing you to see the gap between theoretical and actual performance. Finally, there's Immigration Controls. As some of you have noticed, the game caps out around 120 villagers. It's a soft cap: you may end up with more thanks to a train with a lot of passengers, but more passengers will stop coming once you've reached this limit. Immigration Controls will allow you to change that limit (or remove it altogether).[/p][p][/p][p]The new coal, wood, stone, and steel storages are visible in this screenshot.[/p][p]The new storage graphics also appear in the main menu.[/p][p]To wrap this dev diary up, I wanted to add a bit of new eye candy. Somewhat recently (a couple of months ago, I think), Krishna Palacio put together a new Patreon-exclusive pack: Material Piles. I know, sounds fascinating and exciting, right? A big part of this update has to do with resources though, so it was a perfect time to update some of the resource storage graphics! I did modify them a decent amount to fit them into the context of Iron Village, but the core of it is Krishna's work, so definitely check it out![/p]