1. Going Medieval
  2. News

Going Medieval News

Medieval Monday Talk #51 — Prisoners Revision

Greetings, medievalists!

When we initially discussed the role of prisoners in the game, you shared your thoughts and ideas on how their behavior should be handled. Many of you wanted them to perform work for your settlement, and you suggested a few ideas on how such a system could function.

We listened to your feedback, discussed it internally, evaluated all the options, and we think we’ve found the right approach for this feature. So, let’s talk about how you’ll be able to turn prisoners into captive laborers.

For that to work, we had to revisit the Warden role we mentioned earlier. The Prison Warden will be responsible for controlling prisoners and captive laborers in your settlement.

To convert a prisoner into a captive laborer, you’ll need to shackle them. Shackles will be crafted at the Blacksmith’s Forge. Once shackled, you’ll be able to mark them as captive labor in the overview panel, along with the tasks they’ll be assigned.



Being a captive laborer comes with certain limitations - you will not be able to turn them into settlers while they are marked as laborers and have shackles (once you turn those things off, they'll be considered for recruitment, if possible), they'll be slower and their work performance will be slower, too (with them having shackles), and they'll want to escape if they are sad/miserable.

This is where the Warden shines. During their appointed hours, they’ll work to convert prisoners into settlers and manage captive labor. By "manage," we mean they’ll oversee the laborers, ensuring they understand their role within the settlement.

You also expressed concerns about the Warden revealing prisoners' skills during the conversion process, which might feel tedious and not worth the effort—especially when you finally discover all their skills and perks, only to find out you don’t like them. So, we’re dropping that idea. It sounded cool to us and fit the role-playing aspect, but you’re probably right—after dealing with 2 or 3 prisoners with terrible skills or perks, you’d likely give up on the feature.

To avoid overwhelming the Warden with duties, we’re introducing the Gaoler job. Settlers with the Gaoler role (an old-fashioned term for jailer) will handle escorting prisoners, shackling them, feeding them, and other #justjailerthings.



So, do you like this change/feature expansion? Let us know in the comments. We’ll have one more Medieval Monday Talk, and hopefully, by then, we’ll have a better idea of the release date for the next update. Stuff like this can extend development time, but we believe it’s worth it. So, talk to you again in two weeks. Until then,

Stay medieval!

Foxy Voxel

Discord Reddit X/Twitter TikTok Facebook

Experimental Branch Patch (0.19.32)

Greetings players! The newest patch (0.19.32) is now live on all platforms on the experimental branch. Please save your progress and restart your game client to update. You should be able to load normally and continue playing. If you have any problems, please let us know.

[h3]Bugs and Fixes[/h3]
  • Fixed the issue where archers would shoot through floors, but only when commanded with the attack order (G).
  • Fixed the issue where settlers would not attack animals if they were marked with the attack order (G). This also bugged out their animations.
  • Fixed the issue where x5 speed wouldn’t be disabled during combat and spam message “Fast speed is disabled during attacks”.
  • Fixed the issue where settlers with roles would sometimes lose their rooms upon their return with the caravan.
  • Fixed the issue where the message 'Hunter lacks ranged weapon' would appear if you have no one assigned to hunt.
  • Fixed the issue where the mouse wouldn't show on hover what each perks/background/ pseudonym offers when choosing them via advanced character creation.
  • Fixed the issue where changing the background of a settler via customization would not refund the creation point cost, causing the depletion of creation points just by enrolling the background over and over.

[h3]Quality of Life improvements[/h3]
  • NPCs leave footprints, too.
  • Rope effect has a bit of a curve to it now.

[h3]Known issues:[/h3]
  • If your settlers are experiencing weird animations with some actions, be sure to turn off V-sync and cap the game's FPS in the game's options. Cap it to 60fps. If the issue persists, cap it at 30.
  • Some text keys are still not translated.
  • Player-triggered events don't have sound effects
  • Settlers will not refuel torches if there is no floor/ground beneath them.
  • Settlers will not choose the closest production building (if there are more of the same type), but the one that has a production set first in the global list of productions.
DISCLAIMERS:
⚠️ We decided to keep Dev version of the game on the experimental branch, and that means that a Dev log with red text will appear from time to time. This will help us get more info from your side when crashes and bug reports occur.
⚠️ Also, at the moment, the experimental and the main branch are different. You should not play saves from the experimental branch on the main one as it can cause various bugs - please avoid doing this.

As always, use F10 and/or the experimental bug subforum for reporting experimental issues. If you want more dynamic/direct communication - head over to our Discord server. Even though we might not reply, we are reading everything. Thank you!

Foxy Voxel

Medieval Monday Talk #50 — Rewriting Buildings

Greetings, medievalists!

In today's MMT we're talking about BUILDINGS! Well… more like… refactoring of buildings. We’ve done refactoring of other stuff before, but building refactoring is a bit harder to describe. This is going to get very technical, but for the sake of transparency and to understand how big of a change this is, we’ll try to explain it as best as we can - in layman’s terms.

Previously, we used a method called inheritance to create and manage buildings in our code. Inheritance is the mechanism of basing an object or class upon another object, retaining similar implementation. We had a base class called BaseBuildableObject that contained common code for things like construction, deconstruction, and storage. Think of a base class as a master blueprint. It's a basic plan that other, more specific blueprints are based on. All constructions were derived from this base class, and that’s why we created two separate instances:
  • BuildingInstance: Inherited from BaseBuildableObject.
  • FurnitureInstance: Also inherited from BaseBuildableObject.

One would be for building and the other one for furniture. If we had to introduce a new object within furniture, and that object would have some furniture properties but not all of them - we would have to expand FurnitureInstance and create a new class that inherited it. That could work, but it’s far from good practice, as we would have to expand FurnitureInstance each time we would add a new thing. We would just add unnecessary code that could be accessed from all classes that inherit it.


In this old architecture system, we had separate .json files for each building type. Basic buildings were in one .json file (such as walls, doors, stairs… in the Buildings.json), furniture was in another file (tables, chairs, beds… in the Furniture.json) and so on (check all these .jsons in the steamapps\common\Going Medieval\Going Medieval_Data\StreamingAssets\Constructables).

So, for the game to access that new furniture, it would have to go through the Furniture instance, process all of the code that covers functionality of every furniture, in addition to accessing the separate code of that new furniture. That can cause unnecessary processing power and extra steps for the whole process.

To solve those issues we’ve decided that it’s best to rewrite (technical term REFACTOR) all code related to buildings. The new approach we’re using is called component based architecture.

Component based software architecture is a style of writing code in multiple different classes (called components) that do one specific thing. Components are loosely-coupled and can be reused, making the code base easier to modify and expand without adding unnecessary code.

Now, we will have one single storage file with all the possible buildings inside it, called BaseBuildingRepository. However, they initially don't do anything except take up space in the game world. For example, beds can't be slept on, production buildings don't produce anything, and torches are always off and don’t give out heat. With just this .json, you would only be allowed to construct buildings and they would need resources for construction. Here is an example of campfire code in the old architecture (left) vs the new one (right).



To give buildings their functionalities, we had to create specific components for each building type: BedComponent for beds, TableComponent for tables, ChairComponent for chairs (TrapComponent, GraveComponent, DoorComponent, ProductionComponent) etc. Each component type will have its own JSON file describing its functionality.

To tie it all together, we have to do a couple of things. The first is done in Unity via prefab editing. In game development, a prefab is a ready-to-use model of an object (like a campfire), which you can then add specific functionalities to, like making it actually produce heat or light. In our case, a camp_fire prefab will require, among other files, a ProductionComponent.



The second thing is that we need to specify the productionComponentID within the campfire id in the BaseBuildingRepository.json.



This references a specific production component that the campfire will use. It could be any production component, not just for campfires. It doesn’t need to be a campfire component - it can be a research table component or a skep component (basically any production component). To make it more clear, here’s a snippet from the new ProductionComponentsRepository.json for campfire:



Notice how it only contains information about productions, no information about buildings.

Same principle goes for all other buildings. Some .json files may be nearly empty, like this one for caravan post (CaravanPostComponentRepository.json):



That’s perfectly normal. If we wish to expand caravan post functionality later on, we can edit that .json file and add appropriate code to the caravan post component. That way, all code related to a single type building will be contained in just a few classes and it’s much easier to debug everything (if there are issues with buildings of a certain type, we know exactly where to look as each building will have its own component now). And this will make modding of the game that much easier.

So, that’s why this is a big deal to us and why it took a lot to do it. We had to cover all of the building types and tie them all together in this streamlined coding web and this will make development much smoother as we go forward. And don’t worry, this will not break your existing saves.

Did you understand this? Does it make sense, even if you are not familiar with coding? We’re asking in order to figure out if these tech talks are worth going into such detail next time if/when they happen.

In any case, there are more things to talk about - like what you can expect from prisoners and their behavior. We've listened to your feedback and we'd like to extrapolate their functionality and that's worth at least one more MMT. Sooo... talk to you again in two weeks. Until then,

Stay medieval!

Foxy Voxel

Discord Reddit X/Twitter TikTok Facebook

Patch Notes (0.19.30)

Greetings players! The newest patch (0.19.30) is now live on all platforms. Save your progress and restart your game client to update. You should be able to load normally and continue playing. If you have any problems, please let us know.

[h3]Bugs and Fixes[/h3]
  • Fixed several crash occurrences.
  • Fixed the issue where the game didn’t count killed enemies during raids, causing frequent appearance of the ‘Defeat’ screen.
  • Fixed the issue where the game would be stuck in an infinite loading if you are in-game and try to exit it via the “Exit to main menu” button.
  • Fixed the issue where a carcass would not spawn from a grave. This occurred when you put a body in a grave, then save & load the game, then proceed to destroy that grave.
  • Fixed the issue where domestic animals would continue to appear as an event, even though that event type is turned off in the custom difficulty settings.
  • Fixed the roof loading error that was causing issues for some community modders that are making steep versions of existing roofs
  • Fixed an issue where the background, height, weight of a settler were not being displayed in Chinese, Japanese and Korean localization.
  • Fixed the issue where changing settler’s headpiece would cause the game to remember the look of the old headpiece from before and thus cause graphics overlap.
  • Fixed the issue where settlers wouldn’t haul freshly hunted animals' corpses.
  • Fixed the issue where the pen wouldn’t be detected if you built it with a door, and that door was in front of the stairs.
  • Fixed the issue that caused settlers with no Religious Requirement (Faithless background) to constantly pray.
  • Fixed the issue where a room detection wouldn’t work properly if that room was located above the water.
  • Fixed the issue where enemies would swim through the door if that door was located above water.
  • Fixed the issue where some smoke effects appeared green at night.
  • Fixed minor tooltip issues.

[h3]Quality of Life improvements[/h3]
  • New animations for settlers tied to weapon carrying and drafting have been added.

[h3]Known issues:[/h3]
  • If your settlers are experiencing weird animations with some actions, be sure to turn off V-sync and cap the game's FPS in the game's options. Cap it to 60fps. If the issue persists, cap it at 30.
  • Some text keys are still not translated.
  • Player-triggered events don't have sound effects
  • Settlers will not refuel torches if there is no floor/ground beneath them.
  • Settlers will not choose the closest production building (if there are more of the same type), but the one that has a production set first in the global list of productions.
DISCLAIMER: The experimental and the main branch have the same version of the game. However, on the experimental branch, we decided to keep the Dev version of the game, and that means that a Dev log with red text will appear from time to time. This will help us get more info from your side when crashes and bug reports occur. If you are annoyed by this, please switch to the main branch to experience the game without the red text.

Foxy Voxel

Experimental Branch Patch (0.19.30)

Greetings players! The newest patch (0.19.30) is now live on all platforms on the experimental branch. Please save your progress and restart your game client to update. You should be able to load normally and continue playing. If you have any problems, please let us know.

[h3]Bugs and Fixes[/h3]
  • Fixed several crash occurrences.
  • Fixed the issue where the game didn’t count killed enemies during raids, causing frequent appearance of the ‘Defeat’ screen.
  • Fixed minor tooltip issues.

[h3]Known issues:[/h3]
  • If your settlers are experiencing weird animations with some actions, be sure to turn off V-sync and cap the game's FPS in the game's options. Cap it to 60fps. If the issue persists, cap it at 30.
  • Some text keys are still not translated.
  • Player-triggered events don't have sound effects
  • Settlers will not refuel torches if there is no floor/ground beneath them.
  • Settlers will not choose the closest production building (if there are more of the same type), but the one that has a production set first in the global list of productions.
DISCLAIMERS:
⚠️ We decided to keep Dev version of the game on the experimental branch, and that means that a Dev log with red text will appear from time to time. This will help us get more info from your side when crashes and bug reports occur.
⚠️ Also, at the moment, the experimental and the main branch are different. You should not play saves from the experimental branch on the main one as it can cause various bugs - please avoid doing this.

As always, use F10 and/or the experimental bug subforum for reporting experimental issues. If you want more dynamic/direct communication - head over to our Discord server. Even though we might not reply, we are reading everything. Thank you!

Foxy Voxel