mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2025-12-27 18:51:53 +00:00
Merge branch 'master' of https://github.com/ParadiseSS13/Paradise into OrganRefactor
This commit is contained in:
@@ -14,7 +14,7 @@
|
||||
var/energy = 100
|
||||
var/max_energy = 100
|
||||
var/amount = 30
|
||||
var/beaker = null
|
||||
var/obj/item/weapon/reagent_containers/beaker = null
|
||||
var/recharged = 0
|
||||
var/hackedcheck = 0
|
||||
var/list/dispensable_reagents = list("hydrogen","lithium","carbon","nitrogen","oxygen","fluorine",
|
||||
@@ -123,15 +123,15 @@
|
||||
|
||||
var beakerContents[0]
|
||||
var beakerCurrentVolume = 0
|
||||
if(beaker && beaker:reagents && beaker:reagents.reagent_list.len)
|
||||
for(var/datum/reagent/R in beaker:reagents.reagent_list)
|
||||
if(beaker && beaker.reagents && beaker.reagents.reagent_list.len)
|
||||
for(var/datum/reagent/R in beaker.reagents.reagent_list)
|
||||
beakerContents.Add(list(list("name" = R.name, "id"=R.id, "volume" = R.volume))) // list in a list because Byond merges the first list...
|
||||
beakerCurrentVolume += R.volume
|
||||
data["beakerContents"] = beakerContents
|
||||
|
||||
if (beaker)
|
||||
data["beakerCurrentVolume"] = beakerCurrentVolume
|
||||
data["beakerMaxVolume"] = beaker:volume
|
||||
data["beakerMaxVolume"] = beaker.volume
|
||||
else
|
||||
data["beakerCurrentVolume"] = null
|
||||
data["beakerMaxVolume"] = null
|
||||
@@ -385,7 +385,7 @@
|
||||
icon_state = "mixer0"
|
||||
use_power = 1
|
||||
idle_power_usage = 20
|
||||
var/beaker = null
|
||||
var/obj/item/weapon/reagent_containers/beaker = null
|
||||
var/obj/item/weapon/storage/pill_bottle/loaded_pill_bottle = null
|
||||
var/mode = 0
|
||||
var/condi = 0
|
||||
@@ -483,7 +483,7 @@
|
||||
P.info += "<b>Time of analysis:</b> [worldtime2text(world.time)]<br><br>"
|
||||
P.info += "<b>Chemical name:</b> [href_list["name"]]<br>"
|
||||
if(href_list["name"] == "Blood")
|
||||
var/datum/reagents/R = beaker:reagents
|
||||
var/datum/reagents/R = beaker.reagents
|
||||
var/datum/reagent/blood/G
|
||||
for(var/datum/reagent/F in R.reagent_list)
|
||||
if(F.name == href_list["name"])
|
||||
@@ -499,7 +499,7 @@
|
||||
src.printing = null
|
||||
|
||||
if(beaker)
|
||||
var/datum/reagents/R = beaker:reagents
|
||||
var/datum/reagents/R = beaker.reagents
|
||||
if (href_list["analyze"])
|
||||
var/dat = ""
|
||||
if(!condi)
|
||||
@@ -562,7 +562,7 @@
|
||||
return
|
||||
else if (href_list["eject"])
|
||||
if(beaker)
|
||||
beaker:loc = src.loc
|
||||
beaker.forceMove(get_turf(src))
|
||||
beaker = null
|
||||
reagents.clear_reagents()
|
||||
icon_state = "mixer0"
|
||||
@@ -695,7 +695,7 @@
|
||||
dat += "No pill bottle inserted.<BR><BR>"
|
||||
dat += "<A href='?src=\ref[src];close=1'>Close</A>"
|
||||
else
|
||||
var/datum/reagents/R = beaker:reagents
|
||||
var/datum/reagents/R = beaker.reagents
|
||||
dat += "<A href='?src=\ref[src];eject=1'>Eject beaker and Clear Buffer</A><BR>"
|
||||
if(src.loaded_pill_bottle)
|
||||
dat += "<A href='?src=\ref[src];ejectp=1'>Eject Pill Bottle \[[loaded_pill_bottle.contents.len]/[loaded_pill_bottle.storage_slots]\]</A><BR><BR>"
|
||||
@@ -759,6 +759,44 @@
|
||||
name = "\improper CondiMaster 3000"
|
||||
condi = 1
|
||||
|
||||
/obj/machinery/chem_master/constructable
|
||||
name = "ChemMaster 2999"
|
||||
desc = "Used to seperate chemicals and distribute them in a variety of forms."
|
||||
|
||||
/obj/machinery/chem_master/constructable/New()
|
||||
..()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/circuitboard/chem_master(null)
|
||||
component_parts += new /obj/item/weapon/stock_parts/manipulator(null)
|
||||
component_parts += new /obj/item/weapon/stock_parts/console_screen(null)
|
||||
component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(null)
|
||||
component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(null)
|
||||
|
||||
/obj/machinery/chem_master/constructable/attackby(obj/item/B, mob/user, params)
|
||||
|
||||
if(default_deconstruction_screwdriver(user, "mixer0_nopower", "mixer0", B))
|
||||
if(beaker)
|
||||
beaker.forceMove(get_turf(src))
|
||||
beaker = null
|
||||
reagents.clear_reagents()
|
||||
if(loaded_pill_bottle)
|
||||
loaded_pill_bottle.forceMove(get_turf(src))
|
||||
loaded_pill_bottle = null
|
||||
return
|
||||
|
||||
if(exchange_parts(user, B))
|
||||
return
|
||||
|
||||
if(panel_open)
|
||||
if(istype(B, /obj/item/weapon/crowbar))
|
||||
default_deconstruction_crowbar(B)
|
||||
return 1
|
||||
else
|
||||
user << "<span class='warning'>You can't use the [src.name] while it's panel is opened!</span>"
|
||||
return 1
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/machinery/reagentgrinder
|
||||
|
||||
name = "\improper All-In-One Grinder"
|
||||
|
||||
@@ -650,8 +650,7 @@ datum/reagent/strange_reagent/reaction_mob(var/mob/living/M as mob, var/method=T
|
||||
if(istype(M, /mob/living/simple_animal))
|
||||
if(method == TOUCH)
|
||||
if(M.stat == DEAD)
|
||||
M.health = M.maxHealth
|
||||
M.update_revive()
|
||||
M.revive()
|
||||
M.visible_message("<span class='warning'>[M] seems to rise from the dead!</span>")
|
||||
if(istype(M, /mob/living/carbon))
|
||||
if(method == INGEST)
|
||||
@@ -761,19 +760,20 @@ proc/chemical_mob_spawn(var/datum/reagents/holder, var/amount_to_spawn, var/reac
|
||||
|
||||
/datum/reagent/mutadone/on_mob_life(var/mob/living/carbon/human/M as mob)
|
||||
M.jitteriness = 0
|
||||
var/needs_update = 1 //M.mutations.len > 0
|
||||
var/needs_update = M.mutations.len > 0 || M.disabilities > 0 || M.sdisabilities > 0
|
||||
|
||||
for(var/block=1;block<=DNA_SE_LENGTH;block++)
|
||||
M.dna.SetSEState(block,0)
|
||||
genemutcheck(M,block,null,MUTCHK_FORCED)
|
||||
M.update_mutations()
|
||||
if(needs_update)
|
||||
for(var/block=1;block<=DNA_SE_LENGTH;block++)
|
||||
M.dna.SetSEState(block,0, 1)
|
||||
genemutcheck(M,block,null,MUTCHK_FORCED)
|
||||
M.dna.UpdateSE()
|
||||
|
||||
M.dna.struc_enzymes = M.dna.struc_enzymes_original
|
||||
M.dna.struc_enzymes = M.dna.struc_enzymes_original
|
||||
|
||||
// Might need to update appearance for hulk etc.
|
||||
if(needs_update && ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
H.update_mutations()
|
||||
// Might need to update appearance for hulk etc.
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
H.update_mutations()
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -1016,12 +1016,8 @@ datum/reagent/haloperidol/on_mob_life(var/mob/living/M as mob)
|
||||
if (!istype(T)) return
|
||||
src = null
|
||||
if(volume >= 1)
|
||||
if(T.wet >= 2) //Clears lube! Fight back against the slipping, and WIN!
|
||||
T.wet = 0
|
||||
if(T.wet_overlay)
|
||||
T.overlays -= T.wet_overlay
|
||||
T.wet_overlay = null
|
||||
return
|
||||
if(istype(T) && T.wet)
|
||||
T.MakeDry(TURF_WET_LUBE)
|
||||
|
||||
/datum/reagent/degreaser/on_mob_life(var/mob/living/M as mob)
|
||||
if(!M) M = holder.my_atom
|
||||
|
||||
@@ -27,7 +27,7 @@ datum/reagent/carpet
|
||||
color = "#701345"
|
||||
|
||||
/datum/reagent/carpet/reaction_turf(var/turf/simulated/T, var/volume)
|
||||
if(T.is_plating() || T.is_plasteel_floor())
|
||||
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)
|
||||
..()
|
||||
@@ -204,6 +204,7 @@ datum/reagent/hair_dye/reaction_mob(var/mob/living/M, var/volume)
|
||||
H.g_hair = rand(0,255)
|
||||
H.b_hair = rand(0,255)
|
||||
H.update_hair()
|
||||
H.update_fhair()
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -229,6 +230,7 @@ datum/reagent/hairgrownium/reaction_mob(var/mob/living/M, var/volume)
|
||||
H.h_style = random_hair_style(H.gender, H.species)
|
||||
H.f_style = random_facial_hair_style(H.gender, H.species)
|
||||
H.update_hair()
|
||||
H.update_fhair()
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -256,6 +258,7 @@ datum/reagent/super_hairgrownium/on_mob_life(var/mob/living/M as mob)
|
||||
H.h_style = "Very Long Hair"
|
||||
H.f_style = "Very Long Beard"
|
||||
H.update_hair()
|
||||
H.update_fhair()
|
||||
if(!H.wear_mask || H.wear_mask && !istype(H.wear_mask, /obj/item/clothing/mask/fakemoustache))
|
||||
if(H.wear_mask)
|
||||
H.unEquip(H.wear_mask)
|
||||
|
||||
@@ -622,7 +622,7 @@ datum/reagent/firefighting_foam/reaction_obj(var/obj/O, var/volume)
|
||||
var/turf/T = get_turf(holder.my_atom)
|
||||
for(var/mob/living/carbon/C in view(6, T))
|
||||
C.Beam(T,icon_state="lightning[rand(1,12)]",icon='icons/effects/effects.dmi',time=5) //What? Why are we beaming from the mob to the turf? Turf to mob generates really odd results.
|
||||
C.electrocute_act(1, "electrical blast")
|
||||
C.electrocute_act(3.5, "electrical blast")
|
||||
holder.del_reagent("teslium") //Clear all remaining Teslium and Uranium, but leave all other reagents untouched.
|
||||
holder.del_reagent("uranium")
|
||||
return
|
||||
|
||||
@@ -196,4 +196,11 @@
|
||||
result = "lsd"
|
||||
required_reagents = list("diethylamine" = 1, "fungus" = 1)
|
||||
result_amount = 3
|
||||
mix_message = "The mixture turns a rather unassuming color and settles."
|
||||
mix_message = "The mixture turns a rather unassuming color and settles."
|
||||
|
||||
drying_agent
|
||||
name = "Drying agent"
|
||||
id = "drying_agent"
|
||||
result = "drying_agent"
|
||||
required_reagents = list("plasma" = 2, "ethanol" = 1, "sodium" = 1)
|
||||
result_amount = 3
|
||||
@@ -450,11 +450,25 @@
|
||||
Z.loc = get_turf(holder.my_atom)
|
||||
Z.announce_to_ghosts()
|
||||
//Bluespace
|
||||
slimefloor2
|
||||
name = "Bluespace Floor"
|
||||
id = "m_floor2"
|
||||
result = null
|
||||
required_reagents = list("blood" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/bluespace
|
||||
required_other = 1
|
||||
on_reaction(datum/reagents/holder, created_volume)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/stack/tile/bluespace/P = new /obj/item/stack/tile/bluespace
|
||||
P.amount = 25
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
|
||||
slimecrystal
|
||||
name = "Slime Crystal"
|
||||
id = "m_crystal"
|
||||
result = null
|
||||
required_reagents = list("blood" = 1)
|
||||
required_reagents = list("plasma" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/bluespace
|
||||
required_other = 1
|
||||
@@ -477,11 +491,28 @@
|
||||
var/obj/item/weapon/slimesteroid2/P = new /obj/item/weapon/slimesteroid2
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
//Sepia
|
||||
slimestop
|
||||
name = "Slime Stop"
|
||||
id = "m_stop"
|
||||
result = null
|
||||
required_reagents = list("plasma" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/sepia
|
||||
required_other = 1
|
||||
on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
spawn(0) //otherwise the reagent won't be used up until after the full timstop is gone through.
|
||||
var/mob/mob = get_mob_by_key(holder.my_atom.fingerprintslast)
|
||||
var/obj/effect/timestop/T = new (get_turf(holder.my_atom))
|
||||
T.immune += mob
|
||||
T.timestop()
|
||||
|
||||
|
||||
slimecamera
|
||||
name = "Slime Camera"
|
||||
id = "m_camera"
|
||||
result = null
|
||||
required_reagents = list("plasma" = 1)
|
||||
required_reagents = list("water" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/sepia
|
||||
required_other = 1
|
||||
@@ -489,20 +520,23 @@
|
||||
feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
|
||||
var/obj/item/device/camera/P = new /obj/item/device/camera
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
var/obj/item/device/camera_film/Z = new /obj/item/device/camera_film
|
||||
Z.loc = get_turf(holder.my_atom)
|
||||
|
||||
|
||||
slimefilm
|
||||
name = "Slime Film"
|
||||
id = "m_film"
|
||||
slimefloor
|
||||
name = "Sepia Floor"
|
||||
id = "m_floor"
|
||||
result = null
|
||||
required_reagents = list("blood" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/sepia
|
||||
required_other = 1
|
||||
on_reaction(var/datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
|
||||
var/obj/item/device/camera_film/P = new /obj/item/device/camera_film
|
||||
on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/stack/tile/sepia/P = new /obj/item/stack/tile/sepia
|
||||
P.amount = 25
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
|
||||
//Pyrite
|
||||
slimepaint
|
||||
name = "Slime Paint"
|
||||
|
||||
@@ -281,21 +281,7 @@
|
||||
if (!istype(T)) return
|
||||
src = null
|
||||
if(volume >= 3)
|
||||
if(T.wet >= 1) return
|
||||
T.wet = 1
|
||||
if(T.wet_overlay)
|
||||
T.overlays -= T.wet_overlay
|
||||
T.wet_overlay = null
|
||||
T.wet_overlay = image('icons/effects/water.dmi',T,"wet_floor")
|
||||
T.overlays += T.wet_overlay
|
||||
|
||||
spawn(800)
|
||||
if (!istype(T)) return
|
||||
if(T.wet >= 2) return
|
||||
T.wet = 0
|
||||
if(T.wet_overlay)
|
||||
T.overlays -= T.wet_overlay
|
||||
T.wet_overlay = null
|
||||
T.MakeSlippery()
|
||||
var/hotspot = (locate(/obj/effect/hotspot) in T)
|
||||
if(hotspot)
|
||||
var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() )
|
||||
|
||||
@@ -113,6 +113,7 @@
|
||||
|
||||
/datum/reagent/rezadone/on_mob_life(mob/living/M)
|
||||
M.setCloneLoss(0) //Rezadone is almost never used in favor of cryoxadone. Hopefully this will change that.
|
||||
M.adjustCloneLoss(-1) //What? We just set cloneloss to 0. Why? Simple; this is so external organs properly unmutate.
|
||||
M.heal_organ_damage(1,1)
|
||||
M.status_flags &= ~DISFIGURED
|
||||
..()
|
||||
|
||||
@@ -31,21 +31,7 @@
|
||||
if (!istype(T)) return
|
||||
src = null
|
||||
if(volume >= 3)
|
||||
if(T.wet >= 1) return
|
||||
T.wet = 1
|
||||
if(T.wet_overlay)
|
||||
T.overlays -= T.wet_overlay
|
||||
T.wet_overlay = null
|
||||
T.wet_overlay = image('icons/effects/water.dmi',T,"wet_floor")
|
||||
T.overlays += T.wet_overlay
|
||||
|
||||
spawn(800)
|
||||
if (!istype(T)) return
|
||||
if(T.wet >= 2) return
|
||||
T.wet = 0
|
||||
if(T.wet_overlay)
|
||||
T.overlays -= T.wet_overlay
|
||||
T.wet_overlay = null
|
||||
T.MakeSlippery()
|
||||
|
||||
for(var/mob/living/carbon/slime/M in T)
|
||||
M.apply_water()
|
||||
@@ -91,15 +77,7 @@
|
||||
if (!istype(T)) return
|
||||
src = null
|
||||
if(volume >= 1)
|
||||
if(T.wet >= 2) return
|
||||
T.wet = 2
|
||||
spawn(800)
|
||||
if (!istype(T)) return
|
||||
T.wet = 0
|
||||
if(T.wet_overlay)
|
||||
T.overlays -= T.wet_overlay
|
||||
T.wet_overlay = null
|
||||
return
|
||||
T.MakeSlippery(TURF_WET_LUBE)
|
||||
|
||||
|
||||
/datum/reagent/space_cleaner
|
||||
@@ -122,7 +100,6 @@
|
||||
if(volume >= 1)
|
||||
if(T)
|
||||
T.color = initial(T.color)
|
||||
T.overlays.Cut()
|
||||
T.clean_blood()
|
||||
for(var/obj/effect/decal/cleanable/C in src)
|
||||
qdel(C)
|
||||
@@ -350,6 +327,23 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#FFFFD6" // very very light yellow
|
||||
|
||||
/datum/reagent/drying_agent
|
||||
name = "Drying agent"
|
||||
id = "drying_agent"
|
||||
description = "Can be used to dry things."
|
||||
reagent_state = LIQUID
|
||||
color = "#A70FFF"
|
||||
|
||||
/datum/reagent/drying_agent/reaction_turf(turf/simulated/T, reac_volume)
|
||||
if(istype(T) && T.wet)
|
||||
T.MakeDry(TURF_WET_WATER)
|
||||
|
||||
/datum/reagent/drying_agent/reaction_obj(obj/O, reac_volume)
|
||||
if(istype(O, /obj/item/clothing/shoes/galoshes))
|
||||
var/t_loc = get_turf(O)
|
||||
qdel(O)
|
||||
new /obj/item/clothing/shoes/galoshes/dry(t_loc)
|
||||
|
||||
/*
|
||||
/datum/reagent/vaccine
|
||||
//data must contain virus type
|
||||
|
||||
@@ -1680,8 +1680,7 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Expand()
|
||||
visible_message("<span class='notice'>[src] expands!</span>")
|
||||
var/mob/living/carbon/human/H = new (get_turf(src))
|
||||
H.set_species(monkey_type)
|
||||
new/mob/living/carbon/human(get_turf(src),monkey_type)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Unwrap(mob/user)
|
||||
|
||||
Reference in New Issue
Block a user