Merge pull request #2955 from Anewbe/heart_damage

Big Ol' Medical Tweaks
This commit is contained in:
MagmaRam
2017-03-28 20:02:24 -05:00
committed by GitHub
41 changed files with 467 additions and 193 deletions

View File

@@ -66,6 +66,27 @@
containername = "Surgery crate" containername = "Surgery crate"
access = access_medical access = access_medical
/datum/supply_packs/med/deathalarm
name = "Death Alarm crate"
contains = list(
/obj/item/weapon/storage/box/cdeathalarm_kit,
/obj/item/weapon/storage/box/cdeathalarm_kit
)
cost = 40
containertype = "/obj/structure/closet/crate/secure"
containername = "Death Alarm crate"
access = access_medical
/datum/supply_packs/med/clotting
name = "Clotting Medicine crate"
contains = list(
/obj/item/weapon/storage/firstaid/clotting
)
cost = 40
containertype = "/obj/structure/closet/crate/secure"
containername = "Clotting Medicine crate"
access = access_medical
/datum/supply_packs/med/sterile /datum/supply_packs/med/sterile
name = "Sterile equipment crate" name = "Sterile equipment crate"
contains = list( contains = list(

View File

@@ -19,6 +19,16 @@
item_cost = 5 item_cost = 5
path = /obj/item/weapon/storage/box/ambrosia path = /obj/item/weapon/storage/box/ambrosia
/datum/uplink_item/item/medical/clotting
name = "Clotting Medicine injector"
item_cost = 10
path = /obj/item/weapon/reagent_containers/hypospray/autoinjector/clotting
/datum/uplink_item/item/medical/bonemeds
name = "Bone Repair injector"
item_cost = 10
path = /obj/item/weapon/reagent_containers/hypospray/autoinjector/bonemed
/datum/uplink_item/item/medical/ambrosiadeusseeds /datum/uplink_item/item/medical/ambrosiadeusseeds
name = "Box of 7x ambrosia deus seed packets" name = "Box of 7x ambrosia deus seed packets"
item_cost = 10 item_cost = 10

View File

@@ -305,7 +305,7 @@
if(subject.isSynthetic()) if(subject.isSynthetic())
scantemp = "Error: Majority of subject is non-organic." scantemp = "Error: Majority of subject is non-organic."
return return
if (subject.suiciding == 1) if (subject.suiciding)
scantemp = "Error: Subject's brain is not responding to scanning stimuli." scantemp = "Error: Subject's brain is not responding to scanning stimuli."
return return
if ((!subject.ckey) || (!subject.client)) if ((!subject.ckey) || (!subject.client))

View File

@@ -452,23 +452,27 @@ the implant may become unstable and either pre-maturely inject the subject or si
var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null) var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null)
if(istype(t, /area/syndicate_station) || istype(t, /area/syndicate_mothership) || istype(t, /area/shuttle/syndicate_elite) ) if(istype(t, /area/syndicate_station) || istype(t, /area/syndicate_mothership) || istype(t, /area/shuttle/syndicate_elite) )
//give the syndies a bit of stealth //give the syndies a bit of stealth
a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm", "Security") a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm", "General")
a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm", "Medical") // a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm", "Security")
// a.autosay("[mobname] has died in Space!", "[mobname]'s Death Alarm", "Medical")
else else
a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm", "Security") a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm", "General")
a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm", "Medical") // a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm", "Security")
// a.autosay("[mobname] has died in [t.name]!", "[mobname]'s Death Alarm", "Medical")
qdel(a) qdel(a)
processing_objects.Remove(src) processing_objects.Remove(src)
if ("emp") if ("emp")
var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null) var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null)
var/name = prob(50) ? t.name : pick(teleportlocs) var/name = prob(50) ? t.name : pick(teleportlocs)
a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm", "Security") a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm", "General")
a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm", "Medical") // a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm", "Security")
// a.autosay("[mobname] has died in [name]!", "[mobname]'s Death Alarm", "Medical")
qdel(a) qdel(a)
else else
var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null) var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset/heads/captain(null)
a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm", "Security") a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm", "General")
a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm", "Medical") // a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm", "Security")
// a.autosay("[mobname] has died-zzzzt in-in-in...", "[mobname]'s Death Alarm", "Medical")
qdel(a) qdel(a)
processing_objects.Remove(src) processing_objects.Remove(src)

View File

@@ -126,6 +126,7 @@
new /obj/item/weapon/storage/pill_bottle/dylovene(src) new /obj/item/weapon/storage/pill_bottle/dylovene(src)
new /obj/item/weapon/storage/pill_bottle/tramadol(src) new /obj/item/weapon/storage/pill_bottle/tramadol(src)
new /obj/item/weapon/storage/pill_bottle/spaceacillin(src) new /obj/item/weapon/storage/pill_bottle/spaceacillin(src)
new /obj/item/weapon/reagent_containers/hypospray/autoinjector/clotting(src)
new /obj/item/stack/medical/splint(src) new /obj/item/stack/medical/splint(src)
return return
@@ -150,6 +151,19 @@
new /obj/item/stack/medical/advanced/bruise_pack(src) new /obj/item/stack/medical/advanced/bruise_pack(src)
return return
/obj/item/weapon/storage/firstaid/clotting
name = "clotting kit"
desc = "Contains chemicals to stop bleeding."
max_storage_space = ITEMSIZE_COST_SMALL * 7
/obj/item/weapon/storage/firstaid/clotting/New()
..()
if (empty)
return
for(var/i = 1 to 8)
new /obj/item/weapon/reagent_containers/hypospray/autoinjector/clotting(src)
return
/* /*
* Pill Bottles * Pill Bottles
*/ */

View File

@@ -178,3 +178,5 @@
this.blood_DNA["UNKNOWN BLOOD"] = "X*" this.blood_DNA["UNKNOWN BLOOD"] = "X*"
else if( istype(M, /mob/living/silicon/robot )) else if( istype(M, /mob/living/silicon/robot ))
new /obj/effect/decal/cleanable/blood/oil(src) new /obj/effect/decal/cleanable/blood/oil(src)
else if(ishuman(M))
add_blood(M)

View File

@@ -26,7 +26,7 @@
if(!canmove || restrained()) //just while I finish up the new 'fun' suiciding verb. This is to prevent metagaming via suicide if(!canmove || restrained()) //just while I finish up the new 'fun' suiciding verb. This is to prevent metagaming via suicide
src << "You can't commit suicide whilst restrained! ((You can type Ghost instead however.))" src << "You can't commit suicide whilst restrained! ((You can type Ghost instead however.))"
return return
suiciding = 1 suiciding = 15
does_not_breathe = 0 //Prevents ling-suicide zombies, or something does_not_breathe = 0 //Prevents ling-suicide zombies, or something
var/obj/item/held_item = get_active_hand() var/obj/item/held_item = get_active_hand()
if(held_item) if(held_item)
@@ -73,10 +73,16 @@
return return
log_and_message_admins("[key_name(src)] commited suicide") log_and_message_admins("[key_name(src)] commited suicide")
viewers(src) << pick("<span class='danger'>[src] is attempting to bite \his tongue off! It looks like \he's trying to commit suicide.</span>", \
var/suicidemsg
suicidemsg = pick("<span class='danger'>[src] is attempting to bite \his tongue off! It looks like \he's trying to commit suicide.</span>", \
"<span class='danger'>[src] is jamming \his thumbs into \his eye sockets! It looks like \he's trying to commit suicide.</span>", \ "<span class='danger'>[src] is jamming \his thumbs into \his eye sockets! It looks like \he's trying to commit suicide.</span>", \
"<span class='danger'>[src] is twisting \his own neck! It looks like \he's trying to commit suicide.</span>", \ "<span class='danger'>[src] is twisting \his own neck! It looks like \he's trying to commit suicide.</span>", \
"<span class='danger'>[src] is holding \his breath! It looks like \he's trying to commit suicide.</span>") "<span class='danger'>[src] is holding \his breath! It looks like \he's trying to commit suicide.</span>")
if(isSynthetic())
suicidemsg = "<span class='danger'>[src] is attempting to switch \his power off! It looks like \he's trying to commit suicide.</span>"
visible_message(suicidemsg)
adjustOxyLoss(max(175 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0)) adjustOxyLoss(max(175 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0))
updatehealth() updatehealth()
@@ -172,7 +178,7 @@
var/confirm = alert("Are you sure you want to commit suicide?", "Confirm Suicide", "Yes", "No") var/confirm = alert("Are you sure you want to commit suicide?", "Confirm Suicide", "Yes", "No")
if(confirm == "Yes") if(confirm == "Yes")
suiciding = 1 suiciding = 30
setOxyLoss(100) setOxyLoss(100)
adjustBruteLoss(100 - getBruteLoss()) adjustBruteLoss(100 - getBruteLoss())
setToxLoss(100) setToxLoss(100)

View File

