Stormworks: Build and Rescue - Deltars


Dear Stormworkers,

This week we begin testing 5x scale modular engine parts, new power and fuel modular engine balance, and AI boats in Stormworks (available now on the experimental branch of the game).

As discussed a couple of weeks ago, we have plenty of plans for the modular engines, and this week we are adding the 5x scale parts. These parts extend the 1x and 3x scale parts already on experimental.

The 5x scale parts include a piston, crankshaft, clutch, power manifold, and 5x to 3x adapter. These new parts allow players to create much larger, more powerful ship engines.



Along with these new parts, we have also been talking with and carefully listening to the experimental community, and have rebalanced modular engine fuel consumption and power production to make modular engines much more comparable with the non-modular engine performance.

Fuel consumption has been lowered and power production has been increased. This makes modular engines much more practical and effective to use. While modular engines are harder to design and use than their non-modular counterparts, the intention is that they can have prove very versatile and have a slight advantage in performance.

We have also begun work on AI boats which we plan to be a future minor update. This feature is being shared on experimental branch as we develop it. This feature involves various boats and ships spawning across the ocean, and navigating around with AI drivers. We are developing this feature in the new LUA framework and are having great fun building it up.



Boats and ships will travel through the world, and persistently move, even when the player is far away. This means that they can appear on the horizon and pass you by, before continuing on their journey as they vanish on the opposite horizon.

This is part of our plan to create a more dynamic, interesting world for players to explore. These new AI boats have been carefully designed to have simpler physics.

A full list of changes is available in the #experimental-changelog channel in the Official Stormworks Discord.

We are having a great time adding these new features, and hope you have as much fun playing with them. We look forward to hearing your thoughts and feedback!

Much love <3,

The Stormworks Developers
Stormworks: Build and Rescue - Deltars


Dear Stormworkers,

This week we are releasing a series of new and updated LUA functions that we have been developing in collaboration with players on the experimental branch!

With high demand, we have added many new functions for getting info about the world, as well as spawning and removing various objects. Many of these new functions have huge implications for what can be done with the scripting API, and many of these functions serve as a keystone for your projects.

We have been releasing these changes to the experimental branch as we have developed them. Now, with the benefit of player feedback, we are releasing them as a pack of functions in a minor update.

See the technical data below for a full list of changes to the API. This information is also reflected in the in-game API reference.



Meanwhile, we continue to work hard on the new modular engines and look forward to sharing the new features discussed last week. These new features will be released on experimental branch as we develop them, to give all players the chance to provide feedback.

We also have many new minor updates on the way, many of which use these new LUA functions!

We look forward to seeing what players build with the new API functions, as well as seeing other players complete their projects now the functions they requested are available.



As always, we look forward to your thoughts and feedback!

Much love <3,

The Stormworks Developers

v1.0.21

Full API Changes
=================

object_id, is_success = server.spawnFire(matrix, size, magnitude, is_lit, is_initialized, is_explosive, parent_vehicle_id, explosion_magnitude)

server.addMapObject(peer_id, ui_id, POSITION_TYPE, MARKER_TYPE, x, y, z, parent_local_x, parent_local_y, parent_local_z, vehicle_id, object_id, label, vehicle_parent_id, radius, hover_label)

server.addMapLabel(peer_id, ui_id, LABEL_TYPE, name, x, y, z))

PLAYER_LIST = server.getPlayers()
PLAYER_LIST |
{ [peer_index] = { ["id"] = peer_id, ["name"] = name, ["admin"] = is_admin, ["auth"] = is_auth, ["steam_id"] = steam_id }}

is_on = server.getVehicleButton(vehicle_id, button_name)

server.setVehicleSeat(vehicle_id, seat_name, axis_w, axis_d, axis_up, axis_right, button1, button2, button3, button4, button5, button6)

server.teleportPlayer(peer_id, matrix) is_success = server.setPlayerPos(peer_id, matrix)

server.teleportVehicle(matrix, vehicle_id) is_success = server.setVehiclePos(vehicle_id, matrix)

is_success = server.setObjectPos(object_id)

EQUIPMENT_ID, is_success= server.getCharacterItem(object_id, SLOT_NUMBER)

name, is_success = server.getPlayerName(peer_id)
matrix, is_success = server.getPlayerPos(peer_id)
x, y, z , is_success = server.getPlayerLookDirection(peer_id)
object_id, is_success = server.spawnObject(matrix, OBJECT_TYPE)
object_id , is_success = server.spawnCharacter(matrix, (OUTFIT_TYPE))
object_id, is_success = server.spawnAnimal(matrix, ANIMAL_TYPE, size_multiplier)
matrix, is_success = server.getObjectPos(object_id)
vehicle_id, is_success = server.spawnVehicle(matrix, playlist_index, component_id)
vehicle_id, is_success = server.spawnVehicleSavefile(matrix, save_name)
matrix, is_success = server.getVehiclePos(vehicle_id, voxel_x = 0, voxel_y = 0, voxel_z = 0)
name, is_success = server.getVehicleName(vehicle_id)
matrix, is_success= server.spawnMissionLocation(matrix, playlist_index, location_index)
is_success = server.spawnThisPlaylistMissionLocation(name)
matrix, is_success = server.getOceanTransform(matrix, min_search_range, max_search_range)

server.createPopup(peer_id, ui_id)
server.setPopup(peer_id, ui_id, name, is_show, text, x, y, z, is_worldspace, render_distance)
server.setPopupScreen(peer_id, ui_id, name, is_show, text, horizontal_offset, vertical_offset)

object_id, is_success = server.getPlayerCharacterID(peer_id)

The following functions were reworked to be more general for player and non-player characters, this functions gives you a player's object_id

server.killPlayer(peer_id) server.killCharacter(object_id)

server.reviveCharacter(object_id)

server.setSeated(peer_id, vehicle_id, seat_name) server.setCharacterSeated(object_id, vehicle_id, seat_name)

Can now set non-player characters to be seated

server.despawnCharacter(object_id, is_instant)
server.despawnMissionObject(object_id, is_instant)

These functions performed the exact same task as server.despawnObject(object_id, is_instant)

hp, matrix, is_incapacitated, is_dead, is_interactable = server.getCharacterData(object_id)
Character position can be obtained with server.getObjectPos(object_id)

Mission objects have been renamed to components to avoid confusion with game objects

LOCATION_DATA, is_success = server.getLocationData(playlist_index, location_index)
LOCATION_DATA |
{ ["name"] = name, ["tile"] = tile_filename, ["env_spawn_count"] = spawn_count, ["env_mod"] = is_env_mod, ["object_count"] = object_count ["component_count"] = component_count })");

