Numbers' hydroponics syringe injections:
Now you can put chemical solutions into hydrotrays and plants will react accordingly.
Minihoe for uprooting weeds safely. Added to hydroponics trays.

Changed:
Advanced ProcCall proc, now actually somewhat useful.
Blob expands faster again.
Slight Plant-b-Gone buff against alien weeds.

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@125 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
Skiedrake
2010-09-21 02:55:21 +00:00
parent 6c581cced4
commit d98a8b57c0
6 changed files with 265 additions and 89 deletions

View File

@@ -612,9 +612,9 @@ datum
*/
reaction_obj(var/obj/O, var/volume)
if(istype(O,/obj/plant/vine/))
O:life -= rand(5,30) // Kills vines nicely // Not tested as vines don't work in R41
O:life -= rand(15,35) // Kills vines nicely // Not tested as vines don't work in R41
else if(istype(O,/obj/alien/weeds/))
O:health -= rand(5,25) // Kills alien weeds pretty fast
O:health -= rand(15,35) // Kills alien weeds pretty fast
O:healthcheck()
// Damage that is done to growing plants is separately
// at code/game/machinery/hydroponics at obj/item/hydroponics

View File

@@ -1445,7 +1445,7 @@ Total SMES charging rate should not exceed total power generation rate, or an ov
icon = 'hydroponics.dmi'
name = "Weed Spray"
icon_state = "weedspray"
item_state = "weedspray"
item_state = "spray"
flags = ONBELT|TABLEPASS|OPENCONTAINER|FPRINT|USEDELAY
throwforce = 4
w_class = 2.0
@@ -1459,11 +1459,24 @@ Total SMES charging rate should not exceed total power generation rate, or an ov
icon = 'hydroponics.dmi'
name = "Pest Spray"
icon_state = "pestspray"
item_state = "pestspray"
item_state = "spray"
flags = ONBELT|TABLEPASS|OPENCONTAINER|FPRINT|USEDELAY
throwforce = 4
w_class = 2.0
throw_speed = 2
throw_range = 10
var/toxicity = 4
var/PestKillStr = 2
var/PestKillStr = 2
/obj/item/weapon/minihoe // -- Numbers
name = "Mini hoe"
desc = "Use for removing weeds or scratching your back."
icon = 'weapons.dmi'
icon_state = "hoe"
item_state = "hoe"
flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY
force = 5.0
throwforce = 7.0
w_class = 2.0
m_amt = 50

View File

@@ -52,7 +52,7 @@
return
for(var/dirn in cardinal)
sleep(10) // -- Skie
sleep(3) // -- Skie
var/turf/T = get_step(src, dirn)
if (istype(T.loc, /area/arrival))

View File

@@ -97,8 +97,6 @@ obj/machinery/hydroponics/process()
src.mutate()
else if(prob(30))
src.hardmutate()
else if(prob(10))
src.mutatespecie() // Just testing this here until mutagens are in place
m_count++;
if(src.yieldmod > 0 && src.myseed.yield != -1) // Unharvestable shouldn't be harvested
src.harvest = 1
@@ -127,8 +125,6 @@ obj/machinery/hydroponics/process()
if(src.planted)
if(src.myseed.plant_type == 0) // If a normal plant
src.weedinvasion()
else
src.mutateweed() // Just testing this out okay
else
src.weedinvasion() // Weed invasion into empty tray
src.updateicon()
@@ -201,9 +197,6 @@ obj/machinery/hydroponics/proc/weedinvasion() // If a weed growth is sufficient,
spawn(5) // Wait a while
src.updateicon()
src.visible_message("\red[src] has been overtaken by \blue [src.myseed.plantname]!")
//var/P = new /obj/decal/point(src) Doesn't work :(
//spawn (20)
//del(P)
return
@@ -321,26 +314,24 @@ obj/machinery/hydroponics/proc/mutatespecie() // Mutagent produced a new plant!
obj/machinery/hydroponics/proc/mutateweed() // If the weeds gets the mutagent instead. Mind you, this pretty much destroys the old plant
if ( src.weedlevel > 5 )
del(src.myseed)
switch(rand(100))
if(1 to 33) src.myseed = new /obj/item/seeds/libertymycelium
if(34 to 66) src.myseed = new /obj/item/seeds/angelmycelium
else src.myseed = new /obj/item/seeds/deathnettleseed
src.dead = 0
src.hardmutate()
src.planted = 1
src.age = 0
src.health = src.myseed.endurance
src.lastcycle = world.time
src.harvest = 0
src.weedlevel = 0 // Reset
del(src.myseed)
switch(rand(100))
if(1 to 33) src.myseed = new /obj/item/seeds/libertymycelium
if(34 to 66) src.myseed = new /obj/item/seeds/angelmycelium
else src.myseed = new /obj/item/seeds/deathnettleseed
src.dead = 0
src.hardmutate()
src.planted = 1
src.age = 0
src.health = src.myseed.endurance
src.lastcycle = world.time
src.harvest = 0
src.weedlevel = 0 // Reset
spawn(5) // Wait a while
src.updateicon()
src.visible_message("\red The mutated weeds in [src] spawned a \blue [src.myseed.plantname]!")
spawn(5) // Wait a while
src.updateicon()
src.visible_message("\red The mutated weeds in [src] spawned a \blue [src.myseed.plantname]!")
return
@@ -350,7 +341,7 @@ obj/machinery/hydroponics/proc/plantdies() // OH NOES!!!!! I put this all in one
src.dead = 1
src.harvest = 0
src.updateicon()
//user << "The plant whiters and dies." Fix this
src.visible_message("\red[src] is looking very unhealthy!")
return
@@ -427,24 +418,155 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
playsound(src.loc, 'spray3.ogg', 50, 1, -6)
del(O)
src.updateicon()
// else if ( istype(O, /obj/item/weapon/reagent_containers/glass/bucket)) If injected with vitamins... it should make the health regenerate
// if(src.planted)
// src.health += 5
// src.endurance += 1
// if( src.health > src.myspeed.endurance )
// src.health = src.myseed.endurance
// else if ( istype(O, /obj/item/weapon/reagent_containers/glass/bucket)) If injected with mutagen... not sure how to make the syringe injection work
// if (src.planted)
// switch(rand(100))
// if (100 to 91) src.plantdies()
// if (90 to 81) src.mutatespecie()
// if (80 to 66) src.hardmutate()
// if (65 to 41) src.mutate()
// if (40 to 31) user << "Nothing happens..."
// if (30 to 21) src.mutateweed()
// if (20 to 11) src.mutatepest()
// if (10 to 1) src.plantdies()
// else user << "Nothing happens..."
else if ( istype(O, /obj/item/weapon/reagent_containers/syringe)) // Syringe stuff
var/obj/item/weapon/reagent_containers/syringe/S = O
if (src.planted)
if (S.mode == "i")
user << "\red You inject the [src.myseed.plantname] with a chemical solution."
// There needs to be a good amount of mutagen to actually work
if(S.reagents.has_reagent("mutagen", 5))
switch(rand(100))
if (91 to 100) src.plantdies()
if (81 to 90) src.mutatespecie()
if (66 to 80) src.hardmutate()
if (41 to 65) src.mutate()
if (21 to 41) user << "Nothing happens..."
if (11 to 20) src.mutateweed()
if (1 to 10) src.mutatepest()
else user << "Nothing happens..."
// Antitoxin binds shit pretty well. So the tox goes significantly down
if(S.reagents.has_reagent("anti_toxin", 1))
src.toxic -= round(S.reagents.get_reagent_amount("anti_toxin")*1.25)
// NIGGA, YOU JUST WENT ON FULL RETARD.
if(S.reagents.has_reagent("toxin", 1))
src.toxic += round(S.reagents.get_reagent_amount("toxin")*2.5)
// Milk contains some sugars as well as water. Makes for shitty nutrient, but hey
if(S.reagents.has_reagent("milk", 1))
src.health += round(S.reagents.get_reagent_amount("milk")*0.1)
src.nutrilevel += round(S.reagents.get_reagent_amount("milk")*0.04)
src.waterlevel += round(S.reagents.get_reagent_amount("milk")*0.8)
// Beer is a chemical composition of alcohol and various other things. It's a shitty nutrient but hey, it's still one. Also alcohol is bad, mmmkay?
if(S.reagents.has_reagent("beer", 1))
src.health =- round(S.reagents.get_reagent_amount("beer")*0.05)
src.nutrilevel += round(S.reagents.get_reagent_amount("beer")*0.04)
src.waterlevel += round(S.reagents.get_reagent_amount("beer")*0.7)
// You're an idiot of thinking that one of the most corrosive and deadly gasses would be beneficial
if(S.reagents.has_reagent("fluorine", 1))
src.health -= round(S.reagents.get_reagent_amount("fluorine")*2)
src.toxic += round(S.reagents.get_reagent_amount("flourine")*2.5)
src.waterlevel -= round(S.reagents.get_reagent_amount("flourine")*0.5)
src.weedlevel -= rand(1,4)
// You're an idiot of thinking that one of the most corrosive and deadly gasses would be beneficial
if(S.reagents.has_reagent("chlorine", 1))
src.health -= round(S.reagents.get_reagent_amount("chlorine")*1)
src.toxic += round(S.reagents.get_reagent_amount("chlorine")*1.5)
src.waterlevel -= round(S.reagents.get_reagent_amount("chlorine")*0.5)
src.weedlevel -= rand(1,3)
// White Phosphorous + water -> phosphoric acid. That's not a good thing really. Phosphoric salts are beneficial though. And even if the plan suffers, in the long run the tray gets some nutrients. The benefit isn't worth that much.
if(S.reagents.has_reagent("phosphorus", 1))
src.health -= round(S.reagents.get_reagent_amount("phosphorus")*0.75)
src.nutrilevel += round(S.reagents.get_reagent_amount("phosphorus")*0.08)
src.waterlevel -= round(S.reagents.get_reagent_amount("phosphorus")*0.5)
src.weedlevel -= rand(1,2)
// Eh whatever. It shouldn't be possible, but still
if(S.reagents.has_reagent("sugar", 1))
src.nutrilevel += round(S.reagents.get_reagent_amount("sugar")*0.09)
if(S.reagents.has_reagent("water", 1))
src.waterlevel += round(S.reagents.get_reagent_amount("water")*0.5)
// Man, you guys are retards
if(S.reagents.has_reagent("acid", 1))
src.health -= round(S.reagents.get_reagent_amount("acid")*1)
src.toxic += round(S.reagents.get_reagent_amount("acid")*1.5)
src.weedlevel -= rand(1,2)
// SERIOUSLY
if(S.reagents.has_reagent("pacid", 1))
src.health -= round(S.reagents.get_reagent_amount("pacid")*2)
src.toxic += round(S.reagents.get_reagent_amount("pacid")*3)
src.weedlevel -= rand(1,4)
// Plant-B-Gone is just as bad
if(S.reagents.has_reagent("plantbgone", 1))
src.health -= round(S.reagents.get_reagent_amount("plantbgone")*2)
src.toxic -= round(S.reagents.get_reagent_amount("plantbgone")*3)
src.weedlevel -= rand(4,8)
// Healing
if(S.reagents.has_reagent("cryoxadone", 1))
src.health += round(S.reagents.get_reagent_amount("cryoxadone")*0.5)
// FINALLY IMPLEMENTED
if(S.reagents.has_reagent("ammonia", 1))
src.health += round(S.reagents.get_reagent_amount("ammonia")*0.1)
src.nutrilevel += round(S.reagents.get_reagent_amount("ammonia")*0.05)
// FINALLY IMPLEMENTED
if(S.reagents.has_reagent("diethylamine", 1))
src.health += round(S.reagents.get_reagent_amount("diethylamine")*0.2)
src.nutrilevel += round(S.reagents.get_reagent_amount("diethylamine")*0.1)
// Poor man's mutagen.
if(S.reagents.has_reagent("radium", 1))
src.health -= round(S.reagents.get_reagent_amount("radium")*1.5)
src.toxic -= round(S.reagents.get_reagent_amount("radium")*2)
if(S.reagents.has_reagent("radium", 10))
switch(rand(100))
if (91 to 100) src.plantdies()
if (81 to 90) src.mutatespecie()
if (66 to 80) src.hardmutate()
if (41 to 65) src.mutate()
if (21 to 41) user << "Nothing happens..."
if (11 to 20) src.mutateweed()
if (1 to 10) src.mutatepest()
else user << "Nothing happens..."
S.reagents.clear_reagents()
if (src.weedlevel < 0 ) // Make sure it won't go overoboard
src.weedlevel = 0
if (src.health < 0 ) // Make sure it won't go overoboard
src.health = 0
if (src.waterlevel > 100 ) // Make sure it won't go overoboard
src.waterlevel = 100
if (src.waterlevel < 0 ) // Make sure it won't go overoboard
src.waterlevel = 0
if (src.toxic < 0 ) // Make sure it won't go overoboard
src.toxic = 0
if (src.toxic > 100 ) // Make sure it won't go overoboard
src.toxic = 100
else
user << "You can't get any extract out of this plant."
else
user << "There's nothing to apply the solution into."
else if ( istype(O, /obj/item/seeds/) )
if(!src.planted)
@@ -461,6 +583,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
user.client.screen -= O
O.dropped(user)
src.updateicon()
else
user << "\red The tray already has a seed in it!"
@@ -503,9 +626,19 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
src.toxic += 5 // Oops
src.visible_message("\red <B>\The [src] has been sprayed with \the [O][(user ? " by [user]." : ".")]")
playsound(src.loc, 'spray3.ogg', 50, 1, -6)
else
user << "\red Nothing is planted in the hydrotray!"
else if (istype(O, /obj/item/weapon/minihoe)) // The minihoe
//var/deweeding
if(src.weedlevel > 0)
user.visible_message("\red [user] starts uprooting the weeds.", "\red You start removing some weeds from the tray.")
sleep(10)
if(src.weedlevel > 1)
src.weedlevel -= rand(1,2) // Kill kill kill
else
src.weedlevel = 0
user << "Success!"
else
user << "\red This plot is completely devoid of weeds. It doesn't need uprooting."
return

