Stormworks Version 1.0 Out Now!
Author: Deltars,
published 4 years ago,
[img]https://clan.cloudflare.steamstatic.com/images//28842908/094b211bfd89eb748625d62db4d93314da17b6db.jpg[/img]
Dear Stormworkers,
Version 1.0 is here!
[url=https://www.youtube.com/watch?v=8OJcwCElxUw]Check out the new trailer[/url].
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!
[img]https://clan.cloudflare.steamstatic.com/images//28842908/85c8993de802b7f1f4bad76f99a402aff14cc22e.jpg[/img]
[b]New LUA Game Modding[/b]
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.
[b]First Person Body, Tools, Equipment[/b]
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!
[b]Spreadable Vehicle Fire[/b]
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.
[b]New Career and Missions, Tutorial, Logistics[/b]
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.
[b]New Customisation Menu[/b]
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!
[b]Weather Simulation & Seasons[/b]
Weather is now locally simulated, and more extreme. Expect stronger winds, bigger waves, and predictable weather systems and storms.
[img]https://clan.cloudflare.steamstatic.com/images//28842908/c371b9dd433b6591bc6f9d02efe54f22823fbaed.jpg[/img]
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
[b]Patch Notes
v1.0.0[/b]
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"] = { [i] = 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"] = { [i] = 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",