COMPONENT_DATA, is_success = server.getLocationComponentData(playlist_index, location_index, *component_index*)
COMPONENT_DATA |
{ ["name"] = name, ["display_name"] = display_name, ["type"] = TYPE_STRING, ["id"] = component_id, ["dynamic_object_type"] = OBJECT_TYPE, ["tags"] = { = tag }, ["transform"] = matrix, ["character_outfit_type"] = OUTFIT_TYPE }

OBJECT = server.spawnMissionObject(matrix, playlist_index, location_index, object_index)
COMPONENT, is_success = server.spawnMissionComponent(matrix, playlist_index, location_index, component_index)
COMPONENT |
{ ["name"] = name, ["display_name"] = display_name, ["type"] = TYPE_STRING, ["x"] = x, ["y"] = y, ["z"] = z, ["transform"] = matrix, ["id"] = object_id/vehicle_id}

function onSpawnMissionObject(object_id/vehicle_id, name, TYPE_STRING, playlist_index)
function onSpawnMissionComponent(object_id/vehicle_id, component_name, TYPE_STRING, playlist_index)

function onVehicleSpawn(vehicle_id, peer_id, x, y, z, cost)
Cost is currently only calculated for player spawned vehicles

function onChatMessage(peer_id, sender_name, message)

is_success = server.despawnObject(object_id, is_instant)
is_success = server.despawnVehicle(vehicle_id, is_instant)

playlist_index, is_success = server.getPlaylistIndexByName(name)
location_index, is_success = server.getLocationIndexByName(playlist_index, name)
path, is_success = server.getPlaylistPath(playlist_name, is_rom)

server.onCharacterSit(object_id, vehicle_id, seat_name)

Quick info for updating old scripts
===================================

Removed Functions:
despawnCharacter did the same thing as despawnObject
despawnMissionObject did the same thing as despawnObject

Renamed Functions:
-teleportPlayer(peer_id, matrix) -> setPlayerPos(peer_id, matrix)
-teleportVehicle(matrix, vehicle_id) -> setVehiclePos(vehicle_id, matrix)
Please note the teleportVehicle arguments are swapped to be the same as other functions
-onSpawnMissionObject -> onSpawnMissionComponent
-spawnMissionObject -> spawnMissionComponent
-setSeated(peer_id, vehicle_id, seat_name) -> setCharacterSeated(object_id, vehicle_id, seat_name)
As seen above setCharacterSeated (and other character based functions) now use an object_id. To get a player's object id a new function has been added: getPlayerCharacterID(peer_id)

Functions that now return an is_success value will requre an extra set of brackets if used as arguemnts as lua will attempt to pass all return values unless the function is evaluated
old `local x, y, z = matrix.position(server.getPlayerPos(player_object.id))`
new `local x, y, z = matrix.position((server.getPlayerPos(player_object.id)))`

Rework - Cargo container design rework (Toggle buttons for connectors)
Rework - Added voice audio volume boost
Rework - Slightly increased player ground collider radius to aid getting stuck in small gaps
Rework - Added key type support for lua data saving (Now supports string(default) and unsigned)

Fix - CTD when returning a vehicle on fire via the map
Fix - Dedicated server ?save always saving to autosave
Fix - Vehicle editor currency display not apperaing after toggling infinite money
Fix - Playlist Lua callbacks errors are now cleared (Callbacks are not blocked after they error)
Fix - Script duplication when reloading scripts
Fix - onPlayerDie event resending when dropping a dead body
Fix - Client character objects not updating their internal peer_id when reconnecting to a server (Wrong peer_id Lua bug)
Fix - Several crashes from playlist Lua
Fix - Missing notification for loot crates
Fix - CTD with out of range outfit for spawnCharacter
Fix - CTD with out of range item for setCharacterItem
Fix - onPlayerSit now only triggers for player characters
Fix - Unable to place blocks on certain sides of doors
Fix - spawnFire() rejecting correct number of arguments
Fix - CTD on Lua failing to find vehicle data
Fix - Dev Train Junction MC showing in inventory
Stormworks: Build and Rescue - Deltars


Dear Stormworkers,

This week we have been hard at work on bug fixes and improvements, many of which will soon arrive on experimental branch.

We are also announcing some of the new concept we are working on with modular engines!

5 Size Parts

We are already testing 1 size and 3 size modular engine parts, but we are also considering adding a 5 size modular engine set with crank shafts and pistons occupying 5x5x5 voxels. These parts would be significantly heavier and more powerful than the smaller engine parts, with a weight to power ratio that is slightly more efficient than the smaller parts.

Flywheels

We are considering adding flywheels to engines. Flywheels would affect the engines overall weight and momentum, allowing it to store more energy, for high-torque applications. These flywheel parts would fit to the crankshaft.



Turbo Chargers

With the new combustion mechanics, air pressure is an important factor in generating power from engines. We are considering adding a turbo that can convert pressure from one line to another. For example, players could run their exhaust through a turbo to increase the pressure and flow of the air intake.

Air Scoops

New fluid parts that consider air flow speed can generate pressure at the point of intake. These parts could be like fluid ports, except they generate higher pressure when facing into wind or the direction of motion.

Heat Exchangers

Many players have been asking for heat exchangers and the concept of distilled water versus sea water. We are considering splitting the 'water' fluid type into 'sea water' and 'distilled water'. Sea water would damage engines over time, meaning the use of heat exchangers would be essential to circulate clean water through a ship engine that was using sea water cooling.



We can't wait to share new modular engine features with you, and will continue to share our progress on the experimental branch as we develop new features and concepts.

Thanks to the many players who have given us feedback on the new modular engines so far.

Much love <3,

The Stormworks Developers
Stormworks: Build and Rescue - Deltars


Dear Stormworkers,

This week we continue to develop the career and missions in Stormworks with new towing missions!

New missions will appear where the player needs to tow ships, trucks, and other vehicles that have experienced mechanical failures. These are very different mission types that provide a very different logistical challenge.



These new mission types are less frequent but combine with the rescue missions and transport missions to extend the kind of challenges and gameplay you experience in career mode.

We have more plans for career mode, but please keep sharing your ideas and suggestions with us as we continue to develop this part of the game.

Much of this new update has already been available and tested on the experimental branch.



Today we are also launching stoichiometrics for the modular engines on the experimental branch. This new concept is a rework of the combustion mechanics and algorithms within engines. Now, air to fuel ratio, RPM, engine temperature, and compression factor all influence the output of modular engines.

The air fuel manifold is now two separate components so that flow of fuel and air can be controlled independently.

Cylinders / pistons now show a new "stoichiometric" value on their tooltip. This is related to the air to fuel ratio and engine temperature, and is a value between -1 and 1. Within these values, the air to fuel ratio is within it's combustion range and the fuel will ignite. Outside of this range the engine is either too lean (-1), or flooded and too rich to fire (1). Cold engines require a richer air to fuel mix and will fire only within a narrower range of air to fuel ratio.

