Merge pull request #20698 from ChangelingRain/imtransandthisisapresenttoyall

Adds some pronoun helpers
This commit is contained in:
Cheridan
2016-09-29 12:41:27 -05:00
committed by GitHub
25 changed files with 299 additions and 119 deletions
+166
View File
@@ -0,0 +1,166 @@
//pronoun procs, for getting pronouns without using the text macros that only work in certain positions
//datums don't have gender, but most of their subtypes do!
/datum/proc/they_pronoun(capitalized, temp_gender)
. = "it"
if(capitalized)
. = capitalize(.)
/datum/proc/their_pronoun(capitalized, temp_gender)
. = "its"
if(capitalized)
. = capitalize(.)
/datum/proc/them_pronoun(capitalized, temp_gender)
. = "it"
if(capitalized)
. = capitalize(.)
/datum/proc/get_has(temp_gender)
. = "has"
/datum/proc/get_is(temp_gender)
. = "is"
//like clients, which do have gender.
/client/they_pronoun(capitalized, temp_gender)
if(!temp_gender)
temp_gender = gender
. = "they"
switch(temp_gender)
if(FEMALE)
. = "she"
if(MALE)
. = "he"
if(capitalized)
. = capitalize(.)
/client/their_pronoun(capitalized, temp_gender)
if(!temp_gender)
temp_gender = gender
. = "their"
switch(temp_gender)
if(FEMALE)
. = "her"
if(MALE)
. = "his"
if(capitalized)
. = capitalize(.)
/client/them_pronoun(capitalized, temp_gender)
if(!temp_gender)
temp_gender = gender
. = "them"
switch(temp_gender)
if(FEMALE)
. = "her"
if(MALE)
. = "him"
if(capitalized)
. = capitalize(.)
/client/get_has(temp_gender)
if(!temp_gender)
temp_gender = gender
. = "has"
if(temp_gender == PLURAL || temp_gender == NEUTER)
. = "have"
/client/get_is(temp_gender)
if(!temp_gender)
temp_gender = gender
. = "is"
if(temp_gender == PLURAL || temp_gender == NEUTER)
. = "are"
//mobs(and atoms but atoms don't really matter write your own proc overrides) also have gender!
/mob/they_pronoun(capitalized, temp_gender)
if(!temp_gender)
temp_gender = gender
. = "it"
switch(temp_gender)
if(FEMALE)
. = "she"
if(MALE)
. = "he"
if(PLURAL)
. = "they"
if(capitalized)
. = capitalize(.)
/mob/their_pronoun(capitalized, temp_gender)
if(!temp_gender)
temp_gender = gender
. = "its"
switch(temp_gender)
if(FEMALE)
. = "her"
if(MALE)
. = "his"
if(PLURAL)
. = "their"
if(capitalized)
. = capitalize(.)
/mob/them_pronoun(capitalized, temp_gender)
if(!temp_gender)
temp_gender = gender
. = "it"
switch(temp_gender)
if(FEMALE)
. = "her"
if(MALE)
. = "him"
if(PLURAL)
. = "them"
if(capitalized)
. = capitalize(.)
/mob/get_has(temp_gender)
if(!temp_gender)
temp_gender = gender
. = "has"
if(temp_gender == PLURAL)
. = "have"
/mob/get_is(temp_gender)
if(!temp_gender)
temp_gender = gender
. = "is"
if(temp_gender == PLURAL)
. = "are"
//humans need special handling, because they can have their gender hidden
/mob/living/carbon/human/they_pronoun(capitalized, temp_gender)
var/list/obscured = check_obscured_slots()
var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
if((slot_w_uniform in obscured) && skipface)
temp_gender = PLURAL
return ..()
/mob/living/carbon/human/their_pronoun(capitalized, temp_gender)
var/list/obscured = check_obscured_slots()
var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
if((slot_w_uniform in obscured) && skipface)
temp_gender = PLURAL
return ..()
/mob/living/carbon/human/them_pronoun(capitalized, temp_gender)
var/list/obscured = check_obscured_slots()
var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
if((slot_w_uniform in obscured) && skipface)
temp_gender = PLURAL
return ..()
/mob/living/carbon/human/get_has(temp_gender)
var/list/obscured = check_obscured_slots()
var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
if((slot_w_uniform in obscured) && skipface)
temp_gender = PLURAL
return ..()
/mob/living/carbon/human/get_is(temp_gender)
var/list/obscured = check_obscured_slots()
var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
if((slot_w_uniform in obscured) && skipface)
temp_gender = PLURAL
return ..()
+2 -2
View File
@@ -61,7 +61,7 @@
..()
/datum/status_effect/vanguard_shield/on_apply()
owner.add_stun_absorption("vanguard", 200, 1, "'s yellow aura momentarily intensifies!", "Your ward absorbs the stun!", " is radiating with a soft yellow light!")
owner.add_stun_absorption("vanguard", 200, 1, "'s yellow aura momentarily intensifies!", "Your ward absorbs the stun!", " radiating with a soft yellow light!")
owner.visible_message("<span class='warning'>[owner] begins to faintly glow!</span>", "<span class='brass'>You will absorb all stuns for the next twenty seconds.</span>")
/datum/status_effect/vanguard_shield/on_remove()
@@ -102,7 +102,7 @@
owner.visible_message("<span class='warning'>[owner] shines with azure light!</span>", "<span class='notice'>You feel Inath-neq's power flow through you! You're invincible!</span>")
owner.color = "#1E8CE1"
owner.fully_heal()
owner.add_stun_absorption("inathneq", 150, 2, "'s flickering blue aura momentarily intensifies!", "Inath-neq's power absorbs the stun!", " is glowing with a flickering blue light!")
owner.add_stun_absorption("inathneq", 150, 2, "'s flickering blue aura momentarily intensifies!", "Inath-neq's power absorbs the stun!", " glowing with a flickering blue light!")
owner.status_flags |= GODMODE
animate(owner, color = initial(owner.color), time = 150, easing = EASE_IN)
playsound(owner, 'sound/magic/Ethereal_Enter.ogg', 50, 1)
@@ -1,6 +1,7 @@
/mob/living/simple_animal/hostile/clockwork
faction = list("ratvar")
gender = NEUTER
icon = 'icons/mob/clockwork_mobs.dmi'
unique_name = 1
minbodytemp = 0
@@ -31,6 +32,22 @@
..()
src << playstyle_string
/mob/living/simple_animal/hostile/clockwork/examine(mob/user)
var/t_He = they_pronoun(TRUE)
var/plurality = (gender == PLURAL)
var/msg = "<span class='brass'>*---------*\nThis is \icon[src] \a <b>[src]</b>!\n"
msg += "[desc]\n"
if(health < maxHealth)
msg += "<span class='warning'>"
if (src.health >= src.maxHealth/2)
msg += "[t_He] look[plurality ? "":"s"] slightly dented.\n"
else
msg += "<b>[t_He] look[plurality ? "":"s"] severely dented!</b>\n"
msg += "</span>"
msg += "*---------*</span>"
user << msg
/mob/living/simple_animal/hostile/clockwork/fragment //Anima fragment: Low health and high melee damage, but slows down when struck. Created by inserting a soul vessel into an empty fragment.
name = "anima fragment"
desc = "An ominous humanoid shell with a spinning cogwheel as its head, lifted by a jet of blazing red flame."
@@ -206,14 +206,15 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed
/datum/clockwork_scripture/channeled/belligerent/chant_effects(chant_number)
for(var/mob/living/carbon/C in hearers(7, invoker))
if(!is_servant_of_ratvar(C) && !C.null_rod_check() && C.get_num_legs()) //you have legs right
var/number_legs = C.get_num_legs()
if(!is_servant_of_ratvar(C) && !C.null_rod_check() && number_legs) //you have legs right
C.apply_damage(noncultist_damage * 0.5, BURN, "l_leg")
C.apply_damage(noncultist_damage * 0.5, BURN, "r_leg")
if(C.m_intent != "walk")
if(!iscultist(C))
C << "<span class='warning'>Your legs shiver with pain!</span>"
C << "<span class='warning'>Your leg[number_legs > 1 ? "s shiver":" shivers"] with pain!</span>"
else //Cultists take extra burn damage
C << "<span class='warning'>Your legs burn with pain!</span>"
C << "<span class='warning'>Your leg[number_legs > 1 ? "s burn":" burns"] with pain!</span>"
C.apply_damage(cultist_damage * 0.5, BURN, "l_leg")
C.apply_damage(cultist_damage * 0.5, BURN, "r_leg")
C.m_intent = "walk"
@@ -300,7 +301,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed
for(var/i in 1 to healseverity)
PoolOrNew(/obj/effect/overlay/temp/heal, list(targetturf, "#1E8CE1"))
invoker << "<span class='brass'>You bathe [L] in Inath-neq's power!</span>"
L.visible_message("<span class='warning'>A blue light washes over [L], mending their bruises and burns!</span>", \
L.visible_message("<span class='warning'>A blue light washes over [L], mending [L.their_pronoun()] bruises and burns!</span>", \
"<span class='heavy_brass'>You feel Inath-neq's power healing your wounds, but a deep nausea overcomes you!</span>")
playsound(targetturf, 'sound/magic/Staff_Healing.ogg', 50, 1)
return 1
@@ -824,7 +825,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed
return create_marauder()
/datum/clockwork_scripture/memory_allocation/proc/create_marauder()
invoker.visible_message("<span class='warning'>A yellow tendril appears from [invoker]'s [slab.name] and impales itself in their forehead!</span>", \
invoker.visible_message("<span class='warning'>A yellow tendril appears from [invoker]'s [slab.name] and impales itself in [invoker.their_pronoun()] forehead!</span>", \
"<span class='heavy_brass'>A tendril flies from [slab] into your forehead. You begin waiting while it painfully rearranges your thought pattern...</span>")
invoker.notransform = TRUE //Vulnerable during the process
slab.busy = "Thought modification in process"
@@ -1054,7 +1055,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed
/datum/clockwork_scripture/invoke_sevtug/check_special_requirements()
if(!slab.no_cost && clockwork_generals_invoked["sevtug"] > world.time)
invoker << "<span class='sevtug'>\"[text2ratvar("Is it really so hard - even for a simpleton like you - to grasp the concept-of waiting?")]\"</span>\n\
invoker << "<span class='sevtug'>\"[text2ratvar("Is it really so hard - even for a simpleton like you - to grasp the concept of waiting?")]\"</span>\n\
<span class='warning'>Sevtug has already been invoked recently! You must wait several minutes before calling upon the Formless Pariah.</span>"
return 0
if(!slab.no_cost && ratvar_awakens)
@@ -42,19 +42,21 @@
..()
desc = initial(desc)
if(takes_damage)
var/servant_message = "It is at <b>[health]/[max_health]</b> integrity"
var/other_message = "It seems pristine and undamaged"
var/t_It = they_pronoun(TRUE)
var/t_is = get_is()
var/servant_message = "[t_It] [t_is] at <b>[health]/[max_health]</b> integrity"
var/other_message = "[t_It] seems pristine and undamaged"
var/heavily_damaged = FALSE
var/healthpercent = (health/max_health) * 100
if(healthpercent >= 100)
other_message = "It seems pristine and undamaged"
other_message = "[t_It] seems pristine and undamaged"
else if(healthpercent >= 50)
other_message = "It looks slightly dented"
other_message = "[t_It] looks slightly dented"
else if(healthpercent >= 25)
other_message = "It appears heavily damaged"
other_message = "[t_It] appears heavily damaged"
heavily_damaged = TRUE
else if(healthpercent >= 0)
other_message = "It's falling apart"
other_message = "[t_It] [t_is] falling apart"
heavily_damaged = TRUE
user << "<span class='[heavily_damaged ? "alloy":"brass"]'>[can_see_clockwork ? "[servant_message]":"[other_message]"][heavily_damaged ? "!":"."]</span>"
@@ -130,7 +132,7 @@
return 1
else if(istype(I, /obj/item/clockwork/daemon_shell))
var/component_type
switch(alert(user, "Will this daemon produce a specific type of component or produce randomly?.", , "Specific Type", "Random Component"))
switch(alert(user, "Will this daemon produce a specific type of component or produce randomly?", , "Specific Type", "Random Component"))
if("Specific Type")
component_type = get_component_id(input(user, "Choose a component type.", name) as null|anything in list("Belligerent Eye", "Vanguard Cogwheel", "Guvax Capacitor", "Replicant Alloy", "Hierophant Ansible"))
if(!component_type)
@@ -929,7 +931,7 @@
var/obj/effect/overlay/temp/ratvar/sigil/vitality/V = PoolOrNew(/obj/effect/overlay/temp/ratvar/sigil/vitality, get_turf(src))
animate(V, alpha = 0, transform = matrix()*2, time = 8)
playsound(L, 'sound/magic/WandODeath.ogg', 50, 1)
L.visible_message("<span class='warning'>[L] collapses in on themself as [src] flares bright blue!</span>")
L.visible_message("<span class='warning'>[L] collapses in on [L.them_pronoun()]self as [src] flares bright blue!</span>")
L << "<span class='inathneq_large'>\"[text2ratvar("Your life will not be wasted.")]\"</span>"
for(var/obj/item/W in L)
L.unEquip(W)
@@ -957,7 +959,7 @@
ghost.reenter_corpse()
L.revive(1, 1)
playsound(L, 'sound/magic/Staff_Healing.ogg', 50, 1)
L.visible_message("<span class='warning'>[L] suddenly gets back up, their mouth dripping blue ichor!</span>", \
L.visible_message("<span class='warning'>[L] suddenly gets back up, [L.their_pronoun()] mouth dripping blue ichor!</span>", \
"<span class='inathneq'>\"[text2ratvar("You will be okay, child.")]\"</span>")
vitality -= revival_cost
break
+11 -9
View File
@@ -10,24 +10,26 @@
var/can_see_cult = iscultist(user) || isobserver(user)
..()
if(takes_damage)
var/cultist_message = "It is at <b>[health]/[max_health]</b> stability"
var/other_message = "It seems extremely stable"
var/t_It = they_pronoun(TRUE)
var/t_is = get_is()
var/cultist_message = "[t_It] [t_is] at <b>[health]/[max_health]</b> stability"
var/other_message = "[t_It] seems extremely stable"
var/heavily_damaged = FALSE
var/healthpercent = (health/max_health) * 100
if(healthpercent >= 100)
other_message = "It seems extremely stable"
other_message = "[t_It] seems extremely stable"
else if(healthpercent >= 50)
other_message = "It looks slightly unstable"
other_message = "[t_It] looks slightly unstable"
else if(healthpercent >= 25)
other_message = "It appears very unstable"
other_message = "[t_It] appears very unstable"
heavily_damaged = TRUE
else if(healthpercent >= 0)
other_message = "It's glowing faintly and is extremely unstable"
other_message = "[t_It] [t_is] glowing faintly and is extremely unstable"
heavily_damaged = TRUE
user << "<span class='cult'>[heavily_damaged ? "<b>":""][can_see_cult ? "[cultist_message]":"[other_message]"][heavily_damaged ? "!</b>":"."]</span>"
user << "<span class='notice'>\The [src] is [anchored ? "":"not "]secured to the floor.</span>"
if(can_see_cult && cooldowntime > world.time)
user << "<span class='cultitalic'>The magic in [src] is weak, it will be ready to use again in [getETA()].</span>"
user << "<span class='cultitalic'>The magic in [src] is too weak, [they_pronoun()] will be ready to use again in [getETA()].</span>"
/obj/structure/destructible/cult/attack_animal(mob/living/simple_animal/M)
if(istype(M, /mob/living/simple_animal/hostile/construct/builder))
@@ -35,9 +37,9 @@
health = min(max_health, health + 5)
Beam(M, icon_state="sendbeam", time=4)
M.visible_message("<span class='danger'>[M] repairs \the <b>[src]</b>.</span>", \
"<span class='cult'>You repair <b>[src]</b>, leaving it at <b>[health]/[max_health]</b> stability.</span>")
"<span class='cult'>You repair <b>[src]</b>, leaving [they_pronoun()] at <b>[health]/[max_health]</b> stability.</span>")
else
M << "<span class='cult'>You cannot repair [src], as it is undamaged!</span>"
M << "<span class='cult'>You cannot repair [src], as [they_pronoun()] [get_is()] undamaged!</span>"
else
..()
+5 -5
View File
@@ -392,7 +392,7 @@ var/list/teleport_runes = list()
convertee.adjustBruteLoss(-(brutedamage * 0.75))
convertee.adjustFireLoss(-(burndamage * 0.75))
convertee.visible_message("<span class='warning'>[convertee] writhes in pain \
[brutedamage || burndamage ? "even as their wounds heal and close" : "as the markings below them glow a bloody red"]!</span>", \
[brutedamage || burndamage ? "even as [convertee.their_pronoun()] wounds heal and close" : "as the markings below [convertee.them_pronoun()] glow a bloody red"]!</span>", \
"<span class='cultlarge'><i>AAAAAAAAAAAAAA-</i></span>")
ticker.mode.add_cultist(convertee.mind, 1)
new /obj/item/weapon/tome(get_turf(src))
@@ -572,7 +572,7 @@ var/list/teleport_runes = list()
mob_to_revive.revive(1, 1) //This does remove disabilities and such, but the rune might actually see some use because of it!
mob_to_revive.grab_ghost()
mob_to_revive << "<span class='cultlarge'>\"PASNAR SAVRAE YAM'TOTH. Arise.\"</span>"
mob_to_revive.visible_message("<span class='warning'>[mob_to_revive] draws in a huge breath, red light shining from their eyes.</span>", \
mob_to_revive.visible_message("<span class='warning'>[mob_to_revive] draws in a huge breath, red light shining from [mob_to_revive.their_pronoun()] eyes.</span>", \
"<span class='cultlarge'>You awaken suddenly from the void. You're alive!</span>")
rune_in_use = 0
@@ -687,11 +687,11 @@ var/list/teleport_runes = list()
return
affecting.apply_damage(0.1, BRUTE)
if(!(user in T))
user.visible_message("<span class='warning'>A spectral tendril wraps around [user] and pulls them back to the rune!</span>")
user.visible_message("<span class='warning'>A spectral tendril wraps around [user] and pulls [user.them_pronoun()] back to the rune!</span>")
Beam(user,icon_state="drainbeam",time=2)
user.forceMove(get_turf(src)) //NO ESCAPE :^)
if(user.key)
user.visible_message("<span class='warning'>[user] slowly relaxes, the glow around them dimming.</span>", \
user.visible_message("<span class='warning'>[user] slowly relaxes, the glow around [user.them_pronoun()] dimming.</span>", \
"<span class='danger'>You are re-united with your physical form. [src] releases its hold over you.</span>")
user.color = initial(user.color)
user.Weaken(3)
@@ -754,7 +754,7 @@ var/list/wall_runes = list()
update_state()
if(density)
spread_density()
user.visible_message("<span class='warning'>[user] [iscarbon(user) ? "places their hands on":"stares intently at"] [src], and [density ? "the air above it begins to shimmer" : "the shimmer above it fades"].</span>", \
user.visible_message("<span class='warning'>[user] [iscarbon(user) ? "places [user.their_pronoun()] hands on":"stares intently at"] [src], and [density ? "the air above it begins to shimmer" : "the shimmer above it fades"].</span>", \
"<span class='cultitalic'>You channel your life energy into [src], [density ? "temporarily preventing" : "allowing"] passage above it.</span>")
if(iscarbon(user))
var/mob/living/carbon/C = user
+29 -22
View File
@@ -1,78 +1,85 @@
/mob/living/carbon/examine(mob/user)
var/t_He = they_pronoun(TRUE)
var/t_His = their_pronoun(TRUE)
var/t_his = their_pronoun()
var/t_him = them_pronoun()
var/t_has = get_has()
var/t_is = get_is()
var/msg = "<span class='info'>*---------*\nThis is \icon[src] \a <EM>[src]</EM>!\n"
if (handcuffed)
msg += "<span class='warning'>It is \icon[src.handcuffed] handcuffed!</span>\n"
msg += "<span class='warning'>[t_He] [t_is] \icon[src.handcuffed] handcuffed!</span>\n"
if (head)
msg += "It has \icon[src.head] \a [src.head] on its head. \n"
msg += "[t_He] [t_is] wearing \icon[src.head] \a [src.head] on [t_his] head. \n"
if (wear_mask)
msg += "It has \icon[src.wear_mask] \a [src.wear_mask] on its face.\n"
msg += "[t_He] [t_is] wearing \icon[src.wear_mask] \a [src.wear_mask] on [t_his] face.\n"
for(var/obj/item/I in held_items)
if(!(I.flags & ABSTRACT))
if(I.blood_DNA)
msg += "<span class='warning'>It has \icon[I] [I.gender==PLURAL?"some":"a"] blood-stained [I.name] in its [get_held_index_name(get_held_index_of_item(I))]!</span>\n"
msg += "<span class='warning'>[t_He] [t_is] holding \icon[I] [I.gender==PLURAL?"some":"a"] blood-stained [I.name] in [t_his] [get_held_index_name(get_held_index_of_item(I))]!</span>\n"
else
msg += "It has \icon[I] \a [I] in its [get_held_index_name(get_held_index_of_item(I))].\n"
msg += "[t_He] [t_is] holding \icon[I] \a [I] in [t_his] [get_held_index_name(get_held_index_of_item(I))].\n"
if (back)
msg += "It has \icon[src.back] \a [src.back] on its back.\n"
msg += "[t_He] [t_has] \icon[src.back] \a [src.back] on [t_his] back.\n"
var/appears_dead = 0
if (stat == DEAD)
appears_dead = 1
if(getorgan(/obj/item/organ/brain))
msg += "<span class='deadsay'>It is limp and unresponsive, with no signs of life.</span>\n"
msg += "<span class='deadsay'>[t_He] [t_is] limp and unresponsive, with no signs of life.</span>\n"
else if(get_bodypart("head"))
msg += "<span class='deadsay'>It appears that it's brain is missing...</span>\n"
msg += "<span class='deadsay'>[t_He] appears that [t_his] brain is missing...</span>\n"
var/list/missing = get_missing_limbs()
for(var/t in missing)
if(t=="head")
msg += "<span class='deadsay'><B>Its [parse_zone(t)] is missing!</B></span>\n"
msg += "<span class='deadsay'><B>[t_His] [parse_zone(t)] is missing!</B></span>\n"
continue
msg += "<<span class='warning'><B>Its [parse_zone(t)] is missing!</B></span>\n"
msg += "<<span class='warning'><B>[t_His] [parse_zone(t)] is missing!</B></span>\n"
msg += "<span class='warning'>"
var/temp = getBruteLoss()
if(temp)
if (temp < 30)
msg += "It has minor bruising.\n"
msg += "[t_He] [t_has] minor bruising.\n"
else
msg += "<B>It has severe bruising!</B>\n"
msg += "<B>[t_He] [t_has] severe bruising!</B>\n"
temp = getFireLoss()
if(temp)
if (temp < 30)
msg += "It has minor burns.\n"
msg += "[t_He] [t_has] minor burns.\n"
else
msg += "<B>It has severe burns!</B>\n"
msg += "<B>[t_He] [t_has] severe burns!</B>\n"
temp = getCloneLoss()
if(temp)
if(getCloneLoss() < 30)
msg += "It is slightly deformed.\n"
msg += "[t_He] [t_has] slightly deformed.\n"
else
msg += "<b>It is severely deformed.</b>\n"
msg += "<b>[t_He] [t_has] severely deformed.</b>\n"
if(getBrainLoss() > 60)
msg += "It seems to be clumsy and unable to think.\n"
msg += "[t_He] seems to be clumsy and unable to think.\n"
if(fire_stacks > 0)
msg += "It's covered in something flammable.\n"
msg += "[t_He] [t_is] covered in something flammable.\n"
if(fire_stacks < 0)
msg += "It's soaked in water.\n"
msg += "[t_He] [t_is] looks a little soaked.\n"
if(pulledby && pulledby.grab_state)
msg += "It's restrained by [pulledby]'s grip.\n"
msg += "[t_He] [t_is] restrained by [pulledby]'s grip.\n"
msg += "</span>"
if(!appears_dead)
if(stat == UNCONSCIOUS)
msg += "It isn't responding to anything around it; it seems to be asleep.\n"
msg += "[t_He] [t_is]n't responding to anything around [t_him] and seems to be asleep.\n"
if(digitalcamo)
msg += "It is moving its body in an unnatural and blatantly unsimian manner.\n"
msg += "[t_He] [t_is] moving [t_his] body in an unnatural and blatantly unsimian manner.\n"
+14 -33
View File
@@ -1,36 +1,17 @@
/mob/living/carbon/human/examine(mob/user)
//this is very slightly better than it was because you can use it more places. still can't do \his[src] though.
var/t_He = they_pronoun(TRUE)
var/t_His = their_pronoun(TRUE)
var/t_his = their_pronoun()
var/t_him = them_pronoun()
var/t_has = get_has()
var/t_is = get_is()
var/msg = "<span class='info'>*---------*\nThis is <EM>[src.name]</EM>!\n"
var/list/obscured = check_obscured_slots()
var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
// crappy hacks because you can't do \his[src] etc. I'm sorry this proc is so unreadable, blame the text macros :<
var/t_He = "It" //capitalised for use at the start of each line.
var/t_his = "its"
var/t_him = "it"
var/t_has = "has"
var/t_is = "is"
var/msg = "<span class='info'>*---------*\nThis is "
if( (slot_w_uniform in obscured) && skipface ) //big suits/masks/helmets make it hard to tell their gender
t_He = "They"
t_his = "their"
t_him = "them"
t_has = "have"
t_is = "are"
else
switch(gender)
if(MALE)
t_He = "He"
t_his = "his"
t_him = "him"
if(FEMALE)
t_He = "She"
t_his = "her"
t_him = "her"
msg += "<EM>[src.name]</EM>!\n"
//uniform
if(w_uniform && !(slot_w_uniform in obscured))
//Ties
@@ -163,7 +144,7 @@
if(suiciding)
msg += "<span class='warning'>[t_He] appears to have commited suicide... there is no hope of recovery.</span>\n"
if(hellbound)
msg += "<span class='warning'>[t_his] soul seems to have been ripped out of [t_his] body. Revival is impossible.</span>\n"
msg += "<span class='warning'>[t_His] soul seems to have been ripped out of [t_his] body. Revival is impossible.</span>\n"
msg += "<span class='deadsay'>[t_He] [t_is] limp and unresponsive; there are no signs of life"
if(!key)
var/foundghost = 0
@@ -196,7 +177,7 @@
var/r_limbs_missing = 0
for(var/t in missing)
if(t=="head")
msg += "<span class='deadsay'><B>[capitalize(t_his)] [parse_zone(t)] is missing!</B><span class='warning'>\n"
msg += "<span class='deadsay'><B>[t_His] [parse_zone(t)] is missing!</B><span class='warning'>\n"
continue
if(t == "l_arm" || t == "l_leg")
l_limbs_missing++
@@ -267,9 +248,9 @@
if(islist(stun_absorption))
for(var/i in stun_absorption)
if(stun_absorption[i]["end_time"] > world.time && stun_absorption[i]["examine_message"])
msg += "[t_He][stun_absorption[i]["examine_message"]]\n"
msg += "[t_He] [t_is][stun_absorption[i]["examine_message"]]\n"
if(drunkenness && !skipface && stat != DEAD) //Drunkenness
if(drunkenness && !skipface && !appears_dead) //Drunkenness
switch(drunkenness)
if(11 to 21)
msg += "[t_He] [t_is] slightly flushed.\n"
@@ -305,7 +286,7 @@
if(digitalcamo)
msg += "[t_He] [t_is] moving [t_his] body in an unnatural and blatantly inhuman manner.\n"
if(istype(user, /mob/living/carbon/human))
if(ishuman(user))
var/mob/living/carbon/human/H = user
var/obj/item/organ/cyberimp/eyes/hud/CIH = H.getorgan(/obj/item/organ/cyberimp/eyes/hud)
if(istype(H.glasses, /obj/item/clothing/glasses/hud) || CIH)
@@ -496,7 +496,7 @@
. = 0
if(!. && error_msg && user)
// Might need re-wording.
user << "<span class='alert'>There is no exposed flesh or thin material [above_neck(target_zone) ? "on their head" : "on their body"].</span>"
user << "<span class='alert'>There is no exposed flesh or thin material [above_neck(target_zone) ? "on [their_pronoun()] head" : "on [their_pronoun()] body"].</span>"
/mob/living/carbon/human/proc/check_obscured_slots()
var/list/obscured = list()
@@ -521,7 +521,7 @@
if(wear_mask.flags_inv & HIDEEYES)
obscured |= slot_glasses
if(obscured.len > 0)
if(obscured.len)
return obscured
else
return null
@@ -630,7 +630,7 @@
src << "<span class='warning'>Remove your mask first!</span>"
return 0
if(C.is_mouth_covered())
src << "<span class='warning'>Remove their mask first!</span>"
src << "<span class='warning'>Remove [their_pronoun()] mask first!</span>"
return 0
if(C.cpr_time < world.time + 30)
@@ -889,7 +889,7 @@
if(blood && (NOBLOOD in dna.species.specflags))
if(message)
visible_message("<span class='warning'>[src] dry heaves!</span>", \
"<span class='userdanger'>You try to throw up, but there's nothing your stomach!</span>")
"<span class='userdanger'>You try to throw up, but there's nothing in your stomach!</span>")
if(stun)
Weaken(10)
return 1
@@ -59,13 +59,13 @@
watching -= eavesdropping
var/rendered
whispers = critical ? "whispers something in their final breath." : "whispers something."
whispers = critical ? "whispers something in [their_pronoun()] final breath." : "whispers something."
rendered = "<span class='game say'><span class='name'>[src.name]</span> [whispers]</span>"
for(var/mob/M in watching)
M.show_message(rendered, 2)
var/spans = list(SPAN_ITALICS)
whispers = critical ? "whispers in their final breath" : "whispers"
whispers = critical ? "whispers in [their_pronoun()] final breath" : "whispers"
rendered = "<span class='game say'><span class='name'>[GetVoice()]</span>[alt_name] [whispers], <span class='message'>\"[attach_spans(message, spans)]\"</span></span>"
for(var/atom/movable/AM in listening)
@@ -38,13 +38,16 @@
AddSpell(new spell(null))
/mob/living/simple_animal/hostile/construct/examine(mob/user)
var/msg = "<span cass='info'>*---------*\nThis is \icon[src] \a <b>[src]</b>!\n"
if (src.health < src.maxHealth)
var/t_He = they_pronoun(TRUE)
var/plurality = (gender == PLURAL)
var/msg = "<span class='cult'>*---------*\nThis is \icon[src] \a <b>[src]</b>!\n"
msg += "[desc]\n"
if(health < maxHealth)
msg += "<span class='warning'>"
if (src.health >= src.maxHealth/2)
msg += "It looks slightly dented.\n"
msg += "[t_He] look[plurality ? "":"s"] slightly dented.\n"
else
msg += "<b>It looks severely dented!</b>\n"
msg += "<b>[t_He] look[plurality ? "":"s"] severely dented!</b>\n"
msg += "</span>"
msg += "*---------*</span>"
@@ -59,11 +62,11 @@
M.visible_message("<span class='danger'>[M] repairs some of \the <b>[src]'s</b> dents.</span>", \
"<span class='cult'>You repair some of <b>[src]'s</b> dents, leaving <b>[src]</b> at <b>[health]/[maxHealth]</b> health.</span>")
else
M.visible_message("<span class='danger'>[M] repairs some of its own dents.</span>", \
M.visible_message("<span class='danger'>[M] repairs some of [their_pronoun()] own dents.</span>", \
"<span class='cult'>You repair some of your own dents, leaving you at <b>[M.health]/[M.maxHealth]</b> health.</span>")
else
if(src != M)
M << "<span class='cult'>You cannot repair <b>[src]'s</b> dents, as it has none!</span>"
M << "<span class='cult'>You cannot repair <b>[src]'s</b> dents, as [they_pronoun()] [get_has()] none!</span>"
else
M << "<span class='cult'>You cannot repair your own dents, as you have none!</span>"
else if(src != M)
@@ -84,7 +84,7 @@
user << "<span class='notice'>You start to tighten loose screws on [src]...</span>"
if(do_after(user,80/I.toolspeed,target=user))
adjustBruteLoss(-getBruteLoss())
visible_message("<span class='notice'>[user] tightens [src == user ? "their" : "[src]'s"] loose screws!</span>", "<span class='notice'>You tighten [src == user ? "your" : "[src]'s"] loose screws.</span>")
visible_message("<span class='notice'>[user] tightens [src == user ? "[user.their_pronoun()]" : "[src]'s"] loose screws!</span>", "<span class='notice'>You tighten [src == user ? "your" : "[src]'s"] loose screws.</span>")
else
user << "<span class='warning'>You need to remain still to tighten [src]'s screws!</span>"
else
@@ -94,7 +94,7 @@
A.melee_damage_lower += 5
A.melee_damage_upper += 5
A.update_icons()
user << "<span class='info'>You strap the armor plating to [A] and sharpen their claws with the nail filer. This was a great idea.</span>"
user << "<span class='info'>You strap the armor plating to [A] and sharpen [A.their_pronoun()] claws with the nail filer. This was a great idea.</span>"
qdel(src)
@@ -2,7 +2,7 @@
name = "Shade"
real_name = "Shade"
desc = "A bound spirit"
gender = NEUTER
gender = PLURAL
icon = 'icons/mob/mob.dmi'
icon_state = "shade"
icon_living = "shade"
@@ -29,7 +29,10 @@
flying = 1
loot = list(/obj/item/weapon/ectoplasm)
del_on_death = 1
deathmessage = "lets out a contented sigh as their form unwinds."
/mob/living/simple_animal/shade/death()
deathmessage = "lets out a contented sigh as [their_pronoun()] form unwinds."
..()
/mob/living/simple_animal/shade/canSuicide()
if(istype(loc, /obj/item/device/soulstone)) //do not suicide inside the soulstone
@@ -47,7 +50,7 @@
M.visible_message("<span class='danger'>[M] heals \the <b>[src]</b>.</span>", \
"<span class='cult'>You heal <b>[src]</b>, leaving <b>[src]</b> at <b>[health]/[maxHealth]</b> health.</span>")
else
M << "<span class='cult'>You cannot heal <b>[src]</b>, as it is unharmed!</span>"
M << "<span class='cult'>You cannot heal <b>[src]</b>, as [they_pronoun()] [get_is()] unharmed!</span>"
else if(src != M)
..()
+1 -1
View File
@@ -281,5 +281,5 @@ They *could* go in their appropriate files, but this is supposed to be modular
var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, loc)
playsound(src, "sparks", 50, 1)
visible_message("<span class='danger'>[H] electrocutes [src] with their touch!</span>", "<span class='userdanger'>[H] electrocutes you with their touch!</span>")
visible_message("<span class='danger'>[H] electrocutes [src] with [H.their_pronoun()] touch!</span>", "<span class='userdanger'>[H] electrocutes you with [H.their_pronoun()] touch!</span>")
electrocute_act(25, H)
+1 -1
View File
@@ -172,7 +172,7 @@
/obj/item/weapon/paper/contract/infernal/attack(mob/M, mob/living/user)
add_fingerprint(user)
if(M == user && target == M.mind && M.mind.soulOwner != owner && attempt_signature(user, 1))
user.visible_message("<span class='danger'>[user] slices their wrist with [src], and scrawls their name in blood.</span>", "<span class='danger'>You slice your wrist open and scrawl your name in blood.</span>")
user.visible_message("<span class='danger'>[user] slices [user.their_pronoun()] wrist with [src], and scrawls [user.their_pronoun()] name in blood.</span>", "<span class='danger'>You slice your wrist open and scrawl your name in blood.</span>")
user.blood_volume = max(user.blood_volume - 100, 0)
else
return ..()
+1 -1
View File
@@ -389,7 +389,7 @@ obj/item/weapon/gun/proc/newshot()
return
if(user == target)
target.visible_message("<span class='warning'>[user] sticks [src] in their mouth, ready to pull the trigger...</span>", \
target.visible_message("<span class='warning'>[user] sticks [src] in [user.their_pronoun()] mouth, ready to pull the trigger...</span>", \
"<span class='userdanger'>You stick [src] in your mouth, ready to pull the trigger...</span>")
else
target.visible_message("<span class='warning'>[user] points [src] at [target]'s head, ready to pull the trigger...</span>", \
@@ -346,9 +346,9 @@
N.regenerate_icons()
if(prob(7))
if(N.w_uniform)
M.visible_message(pick("<b>[M]</b>'s collar pops up without warning.</span>", "<b>[M]</b> flexes their arms."))
M.visible_message(pick("<b>[M]</b>'s collar pops up without warning.</span>", "<b>[M]</b> flexes [M.their_pronoun()] arms."))
else
M.visible_message("<b>[M]</b> flexes their arms.")
M.visible_message("<b>[M]</b> [M.their_pronoun()] their arms.")
if(prob(10))
M.say(pick("Check these sweet biceps bro!", "Deal with it.", "CHUG! CHUG! CHUG! CHUG!", "Winning!", "NERDS!", "My name is John and I hate every single one of you."))
..()
@@ -370,7 +370,7 @@
/datum/reagent/unstableslimetoxin/on_mob_life(mob/living/carbon/human/H)
..()
H << "<span class='warning'><b>You crumple in agony as your flesh wildly morphs into new forms!</b></span>"
H.visible_message("<b>[H]</b> falls to the ground and screams as their skin bubbles and froths!") //'froths' sounds painful when used with SKIN.
H.visible_message("<b>[H]</b> falls to the ground and screams as [H.their_pronoun()] skin bubbles and froths!") //'froths' sounds painful when used with SKIN.
H.Weaken(3, 0)
spawn(30)
if(!H || qdeleted(H))
@@ -525,7 +525,7 @@
if(!H.heart_attack)
H.heart_attack = 1 // rip in pepperoni
if(H.stat == CONSCIOUS)
H.visible_message("<span class='userdanger'>[H] clutches at their chest as if their heart stopped!</span>")
H.visible_message("<span class='userdanger'>[H] clutches at [H.their_pronoun()] chest as if [H.their_pronoun()] heart stopped!</span>")
else
H.losebreath += 10
H.adjustOxyLoss(rand(5,25), 0)
+1 -1
View File
@@ -62,7 +62,7 @@
else if(C.is_mouth_covered(mask_only = 1))
covered = "mask"
if(covered)
var/who = (isnull(user) || eater == user) ? "your" : "their"
var/who = (isnull(user) || eater == user) ? "your" : "[eater.their_pronoun()]"
user << "<span class='warning'>You have to remove [who] [covered] first!</span>"
return 0
return 1
@@ -194,7 +194,7 @@
SM.mind.enslave_mind_to_creator(user)
SM.sentience_act()
SM << "<span class='warning'>All at once it makes sense: you know what you are and who you are! Self awareness is yours!</span>"
SM << "<span class='userdanger'>You are grateful to be self aware and owe [user] a great debt. Serve [user], and assist them in completing their goals at any cost.</span>"
SM << "<span class='userdanger'>You are grateful to be self aware and owe [user] a great debt. Serve [user], and assist [user.them_pronoun()] in completing [user.their_pronoun()] goals at any cost.</span>"
user << "<span class='notice'>[SM] accepts the potion and suddenly becomes attentive and aware. It worked!</span>"
qdel(src)
else
@@ -20,7 +20,7 @@
user << "<span class='userdanger'>No... just one more try...</span>"
user.gib()
else
user.visible_message("<span class='warning'>[user], pulls [src]'s lever with a glint in their eyes!</span>", "<span class='warning'>You feel a draining as you pull the lever, but you \
user.visible_message("<span class='warning'>[user] pulls [src]'s lever with a glint in [user.their_pronoun()] eyes!</span>", "<span class='warning'>You feel a draining as you pull the lever, but you \
know it'll be worth it.</span>")
icon_state = "slots2"
playsound(src, 'sound/lavaland/cursed_slot_machine.ogg', 50, 0)
@@ -97,7 +97,7 @@
icon_state = "magic_mirror"
/obj/structure/mirror/magic/pride/curse(mob/user)
user.visible_message("<span class='danger'><B>The ground splits beneath [user] as their hand leaves the mirror!</B></span>", \
user.visible_message("<span class='danger'><B>The ground splits beneath [user] as [user.their_pronoun()] hand leaves the mirror!</B></span>", \
"<span class='notice'>Perfect. Much better! Now <i>nobody</i> will be able to resist yo-</span>")
var/turf/T = get_turf(user)
T.ChangeTurf(/turf/open/chasm/straight_down)
+2 -5
View File
@@ -52,15 +52,12 @@
owner.revive(full_heal = TRUE)
switch(old_stat)
if(DEAD, UNCONSCIOUS)
owner.visible_message("<span class='danger'>[owner] staggers to \
their feet!</span>")
owner.visible_message("<span class='danger'>[owner] staggers to [owner.their_pronoun()] feet!</span>")
owner << "<span class='danger'>You stagger to your feet!</span>"
// Conscious conversions will generally only happen for an event
// or for a converts_living=TRUE infection
if(CONSCIOUS)
owner.visible_message("<span class='danger'>[owner] suddenly \
convulses, as they gain a ravenous hunger in their \
eyes!</span>",
owner.visible_message("<span class='danger'>[owner] suddenly convulses, as [owner.they_pronoun()] gain a ravenous hunger in [owner.their_pronoun()] eyes!</span>",
"<span class='alien'>You HUNGER!</span>")
playsound(owner.loc, 'sound/hallucinations/growl3.ogg', 50, 1)
owner.do_jitter_animation(living_transformation_time)
+1
View File
@@ -69,6 +69,7 @@
#include "code\__HELPERS\matrices.dm"
#include "code\__HELPERS\mobs.dm"
#include "code\__HELPERS\names.dm"
#include "code\__HELPERS\pronouns.dm"
#include "code\__HELPERS\radio.dm"
#include "code\__HELPERS\sanitize_values.dm"
#include "code\__HELPERS\text.dm"