Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 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
cfd1c8b
Replaces lavaland generation (Cellular automata caves) with a more so…
CabinetOnFire Jun 6, 2026
6ebc18e
Automatic changelog for PR #96026 [ci skip]
tgstation-ci[bot] Jun 6, 2026
32fe49e
Fixes pinpointers when AI shunts (#96351)
lelandkemble Jun 6, 2026
059394f
Automatic changelog for PR #96351 [ci skip]
tgstation-ci[bot] Jun 6, 2026
7725809
Fix TGUI spawn panel dir option not working (#96363)
TealSeer Jun 6, 2026
c13fa8e
Automatic changelog for PR #96363 [ci skip]
tgstation-ci[bot] Jun 6, 2026
ccea3cc
fix a hard delete with loot panels (#96349)
Absolucy Jun 6, 2026
fb627a3
COMSIG_BLOCK_RESIST added to COMSIG_LIVING_RESIST (#96343)
StrangeWeirdKitten Jun 6, 2026
d6f0fe7
Fix: Water cooler reagents are now visible to observers and scientist…
UgoManzo Jun 6, 2026
7d58665
Automatic changelog for PR #96335 [ci skip]
tgstation-ci[bot] Jun 6, 2026
9876714
Bumps `dreamluau` to 0.2.1, condenses all `DREAMLUAU_CLEAR_REF_USERDA…
Y0SH1M4S73R Jun 6, 2026
0d71bd9
Fix moth flight in space (#96353)
MrMelbert Jun 6, 2026
1e495ce
Automatic changelog for PR #96353 [ci skip]
tgstation-ci[bot] Jun 6, 2026
a3e0b18
Adds directional coffins (#96275)
JohnFulpWillard Jun 6, 2026
5eb66a6
Automatic changelog for PR #96275 [ci skip]
tgstation-ci[bot] Jun 6, 2026
fc15fa1
Making 40 parts at Adming RPED, not 10 each, and making it another, n…
Frfor17 Jun 6, 2026
edee1ca
Automatic changelog for PR #96246 [ci skip]
tgstation-ci[bot] Jun 6, 2026
98b50f9
Adds Apple Fritters, a classic breakfast staple, to the kitchen roste…
Rhials Jun 6, 2026
4abdfb3
Automatic changelog for PR #96240 [ci skip]
tgstation-ci[bot] Jun 6, 2026
9770f2b
Borg Fix & OmniTool Welder Qol (#96216)
SyncIt21 Jun 6, 2026
ffd2d57
Automatic changelog for PR #96216 [ci skip]
tgstation-ci[bot] Jun 6, 2026
2366a6c
Automatic changelog compile [ci skip]
tgstation-ci[bot] Jun 6, 2026
fd72a3b
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: 4 additions & 4 deletions _maps/RandomRuins/LavaRuins/lavaland_surface_cube.dmm
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/closed/mineral/volcanic/lava_land_surface,
/turf/closed/mineral/volcanic/lava_land_surface/biome_replace,
/area/lavaland/surface/outdoors)
"b" = (
/turf/open/misc/asteroid/basalt/lava_land_surface,
/turf/open/misc/asteroid/basalt/lava_land_surface/biome_replace,
/area/lavaland/surface/outdoors)
"c" = (
/obj/effect/decal/remains/human,
/turf/open/misc/asteroid/basalt/lava_land_surface,
/turf/open/misc/asteroid/basalt/lava_land_surface/biome_replace,
/area/lavaland/surface/outdoors)
"d" = (
/turf/closed/indestructible/riveted,
/area/lavaland/surface/outdoors)
"e" = (
/obj/machinery/wish_granter,
/obj/effect/mapping_helpers/no_lava,
/turf/open/misc/asteroid/basalt/lava_land_surface,
/turf/open/misc/asteroid/basalt/lava_land_surface/biome_replace,
/area/lavaland/surface/outdoors)

(1,1,1) = {"
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"
2 changes: 2 additions & 0 deletions code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@
#define DOORCRUSH_NO_WOUND (1<<0)
///from base of mob/living/resist() (/mob/living)
#define COMSIG_LIVING_RESIST "living_resist"
// Block execute_resist()
#define COMPONENT_BLOCK_RESIST (1<<0)
///from base of mob/living/ignite_mob() (/mob/living)
#define COMSIG_LIVING_IGNITED "living_ignite"
///from base of mob/living/extinguish_mob() (/mob/living)
Expand Down
3 changes: 0 additions & 3 deletions code/__DEFINES/dcs/signals/signals_mob/signals_mob_silicon.dm
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,6 @@
#define COMSIG_BORG_HUG_HANDLED 1
///called from /mob/living/silicon/attack_hand proc
#define COMSIG_MOB_PAT_BORG "mob_pat_borg"
///called when an AI (malf or perhaps combat upgraded or some other circumstance that has them inhabit
///an APC) enters an APC
#define COMSIG_SILICON_AI_OCCUPY_APC "AI_occupy_apc"
///called when an AI vacates an APC
#define COMSIG_SILICON_AI_VACATE_APC "AI_vacate_apc"
///called when an AI's control is toggled
Expand Down
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
4 changes: 2 additions & 2 deletions code/__HELPERS/_dreamluau.dm
Original file line number Diff line number Diff line change
Expand Up @@ -294,10 +294,10 @@
* Hard deleting an object without clearing userdata corresponding to it leaves the userdata to become associated with
* the next DM object to receive the old object's reference ID, which may be undesirable behavior.
*
* @param object the object to disassociate from userdata.
* @param args the objects to disassociate from userdata.
*
* @return null on success
*/
#define DREAMLUAU_CLEAR_REF_USERDATA(object) DREAMLUAU_CALL(clear_ref_userdata)((object))
#define DREAMLUAU_CLEAR_REF_USERDATA(args...) DREAMLUAU_CALL(clear_ref_userdata)(##args)

#endif
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
6 changes: 6 additions & 0 deletions code/_compile_options.dm
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,12 @@
#define DISABLE_DREAMLUAU
#endif

// Since 0.2.0, dreamluau depends on breaking changes made to byondapi in 1674.
// Get rid of this when BYOND_MINOR is >= 1674 AND we don't have any alternate tests on <1674.
#if DM_BUILD < 1674
#define DISABLE_DREAMLUAU
#endif

/// If this is uncommented, force our verb processing into just the 2% of a tick
/// We normally reserve for it
/// NEVER run this on live, it's for simulating highpop only
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
Loading
Loading