@@ -157,6 +157,7 @@
list("antibiotics", "spaceacillin", 0, 20), list("antibiotics", "spaceacillin", 0, 20),
list("antitoxins", "anti_toxin", 0, 20), list("antitoxins", "anti_toxin", 0, 20),
list("nutrients", "glucose", 0, 80), list("nutrients", "glucose", 0, 80),
list("clotting agent", "myelamine", 0, 80),
list("hyronalin", "hyronalin", 0, 20), list("hyronalin", "hyronalin", 0, 20),
list("radium", "radium", 0, 20) list("radium", "radium", 0, 20)
) )
@@ -246,6 +247,7 @@
list("hyperzine", "hyperzine", 0, 30), list("hyperzine", "hyperzine", 0, 30),
list("oxycodone", "oxycodone", 0, 30), list("oxycodone", "oxycodone", 0, 30),
list("nutrients", "glucose", 0, 80), list("nutrients", "glucose", 0, 80),
list("clotting agent", "myelamine", 0, 80)
) )
interface_name = "combat chem dispenser" interface_name = "combat chem dispenser"
@@ -263,6 +265,20 @@
interface_name = "mounted chem injector" interface_name = "mounted chem injector"
interface_desc = "Dispenses loaded chemicals via an arm-mounted injector." interface_desc = "Dispenses loaded chemicals via an arm-mounted injector."
/obj/item/rig_module/chem_dispenser/injector/advanced
charges = list(
list("tricordrazine", "tricordrazine", 0, 80),
list("tramadol", "tramadol", 0, 80),
list("dexalin plus", "dexalinp", 0, 80),
list("antibiotics", "spaceacillin", 0, 80),
list("antitoxins", "anti_toxin", 0, 80),
list("nutrients", "glucose", 0, 80),
list("hyronalin", "hyronalin", 0, 80),
list("radium", "radium", 0, 80),
list("clotting agent", "myelamine", 0, 80)
)
/obj/item/rig_module/voice /obj/item/rig_module/voice
name = "hardsuit voice synthesiser" name = "hardsuit voice synthesiser"

View File

@@ -49,7 +49,7 @@
/obj/item/rig_module/ai_container, /obj/item/rig_module/ai_container,
/obj/item/rig_module/maneuvering_jets, /obj/item/rig_module/maneuvering_jets,
/obj/item/rig_module/device/healthscanner, /obj/item/rig_module/device/healthscanner,
/obj/item/rig_module/chem_dispenser/injector /obj/item/rig_module/chem_dispenser/injector/advanced
) )
/obj/item/weapon/rig/ert/security /obj/item/weapon/rig/ert/security

View File

@@ -105,7 +105,7 @@ I said no!
/datum/recipe/xenoburger /datum/recipe/xenoburger
items = list( items = list(
/obj/item/weapon/reagent_containers/food/snacks/bun, /obj/item/weapon/reagent_containers/food/snacks/bun,
/obj/item/weapon/reagent_containers/food/snacks/xenomeat /obj/item/weapon/reagent_containers/food/snacks/spidermeat // /obj/item/weapon/reagent_containers/food/snacks/xenomeat
) )
result = /obj/item/weapon/reagent_containers/food/snacks/xenoburger result = /obj/item/weapon/reagent_containers/food/snacks/xenoburger
@@ -224,9 +224,9 @@ I said no!
/obj/item/weapon/reagent_containers/food/snacks/dough, /obj/item/weapon/reagent_containers/food/snacks/dough,
/obj/item/weapon/reagent_containers/food/snacks/dough, /obj/item/weapon/reagent_containers/food/snacks/dough,
/obj/item/weapon/reagent_containers/food/snacks/dough, /obj/item/weapon/reagent_containers/food/snacks/dough,
/obj/item/weapon/reagent_containers/food/snacks/xenomeat, /obj/item/weapon/reagent_containers/food/snacks/spidermeat, //xenomeat,
/obj/item/weapon/reagent_containers/food/snacks/xenomeat, /obj/item/weapon/reagent_containers/food/snacks/spidermeat, //xenomeat,
/obj/item/weapon/reagent_containers/food/snacks/xenomeat, /obj/item/weapon/reagent_containers/food/snacks/spidermeat, //xenomeat,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge, /obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge, /obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge, /obj/item/weapon/reagent_containers/food/snacks/cheesewedge,

View File

@@ -71,15 +71,11 @@
/mob/living/carbon/brain/handle_chemicals_in_body() /mob/living/carbon/brain/handle_chemicals_in_body()
chem_effects.Cut() chem_effects.Cut()
analgesic = 0
if(touching) touching.metabolize() if(touching) touching.metabolize()
if(ingested) ingested.metabolize() if(ingested) ingested.metabolize()
if(bloodstr) bloodstr.metabolize() if(bloodstr) bloodstr.metabolize()
if(CE_PAINKILLER in chem_effects)
analgesic = chem_effects[CE_PAINKILLER]
confused = max(0, confused - 1) confused = max(0, confused - 1)
// decrement dizziness counter, clamped to 0 // decrement dizziness counter, clamped to 0
if(resting) if(resting)

View File

@@ -7,8 +7,7 @@
var/last_eating = 0 //Not sure what this does... I found it hidden in food.dm var/last_eating = 0 //Not sure what this does... I found it hidden in food.dm
var/life_tick = 0 // The amount of life ticks that have processed on this mob. var/life_tick = 0 // The amount of life ticks that have processed on this mob.
var/analgesic = 0 // when this is set, the mob isn't affected by shock or pain
// life should decrease this by 1 every tick
// total amount of wounds on mob, used to spread out healing and the like over all wounds // total amount of wounds on mob, used to spread out healing and the like over all wounds
var/number_wounds = 0 var/number_wounds = 0
var/obj/item/handcuffed = null //Whether or not the mob is handcuffed var/obj/item/handcuffed = null //Whether or not the mob is handcuffed

View File

@@ -1050,7 +1050,7 @@
"<span class='warning'>A spike of pain jolts your [organ.name] as you bump [O] inside.</span>", \ "<span class='warning'>A spike of pain jolts your [organ.name] as you bump [O] inside.</span>", \
"<span class='warning'>Your movement jostles [O] in your [organ.name] painfully.</span>", \ "<span class='warning'>Your movement jostles [O] in your [organ.name] painfully.</span>", \
"<span class='warning'>Your movement jostles [O] in your [organ.name] painfully.</span>") "<span class='warning'>Your movement jostles [O] in your [organ.name] painfully.</span>")
src << msg custom_pain(msg, 40)
organ.take_damage(rand(1,3), 0, 0) organ.take_damage(rand(1,3), 0, 0)
if(!(organ.robotic >= ORGAN_ROBOT) && (should_have_organ(O_HEART))) //There is no blood in protheses. if(!(organ.robotic >= ORGAN_ROBOT) && (should_have_organ(O_HEART))) //There is no blood in protheses.

View File

@@ -56,7 +56,7 @@
if (!lying && !buckled && world.time - l_move_time < 15) if (!lying && !buckled && world.time - l_move_time < 15)
//Moving around with fractured ribs won't do you any good //Moving around with fractured ribs won't do you any good
if (prob(10) && !stat && can_feel_pain() && analgesic < 50 && E.is_broken() && E.internal_organs.len) if (prob(10) && !stat && can_feel_pain() && chem_effects[CE_PAINKILLER] < 50 && E.is_broken() && E.internal_organs.len)
custom_pain("Pain jolts through your broken [E.encased ? E.encased : E.name], staggering you!", 50) custom_pain("Pain jolts through your broken [E.encased ? E.encased : E.name], staggering you!", 50)
drop_item(loc) drop_item(loc)
Stun(2) Stun(2)

View File

