diff --git a/code/modules/mining/lavaland/ash_flora.dm b/code/modules/mining/lavaland/ash_flora.dm new file mode 100644 index 00000000000..2d831483647 --- /dev/null +++ b/code/modules/mining/lavaland/ash_flora.dm @@ -0,0 +1,252 @@ +/obj/structure/flora/ash + gender = PLURAL + layer = PROJECTILE_HIT_THRESHHOLD_LAYER //sporangiums up don't shoot + icon = 'icons/obj/lavaland/ash_flora.dmi' + icon_state = "l_mushroom" + name = "large mushrooms" + desc = "A number of large mushrooms, covered in a faint layer of ash and what can only be spores." + var/harvested_name = "shortened mushrooms" + var/harvested_desc = "Some quickly regrowing mushrooms, formerly known to be quite large." + var/needs_sharp_harvest = TRUE + var/harvest = /obj/item/ash_flora/shavings + var/harvest_amount_low = 1 + var/harvest_amount_high = 3 + var/harvest_time = 60 + var/harvest_message_low = "You pick a mushroom, but fail to collect many shavings from its cap." + var/harvest_message_med = "You pick a mushroom, carefully collecting the shavings from its cap." + var/harvest_message_high = "You harvest and collect shavings from several mushroom caps." + var/harvested = FALSE + var/base_icon + var/regrowth_time_low = 4800 + var/regrowth_time_high = 8400 + +/obj/structure/flora/ash/New() + ..() + base_icon = "[icon_state][rand(1, 4)]" + icon_state = base_icon + if(prob(15)) + harvest(null, TRUE) + +/obj/structure/flora/ash/proc/harvest(user, no_drop) + if(harvested) + return 0 + if(!no_drop) + var/rand_harvested = rand(harvest_amount_low, harvest_amount_high) + if(rand_harvested) + if(user) + var/msg = harvest_message_med + if(rand_harvested == harvest_amount_low) + msg = harvest_message_low + else if(rand_harvested == harvest_amount_high) + msg = harvest_message_high + user << "[msg]" + for(var/i in 1 to rand_harvested) + new harvest(get_turf(src)) + icon_state = "[base_icon]p" + name = harvested_name + desc = harvested_desc + harvested = TRUE + addtimer(src, "regrow", rand(regrowth_time_low, regrowth_time_high)) + return 1 + +/obj/structure/flora/ash/proc/regrow() + icon_state = base_icon + name = initial(name) + desc = initial(desc) + harvested = FALSE + +/obj/structure/flora/ash/attackby(obj/item/weapon/W, mob/user, params) + if(!harvested && needs_sharp_harvest && W.sharpness) + user.visible_message("[user] starts to harvest from [src] with [W].","You begin to harvest from [src] with [W].") + if(do_after(user, harvest_time, target = src)) + harvest(user) + else + return ..() + +/obj/structure/flora/ash/attack_hand(mob/user) + if(!harvested && !needs_sharp_harvest) + user.visible_message("[user] starts to harvest from [src].","You begin to harvest from [src].") + if(do_after(user, harvest_time, target = src)) + harvest(user) + else + ..() + +/obj/structure/flora/ash/leaf_shroom + icon_state = "s_mushroom" + name = "leafy mushrooms" + desc = "A number of mushrooms, each of which surrounds a greenish sporangium with a number of leaf-like structures." + harvested_name = "leafless mushrooms" + harvested_desc = "A bunch of formerly-leafed mushrooms, with their sporangiums exposed. Scandalous?" + harvest = /obj/item/ash_flora/mushroom_leaf + needs_sharp_harvest = FALSE + harvest_amount_high = 4 + harvest_time = 20 + harvest_message_low = "You pluck a single, suitable leaf." + harvest_message_med = "You pluck a number of leaves, leaving a few unsuitable ones." + harvest_message_high = "You pluck quite a lot of suitable leaves." + regrowth_time_low = 2400 + regrowth_time_high = 6000 + +/obj/structure/flora/ash/cap_shroom + icon_state = "r_mushroom" + name = "tall mushrooms" + desc = "Several mushrooms, the larger of which have a ring of conks at the midpoint of their stems." + harvested_name = "small mushrooms" + harvested_desc = "Several small mushrooms near the stumps of what likely were larger mushrooms." + harvest = /obj/item/ash_flora/mushroom_cap + harvest_amount_high = 4 + harvest_time = 50 + harvest_message_low = "You slice the cap off of a mushroom." + harvest_message_med = "You slice off a few conks from the larger mushrooms." + harvest_message_high = "You slice off a number of caps and conks from these mushrooms." + regrowth_time_low = 3000 + regrowth_time_high = 5400 + +/obj/structure/flora/ash/stem_shroom + icon_state = "t_mushroom" + name = "numerous mushrooms" + desc = "A large number of mushrooms, some of which have long, fleshy stems." + harvested_name = "tiny mushrooms" + harvested_desc = "A few tiny mushrooms around larger stumps. You can already see them growing back." + harvest = /obj/item/ash_flora/mushroom_stem + harvest_amount_high = 4 + harvest_time = 40 + harvest_message_low = "You pick and slice the cap off of a mushroom, leaving the stem." + harvest_message_med = "You pick and decapitate several mushrooms for their stems." + harvest_message_high = "You acquire a number of stems from these mushrooms." + regrowth_time_low = 3000 + regrowth_time_high = 6000 + +/obj/structure/flora/ash/cacti + icon_state = "cactus" + name = "fruiting cacti" + desc = "Several prickly cacti, brimming with ripe fruit and covered in a thin layer of ash." + harvested_name = "cacti" + harvested_desc = "A bunch of prickly cacti. You can see fruits slowly growing beneath the covering of ash." + harvest = /obj/item/ash_flora/cactus_fruit + needs_sharp_harvest = FALSE + harvest_amount_high = 2 + harvest_time = 10 + harvest_message_low = "You pick a cactus fruit." + harvest_message_med = "You pick several cactus fruit." //shouldn't show up, because you can't get more than two + harvest_message_high = "You pick a pair of cactus fruit." + regrowth_time_low = 4800 + regrowth_time_high = 7200 + +/obj/structure/flora/ash/cacti/Crossed(mob/AM) + if(ishuman(AM) && has_gravity(loc) && prob(70)) + var/mob/living/carbon/human/H = AM + if(!H.shoes && !H.lying) //ouch, my feet. + var/picked_def_zone = pick("l_leg", "r_leg") + var/obj/item/bodypart/O = H.get_bodypart(picked_def_zone) + if(!istype(O) || (PIERCEIMMUNE in H.dna.species.specflags)) + return + H.apply_damage(rand(3, 6), BRUTE, picked_def_zone) + H.Weaken(2) + H.visible_message("[H] steps on a cactus!", \ + "You step on a cactus!") + +/obj/item/ash_flora + name = "mushroom shavings" + desc = "Some shavings from a tall mushroom. With enough, might serve as a bowl." + icon = 'icons/obj/lavaland/ash_flora.dmi' + icon_state = "mushroom_shavings" + w_class = 1 + burn_state = FLAMMABLE + burntime = 30 + var/prepared = FALSE + var/prepared_type = /obj/item/ash_flora/shavings + var/standard_prep = TRUE + +/obj/item/ash_flora/New() + ..() + pixel_x = rand(-4, 4) + pixel_y = rand(-4, 4) + +/obj/item/ash_flora/attackby(obj/item/weapon/W, mob/user, params) + if(!standard_prep || !W.sharpness || !prepare(user)) + return ..() + +/obj/item/ash_flora/proc/prepare(mob/user) + if(!prepared) + prepared = TRUE + user << "You prepare [src]." + var/obj/item/ash_flora/A = new prepared_type(get_turf(src)) + if(src in get_both_hands(user)) + user.unEquip(src, TRUE) + user.put_in_hands(A) + qdel(src) + . = 1 + +/obj/item/ash_flora/shavings //for actual crafting + prepared = TRUE + +/obj/item/ash_flora/mushroom_leaf + name = "mushroom leaf" + desc = "A leaflike structure from a mushroom. You should probably wash the ash off." + icon_state = "mushroom_leaf" + standard_prep = FALSE + prepared_type = /obj/item/ash_flora/mushroom_leaf/prepared + +/obj/item/ash_flora/mushroom_leaf/afterattack(atom/target, mob/user, proximity_flag) + if(proximity_flag && (istype(target, /turf/open/floor/plating/ashplanet/wateryrock) || istype(target, /obj/structure/sink))) + prepare(user) + +/obj/item/ash_flora/mushroom_leaf/prepared + name = "washed mushroom leaf" + desc = "A greenish leaflike structure from a mushroom. Kind of like lettuce?" + icon_state = "mushroom_leaf_p" + prepared = TRUE + +/obj/item/ash_flora/mushroom_cap + name = "mushroom cap" + desc = "A mushroom cap. Possibly delicious, at least if you cut it up a bit first." + icon_state = "mushroom_cap" + prepared_type = /obj/item/ash_flora/mushroom_cap/prepared + +/obj/item/ash_flora/mushroom_cap/prepared + name = "sliced mushroom cap" + desc = "A sliced-up mushroom cap, revealing pale yellow innards. It smells faintly salty." + icon_state = "mushroom_cap_p" + prepared = TRUE + +/obj/item/ash_flora/mushroom_stem + name = "mushroom stem" + desc = "A mushroom stem. Slice it up, throw it in a stew." + icon_state = "mushroom_stem" + prepared_type = /obj/item/ash_flora/mushroom_stem/prepared + +/obj/item/ash_flora/mushroom_stem/prepared + name = "sliced mushroom stem" + desc = "A mushroom stem, cut in half to reveal orange flesh. Smells almost like potatos, but with a sour undertone." + icon_state = "mushroom_stem_p" + prepared = TRUE + +/obj/item/ash_flora/cactus_fruit + name = "cactus fruit" + desc = "A cactus fruit covered in a thick, reddish skin. And some ash." + icon_state = "cactus_fruit" + prepared_type = /obj/item/ash_flora/cactus_fruit/prepared + +/obj/item/ash_flora/cactus_fruit/prepared + name = "peeled cactus fruit" + desc = "A cactus fruit with the skin and ash carefully scraped off, revealing a faintly sweet-smelling yellow center." + icon_state = "cactus_fruit_p" + prepared = TRUE + +/obj/item/mushroom_bowl + name = "mushroom bowl" + desc = "A bowl made out of mushrooms. Not food, though it might have contained some at some point." + icon = 'icons/obj/lavaland/ash_flora.dmi' + icon_state = "mushroom_bowl" + w_class = 2 + burn_state = FLAMMABLE + burntime = 40 + +//what you can craft with these things +/datum/crafting_recipe/mushroom_bowl + name = "Mushroom Bowl" + result = /obj/item/mushroom_bowl + reqs = list(/obj/item/ash_flora/shavings = 5) + time = 30 + //category = CAT_PRIMAL //uncomment once ashplanet exists and this wouldn't just take up space fnr diff --git a/icons/obj/lavaland/ash_flora.dmi b/icons/obj/lavaland/ash_flora.dmi new file mode 100644 index 00000000000..d58541612d2 Binary files /dev/null and b/icons/obj/lavaland/ash_flora.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 455e2564fe0..57e25379006 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1276,6 +1276,7 @@ #include "code\modules\mining\laborcamp\laborminerals.dm" #include "code\modules\mining\laborcamp\laborshuttle.dm" #include "code\modules\mining\laborcamp\laborstacker.dm" +#include "code\modules\mining\lavaland\ash_flora.dm" #include "code\modules\mining\lavaland\lavaland_areas.dm" #include "code\modules\mining\lavaland\necropolis_chests.dm" #include "code\modules\mining\lavaland\ruins\gym.dm"