1135 lines
42 KiB
Plaintext
1135 lines
42 KiB
Plaintext
/*
|
||
⢀⡴⠑⡄⠀⠀⠀⠀⠀⠀⠀⣀⣀⣤⣤⣤⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||
⠸⡇⠀⠿⡀⠀⠀⠀⣀⡴⢿⣿⣿⣿⣿⣿⣿⣿⣷⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||
⠀⠀⠀⠀⠑⢄⣠⠾⠁⣀⣄⡈⠙⣿⣿⣿⣿⣿⣿⣿⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀
|
||
⠀⠀⠀⠀⢀⡀⠁⠀⠀⠈⠙⠛⠂⠈⣿⣿⣿⣿⣿⠿⡿⢿⣆⠀⠀⠀⠀⠀⠀⠀
|
||
⠀⠀⠀⢀⡾⣁⣀⠀⠴⠂⠙⣗⡀⠀⢻⣿⣿⠭⢤⣴⣦⣤⣹⠀⠀⠀⢀⢴⣶⣆
|
||
⠀⠀⢀⣾⣿⣿⣿⣷⣮⣽⣾⣿⣥⣴⣿⣿⡿⢂⠔⢚⡿⢿⣿⣦⣴⣾⠁⠸⣼⡿
|
||
⠀⢀⡞⠁⠙⠻⠿⠟⠉⠀⠛⢹⣿⣿⣿⣿⣿⣌⢤⣼⣿⣾⣿⡟⠉⠀⠀⠀⠀⠀
|
||
⠀⣾⣷⣶⠇⠀⠀⣤⣄⣀⡀⠈⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀ WARNING: THE SHITCODE BELOW HAS BEEN HASTILY
|
||
⠀⠉⠈⠉⠀⠀⢦⡈⢻⣿⣿⣿⣶⣶⣶⣶⣤⣽⡹⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀ COPY AND PASTED, PORTED FROM AWKWARD PLACES, AND PROBABLY MADE WORSE.
|
||
⠀⠀⠀⠀⠀⠀⠀⠉⠲⣽⡻⢿⣿⣿⣿⣿⣿⣿⣷⣜⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀
|
||
⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣷⣶⣮⣭⣽⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀
|
||
⠀⠀⠀⠀⠀⠀⣀⣀⣈⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⠀⠀⠀⠀⠀⠀⠀ WELCOME TO JT's TG-CODE HALLOWEEN BALL CODEFILE.
|
||
⠀⠀⠀⠀⠀⠀⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀ ALL OF IT WILL HOPEFULLY BE BELOW.
|
||
⠀⠀⠀⠀⠀⠀⠀⠹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠻⠿⠿⠿⠿⠛⠉
|
||
*/
|
||
//Also Shrek will crash your dmlang server repeatedly if you edit him.
|
||
//JT is weird, considering my handle is a acronym.
|
||
//Considering I can't grab defines from everywhere, I hope you enjoy strings and numbers plebs.
|
||
//Update - Moved to modular citadel so we are after everything has loaded...probably we gucci - jtgsz
|
||
|
||
/*
|
||
AREAS
|
||
*/
|
||
//This is generally how you handle planet areas, gen 1 large outside area is good for outside effects.
|
||
//PS: Mountain has a soundloop, outside has a soundloop, inside has a soundloop, mountaininside is silent
|
||
//This is for the rain weather my man.
|
||
/area/eventmap
|
||
name = "Dont use this" //Its the parent to any dunces out there.
|
||
has_gravity = STANDARD_GRAVITY //We have gravity
|
||
icon = 'modular_citadel/code/modules/eventmaps/Spookystation/areas.dmi' //It unsets the icon. don't make a err icon.
|
||
requires_power = 0 // We don't need power anywhere.
|
||
flags_1 = NONE
|
||
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
|
||
|
||
/area/eventmap/outside //We are outside
|
||
name = "Outside"
|
||
icon_state = "outside"
|
||
outdoors = 0 //I set outdoors to false. So areas can be edited.
|
||
|
||
/area/eventmap/inside //We are inside, all things are pretty normal.
|
||
name = "Inside"
|
||
icon_state = "inside"
|
||
|
||
/area/eventmap/mountain //Mostly so I can see the area lines of the mountain area in the minimap.
|
||
name = "Mountain"
|
||
icon_state = "mountain"
|
||
var/mountain = 1
|
||
|
||
/area/eventmap/mountaininside
|
||
name = "Silent Mountain Inside"
|
||
icon_state = "mountain_inside"
|
||
outdoors = 0
|
||
|
||
/*
|
||
OUTSIDE WALLS I WANT NOT NEED
|
||
*/
|
||
//These exist mostly to limit the amount of space we use organically really.
|
||
//Decided to just use the denserock within the regular code.
|
||
|
||
/turf/closed/indestructible/spookytime/matrixblocker //Two times the reference power.
|
||
name = "matrix"
|
||
icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi'
|
||
icon_state = "matrix"
|
||
desc = "<font color='#157206'>You suddenly realize the truth - there is no spoon.<br>Digital simulation ends here ONCE AGAIN.</font>"
|
||
|
||
/*
|
||
OUTSIDE TURFS WITH NO GEN JUS MIDNIGHT LIGHT BABY
|
||
*/
|
||
|
||
//In a ideal world, we would have split the turfs onto a single parent.
|
||
//Then we would tree from INSIDE and OUTSIDE, with outside having the lighting set, for the day/night subsystem to change.
|
||
//Outside would also have the planetary atmos and config on it.
|
||
//Inside would be a case to case basis depending on if you want it to scrub or not.. and not have the lighting.
|
||
//Along with what needs to be constructed on etc.
|
||
//This is not a ideal world so enjoy the overload.
|
||
|
||
//Parent of all our outside turfs. Both the inside and outside should be on a parent like this.
|
||
/turf/open/floor/spooktime //But for now, we just handle what is outside, for light control etc.
|
||
name = "You fucked up pal"
|
||
desc = "Don't use this turf its a parent and just a holder."
|
||
planetary_atmos = 1 //REVERT TO INITIAL AIR GASMIX OVER TIME WITH LINDA. AKA SUPERSCRUBBER
|
||
light_range = 3 //MIDNIGHT BLUE
|
||
light_power = 0.15 //NOT PITCH BLACK, JUST REALLY DARK
|
||
light_color = "#00111a" //The light can technically cycle on a timer worldwide, but no daynight cycle.
|
||
baseturfs = /turf/open/floor/plating/spookbase/dirtattachmentpoint //If we explode or die somehow, we just become grass
|
||
gender = PLURAL //THE GENDER IS PLURAL
|
||
tiled_dirt = 0 //NO TILESMOOTHING DIRT/DIRT SPAWNS OR SOME SHIT
|
||
|
||
/turf/open/floor/spooktime/break_tile()
|
||
return
|
||
/turf/open/floor/spooktime/burn_tile()
|
||
return
|
||
|
||
/turf/open/floor/spooktime/pry_tile(obj/item/I, mob/user, silent = FALSE)
|
||
return //No prying these tiles, you instead shovel it if avail.
|
||
|
||
/*
|
||
Baseturf, when we call scrapeaway() after a shoveling. So people can attach tiles
|
||
*/
|
||
|
||
//WARNING VERY IMPORTANT AND HACKJOBBISH - Basically this handles construction on everything.
|
||
/turf/open/floor/plating/spookbase/dirtattachmentpoint //Lighted variant
|
||
name = "the ground"
|
||
desc = "Looks like its been dugged out and prepped for construction"
|
||
icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi'
|
||
icon_state = "dugdirt"
|
||
footstep = FOOTSTEP_GRASS
|
||
barefootstep = FOOTSTEP_GRASS
|
||
clawfootstep = FOOTSTEP_GRASS
|
||
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
|
||
attachment_holes = TRUE
|
||
planetary_atmos = 1
|
||
light_range = 3 //We reset this
|
||
light_power = 0.15 //The lighting will unset when people place their tiles/etc on it.
|
||
light_color = "#00111a" //It should be fine
|
||
|
||
baseturfs = /turf/open/floor/plating/spookbase/dirtattachmentpoint //No going lower than this.
|
||
|
||
/turf/open/floor/plating/spookbase/dirtattachmentpoint/mountain
|
||
name = "the ground"
|
||
desc = "It has been dug out and prepared for construction."
|
||
light_range = 0
|
||
light_power = 0
|
||
|
||
baseturfs = /turf/open/floor/plating/spookbase/dirtattachmentpoint/mountain
|
||
|
||
/turf/open/floor/plating/spookbase/sandattachmentpoint
|
||
name = "the sand"
|
||
desc = "Looks like its been dugged out and prepped for construction"
|
||
icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi'
|
||
icon_state = "dugsand"
|
||
footstep = FOOTSTEP_GRASS
|
||
barefootstep = FOOTSTEP_GRASS
|
||
clawfootstep = FOOTSTEP_GRASS
|
||
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
|
||
attachment_holes = TRUE
|
||
planetary_atmos = 1
|
||
light_range = 3
|
||
light_power = 0.15
|
||
light_color = "#00111a"
|
||
|
||
baseturfs = /turf/open/floor/plating/spookbase/sandattachmentpoint // The sand version.
|
||
|
||
/*
|
||
FLOOR TILES
|
||
*/
|
||
/obj/item/stack/tile/nonspooktimegrass
|
||
name = "clumps of grass"
|
||
singular_name = "clump of grass"
|
||
desc = "This is a clump of grass."
|
||
icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi'
|
||
icon_state = "grass_clump"
|
||
turf_type = /turf/open/floor/spooktime/nonspooktimegrass
|
||
resistance_flags = FLAMMABLE
|
||
|
||
/obj/item/stack/tile/normalasssand
|
||
name = "piles of sand"
|
||
singular_name = "pile of sand"
|
||
desc = "This is a pile of sand"
|
||
icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi'
|
||
icon_state = "sand_clump"
|
||
turf_type = /turf/open/floor/spooktime/beach
|
||
|
||
/*
|
||
IMPORTANT TURFS */
|
||
|
||
//Grass with no flora generation on it.
|
||
/turf/open/floor/spooktime/nonspooktimegrass
|
||
name = "grass patch"
|
||
desc = "You can't tell if this is real grass... Ah, who are you kidding, it totally is real grass."
|
||
icon_state = "grass_1" //Grass of the varied variety.
|
||
icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi'
|
||
baseturfs = /turf/open/floor/plating/spookbase/dirtattachmentpoint
|
||
footstep = FOOTSTEP_GRASS
|
||
barefootstep = FOOTSTEP_GRASS
|
||
clawfootstep = FOOTSTEP_GRASS
|
||
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
|
||
var/turfverb = "dig out"
|
||
|
||
/turf/open/floor/spooktime/nonspooktimegrass/Initialize(mapload) //Init rng icon.
|
||
. = ..()
|
||
icon_state = "grass_[rand(1,3)]"
|
||
|
||
/turf/open/floor/spooktime/nonspooktimegrass/attackby(obj/item/C, mob/user, params) //We dig it out with a shovel.
|
||
if((C.tool_behaviour == TOOL_SHOVEL) && params) //And beneath it we reveal dirt
|
||
new /obj/item/stack/tile/nonspooktimegrass(src)
|
||
user.visible_message("[user] digs up [src].", "<span class='notice'>You [turfverb] [src].</span>")
|
||
playsound(src, 'sound/effects/shovel_dig.ogg', 50, 1)
|
||
make_plating()
|
||
if(..())
|
||
return
|
||
|
||
|
||
//Dirt patches with no lighting.
|
||
/turf/open/floor/spooktime/dirtpatch
|
||
name = "clearly dirt"
|
||
desc = "Its dirt alright"
|
||
icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi'
|
||
icon_state = "smoothdarkdirt"
|
||
light_range = 0 //We set the lights to nothing on the CLEARLY DIRT
|
||
light_power = 0 //ayep
|
||
footstep = FOOTSTEP_SAND
|
||
barefootstep = FOOTSTEP_SAND
|
||
clawfootstep = FOOTSTEP_SAND
|
||
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
|
||
baseturfs = /turf/open/floor/plating/spookbase/dirtattachmentpoint/mountain //no light variant
|
||
var/turfverb = "dig out"
|
||
|
||
/turf/open/floor/spooktime/dirtpatch/attackby(obj/item/C, mob/user, params) //We dig it out with a shovel.
|
||
if((C.tool_behaviour == TOOL_SHOVEL) && params) //And beneath it we reveal dirt
|
||
user.visible_message("[user] digs up [src].", "<span class='notice'>You [turfverb] [src].</span>")
|
||
playsound(src, 'sound/effects/shovel_dig.ogg', 50, 1)
|
||
make_plating()
|
||
if(..())
|
||
return
|
||
|
||
//Snow with no planetary atmos, so the map doesn't atmos crash.
|
||
/turf/open/floor/spooktime/snow
|
||
gender = PLURAL
|
||
name = "snow"
|
||
icon = 'icons/turf/snow.dmi'
|
||
desc = "Looks cold."
|
||
icon_state = "snow"
|
||
slowdown = 2
|
||
light_range = 0
|
||
light_power = 0
|
||
bullet_sizzle = 1
|
||
footstep = FOOTSTEP_SAND
|
||
barefootstep = FOOTSTEP_SAND
|
||
clawfootstep = FOOTSTEP_SAND
|
||
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
|
||
|
||
/turf/open/floor/spooktime/snow/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
|
||
return
|
||
|
||
/turf/open/floor/spooktime/snow/crowbar_act(mob/living/user, obj/item/I)
|
||
return
|
||
|
||
/*
|
||
Basic Grass turf w Flora gen
|
||
*/
|
||
/turf/open/floor/spooktime/spooktimegrass
|
||
name = "the ground"
|
||
desc = "It clearly looks like grass and dirt, clearly."
|
||
icon_state = "grass_1"
|
||
icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi' //32x32 iconfile, sry we had different sizes.
|
||
broken_states = list("sand")
|
||
footstep = FOOTSTEP_GRASS //Finally I can have my footstep noises
|
||
barefootstep = FOOTSTEP_GRASS
|
||
clawfootstep = FOOTSTEP_GRASS
|
||
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
|
||
var/turfverb = "dig out"
|
||
|
||
|
||
baseturfs = /turf/open/floor/plating/spookbase/dirtattachmentpoint //beneath the grass there is dirt.
|
||
|
||
//Holders for what can occur on the turf.
|
||
var/obj/structure/flora/turfGrass = null
|
||
var/obj/structure/flora/turfTree = null
|
||
var/obj/structure/flora/turfAusflora = null
|
||
var/obj/structure/flora/turfRocks = null
|
||
var/obj/structure/flora/turfDebris = null
|
||
|
||
|
||
/turf/open/floor/spooktime/spooktimegrass/Initialize(mapload) //Considering adding dirtgen here too.
|
||
. = ..()
|
||
if(prob(1))
|
||
icon_state = "smoothdarkdirt" //Sometimes we can be dirt.
|
||
else
|
||
icon_state = "grass_[rand(1,3)]" //Icon state variation for how many states of grass I got... 3 lul
|
||
//If no fences, machines (soil patches are machines), etc. try to plant grass
|
||
if(!(\
|
||
(locate(/obj/structure) in src) || \
|
||
(locate(/obj/machinery) in src) ))
|
||
floraGen() //And off we go riding into hell.
|
||
update_icon()
|
||
|
||
/turf/open/floor/spooktime/spooktimegrass/attackby(obj/item/C, mob/user, params) //We dig it out with a shovel.
|
||
if((C.tool_behaviour == TOOL_SHOVEL) && params) //And beneath it we reveal dirt)
|
||
new /obj/item/stack/tile/nonspooktimegrass(src)
|
||
user.visible_message("[user] digs up [src].", "<span class='notice'>You [turfverb] [src].</span>")
|
||
playsound(src, 'sound/effects/shovel_dig.ogg', 50, 1)
|
||
make_plating()
|
||
if(..())
|
||
return
|
||
|
||
/turf/open/floor/spooktime/spooktimegrass/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
|
||
return //No replacing it
|
||
|
||
/turf/open/floor/spooktime/spooktimegrass/burn_tile()
|
||
return //No burning it
|
||
|
||
/turf/open/floor/spooktime/spooktimegrass/MakeSlippery(wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent)
|
||
return //No slippery
|
||
|
||
/turf/open/floor/spooktime/spooktimegrass/MakeDry()
|
||
return //No making it dry.
|
||
|
||
/*
|
||
FLORA GEN PROCEDURE
|
||
*/
|
||
|
||
//This is mostly for flora/doodads. I don't feel like there needs to be lake/cave and animals generation..
|
||
//For the halloween map at least, so I used the f13 flora gen and appended to it instead of usin cellular automata.
|
||
//Soooo, its just tied to the turf initialize on init right now.
|
||
//Right now each segment generates independantly, but it wouldn't be hard to do it in a chain
|
||
//And check for what else is there before a list of objects has the option to appear.
|
||
//Or even change weighting based on the weight of other things that the turf has checked in its range.
|
||
//But at the same time, the stacked flora/rocks etc look pretty okay together honestly.
|
||
//On the other side of the coin, you could even adjust their pixel x and y for better thickets.
|
||
//Since after-all things in nature don't just occupy one spot each a lot of the time.
|
||
|
||
//That being said you have somewhere around 50 seconds of init, and 160 seconds of pre-game time.
|
||
//To finish generation if you need to split it up by chunks and add more checks.
|
||
//Its more time than you could ever want considering how fast it finishes like this without hiccups really.
|
||
//Ironically, not very resource intensive or slow to do this much of it.
|
||
|
||
//I have turned what used to be simple into hell.
|
||
//We can keep appending stuff here as we go, it basically just spawns it all on turf spooktimegrass on init.
|
||
|
||
//============> Current Set value // JTGSZ Tuned Reference Value <==============
|
||
#define GRASS_SPONTANEOUS 2//2 //chance it appears on the tile on its own
|
||
#define GRASS_WEIGHT 4//4 //multiplier increase if theres some nearby
|
||
#define TREE_SPONTANEOUS 4//4
|
||
#define TREE_WEIGHT 4//4
|
||
#define AUSFLORA_SPONTANEOUS 2//2
|
||
#define AUSFLORA_WEIGHT 3//3
|
||
#define ROCKS_SPONTANEOUS 2//2 //Technically this can be moved to the desolate spawn list tied to grass.
|
||
#define ROCKS_WEIGHT 1//1 //Lower weight cause rock clusters were too common...But cool honestly.
|
||
#define DEBRIS_SPONTANEOUS 2//2
|
||
#define DEBRIS_WEIGHT 2//2
|
||
|
||
//These are basically what can spawn in the lists, the number is the weight.
|
||
//The weight dictates how likely it is to spawn over other things in the lists. If you were to use pickweight.
|
||
#define LUSH_GRASS_SPAWN_LIST list(/obj/structure/flora/grass/spookytime = 4,\
|
||
/obj/structure/flora/ausbushes/lavendergrass = 3,\
|
||
/obj/structure/flora/ausbushes/sparsegrass = 6,\
|
||
/obj/structure/flora/ausbushes/fullgrass = 1\
|
||
)
|
||
|
||
#define TREE_SPAWN_LIST list(/obj/structure/flora/tree/spookytime = 9,\
|
||
/obj/structure/flora/tree/spookytimexl = 2,\
|
||
/obj/structure/flora/tree/jungle = 1,\
|
||
/obj/structure/flora/tree/jungle/small = 1\
|
||
)
|
||
|
||
#define AUSFLORA_SPAWN_LIST list(/obj/structure/flora/ausbushes = 3,\
|
||
/obj/structure/flora/ausbushes/grassybush = 3,\
|
||
/obj/structure/flora/ausbushes/fernybush = 1,\
|
||
/obj/structure/flora/ausbushes/sunnybush = 1,\
|
||
/obj/structure/flora/ausbushes/reedbush = 1,\
|
||
/obj/structure/flora/ausbushes/palebush = 1,\
|
||
/obj/structure/flora/ausbushes/stalkybush = 1\
|
||
)
|
||
|
||
#define ROCKS_SPAWN_LIST list(/obj/structure/flora/spookyrock = 1\
|
||
)
|
||
|
||
#define DEBRIS_SPAWN_LIST list(/obj/structure/flora/tree/spookybranch = 5, \
|
||
/obj/structure/flora/tree/spookylog = 1\
|
||
)
|
||
|
||
//Lists that occur when the cluster doesn't happen but probability dictates it tries.
|
||
#define DESOLATE_SPAWN_LIST list(/obj/structure/flora/grass/spookytime = 1,\
|
||
/obj/structure/flora/ausbushes/sparsegrass = 1\
|
||
)
|
||
|
||
//I just kinda made it worse... Like a lot worse. Ngl man.
|
||
/turf/open/floor/spooktime/spooktimegrass/proc/floraGen()
|
||
var/grassWeight = 0 //grassWeight holders for each individual layer
|
||
var/treeWeight = 0
|
||
var/ausfloraWeight = 0
|
||
var/rocksWeight = 0
|
||
var/debrisWeight = 0
|
||
|
||
var/randGrass = null //The random plant picked
|
||
var/randTree = null //The random deadtree picked
|
||
var/randAusflora = null //The random Ausflora picked
|
||
var/randRocks = null //The random rock picked
|
||
var/randDebris = null //The random wood debris picked
|
||
|
||
//spontaneously spawn the objects based on probability from the define.
|
||
//Ngl, a lot of this is going to be have to generate in certain orders later in this proc.
|
||
if(prob(GRASS_SPONTANEOUS)) //If probability THE DEFINE NUMBER
|
||
randGrass = pickweight(LUSH_GRASS_SPAWN_LIST) //randgrass is assigned a obj from the weighted list
|
||
turfGrass = new randGrass(src) //The var on the turf now has a new randgrass from the list.
|
||
|
||
if(prob(TREE_SPONTANEOUS))
|
||
randTree = pickweight(TREE_SPAWN_LIST)
|
||
turfTree = new randTree(src)
|
||
|
||
if(prob(AUSFLORA_SPONTANEOUS))
|
||
randAusflora = pickweight(AUSFLORA_SPAWN_LIST)
|
||
turfAusflora = new randAusflora(src)
|
||
|
||
if(prob(ROCKS_SPONTANEOUS))
|
||
randRocks = pickweight(ROCKS_SPAWN_LIST)
|
||
turfRocks = new randRocks(src)
|
||
|
||
if(prob(DEBRIS_SPONTANEOUS))
|
||
randDebris = pickweight(DEBRIS_SPAWN_LIST)
|
||
turfDebris = new randDebris(src)
|
||
|
||
|
||
//loop through neighbouring turfs, if they have grass, then increase weight, cluster prep.
|
||
for(var/turf/open/floor/spooktime/spooktimegrass/T in RANGE_TURFS(3, src))
|
||
if(T.turfGrass) //We check what is around our turf
|
||
grassWeight += GRASS_WEIGHT //The weight is increased by grass weight per every grass we find
|
||
if(T.turfTree)
|
||
treeWeight += TREE_WEIGHT
|
||
if(T.turfAusflora)
|
||
ausfloraWeight += AUSFLORA_WEIGHT
|
||
if(T.turfRocks)
|
||
rocksWeight += ROCKS_WEIGHT
|
||
if(T.turfDebris)
|
||
debrisWeight += DEBRIS_WEIGHT
|
||
|
||
|
||
//Below is where we handle clusters really.
|
||
//use weight to try to spawn grass
|
||
if(prob(grassWeight)) //Basically the probability goes by the DEFINE WEIGHT the more of it is around.
|
||
//If surrounded on 5+ sides, pick from lush
|
||
if(grassWeight == (5 * GRASS_WEIGHT)) //If we are five times the define value, aka 5 detected.
|
||
randGrass = pickweight(LUSH_GRASS_SPAWN_LIST) //We weighted pick from the lush list, aka boys that can be together.
|
||
else //Else.
|
||
randGrass = pickweight(DESOLATE_SPAWN_LIST) //We weighted pick from boys that are fine being alone.
|
||
turfGrass = new randGrass(src) //And at the end we set the turfgrass to this object.
|
||
|
||
if(prob(treeWeight)) //We can technically redirect individuals down here too, but lets just focus on clumps.
|
||
randTree = pickweight(TREE_SPAWN_LIST)
|
||
turfTree = new randTree(src)
|
||
|
||
if(prob(ausfloraWeight))
|
||
randAusflora = pickweight(AUSFLORA_SPAWN_LIST)
|
||
turfAusflora = new randAusflora(src)
|
||
|
||
if(prob(rocksWeight))
|
||
randRocks = pickweight(ROCKS_SPAWN_LIST)
|
||
turfRocks = new randRocks(src)
|
||
|
||
if(prob(debrisWeight))
|
||
randDebris = pickweight(DEBRIS_SPAWN_LIST)
|
||
turfDebris = new randDebris(src)
|
||
|
||
//Make sure we delete the objects if we ever change turfs
|
||
/turf/open/floor/spooktime/spooktimegrass/ChangeTurf(flags = CHANGETURF_INHERIT_AIR)
|
||
if(turfGrass)
|
||
qdel(turfGrass)
|
||
//if(turfTree)
|
||
// qdel(turfTree)
|
||
if(turfAusflora)
|
||
qdel(turfAusflora)
|
||
if(turfRocks)
|
||
qdel(turfRocks)
|
||
if(turfDebris)
|
||
qdel(turfDebris)
|
||
. = ..()
|
||
|
||
//Grass baseturf helper, more than likely completely unneeded since its set on the original turf too.
|
||
/obj/effect/baseturf_helper/spooktimegrass
|
||
name = "grass baseturf helper" //Basically just changes the baseturf into grass
|
||
baseturf = /turf/open/floor/spooktime/spooktimegrass //Wherever it is at.
|
||
|
||
//A reference to this list is passed into area sound managers, and it's modified in a manner that preserves that reference in ash_storm.dm
|
||
GLOBAL_LIST_EMPTY(rain_sounds)
|
||
|
||
// HEY!! IF THIS DOES NOT WORK CHECK LOGIN.DM !!!!!
|
||
|
||
/*
|
||
HERE COMES THE MOTHERFUCKING RAIN
|
||
*/
|
||
/datum/weather/long_rain
|
||
name = "Long rain at midnight"
|
||
desc = "The planet sometimes rains, nothing special about it really."
|
||
|
||
telegraph_duration = 130
|
||
telegraph_message = "<span class='notice'>Water droplets begin falling from the sky.</span>"
|
||
telegraph_overlay = "regular_rain" //Ya my apologies for not making a new rain icon
|
||
|
||
weather_message = "<span class='notice'>The droplets become a downpour, rain now falls all around you from the night sky.</span>"
|
||
weather_overlay = "regular_rain" //But I need to work on my mouse on the day of 10/24/2019, so lets call it here.
|
||
weather_duration_lower = 12000 //these are deciseconds.
|
||
weather_duration_upper = 15000
|
||
|
||
end_duration = 100
|
||
end_message = "<span class='notice'>The downpour gradually slows until it stops.</span>"
|
||
|
||
area_type = /area/eventmap/outside
|
||
target_trait = ZTRAIT_LONGRAIN
|
||
probability = 90
|
||
|
||
barometer_predictable = TRUE
|
||
|
||
var/list/outside_longrain = list()
|
||
var/list/inside_longrain = list()
|
||
var/list/mountain_longrain = list()
|
||
// var/datum/looping_sound/active_outside_longrain/sound_ao = new(list(), FALSE, TRUE) //Outside
|
||
// var/datum/looping_sound/active_inside_longrain/sound_ai = new(list(), FALSE, TRUE) //Inside
|
||
// var/datum/looping_sound/active_mountain_longrain/sound_am = new(list(), FALSE, TRUE) //Mountain
|
||
|
||
/datum/weather/long_rain/telegraph() //Yeah, I'm sorry but I just stole ash storm sound loops
|
||
. = ..()
|
||
var/list/eligible_areas = list()
|
||
for(var/z in impacted_z_levels) //We check the Z level
|
||
eligible_areas += SSmapping.areas_in_z["[z]"] //And append them to eligible areas list
|
||
|
||
|
||
for(var/i in 1 to eligible_areas.len)
|
||
var/area/place = eligible_areas[i]
|
||
if(istype(place, /area/eventmap/outside)) //If the place is this path
|
||
outside_longrain[place] = /datum/looping_sound/active_outside_longrain //Outside areas is the place
|
||
if(istype(place, /area/eventmap/inside))
|
||
inside_longrain[place] = /datum/looping_sound/active_inside_longrain
|
||
if(istype(place, /area/eventmap/mountain))
|
||
mountain_longrain[place] = /datum/looping_sound/active_mountain_longrain
|
||
|
||
CHECK_TICK
|
||
|
||
//We modify this list instead of setting it to weak/stron sounds in order to preserve things that hold a reference to it
|
||
//It's essentially a playlist for a bunch of components that chose what sound to loop based on the area a player is in
|
||
GLOB.rain_sounds += outside_longrain
|
||
return ..()
|
||
|
||
/datum/weather/long_rain/start()
|
||
GLOB.ash_storm_sounds += mountain_longrain
|
||
GLOB.ash_storm_sounds += inside_longrain
|
||
return ..()
|
||
|
||
/datum/weather/long_rain/end()
|
||
GLOB.ash_storm_sounds -= outside_longrain
|
||
GLOB.ash_storm_sounds -= inside_longrain
|
||
GLOB.ash_storm_sounds -= mountain_longrain
|
||
return ..()
|
||
|
||
/datum/looping_sound/active_outside_longrain
|
||
mid_sounds = list('modular_citadel/code/modules/eventmaps/Spookystation/outsideloop1.ogg'=1,
|
||
'modular_citadel/code/modules/eventmaps/Spookystation/outsideloop2.ogg'=1)
|
||
mid_length = 3.8 //ahahaa aaaaaaaaaa fucking shit man, but its what I got.
|
||
volume = 70
|
||
start_sound = 'sound/ambience/acidrain_start.ogg'
|
||
start_length = 13
|
||
end_sound = 'sound/ambience/acidrain_end.ogg'
|
||
|
||
/datum/looping_sound/active_inside_longrain
|
||
mid_sounds = list('modular_citadel/code/modules/eventmaps/Spookystation/insideloop1.ogg'=1,
|
||
'modular_citadel/code/modules/eventmaps/Spookystation/insideloop2.ogg'=1,
|
||
'modular_citadel/code/modules/eventmaps/Spookystation/insideloop3.ogg'=1,
|
||
'modular_citadel/code/modules/eventmaps/Spookystation/insideloop4.ogg'=1)
|
||
mid_length = 5.1 //AAAAAAAAAAAAAAAAAAAAAAA
|
||
volume = 60
|
||
|
||
/datum/looping_sound/active_mountain_longrain
|
||
mid_sounds = list('modular_citadel/code/modules/eventmaps/Spookystation/basecaveloop.ogg'=1)
|
||
mid_length = 12 //Why are we still here? Just to suffer?
|
||
volume = 60
|
||
|
||
/*
|
||
GRANDFATHER CLOCK
|
||
*/
|
||
|
||
/*
|
||
1:00 AM - overlay-2
|
||
2:00 AM - overlay-2
|
||
3:00 AM - overlay-3
|
||
4:00 AM - overlay-4
|
||
5:00 AM - overlay-4
|
||
6:00 AM - overlay-6
|
||
7:00 AM - overlay-7
|
||
8:00 AM - overlay-7
|
||
9:00 AM - overlay-9
|
||
10:00 AM - overlay-10
|
||
11:00 AM - overlay-10
|
||
12:00 AM - overlay-0
|
||
*/
|
||
|
||
/obj/machinery/grandfatherclock
|
||
name = "Grandfather Clock"
|
||
desc = "Keeps track of the time with its dials."
|
||
icon = 'modular_citadel/code/modules/eventmaps/Spookystation/clock32x49.dmi'
|
||
icon_state = "grandfathermk4right"
|
||
density = 1
|
||
anchored = 1
|
||
use_power = 0
|
||
max_integrity = 250
|
||
var/HRimgstate = "asshouroverlay-0"
|
||
var/MMimgstate = "assminuteoverlay-0"
|
||
var/ticktock = 0 // We hold this here
|
||
var/dyndial_cycle_ticker = 0 //How many
|
||
var/playchime = 1 //Procs will reset their vars.
|
||
|
||
/obj/machinery/grandfatherclock/Initialize(mapload)
|
||
. = ..()
|
||
update_icon() //We get it done
|
||
|
||
/obj/machinery/grandfatherclock/process()
|
||
doodad_clock_ticker()
|
||
|
||
|
||
/obj/machinery/grandfatherclock/proc/doodad_clock_ticker() //We basically throttle the rest of this machine here.
|
||
|
||
dyndial_cycle_ticker++
|
||
|
||
if(ticktock) //If we are true
|
||
playsound(src.loc, 'modular_citadel/code/modules/eventmaps/Spookystation/Tock.ogg', 100,0)
|
||
icon_state = "grandfathermk4right"
|
||
flick("tick", src)
|
||
ticktock = 0 //Play this noise set to false
|
||
else
|
||
playsound(src.loc, 'modular_citadel/code/modules/eventmaps/Spookystation/Tick.ogg', 100,0)
|
||
flick("tock", src)
|
||
icon_state = "grandfathermk4left"
|
||
ticktock = 1 //If we are not true, play this noise set to true
|
||
|
||
if(dyndial_cycle_ticker >= 20) //Handles the dynamic dial
|
||
dyndial_cycle()
|
||
dyndial_cycle_ticker = 0
|
||
|
||
/obj/machinery/grandfatherclock/proc/dyndial_cycle()
|
||
var/ass_time = STATION_TIME(TRUE, world.time) //Fun fact, space station time has a timezone offset, If its not on display time. I added world.time to fix the compile error. I dunno if it works as intended still!!
|
||
var/hour = (text2num(time2text(ass_time, "hh"))%12)
|
||
var/minute = text2num(time2text(ass_time, "mm"))
|
||
|
||
//to_chat(world, "dyndial cycle current says: [hour]:[minute] - Ass_time currently says [ass_time]")
|
||
if(playchime && hour == 0)
|
||
playsound(src.loc, 'modular_citadel/code/modules/eventmaps/Spookystation/midnightchime.ogg', 100, 0)
|
||
playchime = 0
|
||
if(!playchime && hour == 11)
|
||
playchime = 1
|
||
|
||
switch(hour)
|
||
if(1, 2)
|
||
HRimgstate = "asshouroverlay-2" //Now it is ass, mostly because someones going to kill me for the other names.
|
||
if(3)
|
||
HRimgstate = "asshouroverlay-3"
|
||
if(4, 5)
|
||
HRimgstate = "asshouroverlay-4"
|
||
if(6)
|
||
HRimgstate = "asshouroverlay-6"
|
||
if(7, 8)
|
||
HRimgstate = "asshouroverlay-7"
|
||
if(9)
|
||
HRimgstate = "asshouroverlay-9"
|
||
if(10, 11)
|
||
HRimgstate = "asshouroverlay-10"
|
||
else
|
||
HRimgstate = "asshouroverlay-0" //Station time wraps to 0, and so does our hours.
|
||
|
||
switch(minute)
|
||
if(0 to 3)
|
||
MMimgstate = "assminuteoverlay-0"
|
||
if(4 to 15)
|
||
MMimgstate = "assminuteoverlay-2"
|
||
if(16 to 22)
|
||
MMimgstate = "assminuteoverlay-3"
|
||
if(23 to 28)
|
||
MMimgstate = "assminuteoverlay-4"
|
||
if(29 to 33)
|
||
MMimgstate = "assminuteoverlay-6"
|
||
if(34 to 41)
|
||
MMimgstate = "assminuteoverlay-7"
|
||
if(42 to 49)
|
||
MMimgstate = "assminuteoverlay-9"
|
||
if(50 to 57)
|
||
MMimgstate = "assminuteoverlay-10"
|
||
else
|
||
MMimgstate = "assminuteoverlay-0" //This has 58 to 60 and everything else.
|
||
|
||
update_icon() //Everything is set, lets update.
|
||
|
||
/obj/machinery/grandfatherclock/update_icon()
|
||
cut_overlays() //We cut the overlays.
|
||
|
||
add_overlay(MMimgstate) //And append our new states, Minute
|
||
add_overlay(HRimgstate) //Hour.
|
||
|
||
/*
|
||
The Flora that is generated onto the basic grassturf, or can be placed for tone building.
|
||
*/
|
||
|
||
//For ease of use, I should have appended it all here..
|
||
//Stripped the other segments out, people don't need hay and interactions right now you know man?
|
||
//Technically we could also randomize the pixel_x, pixel_y placement of these guys for more dynamic thickets.
|
||
/obj/structure/flora/grass/spookytime
|
||
icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi' //32x32 iconfile
|
||
desc = "Some dry, virtually dead grass, cause its fall and not a wasteland this time."
|
||
icon_state = "tall_grass_1"
|
||
|
||
/obj/structure/flora/grass/spookytime/New()
|
||
..()
|
||
icon_state = "tall_grass_[rand(1,8)]" //We have 8 states.
|
||
|
||
/obj/structure/flora/grass/spookytime/attackby(obj/item/W, mob/user, params)
|
||
if(W.sharpness && W.force > 0 && !(NODECONSTRUCT_1 in flags_1))
|
||
to_chat(user, "You begin to harvest [src]...")
|
||
if(do_after(user, 100/W.force, target = user))
|
||
to_chat(user, "<span class='notice'>You've collected [src]</span>")
|
||
var/obj/item/stack/sheet/hay/H = user.get_inactive_held_item()
|
||
if(istype(H))
|
||
H.add(1)
|
||
else
|
||
new /obj/item/stack/sheet/hay/(get_turf(src))
|
||
qdel(src)
|
||
return TRUE
|
||
else
|
||
. = ..()
|
||
|
||
/obj/structure/flora/tree/spookytime
|
||
name = "dead tree"
|
||
desc = "It's a tree. Useful for combustion and/or construction."
|
||
icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile64.dmi' //64x64 iconfile
|
||
icon_state = "deadtree_1"
|
||
log_amount = 3
|
||
density = 1
|
||
obj_integrity = 100
|
||
max_integrity = 100
|
||
|
||
/obj/structure/flora/tree/spookytime/New()
|
||
icon_state = "deadtree_[rand(1,6)]" //We have 6 states
|
||
..()
|
||
|
||
/obj/structure/flora/tree/spookytimexl
|
||
name = "tall dead tree"
|
||
desc = "It's a tree. Useful for combustion and/or construction. This ones quite tall"
|
||
icon = 'modular_citadel/code/modules/eventmaps/Spookystation/talltree128.dmi'
|
||
icon_state = "tree_1"
|
||
log_amount = 12
|
||
density = 1
|
||
obj_integrity = 200
|
||
max_integrity = 200
|
||
|
||
/obj/structure/flora/tree/spookytimexl/New()
|
||
icon_state = "tree_[rand(1,3)]" //We have 3 states.
|
||
..()
|
||
|
||
/obj/structure/flora/tree/spookybranch
|
||
name = "fallen branch"
|
||
desc = "A branch from a tree"
|
||
icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi'
|
||
icon_state = "branch_1"
|
||
log_amount = 1
|
||
density = 0
|
||
obj_integrity = 30
|
||
max_integrity = 30
|
||
|
||
/obj/structure/flora/tree/spookybranch/New()
|
||
icon_state = "branch_[rand(1,4)]"
|
||
..()
|
||
|
||
/obj/structure/flora/tree/spookylog
|
||
name = "fallen tree"
|
||
desc = "A tree, that turned horizontal after it died"
|
||
icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi'
|
||
icon_state = "timber"
|
||
log_amount = 5
|
||
density = 0
|
||
obj_integrity = 100
|
||
max_integrity = 100 //only got one state man.
|
||
|
||
/obj/structure/flora/spookyrock
|
||
name = "rock"
|
||
desc = "Its a rock man. Hard as shit, and for you quite impassible."
|
||
icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi'
|
||
icon_state = "rock_1"
|
||
density = 1
|
||
|
||
/obj/structure/flora/spookyrock/New()
|
||
icon_state = "rock_[rand(1,3)]"
|
||
..()
|
||
|
||
/*
|
||
WALLS - BECAUSE I HAD TO REPLACE ALL OF THEM ON THE MAP AND DO IT RIGHT THIS TIME
|
||
*/
|
||
/turf/closed/wall/mineral/wood
|
||
|
||
|
||
/obj/structure/falsewall/wood
|
||
|
||
//Due to the behavior of walls generally, I'm not going to make a microcosm of full flexibility
|
||
//and functionability for a ball map, but heres everything we are usually using for future reference.
|
||
|
||
/*
|
||
TURF DIRECTIONALS, OVERALL SPAMMED STUFF ETC
|
||
*/
|
||
|
||
//Mostly here because I was tired of searching the top stuff.
|
||
//Damaged plasteel plates, cause fuck varediting all these icons my man.
|
||
//Just search damturf for the tree
|
||
|
||
/turf/open/floor/plasteel/damturf //ez search plasteel parent
|
||
/turf/open/floor/plasteel/damturf/damage1
|
||
icon_state = "damaged1"
|
||
/turf/open/floor/plasteel/damturf/damage2
|
||
icon_state = "damaged2"
|
||
/turf/open/floor/plasteel/damturf/
|
||
icon_state = "damaged3"
|
||
/turf/open/floor/plasteel/damturf/damage4
|
||
icon_state = "damaged4"
|
||
/turf/open/floor/plasteel/damturf/damage5
|
||
icon_state = "damaged5"
|
||
/turf/open/floor/plasteel/damturf/scorched
|
||
icon_state = "panelscorched"
|
||
/turf/open/floor/plasteel/damturf/scorched1
|
||
icon_state = "floorscorched1"
|
||
/turf/open/floor/plasteel/damturf/scorched2
|
||
icon_state = "floorscorched2"
|
||
/turf/open/floor/plasteel/damturf/platdmg1
|
||
icon_state = "platingdmg1"
|
||
/turf/open/floor/plasteel/damturf/platdmg2
|
||
icon_state = "platingdmg2"
|
||
/turf/open/floor/plasteel/damturf/platdmg3
|
||
icon_state = "platingdmg3"
|
||
|
||
/turf/open/floor/wood/damturf //ez search wood parent
|
||
/turf/open/floor/wood/damturf/broken1
|
||
icon_state = "wood-broken"
|
||
/turf/open/floor/wood/damturf/broken2
|
||
icon_state = "wood-broken2"
|
||
/turf/open/floor/wood/damturf/broken3
|
||
icon_state = "wood-broken3"
|
||
/turf/open/floor/wood/damturf/broken4
|
||
icon_state = "wood-broken4"
|
||
/turf/open/floor/wood/damturf/broken5
|
||
icon_state = "wood-broken5"
|
||
/turf/open/floor/wood/damturf/broken6
|
||
icon_state = "wood-broken6"
|
||
/turf/open/floor/wood/damturf/broken7
|
||
icon_state = "wood-broken7"
|
||
|
||
//Parent that goes into coasts too
|
||
/turf/open/floor/spooktime/beach //laketime
|
||
gender = PLURAL
|
||
name = "sand"
|
||
desc = "ITS SAND!"
|
||
icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi'
|
||
icon_state = "sand"
|
||
bullet_bounce_sound = null
|
||
tiled_dirt = 0
|
||
var/turfverb = "dig up"
|
||
|
||
baseturfs = /turf/open/floor/plating/spookbase/sandattachmentpoint //Alas, now people can dig out lakes.
|
||
|
||
/turf/open/floor/spooktime/beach/attackby(obj/item/C, mob/user, params) //We dig it out with a shovel.
|
||
if((C.tool_behaviour == TOOL_SHOVEL) && params) //And beneath it we reveal dirt
|
||
new /obj/item/stack/tile/normalasssand(src) //EDIT THIS
|
||
user.visible_message("[user] digs up [src].", "<span class='notice'>You [turfverb] [src].</span>")
|
||
playsound(src, 'sound/effects/shovel_dig.ogg', 50, 1)
|
||
make_plating()
|
||
if(..())
|
||
return
|
||
|
||
//Beaches and coasts and sand and shit.
|
||
/turf/open/floor/spooktime/beach/coasts
|
||
gender = NEUTER
|
||
name = "coastline"
|
||
desc = "The coastline of a sandy shore"
|
||
icon_state = "sandwater_t_S"
|
||
|
||
/turf/open/floor/spooktime/beach/coasts/attackby(obj/item/C, mob/user, params)
|
||
return //Upon testing, digging out the coasts makes the map look like ass.
|
||
|
||
//The water that follows the coastline also animated.
|
||
/turf/open/floor/spooktime/beach/coasts/coastS
|
||
icon_state = "sandwater_t_S"
|
||
/turf/open/floor/spooktime/beach/coasts/coastN
|
||
icon_state = "sandwater_t_N"
|
||
/turf/open/floor/spooktime/beach/coasts/coastE
|
||
icon_state = "sandwater_t_E"
|
||
/turf/open/floor/spooktime/beach/coasts/coastW
|
||
icon_state = "sandwater_t_W"
|
||
/turf/open/floor/spooktime/beach/coasts/coastSE
|
||
icon_state = "sandwater_t_SE"
|
||
/turf/open/floor/spooktime/beach/coasts/coastSW
|
||
icon_state = "sandwater_t_SW"
|
||
/turf/open/floor/spooktime/beach/coasts/coastNE
|
||
icon_state = "sandwater_t_NE"
|
||
/turf/open/floor/spooktime/beach/coasts/coastNW
|
||
icon_state = "sandwater_t_NW"
|
||
|
||
//The coastline itself with sand
|
||
/turf/open/floor/spooktime/beach/coasts/watercoastS
|
||
icon_state = "sandwater_b_S"
|
||
/turf/open/floor/spooktime/beach/coasts/watercoastN
|
||
icon_state = "sandwater_b_N"
|
||
/turf/open/floor/spooktime/beach/coasts/watercoastW
|
||
icon_state = "sandwater_b_W"
|
||
/turf/open/floor/spooktime/beach/coasts/watercoastE
|
||
icon_state = "sandwater_b_E"
|
||
/turf/open/floor/spooktime/beach/coasts/watercoastSE
|
||
icon_state = "sandwater_b_SE"
|
||
/turf/open/floor/spooktime/beach/coasts/watercoastSW
|
||
icon_state = "sandwater_b_SW"
|
||
/turf/open/floor/spooktime/beach/coasts/watercoastNE
|
||
icon_state = "sandwater_b_NE"
|
||
/turf/open/floor/spooktime/beach/coasts/watercoastNW
|
||
icon_state = "sandwater_b_NW"
|
||
|
||
//Beach corners
|
||
/turf/open/floor/spooktime/beach/coasts/innerN
|
||
icon_state = "sandwater_inner_N"
|
||
/turf/open/floor/spooktime/beach/coasts/innerS
|
||
icon_state = "sandwater_inner_S"
|
||
/turf/open/floor/spooktime/beach/coasts/innerE
|
||
icon_state = "sandwater_inner_E"
|
||
/turf/open/floor/spooktime/beach/coasts/innerW
|
||
icon_state = "sandwater_inner_W"
|
||
|
||
//Shallow water same color as beach water
|
||
/turf/open/floor/spooktime/beach/water
|
||
name = "water"
|
||
desc = "Its water that seems to be a bit deep, still can wade through though."
|
||
icon_state = "water"
|
||
bullet_sizzle = 1
|
||
footstep = FOOTSTEP_WATER
|
||
barefootstep = FOOTSTEP_WATER
|
||
clawfootstep = FOOTSTEP_WATER
|
||
heavyfootstep = FOOTSTEP_WATER
|
||
|
||
/turf/open/floor/spooktime/beach/water/attackby(obj/item/C, mob/user, params)
|
||
return //haha nope
|
||
|
||
//Slightly darker than the beach water color.
|
||
/turf/open/floor/spooktime/beach/watersolid //Gotta stop you at a certain point man
|
||
name = "water"
|
||
desc = "Water thats deep enough to where your spaceman ass cannot swim."
|
||
icon_state = "water2" //Now its darker lol
|
||
bullet_sizzle = 1
|
||
density = 1 //We are now dense
|
||
footstep = FOOTSTEP_WATER
|
||
barefootstep = FOOTSTEP_WATER
|
||
clawfootstep = FOOTSTEP_WATER
|
||
heavyfootstep = FOOTSTEP_WATER
|
||
|
||
/turf/open/floor/spooktime/beach/watersolid/attackby(obj/item/C, mob/user, params)
|
||
return //You aren't digging my lake out unless I want you to fool.
|
||
|
||
//Motion river water with the lighting on it.
|
||
/turf/open/floor/spooktime/riverwatermotion
|
||
gender = PLURAL
|
||
name = "water"
|
||
desc = "Shallow water."
|
||
icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi'
|
||
icon_state = "riverwater_motion"
|
||
slowdown = 1
|
||
bullet_sizzle = 1
|
||
bullet_bounce_sound = null //needs a splashing sound one day.
|
||
footstep = FOOTSTEP_WATER
|
||
barefootstep = FOOTSTEP_WATER
|
||
clawfootstep = FOOTSTEP_WATER
|
||
heavyfootstep = FOOTSTEP_WATER
|
||
|
||
//No motion river water with the lighting on it.
|
||
/turf/open/floor/spooktime/riverwatermotion/nomotion
|
||
icon_state = "riverwater"
|
||
|
||
//Cobblestone and all of its directions tied to the parent.
|
||
/turf/open/floor/spooktime/cobble //Middle and parent
|
||
name = "cobblestone path" //We don't use directional varedits otherwise the map can load them incorrect.
|
||
desc = "A simple but beautiful path made of various sized stones."
|
||
icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi'
|
||
icon_state = "cobble_mid" //as to why? Sometimes it will spawn the turf elsewhere and move it into place.
|
||
//That means the direction will change because of this movement, usually when theres things ontop of it.
|
||
footstep = FOOTSTEP_FLOOR
|
||
barefootstep = FOOTSTEP_HARD_BAREFOOT
|
||
clawfootstep = FOOTSTEP_HARD_CLAW
|
||
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
|
||
tiled_dirt = 0
|
||
|
||
/turf/open/floor/spooktime/cobble/cornerNW //First corner
|
||
icon_state = "cobble_corner_nw"
|
||
/turf/open/floor/spooktime/cobble/cornerNE //Now that these are hardcoded individuals.
|
||
icon_state = "cobble_corner_ne" //Movement won't change what they are on mapload.
|
||
/turf/open/floor/spooktime/cobble/cornerSW
|
||
icon_state = "cobble_corner_sw"
|
||
/turf/open/floor/spooktime/cobble/cornerSE //I found i don't need most of these but still lol.
|
||
icon_state = "cobble_corner_se"
|
||
|
||
/turf/open/floor/spooktime/cobble/sideN //First Side
|
||
icon_state = "cobble_side_n"
|
||
/turf/open/floor/spooktime/cobble/sideS
|
||
icon_state = "cobble_side_s"
|
||
/turf/open/floor/spooktime/cobble/sideE
|
||
icon_state = "cobble_side_e"
|
||
/turf/open/floor/spooktime/cobble/sideW
|
||
icon_state = "cobble_side_w"
|
||
|
||
//A tiny tiny bit of the total road icon file from f13 edited for grass not desert hastily.
|
||
//Theres something like 30 pieces including crosswalks, sidewalks, potholes and other shit in it man.
|
||
/turf/open/floor/spooktime/cobble/roadmid //Center piece
|
||
name = "road"
|
||
desc = "Its asphault alright"
|
||
icon_state = "road"
|
||
|
||
/turf/open/floor/spooktime/cobble/roadsideN //road edges, I have a lot of these
|
||
icon_state = "road_side_N"
|
||
/turf/open/floor/spooktime/cobble/roadsideS //But i don't feel like adding them all for a temp map.
|
||
icon_state = "road_side_S"
|
||
/turf/open/floor/spooktime/cobble/roadsideE
|
||
icon_state = "road_side_E"
|
||
/turf/open/floor/spooktime/cobble/roadsideW
|
||
icon_state = "road_side_W"
|
||
/turf/open/floor/spooktime/cobble/roadcornerSW
|
||
icon_state = "road_corner_sw"
|
||
|
||
/turf/open/indestructible/spooknecropolis
|
||
name = "necropolis floor"
|
||
desc = "It's regarding you suspiciously."
|
||
icon = 'icons/turf/floors.dmi'
|
||
icon_state = "necro1"
|
||
baseturfs = /turf/open/indestructible/necropolis
|
||
footstep = FOOTSTEP_LAVA
|
||
barefootstep = FOOTSTEP_LAVA
|
||
clawfootstep = FOOTSTEP_LAVA
|
||
heavyfootstep = FOOTSTEP_LAVA
|
||
tiled_dirt = FALSE
|
||
|
||
//Fermis's umbrella
|
||
|
||
/obj/item/umbrella
|
||
name = "umbrella"
|
||
desc = "To keep the rain off you. Use with caution on windy days."
|
||
icon = 'icons/obj/items_and_weapons.dmi'
|
||
lefthand_file = 'icons/mob/inhands/items_lefthand.dmi'
|
||
righthand_file = 'icons/mob/inhands/items_righthand.dmi'
|
||
icon_state = "umbrella_closed"
|
||
slot_flags = ITEM_SLOT_BELT
|
||
force = 5
|
||
throwforce = 5
|
||
w_class = WEIGHT_CLASS_SMALL
|
||
var/open = FALSE
|
||
|
||
/obj/item/umbrella/Initialize(mapload)
|
||
..()
|
||
color = RANDOM_COLOUR
|
||
update_icon()
|
||
|
||
/obj/item/umbrella/attack_self()
|
||
toggle_umbrella()
|
||
|
||
/obj/item/umbrella/proc/toggle_umbrella()
|
||
open = !open
|
||
icon_state = "umbrella_[open ? "open" : "closed"]"
|
||
item_state = icon_state
|
||
update_icon()
|
||
|
||
//Keep the mechs out of the mech arena
|
||
/obj/structure/trap/ctf/nomech
|
||
name = "anti-mech barrier"
|
||
desc = "attempts to bring mechs into the regular ball space may result in spontaneous crabification"
|
||
|
||
/obj/structure/trap/ctf/nomech/Crossed(atom/movable/AM)
|
||
if(is_type_in_typecache(AM, ignore_typecache))
|
||
return
|
||
flare()
|
||
if(ismecha(AM) || istype(AM, /obj/item/mecha_parts) || istype(AM, /obj/structure/mecha_wreckage))
|
||
qdel(AM)
|
||
|
||
/*
|
||
Shitty Hay Objects Sprited by me in a rush when I was half-asleep at 9am + The material
|
||
*/
|
||
|
||
GLOBAL_LIST_INIT(hay_recipes, list ( \
|
||
new/datum/stack_recipe("Rice Hat", /obj/item/clothing/head/rice_hat, 4, time = 5, one_per_turf = 0, on_floor = 0), \
|
||
new/datum/stack_recipe("Hay Bed", /obj/structure/bed/badhaybed, 4, time = 15, one_per_turf = 1, on_floor = 0), \
|
||
new/datum/stack_recipe("Wicker Basket", /obj/structure/closet/crate/awfulwickerbasket, 5, time = 40, one_per_turf = 0, on_floor = 1), \
|
||
))
|
||
//Thanks Gomble
|
||
/obj/item/stack/sheet/hay
|
||
name = "hay"
|
||
desc = "A bundle of hay. Food for livestock, and useful for weaving. Hail the Wickerman."
|
||
singular_name = "hay stalk"
|
||
icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi'
|
||
icon_state = "hay"
|
||
item_state = "hay"
|
||
force = 1
|
||
throwforce = 1
|
||
throw_speed = 1
|
||
throw_range = 2
|
||
max_amount = 500
|
||
attack_verb = list("tickled", "poked", "whipped")
|
||
hitsound = 'sound/weapons/grenadelaunch.ogg'
|
||
|
||
/obj/item/stack/sheet/hay/get_main_recipes()
|
||
. = ..()
|
||
. += GLOB.hay_recipes
|
||
|
||
/obj/item/stack/sheet/hay/fifty
|
||
amount = 50
|
||
|
||
/obj/item/stack/sheet/hay/twenty
|
||
amount = 20
|
||
|
||
/obj/item/stack/sheet/hay/ten
|
||
amount = 10
|
||
|
||
/obj/item/stack/sheet/hay/five
|
||
amount = 5
|
||
|
||
|
||
/obj/item/stack/sheet/hay/update_icon_state()
|
||
var/amount = get_amount()
|
||
if((amount <= 4) && (amount > 0))
|
||
icon_state = "hay[amount]"
|
||
else
|
||
icon_state = "hay"
|
||
|
||
/*
|
||
Hay Objects hastily drawn by me at 9am in a rush.
|
||
*/
|
||
//Shitty bed
|
||
/obj/structure/bed/badhaybed
|
||
name = "Low-quality Hay Bed"
|
||
desc = "It looks like someone hastily put this together, even if the builder didn't."
|
||
icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi'
|
||
icon_state = "shitty_hay_bed"
|
||
anchored = 1
|
||
can_buckle = 1
|
||
buckle_lying = 1
|
||
resistance_flags = FLAMMABLE
|
||
max_integrity = 50
|
||
integrity_failure = 30
|
||
buildstacktype = /obj/item/stack/sheet/hay
|
||
buildstackamount = 5
|
||
|
||
//Awful Wicker Basket
|
||
/obj/structure/closet/crate/awfulwickerbasket
|
||
name = "Low-quality Wicker Basket"
|
||
desc = "A handmade wicker basket, you don't know why it looks like this. But you probably don't like it."
|
||
icon = 'modular_citadel/code/modules/eventmaps/Spookystation/iconfile32.dmi'
|
||
icon_state = "shitty_basket" //yes, there is no space on crates so the other state is shitty_basketopen
|
||
resistance_flags = FLAMMABLE
|
||
material_drop = /obj/item/stack/sheet/hay
|
||
material_drop_amount = 5
|