@@ -186,7 +186,7 @@
var/rn = rand(0, 200) var/rn = rand(0, 200)
if(getBrainLoss() >= 5) if(getBrainLoss() >= 5)
if(0 <= rn && rn <= 3) if(0 <= rn && rn <= 3)
custom_pain("Your head feels numb and painful.") custom_pain("Your head feels numb and painful.", 10)
if(getBrainLoss() >= 15) if(getBrainLoss() >= 15)
if(4 <= rn && rn <= 6) if(eye_blurry <= 0) if(4 <= rn && rn <= 6) if(eye_blurry <= 0)
src << "<span class='warning'>It becomes hard to see for some reason.</span>" src << "<span class='warning'>It becomes hard to see for some reason.</span>"
@@ -328,17 +328,20 @@
if(status_flags & GODMODE) if(status_flags & GODMODE)
return return
if(suiciding)
failed_last_breath = 1
adjustOxyLoss(2)//If you are suiciding, you should die a little bit faster
oxygen_alert = max(oxygen_alert, 1)
suiciding --
return 0
if(does_not_breathe) if(does_not_breathe)
failed_last_breath = 0 failed_last_breath = 0
adjustOxyLoss(-5) adjustOxyLoss(-5)
return return
if(!breath || (breath.total_moles == 0) || suiciding) if(!breath || (breath.total_moles == 0))
failed_last_breath = 1 failed_last_breath = 1
if(suiciding)
adjustOxyLoss(2)//If you are suiciding, you should die a little bit faster
oxygen_alert = max(oxygen_alert, 1)
return 0
if(health > config.health_threshold_crit) if(health > config.health_threshold_crit)
adjustOxyLoss(HUMAN_MAX_OXYLOSS) adjustOxyLoss(HUMAN_MAX_OXYLOSS)
else else
@@ -350,8 +353,11 @@
rupture_lung() rupture_lung()
if(should_have_organ("brain")) if(should_have_organ("brain"))
var/brainOxPercent = 0.02 //Default2% of your current oxyloss is applied as brain damage, 50 oxyloss is 1 brain damage
if(CE_STABLE in chem_effects)
brainOxPercent = 0.01 //Halved in effect
if(prob(5)) if(prob(5))
adjustBrainLoss(0.02 * oxyloss) //2% of your current oxyloss is applied as brain damage, 50 oxyloss is 1 brain damage adjustBrainLoss(brainOxPercent * oxyloss)
oxygen_alert = max(oxygen_alert, 1) oxygen_alert = max(oxygen_alert, 1)
@@ -794,7 +800,6 @@
if(reagents) if(reagents)
chem_effects.Cut() chem_effects.Cut()
analgesic = 0
if(!isSynthetic()) if(!isSynthetic())
@@ -802,9 +807,6 @@
if(ingested) ingested.metabolize() if(ingested) ingested.metabolize()
if(bloodstr) bloodstr.metabolize() if(bloodstr) bloodstr.metabolize()
if(CE_PAINKILLER in chem_effects)
analgesic = chem_effects[CE_PAINKILLER]
var/total_phoronloss = 0 var/total_phoronloss = 0
for(var/obj/item/I in src) for(var/obj/item/I in src)
if(I.contaminated) if(I.contaminated)
@@ -1155,7 +1157,7 @@
see_invisible = SEE_INVISIBLE_LIVING see_invisible = SEE_INVISIBLE_LIVING
if(healths) if(healths)
if (analgesic > 100) if (chem_effects[CE_PAINKILLER] > 100)
healths.icon_state = "health_numb" healths.icon_state = "health_numb"
else else
// Generate a by-limb health display. // Generate a by-limb health display.
@@ -1437,8 +1439,11 @@
shock_stage = max(shock_stage-1, 0) shock_stage = max(shock_stage-1, 0)
return return
if(stat)
return 0
if(shock_stage == 10) if(shock_stage == 10)
src << "<span class='danger'>[pick("It hurts so much", "You really need some painkillers", "Dear god, the pain")]!</span>" custom_pain("[pick("It hurts so much", "You really need some painkillers", "Dear god, the pain")]!", 40)
if(shock_stage >= 30) if(shock_stage >= 30)
if(shock_stage == 30) emote("me",1,"is having trouble keeping their eyes open.") if(shock_stage == 30) emote("me",1,"is having trouble keeping their eyes open.")

View File

@@ -67,15 +67,11 @@
/mob/living/carbon/slime/handle_chemicals_in_body() /mob/living/carbon/slime/handle_chemicals_in_body()
chem_effects.Cut() chem_effects.Cut()
analgesic = 0
if(touching) touching.metabolize() if(touching) touching.metabolize()
if(ingested) ingested.metabolize() if(ingested) ingested.metabolize()
if(bloodstr) bloodstr.metabolize() if(bloodstr) bloodstr.metabolize()
if(CE_PAINKILLER in chem_effects)
analgesic = chem_effects[CE_PAINKILLER]
src.updatehealth() src.updatehealth()
return //TODO: DEFERRED return //TODO: DEFERRED

View File

@@ -60,7 +60,7 @@
var/painMes = pick("You can feel your body becoming weak!", "You feel like you're about to die!", "You feel every part of your body screaming in agony!", "A low, rolling pain passes through your body!", "Your body feels as if it's falling apart!", "You feel extremely weak!", "A sharp, deep pain bathes every inch of your body!") var/painMes = pick("You can feel your body becoming weak!", "You feel like you're about to die!", "You feel every part of your body screaming in agony!", "A low, rolling pain passes through your body!", "Your body feels as if it's falling apart!", "You feel extremely weak!", "A sharp, deep pain bathes every inch of your body!")
if (ishuman(M)) if (ishuman(M))
var/mob/living/carbon/human/H = M var/mob/living/carbon/human/H = M
H.custom_pain(painMes) H.custom_pain(painMes, 100)
else if (istype(M, /mob/living/carbon)) else if (istype(M, /mob/living/carbon))
var/mob/living/carbon/C = M var/mob/living/carbon/C = M
if (C.can_feel_pain()) if (C.can_feel_pain())

View File

@@ -14,7 +14,7 @@
1.2 * src.getShockBruteLoss() + \ 1.2 * src.getShockBruteLoss() + \
1.7 * src.getCloneLoss() + \ 1.7 * src.getCloneLoss() + \
2 * src.halloss + \ 2 * src.halloss + \
-1 * src.analgesic -1 * src.chem_effects[CE_PAINKILLER]
if(src.slurring) if(src.slurring)
src.traumatic_shock -= 20 src.traumatic_shock -= 20

View File

@@ -716,11 +716,20 @@ default behaviour is:
src << "<span class='warning'>You feel like you are about to throw up!</span>" src << "<span class='warning'>You feel like you are about to throw up!</span>"
sleep(100) //and you have 10 more for mad dash to the bucket sleep(100) //and you have 10 more for mad dash to the bucket
//Damaged livers cause you to vomit blood.
if(!blood_vomit)
if(ishuman(src))
var/mob/living/carbon/human/H = src
if(!H.isSynthetic())
var/obj/item/organ/internal/liver/L = H.internal_organs_by_name["liver"]
if(L.is_broken())
blood_vomit = 1
Stun(5) Stun(5)
src.visible_message("<span class='warning'>[src] throws up!</span>","<span class='warning'>You throw up!</span>") src.visible_message("<span class='warning'>[src] throws up!</span>","<span class='warning'>You throw up!</span>")
playsound(loc, 'sound/effects/splat.ogg', 50, 1) playsound(loc, 'sound/effects/splat.ogg', 50, 1)
var/turf/simulated/T = get_turf(src) var/turf/simulated/T = get_turf(src) //TODO: Make add_blood_floor remove blood from human mobs
if(istype(T)) if(istype(T))
if(blood_vomit) if(blood_vomit)
T.add_blood_floor(src) T.add_blood_floor(src)

View File

@@ -36,7 +36,7 @@
speak_emote = list("chitters") speak_emote = list("chitters")
emote_hear = list("chitters") emote_hear = list("chitters")
meat_type = /obj/item/weapon/reagent_containers/food/snacks/xenomeat meat_type = /obj/item/weapon/reagent_containers/food/snacks/spidermeat
var/busy = 0 var/busy = 0
var/poison_per_bite = 5 var/poison_per_bite = 5

View File

@@ -903,7 +903,7 @@ mob/proc/yank_out_object()
if(prob(selection.w_class * 5) && (affected.robotic < ORGAN_ROBOT)) //I'M SO ANEMIC I COULD JUST -DIE-. if(prob(selection.w_class * 5) && (affected.robotic < ORGAN_ROBOT)) //I'M SO ANEMIC I COULD JUST -DIE-.
var/datum/wound/internal_bleeding/I = new (min(selection.w_class * 5, 15)) var/datum/wound/internal_bleeding/I = new (min(selection.w_class * 5, 15))
affected.wounds += I affected.wounds += I
H.custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 1) H.custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 50)
if (ishuman(U)) if (ishuman(U))
var/mob/living/carbon/human/human_user = U var/mob/living/carbon/human/human_user = U

View File

@@ -20,7 +20,7 @@
user << "<span class='notice'>You must stand still to feel [E] for fractures.</span>" user << "<span class='notice'>You must stand still to feel [E] for fractures.</span>"
else if(E.status & ORGAN_BROKEN) else if(E.status & ORGAN_BROKEN)
user << "<span class='warning'>The [E.encased ? E.encased : "bone in the [E.name]"] moves slightly when you poke it!</span>" user << "<span class='warning'>The [E.encased ? E.encased : "bone in the [E.name]"] moves slightly when you poke it!</span>"
H.custom_pain("Your [E.name] hurts where it's poked.") H.custom_pain("Your [E.name] hurts where it's poked.", 40)
else else
user << "<span class='notice'>The [E.encased ? E.encased : "bones in the [E.name]"] seem to be fine.</span>" user << "<span class='notice'>The [E.encased ? E.encased : "bones in the [E.name]"] seem to be fine.</span>"

View File

