Bleeding edgy refresh (#303)

* not code stuff

* other things

* global vars, defines, helpers

* onclick hud stuff, orphans, world.dm

* controllers and datums

* game folder

* everything not client/mobs in modules

* client folder

* stage 1 mob stuff

* simple animal things

* silicons

* carbon things

* ayylmaos and monkeys

* hyoomahn

* icons n shit

* sprite fixes

* compile fixes

* some fixes I cherrypicked.

* qdel fixes

* forgot brain refractors
This commit is contained in:
Poojawa
2017-03-21 11:44:10 -05:00
committed by GitHub
parent 099a6c8764
commit f67e9f6d87
1476 changed files with 344416 additions and 40694 deletions
+13 -13
View File
@@ -123,22 +123,22 @@
..()
if(!queen_bee)
user << "<span class='warning'>There is no queen bee! There won't bee any honeycomb without a queen!</span>"
to_chat(user, "<span class='warning'>There is no queen bee! There won't bee any honeycomb without a queen!</span>")
var/half_bee = get_max_bees()*0.5
if(half_bee && (bees.len >= half_bee))
user << "<span class='notice'>This place is aBUZZ with activity... there are lots of bees!</span>"
to_chat(user, "<span class='notice'>This place is aBUZZ with activity... there are lots of bees!</span>")
user << "<span class='notice'>[bee_resources]/100 resource supply.</span>"
user << "<span class='notice'>[bee_resources]% towards a new honeycomb.</span>"
user << "<span class='notice'>[bee_resources*2]% towards a new bee.</span>"
to_chat(user, "<span class='notice'>[bee_resources]/100 resource supply.</span>")
to_chat(user, "<span class='notice'>[bee_resources]% towards a new honeycomb.</span>")
to_chat(user, "<span class='notice'>[bee_resources*2]% towards a new bee.</span>")
if(honeycombs.len)
var/plural = honeycombs.len > 1
user << "<span class='notice'>There [plural? "are" : "is"] [honeycombs.len] uncollected honeycomb[plural ? "s":""] in the apiary.</span>"
to_chat(user, "<span class='notice'>There [plural? "are" : "is"] [honeycombs.len] uncollected honeycomb[plural ? "s":""] in the apiary.</span>")
if(honeycombs.len >= get_max_honeycomb())
user << "<span class='warning'>there's no room for more honeycomb!</span>"
to_chat(user, "<span class='warning'>there's no room for more honeycomb!</span>")
/obj/structure/beebox/attackby(obj/item/I, mob/user, params)
@@ -150,7 +150,7 @@
return
honey_frames += HF
else
user << "<span class='warning'>There's no room for any more frames in the apiary!</span>"
to_chat(user, "<span class='warning'>There's no room for any more frames in the apiary!</span>")
if(istype(I, /obj/item/weapon/wrench))
if(default_unfasten_wrench(user, I, time = 20))
@@ -158,7 +158,7 @@
if(istype(I, /obj/item/queen_bee))
if(queen_bee)
user << "<span class='warning'>This hive already has a queen!</span>"
to_chat(user, "<span class='warning'>This hive already has a queen!</span>")
return
var/obj/item/queen_bee/qb = I
@@ -181,10 +181,10 @@
B.loc = get_turf(src)
relocated++
if(relocated)
user << "<span class='warning'>This queen has a different reagent to some of the bees who live here, those bees will not return to this apiary!</span>"
to_chat(user, "<span class='warning'>This queen has a different reagent to some of the bees who live here, those bees will not return to this apiary!</span>")
else
user << "<span class='warning'>The queen bee disappeared! Disappearing bees have been in the news lately...</span>"
to_chat(user, "<span class='warning'>The queen bee disappeared! Disappearing bees have been in the news lately...</span>")
qdel(qb)
@@ -210,7 +210,7 @@
switch(option)
if("Remove a Honey Frame")
if(!honey_frames.len)
user << "<span class='warning'>There are no honey frames to remove!</span>"
to_chat(user, "<span class='warning'>There are no honey frames to remove!</span>")
return
var/obj/item/honey_frame/HF = pick_n_take(honey_frames)
@@ -233,7 +233,7 @@
if("Remove the Queen Bee")
if(!queen_bee || queen_bee.loc != src)
user << "<span class='warning'>There is no queen bee to remove!</span>"
to_chat(user, "<span class='warning'>There is no queen bee to remove!</span>")
return
var/obj/item/queen_bee/QB = new()
queen_bee.loc = QB
+12 -12
View File
@@ -85,7 +85,7 @@
return ..()
if(processing)
user << "<span class='warning'>The biogenerator is currently processing.</span>"
to_chat(user, "<span class='warning'>The biogenerator is currently processing.</span>")
return
if(default_deconstruction_screwdriver(user, "biogen-empty-o", "biogen-empty", O))
@@ -106,17 +106,17 @@
. = 1 //no afterattack
if(!panel_open)
if(beaker)
user << "<span class='warning'>A container is already loaded into the machine.</span>"
to_chat(user, "<span class='warning'>A container is already loaded into the machine.</span>")
else
if(!user.drop_item())
return
O.loc = src
beaker = O
user << "<span class='notice'>You add the container to the machine.</span>"
to_chat(user, "<span class='notice'>You add the container to the machine.</span>")
update_icon()
updateUsrDialog()
else
user << "<span class='warning'>Close the maintenance panel first.</span>"
to_chat(user, "<span class='warning'>Close the maintenance panel first.</span>")
return
else if(istype(O, /obj/item/weapon/storage/bag/plants))
@@ -125,7 +125,7 @@
for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in contents)
i++
if(i >= max_items)
user << "<span class='warning'>The biogenerator is already full! Activate it.</span>"
to_chat(user, "<span class='warning'>The biogenerator is already full! Activate it.</span>")
else
for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in PB.contents)
if(i >= max_items)
@@ -133,11 +133,11 @@
PB.remove_from_storage(G, src)
i++
if(i<max_items)
user << "<span class='info'>You empty the plant bag into the biogenerator.</span>"
to_chat(user, "<span class='info'>You empty the plant bag into the biogenerator.</span>")
else if(PB.contents.len == 0)
user << "<span class='info'>You empty the plant bag into the biogenerator, filling it to its capacity.</span>"
to_chat(user, "<span class='info'>You empty the plant bag into the biogenerator, filling it to its capacity.</span>")
else
user << "<span class='info'>You fill the biogenerator to its capacity.</span>"
to_chat(user, "<span class='info'>You fill the biogenerator to its capacity.</span>")
return 1 //no afterattack
else if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown))
@@ -145,10 +145,10 @@
for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in contents)
i++
if(i >= max_items)
user << "<span class='warning'>The biogenerator is full! Activate it.</span>"
to_chat(user, "<span class='warning'>The biogenerator is full! Activate it.</span>")
else
if(user.transferItemToLoc(O, src))
user << "<span class='info'>You put [O.name] in [src.name]</span>"
to_chat(user, "<span class='info'>You put [O.name] in [src.name]</span>")
return 1 //no afterattack
else if (istype(O, /obj/item/weapon/disk/design_disk))
user.visible_message("[user] begins to load \the [O] in \the [src]...",
@@ -163,7 +163,7 @@
processing = 0
return 1
else
user << "<span class='warning'>You cannot put this in [src.name]!</span>"
to_chat(user, "<span class='warning'>You cannot put this in [src.name]!</span>")
/obj/machinery/biogenerator/interact(mob/user)
if(stat & BROKEN || panel_open)
@@ -227,7 +227,7 @@
if (src.stat != 0) //NOPOWER etc
return
if(processing)
usr << "<span class='warning'>The biogenerator is in the process of working.</span>"
to_chat(usr, "<span class='warning'>The biogenerator is in the process of working.</span>")
return
var/S = 0
for(var/obj/item/weapon/reagent_containers/food/snacks/grown/I in contents)
+94 -43
View File
@@ -15,11 +15,12 @@
var/datum/plant_gene/target
var/operation = ""
var/rating = 0
var/max_extract_pot = 50
// The cap on potency gene extraction.
// This number is for T1, each upgraded part adds 5% for a tech level above T1.
// At T4, it reaches 95%.
var/max_potency = 50 // See RefreshParts() for how these work
var/max_yield = 2
var/min_production = 12
var/max_endurance = 10 // IMPT: ALSO AFFECTS LIFESPAN
var/max_wchance = 0
var/max_wrate = 0
/obj/machinery/plantgenes/New()
..()
@@ -36,15 +37,36 @@
/obj/item/weapon/stock_parts/console_screen = 1,
/obj/item/weapon/stock_parts/scanning_module = 1)
/obj/machinery/plantgenes/RefreshParts()
rating = 0
for(var/I in component_parts)
if(istype(I, /obj/item/weapon/stock_parts))
var/obj/item/weapon/stock_parts/S = I
rating += S.rating-1
else if(istype(I, /obj/item/weapon/circuitboard/machine/plantgenes/vault))
rating += 5 // Having original alien board is +25%
max_extract_pot = initial(max_extract_pot) + rating*5
/obj/machinery/plantgenes/RefreshParts() // Comments represent the max you can set per tier, respectively. seeds.dm [219] clamps these for us but we don't want to mislead the viewer.
for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
if(M.rating > 3)
max_potency = 95
else
max_potency = initial(max_potency) + (M.rating**3) // 53,59,77,95 Clamps at 100
max_yield = initial(max_yield) + (M.rating*2) // 4,6,8,10 Clamps at 10
for(var/obj/item/weapon/stock_parts/scanning_module/SM in component_parts)
if(SM.rating > 3) //If you create t5 parts I'm a step ahead mwahahaha!
min_production = 1
else
min_production = 12 - (SM.rating * 3) //9,6,3,1. Requires if to avoid going below clamp [1]
max_endurance = initial(max_endurance) + (SM.rating * 25) // 35,60,85,100 Clamps at 10min 100max
for(var/obj/item/weapon/stock_parts/micro_laser/ML in component_parts)
var/wratemod = ML.rating*2.5
max_wrate = Floor(wratemod,1) // 2,5,7,10 Clamps at 10
max_wchance = ML.rating*16+3 // 19,35,51,67 Clamps at 67
for(var/obj/item/weapon/circuitboard/machine/plantgenes/vaultcheck in component_parts)
if(istype(vaultcheck, /obj/item/weapon/circuitboard/machine/plantgenes/vault)) // DUMB BOTANY TUTS
max_potency = 100
max_yield = 10
min_production = 1
max_endurance = 100
max_wchance = 67
max_wrate = 10
/obj/machinery/plantgenes/update_icon()
..()
@@ -71,23 +93,23 @@
if(istype(I, /obj/item/seeds))
if(seed)
user << "<span class='warning'>A sample is already loaded into the machine!</span>"
to_chat(user, "<span class='warning'>A sample is already loaded into the machine!</span>")
else
if(!user.drop_item())
return
insert_seed(I)
user << "<span class='notice'>You add [I] to the machine.</span>"
to_chat(user, "<span class='notice'>You add [I] to the machine.</span>")
interact(user)
return
else if(istype(I, /obj/item/weapon/disk/plantgene))
if(disk)
user << "<span class='warning'>A data disk is already loaded into the machine!</span>"
to_chat(user, "<span class='warning'>A data disk is already loaded into the machine!</span>")
else
if(!user.drop_item())
return
disk = I
disk.loc = src
user << "<span class='notice'>You add [I] to the machine.</span>"
to_chat(user, "<span class='notice'>You add [I] to the machine.</span>")
interact(user)
else
..()
@@ -130,11 +152,37 @@
if("extract")
dat += "<span class='highlight'>[target.get_name()]</span> gene from \the <span class='highlight'>[seed]</span>?<br>"
dat += "<span class='bad'>The sample will be destroyed in process!</span>"
if(istype(target, /datum/plant_gene/core/potency))
if(istype(target, /datum/plant_gene/core))
var/datum/plant_gene/core/gene = target
if(gene.value > max_extract_pot)
dat += "<br><br>This device's extraction capabilities are currently limited to [max_extract_pot] potency. "
dat += "Target gene will be degraded to [max_extract_pot] potency on extraction."
if(istype(target, /datum/plant_gene/core/potency))
if(gene.value > max_potency)
dat += "<br><br>This device's extraction capabilities are currently limited to <span class='highlight'>[max_potency]</span> potency. "
dat += "Target gene will be degraded to <span class='highlight'>[max_potency]</span> potency on extraction."
else if(istype(target, /datum/plant_gene/core/lifespan))
if(gene.value > max_endurance)
dat += "<br><br>This device's extraction capabilities are currently limited to <span class='highlight'>[max_endurance]</span> lifespan. "
dat += "Target gene will be degraded to <span class='highlight'>[max_endurance]</span> Lifespan on extraction."
else if(istype(target, /datum/plant_gene/core/endurance))
if(gene.value > max_endurance)
dat += "<br><br>This device's extraction capabilities are currently limited to <span class='highlight'>[max_endurance]</span> endurance. "
dat += "Target gene will be degraded to <span class='highlight'>[max_endurance]</span> endurance on extraction."
else if(istype(target, /datum/plant_gene/core/yield))
if(gene.value > max_yield)
dat += "<br><br>This device's extraction capabilities are currently limited to <span class='highlight'>[max_yield]</span> yield. "
dat += "Target gene will be degraded to <span class='highlight'>[max_yield]</span> yield on extraction."
else if(istype(target, /datum/plant_gene/core/production))
if(gene.value < min_production)
dat += "<br><br>This device's extraction capabilities are currently limited to <span class='highlight'>[min_production]</span> production. "
dat += "Target gene will be degraded to <span class='highlight'>[min_production]</span> production on extraction."
else if(istype(target, /datum/plant_gene/core/weed_rate))
if(gene.value > max_wrate)
dat += "<br><br>This device's extraction capabilities are currently limited to <span class='highlight'>[max_wrate]</span> weed rate. "
dat += "Target gene will be degraded to <span class='highlight'>[max_wrate]</span> weed rate on extraction."
else if(istype(target, /datum/plant_gene/core/weed_chance))
if(gene.value > max_wchance)
dat += "<br><br>This device's extraction capabilities are currently limited to <span class='highlight'>[max_wchance]</span> weed chance. "
dat += "Target gene will be degraded to <span class='highlight'>[max_wchance]</span> weed chance on extraction."
if("replace")
dat += "<span class='highlight'>[target.get_name()]</span> gene with <span class='highlight'>[disk.gene.get_name()]</span>?<br>"
if("insert")
@@ -239,7 +287,7 @@
if(!usr.drop_item())
return
insert_seed(I)
usr << "<span class='notice'>You add [I] to the machine.</span>"
to_chat(usr, "<span class='notice'>You add [I] to the machine.</span>")
update_icon()
else if(href_list["eject_disk"] && !operation)
if (disk)
@@ -254,7 +302,7 @@
return
disk = I
disk.loc = src
usr << "<span class='notice'>You add [I] to the machine.</span>"
to_chat(usr, "<span class='notice'>You add [I] to the machine.</span>")
else if(href_list["op"] == "insert" && disk && disk.gene && seed)
if(!operation) // Wait for confirmation
operation = "insert"
@@ -289,9 +337,22 @@
if("extract")
if(disk && !disk.read_only)
disk.gene = G
if(istype(G, /datum/plant_gene/core/potency))
if(istype(G, /datum/plant_gene/core))
var/datum/plant_gene/core/gene = G
gene.value = min(gene.value, max_extract_pot)
if(istype(G, /datum/plant_gene/core/potency))
gene.value = min(gene.value, max_potency)
else if(istype(G, /datum/plant_gene/core/lifespan))
gene.value = min(gene.value, max_endurance) //INTENDED
else if(istype(G, /datum/plant_gene/core/endurance))
gene.value = min(gene.value, max_endurance)
else if(istype(G, /datum/plant_gene/core/production))
gene.value = max(gene.value, min_production)
else if(istype(G, /datum/plant_gene/core/yield))
gene.value = min(gene.value, max_yield)
else if(istype(G, /datum/plant_gene/core/weed_rate))
gene.value = min(gene.value, max_wrate)
else if(istype(G, /datum/plant_gene/core/weed_chance))
gene.value = min(gene.value, max_wchance)
disk.update_name()
qdel(seed)
seed = null
@@ -310,6 +371,7 @@
seed.reagents_from_genes()
repaint_seed()
update_genes()
operation = ""
target = null
@@ -347,6 +409,7 @@
for(var/datum/plant_gene/reagent/G in seed.genes)
reagent_genes += G
for(var/datum/plant_gene/trait/G in seed.genes)
trait_genes += G
@@ -383,10 +446,11 @@
/obj/item/weapon/disk/plantgene
name = "plant data disk"
desc = "A disk for storing plant genetic data."
icon_state = "datadisk2"
icon_state = "datadisk_hydro"
materials = list(MAT_METAL=30, MAT_GLASS=10)
var/datum/plant_gene/gene
var/read_only = 0 //Well, it's still a floppy disk
unique_rename = 1
/obj/item/weapon/disk/plantgene/New()
..()
@@ -394,29 +458,16 @@
src.pixel_x = rand(-5, 5)
src.pixel_y = rand(-5, 5)
/obj/item/weapon/disk/plantgene/attackby(obj/item/weapon/W, mob/user, params)
..()
if(istype(W, /obj/item/weapon/pen))
var/t = stripped_input(user, "What would you like the label to be?", name, null)
if(user.get_active_held_item() != W)
return
if(!in_range(src, user) && loc != user)
return
if(t)
name = "plant data disk - '[t]'"
else
name = "plant data disk"
/obj/item/weapon/disk/plantgene/proc/update_name()
if(gene)
name = "plant data disk - '[gene.get_name()]'"
name = "[gene.get_name()] (Plant Data Disk)"
else
name = "plant data disk"
/obj/item/weapon/disk/plantgene/attack_self(mob/user)
read_only = !read_only
user << "<span class='notice'>You flip the write-protect tab to [src.read_only ? "protected" : "unprotected"].</span>"
to_chat(user, "<span class='notice'>You flip the write-protect tab to [src.read_only ? "protected" : "unprotected"].</span>")
/obj/item/weapon/disk/plantgene/examine(mob/user)
..()
user << "The write-protect tab is set to [src.read_only ? "protected" : "unprotected"]."
to_chat(user, "The write-protect tab is set to [src.read_only ? "protected" : "unprotected"].")
+5 -30
View File
@@ -54,7 +54,7 @@
if(seed)
for(var/datum/plant_gene/trait/T in seed.genes)
if(T.examine_line)
user << T.examine_line
to_chat(user, T.examine_line)
/obj/item/weapon/reagent_containers/food/snacks/grown/attackby(obj/item/O, mob/user, params)
..()
@@ -72,7 +72,7 @@
if(reag_txt)
msg += reag_txt
msg += "<br><span class='info'>*---------*</span>"
user << msg
to_chat(user, msg)
else
if(seed)
for(var/datum/plant_gene/trait/T in seed.genes)
@@ -130,30 +130,6 @@
..()
// Glow gene procs
/obj/item/weapon/reagent_containers/food/snacks/grown/Destroy()
if(seed)
var/datum/plant_gene/trait/glow/G = seed.get_gene(/datum/plant_gene/trait/glow)
if(G && ismob(loc))
loc.AddLuminosity(-G.get_lum(seed))
return ..()
/obj/item/weapon/reagent_containers/food/snacks/grown/pickup(mob/user)
..()
if(seed)
var/datum/plant_gene/trait/glow/G = seed.get_gene(/datum/plant_gene/trait/glow)
if(G)
SetLuminosity(0)
user.AddLuminosity(G.get_lum(seed))
/obj/item/weapon/reagent_containers/food/snacks/grown/dropped(mob/user)
..()
if(seed)
var/datum/plant_gene/trait/glow/G = seed.get_gene(/datum/plant_gene/trait/glow)
if(G)
user.AddLuminosity(-G.get_lum(seed))
SetLuminosity(G.get_lum(seed))
/obj/item/weapon/reagent_containers/food/snacks/grown/generate_trash(atom/location)
if(trash && ispath(trash, /obj/item/weapon/grown))
. = new trash(location, seed)
@@ -166,7 +142,6 @@
var/obj/item/T
if(trash)
T = generate_trash()
qdel(src)
if(trash)
user.put_in_hands(T)
user << "<span class='notice'>You open [src]\'s shell, revealing \a [T].</span>"
qdel(src)
user.putItemFromInventoryInHandIfPossible(T, user.active_hand_index, TRUE)
to_chat(user, "<span class='notice'>You open [src]\'s shell, revealing \a [T].</span>")
+1 -1
View File
@@ -72,5 +72,5 @@
icon_state = "ambrosia_gaia"
filling_color = rgb(255, 175, 0)
origin_tech = "biotech=6;materials=5"
luminosity = 3
light_range = 3
seed = /obj/item/seeds/ambrosia/gaia
+1 -1
View File
@@ -89,7 +89,7 @@
return
held_mob.bodytemperature += 15 * TEMPERATURE_DAMAGE_COEFFICIENT
if(prob(10))
held_mob << "<span class='warning'>Your hand holding [src] burns!</span>"
to_chat(held_mob, "<span class='warning'>Your hand holding [src] burns!</span>")
else
held_mob = null
..()
+2 -2
View File
@@ -37,7 +37,7 @@
/obj/item/weapon/grown/corncob/attackby(obj/item/weapon/grown/W, mob/user, params)
if(W.is_sharp())
user << "<span class='notice'>You use [W] to fashion a pipe out of the corn cob!</span>"
to_chat(user, "<span class='notice'>You use [W] to fashion a pipe out of the corn cob!</span>")
new /obj/item/clothing/mask/cigarette/pipe/cobpipe (user.loc)
qdel(src)
else
@@ -72,7 +72,7 @@
/obj/item/weapon/grown/snapcorn/attack_self(mob/user)
..()
user << "<span class='notice'>You pick a snap pop from the cob.</span>"
to_chat(user, "<span class='notice'>You pick a snap pop from the cob.</span>")
var/obj/item/toy/snappop/S = new /obj/item/toy/snappop(user.loc)
if(ishuman(user))
user.put_in_hands(S)
+5 -5
View File
@@ -122,8 +122,8 @@
throw_range = 3
/obj/item/weapon/grown/sunflower/attack(mob/M, mob/user)
M << "<font color='green'><b> [user] smacks you with a sunflower!</font><font color='yellow'><b>FLOWER POWER<b></font>"
user << "<font color='green'>Your sunflower's </font><font color='yellow'><b>FLOWER POWER</b></font><font color='green'>strikes [M]</font>"
to_chat(M, "<font color='green'><b> [user] smacks you with a sunflower!</font><font color='yellow'><b>FLOWER POWER<b></font>")
to_chat(user, "<font color='green'>Your sunflower's </font><font color='yellow'><b>FLOWER POWER</b></font><font color='green'>strikes [M]</font>")
// Moonflower
/obj/item/seeds/sunflower/moonflower
@@ -180,7 +180,7 @@
if(!..())
return
if(isliving(M))
M << "<span class='danger'>You are lit on fire from the intense heat of the [name]!</span>"
to_chat(M, "<span class='danger'>You are lit on fire from the intense heat of the [name]!</span>")
M.adjust_fire_stacks(seed.potency / 20)
if(M.IgniteMob())
message_admins("[key_name_admin(user)] set [key_name_admin(M)] on fire")
@@ -191,11 +191,11 @@
if(force > 0)
force -= rand(1, (force / 3) + 1)
else
usr << "<span class='warning'>All the petals have fallen off the [name] from violent whacking!</span>"
to_chat(usr, "<span class='warning'>All the petals have fallen off the [name] from violent whacking!</span>")
qdel(src)
/obj/item/weapon/grown/novaflower/pickup(mob/living/carbon/human/user)
..()
if(!user.gloves)
user << "<span class='danger'>The [name] burns your bare hand!</span>"
to_chat(user, "<span class='danger'>The [name] burns your bare hand!</span>")
user.adjustFireLoss(rand(1, 5))
@@ -29,7 +29,7 @@
var/tile_coefficient = 0.02 // 1/50
/obj/item/weapon/reagent_containers/food/snacks/grown/grass/attack_self(mob/user)
user << "<span class='notice'>You prepare the astroturf.</span>"
to_chat(user, "<span class='notice'>You prepare the astroturf.</span>")
var/grassAmt = 1 + round(seed.potency * tile_coefficient) // The grass we're holding
for(var/obj/item/weapon/reagent_containers/food/snacks/grown/grass/G in user.loc) // The grass on the floor
if(G.type != type)
+10 -4
View File
@@ -29,15 +29,21 @@
/obj/item/seeds/kudzu/proc/plant(mob/user)
if(isspaceturf(user.loc))
return
var/turf/T = get_turf(src)
message_admins("Kudzu planted by [key_name_admin(user)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[user]'>FLW</A>) at ([T.x],[T.y],[T.z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>(JMP)</a>)",0,1)
investigate_log("was planted by [key_name(user)] at ([T.x],[T.y],[T.z])","kudzu")
if(!isturf(user.loc))
to_chat(user, "<span class='warning'>You need more space to plant [src].</span>")
return FALSE
if(locate(/obj/structure/spacevine) in user.loc)
to_chat(user, "<span class='warning'>There is too much kudzu here to plant [src].</span>")
return FALSE
to_chat(user, "<span class='notice'>You plant [src].</span>")
message_admins("Kudzu planted by [ADMIN_LOOKUPFLW(user)] at [ADMIN_COORDJMP(user)]",0,1)
investigate_log("was planted by [key_name(user)] at [COORD(user)]","botany")
new /obj/effect/spacevine_controller(user.loc, mutations, potency, production)
qdel(src)
/obj/item/seeds/kudzu/attack_self(mob/user)
plant(user)
user << "<span class='notice'>You plant the kudzu. You monster.</span>"
to_chat(user, "<span class='notice'>You plant the kudzu. You monster.</span>")
/obj/item/seeds/kudzu/get_analyzer_text()
var/text = ..()
+53 -12
View File
@@ -172,7 +172,7 @@
M.move_to_delay -= round(seed.production / 50)
M.health = M.maxHealth
qdel(src)
user << "<span class='notice'>You plant the walking mushroom.</span>"
to_chat(user, "<span class='notice'>You plant the walking mushroom.</span>")
// Chanterelle
@@ -220,7 +220,7 @@
rarity = 20
genes = list(/datum/plant_gene/trait/glow, /datum/plant_gene/trait/plant_type/fungal_metabolism)
growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
mutatelist = list(/obj/item/seeds/glowshroom/glowcap)
mutatelist = list(/obj/item/seeds/glowshroom/glowcap, /obj/item/seeds/glowshroom/shadowshroom)
reagents_add = list("radium" = 0.1, "phosphorus" = 0.1, "nutriment" = 0.04)
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom
@@ -234,15 +234,25 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/attack_self(mob/user)
if(isspaceturf(user.loc))
return
var/obj/structure/glowshroom/planted = new effect_path(user.loc)
planted.delay = planted.delay - seed.production * 100 //So the delay goes DOWN with better stats instead of up. :I
planted.obj_integrity = seed.endurance
planted.max_integrity = seed.endurance
planted.yield = seed.yield
planted.potency = seed.potency
user << "<span class='notice'>You plant [src].</span>"
return FALSE
if(!isturf(user.loc))
to_chat(user, "<span class='warning'>You need more space to plant [src].</span>")
return FALSE
var/count = 0
var/maxcount = 1
for(var/tempdir in cardinal)
var/turf/closed/wall = get_step(user.loc, tempdir)
if(istype(wall))
maxcount++
for(var/obj/structure/glowshroom/G in user.loc)
count++
if(count >= maxcount)
to_chat(user, "<span class='warning'>There are too many shrooms here to plant [src].</span>")
return FALSE
new effect_path(user.loc, seed)
to_chat(user, "<span class='notice'>You plant [src].</span>")
qdel(src)
return TRUE
// Glowcap
@@ -255,7 +265,7 @@
icon_dead = "glowshroom-dead"
plantname = "Glowcaps"
product = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/glowcap
genes = list(/datum/plant_gene/trait/glow, /datum/plant_gene/trait/cell_charge, /datum/plant_gene/trait/plant_type/fungal_metabolism)
genes = list(/datum/plant_gene/trait/glow/red, /datum/plant_gene/trait/cell_charge, /datum/plant_gene/trait/plant_type/fungal_metabolism)
mutatelist = list()
reagents_add = list("teslium" = 0.1, "nutriment" = 0.04)
rarity = 30
@@ -263,8 +273,39 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/glowcap
seed = /obj/item/seeds/glowshroom/glowcap
name = "glowcap cluster"
desc = "<I>Mycena Ruthenia</I>: This species of mushroom glows in the dark, but aren't bioluminescent. They're warm to the touch..."
desc = "<I>Mycena Ruthenia</I>: This species of mushroom glows in the dark, but isn't actually bioluminescent. They're warm to the touch..."
icon_state = "glowcap"
filling_color = "#00FA9A"
effect_path = /obj/structure/glowshroom/glowcap
origin_tech = "biotech=4;powerstorage=6;plasmatech=4"
//Shadowshroom
/obj/item/seeds/glowshroom/shadowshroom
name = "pack of shadowshroom mycelium"
desc = "This mycelium will grow into something shadowy."
icon_state = "mycelium-shadowshroom"
species = "shadowshroom"
icon_grow = "shadowshroom-grow"
icon_dead = "shadowshroom-dead"
plantname = "Shadowshrooms"
product = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/shadowshroom
genes = list(/datum/plant_gene/trait/glow/shadow, /datum/plant_gene/trait/plant_type/fungal_metabolism)
mutatelist = list()
reagents_add = list("radium" = 0.2, "nutriment" = 0.04)
rarity = 30
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/shadowshroom
seed = /obj/item/seeds/glowshroom/shadowshroom
name = "shadowshroom cluster"
desc = "<I>Mycena Umbra</I>: This species of mushroom emits shadow instead of light."
icon_state = "shadowshroom"
effect_path = /obj/structure/glowshroom/shadowshroom
origin_tech = "biotech=4;plasmatech=4;magnets=4"
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/shadowshroom/attack_self(mob/user)
. = ..()
if(.)
message_admins("Shadowshroom planted by [ADMIN_LOOKUPFLW(user)] at [ADMIN_COORDJMP(user)]",0,1)
investigate_log("was planted by [key_name(user)] at [COORD(user)]", "botany")
+4 -4
View File
@@ -59,7 +59,7 @@
if(affecting)
if(affecting.receive_damage(0, force))
C.update_damage_overlays()
C << "<span class='userdanger'>The nettle burns your bare hand!</span>"
to_chat(C, "<span class='userdanger'>The nettle burns your bare hand!</span>")
return 1
/obj/item/weapon/grown/nettle/afterattack(atom/A as mob|obj, mob/user,proximity)
@@ -67,7 +67,7 @@
if(force > 0)
force -= rand(1, (force / 3) + 1) // When you whack someone with it, leaves fall off
else
usr << "All the leaves have fallen off the nettle from violent whacking."
to_chat(usr, "All the leaves have fallen off the nettle from violent whacking.")
qdel(src)
/obj/item/weapon/grown/nettle/basic
@@ -94,13 +94,13 @@
if(..())
if(prob(50))
user.Paralyse(5)
user << "<span class='userdanger'>You are stunned by the Deathnettle when you try picking it up!</span>"
to_chat(user, "<span class='userdanger'>You are stunned by the Deathnettle when you try picking it up!</span>")
/obj/item/weapon/grown/nettle/death/attack(mob/living/carbon/M, mob/user)
if(!..())
return
if(isliving(M))
M << "<span class='danger'>You are stunned by the powerful acid of the Deathnettle!</span>"
to_chat(M, "<span class='danger'>You are stunned by the powerful acid of the Deathnettle!</span>")
add_logs(user, M, "attacked", src)
M.adjust_blurriness(force/7)
+1 -1
View File
@@ -37,7 +37,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/potato/attackby(obj/item/weapon/W, mob/user, params)
if(W.is_sharp())
user << "<span class='notice'>You cut the potato into wedges with [W].</span>"
to_chat(user, "<span class='notice'>You cut the potato into wedges with [W].</span>")
var/obj/item/weapon/reagent_containers/food/snacks/grown/potato/wedges/Wedges = new /obj/item/weapon/reagent_containers/food/snacks/grown/potato/wedges
remove_item_from_storage(user)
qdel(src)
+3 -3
View File
@@ -35,12 +35,12 @@
features = bloodSample.data["features"]
factions = bloodSample.data["factions"]
W.reagents.clear_reagents()
user << "<span class='notice'>You inject the contents of the syringe into the seeds.</span>"
to_chat(user, "<span class='notice'>You inject the contents of the syringe into the seeds.</span>")
contains_sample = 1
else
user << "<span class='warning'>The seeds reject the sample!</span>"
to_chat(user, "<span class='warning'>The seeds reject the sample!</span>")
else
user << "<span class='warning'>The seeds already contain a genetic sample!</span>"
to_chat(user, "<span class='warning'>The seeds already contain a genetic sample!</span>")
else
return ..()
+1 -1
View File
@@ -24,7 +24,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/carrot/attackby(obj/item/I, mob/user, params)
if(I.is_sharp())
user << "<span class='notice'>You sharpen the carrot into a shiv with [I].</span>"
to_chat(user, "<span class='notice'>You sharpen the carrot into a shiv with [I].</span>")
var/obj/item/weapon/kitchen/knife/carrotshiv/Shiv = new /obj/item/weapon/kitchen/knife/carrotshiv
remove_item_from_storage(user)
qdel(src)
+2 -2
View File
@@ -119,14 +119,14 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/killer/attack(mob/M, mob/user, def_zone)
if(awakening)
user << "<span class='warning'>The tomato is twitching and shaking, preventing you from eating it.</span>"
to_chat(user, "<span class='warning'>The tomato is twitching and shaking, preventing you from eating it.</span>")
return
..()
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/killer/attack_self(mob/user)
if(awakening || isspaceturf(user.loc))
return
user << "<span class='notice'>You begin to awaken the Killer Tomato...</span>"
to_chat(user, "<span class='notice'>You begin to awaken the Killer Tomato...</span>")
awakening = 1
spawn(30)
+7 -7
View File
@@ -63,7 +63,7 @@
if(ST != plank && istype(ST, plank_type) && ST.amount < ST.max_amount)
ST.attackby(plank, user) //we try to transfer all old unfinished stacks to the new stack we created.
if(plank.amount > old_plank_amount)
user << "<span class='notice'>You add the newly-formed [plank_name] to the stack. It now contains [plank.amount] [plank_name].</span>"
to_chat(user, "<span class='notice'>You add the newly-formed [plank_name] to the stack. It now contains [plank.amount] [plank_name].</span>")
qdel(src)
if(is_type_in_list(W,accepted))
@@ -77,7 +77,7 @@
qdel(src)
return
else
usr << "<span class ='warning'>You must dry this first!</span>"
to_chat(usr, "<span class ='warning'>You must dry this first!</span>")
else
return ..()
@@ -115,7 +115,7 @@
R.use(1)
can_buckle = 1
buckle_requires_restraints = 1
user << "<span class='italics'>You add a rod to [src]."
to_chat(user, "<span class='italics'>You add a rod to [src].")
var/image/U = image(icon='icons/obj/hydroponics/equipment.dmi',icon_state="bonfire_rod",pixel_y=16)
underlays += U
if(W.is_hot())
@@ -124,7 +124,7 @@
/obj/structure/bonfire/attack_hand(mob/user)
if(burning)
user << "<span class='warning'>You need to extinguish [src] before removing the logs!"
to_chat(user, "<span class='warning'>You need to extinguish [src] before removing the logs!")
return
if(!has_buckled_mobs() && do_after(user, 50, target = src))
for(var/I in 1 to 5)
@@ -149,7 +149,7 @@
if(!burning && CheckOxygen())
icon_state = "bonfire_on_fire"
burning = 1
SetLuminosity(6)
set_light(6)
Burn()
START_PROCESSING(SSobj, src)
@@ -184,7 +184,7 @@
if(burning)
icon_state = "bonfire"
burning = 0
SetLuminosity(0)
set_light(0)
STOP_PROCESSING(SSobj, src)
/obj/structure/bonfire/buckle_mob(mob/living/M, force = 0)
@@ -193,4 +193,4 @@
/obj/structure/bonfire/unbuckle_mob(mob/living/buckled_mob, force=0)
if(..())
buckled_mob.pixel_y -= 13
buckled_mob.pixel_y -= 13
+2 -27
View File
@@ -39,7 +39,7 @@
if(seed)
msg += seed.get_analyzer_text()
msg += "</span>"
usr << msg
to_chat(usr, msg)
return
/obj/item/weapon/grown/proc/add_juice()
@@ -54,36 +54,11 @@
T.on_cross(src, AM)
..()
// Glow gene procs
/obj/item/weapon/grown/Destroy()
if(seed)
var/datum/plant_gene/trait/glow/G = seed.get_gene(/datum/plant_gene/trait/glow)
if(G && ismob(loc))
loc.AddLuminosity(-G.get_lum(seed))
return ..()
/obj/item/weapon/grown/throw_impact(atom/hit_atom)
if(!..()) //was it caught by a mob?
if(seed)
for(var/datum/plant_gene/trait/T in seed.genes)
T.on_throw_impact(src, hit_atom)
/obj/item/weapon/grown/pickup(mob/user)
..()
if(seed)
var/datum/plant_gene/trait/glow/G = seed.get_gene(/datum/plant_gene/trait/glow)
if(G)
SetLuminosity(0)
user.AddLuminosity(G.get_lum(seed))
/obj/item/weapon/grown/dropped(mob/user)
..()
if(seed)
var/datum/plant_gene/trait/glow/G = seed.get_gene(/datum/plant_gene/trait/glow)
if(G)
user.AddLuminosity(-G.get_lum(seed))
SetLuminosity(G.get_lum(seed))
/obj/item/weapon/grown/microwave_act(obj/machine/microwave/M)
return
return
+50 -50
View File
@@ -81,7 +81,7 @@
if(istype(I, /obj/item/weapon/crowbar))
if(using_irrigation)
user << "<span class='warning'>Disconnect the hoses first!</span>"
to_chat(user, "<span class='warning'>Disconnect the hoses first!</span>")
else if(default_deconstruction_crowbar(I, 1))
return
else
@@ -151,12 +151,12 @@
// Lack of light hurts non-mushrooms
if(isturf(loc))
var/turf/currentTurf = loc
var/lightAmt = currentTurf.lighting_lumcount
var/lightAmt = currentTurf.get_lumcount()
if(myseed.get_gene(/datum/plant_gene/trait/plant_type/fungal_metabolism))
if(lightAmt < 2)
if(lightAmt < 0.2)
adjustHealth(-1 / rating)
else // Non-mushroom
if(lightAmt < 4)
if(lightAmt < 0.4)
adjustHealth(-2 / rating)
//Water//////////////////////////////////////////////////////////////////
@@ -260,7 +260,7 @@
add_atom_colour(rgb(255, 175, 0), FIXED_COLOUR_PRIORITY)
else
add_overlay(image('icons/obj/hydroponics/equipment.dmi', icon_state = "gaia_blessing"))
SetLuminosity(3)
set_light(3)
update_icon_hoses()
@@ -271,9 +271,9 @@
if(!self_sustaining)
if(myseed && myseed.get_gene(/datum/plant_gene/trait/glow))
var/datum/plant_gene/trait/glow/G = myseed.get_gene(/datum/plant_gene/trait/glow)
SetLuminosity(G.get_lum(myseed))
set_light(G.glow_range(myseed), G.glow_power(myseed), G.glow_color)
else
SetLuminosity(0)
set_light(0)
return
@@ -317,27 +317,27 @@
/obj/machinery/hydroponics/examine(user)
..()
if(myseed)
user << "<span class='info'>It has <span class='name'>[myseed.plantname]</span> planted.</span>"
to_chat(user, "<span class='info'>It has <span class='name'>[myseed.plantname]</span> planted.</span>")
if (dead)
user << "<span class='warning'>It's dead!</span>"
to_chat(user, "<span class='warning'>It's dead!</span>")
else if (harvest)
user << "<span class='info'>It's ready to harvest.</span>"
to_chat(user, "<span class='info'>It's ready to harvest.</span>")
else if (plant_health <= (myseed.endurance / 2))
user << "<span class='warning'>It looks unhealthy.</span>"
to_chat(user, "<span class='warning'>It looks unhealthy.</span>")
else
user << "<span class='info'>[src] is empty.</span>"
to_chat(user, "<span class='info'>[src] is empty.</span>")
if(!self_sustaining)
user << "<span class='info'>Water: [waterlevel]/[maxwater]</span>"
user << "<span class='info'>Nutrient: [nutrilevel]/[maxnutri]</span>"
to_chat(user, "<span class='info'>Water: [waterlevel]/[maxwater]</span>")
to_chat(user, "<span class='info'>Nutrient: [nutrilevel]/[maxnutri]</span>")
else
user << "<span class='info'>It doesn't require any water or nutrients.</span>"
to_chat(user, "<span class='info'>It doesn't require any water or nutrients.</span>")
if(weedlevel >= 5)
user << "<span class='warning'>[src] is filled with weeds!</span>"
to_chat(user, "<span class='warning'>[src] is filled with weeds!</span>")
if(pestlevel >= 5)
user << "<span class='warning'>[src] is filled with tiny worms!</span>"
user << "" // Empty line for readability.
to_chat(user, "<span class='warning'>[src] is filled with tiny worms!</span>")
to_chat(user, "" )
/obj/machinery/hydroponics/proc/weedinvasion() // If a weed growth is sufficient, this happens.
@@ -429,7 +429,7 @@
update_icon()
visible_message("<span class='warning'>The mutated weeds in [src] spawn some [myseed.plantname]!</span>")
else
usr << "<span class='warning'>The few weeds in [src] seem to react, but only for a moment...</span>"
to_chat(usr, "<span class='warning'>The few weeds in [src] seem to react, but only for a moment...</span>")
/obj/machinery/hydroponics/proc/plantdies() // OH NOES!!!!! I put this all in one function to make things easier
@@ -449,7 +449,7 @@
visible_message("<span class='warning'>The pests seem to behave oddly...</span>")
spawn_atom_to_turf(/obj/structure/spider/spiderling/hunter, src, 3, FALSE)
else
user << "<span class='warning'>The pests seem to behave oddly, but quickly settle down...</span>"
to_chat(user, "<span class='warning'>The pests seem to behave oddly, but quickly settle down...</span>")
/obj/machinery/hydroponics/proc/applyChemicals(datum/reagents/S, mob/user)
if(myseed)
@@ -460,7 +460,7 @@
switch(rand(100))
if(91 to 100)
adjustHealth(-10)
user << "<span class='warning'>The plant shrivels and burns.</span>"
to_chat(user, "<span class='warning'>The plant shrivels and burns.</span>")
if(81 to 90)
mutatespecie()
if(66 to 80)
@@ -468,13 +468,13 @@
if(41 to 65)
mutate()
if(21 to 41)
user << "<span class='notice'>The plants don't seem to react...</span>"
to_chat(user, "<span class='notice'>The plants don't seem to react...</span>")
if(11 to 20)
mutateweed()
if(1 to 10)
mutatepest(user)
else
user << "<span class='notice'>Nothing happens...</span>"
to_chat(user, "<span class='notice'>Nothing happens...</span>")
// 2 or 1 units is enough to change the yield and other stats.// Can change the yield and other stats, but requires more than mutagen
else if(S.has_reagent("mutagen", 2) || S.has_reagent("radium", 5) || S.has_reagent("uranium", 5))
@@ -672,16 +672,16 @@
if(1 to 32)
mutatepest(user)
else
user << "<span class='warning'>Nothing happens...</span>"
to_chat(user, "<span class='warning'>Nothing happens...</span>")
/obj/machinery/hydroponics/attackby(obj/item/O, mob/user, params)
//Called when mob user "attacks" it with object O
if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/gaia)) //Checked early on so it doesn't have to deal with composting checks
if(self_sustaining)
user << "<span class='warning'>This [name] is already self-sustaining!</span>"
to_chat(user, "<span class='warning'>This [name] is already self-sustaining!</span>")
return
if(myseed || weedlevel)
user << "<span class='warning'>[src] needs to be clear of plants and weeds!</span>"
to_chat(user, "<span class='warning'>[src] needs to be clear of plants and weeds!</span>")
return
if(alert(user, "This will make [src] self-sustaining but consume [O] forever. Are you sure?", "[name]", "I'm Sure", "Abort") == "Abort" || !user)
return
@@ -690,10 +690,10 @@
if(!Adjacent(user))
return
if(self_sustaining)
user << "<span class='warning'>This [name] is already self-sustaining!</span>"
to_chat(user, "<span class='warning'>This [name] is already self-sustaining!</span>")
return
if(myseed || weedlevel)
user << "<span class='warning'>[src] needs to be clear of plants and weeds!</span>"
to_chat(user, "<span class='warning'>[src] needs to be clear of plants and weeds!</span>")
return
user.visible_message("<span class='notice'>[user] gently pulls open the soil for [O] and places it inside.</span>", "<span class='notice'>You tenderly root [O] into [src].</span>")
user.drop_item()
@@ -708,11 +708,11 @@
if(istype(reagent_source, /obj/item/weapon/reagent_containers/syringe))
var/obj/item/weapon/reagent_containers/syringe/syr = reagent_source
if(syr.mode != 1)
user << "<span class='warning'>You can't get any extract out of this plant.</span>" //That. Gives me an idea...
to_chat(user, "<span class='warning'>You can't get any extract out of this plant.</span>" )
return
if(!reagent_source.reagents.total_volume)
user << "<span class='notice'>[reagent_source] is empty.</span>"
to_chat(user, "<span class='notice'>[reagent_source] is empty.</span>")
return 1
var/list/trays = list(src)//makes the list just this in cases of syringes and compost etc
@@ -774,7 +774,7 @@
investigate_log("had Kudzu planted in it by [user.ckey]([user]) at ([x],[y],[z])","kudzu")
if(!user.transferItemToLoc(O, src))
return
user << "<span class='notice'>You plant [O].</span>"
to_chat(user, "<span class='notice'>You plant [O].</span>")
dead = 0
myseed = O
age = 1
@@ -782,23 +782,23 @@
lastcycle = world.time
update_icon()
else
user << "<span class='warning'>[src] already has seeds in it!</span>"
to_chat(user, "<span class='warning'>[src] already has seeds in it!</span>")
else if(istype(O, /obj/item/device/plant_analyzer))
if(myseed)
user << "*** <B>[myseed.plantname]</B> ***" //Carn: now reports the plants growing, not the seeds.
user << "- Plant Age: <span class='notice'>[age]</span>"
to_chat(user, "*** <B>[myseed.plantname]</B> ***" )
to_chat(user, "- Plant Age: <span class='notice'>[age]</span>")
var/list/text_string = myseed.get_analyzer_text()
if(text_string)
user << text_string
to_chat(user, text_string)
else
user << "<B>No plant found.</B>"
user << "- Weed level: <span class='notice'>[weedlevel] / 10</span>"
user << "- Pest level: <span class='notice'>[pestlevel] / 10</span>"
user << "- Toxicity level: <span class='notice'>[toxic] / 100</span>"
user << "- Water level: <span class='notice'>[waterlevel] / [maxwater]</span>"
user << "- Nutrition level: <span class='notice'>[nutrilevel] / [maxnutri]</span>"
user << ""
to_chat(user, "<B>No plant found.</B>")
to_chat(user, "- Weed level: <span class='notice'>[weedlevel] / 10</span>")
to_chat(user, "- Pest level: <span class='notice'>[pestlevel] / 10</span>")
to_chat(user, "- Toxicity level: <span class='notice'>[toxic] / 100</span>")
to_chat(user, "- Water level: <span class='notice'>[waterlevel] / [maxwater]</span>")
to_chat(user, "- Nutrition level: <span class='notice'>[nutrilevel] / [maxnutri]</span>")
to_chat(user, "")
else if(istype(O, /obj/item/weapon/cultivator))
if(weedlevel > 0)
@@ -806,7 +806,7 @@
weedlevel = 0
update_icon()
else
user << "<span class='warning'>This plot is completely devoid of weeds! It doesn't need uprooting.</span>"
to_chat(user, "<span class='warning'>This plot is completely devoid of weeds! It doesn't need uprooting.</span>")
else if(istype(O, /obj/item/weapon/storage/bag/plants))
attack_hand(user)
@@ -818,7 +818,7 @@
else if(istype(O, /obj/item/weapon/wrench) && unwrenchable)
if(using_irrigation)
user << "<span class='warning'>Disconnect the hoses first!</span>"
to_chat(user, "<span class='warning'>Disconnect the hoses first!</span>")
return
if(!anchored && !isinspace())
@@ -852,7 +852,7 @@
else if(istype(O, /obj/item/weapon/shovel/spade) && unwrenchable)
if(!myseed && !weedlevel)
user << "<span class='warning'>[src] doesn't have any plants or weeds!</span>"
to_chat(user, "<span class='warning'>[src] doesn't have any plants or weeds!</span>")
return
user.visible_message("<span class='notice'>[user] starts digging out [src]'s plants...</span>", "<span class='notice'>You start digging out [src]'s plants...</span>")
playsound(src, 'sound/effects/shovel_dig.ogg', 50, 1)
@@ -880,7 +880,7 @@
myseed.harvest(user)
else if(dead)
dead = 0
user << "<span class='notice'>You remove the dead plant from [src].</span>"
to_chat(user, "<span class='notice'>You remove the dead plant from [src].</span>")
qdel(myseed)
myseed = null
update_icon()
@@ -891,11 +891,11 @@
harvest = 0
lastproduce = age
if(istype(myseed,/obj/item/seeds/replicapod))
user << "<span class='notice'>You harvest from the [myseed.plantname].</span>"
to_chat(user, "<span class='notice'>You harvest from the [myseed.plantname].</span>")
else if(myseed.getYield() <= 0)
user << "<span class='warning'>You fail to harvest anything useful!</span>"
to_chat(user, "<span class='warning'>You fail to harvest anything useful!</span>")
else
user << "<span class='notice'>You harvest [myseed.getYield()] items from the [myseed.plantname].</span>"
to_chat(user, "<span class='notice'>You harvest [myseed.getYield()] items from the [myseed.plantname].</span>")
if(!myseed.get_gene(/datum/plant_gene/trait/repeated_harvest))
qdel(myseed)
myseed = null
@@ -949,7 +949,7 @@
/obj/machinery/hydroponics/soil/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/weapon/shovel) && !istype(O, /obj/item/weapon/shovel/spade)) //Doesn't include spades because of uprooting plants
user << "<span class='notice'>You clear up [src]!</span>"
to_chat(user, "<span class='notice'>You clear up [src]!</span>")
qdel(src)
else
return ..()
+29 -14
View File
@@ -257,31 +257,46 @@
C.update_icon()
batteries_recharged = 1
if(batteries_recharged)
target << "<span class='notice'>Your batteries are recharged!</span>"
to_chat(target, "<span class='notice'>Your batteries are recharged!</span>")
/datum/plant_gene/trait/glow
// Makes plant glow. Makes plant in tray glow too.
// Adds potency*rate luminosity to products.
// Adds 1 + potency*rate light range and potency*(rate + 0.01) light_power to products.
name = "Bioluminescence"
rate = 0.1
rate = 0.03
examine_line = "<span class='info'>It emits a soft glow.</span>"
trait_id = "glow"
var/glow_color = "#AAD84B"
/datum/plant_gene/trait/glow/proc/get_lum(obj/item/seeds/S)
return round(S.potency*rate)
/datum/plant_gene/trait/glow/proc/glow_range(obj/item/seeds/S)
return 1.4 + S.potency*rate
/datum/plant_gene/trait/glow/proc/glow_power(obj/item/seeds/S)
return max(S.potency*(rate + 0.01), 0.1)
/datum/plant_gene/trait/glow/on_new(obj/item/weapon/reagent_containers/food/snacks/grown/G, newloc)
..()
if(ismob(newloc))
G.pickup(newloc)//adjusts the lighting on the mob
else
G.SetLuminosity(get_lum(G.seed))
G.set_light(glow_range(G.seed), glow_power(G.seed), glow_color)
/datum/plant_gene/trait/glow/shadow
//makes plant emit slightly purple shadows
//adds -potency*(rate*0.05) light power to products
name = "Shadow Emission"
rate = 0.04
/datum/plant_gene/trait/glow/shadow/glow_power(obj/item/seeds/S)
return -max(S.potency*(rate*0.05), 0.075)
/datum/plant_gene/trait/glow/red
name = "Red Electrical Glow"
glow_color = LIGHT_COLOR_RED
/datum/plant_gene/trait/glow/berry
name = "Strong Bioluminescence"
rate = 0.2
rate = 0.05
glow_color = null
/datum/plant_gene/trait/teleport
@@ -301,7 +316,7 @@
/datum/plant_gene/trait/teleport/on_slip(obj/item/weapon/reagent_containers/food/snacks/grown/G, mob/living/carbon/C)
var/teleport_radius = max(round(G.seed.potency / 10), 1)
var/turf/T = get_turf(C)
C << "<span class='warning'>You slip through spacetime!</span>"
to_chat(C, "<span class='warning'>You slip through spacetime!</span>")
do_teleport(C, T, teleport_radius)
if(prob(50))
do_teleport(G, T, teleport_radius)
@@ -349,7 +364,7 @@
if(istype(I, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/C = I
if(C.use(5))
user << "<span class='notice'>You add some cable to [G] and slide it inside the battery encasing.</span>"
to_chat(user, "<span class='notice'>You add some cable to [G] and slide it inside the battery encasing.</span>")
var/obj/item/weapon/stock_parts/cell/potato/pocell = new /obj/item/weapon/stock_parts/cell/potato(user.loc)
pocell.icon_state = G.icon_state
pocell.maxcharge = G.seed.potency * 20
@@ -367,7 +382,7 @@
qdel(G)
else
user << "<span class='warning'>You need five lengths of cable to make a [G] battery!</span>"
to_chat(user, "<span class='warning'>You need five lengths of cable to make a [G] battery!</span>")
/datum/plant_gene/trait/stinging
@@ -381,7 +396,7 @@
var/fraction = min(injecting_amount/G.reagents.total_volume, 1)
G.reagents.reaction(L, INJECT, fraction)
G.reagents.trans_to(L, injecting_amount)
target << "<span class='danger'>You are pricked by [G]!</span>"
to_chat(target, "<span class='danger'>You are pricked by [G]!</span>")
/datum/plant_gene/trait/smoke
name = "gaseous decomposition"
+6 -6
View File
@@ -93,21 +93,21 @@
++loaded
add_seed(G)
if (loaded)
user << "<span class='notice'>You put the seeds from \the [O.name] into [src].</span>"
to_chat(user, "<span class='notice'>You put the seeds from \the [O.name] into [src].</span>")
else
user << "<span class='notice'>There are no seeds in \the [O.name].</span>"
to_chat(user, "<span class='notice'>There are no seeds in \the [O.name].</span>")
return
else if(seedify(O,-1, src, user))
user << "<span class='notice'>You extract some seeds.</span>"
to_chat(user, "<span class='notice'>You extract some seeds.</span>")
return
else if (istype(O,/obj/item/seeds))
if(add_seed(O))
user << "<span class='notice'>You add [O] to [src.name].</span>"
to_chat(user, "<span class='notice'>You add [O] to [src.name].</span>")
updateUsrDialog()
return
else if(user.a_intent != INTENT_HARM)
user << "<span class='warning'>You can't extract any seeds from \the [O.name]!</span>"
to_chat(user, "<span class='warning'>You can't extract any seeds from \the [O.name]!</span>")
else
return ..()
@@ -188,7 +188,7 @@
/obj/machinery/seed_extractor/proc/add_seed(obj/item/seeds/O)
if(contents.len >= 999)
usr << "<span class='notice'>\The [src] is full.</span>"
to_chat(usr, "<span class='notice'>\The [src] is full.</span>")
return 0
if(istype(O.loc,/mob))
+5 -5
View File
@@ -306,10 +306,10 @@
/obj/item/seeds/attackby(obj/item/O, mob/user, params)
if (istype(O, /obj/item/device/plant_analyzer))
user << "<span class='info'>*---------*\n This is \a <span class='name'>[src]</span>.</span>"
to_chat(user, "<span class='info'>*---------*\n This is \a <span class='name'>[src]</span>.</span>")
var/text = get_analyzer_text()
if(text)
user << "<span class='notice'>[text]</span>"
to_chat(user, "<span class='notice'>[text]</span>")
return
..() // Fallthrough to item/attackby() so that bags can pick seeds up
@@ -336,14 +336,14 @@
for(var/i in 1 to seed.growthstages)
if("[seed.icon_grow][i]" in states)
continue
world << "[seed.name] ([seed.type]) lacks the [seed.icon_grow][i] icon!"
to_chat(world, "[seed.name] ([seed.type]) lacks the [seed.icon_grow][i] icon!")
if(!(seed.icon_dead in states))
world << "[seed.name] ([seed.type]) lacks the [seed.icon_dead] icon!"
to_chat(world, "[seed.name] ([seed.type]) lacks the [seed.icon_dead] icon!")
if(seed.icon_harvest) // mushrooms have no grown sprites, same for items with no product
if(!(seed.icon_harvest in states))
world << "[seed.name] ([seed.type]) lacks the [seed.icon_harvest] icon!"
to_chat(world, "[seed.name] ([seed.type]) lacks the [seed.icon_harvest] icon!")
/obj/item/seeds/proc/randomize_stats()
set_lifespan(rand(25, 60))