Cylinders / pistons also display a new "efficiency" value, based on the stoichiometric value and the RPM. Slightly lean fuel-air mix will produce higher fuel efficiency, while slightly rich will produce maximum power output. At higher RPM, the fuel and air will have less opportunity to mix and will decrease the power efficiency.

These new mechanics mean that designing modular engines is much more involved, and creating an engine that works well is a greater challenge. At the same time, we are trying to make the mechanics more transparent with these new tooltip values, and improve the fuel efficiency algorithm. The new system is designed to be more realistic, but still gamified and balanced for compatibility with other Stormworks components.

Modular engines continue to be subject to much change, so expect more changes, improvements and rebalances in response to your feedback.

We look forward to your thoughts and feedback on the new modular engine mechanics!

As always, we are also working very hard fixing bugs and making other improvements, so please see below for the full change log.

Much love <3,

The Stormworks Developers

v1.0.20

Feature - New Tow / Transport Vehicle missions

Experimental Feature - New Modular Engine Air/Fuel Stoichiometry
(Check out the experimental branch through Steam!)

Rework - Added network event to sync fully extinguished vehicle fires
Rework - Locating a rescue mission grants 30 mins more mission time
Rework - Decreased radius of locate zone objective so it should always be in view when completed
Rework - Mission UI is rebuilt when the map is opened
Rework - Rewards for deliver objectives now scale with distance
Rework - Doubled playlist script max characters

Fix - Remote Control not working fully for MP clients
Fix - onToggleMap callback not getting called
Fix - CTD when teleporting vehicle with NPC to workbench
Fix - CTD when rescuing character to the edge of a Hospital zone
Fix - Cargo script spawn count error with odd number of spawn locations
Fix - ?save not saving in certain situations
Fix - Playlist Lua getTilePurchased() requiring tile to be loaded
Fix - Screen fade not reversing if revived with <5 seconds left
Fix - Winches not saving correctly (Weird state when reloading them)
Fix - Gimbal Cameras not saving orientation correctly
Fix - CTD from monitor render target
Fix - Internal character peer_id not updating when relogging into a server (Playlist Lua looking for wrong peer_id)
Fix - Camera clipping into emissive player outfits
Fix - Z fighting on emissive player outfits
Fix - Seasonal outfit visual issues
Fix - Seasonal main menu camera clipping into trees

Lua Documentation updates:
Added section listing built in commands
Added section for API general info
Several small fixes
Stormworks: Build and Rescue - Deltars


Dear Stormworkers,

This week we discuss the poll results and start Halloween!

Starting on 24th October, Stormworks celebrates Halloween! As always at this time of year, expect extra character customisation, and spooky decorations at some of the coastguard bases! And if you see glowing red eyes in the water, do not go for a swim!

We have also been releasing new modular engine parts and balance changes on experimental. Check this out and let us know your thoughts if you get the chance! Experimental change logs are posted in the Official Discord Server.

2 weeks ago we ran a features poll on the Official Stormworks Discord. The features were mostly chosen from the most popular and highest voted feature requests on the official bug and feature tracker site (see the buttons in game!).

Your response was overwhelming and completely broke Discord, which could not handle the sheer number of votes / emotes submitted! However, we had our own screenshots from before Discord started to struggle so here are the results to discuss!



One thing is very clear from the results. Players do not all agree with each other, and there are many players who strongly believe in a minority viewpoint. Our job is difficult here because we want to make all players happy, and we obviously cannot immediately do this.

While the poll results isn't necessarily the order in which we will extend the game, and we can't promise any particular feature will become part of the game, we can say that major updates have almost always been features highly voted in an Official Stormworks Discord poll.

We take players feedback very seriously, we consider all players equal, and players come first.

Let's discuss the top voted features!

Nuclear Reactors



Nuclear power? Many submarines and even some ships are powered by nuclear reactors. As developers, we have to get the balance right. These reactors could be large and very heavy, positioning them as a great energy source for the largest vessels. We think they could be modular so that players have the most control over designing their reactors. Due to the level of popularity, and the fact this feature does fit well in the world of Stormworks, we think this is likely to be developed.

Weapons



Wow. Weapons have been included in polls in the past, but have never been so popular. Unfortunately, they have also proven to be very controversial, with many players believing they will damage the search and rescue theme.

Over the last few years, players have uploaded thousands of very detailed military vehicles, with imitation weapons. These vehicles look amazing, and we get that it is kind of disappointing that the weapons don't function, when so much in the world of Stormworks is so mechanical and so functional.

We have to listen to players, and most players obviously really want weapons. We cannot forget that Stormworks is an SAR game and we must allow all players to continue to play Stormworks as the SAR game they bought into if they wish.

We want to honour the majority of players who voted this feature up, but also respect the many players who are protective of Stormworks as a non-combat SAR game. For these reasons, weapons will come to Stormworks, but only as an optional expansion or DLC.

Weapons will include warheads, naval cannons, and some smaller vehicle mounted guns.

Sails

Sails have been highly voted in polls a couple of times now. We think they would be awesome and a great addition. Balancing wind power, and getting sail boats to function isn't something we set out to do, and this kind of mechanic is a game in itself. It is difficult to integrate into the existing rules of the game. We want to honour the many many players who have asked for this, but we are still discussing how the editing and forces would work.

Natural Disasters

This is a great concept, a great fit for the game, and already has some detailed implementation suggestions on the official features website. Volcanoes? Meteors? What else could this involve? Let us know! Is this one update or multiple updates? We don't know yet, but we do know that it is highly voted.

AI Ships, Planes, Helicopters



The world of Stormworks is a lonely one. Could ships sail by, or aircraft pass above? We would love to add more to the world, and we are discussing how we can do this.

Cooperative Vehicle Building



Many players do play Stormworks primarily as a building game, spending the majority of time designing in the editor. On large creations, it would be great to collaborate in real time, or even just to help a friend who is new to the game. We think this would be a great addition. At 6th most popular, and being a lot of work to develop, it probably won't be the next thing we work on, but we will not forget the many players who voted for this feature.

Arctic Ice-Breaking

What if the arctic was surrounded by a massive ice shelf? In places the ice could be meters thick, while in others it could be thinning. What if weight and force could break this ice? Ice breaking ships may suddenly become a big part of Stormworks, while players must use caution driving vehicles across the ice. This is a huge feature to add, and will probably not be added before the next poll.

Space

What if the atmosphere in Stormworks had a maximum height, and with the right vehicle and design, you could reach a geostationary distance from the surface? Above the atmosphere, we would have to add the concept of air versus vacuum, space walking suits, zero gravity, satellite radio communication, and more. In a similar way to weapons, this is too far from the core concept of the game to become part of the base package, and could only become part of Stormworks as an optional expansion, and probably requires more votes.