@@ -6,6 +6,7 @@ var/const/BLOOD_VOLUME_SAFE = 85
var/const/BLOOD_VOLUME_OKAY = 75 var/const/BLOOD_VOLUME_OKAY = 75
var/const/BLOOD_VOLUME_BAD = 60 var/const/BLOOD_VOLUME_BAD = 60
var/const/BLOOD_VOLUME_SURVIVE = 40 var/const/BLOOD_VOLUME_SURVIVE = 40
var/const/CE_STABLE_THRESHOLD = 0.5
/mob/living/carbon/human/var/datum/reagents/vessel // Container for blood and BLOOD ONLY. Do not transfer other chems here. /mob/living/carbon/human/var/datum/reagents/vessel // Container for blood and BLOOD ONLY. Do not transfer other chems here.
/mob/living/carbon/human/var/var/pale = 0 // Should affect how mob sprite is drawn, but currently doesn't. /mob/living/carbon/human/var/var/pale = 0 // Should affect how mob sprite is drawn, but currently doesn't.
@@ -68,14 +69,24 @@ var/const/BLOOD_VOLUME_SURVIVE = 40
if(!heart) if(!heart)
blood_volume = 0 blood_volume = 0
else if(heart.damage > 1 && heart.damage < heart.min_bruised_damage) else if(heart.is_broken())
blood_volume *= 0.8
else if(heart.damage >= heart.min_bruised_damage && heart.damage < heart.min_broken_damage)
blood_volume *= 0.6
else if(heart.damage >= heart.min_broken_damage && heart.damage < INFINITY)
blood_volume *= 0.3 blood_volume *= 0.3
else if(heart.is_bruised())
blood_volume *= 0.7
else if(heart.damage)
blood_volume *= 0.8
//Effects of bloodloss //Effects of bloodloss
var/dmg_coef = 1 //Lower means less damage taken
var/threshold_coef = 1 //Lower means the damage caps off lower
if(CE_STABLE in chem_effects)
dmg_coef = 0.5
threshold_coef = 0.75
// These are Bay bits, do some sort of calculation.
// dmg_coef = min(1, 10/chem_effects[CE_STABLE]) //TODO: add effect for increased damage
// threshold_coef = min(dmg_coef / CE_STABLE_THRESHOLD, 1)
if(blood_volume >= BLOOD_VOLUME_SAFE) if(blood_volume >= BLOOD_VOLUME_SAFE)
if(pale) if(pale)
pale = 0 pale = 0
@@ -89,23 +100,23 @@ var/const/BLOOD_VOLUME_SURVIVE = 40
if(prob(1)) if(prob(1))
var/word = pick("dizzy","woosey","faint") var/word = pick("dizzy","woosey","faint")
src << "\red You feel [word]" src << "\red You feel [word]"
if(oxyloss < 20) if(getOxyLoss() < 20 * threshold_coef)
oxyloss += 3 adjustOxyLoss(3 * dmg_coef)
else if(blood_volume >= BLOOD_VOLUME_BAD) else if(blood_volume >= BLOOD_VOLUME_BAD)
if(!pale) if(!pale)
pale = 1 pale = 1
update_body() update_body()
eye_blurry = max(eye_blurry,6) eye_blurry = max(eye_blurry,6)
if(oxyloss < 50) if(getOxyLoss() < 50 * threshold_coef)
oxyloss += 10 adjustOxyLoss(10 * dmg_coef)
oxyloss += 1 adjustOxyLoss(1 * dmg_coef)
if(prob(15)) if(prob(15))
Paralyse(rand(1,3)) Paralyse(rand(1,3))
var/word = pick("dizzy","woosey","faint") var/word = pick("dizzy","woosey","faint")
src << "\red You feel extremely [word]" src << "\red You feel extremely [word]"
else if(blood_volume >= BLOOD_VOLUME_SURVIVE) else if(blood_volume >= BLOOD_VOLUME_SURVIVE)
oxyloss += 5 adjustOxyLoss(5 * dmg_coef)
toxloss += 3 adjustToxLoss(3 * dmg_coef)
if(prob(15)) if(prob(15))
var/word = pick("dizzy","woosey","faint") var/word = pick("dizzy","woosey","faint")
src << "\red You feel extremely [word]" src << "\red You feel extremely [word]"
@@ -115,8 +126,8 @@ var/const/BLOOD_VOLUME_SURVIVE = 40
update_body() update_body()
eye_blurry = max(eye_blurry,6) eye_blurry = max(eye_blurry,6)
Paralyse(3) Paralyse(3)
toxloss += 3 adjustToxLoss(3 * dmg_coef)
oxyloss += 75 // 15 more than dexp fixes (also more than dex+dexp+tricord) adjustOxyLoss(75 * dmg_coef) // 15 more than dexp fixes (also more than dex+dexp+tricord)
// Without enough blood you slowly go hungry. // Without enough blood you slowly go hungry.
if(blood_volume < BLOOD_VOLUME_SAFE) if(blood_volume < BLOOD_VOLUME_SAFE)
@@ -144,6 +155,8 @@ var/const/BLOOD_VOLUME_SURVIVE = 40
blood_loss_divisor += 5 blood_loss_divisor += 5
else if((temp.organ_tag == BP_L_HAND) || (temp.organ_tag == BP_R_HAND) || (temp.organ_tag == BP_L_FOOT) || (temp.organ_tag == BP_R_FOOT)) else if((temp.organ_tag == BP_L_HAND) || (temp.organ_tag == BP_R_HAND) || (temp.organ_tag == BP_L_FOOT) || (temp.organ_tag == BP_R_FOOT))
blood_loss_divisor += 10 blood_loss_divisor += 10
if(CE_STABLE in chem_effects) //Inaprov slows bloodloss
blood_loss_divisor += 10
if(temp.applied_pressure) if(temp.applied_pressure)
if(ishuman(temp.applied_pressure)) if(ishuman(temp.applied_pressure))
var/mob/living/carbon/human/H = temp.applied_pressure var/mob/living/carbon/human/H = temp.applied_pressure

View File

@@ -24,7 +24,7 @@
/obj/item/organ/internal/lungs/proc/rupture() /obj/item/organ/internal/lungs/proc/rupture()
var/obj/item/organ/external/parent = owner.get_organ(parent_organ) var/obj/item/organ/external/parent = owner.get_organ(parent_organ)
if(istype(parent)) if(istype(parent))
owner.custom_pain("You feel a stabbing pain in your [parent.name]!", 1) owner.custom_pain("You feel a stabbing pain in your [parent.name]!", 50)
bruise() bruise()
/obj/item/organ/internal/lungs/handle_germ_effects() /obj/item/organ/internal/lungs/handle_germ_effects()

View File

@@ -256,7 +256,7 @@ var/list/organ_cache = list()
if(owner && parent_organ && amount > 0) if(owner && parent_organ && amount > 0)
var/obj/item/organ/external/parent = owner.get_organ(parent_organ) var/obj/item/organ/external/parent = owner.get_organ(parent_organ)
if(parent && !silent) if(parent && !silent)
owner.custom_pain("Something inside your [parent.name] hurts a lot.", 1) owner.custom_pain("Something inside your [parent.name] hurts a lot.", amount)
/obj/item/organ/proc/bruise() /obj/item/organ/proc/bruise()
damage = max(damage, min_bruised_damage) damage = max(damage, min_bruised_damage)

View File

@@ -487,7 +487,7 @@ This function completely restores a damaged organ to perfect condition.
if((damage > 15) && (type != BURN) && (local_damage > 30) && prob(damage) && (robotic < ORGAN_ROBOT)) if((damage > 15) && (type != BURN) && (local_damage > 30) && prob(damage) && (robotic < ORGAN_ROBOT))
var/datum/wound/internal_bleeding/I = new (min(damage - 15, 15)) var/datum/wound/internal_bleeding/I = new (min(damage - 15, 15))
wounds += I wounds += I
owner.custom_pain("You feel something rip in your [name]!", 1) owner.custom_pain("You feel something rip in your [name]!", 50)
//Burn damage can cause fluid loss due to blistering and cook-off //Burn damage can cause fluid loss due to blistering and cook-off
if((damage > 5 || damage + burn_dam >= 15) && type == BURN && (robotic < ORGAN_ROBOT)) if((damage > 5 || damage + burn_dam >= 15) && type == BURN && (robotic < ORGAN_ROBOT))
@@ -705,7 +705,7 @@ Note that amputating the affected organ does in fact remove the infection from t
owner.vessel.remove_reagent("blood", wound_update_accuracy * W.damage/40) //line should possibly be moved to handle_blood, so all the bleeding stuff is in one place. owner.vessel.remove_reagent("blood", wound_update_accuracy * W.damage/40) //line should possibly be moved to handle_blood, so all the bleeding stuff is in one place.
if(prob(1 * wound_update_accuracy)) if(prob(1 * wound_update_accuracy))
owner.custom_pain("You feel a stabbing pain in your [name]!",1) owner.custom_pain("You feel a stabbing pain in your [name]!", 50)
// slow healing // slow healing
var/heal_amt = 0 var/heal_amt = 0

View File

@@ -248,19 +248,22 @@
if(inflamed == 1) if(inflamed == 1)
if(prob(5)) if(prob(5))
owner << "<span class='warning'>You feel a stinging pain in your abdomen!</span>" if(owner.can_feel_pain())
owner.emote("me", 1, "winces slightly.") owner.custom_pain("You feel a stinging pain in your abdomen!", 25)
if(inflamed > 1) if(inflamed > 1)
if(prob(3)) if(prob(3))
owner << "<span class='warning'>You feel a stabbing pain in your abdomen!</span>" if(owner.can_feel_pain())
owner.emote("me", 1, "winces painfully.") owner.custom_pain("You feel a stabbing pain in your abdomen!", 50)
owner.adjustToxLoss(1) owner.adjustToxLoss(1)
if(inflamed > 2) if(inflamed > 2)
if(prob(1)) if(prob(1))
owner.vomit() owner.vomit()
if(owner.can_feel_pain())
owner.custom_pain("You feel a horrible pain in your abdomen!", 70)
if(inflamed > 3) if(inflamed > 3)
if(prob(1)) if(prob(1))
owner << "<span class='danger'>Your abdomen is a world of pain!</span>" if(owner.can_feel_pain())
owner.custom_pain("You feel a stinging pain in your abdomen!", 100)
owner.Weaken(10) owner.Weaken(10)
var/obj/item/organ/external/groin = owner.get_organ(BP_GROIN) var/obj/item/organ/external/groin = owner.get_organ(BP_GROIN)

View File

