Merge branch 'master' of https://github.com/tgstation/tgstation into pupstream-2025-09-07

# Conflicts:
#	README.md
#	code/__DEFINES/admin.dm
#	code/__DEFINES/melee.dm
#	code/_globalvars/traits/_traits.dm
#	code/controllers/subsystem/economy.dm
#	code/datums/components/crafting/crafting.dm
#	code/datums/elements/crusher_loot.dm
#	code/modules/antagonists/pirate/pirate_shuttle_equipment.dm
#	code/modules/clothing/suits/_suits.dm
#	code/modules/escape_menu/leave_body.dm
#	code/modules/jobs/job_types/_job.dm
#	code/modules/mining/equipment/mineral_scanner.dm
#	code/modules/mob/living/living.dm
#	code/modules/plumbing/plumbers/pill_press.dm
#	tgui/packages/tgui/interfaces/Vending.tsx
This commit is contained in:
nevimer
2025-09-07 00:37:52 -04:00
362 changed files with 82084 additions and 106117 deletions
+1 -1
View File
@@ -460,7 +460,7 @@ That prevents a few funky behaviors.
return
//Transferring a carded AI to a core.
if(interaction == AI_TRANS_FROM_CARD)
AI.control_disabled = FALSE
AI.set_control_disabled(FALSE)
AI.radio_enabled = TRUE
AI.forceMove(loc) // to replace the terminal.
to_chat(AI, span_notice("You have been uploaded to a stationary terminal. Remote device connection restored."))
@@ -70,8 +70,6 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets)
var/icon_broken = "sparking"
/// Whether a skittish person can dive inside this closet. Disable if opening the closet causes "bad things" to happen or that it leads to a logical inconsistency.
var/divable = TRUE
/// true whenever someone with the strong pull component (or magnet modsuit module) is dragging this, preventing opening
var/strong_grab = FALSE
/// secure locker or not, also used if overriding a non-secure locker with a secure door overlay to add fancy lights
var/secure = FALSE
var/can_install_electronics = TRUE
@@ -441,9 +439,8 @@ GLOBAL_LIST_EMPTY(roundstart_station_closets)
if(isliving(user))
if(!(user.mobility_flags & MOBILITY_USE))
return FALSE
if(strong_grab)
if(user)
to_chat(user, span_danger("[pulledby] has an incredibly strong grip on [src], preventing it from opening."))
if(pulledby && user && HAS_TRAIT(src, TRAIT_STRONGPULL) && user != pulledby)
to_chat(user, span_danger("[pulledby] has an incredibly strong grip on [src], preventing it from opening."))
return FALSE
var/turf/T = get_turf(src)
for(var/mob/living/L in T)
+19 -17
View File
@@ -58,36 +58,38 @@
ignite()
return TRUE
/obj/structure/fireplace/attackby(obj/item/T, mob/user)
if(istype(T, /obj/item/stack/sheet/mineral/wood))
var/obj/item/stack/sheet/mineral/wood/wood = T
/obj/structure/fireplace/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
if(istype(tool, /obj/item/stack/sheet/mineral/wood))
var/obj/item/stack/sheet/mineral/wood/wood = tool
var/space_remaining = MAXIMUM_BURN_TIMER - burn_time_remaining()
var/space_for_logs = round(space_remaining / LOG_BURN_TIMER)
if(space_for_logs < 1)
to_chat(user, span_warning("You can't fit any more of [T] in [src]!"))
return
to_chat(user, span_warning("You can't fit any more of [tool] in [src]!"))
return ITEM_INTERACT_BLOCKING
var/logs_used = min(space_for_logs, wood.amount)
wood.use(logs_used)
adjust_fuel_timer(LOG_BURN_TIMER * logs_used)
user.visible_message(span_notice("[user] tosses some wood into [src]."), span_notice("You add some fuel to [src]."))
return
return ITEM_INTERACT_SUCCESS
if(istype(T, /obj/item/paper_bin))
var/obj/item/paper_bin/paper_bin = T
user.visible_message(span_notice("[user] throws [T] into [src]."), span_notice("You add [T] to [src]."))
if(istype(tool, /obj/item/paper_bin))
var/obj/item/paper_bin/paper_bin = tool
user.visible_message(span_notice("[user] throws [tool] into [src]."), span_notice("You add [tool] to [src]."))
adjust_fuel_timer(PAPER_BURN_TIMER * paper_bin.total_paper)
qdel(paper_bin)
return
return ITEM_INTERACT_SUCCESS
if(istype(T, /obj/item/paper))
user.visible_message(span_notice("[user] throws [T] into [src]."), span_notice("You throw [T] into [src]."))
if(istype(tool, /obj/item/paper))
user.visible_message(span_notice("[user] throws [tool] into [src]."), span_notice("You throw [tool] into [src]."))
adjust_fuel_timer(PAPER_BURN_TIMER)
qdel(T)
return
qdel(tool)
return ITEM_INTERACT_SUCCESS
if(try_light(T,user))
return
return ..()
if(tool.ignition_effect(src, user))
try_light(tool, user)
return ITEM_INTERACT_SUCCESS
return NONE
/obj/structure/fireplace/update_overlays()
. = ..()
+16 -7
View File
@@ -52,6 +52,12 @@
var/matrix/before_flipped_matrix
/// Do we place people onto the table rather than slamming them?
var/slam_gently = FALSE
/// Where icon is our flipped table located in?
var/flipped_table_icon = 'icons/obj/flipped_tables.dmi'
/// What sound does the table make when unflipped?
var/unflip_table_sound = 'sound/items/trayhit/trayhit2.ogg'
/// What sound does the table make when we flip the table?
var/flipped_table_sound = 'sound/items/trayhit/trayhit1.ogg'
/obj/structure/table/Initialize(mapload, obj/structure/table_frame/frame_used, obj/item/stack/stack_used)
. = ..()
@@ -109,7 +115,7 @@
//proc that adds elements present in normal tables
/obj/structure/table/proc/unflip_table()
playsound(src, 'sound/items/trayhit/trayhit2.ogg', 100)
playsound(src, unflip_table_sound, 100)
make_climbable()
AddElement(/datum/element/give_turf_traits, turf_traits)
AddElement(/datum/element/footstep_override, priority = STEP_SOUND_TABLE_PRIORITY)
@@ -129,7 +135,7 @@
//proc that removes elements present in now-flipped tables
/obj/structure/table/proc/flip_table(new_dir = SOUTH)
playsound(src, 'sound/items/trayhit/trayhit1.ogg', 100)
playsound(src, flipped_table_sound, 100)
qdel(GetComponent(/datum/component/climb_walkable))
RemoveElement(/datum/element/climbable)
RemoveElement(/datum/element/footstep_override, priority = STEP_SOUND_TABLE_PRIORITY)
@@ -170,7 +176,7 @@
transform_matrix.Turn(270)
animate(src, transform = transform_matrix, time = 0)
else
icon = 'icons/obj/flipped_tables.dmi'
icon = flipped_table_icon
icon_state = base_icon_state
update_appearance()
@@ -283,14 +289,17 @@
if(!can_flip)
return
var/interaction_key = "table_flip_[REF(src)]"
if(!is_flipped)
user.balloon_alert_to_viewers("flipping table...")
if(do_after(user, max_integrity * 0.25))
if(!LAZYACCESS(user.do_afters, interaction_key)) // To avoid balloon alert spam
user.balloon_alert_to_viewers("flipping table...")
if(do_after(user, max_integrity * 0.25, src, interaction_key = interaction_key))
flip_table(get_dir(user, src))
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
user.balloon_alert_to_viewers("flipping table upright...")
if(do_after(user, max_integrity * 0.25, src))
if(!LAZYACCESS(user.do_afters, interaction_key)) // To avoid balloon alert spam
user.balloon_alert_to_viewers("flipping table upright...")
if(do_after(user, max_integrity * 0.25, src, interaction_key = interaction_key))
unflip_table()
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN