Prisoner Management Update:

* New Implant: Chem. Insert up to 10 units of chemicals into implant with a syringe (while still in implant case) and then can use a prisoner management console to trigger 1, 5, or 10 units of the chemical to be injected into the implanted subject. Once all the chemicals are used up, the implant disables itself.
* Prisoner Management Console can now detect the approximate location of prisoners with tracking implants in them. It gives slightly more useful information then the tracker but isn't portable.
* AI cannot access Prisoner Management Console (unless malf/XISC).
* Prisoner Management Console re-added to Armory (It no longer can trigger explosive implants). Play nice or else you'll get your toys taken away from you.

BORK BORK update:
* Re-did ChemMaster. Now it allows you transfer reagents in and out of a buffer. You can then turn the contents of the buffer into either a pill or a bottle. When removing reagents from the buffer, you can either delete them entirely or return them to the beaker. However, removing the beaker clears the contents of the buffer (so no mixing inside the ChemMaster!). CondiMaster Neo is almost identical to the ChemMaster except it only makes condiment bottles (no pills).
* Milk now being handled like the other reagents (as intended). Remember: 5 units of milk = 1 cup.
* Soymilk interchangable with regular milk in microwave recipes. (again, 5 units = 1 cup)
* Xenomeatbread! 3 xeno meat, 3 cheese, 3 flour. Extra Heretical!
* Monkey related food items renamed to generic meat (since I'm adding animals, I really don't want to add a new food items for every single new animal).
* Cola removed from fridge. Thematically appropriate but it just clutters it up (especially since there are vending machines all over the damn place).
* Faggots removed from meat locker. Instead, a small amount of meat spawns in there.
* Carp processes modified. Code is a littles cleaner (lawl) and the random pathing a a little cleaner as well.

Badmin Update:
* By request, Admins can now trigger radiation event.
* Confirmation warning on admin-triggered carp event.

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@660 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
morikou@gmail.com
2010-12-18 18:18:14 +00:00
parent 3eda991cc0
commit cac1fdb477
17 changed files with 3418 additions and 3148 deletions

View File

@@ -100,12 +100,19 @@
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/obj/machinery/chem_master/ /obj/machinery/chem_master/
name = "CheMaster 3000" name = "ChemMaster 3000"
density = 1 density = 1
anchored = 1 anchored = 1
icon = 'chemical.dmi' icon = 'chemical.dmi'
icon_state = "mixer0" icon_state = "mixer0"
var/beaker = null var/beaker = null
var/mode = 0
var/condi = 0
New()
var/datum/reagents/R = new/datum/reagents(50)
reagents = R
R.my_atom = src
ex_act(severity) ex_act(severity)
switch(severity) switch(severity)
@@ -149,63 +156,73 @@
if(!beaker) return if(!beaker) return
var/datum/reagents/R = beaker:reagents var/datum/reagents/R = beaker:reagents
if (href_list["isolate"]) if (href_list["analyze"])
R.isolate_reagent(href_list["isolate"]) var/dat = ""
src.updateUsrDialog() if(!condi)
return dat += "<TITLE>Chemmaster 3000</TITLE>Chemical 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>"
else if (href_list["remove"]) else
R.del_reagent(href_list["remove"]) 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>"
src.updateUsrDialog()
return
else if (href_list["remove5"])
R.remove_reagent(href_list["remove5"], 5)
src.updateUsrDialog()
return
else if (href_list["remove1"])
R.remove_reagent(href_list["remove1"], 1)
src.updateUsrDialog()
return
else if (href_list["analyze"])
var/dat = "<TITLE>Chemmaster 3000</TITLE>Chemical 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") usr << browse(dat, "window=chem_master;size=575x400")
return return
else if (href_list["add1"])
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["add5"])
R.remove_reagent(href_list["add5"], 5)
reagents.add_reagent(href_list["add5"], 5)
else if (href_list["add10"])
R.remove_reagent(href_list["add10"], 10)
reagents.add_reagent(href_list["add10"], 10)
else if (href_list["addall"])
var/temp_amt = R.get_reagent_amount(href_list["addall"])
reagents.add_reagent(href_list["addall"], temp_amt)
R.del_reagent(href_list["addall"])
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["toggle"])
if(mode)
mode = 0
else
mode = 1
else if (href_list["main"]) else if (href_list["main"])
attack_hand(usr) attack_hand(usr)
return return
else if (href_list["eject"]) else if (href_list["eject"])
beaker:loc = src.loc beaker:loc = src.loc
beaker = null beaker = null
reagents.clear_reagents()
icon_state = "mixer0" icon_state = "mixer0"
src.updateUsrDialog()
return
else if (href_list["createpill"]) else if (href_list["createpill"])
var/obj/item/weapon/reagent_containers/pill/P = new/obj/item/weapon/reagent_containers/pill(src.loc) var/obj/item/weapon/reagent_containers/pill/P = new/obj/item/weapon/reagent_containers/pill(src.loc)
var/name = input(usr,"Name:","Name your pill!",R.get_master_reagent_name()) var/name = input(usr,"Name:","Name your pill!",reagents.get_master_reagent_name())
if(!name || name == " ") name = R.get_master_reagent_name() if(!name || name == " ") name = reagents.get_master_reagent_name()
P.name = "[name] pill" P.name = "[name] pill"
R.trans_to(P,R.total_volume) reagents.trans_to(P,50)
src.updateUsrDialog()
return
else if (href_list["create5pill"])
var/obj/item/weapon/reagent_containers/pill/P = new/obj/item/weapon/reagent_containers/pill(src.loc)
var/name = input(usr,"Name:","Name your pill!",R.get_master_reagent_name())
if(!name || name == " ") name = R.get_master_reagent_name()
P.name = "[name] pill"
R.trans_to(P,5)
src.updateUsrDialog()
return
else if (href_list["createbottle"]) else if (href_list["createbottle"])
if(!condi)
var/name = input(usr,"Name:","Name your bottle!",reagents.get_master_reagent_name())
var/obj/item/weapon/reagent_containers/glass/bottle/P = new/obj/item/weapon/reagent_containers/glass/bottle(src.loc) var/obj/item/weapon/reagent_containers/glass/bottle/P = new/obj/item/weapon/reagent_containers/glass/bottle(src.loc)
var/name = input(usr,"Name:","Name your bottle!",R.get_master_reagent_name()) if(!name || name == " ") name = reagents.get_master_reagent_name()
if(!name || name == " ") name = R.get_master_reagent_name()
P.name = "[name] bottle" P.name = "[name] bottle"
R.trans_to(P,30) reagents.trans_to(P,30)
src.updateUsrDialog() else
return 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 else
usr << browse(null, "window=chem_master") usr << browse(null, "window=chem_master")
return src.updateUsrDialog()
src.add_fingerprint(usr) src.add_fingerprint(usr)
return return
@@ -225,23 +242,51 @@
dat += "<A href='?src=\ref[src];close=1'>Close</A>" dat += "<A href='?src=\ref[src];close=1'>Close</A>"
else else
var/datum/reagents/R = beaker:reagents var/datum/reagents/R = beaker:reagents
dat += "<A href='?src=\ref[src];eject=1'>Eject beaker</A><BR><BR>" dat += "<A href='?src=\ref[src];eject=1'>Eject beaker and Clear Buffer</A><BR><BR>"
if(!R.total_volume) if(!R.total_volume)
dat += "Beaker is empty." dat += "Beaker is empty."
else else
dat += "Contained reagents:<BR>" dat += "Add to buffer:<BR>"
for(var/datum/reagent/G in R.reagent_list) for(var/datum/reagent/G in R.reagent_list)
dat += "[G.name] , [G.volume] Units - <A href='?src=\ref[src];isolate=[G.id]'>(Isolate)</A> <A href='?src=\ref[src];remove=[G.id]'>(Remove all)</A> <A href='?src=\ref[src];remove5=[G.id]'>(Remove 5)</A> <A href='?src=\ref[src];remove1=[G.id]'>(Remove 1)</A> <A href='?src=\ref[src];analyze=1;desc=[G.description];name=[G.name]'>(Analyze)</A><BR>" dat += "[G.name] , [G.volume] Units - "
dat += "<BR><A href='?src=\ref[src];createpill=1'>Create pill</A>" dat += "<A href='?src=\ref[src];analyze=1;desc=[G.description];name=[G.name]'>(Analyze)</A> "
dat += "<BR><A href='?src=\ref[src];create5pill=1'>Create 5-unit pill</A><BR>" 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><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>"
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><BR>"
else
dat += "Empty<BR>"
if(!condi)
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>" 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)
user << browse("<TITLE>Chemmaster 3000</TITLE>Chemmaster menu:<BR><BR>[dat]", "window=chem_master;size=575x400") user << browse("<TITLE>Chemmaster 3000</TITLE>Chemmaster menu:<BR><BR>[dat]", "window=chem_master;size=575x400")
else
user << browse("<TITLE>Condimaster 3000</TITLE>Condimaster menu:<BR><BR>[dat]", "window=chem_master;size=575x400")
onclose(user, "chem_master") onclose(user, "chem_master")
return return
/obj/machinery/chem_master/condimaster
name = "CondiMaster 3000"
condi = 1
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/obj/machinery/computer/pandemic /obj/machinery/computer/pandemic
name = "PanD.E.M.I.C 2200" name = "PanD.E.M.I.C 2200"

View File

@@ -602,11 +602,11 @@
if(!reagents.total_volume) if(!reagents.total_volume)
user << "\red The Syringe is empty." user << "\red The Syringe is empty."
return return
if(istype(target, /obj/item/weapon/implantcase/chem))
return
if(target.reagents.total_volume >= target.reagents.maximum_volume) if(target.reagents.total_volume >= target.reagents.maximum_volume)
user << "\red [target] is full." user << "\red [target] is full."
return return
if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food)) if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food))
user << "\red You cannot directly fill this object." user << "\red You cannot directly fill this object."
return return
@@ -756,7 +756,6 @@
if(target.reagents.total_volume >= target.reagents.maximum_volume) if(target.reagents.total_volume >= target.reagents.maximum_volume)
user << "\red you can't add anymore to [target]." user << "\red you can't add anymore to [target]."
return return
var/trans = src.reagents.trans_to(target, 1) var/trans = src.reagents.trans_to(target, 1)
user << "\blue You transfer [trans] units of the condiment to [target]." user << "\blue You transfer [trans] units of the condiment to [target]."
@@ -1485,7 +1484,7 @@
bitesize = 2 bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/monkeyburger /obj/item/weapon/reagent_containers/food/snacks/monkeyburger
name = "monkeyburger" name = "burger"
desc = "The cornerstone of every nutritious breakfast." desc = "The cornerstone of every nutritious breakfast."
icon_state = "hburger" icon_state = "hburger"
New() New()
@@ -1493,43 +1492,6 @@
reagents.add_reagent("nutriment", 8) reagents.add_reagent("nutriment", 8)
bitesize = 2 bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/meatbread
name = "meatbread loaf"
desc = "The culinary base of every self-respecting eloquen/tg/entleman."
icon_state = "meatbread"
New()
..()
reagents.add_reagent("nutriment", 40)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/meatbreadslice
name = "meatbread slice"
desc = "A slice of delicious meatbread."
icon_state = "meatbreadslice"
New()
..()
reagents.add_reagent("nutriment", 8)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/cheesewheel
name = "Cheese wheel"
desc = "A big wheel of delcious Cheddar."
icon_state = "cheesewheel"
New()
..()
reagents.add_reagent("nutriment", 20)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge
name = "Cheese wedge"
desc = "A wedge of delicious Cheddar. The cheese wheel it was cut from can't have gone far."
icon_state = "cheesewedge"
New()
..()
reagents.add_reagent("nutriment", 4)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/omelette /obj/item/weapon/reagent_containers/food/snacks/omelette
name = "Omelette Du Fromage" name = "Omelette Du Fromage"
desc = "That's all you can say!" desc = "That's all you can say!"
@@ -1551,7 +1513,6 @@
..() ..()
reagents.add_reagent("nutriment", 1) reagents.add_reagent("nutriment", 1)
/obj/item/weapon/reagent_containers/food/snacks/muffin /obj/item/weapon/reagent_containers/food/snacks/muffin
name = "Muffin" name = "Muffin"
desc = "A delicious and spongy little cake" desc = "A delicious and spongy little cake"
@@ -1692,7 +1653,7 @@
bitesize = 2 bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/momeatpie /obj/item/weapon/reagent_containers/food/snacks/momeatpie
name = "Monkey-pie" name = "Meat-pie"
icon_state = "pie" icon_state = "pie"
desc = "A delicious meatpie." desc = "A delicious meatpie."
New() New()
@@ -1751,7 +1712,7 @@
bitesize = 2 bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/monkeykabob /obj/item/weapon/reagent_containers/food/snacks/monkeykabob
name = "Monkey-kabob" name = "Meat-kabob"
icon_state = "kabob" icon_state = "kabob"
desc = "A delicious kabob" desc = "A delicious kabob"
New() New()
@@ -1812,24 +1773,6 @@
reagents.add_reagent("nutriment", 4) reagents.add_reagent("nutriment", 4)
bitesize = 2 bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/tofubread
name = "Tofubread"
icon_state = "Like meatbread but for vegans. Not guaranteed to give superpowers."
icon_state = "tofubread"
New()
..()
reagents.add_reagent("nutriment", 40)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/tofubreadslice
name = "Tofubread slice"
desc = "A slice of delicious tofubread."
icon_state = "tofubreadslice"
New()
..()
reagents.add_reagent("nutriment", 8)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato /obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato
name = "Loaded Baked Potato" name = "Loaded Baked Potato"
desc = "Totally baked." desc = "Totally baked."
@@ -1856,6 +1799,127 @@
reagents.add_reagent("nutriment", 6) reagents.add_reagent("nutriment", 6)
bitesize = 2 bitesize = 2
/////////////////////////////////////////////////Sliceable////////////////////////////////////////
// All the food items that can be sliced into smaller bits like Meatbread and Cheesewheels
/obj/item/weapon/reagent_containers/food/snacks/meatbread
name = "meatbread loaf"
desc = "The culinary base of every self-respecting eloquen/tg/entleman."
icon_state = "meatbread"
New()
..()
reagents.add_reagent("nutriment", 40)
bitesize = 2
attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/kitchenknife /*|| /obj/item/weapon/scalpel*/))
W.visible_message(" \red <B>You slice the meatbread! </B>", 1)
new /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice (src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice (src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice (src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice (src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice (src.loc)
del(src)
return
/obj/item/weapon/reagent_containers/food/snacks/meatbreadslice
name = "meatbread slice"
desc = "A slice of delicious meatbread."
icon_state = "meatbreadslice"
New()
..()
reagents.add_reagent("nutriment", 8)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/xenomeatbread
name = "xenomeatbread loaf"
desc = "The culinary base of every self-respecting eloquen/tg/entleman. Extra Heretical."
icon_state = "xenomeatbread"
New()
..()
reagents.add_reagent("nutriment", 5)
reagents.add_reagent("xenomicrobes", 35)
bitesize = 2
attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/kitchenknife /*|| /obj/item/weapon/scalpel*/))
W.visible_message(" \red <B>You slice the xenomeatbread! </B>", 1)
new /obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice (src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice (src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice (src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice (src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice (src.loc)
del(src)
return
/obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice
name = "xenomeatbread slice"
desc = "A slice of delicious meatbread. Extra Heretical."
icon_state = "xenobreadslice"
New()
..()
reagents.add_reagent("nutriment", 2)
reagents.add_reagent("xenomicrobes", 6)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/tofubread
name = "Tofubread"
icon_state = "Like meatbread but for vegans. Not guaranteed to give superpowers."
icon_state = "tofubread"
New()
..()
reagents.add_reagent("nutriment", 40)
bitesize = 2
attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/kitchenknife /*|| /obj/item/weapon/scalpel*/))
W.visible_message(" \red <B>You slice the tofubread! </B>", 1)
new /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice (src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice (src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice (src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice (src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice (src.loc)
del(src)
return
/obj/item/weapon/reagent_containers/food/snacks/tofubreadslice
name = "Tofubread slice"
desc = "A slice of delicious tofubread."
icon_state = "tofubreadslice"
New()
..()
reagents.add_reagent("nutriment", 8)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/cheesewheel
name = "Cheese wheel"
desc = "A big wheel of delcious Cheddar."
icon_state = "cheesewheel"
New()
..()
reagents.add_reagent("nutriment", 20)
bitesize = 2
attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/kitchenknife /* || /obj/item/weapon/scalpel*/))
W.visible_message(" \red <B> You slice the cheese! </B>", 1)
new /obj/item/weapon/reagent_containers/food/snacks/cheesewedge (src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/cheesewedge (src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/cheesewedge (src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/cheesewedge (src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/cheesewedge (src.loc)
del(src)
return
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge
name = "Cheese wedge"
desc = "A wedge of delicious Cheddar. The cheese wheel it was cut from can't have gone far."
icon_state = "cheesewedge"
New()
..()
reagents.add_reagent("nutriment", 4)
bitesize = 2

View File

@@ -135,8 +135,8 @@
icon_state = "implant" icon_state = "implant"
item_state = "syringe_kit" item_state = "syringe_kit"
/obj/item/weapon/storage/explosiveimp_kit /obj/item/weapon/storage/chemimp_kit
name = "Explosive Implant Kit" name = "Chemical Implant Kit"
icon_state = "implant" icon_state = "implant"
item_state = "syringe_kit" item_state = "syringe_kit"

View File

@@ -659,6 +659,9 @@
/obj/item/weapon/implant/explosive /obj/item/weapon/implant/explosive
name = "explosive" name = "explosive"
/obj/item/weapon/implant/chem
name = "chem"
/obj/item/weapon/implantcase /obj/item/weapon/implantcase
name = "Glass Case" name = "Glass Case"
icon_state = "implantcase-0" icon_state = "implantcase-0"
@@ -678,6 +681,11 @@
icon = 'items.dmi' icon = 'items.dmi'
icon_state = "implantcase-r" icon_state = "implantcase-r"
/obj/item/weapon/implantcase/chem
name = "Glass Case- 'Chem'"
icon = 'items.dmi'
icon_state = "implantcase-b"
/obj/item/weapon/implanter /obj/item/weapon/implanter
name = "implanter" name = "implanter"
icon = 'items.dmi' icon = 'items.dmi'

View File

@@ -71,21 +71,7 @@
if(5) if(5)
event = 1 event = 1
command_alert("High levels of radiation detected near the station. Please report to the Med-bay if you feel strange.", "Anomaly Alert") high_radiation_event()
world << sound('radiation.ogg')
for(var/mob/living/carbon/human/H in world)
H.radiation += rand(5,25)
if (prob(5))
H.radiation += rand(30,50)
if (prob(25))
if (prob(75))
randmutb(H)
domutcheck(H,null,1)
else
randmutg(H)
domutcheck(H,null,1)
for(var/mob/living/carbon/monkey/M in world)
M.radiation += rand(5,25)
if(6) if(6)
event = 1 event = 1
viral_outbreak() viral_outbreak()
@@ -126,6 +112,7 @@
A:ex_act(1.0) A:ex_act(1.0)
/obj/bhole/proc/life() //Oh man , this will LAG /obj/bhole/proc/life() //Oh man , this will LAG
if (prob(10)) if (prob(10))
@@ -299,6 +286,23 @@
vents.Remove(vent) vents.Remove(vent)
spawncount -= 1 spawncount -= 1
/proc/high_radiation_event()
command_alert("High levels of radiation detected near the station. Please report to the Med-bay if you feel strange.", "Anomaly Alert")
world << sound('radiation.ogg')
for(var/mob/living/carbon/human/H in world)
H.radiation += rand(5,25)
if (prob(5))
H.radiation += rand(30,50)
if (prob(25))
if (prob(75))
randmutb(H)
domutcheck(H,null,1)
else
randmutg(H)
domutcheck(H,null,1)
for(var/mob/living/carbon/monkey/M in world)
M.radiation += rand(5,25)
/proc/prison_break() // -- Callagan /proc/prison_break() // -- Callagan
for (var/obj/machinery/power/apc/temp_apc in world) for (var/obj/machinery/power/apc/temp_apc in world)
if(istype(get_area(temp_apc), /area/prison)) if(istype(get_area(temp_apc), /area/prison))

View File

@@ -99,9 +99,9 @@
/obj/item/weapon/circuitboard/swfdoor /obj/item/weapon/circuitboard/swfdoor
name = "Circuit board (Magix)" name = "Circuit board (Magix)"
computertype = "/obj/machinery/computer/pod/old/swf" computertype = "/obj/machinery/computer/pod/old/swf"
/obj/item/weapon/circuitboard/explosive /obj/item/weapon/circuitboard/prisoner
name = "Circuit board (ExImplant)" name = "Circuit board (Prisoner Management)"
computertype = "/obj/machinery/computer/explosive" computertype = "/obj/machinery/computer/prisoner"

View File

@@ -1,4 +1,4 @@
/obj/machinery/computer/explosive /obj/machinery/computer/prisoner
name = "Prisoner Management" name = "Prisoner Management"
icon = 'computer.dmi' icon = 'computer.dmi'
icon_state = "explosive" icon_state = "explosive"
@@ -10,8 +10,9 @@
var/timeleft = 60 var/timeleft = 60
var/stop = 0.0 var/stop = 0.0
var/screen = 0 // 0 - No Access Denied, 1 - Access allowed var/screen = 0 // 0 - No Access Denied, 1 - Access allowed
var/malf_access = 0
/obj/machinery/computer/explosive/attackby(I as obj, user as mob) /obj/machinery/computer/prisoner/attackby(I as obj, user as mob)
if(istype(I, /obj/item/weapon/screwdriver)) if(istype(I, /obj/item/weapon/screwdriver))
playsound(src.loc, 'Screwdriver.ogg', 50, 1) playsound(src.loc, 'Screwdriver.ogg', 50, 1)
if(do_after(user, 20)) if(do_after(user, 20))
@@ -19,7 +20,7 @@
user << "\blue The broken glass falls out." user << "\blue The broken glass falls out."
var/obj/computerframe/A = new /obj/computerframe( src.loc ) var/obj/computerframe/A = new /obj/computerframe( src.loc )
new /obj/item/weapon/shard( src.loc ) new /obj/item/weapon/shard( src.loc )
var/obj/item/weapon/circuitboard/explosive/M = new /obj/item/weapon/circuitboard/explosive( A ) var/obj/item/weapon/circuitboard/prisoner/M = new /obj/item/weapon/circuitboard/prisoner( A )
for (var/obj/C in src) for (var/obj/C in src)
C.loc = src.loc C.loc = src.loc
M.id = src.id M.id = src.id
@@ -31,7 +32,7 @@
else else
user << "\blue You disconnect the monitor." user << "\blue You disconnect the monitor."
var/obj/computerframe/A = new /obj/computerframe( src.loc ) var/obj/computerframe/A = new /obj/computerframe( src.loc )
var/obj/item/weapon/circuitboard/explosive/M = new /obj/item/weapon/circuitboard/explosive( A ) var/obj/item/weapon/circuitboard/prisoner/M = new /obj/item/weapon/circuitboard/prisoner( A )
for (var/obj/C in src) for (var/obj/C in src)
C.loc = src.loc C.loc = src.loc
M.id = src.id M.id = src.id
@@ -45,15 +46,24 @@
src.attack_hand(user) src.attack_hand(user)
return return
/obj/machinery/computer/explosive/attack_ai(var/mob/user as mob) /obj/machinery/computer/prisoner/attack_ai(var/mob/user as mob)
return src.attack_hand(user) user << "\red Access Denied"
if(user.icon_state == "ai-malf" && malf_access == 0)
/obj/machinery/computer/explosive/attack_paw(var/mob/user as mob) user << "\red BZZZZZZ..."
spawn(20)
user << "\red ...ZZZZZZ *BEEP*"
sleep(10)
user << "\red You now have access to Prisoner Management console"
malf_access = 1
if(malf_access == 1)
return src.attack_hand(user) return src.attack_hand(user)
else
return return
/obj/machinery/computer/explosive/attack_hand(var/mob/user as mob) /obj/machinery/computer/prisoner/attack_paw(var/mob/user as mob)
return
/obj/machinery/computer/prisoner/attack_hand(var/mob/user as mob)
if(..()) if(..())
return return
user.machine = src user.machine = src
@@ -62,12 +72,22 @@
if(screen == 0) if(screen == 0)
dat += "<HR><A href='?src=\ref[src];lock=1'>Unlock Console</A>" dat += "<HR><A href='?src=\ref[src];lock=1'>Unlock Console</A>"
else if(screen == 1) else if(screen == 1)
for(var/obj/item/weapon/implant/explosive/E in world) dat += "<HR>Chemical Implants<BR>"
if(!E.implanted) continue for(var/obj/item/weapon/implant/chem/C in world)
dat += "[E.imp_in.name] | " if(!C.implanted) continue
dat += "<A href='?src=\ref[src];killimplant=\ref[E]'>(<font color=red><i>Detonate</i></font>)</A> | " dat += "[C.imp_in.name] | Remaining Units: [C.reagents.total_volume] | Inject: "
dat += "<A href='?src=\ref[src];disable=\ref[E]'>(<font color=red><i>Deactivate</i></font>)</A> | " dat += "<A href='?src=\ref[src];inject1=\ref[C]'>(<font color=red>(1)</font>)</A>"
dat += "<A href='?src=\ref[src];warn=\ref[E]'>(<font color=red><i>Warn</i></font>)</A> |<BR>" dat += "<A href='?src=\ref[src];inject5=\ref[C]'>(<font color=red>(5)</font>)</A>"
dat += "<A href='?src=\ref[src];inject10=\ref[C]'>(<font color=red>(10)</font>)</A><BR>"
dat += "<HR>Tracking Implants<BR>"
for(var/obj/item/weapon/implant/tracking/T in world)
if(!T.implanted) continue
var/loc_display = "Unknown"
var/mob/living/carbon/M = T.imp_in
if(M.z == 1 && !istype(M.loc, /turf/space))
var/turf/mob_loc = get_turf_loc(M)
loc_display = mob_loc.loc
dat += "ID: [T.id] | Location: [loc_display]<BR>"
dat += "<HR><A href='?src=\ref[src];lock=1'>Lock Console</A>" dat += "<HR><A href='?src=\ref[src];lock=1'>Lock Console</A>"
user << browse(dat, "window=computer;size=400x500") user << browse(dat, "window=computer;size=400x500")
@@ -81,7 +101,7 @@
src.updateDialog() src.updateDialog()
return return
/obj/machinery/computer/explosive/Topic(href, href_list) /obj/machinery/computer/prisoner/Topic(href, href_list)
if(..()) if(..())
return return
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
@@ -90,7 +110,11 @@
var/obj/item/weapon/implant/I = locate(href_list["killimplant"]) var/obj/item/weapon/implant/I = locate(href_list["killimplant"])
var/mob/living/carbon/R = I.imp_in var/mob/living/carbon/R = I.imp_in
if(R) if(R)
var/choice = input("Are you certain you wish to detonate [R.name]?") in list("Confirm", "Abort") var/choice = null
if(istype(usr, /mob/living/silicon))
choice = input("Using this command is in violation of default laws.") in list("Continue", "Abort")
if(choice != "Abort")
choice = input("Are you certain you wish to detonate [R.name]?") in list("Confirm", "Abort")
if(choice == "Confirm") if(choice == "Confirm")
R << "You hear quiet beep from the base of your skull." R << "You hear quiet beep from the base of your skull."
message_admins("\blue [key_name_admin(usr)] gibbed [R.name]") message_admins("\blue [key_name_admin(usr)] gibbed [R.name]")
@@ -112,6 +136,30 @@
R << "\blue you hear a click as the implant disintegrates." R << "\blue you hear a click as the implant disintegrates."
del(I) del(I)
else if (href_list["inject1"])
var/obj/item/weapon/implant/I = locate(href_list["inject1"])
var/mob/living/carbon/R = I.imp_in
I.reagents.trans_to(R, 1)
if(!I.reagents.total_volume)
R << "You hear a faint click from your chest."
del(I)
else if (href_list["inject5"])
var/obj/item/weapon/implant/I = locate(href_list["inject5"])
var/mob/living/carbon/R = I.imp_in
I.reagents.trans_to(R, 5)
if(!I.reagents.total_volume)
R << "You hear a faint click from your chest."
del(I)
else if (href_list["inject10"])
var/obj/item/weapon/implant/I = locate(href_list["inject10"])
var/mob/living/carbon/R = I.imp_in
I.reagents.trans_to(R, 10)
if(!I.reagents.total_volume)
R << "You hear a faint click from your chest."
del(I)
else if (href_list["lock"]) else if (href_list["lock"])
if(src.allowed(usr)) if(src.allowed(usr))
screen = !screen screen = !screen

View File

@@ -91,6 +91,12 @@
cheese_amount = 3 cheese_amount = 3
creates = "/obj/item/weapon/reagent_containers/food/snacks/meatbread" creates = "/obj/item/weapon/reagent_containers/food/snacks/meatbread"
/datum/recipe/xenomeatbread
flour_amount = 3
xenomeat_amount = 3
cheese_amount = 3
creates = "/obj/item/weapon/reagent_containers/food/snacks/xenomeatbread"
/datum/recipe/omelette /datum/recipe/omelette
egg_amount = 2 egg_amount = 2
cheese_amount = 2 cheese_amount = 2
@@ -230,6 +236,7 @@
src.available_recipes += new /datum/recipe/tofubread(src) src.available_recipes += new /datum/recipe/tofubread(src)
src.available_recipes += new /datum/recipe/loadedbakedpotato(src) src.available_recipes += new /datum/recipe/loadedbakedpotato(src)
src.available_recipes += new /datum/recipe/cheesyfries(src) src.available_recipes += new /datum/recipe/cheesyfries(src)
src.available_recipes += new /datum/recipe/xenomeatbread(src)
@@ -328,14 +335,9 @@ obj/machinery/microwave/attackby(var/obj/item/O as obj, var/mob/user as mob)
src.donkpocket_amount++ src.donkpocket_amount++
del(O) del(O)
else if(istype(O, /obj/item/weapon/reagent_containers/food/drinks/milk))
if(src.milk_amount < 5)
for(var/mob/V in viewers(src, null))
V.show_message(text("\blue [user] adds some milk to the microwave."))
src.milk_amount++
del(O)
else if(O.is_open_container()) else if(O.is_open_container())
return return
else else
if(!istype(extra_item, /obj/item)) //Allow one non food item to be added! if(!istype(extra_item, /obj/item)) //Allow one non food item to be added!
user.u_equip(O) user.u_equip(O)
@@ -374,6 +376,9 @@ obj/machinery/microwave/attack_paw(user as mob)
while(src.reagents.get_reagent_amount("milk") > 4) while(src.reagents.get_reagent_amount("milk") > 4)
src.reagents.remove_reagent("milk", 5) src.reagents.remove_reagent("milk", 5)
src.milk_amount++ src.milk_amount++
while(src.reagents.get_reagent_amount("soymilk") > 4)
src.reagents.remove_reagent("soymilk", 5)
src.milk_amount++
while(src.reagents.get_reagent_amount("ketchup") > 4) while(src.reagents.get_reagent_amount("ketchup") > 4)
src.reagents.remove_reagent("ketchup", 5) src.reagents.remove_reagent("ketchup", 5)
src.ketchup_amount++ src.ketchup_amount++
@@ -410,7 +415,7 @@ Please clean it before use!</TT><BR>
<B>Cheese:</B>[src.cheese_amount] cheese wedges<BR> <B>Cheese:</B>[src.cheese_amount] cheese wedges<BR>
<B>Tofu:</B>[src.tofu_amount] tofu chunks<BR> <B>Tofu:</B>[src.tofu_amount] tofu chunks<BR>
<B>Monkey Meat:</B>[src.monkeymeat_amount] slabs of meat<BR> <B>Monkey Meat:</B>[src.monkeymeat_amount] slabs of meat<BR>
<B>Meat Turnovers:</B>[src.donkpocket_amount] turnovers<BR> <B>Turnovers:</B>[src.donkpocket_amount] turnovers<BR>
<B>Milk:</B>[src.milk_amount] cups of milk.<BR> <B>Milk:</B>[src.milk_amount] cups of milk.<BR>
[sauces] [sauces]
<B>Other Meat:</B>[src.humanmeat_amount] slabs of meat<BR> <B>Other Meat:</B>[src.humanmeat_amount] slabs of meat<BR>
@@ -507,6 +512,7 @@ Please clean it before use!</TT><BR>
if(operation == 2) // If dispose was pressed, empty the microwave if(operation == 2) // If dispose was pressed, empty the microwave
src.clear() src.clear()
src.reagents.clear_reagents()
if(src.extra_item != null) if(src.extra_item != null)
src.extra_item.loc = get_turf(src) // Eject the extra item so important shit like the disk can't be destroyed in there src.extra_item.loc = get_turf(src) // Eject the extra item so important shit like the disk can't be destroyed in there
src.extra_item = null src.extra_item = null
@@ -560,44 +566,6 @@ Please clean it before use!</TT><BR>
src.tofu_amount = 0 src.tofu_amount = 0
src.ketchup_amount = 0 src.ketchup_amount = 0
src.berryjuice_amount = 0 src.berryjuice_amount = 0
src.updateUsrDialog()
//src.temp.reagents.clear_reagents() //src.temp.reagents.clear_reagents()
return return
////////////////////////////////////////////////////////////////////////////////////////////////////
//Food slicing RIGHT BELOW*************
////////////////////////////////////////////////////////////////////////////////////////////////////
/obj/item/weapon/reagent_containers/food/snacks/meatbread/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/kitchenknife /*|| /obj/item/weapon/scalpel*/))
W.visible_message(" \red <B>You slice the meatbread! </B>", 1)
new /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice (src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice (src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice (src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice (src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice (src.loc)
del(src)
return
/obj/item/weapon/reagent_containers/food/snacks/tofubread/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/kitchenknife /*|| /obj/item/weapon/scalpel*/))
W.visible_message(" \red <B>You slice the tofubread! </B>", 1)
new /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice (src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice (src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice (src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice (src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice (src.loc)
del(src)
return
/obj/item/weapon/reagent_containers/food/snacks/cheesewheel/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/kitchenknife /* || /obj/item/weapon/scalpel*/))
W.visible_message(" \red <B> You slice the cheese! </B>", 1)
new /obj/item/weapon/reagent_containers/food/snacks/cheesewedge (src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/cheesewedge (src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/cheesewedge (src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/cheesewedge (src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/cheesewedge (src.loc)
del(src)
return

View File

@@ -13,52 +13,43 @@
/obj/secure_closet/meat/New() /obj/secure_closet/meat/New()
..() ..()
sleep(2) sleep(2)
new /obj/item/weapon/reagent_containers/food/snacks/flour(src)
new /obj/item/weapon/reagent_containers/food/snacks/flour(src)
new /obj/item/weapon/reagent_containers/food/snacks/flour(src)
new /obj/item/weapon/reagent_containers/food/snacks/flour(src)
new /obj/item/weapon/reagent_containers/food/snacks/flour(src)
new /obj/item/weapon/reagent_containers/food/snacks/flour(src)
new /obj/item/weapon/reagent_containers/food/snacks/flour(src)
new /obj/item/weapon/reagent_containers/food/snacks/flour(src)
new /obj/item/weapon/reagent_containers/food/snacks/flour(src)
new /obj/item/weapon/reagent_containers/food/snacks/flour(src)
new /obj/item/weapon/reagent_containers/food/snacks/flour(src)
new /obj/item/weapon/reagent_containers/food/snacks/flour(src)
new /obj/item/weapon/reagent_containers/food/snacks/flour(src)
new /obj/item/weapon/reagent_containers/food/snacks/flour(src)
new /obj/item/weapon/reagent_containers/food/snacks/flour(src)
new /obj/item/weapon/reagent_containers/food/snacks/flour(src)
new /obj/item/weapon/tray(src)
new /obj/item/weapon/tray(src)
new /obj/item/weapon/tray(src)
new /obj/item/weapon/tray(src)
new /obj/item/weapon/tray(src)
new /obj/item/weapon/tray(src)
new /obj/item/kitchen/egg_box(src)
new /obj/item/kitchen/egg_box(src)
new /obj/item/weapon/reagent_containers/food/snacks/monkeymeat(src)
new /obj/item/weapon/reagent_containers/food/snacks/monkeymeat(src)
new /obj/item/weapon/kitchenknife(src) new /obj/item/weapon/kitchenknife(src)
new /obj/item/weapon/reagent_containers/food/snacks/flour(src) if(prob(80))
new /obj/item/weapon/reagent_containers/food/snacks/flour(src) new /obj/item/weapon/reagent_containers/food/snacks/monkeymeat(src)
new /obj/item/weapon/reagent_containers/food/snacks/flour(src) new /obj/item/weapon/reagent_containers/food/snacks/monkeymeat(src)
new /obj/item/weapon/reagent_containers/food/snacks/flour(src)
new /obj/item/weapon/reagent_containers/food/snacks/flour(src)
new /obj/item/weapon/reagent_containers/food/snacks/flour(src)
new /obj/item/weapon/reagent_containers/food/snacks/flour(src)
new /obj/item/weapon/reagent_containers/food/snacks/flour(src)
new /obj/item/weapon/reagent_containers/food/snacks/flour(src)
new /obj/item/weapon/reagent_containers/food/snacks/flour(src)
new /obj/item/weapon/reagent_containers/food/snacks/flour(src)
new /obj/item/weapon/reagent_containers/food/snacks/flour(src)
new /obj/item/weapon/reagent_containers/food/snacks/flour(src)
new /obj/item/weapon/reagent_containers/food/snacks/flour(src)
new /obj/item/weapon/reagent_containers/food/snacks/flour(src)
new /obj/item/weapon/reagent_containers/food/snacks/flour(src)
new /obj/item/weapon/tray(src)
new /obj/item/weapon/tray(src)
new /obj/item/weapon/tray(src)
new /obj/item/weapon/tray(src)
new /obj/item/weapon/tray(src)
new /obj/item/weapon/tray(src)
new /obj/item/kitchen/egg_box(src)
new /obj/item/kitchen/egg_box(src)
if(rand(20))
new /obj/item/weapon/reagent_containers/food/snacks/faggot(src)
new /obj/item/weapon/reagent_containers/food/snacks/faggot(src)
new /obj/item/weapon/reagent_containers/food/snacks/faggot(src)
new /obj/item/weapon/reagent_containers/food/snacks/faggot(src)
else else
new /obj/item/weapon/reagent_containers/food/snacks/monkeyburger(src) new /obj/item/weapon/reagent_containers/food/snacks/xenomeat(src)
new /obj/item/weapon/reagent_containers/food/snacks/monkeyburger(src) new /obj/item/weapon/reagent_containers/food/snacks/xenomeat(src)
new /obj/item/weapon/reagent_containers/food/snacks/monkeyburger(src)
new /obj/item/weapon/reagent_containers/food/snacks/monkeyburger(src)
/obj/secure_closet/fridge/New() /obj/secure_closet/fridge/New()
..() ..()
sleep(2) sleep(2)
new /obj/item/weapon/reagent_containers/food/drinks/cola(src)
new /obj/item/weapon/reagent_containers/food/drinks/cola(src)
new /obj/item/weapon/reagent_containers/food/drinks/cola(src)
new /obj/item/weapon/reagent_containers/food/drinks/cola(src)
new /obj/item/weapon/reagent_containers/food/drinks/cola(src)
new /obj/item/weapon/reagent_containers/food/drinks/cola(src)
new /obj/item/weapon/reagent_containers/food/drinks/milk(src)
new /obj/item/weapon/reagent_containers/food/drinks/milk(src) new /obj/item/weapon/reagent_containers/food/drinks/milk(src)
new /obj/item/weapon/reagent_containers/food/drinks/milk(src) new /obj/item/weapon/reagent_containers/food/drinks/milk(src)
new /obj/item/weapon/reagent_containers/food/drinks/milk(src) new /obj/item/weapon/reagent_containers/food/drinks/milk(src)
@@ -69,5 +60,3 @@
new /obj/item/weapon/reagent_containers/food/drinks/soymilk(src) new /obj/item/weapon/reagent_containers/food/drinks/soymilk(src)
new /obj/item/weapon/reagent_containers/food/drinks/soymilk(src) new /obj/item/weapon/reagent_containers/food/drinks/soymilk(src)
new /obj/item/weapon/reagent_containers/food/drinks/soymilk(src) new /obj/item/weapon/reagent_containers/food/drinks/soymilk(src)
new /obj/item/weapon/reagent_containers/food/drinks/soymilk(src)
new /obj/item/weapon/reagent_containers/food/drinks/soymilk(src)

View File

@@ -27,9 +27,15 @@ IMPLANTER
src.name = text("Glass Case- '[]'", t) src.name = text("Glass Case- '[]'", t)
else else
src.name = "Glass Case" src.name = "Glass Case"
else if(istype(I, /obj/item/weapon/reagent_containers/syringe))
if(src.imp.reagents.total_volume >= 10)
user << "\red [src] is full."
else else
if (!( istype(I, /obj/item/weapon/implanter) )) spawn(5)
return I.reagents.trans_to(src.imp, 5)
user << "\blue You inject 5 units of the solution. The syringe now contains [I.reagents.total_volume] units."
else if (istype(I, /obj/item/weapon/implanter))
if (I:imp) if (I:imp)
if ((src.imp || I:imp.implanted)) if ((src.imp || I:imp.implanted))
return return
@@ -61,6 +67,18 @@ IMPLANTER
..() ..()
return return
/obj/item/weapon/implant/chem/New()
..()
var/datum/reagents/R = new/datum/reagents(10)
reagents = R
R.my_atom = src
/obj/item/weapon/implantcase/chem/New()
src.imp = new /obj/item/weapon/implant/chem( src )
..()
return
/obj/item/weapon/implantpad/proc/update() /obj/item/weapon/implantpad/proc/update()
if (src.case) if (src.case)
@@ -174,6 +192,24 @@ No Implant Specifics"}
<i>Direct-Interface</i>- You can use the prisoner management system to transmit short messages directly into the brain of the implanted subject.<BR> <i>Direct-Interface</i>- You can use the prisoner management system to transmit short messages directly into the brain of the implanted subject.<BR>
<i>Safe-break</i>- Can be safely deactivated remotely.<BR> <i>Safe-break</i>- Can be safely deactivated remotely.<BR>
<b>Integrity:</b> Implant will occasionally be degraded by the body's immune system and thus will occasionally malfunction."} <b>Integrity:</b> Implant will occasionally be degraded by the body's immune system and thus will occasionally malfunction."}
else if (istype(src.case.imp, /obj/item/weapon/implant/chem))
dat += {"
<b>Implant Specifications:</b><BR>
<b>Name:</b> Robust Corp MJ-420 Prisoner Management Implant<BR>
<b>Zone:</b> Abdominal Cavity>Abdominal Aorta<BR>
<b>Power Source:</b> Techno-organtic Metabolization System<BR>
<b>Life:</b> Deactivates upon death but remains within the body.<BR>
<b>Important Notes: Due to the system functioning off of nutrients in the implanted subject's body, the subject<BR>
will suffer from an increased appetite.</B><BR>
<HR>
<b>Implant Details:</b><BR>
<b>Function:</b> Contains a small capsule that can contain various chemicals. Upon receiving a specially encoded signal<BR>
the implant releases the chemicals directly into the blood stream.<BR>
<b>Special Features:</b><BR>
<i>Micro-Capsule</i>- Can be loaded with any sort of chemical agent via the common syringe and can hold 25 units.<BR>
Can only be loaded while still in it's original case.<BR>
<b>Integrity:</b> Implant will last so long as the subject is alive. However, if the subject suffers from malnutrition,<BR>
the implant may become unstable and either pre-maturely inject the subject or simply break."}
else else
dat += "Implant ID not in database" dat += "Implant ID not in database"
else else

View File

@@ -1,7 +1,10 @@
/obj/kitchenspike/attack_paw(mob/user as mob) //////Kitchen Spike
/obj/kitchenspike
attack_paw(mob/user as mob)
return src.attack_hand(usr) return src.attack_hand(usr)
/obj/kitchenspike/attackby(obj/item/weapon/grab/G as obj, mob/user as mob) attackby(obj/item/weapon/grab/G as obj, mob/user as mob)
if(!istype(G, /obj/item/weapon/grab)) if(!istype(G, /obj/item/weapon/grab))
return return
if(istype(G.affecting, /mob/living/carbon/monkey)) if(istype(G.affecting, /mob/living/carbon/monkey))
@@ -43,8 +46,12 @@
user << "\red They are too big for the spike, try something smaller!" user << "\red They are too big for the spike, try something smaller!"
return return
// MouseDrop_T(var/atom/movable/C, mob/user)
// if(istype(C, /obj/mob/carbon/monkey)
// else if(istype(C, /obj/mob/carbon/alien) && !istype(C, /mob/living/carbon/alien/larva/metroid))
// else if(istype(C, /obj/livestock/spesscarp
/obj/kitchenspike/attack_hand(mob/user as mob) attack_hand(mob/user as mob)
if(..()) if(..())
return return
if(src.occupied) if(src.occupied)

View File

@@ -30,7 +30,6 @@
var/view_range = 7 //How far it can see. var/view_range = 7 //How far it can see.
var/obj/item/weapon/card/id/anicard //By default, animals can open doors but not any with access restrictions. var/obj/item/weapon/card/id/anicard //By default, animals can open doors but not any with access restrictions.
var/intelligence = null // the intelligence var allows for additional access (by job). var/intelligence = null // the intelligence var allows for additional access (by job).
var/hardness = 0 // determines the prob of a stun
New() //Initializes the livestock's AI and access New() //Initializes the livestock's AI and access
..() ..()
@@ -74,18 +73,27 @@
..() ..()
bullet_act(flag, A as obj) bullet_act(flag, A as obj)
if (flag == PROJECTILE_BULLET) switch(flag)
src.health -= 20 if(PROJECTILE_BULLET)
else if (flag == PROJECTILE_WEAKBULLET) src.health -= 15
src.health -= 4 if(PROJECTILE_TASER)
else if (flag == PROJECTILE_LASER) src.health -= 5
if(PROJECTILE_WEAKBULLET)
src.health -= 8
if(PROJECTILE_LASER)
src.health -= 10 src.health -= 10
if(PROJECTILE_PULSE)
src.health -= 25
if(prob(30))
src.ex_act(1)
if(PROJECTILE_BOLT)
src.health -= 5
healthcheck() healthcheck()
ex_act(severity) ex_act(severity)
switch(severity) switch(severity)
if(1.0) if(1.0)
src.death() src.death(1)
if(2.0) if(2.0)
src.health -= 15 src.health -= 15
healthcheck() healthcheck()
@@ -141,6 +149,24 @@
trg_idle = null trg_idle = null
frustration = 0 frustration = 0
proc/special_extra() //Placeholder for animal specific effects such as cow milk or spess carp breathing.
proc/special_attack() //Placeholder for extra effects from the attack such as the carp's stun.
proc/special_target() //Placeholder for extra targeting protocol
proc/random_movement() //Unlike pick(cardinal), it has a bias towards continuing on in it's
var/temp_move = null // original direction.
switch(roll(1,20)) //50% => Foreward, 20% turn left, 20% turn right, 10% don't move.
if(1 to 10)
temp_move = src.dir
if(11 to 14)
temp_move = turn(src.dir, -90)
if(15 to 18)
temp_move = turn(src.dir, 90)
if(!isnull(temp_move))
step(src,temp_move)
proc/process() //Master AI proc. proc/process() //Master AI proc.
set background = 1 set background = 1
if (!alive) //If it isn't alive, it shouldn't be doing anything. if (!alive) //If it isn't alive, it shouldn't be doing anything.
@@ -178,8 +204,7 @@
for(var/mob/O in viewers(world.view,src)) for(var/mob/O in viewers(world.view,src))
O.show_message("\red <B>[src.target] has been attacked by [src.name]!</B>", 1, "\red You hear someone fall.", 2) O.show_message("\red <B>[src.target] has been attacked by [src.name]!</B>", 1, "\red You hear someone fall.", 2)
target:bruteloss += strength target:bruteloss += strength
if (prob(hardness)) special_attack()
target:stunned = max(target:stunned, (strength / 2))
src.loc = target.loc src.loc = target.loc
set_null() //Break off the attack for a sec. set_null() //Break off the attack for a sec.
step_towards(src,get_step_towards2(src , target)) // Move towards the target. step_towards(src,get_step_towards2(src , target)) // Move towards the target.
@@ -213,13 +238,14 @@
if(state != 2 || !alive || target) return //If you arne't idling, aren't alive, or have a target, you shouldn't be here. if(state != 2 || !alive || target) return //If you arne't idling, aren't alive, or have a target, you shouldn't be here.
if(prob(5) && health < maxhealth) //5% chance of healing every cycle. if(prob(5) && health < maxhealth) //5% chance of healing every cycle.
health++ health++
special_extra()
if(isnull(trg_idle)) //No one to follow? Find one. if(isnull(trg_idle)) //No one to follow? Find one.
for(var/mob/living/O in viewers(world.view,src)) for(var/mob/living/O in viewers(world.view,src))
if(O.mutations == (0 || 16)) //Hates mutants and fatties. if(O.mutations == (0 || 16)) //Hates mutants and fatties.
trg_idle = O trg_idle = O
break break
if(isnull(trg_idle)) //Still no one to follow? Step in a random direction. if(isnull(trg_idle)) //Still no one to follow? Step in a random direction.
step(src,pick(cardinal)) random_movement()
else if(!path_idle.len) //Has a target but no path? else if(!path_idle.len) //Has a target but no path?
if(can_see(src,trg_idle,view_range)) //Can see it? Then move towards it. if(can_see(src,trg_idle,view_range)) //Can see it? Then move towards it.
step_towards(src,get_step_towards2(src , trg_idle)) step_towards(src,get_step_towards2(src , trg_idle))
@@ -227,7 +253,7 @@
path_idle(trg_idle) //Can't see it? Find a path. path_idle(trg_idle) //Can't see it? Find a path.
if(!path_idle.len) //Still no path? Stop trying to follow it. if(!path_idle.len) //Still no path? Stop trying to follow it.
trg_idle = null trg_idle = null
step(src,pick(cardinal)) random_movement()
else else
if(can_see(src,trg_idle,view_range)) //Has a path and can see the target? if(can_see(src,trg_idle,view_range)) //Has a path and can see the target?
if(get_dist(src, trg_idle) >= 2) //If 2 or more squares away, re-find path and move towards it. if(get_dist(src, trg_idle) >= 2) //If 2 or more squares away, re-find path and move towards it.
@@ -253,14 +279,17 @@
path_target = AStar(src.loc, trg.loc, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 250, anicard, null) path_target = AStar(src.loc, trg.loc, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 250, anicard, null)
path_target = reverselist(path_target) path_target = reverselist(path_target)
proc/death() proc/death(var/messy = 0)
if(!alive) return if(!alive) return
src.alive = 0 src.alive = 0
density = 0 density = 0
icon_state = "[initial(icon_state)]_d" icon_state = "[initial(icon_state)]_d"
set_null() set_null()
if(!messy)
for(var/mob/O in hearers(src, null)) for(var/mob/O in hearers(src, null))
O.show_message("\red <B>[src]'s eyes glass over!</B>", 1) O.show_message("\red <B>[src]'s eyes glass over!</B>", 1)
else
del(src)
proc/healthcheck() proc/healthcheck()
if (src.health <= 0) if (src.health <= 0)
@@ -275,6 +304,18 @@
strength = 5 strength = 5
cycle_pause = 15 cycle_pause = 15
patience = 25 patience = 25
var/obj/item/weapon/reagent_containers/food/snacks/egg_holder
special_extra()
if(prob(5))
for(var/mob/O in hearers(src, null))
O << "\green Chick: Cluck."
src.egg_holder = new /obj/item/weapon/reagent_containers/food/snacks/egg(src)
src.egg_holder.loc = src.loc
src.egg_holder = null
for(var/mob/living/carbon/human/V in viewers(world.view,src))
if(V.mind.special_role == "wizard")
for(var/mob/H in hearers(src, null))
H << "\green Chick clucks in an angry manner at [V.name]."
/obj/livestock/spesscarp /obj/livestock/spesscarp
name = "Spess Carp" name = "Spess Carp"
@@ -287,12 +328,63 @@
cycle_pause = 10 cycle_pause = 10
patience = 25 patience = 25
view_range = 8 view_range = 8
hardness = 20 var/stun_chance = 20 // determines the prob of a stun
special_attack()
if (prob(stun_chance))
target:stunned = max(target:stunned, (strength / 2))
/obj/livestock/spesscarp/elite /obj/livestock/spesscarp/elite
desc = "Oh shit, you're really fucked now. It has an evil gleam in it's eye." desc = "Oh shit, you're really fucked now. It has an evil gleam in it's eye."
health = 50 health = 50
maxhealth = 50 maxhealth = 50
view_range = 14 view_range = 14
hardness = 100 stun_chance = 100
intelligence = "Assistant" intelligence = "Assistant"
/obj/livestock/cow
name = "Pigmy Cow"
desc = "That's not my cow!"
icon_state = "cow"
health = 100
maxhealth = 100
strength = 20
cycle_pause = 20
patience = 50
view_range = 10
special_extra()
if(prob(20))
for(var/mob/O in hearers(src, null))
O << "\green Cow: Moo."
src.reagents.add_reagent("milk", 1)
if(src.reagents.get_reagent_amount("milk") >= 100)
gib()
examine()
..()
switch(src.reagents.get_reagent_amount("milk"))
if(0 to 10)
usr << text("\red The cow looks content.")
if(11 to 80)
usr << text("\red The cow looks uncomfortable.")
if(81 to INFINITY)
usr << text("\red The cow looks as if it could burst at any minute!")
proc/gib() //Will move this to a generic livestock proc once I get some gib animations for the others -- Darem.
var/atom/movable/overlay/animation = null
src.icon = null
src.invisibility = 101
animation = new(src.loc)
animation.icon = 'livestock.dmi'
animation.icon_state = "blank"
animation.master = src
flick("cow_g", animation)
new /obj/decal/cleanable/blood(src)
new /obj/item/weapon/reagent_containers/food/snacks/monkeymeat(src)
new /obj/item/weapon/reagent_containers/food/snacks/monkeymeat(src)
new /obj/item/weapon/reagent_containers/food/snacks/monkeymeat(src)
for (var/obj/I in src) //Not the best way to do this but it allows for pinata style animals as well.
I.loc = src.loc
sleep(11)
src.death(1)
del(animation)
return

View File

@@ -80,13 +80,13 @@
..() ..()
return return
/obj/item/weapon/storage/explosiveimp_kit/New() /obj/item/weapon/storage/chemimp_kit/New()
new /obj/item/weapon/implantcase/explosive( src ) new /obj/item/weapon/implantcase/chem( src )
new /obj/item/weapon/implantcase/explosive( src ) new /obj/item/weapon/implantcase/chem( src )
new /obj/item/weapon/implantcase/explosive( src ) new /obj/item/weapon/implantcase/chem( src )
new /obj/item/weapon/implantcase/explosive( src ) new /obj/item/weapon/implantcase/chem( src )
new /obj/item/weapon/implantcase/explosive( src ) new /obj/item/weapon/implantcase/chem( src )
new /obj/item/weapon/implanter( src ) new /obj/item/weapon/implanter( src )
new /obj/item/weapon/implantpad( src ) new /obj/item/weapon/implantpad( src )
..() ..()

View File

@@ -1165,8 +1165,13 @@ var/showadminmessages = 1
alien_infestation() alien_infestation()
message_admins("[key_name_admin(usr)] has spawned aliens", 1) message_admins("[key_name_admin(usr)] has spawned aliens", 1)
if("carp") if("carp")
message_admins("[key_name_admin(usr)] has spawned carp", 1) var/choice = input("You sure you want to spawn carp?") in list("Badmin", "Cancel")
if(choice == "Badmin")
message_admins("[key_name_admin(usr)] has spawned carp.", 1)
carp_migration() carp_migration()
if("radiation")
message_admins("[key_name_admin(usr)] has has irradiated the station", 1)
high_radiation_event()
if("prison_break") if("prison_break")
message_admins("[key_name_admin(usr)] has allowed a prison break", 1) message_admins("[key_name_admin(usr)] has allowed a prison break", 1)
prison_break() prison_break()
@@ -1613,6 +1618,18 @@ var/showadminmessages = 1
<BR>"} <BR>"}
if(lvl > 2) if(lvl > 2)
dat += {" dat += {"
<B>'Random' Events</B><BR>
<BR>
<A href='?src=\ref[src];secretsfun=wave'>Spawn a wave of meteors</A><BR>
<A href='?src=\ref[src];secretsfun=gravanomalies'>Spawn a gravitational anomaly (Untested)</A><BR>
<A href='?src=\ref[src];secretsfun=timeanomalies'>Spawn wormholes (Untested)</A><BR>
<A href='?src=\ref[src];secretsfun=goblob'>Spawn magma(Untested)</A><BR>
<A href='?src=\ref[src];secretsfun=aliens'>Trigger an Alien infestation</A><BR>
<A href='?src=\ref[src];secretsfun=carp'>Trigger an Carp migration</A><BR>
<A href='?src=\ref[src];secretsfun=radiation'>Irradiate the station</A><BR>
<A href='?src=\ref[src];secretsfun=prison_break'>Trigger a Prison Break</A><BR>
<A href='?src=\ref[src];secretsfun=virus'>Trigger a Virus Outbreak</A><BR>
<BR>
<B>Fun Secrets</B><BR> <B>Fun Secrets</B><BR>
<BR> <BR>
<A href='?src=\ref[src];secretsfun=sec_clothes'>Remove 'internal' clothing</A><BR> <A href='?src=\ref[src];secretsfun=sec_clothes'>Remove 'internal' clothing</A><BR>
@@ -1627,14 +1644,6 @@ var/showadminmessages = 1
<A href='?src=\ref[src];secretsfun=deactivateprison'>Return Prison Shuttle</A><BR> <A href='?src=\ref[src];secretsfun=deactivateprison'>Return Prison Shuttle</A><BR>
<A href='?src=\ref[src];secretsfun=prisonwarp'>Warp all Players to Prison</A><BR> <A href='?src=\ref[src];secretsfun=prisonwarp'>Warp all Players to Prison</A><BR>
<A href='?src=\ref[src];secretsfun=traitor_all'>Everyone is the traitor</A><BR> <A href='?src=\ref[src];secretsfun=traitor_all'>Everyone is the traitor</A><BR>
<A href='?src=\ref[src];secretsfun=wave'>Spawn a wave of meteors</A><BR>
<A href='?src=\ref[src];secretsfun=gravanomalies'>Spawn a gravitational anomaly (Untested)</A><BR>
<A href='?src=\ref[src];secretsfun=timeanomalies'>Spawn wormholes (Untested)</A><BR>
<A href='?src=\ref[src];secretsfun=goblob'>Spawn magma(Untested)</A><BR>
<A href='?src=\ref[src];secretsfun=aliens'>Trigger an Alien infestation</A><BR>
<A href='?src=\ref[src];secretsfun=carp'>Trigger an Carp migration</A><BR>
<A href='?src=\ref[src];secretsfun=prison_break'>Trigger a Prison Break</A><BR>
<A href='?src=\ref[src];secretsfun=virus'>Trigger a Virus Outbreak</A><BR>
<A href='?src=\ref[src];secretsfun=flicklights'>Ghost Mode</A><BR> <A href='?src=\ref[src];secretsfun=flicklights'>Ghost Mode</A><BR>
<A href='?src=\ref[src];secretsfun=cleanexcrement'>Remove all urine/poo from station</A><BR> <A href='?src=\ref[src];secretsfun=cleanexcrement'>Remove all urine/poo from station</A><BR>
<A href='?src=\ref[src];secretsfun=retardify'>Make all players retarded</A><BR> <A href='?src=\ref[src];secretsfun=retardify'>Make all players retarded</A><BR>
@@ -2152,7 +2161,7 @@ var/showadminmessages = 1
/obj/admins/proc/spawn_atom(var/object as text) /obj/admins/proc/spawn_atom(var/object as text)
set category = "Debug" set category = "Debug"
set desc= "(atom path) Spawn an atom" set desc= "(atom path) Spawn an atom"
set name= "Spawn Atom" set name= "Spawn"
if(usr.client.holder.level >= 5) if(usr.client.holder.level >= 5)
var/list/types = typesof(/atom) var/list/types = typesof(/atom)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 23 KiB

File diff suppressed because it is too large Load Diff