Stormwoofs



OK. This wasn't a top voted item, but many many are players asking us what Stormwoofs is. Stormwoofs is your dog and loyal companion. He can sit, fetch, woof, and help find survivors. Working rescue dogs are highly trained and frequently used in search and rescue operations. He is also a very good boy and needs your votes in the next poll! Can you really say no to that little face?

Thank you again to everyone who contributed to the poll! We are carefully listening to your feedback and will work hard on the next major new features with your guidance!

Don't forget to check out the experimental branch and help with your feedback and thoughts on any in-development content!

Much love <3,

The Stormworks Developers
Stormworks: Build and Rescue - Deltars


Dear Stormworkers,

This week we are releasing some new mission content we are working on - transport missions! Transport workers, inspectors, components, boxes and more in specific one-off missions where your help is required. These missions are similiar to many of the old missions but with one crucial difference - they are procedural!

While this is just one minor update to the missions system, we have more planned. We are really enjoying extending and using the LUA API to create this content, and there is a lot of really cool stuff still to be added.

These new LUA missions will appear in any new game, in the same way as normal missions. They are reasonably rare at the moment but we plan to continue to develop this and other new mission systems as we continue to improve career mode.



Last week we announced the poll on the Official Discord Server... and you broke Discord from voting so much! We have never had so much interest in the new features poll, and Discord simply could not handle the sheer number of emotes / votes. However, we were screenshotting the results periodically and have data from just before Discord started to struggle. The results are EXTREMELY interesting and we will be discussing the results in next weeks announcement!

Thank you to the thousands of you who gave your feedback on the poll. We really appreciate your input and it is very important to us that all Stormworks players get an equal say to influence us on where to next take the game. We really enjoy collaborating with you and are looking forward to continuing on this next chapter of Stormworks.



As always, this weeks update comes with many other fixes and improvements. Please see the full change list below for details.

Much love <3,

The Stormworks Developers

v1.0.18

Fix - removed some character controller changes to fix issue falling through floor on death

v1.0.19

Feature - New transport missions

Rework - Absorbed server.whisper into server.announce
server.announce new optional peer_id parameter
Rework - UI improvements

Fix - Players falling through the floor on respawn
Fix - Winch audio position
Fix - Currency not synced after auto refuel
Fix - Lua help documentation code blocks getting cut off
Fix - Script callbacks returning host player peer_id instead of -1 when executed by a script
Fix - Seat helmet rendering not smoothed
Fix - Hat override not ending when teleporting from seats
Fix - Cargo playlist issues after saving and loading
Fix - Mission "Find" objective now follows the main vehicle instead of staying at the spawn position
Fix - Mission component tags box should be multi-line
Fix - Mission map UI desync on player join
Fix - Map custom lines now render under other icons
Stormworks: Build and Rescue - Deltars


Dear Stormworkers,

We need to know, what do you want next in Stormworks?

Head over to the Official Stormworks Discord Server #announcements channel, and let us know what features you would like to next in Stormworks! Simply click on the associated emotes to vote for that feature.

It's really important to us that we keep in touch with players. Stormworks is a unique game with a very unique, creative community. Many of you have hundreds or even thousands of hours within the game, and know a lot of what Stormworks is about. We want to shape the next steps for the game with you, and understand the direction that you think we should go in.



We are currently working on the next major update - modular engines! This update is in progress and shared with everyone in the experimental branch of the game.

This week, we are also releasing a bug fixing update with many fixes and improvements to the quality of the game. Please see below for a full list of changes.



Much love <3,

The Stormworks Developers

v1.0.16-17

Fix - Chat CTD
Fix - Toggle button not holding its state when power is cut
Fix - Multiple fluid spawners refunding costs for a shared volume
Fix - CTD on linking helm audio node
Fix - Muffle effect persisting when teleporting from a seat
Fix - Character physics unable to swim through small holes underwater
Fix - Camera transition not smoothed when exiting water
Fix - Active but expired mission vehicles despawning on save/load
Fix - Electric relay being interactable
Fix - Character capsule collision not disabling in seats
Fix - Rain/Snow hitting clouds
Fix - Water Cannons / Hoses consuming fuel
Fix - Character not crouching after jumping while crouch is held
Fix - Invisible ropes for multiplayer clients
Fix - Character ragdolls getting stuck in physics when exiting seats
Fix - Removed internal explosion ignition point parameter from lua createFire and mission editor
Fix - Winch ropes not having the correct number of physics nodes on spawn
Fix - Playlist Lua updates and documentation fixes
-- server.whisper() can now use peer id -1 for all peers
-- api now pushes integers instead of numbers where appropriate
Stormworks: Build and Rescue - Deltars


Dear Stormworkers,

This week we are adding new options for many of the seat components in Stormworks - audio nodes!

Some chairs now have the option to add a pilot helmet or headset. When using the head gear, the seat then has a built in speaker and microphone linked directly to the player in that seat! This is really useful for creating intercom systems and communicating with other players within a vehicle over multiplayer.

But this isn't just a multiplayer feature - using a seat with headgear also reduces and muffles environmental sound, making it much more comfortable to operate powerful vehicles with big engines!

When players use seats with head gear, the helmet or headset appears on the player character while in the seat.



This update has already been tested on experimental branch for a few days, as we change our release procedures to best ensure higher quality releases and more robust updates. We are really excited to be working with the entire community (rather than previously where there was a closed testing group) and be more open with development.

We have also been hard at work continuing to address many issues within the game, all of which have been introduced to the experimental branch as well. See the change notes below for a full list of changes.

Much love <3,

The Stormworks Developers

Patch Notes

v1.0.15

Feature - Seat audio nodes and toggleable headset property

Rework - Removed cargo zone merging
Rework - Scripts are now only ticked when the game is simulating
Rework - Allow dead/incapacitated characters to be placed in beds/stretchers
Rework - Survivors no longer exit seats when vehicles unload
Rework - Water particle extinguish rate now based on distance to fire

Fix - Chatbox covering sound setting sliders
Fix - Laser distance sensor values persisting when toggled off
Fix - Gimbal camera mirrored editor arrows
Fix - Gimbal camera laser rendering flipping in y-axis
Fix - Player charged for auto-refuel when loading a save
Fix - Carried/Seated characters not updating submerged state when NPC damage is enabled
Fix - Player rendering when zoomed in with binoculars
Fix - MP clients falling through floor when teleporting
Fix - MP clients falling through floor when connecting
Fix - MP clients falling through floor when disconnecting
Fix - Buying/selling fuel when auto-refuel is disabled
Fix - Rail junctions not saving their state
Fix - Seat back voxels not being raycastable (Hard to get in seats)
Fix - Button state inverting when cutting power whilst overriding the node
Fix - CTD extinguishing forest fires on DS
Fix - Forest fires not extinguishing correctly by fire extinguisher on DS
Fix - Camera inputs not clearing when toggling photo/noclip mode
Fix - PTT being disabled when scrolling over hotbar radio equipment
Fix - Winch ropes added in vehicle editor snapping to 10m when winch extended/retracted
Fix - Prevent mission fires re-igniting on unload/load
Fix - Active tool staying active when collecting equipment
Fix - Classic career now applies research filters to the vehicle editor hotbar
Fix - Added missing mission location names
Fix - onVehicleDamaged lua callback

