Image credit: ProbablyNot

23.10-12: 2023 4th Quarter Devblog

Wednesday, January 10, 2024
Written by: CosmicCoincidence


Download - Changelog

"Why don't you trust me? I'm just trying to help you."

-- Malf AI

Q4 Recap

This quarter has been exceptionally productive for us. A LARGE percentage of that productivity can be credited to Nath, who has rightfully earned the "Employee of the Month" status again (read through the blog and you'll see why). And of course, none of the productivity would be possible without our loyal and selfless reviewers; the big ones being Nath, IAmTeapot, & John.

This quarter also marked the moment in time when we finally converted our website to something easier to maintain for Windows users. Thanks to Alainx277, the website is now based on Zola instead of Jekyll/Ruby!

Apologies in advance for the videos in this blog, they had adequate resolutions before upload but YouTube apparently didn't get the memo. So, most of them are only displaying in 480p.

Basic Health Expansion

You may remember from our previous blog that Nath implemented a rudimentary health system. Well, this quarter he expanded on the system by adding oxygen damage and the basic components for its functionality.

Nath added 2 organs, lungs and heart. The lungs breathe in oxygen from the environment (atmos not implemented currently), the oxygen is then distributed throughout the body parts which themselves can now contain substances within (such as oxygen/blood). Oxygen damage is inflicted when this process is interrupted and the character is not receiving enough of it.

Not directly related to health, but, Nath also improved the modularity of the human prefab and body parts making it easier and more efficient to make changes to them.

Simple Crafting

Nath started building the crafting system this quarter. So far he has implemented basic item replacement crafting, based on our simple crafting design.

The system uses recipes. A recipe consists of an interaction (like using a tool), a target (where to apply the interaction), and a list of items (including quantity) required. A crafting interaction only works when all 3 conditions are met appropriately.

Required items are currently only considered available for crafting when they are within close proximity to the player character (this will be expanded to the character's inventory in the future). Required items are consumed during the crafting interaction, tools are not.

Currently we do not have crafting recipes widely implemented, just a couple of test recipes for now.

Basic Electricity

We now have the foundation of the electricity system, thanks to Nath! Currently, it includes station batteries (SMES), electrical cables, an infinite energy generator, and lights which will turn on/off depending on the power availability.

The SMES can be turned on/off, it can intake power, store it, and output it. All of these are represented by lights on the machine (currently the world lighting is not set up so the lights on the machine are difficult to see). SMES can be stacked together on a circuit.

Electrical cables are taking the place of our wires for now, due to our wires require a more complex connection script. Cables connect electrical devices, creating a circuit.

The infinite energy generator is also a placeholder for something more complex later on of course, but for now, it serves the purpose of being the producer of electricity.

Lights are consumers of electricity. If the available electricity for the light dips below its required threshold, the light seizes activity. If there is more electricty consumption by lights than there is electricity being provided by producers on a circuit, then the lights will begin to blink on/off as the electricity becomes available to it. This applies to other electricity consumers (most machines) as well.

Tilemap Improvements

Several improvements to the tilemap system were made recently. First, Nath refactored the tilemap menu script due to the size and rate at which it was growing. He separated the script into 5 smaller scripts based on its components. This change makes it easier to manage and document the different tilemap components.

Next, Nath added the ability for multiple tile objects to exist on an individual tilemap layer. Currently, he implemented this for wallmounts. Wall mounts are objects mounted to walls (signs, fire alarms, lights, etc..). Now, the wall mount layers can have up to four objects attached, one for each cardinal direction, given that there is no wall connection in that direction.

Nath also implemented an optional limit for tile-object rotation based on object. By default, tile objects can be rotated to any of the 4 cardinal directions, but for some symmetrical objects, like walls, there is no need to rotate. There are other examples of this as well.

Additionally, IAmTeapot added functionality for faster tilemap (map) construction. Drag the object to make a line of tile objects. Use Alt + Drag to make a square of tile objects. These new functions also work in tandem with our old function of using Shift to replace tile objects.

Finally, Nath added the ability to save, load, and name maps. He also added the ability to switch between maps during runtime. Switching maps pre-runtime can be easily added later.

Connectable Improvements

Nath refactored the connectables scripts, breaking apart the single massive script into smaller, simpler, and easier to maintain scripts. In the process, several small bugs were fixed as well.

Nath, the magician, also managed to write the connection script for our directional connectables! Directional connectables are a complex type of connectable that only connects in directions based on the objects' rotation. Most other types connect to any adjacent tile regardless of rotation.

Return of Audio

Nath reimplemented the audio system originally added by Eiko a couple of years ago. This includes interaction sounds, collision sounds, ambient sounds, & music players. He also added networking syncing for noises which was not implemented previously.

Return of the Ragdoll

IAmTeapot re-implemented ragdoll. The ragdoll component switches between four stages; Walking, ragdoll, BonesReset, & StandingUp. During BonesReset bones interpolate from the latest ragdoll positions to the position first frame of animation. During StandingUp the ragdoll component plays a stand-up animation.

Silly test of activating the ragdoll with music.
Testing ragdoll networking across host and client.

Return of Examination

You may remember our detailed examine system from a couple of years ago, implemented by Ryan. Well Ryan returned (with help from Nath) to re-implement this feature now that we are past our project rework.

The system has also received a few improvements. The old implementation used a raycast to assign and store a color value. It would periodically take a snapshot of the screen using the color shader, wait for a callback to receive the color under the cursor and then displays the object's examination data. This caused a slight delay by a few frames for the data to appear. The new system allocates colors to selectables upon creation and has continuous selectable rendering, preventing any delay. The render itself has also received performance improvements.

More Tests

Initially started by Ryan but then continued by Nath, play-mode tests are now implemented. Play-mode tests test game systems during runtime conditions. Individual tests need to be written for each thing we plan to test, but the system functions. The system can reliably reproduce a specific fault under a variety of conditions, such as different server/host/client arrangements. This allows contributors attempting to resolve those faults to more clearly understand the problem.

Edit-mode tests have now been restructured as well, so now they are more clear in what they are testing.

Reworked Asset Data

John reworked the asset data system to not rely on enums anymore but instead a DatabaseAsset which uses databases of different assets to help organize and reference them. The new system is more efficient, easier to use, and should be more long-term reliable.






gouravmpk (new contributor)

jckling (new contributor)


Z4ph0d42 (new contributor) made a few wizard wands; fireball, door creation, & death.

DAVIbr942 (new contributor) made a couple of guns from Colonial Marines; M41A pulse rifle & M56 smart gun.

Haughty Lopes (new contributor) decided that the current feet were not very feet-like and made some extra round feet for the human. They also adjusted some of the common footwear to fit with the new feet.

CosmicCoincidence decided to spend some time modeling again. His recent contributions include chess and checker boards, airlock floor tiles, tank-transfer-valve, Newton's cradle, plasma globe, Rubik's cube, & toilet paper.

John also decided to return to his modeling roots and whipped together this great generator!


ProbablyNot never disappoints when he is tasked with the blog art!

CosmicCoincidence also made a wallpaper recently.


Don't forget to come join our Discord to chat with us or to simply follow development more closely.