From 6d42f7e6098d2a50414f5475b3e498feb390f415 Mon Sep 17 00:00:00 2001
From: Nihisohel <62807628+Nihisohel@users.noreply.github.com>
Date: Sat, 4 Jul 2026 18:38:33 +0800
Subject: [PATCH] first pass
---
code/_onclick/click.dm | 12 ++-
code/modules/mob/living/carbon/human/human.dm | 55 +++++++++-----
.../living/carbon/human/human_attackhand.dm | 73 ++++++++++++-------
3 files changed, 92 insertions(+), 48 deletions(-)
diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm
index 5e11a92733dd..91af1db8fe0b 100644
--- a/code/_onclick/click.dm
+++ b/code/_onclick/click.dm
@@ -242,10 +242,14 @@
examine(user)
return TRUE
- if (mods[ALT_CLICK])
- var/turf/T = get_turf(src)
- if(T && user.TurfAdjacent(T) && length(T.contents))
- user.set_listed_turf(T)
+ if(mods[ALT_CLICK])
+
+ if(iscarbon(src))
+ return
+
+ var/turf/selected_tile = get_turf(src)
+ if(selected_tile && user.TurfAdjacent(selected_tile) && length(selected_tile.contents))
+ user.set_listed_turf(selected_tile)
return TRUE
return FALSE
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 08ebc8f5b1c8..9f935f5d2623 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1,5 +1,5 @@
/mob/living/carbon/human/Initialize(mapload, new_species = null)
- blood_type = pick(7;"O-", 38;"O+", 6;"A-", 34;"A+", 2;"B-", 9;"B+", 1;"AB-", 3;"AB+")
+ blood_type = pick(7;"O-", 38;"O+", 6;"A-", 34;"A+", 2;"B-", 9;"B+", 1;"AB-", 3;"AB+") // holy fuck, how did i actually miss this, not even i realized this while working on medical rework, im being genuine here
GLOB.human_mob_list += src
GLOB.alive_human_list += src
SShuman.processable_human_list += src
@@ -25,6 +25,14 @@
health_threshold_dead = -150
health_threshold_crit = -100
+/mob/living/carbon/human/clicked(mob/user, list/mods)
+ if(..())
+ return TRUE
+ if(mods[ALT_CLICK] && ishuman(user))
+ check_for_injuries(user)
+ return TRUE
+ return FALSE
+
/mob/living/carbon/human/initialize_pass_flags(datum/pass_flags_container/PF)
..()
if (PF)
@@ -809,7 +817,9 @@
return
stethoscope.attack(src, user)
-
+ if(href_list["remove_splint"])
+ var/part_to_remove = href_list["remove_splint"]
+ remove_splints(user = usr, part = part_to_remove)
..()
return
@@ -1608,7 +1618,7 @@
// target = person whose splints are being removed
// user = person removing the splints
-/mob/living/carbon/human/proc/remove_splints(mob/living/carbon/human/user)
+/mob/living/carbon/human/proc/remove_splints(mob/living/carbon/human/user, part)
var/mob/living/carbon/human/target = src
if(!istype(user))
@@ -1627,9 +1637,10 @@
to_chat(user, SPAN_WARNING("You cannot remove splints without a hand."))
return
var/is_splint = FALSE
- for(var/bodypart in list("l_leg","r_leg","l_arm","r_arm","r_hand","l_hand","r_foot","l_foot","chest","head","groin")) //check for any splints before do_after
- var/obj/limb/l = target.get_limb(bodypart)
- if(l && (l.status & LIMB_SPLINTED))
+ var/list/parts_to_check = part ? list(part) : list("l_leg","r_leg","l_arm","r_arm","r_hand","l_hand","r_foot","l_foot","chest","head","groin")
+ for(var/bodypart in parts_to_check) //check for any splints before do_after
+ var/obj/limb/limbus = target.get_limb(bodypart)
+ if(limbus && (limbus.status & LIMB_SPLINTED))
if(user == target)
if((bodypart in list("l_arm", "l_hand")) && (cur_hand == "l_hand"))
same_arm_side = TRUE
@@ -1642,10 +1653,16 @@
var/msg = "" // Have to use this because there are issues with the to_chat macros and text macros and quotation marks
if(is_splint)
+ if(user == target)
+ user.visible_message(SPAN_NOTICE("[user] starts to remove the [part ? "splint on their [target.get_limb(part).display_name]" : "splints"]."),
+ SPAN_NOTICE("You start to remove the [part ? "splint on your [target.get_limb(part).display_name]" : "splints"]."))
+ else
+ user.visible_message(SPAN_NOTICE("[user] starts to remove \the [target]'s [part ? "splint on their [target.get_limb(part).display_name]" : "splints"]."),
+ SPAN_NOTICE("You start to remove \the [target]'s [part ? "splint on their [target.get_limb(part).display_name]" : "splints"]."))
if(do_after(user, HUMAN_STRIP_DELAY * user.get_skill_duration_multiplier(SKILL_MEDICAL), INTERRUPT_ALL, BUSY_ICON_GENERIC, target, INTERRUPT_MOVED, BUSY_ICON_GENERIC))
- var/can_reach_splints = TRUE
+ var/can_reach_splints = TRUE // redundant now that the space suit thing is commented out, but i cba to remove it
var/amount_removed = 0
- for(var/bodypart in list("l_leg","r_leg","l_arm","r_arm","r_hand","l_hand","r_foot","l_foot","chest","head","groin")) // make sure the splints still exist before removing
+ for(var/bodypart in parts_to_check) // make sure the splints still exist before removing
var/obj/limb/target_limb = target.get_limb(bodypart)
if(target_limb && (target_limb.status & LIMB_SPLINTED))
if(user == target)
@@ -1662,12 +1679,12 @@
else
to_chat(user, SPAN_WARNING("There are no splints to remove."))
return
- if(wear_suit && istype(wear_suit,/obj/item/clothing/suit/space))
- var/obj/item/clothing/suit/space/suit = target.wear_suit
- if(LAZYLEN(suit.supporting_limbs))
- msg = "[user == target ? "your":"\proper [target]'s"]"
- to_chat(user, SPAN_WARNING("You cannot remove the splints, [msg] [suit] is supporting some of the breaks."))
- can_reach_splints = FALSE
+ //if(wear_suit && istype(wear_suit,/obj/item/clothing/suit/space))
+ // var/obj/item/clothing/suit/space/suit = target.wear_suit
+ // if(LAZYLEN(suit.supporting_limbs))
+ // msg = "[user == target ? "your":"\proper [target]'s"]"
+ // to_chat(user, SPAN_WARNING("You cannot remove the splints, [msg] [suit] is supporting some of the breaks."))
+ // can_reach_splints = FALSE
if(can_reach_splints)
var/obj/item/stack/medical/splint/new_splint = new(user.loc)
new_splint.amount = 0 //we checked that we have at least one bodypart splinted, so we can create it no prob. Also we need amount to be 0
@@ -1687,12 +1704,14 @@
if(new_splint.amount == 0)
qdel(new_splint) //we only removed nano splints
msg = "[user == target ? "their own":"\proper [target]'s"]"
- target.visible_message(SPAN_NOTICE("[user] removes [msg] [amount_removed>1 ? "splints":"splint"]."),
- SPAN_NOTICE("Your [amount_removed>1 ? "splints are":"splint is"] removed."))
+ target.visible_message(SPAN_NOTICE("[user] removes [msg] [part ? "splint on their [target.get_limb(part).display_name]" : (amount_removed > 1 ? "splints" : "splint")]."),
+ SPAN_NOTICE("Your [part ? "splint on your [target.get_limb(part).display_name] is" : (amount_removed > 1 ? "splints are" : "splint is")] removed."))
target.update_med_icon()
+ user.put_in_hands(new_splint)
+ else if(user == target)
+ to_chat(user, SPAN_NOTICE("You stop trying to remove your [part ? "splint on your [target.get_limb(part).display_name]" : "splints"]."))
else
- msg = "[user == target ? "your":"\proper [target]'s"]"
- to_chat(user, SPAN_NOTICE("You stop trying to remove [msg] splints."))
+ to_chat(user, SPAN_NOTICE("You stop trying to remove \the [target]'s [part ? "splint on their [target.get_limb(part).display_name]" : "splints"]."))
else
if(same_arm_side)
to_chat(user, SPAN_WARNING("You need to use the opposite hand to remove the splints on your arm and hand!"))
diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm
index 6d9c274ed2a8..60c2da7222fd 100644
--- a/code/modules/mob/living/carbon/human/human_attackhand.dm
+++ b/code/modules/mob/living/carbon/human/human_attackhand.dm
@@ -72,7 +72,7 @@
if(INTENT_GRAB)
if(attacking_mob == src)
- check_for_injuries()
+ check_for_injuries(src)
return 1
if(anchored)
@@ -117,7 +117,7 @@
if(INTENT_DISARM)
if(attacking_mob == src)
- check_for_injuries()
+ check_for_injuries(src)
return 1
attacking_mob.attack_log += text("\[[time_stamp()]\] Disarmed [key_name(src)]")
@@ -193,7 +193,7 @@
/mob/living/carbon/human/help_shake_act(mob/living/carbon/mob)
//Target is us
if(src == mob)
- check_for_injuries()
+ check_for_injuries(src)
return
//Target is not us
@@ -245,21 +245,26 @@
playsound(loc, 'sound/weapons/thudswoosh.ogg', 25, 1, 7)
-/mob/living/carbon/human/proc/check_for_injuries()
- var/t_him = "it"
- switch(gender)
- if(MALE)
- t_him = "him"
- if(FEMALE)
- t_him = "her"
- if(PLURAL)
- t_him = "them"
+/mob/living/carbon/human/proc/check_for_injuries(mob/living/carbon/human/checker)
+ if(!checker)
+ return
- visible_message(SPAN_NOTICE("[src] examines [t_him]self."),
- SPAN_NOTICE("You check yourself for injuries."), null, 3)
+ if(checker == src) // this probably would be better off in a separate, universal proc so itll be easier for everyone involved i think
+ var/pronoun = "itself"
+ switch(gender)
+ if(MALE)
+ pronoun = "himself"
+ if(FEMALE)
+ pronoun = "herself"
+ if(PLURAL)
+ pronoun = "themself"
+ visible_message(SPAN_NOTICE("[src] examines [pronoun] for injuries."),
+ SPAN_NOTICE("You check yourself for injuries."), null, 3)
+ else
+ checker.visible_message(SPAN_NOTICE("[checker] examines [src]."), SPAN_NOTICE("You check [src] for injuries."), null, 3)
var/list/limb_message = list()
- for(var/obj/limb/org in limbs)
+ for(var/obj/limb/org as anything in limbs)
var/list/status = list()
var/brutedamage = org.brute_dam
var/burndamage = org.burn_dam
@@ -318,21 +323,37 @@
status += "OK"
var/postscript
- if(org.status & LIMB_UNCALIBRATED_PROSTHETIC)
- postscript += " (NONFUNCTIONAL)"
- if(org.status & LIMB_BROKEN)
- postscript += " (BROKEN)"
+ if(checker == src) // obviously it wont come off as obvious to other people, unless its dislocated or w/e
+ if(org.status & LIMB_UNCALIBRATED_PROSTHETIC)
+ postscript += " (NONFUNCTIONAL)"
+ if(org.status & LIMB_BROKEN)
+ postscript += " (BROKEN)"
+
if(org.status & LIMB_SPLINTED_INDESTRUCTIBLE)
- postscript += " (NANOSPLINTED)"
+ postscript += " (NANOSPLINTED)"
else if(org.status & LIMB_SPLINTED)
- postscript += " (SPLINTED)"
+ postscript += " (SPLINTED)"
+
+ //for(var/datum/effects/bleeding/arterial/art_bleed in org.bleeding_effects_list)
+ // postscript += " It is bleeding profusely."
+ for(var/datum/effects/bleeding/internal/int_bleed in org.bleeding_effects_list)
+ postscript += " The skin looks to be discolored."
+
+ //if(org.status & LIMB_DISLOCATED)
+ // postscript += " (DISLOCATED)" //href this to undislocate obviously with tarkovmed integrity
+ //if(org.status & LIMB_CONSTRICTED)
+ // postscript += " (CONSTRICTED)"
+ postscript = replacetext(postscript, " The skin looks to be discolored.", "")
+ postscript = replacetext(postscript, " It is bleeding profusely.", "")
if(org.status & LIMB_THIRD_DEGREE_BURNS)
- postscript += " (SEVERE BURN)"
+ postscript += "(SEVERE BURN)"
if(org.status & LIMB_ESCHAR)
- postscript += " (ESCHAR)"
+ postscript += " (ESCHAR)"
+
if(postscript)
- limb_message += "\t My [org.display_name] is [SPAN_WARNING("[english_list(status, final_comma_text = ",")].[SPAN_BOLD(postscript)]")]"
+ limb_message += "\t [checker == src ? "My" : "[src]'s"] [org.display_name] is [SPAN_WARNING("[english_list(status, final_comma_text = ",")].[postscript]")]"
else
- limb_message += "\t My [org.display_name] is [status[1] == "OK" ? SPAN_NOTICE("OK.") : SPAN_WARNING("[english_list(status, final_comma_text = ",")].")]"
- to_chat(src, boxed_message(limb_message.Join("\n")))
+ limb_message += "\t [checker == src ? "My" : "[src]'s"] [org.display_name] is [status[1] == "OK" ? SPAN_NOTICE("OK.") : SPAN_WARNING("[english_list(status, final_comma_text = ",")].")]"
+ limb_message += "\t \nMedical actions: \[Check Status\]\n"
+ to_chat(checker, boxed_message(limb_message.Join("
")))