mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-29 08:08:49 +01:00
Merge pull request #11119 from phil235/VaporizeMethodReaction
reagents reaction() now has more application method
This commit is contained in:
@@ -314,7 +314,7 @@
|
||||
occupant.heal_organ_damage(heal_brute,heal_fire)
|
||||
if(beaker && next_trans == 0)
|
||||
beaker.reagents.trans_to(occupant, 1, 10)
|
||||
beaker.reagents.reaction(occupant)
|
||||
beaker.reagents.reaction(occupant, VAPOR)
|
||||
next_trans++
|
||||
if(next_trans == 10)
|
||||
next_trans = 0
|
||||
|
||||
@@ -94,12 +94,12 @@
|
||||
var/turf/location = get_turf(src)
|
||||
|
||||
// Create the reagents to put into the air
|
||||
create_reagents(5)
|
||||
create_reagents(10)
|
||||
|
||||
if(overmind && overmind.blob_reagent_datum)
|
||||
reagents.add_reagent(overmind.blob_reagent_datum.id, 5)
|
||||
reagents.add_reagent(overmind.blob_reagent_datum.id, 10)
|
||||
else
|
||||
reagents.add_reagent("spore", 5)
|
||||
reagents.add_reagent("spore", 10)
|
||||
|
||||
// Attach the smoke spreader and setup/start it.
|
||||
S.attach(location)
|
||||
|
||||
@@ -157,7 +157,10 @@
|
||||
last_attack = world.time
|
||||
OB.expand(T, 0, blob_reagent_datum.color)
|
||||
for(var/mob/living/L in T)
|
||||
blob_reagent_datum.reaction_mob(L, TOUCH, 25)
|
||||
if("blob" in L.faction) //no friendly fire
|
||||
continue
|
||||
var/mob_protection = L.get_permeability_protection()
|
||||
blob_reagent_datum.reaction_mob(L, VAPOR, 25, 1, mob_protection)
|
||||
blob_reagent_datum.send_message(L)
|
||||
OB.color = blob_reagent_datum.color
|
||||
|
||||
|
||||
@@ -58,14 +58,14 @@
|
||||
for(var/obj/O in range(0,src))
|
||||
if(O.type == src.type)
|
||||
continue
|
||||
reagents.reaction(O, TOUCH, fraction)
|
||||
reagents.reaction(O, VAPOR, fraction)
|
||||
var/hit = 0
|
||||
for(var/mob/living/L in range(0,src))
|
||||
hit += foam_mob(L)
|
||||
if(hit)
|
||||
lifetime++ //this is so the decrease from mobs hit and the natural decrease don't cumulate.
|
||||
var/T = get_turf(src)
|
||||
reagents.reaction(T, TOUCH, fraction)
|
||||
reagents.reaction(T, VAPOR, fraction)
|
||||
|
||||
if(--amount < 0)
|
||||
return
|
||||
@@ -77,7 +77,7 @@
|
||||
if(!istype(L))
|
||||
return 0
|
||||
var/fraction = 1/initial(lifetime)
|
||||
reagents.reaction(L, TOUCH, fraction)
|
||||
reagents.reaction(L, VAPOR, fraction)
|
||||
lifetime--
|
||||
return 1
|
||||
|
||||
|
||||
@@ -156,10 +156,10 @@
|
||||
for(var/obj/O in range(1,src))
|
||||
if(O.type == src.type)
|
||||
continue
|
||||
reagents.reaction(O, TOUCH, fraction)
|
||||
reagents.reaction(O, VAPOR, fraction)
|
||||
|
||||
for(var/turf/T in range(1,src))
|
||||
reagents.reaction(T, TOUCH, fraction)
|
||||
reagents.reaction(T, VAPOR, fraction)
|
||||
|
||||
var/hit = 0
|
||||
for(var/mob/living/L in range(1,src))
|
||||
@@ -173,7 +173,7 @@
|
||||
if(!istype(M))
|
||||
return 0
|
||||
var/fraction = 1/initial(lifetime)
|
||||
reagents.reaction(M, TOUCH, fraction)
|
||||
reagents.reaction(M, VAPOR, fraction)
|
||||
lifetime--
|
||||
return 1
|
||||
|
||||
|
||||
@@ -450,7 +450,6 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s
|
||||
var/melting_threshold = 100
|
||||
if(meltingpwr <= melting_threshold) // so a single unit can't melt items. You need 5.1+ unit for fluoro and 10.1+ for sulphuric
|
||||
return
|
||||
|
||||
for(var/V in armor)
|
||||
if(armor[V] > 0)
|
||||
.-- //it survives the acid...
|
||||
|
||||
@@ -22,14 +22,17 @@
|
||||
/obj/item/weapon/reagent_containers/glass/rag/afterattack(atom/A as obj|turf|area, mob/user,proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
if(ismob(A) && A.reagents && reagents.total_volume)
|
||||
var/mob/M = A
|
||||
if(user.a_intent == "harm")
|
||||
reagents.reaction(M, TOUCH)
|
||||
reagents.clear_reagents()
|
||||
if(iscarbon(A) && A.reagents && reagents.total_volume)
|
||||
var/mob/living/carbon/C = A
|
||||
if(user.a_intent == "harm" && !C.is_mouth_covered())
|
||||
reagents.reaction(C, INGEST)
|
||||
reagents.trans_to(C, reagents.total_volume)
|
||||
C.visible_message("<span class='danger'>[user] has smothered \the [C] with \the [src]!</span>", "<span class='userdanger'>[user] has smothered you with \the [src]!</span>", "<span class='italics'>You hear some struggling and muffled cries of surprise.</span>")
|
||||
else
|
||||
reagents.trans_to(M, reagents.total_volume)
|
||||
M.visible_message("<span class='danger'>[user] has smothered \the [A] with \the [src]!</span>", "<span class='userdanger'>[user] has smothered you with \the [src]!</span>", "<span class='italics'>You hear some struggling and muffled cries of surprise.</span>")
|
||||
reagents.reaction(C, TOUCH)
|
||||
reagents.clear_reagents()
|
||||
C.visible_message("<span class='notice'>[user] has touched \the [C] with \the [src].</span>")
|
||||
|
||||
else if(istype(A) && src in user)
|
||||
user.visible_message("[user] starts to wipe down [A] with [src]!", "<span class='notice'>You start to wipe down [A] with [src]...</span>")
|
||||
if(do_after(user,30, target = A))
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
|
||||
|
||||
var/const/TOUCH = 1
|
||||
var/const/INGEST = 2
|
||||
var/const/TOUCH = 1 //splashing
|
||||
var/const/INGEST = 2 //injection, ingestion
|
||||
var/const/VAPOR = 3 //smoke, foam, spray, blob attack
|
||||
var/const/PATCH = 4 //patches
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -429,7 +431,7 @@ var/const/INGEST = 2
|
||||
if(isliving(A))
|
||||
var/mob/living/L = A
|
||||
var/touch_protection = 0
|
||||
if(method == TOUCH)
|
||||
if(method == VAPOR)
|
||||
touch_protection = L.get_permeability_protection()
|
||||
for(var/datum/reagent/R in reagent_list)
|
||||
R.reaction_mob(L, method, R.volume*volume_modifier, show_message, touch_protection)
|
||||
|
||||
@@ -69,7 +69,7 @@ About the Holder:
|
||||
This proc calls the appropriate reaction procs of the reagents.
|
||||
I.e. if A is an object, it will call the reagents reaction_obj
|
||||
proc. The method var is used for reaction on mobs. It simply tells
|
||||
us if the mob TOUCHed the reagent or if it INGESTed the reagent.
|
||||
us if the mob TOUCHed the reagent, if it INGESTed the reagent, if the reagent was VAPORIZEd on them, or transfered via a PATCH to them..
|
||||
Since the volume can be checked in a reagents proc, you might want to
|
||||
use the volume_modifier var to modifiy the passed value without actually
|
||||
changing the volume of the reagents.
|
||||
|
||||
@@ -28,21 +28,21 @@
|
||||
var/overdose_threshold = 0
|
||||
var/addiction_threshold = 0
|
||||
var/addiction_stage = 0
|
||||
var/overdosed = 0 // You fucked up and this is now triggering it's overdose effects, purge that shit quick.
|
||||
var/overdosed = 0 // You fucked up and this is now triggering its overdose effects, purge that shit quick.
|
||||
|
||||
/datum/reagent/Destroy() // This should only be called by the holder, so it's already handled clearing its references
|
||||
..()
|
||||
holder = null
|
||||
|
||||
/datum/reagent/proc/reaction_mob(mob/living/M, method=TOUCH, volume, show_message = 1, touch_protection = 0)
|
||||
/datum/reagent/proc/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0)
|
||||
if(!istype(M))
|
||||
return 0
|
||||
var/datum/reagent/self = src
|
||||
src = null
|
||||
|
||||
if(method == TOUCH)
|
||||
if(method == VAPOR) //smoke, foam, spray
|
||||
if(M.reagents)
|
||||
var/modifier = Clamp((1 - touch_protection) + rand(-5,5)/100, 0, 1)
|
||||
var/modifier = Clamp((1 - touch_protection), 0, 1)
|
||||
var/amount = round(volume*modifier, 0.1)
|
||||
if(amount >= 1)
|
||||
M.reagents.add_reagent(self.id, amount)
|
||||
|
||||
@@ -4,6 +4,9 @@
|
||||
var/message = "The blob strikes you" //message sent to any mob hit by the blob
|
||||
var/message_living = null //extension to first mob sent to only living mobs i.e. silicons have no skin to be burnt
|
||||
|
||||
/datum/reagent/blob/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection)
|
||||
return round(reac_volume * min(1.5 - touch_protection, 1), 0.1) //full touch protection means 50% volume, any prot below 0.5 means 100% volume.
|
||||
|
||||
/datum/reagent/blob/boiling_oil
|
||||
name = "Boiling Oil"
|
||||
id = "boiling_oil"
|
||||
@@ -11,14 +14,13 @@
|
||||
color = "#B68D00"
|
||||
message = "The blob splashes you with burning oil"
|
||||
|
||||
/datum/reagent/blob/boiling_oil/reaction_mob(mob/living/M, method=TOUCH, volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
M.apply_damage(15*ratio, BURN)
|
||||
M.adjust_fire_stacks(2*ratio)
|
||||
M.IgniteMob()
|
||||
if(isliving(M))
|
||||
M.emote("scream")
|
||||
/datum/reagent/blob/boiling_oil/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
M.adjust_fire_stacks(round(reac_volume/12))
|
||||
reac_volume = ..()
|
||||
M.apply_damage(0.6*reac_volume, BURN)
|
||||
M.IgniteMob()
|
||||
if(iscarbon(M))
|
||||
M.emote("scream")
|
||||
|
||||
/datum/reagent/blob/toxic_goop
|
||||
name = "Toxic Goop"
|
||||
@@ -27,10 +29,9 @@
|
||||
color = "#008000"
|
||||
message_living = ", and you feel sick and nauseated"
|
||||
|
||||
/datum/reagent/blob/toxic_goop/reaction_mob(mob/living/M, method=TOUCH, volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
M.apply_damage(20*ratio, TOX)
|
||||
/datum/reagent/blob/toxic_goop/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
reac_volume = ..()
|
||||
M.apply_damage(0.8*reac_volume, TOX)
|
||||
|
||||
/datum/reagent/blob/skin_ripper
|
||||
name = "Skin Ripper"
|
||||
@@ -39,12 +40,11 @@
|
||||
color = "#FF4C4C"
|
||||
message_living = ", and you feel your skin ripping and tearing off"
|
||||
|
||||
/datum/reagent/blob/skin_ripper/reaction_mob(mob/living/M, method=TOUCH, volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
M.apply_damage(20*ratio, BRUTE)
|
||||
if(iscarbon(M))
|
||||
M.emote("scream")
|
||||
/datum/reagent/blob/skin_ripper/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
reac_volume = ..()
|
||||
M.apply_damage(0.8*reac_volume, BRUTE)
|
||||
if(iscarbon(M))
|
||||
M.emote("scream")
|
||||
|
||||
// Combo Reagents
|
||||
|
||||
@@ -55,15 +55,14 @@
|
||||
color = "#7F0000"
|
||||
message_living = ", and you feel your skin char and melt"
|
||||
|
||||
/datum/reagent/blob/skin_melter/reaction_mob(mob/living/M, method=TOUCH, volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
M.apply_damage(10*ratio, BRUTE)
|
||||
M.apply_damage(10*ratio, BURN)
|
||||
M.adjust_fire_stacks(2*ratio)
|
||||
M.IgniteMob()
|
||||
if(iscarbon(M))
|
||||
M.emote("scream")
|
||||
/datum/reagent/blob/skin_melter/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
M.adjust_fire_stacks(round(reac_volume/12))
|
||||
reac_volume = ..()
|
||||
M.apply_damage(0.4*reac_volume, BRUTE)
|
||||
M.apply_damage(0.4*reac_volume, BURN)
|
||||
M.IgniteMob()
|
||||
if(iscarbon(M))
|
||||
M.emote("scream")
|
||||
|
||||
/datum/reagent/blob/lung_destroying_toxin
|
||||
name = "Lung Destroying Toxin"
|
||||
@@ -72,12 +71,11 @@
|
||||
color = "#00FFC5"
|
||||
message_living = ", and your lungs feel heavy and weak"
|
||||
|
||||
/datum/reagent/blob/lung_destroying_toxin/reaction_mob(mob/living/M, method=TOUCH, volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
M.apply_damage(20* ratio, OXY)
|
||||
M.losebreath += 15*ratio
|
||||
M.apply_damage(20*ratio, TOX)
|
||||
/datum/reagent/blob/lung_destroying_toxin/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
reac_volume = ..()
|
||||
M.apply_damage(0.8* reac_volume, OXY)
|
||||
M.losebreath += round(0.6*reac_volume)
|
||||
M.apply_damage(0.8*reac_volume, TOX)
|
||||
|
||||
// Special Reagents
|
||||
|
||||
@@ -88,18 +86,17 @@
|
||||
color = "#00EE00"
|
||||
message_living = ", and your skin feels papery and everything hurts"
|
||||
|
||||
/datum/reagent/blob/radioactive_liquid/reaction_mob(mob/living/M, method=TOUCH, volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
M.apply_damage(10*ratio, BRUTE)
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
M.irradiate(40*ratio)
|
||||
if(prob(33*ratio))
|
||||
randmuti(M)
|
||||
if(prob(98))
|
||||
randmutb(M)
|
||||
domutcheck(M, null)
|
||||
updateappearance(M)
|
||||
/datum/reagent/blob/radioactive_liquid/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
reac_volume = ..()
|
||||
M.apply_damage(0.4*reac_volume, BRUTE)
|
||||
if(ishuman(M))
|
||||
M.irradiate(1.6*reac_volume)
|
||||
if(prob(1.3*reac_volume))
|
||||
randmuti(M)
|
||||
if(prob(98))
|
||||
randmutb(M)
|
||||
domutcheck(M, null)
|
||||
updateappearance(M)
|
||||
|
||||
/datum/reagent/blob/dark_matter
|
||||
name = "Dark Matter"
|
||||
@@ -108,12 +105,10 @@
|
||||
color = "#61407E"
|
||||
message = "You feel a thrum as the blob strikes you, and everything flies at you"
|
||||
|
||||
/datum/reagent/blob/dark_matter/reaction_mob(mob/living/M, method=TOUCH, volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
M.apply_damage(15*ratio, BRUTE)
|
||||
reagent_vortex(M, 0)
|
||||
|
||||
/datum/reagent/blob/dark_matter/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
reagent_vortex(M, 0, reac_volume)
|
||||
reac_volume = ..()
|
||||
M.apply_damage(0.6*reac_volume, BRUTE)
|
||||
|
||||
/datum/reagent/blob/b_sorium
|
||||
name = "Sorium"
|
||||
@@ -122,12 +117,10 @@
|
||||
color = "#808000"
|
||||
message = "The blob slams into you, and sends you flying"
|
||||
|
||||
/datum/reagent/blob/b_sorium/reaction_mob(mob/living/M, method=TOUCH, volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
M.apply_damage(15*ratio, BRUTE)
|
||||
reagent_vortex(M, 1)
|
||||
|
||||
/datum/reagent/blob/b_sorium/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
reagent_vortex(M, 1, reac_volume)
|
||||
reac_volume = ..()
|
||||
M.apply_damage(0.6*reac_volume, BRUTE)
|
||||
|
||||
/datum/reagent/blob/explosive // I'm gonna burn in hell for this one
|
||||
name = "Explosive Gelatin"
|
||||
@@ -136,11 +129,9 @@
|
||||
color = "#FFA500"
|
||||
message = "The blob strikes you, and its tendrils explode"
|
||||
|
||||
/datum/reagent/blob/explosive/reaction_mob(mob/living/M, method=TOUCH, volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
if(prob(75*ratio))
|
||||
explosion(M.loc, 0, 0, 1, 0, 0)
|
||||
/datum/reagent/blob/explosive/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
if(prob(3*reac_volume))
|
||||
explosion(M.loc, 0, 0, 1, 0, 0)
|
||||
|
||||
/datum/reagent/blob/omnizine
|
||||
name = "Omnizine"
|
||||
@@ -150,10 +141,9 @@
|
||||
message = "The blob squirts something at you"
|
||||
message_living = ", and you feel great"
|
||||
|
||||
/datum/reagent/blob/omnizine/reaction_mob(mob/living/M, method=TOUCH, volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
M.reagents.add_reagent("omnizine", 11*ratio)
|
||||
/datum/reagent/blob/omnizine/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
reac_volume = ..()
|
||||
M.reagents.add_reagent("omnizine", 0.6*reac_volume)
|
||||
|
||||
/datum/reagent/blob/spacedrugs
|
||||
name = "Space drugs"
|
||||
@@ -163,17 +153,16 @@
|
||||
message = "The blob squirts something at you"
|
||||
message_living = ", and you feel funny"
|
||||
|
||||
/datum/reagent/blob/spacedrugs/reaction_mob(mob/living/M, method=TOUCH, volume)
|
||||
if(method == TOUCH)
|
||||
var/ratio = volume/25
|
||||
M.hallucination += 20*ratio
|
||||
M.reagents.add_reagent("space_drugs", 15*ratio)
|
||||
M.apply_damage(10*ratio, TOX)
|
||||
/datum/reagent/blob/spacedrugs/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
reac_volume = ..()
|
||||
M.hallucination += 0.8*reac_volume
|
||||
M.reagents.add_reagent("space_drugs", 0.6*reac_volume)
|
||||
M.apply_damage(0.4*reac_volume, TOX)
|
||||
|
||||
|
||||
/datum/reagent/blob/proc/reagent_vortex(mob/living/M, setting_type)
|
||||
/datum/reagent/blob/proc/reagent_vortex(mob/living/M, setting_type, reac_volume)
|
||||
var/turf/pull = get_turf(M)
|
||||
var/range_power = Clamp(round(volume/5, 1), 1, 5)
|
||||
var/range_power = Clamp(round(reac_volume/5, 1), 1, 5)
|
||||
for(var/atom/movable/X in range(range_power,pull))
|
||||
if(istype(X, /obj/effect))
|
||||
continue
|
||||
|
||||
+6
-6
@@ -34,13 +34,13 @@
|
||||
M.adjustToxLoss(2)
|
||||
..()
|
||||
return
|
||||
/datum/reagent/consumable/ethanol/reaction_obj(obj/O, volume)
|
||||
/datum/reagent/consumable/ethanol/reaction_obj(obj/O, reac_volume)
|
||||
if(istype(O,/obj/item/weapon/paper))
|
||||
var/obj/item/weapon/paper/paperaffected = O
|
||||
paperaffected.clearpaper()
|
||||
usr << "The solution melts away the ink on the paper."
|
||||
if(istype(O,/obj/item/weapon/book))
|
||||
if(volume >= 5)
|
||||
if(reac_volume >= 5)
|
||||
var/obj/item/weapon/book/affectedbook = O
|
||||
affectedbook.dat = null
|
||||
usr << "The solution melts away the ink on the book."
|
||||
@@ -48,12 +48,12 @@
|
||||
usr << "It wasn't enough..."
|
||||
return
|
||||
|
||||
/datum/reagent/consumable/ethanol/reaction_mob(mob/living/M, method=TOUCH, volume)//Splashing people with ethanol isn't quite as good as fuel.
|
||||
/datum/reagent/consumable/ethanol/reaction_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people with ethanol isn't quite as good as fuel.
|
||||
if(!istype(M, /mob/living))
|
||||
return
|
||||
if(method == TOUCH)
|
||||
M.adjust_fire_stacks(volume / 15)
|
||||
return
|
||||
if(method == TOUCH || method == VAPOR)
|
||||
M.adjust_fire_stacks(reac_volume / 15)
|
||||
..()
|
||||
|
||||
/datum/reagent/consumable/ethanol/beer
|
||||
name = "Beer"
|
||||
|
||||
@@ -150,8 +150,8 @@
|
||||
..()
|
||||
return
|
||||
|
||||
/datum/reagent/consumable/frostoil/reaction_turf(turf/simulated/T, volume)
|
||||
if(volume >= 5)
|
||||
/datum/reagent/consumable/frostoil/reaction_turf(turf/simulated/T, reac_volume)
|
||||
if(reac_volume >= 5)
|
||||
for(var/mob/living/simple_animal/slime/M in T)
|
||||
M.adjustToxLoss(rand(15,30))
|
||||
//if(istype(T))
|
||||
@@ -163,12 +163,12 @@
|
||||
description = "A chemical agent used for self-defense and in police work."
|
||||
color = "#B31008" // rgb: 179, 16, 8
|
||||
|
||||
/datum/reagent/consumable/condensedcapsaicin/reaction_mob(mob/living/M, method=TOUCH, volume)
|
||||
/datum/reagent/consumable/condensedcapsaicin/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
if(!istype(M, /mob/living/carbon/human) && !istype(M, /mob/living/carbon/monkey))
|
||||
return
|
||||
|
||||
var/mob/living/carbon/victim = M
|
||||
if(method == TOUCH)
|
||||
if(method == TOUCH || method == VAPOR)
|
||||
//check for protection
|
||||
var/mouth_covered = 0
|
||||
var/eyes_covered = 0
|
||||
@@ -321,11 +321,11 @@
|
||||
nutriment_factor = 20 * REAGENTS_METABOLISM
|
||||
color = "#302000" // rgb: 48, 32, 0
|
||||
|
||||
/datum/reagent/consumable/cornoil/reaction_turf(turf/simulated/T, volume)
|
||||
/datum/reagent/consumable/cornoil/reaction_turf(turf/simulated/T, reac_volume)
|
||||
if (!istype(T))
|
||||
return
|
||||
src = null
|
||||
if(volume >= 3)
|
||||
if(reac_volume >= 3)
|
||||
T.MakeSlippery()
|
||||
var/obj/effect/hotspot/hotspot = (locate(/obj/effect/hotspot) in T)
|
||||
if(hotspot)
|
||||
@@ -380,11 +380,11 @@
|
||||
reagent_state = SOLID
|
||||
color = "#FFFFFF" // rgb: 0, 0, 0
|
||||
|
||||
/datum/reagent/consumable/flour/reaction_turf(turf/T, volume)
|
||||
/datum/reagent/consumable/flour/reaction_turf(turf/T, reac_volume)
|
||||
src = null
|
||||
if(!istype(T, /turf/space))
|
||||
var/obj/effect/decal/cleanable/reagentdecal = new/obj/effect/decal/cleanable/flour(T)
|
||||
reagentdecal.reagents.add_reagent("flour", volume)
|
||||
reagentdecal.reagents.add_reagent("flour", reac_volume)
|
||||
|
||||
/datum/reagent/consumable/cherryjelly
|
||||
name = "Cherry Jelly"
|
||||
|
||||
@@ -163,24 +163,22 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC"
|
||||
|
||||
/datum/reagent/medicine/silver_sulfadiazine/reaction_mob(mob/living/M, method=TOUCH, volume, show_message = 1)
|
||||
/datum/reagent/medicine/silver_sulfadiazine/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1)
|
||||
if(iscarbon(M) && M.stat != DEAD)
|
||||
if(method == TOUCH)
|
||||
M.adjustFireLoss(-volume)
|
||||
if(method == PATCH)
|
||||
M.adjustFireLoss(-reac_volume)
|
||||
if(show_message)
|
||||
M << "<span class='notice'>You feel your burns healing!</span>"
|
||||
M.emote("scream")
|
||||
if(method == INGEST)
|
||||
M.adjustToxLoss(0.5*volume)
|
||||
M.adjustToxLoss(0.5*reac_volume)
|
||||
if(show_message)
|
||||
M << "<span class='notice'>You probably shouldn't have eaten that. Maybe you should of splashed it on, or applied a patch?</span>"
|
||||
..()
|
||||
return
|
||||
|
||||
/datum/reagent/medicine/silver_sulfadiazine/on_mob_life(mob/living/M)
|
||||
M.adjustFireLoss(-2*REM)
|
||||
..()
|
||||
return
|
||||
|
||||
/datum/reagent/medicine/styptic_powder
|
||||
name = "Styptic Powder"
|
||||
@@ -189,25 +187,23 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC"
|
||||
|
||||
/datum/reagent/medicine/styptic_powder/reaction_mob(mob/living/M, method=TOUCH, volume, show_message = 1)
|
||||
/datum/reagent/medicine/styptic_powder/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1)
|
||||
if(iscarbon(M) && M.stat != DEAD)
|
||||
if(method == TOUCH)
|
||||
M.adjustBruteLoss(-volume)
|
||||
if(method == PATCH)
|
||||
M.adjustBruteLoss(-reac_volume)
|
||||
if(show_message)
|
||||
M << "<span class='notice'>You feel your wounds knitting back together!</span>"
|
||||
if(M.stat)
|
||||
M.emote("scream")
|
||||
M.emote("scream")
|
||||
if(method == INGEST)
|
||||
M.adjustToxLoss(0.5*volume)
|
||||
M.adjustToxLoss(0.5*reac_volume)
|
||||
if(show_message)
|
||||
M << "<span class='notice'>You feel kind of ill. Maybe you ate a medicine you shouldn't have?</span>"
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
/datum/reagent/medicine/styptic_powder/on_mob_life(mob/living/M)
|
||||
M.adjustBruteLoss(-2*REM)
|
||||
..()
|
||||
return
|
||||
|
||||
/datum/reagent/medicine/salglu_solution
|
||||
name = "Saline-Glucose Solution"
|
||||
@@ -222,7 +218,6 @@
|
||||
M.adjustBruteLoss(-0.5*REM)
|
||||
M.adjustFireLoss(-0.5*REM)
|
||||
..()
|
||||
return
|
||||
|
||||
/datum/reagent/medicine/mine_salve
|
||||
name = "Miner's Salve"
|
||||
@@ -239,20 +234,19 @@
|
||||
M.adjustBruteLoss(-0.25*REM)
|
||||
M.adjustFireLoss(-0.25*REM)
|
||||
..()
|
||||
return
|
||||
|
||||
/datum/reagent/medicine/mine_salve/reaction_mob(mob/living/M, method=TOUCH, volume, show_message = 1)
|
||||
/datum/reagent/medicine/mine_salve/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1)
|
||||
if(iscarbon(M))
|
||||
if(method == TOUCH)
|
||||
if(show_message)
|
||||
M << "<span class='notice'>You feel your wounds knitting back together!</span>"
|
||||
method = VAPOR //so it's correctly absorbed in reagent/reaction_mob()
|
||||
if(method == INGEST)
|
||||
if(show_message)
|
||||
M << "<span class='notice'>That tasted horrible.</span>"
|
||||
M.AdjustStunned(2)
|
||||
M.AdjustWeakened(2)
|
||||
..()
|
||||
return
|
||||
|
||||
/datum/reagent/medicine/mine_salve/on_mob_delete(mob/living/M)
|
||||
if(iscarbon(M))
|
||||
@@ -267,15 +261,15 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC"
|
||||
|
||||
/datum/reagent/medicine/synthflesh/reaction_mob(mob/living/M, method=TOUCH, volume,show_message = 1)
|
||||
/datum/reagent/medicine/synthflesh/reaction_mob(mob/living/M, method=TOUCH, reac_volume,show_message = 1)
|
||||
if(iscarbon(M) && M.stat != DEAD)
|
||||
if(method == TOUCH)
|
||||
M.adjustBruteLoss(-1.5*volume)
|
||||
M.adjustFireLoss(-1.5*volume)
|
||||
if(method == PATCH)
|
||||
M.adjustBruteLoss(-1.5*reac_volume)
|
||||
M.adjustFireLoss(-1.5*reac_volume)
|
||||
if(show_message)
|
||||
M << "<span class='notice'>You feel your burns healing and your flesh knitting together!</span>"
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
/datum/reagent/medicine/charcoal
|
||||
name = "Charcoal"
|
||||
@@ -659,7 +653,7 @@
|
||||
color = "#C8A5DC"
|
||||
metabolization_rate = 0.5 * REAGENTS_METABOLISM
|
||||
|
||||
/datum/reagent/medicine/strange_reagent/reaction_mob(mob/living/carbon/human/M, method=TOUCH, volume)
|
||||
/datum/reagent/medicine/strange_reagent/reaction_mob(mob/living/carbon/human/M, method=TOUCH, reac_volume)
|
||||
if(M.stat == DEAD)
|
||||
if(M.getBruteLoss() >= 100 || M.getFireLoss() >= 100)
|
||||
M.visible_message("<span class='warning'>[M]'s body convulses a bit, and then falls still once more.</span>")
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
id = "blood"
|
||||
color = "#C80000" // rgb: 200, 0, 0
|
||||
|
||||
/datum/reagent/blood/reaction_mob(mob/M, method=TOUCH, volume)
|
||||
/datum/reagent/blood/reaction_mob(mob/M, method=TOUCH, reac_volume)
|
||||
var/datum/reagent/blood/self = src
|
||||
src = null
|
||||
if(self.data && self.data["viruses"])
|
||||
@@ -14,9 +14,9 @@
|
||||
if(D.spread_flags & SPECIAL || D.spread_flags & NON_CONTAGIOUS)
|
||||
continue
|
||||
|
||||
if(method == TOUCH)
|
||||
if(method == TOUCH || method == VAPOR)
|
||||
M.ContractDisease(D)
|
||||
else //injected
|
||||
else //ingest or patch
|
||||
M.ForceContractDisease(D)
|
||||
|
||||
/datum/reagent/blood/on_new(list/data)
|
||||
@@ -48,11 +48,13 @@
|
||||
src.data["viruses"] = preserve
|
||||
return 1
|
||||
|
||||
/datum/reagent/blood/reaction_turf(turf/simulated/T, volume)//splash the blood all over the place
|
||||
if(!istype(T)) return
|
||||
/datum/reagent/blood/reaction_turf(turf/simulated/T, reac_volume)//splash the blood all over the place
|
||||
if(!istype(T))
|
||||
return
|
||||
var/datum/reagent/blood/self = src
|
||||
src = null
|
||||
if(!(volume >= 3)) return
|
||||
if(reac_volume < 3)
|
||||
return
|
||||
//var/datum/disease/D = self.data["virus"]
|
||||
if(!self.data["donor"] || istype(self.data["donor"], /mob/living/carbon/human))
|
||||
var/obj/effect/decal/cleanable/blood/blood_prop = locate() in T //find some blood here
|
||||
@@ -93,7 +95,7 @@
|
||||
id = "vaccine"
|
||||
color = "#C81040" // rgb: 200, 16, 64
|
||||
|
||||
/datum/reagent/vaccine/reaction_mob(mob/M, method=TOUCH, volume)
|
||||
/datum/reagent/vaccine/reaction_mob(mob/M, method=TOUCH, reac_volume)
|
||||
var/datum/reagent/vaccine/self = src
|
||||
src = null
|
||||
if(islist(self.data) && method == INGEST)
|
||||
@@ -101,13 +103,11 @@
|
||||
if(D.GetDiseaseID() in self.data)
|
||||
D.cure()
|
||||
M.resistances |= self.data
|
||||
return
|
||||
|
||||
/datum/reagent/vaccine/on_merge(list/data)
|
||||
if(istype(data))
|
||||
src.data |= data.Copy()
|
||||
|
||||
|
||||
/datum/reagent/water
|
||||
name = "Water"
|
||||
id = "water"
|
||||
@@ -119,11 +119,11 @@
|
||||
* Water reaction to turf
|
||||
*/
|
||||
|
||||
/datum/reagent/water/reaction_turf(turf/simulated/T, volume)
|
||||
/datum/reagent/water/reaction_turf(turf/simulated/T, reac_volume)
|
||||
if (!istype(T)) return
|
||||
var/CT = cooling_temperature
|
||||
src = null
|
||||
if(volume >= 10)
|
||||
if(reac_volume >= 10)
|
||||
T.MakeSlippery()
|
||||
|
||||
for(var/mob/living/simple_animal/slime/M in T)
|
||||
@@ -142,7 +142,7 @@
|
||||
* Water reaction to an object
|
||||
*/
|
||||
|
||||
/datum/reagent/water/reaction_obj(obj/O, volume)
|
||||
/datum/reagent/water/reaction_obj(obj/O, reac_volume)
|
||||
src = null
|
||||
|
||||
if(istype(O,/obj/item))
|
||||
@@ -166,11 +166,12 @@
|
||||
* Water reaction to a mob
|
||||
*/
|
||||
|
||||
/datum/reagent/water/reaction_mob(mob/living/M, method=TOUCH, volume)//Splashing people with water can help put them out!
|
||||
/datum/reagent/water/reaction_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people with water can help put them out!
|
||||
if(!istype(M, /mob/living))
|
||||
return
|
||||
if(method == TOUCH)
|
||||
M.adjust_fire_stacks(-(volume / 10))
|
||||
M.adjust_fire_stacks(-(reac_volume / 10))
|
||||
..()
|
||||
|
||||
/datum/reagent/water/holywater
|
||||
name = "Holy Water"
|
||||
@@ -200,10 +201,10 @@
|
||||
holder.remove_reagent(src.id, 0.4) //fixed consumption to prevent balancing going out of whack
|
||||
return
|
||||
|
||||
/datum/reagent/water/holywater/reaction_turf(turf/simulated/T, volume)
|
||||
/datum/reagent/water/holywater/reaction_turf(turf/simulated/T, reac_volume)
|
||||
..()
|
||||
if(!istype(T)) return
|
||||
if(volume>=10)
|
||||
if(reac_volume>=10)
|
||||
for(var/obj/effect/rune/R in T)
|
||||
qdel(R)
|
||||
T.Bless()
|
||||
@@ -247,10 +248,10 @@
|
||||
description = "Lubricant is a substance introduced between two moving surfaces to reduce the friction and wear between them. giggity."
|
||||
color = "#009CA8" // rgb: 0, 156, 168
|
||||
|
||||
/datum/reagent/lube/reaction_turf(turf/simulated/T, volume)
|
||||
/datum/reagent/lube/reaction_turf(turf/simulated/T, reac_volume)
|
||||
if (!istype(T)) return
|
||||
src = null
|
||||
if(volume >= 1)
|
||||
if(reac_volume >= 1)
|
||||
T.MakeSlippery(2)
|
||||
|
||||
/datum/reagent/spraytan
|
||||
@@ -261,9 +262,9 @@
|
||||
metabolization_rate = 10 * REAGENTS_METABOLISM // very fast, so it can be applied rapidly. But this changes on an overdose
|
||||
overdose_threshold = 11 //Slightly more than one un-nozzled spraybottle.
|
||||
|
||||
/datum/reagent/spraytan/reaction_mob(mob/living/M, method=TOUCH, volume, show_message = 1)
|
||||
/datum/reagent/spraytan/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1)
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
if(method == TOUCH)
|
||||
if(method == PATCH || method == VAPOR)
|
||||
var/mob/living/carbon/human/N = M
|
||||
if(N.dna.species.id == "human")
|
||||
switch(N.skin_tone)
|
||||
@@ -382,9 +383,10 @@
|
||||
description = "An advanced corruptive toxin produced by slimes."
|
||||
color = "#13BC5E" // rgb: 19, 188, 94
|
||||
|
||||
/datum/reagent/aslimetoxin/reaction_mob(mob/M, volume)
|
||||
/datum/reagent/aslimetoxin/reaction_mob(mob/M, method=TOUCH, reac_volume)
|
||||
src = null
|
||||
M.ForceContractDisease(new /datum/disease/transformation/slime(0))
|
||||
if(method != TOUCH)
|
||||
M.ForceContractDisease(new /datum/disease/transformation/slime(0))
|
||||
|
||||
/datum/reagent/serotrotium
|
||||
name = "Serotrotium"
|
||||
@@ -463,7 +465,7 @@
|
||||
reagent_state = SOLID
|
||||
color = "#1C1300" // rgb: 30, 20, 0
|
||||
|
||||
/datum/reagent/carbon/reaction_turf(turf/T, volume)
|
||||
/datum/reagent/carbon/reaction_turf(turf/T, reac_volume)
|
||||
src = null
|
||||
if(!istype(T, /turf/space))
|
||||
new /obj/effect/decal/cleanable/dirt(T)
|
||||
@@ -539,12 +541,12 @@
|
||||
..()
|
||||
return
|
||||
|
||||
/datum/reagent/radium/reaction_turf(turf/T, volume)
|
||||
/datum/reagent/radium/reaction_turf(turf/T, reac_volume)
|
||||
src = null
|
||||
if(volume >= 3)
|
||||
if(reac_volume >= 3)
|
||||
if(!istype(T, /turf/space))
|
||||
var/obj/effect/decal/cleanable/reagentdecal = new/obj/effect/decal/cleanable/greenglow(T)
|
||||
reagentdecal.reagents.add_reagent("radium", volume)
|
||||
reagentdecal.reagents.add_reagent("radium", reac_volume)
|
||||
|
||||
/datum/reagent/sterilizine
|
||||
name = "Sterilizine"
|
||||
@@ -583,15 +585,13 @@
|
||||
/datum/reagent/uranium/on_mob_life(mob/living/M)
|
||||
M.apply_effect(1/M.metabolism_efficiency,IRRADIATE,0)
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
/datum/reagent/uranium/reaction_turf(turf/T, volume)
|
||||
/datum/reagent/uranium/reaction_turf(turf/T, reac_volume)
|
||||
src = null
|
||||
if(volume >= 3)
|
||||
if(reac_volume >= 3)
|
||||
if(!istype(T, /turf/space))
|
||||
var/obj/effect/decal/cleanable/reagentdecal = new/obj/effect/decal/cleanable/greenglow(T)
|
||||
reagentdecal.reagents.add_reagent("uranium", volume)
|
||||
reagentdecal.reagents.add_reagent("uranium", reac_volume)
|
||||
|
||||
/datum/reagent/aluminium
|
||||
name = "Aluminium"
|
||||
@@ -613,17 +613,17 @@
|
||||
description = "Required for welders. Flamable."
|
||||
color = "#660000" // rgb: 102, 0, 0
|
||||
|
||||
/datum/reagent/fuel/reaction_mob(mob/living/M, method=TOUCH, volume)//Splashing people with welding fuel to make them easy to ignite!
|
||||
/datum/reagent/fuel/reaction_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people with welding fuel to make them easy to ignite!
|
||||
if(!istype(M, /mob/living))
|
||||
return
|
||||
if(method == TOUCH)
|
||||
M.adjust_fire_stacks(volume / 10)
|
||||
if(method == TOUCH || method == VAPOR)
|
||||
M.adjust_fire_stacks(reac_volume / 10)
|
||||
return
|
||||
..()
|
||||
|
||||
/datum/reagent/fuel/on_mob_life(mob/living/M)
|
||||
M.adjustToxLoss(1)
|
||||
..()
|
||||
return
|
||||
|
||||
/datum/reagent/space_cleaner
|
||||
name = "Space cleaner"
|
||||
@@ -631,15 +631,15 @@
|
||||
description = "A compound used to clean things. Now with 50% more sodium hypochlorite!"
|
||||
color = "#A5F0EE" // rgb: 165, 240, 238
|
||||
|
||||
/datum/reagent/space_cleaner/reaction_obj(obj/O, volume)
|
||||
/datum/reagent/space_cleaner/reaction_obj(obj/O, reac_volume)
|
||||
if(istype(O,/obj/effect/decal/cleanable))
|
||||
qdel(O)
|
||||
else
|
||||
if(O)
|
||||
O.clean_blood()
|
||||
|
||||
/datum/reagent/space_cleaner/reaction_turf(turf/T, volume)
|
||||
if(volume >= 1)
|
||||
/datum/reagent/space_cleaner/reaction_turf(turf/T, reac_volume)
|
||||
if(reac_volume >= 1)
|
||||
T.clean_blood()
|
||||
for(var/obj/effect/decal/cleanable/C in T)
|
||||
qdel(C)
|
||||
@@ -648,39 +648,40 @@
|
||||
M.adjustToxLoss(rand(5,10))
|
||||
if(istype(T, /turf/simulated/floor))
|
||||
var/turf/simulated/floor/F = T
|
||||
if(volume >= 1)
|
||||
if(reac_volume >= 1)
|
||||
F.dirt = 0
|
||||
|
||||
/datum/reagent/space_cleaner/reaction_mob(mob/M, method=TOUCH, volume)
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
if(istype(M,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.lip_style)
|
||||
H.lip_style = null
|
||||
H.update_body()
|
||||
if(C.r_hand)
|
||||
C.r_hand.clean_blood()
|
||||
if(C.l_hand)
|
||||
C.l_hand.clean_blood()
|
||||
if(C.wear_mask)
|
||||
if(C.wear_mask.clean_blood())
|
||||
C.update_inv_wear_mask()
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = C
|
||||
if(H.head)
|
||||
if(H.head.clean_blood())
|
||||
H.update_inv_head()
|
||||
if(H.wear_suit)
|
||||
if(H.wear_suit.clean_blood())
|
||||
H.update_inv_wear_suit()
|
||||
else if(H.w_uniform)
|
||||
if(H.w_uniform.clean_blood())
|
||||
H.update_inv_w_uniform()
|
||||
if(H.shoes)
|
||||
if(H.shoes.clean_blood())
|
||||
H.update_inv_shoes()
|
||||
M.clean_blood()
|
||||
/datum/reagent/space_cleaner/reaction_mob(mob/M, method=TOUCH, reac_volume)
|
||||
if(method == TOUCH || VAPOR)
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
if(istype(M,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.lip_style)
|
||||
H.lip_style = null
|
||||
H.update_body()
|
||||
if(C.r_hand)
|
||||
C.r_hand.clean_blood()
|
||||
if(C.l_hand)
|
||||
C.l_hand.clean_blood()
|
||||
if(C.wear_mask)
|
||||
if(C.wear_mask.clean_blood())
|
||||
C.update_inv_wear_mask()
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = C
|
||||
if(H.head)
|
||||
if(H.head.clean_blood())
|
||||
H.update_inv_head()
|
||||
if(H.wear_suit)
|
||||
if(H.wear_suit.clean_blood())
|
||||
H.update_inv_wear_suit()
|
||||
else if(H.w_uniform)
|
||||
if(H.w_uniform.clean_blood())
|
||||
H.update_inv_w_uniform()
|
||||
if(H.shoes)
|
||||
if(H.shoes.clean_blood())
|
||||
H.update_inv_shoes()
|
||||
M.clean_blood()
|
||||
|
||||
/datum/reagent/cryptobiolin
|
||||
name = "Cryptobiolin"
|
||||
@@ -717,9 +718,9 @@
|
||||
description = "Microscopic construction robots."
|
||||
color = "#535E66" // rgb: 83, 94, 102
|
||||
|
||||
/datum/reagent/nanites/reaction_mob(mob/M, method=TOUCH, volume)
|
||||
/datum/reagent/nanites/reaction_mob(mob/M, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0)
|
||||
src = null
|
||||
if( (prob(min(10, volume)) && method==TOUCH) || method==INGEST)
|
||||
if(method==PATCH || method==INGEST || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection))))
|
||||
M.ForceContractDisease(new /datum/disease/transformation/robot(0))
|
||||
|
||||
/datum/reagent/xenomicrobes
|
||||
@@ -728,9 +729,9 @@
|
||||
description = "Microbes with an entirely alien cellular structure."
|
||||
color = "#535E66" // rgb: 83, 94, 102
|
||||
|
||||
/datum/reagent/xenomicrobes/reaction_mob(mob/M, method=TOUCH, volume)
|
||||
/datum/reagent/xenomicrobes/reaction_mob(mob/M, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0)
|
||||
src = null
|
||||
if( (prob(min(10, volume)) && method==TOUCH) || method==INGEST)
|
||||
if(method==PATCH || method==INGEST || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection))))
|
||||
M.ContractDisease(new /datum/disease/transformation/xeno(0))
|
||||
|
||||
/datum/reagent/fluorosurfactant//foam precursor
|
||||
@@ -909,7 +910,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC"
|
||||
|
||||
/datum/reagent/carpet/reaction_turf(turf/simulated/T, volume)
|
||||
/datum/reagent/carpet/reaction_turf(turf/simulated/T, reac_volume)
|
||||
if(istype(T, /turf/simulated/floor/plating) || istype(T, /turf/simulated/floor/plasteel))
|
||||
var/turf/simulated/floor/F = T
|
||||
F.ChangeTurf(/turf/simulated/floor/carpet)
|
||||
@@ -959,21 +960,20 @@
|
||||
..()
|
||||
return
|
||||
|
||||
/datum/reagent/colorful_reagent/reaction_mob(mob/living/M, volume)
|
||||
/datum/reagent/colorful_reagent/reaction_mob(mob/living/M, reac_volume)
|
||||
if(M && isliving(M))
|
||||
M.color = pick(random_color_list)
|
||||
..()
|
||||
return
|
||||
/datum/reagent/colorful_reagent/reaction_obj(obj/O, volume)
|
||||
|
||||
/datum/reagent/colorful_reagent/reaction_obj(obj/O, reac_volume)
|
||||
if(O)
|
||||
O.color = pick(random_color_list)
|
||||
..()
|
||||
return
|
||||
/datum/reagent/colorful_reagent/reaction_turf(turf/T, volume)
|
||||
|
||||
/datum/reagent/colorful_reagent/reaction_turf(turf/T, reac_volume)
|
||||
if(T)
|
||||
T.color = pick(random_color_list)
|
||||
..()
|
||||
return
|
||||
|
||||
/datum/reagent/hair_dye
|
||||
name = "Quantum Hair Dye"
|
||||
@@ -983,14 +983,13 @@
|
||||
color = "#C8A5DC"
|
||||
var/list/potential_colors = list("0ad","a0f","f73","d14","d14","0b5","0ad","f73","fc2","084","05e","d22","fa0") // fucking hair code
|
||||
|
||||
/datum/reagent/hair_dye/reaction_mob(mob/living/M, volume)
|
||||
if(M && ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
H.hair_color = pick(potential_colors)
|
||||
H.facial_hair_color = pick(potential_colors)
|
||||
H.update_hair()
|
||||
..()
|
||||
return
|
||||
/datum/reagent/hair_dye/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
if(method == TOUCH || method == VAPOR)
|
||||
if(M && ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
H.hair_color = pick(potential_colors)
|
||||
H.facial_hair_color = pick(potential_colors)
|
||||
H.update_hair()
|
||||
|
||||
/datum/reagent/barbers_aid
|
||||
name = "Barber's Aid"
|
||||
@@ -999,16 +998,15 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC"
|
||||
|
||||
/datum/reagent/barbers_aid/reaction_mob(mob/living/M, volume)
|
||||
if(M && ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/datum/sprite_accessory/hair/picked_hair = pick(hair_styles_list)
|
||||
var/datum/sprite_accessory/facial_hair/picked_beard = pick(facial_hair_styles_list)
|
||||
H.hair_style = picked_hair
|
||||
H.facial_hair_style = picked_beard
|
||||
H.update_hair()
|
||||
..()
|
||||
return
|
||||
/datum/reagent/barbers_aid/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
if(method == TOUCH || method == VAPOR)
|
||||
if(M && ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/datum/sprite_accessory/hair/picked_hair = pick(hair_styles_list)
|
||||
var/datum/sprite_accessory/facial_hair/picked_beard = pick(facial_hair_styles_list)
|
||||
H.hair_style = picked_hair
|
||||
H.facial_hair_style = picked_beard
|
||||
H.update_hair()
|
||||
|
||||
/datum/reagent/concentrated_barbers_aid
|
||||
name = "Concentrated Barber's Aid"
|
||||
@@ -1017,14 +1015,13 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC"
|
||||
|
||||
/datum/reagent/concentrated_barbers_aid/reaction_mob(mob/living/M, volume)
|
||||
if(M && ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
H.hair_style = "Very Long Hair"
|
||||
H.facial_hair_style = "Very Long Beard"
|
||||
H.update_hair()
|
||||
..()
|
||||
return
|
||||
/datum/reagent/concentrated_barbers_aid/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
if(method == TOUCH || method == VAPOR)
|
||||
if(M && ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
H.hair_style = "Very Long Hair"
|
||||
H.facial_hair_style = "Very Long Beard"
|
||||
H.update_hair()
|
||||
|
||||
/datum/reagent/saltpetre
|
||||
name = "Saltpetre"
|
||||
|
||||
@@ -6,14 +6,14 @@
|
||||
reagent_state = SOLID
|
||||
color = "#673910" // rgb: 103, 57, 16
|
||||
|
||||
/datum/reagent/thermite/reaction_turf(turf/T, volume)
|
||||
/datum/reagent/thermite/reaction_turf(turf/T, reac_volume)
|
||||
src = null
|
||||
if(volume >= 1 && istype(T, /turf/simulated/wall))
|
||||
if(reac_volume >= 1 && istype(T, /turf/simulated/wall))
|
||||
var/turf/simulated/wall/Wall = T
|
||||
if(istype(Wall, /turf/simulated/wall/r_wall))
|
||||
Wall.thermite = Wall.thermite+(volume*2.5)
|
||||
Wall.thermite = Wall.thermite+(reac_volume*2.5)
|
||||
else
|
||||
Wall.thermite = Wall.thermite+(volume*10)
|
||||
Wall.thermite = Wall.thermite+(reac_volume*10)
|
||||
Wall.overlays = list()
|
||||
Wall.overlays += image('icons/effects/effects.dmi',"thermite")
|
||||
|
||||
@@ -48,29 +48,30 @@
|
||||
M.adjustFireLoss(burndmg)
|
||||
..()
|
||||
|
||||
/datum/reagent/clf3/reaction_turf(turf/simulated/T, volume)
|
||||
/datum/reagent/clf3/reaction_turf(turf/simulated/T, reac_volume)
|
||||
if(istype(T, /turf/simulated/floor/plating))
|
||||
var/turf/simulated/floor/plating/F = T
|
||||
if(prob(1 + F.burnt + 5*F.broken)) //broken or burnt plating is more susceptible to being destroyed
|
||||
F.ChangeTurf(F.baseturf)
|
||||
if(istype(T, /turf/simulated/floor/))
|
||||
var/turf/simulated/floor/F = T
|
||||
if(prob(volume/10))
|
||||
if(prob(reac_volume/10))
|
||||
F.make_plating()
|
||||
else if(prob(volume))
|
||||
else if(prob(reac_volume))
|
||||
F.burn_tile()
|
||||
if(istype(F, /turf/simulated/floor/))
|
||||
PoolOrNew(/obj/effect/hotspot, F)
|
||||
if(istype(T, /turf/simulated/wall/))
|
||||
var/turf/simulated/wall/W = T
|
||||
if(prob(volume/10))
|
||||
if(prob(reac_volume/10))
|
||||
W.ChangeTurf(/turf/simulated/floor/plating)
|
||||
|
||||
/datum/reagent/clf3/reaction_mob(mob/living/M, method=TOUCH, volume)
|
||||
if(method == TOUCH && isliving(M))
|
||||
M.adjust_fire_stacks(min(volume/5, 10))
|
||||
M.IgniteMob()
|
||||
PoolOrNew(/obj/effect/hotspot, M.loc)
|
||||
/datum/reagent/clf3/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
if(istype(M))
|
||||
if(method != INGEST)
|
||||
M.adjust_fire_stacks(min(reac_volume/5, 10))
|
||||
M.IgniteMob()
|
||||
PoolOrNew(/obj/effect/hotspot, M.loc)
|
||||
|
||||
/datum/reagent/sorium
|
||||
name = "Sorium"
|
||||
@@ -128,8 +129,8 @@
|
||||
description = "Catches you on fire and makes you ignite."
|
||||
reagent_state = LIQUID
|
||||
color = "#FF9999"
|
||||
|
||||
/datum/reagent/phlogiston/reaction_mob(mob/living/M, method=TOUCH, volume)
|
||||
|
||||
/datum/reagent/phlogiston/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
M.IgniteMob()
|
||||
..()
|
||||
|
||||
@@ -150,9 +151,10 @@
|
||||
M.adjust_fire_stacks(1)
|
||||
..()
|
||||
|
||||
/datum/reagent/napalm/reaction_mob(mob/living/M, method=TOUCH, volume)
|
||||
if(method == TOUCH && isliving(M))
|
||||
M.adjust_fire_stacks(min(volume/4, 20))
|
||||
/datum/reagent/napalm/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
if(istype(M))
|
||||
if(method != INGEST)
|
||||
M.adjust_fire_stacks(min(reac_volume/4, 20))
|
||||
|
||||
/datum/reagent/cryostylane
|
||||
name = "Cryostylane"
|
||||
@@ -175,8 +177,8 @@
|
||||
holder.handle_reactions()
|
||||
..()
|
||||
|
||||
/datum/reagent/cryostylane/reaction_turf(turf/simulated/T, volume)
|
||||
if(volume >= 5)
|
||||
/datum/reagent/cryostylane/reaction_turf(turf/simulated/T, reac_volume)
|
||||
if(reac_volume >= 5)
|
||||
for(var/mob/living/simple_animal/slime/M in T)
|
||||
M.adjustToxLoss(rand(15,30))
|
||||
|
||||
|
||||
@@ -28,13 +28,13 @@
|
||||
color = "#13BC5E" // rgb: 19, 188, 94
|
||||
toxpwr = 0
|
||||
|
||||
/datum/reagent/toxin/mutagen/reaction_mob(mob/living/carbon/M, method=TOUCH, volume)
|
||||
/datum/reagent/toxin/mutagen/reaction_mob(mob/living/carbon/M, method=TOUCH, reac_volume)
|
||||
if(!..())
|
||||
return
|
||||
if(!istype(M) || !M.dna)
|
||||
return //No robots, AIs, aliens, Ians or other mobs should be affected by this.
|
||||
src = null
|
||||
if((method==TOUCH && prob(min(33, volume))) || method==INGEST)
|
||||
if((method==VAPOR && prob(min(33, reac_volume))) || method==INGEST || method == PATCH)
|
||||
randmuti(M)
|
||||
if(prob(98))
|
||||
randmutb(M)
|
||||
@@ -42,13 +42,12 @@
|
||||
randmutg(M)
|
||||
domutcheck(M, null)
|
||||
updateappearance(M)
|
||||
return
|
||||
..()
|
||||
|
||||
/datum/reagent/toxin/mutagen/on_mob_life(mob/living/carbon/M)
|
||||
if(istype(M))
|
||||
M.apply_effect(5,IRRADIATE,0)
|
||||
..()
|
||||
return
|
||||
|
||||
/datum/reagent/toxin/plasma
|
||||
name = "Plasma"
|
||||
@@ -66,27 +65,24 @@
|
||||
..()
|
||||
return
|
||||
|
||||
/datum/reagent/toxin/plasma/reaction_obj(obj/O, volume)
|
||||
/datum/reagent/toxin/plasma/reaction_obj(obj/O, reac_volume)
|
||||
src = null
|
||||
/*if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg/slime))
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/egg/slime/egg = O
|
||||
if (egg.grown)
|
||||
egg.Hatch()*/
|
||||
if((!O) || (!volume)) return 0
|
||||
O.atmos_spawn_air(SPAWN_TOXINS|SPAWN_20C, volume)
|
||||
if((!O) || (!reac_volume)) return 0
|
||||
O.atmos_spawn_air(SPAWN_TOXINS|SPAWN_20C, reac_volume)
|
||||
|
||||
/datum/reagent/toxin/plasma/reaction_turf(turf/simulated/T, volume)
|
||||
/datum/reagent/toxin/plasma/reaction_turf(turf/simulated/T, reac_volume)
|
||||
src = null
|
||||
if(istype(T))
|
||||
T.atmos_spawn_air(SPAWN_TOXINS|SPAWN_20C, volume)
|
||||
T.atmos_spawn_air(SPAWN_TOXINS|SPAWN_20C, reac_volume)
|
||||
return
|
||||
|
||||
/datum/reagent/toxin/plasma/reaction_mob(mob/living/M, method=TOUCH, volume)//Splashing people with plasma is stronger than fuel!
|
||||
/datum/reagent/toxin/plasma/reaction_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people with plasma is stronger than fuel!
|
||||
if(!istype(M, /mob/living))
|
||||
return
|
||||
if(method == TOUCH)
|
||||
M.adjust_fire_stacks(volume / 5)
|
||||
if(method == TOUCH || method == VAPOR)
|
||||
M.adjust_fire_stacks(reac_volume / 5)
|
||||
return
|
||||
..()
|
||||
|
||||
/datum/reagent/toxin/lexorin
|
||||
name = "Lexorin"
|
||||
@@ -181,7 +177,7 @@
|
||||
color = "#49002E" // rgb: 73, 0, 46
|
||||
toxpwr = 1
|
||||
|
||||
/datum/reagent/toxin/plantbgone/reaction_obj(obj/O, volume)
|
||||
/datum/reagent/toxin/plantbgone/reaction_obj(obj/O, reac_volume)
|
||||
if(istype(O,/obj/structure/alien/weeds/))
|
||||
var/obj/structure/alien/weeds/alien_weeds = O
|
||||
alien_weeds.health -= rand(15,35) // Kills alien weeds pretty fast
|
||||
@@ -192,13 +188,15 @@
|
||||
var/obj/effect/spacevine/SV = O
|
||||
SV.on_chem_effect(src)
|
||||
|
||||
/datum/reagent/toxin/plantbgone/reaction_mob(mob/living/M, method=TOUCH, volume)
|
||||
/datum/reagent/toxin/plantbgone/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
src = null
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
if(!C.wear_mask) // If not wearing a mask
|
||||
var/damage = min(round(0.4*volume, 0.1),10)
|
||||
C.adjustToxLoss(damage)
|
||||
if(method == VAPOR)
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
if(!C.wear_mask) // If not wearing a mask
|
||||
var/damage = min(round(0.4*reac_volume, 0.1),10)
|
||||
C.adjustToxLoss(damage)
|
||||
|
||||
/datum/reagent/toxin/plantbgone/weedkiller
|
||||
name = "Weed Killer"
|
||||
id = "weedkiller"
|
||||
@@ -213,13 +211,14 @@
|
||||
color = "#4B004B" // rgb: 75, 0, 75
|
||||
toxpwr = 1
|
||||
|
||||
/datum/reagent/toxin/pestkiller/reaction_mob(mob/living/M, method=TOUCH, volume)
|
||||
/datum/reagent/toxin/pestkiller/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
src = null
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
if(!C.wear_mask) // If not wearing a mask
|
||||
var/damage = min(round(0.4*volume, 0.1),10)
|
||||
C.adjustToxLoss(damage)
|
||||
if(method == VAPOR)
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
if(!C.wear_mask) // If not wearing a mask
|
||||
var/damage = min(round(0.4*reac_volume, 0.1),10)
|
||||
C.adjustToxLoss(damage)
|
||||
|
||||
/datum/reagent/toxin/spore
|
||||
name = "Spore Toxin"
|
||||
@@ -456,10 +455,9 @@
|
||||
metabolization_rate = 0.4 * REAGENTS_METABOLISM
|
||||
toxpwr = 0
|
||||
|
||||
/datum/reagent/toxin/itching_powder/reaction_mob(mob/living/M, method=TOUCH, volume)
|
||||
if(method == TOUCH)
|
||||
M.reagents.add_reagent("itching_powder", volume)
|
||||
return
|
||||
/datum/reagent/toxin/itching_powder/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
if(method != INGEST)
|
||||
M.reagents.add_reagent("itching_powder", reac_volume)
|
||||
|
||||
/datum/reagent/toxin/itching_powder/on_mob_life(mob/living/M)
|
||||
if(prob(15))
|
||||
@@ -623,21 +621,28 @@
|
||||
toxpwr = 1
|
||||
var/acidpwr = 10 //the amount of protection removed from the armour
|
||||
|
||||
/datum/reagent/toxin/acid/reaction_mob(mob/living/carbon/C, method=TOUCH, volume)
|
||||
/datum/reagent/toxin/acid/reaction_mob(mob/living/carbon/C, method=TOUCH, reac_volume)
|
||||
if(!istype(C))
|
||||
return
|
||||
volume = round(volume,0.1)
|
||||
if(method != TOUCH)
|
||||
C.take_organ_damage(min(6*toxpwr, volume * toxpwr))
|
||||
reac_volume = round(reac_volume,0.1)
|
||||
if(method == INGEST)
|
||||
C.take_organ_damage(min(6*toxpwr, reac_volume * toxpwr))
|
||||
return
|
||||
C.acid_act(acidpwr, toxpwr, reac_volume)
|
||||
|
||||
C.acid_act(acidpwr, toxpwr, volume)
|
||||
|
||||
/datum/reagent/toxin/acid/reaction_obj(obj/O, volume)
|
||||
/datum/reagent/toxin/acid/reaction_obj(obj/O, reac_volume)
|
||||
if(istype(O.loc, /mob)) //handled in human acid_act()
|
||||
return
|
||||
volume = round(volume,0.1)
|
||||
O.acid_act(acidpwr, toxpwr, volume)
|
||||
reac_volume = round(reac_volume,0.1)
|
||||
O.acid_act(acidpwr, reac_volume)
|
||||
|
||||
/datum/reagent/toxin/acid/reaction_turf(turf/T, reac_volume)
|
||||
if (!istype(T))
|
||||
return
|
||||
src = null
|
||||
reac_volume = round(reac_volume,0.1)
|
||||
for(var/obj/O in T)
|
||||
O.acid_act(acidpwr, reac_volume)
|
||||
|
||||
/datum/reagent/toxin/acid/fluacid
|
||||
name = "Fluorosulfuric acid"
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
item_state = "bandaid"
|
||||
possible_transfer_amounts = null
|
||||
volume = 50
|
||||
apply_type = TOUCH
|
||||
apply_type = PATCH
|
||||
apply_method = "apply"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/patch/New()
|
||||
|
||||
@@ -79,12 +79,12 @@
|
||||
continue
|
||||
if(puff_reagent_left <= 0)
|
||||
break
|
||||
D.reagents.reaction(T)
|
||||
D.reagents.reaction(T, VAPOR)
|
||||
if(ismob(T)) //mobs are obstacles that consume part of the puff, shortening its range.
|
||||
puff_reagent_left -= 1
|
||||
|
||||
if(puff_reagent_left > 0)
|
||||
D.reagents.reaction(get_turf(D))
|
||||
D.reagents.reaction(get_turf(D), VAPOR)
|
||||
puff_reagent_left -= 1
|
||||
|
||||
if(puff_reagent_left <= 0) // we used all the puff so we delete it.
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
author: phil235
|
||||
|
||||
delete-after: True
|
||||
|
||||
changes:
|
||||
- rscadd: "You can now partially protect yourself from blob attack effects by wearing impermeable clothes like hardsuits, medical clothes, masks, etc. Max protection effect is capped at 50%."
|
||||
- rscdel: "Splashing someone with chemicals no longer inject those chemicals in their body."
|
||||
- bugfix: "Fixes splashing acid on items or floor with items not having any effect."
|
||||
Reference in New Issue
Block a user