Merge branch 'bleeding-edge-freeze' of https://github.com/Baystation12/Baystation12 into xenoarch

Conflicts:
	baystation12.dme
	code/modules/reagents/Chemistry-Holder.dm
	code/modules/reagents/Chemistry-Machinery.dm
	code/modules/research/xenoarchaeology/artifact_effect.dm
	code/modules/research/xenoarchaeology/finds.dm
	icons/obj/device.dmi

Signed-off-by: Cael_Aislinn <cael_aislinn@yahoo.com.au>
This commit is contained in:
Cael_Aislinn
2013-02-02 16:55:24 +10:00
1196 changed files with 105274 additions and 74852 deletions
+130 -113
View File
@@ -24,12 +24,29 @@ datum
var/datum/reagent/D = new path()
chemical_reagents_list[D.id] = D
if(!chemical_reactions_list)
//Chemical Reactions - Initialises all /datum/chemical_reaction into a list (without an index)
//Chemical Reactions - Initialises all /datum/chemical_reaction into a list
// It is filtered into multiple lists within a list.
// For example:
// chemical_reaction_list["plasma"] is a list of all reactions relating to plasma
var/paths = typesof(/datum/chemical_reaction) - /datum/chemical_reaction
chemical_reactions_list = list()
for(var/path in paths)
var/datum/chemical_reaction/D = new path()
chemical_reactions_list += D
var/list/reaction_ids = list()
if(D.required_reagents && D.required_reagents.len)
for(var/reaction in D.required_reagents)
reaction_ids += reaction
// Create filters based on each reagent id in the required reagents list
for(var/id in reaction_ids)
if(!chemical_reactions_list[id])
chemical_reactions_list[id] = list()
chemical_reactions_list[id] += D
break // Don't bother adding ourselves to other reagent ids, it is redundant.
proc
@@ -85,17 +102,20 @@ datum
var/part = amount / src.total_volume
var/trans_data = null
for (var/datum/reagent/current_reagent in src.reagent_list)
if (!current_reagent)
continue
var/current_reagent_transfer = current_reagent.volume * part
if(preserve_data)
trans_data = current_reagent.data
if((current_reagent.id == "blood" && !ishuman(target)) || current_reagent.id != "blood")
R.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data)
src.remove_reagent(current_reagent.id, current_reagent_transfer)
else if(current_reagent.id == "blood" && ishuman(target)) // can never be sure
if(current_reagent.id == "blood" && ishuman(target)) // can never be sure
var/mob/living/carbon/human/H = target
H.vessel.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data)
src.remove_reagent(current_reagent.id, current_reagent_transfer)
H.vessel.update_total()
else
R.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data)
src.remove_reagent(current_reagent.id, current_reagent_transfer)
src.update_total()
R.update_total()
R.handle_reactions()
@@ -203,90 +223,90 @@ datum
var/reaction_occured = 0
do
reaction_occured = 0
for(var/datum/chemical_reaction/C in chemical_reactions_list)
//check if this recipe needs to be heated to mix
if(C.requires_heating)
if(istype(my_atom.loc, /obj/machinery/bunsen_burner))
if(!my_atom.loc:heated)
continue
else
for(var/datum/reagent/R in reagent_list) // Usually a small list
for(var/reaction in chemical_reactions_list[R.id]) // Was a big list but now it should be smaller since we filtered it with our reagent id
if(!reaction)
continue
var/total_required_reagents = C.required_reagents.len
var/total_matching_reagents = 0
var/total_required_catalysts = C.required_catalysts.len
var/total_matching_catalysts= 0
var/matching_container = 0
var/matching_other = 0
var/list/multipliers = new/list()
var/datum/chemical_reaction/C = reaction
var/total_required_reagents = C.required_reagents.len
var/total_matching_reagents = 0
var/total_required_catalysts = C.required_catalysts.len
var/total_matching_catalysts= 0
var/matching_container = 0
var/matching_other = 0
var/list/multipliers = new/list()
for(var/B in C.required_reagents)
if(!has_reagent(B, C.required_reagents[B])) break
total_matching_reagents++
multipliers += round(get_reagent_amount(B) / C.required_reagents[B])
for(var/B in C.required_catalysts)
if(!has_reagent(B, C.required_catalysts[B])) break
total_matching_catalysts++
for(var/B in C.required_reagents)
if(!has_reagent(B, C.required_reagents[B])) break
total_matching_reagents++
multipliers += round(get_reagent_amount(B) / C.required_reagents[B])
for(var/B in C.required_catalysts)
if(!has_reagent(B, C.required_catalysts[B])) break
total_matching_catalysts++
if(!C.required_container)
matching_container = 1
else
if(my_atom.type == C.required_container)
if(!C.required_container)
matching_container = 1
if(!C.required_other)
matching_other = 1
else
if(my_atom.type == C.required_container)
matching_container = 1
else
if(istype(my_atom, /obj/item/metroid_core))
var/obj/item/metroid_core/M = my_atom
if(!C.required_other)
matching_other = 1
if(M.POWERFLAG == C.required_other && M.Uses > 0) // added a limit to metroid cores -- Muskets requested this
matching_other = 1
else
/*if(istype(my_atom, /obj/item/slime_core))
var/obj/item/slime_core/M = my_atom
if(M.POWERFLAG == C.required_other && M.Uses > 0) // added a limit to slime cores -- Muskets requested this
matching_other = 1*/
if(istype(my_atom, /obj/item/slime_extract))
var/obj/item/slime_extract/M = my_atom
if(M.Uses > 0) // added a limit to slime cores -- Muskets requested this
matching_other = 1
if(total_matching_reagents == total_required_reagents && total_matching_catalysts == total_required_catalysts && matching_container && matching_other)
var/multiplier = min(multipliers)
//try and grab any data so we can preserve it across reactions
//added for xenoarchaeology, might be used for other things but this is a bit dodge
var/preserved_data = null
for(var/B in C.required_reagents)
if(!preserved_data)
var/temp_data = get_data(B)
if(temp_data)
preserved_data = temp_data
remove_reagent(B, (multiplier * C.required_reagents[B]), safety = 1)
if(total_matching_reagents == total_required_reagents && total_matching_catalysts == total_required_catalysts && matching_container && matching_other)
var/multiplier = min(multipliers)
for(var/B in C.required_reagents)
remove_reagent(B, (multiplier * C.required_reagents[B]), safety = 1)
var/created_volume = C.result_amount*multiplier
if(C.result)
feedback_add_details("chemical_reaction","[C.result]|[C.result_amount*multiplier]")
multiplier = max(multiplier, 1) //this shouldnt happen ...
add_reagent(C.result, C.result_amount*multiplier)
set_data(C.result, preserved_data)
var/created_volume = C.result_amount*multiplier
if(C.result)
feedback_add_details("chemical_reaction","[C.result]|[C.result_amount*multiplier]")
multiplier = max(multiplier, 1) //this shouldnt happen ...
add_reagent(C.result, C.result_amount*multiplier)
//add secondary products
for(var/S in C.secondary_results)
add_reagent(S, C.result_amount * C.secondary_results[S] * multiplier)
if(!isliving(my_atom))
for(var/mob/M in viewers(4, get_turf(my_atom)) )
var/list/seen = viewers(4, get_turf(my_atom))
for(var/mob/M in seen)
M << "\blue \icon[my_atom] The solution begins to bubble."
if(istype(my_atom, /obj/item/metroid_core))
var/obj/item/metroid_core/ME = my_atom
ME.Uses--
if(ME.Uses <= 0) // give the notification that the metroid core is dead
for(var/mob/M in viewers(4, get_turf(my_atom)) )
M << "\blue \icon[my_atom] The innards begin to boil!"
/* if(istype(my_atom, /obj/item/slime_core))
var/obj/item/slime_core/ME = my_atom
ME.Uses--
if(ME.Uses <= 0) // give the notification that the slime core is dead
for(var/mob/M in viewers(4, get_turf(my_atom)) )
M << "\blue \icon[my_atom] The innards begin to boil!"
*/
if(istype(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 << "\blue \icon[my_atom] The [my_atom]'s power is consumed in the reaction."
ME2.name = "used slime extract"
ME2.desc = "This extract has been used up."
playsound(get_turf(my_atom), 'sound/effects/bubbles.ogg', 80, 1)
playsound(get_turf(my_atom), 'sound/effects/bubbles.ogg', 80, 1)
C.on_reaction(src, created_volume)
reaction_occured = 1
break
C.on_reaction(src, created_volume)
reaction_occured = 1
break
while(reaction_occured)
update_total()
@@ -360,12 +380,13 @@ datum
else R.reaction_obj(A, R.volume+volume_modifier)
return
add_reagent(var/reagent, var/amount, var/data=null)
add_reagent(var/reagent, var/amount, var/list/data=null)
if(!isnum(amount)) return 1
update_total()
if(total_volume + amount > maximum_volume) amount = (maximum_volume - total_volume) //Doesnt fit in. Make it disappear. Shouldnt happen. Will happen.
for(var/A in reagent_list)
var/datum/reagent/R = A
if (R.id == reagent)
R.volume += amount
@@ -375,28 +396,40 @@ datum
// mix dem viruses
if(R.id == "blood" && reagent == "blood")
if(R.data && data)
if(R.data && R.data["viruses"] || data && data["viruses"])
var/list/this = R.data["viruses"]
var/list/that = data["viruses"]
this += that // combine the two
/* -- Turns out this code was buggy and unnecessary ---- Doohl
for(var/datum/disease/D in this) // makes sure no two viruses are in the reagent at the same time
for(var/datum/disease/d in this)//Something in here can cause an inf loop and I am tired so someone else will have to fix it.
if(d != D)
D.cure(0)
*/
if(R.data["viruses"] || data["viruses"])
var/list/mix1 = R.data["viruses"]
var/list/mix2 = data["viruses"]
// Stop issues with the list changing during mixing.
var/list/to_mix = list()
for(var/datum/disease/advance/AD in mix1)
to_mix += AD
for(var/datum/disease/advance/AD in mix2)
to_mix += AD
var/datum/disease/advance/AD = Advance_Mix(to_mix)
if(AD)
var/list/preserve = list(AD)
for(var/D in R.data["viruses"])
if(!istype(D, /datum/disease/advance))
preserve += D
R.data["viruses"] = preserve
handle_reactions()
return 0
var/datum/reagent/D = chemical_reagents_list[reagent]
if(D)
var/datum/reagent/R = new D.type()
reagent_list += R
R.holder = src
R.volume = amount
R.data = data
SetViruses(R, data) // Includes setting data
//debug
//world << "Adding data"
//for(var/D in R.data)
@@ -406,6 +439,8 @@ datum
my_atom.on_reagent_change()
handle_reactions()
return 0
else
warning("[my_atom] attempted to add a reagent called '[reagent]' which doesn't exist. ([usr])")
handle_reactions()
@@ -417,17 +452,13 @@ datum
for(var/A in reagent_list)
var/datum/reagent/R = A
var/datum/compare = chemical_reagents_list[reagent]
if(istype(R,compare))
var/amt = max(0,min(R.volume,amount))
R.volume -= amt
amount -= amt
if(amount<=0)
update_total()
if(!safety)//So it does not handle reactions when it need not to
handle_reactions()
my_atom.on_reagent_change()
return 0
if (R.id == reagent)
R.volume -= amount
update_total()
if(!safety)//So it does not handle reactions when it need not to
handle_reactions()
my_atom.on_reagent_change()
return 0
return 1
@@ -435,8 +466,7 @@ datum
for(var/A in reagent_list)
var/datum/reagent/R = A
var/datum/compare = chemical_reagents_list[reagent]
if(istype(R,compare))
if (R.id == reagent)
if(!amount) return R
else
if(R.volume >= amount) return R
@@ -445,14 +475,12 @@ datum
return 0
get_reagent_amount(var/reagent)
var/amnt = 0
for(var/A in reagent_list)
var/datum/reagent/R = A
var/datum/compare = chemical_reagents_list[reagent]
if(istype(R,compare))
amnt += R.volume
if (R.id == reagent)
return R.volume
return amnt
return 0
get_reagents()
var/res = ""
@@ -462,17 +490,6 @@ datum
return res
//two slightly dodge helper functions to preserve data across reactions (needed for xenoarch)
get_data(var/reagent_id)
for(var/datum/reagent/R in reagent_list)
if(R.id == reagent_id)
return R.data
set_data(var/reagent_id, var/new_data)
for(var/datum/reagent/R in reagent_list)
if(R.id == reagent_id)
R.data = new_data
///////////////////////////////////////////////////////////////////////////////////
+128 -136
View File
@@ -8,7 +8,7 @@
anchored = 1
icon = 'icons/obj/chemical.dmi'
icon_state = "dispenser"
use_power = 1
use_power = 0
idle_power_usage = 40
var/energy = 100
var/max_energy = 100
@@ -17,7 +17,7 @@
var/recharged = 0
var/list/dispensable_reagents = list("hydrogen","lithium","carbon","nitrogen","oxygen","fluorine",
"sodium","aluminum","silicon","phosphorus","sulfur","chlorine","potassium","iron",
"copper","mercury","radium","water","ethanol","sugar","sacid","tungsten","milk")
"copper","mercury","radium","water","ethanol","sugar","sacid")
/obj/machinery/chem_dispenser/proc/recharge()
if(stat & (BROKEN|NOPOWER)) return
@@ -98,7 +98,7 @@
if(usr.stat || usr.restrained()) return
if(!in_range(src, usr)) return
usr.machine = src
usr.set_machine(src)
if (data == "amountc")
var/num = input("Enter desired output amount", "Amount", "30") as num
@@ -127,7 +127,7 @@
if (amount > 100)
amount = 100
for(var/mob/player)
for(var/mob/player in player_list)
if (player.machine == src && player.client)
updateWindow(player)
@@ -149,7 +149,7 @@
user.drop_item()
B.loc = src
user << "You add the beaker to the machine!"
for(var/mob/player)
for(var/mob/player in player_list)
if (player.machine == src && player.client)
updateWindow(player)
@@ -162,7 +162,7 @@
/obj/machinery/chem_dispenser/attack_hand(mob/user as mob)
if(stat & BROKEN)
return
user.machine = src
user.set_machine(src)
initWindow(user)
updateWindow(user)
@@ -185,9 +185,6 @@
var/obj/item/weapon/storage/pill_bottle/loaded_pill_bottle = null
var/mode = 0
var/condi = 0
var/bottlesprite = "1" //yes, strings
var/pillsprite = "1"
var/client/has_sprites = list()
var/useramount = 30 // Last used amount
/obj/machinery/chem_master/New()
@@ -247,14 +244,13 @@
src.updateUsrDialog()
return
/obj/machinery/chem_master/Topic(href, href_list)
if(stat & (BROKEN|NOPOWER)) return
if(usr.stat || usr.restrained()) return
if(!in_range(src, usr)) return
src.add_fingerprint(usr)
usr.machine = src
usr.set_machine(src)
if (href_list["ejectp"])
@@ -263,7 +259,7 @@
loaded_pill_bottle = null
else if(href_list["close"])
usr << browse(null, "window=chemmaster")
usr.machine = null
usr.unset_machine()
return
if(beaker)
@@ -276,58 +272,42 @@
dat += "<TITLE>Condimaster 3000</TITLE>Condiment infos:<BR><BR>Name:<BR>[href_list["name"]]<BR><BR>Description:<BR>[href_list["desc"]]<BR><BR><BR><A href='?src=\ref[src];main=1'>(Back)</A>"
usr << browse(dat, "window=chem_master;size=575x400")
return
else if (href_list["add1"])
/*
(this fixes a pretty serious exploit) ~~ Doohl
R.remove_reagent(href_list["add1"], 1) //Remove/add used instead of trans_to since we're moving a specific reagent.
reagents.add_reagent(href_list["add1"], 1)
*/
else if (href_list["add"])
R.trans_id_to(src, href_list["add1"], 1)
if(href_list["amount"])
var/id = href_list["add"]
var/amount = text2num(href_list["amount"])
R.trans_id_to(src, id, amount)
else if (href_list["add5"])
R.trans_id_to(src, href_list["add5"], 5)
else if (href_list["add10"])
R.trans_id_to(src, href_list["add10"], 10)
else if (href_list["addall"])
var/temp_amt = R.get_reagent_amount(href_list["addall"])
R.trans_id_to(src, href_list["addall"], temp_amt)
else if (href_list["addcustom"])
var/id = href_list["addcustom"]
useramount = input("Select the amount to transfer.", 30, useramount) as num
useramount = isgoodnumber(useramount)
var/realamount = R.get_reagent_amount(id)
R.trans_id_to(src, href_list["addcustom"], realamount)
src.Topic(null, list("amount" = "[useramount]", "add" = "[id]"))
else if (href_list["remove"])
if(href_list["amount"])
var/id = href_list["remove"]
var/amount = text2num(href_list["amount"])
if(mode)
reagents.trans_id_to(beaker, id, amount)
else
reagents.remove_reagent(id, amount)
else if (href_list["remove1"])
reagents.remove_reagent(href_list["remove1"], 1)
if(mode) R.add_reagent(href_list["remove1"], 1)
else if (href_list["remove5"])
reagents.remove_reagent(href_list["remove5"], 5)
if(mode) R.add_reagent(href_list["remove5"], 5)
else if (href_list["remove10"])
reagents.remove_reagent(href_list["remove10"], 10)
if(mode) R.add_reagent(href_list["remove10"], 10)
else if (href_list["removeall"])
if(mode)
var/temp_amt = reagents.get_reagent_amount(href_list["removeall"])
R.add_reagent(href_list["removeall"], temp_amt)
reagents.del_reagent(href_list["removeall"])
else if (href_list["removecustom"])
var/id = href_list["removecustom"]
useramount = input("Select the amount to transfer.", 30, useramount) as num
useramount = isgoodnumber(useramount)
reagents.remove_reagent(id, useramount)
if(mode) R.add_reagent(id, useramount)
src.Topic(null, list("amount" = "[useramount]", "remove" = "[id]"))
else if (href_list["toggle"])
if(mode)
mode = 0
else
mode = 1
mode = !mode
else if (href_list["main"])
attack_hand(usr)
return
@@ -350,7 +330,6 @@
P.name = "[name] pill"
P.pixel_x = rand(-7, 7) //random position
P.pixel_y = rand(-7, 7)
P.icon_state = "pill"+pillsprite
reagents.trans_to(P,50)
else if (href_list["createbottle"])
@@ -361,33 +340,11 @@
P.name = "[name] bottle"
P.pixel_x = rand(-7, 7) //random position
P.pixel_y = rand(-7, 7)
P.icon_state = "bottle"+bottlesprite
reagents.trans_to(P,30)
else
var/obj/item/weapon/reagent_containers/food/condiment/P = new/obj/item/weapon/reagent_containers/food/condiment(src.loc)
reagents.trans_to(P,50)
else if(href_list["change_pill"])
#define MAX_PILL_SPRITE 20 //max icon state of the pill sprites
var/dat = "<table>"
for(var/i = 1 to MAX_PILL_SPRITE)
dat += "<tr><td><a href=\"?src=\ref[src]&pill_sprite=[i]\"><img src=\"pill[i].png\" /></a></td></tr>"
dat += "</table>"
usr << browse(dat, "window=chem_master")
return
else if(href_list["change_bottle"])
#define MAX_BOTTLE_SPRITE 20 //max icon state of the bottle sprites
var/dat = "<table>"
for(var/i = 1 to MAX_BOTTLE_SPRITE)
dat += "<tr><td><a href=\"?src=\ref[src]&bottle_sprite=[i]\"><img src=\"bottle[i].png\" /></a></td></tr>"
dat += "</table>"
usr << browse(dat, "window=chem_master")
return
else if(href_list["pill_sprite"])
pillsprite = href_list["pill_sprite"]
else if(href_list["bottle_sprite"])
bottlesprite = href_list["bottle_sprite"]
else
usr << browse(null, "window=chem_master")
src.updateUsrDialog()
return
@@ -398,16 +355,9 @@
return src.attack_hand(user)
/obj/machinery/chem_master/attack_hand(mob/user as mob)
if(!(user.client in has_sprites)) //yes, it's in three places, so they get downloaded even when they arent going to be shown, because they could be in the future
spawn()
has_sprites += user.client
for(var/i = 1 to MAX_PILL_SPRITE)
usr << browse_rsc(icon('chemical.dmi', "pill" + num2text(i)), "pill[i].png")
for(var/i = 1 to MAX_BOTTLE_SPRITE)
usr << browse_rsc(icon('chemical.dmi', "bottle" + num2text(i)), "bottle[i].png")
if(stat & BROKEN)
return
user.machine = src
user.set_machine(src)
var/dat = ""
if(!beaker)
dat = "Please insert beaker.<BR>"
@@ -430,29 +380,27 @@
for(var/datum/reagent/G in R.reagent_list)
dat += "[G.name] , [G.volume] Units - "
dat += "<A href='?src=\ref[src];analyze=1;desc=[G.description];name=[G.name]'>(Analyze)</A> "
dat += "<A href='?src=\ref[src];add1=[G.id]'>(1)</A> "
if(G.volume >= 5) dat += "<A href='?src=\ref[src];add5=[G.id]'>(5)</A> "
if(G.volume >= 10) dat += "<A href='?src=\ref[src];add10=[G.id]'>(10)</A> "
dat += "<A href='?src=\ref[src];addall=[G.id]'>(All)</A> "
dat += "<A href='?src=\ref[src];add=[G.id];amount=1'>(1)</A> "
dat += "<A href='?src=\ref[src];add=[G.id];amount=5'>(5)</A> "
dat += "<A href='?src=\ref[src];add=[G.id];amount=10'>(10)</A> "
dat += "<A href='?src=\ref[src];add=[G.id];amount=[G.volume]'>(All)</A> "
dat += "<A href='?src=\ref[src];addcustom=[G.id]'>(Custom)</A><BR>"
if(!mode)
dat += "<HR>Transfer to <A href='?src=\ref[src];toggle=1'>disposal:</A><BR>"
else
dat += "<HR>Transfer to <A href='?src=\ref[src];toggle=1'>beaker:</A><BR>"
dat += "<HR>Transfer to <A href='?src=\ref[src];toggle=1'>[(!mode ? "disposal" : "beaker")]:</A><BR>"
if(reagents.total_volume)
for(var/datum/reagent/N in reagents.reagent_list)
dat += "[N.name] , [N.volume] Units - "
dat += "<A href='?src=\ref[src];analyze=1;desc=[N.description];name=[N.name]'>(Analyze)</A> "
dat += "<A href='?src=\ref[src];remove1=[N.id]'>(1)</A> "
if(N.volume >= 5) dat += "<A href='?src=\ref[src];remove5=[N.id]'>(5)</A> "
if(N.volume >= 10) dat += "<A href='?src=\ref[src];remove10=[N.id]'>(10)</A> "
dat += "<A href='?src=\ref[src];removeall=[N.id]'>(All)</A> "
dat += "<A href='?src=\ref[src];remove=[N.id];amount=1'>(1)</A> "
dat += "<A href='?src=\ref[src];remove=[N.id];amount=5'>(5)</A> "
dat += "<A href='?src=\ref[src];remove=[N.id];amount=10'>(10)</A> "
dat += "<A href='?src=\ref[src];remove=[N.id];amount=[N.volume]'>(All)</A> "
dat += "<A href='?src=\ref[src];removecustom=[N.id]'>(Custom)</A><BR>"
else
dat += "Empty<BR>"
if(!condi)
dat += "<HR><BR><A href='?src=\ref[src];createpill=1'>Create pill (50 units max)</A><a href=\"?src=\ref[src]&change_pill=1\"><img src=\"pill[pillsprite].png\" /></a><BR>"
dat += "<A href='?src=\ref[src];createbottle=1'>Create bottle (30 units max)</A><a href=\"?src=\ref[src]&change_bottle=1\"><img src=\"bottle[bottlesprite].png\" /></a>"
dat += "<HR><BR><A href='?src=\ref[src];createpill=1'>Create pill (50 units max)</A><BR>"
dat += "<A href='?src=\ref[src];createbottle=1'>Create bottle (30 units max)</A>"
else
dat += "<A href='?src=\ref[src];createbottle=1'>Create bottle (50 units max)</A>"
if(!condi)
@@ -521,19 +469,27 @@
if(usr.stat || usr.restrained()) return
if(!in_range(src, usr)) return
usr.machine = src
usr.set_machine(src)
if(!beaker) return
if (href_list["create_vaccine"])
if(!src.wait)
var/obj/item/weapon/reagent_containers/glass/bottle/B = new/obj/item/weapon/reagent_containers/glass/bottle(src.loc)
if(B)
var/vaccine_type = text2path(href_list["create_vaccine"])//the path is received as string - converting
var/datum/disease/D = new vaccine_type
var/path = href_list["create_vaccine"]
var/vaccine_type = text2path(path)
var/datum/disease/D = null
if(!vaccine_type)
D = archive_diseases[path]
vaccine_type = path
else
if(vaccine_type in diseases)
D = new vaccine_type(0, null)
if(D)
B.name = "[D.name] vaccine bottle"
B.reagents.add_reagent("vaccine",15,vaccine_type)
del(D)
wait = 1
var/datum/reagents/R = beaker.reagents
var/datum/reagent/blood/Blood = null
@@ -542,19 +498,25 @@
Blood = L
break
var/list/res = Blood.data["resistances"]
spawn(res.len*500)
spawn(res.len*200)
src.wait = null
else
src.temphtml = "The replicator is not ready yet."
src.updateUsrDialog()
return
/*
else if (href_list["create_virus_culture"])
if(!wait)
var/obj/item/weapon/reagent_containers/glass/bottle/B = new/obj/item/weapon/reagent_containers/glass/bottle(src.loc)
B.icon_state = "bottle3"
var/type = text2path(href_list["create_virus_culture"])//the path is received as string - converting
var/datum/disease/D = new type
var/datum/disease/D = null
if(!type)
var/datum/disease/advance/A = archive_diseases[href_list["create_virus_culture"]]
if(A)
D = new A.type(0, A)
else
if(type in diseases) // Make sure this is a disease
D = new type(0, null)
var/list/data = list("viruses"=list(D))
var/name = sanitize(input(usr,"Name:","Name the culture",D.name))
if(!name || name == " ") name = D.name
@@ -563,13 +525,12 @@
B.reagents.add_reagent("blood",20,data)
src.updateUsrDialog()
wait = 1
spawn(2000)
spawn(1000)
src.wait = null
else
src.temphtml = "The replicator is not ready yet."
src.updateUsrDialog()
return
*/
else if (href_list["empty_beaker"])
beaker.reagents.clear_reagents()
src.updateUsrDialog()
@@ -584,6 +545,20 @@
src.temphtml = ""
src.updateUsrDialog()
return
else if(href_list["name_disease"])
var/new_name = stripped_input(usr, "Name the Disease", "New Name", "", MAX_NAME_LEN)
if(stat & (NOPOWER|BROKEN)) return
if(usr.stat || usr.restrained()) return
if(!in_range(src, usr)) return
var/id = href_list["name_disease"]
if(archive_diseases[id])
var/datum/disease/advance/A = archive_diseases[id]
A.AssignName(new_name)
for(var/datum/disease/advance/AD in active_diseases)
AD.Refresh()
src.updateUsrDialog()
else
usr << browse(null, "window=pandemic")
src.updateUsrDialog()
@@ -601,7 +576,7 @@
/obj/machinery/computer/pandemic/attack_hand(mob/user as mob)
if(stat & (NOPOWER|BROKEN))
return
user.machine = src
user.set_machine(src)
var/dat = ""
if(src.temphtml)
dat = "[src.temphtml]<BR><BR><A href='?src=\ref[src];clear=1'>Main Menu</A>"
@@ -619,6 +594,8 @@
dat += "The beaker is empty<BR>"
else if(!Blood)
dat += "No blood sample found in beaker"
else if(!Blood.data)
dat += "No blood data found in beaker."
else
dat += "<h3>Blood sample data:</h3>"
dat += "<b>Blood DNA:</b> [(Blood.data["blood_DNA"]||"none")]<BR>"
@@ -631,20 +608,51 @@
for(var/datum/disease/D in Blood.data["viruses"])
if(!D.hidden[PANDEMIC])
dat += "<b>Disease Agent:</b> [D?"[D.agent]":"none"]<BR>"
var/disease_creation = D.type
if(istype(D, /datum/disease/advance))
var/datum/disease/advance/A = D
D = archive_diseases[A.GetDiseaseID()]
disease_creation = A.GetDiseaseID()
if(D.name == "Unknown")
dat += "<b><a href='?src=\ref[src];name_disease=[A.GetDiseaseID()]'>Name Disease</a></b><BR>"
if(!D)
CRASH("We weren't able to get the advance disease from the archive.")
dat += "<b>Disease Agent:</b> [D?"[D.agent] - <A href='?src=\ref[src];create_virus_culture=[disease_creation]'>Create virus culture bottle</A>":"none"]<BR>"
dat += "<b>Common name:</b> [(D.name||"none")]<BR>"
dat += "<b>Description: </b> [(D.desc||"none")]<BR>"
dat += "<b>Spread:</b> [(D.spread||"none")]<BR>"
dat += "<b>Possible cure:</b> [(D.cure||"none")]<BR><BR>"
dat += "<b>Contains antibodies to:</b> "
if(istype(D, /datum/disease/advance))
var/datum/disease/advance/A = D
dat += "<b>Symptoms:</b> "
var/english_symptoms = list()
for(var/datum/symptom/S in A.symptoms)
english_symptoms += S.name
dat += english_list(english_symptoms)
dat += "<BR><b>Contains antibodies to:</b> "
if(Blood.data["resistances"])
var/list/res = Blood.data["resistances"]
if(res.len)
dat += "<ul>"
for(var/type in Blood.data["resistances"])
var/datum/disease/DR = new type
dat += "<li>[DR.name] - <A href='?src=\ref[src];create_vaccine=[type]'>Create vaccine bottle</A></li>"
del(DR)
var/disease_name = "Unknown"
if(!ispath(type))
var/datum/disease/advance/A = archive_diseases[type]
if(A)
disease_name = A.name
else
var/datum/disease/D = new type(0, null)
disease_name = D.name
dat += "<li>[disease_name] - <A href='?src=\ref[src];create_vaccine=[type]'>Create vaccine bottle</A></li>"
dat += "</ul><BR>"
else
dat += "nothing<BR>"
@@ -657,6 +665,7 @@
onclose(user, "pandemic")
return
/obj/machinery/computer/pandemic/attackby(var/obj/I as obj, var/mob/user as mob)
if(istype(I, /obj/item/weapon/screwdriver))
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
@@ -719,11 +728,11 @@
var/list/blend_items = list (
//Sheets
/obj/item/stack/sheet/plasma = list("plasma" = 20),
/obj/item/stack/sheet/uranium = list("uranium" = 20),
/obj/item/stack/sheet/clown = list("banana" = 20),
/obj/item/stack/sheet/silver = list("silver" = 20),
/obj/item/stack/sheet/gold = list("gold" = 20),
/obj/item/stack/sheet/mineral/plasma = list("plasma" = 20),
/obj/item/stack/sheet/mineral/uranium = list("uranium" = 20),
/obj/item/stack/sheet/mineral/clown = list("banana" = 20),
/obj/item/stack/sheet/mineral/silver = list("silver" = 20),
/obj/item/stack/sheet/mineral/gold = list("gold" = 20),
/obj/item/weapon/grown/nettle = list("sacid" = 0),
/obj/item/weapon/grown/deathnettle = list("pacid" = 0),
@@ -734,8 +743,6 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/wheat = list("flour" = -5),
/obj/item/weapon/reagent_containers/food/snacks/grown/cherries = list("cherryjelly" = 0),
//archaeology!
/obj/item/weapon/rocksliver = list("ground_rock" = 50),
//All types that you can put into the grinder to transfer the reagents to the beaker. !Put all recipes above this.!
@@ -793,7 +800,7 @@
return 1
//Fill machine with the plantbag!
if(istype(O, /obj/item/weapon/plantbag))
if(istype(O, /obj/item/weapon/storage/bag/plants))
for (var/obj/item/weapon/reagent_containers/food/snacks/grown/G in O.contents)
O.contents -= G
@@ -826,10 +833,10 @@
return 0
/obj/machinery/reagentgrinder/attack_hand(mob/user as mob)
user.machine = src
user.set_machine(src)
interact(user)
/obj/machinery/reagentgrinder/proc/interact(mob/user as mob) // The microwave Menu
/obj/machinery/reagentgrinder/interact(mob/user as mob) // The microwave Menu
var/is_chamber_empty = 0
var/is_beaker_ready = 0
var/processing_chamber = ""
@@ -878,7 +885,7 @@
/obj/machinery/reagentgrinder/Topic(href, href_list)
if(..())
return
usr.machine = src
usr.set_machine(src)
switch(href_list["action"])
if ("grind")
grind()
@@ -997,8 +1004,7 @@
inuse = 1
spawn(60)
inuse = 0
if(get_dist(usr,src) < 2)
interact(usr)
interact(usr)
//Snacks and Plants
for (var/obj/item/weapon/reagent_containers/food/snacks/O in holdingitems)
if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
@@ -1064,20 +1070,6 @@
break
remove_object(O)
//xenoarch
for(var/obj/item/weapon/rocksliver/O in holdingitems)
if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break
var/allowed = get_allowed_by_id(O)
for (var/r_id in allowed)
var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume
var/amount = allowed[r_id]
beaker.reagents.add_reagent(r_id,min(amount, space), O.geological_data)
if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break
remove_object(O)
//Everything else - Transfers reagents from it into beaker
for (var/obj/item/weapon/reagent_containers/O in holdingitems)
if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
File diff suppressed because it is too large Load Diff
+468 -58
View File
@@ -7,7 +7,7 @@ datum
var/list/required_reagents = new/list()
var/list/required_catalysts = new/list()
// Both of these variables are mostly going to be used with Metroid cores - but if you want to, you can use them for other things
// Both of these variables are mostly going to be used with slime cores - but if you want to, you can use them for other things
var/atom/required_container = null // the container required for the reaction to happen
var/required_other = 0 // an integer required for the reaction to happen
@@ -50,8 +50,9 @@ datum
on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
// 100 created volume = 10 heavy range & 20 light range = same as normal EMP grenade
empulse(location, round(created_volume / 10), round(created_volume / 5), 1)
// 100 created volume = 4 heavy range & 7 light range. A few tiles smaller than traitor EMP grandes.
// 200 created volume = 8 heavy range & 14 light range. 4 tiles larger than traitor EMP grenades.
empulse(location, round(created_volume / 24), round(created_volume / 14), 1)
holder.clear_reagents()
return
/*
@@ -477,9 +478,56 @@ datum
result_amount = 1
on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
new /obj/item/stack/sheet/plasma(location)
new /obj/item/stack/sheet/mineral/plasma(location)
return
virus_food
name = "Virus Food"
id = "virusfood"
result = "virusfood"
required_reagents = list("water" = 5, "milk" = 5, "oxygen" = 5)
result_amount = 15
mix_virus
name = "Mix Virus"
id = "mixvirus"
result = "blood"
required_reagents = list("virusfood" = 5)
required_catalysts = list("blood")
var/level = 2
on_reaction(var/datum/reagents/holder, var/created_volume)
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list
if(B && B.data)
var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"]
if(D)
D.Evolve(level - rand(0, 1))
mix_virus_2
name = "Mix Virus 2"
id = "mixvirus2"
required_reagents = list("mutagen" = 5)
level = 4
rem_virus
name = "Devolve Virus"
id = "remvirus"
required_reagents = list("synaptizine" = 5)
on_reaction(var/datum/reagents/holder, var/created_volume)
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list
if(B && B.data)
var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"]
if(D)
D.Devolve()
///////////////////////////////////////////////////////////////////////////////////
// foam and foam precursor
@@ -600,40 +648,40 @@ datum
result_amount = 5
/////////////////////////////////////METROID CORE REACTIONS ///////////////////////////////
metroidpepper
name = "Metroid Condensedcapaicin"
/////////////////////////////////////OLD SLIME CORE REACTIONS ///////////////////////////////
/*
slimepepper
name = "Slime Condensedcapaicin"
id = "m_condensedcapaicin"
result = "condensedcapsaicin"
required_reagents = list("sugar" = 1)
result_amount = 1
required_container = /obj/item/metroid_core
required_container = /obj/item/slime_core
required_other = 1
metroidfrost
name = "Metroid Frost Oil"
slimefrost
name = "Slime Frost Oil"
id = "m_frostoil"
result = "frostoil"
required_reagents = list("water" = 1)
result_amount = 1
required_container = /obj/item/metroid_core
required_container = /obj/item/slime_core
required_other = 1
metroidglycerol
name = "Metroid Glycerol"
slimeglycerol
name = "Slime Glycerol"
id = "m_glycerol"
result = "glycerol"
required_reagents = list("blood" = 1)
result_amount = 1
required_container = /obj/item/metroid_core
required_container = /obj/item/slime_core
required_other = 1
metroid_explosion
name = "Metroid Explosion"
slime_explosion
name = "Slime Explosion"
id = "m_explosion"
result = null
required_reagents = list("blood" = 1)
result_amount = 2
required_container = /obj/item/metroid_core
required_container = /obj/item/slime_core
required_other = 2
on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
@@ -643,55 +691,55 @@ datum
holder.clear_reagents()
return
metroidjam
name = "Metroid Jam"
slimejam
name = "Slime Jam"
id = "m_jam"
result = "metroid"
result = "slimejelly"
required_reagents = list("water" = 1)
result_amount = 1
required_container = /obj/item/metroid_core
required_container = /obj/item/slime_core
required_other = 2
metroidsynthi
name = "Metroid Synthetic Flesh"
slimesynthi
name = "Slime Synthetic Flesh"
id = "m_flesh"
result = null
required_reagents = list("sugar" = 1)
result_amount = 1
required_container = /obj/item/metroid_core
required_container = /obj/item/slime_core
required_other = 2
on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
new /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh(location)
return
metroidenzyme
name = "Metroid Enzyme"
slimeenzyme
name = "Slime Enzyme"
id = "m_enzyme"
result = "enzyme"
required_reagents = list("blood" = 1, "water" = 1)
result_amount = 2
required_container = /obj/item/metroid_core
required_container = /obj/item/slime_core
required_other = 3
metroidplasma
name = "Metroid Plasma"
slimeplasma
name = "Slime Plasma"
id = "m_plasma"
result = "plasma"
required_reagents = list("sugar" = 1, "blood" = 2)
result_amount = 2
required_container = /obj/item/metroid_core
required_container = /obj/item/slime_core
required_other = 3
metroidvirus
name = "Metroid Virus"
slimevirus
name = "Slime Virus"
id = "m_virus"
result = null
required_reagents = list("sugar" = 1, "sacid" = 1)
result_amount = 2
required_container = /obj/item/metroid_core
required_container = /obj/item/slime_core
required_other = 3
on_reaction(var/datum/reagents/holder, var/created_volume)
holder.clear_reagents()
var/virus = pick(/datum/disease/flu, /datum/disease/cold, \
var/virus = pick(/datum/disease/advance/flu, /datum/disease/advance/cold, \
/datum/disease/pierrot_throat, /datum/disease/fake_gbs, \
/datum/disease/brainrot, /datum/disease/magnitis)
@@ -704,14 +752,14 @@ datum
return
metroidteleport
name = "Metroid Teleport"
slimeteleport
name = "Slime Teleport"
id = "m_tele"
result = null
required_reagents = list("pacid" = 2, "mutagen" = 2)
required_catalysts = list("plasma" = 1)
result_amount = 1
required_container = /obj/item/metroid_core
required_container = /obj/item/slime_core
required_other = 4
on_reaction(var/datum/reagents/holder, var/created_volume)
@@ -763,18 +811,31 @@ datum
sleep(20)
M.client.screen -= blueeffect
del(blueeffect)
metroidcrit
name = "Metroid Crit"
slimecrit
name = "Slime Crit"
id = "m_tele"
result = null
required_reagents = list("sacid" = 1, "blood" = 1)
required_catalysts = list("plasma" = 1, "mutagen" = 1)
required_catalysts = list("plasma" = 1)
result_amount = 1
required_container = /obj/item/metroid_core
required_container = /obj/item/slime_core
required_other = 4
on_reaction(var/datum/reagents/holder, var/created_volume)
var/list/critters = typesof(/obj/effect/critter) - /obj/effect/critter // list of possible critters
var/blocked = list(/mob/living/simple_animal/hostile,
/mob/living/simple_animal/hostile/pirate,
/mob/living/simple_animal/hostile/pirate/ranged,
/mob/living/simple_animal/hostile/russian,
/mob/living/simple_animal/hostile/russian/ranged,
/mob/living/simple_animal/hostile/syndicate,
/mob/living/simple_animal/hostile/syndicate/melee,
/mob/living/simple_animal/hostile/syndicate/melee/space,
/mob/living/simple_animal/hostile/syndicate/ranged,
/mob/living/simple_animal/hostile/syndicate/ranged/space,
/mob/living/simple_animal/hostile/alien/queen/large,
/mob/living/simple_animal/clown
)//exclusion list for things you don't want the reaction to create.
var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs
playsound(get_turf_loc(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
@@ -784,18 +845,18 @@ datum
for(var/i = 1, i <= created_volume, i++)
var/chosen = pick(critters)
var/obj/effect/critter/C = new chosen
var/mob/living/simple_animal/hostile/C = new chosen
C.loc = get_turf_loc(holder.my_atom)
if(prob(50))
for(var/j = 1, j <= rand(1, 3), j++)
step(C, pick(NORTH,SOUTH,EAST,WEST))
metroidbork
name = "Metroid Bork"
slimebork
name = "Slime Bork"
id = "m_tele"
result = null
required_reagents = list("sugar" = 1, "water" = 1)
result_amount = 2
required_container = /obj/item/metroid_core
required_container = /obj/item/slime_core
required_other = 4
on_reaction(var/datum/reagents/holder, var/created_volume)
@@ -819,33 +880,33 @@ datum
metroidchloral
name = "Metroid Chloral"
slimechloral
name = "Slime Chloral"
id = "m_bunch"
result = "chloralhydrate"
required_reagents = list("blood" = 1, "water" = 2)
result_amount = 2
required_container = /obj/item/metroid_core
required_container = /obj/item/slime_core
required_other = 5
metroidretro
name = "Metroid Retro"
slimeretro
name = "Slime Retro"
id = "m_xeno"
result = null
required_reagents = list("sugar" = 1)
result_amount = 1
required_container = /obj/item/metroid_core
required_container = /obj/item/slime_core
required_other = 5
on_reaction(var/datum/reagents/holder, var/created_volume)
var/datum/disease/F = new /datum/disease/dna_retrovirus(0)
var/list/data = list("viruses"= list(F))
holder.add_reagent("blood", 20, data)
metroidfoam
name = "Metroid Foam"
slimefoam
name = "Slime Foam"
id = "m_foam"
result = null
required_reagents = list("sacid" = 1)
result_amount = 2
required_container = /obj/item/metroid_core
required_container = /obj/item/slime_core
required_other = 5
on_reaction(var/datum/reagents/holder, var/created_volume)
@@ -869,15 +930,364 @@ datum
s.start()
holder.clear_reagents()
return
*/
/////////////////////////////////////////////NEW SLIME CORE REACTIONS/////////////////////////////////////////////
//Grey
slimespawn
name = "Slime Spawn"
id = "m_spawn"
result = null
required_reagents = list("plasma" = 5)
result_amount = 1
required_container = /obj/item/slime_extract/grey
required_other = 1
on_reaction(var/datum/reagents/holder)
for(var/mob/O in viewers(get_turf_loc(holder.my_atom), null))
O.show_message(text("\red Infused with plasma, the core begins to quiver and grow, and soon a new baby slime emerges from it!"), 1)
var/mob/living/carbon/slime/S = new /mob/living/carbon/slime
S.loc = get_turf_loc(holder.my_atom)
slimemonkey
name = "Slime Monkey"
id = "m_monkey"
result = null
required_reagents = list("blood" = 5)
result_amount = 1
required_container = /obj/item/slime_extract/grey
required_other = 1
on_reaction(var/datum/reagents/holder)
for(var/i = 1, i <= 3, i++)
var /obj/item/weapon/reagent_containers/food/snacks/monkeycube/M = new /obj/item/weapon/reagent_containers/food/snacks/monkeycube
M.loc = get_turf_loc(holder.my_atom)
//Green
slimemutate
name = "Mutation Toxin"
id = "mutationtoxin"
result = "mutationtoxin"
required_reagents = list("plasma" = 5)
result_amount = 1
required_other = 1
required_container = /obj/item/slime_extract/green
//Metal
slimemetal
name = "Slime Metal"
id = "m_metal"
result = null
required_reagents = list("plasma" = 5)
result_amount = 1
required_container = /obj/item/slime_extract/metal
required_other = 1
on_reaction(var/datum/reagents/holder)
var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/metal
M.amount = 15
M.loc = get_turf_loc(holder.my_atom)
var/obj/item/stack/sheet/plasteel/P = new /obj/item/stack/sheet/plasteel
P.amount = 5
P.loc = get_turf_loc(holder.my_atom)
//Gold
slimecrit
name = "Slime Crit"
id = "m_tele"
result = null
required_reagents = list("plasma" = 5)
result_amount = 1
required_container = /obj/item/slime_extract/gold
required_other = 1
on_reaction(var/datum/reagents/holder)
var/blocked = list(/mob/living/simple_animal/hostile,
/mob/living/simple_animal/hostile/pirate,
/mob/living/simple_animal/hostile/pirate/ranged,
/mob/living/simple_animal/hostile/russian,
/mob/living/simple_animal/hostile/russian/ranged,
/mob/living/simple_animal/hostile/syndicate,
/mob/living/simple_animal/hostile/syndicate/melee,
/mob/living/simple_animal/hostile/syndicate/melee/space,
/mob/living/simple_animal/hostile/syndicate/ranged,
/mob/living/simple_animal/hostile/syndicate/ranged/space,
/mob/living/simple_animal/hostile/alien/queen/large,
/mob/living/simple_animal/hostile/retaliate,
/mob/living/simple_animal/hostile/retaliate/clown
)//exclusion list for things you don't want the reaction to create.
var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs
playsound(get_turf_loc(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
for(var/mob/living/carbon/human/M in viewers(get_turf_loc(holder.my_atom), null))
if(M:eyecheck() <= 0)
flick("e_flash", M.flash)
for(var/i = 1, i <= 5, i++)
var/chosen = pick(critters)
var/mob/living/simple_animal/hostile/C = new chosen
C.faction = "slimesummon"
C.loc = get_turf_loc(holder.my_atom)
if(prob(50))
for(var/j = 1, j <= rand(1, 3), j++)
step(C, pick(NORTH,SOUTH,EAST,WEST))
//Silver
slimebork
name = "Slime Bork"
id = "m_tele2"
result = null
required_reagents = list("plasma" = 5)
result_amount = 1
required_container = /obj/item/slime_extract/silver
required_other = 1
on_reaction(var/datum/reagents/holder)
var/list/borks = typesof(/obj/item/weapon/reagent_containers/food/snacks) - /obj/item/weapon/reagent_containers/food/snacks
// BORK BORK BORK
playsound(get_turf_loc(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
for(var/mob/living/carbon/human/M in viewers(get_turf_loc(holder.my_atom), null))
if(M:eyecheck() <= 0)
flick("e_flash", M.flash)
for(var/i = 1, i <= 4 + rand(1,2), i++)
var/chosen = pick(borks)
var/obj/B = new chosen
if(B)
B.loc = get_turf_loc(holder.my_atom)
if(prob(50))
for(var/j = 1, j <= rand(1, 3), j++)
step(B, pick(NORTH,SOUTH,EAST,WEST))
//Blue
slimefrost
name = "Slime Frost Oil"
id = "m_frostoil"
result = "frostoil"
required_reagents = list("plasma" = 5)
result_amount = 10
required_container = /obj/item/slime_extract/blue
required_other = 1
//Dark Blue
slimefreeze
name = "Slime Freeze"
id = "m_freeze"
result = null
required_reagents = list("plasma" = 5)
result_amount = 1
required_container = /obj/item/slime_extract/darkblue
required_other = 1
on_reaction(var/datum/reagents/holder)
for(var/mob/O in viewers(get_turf_loc(holder.my_atom), null))
O.show_message(text("\red The slime extract begins to vibrate violently !"), 1)
sleep(50)
playsound(get_turf_loc(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
for(var/mob/living/M in range (get_turf_loc(holder.my_atom), 7))
M.bodytemperature -= 140
M << "\blue You feel a chill!"
//Orange
slimecasp
name = "Slime Capsaicin Oil"
id = "m_capsaicinoil"
result = "capsaicin"
required_reagents = list("blood" = 5)
result_amount = 10
required_container = /obj/item/slime_extract/orange
required_other = 1
slimefire
name = "Slime fire"
id = "m_fire"
result = null
required_reagents = list("plasma" = 5)
result_amount = 1
required_container = /obj/item/slime_extract/orange
required_other = 1
on_reaction(var/datum/reagents/holder)
for(var/mob/O in viewers(get_turf_loc(holder.my_atom), null))
O.show_message(text("\red The slime extract begins to vibrate violently !"), 1)
sleep(50)
var/turf/location = get_turf(holder.my_atom.loc)
for(var/turf/simulated/floor/target_tile in range(0,location))
var/datum/gas_mixture/napalm = new
napalm.toxins = 25
napalm.temperature = 1400
target_tile.assume_air(napalm)
spawn (0) target_tile.hotspot_expose(700, 400)
//Yellow
slimeoverload
name = "Slime EMP"
id = "m_emp"
result = null
required_reagents = list("blood" = 5)
result_amount = 1
required_container = /obj/item/slime_extract/yellow
required_other = 1
on_reaction(var/datum/reagents/holder, var/created_volume)
empulse(get_turf_loc(holder.my_atom), 3, 7)
slimecell
name = "Slime Powercell"
id = "m_cell"
result = null
required_reagents = list("plasma" = 5)
result_amount = 1
required_container = /obj/item/slime_extract/yellow
required_other = 1
on_reaction(var/datum/reagents/holder, var/created_volume)
var/obj/item/weapon/cell/slime/P = new /obj/item/weapon/cell/slime
P.loc = get_turf_loc(holder.my_atom)
slimeglow
name = "Slime Glow"
id = "m_glow"
result = null
required_reagents = list("water" = 5)
result_amount = 1
required_container = /obj/item/slime_extract/yellow
required_other = 1
on_reaction(var/datum/reagents/holder)
for(var/mob/O in viewers(get_turf_loc(holder.my_atom), null))
O.show_message(text("\red The slime begins to emit a soft light."), 1)
var/obj/item/slime_extract/yellow/Y = holder
Y.luminosity = 6
//Purple
slimepsteroid
name = "Slime Steroid"
id = "m_steroid"
result = null
required_reagents = list("plasma" = 5)
result_amount = 1
required_container = /obj/item/slime_extract/purple
required_other = 1
on_reaction(var/datum/reagents/holder)
var/obj/item/weapon/slimesteroid/P = new /obj/item/weapon/slimesteroid
P.loc = get_turf_loc(holder.my_atom)
slimejam
name = "Slime Jam"
id = "m_jam"
result = "slimejelly"
required_reagents = list("sugar" = 5)
result_amount = 10
required_container = /obj/item/slime_extract/purple
required_other = 1
//Dark Purple
slimeplasma
name = "Slime Plasma"
id = "m_plasma"
result = null
required_reagents = list("plasma" = 5)
result_amount = 1
required_container = /obj/item/slime_extract/darkpurple
required_other = 1
on_reaction(var/datum/reagents/holder)
var/obj/item/stack/sheet/mineral/plasma/P = new /obj/item/stack/sheet/mineral/plasma
P.amount = 10
P.loc = get_turf_loc(holder.my_atom)
//Red
slimeglycerol
name = "Slime Glycerol"
id = "m_glycerol"
result = "glycerol"
required_reagents = list("plasma" = 5)
result_amount = 8
required_container = /obj/item/slime_extract/red
required_other = 1
slimebloodlust
name = "Bloodlust"
id = "m_bloodlust"
result = null
required_reagents = list("blood" = 5)
result_amount = 1
required_container = /obj/item/slime_extract/red
required_other = 1
on_reaction(var/datum/reagents/holder)
for(var/mob/living/carbon/slime/slime in viewers(get_turf_loc(holder.my_atom), null))
slime.tame = 0
slime.rabid = 1
for(var/mob/O in viewers(get_turf_loc(holder.my_atom), null))
O.show_message(text("\red The [slime] is driven into a frenzy!."), 1)
//Pink
slimeppotion
name = "Slime Potion"
id = "m_potion"
result = null
required_reagents = list("plasma" = 5)
result_amount = 1
required_container = /obj/item/slime_extract/pink
required_other = 1
on_reaction(var/datum/reagents/holder)
var/obj/item/weapon/slimepotion/P = new /obj/item/weapon/slimepotion
P.loc = get_turf_loc(holder.my_atom)
//Black
slimemutate2
name = "Advanced Mutation Toxin"
id = "mutationtoxin2"
result = "amutationtoxin"
required_reagents = list("plasma" = 5)
result_amount = 1
required_other = 1
required_container = /obj/item/slime_extract/black
//Oil
slimeexplosion
name = "Slime Explosion"
id = "m_explosion"
result = null
required_reagents = list("plasma" = 5)
result_amount = 1
required_container = /obj/item/slime_extract/oil
required_other = 1
on_reaction(var/datum/reagents/holder)
for(var/mob/O in viewers(get_turf_loc(holder.my_atom), null))
O.show_message(text("\red The slime extract begins to vibrate violently !"), 1)
sleep(50)
explosion(get_turf_loc(holder.my_atom), 1 ,3, 6)
//Light Pink
slimepotion2
name = "Slime Potion 2"
id = "m_potion2"
result = null
result_amount = 1
required_container = /obj/item/slime_extract/lightpink
required_reagents = list("plasma" = 5)
required_other = 1
on_reaction(var/datum/reagents/holder)
var/obj/item/weapon/slimepotion2/P = new /obj/item/weapon/slimepotion2
P.loc = get_turf_loc(holder.my_atom)
//Adamantine
slimegolem
name = "Slime Golem"
id = "m_golem"
result = null
required_reagents = list("plasma" = 5)
result_amount = 1
required_container = /obj/item/slime_extract/adamantine
required_other = 1
on_reaction(var/datum/reagents/holder)
var/obj/effect/golemrune/Z = new /obj/effect/golemrune
Z.loc = get_turf_loc(holder.my_atom)
Z.announce_to_ghosts()
//////////////////////////////////////////FOOD MIXTURES////////////////////////////////////
tofu
@@ -1384,8 +1794,8 @@ datum
name = "Changeling Sting"
id = "changelingsting"
result = "changelingsting"
required_reagents = list("orangejuice" = 1, "limejuice" = 1, "lemonjuice" = 1, "vodka" = 1)
result_amount = 4
required_reagents = list("screwdrivercocktail" = 1, "limejuice" = 1, "lemonjuice" = 1)
result_amount = 5
aloe
name = "Aloe"
+5 -1
View File
@@ -30,9 +30,13 @@
/obj/item/weapon/reagent_containers/attack(mob/M as mob, mob/user as mob, def_zone)
return
// this prevented pills, food, and other things from being picked up by bags.
// possibly intentional, but removing it allows us to not duplicate functionality.
// -Sayu (storage conslidation)
/*
/obj/item/weapon/reagent_containers/attackby(obj/item/I as obj, mob/user as mob)
return
*/
/obj/item/weapon/reagent_containers/afterattack(obj/target, mob/user , flag)
return
@@ -2,6 +2,7 @@
name = "BloodPack"
desc = "Contains blood used for transfusion."
icon = 'icons/obj/bloodpack.dmi'
icon_state = "empty"
volume = 200
var/blood_type = null
@@ -11,6 +12,17 @@
if(blood_type != null)
name = "BloodPack [blood_type]"
reagents.add_reagent("blood", 200, list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=blood_type,"resistances"=null,"trace_chem"=null))
update_icon()
on_reagent_change()
update_icon()
update_icon()
var/percent = round((reagents.total_volume / volume) * 100)
switch(percent)
if(0 to 9) icon_state = "empty"
if(10 to 50) icon_state = "half"
if(51 to INFINITY) icon_state = "full"
/obj/item/weapon/reagent_containers/blood/APlus
blood_type = "A+"
@@ -15,79 +15,94 @@
var/charge_tick = 0
var/recharge_time = 5 //Time it takes for shots to recharge (in seconds)
New()
..()
processing_objects.Add(src)
var/list/datum/reagents/reagent_list = list()
var/list/reagent_ids = list("doctorsdelight", "inaprovaline", "spaceacillin")
//var/list/reagent_ids = list("dexalin", "kelotane", "bicaridine", "anti_toxin", "inaprovaline", "spaceacillin")
/obj/item/weapon/reagent_containers/borghypo/New()
..()
for(var/R in reagent_ids)
add_reagent(R)
processing_objects.Add(src)
Del()
processing_objects.Remove(src)
..()
/obj/item/weapon/reagent_containers/borghypo/Del()
processing_objects.Remove(src)
..()
process() //Every [recharge_time] seconds, recharge some reagents for the cyborg
charge_tick++
if(charge_tick < recharge_time) return 0
charge_tick = 0
/obj/item/weapon/reagent_containers/borghypo/process() //Every [recharge_time] seconds, recharge some reagents for the cyborg
charge_tick++
if(charge_tick < recharge_time) return 0
charge_tick = 0
if(isrobot(src.loc))
var/mob/living/silicon/robot/R = src.loc
if(R && R.cell)
if(mode == 1 && reagents.total_volume < 30) //Don't recharge reagents and drain power if the storage is full.
R.cell.use(charge_cost) //Take power from borg...
reagents.add_reagent("doctorsdelight",5) //And fill hypo with reagent.
if(mode == 2 && reagents.total_volume < 30)
R.cell.use(charge_cost)
reagents.add_reagent("inaprovaline", 5)
if(mode == 3 && reagents.total_volume < 30)
R.cell.use(charge_cost)
reagents.add_reagent("spaceacillin", 5)
//update_icon()
return 1
if(isrobot(src.loc))
var/mob/living/silicon/robot/R = src.loc
if(R && R.cell)
var/datum/reagents/RG = reagent_list[mode]
if(RG.total_volume < RG.maximum_volume) //Don't recharge reagents and drain power if the storage is full.
R.cell.use(charge_cost) //Take power from borg...
RG.add_reagent(reagent_ids[mode], 5) //And fill hypo with reagent.
//update_icon()
return 1
// Purely for testing purposes I swear~
/*
/obj/item/weapon/reagent_containers/borghypo/verb/add_cyanide()
set src in world
add_reagent("cyanide")
*/
// Use this to add more chemicals for the borghypo to produce.
/obj/item/weapon/reagent_containers/borghypo/proc/add_reagent(var/reagent)
reagent_ids |= reagent
var/datum/reagents/RG = new(30)
RG.my_atom = src
reagent_list += RG
var/datum/reagents/R = reagent_list[reagent_list.len]
R.add_reagent(reagent, 30)
/obj/item/weapon/reagent_containers/borghypo/attack(mob/M as mob, mob/user as mob)
if(!reagents.total_volume)
var/datum/reagents/R = reagent_list[mode]
if(!R.total_volume)
user << "\red The injector is empty."
return
if (!( istype(M, /mob) ))
return
if (reagents.total_volume)
if (R.total_volume)
user << "\blue You inject [M] with the injector."
M << "\red You feel a tiny prick!"
src.reagents.reaction(M, INGEST)
R.reaction(M, INGEST)
if(M.reagents)
var/trans = reagents.trans_to(M, amount_per_transfer_from_this)
user << "\blue [trans] units injected. [reagents.total_volume] units remaining."
var/trans = R.trans_to(M, amount_per_transfer_from_this)
user << "\blue [trans] units injected. [R.total_volume] units remaining."
return
/obj/item/weapon/reagent_containers/borghypo/attack_self(mob/user as mob)
playsound(src.loc, 'sound/effects/pop.ogg', 50, 0) //Change the mode
if(mode == 1)
mode = 2
charge_tick = 0 //Prevents wasted chems/cell charge if you're cycling through modes.
reagents.clear_reagents() //Flushes whatever was in the storage previously, so you don't get chems all mixed up.
user << "\blue Synthesizer is now producing 'Inaprovaline'."
return
if(mode == 2)
mode = 3
charge_tick = 0
reagents.clear_reagents()
user << "\blue Synthesizer is now producing 'Spaceacillin'."
return
if(mode == 3)
mode++
if(mode > reagent_list.len)
mode = 1
charge_tick = 0
reagents.clear_reagents()
user << "\blue Synthesizer is now producing 'Doctor's Delight'."
return
charge_tick = 0 //Prevents wasted chems/cell charge if you're cycling through modes.
var/datum/reagent/R = chemical_reagents_list[reagent_ids[mode]]
user << "\blue Synthesizer is now producing '[R.name]'."
return
/obj/item/weapon/reagent_containers/borghypo/examine()
set src in view()
..()
if (!(usr in view(2)) && usr!=src.loc) return
if(reagents && reagents.reagent_list.len)
for(var/datum/reagent/R in reagents.reagent_list)
var/empty = 1
for(var/datum/reagents/RS in reagent_list)
var/datum/reagent/R = locate() in RS.reagent_list
if(R)
usr << "\blue It currently has [R.volume] units of [R.name] stored."
else
empty = 0
if(empty)
usr << "\blue It is currently empty. Allow some time for the internal syntheszier to produce more."
@@ -52,6 +52,7 @@
src.reagents.reaction(safe_thing, TOUCH)
user << "\blue You transfer [trans] units of the solution."
if (src.reagents.total_volume<=0)
filled = 0
@@ -62,6 +63,15 @@
for(var/mob/O in viewers(world.view, user))
O.show_message(text("\red <B>[] squirts something into []'s eyes!</B>", user, target), 1)
src.reagents.reaction(target, TOUCH)
var/mob/M = target
var/R
if(src.reagents)
for(var/datum/reagent/A in src.reagents.reagent_list)
R += A.id + " ("
R += num2text(A.volume) + "),"
user.attack_log += "\[[time_stamp()]\] <b>[user]/[user.ckey]</b> squirted <b>[M]/[M.ckey]</b> with ([R])"
M.attack_log += "\[[time_stamp()]\] <b>[user]/[user.ckey]</b> squirted <b>[M]/[M.ckey]</b> with ([R])"
log_attack("\[[time_stamp()]\] <b>[user]/[user.ckey]</b> squirted <b>[M]/[M.ckey]</b> with ([R])")
trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
user << "\blue You transfer [trans] units of the solution."
@@ -46,12 +46,8 @@
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: [reagentlist(src)]</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Fed [src.name] by [M.name] ([M.ckey]) Reagents: [reagentlist(src)]</font>")
log_attack("<font color='red'>[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
log_admin("ATTACK: [user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])")
msg_admin_attack("ATTACK: [user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") //BS12 EDIT ALG
if(reagents.total_volume)
reagents.reaction(M, INGEST)
spawn(5)
@@ -48,9 +48,6 @@
log_attack("<font color='red'>[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
log_admin("ATTACK: [user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])")
msg_admin_attack("ATTACK: [user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") //BS12 EDIT ALG
if(reagents.total_volume)
reagents.reaction(M, INGEST)
spawn(5)
@@ -93,15 +90,27 @@
user << "\red [target] is full."
return
var/datum/reagent/refill
var/datum/reagent/refillName
if(isrobot(user))
refill = reagents.get_master_reagent_id()
refillName = reagents.get_master_reagent_name()
var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
user << "\blue You transfer [trans] units of the solution to [target]."
if(isrobot(user)) //Cyborg modules that include drinks automatically refill themselves, but drain the borg's cell
var/mob/living/silicon/robot/bro = user
bro.cell.use(30)
var/refill = reagents.get_master_reagent_id()
spawn(600)
var/chargeAmount = max(30,4*trans)
bro.cell.use(chargeAmount)
user << "Now synthesizing [trans] units of [refillName]..."
spawn(300)
reagents.add_reagent(refill, trans)
user << "Cyborg [src] refilled."
return
@@ -111,11 +120,11 @@
if (!(usr in range(0)) && usr!=src.loc) return
if(!reagents || reagents.total_volume==0)
usr << "\blue \The [src] is empty!"
else if (reagents.total_volume<src.volume/4)
else if (reagents.total_volume<=src.volume/4)
usr << "\blue \The [src] is almost empty!"
else if (reagents.total_volume<src.volume/2)
else if (reagents.total_volume<=src.volume*0.66)
usr << "\blue \The [src] is half full!"
else if (reagents.total_volume<src.volume/0.90)
else if (reagents.total_volume<=src.volume*0.90)
usr << "\blue \The [src] is almost full!"
else
usr << "\blue \The [src] is full!"
@@ -101,10 +101,6 @@
target.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been smashed with a bottle by [user.name] ([user.ckey])</font>")
log_attack("<font color='red'>[user.name] ([user.ckey]) attacked [target.name] with a bottle. ([target.ckey])</font>")
log_admin("ATTACK: [user.name] ([user.ckey]) attacked [target.name] with a bottle. ([target.ckey])")
msg_admin_attack("ATTACK: [user.name] ([user.ckey]) attacked [target.name] with a bottle. ([target.ckey])") //BS12 EDIT ALG
//The reagents in the bottle splash all over the target, thanks for the idea Nodrak
if(src.reagents)
for(var/mob/O in viewers(user, null))
@@ -128,7 +124,6 @@
throw_speed = 3
throw_range = 5
item_state = "beer"
//item_state - Need to find a bottle sprite
attack_verb = list("stabbed", "slashed", "attacked")
var/icon/broken_outline = icon('icons/obj/drinks.dmi', "broken")
@@ -241,6 +236,14 @@
..()
reagents.add_reagent("wine", 100)
/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe
name = "Jailbreaker Verte"
desc = "One sip of this and you just know you're gonna have a good time."
icon_state = "absinthebottle"
New()
..()
reagents.add_reagent("absinthe", 100)
//////////////////////////JUICES AND STUFF ///////////////////////
/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice
@@ -9,15 +9,15 @@
item_state = "beaker"
New()
..()
reagents.add_reagent("metroid", 50)
reagents.add_reagent("slime", 50)
on_reagent_change()
if (reagents.reagent_list.len > 0)
switch(reagents.get_master_reagent_id())
if("metroid")
icon_state = "jar_metroid"
name = "metroid jam"
desc = "A jar of metroid jam. Delicious!"
if("slime")
icon_state = "jar_slime"
name = "slime jam"
desc = "A jar of slime jam. Delicious!"
else
icon_state ="jar_what"
name = "jar of something"
@@ -50,7 +50,7 @@
M << "\red You cannot force any more of [src] to go down your throat."
return 0
else
if(!istype(M, /mob/living/carbon/metroid)) //If you're feeding it to someone else.
if(!istype(M, /mob/living/carbon/slime)) //If you're feeding it to someone else.
var/fullness = M.nutrition + (M.reagents.get_reagent_amount("nutriment") * 25)
if (fullness <= (550 * (1 + M.overeatduration / 1000)))
for(var/mob/O in viewers(world.view, user))
@@ -67,9 +67,6 @@
log_attack("<font color='red'>[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
log_admin("ATTACK: [user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])")
msg_admin_attack("ATTACK: [user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") //BS12 EDIT ALG
for(var/mob/O in viewers(world.view, user))
O.show_message("\red [user] feeds [M] [src].", 1)
@@ -121,7 +118,10 @@
usr << "\blue \The [src] was bitten multiple times!"
/obj/item/weapon/reagent_containers/food/snacks/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/weapon/storage))
..() // -> item/attackby()
if(istype(W,/obj/item/weapon/storage))
..() // -> item/attackby()
if((slices_num <= 0 || !slices_num) || !slice_path)
return 1
var/inaccurate = 0
@@ -140,6 +140,8 @@
)
inaccurate = 1
else if(W.w_class <= 2 && istype(src,/obj/item/weapon/reagent_containers/food/snacks/sliceable))
if(!iscarbon(user))
return 1
user << "\red You slip [W] inside [src]."
user.u_equip(W)
if ((user.client && user.s_active != src))
@@ -262,6 +264,16 @@
reagents.add_reagent("sugar", 3)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/candy/donor
name = "Donor Candy"
desc = "A little treat for blood donors."
trash = /obj/item/trash/candy
New()
..()
reagents.add_reagent("nutriment", 10)
reagents.add_reagent("sugar", 3)
bitesize = 5
/obj/item/weapon/reagent_containers/food/snacks/candy_corn
name = "candy corn"
desc = "It's a handful of candy corn. Can be stored in a detective's hat."
@@ -337,7 +349,7 @@
desc = "Like life, it never quite tastes the same."
icon_state = "donut1"
New()
..()
reagents.add_reagent("nutriment", 2)
reagents.add_reagent("sprinkles", 1)
bitesize = 10
@@ -356,7 +368,7 @@
if(6)
reagents.add_reagent("coco", 3)
if(7)
reagents.add_reagent("rorojelly", 3)
reagents.add_reagent("slimejelly", 3)
if(8)
reagents.add_reagent("banana", 3)
if(9)
@@ -384,7 +396,7 @@
src.name = "Frosted Jelly Donut"
reagents.add_reagent("sprinkles", 2)
/obj/item/weapon/reagent_containers/food/snacks/donut/rorojelly
/obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly
name = "Jelly Donut"
desc = "You jelly?"
icon_state = "jdonut1"
@@ -392,7 +404,7 @@
..()
reagents.add_reagent("nutriment", 3)
reagents.add_reagent("sprinkles", 1)
reagents.add_reagent("rorojelly", 5)
reagents.add_reagent("slimejelly", 5)
bitesize = 5
if(prob(30))
src.icon_state = "jdonut2"
@@ -425,6 +437,7 @@
throw_impact(atom/hit_atom)
..()
new/obj/effect/decal/cleanable/egg_smudge(src.loc)
src.reagents.reaction(hit_atom, TOUCH)
src.visible_message("\red [src.name] has been squashed.","\red You hear a smack.")
del(src)
@@ -1023,7 +1036,7 @@
New()
..()
reagents.add_reagent("nutriment", 4)
reagents.add_reagent("doctor_delight", 2)
reagents.add_reagent("doctorsdelight", 5)
bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato
@@ -1150,20 +1163,20 @@
reagents.add_reagent("water", 5)
bitesize = 5
/obj/item/weapon/reagent_containers/food/snacks/rorosoup
name = "Roro soup"
/obj/item/weapon/reagent_containers/food/snacks/slimesoup
name = "slime soup"
desc = "If no water is available, you may substitute tears."
icon_state = "rorosoup"
icon_state = "slimesoup"
New()
..()
reagents.add_reagent("rorojelly", 5)
reagents.add_reagent("slimejelly", 5)
reagents.add_reagent("water", 10)
bitesize = 5
/obj/item/weapon/reagent_containers/food/snacks/bloodsoup
name = "Meatball soup"
name = "Tomato soup"
desc = "Smells like copper"
icon_state = "meatballsoup"
icon_state = "tomatosoup"
New()
..()
reagents.add_reagent("nutriment", 2)
@@ -1236,7 +1249,7 @@
reagents.add_reagent("nutriment", 6)
reagents.add_reagent("blood", 10)
if(7)
reagents.add_reagent("rorojelly", 10)
reagents.add_reagent("slimejelly", 10)
reagents.add_reagent("water", 10)
if(8)
reagents.add_reagent("carbon", 10)
@@ -1477,7 +1490,7 @@
/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast
name = "Jellied Toast"
desc = "A slice of bread covered with delicious jam."
icon_state = "rorotoast"
icon_state = "jellytoast"
trash = /obj/item/trash/plate
New()
..()
@@ -1489,24 +1502,24 @@
..()
reagents.add_reagent("cherryjelly", 5)
/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/roro
/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/slime
New()
..()
reagents.add_reagent("rorojelly", 5)
reagents.add_reagent("slimejelly", 5)
/obj/item/weapon/reagent_containers/food/snacks/jellyburger
name = "Jelly Burger"
desc = "Culinary delight..?"
icon_state = "roroburger"
icon_state = "jellyburger"
New()
..()
reagents.add_reagent("nutriment", 5)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/jellyburger/roro
/obj/item/weapon/reagent_containers/food/snacks/jellyburger/slime
New()
..()
reagents.add_reagent("rorojelly", 5)
reagents.add_reagent("slimejelly", 5)
/obj/item/weapon/reagent_containers/food/snacks/jellyburger/cherry
New()
@@ -1643,32 +1656,32 @@
/obj/item/weapon/reagent_containers/food/snacks/jellysandwich
name = "Jelly Sandwich"
desc = "You wish you had some peanut butter to go with this..."
icon_state = "rorosandwich"
icon_state = "jellysandwich"
trash = /obj/item/trash/plate
New()
..()
reagents.add_reagent("nutriment", 2)
bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/jellysandwich/roro
/obj/item/weapon/reagent_containers/food/snacks/jellysandwich/slime
New()
..()
reagents.add_reagent("rorojelly", 5)
reagents.add_reagent("slimejelly", 5)
/obj/item/weapon/reagent_containers/food/snacks/jellysandwich/cherry
New()
..()
reagents.add_reagent("cherryjelly", 5)
/obj/item/weapon/reagent_containers/food/snacks/boiledrorocore
name = "Boiled Roro Core"
/*
/obj/item/weapon/reagent_containers/food/snacks/boiledslimecore
name = "Boiled slime Core"
desc = "A boiled red thing."
icon_state = "boiledrorocore"
icon_state = "boiledslimecore"
New()
..()
reagents.add_reagent("rorojelly", 5)
reagents.add_reagent("slimejelly", 5)
bitesize = 3
*/
/obj/item/weapon/reagent_containers/food/snacks/mint
name = "mint"
desc = "it is only wafer thin."
@@ -1755,7 +1768,7 @@
New()
..()
reagents.add_reagent("nutriment", 8)
reagents.add_reagent("doctor_delight", 5)
reagents.add_reagent("doctorsdelight", 5)
bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/appletart
@@ -2104,6 +2117,15 @@
trash = /obj/item/trash/plate
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/cracker
name = "Cracker"
desc = "It's a salted cracker."
icon_state = "cracker"
New()
..()
reagents.add_reagent("nutriment", 1)
/////////////////////////////////////////////////PIZZA////////////////////////////////////////
@@ -2343,11 +2365,18 @@
return
..()
/obj/item/weapon/reagent_containers/food/snacks/cracker
name = "Cracker"
desc = "It's a salted cracker."
icon_state = "cracker"
/obj/item/pizzabox/margherita/New()
pizza = new /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/margherita(src)
boxtag = "Margherita Deluxe"
New()
..()
reagents.add_reagent("nutriment", 1)
/obj/item/pizzabox/vegetable/New()
pizza = new /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza(src)
boxtag = "Gourmet Vegatable"
/obj/item/pizzabox/mushroom/New()
pizza = new /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushroompizza(src)
boxtag = "Mushroom Special"
/obj/item/pizzabox/meat/New()
pizza = new /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza(src)
boxtag = "Meatlover's Supreme"
@@ -49,22 +49,42 @@
usr << msg
return
if (istype(O, /obj/item/weapon/plantbag))
/*if (istype(O, /obj/item/weapon/storage/bag/plants))
var/obj/item/weapon/plantbag/S = O
if (S.mode == 1)
for (var/obj/item/weapon/reagent_containers/food/snacks/grown/G in locate(src.x,src.y,src.z))
if (S.contents.len < S.capacity)
S.contents += G;
else
user << "\blue The plant bag is full."
return
user << "\blue You pick up all the plants."
for(var/obj/item/G in get_turf(src))
if(istype(G, /obj/item/seeds) || istype(G, /obj/item/weapon/reagent_containers/food/snacks/grown))
if (S.contents.len < S.capacity)
S.contents += G
else
user << "\blue The plant bag is full."
return
user << "\blue You pick up all the plants and seeds."
else
if (S.contents.len < S.capacity)
S.contents += src;
else
user << "\blue The plant bag is full."*/
return
/*/obj/item/seeds/attackby(var/obj/item/O as obj, var/mob/user as mob)
if (istype(O, /obj/item/weapon/storage/bag/plants))
var/obj/item/weapon/plantbag/S = O
if (S.mode == 1)
for(var/obj/item/G in get_turf(src))
if(istype(G, /obj/item/seeds) || istype(G, /obj/item/weapon/reagent_containers/food/snacks/grown))
if (S.contents.len < S.capacity)
S.contents += G
else
user << "\blue The plant bag is full."
return
user << "\blue You pick up all the plants and seeds."
else
if (S.contents.len < S.capacity)
S.contents += src;
else
user << "\blue The plant bag is full."
return
return*/
/obj/item/weapon/grown/attackby(var/obj/item/O as obj, var/mob/user as mob)
..()
@@ -216,14 +236,14 @@
seed = "/obj/item/seeds/glowberryseed"
name = "bunch of glow-berries"
desc = "Nutritious!"
var/on = 1
var/light_on = 1
var/brightness_on = 2 //luminosity when on
icon_state = "glowberrypile"
New()
..()
spawn(5) //So potency can be set in the proc that creates these crops
reagents.add_reagent("nutriment", round((potency / 10), 1))
reagents.add_reagent("radium", 3+round(potency / 5, 1))
reagents.add_reagent("uranium", 3+round(potency / 5, 1))
bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/glowberries/Del()
@@ -333,8 +353,22 @@
New()
..()
spawn(5) //So potency can be set in the proc that creates these crops
reagents.maximum_volume = 20
reagents.add_reagent("nutriment", 1+round((potency / 10), 1))
bitesize = 1+round(reagents.total_volume / 2, 1)
bitesize = reagents.maximum_volume // Always eat the apple in one
/obj/item/weapon/reagent_containers/food/snacks/grown/apple/poisoned
seed = "/obj/item/seeds/poisonedappleseed"
name = "apple"
desc = "It's a little piece of Eden."
icon_state = "apple"
potency = 15
New()
..()
spawn(5) //So potency can be set in the proc that creates these crops
reagents.maximum_volume = 20
reagents.add_reagent("cyanide", 1+round((potency / 5), 1))
bitesize = reagents.maximum_volume // Always eat the apple in one
/obj/item/weapon/reagent_containers/food/snacks/grown/goldapple
seed = "/obj/item/seeds/goldappleseed"
@@ -361,6 +395,8 @@
desc = "It's full of watery goodness."
icon_state = "watermelon"
potency = 10
slice_path = /obj/item/weapon/reagent_containers/food/snacks/watermelonslice
slices_num = 5
New()
..()
spawn(5) //So potency can be set in the proc that creates these crops
@@ -612,6 +648,18 @@
reagents.add_reagent("nutriment", 1+round((potency / 25), 1))
bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/kudzupod
seed = "/obj/item/seeds/kudzuseed"
name = "kudzu pod"
desc = "<I>Pueraria Virallis</I>: An invasive species with vines that rapidly creep and wrap around whatever they contact."
icon_state = "kudzupod"
New()
..()
spawn(5) //So potency can be set in the proc that creates these crops
reagents.add_reagent("nutriment",1+round((potency / 50), 1))
reagents.add_reagent("anti_toxin",1+round((potency / 25), 1))
bitesize = 1+round(reagents.total_volume / 2, 1)
/obj/item/weapon/reagent_containers/food/snacks/grown/icepepper
seed = "/obj/item/seeds/icepepperseed"
name = "ice-pepper"
@@ -818,11 +866,13 @@
user.SetLuminosity(round(user.luminosity + (potency/10),1))
SetLuminosity(round(potency/10,1))
// *************************************
// Complex Grown Object Defines -
// Putting these at the bottom so they don't clutter the list up. -Cheridan
// *************************************
/*
//This object is just a transition object. All it does is make a grass tile and delete itself.
/obj/item/weapon/reagent_containers/food/snacks/grown/grass
seed = "/obj/item/seeds/grassseed"
@@ -834,6 +884,7 @@
new/obj/item/stack/tile/grass(src.loc)
spawn(5) //Workaround to keep harvesting from working weirdly.
del(src)
*/
//This object is just a transition object. All it does is make dosh and delete itself. -Cheridan
/obj/item/weapon/reagent_containers/food/snacks/grown/money
@@ -926,14 +977,3 @@
src.visible_message("<span class='notice'>The [src.name] has been squashed, causing a distortion in space-time.</span>","<span class='moderate'>You hear a splat and a crackle.</span>")
del(src)
return
/obj/item/weapon/reagent_containers/food/snacks/grown/watermelon
name = "Watermelon"
icon_state = "A juicy watermelon"
icon_state = "watermelon"
slice_path = /obj/item/weapon/reagent_containers/food/snacks/watermelonslice
slices_num = 5
New()
..()
reagents.add_reagent("nutriment", 10)
bitesize = 2
@@ -25,11 +25,12 @@
/obj/item/weapon/grenade/chem_grenade,
/obj/machinery/bot/medbot,
/obj/machinery/computer/pandemic,
/obj/item/weapon/secstorage/ssafe,
/obj/machinery/disposal,
/obj/item/weapon/storage/secure/safe,
/obj/machinery/iv_drip,
/obj/machinery/disease2/incubator
)
/obj/machinery/disease2/incubator,
/obj/machinery/disposal,
/mob/living/simple_animal/cow,
/mob/living/simple_animal/hostile/retaliate/goat )
examine()
set src in view()
@@ -48,7 +49,16 @@
return
if(ismob(target) && target.reagents && reagents.total_volume)
var/mob/M = target
user << "\blue You splash the solution onto [target]."
var/R
if(src.reagents)
for(var/datum/reagent/A in src.reagents.reagent_list)
R += A.id + " ("
R += num2text(A.volume) + "),"
user.attack_log += "\[[time_stamp()]\] <b>[user]/[user.ckey]</b> splashed <b>[M]/[M.ckey]</b> with ([R])"
M.attack_log += "\[[time_stamp()]\] <b>[user]/[user.ckey]</b> splashed <b>[M]/[M.ckey]</b> with ([R])"
log_attack("\[[time_stamp()]\] <b>[user]/[user.ckey]</b> splashed <b>[M]/[M.ckey]</b> with ([R])")
for(var/mob/O in viewers(world.view, user))
O.show_message(text("\red [] has been splashed with something by []!", target, user), 1)
src.reagents.reaction(target, TOUCH)
@@ -120,7 +130,7 @@
update_icon()
update_icon()
overlays = null
overlays.Cut()
if(reagents.total_volume)
var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10")
@@ -154,10 +164,16 @@
reagents.add_reagent("cryoxadone", 30)
update_icon()
/obj/item/weapon/reagent_containers/glass/beaker/roro
/obj/item/weapon/reagent_containers/glass/beaker/sulphuric
New()
..()
reagents.add_reagent("rorojelly", 50)
reagents.add_reagent("sacid", 50)
update_icon()
/obj/item/weapon/reagent_containers/glass/beaker/slime
New()
..()
reagents.add_reagent("slimejelly", 50)
update_icon()
/obj/item/weapon/reagent_containers/glass/bucket
@@ -77,6 +77,16 @@
..()
reagents.add_reagent("anti_toxin", 30)
/obj/item/weapon/reagent_containers/glass/bottle/mutagen
name = "unstable mutagen bottle"
desc = "A small bottle of unstable mutagen. Randomly changes the DNA structure of whoever comes in contact."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle20"
New()
..()
reagents.add_reagent("mutagen", 30)
/obj/item/weapon/reagent_containers/glass/bottle/ammonia
name = "ammonia bottle"
desc = "A small bottle."
@@ -104,7 +114,40 @@
icon_state = "bottle3"
New()
..()
var/datum/disease/F = new /datum/disease/flu(0)
var/datum/disease/F = new /datum/disease/advance/flu(0)
var/list/data = list("viruses"= list(F))
reagents.add_reagent("blood", 20, data)
/obj/item/weapon/reagent_containers/glass/bottle/epiglottis_virion
name = "Epiglottis virion culture bottle"
desc = "A small bottle. Contains Epiglottis virion culture in synthblood medium."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle3"
New()
..()
var/datum/disease/F = new /datum/disease/advance/voice_change(0)
var/list/data = list("viruses"= list(F))
reagents.add_reagent("blood", 20, data)
/obj/item/weapon/reagent_containers/glass/bottle/liver_enhance_virion
name = "Liver enhancement virion culture bottle"
desc = "A small bottle. Contains liver enhancement virion culture in synthblood medium."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle3"
New()
..()
var/datum/disease/F = new /datum/disease/advance/heal(0)
var/list/data = list("viruses"= list(F))
reagents.add_reagent("blood", 20, data)
/obj/item/weapon/reagent_containers/glass/bottle/hullucigen_virion
name = "Hullucigen virion culture bottle"
desc = "A small bottle. Contains hullucigen virion culture in synthblood medium."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle3"
New()
..()
var/datum/disease/F = new /datum/disease/advance/hullucigen(0)
var/list/data = list("viruses"= list(F))
reagents.add_reagent("blood", 20, data)
@@ -126,7 +169,18 @@
icon_state = "bottle3"
New()
..()
var/datum/disease/F = new /datum/disease/cold(0)
var/datum/disease/advance/F = new /datum/disease/advance/cold(0)
var/list/data = list("viruses"= list(F))
reagents.add_reagent("blood", 20, data)
/obj/item/weapon/reagent_containers/glass/bottle/random
name = "Random culture bottle"
desc = "A small bottle. Contains a random disease."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle3"
New()
..()
var/datum/disease/advance/F = new(0)
var/list/data = list("viruses"= list(F))
reagents.add_reagent("blood", 20, data)
@@ -6,9 +6,8 @@
name = "hypospray"
desc = "The DeForest Medical Corporation hypospray is a sterile, air-needle autoinjector for rapid administration of drugs to patients."
icon = 'icons/obj/syringe.dmi'
item_state = "hypo1"
item_state = "hypo"
icon_state = "hypo"
var/original_icon_state = "hypo"
amount_per_transfer_from_this = 5
volume = 30
possible_transfer_amounts = null
@@ -34,56 +33,20 @@
user << "\blue You inject [M] with the hypospray."
M << "\red You feel a tiny prick!"
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been injected with [src.name] by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to inject [M.name] ([M.ckey])</font>")
log_attack("<font color='red'>[user.name] ([user.ckey]) injected [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
log_admin("ATTACK: [user.name] ([user.ckey]) injected [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])")
msg_admin_attack("ATTACK: [user.name] ([user.ckey]) injected [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") //BS12 EDIT ALG
src.reagents.reaction(M, INGEST)
if(M.reagents)
var/list/injected = list()
for(var/datum/reagent/R in src.reagents.reagent_list)
injected += R.name
var/trans = reagents.trans_to(M, amount_per_transfer_from_this)
user << "\blue [trans] units injected. [reagents.total_volume] units remaining in the hypospray."
return
/obj/item/weapon/reagent_containers/hypospray/ert
name = "emergency hypospray"
desc = "The DeForest Medical Corporation hypospray is a sterile, air-needle autoinjector for rapid administration of drugs to patients."
amount_per_transfer_from_this = 50
volume = 50
var/contained = english_list(injected)
/obj/item/weapon/reagent_containers/hypospray/autoinjector
name = "autoinjector"
desc = "A rapid and safe way to administer small amounts of drugs by untrained or trained personnel."
icon_state = "autoinjector"
original_icon_state = "autoinjector"
item_state = "autoinjector"
amount_per_transfer_from_this = 5
volume = 5
log_attack("<font color='red'>[user.name] ([user.ckey]) injected [M.name] ([M.ckey]) with [src.name], which had [contained] (INTENT: [uppertext(user.a_intent)])</font>")
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been injected ([contained]) with [src.name] by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to inject [M.name] ([M.ckey]) with [contained]</font>")
/obj/item/weapon/reagent_containers/hypospray/autoinjector/New()
..()
reagents.remove_reagent("tricordrazine", 30)
reagents.add_reagent("inaprovaline", 5)
update_icon()
return
/obj/item/weapon/reagent_containers/hypospray/autoinjector/attack(mob/M as mob, mob/user as mob)
..()
update_icon()
return
/obj/item/weapon/reagent_containers/hypospray/autoinjector/update_icon()
if(reagents.total_volume > 0)
icon_state = "[original_icon_state]1"
else
icon_state = "[original_icon_state]0"
/obj/item/weapon/reagent_containers/hypospray/autoinjector/examine()
..()
if(reagents && reagents.reagent_list.len)
for(var/datum/reagent/R in reagents.reagent_list)
usr << "\blue It currently has [R.volume] units of [R.name] stored."
else
usr << "\blue It is currently empty."
return
@@ -15,25 +15,6 @@
if(!icon_state)
icon_state = "pill[rand(1,20)]"
attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/storage/pill_bottle))
var/obj/item/weapon/storage/pill_bottle/P = W
if (P.mode == 1)
for (var/obj/item/weapon/reagent_containers/pill/O in locate(src.x,src.y,src.z))
if(P.contents.len < P.storage_slots)
O.loc = P
P.orient2hud(user)
else
user << "\blue The pill bottle is full."
return
user << "\blue You pick up all the pills."
else
if (P.contents.len < P.storage_slots)
loc = P
P.orient2hud(user)
else
user << "\blue The pill bottle is full."
return
attack_self(mob/user as mob)
return
attack(mob/M as mob, mob/user as mob, def_zone)
@@ -63,13 +44,8 @@
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: [reagentlist(src)]</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Fed [M.name] by [M.name] ([M.ckey]) Reagents: [reagentlist(src)]</font>")
log_attack("<font color='red'>[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
log_admin("ATTACK: [user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])")
msg_admin_attack("ATTACK: [user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") //BS12 EDIT ALG
if(reagents.total_volume)
reagents.reaction(M, INGEST)
spawn(5)
@@ -181,3 +157,22 @@
New()
..()
reagents.add_reagent("bicaridine", 30)
/obj/item/weapon/reagent_containers/pill/happy
name = "Happy pill"
desc = "Happy happy joy joy!"
icon_state = "pill18"
New()
..()
reagents.add_reagent("space_drugs", 15)
reagents.add_reagent("sugar", 15)
/obj/item/weapon/reagent_containers/pill/zoom
name = "Zoom pill"
desc = "Zoooom!"
icon_state = "pill18"
New()
..()
reagents.add_reagent("impedrezene", 10)
reagents.add_reagent("synaptizine", 5)
reagents.add_reagent("hyperzine", 5)
@@ -61,6 +61,15 @@
for(var/mob/O in viewers(world.view, user))
O.show_message(text("\red <B>[] squirts something into []'s eyes!</B>", user, target), 1)
src.reagents.reaction(target, TOUCH)
var/mob/M = target
var/R
if(src.reagents)
for(var/datum/reagent/A in src.reagents.reagent_list)
R += A.id + " ("
R += num2text(A.volume) + "),"
user.attack_log += "\[[time_stamp()]\] <b>[user]/[user.ckey]</b> squirted <b>[M]/[M.ckey]</b> with ([R])"
M.attack_log += "\[[time_stamp()]\] <b>[user]/[user.ckey]</b> squirted <b>[M]/[M.ckey]</b> with ([R])"
log_attack("\[[time_stamp()]\] <b>[user]/[user.ckey]</b> squirted <b>[M]/[M.ckey]</b> with ([R])")
trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
user << "\blue You transfer [trans] units of the solution."
@@ -10,7 +10,7 @@
w_class = 2.0
throw_speed = 2
throw_range = 10
amount_per_transfer_from_this = 5
amount_per_transfer_from_this = 10
volume = 250
possible_transfer_amounts = null
@@ -71,6 +71,11 @@
log_game("[key_name(user)] fired Space lube from a spray bottle.")
return
/obj/item/weapon/reagent_containers/spray/attack_self(var/mob/user)
amount_per_transfer_from_this = (amount_per_transfer_from_this == 10 ? 5 : 10)
user << "<span class='notice'>You switched [amount_per_transfer_from_this == 10 ? "on" : "off"] the pressure nozzle. You'll now use [amount_per_transfer_from_this] units per spray.</span>"
/obj/item/weapon/reagent_containers/spray/examine()
set src in usr
@@ -79,6 +84,16 @@
usr << "[round(R.volume)] units of [R.name] left."
return
/obj/item/weapon/reagent_containers/spray/verb/empty()
set name = "Empty Spray Bottle"
set category = "Object"
set src in usr
if(isturf(usr.loc))
usr << "<span class='notice'>You empty the [src] onto the floor.</span>"
reagents.reaction(usr.loc)
spawn(5) src.reagents.clear_reagents()
//space cleaner
/obj/item/weapon/reagent_containers/spray/cleaner
@@ -59,7 +59,7 @@
return
if(ismob(target))//Blood!
if(istype(target, /mob/living/carbon/metroid))
if(istype(target, /mob/living/carbon/slime))
user << "\red You are unable to locate any blood."
return
if(src.reagents.has_reagent("blood"))
@@ -94,7 +94,7 @@
B.data["viruses"] = list()
B.data["viruses"] += new D.type
B.data["viruses"] += new D.type(0, D, 1)
if(T.virus2)
B.data["virus2"] = T.virus2.getcopy()
@@ -128,7 +128,7 @@
user << "\red [target] is empty."
return
if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers) && !istype(target,/obj/item/metroid_core))
if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers) && !istype(target,/obj/item/slime_extract))
user << "\red You cannot directly remove reagents from this object."
return
@@ -146,17 +146,13 @@
if(istype(target, /obj/item/weapon/implantcase/chem))
return
if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/metroid_core) && !istype(target, /obj/item/clothing/mask/cigarette) && !istype(target, /obj/item/weapon/cigpacket))
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 << "\red You cannot directly fill this object."
return
if(target.reagents.total_volume >= target.reagents.maximum_volume)
user << "\red [target] is full."
return
if(istype(target, /obj/item/metroid_core))
var/obj/item/metroid_core/core = target
core.Flush = 30 // reset flush counter
if(ismob(target) && target != user)
for(var/mob/O in viewers(world.view, user))
O.show_message(text("\red <B>[] is trying to inject []!</B>", user, target), 1)
@@ -188,7 +184,7 @@
update_icon()
var/rounded_vol = round(reagents.total_volume,5)
overlays = null
overlays.Cut()
if(ismob(loc))
var/injoverlay
switch(mode)
@@ -203,3 +203,15 @@
/obj/structure/reagent_dispensers/beerkeg/blob_act()
explosion(src.loc,0,3,5,7,10)
del(src)
/obj/structure/reagent_dispensers/virusfood
name = "Virus Food Dispenser"
desc = "A dispenser of virus food."
icon = 'icons/obj/objects.dmi'
icon_state = "virusfoodtank"
amount_per_transfer_from_this = 10
anchored = 1
New()
..()
reagents.add_reagent("virusfood", 1000)
+2 -9
View File
@@ -78,23 +78,16 @@
user.attack_log += "\[[time_stamp()]\] <b>[user]/[user.ckey]</b> shot <b>[M]/[M.ckey]</b> with a <b>syringegun</b> ([R])"
log_attack("<font color='red'>[user] ([user.ckey]) shot [M] ([M.ckey]) with a syringegun ([R])</font>")
log_admin("ATTACK: [user] ([user.ckey]) shot [M] ([M.ckey]) with a syringegun ([R])")
msg_admin_attack("ATTACK: [user] ([user.ckey]) shot [M] ([M.ckey]) with a syringegun ([R])") //BS12 EDIT ALG
else
M.attack_log += "\[[time_stamp()]\] <b>UNKNOWN SUBJECT (No longer exists)</b> shot <b>[M]/[M.ckey]</b> with a <b>syringegun</b> ([R])"
log_attack("<font color='red'>UNKNOWN shot [M] ([M.ckey]) with a <b>syringegun</b> ([R])</font>")
log_admin("ATTACK: UNKNOWN shot [M] ([M.ckey]) with a <b>syringegun</b> ([R])")
msg_admin_attack("ATTACK: UNKNOWN shot [M] ([M.ckey]) with a <b>syringegun</b> ([R])") //BS12 EDIT ALG
if(D.reagents)
D.reagents.trans_to(M, 15)
M.take_organ_damage(5)
for(var/mob/O in viewers(world.view, D))
O.show_message("\red [M.name] is hit by the syringe!", 1)
M.visible_message("<span class='danger'>[M] is hit by the syringe!</span>")
del(D)
break
if(D)
for(var/atom/A in D.loc)
if(A == user) continue