General wilderness updates; fixed frostbelle, adjusted scavenging, added some recipes and mushrooms.
Fixes for wilderness commit.
@@ -84,7 +84,7 @@
|
||||
// Works similarly to worn sprite_sheets, except the alternate sprites are used when the clothing/refit_for_species() proc is called.
|
||||
var/list/sprite_sheets_obj = list()
|
||||
|
||||
var/toolspeed = 1.0 // This is a multipler on how 'fast' a tool works. e.g. setting this to 0.5 will make the tool work twice as fast.
|
||||
var/toolspeed = 1 // This is a multipler on how 'fast' a tool works. e.g. setting this to 0.5 will make the tool work twice as fast.
|
||||
var/attackspeed = DEFAULT_ATTACK_COOLDOWN // How long click delay will be when using this, in 1/10ths of a second. Checked in the user's get_attack_speed().
|
||||
var/reach = 1 // Length of tiles it can reach, 1 is adjacent.
|
||||
var/addblends // Icon overlay for ADD highlights when applicable.
|
||||
|
||||
@@ -24,6 +24,18 @@
|
||||
drop_sound = 'sound/items/drop/axe.ogg'
|
||||
pickup_sound = 'sound/items/pickup/axe.ogg'
|
||||
|
||||
/obj/item/weapon/material/knife/machete/hatchet/stone
|
||||
name = "sharp rock"
|
||||
desc = "The secret is to bang the rocks together, guys."
|
||||
force_divisor = 0.2
|
||||
icon_state = "rock"
|
||||
item_state = "rock"
|
||||
attack_verb = list("chopped", "torn", "cut")
|
||||
|
||||
/obj/item/weapon/material/knife/machete/hatchet/stone/set_material(var/new_material)
|
||||
var/old_name = name
|
||||
. = ..()
|
||||
name = old_name
|
||||
/obj/item/weapon/material/knife/machete/hatchet/unathiknife
|
||||
name = "duelling knife"
|
||||
desc = "A length of leather-bound wood studded with razor-sharp teeth. How crude."
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
var/min_x_scale = 0.9
|
||||
var/min_y_scale = 0.9
|
||||
|
||||
var/removal_tool = /obj/item/weapon/shovel
|
||||
var/harvest_tool = null // The type of item used to harvest the plant.
|
||||
var/harvest_count = 0
|
||||
|
||||
@@ -39,21 +40,34 @@
|
||||
. = ..()
|
||||
if(harvest_count < max_harvests)
|
||||
. += get_harvestable_desc()
|
||||
if(harvest_tool)
|
||||
var/obj/item/tool = harvest_tool
|
||||
. += SPAN_NOTICE("\The [src] can be harvested with \a [initial(tool.name)].")
|
||||
|
||||
if(removal_tool)
|
||||
var/obj/item/tool = removal_tool
|
||||
. += SPAN_NOTICE("\The [src] can be removed with \a [initial(tool.name)].")
|
||||
|
||||
/obj/structure/flora/proc/get_harvestable_desc()
|
||||
return "<span class='notice'>\The [src] seems to have something hanging from it.</span>"
|
||||
|
||||
/obj/structure/flora/attackby(var/obj/item/weapon/W, var/mob/living/user)
|
||||
|
||||
if(can_harvest(W))
|
||||
var/harvest_spawn = pickweight(harvest_loot)
|
||||
var/atom/movable/AM = spawn_harvest(harvest_spawn, user)
|
||||
|
||||
if(!AM)
|
||||
to_chat(user, "<span class='notice'>You fail to harvest anything from \the [src].</span>")
|
||||
|
||||
if(AM)
|
||||
to_chat(user, SPAN_NOTICE("You harvest \the [AM] from \the [src]."))
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You harvest \the [AM] from \the [src].</span>")
|
||||
return
|
||||
to_chat(user, SPAN_NOTICE("You fail to harvest anything from \the [src]."))
|
||||
return
|
||||
|
||||
if(removal_tool && istype(W, removal_tool))
|
||||
to_chat(user, SPAN_WARNING("You start uprooting \the [src]..."))
|
||||
if(do_after(user, 30))
|
||||
visible_message(SPAN_NOTICE("\The [user] uproots and discards \the [src]!"))
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
..(W, user)
|
||||
|
||||
@@ -408,19 +422,28 @@
|
||||
desc = "This is a tiny well lit decorative christmas tree."
|
||||
icon_state = "plant-xmas"
|
||||
|
||||
/obj/structure/flora/mushroom
|
||||
name = "mushroom"
|
||||
desc = "Hey, this one seems like a fun guy."
|
||||
icon_state = "mush1"
|
||||
icon = 'icons/obj/flora/mushrooms.dmi'
|
||||
harvest_loot = list(/obj/item/weapon/reagent_containers/food/snacks/mushroomslice = 1)
|
||||
harvest_tool = /obj/item/weapon/material/knife
|
||||
max_harvests = 2
|
||||
min_harvests = 0
|
||||
|
||||
/obj/structure/flora/mushroom/Initialize()
|
||||
. = ..()
|
||||
icon_state = "mush[rand(1,4)]"
|
||||
if(prob(50))
|
||||
adjust_scale(-1, 1)
|
||||
pixel_x = rand(-4, 4)
|
||||
|
||||
/obj/structure/flora/sif
|
||||
icon = 'icons/obj/flora/sifflora.dmi'
|
||||
|
||||
/obj/structure/flora/sif/attack_hand(mob/user)
|
||||
if (user.a_intent == I_HURT)
|
||||
if(do_after(user, 5 SECONDS))
|
||||
user.visible_message("<span class='filter_notice'>\The [user] digs up \the [src.name].", "You dig up \the [src.name].</span>")
|
||||
qdel(src)
|
||||
else
|
||||
user.visible_message("<span class='filter_notice'>\The [user] pokes \the [src.name].", "You poke \the [src.name].</span>")
|
||||
|
||||
/datum/category_item/catalogue/flora/subterranean_bulbs
|
||||
name = "Sivian Flora - Subterranean Bulbs"
|
||||
name = "Sivian Flora - Cavebulbs"
|
||||
desc = "A plant which is native to Sif, it continues the trend of being a bioluminescent specimen. These plants \
|
||||
are generally suited for conditions experienced in caverns, which are generally dark and cold. It is not \
|
||||
known why this plant evolved to be bioluminescent, however this property has, unintentionally, allowed for \
|
||||
@@ -433,19 +456,22 @@
|
||||
value = CATALOGUER_REWARD_EASY
|
||||
|
||||
/obj/structure/flora/sif/subterranean
|
||||
name = "subterranean plant"
|
||||
name = "subterranean bulbs"
|
||||
desc = "This is a subterranean plant. It's bulbous ends glow faintly."
|
||||
icon_state = "glowplant"
|
||||
light_range = 2
|
||||
light_power = 0.6
|
||||
light_color = "#FF6633"
|
||||
catalogue_data = list(/datum/category_item/catalogue/flora/subterranean_bulbs)
|
||||
harvest_loot = list(/obj/item/weapon/reagent_containers/food/snacks/grown/sif/cavebulbs = 1)
|
||||
harvest_tool = /obj/item/weapon/material/knife
|
||||
max_harvests = 2
|
||||
min_harvests = 0
|
||||
|
||||
/obj/structure/flora/sif/subterranean/Initialize()
|
||||
icon_state = "[initial(icon_state)][rand(1,2)]"
|
||||
. = ..()
|
||||
|
||||
|
||||
/datum/category_item/catalogue/flora/eyebulbs
|
||||
name = "Sivian Flora - Eyebulbs"
|
||||
desc = "A plant native to Sif. On the end of its stems are bulbs which visually resemble \
|
||||
@@ -454,10 +480,14 @@
|
||||
value = CATALOGUER_REWARD_EASY
|
||||
|
||||
/obj/structure/flora/sif/eyes
|
||||
name = "mysterious bulbs"
|
||||
desc = "This is a mysterious looking plant. They kind of look like eyeballs. Creepy."
|
||||
name = "eyebulbs"
|
||||
desc = "This is a mysterious-looking plant. They kind of look like eyeballs. Creepy."
|
||||
icon_state = "eyeplant"
|
||||
catalogue_data = list(/datum/category_item/catalogue/flora/eyebulbs)
|
||||
harvest_tool = /obj/item/weapon/material/knife
|
||||
max_harvests = 2
|
||||
min_harvests = 0
|
||||
harvest_loot = list(/obj/item/weapon/reagent_containers/food/snacks/grown/sif/eyebulbs = 1)
|
||||
|
||||
/obj/structure/flora/sif/eyes/Initialize()
|
||||
icon_state = "[initial(icon_state)][rand(1,3)]"
|
||||
@@ -471,20 +501,20 @@
|
||||
value = CATALOGUER_REWARD_TRIVIAL
|
||||
|
||||
/obj/structure/flora/sif/tendrils
|
||||
name = "stocky tendrils"
|
||||
name = "wabback tendrils"
|
||||
desc = "A 'plant' made up of hardened moss. It has tiny hairs that bunch together to look like snow."
|
||||
icon_state = "grass"
|
||||
randomize_size = TRUE
|
||||
catalogue_data = list(/datum/category_item/catalogue/flora/mosstendrils)
|
||||
|
||||
harvest_tool = /obj/item/weapon/material/knife
|
||||
max_harvests = 1
|
||||
min_harvests = -4
|
||||
max_harvests = 3
|
||||
min_harvests = 0
|
||||
harvest_loot = list(
|
||||
/obj/item/seeds/wabback = 15,
|
||||
/obj/item/seeds/blackwabback = 1,
|
||||
/obj/item/seeds/wildwabback = 30
|
||||
)
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/wabback = 15,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/blackwabback = 1,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/wildwabback = 30
|
||||
)
|
||||
|
||||
/obj/structure/flora/sif/tendrils/Initialize()
|
||||
icon_state = "[initial(icon_state)][rand(1,3)]"
|
||||
@@ -503,26 +533,24 @@
|
||||
value = CATALOGUER_REWARD_HARD
|
||||
|
||||
/obj/structure/flora/sif/frostbelle
|
||||
name = "gnarly shrub"
|
||||
name = "frostbelle shrub"
|
||||
desc = "A stocky plant with fins bearing luminescent veins along its branches."
|
||||
icon_state = "grass"
|
||||
icon_state = "frostbelle"
|
||||
randomize_size = TRUE
|
||||
catalogue_data = list(/datum/category_item/catalogue/flora/frostbelle)
|
||||
|
||||
harvest_tool = /obj/item/weapon/material/knife
|
||||
max_harvests = 2
|
||||
min_harvests = -4
|
||||
min_harvests = 0
|
||||
harvest_loot = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/frostbelle = 1
|
||||
)
|
||||
)
|
||||
|
||||
var/variantnum = null
|
||||
|
||||
/obj/structure/flora/sif/frostbelle/Initialize()
|
||||
. = ..()
|
||||
|
||||
variantnum = rand(1,3)
|
||||
|
||||
update_icon()
|
||||
|
||||
/obj/structure/flora/sif/frostbelle/update_icon()
|
||||
@@ -530,7 +558,6 @@
|
||||
|
||||
if(max_harvests > 0 && harvest_count < max_harvests)
|
||||
icon_state = "[initial(icon_state)][variantnum]"
|
||||
|
||||
else
|
||||
icon_state = initial(icon_state)
|
||||
|
||||
|
||||
@@ -271,12 +271,12 @@
|
||||
|
||||
harvest_tool = /obj/item/weapon/material/knife
|
||||
max_harvests = 2
|
||||
min_harvests = -4
|
||||
min_harvests = 0
|
||||
harvest_loot = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/siffruit = 20,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/sifpod = 5,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/sifpod = 5,
|
||||
/obj/item/seeds/sifbulb = 1
|
||||
)
|
||||
)
|
||||
|
||||
var/light_shift = 0
|
||||
|
||||
|
||||
@@ -143,7 +143,7 @@ var/list/flooring_types
|
||||
/decl/flooring/grass/sif // Subtype for Sif's grass.
|
||||
name = "growth"
|
||||
desc = "A natural moss that has adapted to the sheer cold climate."
|
||||
flags = TURF_REMOVE_SHOVEL
|
||||
flags = 0
|
||||
icon = 'icons/turf/outdoors.dmi'
|
||||
icon_base = "grass_sif"
|
||||
build_type = /obj/item/stack/tile/grass/sif
|
||||
@@ -152,7 +152,7 @@ var/list/flooring_types
|
||||
/decl/flooring/grass/sif/forest
|
||||
name = "thick growth"
|
||||
desc = "A natural moss that has adapted to the sheer cold climate."
|
||||
flags = TURF_REMOVE_SHOVEL
|
||||
flags = 0
|
||||
icon = 'icons/turf/outdoors.dmi'
|
||||
icon_base = "grass_sif_dark"
|
||||
build_type = /obj/item/stack/tile/grass/sif/forest
|
||||
|
||||
@@ -4,4 +4,5 @@
|
||||
icon_state = "dirt-dark"
|
||||
edge_blending_priority = 2
|
||||
turf_layers = list(/turf/simulated/floor/outdoors/rocks)
|
||||
initial_flooring = /decl/flooring/dirt
|
||||
initial_flooring = /decl/flooring/dirt
|
||||
can_dig = TRUE
|
||||
|
||||
@@ -7,6 +7,7 @@ var/list/grass_types = list(
|
||||
icon_state = "grass0"
|
||||
edge_blending_priority = 4
|
||||
initial_flooring = /decl/flooring/grass
|
||||
can_dig = TRUE
|
||||
turf_layers = list(
|
||||
/turf/simulated/floor/outdoors/rocks,
|
||||
/turf/simulated/floor/outdoors/dirt
|
||||
@@ -42,7 +43,6 @@ var/list/grass_types = list(
|
||||
var/tree_chance = 2
|
||||
/*
|
||||
animal_chance = 0.5
|
||||
|
||||
animal_types = list(
|
||||
/mob/living/simple_mob/animal/sif/diyaab = 10,
|
||||
/mob/living/simple_mob/animal/sif/glitterfly = 2,
|
||||
@@ -94,4 +94,4 @@ var/list/grass_types = list(
|
||||
/obj/structure/flora/sif/frostbelle = 1,
|
||||
/obj/structure/flora/sif/eyes = 5,
|
||||
/obj/structure/flora/sif/tendrils = 30
|
||||
)
|
||||
)
|
||||
@@ -24,6 +24,42 @@ var/list/turf_edge_cache = list()
|
||||
|
||||
// When a turf gets demoted or promoted, this list gets adjusted. The top-most layer is the layer on the bottom of the list, due to how pop() works.
|
||||
var/list/turf_layers = list(/turf/simulated/floor/outdoors/rocks)
|
||||
var/can_dig = FALSE
|
||||
var/loot_count
|
||||
|
||||
/turf/simulated/floor/outdoors/proc/get_loot_type()
|
||||
if(loot_count && prob(60))
|
||||
return pick( \
|
||||
12;/obj/item/weapon/reagent_containers/food/snacks/worm, \
|
||||
1;/obj/item/weapon/material/knife/machete/hatchet/stone \
|
||||
)
|
||||
|
||||
/turf/simulated/floor/outdoors/Initialize(mapload)
|
||||
. = ..()
|
||||
if(can_dig && prob(33))
|
||||
loot_count = rand(1,3)
|
||||
|
||||
/turf/simulated/floor/outdoors/attackby(obj/item/C, mob/user)
|
||||
|
||||
if(can_dig && istype(C, /obj/item/weapon/shovel))
|
||||
to_chat(user, SPAN_NOTICE("\The [user] begins digging into \the [src] with \the [C]."))
|
||||
var/delay = (3 SECONDS * C.toolspeed)
|
||||
user.setClickCooldown(delay)
|
||||
if(do_after(user, delay, src))
|
||||
if(!(locate(/obj/machinery/portable_atmospherics/hydroponics/soil) in contents))
|
||||
var/obj/machinery/portable_atmospherics/hydroponics/soil/soil = new(src)
|
||||
user.visible_message(SPAN_NOTICE("\The [src] digs \a [soil] into \the [src]."))
|
||||
else
|
||||
var/loot_type = get_loot_type()
|
||||
if(loot_type)
|
||||
loot_count--
|
||||
var/obj/item/loot = new loot_type(src)
|
||||
to_chat(user, SPAN_NOTICE("You dug up \a [loot]!"))
|
||||
else
|
||||
to_chat(user, SPAN_NOTICE("You didn't find anything of note in \the [src]."))
|
||||
return
|
||||
|
||||
. = ..()
|
||||
|
||||
/turf/simulated/floor/Initialize(mapload)
|
||||
if(is_outdoors())
|
||||
@@ -80,6 +116,7 @@ var/list/turf_edge_cache = list()
|
||||
icon_state = "mud_dark"
|
||||
edge_blending_priority = 3
|
||||
initial_flooring = /decl/flooring/mud
|
||||
can_dig = TRUE
|
||||
|
||||
/turf/simulated/floor/outdoors/rocks
|
||||
name = "rocks"
|
||||
|
||||
@@ -1,15 +1,7 @@
|
||||
// this code here enables people to dig up worms from certain tiles.
|
||||
|
||||
/turf/simulated/floor/outdoors/grass/attackby(obj/item/weapon/S as obj, mob/user as mob)
|
||||
if(istype(S, /obj/item/weapon/shovel))
|
||||
to_chat(user, "<span class='notice'>You begin to dig in \the [src] with your [S].</span>")
|
||||
if(do_after(user, 4 SECONDS * S.toolspeed))
|
||||
to_chat(user, "<span class='notice'>\The [src] has been dug up, a worm pops from the ground.</span>")
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/worm(src)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You decide to not finish digging in \the [src].</span>")
|
||||
else if(istype(S, /obj/item/stack/tile/floor))
|
||||
if(istype(S, /obj/item/stack/tile/floor))
|
||||
ChangeTurf(/turf/simulated/floor, preserve_outdoors = TRUE)
|
||||
return
|
||||
else
|
||||
..()
|
||||
. = ..()
|
||||
@@ -825,23 +825,18 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/carpmeat/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("protein", 3)
|
||||
reagents.add_reagent(toxin_type, toxin_amount)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif
|
||||
desc = "A fillet of sivian fish meat."
|
||||
filling_color = "#2c2cff"
|
||||
color = "#2c2cff"
|
||||
toxin_type = "neurotoxic_protein"
|
||||
toxin_amount = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif/murkfish
|
||||
toxin_type = "murk_protein"
|
||||
reagents.add_reagent("seafood", 3)
|
||||
if(toxin_type && toxin_amount)
|
||||
reagents.add_reagent(toxin_type, toxin_amount)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish
|
||||
desc = "A fillet of fish meat."
|
||||
toxin_type = "neurotoxic_protein"
|
||||
toxin_amount = 1
|
||||
toxin_type = null
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif
|
||||
desc = "A fillet of sivian fish meat."
|
||||
filling_color = "#2c2cff"
|
||||
color = "#2c2cff"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/fishfingers
|
||||
name = "Fish Fingers"
|
||||
@@ -853,7 +848,7 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/fishfingers/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("protein", 4)
|
||||
reagents.add_reagent("seafood", 4)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/zestfish
|
||||
name = "Zesty Fish"
|
||||
@@ -865,11 +860,11 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/zestfish/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("protein", 4)
|
||||
reagents.add_reagent("seafood", 4)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice
|
||||
name = "huge mushroom slice"
|
||||
desc = "A slice from a huge mushroom."
|
||||
/obj/item/weapon/reagent_containers/food/snacks/mushroomslice
|
||||
name = "mushroom slice"
|
||||
desc = "A slice of mushroom."
|
||||
icon_state = "hugemushroomslice"
|
||||
filling_color = "#E0D7C5"
|
||||
center_of_mass = list("x"=17, "y"=16)
|
||||
@@ -877,7 +872,7 @@
|
||||
nutriment_desc = list("raw" = 2, "mushroom" = 2)
|
||||
bitesize = 6
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice/Initialize()
|
||||
/obj/item/weapon/reagent_containers/food/snacks/mushroomslice/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("psilocybin", 3)
|
||||
|
||||
@@ -3572,19 +3567,6 @@
|
||||
nutriment_amt = 3
|
||||
nutriment_desc = list("bread" = 3)
|
||||
|
||||
// potato + knife = raw sticks
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/attackby(obj/item/weapon/W, mob/user)
|
||||
if(seed && seed.kitchen_tag && seed.kitchen_tag == "potato" && istype(W,/obj/item/weapon/material/knife))
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/rawsticks(get_turf(src))
|
||||
to_chat(user, "<span class='notice'>You cut the potato.</span>")
|
||||
qdel(src)
|
||||
else if(seed && seed.kitchen_tag && seed.kitchen_tag == "sunflower" && istype(W,/obj/item/weapon/material/knife))
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/rawsunflower(get_turf(src))
|
||||
to_chat(user, "<span class='notice'>You remove the seeds from the flower, slightly damaging them.</span>")
|
||||
qdel(src)
|
||||
else
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/rawsticks
|
||||
name = "raw potato sticks"
|
||||
desc = "Raw fries, not very tasty."
|
||||
@@ -3972,7 +3954,8 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/wormsickly/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("fishbait", 10)
|
||||
reagents.add_reagent("fishbait", 9)
|
||||
reagents.add_reagent("protein", 3)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/worm
|
||||
name = "strange worm"
|
||||
@@ -3985,7 +3968,8 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/worm/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("fishbait", 20)
|
||||
reagents.add_reagent("fishbait", 15)
|
||||
reagents.add_reagent("protein", 5)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/wormdeluxe
|
||||
name = "deluxe worm"
|
||||
@@ -3998,7 +3982,8 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/wormdeluxe/Initialize()
|
||||
. = ..()
|
||||
reagents.add_reagent("fishbait", 40)
|
||||
reagents.add_reagent("fishbait", 30)
|
||||
reagents.add_reagent("protein", 10)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/siffruit
|
||||
name = "pulsing fruit"
|
||||
|
||||
@@ -191,13 +191,17 @@
|
||||
pocell.charge = pocell.maxcharge
|
||||
qdel(src)
|
||||
return
|
||||
else if(W.sharp)
|
||||
|
||||
if(W.sharp)
|
||||
|
||||
if(seed.kitchen_tag == "pumpkin") // Ugggh these checks are awful.
|
||||
user.show_message("<span class='notice'>You carve a face into [src]!</span>", 1)
|
||||
new /obj/item/clothing/head/pumpkinhead (user.loc)
|
||||
qdel(src)
|
||||
return
|
||||
else if(seed.chems)
|
||||
|
||||
if(seed.chems)
|
||||
|
||||
if(W.sharp && W.edge && !isnull(seed.chems["woodpulp"]))
|
||||
user.show_message("<span class='notice'>You make planks out of \the [src]!</span>", 1)
|
||||
playsound(src, 'sound/effects/woodcutting.ogg', 50, 1)
|
||||
@@ -215,36 +219,49 @@
|
||||
to_chat(user, "You add the newly-formed wood to the stack. It now contains [NG.amount] planks.")
|
||||
qdel(src)
|
||||
return
|
||||
else if(!isnull(seed.chems["potato"]))
|
||||
|
||||
if(seed.kitchen_tag == "sunflower")
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/rawsunflower(get_turf(src))
|
||||
to_chat(user, SPAN_NOTICE("You remove the seeds from the flower, slightly damaging them."))
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(seed.kitchen_tag == "potato" || !isnull(seed.chems["potato"]))
|
||||
to_chat(user, "You slice \the [src] into sticks.")
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/rawsticks(get_turf(src))
|
||||
qdel(src)
|
||||
return
|
||||
else if(!isnull(seed.chems["carrotjuice"]))
|
||||
|
||||
if(!isnull(seed.chems["carrotjuice"]))
|
||||
to_chat(user, "You slice \the [src] into sticks.")
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/carrotfries(get_turf(src))
|
||||
qdel(src)
|
||||
return
|
||||
else if(!isnull(seed.chems["pineapplejuice"]))
|
||||
|
||||
if(!isnull(seed.chems["pineapplejuice"]))
|
||||
to_chat(user, "You slice \the [src] into rings.")
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/pineapple_ring(get_turf(src))
|
||||
qdel(src)
|
||||
return
|
||||
else if(!isnull(seed.chems["soymilk"]))
|
||||
|
||||
if(!isnull(seed.chems["soymilk"]))
|
||||
to_chat(user, "You roughly chop up \the [src].")
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/soydope(get_turf(src))
|
||||
qdel(src)
|
||||
return
|
||||
else if(seed.get_trait(TRAIT_FLESH_COLOUR))
|
||||
|
||||
if(seed.get_trait(TRAIT_FLESH_COLOUR))
|
||||
to_chat(user, "You slice up \the [src].")
|
||||
var/slices = rand(3,5)
|
||||
var/reagents_to_transfer = round(reagents.total_volume/slices)
|
||||
for(var/i=1; i<=slices; i++)
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/fruit_slice/F = new(get_turf(src),seed)
|
||||
if(reagents_to_transfer) reagents.trans_to_obj(F,reagents_to_transfer)
|
||||
if(reagents_to_transfer)
|
||||
reagents.trans_to_obj(F,reagents_to_transfer)
|
||||
qdel(src)
|
||||
return
|
||||
..()
|
||||
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
|
||||
. = ..()
|
||||
|
||||
@@ -3,6 +3,3 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus
|
||||
plantname = "ambrosiadeus"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/sifpod
|
||||
plantname = "sifbulb"
|
||||
|
||||
39
code/modules/hydroponics/grown_sif.dm
Normal file
@@ -0,0 +1,39 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/sif
|
||||
var/seeds = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/Initialize(mapload, planttype) // Wild Sifplants have some seeds you can extract with a knife.
|
||||
. = ..()
|
||||
seeds = rand(1, 2)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/examine(mob/user)
|
||||
. = ..()
|
||||
if(seeds)
|
||||
to_chat(user, SPAN_NOTICE("You can see [seeds] seed\s in \the [src]. You might be able to extract them with a sharp object."))
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/attackby(var/obj/item/weapon/W, var/mob/living/user)
|
||||
if(seed && W.sharp && seeds > 0)
|
||||
var/take_seeds = min(seeds, rand(1,2))
|
||||
seeds -= take_seeds
|
||||
to_chat(user, SPAN_NOTICE("You stick \the [W] into \the [src] and lever out [take_seeds] seed\s."))
|
||||
for(var/i = 1 to take_seeds)
|
||||
new /obj/item/seeds(get_turf(src), seed.name)
|
||||
return
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/sifpod
|
||||
plantname = "sifbulb"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/wabback
|
||||
plantname = "wabback"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/blackwabback
|
||||
plantname = "blackwabback"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/wildwabback
|
||||
plantname = "wildwabback"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/eyebulbs
|
||||
plantname = "eyebulbs"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/cavebulbs
|
||||
plantname = "cavebulbs"
|
||||
@@ -13,7 +13,9 @@ GLOBAL_LIST_BOILERPLATE(all_seed_packs, /obj/item/seeds)
|
||||
var/datum/seed/seed
|
||||
var/modified = 0
|
||||
|
||||
/obj/item/seeds/Initialize()
|
||||
/obj/item/seeds/Initialize(var/ml, var/_seed_type)
|
||||
if(_seed_type in plant_controller.seeds)
|
||||
seed_type = _seed_type
|
||||
update_seed()
|
||||
. = ..()
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
|
||||
/datum/seed/apple/sif
|
||||
name = "sifbulb"
|
||||
seed_name = "sivian tree"
|
||||
seed_name = "sivian pod"
|
||||
display_name = "sivian pod"
|
||||
kitchen_tag = "apple"
|
||||
chems = list("nutriment" = list(1,5),"sifsap" = list(10,20))
|
||||
|
||||
@@ -22,6 +22,16 @@
|
||||
/obj/machinery/portable_atmospherics/hydroponics/soil/CanPass()
|
||||
return 1
|
||||
|
||||
/obj/machinery/portable_atmospherics/hydroponics/soil/attackby(obj/item/O, mob/user)
|
||||
if(istype(O, /obj/item/weapon/shovel) && user.a_intent == I_HURT)
|
||||
user.visible_message(SPAN_NOTICE("\The [user] begins filling in \the [src]."))
|
||||
if(do_after(user, 3 SECONDS) && !QDELETED(src))
|
||||
user.visible_message(SPAN_NOTICE("\The [user] fills in \the [src]."))
|
||||
qdel(src)
|
||||
return
|
||||
. = ..()
|
||||
|
||||
|
||||
// Holder for vine plants.
|
||||
// Icons for plants are generated as overlays, so setting it to invisible wouldn't work.
|
||||
// Hence using a blank icon.
|
||||
|
||||
@@ -42,7 +42,9 @@
|
||||
new /datum/stack_recipe("coilgun stock", /obj/item/weapon/coilgun_assembly, 5, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("crude fishing rod", /obj/item/weapon/material/fishing_rod/built, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("noticeboard", /obj/structure/noticeboard, 1, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("tanning rack", /obj/structure/tanning_rack, 3, one_per_turf = TRUE, time = 20, on_floor = TRUE, supplied_material = "[name]")
|
||||
new /datum/stack_recipe("tanning rack", /obj/structure/tanning_rack, 3, one_per_turf = TRUE, time = 20, on_floor = TRUE, supplied_material = "[name]"),
|
||||
new /datum/stack_recipe("roofing tile", /obj/item/stack/tile/roofing, 3, 4, 20, recycle_material = "[name]"),
|
||||
new /datum/stack_recipe("shovel", /obj/item/weapon/shovel/wood, 2, time = 10, on_floor = TRUE, supplied_material = "[name]")
|
||||
)
|
||||
|
||||
/datum/material/wood/sif
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
//visible message on mobs is defined as visible_message(var/message, var/self_message, var/blind_message)
|
||||
user.visible_message("<span class='notice'>\The [user] starts cutting hair off \the [src]</span>", "<span class='notice'>You start cutting the hair off \the [src]</span>", "You hear the sound of a knife rubbing against flesh")
|
||||
var/scraped = 0
|
||||
while(amount > 0 && do_after(user, 2.5 SECONDS)) // 2.5s per hide
|
||||
while(amount > 0 && do_after(user, 2.5 SECONDS, user))
|
||||
//Try locating an exisitng stack on the tile and add to there if possible
|
||||
var/obj/item/stack/hairlesshide/H = null
|
||||
for(var/obj/item/stack/hairlesshide/HS in user.loc) // Could be scraping something inside a locker, hence the .loc, not get_turf
|
||||
|
||||
@@ -128,6 +128,26 @@
|
||||
edge = 1
|
||||
var/digspeed = 40
|
||||
|
||||
/obj/item/weapon/shovel/wood
|
||||
icon_state = "whiteshovel"
|
||||
item_state = "whiteshovel"
|
||||
var/datum/material/material
|
||||
|
||||
/obj/item/weapon/shovel/wood/Initialize(var/ml, var/_mat)
|
||||
. = ..()
|
||||
material = get_material_by_name(_mat)
|
||||
if(!istype(material))
|
||||
material = null
|
||||
else
|
||||
name = "[material.display_name] shovel"
|
||||
matter = list("[material.name]" = 50)
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/shovel/wood/update_icon()
|
||||
. = ..()
|
||||
color = material ? material.icon_colour : initial(color)
|
||||
alpha = min(max(255 * material.opacity, 80), 255)
|
||||
|
||||
/obj/item/weapon/shovel/spade
|
||||
name = "spade"
|
||||
desc = "A small tool for digging and moving dirt."
|
||||
|
||||
@@ -6,24 +6,25 @@ var/list/mining_overlay_cache = list()
|
||||
icon = 'icons/turf/walls.dmi'
|
||||
icon_state = "rock-dark"
|
||||
density = 1
|
||||
|
||||
|
||||
/turf/simulated/mineral //wall piece
|
||||
name = "rock"
|
||||
icon = 'icons/turf/walls.dmi'
|
||||
icon_state = "rock"
|
||||
var/rock_side_icon_state = "rock_side"
|
||||
var/sand_icon_state = "asteroid"
|
||||
var/rock_icon_state = "rock"
|
||||
var/random_icon = 0
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
opacity = 1
|
||||
density = 1
|
||||
blocks_air = 1
|
||||
temperature = T0C
|
||||
|
||||
can_dirty = FALSE
|
||||
|
||||
var/floor_name = "sand"
|
||||
var/rock_side_icon_state = "rock_side"
|
||||
var/sand_icon_state = "asteroid"
|
||||
var/rock_icon_state = "rock"
|
||||
var/random_icon = 0
|
||||
|
||||
var/ore/mineral
|
||||
var/sand_dug
|
||||
var/mined_ore = 0
|
||||
@@ -65,6 +66,10 @@ var/list/mining_overlay_cache = list()
|
||||
|
||||
has_resources = 1
|
||||
|
||||
/turf/simulated/mineral/ChangeTurf(turf/N, tell_universe, force_lighting_update, preserve_outdoors)
|
||||
clear_ore_effects()
|
||||
. = ..()
|
||||
|
||||
// Alternative rock wall sprites.
|
||||
/turf/simulated/mineral/light
|
||||
icon_state = "rock-light"
|
||||
@@ -109,6 +114,14 @@ var/list/mining_overlay_cache = list()
|
||||
blocks_air = 0
|
||||
can_build_into_floor = TRUE
|
||||
|
||||
/turf/simulated/mineral/floor/mud
|
||||
icon_state = "mud"
|
||||
sand_icon_state = "mud"
|
||||
|
||||
/turf/simulated/mineral/floor/dirt
|
||||
icon_state = "dirt"
|
||||
sand_icon_state = "dirt"
|
||||
|
||||
//Alternative sand floor sprite.
|
||||
/turf/simulated/mineral/floor/light
|
||||
icon_state = "sand-light"
|
||||
@@ -140,6 +153,7 @@ var/list/mining_overlay_cache = list()
|
||||
opacity = 0
|
||||
blocks_air = 0
|
||||
can_build_into_floor = TRUE
|
||||
clear_ore_effects()
|
||||
update_general()
|
||||
|
||||
/turf/simulated/mineral/proc/make_wall()
|
||||
@@ -223,7 +237,7 @@ var/list/mining_overlay_cache = list()
|
||||
|
||||
//We are a sand floor
|
||||
else
|
||||
name = "sand"
|
||||
name = floor_name
|
||||
icon = 'icons/turf/flooring/asteroid.dmi'
|
||||
icon_state = sand_icon_state
|
||||
|
||||
|
||||
@@ -129,7 +129,7 @@
|
||||
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/javelin)
|
||||
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif
|
||||
|
||||
/datum/category_item/catalogue/fauna/icebass
|
||||
name = "Sivian Fauna - Glitter Bass"
|
||||
@@ -156,7 +156,7 @@
|
||||
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/icebass)
|
||||
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif
|
||||
|
||||
var/max_red = 150
|
||||
var/min_red = 50
|
||||
@@ -245,7 +245,7 @@
|
||||
|
||||
var/image/head_image
|
||||
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif
|
||||
|
||||
/mob/living/simple_mob/animal/passive/fish/rockfish/Initialize()
|
||||
. = ..()
|
||||
@@ -292,7 +292,7 @@
|
||||
|
||||
has_eye_glow = TRUE
|
||||
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif
|
||||
|
||||
/datum/category_item/catalogue/fauna/murkin
|
||||
name = "Sivian Fauna - Murkfish"
|
||||
@@ -319,4 +319,4 @@
|
||||
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/murkin)
|
||||
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif/murkfish
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif
|
||||
|
||||
@@ -24,6 +24,9 @@ var/global/list/map_count = list()
|
||||
var/floor_type = /turf/simulated/floor
|
||||
var/target_turf_type
|
||||
|
||||
var/skip_dense = FALSE
|
||||
var/keep_outside = FALSE
|
||||
|
||||
// Storage for the final iteration of the map.
|
||||
var/list/map = list() // Actual map.
|
||||
|
||||
@@ -61,11 +64,16 @@ var/global/list/map_count = list()
|
||||
rand_seed(seed)
|
||||
priority_process = 1
|
||||
|
||||
var/failed = FALSE
|
||||
for(var/i = 0;i<max_attempts;i++)
|
||||
if(generate())
|
||||
if(!do_not_announce) admin_notice("<span class='danger'>[capitalize(name)] generation completed in [round(0.1*(world.timeofday-start_time),0.1)] seconds.</span>", R_DEBUG)
|
||||
return
|
||||
if(!do_not_announce) admin_notice("<span class='danger'>[capitalize(name)] failed to generate ([round(0.1*(world.timeofday-start_time),0.1)] seconds): could not produce sane map.</span>", R_DEBUG)
|
||||
if(!generate())
|
||||
failed = TRUE
|
||||
|
||||
if(!do_not_announce)
|
||||
if(!failed)
|
||||
admin_notice("<span class='danger'>[capitalize(name)] generation completed in [round(0.1*(world.timeofday-start_time),0.1)] seconds.</span>", R_DEBUG)
|
||||
else
|
||||
admin_notice("<span class='danger'>[capitalize(name)] failed to generate ([round(0.1*(world.timeofday-start_time),0.1)] seconds): could not produce sane map.</span>", R_DEBUG)
|
||||
|
||||
/datum/random_map/proc/get_map_cell(var/x,var/y)
|
||||
if(!map)
|
||||
@@ -162,11 +170,11 @@ var/global/list/map_count = list()
|
||||
if(!current_cell)
|
||||
return 0
|
||||
var/turf/T = locate((origin_x-1)+x,(origin_y-1)+y,origin_z)
|
||||
if(!T || (target_turf_type && !istype(T,target_turf_type)))
|
||||
if(!T || (skip_dense && T.density) || (target_turf_type && !istype(T,target_turf_type)))
|
||||
return 0
|
||||
var/newpath = get_appropriate_path(map[current_cell])
|
||||
if(newpath)
|
||||
T.ChangeTurf(newpath)
|
||||
T.ChangeTurf(newpath, preserve_outdoors = keep_outside)
|
||||
get_additional_spawns(map[current_cell],T,get_spawn_dir(x, y))
|
||||
return T
|
||||
|
||||
|
||||
@@ -1105,14 +1105,12 @@
|
||||
name = "Neutralize Carpotoxin"
|
||||
id = "carpotoxin_neutral"
|
||||
result = "protein"
|
||||
required_reagents = list("radium" = 1, "carpotoxin" = 1, "sifsap" = 1)
|
||||
catalysts = list("sifsap" = 10)
|
||||
result_amount = 2
|
||||
required_reagents = list("enzyme" = 1, "carpotoxin" = 1, "sifsap" = 1)
|
||||
result_amount = 1
|
||||
|
||||
/decl/chemical_reaction/instant/neutralize_spidertoxin
|
||||
name = "Neutralize Spidertoxin"
|
||||
id = "spidertoxin_neutral"
|
||||
result = "protein"
|
||||
required_reagents = list("radium" = 1, "spidertoxin" = 1, "sifsap" = 1)
|
||||
catalysts = list("sifsap" = 10)
|
||||
result_amount = 2
|
||||
required_reagents = list("enzyme" = 1, "spidertoxin" = 1, "sifsap" = 1)
|
||||
result_amount = 1
|
||||
@@ -297,13 +297,6 @@
|
||||
color = "#FFFFAA"
|
||||
allergen_type = ALLERGEN_EGGS //Eggs contain egg
|
||||
|
||||
/datum/reagent/nutriment/protein/murk
|
||||
name = "murkfin protein"
|
||||
id = "murk_protein"
|
||||
taste_description = "mud"
|
||||
color = "#664330"
|
||||
allergen_type = ALLERGEN_FISH //Murkfin is fish
|
||||
|
||||
/datum/reagent/nutriment/honey
|
||||
name = "Honey"
|
||||
id = "honey"
|
||||
|
||||
@@ -627,10 +627,11 @@
|
||||
M.adjustToxLoss(2 * removed)
|
||||
M.adjustCloneLoss(2 * removed)
|
||||
|
||||
/datum/reagent/fishbait
|
||||
/datum/reagent/nutriment/fishbait
|
||||
name = "Fish Bait"
|
||||
id = "fishbait"
|
||||
description = "A natural slurry that particularily appeals to fish."
|
||||
taste_description = "earthy"
|
||||
taste_description = "slimy dirt"
|
||||
reagent_state = LIQUID
|
||||
color = "#62764E"
|
||||
color = "#62764E"
|
||||
nutriment_factor = 15
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
/datum/reagent/toxin/neurotoxic_protein
|
||||
name = "toxic protein"
|
||||
id = "neurotoxic_protein"
|
||||
description = "A weak neurotoxic chemical commonly found in Sivian fish meat."
|
||||
description = "A weak neurotoxic chemical."
|
||||
taste_description = "fish"
|
||||
reagent_state = LIQUID
|
||||
color = "#005555"
|
||||
|
||||
|
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 77 KiB |
BIN
icons/obj/flora/mushrooms.dmi
Normal file
|
After Width: | Height: | Size: 560 B |
|
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 67 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 28 KiB |
@@ -1948,6 +1948,7 @@
|
||||
#include "code\modules\hydroponics\grown.dm"
|
||||
#include "code\modules\hydroponics\grown_inedible.dm"
|
||||
#include "code\modules\hydroponics\grown_predefined.dm"
|
||||
#include "code\modules\hydroponics\grown_sif.dm"
|
||||
#include "code\modules\hydroponics\seed.dm"
|
||||
#include "code\modules\hydroponics\seed_controller.dm"
|
||||
#include "code\modules\hydroponics\seed_gene_mut.dm"
|
||||
|
||||