@@ -5,118 +5,73 @@ mob/var/list/pain_stored = list()
mob/var/last_pain_message = "" mob/var/last_pain_message = ""
mob/var/next_pain_time = 0 mob/var/next_pain_time = 0
// partname is the name of a body part
// amount is a num from 1 to 100
mob/living/carbon/proc/pain(var/partname, var/amount, var/force, var/burning = 0)
if(stat >= 1)
return
if(!can_feel_pain())
return
if(analgesic > 40)
return
if(world.time < next_pain_time && !force)
return
if(amount > 10 && istype(src,/mob/living/carbon/human))
if(src:paralysis)
src:paralysis = max(0, src:paralysis-round(amount/10))
if(amount > 50 && prob(amount / 5))
src:drop_item()
var/msg
if(burning)
switch(amount)
if(1 to 10)
msg = "<span class='danger'>Your [partname] burns.</span>"
if(11 to 90)
flash_weak_pain()
msg = "<span class='danger'><font size=2>Your [partname] burns badly!</font></span>"
if(91 to 10000)
flash_pain()
msg = "<span class='danger'><font size=3>OH GOD! Your [partname] is on fire!</font></span>"
else
switch(amount)
if(1 to 10)
msg = "<b>Your [partname] hurts.</b>"
if(11 to 90)
flash_weak_pain()
msg = "<b><font size=2>Your [partname] hurts badly.</font></b>"
if(91 to 10000)
flash_pain()
msg = "<b><font size=3>OH GOD! Your [partname] is hurting terribly!</font></b>"
if(msg && (msg != last_pain_message || prob(10)))
last_pain_message = msg
src << msg
next_pain_time = world.time + (100 - amount)
// message is the custom message to be displayed // message is the custom message to be displayed
// flash_strength is 0 for weak pain flash, 1 for strong pain flash // power decides how much painkillers will stop the message
mob/living/carbon/human/proc/custom_pain(var/message, var/flash_strength) // force means it ignores anti-spam timer
if(stat >= 1) mob/living/carbon/proc/custom_pain(message, power, force)
return if(!message || stat || !can_feel_pain() || chem_effects[CE_PAINKILLER] > power)
if(!can_feel_pain()) return 0
return message = "<span class='danger'>[message]</span>"
if(reagents.has_reagent("tramadol")) if(power >= 50)
return message = "<font size=3>[message]</font>"
if(reagents.has_reagent("oxycodone"))
return
if(analgesic)
return
var/msg = "<span class='danger'>[message]</span>"
if(flash_strength >= 1)
msg = "<span class='danger'><font size=3>[message]</font></span>"
// Anti message spam checks // Anti message spam checks
if(msg && ((msg != last_pain_message) || (world.time >= next_pain_time))) if(force || (message != last_pain_message) || (world.time >= next_pain_time))
last_pain_message = msg last_pain_message = message
src << msg src << message
next_pain_time = world.time + 100 next_pain_time = world.time + (100-power)
mob/living/carbon/human/proc/handle_pain() mob/living/carbon/human/proc/handle_pain()
// not when sleeping if(stat)
return
if(!can_feel_pain()) return if(!can_feel_pain())
return
if(stat >= 2) return if(world.time < next_pain_time)
if(analgesic > 70)
return return
var/maxdam = 0 var/maxdam = 0
var/obj/item/organ/external/damaged_organ = null var/obj/item/organ/external/damaged_organ = null
for(var/obj/item/organ/external/E in organs) for(var/obj/item/organ/external/E in organs)
if((E.status & ORGAN_DEAD) || E.robotic >= ORGAN_ROBOT) continue if(!E.can_feel_pain()) continue
var/dam = E.get_damage() var/dam = E.get_damage()
// make the choice of the organ depend on damage, // make the choice of the organ depend on damage,
// but also sometimes use one of the less damaged ones // but also sometimes use one of the less damaged ones
if(dam > maxdam && (maxdam == 0 || prob(70)) ) if(dam > maxdam && (maxdam == 0 || prob(70)) )
damaged_organ = E damaged_organ = E
maxdam = dam maxdam = dam
if(damaged_organ) if(damaged_organ && chem_effects[CE_PAINKILLER] < maxdam)
pain(damaged_organ.name, maxdam, 0) if(maxdam > 10 && paralysis)
paralysis = max(0, paralysis - round(maxdam/10))
if(maxdam > 50 && prob(maxdam / 5))
drop_item()
var/burning = damaged_organ.burn_dam > damaged_organ.brute_dam
var/msg
switch(maxdam)
if(1 to 10)
msg = "Your [damaged_organ.name] [burning ? "burns" : "hurts"]."
if(11 to 90)
flash_weak_pain()
msg = "<font size=2>Your [damaged_organ.name] [burning ? "burns" : "hurts"] badly!</font>"
if(91 to 10000)
flash_pain()
msg = "<font size=3>OH GOD! Your [damaged_organ.name] is [burning ? "on fire" : "hurting terribly"]!</font>"
custom_pain(msg, maxdam, prob(10))
// Damage to internal organs hurts a lot. // Damage to internal organs hurts a lot.
for(var/obj/item/organ/I in internal_organs) for(var/obj/item/organ/I in internal_organs)
if((I.status & ORGAN_DEAD) || I.robotic >= ORGAN_ROBOT) continue if((I.status & ORGAN_DEAD) || I.robotic >= ORGAN_ROBOT) continue
if(I.damage > 2) if(prob(2)) if(I.damage > 2) if(prob(2))
var/obj/item/organ/external/parent = get_organ(I.parent_organ) var/obj/item/organ/external/parent = get_organ(I.parent_organ)
src.custom_pain("You feel a sharp pain in your [parent.name]", 1) src.custom_pain("You feel a sharp pain in your [parent.name]", 50)
var/toxDamageMessage = null if(prob(2))
var/toxMessageProb = 1
switch(getToxLoss()) switch(getToxLoss())
if(1 to 5) if(1 to 10)
toxMessageProb = 1 custom_pain("Your body stings slightly.", getToxLoss())
toxDamageMessage = "Your body stings slightly." if(11 to 30)
if(6 to 10) custom_pain("Your body hurts a little.", getToxLoss())
toxMessageProb = 2 if(31 to 60)
toxDamageMessage = "Your whole body hurts a little." custom_pain("Your whole body hurts badly.", getToxLoss())
if(11 to 15) if(61 to INFINITY)
toxMessageProb = 2 custom_pain("Your body aches all over, it's driving you mad.", getToxLoss())
toxDamageMessage = "Your whole body hurts."
if(15 to 25)
toxMessageProb = 3
toxDamageMessage = "Your whole body hurts badly."
if(26 to INFINITY)
toxMessageProb = 5
toxDamageMessage = "Your body aches all over, it's driving you mad."
if(toxDamageMessage && prob(toxMessageProb))
src.custom_pain(toxDamageMessage, getToxLoss() >= 15)

View File

