diff --git a/code/game/gamemodes/cult/blood_magic.dm b/code/game/gamemodes/cult/blood_magic.dm
index c393585ddfe..4c66de40606 100644
--- a/code/game/gamemodes/cult/blood_magic.dm
+++ b/code/game/gamemodes/cult/blood_magic.dm
@@ -395,6 +395,12 @@
source.UpdateButtonIcon()
return ..()
+/obj/item/melee/blood_magic/customised_abstract_text()
+ if(!ishuman(loc))
+ return
+ var/mob/living/carbon/human/owner = loc
+ return "[owner.p_their(TRUE)] [owner.l_hand == src ? "left hand" : "right hand"] is burning in blood-red fire."
+
/obj/item/melee/blood_magic/attack_self(mob/living/user)
afterattack(user, user, TRUE)
diff --git a/code/game/gamemodes/wizard/godhand.dm b/code/game/gamemodes/wizard/godhand.dm
index 86a590c3e51..edfe5d8f41b 100644
--- a/code/game/gamemodes/wizard/godhand.dm
+++ b/code/game/gamemodes/wizard/godhand.dm
@@ -23,6 +23,12 @@
attached_spell.UnregisterSignal(attached_spell.action.owner, COMSIG_MOB_WILLINGLY_DROP)
return ..()
+/obj/item/melee/touch_attack/customised_abstract_text()
+ if(!ishuman(loc))
+ return
+ var/mob/living/carbon/human/owner = loc
+ return "[owner.p_their(TRUE)] [owner.l_hand == src ? "left hand" : "right hand"] is burning in magic fire."
+
/obj/item/melee/touch_attack/attack(mob/target, mob/living/carbon/user)
if(!iscarbon(user)) //Look ma, no hands
return
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 9ccf16d7f53..bad62caa116 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -153,6 +153,10 @@ GLOBAL_DATUM_INIT(welding_sparks, /mutable_appearance, mutable_appearance('icons
if(isstorage(loc)) //marks all items in storage as being such
in_storage = TRUE
+// this proc is used to add text for items with ABSTRACT flag after default examine text
+/obj/item/proc/customised_abstract_text()
+ return
+
/obj/item/proc/determine_move_resist()
switch(w_class)
if(WEIGHT_CLASS_TINY)
diff --git a/code/game/objects/items/weapons/holy_weapons.dm b/code/game/objects/items/weapons/holy_weapons.dm
index d2c10361f3f..3cc8b79492c 100644
--- a/code/game/objects/items/weapons/holy_weapons.dm
+++ b/code/game/objects/items/weapons/holy_weapons.dm
@@ -122,6 +122,12 @@
damtype = BURN
attack_verb = list("punched", "cross countered", "pummeled")
+/obj/item/nullrod/godhand/customised_abstract_text()
+ if(!ishuman(loc))
+ return
+ var/mob/living/carbon/human/owner = loc
+ return "[owner.p_their(TRUE)] [owner.l_hand == src ? "left hand" : "right hand"] is burning in holy fire."
+
/obj/item/nullrod/staff
name = "red holy staff"
desc = "It has a mysterious, protective aura."
@@ -429,6 +435,12 @@
w_class = WEIGHT_CLASS_HUGE
sharp = TRUE
+/obj/item/nullrod/armblade/customised_abstract_text()
+ if(!ishuman(loc))
+ return
+ var/mob/living/carbon/human/owner = loc
+ return "[owner.p_their(TRUE)] [owner.l_hand == src ? "left arm" : "right arm"] has been turned into a grotesque meat-blade."
+
/obj/item/nullrod/armblade/mining
flags = NODROP
reskin_selectable = FALSE //So 2 of the same nullrod doesnt show up.
diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm
index f5632d29db9..f4e1ffcc2b8 100644
--- a/code/game/objects/items/weapons/twohanded.dm
+++ b/code/game/objects/items/weapons/twohanded.dm
@@ -749,6 +749,12 @@
STOP_PROCESSING(SSobj, src)
return ..()
+/obj/item/pyro_claws/customised_abstract_text()
+ if(!ishuman(loc))
+ return
+ var/mob/living/carbon/human/owner = loc
+ return "[owner.p_they(TRUE)] [owner.p_have(FALSE)] energy claws extending [owner.p_their(FALSE)] wrists."
+
/obj/item/pyro_claws/process()
lifetime -= 2 SECONDS
if(lifetime <= 0)
diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm
index 6381788c97b..a112f6d01c4 100644
--- a/code/modules/antagonists/changeling/powers/mutations.dm
+++ b/code/modules/antagonists/changeling/powers/mutations.dm
@@ -160,6 +160,12 @@
var/obj/machinery/computer/C = target
C.attack_alien(user) //muh copypasta
+/obj/item/melee/arm_blade/customised_abstract_text()
+ if(!ishuman(loc))
+ return
+ var/mob/living/carbon/human/owner = loc
+ return "[owner.p_their(TRUE)] [owner.l_hand == src ? "left arm" : "right arm"] has been turned into a grotesque meat-blade."
+
/***************************************\
|***********COMBAT TENTACLES*************|
\***************************************/
@@ -201,6 +207,12 @@
throw_speed = 0
var/datum/action/changeling/weapon/parent_action
+/obj/item/gun/magic/tentacle/customised_abstract_text()
+ if(!ishuman(loc))
+ return
+ var/mob/living/carbon/human/owner = loc
+ return "[owner.p_their(TRUE)] [owner.l_hand == src ? "left arm" : "right arm"] has been turned into a grotesque tentacle."
+
/obj/item/gun/magic/tentacle/Initialize(mapload, silent, new_parent_action)
. = ..()
parent_action = new_parent_action
diff --git a/code/modules/antagonists/vampire/vampire_powers/hemomancer_powers.dm b/code/modules/antagonists/vampire/vampire_powers/hemomancer_powers.dm
index 56d6fd41f73..9bde4fb3a18 100644
--- a/code/modules/antagonists/vampire/vampire_powers/hemomancer_powers.dm
+++ b/code/modules/antagonists/vampire/vampire_powers/hemomancer_powers.dm
@@ -68,6 +68,12 @@
parent_spell = null
return ..()
+/obj/item/vamp_claws/customised_abstract_text()
+ if(!ishuman(loc))
+ return
+ var/mob/living/carbon/human/owner = loc
+ return "[owner.p_they(TRUE)] [owner.p_have(FALSE)] bloodied claws extending from [owner.p_their(FALSE)] wrists."
+
/obj/item/vamp_claws/afterattack(atom/target, mob/user, proximity)
if(!proximity)
return
diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm
index ecc2e693862..f9991c2e714 100644
--- a/code/modules/mob/living/carbon/examine.dm
+++ b/code/modules/mob/living/carbon/examine.dm
@@ -125,6 +125,8 @@
// All the things wielded/worn that can be reasonably described with a common template:
var/list/message_parts = examine_visible_clothing(skipgloves, skipsuitstorage, skipjumpsuit, skipshoes, skipmask, skipears, skipeyes, skipface)
+ var/list/abstract_items = list()
+
for(var/parts in message_parts)
var/action = parts[1]
var/obj/item/item = parts[2]
@@ -134,20 +136,23 @@
if(length(parts) >= 5)
accessories = parts[5]
- if(item && !(item.flags & ABSTRACT))
- var/item_words = item.name
- if(item.blood_DNA)
- item_words = "[item.blood_color != "#030303" ? "blood-stained" : "oil-stained"] [item_words]"
- var/submsg = "[p_they(TRUE)] [action] [bicon(item)] \a [item_words]"
- if(accessories)
- submsg += " with [accessories]"
- if(limb_name)
- submsg += " [preposition] [p_their()] [limb_name]"
- if(item.blood_DNA)
- submsg = "[submsg]!\n"
+ if(item)
+ if(item.flags & ABSTRACT)
+ abstract_items |= item
else
- submsg = "[submsg].\n"
- msg += submsg
+ var/item_words = item.name
+ if(item.blood_DNA)
+ item_words = "[item.blood_color != "#030303" ? "blood-stained" : "oil-stained"] [item_words]"
+ var/submsg = "[p_they(TRUE)] [action] [bicon(item)] \a [item_words]"
+ if(accessories)
+ submsg += " with [accessories]"
+ if(limb_name)
+ submsg += " [preposition] [p_their()] [limb_name]"
+ if(item.blood_DNA)
+ submsg = "[submsg]!\n"
+ else
+ submsg = "[submsg].\n"
+ msg += submsg
else
// add any extra info on the limbs themselves
msg += examine_handle_individual_limb(limb_name)
@@ -170,6 +175,12 @@
else
msg += "[p_they(TRUE)] [p_are()] [bicon(legcuffed)] legcuffed!\n"
+ for(var/obj/item/abstract_item in abstract_items)
+ var/text = abstract_item.customised_abstract_text()
+ if(!text)
+ continue
+ msg += "[text]\n"
+
//Jitters
switch(AmountJitter())
if(600 SECONDS to INFINITY)
diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm
index 65a98fed5d9..a085a613f57 100644
--- a/code/modules/surgery/organs/augments_arms.dm
+++ b/code/modules/surgery/organs/augments_arms.dm
@@ -484,6 +484,11 @@
var/disabled = FALSE
var/force_when_disabled = 5 //still basically a metal pipe, just hard to move
+/obj/item/shield/v1_arm/customised_abstract_text()
+ if(!ishuman(loc))
+ return
+ var/mob/living/carbon/human/owner = loc
+ return "[owner.p_their(TRUE)] [owner.l_hand == src ? "left arm" : "right arm"] is covered in metal."
/obj/item/shield/v1_arm/emp_act(severity)
if(disabled)