onVehicleDamaged(vehicle_id, damage_amount, voxel_x, voxel_y, voxel_z) -- damage amount returns negative if component is repaired
Stormworks: Build and Rescue - Deltars


Dear Stormworkers,

We launched Version 1.0!!! What an incredible week.

Thank you to all the players who gave us feedback and helped shape many of the improvements we have made this week.

Lets look at what we have been up to this week:

Sept 17th: Launched Version 1.0! With the new LUA modding, spreadable fires, first person equipment, missions, tutorial, audio effects, and more.

Sept 20th: Added "Classic Career" mode with research trees, map fog, player icons, and many other settings familiar to the old career mode.

Sept 21st: Added "Test Location" button to the mission editor so that players can easily and quickly spawn their vehicle spawning missions without any scripting.

Using the new mission location spawning is really easy: from in game, press Esc, click Mission Editor. Load up your mission and find the location you wish to spawn and click "Test Location".

Sept 22nd: Normal mode is now emulated by selecting "infinite electric", "infinite fuel", and deselecting "engine overheating". As previously discussed, our intention was never to remove normal mode, but rather integrate it as real time settings into the new Custom Menu.

Sept 23rd: Reworked the new ropes, hoses and cables! These are now twice as long, easier to handle, and generally work better.

These are just the headlines, we have also implemented many many small changes and fixes. Full change notes below!



Version 1.0 is not the final version and development continues as normal. We will soon resume work on the new modular engines and develop them with the community, on the new experimental branch.

In response to much helpful feedback, we also plan to change our release procedures, so that minor fixes and new features are tested more, then released to experimental, before finally being released to the release branch of the game. Only the most critical hot-fixes will be promoted directly to the release branch.



We look forward to hearing all your feedback on the new changes! We have big plans yet for Stormworks and really look forward to working with you on the experimental branch as we begin the next phase of development for Stormworks!

Much love <3,

The Stormworks Developers

Patch Notes

v1.0.1
Feature - Enabled Experimental Branch

v1.0.1a
Feature - Enabled Modular Engine Components

v1.0.2

Feature - New playlist Lua to simplify vehicle spawning scripts
playlist_index = server.getPlaylistIndexByName(name)
playlist_index = server.getPlaylistIndexCurrent()
location_index = server.getLocationIndexByName(playlist_index, name)
server.spawnThisPlaylistMissionLocation(name)

Rework - Made tutorial end more clear
Rework - Balanced mission rewards
Rework - Balanced fluid/fuel costs

Fix - Updated video tutorial playlist link
Fix - Disabled mission debug text in chat
Fix - Updated playlist Lua help tab meta section
Fix - Deprecated simple mode turbine
Fix - Deprecated static block
Fix - Equipment drop dupe bug
Fix - Headless player in wardrobe editor
Fix - New playlist now clears old Lua
Fix - Old (unsupported) saves loading in current game version
Fix - Tutorial active not resetting on new saves
Fix - Charge player for starter boat
Fix - Can no longer sell starter tractor and trailer

v1.0.3

Fix - Broken crouch anim in character editor
Fix - Door jitter in multiplayer
Fix - Detatch survivor from seats/ropes/carried if updated to NPC

v1.0.4

Rework - Updated benchmark scenes
Rework - Updated fluid gantries

Fix - Mission editor workshop upload tags
Fix - server.setGameSetting

v1.0.5

Feature - Classic Career preset
Feature - Re-added research and component unlocking

Rework - Updated playlist Lua
server.setCurrency(money, research)
points = server.getResearchPoints()
server.setGameSetting("unlock_all_components", true)

Fix - Tutorial blocking missions if loaded after tutorial ended
Fix - Missions ending with wrong message when expiring
Fix - Cargo script error when editing an iterated table
Fix - Missions without fire support not spawning fire objective

v1.0.6

Rework - Tutorial now only starts if components are unlocked (Disabled for old career))

v1.0.7

Feature - Added test location button to locations in playlists
Feature - Infinite Electric no longer requires batteries or logic links
Feature - ?reload_scripts now autosaves and fully reloads playlist data including locations
Feature - added isTilePurchased(matrix) lua function

Rework - onCreate playlist callback now passes is_world_create parameter, this makes setting up events at world start easier (eg. set starting cash)

Fix - Lack of warning and component stripping when inf money is on and unlocked components is off
Fix - Multibody child components appearing in the inventory
Fix - Active item failing to disable when picking up items from the ground
Fix - Electric/Fluid connections not severing when disconnecting Cables/Hoses
Fix - Infinite fuel not applying to air/exhaust/coolant
Fix - Career main menu description
Fix - Microprocessor spawning when components not unlocked
Fix - Tutorial always activating
Fix - Component visibility when components locked
Fix - CTD when radar raycasts physics with no user data
Fix - Cargo script error when vehicle ID returns as nil
Fix - Blueprints are now required for microprocessors even when inf money is off
Fix - Tutorial now supports players other than host (Dedicated server fix)
Fix - CTD picking up fire extinguisher on dedicated server
Fix - Tutorial activating when tile is not purchased
Fix - Added fix for tutorial getting stuck in a loop

added ?tutorial command to the script to check if the tutorial is active

v1.0.8

Fix - fixed research reward for missions

v1.0.9

Fix - Multiplayer equipment crashes

v1.0.10

Feature - Added test location button for Env Mods by treating them the same as normal locations

Fix - Mission vehicles not spawning due to how they were saved
Fix - Non-admins being unable to trigger custom commands
Fix - Outdated code in playlist Lua help
Fix - Game settings are now synced after using setGameSetting
Fix - Tutorial script failing to update objectives if saving halfway through
Fix - Set classic career start cash to 15000
Fix - Infinite fuel no longer requires any inputs for engines to work
Fix - Characters not updating follower chains when being set to NPC
Fix - NPC names not saving
Fix - Tooltips appearing in vehicle third person
Fix - Cost labels not showing in custom mode (when toggling infinite money)
Fix - Network event for unlocking all islands on dedicated server
Fix - NPC ladder breadcrumbs not working
Fix - Extended space for names in chat and capped names at 12 chars

v1.0.11

Rework - Increased rope spool speed

