[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",