@@ -14,8 +14,8 @@
/datum/reagent/inaprovaline/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) /datum/reagent/inaprovaline/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien != IS_DIONA) if(alien != IS_DIONA)
M.add_chemical_effect(CE_STABLE) M.add_chemical_effect(CE_STABLE, 15)
M.add_chemical_effect(CE_PAINKILLER, 25) M.add_chemical_effect(CE_PAINKILLER, 10)
/datum/reagent/bicaridine /datum/reagent/bicaridine
name = "Bicaridine" name = "Bicaridine"
@@ -76,6 +76,29 @@
M.hallucination = max(0, M.hallucination - 9 * removed) M.hallucination = max(0, M.hallucination - 9 * removed)
M.adjustToxLoss(-4 * removed) M.adjustToxLoss(-4 * removed)
/datum/reagent/carthatoline
name = "carthatoline"
id = "carthatoline"
description = "Carthatoline is strong evacuant used to treat severe poisoning."
reagent_state = LIQUID
color = "#225722"
scannable = 1
/datum/reagent/carthatoline/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_DIONA)
return
if(M.getToxLoss() && prob(10))
M.vomit(1)
M.adjustToxLoss(-8 * removed)
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/obj/item/organ/internal/liver/L = H.internal_organs_by_name[O_LIVER]
if(istype(L))
if(L.robotic >= ORGAN_ROBOT)
return
if(L.damage > 0)
L.damage = max(L.damage - 2 * removed, 0)
/datum/reagent/dexalin /datum/reagent/dexalin
name = "Dexalin" name = "Dexalin"
id = "dexalin" id = "dexalin"
@@ -109,7 +132,7 @@
if(alien == IS_VOX) if(alien == IS_VOX)
M.adjustToxLoss(removed * 9) M.adjustToxLoss(removed * 9)
else if(alien != IS_DIONA) else if(alien != IS_DIONA)
M.adjustOxyLoss(-300 * removed) M.adjustOxyLoss(-150 * removed)
holder.remove_reagent("lexorin", 3 * removed) holder.remove_reagent("lexorin", 3 * removed)
@@ -179,7 +202,7 @@
mrate_static = TRUE mrate_static = TRUE
/datum/reagent/paracetamol/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) /datum/reagent/paracetamol/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
M.add_chemical_effect(CE_PAINKILLER, 50) M.add_chemical_effect(CE_PAINKILLER, 25)
/datum/reagent/paracetamol/overdose(var/mob/living/carbon/M, var/alien) /datum/reagent/paracetamol/overdose(var/mob/living/carbon/M, var/alien)
..() ..()
@@ -217,6 +240,8 @@
/datum/reagent/oxycodone/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) /datum/reagent/oxycodone/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
M.add_chemical_effect(CE_PAINKILLER, 200) M.add_chemical_effect(CE_PAINKILLER, 200)
M.eye_blurry += 10
M.confused += 5
/datum/reagent/oxycodone/overdose(var/mob/living/carbon/M, var/alien) /datum/reagent/oxycodone/overdose(var/mob/living/carbon/M, var/alien)
..() ..()
@@ -246,7 +271,7 @@
holder.remove_reagent("mindbreaker", 5) holder.remove_reagent("mindbreaker", 5)
M.hallucination = max(0, M.hallucination - 10) M.hallucination = max(0, M.hallucination - 10)
M.adjustToxLoss(5 * removed) // It used to be incredibly deadly due to an oversight. Not anymore! M.adjustToxLoss(5 * removed) // It used to be incredibly deadly due to an oversight. Not anymore!
M.add_chemical_effect(CE_PAINKILLER, 40) M.add_chemical_effect(CE_PAINKILLER, 20)
/datum/reagent/alkysine /datum/reagent/alkysine
name = "Alkysine" name = "Alkysine"
@@ -307,9 +332,60 @@
continue continue
if(I.damage > 0) //Peridaxon heals only non-robotic organs if(I.damage > 0) //Peridaxon heals only non-robotic organs
I.damage = max(I.damage - removed, 0) I.damage = max(I.damage - removed, 0)
H.confused += 5
if(I.damage <= 5 && I.organ_tag == O_EYES) if(I.damage <= 5 && I.organ_tag == O_EYES)
H.eye_blurry += 10 //Eyes need to reset, or something
H.sdisabilities &= ~BLIND H.sdisabilities &= ~BLIND
/datum/reagent/osteodaxon
name = "Osteodaxon"
id = "osteodaxon"
description = "An experimental drug used to heal bone fractures."
reagent_state = LIQUID
color = "#C9BCE3"
metabolism = REM * 0.5
overdose = REAGENTS_OVERDOSE * 0.5
scannable = 1
/datum/reagent/osteodaxon/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_DIONA)
return
M.heal_organ_damage(3 * removed, 0) //Gives the bones a chance to set properly even without other meds
if(ishuman(M))
var/mob/living/carbon/human/H = M
for(var/obj/item/organ/external/O in H.bad_external_organs)
if(O.status & ORGAN_BROKEN)
O.mend_fracture() //Only works if the bone won't rebreak, as usual
H.custom_pain("You feel a terrible agony tear through your bones!",60)
H.AdjustWeakened(1) //Bones being regrown will knock you over
/datum/reagent/myelamine
name = "Myelamine"
id = "myelamine"
description = "Used to rapidly clot internal hemorrhages by increasing the effectiveness of platelets."
reagent_state = LIQUID
color = "#4246C7"
metabolism = REM * 0.5
overdose = REAGENTS_OVERDOSE * 0.5
scannable = 1
/datum/reagent/myelamine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_DIONA)
return
M.eye_blurry += (3 * removed)
if(ishuman(M))
var/mob/living/carbon/human/H = M
for(var/obj/item/organ/external/O in H.bad_external_organs)
for(var/datum/wound/W in O.wounds)
if(W.bleeding())
W.damage = max(W.damage - removed, 0)
if(W.damage <= 0)
O.wounds -= W
if(W.internal)
W.damage = max(W.damage - removed, 0)
if(W.damage <= 0)
O.wounds -= W
/datum/reagent/ryetalyn /datum/reagent/ryetalyn
name = "Ryetalyn" name = "Ryetalyn"
id = "ryetalyn" id = "ryetalyn"
@@ -364,6 +440,8 @@
scannable = 1 scannable = 1
/datum/reagent/hyronalin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) /datum/reagent/hyronalin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_DIONA)
return
M.radiation = max(M.radiation - 30 * removed, 0) M.radiation = max(M.radiation - 30 * removed, 0)
/datum/reagent/arithrazine /datum/reagent/arithrazine
@@ -378,6 +456,8 @@
scannable = 1 scannable = 1
/datum/reagent/arithrazine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) /datum/reagent/arithrazine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_DIONA)
return
M.radiation = max(M.radiation - 70 * removed, 0) M.radiation = max(M.radiation - 70 * removed, 0)
M.adjustToxLoss(-10 * removed) M.adjustToxLoss(-10 * removed)
if(prob(60)) if(prob(60))
@@ -432,11 +512,35 @@
scannable = 1 scannable = 1
/datum/reagent/leporazine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) /datum/reagent/leporazine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_DIONA)
return
if(M.bodytemperature > 310) if(M.bodytemperature > 310)
M.bodytemperature = max(310, M.bodytemperature - (40 * TEMPERATURE_DAMAGE_COEFFICIENT)) M.bodytemperature = max(310, M.bodytemperature - (40 * TEMPERATURE_DAMAGE_COEFFICIENT))
else if(M.bodytemperature < 311) else if(M.bodytemperature < 311)
M.bodytemperature = min(310, M.bodytemperature + (40 * TEMPERATURE_DAMAGE_COEFFICIENT)) M.bodytemperature = min(310, M.bodytemperature + (40 * TEMPERATURE_DAMAGE_COEFFICIENT))
/datum/reagent/rezadone
name = "Rezadone"
id = "rezadone"
description = "A powder with almost magical properties, this substance can effectively treat genetic damage in humanoids, though excessive consumption has side effects."
reagent_state = SOLID
color = "#669900"
overdose = REAGENTS_OVERDOSE
scannable = 1
/datum/reagent/rezadone/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_DIONA)
return
M.adjustCloneLoss(-20 * removed)
M.adjustOxyLoss(-2 * removed)
M.heal_organ_damage(20 * removed, 20 * removed)
M.adjustToxLoss(-20 * removed)
if(dose > 3)
M.status_flags &= ~DISFIGURED
if(dose > 10)
M.make_dizzy(5)
M.make_jittery(5)
/* Antidepressants */ /* Antidepressants */
#define ANTIDEPRESSANT_MESSAGE_DELAY 5*60*10 #define ANTIDEPRESSANT_MESSAGE_DELAY 5*60*10

View File

@@ -43,6 +43,13 @@
color = "#003333" color = "#003333"
strength = 10 strength = 10
/datum/reagent/toxin/spidertoxin
name = "Spidertoxin"
id = "spidertoxin"
description = "A liquifying toxin produced by giant spiders."
color = "#2CE893"
strength = 5
/datum/reagent/toxin/phoron /datum/reagent/toxin/phoron
name = "Phoron" name = "Phoron"
id = "phoron" id = "phoron"

View File

@@ -160,6 +160,14 @@
required_reagents = list("silicon" = 1, "potassium" = 1, "nitrogen" = 1) required_reagents = list("silicon" = 1, "potassium" = 1, "nitrogen" = 1)
result_amount = 3 result_amount = 3
/datum/chemical_reaction/carthatoline
name = "Carthatoline"
id = "carthatoline"
result = "carthatoline"
required_reagents = list("dylovene" = 1, "carbon" = 2, "phoron" = 0.1)
catalysts = list("phoron" = 1)
result_amount = 2
/datum/chemical_reaction/tramadol /datum/chemical_reaction/tramadol
name = "Tramadol" name = "Tramadol"
id = "tramadol" id = "tramadol"
@@ -282,6 +290,15 @@
catalysts = list("phoron" = 5) catalysts = list("phoron" = 5)
result_amount = 2 result_amount = 2
/datum/chemical_reaction/osteodaxon
name = "Osteodaxon"
id = "osteodaxon"
result = "osteodaxon"
required_reagents = list("bicaridine" = 2, "phoron" = 0.1, "carpotoxin" = 1)
catalysts = list("phoron" = 5)
inhibitors = list("clonexadone" = 1) // Messes with cryox
result_amount = 2
/datum/chemical_reaction/virus_food /datum/chemical_reaction/virus_food
name = "Virus Food" name = "Virus Food"
id = "virusfood" id = "virusfood"
@@ -349,6 +366,13 @@
inhibitors = list("sugar" = 1) // Messes up with inaprovaline inhibitors = list("sugar" = 1) // Messes up with inaprovaline
result_amount = 2 result_amount = 2
/datum/chemical_reaction/myelamine
name = "Myelamine"
id = "myelamine"
result = "myelamine"
required_reagents = list("bicaridine" = 1, "iron" = 2, "spidertoxin" = 1)
result_amount = 2
/datum/chemical_reaction/hyperzine /datum/chemical_reaction/hyperzine
name = "Hyperzine" name = "Hyperzine"
id = "hyperzine" id = "hyperzine"

View File

@@ -734,6 +734,19 @@
reagents.add_reagent("pacid",6) reagents.add_reagent("pacid",6)
src.bitesize = 6 src.bitesize = 6
/obj/item/weapon/reagent_containers/food/snacks/spidermeat
name = "meat"
desc = "A slab of green meat."
icon_state = "xenomeat"
filling_color = "#43DE18"
center_of_mass = list("x"=16, "y"=10)
/obj/item/weapon/reagent_containers/food/snacks/spidermeat/New()
..()
reagents.add_reagent("protein", 6)
reagents.add_reagent("spidertoxin",6)
src.bitesize = 6
/obj/item/weapon/reagent_containers/food/snacks/meatball /obj/item/weapon/reagent_containers/food/snacks/meatball
name = "meatball" name = "meatball"
desc = "A great meal all round." desc = "A great meal all round."