Fix - Dedicated server CTD on ?save
Fix - Allow selecting/dropping disabled equipment and added UI icons to show disabled equipment
Fix - Remove defunct UI for detatch rope
Fix - Rotating jet exhaust, laser distance sensor, transponder, and transponder locator no longer use power unless active
Fix - Rope state multiplayer sync
Fix - Do not set tutorial starter boat to despawn
Fix - Turned off chat name clipping, extended chat box
Fix - Gearboxes not working after repairing them
Fix - Equipment boxes mass and values
Fix - Prevent drowning while swimming on the surface in first person
Fix - Lua documentation fixes
Fix - Fluid exhaust voxels and removed buoyancy surfaces
Fix - Jet engines not working when infinite fuel enabled
Fix - Purchase interactables no longer block raycasts

v1.0.12

Fix - CTD caused by fluid exhaust change

v1.0.13

Fix - Ropes causing issues when returning to workbench

v1.0.14

Fix - Mission system sometimes not saving correctly
Fix - Reduced career starting cash to 20000 to match reduced cost of tutorial boat
Fix - Hat not rendering sometimes when in a seat
Stormworks: Build and Rescue - Deltars


Dear Stormworkers,

Version 1.0 is here!

Check out the new trailer.

Remember, Version 1.0 is just the beginning. We have big plans for many minor and major updates as development continues as normal, as well as loads of time put aside for fixing and improving the game.

Experimental branch is live! To access experimental branch and the new modular engines, go to your Steam library, right click on Stormworks, then go to the Betas tab. Here you should be able to select the "experimental" beta.

There is a huge amount in this update. Please see below for the full change log, but lets briefly recap the biggest new features in todays update!



New LUA Game Modding

We have added a whole new type of content creation in Stormworks - game scripting! We have added scripts to the mission editor, and a whole new API for controlling the game from here. We used this to make the new missions, tutorial, and cargo system, but is can also be used for servers, or creating new games within the Stormworks world.

First Person Body, Tools, Equipment

You now have a body when in first person mode, and can use handheld tools and equipment. There is repair tools, medical equipment, tracking and illumination equipment and more!

Spreadable Vehicle Fire

Fire on vehicle now spreads! Fire creeps along surfaces, damages components, and hurts players. Fire can quickly get out of control and is a huge new design consideration when creating Stormworks vehicles. Fire respects doors and is compartmentalised.

New Career and Missions, Tutorial, Logistics

There are new procedural missions, the new tutorial, and a container cargo handling system. There is now a huge amount more to do in the world of Stormworks, and much more to come, with an open API for creating gameplay content.

New Customisation Menu

You now have full control of game settings, real time from within the game. Infinite fuel and electric, teleporting, damage, first person, map visibility and more!

Weather Simulation & Seasons

Weather is now locally simulated, and more extreme. Expect stronger winds, bigger waves, and predictable weather systems and storms.



Thank you to all players who bought, played, discussed, shared on the workshop, suggested features, and reported bugs, for helping us reach this huge milestone! It is a huge privilege that so many of you have chosen to spend so much time playing our game, and it means a lot.

There is so much more to come in the world of Stormworks, and we look forward sharing this journey with you all as we continue to make Stormworks as good as it can be!

Much love <3,

The Stormworks Developers

Patch Notes

v1.0.0


Major Feature - First Person Tools and Features
Major Feature - Playlist Lua Scripts with extensive custom mission and gamemode support
Major Feature - Weather Simulation and Map Overlays with Seasons
Major Feature - Vehicle Fire Spread
Major Feature - Creative Menu is now Custom Menu and has many new customisation options and tools
Major Feature - New Tutorial and Procedural Mission Playlists
Major Feature - New First person experience and animations
Major Feature - Multiplayer Improvements and Optimisation

Major Feature - Experimental Steam Branch
Experimental Feature - Modular Engine Parts

Feature - Manual doors can now have custom names
Feature - Wind no longer affects 'indoor' areas
Feature - Damaging Engine / Electrical components now causes spreadable fires
Feature - Added small visual marker at the center of the location editor
Feature - Mission editor location naming
Feature - Player nameplates light up when speaking
Feature - Audio system overhaul
Feature - Added Video Tutorials button to the menu
Feature - Populated some areas with NPCs

Rework - Removed Basic Mode
Rework - Removed Tech-Tree and Stock
Rework - Career mode now uses a predefined ruleset and is treated as a standalone hardcore mode
(Players looking for a more personalised career experience can now customise Stormworks in 'Custom' mode)
Rework - Creative mode is now part of Custom mode
Rework - Carrying heavy equipment / bodies now slows the player
Rework - Weather can now be more violent at its peak
Rework - Winches now have linear speed
Rework - Removed all old preset mission playlists
Rework - Less important map icons now take up less space
Rework - $30k Starting cash
Rework - Automatic charging and refunding for fuel spawned
Rework - New island generation pattern
Rework - Removed "Loading Vehicles" notification
Rework - Dead bodies can now be picked up
Rework - Updated rope hook mesh
Rework - Doors on islands can now be opened without purchasing the island
Rework - Engine temperature scaling/cooling

Fix - Chat message crash
Fix - Greatly increased speed of inventory in the vehicle editor
Fix - Pivots selling for more than their cost
Fix - Game Date not syncing in mp
Fix - Rain splashes on water surface
Fix - Disabled Mission Editor for mp clients
Fix - Disabled Loading other saves during mp
Fix - Animation when holding Sprint and Walk
Fix - Rain falling through glass
Fix - NPCs not benefiting from outfits
Fix - Infinite jumps when colliding with carried NPCs
Fix - Taking damage on teleport
Fix - Wheel shadows desyncing at speed
Fix - Several situations where controls are sticky
Fix - CTD on despawning subgrid with new wheels
Fix - Characters always try to look North
Fix - Rendering issues with max FOV in compartments that are underwater
Fix - Diving hitbox mismatching the animation
Fix - CTD on game close
Fix - Flame damage boxes on rotating jet nozzles
Fix - Train wheel data tooltips
Fix - Rail nodes remember the track signal state
Fix - NPC detach from ladder stopping following
Fix - Radar now only triggers Radar Detectors when it is the most relevant detected contact
Fix - Glass material on laser detector
Fix - Water cannon fluid connection
Fix - Killing carried NPCs upon fast travel
Fix - Diagonal railing surface issue
Fix - Additive paint selection
Fix - Editor opens load vehicle screen after attempting to spawn an out of budget vehicle
Fix - CTD for players in seats
Fix - Increase "indoor" box on starter island cottage
Fix - Tooltips for seats, rope-hooks, winches, connection gripper, and paintable indicators
Fix - Water cannon actuation
Fix - SR Latch description to match behaviour
Fix - Increased mass of premade fluid tanks
Fix - Gearbox uses default gear ratio when spawned but unpowered
Fix - Recentered 7x7 high grip tyre mesh
Fix - Circuit breaker uses forced color when rendering
Fix - Electric heater breaking completely after 1 damage
Fix - Moved beginner island edit grid down
Fix - Spotlight volumes weak rendering
Fix - Component damage is now capped at 50
Fix - Survivors looping 'play once' animations when carried
Fix - Disappearing ragdolls
Fix - Updated distance sensor descriptions to show correct range
Fix - Variable and on/off fluid valves now require Electric
Fix - Laser beacon rendering when mirrored
Fix - Rotors no longer make sound when folded
Fix - Unpowered lights no longer attempt to render
Fix - CTD if a follower was suddenly unloaded
Fix - Animals are now buoyant inside compartments
Fix - Radar and Sonar now only detect targets above and below sea-level respectfully
Fix - Survivor temperature and oxygen network sync
Fix - Chatbox storing infinite messages (now 128 cap)
Fix - Microprocessor memory register
Fix - Breath bar not recovering while wearing diving equipment
Fix - Rain rendering underwater
Fix - Hide chat in photo mode
Fix - Updated diesel engine descriptions
Fix - Static vehicle draining power by default
Fix - Fixed electric relay default state
Fix - Carried survivors dying when teleporting
Fix - Physics and render issues with props at speed
Fix - Engines now fully cut out when EMP'd
Fix - Camera IR laser
Fix - Accumulating lag when looking at a tooltip
Fix - Adjusted mega-island, arctic-base and mp-island 'indoor' hitboxes