View File

@@ -121,10 +121,13 @@
..()
new /obj/item/weapon/plantbgone(src)
new /obj/item/weapon/plantbgone(src)
new /obj/item/weapon/plantbgone(src)
new /obj/item/weapon/minihoe(src)
new /obj/item/weapon/weedspray(src)
new /obj/item/weapon/weedspray(src)
new /obj/item/weapon/pestspray(src)
new /obj/item/weapon/pestspray(src)
new /obj/item/weapon/pestspray(src)
/obj/crate/New()
..()

View File

@@ -18,6 +18,17 @@
alert("Coders only baby")
return
/* 21st Sept 2010
Updated by Skie -- Still not perfect but better!
Stuff you can't do:
Call proc /mob/proc/make_dizzy() for some player
Because if you select a player mob as owner it tries to do the proc for
/mob/living/carbon/human/ instead. And that gives a run-time error.
But you can call procs that are of type /mob/living/carbon/human/proc/ for that player.
*/
/client/proc/callproc()
set category = "Debug"
set name = "Advanced ProcCall"
@@ -25,69 +36,85 @@
src << "Only administrators may use this command."
return
var/target = null
var/arguments = null
var/lst[] // List reference
lst = new/list() // Make the list
var/returnval = null
//var/class = null
var/class = null
switch(alert("Proc owned by obj?",,"Yes","No"))
switch(alert("Proc owned by something?",,"Yes","No"))
if("Yes")
target = input("Enter target:","Target",null) as obj|mob|area|turf in world
class = input("Proc owned by...","Owner") in list("Obj","Mob","Area or Turf","Client","CANCEL ABORT STOP")
switch(class)
if("CANCEL ABORT STOP")
return
if("Obj")
target = input("Enter target:","Target",usr) as obj in world
if("Mob")
target = input("Enter target:","Target",usr) as mob in world
if("Area or Turf")
target = input("Enter target:","Target",usr.loc) as area|turf in world
if("Client")
var/list/keys = list()
for(var/mob/M in world)
keys += M.client
target = input("Please, select a player!", "Selection", null, null) as null|anything in keys
if("No")
target = null
var/procname = input("Procpath","path:", null)
var/procname = input("Proc path, eg: /proc/fake_blood","Path:", null)
if (target)
arguments = input("Arguments","Arguments:", null)
usr << "\blue Calling '[procname]' with arguments '[arguments]' on '[target]'"
returnval = call(target,procname)(arguments)
else
arguments = input("Arguments","Arguments:", null)
usr << "\blue Calling '[procname]' with arguments '[arguments]'"
returnval = call(procname)(arguments)
usr << "\blue Proc returned: [returnval ? returnval : "null"]"
/*
var/argnum = input("Number of arguments:","Number",null) as num
var/argnum = input("Number of arguments","Number:",0) as num
lst.len = argnum // Expand to right length
var/i
for(i=0, i<argnum, i++)
for(i=1, i<argnum+1, i++) // Lists indexed from 1 forwards in byond
class = input("Type of Argument #[i]","Variable Type", default) in list("text","num","type","reference","mob reference", "icon","file","cancel")
// Make a list with each index containing one variable, to be given to the proc
class = input("What kind of variable?","Variable Type") in list("text","num","type","reference","mob reference","icon","file","client","mob's area","CANCEL")
switch(class)
if("cancel")
if("CANCEL")
return
if("text")
var/"argu"+i = input("Enter new text:","Text",null) as text
lst[i] = input("Enter new text:","Text",null) as text
if("num")
O.vars[variable] = input("Enter new number:","Num",\
O.vars[variable]) as num
lst[i] = input("Enter new number:","Num",0) as num
if("type")
O.vars[variable] = input("Enter type:","Type",O.vars[variable]) \
in typesof(/obj,/mob,/area,/turf)
lst[i] = input("Enter type:","Type") in typesof(/obj,/mob,/area,/turf)
if("reference")
O.vars[variable] = input("Select reference:","Reference",\
O.vars[variable]) as mob|obj|turf|area in world
lst[i] = input("Select reference:","Reference",src) as mob|obj|turf|area in world
if("mob reference")
O.vars[variable] = input("Select reference:","Reference",\
O.vars[variable]) as mob in world
lst[i] = input("Select reference:","Reference",usr) as mob in world
if("file")
O.vars[variable] = input("Pick file:","File",O.vars[variable]) \
as file
lst[i] = input("Pick file:","File") as file
if("icon")
O.vars[variable] = input("Pick icon:","Icon",O.vars[variable]) \
as icon
spawn(0)
call(T,wproc)(warg)
*/
lst[i] = input("Pick icon:","Icon") as icon
if("client")
var/list/keys = list()
for(var/mob/M in world)
keys += M.client
lst[i] = input("Please, select a player!", "Selection", null, null) as null|anything in keys
if("mob's area")
var/mob/temp = input("Select mob", "Selection", usr) as mob in world
lst[i] = temp.loc
spawn(0)
if(target)
returnval = call(target,procname)(arglist(lst)) // Pass the lst as an argument list to the proc
else
returnval = call(procname)(arglist(lst)) // Pass the lst as an argument list to the proc
usr << "\blue Proc returned: [returnval ? returnval : "null"]"