Brain Traumas
This commit is contained in:
@@ -437,7 +437,7 @@
|
||||
SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Mass Braindamage")
|
||||
for(var/mob/living/carbon/human/H in GLOB.player_list)
|
||||
to_chat(H, "<span class='boldannounce'>You suddenly feel stupid.</span>")
|
||||
H.setBrainLoss(60)
|
||||
H.adjustBrainLoss(60, 80)
|
||||
message_admins("[key_name_admin(usr)] made everybody retarded")
|
||||
|
||||
if("eagles")//SCRAW
|
||||
|
||||
@@ -1221,7 +1221,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
|
||||
target.electrocution_animation(40)
|
||||
to_chat(target, "<span class='userdanger'>The gods have punished you for your sins!</span>")
|
||||
if(ADMIN_PUNISHMENT_BRAINDAMAGE)
|
||||
target.adjustBrainLoss(75)
|
||||
target.adjustBrainLoss(199, 199)
|
||||
if(ADMIN_PUNISHMENT_GIB)
|
||||
target.gib(FALSE)
|
||||
if(ADMIN_PUNISHMENT_BSA)
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<<<<<<< HEAD
|
||||
/obj/item/device/assembly/mousetrap
|
||||
name = "mousetrap"
|
||||
desc = "A handy little spring-loaded trap for catching pesty rodents."
|
||||
@@ -141,3 +142,147 @@
|
||||
/obj/item/device/assembly/mousetrap/armed
|
||||
icon_state = "mousetraparmed"
|
||||
armed = 1
|
||||
=======
|
||||
/obj/item/device/assembly/mousetrap
|
||||
name = "mousetrap"
|
||||
desc = "A handy little spring-loaded trap for catching pesty rodents."
|
||||
icon_state = "mousetrap"
|
||||
materials = list(MAT_METAL=100)
|
||||
attachable = 1
|
||||
var/armed = 0
|
||||
|
||||
|
||||
/obj/item/device/assembly/mousetrap/examine(mob/user)
|
||||
..()
|
||||
if(armed)
|
||||
to_chat(user, "The mousetrap is armed!")
|
||||
else
|
||||
to_chat(user, "The mousetrap is not armed.")
|
||||
|
||||
/obj/item/device/assembly/mousetrap/activate()
|
||||
if(..())
|
||||
armed = !armed
|
||||
if(!armed)
|
||||
if(ishuman(usr))
|
||||
var/mob/living/carbon/human/user = usr
|
||||
if((user.disabilities & (CLUMSY | DUMB)) && prob(50))
|
||||
to_chat(user, "<span class='warning'>Your hand slips, setting off the trigger!</span>")
|
||||
pulse(0)
|
||||
update_icon()
|
||||
if(usr)
|
||||
playsound(usr.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -3)
|
||||
|
||||
/obj/item/device/assembly/mousetrap/describe()
|
||||
return "The pressure switch is [armed?"primed":"safe"]."
|
||||
|
||||
/obj/item/device/assembly/mousetrap/update_icon()
|
||||
if(armed)
|
||||
icon_state = "mousetraparmed"
|
||||
else
|
||||
icon_state = "mousetrap"
|
||||
if(holder)
|
||||
holder.update_icon()
|
||||
|
||||
/obj/item/device/assembly/mousetrap/proc/triggered(mob/target, type = "feet")
|
||||
if(!armed)
|
||||
return
|
||||
var/obj/item/bodypart/affecting = null
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
if(PIERCEIMMUNE in H.dna.species.species_traits)
|
||||
playsound(src.loc, 'sound/effects/snap.ogg', 50, 1)
|
||||
armed = 0
|
||||
update_icon()
|
||||
pulse(0)
|
||||
return 0
|
||||
switch(type)
|
||||
if("feet")
|
||||
if(!H.shoes)
|
||||
affecting = H.get_bodypart(pick("l_leg", "r_leg"))
|
||||
H.Knockdown(60)
|
||||
if("l_hand", "r_hand")
|
||||
if(!H.gloves)
|
||||
affecting = H.get_bodypart(type)
|
||||
H.Stun(60)
|
||||
if(affecting)
|
||||
if(affecting.receive_damage(1, 0))
|
||||
H.update_damage_overlays()
|
||||
else if(ismouse(target))
|
||||
var/mob/living/simple_animal/mouse/M = target
|
||||
visible_message("<span class='boldannounce'>SPLAT!</span>")
|
||||
M.splat()
|
||||
playsound(src.loc, 'sound/effects/snap.ogg', 50, 1)
|
||||
armed = 0
|
||||
update_icon()
|
||||
pulse(0)
|
||||
|
||||
|
||||
/obj/item/device/assembly/mousetrap/attack_self(mob/living/carbon/human/user)
|
||||
if(!armed)
|
||||
to_chat(user, "<span class='notice'>You arm [src].</span>")
|
||||
else
|
||||
if((user.disabilities & (CLUMSY | DUMB)) && prob(50))
|
||||
var/which_hand = "l_hand"
|
||||
if(!(user.active_hand_index % 2))
|
||||
which_hand = "r_hand"
|
||||
triggered(user, which_hand)
|
||||
user.visible_message("<span class='warning'>[user] accidentally sets off [src], breaking their fingers.</span>", \
|
||||
"<span class='warning'>You accidentally trigger [src]!</span>")
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You disarm [src].</span>")
|
||||
armed = !armed
|
||||
update_icon()
|
||||
playsound(user.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -3)
|
||||
|
||||
|
||||
/obj/item/device/assembly/mousetrap/attack_hand(mob/living/carbon/human/user)
|
||||
if(armed)
|
||||
if((user.disabilities & (CLUMSY | DUMB)) && prob(50))
|
||||
var/which_hand = "l_hand"
|
||||
if(!(user.active_hand_index % 2))
|
||||
which_hand = "r_hand"
|
||||
triggered(user, which_hand)
|
||||
user.visible_message("<span class='warning'>[user] accidentally sets off [src], breaking their fingers.</span>", \
|
||||
"<span class='warning'>You accidentally trigger [src]!</span>")
|
||||
return
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/device/assembly/mousetrap/Crossed(atom/movable/AM as mob|obj)
|
||||
if(armed)
|
||||
if(ismob(AM))
|
||||
var/mob/MM = AM
|
||||
if(!(MM.movement_type & FLYING))
|
||||
if(ishuman(AM))
|
||||
var/mob/living/carbon/H = AM
|
||||
if(H.m_intent == MOVE_INTENT_RUN)
|
||||
triggered(H)
|
||||
H.visible_message("<span class='warning'>[H] accidentally steps on [src].</span>", \
|
||||
"<span class='warning'>You accidentally step on [src]</span>")
|
||||
else if(ismouse(MM))
|
||||
triggered(MM)
|
||||
else if(AM.density) // For mousetrap grenades, set off by anything heavy
|
||||
triggered(AM)
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/device/assembly/mousetrap/on_found(mob/finder)
|
||||
if(armed)
|
||||
finder.visible_message("<span class='warning'>[finder] accidentally sets off [src], breaking their fingers.</span>", \
|
||||
"<span class='warning'>You accidentally trigger [src]!</span>")
|
||||
triggered(finder, (finder.active_hand_index % 2 == 0) ? "r_hand" : "l_hand")
|
||||
return 1 //end the search!
|
||||
return 0
|
||||
|
||||
|
||||
/obj/item/device/assembly/mousetrap/hitby(A as mob|obj)
|
||||
if(!armed)
|
||||
return ..()
|
||||
visible_message("<span class='warning'>[src] is triggered by [A].</span>")
|
||||
triggered(null)
|
||||
|
||||
|
||||
/obj/item/device/assembly/mousetrap/armed
|
||||
icon_state = "mousetraparmed"
|
||||
armed = 1
|
||||
>>>>>>> 550d711... Brain Traumas (#31727)
|
||||
|
||||
@@ -454,7 +454,7 @@ GLOBAL_LIST_INIT(hallucinations_major, list(
|
||||
var/list/image/delusions = list()
|
||||
cost = 50
|
||||
|
||||
/datum/hallucination/delusion/New(mob/living/carbon/T, forced, force_kind = null , duration = 300,skip_nearby = 1, custom_icon = null, custom_icon_file = null)
|
||||
/datum/hallucination/delusion/New(mob/living/carbon/T, forced, force_kind = null , duration = 300,skip_nearby = 1, custom_icon = null, custom_icon_file = null, custom_name = null)
|
||||
. = ..()
|
||||
var/image/A = null
|
||||
var/kind = force_kind ? force_kind : pick("monkey","corgi","carp","skeleton","demon","zombie")
|
||||
@@ -467,23 +467,31 @@ GLOBAL_LIST_INIT(hallucinations_major, list(
|
||||
switch(kind)
|
||||
if("monkey")//Monkey
|
||||
A = image('icons/mob/monkey.dmi',H,"monkey1")
|
||||
A.name = "Monkey ([rand(1,999)])"
|
||||
if("carp")//Carp
|
||||
A = image('icons/mob/animal.dmi',H,"carp")
|
||||
A.name = "Space Carp"
|
||||
if("corgi")//Corgi
|
||||
A = image('icons/mob/pets.dmi',H,"corgi")
|
||||
A.name = "Corgi"
|
||||
if("skeleton")//Skeletons
|
||||
A = image('icons/mob/human.dmi',H,"skeleton")
|
||||
A.name = "Skeleton"
|
||||
if("zombie")//Zombies
|
||||
A = image('icons/mob/human.dmi',H,"zombie")
|
||||
A.name = "Zombie"
|
||||
if("demon")//Demon
|
||||
A = image('icons/mob/mob.dmi',H,"daemon")
|
||||
A.name = "Demon"
|
||||
if("custom")
|
||||
A = image(custom_icon_file, H, custom_icon)
|
||||
A.name = custom_name
|
||||
A.override = 1
|
||||
if(target.client)
|
||||
delusions |= A
|
||||
target.client.images |= A
|
||||
QDEL_IN(src, duration)
|
||||
if(duration)
|
||||
QDEL_IN(src, duration)
|
||||
|
||||
/datum/hallucination/delusion/Destroy()
|
||||
for(var/image/I in delusions)
|
||||
|
||||
@@ -68,7 +68,7 @@ Chaplain
|
||||
B.name = "Guys Gone Wild"
|
||||
if("lol", "wtf", "gay", "penis", "ass", "poo", "badmin", "shitmin", "deadmin", "cock", "cocks", "meme", "memes")
|
||||
B.name = pick("Woodys Got Wood: The Aftermath", "War of the Cocks", "Sweet Bro and Hella Jef: Expanded Edition")
|
||||
H.setBrainLoss(100) // starts off retarded as fuck
|
||||
H.adjustBrainLoss(100) // starts off retarded as fuck
|
||||
if("science")
|
||||
B.name = pick("Principle of Relativity", "Quantum Enigma: Physics Encounters Consciousness", "Programming the Universe", "Quantum Physics and Theology", "String Theory for Dummies", "How To: Build Your Own Warp Drive", "The Mysteries of Bluespace", "Playing God: Collector's Edition")
|
||||
else
|
||||
|
||||
@@ -14,6 +14,8 @@
|
||||
var/damaged_brain = FALSE //whether the brain organ is damaged.
|
||||
var/decoy_override = FALSE //I apologize to the security players, and myself, who abused this, but this is going to go.
|
||||
|
||||
var/list/datum/brain_trauma/traumas = list()
|
||||
|
||||
/obj/item/organ/brain/changeling_brain
|
||||
vital = FALSE
|
||||
decoy_override = TRUE
|
||||
@@ -41,11 +43,21 @@
|
||||
|
||||
QDEL_NULL(brainmob)
|
||||
|
||||
for(var/X in traumas)
|
||||
var/datum/brain_trauma/BT = X
|
||||
BT.owner = owner
|
||||
BT.on_gain()
|
||||
|
||||
//Update the body's icon so it doesnt appear debrained anymore
|
||||
C.update_hair()
|
||||
|
||||
/obj/item/organ/brain/Remove(mob/living/carbon/C, special = 0, no_id_transfer = FALSE)
|
||||
..()
|
||||
for(var/X in traumas)
|
||||
var/datum/brain_trauma/BT = X
|
||||
BT.on_lose(TRUE)
|
||||
BT.owner = null
|
||||
|
||||
if((!gc_destroyed || (owner && !owner.gc_destroyed)) && !no_id_transfer)
|
||||
transfer_identity(C)
|
||||
C.update_hair()
|
||||
@@ -134,6 +146,30 @@
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/organ/brain/proc/get_brain_damage()
|
||||
var/brain_damage_threshold = max_integrity * BRAIN_DAMAGE_INTEGRITY_MULTIPLIER
|
||||
var/offset_integrity = obj_integrity - (max_integrity - brain_damage_threshold)
|
||||
. = (1 - (offset_integrity / brain_damage_threshold)) * BRAIN_DAMAGE_DEATH
|
||||
|
||||
/obj/item/organ/brain/proc/adjust_brain_damage(amount, maximum)
|
||||
var/adjusted_amount
|
||||
if(amount >= 0 && maximum)
|
||||
var/brainloss = get_brain_damage()
|
||||
var/new_brainloss = Clamp(brainloss + amount, 0, maximum)
|
||||
if(brainloss > new_brainloss) //brainloss is over the cap already
|
||||
return 0
|
||||
adjusted_amount = new_brainloss - brainloss
|
||||
else
|
||||
adjusted_amount = amount
|
||||
|
||||
adjusted_amount *= BRAIN_DAMAGE_INTEGRITY_MULTIPLIER
|
||||
if(adjusted_amount)
|
||||
if(adjusted_amount >= 0.1)
|
||||
take_damage(adjusted_amount)
|
||||
else if(adjusted_amount <= -0.1)
|
||||
obj_integrity = min(max_integrity, obj_integrity-adjusted_amount)
|
||||
. = adjusted_amount
|
||||
|
||||
/obj/item/organ/brain/Destroy() //copypasted from MMIs.
|
||||
if(brainmob)
|
||||
qdel(brainmob)
|
||||
@@ -144,4 +180,50 @@
|
||||
name = "alien brain"
|
||||
desc = "We barely understand the brains of terrestial animals. Who knows what we may find in the brain of such an advanced species?"
|
||||
icon_state = "brain-x"
|
||||
<<<<<<< HEAD
|
||||
origin_tech = "biotech=6"
|
||||
=======
|
||||
|
||||
|
||||
////////////////////////////////////TRAUMAS////////////////////////////////////////
|
||||
|
||||
/obj/item/organ/brain/proc/has_trauma_type(brain_trauma_type, consider_permanent = FALSE)
|
||||
for(var/X in traumas)
|
||||
var/datum/brain_trauma/BT = X
|
||||
if(istype(BT, brain_trauma_type) && (consider_permanent || !BT.permanent))
|
||||
return BT
|
||||
|
||||
|
||||
//Add a specific trauma
|
||||
/obj/item/organ/brain/proc/gain_trauma(datum/brain_trauma/trauma, permanent = FALSE, list/arguments)
|
||||
var/trauma_type
|
||||
if(ispath(trauma))
|
||||
trauma_type = trauma
|
||||
traumas += new trauma_type(arglist(list(src, permanent) + arguments))
|
||||
else
|
||||
traumas += trauma
|
||||
trauma.permanent = permanent
|
||||
|
||||
//Add a random trauma of a certain subtype
|
||||
/obj/item/organ/brain/proc/gain_trauma_type(brain_trauma_type = /datum/brain_trauma, permanent = FALSE)
|
||||
var/list/datum/brain_trauma/possible_traumas = list()
|
||||
for(var/T in subtypesof(brain_trauma_type))
|
||||
var/datum/brain_trauma/BT = T
|
||||
if(initial(BT.can_gain))
|
||||
possible_traumas += BT
|
||||
|
||||
var/trauma_type = pick(possible_traumas)
|
||||
traumas += new trauma_type(src, permanent)
|
||||
|
||||
//Cure a random trauma of a certain subtype
|
||||
/obj/item/organ/brain/proc/cure_trauma_type(brain_trauma_type, cure_permanent = FALSE)
|
||||
var/datum/brain_trauma/trauma = has_trauma_type(brain_trauma_type)
|
||||
if(trauma && (cure_permanent || !trauma.permanent))
|
||||
qdel(trauma)
|
||||
|
||||
/obj/item/organ/brain/proc/cure_all_traumas(cure_permanent = FALSE)
|
||||
for(var/X in traumas)
|
||||
var/datum/brain_trauma/trauma = X
|
||||
if(cure_permanent || !trauma.permanent)
|
||||
qdel(trauma)
|
||||
>>>>>>> 550d711... Brain Traumas (#31727)
|
||||
|
||||
@@ -22,4 +22,4 @@
|
||||
return
|
||||
|
||||
/mob/living/brain/set_blurriness()
|
||||
return
|
||||
return
|
||||
@@ -112,7 +112,8 @@
|
||||
take_bodypart_damage(10)
|
||||
victim.Knockdown(20)
|
||||
Knockdown(20)
|
||||
visible_message("<span class='danger'>[src] crashes into [victim], knocking them both over!</span>", "<span class='userdanger'>You violently crash into [victim]!</span>")
|
||||
visible_message("<span class='danger'>[src] crashes into [victim], knocking them both over!</span>",\
|
||||
"<span class='userdanger'>You violently crash into [victim]!</span>")
|
||||
playsound(src,'sound/weapons/punch1.ogg',50,1)
|
||||
|
||||
|
||||
@@ -765,6 +766,7 @@
|
||||
update_handcuffed()
|
||||
if(reagents)
|
||||
reagents.addiction_list = list()
|
||||
cure_all_traumas(TRUE, TRUE)
|
||||
..()
|
||||
// heal ears after healing disabilities, since ears check DEAF disability
|
||||
// when healing.
|
||||
@@ -849,3 +851,5 @@
|
||||
.["Modify bodypart"] = "?_src_=vars;[HrefToken()];editbodypart=[REF(src)]"
|
||||
.["Modify organs"] = "?_src_=vars;[HrefToken()];editorgans=[REF(src)]"
|
||||
.["Hallucinate"] = "?_src_=vars;[HrefToken()];hallucinate=[REF(src)]"
|
||||
.["Give brain trauma"] = "?_src_=vars;[HrefToken()];givetrauma=[REF(src)]"
|
||||
.["Cure brain traumas"] = "?_src_=vars;[HrefToken()];curetraumas=[REF(src)]"
|
||||
|
||||
@@ -229,7 +229,7 @@
|
||||
"<span class='danger'>[src] was shocked by \the [source]!</span>", \
|
||||
"<span class='userdanger'>You feel a powerful shock coursing through your body!</span>", \
|
||||
"<span class='italics'>You hear a heavy electrical crack.</span>" \
|
||||
)
|
||||
)
|
||||
jitteriness += 1000 //High numbers for violent convulsions
|
||||
do_jitter_animation(jitteriness)
|
||||
stuttering += 2
|
||||
|
||||
@@ -196,3 +196,37 @@
|
||||
staminaloss = amount
|
||||
if(updating_stamina)
|
||||
update_stamina()
|
||||
|
||||
/mob/living/carbon/getBrainLoss()
|
||||
. = BRAIN_DAMAGE_DEATH
|
||||
var/obj/item/organ/brain/B = getorganslot(ORGAN_SLOT_BRAIN)
|
||||
if(B)
|
||||
. = B.get_brain_damage()
|
||||
|
||||
//Some sources of brain damage shouldn't be deadly
|
||||
/mob/living/carbon/adjustBrainLoss(amount, maximum = BRAIN_DAMAGE_DEATH)
|
||||
if(status_flags & GODMODE)
|
||||
return 0
|
||||
var/obj/item/organ/brain/B = getorganslot(ORGAN_SLOT_BRAIN)
|
||||
if(!B)
|
||||
return
|
||||
B.adjust_brain_damage(amount, maximum)
|
||||
if(amount <= 0) //cut this early
|
||||
return
|
||||
var/brainloss = getBrainLoss()
|
||||
if(brainloss > BRAIN_DAMAGE_MILD && !has_trauma_type(BRAIN_TRAUMA_MILD))
|
||||
if(prob((amount * 2) + ((brainloss - BRAIN_DAMAGE_MILD) / 5))) //1 damage|50 brain damage = 4% chance
|
||||
gain_trauma_type(BRAIN_TRAUMA_MILD)
|
||||
if(brainloss > BRAIN_DAMAGE_SEVERE && !has_trauma_type(BRAIN_TRAUMA_SEVERE) && !has_trauma_type(BRAIN_TRAUMA_SPECIAL))
|
||||
if(prob(amount + ((brainloss - BRAIN_DAMAGE_SEVERE) / 15))) //1 damage|150 brain damage = 3% chance
|
||||
if(prob(20))
|
||||
gain_trauma_type(BRAIN_TRAUMA_SPECIAL)
|
||||
else
|
||||
gain_trauma_type(BRAIN_TRAUMA_SEVERE)
|
||||
|
||||
/mob/living/carbon/setBrainLoss(amount)
|
||||
var/obj/item/organ/brain/B = getorganslot(ORGAN_SLOT_BRAIN)
|
||||
if(B)
|
||||
var/adjusted_amount = amount - B.get_brain_damage()
|
||||
B.adjust_brain_damage(adjusted_amount, null)
|
||||
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
else
|
||||
msg += "<b>[t_He] [t_is] severely deformed!</b>\n"
|
||||
|
||||
if(getBrainLoss() > 60)
|
||||
if(disabilities & DUMB)
|
||||
msg += "[t_He] seem[p_s()] to be clumsy and unable to think.\n"
|
||||
|
||||
if(fire_stacks > 0)
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
var/t_has = p_have()
|
||||
var/t_is = p_are()
|
||||
|
||||
var/msg = "<span class='info'>*---------*\nThis is <EM>[src.name]</EM>!\n"
|
||||
var/msg = "<span class='info'>*---------*\nThis is <EM>[name]</EM>!\n"
|
||||
|
||||
var/list/obscured = check_obscured_slots()
|
||||
var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
|
||||
@@ -284,7 +284,7 @@
|
||||
if(stat == UNCONSCIOUS)
|
||||
msg += "[t_He] [t_is]n't responding to anything around [t_him] and seem[p_s()] to be asleep.\n"
|
||||
else
|
||||
if(getBrainLoss() >= 60)
|
||||
if(disabilities & DUMB)
|
||||
msg += "[t_He] [t_has] a stupid expression on [t_his] face.\n"
|
||||
if(InCritical())
|
||||
msg += "[t_He] [t_is] barely conscious.\n"
|
||||
|
||||
@@ -103,7 +103,9 @@
|
||||
|
||||
|
||||
/mob/living/carbon/human/IsAdvancedToolUser()
|
||||
return 1//Humans can use guns and such
|
||||
if(disabilities & MONKEYLIKE)
|
||||
return FALSE
|
||||
return TRUE//Humans can use guns and such
|
||||
|
||||
/mob/living/carbon/human/reagent_check(datum/reagent/R)
|
||||
return dna.species.handle_chemicals(R,src)
|
||||
|
||||
@@ -20,8 +20,6 @@
|
||||
#define COLD_GAS_DAMAGE_LEVEL_2 1.5 //Amount of damage applied when the current breath's temperature passes the 200K point
|
||||
#define COLD_GAS_DAMAGE_LEVEL_3 3 //Amount of damage applied when the current breath's temperature passes the 120K point
|
||||
|
||||
#define BRAIN_DAMAGE_FILE "brain_damage_lines.json"
|
||||
|
||||
/mob/living/carbon/human/Life()
|
||||
set invisibility = 0
|
||||
set background = BACKGROUND_ENABLED
|
||||
@@ -74,14 +72,6 @@
|
||||
else if(eye_blurry) //blurry eyes heal slowly
|
||||
adjust_blurriness(-1)
|
||||
|
||||
if (getBrainLoss() >= 60 && stat == CONSCIOUS)
|
||||
if(prob(3))
|
||||
if(prob(25))
|
||||
emote("drool")
|
||||
else
|
||||
say(pick_list_replacements(BRAIN_DAMAGE_FILE, "brain_damage"))
|
||||
|
||||
|
||||
/mob/living/carbon/human/handle_mutations_and_radiation()
|
||||
if(!dna || !dna.species.handle_mutations_and_radiation(src))
|
||||
..()
|
||||
@@ -430,7 +420,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
to_chat(src, "<span class='warning'>Maybe you should lie down for a bit...</span>")
|
||||
|
||||
if(drunkenness >= 91)
|
||||
adjustBrainLoss(0.4)
|
||||
adjustBrainLoss(0.4, 60)
|
||||
if(prob(20) && !stat)
|
||||
if(SSshuttle.emergency.mode == SHUTTLE_DOCKED && (z in GLOB.station_z_levels)) //QoL mainly
|
||||
to_chat(src, "<span class='warning'>You're so tired... but you can't miss that shuttle...</span>")
|
||||
|
||||
@@ -1359,8 +1359,13 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
target.apply_damage(damage, BRUTE, affecting, armor_block)
|
||||
add_logs(user, target, "punched")
|
||||
if((target.stat != DEAD) && damage >= user.dna.species.punchstunthreshold)
|
||||
<<<<<<< HEAD
|
||||
target.visible_message("<span class='danger'>[user] has weakened [target]!</span>", \
|
||||
"<span class='userdanger'>[user] has weakened [target]!</span>")
|
||||
=======
|
||||
target.visible_message("<span class='danger'>[user] has knocked [target] down!</span>", \
|
||||
"<span class='userdanger'>[user] has knocked [target] down!</span>", null, COMBAT_MESSAGE_RANGE)
|
||||
>>>>>>> 550d711... Brain Traumas (#31727)
|
||||
target.apply_effect(80, KNOCKDOWN, armor_block)
|
||||
target.forcesay(GLOB.hit_appends)
|
||||
else if(target.lying)
|
||||
@@ -1404,7 +1409,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
if(randn <= 60)
|
||||
var/obj/item/I = null
|
||||
if(target.pulling)
|
||||
to_chat(target, "<span class='warning'>[user] has broken [target]'s grip on [target.pulling]!</span>")
|
||||
target.visible_message("<span class='warning'>[user] has broken [target]'s grip on [target.pulling]!</span>")
|
||||
target.stop_pulling()
|
||||
else
|
||||
I = target.get_active_held_item()
|
||||
@@ -1509,7 +1514,10 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
H.visible_message("<span class='danger'>[H] has been knocked senseless!</span>", \
|
||||
"<span class='userdanger'>[H] has been knocked senseless!</span>")
|
||||
H.confused = max(H.confused, 20)
|
||||
H.adjustBrainLoss(20)
|
||||
H.adjust_blurriness(10)
|
||||
if(prob(20))
|
||||
H.gain_trauma(/datum/brain_trauma/mild/concussion)
|
||||
|
||||
if(prob(I.force + ((100 - H.health)/2)) && H != user)
|
||||
var/datum/antagonist/rev/rev = H.mind.has_antag_datum(/datum/antagonist/rev)
|
||||
|
||||
@@ -3,11 +3,11 @@
|
||||
amount = dna.species.spec_stun(src,amount)
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/Knockdown(amount, updating = 1, ignore_canstun = 0)
|
||||
/mob/living/carbon/human/Knockdown(amount, updating = 1, ignore_canknockdown = 0)
|
||||
amount = dna.species.spec_stun(src,amount)
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/Unconscious(amount, updating = 1, ignore_canstun = 0)
|
||||
/mob/living/carbon/human/Unconscious(amount, updating = 1, ignore_canunconscious = 0)
|
||||
amount = dna.species.spec_stun(src,amount)
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -13,9 +13,17 @@
|
||||
handle_blood()
|
||||
|
||||
if(stat != DEAD)
|
||||
<<<<<<< HEAD
|
||||
for(var/V in internal_organs)
|
||||
var/obj/item/organ/O = V
|
||||
O.on_life()
|
||||
=======
|
||||
handle_brain_damage()
|
||||
|
||||
if(stat != DEAD)
|
||||
handle_liver()
|
||||
|
||||
>>>>>>> 550d711... Brain Traumas (#31727)
|
||||
if(stat == DEAD)
|
||||
stop_sound_channel(CHANNEL_HEARTBEAT)
|
||||
|
||||
@@ -437,3 +445,20 @@
|
||||
adjustToxLoss(8)
|
||||
if(prob(30))
|
||||
to_chat(src, "<span class='notice'>You feel confused and nauseous...</span>")//actual symptoms of liver failure
|
||||
|
||||
|
||||
////////////////
|
||||
//BRAIN DAMAGE//
|
||||
////////////////
|
||||
|
||||
/mob/living/carbon/proc/handle_brain_damage()
|
||||
for(var/T in get_traumas())
|
||||
var/datum/brain_trauma/BT = T
|
||||
BT.on_life()
|
||||
|
||||
if(getBrainLoss() >= BRAIN_DAMAGE_DEATH) //rip
|
||||
to_chat(src, "<span class='userdanger'>The last spark of life in your brain fizzles out...<span>")
|
||||
death()
|
||||
var/obj/item/organ/brain/B = getorganslot(ORGAN_SLOT_BRAIN)
|
||||
if(B)
|
||||
B.damaged_brain = TRUE
|
||||
@@ -1,4 +1,6 @@
|
||||
/mob/living/carbon/treat_message(message)
|
||||
for(var/datum/brain_trauma/trauma in get_traumas())
|
||||
message = trauma.on_say(message)
|
||||
message = ..(message)
|
||||
var/obj/item/organ/tongue/T = getorganslot(ORGAN_SLOT_TONGUE)
|
||||
if(!T) //hoooooouaah!
|
||||
@@ -34,4 +36,16 @@
|
||||
if(T)
|
||||
. = T.could_speak_in_language(dt)
|
||||
else
|
||||
<<<<<<< HEAD
|
||||
. = initial(dt.flags_1) & TONGUELESS_SPEECH
|
||||
=======
|
||||
. = initial(dt.flags) & TONGUELESS_SPEECH
|
||||
|
||||
/mob/living/carbon/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode)
|
||||
if(!client)
|
||||
return
|
||||
for(var/T in get_traumas())
|
||||
var/datum/brain_trauma/trauma = T
|
||||
message = trauma.on_hear(message, speaker, message_language, raw_message, radio_freq)
|
||||
return ..()
|
||||
>>>>>>> 550d711... Brain Traumas (#31727)
|
||||
|
||||
@@ -101,3 +101,35 @@
|
||||
status_flags |= DISFIGURED //makes them unknown
|
||||
update_body()
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/proc/get_traumas()
|
||||
. = list()
|
||||
var/obj/item/organ/brain/B = getorganslot(ORGAN_SLOT_BRAIN)
|
||||
if(B)
|
||||
. = B.traumas
|
||||
|
||||
/mob/living/carbon/proc/has_trauma_type(brain_trauma_type, consider_permanent = FALSE)
|
||||
var/obj/item/organ/brain/B = getorganslot(ORGAN_SLOT_BRAIN)
|
||||
if(B)
|
||||
. = B.has_trauma_type(brain_trauma_type, consider_permanent)
|
||||
|
||||
/mob/living/carbon/proc/gain_trauma(datum/brain_trauma/trauma, permanent = FALSE, list/arguments)
|
||||
var/obj/item/organ/brain/B = getorganslot(ORGAN_SLOT_BRAIN)
|
||||
if(B)
|
||||
. = B.gain_trauma(trauma, permanent, arguments)
|
||||
|
||||
/mob/living/carbon/proc/gain_trauma_type(brain_trauma_type = /datum/brain_trauma, permanent = FALSE)
|
||||
var/obj/item/organ/brain/B = getorganslot(ORGAN_SLOT_BRAIN)
|
||||
if(B)
|
||||
. = B.gain_trauma_type(brain_trauma_type, permanent)
|
||||
|
||||
/mob/living/carbon/proc/cure_trauma_type(brain_trauma_type, cure_permanent = FALSE)
|
||||
var/obj/item/organ/brain/B = getorganslot(ORGAN_SLOT_BRAIN)
|
||||
if(B)
|
||||
. = B.cure_trauma_type(brain_trauma_type, cure_permanent)
|
||||
|
||||
/mob/living/carbon/proc/cure_all_traumas(cure_permanent = FALSE)
|
||||
var/obj/item/organ/brain/B = getorganslot(ORGAN_SLOT_BRAIN)
|
||||
if(B)
|
||||
. = B.cure_all_traumas(cure_permanent)
|
||||
|
||||
|
||||
@@ -231,17 +231,13 @@
|
||||
return amount
|
||||
|
||||
/mob/living/proc/getBrainLoss()
|
||||
return brainloss
|
||||
. = 0
|
||||
|
||||
/mob/living/proc/adjustBrainLoss(amount)
|
||||
if(status_flags & GODMODE)
|
||||
return 0
|
||||
brainloss = Clamp((brainloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2)
|
||||
/mob/living/proc/adjustBrainLoss(amount, maximum = BRAIN_DAMAGE_DEATH)
|
||||
return
|
||||
|
||||
/mob/living/proc/setBrainLoss(amount)
|
||||
if(status_flags & GODMODE)
|
||||
return 0
|
||||
brainloss = amount
|
||||
return
|
||||
|
||||
/mob/living/proc/getStaminaLoss()
|
||||
return staminaloss
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
var/toxloss = 0 //Toxic damage caused by being poisoned or radiated
|
||||
var/fireloss = 0 //Burn damage caused by being way too hot, too cold or burnt.
|
||||
var/cloneloss = 0 //Damage caused by being cloned or ejected from the cloner early. slimes also deal cloneloss damage to victims
|
||||
var/brainloss = 0 //'Retardation' damage caused by someone hitting you in the head with a bible or being infected with brainrot.
|
||||
var/staminaloss = 0 //Stamina damage, or exhaustion. You recover it slowly naturally, and are knocked down if it gets too high. Holodeck and hallucinations deal this.
|
||||
|
||||
|
||||
|
||||
@@ -326,7 +326,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
|
||||
return null
|
||||
|
||||
/mob/living/proc/treat_message(message)
|
||||
if(getBrainLoss() >= 60)
|
||||
if(derpspeech)
|
||||
message = derpspeech(message, stuttering)
|
||||
|
||||
if(stuttering)
|
||||
@@ -373,7 +373,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
|
||||
. = "[verb_whisper] in [p_their()] last breath"
|
||||
else if(stuttering)
|
||||
. = "stammers"
|
||||
else if(getBrainLoss() >= 60)
|
||||
else if(derpspeech)
|
||||
. = "gibbers"
|
||||
else
|
||||
. = ..()
|
||||
|
||||
@@ -33,7 +33,16 @@
|
||||
|
||||
sync_mind()
|
||||
|
||||
<<<<<<< HEAD
|
||||
client.sethotkeys() //set mob specific hotkeys
|
||||
=======
|
||||
//Reload alternate appearances
|
||||
for(var/v in GLOB.active_alternate_appearances)
|
||||
if(!v)
|
||||
continue
|
||||
var/datum/atom_hud/alternate_appearance/AA = v
|
||||
AA.onNewMob(src)
|
||||
>>>>>>> 550d711... Brain Traumas (#31727)
|
||||
|
||||
update_client_colour()
|
||||
if(client)
|
||||
|
||||
@@ -400,6 +400,7 @@
|
||||
pulling = null
|
||||
grab_state = 0
|
||||
update_pull_hud_icon()
|
||||
|
||||
if(isliving(ex_pulled))
|
||||
var/mob/living/L = ex_pulled
|
||||
L.update_canmove()// mob gets up if it was lyng down in a chokehold
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
var/stuttering = 0 //Carbon
|
||||
var/slurring = 0 //Carbon
|
||||
var/cultslurring = 0 //Carbon
|
||||
var/derpspeech = 0 //Carbon
|
||||
var/real_name = null
|
||||
var/spacewalk = FALSE
|
||||
var/druggy = 0 //Carbon
|
||||
|
||||
@@ -79,6 +79,9 @@
|
||||
O.setBrainLoss(getBrainLoss(), 0)
|
||||
O.updatehealth()
|
||||
O.radiation = radiation
|
||||
for(var/T in get_traumas())
|
||||
var/datum/brain_trauma/BT = T
|
||||
O.gain_trauma(BT.type, BT.permanent)
|
||||
|
||||
//re-add implants to new mob
|
||||
if (tr_flags & TR_KEEPIMPLANTS)
|
||||
@@ -238,6 +241,9 @@
|
||||
O.setBrainLoss(getBrainLoss(), 0)
|
||||
O.updatehealth()
|
||||
O.radiation = radiation
|
||||
for(var/T in get_traumas())
|
||||
var/datum/brain_trauma/BT = T
|
||||
O.gain_trauma(BT.type, BT.permanent)
|
||||
|
||||
//re-add implants to new mob
|
||||
if (tr_flags & TR_KEEPIMPLANTS)
|
||||
|
||||
@@ -45,11 +45,6 @@
|
||||
to_chat(M, "<span class='boldnotice'>You feel that your soul has returned to its rightful owner, Nanotrasen.</span>")
|
||||
M.return_soul()
|
||||
else
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/N = M
|
||||
if(!istype(N.head, /obj/item/clothing/head/helmet))
|
||||
N.adjustBrainLoss(10)
|
||||
to_chat(N, "<span class='danger'>You feel dumber.</span>")
|
||||
M.visible_message("<span class='danger'>[user] beats [M] over the head with [src]!</span>", \
|
||||
"<span class='userdanger'>[user] beats [M] over the head with [src]!</span>")
|
||||
return ..()
|
||||
@@ -207,7 +202,7 @@
|
||||
if(!user.mind.hasSoul)
|
||||
to_chat(user, "<span class='notice'>You do not possess a soul.</span>")
|
||||
return 0
|
||||
if(prob(user.getBrainLoss()))
|
||||
if(user.disabilities & DUMB)
|
||||
to_chat(user, "<span class='notice'>You quickly scrawl 'your name' on the contract.</span>")
|
||||
signIncorrectly()
|
||||
return 0
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
. = 1
|
||||
|
||||
/datum/reagent/drug/crank/addiction_act_stage4(mob/living/M)
|
||||
M.adjustBrainLoss(5*REM)
|
||||
M.adjustBrainLoss(3*REM)
|
||||
M.adjustToxLoss(5*REM, 0)
|
||||
M.adjustBruteLoss(5*REM, 0)
|
||||
..()
|
||||
|
||||
@@ -628,7 +628,7 @@
|
||||
. = 1
|
||||
if(prob(20))
|
||||
M.losebreath += 4
|
||||
M.adjustBrainLoss(2*REM)
|
||||
M.adjustBrainLoss(2*REM, 150)
|
||||
M.adjustToxLoss(3*REM,0)
|
||||
M.adjustStaminaLoss(10*REM,0)
|
||||
M.blur_eyes(5)
|
||||
|
||||
@@ -59,6 +59,7 @@
|
||||
M.confused = 0
|
||||
M.SetSleeping(0, 0)
|
||||
M.jitteriness = 0
|
||||
M.cure_all_traumas(TRUE, TRUE)
|
||||
for(var/thing in M.viruses)
|
||||
var/datum/disease/D = thing
|
||||
if(D.severity == VIRUS_SEVERITY_POSITIVE)
|
||||
@@ -792,7 +793,13 @@
|
||||
color = "#DCDCFF"
|
||||
|
||||
/datum/reagent/medicine/mannitol/on_mob_life(mob/living/M)
|
||||
M.adjustBrainLoss(-3*REM)
|
||||
M.adjustBrainLoss(-2*REM)
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
if(prob(30) && C.has_trauma_type(BRAIN_TRAUMA_SPECIAL))
|
||||
C.cure_trauma_type(BRAIN_TRAUMA_SPECIAL)
|
||||
if(prob(10) && C.has_trauma_type(BRAIN_TRAUMA_MILD))
|
||||
C.cure_trauma_type(BRAIN_TRAUMA_MILD)
|
||||
..()
|
||||
|
||||
/datum/reagent/medicine/mutadone
|
||||
@@ -1016,7 +1023,7 @@
|
||||
M.adjustFireLoss(-3 * REM, 0)
|
||||
M.adjustOxyLoss(-15 * REM, 0)
|
||||
M.adjustToxLoss(-3 * REM, 0)
|
||||
M.adjustBrainLoss(2 * REM) //This does, after all, come from ambrosia, and the most powerful ambrosia in existence, at that!
|
||||
M.adjustBrainLoss(2 * REM, 150) //This does, after all, come from ambrosia, and the most powerful ambrosia in existence, at that!
|
||||
M.adjustCloneLoss(-1 * REM, 0)
|
||||
M.adjustStaminaLoss(-30 * REM, 0)
|
||||
M.jitteriness = min(max(0, M.jitteriness + 3), 30)
|
||||
@@ -1047,7 +1054,7 @@
|
||||
if (M.hallucination >= 5)
|
||||
M.hallucination -= 5
|
||||
if(prob(20))
|
||||
M.adjustBrainLoss(1*REM)
|
||||
M.adjustBrainLoss(1*REM, 50)
|
||||
M.adjustStaminaLoss(2.5*REM, 0)
|
||||
..()
|
||||
. = 1
|
||||
|
||||
@@ -261,7 +261,7 @@
|
||||
M.adjustBruteLoss(-2, 0)
|
||||
M.adjustFireLoss(-2, 0)
|
||||
else
|
||||
M.adjustBrainLoss(3)
|
||||
M.adjustBrainLoss(3, 150)
|
||||
M.adjustToxLoss(1, 0)
|
||||
M.adjustFireLoss(2, 0)
|
||||
M.adjustOxyLoss(2, 0)
|
||||
@@ -280,7 +280,7 @@
|
||||
M.IgniteMob() //Only problem with igniting people is currently the commonly availible fire suits make you immune to being on fire
|
||||
M.adjustToxLoss(1, 0)
|
||||
M.adjustFireLoss(1, 0) //Hence the other damages... ain't I a bastard?
|
||||
M.adjustBrainLoss(5)
|
||||
M.adjustBrainLoss(5, 150)
|
||||
holder.remove_reagent(src.id, 1)
|
||||
|
||||
/datum/reagent/medicine/omnizine/godblood
|
||||
@@ -676,7 +676,7 @@
|
||||
step(M, pick(GLOB.cardinals))
|
||||
if(prob(5))
|
||||
M.emote(pick("twitch","drool","moan"))
|
||||
M.adjustBrainLoss(2)
|
||||
M.adjustBrainLoss(1)
|
||||
..()
|
||||
|
||||
/datum/reagent/sulfur
|
||||
@@ -1029,7 +1029,7 @@
|
||||
/datum/reagent/impedrezene/on_mob_life(mob/living/M)
|
||||
M.jitteriness = max(M.jitteriness-5,0)
|
||||
if(prob(80))
|
||||
M.adjustBrainLoss(1*REM)
|
||||
M.adjustBrainLoss(2*REM)
|
||||
if(prob(50))
|
||||
M.drowsyness = max(M.drowsyness, 3)
|
||||
if(prob(10))
|
||||
|
||||
@@ -455,13 +455,12 @@
|
||||
toxpwr = 0
|
||||
|
||||
/datum/reagent/toxin/neurotoxin2/on_mob_life(mob/living/M)
|
||||
if(M.brainloss + M.toxloss <= 60)
|
||||
M.adjustBrainLoss(1*REM)
|
||||
M.adjustBrainLoss(3*REM, 150)
|
||||
. = 1
|
||||
if(M.toxloss <= 60)
|
||||
M.adjustToxLoss(1*REM, 0)
|
||||
. = 1
|
||||
if(current_cycle >= 18)
|
||||
M.Sleeping(40, 0)
|
||||
. = 1
|
||||
..()
|
||||
|
||||
/datum/reagent/toxin/cyanide
|
||||
|
||||
@@ -31,9 +31,8 @@
|
||||
..()
|
||||
|
||||
/obj/effect/proc_holder/spell/voice_of_god/cast(list/targets, mob/user = usr)
|
||||
user.say(uppertext(command), spans = spans, sanitize = FALSE)
|
||||
playsound(get_turf(user), speech_sound, 300, 1, 5)
|
||||
var/cooldown = voice_of_god(command, user, spans, base_multiplier = power_mod)
|
||||
var/cooldown = voice_of_god(uppertext(command), user, spans, base_multiplier = power_mod)
|
||||
charge_max = (cooldown * cooldown_mod)
|
||||
|
||||
/obj/effect/proc_holder/spell/voice_of_god/clown
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
/datum/surgery/brain_surgery
|
||||
name = "brain surgery"
|
||||
steps = list(
|
||||
/datum/surgery_step/incise,
|
||||
/datum/surgery_step/retract_skin,
|
||||
/datum/surgery_step/saw,
|
||||
/datum/surgery_step/clamp_bleeders,
|
||||
/datum/surgery_step/fix_brain,
|
||||
/datum/surgery_step/close)
|
||||
|
||||
species = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
possible_locs = list("head")
|
||||
requires_bodypart_type = 0
|
||||
|
||||
/datum/surgery_step/fix_brain
|
||||
name = "fix brain"
|
||||
implements = list(/obj/item/hemostat = 85, /obj/item/screwdriver = 35, /obj/item/pen = 15) //don't worry, pouring some alcohol on their open brain will get that chance to 100
|
||||
time = 120 //long and complicated
|
||||
|
||||
/datum/surgery/brain_surgery/can_start(mob/user, mob/living/carbon/target)
|
||||
var/obj/item/organ/brain/B = target.getorganslot(ORGAN_SLOT_BRAIN)
|
||||
if(!B)
|
||||
to_chat(user, "<span class='warning'>It's hard to do surgery on someone's brain when they don't have one.</span>")
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/datum/surgery_step/fix_brain/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
user.visible_message("[user] begins to fix [target]'s brain.", "<span class='notice'>You begin to fix [target]'s brain...</span>")
|
||||
|
||||
/datum/surgery_step/fix_brain/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
user.visible_message("[user] successfully fixes [target]'s brain!", "<span class='notice'>You succeed in fixing [target]'s brain.</span>")
|
||||
target.adjustBrainLoss(-60)
|
||||
target.cure_all_traumas()
|
||||
return TRUE
|
||||
|
||||
/datum/surgery_step/fix_brain/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
if(target.getorganslot(ORGAN_SLOT_BRAIN))
|
||||
user.visible_message("<span class='warning'>[user] screws up, causing more damage!</span>", "<span class='warning'>You screw up, causing more damage!</span>")
|
||||
target.adjustBrainLoss(80)
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] suddenly notices that the brain [user.p_they()] [user.p_were()] working on is not there anymore.", "<span class='warning'>You suddenly notice that the brain you were working on is not there anymore.</span>")
|
||||
return FALSE
|
||||
@@ -16,6 +16,7 @@
|
||||
if(!E)
|
||||
to_chat(user, "It's hard to do surgery on someone's eyes when they don't have any.")
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/datum/surgery_step/fix_eyes/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
user.visible_message("[user] begins to fix [target]'s eyes.", "<span class='notice'>You begin to fix [target]'s eyes...</span>")
|
||||
@@ -32,7 +33,7 @@
|
||||
/datum/surgery_step/fix_eyes/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
if(target.getorgan(/obj/item/organ/brain))
|
||||
user.visible_message("<span class='warning'>[user] accidentally stabs [target] right in the brain!</span>", "<span class='warning'>You accidentally stab [target] right in the brain!</span>")
|
||||
target.adjustBrainLoss(100)
|
||||
target.adjustBrainLoss(70)
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] accidentally stabs [target] right in the brain! Or would have, if [target] had a brain.</span>", "<span class='warning'>You accidentally stab [target] right in the brain! Or would have, if [target] had a brain.</span>")
|
||||
return FALSE
|
||||
@@ -63,9 +63,13 @@
|
||||
H.stop_sound_channel(CHANNEL_HEARTBEAT)
|
||||
beat = BEAT_NONE
|
||||
|
||||
if(H.jitteriness && H.health > HEALTH_THRESHOLD_FULLCRIT && (!beat || beat == BEAT_SLOW))
|
||||
H.playsound_local(get_turf(H),fastbeat,40,0, channel = CHANNEL_HEARTBEAT)
|
||||
beat = BEAT_FAST
|
||||
if(H.jitteriness)
|
||||
if(H.health > HEALTH_THRESHOLD_FULLCRIT && (!beat || beat == BEAT_SLOW))
|
||||
H.playsound_local(get_turf(H),fastbeat,40,0, channel = CHANNEL_HEARTBEAT)
|
||||
beat = BEAT_FAST
|
||||
else if(beat == BEAT_FAST)
|
||||
H.stop_sound_channel(CHANNEL_HEARTBEAT)
|
||||
beat = BEAT_NONE
|
||||
|
||||
/obj/item/organ/heart/cursed
|
||||
name = "cursed heart"
|
||||
|
||||
@@ -249,7 +249,7 @@
|
||||
if(bz_pp > BZ_trip_balls_min)
|
||||
H.hallucination += 20
|
||||
if(prob(33))
|
||||
H.adjustBrainLoss(3)
|
||||
H.adjustBrainLoss(3, 150)
|
||||
else if(bz_pp > 0.01)
|
||||
H.hallucination += 5//Removed at 2 per tick so this will slowly build up
|
||||
|
||||
|
||||
@@ -108,12 +108,11 @@
|
||||
return TRUE
|
||||
|
||||
/obj/item/organ/vocal_cords/colossus/handle_speech(message)
|
||||
owner.say(uppertext(message), spans = spans, sanitize = FALSE)
|
||||
playsound(get_turf(owner), 'sound/magic/clockwork/invoke_general.ogg', 300, 1, 5)
|
||||
return //voice of god speaks for us
|
||||
|
||||
/obj/item/organ/vocal_cords/colossus/speak_with(message)
|
||||
var/cooldown = voice_of_god(message, owner, spans, base_multiplier)
|
||||
var/cooldown = voice_of_god(uppertext(message), owner, spans, base_multiplier)
|
||||
next_command = world.time + (cooldown * cooldown_mod)
|
||||
|
||||
//////////////////////////////////////
|
||||
@@ -135,6 +134,8 @@
|
||||
else
|
||||
span_list = list()
|
||||
|
||||
user.say(message, spans = span_list, sanitize = FALSE)
|
||||
|
||||
message = lowertext(message)
|
||||
var/mob/living/list/listeners = list()
|
||||
for(var/mob/living/L in get_hearers_in_view(8, user))
|
||||
|
||||
@@ -23,9 +23,6 @@ GLOBAL_DATUM_INIT(default_state, /datum/ui_state/default, new)
|
||||
. = shared_ui_interaction(src_object)
|
||||
if(. > UI_CLOSE)
|
||||
. = min(., shared_living_ui_distance(src_object)) // Check the distance...
|
||||
// Derp a bit if we have brain loss.
|
||||
if(prob(getBrainLoss()))
|
||||
return UI_UPDATE
|
||||
|
||||
/mob/living/silicon/robot/default_can_use_topic(src_object)
|
||||
. = shared_ui_interaction(src_object)
|
||||
|
||||
Reference in New Issue
Block a user