mirror of
https://github.com/KabKebab/GS13.git
synced 2026-07-13 00:47:42 +01:00
Merge pull request #129 from Azarak/botanystuff
Adds in lots of botany stuff - 3d orange, fairygrass, new bioluminescence, bamboo, cherry bulbs, COCONUTs+
This commit is contained in:
@@ -976,3 +976,11 @@
|
||||
time = 60
|
||||
always_availible = TRUE
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/coconut_bong
|
||||
name = "Coconut Bong"
|
||||
result = /obj/item/bong/coconut
|
||||
reqs = list(/obj/item/stack/sheet/mineral/bamboo = 2,
|
||||
/obj/item/reagent_containers/food/snacks/grown/coconut = 1)
|
||||
time = 70
|
||||
category = CAT_MISC
|
||||
@@ -240,7 +240,7 @@
|
||||
dat += "</table>"
|
||||
else
|
||||
dat += "No trait-related genes detected in sample.<br>"
|
||||
if(can_insert && istype(disk.gene, /datum/plant_gene/trait))
|
||||
if(can_insert && istype(disk.gene, /datum/plant_gene/trait) && !seed.is_gene_forbidden(disk.gene))
|
||||
dat += "<a href='?src=[REF(src)];op=insert'>Insert: [disk.gene.get_name()]</a>"
|
||||
dat += "</div>"
|
||||
else
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
lifespan = 30
|
||||
endurance = 25
|
||||
mutatelist = list()
|
||||
genes = list(/datum/plant_gene/trait/glow/berry , /datum/plant_gene/trait/noreact, /datum/plant_gene/trait/repeated_harvest)
|
||||
genes = list(/datum/plant_gene/trait/glow/white , /datum/plant_gene/trait/noreact, /datum/plant_gene/trait/repeated_harvest)
|
||||
reagents_add = list("uranium" = 0.25, "iodine" = 0.2, "vitamin" = 0.04, "nutriment" = 0.1)
|
||||
rarity = 20
|
||||
|
||||
@@ -121,8 +121,9 @@
|
||||
growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
|
||||
icon_grow = "cherry-grow"
|
||||
icon_dead = "cherry-dead"
|
||||
icon_harvest = "cherry-harvest"
|
||||
genes = list(/datum/plant_gene/trait/repeated_harvest)
|
||||
mutatelist = list(/obj/item/seeds/cherry/blue)
|
||||
mutatelist = list(/obj/item/seeds/cherry/blue, /obj/item/seeds/cherry/bulb)
|
||||
reagents_add = list("nutriment" = 0.07, "sugar" = 0.07)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/cherries
|
||||
@@ -162,6 +163,31 @@
|
||||
tastes = list("blue cherry" = 1)
|
||||
wine_power = 50
|
||||
|
||||
//Cherry Bulbs
|
||||
/obj/item/seeds/cherry/bulb
|
||||
name = "pack of cherry bulb pits"
|
||||
desc = "The glowy kind of cherries."
|
||||
icon_state = "seed-cherrybulb"
|
||||
species = "cherrybulb"
|
||||
plantname = "Cherry Bulb Tree"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/cherrybulbs
|
||||
genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/glow/pink)
|
||||
mutatelist = list()
|
||||
reagents_add = list("nutriment" = 0.07, "sugar" = 0.07)
|
||||
rarity = 10
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/cherrybulbs
|
||||
seed = /obj/item/seeds/cherry/bulb
|
||||
name = "cherry bulbs"
|
||||
desc = "They're like little Space Christmas lights!"
|
||||
icon_state = "cherry_bulb"
|
||||
filling_color = "#FF0000"
|
||||
bitesize_mod = 2
|
||||
foodtype = FRUIT
|
||||
grind_results = list(/datum/reagent/consumable/cherryjelly = 0)
|
||||
tastes = list("cherry" = 1)
|
||||
wine_power = 50
|
||||
|
||||
// Grapes
|
||||
/obj/item/seeds/grape
|
||||
name = "pack of grape seeds"
|
||||
@@ -224,6 +250,10 @@
|
||||
species = "strawberry"
|
||||
plantname = "Strawberry Vine"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/strawberry
|
||||
growthstages = 6
|
||||
growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
|
||||
icon_grow = "strawberry-grow"
|
||||
icon_dead = "berry-dead"
|
||||
reagents_add = list("vitamin" = 0.07, "nutriment" = 0.1, "sugar" = 0.2)
|
||||
mutatelist = list()
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
icon_grow = "lime-grow"
|
||||
icon_dead = "lime-dead"
|
||||
genes = list(/datum/plant_gene/trait/repeated_harvest)
|
||||
mutatelist = list(/obj/item/seeds/lime)
|
||||
mutatelist = list(/obj/item/seeds/lime, /obj/item/seeds/orange_3d)
|
||||
reagents_add = list("vitamin" = 0.04, "nutriment" = 0.05)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/citrus/orange
|
||||
@@ -61,6 +61,42 @@
|
||||
juice_results = list("orangejuice" = 0)
|
||||
distill_reagent = "triple_sec"
|
||||
|
||||
//3D Orange
|
||||
/obj/item/seeds/orange_3d
|
||||
name = "pack of extradimensional orange seeds"
|
||||
desc = "Polygonal seeds."
|
||||
icon_state = "seed-orange"
|
||||
species = "orange"
|
||||
plantname = "Extradimensional Orange Tree"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/citrus/orange
|
||||
lifespan = 60
|
||||
endurance = 50
|
||||
yield = 5
|
||||
potency = 20
|
||||
growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
|
||||
icon_grow = "lime-grow"
|
||||
icon_dead = "lime-dead"
|
||||
genes = list(/datum/plant_gene/trait/repeated_harvest)
|
||||
reagents_add = list("vitamin" = 0.04, "nutriment" = 0.05, "haloperidol" = 0.15)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/citrus/orange_3d
|
||||
seed = /obj/item/seeds/orange
|
||||
name = "extradminesional orange"
|
||||
desc = "You can hardly wrap your head around this thing."
|
||||
icon_state = "orang"
|
||||
filling_color = "#FFA500"
|
||||
juice_results = list("orangejuice" = 0)
|
||||
distill_reagent = "triple_sec"
|
||||
tastes = list("polygons" = 1, "oranges" = 1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/citrus/orange_3d/pickup(mob/user)
|
||||
. = ..()
|
||||
icon_state = "orange"
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/citrus/orange_3d/dropped(mob/user)
|
||||
. = ..()
|
||||
icon_state = "orang"
|
||||
|
||||
// Lemon
|
||||
/obj/item/seeds/lemon
|
||||
name = "pack of lemon seeds"
|
||||
|
||||
@@ -183,6 +183,7 @@
|
||||
icon_grow = "moonflower-grow"
|
||||
icon_dead = "sunflower-dead"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/moonflower
|
||||
genes = list(/datum/plant_gene/trait/glow/purple)
|
||||
mutatelist = list()
|
||||
reagents_add = list("moonshine" = 0.2, "vitamin" = 0.02, "nutriment" = 0.02)
|
||||
rarity = 15
|
||||
@@ -293,8 +294,8 @@
|
||||
/obj/item/seeds/bee_balm/honey
|
||||
name = "pack of Honey Balm seeds"
|
||||
desc = "These seeds grow into Honey Balms."
|
||||
icon_state = "seed-bee_balmalt"
|
||||
species = "seed-bee_balm_alt"
|
||||
icon_state = "seed-bee_balm_alt"
|
||||
species = "bee_balmalt"
|
||||
plantname = "Honey Balm Pods"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/bee_balm/honey
|
||||
endurance = 1
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
icon_grow = "grass-grow"
|
||||
icon_dead = "grass-dead"
|
||||
genes = list(/datum/plant_gene/trait/repeated_harvest)
|
||||
mutatelist = list(/obj/item/seeds/grass/carpet)
|
||||
mutatelist = list(/obj/item/seeds/grass/carpet, /obj/item/seeds/grass/fairy)
|
||||
reagents_add = list("nutriment" = 0.02, "hydrogen" = 0.05)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/grass
|
||||
@@ -40,6 +40,27 @@
|
||||
new stacktype(user.drop_location(), grassAmt)
|
||||
qdel(src)
|
||||
|
||||
//Fairygrass
|
||||
/obj/item/seeds/grass/fairy
|
||||
name = "pack of fairygrass seeds"
|
||||
desc = "These seeds grow into a more mystical grass."
|
||||
icon_state = "seed-fairygrass"
|
||||
species = "fairygrass"
|
||||
plantname = "Fairygrass"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/grass/fairy
|
||||
icon_grow = "fairygrass-grow"
|
||||
icon_dead = "fairygrass-dead"
|
||||
genes = list(/datum/plant_gene/trait/repeated_harvest, /datum/plant_gene/trait/glow/blue)
|
||||
reagents_add = list("nutriment" = 0.02, "hydrogen" = 0.05, "space_drugs" = 0.15)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/grass/fairy
|
||||
seed = /obj/item/seeds/grass/fairy
|
||||
name = "fairygrass"
|
||||
desc = "Blue, glowing, and smells fainly of mushrooms."
|
||||
icon_state = "fairygrassclump"
|
||||
filling_color = "#3399ff"
|
||||
stacktype = /obj/item/stack/tile/fairygrass
|
||||
|
||||
// Carpet
|
||||
/obj/item/seeds/grass/carpet
|
||||
name = "pack of carpet seeds"
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
species = "holymelon"
|
||||
plantname = "Holy Melon Vines"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/holymelon
|
||||
genes = list(/datum/plant_gene/trait/glow/yellow)
|
||||
mutatelist = list()
|
||||
reagents_add = list("holywater" = 0.2, "vitamin" = 0.04, "nutriment" = 0.1)
|
||||
rarity = 20
|
||||
|
||||
@@ -142,6 +142,7 @@
|
||||
yield = 4
|
||||
growthstages = 3
|
||||
reagents_add = list("sugar" = 0.25)
|
||||
mutatelist = list(/obj/item/seeds/bamboo)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/sugarcane
|
||||
seed = /obj/item/seeds/sugarcane
|
||||
@@ -239,3 +240,282 @@
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/ash_flora/cactus_fruit
|
||||
growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
|
||||
growthstages = 2
|
||||
|
||||
// Coconut
|
||||
/obj/item/seeds/coconut
|
||||
name = "pack of coconut seeds"
|
||||
desc = "They're seeds that grow into coconut palm trees."
|
||||
icon_state = "seed-coconut"
|
||||
species = "coconut"
|
||||
plantname = "Coconut Palm Tree"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/coconut
|
||||
lifespan = 50
|
||||
endurance = 30
|
||||
potency = 35
|
||||
growing_icon = 'icons/obj/hydroponics/growing.dmi'
|
||||
icon_dead = "coconut-dead"
|
||||
genes = list(/datum/plant_gene/trait/repeated_harvest)
|
||||
forbiddengenes = list(/datum/plant_gene/trait/squash, /datum/plant_gene/trait/stinging)
|
||||
reagents_add = list("coconutmilk" = 0.3)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/coconut
|
||||
seed = /obj/item/seeds/coconut
|
||||
name = "coconut"
|
||||
desc = "Hard shell of a nut containing delicious milk inside. Perhaps try using something sharp?"
|
||||
icon_state = "coconut"
|
||||
item_state = "coconut"
|
||||
possible_transfer_amounts = list(5, 10, 15, 20, 25, 30, 50)
|
||||
spillable = FALSE
|
||||
resistance_flags = ACID_PROOF
|
||||
volume = 150 //so it won't cut reagents despite having the capacity for them
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
force = 5
|
||||
throwforce = 5
|
||||
hitsound = 'sound/weapons/klonk.ogg'
|
||||
attack_verb = list("klonked", "donked", "bonked")
|
||||
var/opened = FALSE
|
||||
var/carved = FALSE
|
||||
var/chopped = FALSE
|
||||
var/straw = FALSE
|
||||
var/fused = FALSE
|
||||
var/fusedactive = FALSE
|
||||
var/defused = FALSE
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/coconut/Initialize(mapload, obj/item/seeds/new_seed)
|
||||
. = ..()
|
||||
var/newvolume
|
||||
newvolume = 50 + round(seed.potency,10)
|
||||
if (seed.get_gene(/datum/plant_gene/trait/maxchem))
|
||||
newvolume = newvolume + 50
|
||||
volume = newvolume
|
||||
reagents.maximum_volume = newvolume
|
||||
reagents.update_total()
|
||||
|
||||
transform *= TRANSFORM_USING_VARIABLE(40, 100) + 0.5 //temporary fix for size?
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/coconut/attack_self(mob/user)
|
||||
if (opened == TRUE)
|
||||
if(possible_transfer_amounts.len)
|
||||
var/i=0
|
||||
for(var/A in possible_transfer_amounts)
|
||||
i++
|
||||
if(A == amount_per_transfer_from_this)
|
||||
if(i<possible_transfer_amounts.len)
|
||||
amount_per_transfer_from_this = possible_transfer_amounts[i+1]
|
||||
else
|
||||
amount_per_transfer_from_this = possible_transfer_amounts[1]
|
||||
to_chat(user, "<span class='notice'>[src]'s transfer amount is now [amount_per_transfer_from_this] units.</span>")
|
||||
return
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/coconut/attackby(obj/item/W, mob/user, params)
|
||||
//DEFUSING NADE LOGIC
|
||||
if (W.tool_behaviour == TOOL_WIRECUTTER && fused == TRUE)
|
||||
user.show_message("<span class='notice'>You cut the fuse!</span>", 1)
|
||||
playsound(user, W.hitsound, 50, 1, -1)
|
||||
icon_state = "coconut_carved"
|
||||
desc = "A coconut. This one's got a hole in it."
|
||||
name = "coconut"
|
||||
defused = TRUE
|
||||
fused = FALSE
|
||||
fusedactive = FALSE
|
||||
if(!seed.get_gene(/datum/plant_gene/trait/glow))
|
||||
set_light(0, 0.0)
|
||||
return
|
||||
//IGNITING NADE LOGIC
|
||||
if(fusedactive == FALSE && fused == TRUE)
|
||||
var/lighting_text = W.ignition_effect(src, user)
|
||||
if(lighting_text)
|
||||
user.visible_message("<span class='warning'>[user] ignites [src]'s fuse!</span>", "<span class='userdanger'>You ignite the [src]'s fuse!</span>")
|
||||
fusedactive = TRUE
|
||||
defused = FALSE
|
||||
playsound(src, 'sound/effects/fuse.ogg', 100, 0)
|
||||
message_admins("[ADMIN_LOOKUPFLW(user)] ignited a coconut bomb for detonation at [ADMIN_VERBOSEJMP(user)] "+ pretty_string_from_reagent_list(reagents.reagent_list))
|
||||
log_game("[key_name(user)] primed a coconut grenade for detonation at [AREACOORD(user)].")
|
||||
addtimer(CALLBACK(src, .proc/prime), 5 SECONDS)
|
||||
icon_state = "coconut_grenade_active"
|
||||
desc = "RUN!"
|
||||
if(!seed.get_gene(/datum/plant_gene/trait/glow))
|
||||
light_color = "#FFCC66" //for the fuse
|
||||
set_light(3, 0.8)
|
||||
return
|
||||
|
||||
//ADDING A FUSE, NADE LOGIC
|
||||
if (istype(W,/obj/item/stack/sheet/cloth) || istype(W,/obj/item/stack/sheet/durathread))
|
||||
if (carved == TRUE && straw == FALSE && fused == FALSE)
|
||||
user.show_message("<span class='notice'>You add a fuse to the coconut!</span>", 1)
|
||||
W.use(1)
|
||||
fused = TRUE
|
||||
icon_state = "coconut_grenade"
|
||||
desc = "A makeshift bomb made out of a coconut. You estimate the fuse is long enough for 5 seconds."
|
||||
name = "coconut bomb"
|
||||
return
|
||||
//ADDING STRAW LOGIC
|
||||
if (istype(W,/obj/item/stack/sheet/mineral/bamboo) && opened == TRUE && straw == FALSE && fused == FALSE)
|
||||
user.show_message("<span class='notice'>You add a bamboo straw to the coconut!</span>", 1)
|
||||
straw = TRUE
|
||||
W.use(1)
|
||||
icon_state += "_straw"
|
||||
desc = "You can already feel like you're on a tropical vacation."
|
||||
//OPENING THE NUT LOGIC
|
||||
if (carved == FALSE && chopped == FALSE)
|
||||
if(W.tool_behaviour == TOOL_SCREWDRIVER)
|
||||
user.show_message("<span class='notice'>You make a hole in the coconut!</span>", 1)
|
||||
carved = TRUE
|
||||
opened = TRUE
|
||||
reagent_flags = OPENCONTAINER
|
||||
ENABLE_BITFIELD(reagents.reagents_holder_flags, OPENCONTAINER)
|
||||
icon_state = "coconut_carved"
|
||||
desc = "A coconut. This one's got a hole in it."
|
||||
playsound(user, W.hitsound, 50, 1, -1)
|
||||
return
|
||||
else if(W.sharpness)
|
||||
user.show_message("<span class='notice'>You slice the coconut open!</span>", 1)
|
||||
chopped = TRUE
|
||||
opened = TRUE
|
||||
reagent_flags = OPENCONTAINER
|
||||
ENABLE_BITFIELD(reagents.reagents_holder_flags, OPENCONTAINER)
|
||||
spillable = TRUE
|
||||
icon_state = "coconut_chopped"
|
||||
desc = "A coconut. This one's sliced open, with all its delicious contents for your eyes to savour."
|
||||
playsound(user, W.hitsound, 50, 1, -1)
|
||||
return
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/coconut/attack(mob/living/M, mob/user, obj/target)
|
||||
if(M && user.a_intent == INTENT_HARM && spillable == FALSE)
|
||||
var/obj/item/bodypart/affecting = user.zone_selected //Find what the player is aiming at
|
||||
if (affecting == BODY_ZONE_HEAD && prob(15))
|
||||
//smash the nut open
|
||||
var/armor_block = min(90, M.run_armor_check(affecting, "melee", null, null,armour_penetration)) // For normal attack damage
|
||||
M.apply_damage(force, BRUTE, affecting, armor_block)
|
||||
|
||||
//Sound
|
||||
playsound(user, hitsound, 100, 1, -1)
|
||||
|
||||
//Attack logs
|
||||
log_combat(user, M, "attacked", src)
|
||||
|
||||
//Display an attack message.
|
||||
if(M != user)
|
||||
M.visible_message("<span class='danger'>[user] has cracked open a [src.name] on [M]'s head!</span>", \
|
||||
"<span class='userdanger'>[user] has cracked open a [src.name] on [M]'s head!</span>")
|
||||
else
|
||||
user.visible_message("<span class='danger'>[M] cracks open a [src.name] on their [M.p_them()] head!</span>", \
|
||||
"<span class='userdanger'>[M] cracks open a [src.name] on [M.p_their()] head!</span>")
|
||||
|
||||
//The coconut breaks open so splash its reagents
|
||||
spillable = TRUE
|
||||
SplashReagents(M)
|
||||
|
||||
//Lastly we remove the nut
|
||||
qdel(src)
|
||||
else
|
||||
. = ..()
|
||||
return
|
||||
|
||||
if(fusedactive)
|
||||
return
|
||||
|
||||
if(opened == FALSE)
|
||||
return
|
||||
|
||||
if(!canconsume(M, user))
|
||||
return
|
||||
|
||||
if(!reagents || !reagents.total_volume)
|
||||
to_chat(user, "<span class='warning'>[src] is empty!</span>")
|
||||
return
|
||||
|
||||
if(istype(M))
|
||||
if(user.a_intent == INTENT_HARM && spillable == TRUE)
|
||||
var/R
|
||||
M.visible_message("<span class='danger'>[user] splashes the contents of [src] onto [M]!</span>", \
|
||||
"<span class='userdanger'>[user] splashes the contents of [src] onto [M]!</span>")
|
||||
if(reagents)
|
||||
for(var/datum/reagent/A in reagents.reagent_list)
|
||||
R += A.id + " ("
|
||||
R += num2text(A.volume) + "),"
|
||||
if(isturf(target) && reagents.reagent_list.len && thrownby)
|
||||
log_combat(thrownby, target, "splashed (thrown) [english_list(reagents.reagent_list)]")
|
||||
message_admins("[ADMIN_LOOKUPFLW(thrownby)] splashed (thrown) [english_list(reagents.reagent_list)] on [target] at [ADMIN_VERBOSEJMP(target)].")
|
||||
reagents.reaction(M, TOUCH)
|
||||
log_combat(user, M, "splashed", R)
|
||||
reagents.clear_reagents()
|
||||
else
|
||||
if(M != user)
|
||||
M.visible_message("<span class='danger'>[user] attempts to feed something to [M].</span>", \
|
||||
"<span class='userdanger'>[user] attempts to feed something to you.</span>")
|
||||
if(!do_mob(user, M))
|
||||
return
|
||||
if(!reagents || !reagents.total_volume)
|
||||
return // The drink might be empty after the delay, such as by spam-feeding
|
||||
M.visible_message("<span class='danger'>[user] feeds something to [M].</span>", "<span class='userdanger'>[user] feeds something to you.</span>")
|
||||
log_combat(user, M, "fed", reagents.log_list())
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You swallow a gulp of [src].</span>")
|
||||
var/fraction = min(5/reagents.total_volume, 1)
|
||||
reagents.reaction(M, INGEST, fraction)
|
||||
addtimer(CALLBACK(reagents, /datum/reagents.proc/trans_to, M, 5), 5)
|
||||
playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/coconut/afterattack(obj/target, mob/user, proximity)
|
||||
. = ..()
|
||||
if(fusedactive)
|
||||
return
|
||||
|
||||
if((!proximity) || !check_allowed_items(target,target_self=1))
|
||||
return
|
||||
|
||||
if(target.is_refillable()) //Something like a glass. Player probably wants to transfer TO it.
|
||||
if(!reagents.total_volume)
|
||||
to_chat(user, "<span class='warning'>[src] is empty!</span>")
|
||||
return
|
||||
|
||||
if(target.reagents.holder_full())
|
||||
to_chat(user, "<span class='warning'>[target] is full.</span>")
|
||||
return
|
||||
|
||||
var/trans = reagents.trans_to(target, amount_per_transfer_from_this)
|
||||
to_chat(user, "<span class='notice'>You transfer [trans] unit\s of the solution to [target].</span>")
|
||||
|
||||
else if(target.is_drainable()) //A dispenser. Transfer FROM it TO us.
|
||||
if(!target.reagents.total_volume)
|
||||
to_chat(user, "<span class='warning'>[target] is empty and can't be refilled!</span>")
|
||||
return
|
||||
|
||||
if(reagents.holder_full())
|
||||
to_chat(user, "<span class='warning'>[src] is full.</span>")
|
||||
return
|
||||
|
||||
var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this)
|
||||
to_chat(user, "<span class='notice'>You fill [src] with [trans] unit\s of the contents of [target].</span>")
|
||||
|
||||
else if(reagents.total_volume)
|
||||
if(user.a_intent == INTENT_HARM && spillable == TRUE)
|
||||
user.visible_message("<span class='danger'>[user] splashes the contents of [src] onto [target]!</span>", \
|
||||
"<span class='notice'>You splash the contents of [src] onto [target].</span>")
|
||||
reagents.reaction(target, TOUCH)
|
||||
reagents.clear_reagents()
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/coconut/dropped(mob/user)
|
||||
. = ..()
|
||||
transform *= TRANSFORM_USING_VARIABLE(40, 100) + 0.5 //temporary fix for size?
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/coconut/proc/prime()
|
||||
if (!defused)
|
||||
var/turf/T = get_turf(src)
|
||||
reagents.chem_temp = 1000
|
||||
//Disable seperated contents when the grenade primes
|
||||
if (seed.get_gene(/datum/plant_gene/trait/noreact))
|
||||
DISABLE_BITFIELD(reagents.reagents_holder_flags, NO_REACT)
|
||||
reagents.handle_reactions()
|
||||
log_game("Coconut bomb detonation at [AREACOORD(T)], location [loc]")
|
||||
qdel(src)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/coconut/ex_act(severity)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/coconut/deconstruct(disassembled = TRUE)
|
||||
if(!disassembled && fused)
|
||||
prime()
|
||||
if(!QDELETED(src))
|
||||
qdel(src)
|
||||
@@ -98,6 +98,49 @@
|
||||
/obj/item/grown/log/steel/CheckAccepted(obj/item/I)
|
||||
return FALSE
|
||||
|
||||
/obj/item/seeds/bamboo
|
||||
name = "pack of bamboo seeds"
|
||||
desc = "A plant known for its flexible and resistant logs."
|
||||
icon_state = "seed-bamboo"
|
||||
species = "bamboo"
|
||||
plantname = "Bamboo"
|
||||
product = /obj/item/grown/log/bamboo
|
||||
lifespan = 80
|
||||
endurance = 70
|
||||
maturation = 15
|
||||
production = 2
|
||||
yield = 5
|
||||
potency = 50
|
||||
growthstages = 2
|
||||
growing_icon = 'icons/obj/hydroponics/growing.dmi'
|
||||
icon_dead = "bamboo-dead"
|
||||
genes = list(/datum/plant_gene/trait/repeated_harvest)
|
||||
|
||||
/obj/item/grown/log/bamboo
|
||||
seed = /obj/item/seeds/bamboo
|
||||
name = "bamboo log"
|
||||
desc = "A long and resistant bamboo log."
|
||||
icon_state = "bamboo"
|
||||
plank_type = /obj/item/stack/sheet/mineral/bamboo
|
||||
plank_name = "bamboo sticks"
|
||||
|
||||
/obj/item/grown/log/bamboo/CheckAccepted(obj/item/I)
|
||||
return FALSE
|
||||
|
||||
/obj/structure/punji_sticks
|
||||
name = "punji sticks"
|
||||
desc = "Don't step on this."
|
||||
icon = 'icons/obj/hydroponics/equipment.dmi'
|
||||
icon_state = "punji"
|
||||
resistance_flags = FLAMMABLE
|
||||
max_integrity = 30
|
||||
density = FALSE
|
||||
anchored = TRUE
|
||||
|
||||
/obj/structure/punji_sticks/Initialize(mapload)
|
||||
. = ..()
|
||||
AddComponent(/datum/component/caltrop, 20, 30, 100, CALTROP_BYPASS_SHOES)
|
||||
|
||||
/////////BONFIRES//////////
|
||||
|
||||
/obj/structure/bonfire
|
||||
|
||||
@@ -301,14 +301,39 @@
|
||||
/datum/plant_gene/trait/glow/shadow/glow_power(obj/item/seeds/S)
|
||||
return -max(S.potency*(rate*0.2), 0.2)
|
||||
|
||||
/datum/plant_gene/trait/glow/red
|
||||
name = "Red Electrical Glow"
|
||||
glow_color = LIGHT_COLOR_RED
|
||||
//Colored versions of bioluminescence.
|
||||
datum/plant_gene/trait/glow/white
|
||||
name = "White Bioluminescence"
|
||||
glow_color = "#FFFFFF"
|
||||
|
||||
/datum/plant_gene/trait/glow/berry
|
||||
name = "Strong Bioluminescence"
|
||||
rate = 0.05
|
||||
glow_color = null
|
||||
/datum/plant_gene/trait/glow/red
|
||||
name = "Red Bioluminescence"
|
||||
glow_color = "#FF3333"
|
||||
|
||||
/datum/plant_gene/trait/glow/yellow
|
||||
//not the disgusting glowshroom yellow hopefully
|
||||
name = "Yellow Bioluminescence"
|
||||
glow_color = "#FFFF66"
|
||||
|
||||
/datum/plant_gene/trait/glow/green
|
||||
//oh no, now i'm radioactive
|
||||
name = "Green Bioluminescence"
|
||||
glow_color = "#99FF99"
|
||||
|
||||
/datum/plant_gene/trait/glow/blue
|
||||
//the best one
|
||||
name = "Blue Bioluminescence"
|
||||
glow_color = "#6699FF"
|
||||
|
||||
/datum/plant_gene/trait/glow/purple
|
||||
//did you know that notepad++ doesnt think bioluminescence is a word
|
||||
name = "Purple Bioluminescence"
|
||||
glow_color = "#D966FF"
|
||||
|
||||
/datum/plant_gene/trait/glow/pink
|
||||
//gay tide station pride
|
||||
name = "Pink Bioluminescence"
|
||||
glow_color = "#FFB3DA"
|
||||
|
||||
|
||||
/datum/plant_gene/trait/teleport
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
var/rarity = 0 // How rare the plant is. Used for giving points to cargo when shipping off to CentCom.
|
||||
var/list/mutatelist = list() // The type of plants that this plant can mutate into.
|
||||
var/list/genes = list() // Plant genes are stored here, see plant_genes.dm for more info.
|
||||
var/list/forbiddengenes = list() // Plant genes that the seed may be forbidden from having.
|
||||
var/list/reagents_add = list()
|
||||
// A list of reagents to add to product.
|
||||
// Format: "reagent_id" = potency multiplier
|
||||
@@ -90,6 +91,10 @@
|
||||
/obj/item/seeds/proc/get_gene(typepath)
|
||||
return (locate(typepath) in genes)
|
||||
|
||||
obj/item/seeds/proc/is_gene_forbidden(typepath)
|
||||
return (locate(typepath) in forbiddengenes)
|
||||
|
||||
|
||||
/obj/item/seeds/proc/reagents_from_genes()
|
||||
reagents_add = list()
|
||||
for(var/datum/plant_gene/reagent/R in genes)
|
||||
@@ -390,7 +395,7 @@
|
||||
for(var/i in 1 to amount_random_traits)
|
||||
var/random_trait = pick((subtypesof(/datum/plant_gene/trait)-typesof(/datum/plant_gene/trait/plant_type)))
|
||||
var/datum/plant_gene/trait/T = new random_trait
|
||||
if(T.can_add(src))
|
||||
if(T.can_add(src) && !is_gene_forbidden(T))
|
||||
genes += T
|
||||
else
|
||||
qdel(T)
|
||||
|
||||
@@ -122,3 +122,19 @@
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You can't put the [A] into \the [src]!</span>")
|
||||
return FALSE
|
||||
|
||||
/obj/item/gun/syringe/blowgun
|
||||
name = "blowgun"
|
||||
desc = "Fire syringes at a short distance."
|
||||
icon_state = "blowgun"
|
||||
item_state = "blowgun"
|
||||
fire_sound = 'sound/weapons/grenadelaunch.ogg'
|
||||
|
||||
/obj/item/gun/syringe/blowgun/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0)
|
||||
visible_message("<span class='danger'>[user] starts aiming with a blowgun!</span>")
|
||||
if(do_after(user, 25, target = src))
|
||||
var/shot
|
||||
shot = ..()
|
||||
if (shot == TRUE)
|
||||
user.adjustStaminaLoss(15)
|
||||
user.adjustOxyLoss(15)
|
||||
|
||||
@@ -242,6 +242,23 @@
|
||||
. = 1
|
||||
..()
|
||||
|
||||
/datum/reagent/consumable/coconutmilk
|
||||
name = "Coconut Milk"
|
||||
id = "coconutmilk"
|
||||
description = "A transparent white liquid extracted from coconuts. Rich in taste."
|
||||
color = "#DFDFDF" // rgb: 223, 223, 223
|
||||
taste_description = "sweet milk"
|
||||
quality = DRINK_GOOD
|
||||
glass_icon_state = "glass_white"
|
||||
glass_name = "glass of coconut milk"
|
||||
glass_desc = "White and nutritious goodness!"
|
||||
|
||||
/datum/reagent/consumable/coconutmilk/on_mob_life(mob/living/carbon/M)
|
||||
if(M.getBruteLoss() && prob(20))
|
||||
M.heal_bodypart_damage(2,0, 0)
|
||||
. = 1
|
||||
..()
|
||||
|
||||
/datum/reagent/consumable/cream
|
||||
name = "Cream"
|
||||
id = "cream"
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
/obj/item/seeds/chanter = 3,
|
||||
/obj/item/seeds/chili = 3,
|
||||
/obj/item/seeds/cocoapod = 3,
|
||||
/obj/item/seeds/coconut = 3,
|
||||
/obj/item/seeds/coffee = 3,
|
||||
/obj/item/seeds/cotton = 3,
|
||||
/obj/item/seeds/corn = 3,
|
||||
|
||||
Reference in New Issue
Block a user