View File

@@ -88,3 +88,33 @@
user << "<span class='notice'>It is currently loaded.</span>" user << "<span class='notice'>It is currently loaded.</span>"
else else
user << "<span class='notice'>It is spent.</span>" user << "<span class='notice'>It is spent.</span>"
/obj/item/weapon/reagent_containers/hypospray/autoinjector/clotting
name = "clotting agent"
desc = "A rapid and safe way to administer clotting drugs by untrained or trained personnel."
icon_state = "autoinjector"
item_state = "autoinjector"
amount_per_transfer_from_this = 10
volume = 10
/obj/item/weapon/reagent_containers/hypospray/autoinjector/clotting/New()
..()
reagents.remove_reagent("inaprovaline", 5)
reagents.add_reagent("myelamine", 10)
update_icon()
return
/obj/item/weapon/reagent_containers/hypospray/autoinjector/bonemed
name = "bone repair injector"
desc = "A rapid and safe way to administer advanced drugs by untrained or trained personnel."
icon_state = "autoinjector"
item_state = "autoinjector"
amount_per_transfer_from_this = 10
volume = 10
/obj/item/weapon/reagent_containers/hypospray/autoinjector/bonemed/New()
..()
reagents.remove_reagent("inaprovaline", 5)
reagents.add_reagent("osteodaxon", 10)
update_icon()
return

View File

@@ -50,7 +50,7 @@
var/public_alert = 0 //Stick to Engineering frequency except for big warnings when integrity bad var/public_alert = 0 //Stick to Engineering frequency except for big warnings when integrity bad
var/warning_point = 100 var/warning_point = 100
var/warning_alert = "Danger! Crystal hyperstructure instability!" var/warning_alert = "Danger! Crystal hyperstructure instability!"
var/emergency_point = 700 var/emergency_point = 500
var/emergency_alert = "CRYSTAL DELAMINATION IMMINENT." var/emergency_alert = "CRYSTAL DELAMINATION IMMINENT."
var/explosion_point = 1000 var/explosion_point = 1000

View File

@@ -25,7 +25,7 @@
if (affected.stage == 0) if (affected.stage == 0)
user.visible_message("[user] starts applying medication to the damaged bones in [target]'s [affected.name] with \the [tool]." , \ user.visible_message("[user] starts applying medication to the damaged bones in [target]'s [affected.name] with \the [tool]." , \
"You start applying medication to the damaged bones in [target]'s [affected.name] with \the [tool].") "You start applying medication to the damaged bones in [target]'s [affected.name] with \the [tool].")
target.custom_pain("Something in your [affected.name] is causing you a lot of pain!",1) target.custom_pain("Something in your [affected.name] is causing you a lot of pain!", 50)
..() ..()
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -58,7 +58,7 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone) var/obj/item/organ/external/affected = target.get_organ(target_zone)
user.visible_message("[user] is beginning to set the bone in [target]'s [affected.name] in place with \the [tool]." , \ user.visible_message("[user] is beginning to set the bone in [target]'s [affected.name] in place with \the [tool]." , \
"You are beginning to set the bone in [target]'s [affected.name] in place with \the [tool].") "You are beginning to set the bone in [target]'s [affected.name] in place with \the [tool].")
target.custom_pain("The pain in your [affected.name] is going to make you pass out!",1) target.custom_pain("The pain in your [affected.name] is going to make you pass out!", 50)
..() ..()
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)

View File

@@ -38,7 +38,7 @@
user.visible_message("[user] begins to cut through [target]'s [affected.encased] with \the [tool].", \ user.visible_message("[user] begins to cut through [target]'s [affected.encased] with \the [tool].", \
"You begin to cut through [target]'s [affected.encased] with \the [tool].") "You begin to cut through [target]'s [affected.encased] with \the [tool].")
target.custom_pain("Something hurts horribly in your [affected.name]!",1) target.custom_pain("Something hurts horribly in your [affected.name]!", 60)
..() ..()
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -88,7 +88,7 @@
var/msg = "[user] starts to force open the [affected.encased] in [target]'s [affected.name] with \the [tool]." var/msg = "[user] starts to force open the [affected.encased] in [target]'s [affected.name] with \the [tool]."
var/self_msg = "You start to force open the [affected.encased] in [target]'s [affected.name] with \the [tool]." var/self_msg = "You start to force open the [affected.encased] in [target]'s [affected.name] with \the [tool]."
user.visible_message(msg, self_msg) user.visible_message(msg, self_msg)
target.custom_pain("Something hurts horribly in your [affected.name]!",1) target.custom_pain("Something hurts horribly in your [affected.name]!", 40)
..() ..()
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -145,7 +145,7 @@
var/msg = "[user] starts bending [target]'s [affected.encased] back into place with \the [tool]." var/msg = "[user] starts bending [target]'s [affected.encased] back into place with \the [tool]."
var/self_msg = "You start bending [target]'s [affected.encased] back into place with \the [tool]." var/self_msg = "You start bending [target]'s [affected.encased] back into place with \the [tool]."
user.visible_message(msg, self_msg) user.visible_message(msg, self_msg)
target.custom_pain("Something hurts horribly in your [affected.name]!",1) target.custom_pain("Something hurts horribly in your [affected.name]!", 100)
..() ..()
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -202,7 +202,7 @@
var/msg = "[user] starts applying \the [tool] to [target]'s [affected.encased]." var/msg = "[user] starts applying \the [tool] to [target]'s [affected.encased]."
var/self_msg = "You start applying \the [tool] to [target]'s [affected.encased]." var/self_msg = "You start applying \the [tool] to [target]'s [affected.encased]."
user.visible_message(msg, self_msg) user.visible_message(msg, self_msg)
target.custom_pain("Something hurts horribly in your [affected.name]!",1) target.custom_pain("Something hurts horribly in your [affected.name]!", 100)
..() ..()
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)

View File

@@ -42,7 +42,7 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone) var/obj/item/organ/external/affected = target.get_organ(target_zone)
user.visible_message("[user] starts the bloodless incision on [target]'s [affected.name] with \the [tool].", \ user.visible_message("[user] starts the bloodless incision on [target]'s [affected.name] with \the [tool].", \
"You start the bloodless incision on [target]'s [affected.name] with \the [tool].") "You start the bloodless incision on [target]'s [affected.name] with \the [tool].")
target.custom_pain("You feel a horrible, searing pain in your [affected.name]!",1) target.custom_pain("You feel a horrible, searing pain in your [affected.name]!", 50)
..() ..()
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -81,7 +81,7 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone) var/obj/item/organ/external/affected = target.get_organ(target_zone)
user.visible_message("[user] starts to construct a prepared incision on and within [target]'s [affected.name] with \the [tool].", \ user.visible_message("[user] starts to construct a prepared incision on and within [target]'s [affected.name] with \the [tool].", \
"You start to construct a prepared incision on and within [target]'s [affected.name] with \the [tool].") "You start to construct a prepared incision on and within [target]'s [affected.name] with \the [tool].")
target.custom_pain("You feel a horrible, searing pain in your [affected.name] as it is pushed apart!",1) target.custom_pain("You feel a horrible, searing pain in your [affected.name] as it is pushed apart!", 50)
..() ..()
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -124,7 +124,7 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone) var/obj/item/organ/external/affected = target.get_organ(target_zone)
user.visible_message("[user] starts the incision on [target]'s [affected.name] with \the [tool].", \ user.visible_message("[user] starts the incision on [target]'s [affected.name] with \the [tool].", \
"You start the incision on [target]'s [affected.name] with \the [tool].") "You start the incision on [target]'s [affected.name] with \the [tool].")
target.custom_pain("You feel a horrible pain as if from a sharp knife in your [affected.name]!",1) target.custom_pain("You feel a horrible pain as if from a sharp knife in your [affected.name]!", 40)
..() ..()
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -163,7 +163,7 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone) var/obj/item/organ/external/affected = target.get_organ(target_zone)
user.visible_message("[user] starts clamping bleeders in [target]'s [affected.name] with \the [tool].", \ user.visible_message("[user] starts clamping bleeders in [target]'s [affected.name] with \the [tool].", \
"You start clamping bleeders in [target]'s [affected.name] with \the [tool].") "You start clamping bleeders in [target]'s [affected.name] with \the [tool].")
target.custom_pain("The pain in your [affected.name] is maddening!",1) target.custom_pain("The pain in your [affected.name] is maddening!", 40)
..() ..()
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -205,7 +205,7 @@
msg = "[user] starts to pry open the incision and rearrange the organs in [target]'s lower abdomen with \the [tool]." msg = "[user] starts to pry open the incision and rearrange the organs in [target]'s lower abdomen with \the [tool]."
self_msg = "You start to pry open the incision and rearrange the organs in [target]'s lower abdomen with \the [tool]." self_msg = "You start to pry open the incision and rearrange the organs in [target]'s lower abdomen with \the [tool]."
user.visible_message(msg, self_msg) user.visible_message(msg, self_msg)
target.custom_pain("It feels like the skin on your [affected.name] is on fire!",1) target.custom_pain("It feels like the skin on your [affected.name] is on fire!", 40)
..() ..()
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -254,7 +254,7 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone) var/obj/item/organ/external/affected = target.get_organ(target_zone)
user.visible_message("[user] is beginning to cauterize the incision on [target]'s [affected.name] with \the [tool]." , \ user.visible_message("[user] is beginning to cauterize the incision on [target]'s [affected.name] with \the [tool]." , \
"You are beginning to cauterize the incision on [target]'s [affected.name] with \the [tool].") "You are beginning to cauterize the incision on [target]'s [affected.name] with \the [tool].")
target.custom_pain("Your [affected.name] is being burned!",1) target.custom_pain("Your [affected.name] is being burned!", 40)
..() ..()
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -295,7 +295,7 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone) var/obj/item/organ/external/affected = target.get_organ(target_zone)
user.visible_message("[user] is beginning to amputate [target]'s [affected.name] with \the [tool]." , \ user.visible_message("[user] is beginning to amputate [target]'s [affected.name] with \the [tool]." , \
"You are beginning to cut through [target]'s [affected.amputation_point] with \the [tool].") "You are beginning to cut through [target]'s [affected.amputation_point] with \the [tool].")
target.custom_pain("Your [affected.amputation_point] is being ripped apart!",1) target.custom_pain("Your [affected.amputation_point] is being ripped apart!", 100)
..() ..()
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)

