1. Stormworks: Build and Rescue
  2. News

Stormworks: Build and Rescue News

v1.0.22 - The A.I. Ships Update!



Dear Stormworkers,

This week, we bring you AI ships! There will now be hundreds of AI ships passively sailing in the ocean. These ships are persistent, and will continue to move around the world even when you are not around. These ships are on journeys and path-find across the ocean to reach their destination.

This feature has been on experimental, but is now in the main version of the game.

If you want to add your own ships to the AI system, follow the guide here: https://youtu.be/DyXhPy1oegc Remember, vehicles with big or complex physics will slow the game down, so please Stormworks responsibly.

To achieve this new feature, we have added a new property to seats: "AI Type". You can now set the type of AI to be used by NPCs on that particular seat. Right now, there is only one type of seat AI (ship piloting), and only NPCs that have had their AI activated via scripts are able to use these seats - but many of you will see the direction this may be headed!



We have also added new Lua functions to modify the AI state of an NPC - including being able to enable and disable AI capability, and set an AI action such as pilot to a destination.

Could this feature be extended to allow players to hire NPCs with AI capability, place them in seats, and give them orders? Are there other ways we could extend this feature? Let us know in the discussion comments!

This new feature has been actively developed over the last couple of weeks on experimental branch so many thanks to all the players who have been trying it out and giving feedback.



In response to your poll results, we are prioritizing new features that the community have decided most important. AI Ships, Planes & Helicopters ranked no. 5 in your most recent poll. We also hope to add AI helicopters and planes in the future. Meanwhile, we have also begun working on other highly voted new features, all while continuing to fix bugs and issues.

We hope you enjoy this new feature, and find it gives more life and interest to the world of Stormworks!

As always, we look forward to hearing all your thoughts and feedback.

Much love
The Stormworks Developers



Patch Notes

v1.0.22

Feature - New AI Ships Playlist and character/seat AI behaviour type

Rework - Manual saving now uses a background thread like autosaves
(It is not reccomended to exit the game during saving)

Fix - Added onVehicleDespawn callback for explosions
Fix - Large Rotors editor selection hitbox updates
Fix - Door editor selection hitbox updates
Fix - NPC characters taking damage
Fix - River boats should no longer be treated as land vehicles for towing missions

Playlist Api Changes:

server.setVehicleKeypad(vehicle_id, keypad_name) value, is_success = server.getVehicleDial(vehicle_id, keypad_name) POSITION_LIST = server.pathfindOcean(start_matrix, end_matrix) POSITION_LIST | { i = {x = world_x, y = world_y, z = world_z}}

is_on, is_success = server.getVehicleButton(vehicle_id, button_name)
count, is_success = server.getVehicleFireCount(vehicle_id)
is_success = server.getVehicleTooltip(vehicle_id, text)
is_simulating, is_success = server.getVehicleSimulating(vehicle_id)
is_success = server.setVehicleTransponder(vehicle_id, is_active)
is_success = server.setVehicleEditable(vehicle_id, is_editable)
server.setVehicleTank(vehicle_id, tank_name, amount, FLUID_TYPE)
FLUID_TYPE |
0 = water,
1 = diesel,
2 = jet_fuel,
3 = air,
4 = exhaust,
5 = oil,
value, is_success = server.getVehicleTank(vehicle_id, tank_name)
server.setVehicleBattery(vehicle_id, battery_name, amount)
value, is_success = server.getVehicleBattery(vehicle_id, battery_name)


server.setAIState(object_id, AI_STATE)
AI_STATE |
0 = none,
1 = path to destination,

server.setAITarget(object_id, matrix_destination)

hp, is_incapacitated, is_dead, is_interactable, is_ai = server.getCharacterData(object_id)
server.setCharacterData(object_id, hp, is_interactable, is_ai)

Upcoming - 5x Scale Modular Engines, AI Boats



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
The Stormworks Developers

v1.0.21 - The LUA Functions Update!



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
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)

Upcoming - New Modular Engine Concepts!



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
The Stormworks Developers

1.0.20 - The Towing Missions Update!



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
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 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