Files
Bubberstation/code/game/objects/structures/flora.dm
Whoneedspacee 8af93a638b Icebox Station (#51090)
* there was an attempt

* adds ice moon map

adds config options for choosing mining maps

areas now have options that affect random generation on them

weather now has an option to not target indoor areas

adds base for icemoon ruins

turns many 1's into booleans

adds ice chasms

adds ztraits for weather stuff

* fixes up ice ruins to be ice moon compatible

adds lower z level to the ice moon mine

ice chasms now have a smoothed icon

megafauna only spawn in the underground portion of ice moon now

* openspace fixes

* adds new areas and underground specific ruins

* Adds the abandoned village ruin for Ice Moon

* adds abandoned village ruin and fixes some area and tile stuff to work with ice moon

* random mining maps are no longer picked in the config

you can no longer change the mining map before setup is complete

* adds above and below ground ruin as a test

* adds debug functionality for ice moon ruins

fixes a bug where multiz was impossible unless there were shared areas because of whitelisted areas

adds multiple whitelist areas for ruin placement in a list

all underground areas are now outdoors

underground plasma lava rivers are now only spawned in unexplored areas so ruins don't get destroyed by them

* adds unique spawners to icemoon to replace tendrils

adds 2 new mobs to icemoon the polar bear and wolf

adds a clothing flag for shoes that dont slip on ice

modifies mining site to be ready except for the boss

adds the ability for tunnel width to be a specification, ice moon can have 1 tile wide tunnels and rarely 2 wide tunnels

adds a no caves mineral for ice moon ruins

* wolves no longer run into lava or chasms

bears now enrage sooner

bear spawners can now actually be created

adds base for ice moon atmospherics

adds base for a new boss and achievements / score

really bad coder icon for ice boots added

* ice moon now has it's own planetary atmos! (thank god)

* new frost miner stuff

megafauna recovery time can now be tailored to have different cooldowns to ranged or melee attacks
by default sets both of them, with two arguments the first is ranged cooldown and the second is melee cooldown

* converts a bunch of lavaland maps to be compatible with ice moon

adds tendrils from lavaland to the bottom of ice moon with the other megafauna

* updates mob drops for ice moon mobs

updates config entry default value for ice moon

updates ice moon map to have new gulag

* updates station parallax for icemoon

removes extra lavaland ported ruins

updates to demonic frost miner

adds ladder to icemoon map near station

* updates ice moon map to have the ladder inside the mining base

plant flora dont spawn on the lower z level of ice moon now

you get sand from mining rocks now

buncha demonic frost miner changes holy cow

* adds the buried library

* improves map, fixes comment

* make this crap work with the station cause i have to lol it is pretty cool though and now i understand the mapping crap better

* updates ice ruin blacklist

* ice moon stop being too cold thanks

icebox changes, now actually has its own z level that can spawn ruins and such instead of just being openspace

tunnel width is now not stupid

* fixes a demonic frost miner bug where orbs werent exploding after death

atmosphere temp is now correct

fixes library ruin for icemoon

polar bear range is now fixed, only aggros in a short range and follows further than 3 tiles

reverts necropolis chest change

* Adds a new ruin: bathouse, barebones edition

* adds many new ruins

fixes a bug with tunnel creation that caused it to enter no tunnel allowed areas

finishes the frost miner and adds loot to him

you can now force a wabbajack option

* main z level now always has gravity for ice box

* hopefully the hot springs arent the buggiest thing in the world anymore

protects areas near the station from having openspace

* icebox takes less players

fixes the ladder positioning on every icemoon map

* snowstorms now only occur on the station level

fixes some issues with the icebox z level having openspace over the lower level mining base

* Update code/datums/map_config.dm

Co-Authored-By: spookydonut <github@spooksoftware.com>

* Update code/datums/ruins/lavaland.dm

Co-Authored-By: spookydonut <github@spooksoftware.com>

* Update code/game/objects/structures/lavaland/necropolis_tendril.dm

Co-Authored-By: spookydonut <github@spooksoftware.com>

* Update code/game/turfs/closed/minerals.dm

Co-Authored-By: spookydonut <github@spooksoftware.com>

* Update code/game/turfs/open/chasm.dm

Co-Authored-By: spookydonut <github@spooksoftware.com>

* Update code/game/turfs/open/floor/plating/asteroid.dm

Co-Authored-By: spookydonut <github@spooksoftware.com>

* Update code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm

Co-Authored-By: spookydonut <github@spooksoftware.com>

* Update code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm

Co-Authored-By: spookydonut <github@spooksoftware.com>

* Update code/modules/mob/living/simple_animal/hostile/mining_mobs/polarbear.dm

Co-Authored-By: spookydonut <github@spooksoftware.com>

* Update code/modules/mob/living/simple_animal/hostile/mining_mobs/wolf.dm

Co-Authored-By: spookydonut <github@spooksoftware.com>

* Update code/modules/ruins/icemoonruin_code/hotsprings.dm

Co-Authored-By: spookydonut <github@spooksoftware.com>

* fixes areas on the lust ruin

polar bears now drop a goliath plate equivalent

wolfs now drop a watcher sinew equivalent

adds snow legions

adds a crusher trophy for the demonic frost miner that prevents movement

fixes a bug with asteroid mobs where the aggro icon would never show

adds ice to the snow cave tunnel generation

* starts work on the wendigo megafauna

* replaces snowball machine gun with more miner useful content

adds gentle var for knockback to prevent stunning on hit

polar bears move slower now

new icon for phase 2 demonic miner now

* fixes lust ruin areas

fixes whitespace

fixes nesting issues

adds underground specific mobs

* name / location fixes

demonic frost miner doesnt stun on knockback now

ice demons move faster

* fixes icebox having the wrong baseturf

* adds achievement defines to the wendigo

snowstorm for the lower z level again

adds a new helper for ranged target turfs

theres now a specific subtype for rivers

fixes a bug where ice and spawners spawned with rocks and other flora on top of them

adds indestructible ice rock turf

fixes a bug with ice demons teleport distance being incorrect

adds the start of wendigos attacks

* Apply suggestions from code review

Co-Authored-By: Rohesie <rohesie@gmail.com>

* Update code/modules/mapping/ruins.dm

Co-Authored-By: Rohesie <rohesie@gmail.com>

* Fixes a dumb bug with ruins from a webedit review

The syndicate shuttle can now land on mineral turfs

* the final commit, all that im going to change after this is documentation for procs lol

makes both ice moon z levels below the station underground, and makes it so they generate rivers of their baseturf

* adds nice animation to wendigo scream

* small fixes

* finishes autodoccing everything i could find

* ok im done for real now

* adds anywhere ruins

does review stuff

* review stuff

* ok it removes the stuff now

* fix removal

* fixes from the git

* adds surroundings to the asteroid and lavaland sites

adds butchering gloves to wrath ruins

the lower icebox levels are no longer station levels

fixes capitals on blood drunk and frost miner boss medals

adds engineering outpost ruin by trollbreeder

adds boxstation job changes to icebox

polar bear transformation no longer has immunity to lavaland mobs

fixes ice whelp spelling mistake

* fixes engi outpost atmospherics

fixes missing plating on solar panels

changes slowdown for icemoon turfs

* fixes ruins areas so tunnels can spawn into some of them

adds lights to icebox below area

openspace turfs mine the thing below them now

* fixes wall boundings on asteroid and lavaland domes

* ur lame armhulen

* adds public mining area to icebox

adds computer vendors to icebox

* minor fixes

* fixes map type error

* removes slowdown entirely

increases ore chances

fixes openspace on main map

fixes a ton of active turfs at roundstart

modifies demonic frost miner loot to be cooler and more useful since the boss was hardly killed during tests

tunnels are wider underground now

openspace now deletes itself if it spawns above a ruin

* improve da ruins

* tries to fix multiple atmos issues with ruins

removes bz from the planetary atmos since it could cause unstoppable chain reactions which would cause massive lag

demonic frost miner drill now automatically scans everywhere around you

fixes tunnel generation issue

makes it so randomly generated turfs inherit their no_ruins flags

Co-authored-by: Jonathan Church <jchurch093@gmail.com>
Co-authored-by: s <wesoda24@gmail.com>
Co-authored-by: spookydonut <github@spooksoftware.com>
Co-authored-by: Rohesie <rohesie@gmail.com>
2020-05-22 02:17:15 -07:00

476 lines
13 KiB
Plaintext

/obj/structure/flora
resistance_flags = FLAMMABLE
max_integrity = 150
anchored = TRUE
//trees
/obj/structure/flora/tree
name = "tree"
desc = "A large tree."
density = TRUE
pixel_x = -16
layer = FLY_LAYER
var/log_amount = 10
/obj/structure/flora/tree/attackby(obj/item/W, mob/user, params)
if(log_amount && (!(flags_1 & NODECONSTRUCT_1)))
if(W.get_sharpness() && W.force > 0)
if(W.hitsound)
playsound(get_turf(src), W.hitsound, 100, FALSE, FALSE)
user.visible_message("<span class='notice'>[user] begins to cut down [src] with [W].</span>","<span class='notice'>You begin to cut down [src] with [W].</span>", "<span class='hear'>You hear the sound of sawing.</span>")
if(do_after(user, 1000/W.force, target = src)) //5 seconds with 20 force, 8 seconds with a hatchet, 20 seconds with a shard.
user.visible_message("<span class='notice'>[user] fells [src] with the [W].</span>","<span class='notice'>You fell [src] with the [W].</span>", "<span class='hear'>You hear the sound of a tree falling.</span>")
playsound(get_turf(src), 'sound/effects/meteorimpact.ogg', 100 , FALSE, FALSE)
user.log_message("cut down [src] at [AREACOORD(src)]", LOG_ATTACK)
for(var/i=1 to log_amount)
new /obj/item/grown/log/tree(get_turf(src))
var/obj/structure/flora/stump/S = new(loc)
S.name = "[name] stump"
qdel(src)
else
return ..()
/obj/structure/flora/stump
name = "stump"
desc = "This represents our promise to the crew, and the station itself, to cut down as many trees as possible." //running naked through the trees
icon = 'icons/obj/flora/pinetrees.dmi'
icon_state = "tree_stump"
density = FALSE
pixel_x = -16
/obj/structure/flora/tree/pine
name = "pine tree"
desc = "A coniferous pine tree."
icon = 'icons/obj/flora/pinetrees.dmi'
icon_state = "pine_1"
var/list/icon_states = list("pine_1", "pine_2", "pine_3")
/obj/structure/flora/tree/pine/Initialize()
. = ..()
if(islist(icon_states && icon_states.len))
icon_state = pick(icon_states)
/obj/structure/flora/tree/pine/xmas
name = "xmas tree"
desc = "A wondrous decorated Christmas tree."
icon_state = "pine_c"
icon_states = null
flags_1 = NODECONSTRUCT_1 //protected by the christmas spirit
/obj/structure/flora/tree/pine/xmas/presents
icon_state = "pinepresents"
desc = "A wondrous decorated Christmas tree. It has presents!"
var/gift_type = /obj/item/a_gift/anything
var/unlimited = FALSE
var/static/list/took_presents //shared between all xmas trees
/obj/structure/flora/tree/pine/xmas/presents/Initialize()
. = ..()
if(!took_presents)
took_presents = list()
/obj/structure/flora/tree/pine/xmas/presents/attack_hand(mob/living/user)
. = ..()
if(.)
return
if(!user.ckey)
return
if(took_presents[user.ckey] && !unlimited)
to_chat(user, "<span class='warning'>There are no presents with your name on.</span>")
return
to_chat(user, "<span class='warning'>After a bit of rummaging, you locate a gift with your name on it!</span>")
if(!unlimited)
took_presents[user.ckey] = TRUE
var/obj/item/G = new gift_type(src)
user.put_in_hands(G)
/obj/structure/flora/tree/pine/xmas/presents/unlimited
desc = "A wonderous decorated Christmas tree. It has a seemly endless supply of presents!"
unlimited = TRUE
/obj/structure/flora/tree/dead
icon = 'icons/obj/flora/deadtrees.dmi'
desc = "A dead tree. How it died, you know not."
icon_state = "tree_1"
/obj/structure/flora/tree/palm
icon = 'icons/misc/beach2.dmi'
desc = "A tree straight from the tropics."
icon_state = "palm1"
/obj/structure/flora/tree/palm/Initialize()
. = ..()
icon_state = pick("palm1","palm2")
pixel_x = 0
/obj/structure/festivus
name = "festivus pole"
icon = 'icons/obj/flora/pinetrees.dmi'
icon_state = "festivus_pole"
desc = "During last year's Feats of Strength the Research Director was able to suplex this passing immobile rod into a planter."
/obj/structure/festivus/anchored
name = "suplexed rod"
desc = "A true feat of strength, almost as good as last year."
icon_state = "anchored_rod"
anchored = TRUE
/obj/structure/flora/tree/dead/Initialize()
icon_state = "tree_[rand(1, 6)]"
. = ..()
/obj/structure/flora/tree/jungle
name = "tree"
icon_state = "tree"
desc = "It's seriously hampering your view of the jungle."
icon = 'icons/obj/flora/jungletrees.dmi'
pixel_x = -48
pixel_y = -20
/obj/structure/flora/tree/jungle/Initialize()
icon_state = "[icon_state][rand(1, 6)]"
. = ..()
/obj/structure/flora/tree/jungle/small
pixel_y = 0
pixel_x = -32
icon = 'icons/obj/flora/jungletreesmall.dmi'
//grass
/obj/structure/flora/grass
name = "grass"
desc = "A patch of overgrown grass."
icon = 'icons/obj/flora/snowflora.dmi'
gender = PLURAL //"this is grass" not "this is a grass"
/obj/structure/flora/grass/brown
icon_state = "snowgrass1bb"
/obj/structure/flora/grass/brown/Initialize()
icon_state = "snowgrass[rand(1, 3)]bb"
. = ..()
/obj/structure/flora/grass/green
icon_state = "snowgrass1gb"
/obj/structure/flora/grass/green/Initialize()
icon_state = "snowgrass[rand(1, 3)]gb"
. = ..()
/obj/structure/flora/grass/both
icon_state = "snowgrassall1"
/obj/structure/flora/grass/both/Initialize()
icon_state = "snowgrassall[rand(1, 3)]"
. = ..()
//bushes
/obj/structure/flora/bush
name = "bush"
desc = "Some type of shrub."
icon = 'icons/obj/flora/snowflora.dmi'
icon_state = "snowbush1"
anchored = TRUE
/obj/structure/flora/bush/Initialize()
icon_state = "snowbush[rand(1, 6)]"
. = ..()
//newbushes
/obj/structure/flora/ausbushes
name = "bush"
desc = "Some kind of plant."
icon = 'icons/obj/flora/ausflora.dmi'
icon_state = "firstbush_1"
/obj/structure/flora/ausbushes/Initialize()
if(icon_state == "firstbush_1")
icon_state = "firstbush_[rand(1, 4)]"
. = ..()
/obj/structure/flora/ausbushes/reedbush
icon_state = "reedbush_1"
/obj/structure/flora/ausbushes/reedbush/Initialize()
icon_state = "reedbush_[rand(1, 4)]"
. = ..()
/obj/structure/flora/ausbushes/leafybush
icon_state = "leafybush_1"
/obj/structure/flora/ausbushes/leafybush/Initialize()
icon_state = "leafybush_[rand(1, 3)]"
. = ..()
/obj/structure/flora/ausbushes/palebush
icon_state = "palebush_1"
/obj/structure/flora/ausbushes/palebush/Initialize()
icon_state = "palebush_[rand(1, 4)]"
. = ..()
/obj/structure/flora/ausbushes/stalkybush
icon_state = "stalkybush_1"
/obj/structure/flora/ausbushes/stalkybush/Initialize()
icon_state = "stalkybush_[rand(1, 3)]"
. = ..()
/obj/structure/flora/ausbushes/grassybush
icon_state = "grassybush_1"
/obj/structure/flora/ausbushes/grassybush/Initialize()
icon_state = "grassybush_[rand(1, 4)]"
. = ..()
/obj/structure/flora/ausbushes/fernybush
icon_state = "fernybush_1"
/obj/structure/flora/ausbushes/fernybush/Initialize()
icon_state = "fernybush_[rand(1, 3)]"
. = ..()
/obj/structure/flora/ausbushes/sunnybush
icon_state = "sunnybush_1"
/obj/structure/flora/ausbushes/sunnybush/Initialize()
icon_state = "sunnybush_[rand(1, 3)]"
. = ..()
/obj/structure/flora/ausbushes/genericbush
icon_state = "genericbush_1"
/obj/structure/flora/ausbushes/genericbush/Initialize()
icon_state = "genericbush_[rand(1, 4)]"
. = ..()
/obj/structure/flora/ausbushes/pointybush
icon_state = "pointybush_1"
/obj/structure/flora/ausbushes/pointybush/Initialize()
icon_state = "pointybush_[rand(1, 4)]"
. = ..()
/obj/structure/flora/ausbushes/lavendergrass
icon_state = "lavendergrass_1"
/obj/structure/flora/ausbushes/lavendergrass/Initialize()
icon_state = "lavendergrass_[rand(1, 4)]"
. = ..()
/obj/structure/flora/ausbushes/ywflowers
icon_state = "ywflowers_1"
/obj/structure/flora/ausbushes/ywflowers/Initialize()
icon_state = "ywflowers_[rand(1, 3)]"
. = ..()
/obj/structure/flora/ausbushes/brflowers
icon_state = "brflowers_1"
/obj/structure/flora/ausbushes/brflowers/Initialize()
icon_state = "brflowers_[rand(1, 3)]"
. = ..()
/obj/structure/flora/ausbushes/ppflowers
icon_state = "ppflowers_1"
/obj/structure/flora/ausbushes/ppflowers/Initialize()
icon_state = "ppflowers_[rand(1, 3)]"
. = ..()
/obj/structure/flora/ausbushes/sparsegrass
icon_state = "sparsegrass_1"
/obj/structure/flora/ausbushes/sparsegrass/Initialize()
icon_state = "sparsegrass_[rand(1, 3)]"
. = ..()
/obj/structure/flora/ausbushes/fullgrass
icon_state = "fullgrass_1"
/obj/structure/flora/ausbushes/fullgrass/Initialize()
icon_state = "fullgrass_[rand(1, 3)]"
. = ..()
/obj/item/kirbyplants
name = "potted plant"
icon = 'icons/obj/flora/plants.dmi'
icon_state = "plant-01"
desc = "A little bit of nature contained in a pot."
layer = ABOVE_MOB_LAYER
w_class = WEIGHT_CLASS_HUGE
force = 10
throwforce = 13
throw_speed = 2
throw_range = 4
/obj/item/kirbyplants/ComponentInitialize()
. = ..()
AddComponent(/datum/component/tactical)
addtimer(CALLBACK(src, /datum.proc/_AddComponent, list(/datum/component/beauty, 500)), 0)
AddComponent(/datum/component/two_handed, require_twohands=TRUE, force_unwielded=10, force_wielded=10)
/obj/item/kirbyplants/random
icon = 'icons/obj/flora/_flora.dmi'
icon_state = "random_plant"
var/list/static/states
/obj/item/kirbyplants/random/Initialize()
. = ..()
icon = 'icons/obj/flora/plants.dmi'
if(!states)
generate_states()
icon_state = pick(states)
/obj/item/kirbyplants/random/proc/generate_states()
states = list()
for(var/i in 1 to 25)
var/number
if(i < 10)
number = "0[i]"
else
number = "[i]"
states += "plant-[number]"
states += "applebush"
/obj/item/kirbyplants/dead
name = "RD's potted plant"
desc = "A gift from the botanical staff, presented after the RD's reassignment. There's a tag on it that says \"Y'all come back now, y'hear?\"\nIt doesn't look very healthy..."
icon_state = "plant-25"
/obj/item/kirbyplants/photosynthetic
name = "photosynthetic potted plant"
desc = "A bioluminescent plant."
icon_state = "plant-09"
light_color = "#2cb2e8"
light_range = 3
/obj/item/kirbyplants/fullysynthetic
name = "plastic potted plant"
desc = "A fake, cheap looking, plastic tree. Perfect for people who kill every plant they touch."
icon_state = "plant-26"
custom_materials = (list(/datum/material/plastic = 8000))
/obj/item/kirbyplants/fullysynthetic/Initialize()
. = ..()
icon_state = "plant-[rand(26, 29)]"
/obj/item/kirbyplants/potty
name = "Potty the Potted Plant"
desc = "A secret agent staffed in the station's bar to protect the mystical cakehat."
icon_state = "potty"
//a rock is flora according to where the icon file is
//and now these defines
/obj/structure/flora/rock
icon_state = "basalt"
desc = "A volcanic rock. Pioneers used to ride these babies for miles."
icon = 'icons/obj/flora/rocks.dmi'
resistance_flags = FIRE_PROOF
density = TRUE
/// Itemstack that is dropped when a rock is mined with a pickaxe
var/obj/item/stack/mineResult = /obj/item/stack/ore/glass/basalt
/// Amount of the itemstack to drop
var/mineAmount = 20
/obj/structure/flora/rock/Initialize()
. = ..()
icon_state = "[icon_state][rand(1,3)]"
/obj/structure/flora/rock/Destroy()
if(mineResult && mineAmount)
new mineResult(loc, mineAmount)
. = ..()
/obj/structure/flora/rock/attackby(obj/item/W, mob/user, params)
if(!mineResult || W.tool_behaviour != TOOL_MINING)
return ..()
if(flags_1 & NODECONSTRUCT_1)
return ..()
to_chat(user, "<span class='notice'>You start mining...</span>")
if(W.use_tool(src, user, 40, volume=50))
to_chat(user, "<span class='notice'>You finish mining the rock.</span>")
SSblackbox.record_feedback("tally", "pick_used_mining", 1, W.type)
qdel(src)
/obj/structure/flora/rock/pile
icon_state = "lavarocks"
desc = "A pile of rocks."
//Jungle grass
/obj/structure/flora/grass/jungle
name = "jungle grass"
desc = "Thick alien flora."
icon = 'icons/obj/flora/jungleflora.dmi'
icon_state = "grassa"
/obj/structure/flora/grass/jungle/Initialize()
icon_state = "[icon_state][rand(1, 5)]"
. = ..()
/obj/structure/flora/grass/jungle/b
icon_state = "grassb"
//Jungle rocks
/obj/structure/flora/rock/jungle
icon_state = "rock"
desc = "A pile of rocks."
icon = 'icons/obj/flora/jungleflora.dmi'
density = FALSE
/obj/structure/flora/rock/jungle/Initialize()
. = ..()
icon_state = "[initial(icon_state)][rand(1,5)]"
//Jungle bushes
/obj/structure/flora/junglebush
name = "bush"
desc = "A wild plant that is found in jungles."
icon = 'icons/obj/flora/jungleflora.dmi'
icon_state = "busha"
/obj/structure/flora/junglebush/Initialize()
icon_state = "[icon_state][rand(1, 3)]"
. = ..()
/obj/structure/flora/junglebush/b
icon_state = "bushb"
/obj/structure/flora/junglebush/c
icon_state = "bushc"
/obj/structure/flora/junglebush/large
icon_state = "bush"
icon = 'icons/obj/flora/largejungleflora.dmi'
pixel_x = -16
pixel_y = -12
layer = ABOVE_ALL_MOB_LAYER
/obj/structure/flora/rock/pile/largejungle
name = "rocks"
icon_state = "rocks"
icon = 'icons/obj/flora/largejungleflora.dmi'
density = FALSE
pixel_x = -16
pixel_y = -16
/obj/structure/flora/rock/pile/largejungle/Initialize()
. = ..()
icon_state = "[initial(icon_state)][rand(1,3)]"