View File

@@ -56,7 +56,7 @@
user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \ user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \
"You start treating damage to [target]'s [I.name] with [tool_name]." ) "You start treating damage to [target]'s [I.name] with [tool_name]." )
target.custom_pain("The pain in your [affected.name] is living hell!",1) target.custom_pain("The pain in your [affected.name] is living hell!", 100)
..() ..()
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -146,7 +146,7 @@
user.visible_message("[user] starts to separate [target]'s [target.op_stage.current_organ] with \the [tool].", \ user.visible_message("[user] starts to separate [target]'s [target.op_stage.current_organ] with \the [tool].", \
"You start to separate [target]'s [target.op_stage.current_organ] with \the [tool]." ) "You start to separate [target]'s [target.op_stage.current_organ] with \the [tool]." )
target.custom_pain("The pain in your [affected.name] is living hell!",1) target.custom_pain("The pain in your [affected.name] is living hell!", 100)
..() ..()
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -197,7 +197,7 @@
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("[user] starts removing [target]'s [target.op_stage.current_organ] with \the [tool].", \ user.visible_message("[user] starts removing [target]'s [target.op_stage.current_organ] with \the [tool].", \
"You start removing [target]'s [target.op_stage.current_organ] with \the [tool].") "You start removing [target]'s [target.op_stage.current_organ] with \the [tool].")
target.custom_pain("Someone's ripping out your [target.op_stage.current_organ]!",1) target.custom_pain("Someone's ripping out your [target.op_stage.current_organ]!", 100)
..() ..()
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -271,7 +271,7 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone) var/obj/item/organ/external/affected = target.get_organ(target_zone)
user.visible_message("[user] starts transplanting \the [tool] into [target]'s [affected.name].", \ user.visible_message("[user] starts transplanting \the [tool] into [target]'s [affected.name].", \
"You start transplanting \the [tool] into [target]'s [affected.name].") "You start transplanting \the [tool] into [target]'s [affected.name].")
target.custom_pain("Someone's rooting around in your [affected.name]!",1) target.custom_pain("Someone's rooting around in your [affected.name]!", 100)
..() ..()
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -322,7 +322,7 @@
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("[user] begins reattaching [target]'s [target.op_stage.current_organ] with \the [tool].", \ user.visible_message("[user] begins reattaching [target]'s [target.op_stage.current_organ] with \the [tool].", \
"You start reattaching [target]'s [target.op_stage.current_organ] with \the [tool].") "You start reattaching [target]'s [target.op_stage.current_organ] with \the [tool].")
target.custom_pain("Someone's digging needles into your [target.op_stage.current_organ]!",1) target.custom_pain("Someone's digging needles into your [target.op_stage.current_organ]!", 100)
..() ..()
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)

View File

@@ -33,7 +33,7 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone) var/obj/item/organ/external/affected = target.get_organ(target_zone)
user.visible_message("[user] starts patching the damaged vein in [target]'s [affected.name] with \the [tool]." , \ user.visible_message("[user] starts patching the damaged vein in [target]'s [affected.name] with \the [tool]." , \
"You start patching the damaged vein in [target]'s [affected.name] with \the [tool].") "You start patching the damaged vein in [target]'s [affected.name] with \the [tool].")
target.custom_pain("The pain in [affected.name] is unbearable!",1) target.custom_pain("The pain in [affected.name] is unbearable!", 100)
..() ..()
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -81,7 +81,7 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone) var/obj/item/organ/external/affected = target.get_organ(target_zone)
user.visible_message("[user] starts cutting away necrotic tissue in [target]'s [affected.name] with \the [tool]." , \ user.visible_message("[user] starts cutting away necrotic tissue in [target]'s [affected.name] with \the [tool]." , \
"You start cutting away necrotic tissue in [target]'s [affected.name] with \the [tool].") "You start cutting away necrotic tissue in [target]'s [affected.name] with \the [tool].")
target.custom_pain("The pain in [affected.name] is unbearable!",1) target.custom_pain("The pain in [affected.name] is unbearable!", 100)
..() ..()
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -133,7 +133,7 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone) var/obj/item/organ/external/affected = target.get_organ(target_zone)
user.visible_message("[user] starts applying medication to the affected tissue in [target]'s [affected.name] with \the [tool]." , \ user.visible_message("[user] starts applying medication to the affected tissue in [target]'s [affected.name] with \the [tool]." , \
"You start applying medication to the affected tissue in [target]'s [affected.name] with \the [tool].") "You start applying medication to the affected tissue in [target]'s [affected.name] with \the [tool].")
target.custom_pain("Something in your [affected.name] is causing you a lot of pain!",1) target.custom_pain("Something in your [affected.name] is causing you a lot of pain!", 50)
..() ..()
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)

View File

@@ -121,13 +121,11 @@
stage = 4 stage = 4
badness = 3 badness = 3
activate(var/mob/living/carbon/mob,var/multiplier) activate(var/mob/living/carbon/mob,var/multiplier)
mob.suiciding = 1 mob.suiciding = 30
//instead of killing them instantly, just put them at -175 health and let 'em gasp for a while //instead of killing them instantly, just put them at -175 health and let 'em gasp for a while
viewers(mob) << "\red <b>[mob.name] is holding \his breath. It looks like \he's trying to commit suicide.</b>" viewers(mob) << "\red <b>[mob.name] is holding \his breath. It looks like \he's trying to commit suicide.</b>"
mob.adjustOxyLoss(175 - mob.getToxLoss() - mob.getFireLoss() - mob.getBruteLoss() - mob.getOxyLoss()) mob.adjustOxyLoss(175 - mob.getToxLoss() - mob.getFireLoss() - mob.getBruteLoss() - mob.getOxyLoss())
mob.updatehealth() mob.updatehealth()
spawn(200) //in case they get revived by cryo chamber or something stupid like that, let them suicide again in 20 seconds
mob.suiciding = 0
/datum/disease2/effect/killertoxins /datum/disease2/effect/killertoxins
name = "Toxification Syndrome" name = "Toxification Syndrome"

View File

@@ -0,0 +1,49 @@
################################
# Example Changelog File
#
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
#
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
# When it is, any changes listed below will disappear.
#
# Valid Prefixes:
# bugfix
# wip (For works in progress)
# tweak
# soundadd
# sounddel
# rscadd (general adding of nice things)
# rscdel (general deleting of nice things)
# imageadd
# imagedel
# maptweak
# spellcheck (typo fixes)
# experiment
#################################
# Your name.
author: Anewbe
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
delete-after: True
# Any changes you've made. See valid prefix list above.
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
# SCREW THIS UP AND IT WON'T WORK.
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
changes:
- rscadd: "Added a changelog editing system that should cause fewer conflicts and more accurate timestamps."
- rscadd: "Added Myelamine, a blood clotting chemical. This is available to antags, and can be ordered from cargo or mixed."
- rscadd: "Added Osteodaxon, a bone fixing medicine. This is available to antags, and can be mixed."
- rscadd: "Added Carthatoline, a stronger anti-toxin."
- rscadd: "Added Spidertoxin, which comes from spiders (duh), and is used in making Myelamine."
- rscadd: "Death Alarms can now be ordered from cargo."
- rscdel: "Dexalin Plus is half as strong (still pretty strong, though).
- rscadd: "Ninja, Merc, and ERT-M Hardsuits can now inject myelamine."
- tweak: "Inaprovaline now decreases the effects of bloodloss, and lessens brain damage taken from OxyLoss."
- tweak: "Prosthetic organs now take randomised damage when emp'd, this should roughly average out to the old values."
- tweak: "The effects of heart damage have been tweaked, should be slightly easier to survive now."
- tweak: "Some of the stronger chems have side effects, like confusion or blurry vision. These should be fairly minor, and we may be tweaking them in the future."
- tweak: "The suiciding var now wears off, making it possible to save suicide victims if quick action is taken."
- tweak: "Death Alarms now announce on General comms again."