Bleeding edgy refresh (#303)

* not code stuff

* other things

* global vars, defines, helpers

* onclick hud stuff, orphans, world.dm

* controllers and datums

* game folder

* everything not client/mobs in modules

* client folder

* stage 1 mob stuff

* simple animal things

* silicons

* carbon things

* ayylmaos and monkeys

* hyoomahn

* icons n shit

* sprite fixes

* compile fixes

* some fixes I cherrypicked.

* qdel fixes

* forgot brain refractors
This commit is contained in:
Poojawa
2017-03-21 11:44:10 -05:00
committed by GitHub
parent 099a6c8764
commit f67e9f6d87
1476 changed files with 344416 additions and 40694 deletions
+10 -5
View File
@@ -273,7 +273,7 @@ var/const/INJECT = 5 //injection
if(30 to 40)
need_mob_update += R.addiction_act_stage4(C)
if(40 to INFINITY)
C << "<span class='notice'>You feel like you've gotten over your need for [R.name].</span>"
to_chat(C, "<span class='notice'>You feel like you've gotten over your need for [R.name].</span>")
cached_addictions.Remove(R)
addiction_tick++
if(C && need_mob_update) //some of the metabolized reagents had effects on the mob that requires some updates.
@@ -400,14 +400,14 @@ var/const/INJECT = 5 //injection
if(C.mix_sound)
playsound(get_turf(cached_my_atom), C.mix_sound, 80, 1)
for(var/mob/M in seen)
M << "<span class='notice'>\icon[my_atom] [C.mix_message]</span>"
to_chat(M, "<span class='notice'>\icon[my_atom] [C.mix_message]</span>")
if(istype(cached_my_atom, /obj/item/slime_extract))
var/obj/item/slime_extract/ME2 = my_atom
ME2.Uses--
if(ME2.Uses <= 0) // give the notification that the slime core is dead
for(var/mob/M in seen)
M << "<span class='notice'>\icon[my_atom] \The [my_atom]'s power is consumed in the reaction.</span>"
to_chat(M, "<span class='notice'>\icon[my_atom] \The [my_atom]'s power is consumed in the reaction.</span>")
ME2.name = "used slime extract"
ME2.desc = "This extract has been used up."
@@ -513,6 +513,11 @@ var/const/INJECT = 5 //injection
if("OBJ")
R.reaction_obj(A, R.volume * volume_modifier, show_message)
/datum/reagents/proc/holder_full()
if(total_volume >= maximum_volume)
return TRUE
return FALSE
/datum/reagents/proc/add_reagent(reagent, amount, list/data=null, reagtemp = 300, no_react = 0)
if(!isnum(amount) || !amount)
return FALSE
@@ -657,7 +662,7 @@ var/const/INJECT = 5 //injection
for(var/reagent in cached_reagents)
var/datum/reagent/R = reagent
if(R.id == reagent_id)
//world << "proffering a data-carrying reagent ([reagent_id])"
//to_chat(world, "proffering a data-carrying reagent ([reagent_id])")
return R.data
/datum/reagents/proc/set_data(reagent_id, new_data)
@@ -665,7 +670,7 @@ var/const/INJECT = 5 //injection
for(var/reagent in cached_reagents)
var/datum/reagent/R = reagent
if(R.id == reagent_id)
//world << "reagent data set ([reagent_id])"
//to_chat(world, "reagent data set ([reagent_id])")
R.data = new_data
/datum/reagents/proc/copy_data(datum/reagent/current_reagent)
@@ -75,9 +75,9 @@
/obj/machinery/chem_dispenser/emag_act(mob/user)
if(emagged)
user << "<span class='warning'>\The [src] has no functional safeties to emag.</span>"
to_chat(user, "<span class='warning'>\The [src] has no functional safeties to emag.</span>")
return
user << "<span class='notice'>You short out \the [src]'s safeties.</span>"
to_chat(user, "<span class='notice'>You short out \the [src]'s safeties.</span>")
dispensable_reagents |= emagged_reagents//add the emagged reagents to the dispensable ones
emagged = 1
@@ -174,7 +174,7 @@
var/obj/item/weapon/reagent_containers/B = I
. = 1 //no afterattack
if(beaker)
user << "<span class='warning'>A container is already loaded into the machine!</span>"
to_chat(user, "<span class='warning'>A container is already loaded into the machine!</span>")
return
if(!user.drop_item()) // Can't let go?
@@ -182,14 +182,14 @@
beaker = B
beaker.loc = src
user << "<span class='notice'>You add \the [B] to the machine.</span>"
to_chat(user, "<span class='notice'>You add \the [B] to the machine.</span>")
if(!icon_beaker)
icon_beaker = image('icons/obj/chemical.dmi', src, "disp_beaker") //randomize beaker overlay position.
icon_beaker.pixel_x = rand(-10,5)
add_overlay(icon_beaker)
else if(user.a_intent != INTENT_HARM && !istype(I, /obj/item/weapon/card/emag))
user << "<span class='warning'>You can't load \the [I] into the machine!</span>"
to_chat(user, "<span class='warning'>You can't load \the [I] into the machine!</span>")
else
return ..()
@@ -57,14 +57,14 @@
if(istype(I, /obj/item/weapon/reagent_containers) && (I.container_type & OPENCONTAINER))
. = 1 //no afterattack
if(beaker)
user << "<span class='warning'>A beaker is already loaded into the machine!</span>"
to_chat(user, "<span class='warning'>A beaker is already loaded into the machine!</span>")
return
if(!user.drop_item())
return
beaker = I
I.loc = src
user << "<span class='notice'>You add the beaker to the machine.</span>"
to_chat(user, "<span class='notice'>You add the beaker to the machine.</span>")
icon_state = "mixer1b"
return
return ..()
@@ -44,7 +44,7 @@
build_path = new_path
name = "[new_name] 3000 (Machine Board)"
user << "<span class='notice'>You change the circuit board setting to \"[new_name]\".</span>"
to_chat(user, "<span class='notice'>You change the circuit board setting to \"[new_name]\".</span>")
else
return ..()
@@ -107,30 +107,30 @@
if(istype(I, /obj/item/weapon/reagent_containers) && (I.container_type & OPENCONTAINER))
. = 1 // no afterattack
if(panel_open)
user << "<span class='warning'>You can't use the [src.name] while its panel is opened!</span>"
to_chat(user, "<span class='warning'>You can't use the [src.name] while its panel is opened!</span>")
return
if(beaker)
user << "<span class='warning'>A container is already loaded in the machine!</span>"
to_chat(user, "<span class='warning'>A container is already loaded in the machine!</span>")
return
if(!user.drop_item())
return
beaker = I
beaker.loc = src
user << "<span class='notice'>You add the beaker to the machine.</span>"
to_chat(user, "<span class='notice'>You add the beaker to the machine.</span>")
src.updateUsrDialog()
icon_state = "mixer1"
else if(!condi && istype(I, /obj/item/weapon/storage/pill_bottle))
if(bottle)
user << "<span class='warning'>A pill bottle is already loaded into the machine!</span>"
to_chat(user, "<span class='warning'>A pill bottle is already loaded into the machine!</span>")
return
if(!user.drop_item())
return
bottle = I
bottle.loc = src
user << "<span class='notice'>You add the pill bottle into the dispenser slot.</span>"
to_chat(user, "<span class='notice'>You add the pill bottle into the dispenser slot.</span>")
src.updateUsrDialog()
else
return ..()
@@ -283,14 +283,14 @@
if(stat & (NOPOWER|BROKEN))
return
if(beaker)
user << "<span class='warning'>A beaker is already loaded into the machine!</span>"
to_chat(user, "<span class='warning'>A beaker is already loaded into the machine!</span>")
return
if(!user.drop_item())
return
beaker = I
beaker.loc = src
user << "<span class='notice'>You add the beaker to the machine.</span>"
to_chat(user, "<span class='notice'>You add the beaker to the machine.</span>")
updateUsrDialog()
icon_state = "mixer1"
else
@@ -132,18 +132,18 @@
update_icon()
src.updateUsrDialog()
else
user << "<span class='warning'>There's already a container inside.</span>"
to_chat(user, "<span class='warning'>There's already a container inside.</span>")
return 1 //no afterattack
if(is_type_in_list(I, dried_items))
if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/grown))
var/obj/item/weapon/reagent_containers/food/snacks/grown/G = I
if(!G.dry)
user << "<span class='warning'>You must dry that first!</span>"
to_chat(user, "<span class='warning'>You must dry that first!</span>")
return 1
if(holdingitems && holdingitems.len >= limit)
usr << "The machine cannot hold anymore items."
to_chat(usr, "The machine cannot hold anymore items.")
return 1
//Fill machine with a bag!
@@ -153,11 +153,11 @@
B.remove_from_storage(G, src)
holdingitems += G
if(holdingitems && holdingitems.len >= limit) //Sanity checking so the blender doesn't overfill
user << "<span class='notice'>You fill the All-In-One grinder to the brim.</span>"
to_chat(user, "<span class='notice'>You fill the All-In-One grinder to the brim.</span>")
break
if(!I.contents.len)
user << "<span class='notice'>You empty the plant bag into the All-In-One grinder.</span>"
to_chat(user, "<span class='notice'>You empty the plant bag into the All-In-One grinder.</span>")
src.updateUsrDialog()
return 1
@@ -166,7 +166,7 @@
if(user.a_intent == INTENT_HARM)
return ..()
else
user << "<span class='warning'>Cannot refine into a reagent!</span>"
to_chat(user, "<span class='warning'>Cannot refine into a reagent!</span>")
return 1
if(user.drop_item())
+5 -5
View File
@@ -85,27 +85,27 @@
return
/datum/reagent/proc/overdose_start(mob/living/M)
M << "<span class='userdanger'>You feel like you took too much of [name]!</span>"
to_chat(M, "<span class='userdanger'>You feel like you took too much of [name]!</span>")
return
/datum/reagent/proc/addiction_act_stage1(mob/living/M)
if(prob(30))
M << "<span class='notice'>You feel like some [name] right about now.</span>"
to_chat(M, "<span class='notice'>You feel like some [name] right about now.</span>")
return
/datum/reagent/proc/addiction_act_stage2(mob/living/M)
if(prob(30))
M << "<span class='notice'>You feel like you need [name]. You just can't get enough.</span>"
to_chat(M, "<span class='notice'>You feel like you need [name]. You just can't get enough.</span>")
return
/datum/reagent/proc/addiction_act_stage3(mob/living/M)
if(prob(30))
M << "<span class='danger'>You have an intense craving for [name].</span>"
to_chat(M, "<span class='danger'>You have an intense craving for [name].</span>")
return
/datum/reagent/proc/addiction_act_stage4(mob/living/M)
if(prob(30))
M << "<span class='boldannounce'>You're not feeling good at all! You really need some [name].</span>"
to_chat(M, "<span class='boldannounce'>You're not feeling good at all! You really need some [name].</span>")
return
/proc/pretty_string_from_reagent_list(var/list/reagent_list)
@@ -44,14 +44,14 @@ All effects don't start immediately, but rather get worse over time; the rate is
if(istype(O,/obj/item/weapon/paper))
var/obj/item/weapon/paper/paperaffected = O
paperaffected.clearpaper()
usr << "<span class='notice'>[paperaffected]'s ink washes away.</span>"
to_chat(usr, "<span class='notice'>[paperaffected]'s ink washes away.</span>")
if(istype(O,/obj/item/weapon/book))
if(reac_volume >= 5)
var/obj/item/weapon/book/affectedbook = O
affectedbook.dat = null
usr << "<span class='notice'>Through thorough application, you wash away [affectedbook]'s writing.</span>"
to_chat(usr, "<span class='notice'>Through thorough application, you wash away [affectedbook]'s writing.</span>")
else
usr << "<span class='warning'>The ink smears, but doesn't wash away!</span>"
to_chat(usr, "<span class='warning'>The ink smears, but doesn't wash away!</span>")
return
/datum/reagent/consumable/ethanol/reaction_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people with ethanol isn't quite as good as fuel.
@@ -19,7 +19,7 @@
if(message_living && !issilicon(M))
totalmessage += message_living
totalmessage += "!"
M << "<span class='userdanger'>[totalmessage]</span>"
to_chat(M, "<span class='userdanger'>[totalmessage]</span>")
/datum/reagent/blob/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
if(M.stat == DEAD || istype(M, /mob/living/simple_animal/hostile/blob))
@@ -198,7 +198,7 @@
M.adjustToxLoss(1*REM)
if(iscarbon(M))
var/mob/living/carbon/N = M
N.hal_screwyhud = 5 //fully healed, honest
N.hal_screwyhud = SCREWYHUD_HEALTHY //fully healed, honest
..()
/datum/reagent/blob/regenerative_materia/on_mob_delete(mob/living/M)
@@ -232,7 +232,7 @@
O.blob_mobs.Add(BS)
BS.Zombify(M)
O.add_points(points)
O << "<span class='notice'>Gained [points] resources from the zombification of [M].</span>"
to_chat(O, "<span class='notice'>Gained [points] resources from the zombification of [M].</span>")
/datum/reagent/blob/zombifying_pods/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag)
if((damage_flag == "melee" || damage_flag == "bullet" || damage_flag == "laser") && damage <= 20 && B.obj_integrity - damage <= 0 && prob(30)) //if the cause isn't fire or a bomb, the damage is less than 21, we're going to die from that damage, 20% chance of a shitty spore.
@@ -266,7 +266,7 @@
/datum/reagent/consumable/tea/arnold_palmer/on_mob_life(mob/living/M)
if(prob(5))
M << "<span class = 'notice'>[pick("You remember to square your shoulders.","You remember to keep your head down.","You can't decide between squaring your shoulders and keeping your head down.","You remember to relax.","You think about how someday you'll get two strokes off your golf game.")]</span>"
to_chat(M, "<span class = 'notice'>[pick("You remember to square your shoulders.","You remember to keep your head down.","You can't decide between squaring your shoulders and keeping your head down.","You remember to relax.","You think about how someday you'll get two strokes off your golf game.")]</span>")
..()
. = 1
@@ -21,7 +21,7 @@
..()
/datum/reagent/drug/space_drugs/overdose_start(mob/living/M)
M << "<span class='userdanger'>You start tripping hard!</span>"
to_chat(M, "<span class='userdanger'>You start tripping hard!</span>")
/datum/reagent/drug/space_drugs/overdose_process(mob/living/M)
@@ -41,7 +41,7 @@
/datum/reagent/drug/nicotine/on_mob_life(mob/living/M)
if(prob(1))
var/smoke_message = pick("You feel relaxed.", "You feel calmed.","You feel alert.","You feel rugged.")
M << "<span class='notice'>[smoke_message]</span>"
to_chat(M, "<span class='notice'>[smoke_message]</span>")
M.AdjustParalysis(-1, 0)
M.AdjustStunned(-1, 0)
M.AdjustWeakened(-1, 0)
@@ -61,7 +61,7 @@
/datum/reagent/drug/crank/on_mob_life(mob/living/M)
var/high_message = pick("You feel jittery.", "You feel like you gotta go fast.", "You feel like you need to step it up.")
if(prob(5))
M << "<span class='notice'>[high_message]</span>"
to_chat(M, "<span class='notice'>[high_message]</span>")
M.AdjustParalysis(-1, 0)
M.AdjustStunned(-1, 0)
M.AdjustWeakened(-1, 0)
@@ -109,7 +109,7 @@
/datum/reagent/drug/krokodil/on_mob_life(mob/living/M)
var/high_message = pick("You feel calm.", "You feel collected.", "You feel like you need to relax.")
if(prob(5))
M << "<span class='notice'>[high_message]</span>"
to_chat(M, "<span class='notice'>[high_message]</span>")
..()
/datum/reagent/drug/krokodil/overdose_process(mob/living/M)
@@ -126,12 +126,12 @@
/datum/reagent/krokodil/addiction_act_stage2(mob/living/M)
if(prob(25))
M << "<span class='danger'>Your skin feels loose...</span>"
to_chat(M, "<span class='danger'>Your skin feels loose...</span>")
..()
/datum/reagent/drug/krokodil/addiction_act_stage3(mob/living/M)
if(prob(25))
M << "<span class='danger'>Your skin starts to peel away...</span>"
to_chat(M, "<span class='danger'>Your skin starts to peel away...</span>")
M.adjustBruteLoss(3*REM, 0)
..()
. = 1
@@ -139,7 +139,7 @@
/datum/reagent/drug/krokodil/addiction_act_stage4(mob/living/carbon/human/M)
CHECK_DNA_AND_SPECIES(M)
if(!istype(M.dna.species, /datum/species/krokodil_addict))
M << "<span class='userdanger'>Your skin falls off easily!</span>"
to_chat(M, "<span class='userdanger'>Your skin falls off easily!</span>")
M.adjustBruteLoss(50*REM, 0) // holy shit your skin just FELL THE FUCK OFF
M.set_species(/datum/species/krokodil_addict)
else
@@ -160,7 +160,7 @@
/datum/reagent/drug/methamphetamine/on_mob_life(mob/living/M)
var/high_message = pick("You feel hyper.", "You feel like you need to go faster.", "You feel like you can run the world.")
if(prob(5))
M << "<span class='notice'>[high_message]</span>"
to_chat(M, "<span class='notice'>[high_message]</span>")
M.AdjustParalysis(-2, 0)
M.AdjustStunned(-2, 0)
M.AdjustWeakened(-2, 0)
@@ -238,7 +238,7 @@
/datum/reagent/drug/bath_salts/on_mob_life(mob/living/M)
var/high_message = pick("You feel amped up.", "You feel ready.", "You feel like you can push it to the limit.")
if(prob(5))
M << "<span class='notice'>[high_message]</span>"
to_chat(M, "<span class='notice'>[high_message]</span>")
M.AdjustParalysis(-3, 0)
M.AdjustStunned(-3, 0)
M.AdjustWeakened(-3, 0)
@@ -324,7 +324,7 @@
/datum/reagent/drug/aranesp/on_mob_life(mob/living/M)
var/high_message = pick("You feel amped up.", "You feel ready.", "You feel like you can push it to the limit.")
if(prob(5))
M << "<span class='notice'>[high_message]</span>"
to_chat(M, "<span class='notice'>[high_message]</span>")
M.adjustStaminaLoss(-18, 0)
M.adjustToxLoss(0.5, 0)
if(prob(50))
@@ -99,7 +99,7 @@
taste_description = "sweetness"
/datum/reagent/consumable/sugar/overdose_start(mob/living/M)
M << "<span class='userdanger'>You go into hyperglycaemic shock! Lay off the twinkies!</span>"
to_chat(M, "<span class='userdanger'>You go into hyperglycaemic shock! Lay off the twinkies!</span>")
M.AdjustSleeping(30, 0)
. = 1
@@ -553,10 +553,10 @@
taste_description = "tingling mushroom"
/datum/reagent/consumable/tinlux/reaction_mob(mob/living/M)
M.AddLuminosity(2)
M.set_light(2)
/datum/reagent/consumable/tinlux/on_mob_delete(mob/living/M)
M.AddLuminosity(-2)
M.set_light(-2)
/datum/reagent/consumable/vitfro
name = "Vitrium Froth"
@@ -132,7 +132,7 @@
switch(M.bodytemperature) // Low temperatures are required to take effect.
if(0 to 100) // At extreme temperatures (upgraded cryo) the effect is greatly increased.
M.status_flags &= ~DISFIGURED
M.adjustCloneLoss(-7, 0)
M.adjustCloneLoss(-1, 0)
M.adjustOxyLoss(-9, 0)
M.adjustBruteLoss(-5, 0)
M.adjustFireLoss(-5, 0)
@@ -140,7 +140,7 @@
. = 1
if(100 to 225) // At lower temperatures (cryo) the full effect is boosted
M.status_flags &= ~DISFIGURED
M.adjustCloneLoss(-2, 0)
M.adjustCloneLoss(-1, 0)
M.adjustOxyLoss(-7, 0)
M.adjustBruteLoss(-3, 0)
M.adjustFireLoss(-3, 0)
@@ -156,6 +156,29 @@
. = 1
..()
/datum/reagent/medicine/clonexadone
name = "Clonexadone"
id = "clonexadone"
description = "A chemical that derives from Cryoxadone. It specializes in healing clone damage, but nothing else. Requires very cold temperatures to properly metabolize, and metabolizes quicker than cryoxadone."
color = "#0000C8"
taste_description = "muscle"
metabolization_rate = 1.5 * REAGENTS_METABOLISM
/datum/reagent/medicine/clonexadone/on_mob_life(mob/living/M)
switch(M.bodytemperature) // Low temperatures are required to take effect.
if(0 to 100) // At extreme temperatures (upgraded cryo) the effect is greatly increased.
M.status_flags &= ~DISFIGURED
M.adjustCloneLoss(-7, 0)
. = 1
if(100 to 225) // At lower temperatures (cryo) the full effect is boosted
M.status_flags &= ~DISFIGURED
M.adjustCloneLoss(-3, 0)
. = 1
if(225 to T0C)
M.status_flags &= ~DISFIGURED
M.adjustCloneLoss(-2, 0)
. = 1
..()
/datum/reagent/medicine/rezadone
name = "Rezadone"
@@ -200,11 +223,11 @@
if(method in list(INGEST, VAPOR, INJECT))
M.adjustToxLoss(0.5*reac_volume)
if(show_message)
M << "<span class='warning'>You don't feel so good...</span>"
to_chat(M, "<span class='warning'>You don't feel so good...</span>")
else if(M.getFireLoss())
M.adjustFireLoss(-reac_volume)
if(show_message)
M << "<span class='danger'>You feel your burns healing! It stings like hell!</span>"
to_chat(M, "<span class='danger'>You feel your burns healing! It stings like hell!</span>")
M.emote("scream")
..()
@@ -248,11 +271,11 @@
if(method in list(INGEST, VAPOR, INJECT))
M.adjustToxLoss(0.5*reac_volume)
if(show_message)
M << "<span class='warning'>You don't feel so good...</span>"
to_chat(M, "<span class='warning'>You don't feel so good...</span>")
else if(M.getBruteLoss())
M.adjustBruteLoss(-reac_volume)
if(show_message)
M << "<span class='danger'>You feel your bruises healing! It stings like hell!</span>"
to_chat(M, "<span class='danger'>You feel your bruises healing! It stings like hell!</span>")
M.emote("scream")
..()
@@ -302,7 +325,7 @@
/datum/reagent/medicine/mine_salve/on_mob_life(mob/living/M)
if(iscarbon(M))
var/mob/living/carbon/N = M
N.hal_screwyhud = 5
N.hal_screwyhud = SCREWYHUD_HEALTHY
M.adjustBruteLoss(-0.25*REM, 0)
M.adjustFireLoss(-0.25*REM, 0)
..()
@@ -314,7 +337,7 @@
M.Stun(4)
M.Weaken(4)
if(show_message)
M << "<span class='warning'>Your stomach agonizingly cramps!</span>"
to_chat(M, "<span class='warning'>Your stomach agonizingly cramps!</span>")
else
var/mob/living/carbon/C = M
for(var/s in C.surgeries)
@@ -323,13 +346,13 @@
// +10% success propability on each step, useful while operating in less-than-perfect conditions
if(show_message)
M << "<span class='danger'>You feel your wounds fade away to nothing!</span>" //It's a painkiller, after all
to_chat(M, "<span class='danger'>You feel your wounds fade away to nothing!</span>" )
..()
/datum/reagent/medicine/mine_salve/on_mob_delete(mob/living/M)
if(iscarbon(M))
var/mob/living/carbon/N = M
N.hal_screwyhud = 0
N.hal_screwyhud = SCREWYHUD_NONE
..()
/datum/reagent/medicine/synthflesh
@@ -347,7 +370,7 @@
M.adjustBruteLoss(-1.25 * reac_volume)
M.adjustFireLoss(-1.25 * reac_volume)
if(show_message)
M << "<span class='danger'>You feel your burns and bruises healing! It stings like hell!</span>"
to_chat(M, "<span class='danger'>You feel your burns and bruises healing! It stings like hell!</span>")
..()
/datum/reagent/medicine/charcoal
@@ -582,7 +605,7 @@
M.status_flags |= IGNORESLOWDOWN
switch(current_cycle)
if(11)
M << "<span class='warning'>You start to feel tired...</span>" //Warning when the victim is starting to pass out
to_chat(M, "<span class='warning'>You start to feel tired...</span>" )
if(12 to 24)
M.drowsyness += 1
if(24 to INFINITY)
@@ -653,13 +676,13 @@
/datum/reagent/medicine/oculine/on_mob_life(mob/living/M)
if(M.disabilities & BLIND)
if(prob(20))
M << "<span class='warning'>Your vision slowly returns...</span>"
to_chat(M, "<span class='warning'>Your vision slowly returns...</span>")
M.cure_blind()
M.cure_nearsighted()
M.blur_eyes(35)
else if(M.disabilities & NEARSIGHT)
M << "<span class='warning'>The blackness in your peripheral vision fades.</span>"
to_chat(M, "<span class='warning'>The blackness in your peripheral vision fades.</span>")
M.cure_nearsighted()
M.blur_eyes(10)
@@ -171,7 +171,7 @@
/datum/reagent/water/holywater/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
if(is_servant_of_ratvar(M))
M << "<span class='userdanger'>A darkness begins to spread its unholy tendrils through your mind, purging the Justiciar's influence!</span>"
to_chat(M, "<span class='userdanger'>A darkness begins to spread its unholy tendrils through your mind, purging the Justiciar's influence!</span>")
..()
/datum/reagent/water/holywater/on_mob_life(mob/living/M)
@@ -190,8 +190,8 @@
if("speech")
clockwork_say(M, "...[text2ratvar(pick("Engine... your light grows dark...", "Where are you, master?", "He lies rusting in Error...", "Purge all untruths and... and... something..."))]")
if("message")
M << "<span class='boldwarning'>[pick("Ratvar's illumination of your mind has begun to flicker", "He lies rusting in Reebe, derelict and forgotten. And there he shall stay", \
"You can't save him. Nothing can save him now", "It seems that Nar-Sie will triumph after all")].</span>"
to_chat(M, "<span class='boldwarning'>[pick("Ratvar's illumination of your mind has begun to flicker", "He lies rusting in Reebe, derelict and forgotten. And there he shall stay", \
"You can't save him. Nothing can save him now", "It seems that Nar-Sie will triumph after all")].</span>")
if("emote")
M.visible_message("<span class='warning'>[M] [pick("whimpers quietly", "shivers as though cold", "glances around in paranoia")].</span>")
if(data >= 75) // 30 units, 135 seconds
@@ -344,7 +344,7 @@
if(method == INGEST)
if(show_message)
M << "<span class='notice'>That tasted horrible.</span>"
to_chat(M, "<span class='notice'>That tasted horrible.</span>")
M.AdjustStunned(2)
M.AdjustWeakened(2)
..()
@@ -384,7 +384,7 @@
/datum/reagent/stableslimetoxin/on_mob_life(mob/living/carbon/human/H)
..()
H << "<span class='warning'><b>You crumple in agony as your flesh wildly morphs into new forms!</b></span>"
to_chat(H, "<span class='warning'><b>You crumple in agony as your flesh wildly morphs into new forms!</b></span>")
H.visible_message("<b>[H]</b> falls to the ground and screams as [H.p_their()] skin bubbles and froths!") //'froths' sounds painful when used with SKIN.
H.Weaken(3, 0)
spawn(30)
@@ -394,10 +394,10 @@
var/current_species = H.dna.species.type
var/datum/species/mutation = race
if(mutation && mutation != current_species)
H << mutationtext
to_chat(H, mutationtext)
H.set_species(mutation)
else
H << "<span class='danger'>The pain vanishes suddenly. You feel no different.</span>"
to_chat(H, "<span class='danger'>The pain vanishes suddenly. You feel no different.</span>")
return 1
@@ -535,7 +535,7 @@
taste_description = "slime"
/datum/reagent/mulligan/on_mob_life(mob/living/carbon/human/H)
H << "<span class='warning'><b>You grit your teeth in pain as your body rapidly mutates!</b></span>"
to_chat(H, "<span class='warning'><b>You grit your teeth in pain as your body rapidly mutates!</b></span>")
H.visible_message("<b>[H]</b> suddenly transforms!")
randomize_human(H)
..()
@@ -855,7 +855,7 @@
/datum/reagent/bluespace/on_mob_life(mob/living/M)
if(current_cycle > 10 && prob(15))
M << "<span class='warning'>You feel unstable...</span>"
to_chat(M, "<span class='warning'>You feel unstable...</span>")
M.Jitter(2)
current_cycle = 1
addtimer(CALLBACK(GLOBAL_PROC, .proc/do_teleport, M, get_turf(M), 5, asoundin = 'sound/effects/phasein.ogg'), 30)
@@ -1528,3 +1528,37 @@
M.resize = 1/current_size
M.update_transform()
..()
/datum/reagent/glitter
name = "generic glitter"
id = "glitter"
description = "if you can see this description, contact a coder."
color = "#FFFFFF" //pure white
taste_description = "plastic"
reagent_state = SOLID
var/glitter_type = /obj/effect/decal/cleanable/glitter
/datum/reagent/glitter/reaction_turf(turf/T, reac_volume)
if(!istype(T))
return
new glitter_type(T)
/datum/reagent/glitter/pink
name = "pink glitter"
id = "pink_glitter"
description = "pink sparkles that get everywhere"
color = "#ff8080" //A light pink color
glitter_type = /obj/effect/decal/cleanable/glitter/pink
/datum/reagent/glitter/white
name = "white glitter"
id = "white_glitter"
description = "white sparkles that get everywhere"
glitter_type = /obj/effect/decal/cleanable/glitter/white
/datum/reagent/glitter/blue
name = "blue glitter"
id = "blue_glitter"
description = "blue sparkles that get everywhere"
color = "#4040FF" //A blueish color
glitter_type = /obj/effect/decal/cleanable/glitter/blue
@@ -124,7 +124,7 @@
/datum/reagent/toxin/slimejelly/on_mob_life(mob/living/M)
if(prob(10))
M << "<span class='danger'>Your insides are burning!</span>"
to_chat(M, "<span class='danger'>Your insides are burning!</span>")
M.adjustToxLoss(rand(20,60)*REM, 0)
. = 1
else if(prob(40))
@@ -383,7 +383,7 @@
if(prob(50))
switch(pick(1, 2, 3, 4))
if(1)
M << "<span class='danger'>You can barely see!</span>"
to_chat(M, "<span class='danger'>You can barely see!</span>")
M.blur_eyes(3)
if(2)
M.emote("cough")
@@ -391,7 +391,7 @@
M.emote("sneeze")
if(4)
if(prob(75))
M << "You scratch at an itch."
to_chat(M, "You scratch at an itch.")
M.adjustBruteLoss(2*REM, 0)
. = 1
..()
@@ -470,7 +470,7 @@
if(prob(5))
M.losebreath += 1
if(prob(8))
M << "You feel horrendously weak!"
to_chat(M, "You feel horrendously weak!")
M.Stun(2, 0)
M.adjustToxLoss(2*REM, 0)
return ..()
@@ -500,15 +500,15 @@
/datum/reagent/toxin/itching_powder/on_mob_life(mob/living/M)
if(prob(15))
M << "You scratch at your head."
to_chat(M, "You scratch at your head.")
M.adjustBruteLoss(0.2*REM, 0)
. = 1
if(prob(15))
M << "You scratch at your leg."
to_chat(M, "You scratch at your leg.")
M.adjustBruteLoss(0.2*REM, 0)
. = 1
if(prob(15))
M << "You scratch at your arm."
to_chat(M, "You scratch at your arm.")
M.adjustBruteLoss(0.2*REM, 0)
. = 1
if(prob(3))
@@ -822,7 +822,7 @@
if(M.dizziness < 6)
M.dizziness = Clamp(M.dizziness + 3, 0, 5)
if(prob(20))
M << "You feel confused and disorientated."
to_chat(M, "You feel confused and disorientated.")
..()
/datum/reagent/toxin/peaceborg/tire
@@ -838,7 +838,7 @@
if(M.staminaloss < (45 - healthcomp)) //At 50 health you would have 200 - 150 health meaning 50 compensation. 60 - 50 = 10, so would only do 10-19 stamina.)
M.adjustStaminaLoss(10)
if(prob(30))
M << "You should sit down and take a rest..."
to_chat(M, "You should sit down and take a rest...")
..()
/datum/reagent/toxin/delayed
@@ -860,3 +860,11 @@
M.Weaken(1, 0)
. = 1
..()
/datum/reagent/toxin/mimesbane
name = "Mime's Bane"
id = "mimesbane"
description = "A nonlethal neurotoxin that interferes with the victim's ability to gesture."
color = "#F0F8FF" // rgb: 240, 248, 255
toxpwr = 0
taste_description = "stillness"
@@ -184,6 +184,13 @@
results = list("cryoxadone" = 3)
required_reagents = list("stable_plasma" = 1, "acetone" = 1, "mutagen" = 1)
/datum/chemical_reaction/clonexadone
name = "Clonexadone"
id = "clonexadone"
results = list("clonexadone" = 2)
required_reagents = list("cryoxadone" = 1, "sodium" = 1)
required_catalysts = list("plasma" = 5)
/datum/chemical_reaction/haloperidol
name = "Haloperidol"
id = "haloperidol"
@@ -68,7 +68,7 @@
var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++)
new /obj/item/stack/sheet/mineral/gold(location)
/datum/chemical_reaction/capsaicincondensation
name = "Capsaicincondensation"
id = "capsaicincondensation"
@@ -124,7 +124,7 @@
results = list("nitrous_oxide" = 2, "water" = 4)
required_reagents = list("ammonia" = 3, "nitrogen" = 1, "oxygen" = 2)
required_temp = 525
////////////////////////////////// Mutation Toxins ///////////////////////////////////
/datum/chemical_reaction/stable_mutation_toxin
@@ -426,7 +426,7 @@
/datum/chemical_reaction/foam/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
for(var/mob/M in viewers(5, location))
M << "<span class='danger'>The solution spews out foam!</span>"
to_chat(M, "<span class='danger'>The solution spews out foam!</span>")
var/datum/effect_system/foam_spread/s = new()
s.set_up(created_volume*2, location, holder)
s.start()
@@ -444,7 +444,7 @@
var/location = get_turf(holder.my_atom)
for(var/mob/M in viewers(5, location))
M << "<span class='danger'>The solution spews out a metallic foam!</span>"
to_chat(M, "<span class='danger'>The solution spews out a metallic foam!</span>")
var/datum/effect_system/foam_spread/metal/s = new()
s.set_up(created_volume*5, location, holder, 1)
@@ -460,7 +460,7 @@
/datum/chemical_reaction/ironfoam/on_reaction(datum/reagents/holder, created_volume)
var/location = get_turf(holder.my_atom)
for(var/mob/M in viewers(5, location))
M << "<span class='danger'>The solution spews out a metallic foam!</span>"
to_chat(M, "<span class='danger'>The solution spews out a metallic foam!</span>")
var/datum/effect_system/foam_spread/metal/s = new()
s.set_up(created_volume*5, location, holder, 2)
s.start()
@@ -65,14 +65,14 @@
deity = SSreligion.Bible_deity_name
else
deity = "Christ"
R << "<span class='userdanger'>The power of [deity] compels you!</span>"
to_chat(R, "<span class='userdanger'>The power of [deity] compels you!</span>")
R.stun(20)
R.reveal(100)
R.adjustHealth(50)
sleep(20)
for(var/mob/living/carbon/C in get_hearers_in_view(round(created_volume/48,1),get_turf(holder.my_atom)))
if(iscultist(C))
C << "<span class='userdanger'>The divine explosion sears you!</span>"
to_chat(C, "<span class='userdanger'>The divine explosion sears you!</span>")
C.Weaken(2)
C.adjust_fire_stacks(5)
C.IgniteMob()
+2 -2
View File
@@ -38,7 +38,7 @@
amount_per_transfer_from_this = possible_transfer_amounts[i+1]
else
amount_per_transfer_from_this = possible_transfer_amounts[1]
user << "<span class='notice'>[src]'s transfer amount is now [amount_per_transfer_from_this] units.</span>"
to_chat(user, "<span class='notice'>[src]'s transfer amount is now [amount_per_transfer_from_this] units.</span>")
return
/obj/item/weapon/reagent_containers/attack(mob/M, mob/user, def_zone)
@@ -67,7 +67,7 @@
covered = "mask"
if(covered)
var/who = (isnull(user) || eater == user) ? "your" : "[eater.p_their()]"
user << "<span class='warning'>You have to remove [who] [covered] first!</span>"
to_chat(user, "<span class='warning'>You have to remove [who] [covered] first!</span>")
return 0
return 1
@@ -86,18 +86,18 @@ Borg Hypospray
/obj/item/weapon/reagent_containers/borghypo/attack(mob/living/carbon/M, mob/user)
var/datum/reagents/R = reagent_list[mode]
if(!R.total_volume)
user << "<span class='notice'>The injector is empty.</span>"
to_chat(user, "<span class='notice'>The injector is empty.</span>")
return
if(!istype(M))
return
if(R.total_volume && M.can_inject(user, 1, user.zone_selected,bypass_protection))
M << "<span class='warning'>You feel a tiny prick!</span>"
user << "<span class='notice'>You inject [M] with the injector.</span>"
to_chat(M, "<span class='warning'>You feel a tiny prick!</span>")
to_chat(user, "<span class='notice'>You inject [M] with the injector.</span>")
var/fraction = min(amount_per_transfer_from_this/R.total_volume, 1)
R.reaction(M, INJECT, fraction)
if(M.reagents)
var/trans = R.trans_to(M, amount_per_transfer_from_this)
user << "<span class='notice'>[trans] unit\s injected. [R.total_volume] unit\s remaining.</span>"
to_chat(user, "<span class='notice'>[trans] unit\s injected. [R.total_volume] unit\s remaining.</span>")
var/list/injected = list()
for(var/datum/reagent/RG in R.reagent_list)
@@ -111,7 +111,7 @@ Borg Hypospray
mode = chosen_reagent
playsound(loc, 'sound/effects/pop.ogg', 50, 0)
var/datum/reagent/R = chemical_reagents_list[reagent_ids[mode]]
user << "<span class='notice'>[src] is now dispensing '[R.name]'.</span>"
to_chat(user, "<span class='notice'>[src] is now dispensing '[R.name]'.</span>")
return
/obj/item/weapon/reagent_containers/borghypo/examine(mob/user)
@@ -125,11 +125,11 @@ Borg Hypospray
for(var/datum/reagents/RS in reagent_list)
var/datum/reagent/R = locate() in RS.reagent_list
if(R)
usr << "<span class='notice'>It currently has [R.volume] unit\s of [R.name] stored.</span>"
to_chat(usr, "<span class='notice'>It currently has [R.volume] unit\s of [R.name] stored.</span>")
empty = 0
if(empty)
usr << "<span class='warning'>It is currently empty! Allow some time for the internal syntheszier to produce more.</span>"
to_chat(usr, "<span class='warning'>It is currently empty! Allow some time for the internal syntheszier to produce more.</span>")
/obj/item/weapon/reagent_containers/borghypo/hacked
icon_state = "borghypo_s"
@@ -181,15 +181,15 @@ Borg Shaker
else if(target.is_open_container() && target.reagents)
var/datum/reagents/R = reagent_list[mode]
if(!R.total_volume)
user << "<span class='warning'>[src] is currently out of this ingredient! Please allow some time for the synthesizer to produce more.</span>"
to_chat(user, "<span class='warning'>[src] is currently out of this ingredient! Please allow some time for the synthesizer to produce more.</span>")
return
if(target.reagents.total_volume >= target.reagents.maximum_volume)
user << "<span class='notice'>[target] is full.</span>"
to_chat(user, "<span class='notice'>[target] is full.</span>")
return
var/trans = R.trans_to(target, amount_per_transfer_from_this)
user << "<span class='notice'>You transfer [trans] unit\s of the solution to [target].</span>"
to_chat(user, "<span class='notice'>You transfer [trans] unit\s of the solution to [target].</span>")
/obj/item/weapon/reagent_containers/borghypo/borgshaker/DescribeContents()
var/empty = 1
@@ -197,11 +197,11 @@ Borg Shaker
var/datum/reagents/RS = reagent_list[mode]
var/datum/reagent/R = locate() in RS.reagent_list
if(R)
usr << "<span class='notice'>It currently has [R.volume] unit\s of [R.name] stored.</span>"
to_chat(usr, "<span class='notice'>It currently has [R.volume] unit\s of [R.name] stored.</span>")
empty = 0
if(empty)
usr << "<span class='warning'>It is currently empty! Please allow some time for the synthesizer to produce more.</span>"
to_chat(usr, "<span class='warning'>It is currently empty! Please allow some time for the synthesizer to produce more.</span>")
/obj/item/weapon/reagent_containers/borghypo/borgshaker/hacked
..()
@@ -14,11 +14,11 @@
if(reagents.total_volume > 0)
if(target.reagents.total_volume >= target.reagents.maximum_volume)
user << "<span class='notice'>[target] is full.</span>"
to_chat(user, "<span class='notice'>[target] is full.</span>")
return
if(!target.is_open_container() && !ismob(target) && !istype(target,/obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/clothing/mask/cigarette)) //You can inject humans and food but you cant remove the shit.
user << "<span class='warning'>You cannot directly fill [target]!</span>"
to_chat(user, "<span class='warning'>You cannot directly fill [target]!</span>")
return
var/trans = 0
@@ -49,11 +49,11 @@
target.visible_message("<span class='danger'>[user] tries to squirt something into [target]'s eyes, but fails!</span>", \
"<span class='userdanger'>[user] tries to squirt something into [target]'s eyes, but fails!</span>")
user << "<span class='notice'>You transfer [trans] unit\s of the solution.</span>"
to_chat(user, "<span class='notice'>You transfer [trans] unit\s of the solution.</span>")
update_icon()
return
else if(isalien(target)) //hiss-hiss has no eyes!
target << "<span class='danger'>[target] does not seem to have any eyes!</span>"
to_chat(target, "<span class='danger'>[target] does not seem to have any eyes!</span>")
return
target.visible_message("<span class='danger'>[user] squirts something into [target]'s eyes!</span>", \
@@ -69,22 +69,22 @@
add_logs(user, M, "squirted", R)
trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
user << "<span class='notice'>You transfer [trans] unit\s of the solution.</span>"
to_chat(user, "<span class='notice'>You transfer [trans] unit\s of the solution.</span>")
update_icon()
else
if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers))
user << "<span class='notice'>You cannot directly remove reagents from [target].</span>"
to_chat(user, "<span class='notice'>You cannot directly remove reagents from [target].</span>")
return
if(!target.reagents.total_volume)
user << "<span class='warning'>[target] is empty!</span>"
to_chat(user, "<span class='warning'>[target] is empty!</span>")
return
var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this)
user << "<span class='notice'>You fill [src] with [trans] unit\s of the solution.</span>"
to_chat(user, "<span class='notice'>You fill [src] with [trans] unit\s of the solution.</span>")
update_icon()
@@ -16,7 +16,7 @@
return
if(!reagents || !reagents.total_volume)
user << "<span class='warning'>[src] is empty!</span>"
to_chat(user, "<span class='warning'>[src] is empty!</span>")
return
if(istype(M))
@@ -46,7 +46,7 @@
M.visible_message("<span class='danger'>[user] feeds something to [M].</span>", "<span class='userdanger'>[user] feeds something to you.</span>")
add_logs(user, M, "fed", reagentlist(src))
else
user << "<span class='notice'>You swallow a gulp of [src].</span>"
to_chat(user, "<span class='notice'>You swallow a gulp of [src].</span>")
var/fraction = min(5/reagents.total_volume, 1)
reagents.reaction(M, INGEST, fraction)
spawn(5)
@@ -59,28 +59,28 @@
else if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
if(target.reagents && !target.reagents.total_volume)
user << "<span class='warning'>[target] is empty and can't be refilled!</span>"
to_chat(user, "<span class='warning'>[target] is empty and can't be refilled!</span>")
return
if(reagents.total_volume >= reagents.maximum_volume)
user << "<span class='notice'>[src] is full.</span>"
to_chat(user, "<span class='notice'>[src] is full.</span>")
return
var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this)
user << "<span class='notice'>You fill [src] with [trans] unit\s of the contents of [target].</span>"
to_chat(user, "<span class='notice'>You fill [src] with [trans] unit\s of the contents of [target].</span>")
else if(target.is_open_container() && target.reagents) //Something like a glass. Player probably wants to transfer TO it.
if(!reagents.total_volume)
user << "<span class='warning'>[src] is empty!</span>"
to_chat(user, "<span class='warning'>[src] is empty!</span>")
return
if(target.reagents.total_volume >= target.reagents.maximum_volume)
user << "<span class='notice'>[target] is full.</span>"
to_chat(user, "<span class='notice'>[target] is full.</span>")
return
var/trans = reagents.trans_to(target, amount_per_transfer_from_this)
user << "<span class='notice'>You transfer [trans] unit\s of the solution to [target].</span>"
to_chat(user, "<span class='notice'>You transfer [trans] unit\s of the solution to [target].</span>")
else if(reagents.total_volume)
if(user.a_intent == INTENT_HARM)
@@ -96,18 +96,18 @@
if(reagents)
if(reagents.chem_temp < hotness) //can't be heated to be hotter than the source
reagents.chem_temp += added_heat
user << "<span class='notice'>You heat [src] with [I].</span>"
to_chat(user, "<span class='notice'>You heat [src] with [I].</span>")
reagents.handle_reactions()
else
user << "<span class='warning'>[src] is already hotter than [I]!</span>"
to_chat(user, "<span class='warning'>[src] is already hotter than [I]!</span>")
if(istype(I,/obj/item/weapon/reagent_containers/food/snacks/egg)) //breaking eggs
var/obj/item/weapon/reagent_containers/food/snacks/egg/E = I
if(reagents)
if(reagents.total_volume >= reagents.maximum_volume)
user << "<span class='notice'>[src] is full.</span>"
to_chat(user, "<span class='notice'>[src] is full.</span>")
else
user << "<span class='notice'>You break [E] in [src].</span>"
to_chat(user, "<span class='notice'>You break [E] in [src].</span>")
reagents.add_reagent("eggyolk", 5)
qdel(E)
return
@@ -251,13 +251,13 @@
/obj/item/weapon/reagent_containers/glass/bucket/attackby(obj/O, mob/user, params)
if(istype(O, /obj/item/weapon/mop))
if(reagents.total_volume < 1)
user << "<span class='warning'>[src] is out of water!</span>"
to_chat(user, "<span class='warning'>[src] is out of water!</span>")
else
reagents.trans_to(O, 5)
user << "<span class='notice'>You wet [O] in [src].</span>"
to_chat(user, "<span class='notice'>You wet [O] in [src].</span>")
playsound(loc, 'sound/effects/slosh.ogg', 25, 1)
else if(isprox(O))
user << "<span class='notice'>You add [O] to [src].</span>"
to_chat(user, "<span class='notice'>You add [O] to [src].</span>")
qdel(O)
qdel(src)
user.put_in_hands(new /obj/item/weapon/bucket_sensor)
@@ -267,7 +267,7 @@
/obj/item/weapon/reagent_containers/glass/bucket/equipped(mob/user, slot)
..()
if(slot == slot_head && reagents.total_volume)
user << "<span class='userdanger'>[src]'s contents spill all over you!</span>"
to_chat(user, "<span class='userdanger'>[src]'s contents spill all over you!</span>")
reagents.reaction(user, TOUCH)
reagents.clear_reagents()
@@ -18,14 +18,14 @@
/obj/item/weapon/reagent_containers/hypospray/attack(mob/living/M, mob/user)
if(!reagents.total_volume)
user << "<span class='warning'>[src] is empty!</span>"
to_chat(user, "<span class='warning'>[src] is empty!</span>")
return
if(!iscarbon(M))
return
if(reagents.total_volume && (ignore_flags || M.can_inject(user, 1))) // Ignore flag should be checked first or there will be an error message.
M << "<span class='warning'>You feel a tiny prick!</span>"
user << "<span class='notice'>You inject [M] with [src].</span>"
to_chat(M, "<span class='warning'>You feel a tiny prick!</span>")
to_chat(user, "<span class='notice'>You inject [M] with [src].</span>")
var/fraction = min(amount_per_transfer_from_this/reagents.total_volume, 1)
reagents.reaction(M, INJECT, fraction)
@@ -39,7 +39,7 @@
else
trans = reagents.copy_to(M, amount_per_transfer_from_this)
user << "<span class='notice'>[trans] unit\s injected. [reagents.total_volume] unit\s remaining in [src].</span>"
to_chat(user, "<span class='notice'>[trans] unit\s injected. [reagents.total_volume] unit\s remaining in [src].</span>")
var/contained = english_list(injected)
@@ -78,7 +78,7 @@
/obj/item/weapon/reagent_containers/hypospray/medipen/attack(mob/M, mob/user)
if(!reagents.total_volume)
user << "<span class='warning'>[src] is empty!</span>"
to_chat(user, "<span class='warning'>[src] is empty!</span>")
return
..()
if(!iscyborg(user))
@@ -102,9 +102,9 @@
/obj/item/weapon/reagent_containers/hypospray/medipen/examine()
..()
if(reagents && reagents.reagent_list.len)
usr << "<span class='notice'>It is currently loaded.</span>"
to_chat(usr, "<span class='notice'>It is currently loaded.</span>")
else
usr << "<span class='notice'>It is spent.</span>"
to_chat(usr, "<span class='notice'>It is spent.</span>")
/obj/item/weapon/reagent_containers/hypospray/medipen/stimpack //goliath kiting
name = "stimpack medipen"
@@ -32,7 +32,7 @@
if(self_delay)
if(!do_mob(user, M, self_delay))
return 0
M << "<span class='notice'>You [apply_method] [src].</span>"
to_chat(M, "<span class='notice'>You [apply_method] [src].</span>")
else
M.visible_message("<span class='danger'>[user] attempts to force [M] to [apply_method] [src].</span>", \
@@ -55,11 +55,11 @@
if(!proximity) return
if(target.is_open_container() != 0 && target.reagents)
if(!target.reagents.total_volume)
user << "<span class='warning'>[target] is empty! There's nothing to dissolve [src] in.</span>"
to_chat(user, "<span class='warning'>[target] is empty! There's nothing to dissolve [src] in.</span>")
return
user << "<span class='notice'>You dissolve [src] in [target].</span>"
to_chat(user, "<span class='notice'>You dissolve [src] in [target].</span>")
for(var/mob/O in viewers(2, user)) //viewers is necessary here because of the small radius
O << "<span class='warning'>[user] slips something into [target]!</span>"
to_chat(O, "<span class='warning'>[user] slips something into [target]!</span>")
reagents.trans_to(target, reagents.total_volume)
qdel(src)
@@ -100,7 +100,7 @@
list_reagents = list("salbutamol" = 30)
roundstart = 1
/obj/item/weapon/reagent_containers/pill/charcoal
name = "antitoxin pill"
name = "charcoal pill"
desc = "Neutralizes many common toxins."
icon_state = "pill17"
list_reagents = list("charcoal" = 10)
@@ -27,19 +27,19 @@
if(istype(A, /obj/structure/reagent_dispensers) && get_dist(src,A) <= 1) //this block copypasted from reagent_containers/glass, for lack of a better solution
if(!A.reagents.total_volume && A.reagents)
user << "<span class='notice'>\The [A] is empty.</span>"
to_chat(user, "<span class='notice'>\The [A] is empty.</span>")
return
if(reagents.total_volume >= reagents.maximum_volume)
user << "<span class='notice'>\The [src] is full.</span>"
to_chat(user, "<span class='notice'>\The [src] is full.</span>")
return
var/trans = A.reagents.trans_to(src, 50) //transfer 50u , using the spray's transfer amount would take too long to refill
user << "<span class='notice'>You fill \the [src] with [trans] units of the contents of \the [A].</span>"
to_chat(user, "<span class='notice'>You fill \the [src] with [trans] units of the contents of \the [A].</span>")
return
if(reagents.total_volume < amount_per_transfer_from_this)
user << "<span class='warning'>\The [src] is empty!</span>"
to_chat(user, "<span class='warning'>\The [src] is empty!</span>")
return
spray(A)
@@ -115,7 +115,7 @@
else
amount_per_transfer_from_this = initial(amount_per_transfer_from_this)
current_range = spray_range
user << "<span class='notice'>You switch the nozzle setting to [stream_mode ? "\"stream\"":"\"spray\""]. You'll now use [amount_per_transfer_from_this] units per use.</span>"
to_chat(user, "<span class='notice'>You switch the nozzle setting to [stream_mode ? "\"stream\"":"\"spray\""]. You'll now use [amount_per_transfer_from_this] units per use.</span>")
/obj/item/weapon/reagent_containers/spray/verb/empty()
set name = "Empty Spray Bottle"
@@ -126,7 +126,7 @@
if (alert(usr, "Are you sure you want to empty that?", "Empty Bottle:", "Yes", "No") != "Yes")
return
if(isturf(usr.loc) && src.loc == usr)
usr << "<span class='notice'>You empty \the [src] onto the floor.</span>"
to_chat(usr, "<span class='notice'>You empty \the [src] onto the floor.</span>")
reagents.reaction(usr.loc)
src.reagents.clear_reagents()
@@ -66,12 +66,12 @@
var/mob/living/carbon/monkey/M
M = target
M.retaliate(user)
switch(mode)
if(SYRINGE_DRAW)
if(reagents.total_volume >= reagents.maximum_volume)
user << "<span class='notice'>The syringe is full.</span>"
to_chat(user, "<span class='notice'>The syringe is full.</span>")
return
if(L) //living mob
@@ -89,34 +89,34 @@
if(L.transfer_blood_to(src, drawn_amount))
user.visible_message("[user] takes a blood sample from [L].")
else
user << "<span class='warning'>You are unable to draw any blood from [L]!</span>"
to_chat(user, "<span class='warning'>You are unable to draw any blood from [L]!</span>")
else //if not mob
if(!target.reagents.total_volume)
user << "<span class='warning'>[target] is empty!</span>"
to_chat(user, "<span class='warning'>[target] is empty!</span>")
return
if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers) && !istype(target,/obj/item/slime_extract))
user << "<span class='warning'>You cannot directly remove reagents from [target]!</span>"
to_chat(user, "<span class='warning'>You cannot directly remove reagents from [target]!</span>")
return
var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this) // transfer from, transfer to - who cares?
user << "<span class='notice'>You fill [src] with [trans] units of the solution.</span>"
to_chat(user, "<span class='notice'>You fill [src] with [trans] units of the solution.</span>")
if (reagents.total_volume >= reagents.maximum_volume)
mode=!mode
update_icon()
if(SYRINGE_INJECT)
if(!reagents.total_volume)
user << "<span class='notice'>[src] is empty.</span>"
to_chat(user, "<span class='notice'>[src] is empty.</span>")
return
if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/slime_extract) && !istype(target, /obj/item/clothing/mask/cigarette) && !istype(target, /obj/item/weapon/storage/fancy/cigarettes))
user << "<span class='warning'>You cannot directly fill [target]!</span>"
to_chat(user, "<span class='warning'>You cannot directly fill [target]!</span>")
return
if(target.reagents.total_volume >= target.reagents.maximum_volume)
user << "<span class='notice'>[target] is full.</span>"
to_chat(user, "<span class='notice'>[target] is full.</span>")
return
if(L) //living mob
@@ -142,12 +142,12 @@
add_logs(user, L, "injected", src, addition="which had [contained]")
else
log_attack("<font color='red'>[user.name] ([user.ckey]) injected [L.name] ([L.ckey]) with [src.name], which had [contained] (INTENT: [uppertext(user.a_intent)])</font>")
L.attack_log += "\[[time_stamp()]\] <font color='orange'>Injected themselves ([contained]) with [src.name].</font>"
L.log_message("<font color='orange'>Injected themselves ([contained]) with [src.name].</font>", INDIVIDUAL_ATTACK_LOG)
var/fraction = min(amount_per_transfer_from_this/reagents.total_volume, 1)
reagents.reaction(L, INJECT, fraction)
reagents.trans_to(target, amount_per_transfer_from_this)
user << "<span class='notice'>You inject [amount_per_transfer_from_this] units of the solution. The syringe now contains [reagents.total_volume] units.</span>"
to_chat(user, "<span class='notice'>You inject [amount_per_transfer_from_this] units of the solution. The syringe now contains [reagents.total_volume] units.</span>")
if (reagents.total_volume <= 0 && mode==SYRINGE_INJECT)
mode = SYRINGE_DRAW
update_icon()
+12 -12
View File
@@ -31,9 +31,9 @@
/obj/structure/reagent_dispensers/examine(mob/user)
..()
if(reagents.total_volume)
user << "<span class='notice'>It has [reagents.total_volume] units left.</span>"
to_chat(user, "<span class='notice'>It has [reagents.total_volume] units left.</span>")
else
user << "<span class='danger'>It's empty.</span>"
to_chat(user, "<span class='danger'>It's empty.</span>")
/obj/structure/reagent_dispensers/proc/boom()
@@ -89,20 +89,20 @@
var/boom_message = "[key_name_admin(P.firer)] triggered a fueltank explosion via projectile."
bombers += boom_message
message_admins(boom_message)
var/log_message = "[key_name(P.firer)] triggered a fueltank explosion via projectile."
P.firer.attack_log += "\[[time_stamp()]\] [log_message]"
log_attack(log_message)
var/log_message = "triggered a fueltank explosion via projectile."
P.firer.log_message(log_message, INDIVIDUAL_ATTACK_LOG)
log_attack("[key_name(P.firer)] [log_message]")
boom()
/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/I, mob/living/user, params)
if(istype(I, /obj/item/weapon/weldingtool))
if(!reagents.has_reagent("welding_fuel"))
user << "<span class='warning'>[src] is out of fuel!</span>"
to_chat(user, "<span class='warning'>[src] is out of fuel!</span>")
return
var/obj/item/weapon/weldingtool/W = I
if(!W.welding)
if(W.reagents.has_reagent("welding_fuel", W.max_fuel))
user << "<span class='warning'>Your [W.name] is already full!</span>"
to_chat(user, "<span class='warning'>Your [W.name] is already full!</span>")
return
reagents.trans_to(W, W.max_fuel)
user.visible_message("<span class='notice'>[user] refills [user.p_their()] [W.name].</span>", "<span class='notice'>You refill [W].</span>")
@@ -113,9 +113,9 @@
var/message_admins = "[key_name_admin(user)] triggered a fueltank explosion via welding tool."
bombers += message_admins
message_admins(message_admins)
var/message_log = "[key_name(user)] triggered a fueltank explosion via welding tool."
user.attack_log += "\[[time_stamp()]\] [message_log]"
log_attack(message_log)
var/message_log = "triggered a fueltank explosion via welding tool."
user.log_message(message_log, INDIVIDUAL_ATTACK_LOG)
log_attack("[key_name(user)] [message_log]")
boom()
return
return ..()
@@ -146,11 +146,11 @@
/obj/structure/reagent_dispensers/water_cooler/examine(mob/user)
..()
user << "There are [paper_cups ? paper_cups : "no"] paper cups left."
to_chat(user, "There are [paper_cups ? paper_cups : "no"] paper cups left.")
/obj/structure/reagent_dispensers/water_cooler/attack_hand(mob/living/user)
if(!paper_cups)
user << "<span class='warning'>There aren't any cups left!</span>"
to_chat(user, "<span class='warning'>There aren't any cups left!</span>")
return
user.visible_message("<span class='notice'>[user] takes a cup from [src].</span>", "<span class='notice'>You take a paper cup from [src].</span>")
var/obj/item/weapon/reagent_containers/food/drinks/sillycup/S = new(get_turf(src))