Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
8c0d807
Makes tendrils less out for blood, cleans up The Thing's code (#96332)
SmArtKar Jun 4, 2026
ddabc35
Automatic changelog for PR #96332 [ci skip]
tgstation-ci[bot] Jun 4, 2026
e61ba89
Toxin bees get toxin (#96337)
lelandkemble Jun 4, 2026
34500f7
Automatic changelog for PR #96337 [ci skip]
tgstation-ci[bot] Jun 4, 2026
606ec48
Botanic trays: the hydroponics without hydro! (soil but better) (#96236)
MelokG000 Jun 4, 2026
dc596f1
Automatic changelog for PR #96236 [ci skip]
tgstation-ci[bot] Jun 4, 2026
6b0790d
Automatic changelog compile [ci skip]
tgstation-ci[bot] Jun 4, 2026
6d59b40
cryoxadone is capable of healing you (#96316)
TheRyeGuyWhoWillNowDie Jun 4, 2026
9e0378e
Automatic changelog for PR #96316 [ci skip]
tgstation-ci[bot] Jun 4, 2026
a62838f
Polar bear basic mob conversion (#96295)
AnturK Jun 4, 2026
43f8345
Automatic changelog for PR #96295 [ci skip]
tgstation-ci[bot] Jun 4, 2026
d55c25d
Automatic changelog compile [ci skip]
tgstation-ci[bot] Jun 4, 2026
31967be
Makes Destroy() a protected proc to safeguard against improper calls …
mrmanlikesbt Jun 4, 2026
70b6f23
Drake tail trophy no longer pushes immovable mobs (#96336)
SmArtKar Jun 4, 2026
60d7766
Automatic changelog for PR #96336 [ci skip]
tgstation-ci[bot] Jun 4, 2026
e094b84
Handcuffs removes pull verb (#96276)
JohnFulpWillard Jun 4, 2026
5f62bfc
Automatic changelog for PR #96276 [ci skip]
tgstation-ci[bot] Jun 4, 2026
e985400
Automatic changelog compile [ci skip]
tgstation-ci[bot] Jun 4, 2026
c8c2541
Fix: Prevent infinite recursion in light destruction (#96126) (#96348)
UgoManzo Jun 4, 2026
6fda745
Automatic changelog for PR #96348 [ci skip]
tgstation-ci[bot] Jun 4, 2026
a7078c8
Automatic changelog compile [ci skip]
tgstation-ci[bot] Jun 5, 2026
8033a47
Implements overlay-based smoothing for lavaland lava and water (#96151)
SmArtKar Jun 5, 2026
5f3f10f
Automatic changelog for PR #96151 [ci skip]
tgstation-ci[bot] Jun 5, 2026
1ba4cdb
Automatic changelog compile [ci skip]
tgstation-ci[bot] Jun 5, 2026
370a529
Changes slaughter/laughter demons to use sentient mob pref (#96342)
Wisemonster Jun 5, 2026
5f1ddb4
Automatic changelog for PR #96342 [ci skip]
tgstation-ci[bot] Jun 5, 2026
f94f8b2
Personality can now be re-viewed from the mood hud icon (#96341)
Ghommie Jun 5, 2026
a860f59
Automatic changelog for PR #96341 [ci skip]
tgstation-ci[bot] Jun 5, 2026
9f4f9b6
Adds a hotkey which cancels your `do_after`s (if possible) (#96302)
MrMelbert Jun 5, 2026
d957793
Automatic changelog for PR #96302 [ci skip]
tgstation-ci[bot] Jun 5, 2026
2fc324a
Catwalk disposal outlet is a disposal outlet (#96266)
lelandkemble Jun 5, 2026
802e305
Automatic changelog for PR #96266 [ci skip]
tgstation-ci[bot] Jun 5, 2026
9b110eb
Reworks and fixes blood drunk miner megafauna (#96286)
SmArtKar Jun 5, 2026
17cdff6
Automatic changelog for PR #96286 [ci skip]
tgstation-ci[bot] Jun 5, 2026
678e016
Automatic changelog compile [ci skip]
tgstation-ci[bot] Jun 5, 2026
89ab0c4
Bumps Cutter to 5.0.1 (#96358)
LemonInTheDark Jun 5, 2026
5a68cb5
Implements "Sound Tokens", a way to have spatial audio. And implement…
CabinetOnFire Jun 5, 2026
537c389
Automatic changelog for PR #96018 [ci skip]
tgstation-ci[bot] Jun 5, 2026
c62d6ca
Automatic changelog compile [ci skip]
tgstation-ci[bot] Jun 6, 2026
3b15861
common sense powercreep for syndicate borgs (#96226)
TheRyeGuyWhoWillNowDie Jun 6, 2026
16b75d6
Automatic changelog for PR #96226 [ci skip]
tgstation-ci[bot] Jun 6, 2026
9f1ef21
Automatic changelog compile [ci skip]
tgstation-ci[bot] Jun 6, 2026
93c59d6
Bumps Rust-G to 6.2.0 (#96340)
CabinetOnFire Jun 6, 2026
edbc46b
Automatic changelog for PR #96340 [ci skip]
tgstation-ci[bot] Jun 6, 2026
f78a72d
Automatic changelog compile [ci skip]
tgstation-ci[bot] Jun 6, 2026
fa9571d
Merge remote-tracking branch 'upstream/master'
tgstation-ci[bot] Jun 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
/turf/open/misc/asteroid/snow/icemoon,
/area/icemoon/surface/outdoors/nospawn)
"cP" = (
/mob/living/simple_animal/hostile/asteroid/polarbear,
/mob/living/basic/mining/polarbear,
/turf/open/floor/wood/large{
initial_gas_mix = "ICEMOON_ATMOS"
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@
/turf/open/floor/iron,
/area/ruin/plasma_facility/operations)
"dB" = (
/mob/living/simple_animal/hostile/asteroid/polarbear{
/mob/living/basic/mining/polarbear{
name = "Baloo"
},
/turf/open/misc/asteroid/snow/icemoon,
Expand Down
8 changes: 2 additions & 6 deletions _maps/map_files/CatwalkStation/CatwalkStation_2023.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -7042,7 +7042,7 @@
/obj/machinery/status_display/supply{
pixel_y = 32
},
/obj/machinery/disposal/delivery_chute{
/obj/structure/disposaloutlet{
dir = 4
},
/obj/structure/window/spawner/directional/south,
Expand Down Expand Up @@ -66111,10 +66111,6 @@
},
/turf/open/floor/iron/dark/textured_large,
/area/station/medical/medbay/central)
"rDG" = (
/obj/effect/turf_decal/tile/red,
/turf/closed/wall/r_wall,
/area/station/engineering/lobby)
"rDN" = (
/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4,
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
Expand Down Expand Up @@ -197861,7 +197857,7 @@ weC
lDI
kOk
kOk
rDG
kOk
kOk
kOk
mAH
Expand Down
6 changes: 3 additions & 3 deletions _maps/map_files/IceBoxStation/IceBoxStation.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -17522,7 +17522,7 @@
/turf/open/floor/iron/white,
/area/station/medical/surgery/aft)
"eUO" = (
/mob/living/simple_animal/hostile/asteroid/polarbear{
/mob/living/basic/mining/polarbear{
move_force = 999;
name = "Dewey"
},
Expand Down Expand Up @@ -23565,7 +23565,7 @@
/turf/open/floor/iron/white,
/area/station/medical/treatment_center)
"gHA" = (
/mob/living/simple_animal/hostile/asteroid/polarbear{
/mob/living/basic/mining/polarbear{
move_force = 999;
name = "Louie"
},
Expand Down Expand Up @@ -56852,7 +56852,7 @@
/turf/open/floor/plating,
/area/station/maintenance/port/aft)
"pZY" = (
/mob/living/simple_animal/hostile/asteroid/polarbear{
/mob/living/basic/mining/polarbear{
move_force = 999;
name = "Huey"
},
Expand Down
7 changes: 7 additions & 0 deletions code/__DEFINES/ai/ai_blackboard.dm
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
#define BB_FOOD_TARGET "bb_food_target"
///How close a mob must be for us to select it as a target, if that is less than how far we can maintain it as a target
#define BB_AGGRO_RANGE "BB_aggro_range"
///If defined, mobs will use this distance instead of default aggro range to locate new targets
#define BB_AGGRO_GRAB_RANGE "BB_aggro_grab_range"
///are we hungry? determined by the udder component
#define BB_CHECK_HUNGRY "BB_check_hungry"
///are we ready to breed?
Expand Down Expand Up @@ -241,3 +243,8 @@
// Used to hold state without making bigass lists
/// For /datum/ai_behavior/find_potential_targets, what if any field are we using currently
#define BB_FIND_TARGETS_FIELD(type) "bb_find_targets_field_[type]"

///Currently enraged
#define BB_BASIC_MOB_ENRAGE "BB_enraged"
///Previous melee cooldown
#define BB_BASIC_MOB_PREVIOUS_MELEE_COOLDOWN "BB_previous_melee_cooldown"
5 changes: 5 additions & 0 deletions code/__DEFINES/dcs/signals/signals_global.dm
Original file line number Diff line number Diff line change
Expand Up @@ -108,3 +108,8 @@
/// Global signal whenever a camera network broadcast is started/stopped/updated: (camera_net, is_show_active, announcement)
#define COMSIG_GLOB_NETWORK_BROADCAST_UPDATED "!network_broadcast_updated"

///Global signal sent when the player list grows. Called by [mob/add_to_player_list] (mob/player)
#define COMSIG_GLOB_PLAYER_LOGIN "!player_login"

///Global signal sent when the player list shrinks. Called by [mob/remove_from_player_list] (mob/player)
#define COMSIG_GLOB_PLAYER_LOGOUT "!player_logout"
35 changes: 18 additions & 17 deletions code/__DEFINES/icon_smoothing.dm
Original file line number Diff line number Diff line change
Expand Up @@ -129,23 +129,24 @@ DEFINE_BITFIELD(smoothing_junction, list(
#define SMOOTH_GROUP_CARPET_SIMPLE_NEON_PINK_NODOTS S_TURF(51) //![turf/open/floor/carpet/neon/simple/pink/nodots]
#define SMOOTH_GROUP_BAMBOO_FLOOR S_TURF(52) //![/turf/open/floor/bamboo]
#define SMOOTH_GROUP_FLOOR_WATER_LAVALAND S_TURF(53) //![/turf/open/water/lavaland_atmos/basalt]
#define SMOOTH_GROUP_FLOOR_SIDERITE S_TURF(54) ///turf/open/misc/grass
#define SMOOTH_GROUP_FLOOR_SHALE S_TURF(55) ///turf/open/misc/grass

#define SMOOTH_GROUP_CLOSED_TURFS S_TURF(56) ///turf/closed
#define SMOOTH_GROUP_MATERIAL_WALLS S_TURF(57) ///turf/closed/wall/material
#define SMOOTH_GROUP_SYNDICATE_WALLS S_TURF(58) ///turf/closed/wall/r_wall/plastitanium/syndicate, /turf/closed/indestructible/syndicate
#define SMOOTH_GROUP_HOTEL_WALLS S_TURF(59) ///turf/closed/indestructible/hotelwall
#define SMOOTH_GROUP_MINERAL_WALLS S_TURF(60) ///turf/closed/mineral, /turf/closed/indestructible
#define SMOOTH_GROUP_RED_ROCK_WALLS S_TURF(61) ///turf/closed/mineral/asteroid, /turf/closed/mineral/random/stationside/asteroid
#define SMOOTH_GROUP_SHALE_WALLS S_TURF(62) ///turf/closed/mineral/random/volcanic/shale
#define SMOOTH_GROUP_BOSS_WALLS S_TURF(63) ///turf/closed/indestructible/riveted/boss
#define SMOOTH_GROUP_SURVIVAL_TITANIUM_WALLS S_TURF(64) ///turf/closed/wall/mineral/titanium/survival
#define SMOOTH_GROUP_TURF_OPEN_CLIFF S_TURF(65) ///turf/open/cliff
#define SMOOTH_GROUP_HIEROPHANT S_TURF(66) ///turf/closed/indestructible/riveted/hierophant
#define SMOOTH_GROUP_PLASTINUM_WALLS S_TURF(67) ///turf/closed/indestructible/riveted/plastinum

#define MAX_S_TURF 67 //Always match this value with the one above it.
#define SMOOTH_GROUP_FLOOR_SIDERITE S_TURF(54) //![/turf/open/misc/asteroid/basalt/smooth/siderite]
#define SMOOTH_GROUP_FLOOR_SHALE S_TURF(55) //![/turf/open/misc/asteroid/basalt/smooth/shale]
#define SMOOTH_GROUP_FLOOR_BASALT S_TURF(56) //![/turf/open/misc/asteroid/basalt]

#define SMOOTH_GROUP_CLOSED_TURFS S_TURF(57) ///turf/closed
#define SMOOTH_GROUP_MATERIAL_WALLS S_TURF(58) ///turf/closed/wall/material
#define SMOOTH_GROUP_SYNDICATE_WALLS S_TURF(59) ///turf/closed/wall/r_wall/plastitanium/syndicate, /turf/closed/indestructible/syndicate
#define SMOOTH_GROUP_HOTEL_WALLS S_TURF(60) ///turf/closed/indestructible/hotelwall
#define SMOOTH_GROUP_MINERAL_WALLS S_TURF(61) ///turf/closed/mineral, /turf/closed/indestructible
#define SMOOTH_GROUP_RED_ROCK_WALLS S_TURF(62) ///turf/closed/mineral/asteroid, /turf/closed/mineral/random/stationside/asteroid
#define SMOOTH_GROUP_SHALE_WALLS S_TURF(63) ///turf/closed/mineral/random/volcanic/shale
#define SMOOTH_GROUP_BOSS_WALLS S_TURF(64) ///turf/closed/indestructible/riveted/boss
#define SMOOTH_GROUP_SURVIVAL_TITANIUM_WALLS S_TURF(65) ///turf/closed/wall/mineral/titanium/survival
#define SMOOTH_GROUP_TURF_OPEN_CLIFF S_TURF(66) ///turf/open/cliff
#define SMOOTH_GROUP_HIEROPHANT S_TURF(67) ///turf/closed/indestructible/riveted/hierophant
#define SMOOTH_GROUP_PLASTINUM_WALLS S_TURF(68) ///turf/closed/indestructible/riveted/plastinum

#define MAX_S_TURF 68 //Always match this value with the one above it.

#define S_OBJ(num) ("-" + #num + ",")
/* /obj included */
Expand Down
1 change: 1 addition & 0 deletions code/__DEFINES/keybinding.dm
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@
#define COMSIG_KB_LIVING_HOLDTHROWMODE_DOWN "keybinding_living_holdthrowmode_down"
#define COMSIG_KB_LIVING_GIVEITEM_DOWN "keybinding_living_giveitem_down"
#define COMSIG_KB_LIVING_VIEW_PET_COMMANDS "keybinding_living_view_pet_commands"
#define COMSIG_KB_LIVING_STOP_INTERACTIONS_DOWN "keybinding_living_stop_interactions_down"

//Mob
#define COMSIG_KB_MOB_FACENORTH_DOWN "keybinding_mob_facenorth_down"
Expand Down
1 change: 1 addition & 0 deletions code/__DEFINES/move_force.dm
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,4 @@
#define MOVE_FORCE_WEAK (MOVE_FORCE_DEFAULT / 2)
#define MOVE_FORCE_VERY_WEAK ((MOVE_FORCE_DEFAULT / MOVE_FORCE_CRUSH_RATIO) + 1)
#define MOVE_FORCE_EXTREMELY_WEAK (MOVE_FORCE_DEFAULT / (MOVE_FORCE_CRUSH_RATIO * 3))
#define MOVE_FORCE_NONE 0
97 changes: 94 additions & 3 deletions code/__DEFINES/rust_g.dm
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,32 @@
*/
#define rustg_acreplace_with_replacements(key, text, replacements) RUSTG_CALL(RUST_G, "acreplace_with_replacements")(key, text, json_encode(replacements))

/**
* Generates a procedural dungeon map using BSP tree partitioning, prefab placement,
* MST corridor generation, and Cellular Automata smoothing.
*
* Returns a plain binary grid string (matching cellularnoise format):
* A width*height string of '0' (wall) and '1' (floor) characters in row-major order.
*
* Arguments:
* * width - Grid width
* * height - Grid height
* * prefabs_json - JSON array of prefab configs: [{"x":55,"y":65,"w":10,"h":10,"isEnclosed":true},...] (if none use "[]") x = bottom-left turf x, y = bottom-left turf y, w = prefab width, h = prefab height, isEnclosed = whether prefab should be treated like its wall or floor by the generation
* * min_bsp_size - Minimum BSP leaf dimension
* * max_ratio - Maximum aspect ratio for BSP splits
* * padding - Room edge padding within BSP leaf
* * room_fill_percent - How much of each BSP leaf a room fills, 1-100
* * corridor_width - Width of corridors between rooms
* * loop_percent - Chance to add extra MST edges for loops
* * noise_percent - Initial random floor density
* * ca_steps - Cellular Automata smoothing iterations
* * birth_limit - Neighbors to create floor (>=)
* * survival_limit - Neighbors to survive as floor (>=)
* * edge_is_alive - Whether out-of-bounds cells count as ALIVE (floor) for CA neighbor counts
*/
#define rustg_cave_system_generator_generate(width, height, prefabs_json, min_bsp_size, max_ratio, padding, room_fill_percent, corridor_width, loop_percent, noise_percent, ca_steps, birth_limit, survival_limit, edge_is_alive) \
RUSTG_CALL(RUST_G, "cave_system_generator_generate")(width, height, prefabs_json, min_bsp_size, max_ratio, padding, room_fill_percent, corridor_width, loop_percent, noise_percent, ca_steps, birth_limit, survival_limit, edge_is_alive)

/**
* This proc generates a cellular automata noise grid which can be used in procedural generation methods.
*
Expand Down Expand Up @@ -203,21 +229,70 @@

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

/// Supported algorithms: RUSTG_HASH_SHA1, RUSTG_HASH_SHA256, RUSTG_HASH_SHA512
/// Seed must be between 10 bytes to 64 bytes (padded or unpadded) of base32. 20 bytes is recommended. Use a CSPRNG.
/// Refresh rate is fixed at 30sec and digit count is fixed at 6
#define rustg_hash_generate_totp(algorithm, seed) RUSTG_CALL(RUST_G, "generate_totp")(algorithm, seed)
/// Supported algorithms: RUSTG_HASH_SHA1, RUSTG_HASH_SHA256, RUSTG_HASH_SHA512
/// Seed must be between 10 bytes to 64 bytes (padded or unpadded) of base32. 20 bytes is recommended. Use a CSPRNG.
/// Refresh rate is fixed at 30sec and digit count is fixed at 6
/// Tolerance is the number of codes +-30sec from the current one that are allowed.
#define rustg_hash_generate_totp_tolerance(algorithm, seed, tolerance) RUSTG_CALL(RUST_G, "generate_totp_tolerance")(algorithm, seed, tolerance)

/// Creates a cryptographically-secure pseudorandom number generator using the OS-level PRNG as a seed
/// n_bytes is the number of bytes provided to the RNG, the length of the string output varies by format
/// The output string length and characters contained in each format is as follows:
/// RUSTG_RNG_FORMAT_HEX: n_bytes * 2, [a-z0-9]
/// RUSTG_RNG_FORMAT_ALPHANUMERIC: n_bytes, [A-Za-z0-9]
/// RUSTG_RNG_FORMAT_BASE32: ceil(n_bytes / 5 * 8) [A-Z2-7]
/// RUSTG_RNG_FORMAT_BASE32_PADDED: ceil(n_bytes / 5) * 8 [A-Z2-7=]
/// RUSTG_RNG_FORMAT_BASE64: 4 * ceil(n_bytes/3), [A-Za-z0-9+/=]
/// Outputs "ERROR: [reason]" if the format string provided is invalid, or n_bytes is not a positive non-zero integer
#define rustg_csprng_chacha20(format, n_bytes) RUSTG_CALL(RUST_G, "csprng_chacha20")(format, "[n_bytes]")

/// Creates a seeded pseudorandom number generator using the SHA256 hash output bytes of the seed string
/// Note that this function is NOT suitable for use in cryptography and is intended for high-quality **predictable** RNG
/// Use rustg_csprng_chacha20 for a cryptographically-secure PRNG.
/// n_bytes is the number of bytes provided to the RNG, the length of the string output varies by format
/// The output string length and characters contained in each format is as follows:
/// RUSTG_RNG_FORMAT_HEX: n_bytes * 2, [a-z0-9]
/// RUSTG_RNG_FORMAT_ALPHANUMERIC: n_bytes, [A-Za-z0-9]
/// RUSTG_RNG_FORMAT_BASE32: ceil(n_bytes / 5 * 8) [A-Z2-7]
/// RUSTG_RNG_FORMAT_BASE32_PADDED: ceil(n_bytes / 5) * 8 [A-Z2-7=]
/// RUSTG_RNG_FORMAT_BASE64: 4 * ceil(n_bytes/3), [A-Za-z0-9+/=]
/// Outputs "ERROR: [reason]" if the format string provided is invalid, or n_bytes is not a positive non-zero integer
#define rustg_prng_chacha20_seeded(format, n_bytes, seed) RUSTG_CALL(RUST_G, "prng_chacha20_seeded")(format, "[n_bytes]", seed)

#define RUSTG_RNG_FORMAT_HEX "hex"
#define RUSTG_RNG_FORMAT_ALPHANUMERIC "alphanumeric"
#define RUSTG_RNG_FORMAT_BASE32 "base32_rfc4648"
#define RUSTG_RNG_FORMAT_BASE32_PADDED "base32_rfc4648_pad"
#define RUSTG_RNG_FORMAT_BASE64 "base64"

#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_BASE32 "base32_rfc4648"
#define RUSTG_HASH_BASE32_PADDED "base32_rfc4648_pad"
#define RUSTG_HASH_BASE64 "base64"

/// Encode a given string into base64
#define rustg_encode_base64(str) rustg_hash_string(RUSTG_HASH_BASE64, str)
/// Decode a given base64 string
/// Decode a given base64 string. This expects padding.
/// Returns a blank string if the string is not valid base64.
#define rustg_decode_base64(str) RUSTG_CALL(RUST_G, "decode_base64")(str)

/// Encode a given string into base32 (RFC4648)
/// If padding set to FALSE, will not output padding characters.
#define rustg_encode_base32(str, padding) rustg_hash_string(padding ? RUSTG_HASH_BASE32_PADDED : RUSTG_HASH_BASE32, str)
/// Decode a given base32 (RFC4648) string
/// If padding set to FALSE, decoding will not support padding characters.
/// Returns a blank string if the string is not valid base32.
#define rustg_decode_base32(str, padding) RUSTG_CALL(RUST_G, "decode_base32")(str, "[padding ? 1 : 0]")

#ifdef RUSTG_OVERRIDE_BUILTINS
#define md5(thing) (isfile(thing) ? rustg_hash_file(RUSTG_HASH_MD5, "[thing]") : rustg_hash_string(RUSTG_HASH_MD5, thing))
#endif
Expand Down Expand Up @@ -501,3 +576,19 @@
#define url_decode(text) rustg_url_decode(text)
#endif

/// Generates a version 4 UUID.
/// See https://www.ietf.org/rfc/rfc9562.html#section-5.4 for specifics on version 4 UUIDs.
#define rustg_generate_uuid_v4(...) RUSTG_CALL(RUST_G, "uuid_v4")()

/// Generates a version 7 UUID, with the current time.
/// See https://www.ietf.org/rfc/rfc9562.html#section-5.7 for specifics on version 7 UUIDs.
#define rustg_generate_uuid_v7(...) RUSTG_CALL(RUST_G, "uuid_v7")()

/// Generates a random version 2 CUID.
/// See https://github.com/paralleldrive/cuid2 for specifics on version 2 CUIDs.
#define rustg_generate_cuid2(...) RUSTG_CALL(RUST_G, "cuid2")()

/// Generates a random version 2 CUID with the given length.
/// See https://github.com/paralleldrive/cuid2 for specifics on version 2 CUIDs.
#define rustg_generate_cuid2_length(length) RUSTG_CALL(RUST_G, "cuid2_len")("[length]")

4 changes: 2 additions & 2 deletions code/__DEFINES/sound.dm
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,9 @@
///The range deducted from sound range for things that are considered silent / sneaky
#define SILENCED_SOUND_EXTRARANGE -11
///Percentage of sound's range where no falloff is applied
#define SOUND_DEFAULT_FALLOFF_DISTANCE 1 //For a normal sound this would be 1 tile of no falloff
#define SOUND_DEFAULT_FALLOFF_DISTANCE 0 //Disabled because it doesn't actually have a nice effect, it just makes the jump to fall-off more shocking. maybe delete
///The default exponent of sound falloff
#define SOUND_FALLOFF_EXPONENT 6
#define SOUND_FALLOFF_EXPONENT 2.5

#define SOUND_MINIMUM_PRESSURE 10

Expand Down
12 changes: 12 additions & 0 deletions code/__HELPERS/icon_smoothing.dm
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,18 @@ xxx xxx xxx
handback |= WEST_JUNCTION | NORTHWEST_JUNCTION | SOUTHWEST_JUNCTION
return handback

/// Takes a direction, turns it into all the junctions that it lines up with
/proc/all_junctions_of_dir(dir)
if(dir == NORTH)
return NORTH_JUNCTION | NORTHEAST_JUNCTION | NORTHWEST_JUNCTION
if(dir == SOUTH)
return SOUTH_JUNCTION | SOUTHEAST_JUNCTION | SOUTHWEST_JUNCTION
if(dir == EAST)
return EAST_JUNCTION | SOUTHEAST_JUNCTION | NORTHEAST_JUNCTION
if(dir == WEST)
return WEST_JUNCTION | NORTHWEST_JUNCTION | SOUTHWEST_JUNCTION
return NONE

/proc/dir_to_junction(dir)
switch(dir)
if(NORTH)
Expand Down
2 changes: 1 addition & 1 deletion code/_onclick/click_ctrl.dm
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
if(grab(target) != GRAB_SKIP)
changeNext_move(CLICK_CD_MELEE)
return
start_pulling(target)
pulled(target)

/**
* Ctrl mouse wheel click
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1032,7 +1032,7 @@
candidate_role = "Slaughter Demon"
// preview_antag_datum = /datum/antagonist/slaughter // Doesn't actually have its own pref
midround_type = HEAVY_MIDROUND
jobban_flag = ROLE_ALIEN
jobban_flag = ROLE_SENTIENCE
ruleset_flags = RULESET_INVADER
weight = 0
min_pop = 20
Expand Down
2 changes: 1 addition & 1 deletion code/controllers/subsystem/garbage.dm
Original file line number Diff line number Diff line change
Expand Up @@ -374,7 +374,7 @@ SUBSYSTEM_DEF(garbage)
var/start_time = world.time
var/start_tick = world.tick_usage
SEND_SIGNAL(to_delete, COMSIG_QDELETING, force) // Let the (remaining) components know about the result of Destroy
var/hint = to_delete.Destroy(force) // Let our friend know they're about to get fucked up.
var/hint = UNLINT(to_delete.Destroy(force)) // Let our friend know they're about to get fucked up.

if(world.time != start_time)
trash.slept_destroy++
Expand Down
2 changes: 1 addition & 1 deletion code/controllers/subsystem/processing/instruments.dm
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,6 @@ PROCESSING_SUBSYSTEM_DEF(instruments)
/datum/controller/subsystem/processing/instruments/proc/reserve_instrument_channel(datum/instrument/I)
if(current_instrument_channels > max_instrument_channels)
return
. = SSsounds.reserve_sound_channel(I)
. = SSsounds.reserve_sound_channel_for_datum(I)
if(!isnull(.))
current_instrument_channels++
24 changes: 24 additions & 0 deletions code/controllers/subsystem/sound_tokens.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
SUBSYSTEM_DEF(sound_tokens)
name = "Sound Tokens"
wait = 1
ss_flags = SS_TICKER | SS_BACKGROUND | SS_NO_INIT


var/list/clients_needing_update = list()
var/list/currentrun = list()

/datum/controller/subsystem/sound_tokens/fire(resumed)
if(!resumed)
currentrun = clients_needing_update
clients_needing_update = list()
while(length(currentrun))
var/client/client = currentrun[currentrun.len]
currentrun.len--
var/mob/owned_mob = client.mob
if(!owned_mob)
continue
for(var/datum/sound_token/token in client.sound_tokens)
token.update_listener(owned_mob)
if(MC_TICK_CHECK)
break

Loading
Loading