Posted November 29, 2025 by GMPguy
Hello everyone! It is this time of year, where I come back with yet another annual set of updates and excuses, regarding the development of the Swift Survivors game.
Since we are in a weird period, between the culminating days of both the spooky month, and the jolly month, I’ve decided to keep this devlog in a ghost aesthetics.
That being said – if everything goes correctly – for the next ~4 months, all of you will be haunted by the three ghosts:
This is a Charles Dickens reference by the way. Anyways, the exact details will be provided in each posts once published.
That being said, it is time for…
Before we get into the content, let me just get briefly on the matter of yet another long absence. Fortunately, it was mainly caused by me working on other game projects. This time however, those weren’t individual projects that went nowhere – but rather – ones that you can/will be able to play in the near future!
I can’t tell you about one of them, since that’s a secret project that I’ve been working for someone else, as a form of internship.
The other one, was a VR Musket Game, that I’ve made for my portfolio while looking for internship. A year after it’s completion, it has been compiled, and now can be played here Musket Game VR. Since it’s a VR game, in case some of you can’t play it, here’s a video showcasing it:
And the last, but certainly not least, was the practical component of my bachelor thesis. Unfortunately, due to certain regulations of my alma mater, the university has rights to editio princeps for the first six months after the defense of thesis. In regular English: uni has the right to publish my game first until March. They won’t do it – still – I have to wait until then before releasing it. But I think, they won’t be mad, if I leave a small snippet here from the public presentation of the project:
Now that the formalities have been met, let’s get to the fun stuff, shall we?
I think one of many highlights of this update, and certainly the most important one in regards to core mechanics, are chests!
As partially mentioned in the previous devlog, chests are the new main way to obtain items. Instead of finding items laying around, some of the buildings will have chests in them. They can be opened by holding the interact key when near. It takes a few seconds depending on the type of chest, and some might give you the “Actually, it’s locked” message. But if everything goes correctly, they’ll open, and items will appear inside:
Should the chest appear to be locked – or if you don’t have the time – you can also quickly open them with lockpicks… or brute force
Even tho all the models are completed, only half of planned chest have been implemented; the ones you’d find in houses. The remaining chests will be spawned not necessarily in buildings, that’s the stuff like: garbage cans, picnics, leftover cars, leftover luggage and crates.
Thanks to this new mechanic, there is less items on the map, and since chest code is far more optimized that the rest of game’s code, there might be a slight increase in performance. There is also one important advantage: since some chests can spawn up to 6 items at once – due to dilapidation system – the player might get a lot more items in the first half of the run, and at the same time, keep the low amount of spawned items in the latter half. This makes the beginning of each run easier, while not affecting the difficulty of the further rounds that much.
They also look way more nice and fitting in the new buildings. Speaking of…
I plan on expanding the map generation system, by adding new world models, new biomes, and new options in regards to biome customization. Due to the time and energy required for major world changes, those will be reserved for the next update after the 1.4 one.
I did however, work a bit on some smaller world changes, and I think they are worth mentioning here.
2.1 New models
While the visuals of maps haven’t changed that much since the last devlog, I am currently adding new world models, to make maps look less repetitive. This is mainly for the building models, and models surrounding buildings (like fences). Previously, there were only 6 buildings (2 houses, 1 ruined house, 1 mansion, 1 apartment, and 1 log cabin), and 4 decorations (wooden fence, propane barrel, telephone pole, and a small shed).
I now plan to multiply the variety of these models by at least a few times. The current progress looks as follows:
So yeah… adding all of them will take some time. Tho the amounts might change; certain categories will have less models, if the lower amount will be satisfactory. At the time of writing this log, the implemented buildings look something like this:
Pretty neat, aren’t they? A sad thing, is that the 3D modeling of the objects takes a lot of time (about one building per day), and so not all of them will be available before the tests. There’s also a possibility, that not all of them will be implemented for the actual update – but they already look way better than the old ones.
Oh, and they are partially destructible:
2.2 Reworked map generator
I did also rework world generator code moderately. The changes affect only the core mechanics and systems of the generator, and so I won’t go into the details, since very few will understand them. I can however, list potential pros of the new system:
2.3 Reworked fjords
The above might be a bit hard to understand, thus I’ll use the newly reworked Fjords biome, to showcase the changes in practice. Previously, the aforementioned fjords had a fixed height, looked the same – and in general – were boring.
With the height and rotation differentiation, the new fjords look as follows:
Notice there are no gaps between them? One could think, they can block the exits. Fortunately with tile banks, we can separate fjords into a different bank, whose region will not collide with map border. It looks something like this:
I also plan to rework the Sea and Desert biomes, as similarly to Fjords biome, they are rather boring and annoying. With the new generator, I might make them slightly better, tho I’ll keep more drastic changes and improvements for future (after the 1.4 update).
2.4 New atmospheres
Over the past 1.5 years, I’ve learned a lot of new stuff, and so I’ve used this knowledge to streamline some parts of code, into separate classes and ScriptableObjects. That has made creation and modification of certain parts easier – the new AtmosphereConfig for example, allows for easier implementation of new ambient colors for individual biomes.
You can see below, the new atmospheres for biomes (day > dusk > night, the three above are in the clear weather, the bottom ones are in the cloudy weather):
(Regular atmosphere)
(Overcast)
(Swamp overcast)
(Cold atmosphere)
(Desert atmosphere)
Additionally, atmospheres can have different rendering radii, increasing or decreasing visibility according to biome’s needs.
2.5 Improved minimap
Both Information tab’s map and minimap used to work the same way: there were a few loops that checked for object positions (mobs, items, exits and monuments), then created new sprites within the maps’ area, and removed all of the previous sprites.
This has two issues: too many “Find“ command calls (cause the objects references weren’t cached), as well as too many GameObject.Instantiate() and GameObject.Destroy() function calls. The latter especially, was causing heavy lag spikes.
So I’ve decided to replace the previous system, with the more popular and efficient solution: using a separate camera for minimap. Sounds weird, but it works way better. Also – due to it’s improved performance – it has allowed for the following additions:
2.6 New radioactive zones
Another important element of the world generation, that has been reworked, is radioactivity. Previously, each radioactive zone was intertwined with corresponding map tile. That caused two problems: a highly radiated map could’ve been unfairly impossible to navigate without protection, and certain types of parts had a tendency to be more radioactive than others (like, forest cabins and mountain mansions were always radioactive).
The new zones are now fully autonomous, and can be placed anywhere, and be of any size.
Now – instead of being predictable and omnipresent annoyance – the radioactivity behaves as I initially intended: it simply cuts access to completely random spots on the map.
It even can create interesting scenarios, where – for example – a half of building (including the entrance) may be within a heavily radioactive zone, thus forcing player to break-in from behind the building (via player’s buildings, or destructible building parts).
A thing that some of you might find extremely delightful, is that the Casual mode – announced way back in 2021 – has been fully implemented, and works just fine.
For those who don’t want to rummage through the old posts, Casual mode is essentially the same as Classic mode, but with the following changes:
x is the amount of levels, after which dilapidation in Classic mode becomes 100, and does not increase
From the play tests I’ve managed to have, this mode is not only simpler (in regards to mechanics), but also easier. A bit too easy perhaps – which was not the intention – but I’ll leave it as is; consider it a sort of sandbox mode. I will however, reduce the experience points gained during Casual runs, to compensate the inferior difficulty of the mode.
Besides chests, a two new types of interactables were added.
4.1 Ammo crates
Ammo crates are mainly a part of the Horde mode. When the universal ammo is low, an ammo crate will be spawned somewhere on the map. It has a certain amount of ammo, and once all of it has been collected, the crate disappears.
Ammo crates can also be found in Classic and Casual modes, although they are spawned at the beginning of a round. In Classic mode – instead of universal ammo – ammo items will spawned, either random ones, or the ones for currently carried guns.
4.2 Funny barrels
When a barrel is spawned, it has a 1 in 10 chance of becoming a “Funny barrel”. Each funny barrel has only 20 hit points (like rusty barrel), and drops 3 to 5 random items (like red barrel). Chance of them spawning, hit points, types, and loot, are not affected by level’s deterioration, and they can be distinguished from regular barrels by their white label.
What makes barrels’ funny, is that for every 1 lost hit point, they have a 1 in 20 chance of doing something… funny:
The idea is, these barrels can be easily destroyed, for easy loot. But if you destroy them manually, or with melee weapons, there’s a chance you might get hurt in the process.
During the last semester of my bachelor program, I had programming classes, where I actually managed to learn something useful. To be more precise, we were taught a few gamedev specific lessons, one of them being the proper use of Unity’s NavMesh system. Equipped with the knowledge – and with some hefty code rewriting – I’ve implemented NavMesh system into the game.
TL;DR: Pathfinding has been implemented into the game
Unfortunately, I didn’t bother recording it in action, and it might be hard to explain through images. I’ll put it like this: the NPCs still behave the same, but instead of going in a straight line towards their point of interest, they will find an optimized path towards it, and will avoid all obstacles in their way. At first, it might not seem like much, until we take a look at the following outcomes:
There still are few artifacts which need patching, but there are also two problems, which might not be fixed as easily:
The issues above might perhaps get resolved, if I’ll cut the singular NavMesh surface into smaller chunks. But for now, the one we have works just fine (even on my low-mid tier laptop).
Since the update 1.3, 41 new items have been added so far. Not much, until we take into consideration the fact, that those are 41 out of 91 planned new items. However, it’s not the amount that we should focus on, but rather the actual content!
6.1 Buildings
In the previous devlog, I’ve mentioned the new building system. It has been fully implemented, and there are already 4/10 new building items!
One of them being campfire. It is a very powerful construction, which casts a small light around it – but most importantly – it also generates heat! Obviously, heat will decrease your coldness and wetness debuffs, but it can also be used during crafting.
Certain items will require fire besides the resources, in order for them to be crafted.
There are also two walls, which can be used for a makeshift shelter, or as bridges to areas which are harder to access. Both work the same way, albeit metal ones are more durable.
The last (so far) construction, is barbed wire. It’s a trap, that will stop, hurt, and cause bleeding to anyone who walks into it, both players and mobs.
6.2 New weapons
5/10 melee weapons, and 3/15 firearms have been implemented. It is kind of hard to implement new weapons, as there is already a lot of them, and I don’t necessarily want to create duplicates with slight alterations. I’ve decided to make the new weapons mechanically unique, and so for example:
Aside from the firearms and melee weapons, I’m also planning to add 5 gun attachments, and 5 weapons of miscellaneous category.
I also am, quite fond of how the new black powder guns turned out like:
As you can see, the 7-barreled Nock gun is a funny weapon.
6.3 New food items
Much like with the new weapons, I also tried to make the new food items, a tad bit mechanically more unique. Aside from regular items like carrot, or fish fillet, there are some more unique items:
6.4 New crafting recipes and materials
Five new crafting materials were added, two of which are empty bottle, and empty can. Those two materials can at random be acquired after consuming items, that are stored either in a can or a plastic bottle. Both of these items, can be crafted into pieces of metal or plastic, when the player is near a campfire.
A perhaps more interesting addition, might be the new 20 crafting recipes that were added:
6.5 New utility items, and the rest
I’m not gonna explain the new utility items here, since this category of items has the most unique mechanics of all the categories.
I will add this though: the text file with items to add is located in the source files of the game. And so, you can take a look at it on the repository site.
So, here are some other news, that might not have been as big as the others, or I didn’t want to put in a separate point.
7.1 JClass
Here is my another software engineering marvel. A way back when, in the second devlog, I’ve talked about a system that I’ve named “SemiClasses”. In short, those are string variables, that have other variables encoded in them. For example, a string in an inventory “id14;va50;rep;”, has three variables:
The idea behind it’s functionality was great (because it was essentially an in-house JSON), but the execution… Here’s how a simple GetSemiClass function looks like:
Sorry for any brain hemorrhages this code might have caused
For those who don’t know much about programming, anytime any SemiClass function is called:
Aside from a lot of loop steps and if statements, the returned data is in a form of string value. If we want to use the returned value in other forms (int, double, float), it has to be parsed, which requires a lot of computing power. And don’t get me even started, on how the SetSemiClass function works (it has it’s own, ingenious solutions).
In all fairness, if the target strings aren’t too long, and the queries are used as rarely as possible, this system isn’t that bad. The recent tests have shown though, that with more SemiClasses in use at one time, the optimization quickly plummets down to an unacceptable levels.
This has forced me, to come up with a better, more kosher solution: JClasses:
The idea behind JClasses is the same – it’s an object, containing a list of objects, which are made of two components: a key, and a value. This time however – instead of being stored in a string – they are based of the JClass class, while the objects in the list are based of the JEntry class (or the classes inheriting from it).
The JEntries themselves are made of two components:
As of writing this log, the system hasn’t been fully implemented yet (as there are a lot of SemiClass uses in the code). But once that’s done, the difference in performance between the new and old system will be like day and night!
Still, perhaps it isn’t the best possible system one could come up with in this situation… but it works, smoothly!
7.2 New phantom mutants
The look of phantom mutants has changed; those are the invisible ones. Previously, they would simply leave a blue mist behind them, but that still made them a bit to hard to spot.
Instead of leaving this blue mist, now they are translucent and glowing, with their visibility changing depending on their distance to players.
7.3 Tweaks’n’stuff
There were a lot of core tweaks, code improvements, and bug fixes! Don’t wanna bother explaining this.
Well, maybe the only thing worth mentioning here, is that I’ve added midair control. After leaving the ground (by either jumping, falling off of something, or getting blasted into air), player’s velocity is still inherited. But once any movement input is to be detected, the velocity will be redirected to the movement direction, albeit with huge inertia.
This addition will help players jump over small obstacles, adjust the falling destination, or even jumping through windows.
There’s not much more to add here; after the small hiatus, the development is once again going slowly but steadily. Although, my college work is once again starting to pick up the pace, so we’re yet to see how it affects the process.
For now, that’s all, the next post should appear somewhere before Christmas.
Thank you for reading, I’ll come back in a month… with the first public playable test of the new content!