From 9b7d46bce66de7d634987ce4890cefff82c61401 Mon Sep 17 00:00:00 2001
From: ss13-beebot <56381746+ss13-beebot@users.noreply.github.com>
Date: Mon, 3 Jun 2024 00:14:59 +0000
Subject: [PATCH 01/12] Automatic changelog compile [ci skip]
---
html/changelog.html | 7 -------
1 file changed, 7 deletions(-)
diff --git a/html/changelog.html b/html/changelog.html
index 1ae400eca5b..26942290d61 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -149,13 +149,6 @@
KasparoVy updated:
- added more custom prosthetic sprites
-
- 01 April 2024
- Bokkiewokkie updated:
-
- - Fixed auto-spooling not working for the Thirring FTL drive.
- - Enabled auto-spooling as an option for the Thirring FTL drive by default.
-
GoonStation 13 Development Team
From 06c43b6c00b6a5df3681467d5fc7f5a8c1a0ca44 Mon Sep 17 00:00:00 2001
From: Kenionatus
Date: Sat, 8 Jun 2024 03:20:36 +0200
Subject: [PATCH 02/12] add starmap.json to .gitignore (#2674)
---
.gitignore | 1 +
1 file changed, 1 insertion(+)
diff --git a/.gitignore b/.gitignore
index c30813913fb..6213071d42a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,6 +6,7 @@
#Ignore byond config folder.
/cfg/**/*
+config/starmap/starmap.json
# Ignore compiled linux libs in the root folder, e.g. librust_g.so
/*.so
From 98fe4c7886d761623b9fa36ad8978e9e2900e447 Mon Sep 17 00:00:00 2001
From: Corvid
Date: Fri, 14 Jun 2024 10:04:47 -0400
Subject: [PATCH 03/12] Enables Byond 515 (#2400)
Co-authored-by: Crossedfall
Co-authored-by: AnturK
Co-authored-by: Bokkiewokkie <43698041+Bokkiewokkie@users.noreply.github.com>
---
code/__DEFINES/rust_g.dm | 226 +++++++++++++++---
code/__byond_version_compat.dm | 8 -
code/_compile_options.dm | 6 +-
.../controllers/configuration/config_entry.dm | 2 +-
code/datums/http.dm | 14 +-
code/game/objects/items/extinguisher.dm | 4 +-
dependencies.sh | 10 +-
nsv13/code/modules/overmap/ai-skynet.dm | 4 +-
rust_g.dll | Bin 6578688 -> 6246400 bytes
9 files changed, 216 insertions(+), 58 deletions(-)
diff --git a/code/__DEFINES/rust_g.dm b/code/__DEFINES/rust_g.dm
index e82dee47717..c6534a8a88d 100644
--- a/code/__DEFINES/rust_g.dm
+++ b/code/__DEFINES/rust_g.dm
@@ -38,6 +38,59 @@
#define RUST_G (__rust_g || __detect_rust_g())
#endif
+// Handle 515 call() -> call_ext() changes
+#if DM_VERSION >= 515
+#define RUSTG_CALL call_ext
+#else
+#define RUSTG_CALL call
+#endif
+
+/// Gets the version of rust_g
+/proc/rustg_get_version() return RUSTG_CALL(RUST_G, "get_version")()
+
+
+/**
+ * Sets up the Aho-Corasick automaton with its default options.
+ *
+ * The search patterns list and the replacements must be of the same length when replace is run, but an empty replacements list is allowed if replacements are supplied with the replace call
+ * Arguments:
+ * * key - The key for the automaton, to be used with subsequent rustg_acreplace/rustg_acreplace_with_replacements calls
+ * * patterns - A non-associative list of strings to search for
+ * * replacements - Default replacements for this automaton, used with rustg_acreplace
+ */
+#define rustg_setup_acreplace(key, patterns, replacements) RUSTG_CALL(RUST_G, "setup_acreplace")(key, json_encode(patterns), json_encode(replacements))
+
+/**
+ * Sets up the Aho-Corasick automaton using supplied options.
+ *
+ * The search patterns list and the replacements must be of the same length when replace is run, but an empty replacements list is allowed if replacements are supplied with the replace call
+ * Arguments:
+ * * key - The key for the automaton, to be used with subsequent rustg_acreplace/rustg_acreplace_with_replacements calls
+ * * options - An associative list like list("anchored" = 0, "ascii_case_insensitive" = 0, "match_kind" = "Standard"). The values shown on the example are the defaults, and default values may be omitted. See the identically named methods at https://docs.rs/aho-corasick/latest/aho_corasick/struct.AhoCorasickBuilder.html to see what the options do.
+ * * patterns - A non-associative list of strings to search for
+ * * replacements - Default replacements for this automaton, used with rustg_acreplace
+ */
+#define rustg_setup_acreplace_with_options(key, options, patterns, replacements) RUSTG_CALL(RUST_G, "setup_acreplace")(key, json_encode(options), json_encode(patterns), json_encode(replacements))
+
+/**
+ * Run the specified replacement engine with the provided haystack text to replace, returning replaced text.
+ *
+ * Arguments:
+ * * key - The key for the automaton
+ * * text - Text to run replacements on
+ */
+#define rustg_acreplace(key, text) RUSTG_CALL(RUST_G, "acreplace")(key, text)
+
+/**
+ * Run the specified replacement engine with the provided haystack text to replace, returning replaced text.
+ *
+ * Arguments:
+ * * key - The key for the automaton
+ * * text - Text to run replacements on
+ * * replacements - Replacements for this call. Must be the same length as the set-up patterns
+ */
+#define rustg_acreplace_with_replacements(key, text, replacements) RUSTG_CALL(RUST_G, "acreplace_with_replacements")(key, text, json_encode(replacements))
+
/**
* This proc generates a cellular automata noise grid which can be used in procedural generation methods.
*
@@ -52,35 +105,58 @@
* * height: The height of the grid.
*/
#define rustg_cnoise_generate(percentage, smoothing_iterations, birth_limit, death_limit, width, height) \
- LIBCALL(RUST_G, "cnoise_generate")(percentage, smoothing_iterations, birth_limit, death_limit, width, height)
+ RUSTG_CALL(RUST_G, "cnoise_generate")(percentage, smoothing_iterations, birth_limit, death_limit, width, height)
+
+/**
+ * This proc generates a grid of perlin-like noise
+ *
+ * Returns a single string that goes row by row, with values of 1 representing an turned on cell, and a value of 0 representing a turned off cell.
+ *
+ * Arguments:
+ * * seed: seed for the function
+ * * accuracy: how close this is to the original perlin noise, as accuracy approaches infinity, the noise becomes more and more perlin-like
+ * * stamp_size: Size of a singular stamp used by the algorithm, think of this as the same stuff as frequency in perlin noise
+ * * world_size: size of the returned grid.
+ * * lower_range: lower bound of values selected for. (inclusive)
+ * * upper_range: upper bound of values selected for. (exclusive)
+ */
+#define rustg_dbp_generate(seed, accuracy, stamp_size, world_size, lower_range, upper_range) \
+ RUSTG_CALL(RUST_G, "dbp_generate")(seed, accuracy, stamp_size, world_size, lower_range, upper_range)
-#define rustg_dmi_strip_metadata(fname) LIBCALL(RUST_G, "dmi_strip_metadata")("[fname]")
-#define rustg_dmi_create_png(path, width, height, data) LIBCALL(RUST_G, "dmi_create_png")(path, width, height, data)
-#define rustg_dmi_resize_png(path, width, height, resizetype) LIBCALL(RUST_G, "dmi_resize_png")(path, width, height, resizetype)
-#define rustg_file_read(fname) LIBCALL(RUST_G, "file_read")("[fname]")
-#define rustg_file_exists(fname) LIBCALL(RUST_G, "file_exists")("[fname]")
-#define rustg_file_write(text, fname) LIBCALL(RUST_G, "file_write")(text, "[fname]")
-#define rustg_file_append(text, fname) LIBCALL(RUST_G, "file_append")(text, "[fname]")
+#define rustg_dmi_strip_metadata(fname) RUSTG_CALL(RUST_G, "dmi_strip_metadata")("[fname]")
+#define rustg_dmi_create_png(path, width, height, data) RUSTG_CALL(RUST_G, "dmi_create_png")(path, width, height, data)
+#define rustg_dmi_resize_png(path, width, height, resizetype) RUSTG_CALL(RUST_G, "dmi_resize_png")(path, width, height, resizetype)
+
+#define rustg_file_read(fname) RUSTG_CALL(RUST_G, "file_read")("[fname]")
+#define rustg_file_exists(fname) RUSTG_CALL(RUST_G, "file_exists")("[fname]")
+#define rustg_file_write(text, fname) RUSTG_CALL(RUST_G, "file_write")(text, "[fname]")
+#define rustg_file_append(text, fname) RUSTG_CALL(RUST_G, "file_append")(text, "[fname]")
+#define rustg_file_get_line_count(fname) text2num(RUSTG_CALL(RUST_G, "file_get_line_count")("[fname]"))
+#define rustg_file_seek_line(fname, line) RUSTG_CALL(RUST_G, "file_seek_line")("[fname]", "[line]")
#ifdef RUSTG_OVERRIDE_BUILTINS
- #define file2text(fname) rustg_file_read("[fname]")
- #define text2file(text, fname) rustg_file_append(text, "[fname]")
+ #define file2text(fname) rustg_file_read("[fname]")
+ #define text2file(text, fname) rustg_file_append(text, "[fname]")
#endif
-#define rustg_git_revparse(rev) LIBCALL(RUST_G, "rg_git_revparse")(rev)
-#define rustg_git_commit_date(rev) LIBCALL(RUST_G, "rg_git_commit_date")(rev)
+#define rustg_git_revparse(rev) RUSTG_CALL(RUST_G, "rg_git_revparse")(rev)
+#define rustg_git_commit_date(rev) RUSTG_CALL(RUST_G, "rg_git_commit_date")(rev)
-#define rustg_hash_string(algorithm, text) LIBCALL(RUST_G, "hash_string")(algorithm, text)
-#define rustg_hash_file(algorithm, fname) LIBCALL(RUST_G, "hash_file")(algorithm, "[fname]")
+#define rustg_hash_string(algorithm, text) RUSTG_CALL(RUST_G, "hash_string")(algorithm, text)
+#define rustg_hash_file(algorithm, fname) RUSTG_CALL(RUST_G, "hash_file")(algorithm, "[fname]")
+#define rustg_hash_generate_totp(seed) RUSTG_CALL(RUST_G, "generate_totp")(seed)
+#define rustg_hash_generate_totp_tolerance(seed, tolerance) RUSTG_CALL(RUST_G, "generate_totp_tolerance")(seed, tolerance)
#define RUSTG_HASH_MD5 "md5"
#define RUSTG_HASH_SHA1 "sha1"
#define RUSTG_HASH_SHA256 "sha256"
#define RUSTG_HASH_SHA512 "sha512"
+#define RUSTG_HASH_XXH64 "xxh64"
+#define RUSTG_HASH_BASE64 "base64"
#ifdef RUSTG_OVERRIDE_BUILTINS
-#define md5(thing) (isfile(thing) ? rustg_hash_file(RUSTG_HASH_MD5, "[thing]") : rustg_hash_string(RUSTG_HASH_MD5, thing))
+ #define md5(thing) (isfile(thing) ? rustg_hash_file(RUSTG_HASH_MD5, "[thing]") : rustg_hash_string(RUSTG_HASH_MD5, thing))
#endif
#define RUSTG_HTTP_METHOD_GET "get"
@@ -89,35 +165,117 @@
#define RUSTG_HTTP_METHOD_PATCH "patch"
#define RUSTG_HTTP_METHOD_HEAD "head"
#define RUSTG_HTTP_METHOD_POST "post"
-#define rustg_http_request_blocking(method, url, body, headers) LIBCALL(RUST_G, "http_request_blocking")(method, url, body, headers)
-#define rustg_http_request_async(method, url, body, headers) LIBCALL(RUST_G, "http_request_async")(method, url, body, headers)
-#define rustg_http_check_request(req_id) LIBCALL(RUST_G, "http_check_request")(req_id)
+#define rustg_http_request_blocking(method, url, body, headers, options) RUSTG_CALL(RUST_G, "http_request_blocking")(method, url, body, headers, options)
+#define rustg_http_request_async(method, url, body, headers, options) RUSTG_CALL(RUST_G, "http_request_async")(method, url, body, headers, options)
+#define rustg_http_check_request(req_id) RUSTG_CALL(RUST_G, "http_check_request")(req_id)
#define RUSTG_JOB_NO_RESULTS_YET "NO RESULTS YET"
#define RUSTG_JOB_NO_SUCH_JOB "NO SUCH JOB"
#define RUSTG_JOB_ERROR "JOB PANICKED"
-#define rustg_json_is_valid(text) (LIBCALL(RUST_G, "json_is_valid")(text) == "true")
+#define rustg_json_is_valid(text) (RUSTG_CALL(RUST_G, "json_is_valid")(text) == "true")
+
+#define rustg_log_write(fname, text, format) RUSTG_CALL(RUST_G, "log_write")("[fname]", text, format)
+/proc/rustg_log_close_all() return RUSTG_CALL(RUST_G, "log_close_all")()
+
+#define rustg_noise_get_at_coordinates(seed, x, y) RUSTG_CALL(RUST_G, "noise_get_at_coordinates")(seed, x, y)
+
+/**
+ * Register a list of nodes into a rust library. This list of nodes must have been serialized in a json.
+ * Node {// Index of this node in the list of nodes
+ * unique_id: usize,
+ * // Position of the node in byond
+ * x: usize,
+ * y: usize,
+ * z: usize,
+ * // Indexes of nodes connected to this one
+ * connected_nodes_id: Vec}
+ * It is important that the node with the unique_id 0 is the first in the json, unique_id 1 right after that, etc.
+ * It is also important that all unique ids follow. {0, 1, 2, 4} is not a correct list and the registering will fail
+ * Nodes should not link across z levels.
+ * A node cannot link twice to the same node and shouldn't link itself either
+ */
+#define rustg_register_nodes_astar(json) RUSTG_CALL(RUST_G, "register_nodes_astar")(json)
+
+/**
+ * Add a new node to the static list of nodes. Same rule as registering_nodes applies.
+ * This node unique_id must be equal to the current length of the static list of nodes
+ */
+#define rustg_add_node_astar(json) RUSTG_CALL(RUST_G, "add_node_astar")(json)
+
+/**²
+ * Remove every link to the node with unique_id. Replace that node by null
+ */
+#define rustg_remove_node_astart(unique_id) RUSTG_CALL(RUST_G, "remove_node_astar")(unique_id)
+
+/**
+ * Compute the shortest path between start_node and goal_node using A*. Heuristic used is simple geometric distance
+ */
+#define rustg_generate_path_astar(start_node_id, goal_node_id) RUSTG_CALL(RUST_G, "generate_path_astar")(start_node_id, goal_node_id)
+
+#define RUSTG_REDIS_ERROR_CHANNEL "RUSTG_REDIS_ERROR_CHANNEL"
-#define rustg_log_write(fname, text, format) LIBCALL(RUST_G, "log_write")("[fname]", text, format)
-/proc/rustg_log_close_all() return LIBCALL(RUST_G, "log_close_all")()
+#define rustg_redis_connect(addr) RUSTG_CALL(RUST_G, "redis_connect")(addr)
+/proc/rustg_redis_disconnect() return RUSTG_CALL(RUST_G, "redis_disconnect")()
+#define rustg_redis_subscribe(channel) RUSTG_CALL(RUST_G, "redis_subscribe")(channel)
+/proc/rustg_redis_get_messages() return RUSTG_CALL(RUST_G, "redis_get_messages")()
+#define rustg_redis_publish(channel, message) RUSTG_CALL(RUST_G, "redis_publish")(channel, message)
-#define rustg_noise_get_at_coordinates(seed, x, y) LIBCALL(RUST_G, "noise_get_at_coordinates")(seed, x, y)
+#define rustg_sql_connect_pool(options) RUSTG_CALL(RUST_G, "sql_connect_pool")(options)
+#define rustg_sql_query_async(handle, query, params) RUSTG_CALL(RUST_G, "sql_query_async")(handle, query, params)
+#define rustg_sql_query_blocking(handle, query, params) RUSTG_CALL(RUST_G, "sql_query_blocking")(handle, query, params)
+#define rustg_sql_connected(handle) RUSTG_CALL(RUST_G, "sql_connected")(handle)
+#define rustg_sql_disconnect_pool(handle) RUSTG_CALL(RUST_G, "sql_disconnect_pool")(handle)
+#define rustg_sql_check_query(job_id) RUSTG_CALL(RUST_G, "sql_check_query")("[job_id]")
-#define rustg_sql_connect_pool(options) LIBCALL(RUST_G, "sql_connect_pool")(options)
-#define rustg_sql_query_async(handle, query, params) LIBCALL(RUST_G, "sql_query_async")(handle, query, params)
-#define rustg_sql_query_blocking(handle, query, params) LIBCALL(RUST_G, "sql_query_blocking")(handle, query, params)
-#define rustg_sql_connected(handle) LIBCALL(RUST_G, "sql_connected")(handle)
-#define rustg_sql_disconnect_pool(handle) LIBCALL(RUST_G, "sql_disconnect_pool")(handle)
-#define rustg_sql_check_query(job_id) LIBCALL(RUST_G, "sql_check_query")("[job_id]")
+#define rustg_time_microseconds(id) text2num(RUSTG_CALL(RUST_G, "time_microseconds")(id))
+#define rustg_time_milliseconds(id) text2num(RUSTG_CALL(RUST_G, "time_milliseconds")(id))
+#define rustg_time_reset(id) RUSTG_CALL(RUST_G, "time_reset")(id)
-#define rustg_unzip_download_async(url, unzip_directory) LIBCALL(RUST_G, "unzip_download_async")(url, unzip_directory)
-#define rustg_unzip_check(job_id) LIBCALL(RUST_G, "unzip_check")("[job_id]")
+/proc/rustg_unix_timestamp()
+ return text2num(RUSTG_CALL(RUST_G, "unix_timestamp")())
-#define rustg_url_encode(text) LIBCALL(RUST_G, "url_encode")(text)
-#define rustg_url_decode(text) LIBCALL(RUST_G, "url_decode")(text)
+#define rustg_raw_read_toml_file(path) json_decode(RUSTG_CALL(RUST_G, "toml_file_to_json")(path) || "null")
+
+/proc/rustg_read_toml_file(path)
+ var/list/output = rustg_raw_read_toml_file(path)
+ if (output["success"])
+ return json_decode(output["content"])
+ else
+ CRASH(output["content"])
+
+#define rustg_raw_toml_encode(value) json_decode(RUSTG_CALL(RUST_G, "toml_encode")(json_encode(value)))
+
+/proc/rustg_toml_encode(value)
+ var/list/output = rustg_raw_toml_encode(value)
+ if (output["success"])
+ return output["content"]
+ else
+ CRASH(output["content"])
+
+#define rustg_unzip_download_async(url, unzip_directory) RUSTG_CALL(RUST_G, "unzip_download_async")(url, unzip_directory)
+#define rustg_unzip_check(job_id) RUSTG_CALL(RUST_G, "unzip_check")("[job_id]")
+
+#define rustg_url_encode(text) RUSTG_CALL(RUST_G, "url_encode")("[text]")
+#define rustg_url_decode(text) RUSTG_CALL(RUST_G, "url_decode")(text)
#ifdef RUSTG_OVERRIDE_BUILTINS
- #define url_encode(text) rustg_url_encode(text)
- #define url_decode(text) rustg_url_decode(text)
+ #define url_encode(text) rustg_url_encode(text)
+ #define url_decode(text) rustg_url_decode(text)
#endif
+
+/**
+ * This proc generates a noise grid using worley noise algorithm
+ *
+ * Returns a single string that goes row by row, with values of 1 representing an alive cell, and a value of 0 representing a dead cell.
+ *
+ * Arguments:
+ * * region_size: The size of regions
+ * * threshold: the value that determines wether a cell is dead or alive
+ * * node_per_region_chance: chance of a node existiing in a region
+ * * size: size of the returned grid
+ * * node_min: minimum amount of nodes in a region (after the node_per_region_chance is applied)
+ * * node_max: maximum amount of nodes in a region
+ */
+#define rustg_worley_generate(region_size, threshold, node_per_region_chance, size, node_min, node_max) \
+ RUSTG_CALL(RUST_G, "worley_generate")(region_size, threshold, node_per_region_chance, size, node_min, node_max)
diff --git a/code/__byond_version_compat.dm b/code/__byond_version_compat.dm
index 4b79bdb8e68..feece392c90 100644
--- a/code/__byond_version_compat.dm
+++ b/code/__byond_version_compat.dm
@@ -20,14 +20,6 @@
/savefile/byond_version = MIN_COMPILER_VERSION
#endif
-// Temporary 515 block until it is completely compatible.
-// AnturK says there are issues with savefiles that would make it dangerous to test merge,
-// and so this check is in place to stop serious damage.
-// That being said, if you really are ready, you can give YES_I_WANT_515 to TGS.
-#if !defined(YES_I_WANT_515) && DM_VERSION >= 515
-#error We do not yet completely support BYOND 515.
-#endif
-
// 515 split call for external libraries into call_ext
#if DM_VERSION < 515
#define LIBCALL call
diff --git a/code/_compile_options.dm b/code/_compile_options.dm
index 885a8ed47d4..9c22eb59a6e 100644
--- a/code/_compile_options.dm
+++ b/code/_compile_options.dm
@@ -72,10 +72,10 @@
//End NSV
//Update this whenever the byond version is stable so people stop updating to hilariously broken versions
-#define MAX_COMPILER_VERSION 514
-#define MAX_COMPILER_BUILD 1589
+#define MAX_COMPILER_VERSION 515
+#define MAX_COMPILER_BUILD 1700
#if DM_VERSION > MAX_COMPILER_VERSION || DM_BUILD > MAX_COMPILER_BUILD
-#warn WARNING: Your BYOND version is over the recommended version (514.1589)! Stability is not guaranteed.
+#warn WARNING: Your BYOND version is over the recommended version (515.1700)! Stability is not guaranteed.
#endif
//Log the full sendmaps profile on 514.1556+, any earlier and we get bugs or it not existing
#if DM_VERSION >= 514 && DM_BUILD >= 1556
diff --git a/code/controllers/configuration/config_entry.dm b/code/controllers/configuration/config_entry.dm
index a4a78852480..b8a4782be97 100644
--- a/code/controllers/configuration/config_entry.dm
+++ b/code/controllers/configuration/config_entry.dm
@@ -38,7 +38,7 @@
/datum/config_entry/can_vv_get(var_name)
. = ..()
- if(var_name == NAMEOF_STATIC(src, config_entry_value) || var_name == NAMEOF_STATIC(src, default))
+ if(var_name == NAMEOF(src, config_entry_value) || var_name == NAMEOF(src, default))
. &= !(protection & CONFIG_ENTRY_HIDDEN)
/datum/config_entry/vv_edit_var(var_name, var_value)
diff --git a/code/datums/http.dm b/code/datums/http.dm
index 14bb8d21976..5dab601ffb5 100644
--- a/code/datums/http.dm
+++ b/code/datums/http.dm
@@ -6,10 +6,12 @@
var/body
var/headers
var/url
+ /// If present response body will be saved to this file.
+ var/output_file
var/_raw_response
-/datum/http_request/proc/prepare(method, url, body = "", list/headers)
+/datum/http_request/proc/prepare(method, url, body = "", list/headers, output_file)
if (!length(headers))
headers = ""
else
@@ -19,15 +21,16 @@
src.url = url
src.body = body
src.headers = headers
+ src.output_file = output_file
/datum/http_request/proc/execute_blocking()
- _raw_response = rustg_http_request_blocking(method, url, body, headers)
+ _raw_response = rustg_http_request_blocking(method, url, body, headers, build_options())
/datum/http_request/proc/begin_async()
if (in_progress)
CRASH("Attempted to re-use a request object.")
- id = rustg_http_request_async(method, url, body, headers)
+ id = rustg_http_request_async(method, url, body, headers, build_options())
if (isnull(text2num(id)))
stack_trace("Proc error: [id]")
@@ -35,6 +38,11 @@
else
in_progress = TRUE
+/datum/http_request/proc/build_options()
+ if(output_file)
+ return json_encode(list("output_filename"=output_file,"body_filename"=null))
+ return null
+
/datum/http_request/proc/is_complete()
if (isnull(id))
return TRUE
diff --git a/code/game/objects/items/extinguisher.dm b/code/game/objects/items/extinguisher.dm
index e0ff8f815ae..dcfbfc98696 100644
--- a/code/game/objects/items/extinguisher.dm
+++ b/code/game/objects/items/extinguisher.dm
@@ -196,9 +196,9 @@
/obj/item/extinguisher/proc/manage_chair_speed(datum/move_loop/move/source)
SIGNAL_HANDLER
switch(source.lifetime)
- if(5 to 4)
+ if(4 to 5)
source.delay = 2
- if(3 to 1)
+ if(1 to 3)
source.delay = 3
/obj/item/extinguisher/AltClick(mob/user)
diff --git a/dependencies.sh b/dependencies.sh
index a5383d3b74f..caa899f6669 100755
--- a/dependencies.sh
+++ b/dependencies.sh
@@ -4,21 +4,21 @@
#Final authority on what's required to fully build the project
# byond version
-export BYOND_MAJOR=514
-export BYOND_MINOR=1589
+export BYOND_MAJOR=515
+export BYOND_MINOR=1608
#rust version
-export RUST_VERSION=1.54.0
+export RUST_VERSION=1.67.1
#rust_g git tag
-export RUST_G_VERSION=0.4.7.1
+export RUST_G_VERSION=1.2.0
#node version
export NODE_VERSION=18
export NODE_VERSION_PRECISE=18.14.2
# SpacemanDMM git tag
-export SPACEMAN_DMM_VERSION=suite-1.7.1
+export SPACEMAN_DMM_VERSION=suite-1.8
#auxmos version
export AUXMOS_VERSION=2.2.2
diff --git a/nsv13/code/modules/overmap/ai-skynet.dm b/nsv13/code/modules/overmap/ai-skynet.dm
index 53106354a4e..3a41913bb39 100644
--- a/nsv13/code/modules/overmap/ai-skynet.dm
+++ b/nsv13/code/modules/overmap/ai-skynet.dm
@@ -1983,9 +1983,9 @@ Seek a ship thich we'll station ourselves around
switch(angular_difference)
if(-15 to 15)
boost(NORTH) //ZOOOM
- if(-45 to -180)
+ if(-180 to -45)
boost(WEST)
- if(-180 to -INFINITY)
+ if(-INFINITY to -180)
boost(EAST)
if(45 to 180)
boost(EAST)
diff --git a/rust_g.dll b/rust_g.dll
index 3c53cf871afcb74aaee83ddfc556c16d8c3574ae..bccb89a274b83d9c55958455cdb87b3e99a494a5 100644
GIT binary patch
literal 6246400
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