Merge remote-tracking branch 'tgstation/master' into upstream-2025-11-29

# Conflicts:
#	_maps/RandomRuins/SpaceRuins/derelict_sulaco.dmm
#	_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm
#	_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm
#	_maps/map_files/tramstation/tramstation.dmm
#	code/_onclick/hud/new_player.dm
#	code/datums/components/squashable.dm
#	code/datums/diseases/advance/symptoms/heal.dm
#	code/datums/diseases/chronic_illness.dm
#	code/datums/status_effects/buffs.dm
#	code/datums/status_effects/debuffs/drunk.dm
#	code/datums/status_effects/debuffs/stamcrit.dm
#	code/game/machinery/computer/crew.dm
#	code/game/objects/items/devices/scanners/health_analyzer.dm
#	code/game/objects/items/wall_mounted.dm
#	code/game/turfs/closed/indestructible.dm
#	code/modules/admin/view_variables/filterrific.dm
#	code/modules/antagonists/heretic/influences.dm
#	code/modules/cargo/orderconsole.dm
#	code/modules/client/preferences.dm
#	code/modules/events/space_vines/vine_mutations.dm
#	code/modules/mob/dead/new_player/new_player.dm
#	code/modules/mob/living/carbon/human/death.dm
#	code/modules/mob/living/carbon/human/species_types/jellypeople.dm
#	code/modules/mob/living/damage_procs.dm
#	code/modules/mob/living/living.dm
#	code/modules/mob_spawn/ghost_roles/mining_roles.dm
#	code/modules/mob_spawn/mob_spawn.dm
#	code/modules/projectiles/ammunition/energy/laser.dm
#	code/modules/projectiles/guns/ballistic/launchers.dm
#	code/modules/projectiles/guns/energy/laser.dm
#	code/modules/reagents/chemistry/machinery/chem_dispenser.dm
#	code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm
#	code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm
#	code/modules/reagents/chemistry/reagents/medicine_reagents.dm
#	code/modules/surgery/healing.dm
#	code/modules/unit_tests/designs.dm
#	icons/mob/inhands/items_lefthand.dmi
#	icons/mob/inhands/items_righthand.dmi
#	tgui/packages/tgui/interfaces/ChemDispenser.tsx
This commit is contained in:
nevimer
2025-11-29 22:49:21 -05:00
1185 changed files with 39068 additions and 32028 deletions
@@ -19,6 +19,7 @@
can_install_electronics = FALSE
paint_jobs = null
can_weld_shut = FALSE
door_anim_time = 0
var/foldedbag_path = /obj/item/bodybag
var/obj/item/bodybag/foldedbag_instance = null
@@ -84,7 +84,6 @@
new /obj/item/radio/headset/heads/cmo(src)
new /obj/item/megaphone/command(src)
new /obj/item/defibrillator/compact/loaded(src)
new /obj/item/healthanalyzer/advanced(src)
new /obj/item/assembly/flash/handheld(src)
new /obj/item/storage/briefcase/medicalgunset/cmo(src) //SKYRAT EDIT ADDITION MEDIGUNS
new /obj/item/autosurgeon/medical_hud(src)
@@ -92,6 +92,7 @@
new /obj/item/storage/belt/security/full(src)
new /obj/item/flashlight/seclite(src)
new /obj/item/door_remote/head_of_security(src)
new /obj/item/storage/belt/bandolier(src)
/obj/structure/closet/secure_closet/warden/populate_contents_immediate()
@@ -328,7 +329,7 @@
new /obj/item/storage/box/firingpins(src)
new /obj/item/gun/energy/ionrifle(src)
for(var/i in 1 to 3)
new /obj/item/gun/energy/laser/thermal(src)
new /obj/item/gun/energy/laser/pistol(src)
/obj/structure/closet/secure_closet/armory3/populate_contents_immediate()
for(var/i in 1 to 3)
@@ -7,12 +7,14 @@
base_icon_state = "securecrate"
integrity_failure = 0 //no breaking open the crate
var/code = null
var/last_attempt = null
/// Associated list of previous attempts w/ bulls & cows
var/list/previous_attempts = list()
var/attempts = 10
var/code_length = 4
var/qdel_on_open = FALSE
var/spawned_loot = FALSE
tamperproof = 90
interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND
divable = FALSE // Stop people from "diving into" the crate accidentally, and then detonating it.
@@ -127,6 +129,7 @@
spawn_loot()
tamperproof = 0 // set explosion chance to zero, so we dont accidently hit it with a multitool and instantly die
togglelock(user)
SStgui.close_user_uis(user, src)
return
if(!validate_input(input))
@@ -134,7 +137,7 @@
return
to_chat(user, span_warning("A red light flashes."))
last_attempt = input
previous_attempts += list(bulls_and_cows(input))
attempts--
if(attempts <= 0)
@@ -160,16 +163,28 @@
attack_hand(user) //this helps you not blow up so easily by overriding unlocking which results in an immediate boom.
return CLICK_ACTION_SUCCESS
/obj/structure/closet/crate/secure/loot/ui_interact(mob/user, datum/tgui/ui)
. = ..()
// Attempt to update tgui ui, open and update if needed.
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "AbandonedCrate", name)
ui.open()
/obj/structure/closet/crate/secure/loot/ui_data(mob/user)
var/list/data = list()
data["previous_attempts"] = previous_attempts
data["attempts_left"] = attempts
return data
/obj/structure/closet/crate/secure/loot/multitool_act(mob/living/user, obj/item/tool)
if(!locked)
return
to_chat(user, span_boldnotice("DECA-CODE LOCK REPORT:"))
to_chat(user, span_warning("* Anti-Tamper Bomb will activate [attempts == 1 ? span_boldwarning("on next failed access attempt") : "after [span_boldwarning("[attempts]")] failed access attempts"]."))
if(last_attempt)
var/list/bulls_cows = bulls_and_cows(last_attempt)
to_chat(user, span_notice("Last code attempt, [last_attempt], had [bulls_cows[1]] correct digits at correct positions and [bulls_cows[2]] correct digits at incorrect positions."))
if(Adjacent(user))
ui_interact(user)
return ITEM_INTERACT_SUCCESS
@@ -187,7 +202,7 @@
else if(findtext(code, guess_char))
cows++
return list(bulls, cows)
return list("attempt" = guess, "bulls" = bulls, "cows" = cows)
/obj/structure/closet/crate/secure/loot/emag_act(mob/user, obj/item/card/emag/emag_card)
. = ..()
@@ -204,7 +219,7 @@
//reset the anti-tampering, number of attempts and last attempt when the lock is re-enabled.
tamperproof = initial(tamperproof)
attempts = initial(attempts)
last_attempt = null
previous_attempts = list()
return
if(tamperproof)
return