F2 developer debug modes have now been removed

Old mission spawning system support has now been removed
Unchecking all playlists will no longer spawn default missions


First Person Items
============
Binoculars
Cable
Compass
Defibrillator
Fire Extinguisher
First Aid Kit
Flare
Flaregun
Flaregun Ammo
Flashlight
Hose
Night Vision Binoculars
Oxygen Mask
Radio
Radio Signal Locator
Remote Control Unit
Rope
Strobe Light
Strobe Light Infrared
Transponder
Welding Torch
Underwater Welding Torch


New Playlist Lua Script exclusive callbacks and functions
============

g_savedata = {}
The g_savedata table is saved to xml between sessions, you can place variables and tables inside if you want them to persist across sessions.
when loading from file the g_savedata table will overwrite any identical variables declared within the script

peer_id can be passed as -1 to send for all peers


Matrix Functions (4x4)
=================
matrix = matrix.multiply(matrix1, matrix2)
matrix = matrix.invert(matrix)
matrix = matrix.transpose(matrix)
matrix = matrix.identity()
matrix = matrix.rotationX(radians)
matrix = matrix.rotationY(radians)
matrix = matrix.rotationZ(radians)
matrix = matrix.translation(x,y,z)
x,y,z = matrix.position(matrix)
dist = matrix.distance(matrix1, matrix2)

Server Functions
================

server util
===========
server.announce(name, message)
server.whisper(peer_id, message)
server.notify(peer_id, title, message, NOTIFICATION_TYPE)

ui_id = ui.getMapID()
server.removeMapID(peer_id, ui_id)
server.addMapObject(peer_id, ui_id, POSITION_TYPE, MARKER_TYPE, x, y, z, parent_local_x, parent_local_y, parent_local_z, vehicle_id, object_id, label, vehicle_parent_id, redius, hover_label)
server.removeMapObject(peer_id, ui_id)
server.addMapLabel(peer_id, ui_id, LABEL_TYPE, name, x, y, z)
server.removeMapLabel(peer_id, ui_id)
server.addMapLine(peer_id, ui_id, start_matrix, end_matrix, width)
server.removeMapLine(peer_id, ui_id)

server.setPopup(peer_id, ui_id, name, is_show, text, x, y, z, is_worldspace, render_distance)
server.removePopup(peer_id, ui_id)
server.createPopup(peer_id, ui_id)

player
===========
name = server.getPlayerName(peer_id)
PLAYER_LIST = server.getPlayers()
matrix = server.getPlayerPos(peer_id)
server.teleportPlayer(peer_id, matrix)
server.killPlayer(peer_id)
server.setSeated(peer_id, vehicle_id, seat_name)
x,y,z = server.getPlayerLookDirection(peer_id)

vehicle
===========
vehicle_id = server.spawnVehicle(matrix, playlist_index, component_id)
vehicle_id = server.spawnVehicleSavefile(matrix, save_name)
server.despawnVehicle(vehicle_id, is_instant)
matrix = server.getVehiclePos(vehicle_id, voxel_x = 0, voxel_y = 0, voxel_z = 0)
name = server.getVehicleName(vehicle_id)
server.teleportVehicle(matrix, vehicle_id)
server.cleanVehicles()
server.pressVehicleButton(vehicle_id, button_name)
server.getVehicleFireCount(vehicle_id)
server.setVehicleTooltip(vehicle_id, text)
is_simulating = server.getVehicleSimulating(vehicle_id)
server.setVehicleTransponder(vehicle_id, is_active)
server.setVehicleEditable(vehicle_id, is_editable)

mission
===========
path = server.getPlaylistPath(playlist_name, is_rom)
server.spawnObject(matrix, OBJECT_TYPE)
is_found, matrix = server.getObjecPos(object_id)
object_id = server.spawnFire(matrix, size, magnitude, is_lit, is_initialzied, is_explosive, parent_vehicle_id, explosion_point, explosion_magnitude)
server.despawnObject(object_id, is_instant)
object_id = server.spawnCharacter(matrix, (outfit_id))
object_id = server.spawnAnimal(matrix, animal_type, scale)
server.despawnCharacter(object_id, is_instant)
hp, matrix = server.getCharacterData(object_id)
server.setCharacterData(object_id, hp, is_interactable)
server.setCharacterItem(object_id, slot, EQUIPMENT_ID, is_active)
tutorial_completed = server.getTutorial()
ZONE_LIST = server.getZones(tag(s))
is_in_zone = server.isInZone(matrix, zone_name)
matrix = server.spawnMissionLocation(matrix, playlist_index, location_index)
server.spawnMissionObject(matrix, playlist_index, location_index, object_index)
server.despawnMissionObject(object_id, is_instant)
count = server.getPlaylistCount()
PLAYLIST_DATA = server.getPlaylistData(playlist_index)
LOCATION_DATA = server.getLocationData(playlist_index, location_index)
OBJECT_DATA = server.getLocationObjectData(playlist_index, location_index, object_index)
server.setFireData(object_id, is_lit, is_explosive)
is_lit = server.getFireData(object_id)
matrix = server.getOceanTransform(matrix, min_search_range, max_search_range)
is_in_area = server.isInTransformArea(matrix_object, matrix_zone, zone_x, zone_y, zone_z)

