mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-22 04:24:20 +01:00
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:
@@ -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
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
@@ -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
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user