game
===========
server.setGameSetting(setting_name, bool)
GAME_SETTINGS = server.getGameSettings()
server.setCurrency(amount)
amount = server.getCurrency()
days_survived = server.getDateValue()
system_time = getTimeMillisec()

http
===========
server.httpGet(port, request)

admin
===========
server.banPlayer(peer_id)
server.kickPlayer(peer_id)
server.addAdmin(peer_id)
server.removeAdmin(peer_id)
server.addAuth(peer_id)
server.removeAuth(peer_id)

Callback Functions
==================
onTick(world_ticks)
onCreate()
onDestroy()
onCustomCommand(full_message, user_peer_id, is_admin, is_auth, command, args ...)
onChatMessage(sender_name, message)
onPlayerJoin(steam_id, name, peer_id, is_admin, is_auth)
onPlayerSit(peer_id, vehicle_id, seat_name)
onPlayerRespawn(peer_id)
onPlayerLeave(steam_id, name, peer_id, is_admin, is_auth)
onToggleMap(peeer_id, is_open)
onPlayerDie(steam_id, name, peer_id, is_admin, is_auth)
onVehicleSpawn(vehicle_id, peer_id, x, y, z)
onVehicleLoad(vehicle_id)
onVehicleTeleport(vehicle_id, peer_id, x, y, z)
onVehicleDespawn(vehicle_id, peer_id)
onSpawnMissionObject(object_id, name, OBJECT_TYPE, playlist_name)
onVehicleDamaged(vehicle_id, damage)
httpReply(port, request, reply)
onFireExtinguished(x,y,z)

Types and info
==================

POSITION_TYPE |
0 = fixed,
1 = vehicle,
2 = object

MARKER_TYPE |
0 = delivery_target,
1 = survivor,
2 = object,
3 = waypoint,
4 = tutorial,
5 = fire,
6 = shark,
7 = ice,
8 = search_radius

LABEL_TYPE |
0 = none,
1 = cross,
2 = wreckage,
3 = terminal,
4 = military,
5 = heritage,
6 = rig,
7 = industrial,
8 = hospital,
9 = science,
10 = airport,
11 = coastguard,
12 = lighthouse,
13 = fuel,
14 = fuel_sell,

NOTIFICATION_TYPE |
0 = new_mission,
1 = new_mission_critical,
2 = failed_mission,
3 = failed_mission_critical,
4 = complete_mission,
5 = network_connect,
6 = network_disconnect,
7 = network_info,
8 = chat_message,
9 = network_info_critical,

PLAYER_LIST |
{ [peer_index] = {["id"] = peer_id, ["name"] = name, ["admin"] = is_admin, ["auth"] = is_auth}}

ZONE_LIST |
{ [zone_index] = { ["name"] = name, ["transform"] = matrix, ["size"] = {x, y, z}, ["radius"] = radius, ["type"] = ZONE_TYPE , ["tags"] = { = tag } }}

ZONE_TYPE |
0 = box,
1 = sphere,
2 = radius,

EQUIPMENT_ID |
0 = none,
1 = diving,
2 = firefighter,
3 = scuba,
4 = parachute,
5 = arctic,

6 = binoculars,
7 = cable,
8 = compass,
9 = defibrillator,
10 = fire_extinguisher,
11 = first_aid,
12 = flare,
13 = flaregun,
14 = flaregun_ammo,
15 = flashlight,
16 = hose,
17 = night_vision_binoculars,
18 = oxygen_mask,
19 = radio,
20 = radio_signal_locator,
21 = remote_control,
22 = rope,
23 = strobe_light,
24 = strobe_light_infrared,
25 = transponder,
26 = underwater_welding_torch,
27 = welding_torch,


PLAYLIST_DATA |
{ ["name"] = name, ["path_id"] = folder_path, ["file_store"] = is_app_data, ["location_count"] = location_count }

LOCATION_DATA |
{ ["name"] = name, ["tile"] = tile_filename, ["env_spawn_count"] = spawn_count, ["env_mod"] = is_env_mod, ["object_count"] = object_count }

OBJECT_DATA |
{ ["name"] = name, ["display_name"] = display_name, ["type"] = TYPE_STRING, ["id"] = component_id, ["dynamic_object_type"] = OBJECT_TYPE, ["tags"] = { = tag }, ["transform"] = matrix, ["character_outfit_type"] = OUTFIT_TYPE }

TYPE_STRING |
"zone",
"object",
"character",
"vehicle",
"flare",
"fire",
"loot",
"button",
"animal"
"ice",
"cargo_zone",

OBJECT_TYPE |
0 = none,
1 = character,
2 = crate_small,
3 = collectable,
4 = basketball,
5 = television,
6 = barrel,
7 = schematic,
8 = debris,
9 = chair,
10 = trolley_food,
11 = trolley_med,
12 = clothing,
13 = office_chair,
14 = book,
15 = bottle,
16 = fryingpan,
17 = mug,
18 = saucepan,
19 = stool,
20 = telescope,
21 = log,
22 = bin,
23 = book_2,
24 = loot,
25 = blue_barrel,
26 = buoyancy_ring,
27 = container,
28 = gas_canister,
29 = pallet,
30 = storage_bin,
31 = fire_extinguisher,
32 = trolley_tool,
33 = cafetiere,
34 = drawers_tools,
35 = glass,
36 = microwave,
37 = plate,
38 = box_closed,
39 = box_open,
40 = desk_lamp,
41 = eraser_board,
42 = folder,
43 = funnel,
44 = lamp,
45 = microscope,
46 = notebook,
47 = pen_marker,
48 = pencil,
49 = scales,
50 = science_beaker,
51 = science_cylinder,
52 = science_flask,
53 = tub_1,
54 = tub_2,
55 = filestack,
56 = barrel_toxic,
57 = flare,
58 = fire,
59 = animal,
60 = map_label,
61 = iceberg,
62 = small_flare,
63 = big_flare,

OUTFIT_TYPE |
0 = none,
1 = worker,
2 = fishing,
3 = waiter,
4 = swimsuit,
5 = military,
6 = office,
7 = police,
8 = science,
9 = medical,
10 = wetsuit,
11 = civilian,

GAME_SETTINGS |
"third_person",
"third_person_vehicle",
"vehicle_damage",
"player_damage",
"npc_damage",
"sharks",
"starting_currency",
"fast_travel",
"teleport_vehicle",
"rogue_mode",
"auto_refuel",
"megalodon",
"map_show_players",
"map_show_vehicles",
"show_3d_waypoints",
"show_name_plates",
"day_night_length",
"infinite_money",
"settings_menu",
"unlock_all_islands",
"infinite_batteries",
"infinite_fuel",
"engine_overheating",
"no_clip",
"map_teleport",
"cleanup_veicle",
"clear_fow",
"vehicle_spawning",
"photo_mode",
"respawning",
"settings_menu_lock",
"despawn_on_leave",
...