FestiveMap 2021

This commit is contained in:
keronshb
2021-11-20 12:04:35 -05:00
parent 4ec0de352c
commit af83fb9611
53 changed files with 125728 additions and 77 deletions
+4
View File
@@ -209,6 +209,9 @@
/datum/weather/proc/weather_act(mob/living/L)
return
/datum/weather/proc/weather_act_turf(area/N) //What effect does this weather have on the area?
return
/**
* Updates the overlays on impacted areas
*
@@ -224,6 +227,7 @@
N.icon_state = telegraph_overlay
if(MAIN_STAGE)
N.icon_state = weather_overlay
weather_act_turf(N)
if(WIND_DOWN_STAGE)
N.icon_state = end_overlay
if(END_STAGE)
@@ -0,0 +1,36 @@
//Same as snow_storm basically, but cools outside turf temps. StreetStation only
#define ICY_SNOW_TEMP 200
/datum/weather/ice_storm
name = "Icestorm"
desc = "Harsh snowstorms roam the topside of this arctic planet, burying any area unfortunate enough to be in its path."
probability = 90
telegraph_message = "<span class='notice'>Drifting particles of snow begin to dust the surrounding area..</span>"
telegraph_duration = 300
telegraph_overlay = "light_snow"
weather_message = "<span class='notice'><i>Dense snow begins to fall from the sky, how festive!</i></span>"
weather_overlay = "snow_storm"
weather_duration_lower = 600
weather_duration_upper = 1500
end_duration = 100
end_message = "<span class='notice'>The snowfall dies down.</span>"
area_type = /area/edina
protected_areas = list(/area/edina/protected)
target_trait = ZTRAIT_STATION
immunity_type = "rad"
/datum/weather/ice_storm/weather_act(mob/living/L)
//L.adjust_bodytemperature(-rand(10,20))
/datum/weather/ice_storm/weather_act_turf(area/N)
.=..()
//could be done better but would need a rewrite of weather which is beyond scope.
/*
for(var/turf/open/T in N)
var/datum/gas_mixture/turf/G = T.air
G.temperature = ICY_SNOW_TEMP
*/
+1 -1
View File
@@ -924,7 +924,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
area_flags = BLOBS_ALLOWED | UNIQUE_AREA | CULT_PERMITTED
sound_environment = SOUND_AREA_LARGE_SOFTFLOOR
/area/service/library/lounge
/area/commons/lounge
name = "Library Lounge"
icon_state = "library_lounge"
sound_environment = SOUND_AREA_SMALL_SOFTFLOOR
+204
View File
@@ -0,0 +1,204 @@
/area/edina
name = "Nova Edina wilderness"
icon_state = "edina"
has_gravity = STANDARD_GRAVITY
clockwork_warp_allowed = FALSE // Can servants warp into this area from Reebe?
clockwork_warp_fail = "The aurora borealis is interfering with your teleport! Try somewhere closer to the city."
always_unpowered = TRUE
//dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
power_light = FALSE
power_equip = FALSE
power_environ = FALSE
outdoors = TRUE
//ambientsounds = SPACE //For later
/area/edina/backstreet
name = "Nova Edina backstreets"
icon_state = "edina_alley"
clockwork_warp_allowed = TRUE
ambientsounds = MAINTENANCE
always_unpowered = FALSE //Sure you can have power if you want
/area/edina/backstreet/supply
name = "Supply Backstreets"
icon_state = "edina_alley"
clockwork_warp_allowed = TRUE
ambientsounds = MAINTENANCE
always_unpowered = FALSE //Sure you can have power if you want
/area/edina/backstreet/research
name = "Research Backstreets"
icon_state = "edina_alley"
clockwork_warp_allowed = TRUE
ambientsounds = MAINTENANCE
always_unpowered = FALSE //Sure you can have power if you want
/area/edina/backstreet/med
name = "Hospital Backstreets"
icon_state = "edina_alley"
clockwork_warp_allowed = TRUE
ambientsounds = MAINTENANCE
always_unpowered = FALSE //Sure you can have power if you want
///Nova Edina Streets///
/area/edina/street
name = "Nova Edina Streets"
icon_state = "edina_street"
ambientsounds = null //TODO:add ?
/area/edina/street/primary
name = "Nova Edina Streets"
icon_state = "edina_street"
ambientsounds = null //TODO:add ?
/area/edina/street/primary/princess
name = "Princess Street"
icon_state = "edina_street"
ambientsounds = null //TODO:add ?
/area/edina/street/primary/progress
name = "Progress Street"
icon_state = "edina_street"
ambientsounds = null //TODO:add ?
/area/edina/street/primary/perimeter
name = "Perimeter Way"
icon_state = "edina_street"
ambientsounds = null //TODO:add ?
/area/edina/street/primary/servitor
name = "Servitor Street"
icon_state = "edina_street"
ambientsounds = null //TODO:add ?
/area/edina/street/secondary
name = "Nova Edina Streets"
icon_state = "edina_street2"
ambientsounds = null //TODO:add ?
/area/edina/street/secondary/command
name = "Command Court"
icon_state = "edina_street2"
ambientsounds = null //TODO:add ?
/area/edina/street/secondary/supply
name = "Supply Street"
icon_state = "edina_street2"
ambientsounds = null //TODO:add ?
/area/edina/street/secondary/castle
name = "Castle Way"
icon_state = "edina_street2"
ambientsounds = null //TODO:add ?
/area/edina/street/secondary/aux
name = "Auxiliary Avenue"
icon_state = "edina_street2"
ambientsounds = null //TODO:add ?
/area/edina/street/intersection
name = "Nova Edina Streets"
icon_state = "edina_street2"
ambientsounds = null //TODO:add ?
/area/edina/street/intersection/princessprogress
name = "Princess & Progress"
icon_state = "edina_street2"
ambientsounds = null //TODO:add ?
/area/edina/street/intersection/princessperimeter
name = "Princess & Perimeter"
icon_state = "edina_street2"
ambientsounds = null //TODO:add ?
/area/edina/street/intersection/princessperimeter/north
name = "Perimeter & N Princess"
icon_state = "edina_street2"
ambientsounds = null //TODO:add ?
/area/edina/street/intersection/princessperimeter/south
name = "Perimeter & S Princess"
icon_state = "edina_street2"
ambientsounds = null //TODO:add ?
/area/edina/street/intersection/princessservitor
name = "Servitor & Princess"
icon_state = "edina_street2"
ambientsounds = null //TODO:add ?
/area/edina/street/intersection/servsuppaux
name = "Servitor, Supply, & Auxiliary"
icon_state = "edina_street2"
ambientsounds = null //TODO:add ?
/area/edina/street/intersection/progcastaux
name = "Progress, Castle, & Auxiliary"
icon_state = "edina_street2"
ambientsounds = null //TODO:add ?
/area/edina/street/street2 //Just so laying areas is easier
icon_state = "edina_street2"
/area/edina/protected //Prevents ice storms
name = "Sheltered Nova Edina"
/////////////////Edina specific derivitives///////////////////////////////////
/area/edina/crew_quarters
clockwork_warp_allowed = TRUE
area_flags = BLOBS_ALLOWED | VALID_TERRITORY
/area/edina/crew_quarters/holo_atrium
name = "Hologram atrium"
/area/edina/crew_quarters/store/clothes
name = "Clothes Store"
/area/edina/crew_quarters/store/plushies
name = "Plushies Store"
/area/edina/crew_quarters/store/pet
name = "Pet Store"
/turf/open/floor/grass/snow/edina//But for now, we just handle what is outside, for light control etc.
name = "Scottish snow"
desc = "Looks super chilly!"
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/grass/snow/edina //If we explode or die somehow, we just make more! Ahahaha!!!
tiled_dirt = 0 //NO TILESMOOTHING DIRT/DIRT SPAWNS OR SOME SHIT
//lets people build
/turf/open/floor/grass/snow/edina/attackby(obj/item/C, mob/user, params)
.=..()
if(istype(C, /obj/item/stack/tile))
for(var/obj/O in src)
if(O.level == 1) //ex. pipes laid underneath a tile
for(var/M in O.buckled_mobs)
to_chat(user, "<span class='warning'>Someone is buckled to \the [O]! Unbuckle [M] to move \him out of the way.</span>")
return
var/obj/item/stack/tile/W = C
if(!W.use(1))
return
var/turf/open/floor/T = PlaceOnTop(W.turf_type)
T.icon_state = initial(T.icon_state)
if(istype(W, /obj/item/stack/tile/light)) //TODO: get rid of this ugly check somehow
var/obj/item/stack/tile/light/L = W
var/turf/open/floor/light/F = T
F.state = L.state
playsound(src, 'sound/weapons/genhit.ogg', 50, 1)
////////////////Mapping helper/////////////////////////
/obj/effect/mapping_helpers/planet_z
name = "planet z helper"
layer = POINT_LAYER
/obj/effect/mapping_helpers/planet_z/Initialize()
. = ..()
var/datum/space_level/S = SSmapping.get_level(z)
S.traits["Planet"] = TRUE //This probably doesn't work as I expect. But maybe!!
+20 -1
View File
@@ -57,6 +57,7 @@
hole_size = LARGE_HOLE
/obj/structure/fence/attackby(obj/item/W, mob/user)
var/current_stage = hole_size
if(W.tool_behaviour == TOOL_WIRECUTTER)
if(!cuttable)
to_chat(user, "<span class='notice'>This section of the fence can't be cut.</span>")
@@ -64,7 +65,6 @@
if(invulnerable)
to_chat(user, "<span class='notice'>This fence is too strong to cut through.</span>")
return
var/current_stage = hole_size
if(current_stage >= MAX_HOLE_SIZE)
to_chat(user, "<span class='notice'>This fence has too much cut out of it already.</span>")
return
@@ -86,6 +86,25 @@
update_cut_status()
else if(istype(W, /obj/item/stack/rods) && broken)
if(!hole_size)
to_chat(user, "<span class='info'>The [src] has no cuts in it!</span>")
return
var/obj/item/stack/rods/R = W
if(do_after(user, CUT_TIME, target = src))
if(current_stage == hole_size)
switch(--hole_size)
if(NO_HOLE)
visible_message("<span class='notice'>\The [user] repairs \the [src] fully.</span>")
to_chat(user, "<span class='info'>You repaire the [src] back to it's former glory.</span>")
climbable = TRUE
if(MEDIUM_HOLE)
visible_message("<span class='notice'>\The [user] patches up \the [src].</span>")
to_chat(user, "<span class='info'>The hole in \the [src] is reduced slightly, though someone could probably sill squeeze though if you don't patch it up more.</span>")
climbable = FALSE
R.use(1)
update_cut_status()
return TRUE
/obj/structure/fence/proc/update_cut_status()
+6
View File
@@ -78,6 +78,12 @@
deconstructible = FALSE
layer = EDGED_TURF_LAYER
/obj/structure/fluff/lightpost/light
desc = "That which most enchants the Edinians is the lighting by gas of the boulevards... These humble rows of lamps, shining with a clarity white and pure, have a marvelous effect upon the streets on Nova Edina. Adorned with a cheery garb, in tune with the festive spirits of the city."
light_power = 0.8
light_range = 10
light_color = "#ffeeab"
/obj/structure/fluff/bus
name = "bus"
desc = "GO TO SCHOOL. READ A BOOK."
+30
View File
@@ -0,0 +1,30 @@
/obj/item/clothing/gloves/mittens
desc = "These gloves will keep your hands warm!"
name = "mittens"
icon_state = "mittens"
item_state = "wgloves"
//item_color = "white"
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
resistance_flags = NONE
/obj/item/clothing/gloves/mittens/random
/obj/item/clothing/gloves/mittens/random/Initialize()
..()
var/colours = list("black", "yellow", "lightbrown", "brown", "orange", "red", "purple", "green", "blue", "kitten")
var/picked_c = pick(colours)
if(picked_c == "kitten")
new /obj/item/clothing/gloves/mittens/kitten(loc)
qdel(src)
return INITIALIZE_HINT_QDEL
item_state = "[picked_c]gloves"
//item_color = "[picked_c]"
color = picked_c
/obj/item/clothing/gloves/mittens/kitten
name = "Kitten mittens"
desc = "These gloves will keep your hands warm, and feature cute kittens"
icon_state = "kittenmittens"
item_state = "blackgloves"
//item_color = "black"
+144
View File
@@ -511,7 +511,151 @@
. |= MOBILITY_MOVE
mobility_flags = .
//Christmas car spawner
/mob/living/simple_animal/jacq/car_spawner
name = "Jacqueline cars terminal"
icon_state = "jacq_cars_spawner"
AIStatus = AI_OFF
anchored = TRUE
spawn_cars = TRUE
active = FALSE
/mob/living/simple_animal/jacq/car_spawner/Destroy()
visible_message("The <b>[src]</b> gives out an error sound, <span class='spooky'>\"Ey! Bugger off!\"</span>")
fully_heal(FALSE)
return ..()
/mob/living/simple_animal/jacq/car_spawner/death()
visible_message("The <b>[src]</b> gives out an error sound, <span class='spooky'>\"Ey! Bugger off!\"</span>")
fully_heal(FALSE)
/mob/living/simple_animal/jacq/car_spawner/poof()
if(!active)//if disabled, don't poof
return
var/datum/reagents/R = new/datum/reagents(100)//Hey, just in case.
var/datum/effect_system/smoke_spread/chem/s = new()
R.add_reagent(/datum/reagent/fermi/secretcatchem, 10)
s.set_up(R, 0, loc)
s.start()
stopmove()
health = 25
/mob/living/simple_animal/jacq/car_spawner/spawn_cars(mob/living/carbon/C)
visible_message("<b>[src]</b> boots up and displays jacq's glowing smile, <span class='spooky'>\"Hallo there user! Merry Christmas! What ken type o' craft ken Ah offer ye? I can magic up a vectorcraft in manual, automatic or customise it if yer feeling technical.\"</span>")
jacqrunes("Hallo there user! What ken type o' craft ken Ah offer ye? I can magic up a vectorcraft in manual, automatic or customise it if yer feeling technical.", C)
var/choices_reward = list("Manual", "Automatic", "Customise", "Are you a computer now Jacq?", "Nothing, thanks")
var/choice_reward = input(usr, "Merry Trick_or_Treat.exe initiated!", "Merry Trick_or_Treat.exe initiated!") in choices_reward
switch(choice_reward)
if("Manual")
visible_message("The <b>[src]</b> makes a magical booping sound, <span class='spooky'>\"Great choice! 'Ere's yer car.\"</span>")
jacqrunes("Great choice! 'Ere's yer car.", C)
new /obj/vehicle/sealed/vectorcraft(loc)
if("Automatic")
visible_message("<b>[src]</b> makes a magical booping sound, <span class='spooky'>\"'Ere's yer car. Not as fast as an automatic mind.\"</span>")
jacqrunes("'Ere's yer car. Not as fast as an automatic mind.", C)
new /obj/vehicle/sealed/vectorcraft/auto(loc)
if("Are you a computer now Jacq?")
visible_message("<b>[src]</b> makes a frustrated error sound, <span class='spooky'>\"Nae, are ye daft? Ah built these thingies tae magic up cars fer ye. Well, I got a speccy four eyes tae do it fer me, but me names on it like cause it was me idea.\"</span>")
jacqrunes("Nae, are ye daft? Ah built these thingies tae magic up cars fer ye. Well, I got a speccy four eyes tae do it fer me, but me names on it like cause it was me idea.", C)
if("Customise")
visible_message("The <b>[src]</b> pings, <span class='spooky'>\"Arright, Manual or Automatic?\"</span>")
var/choices_transm = list("Manual", "Automatic")
var/choice_transm = input(usr, "Choose transmission", "Choose transmission") in choices_transm
var/points = 0
var/obj/vehicle/sealed/vectorcraft/VC
switch(choice_transm)
if("Manual")
VC = new /obj/vehicle/sealed/vectorcraft(loc)
if("Automatic")
VC = new /obj/vehicle/sealed/vectorcraft/auto(loc)
points += 500
visible_message("The <b>[src]</b> pings, <span class='spooky'>\"Maximum acceleration? (default [VC.max_acceleration], max 10)\"</span>")
var/max_accl = text2num(input(usr, "Maximum acceleration? (default [VC.max_acceleration], max 10)", "[VC.max_acceleration]"))
max_accl = clamp(max_accl, 0, 10)
VC.max_acceleration = max_accl
VC.i_m_acell = max_accl
points += max_accl*10
/* This is internally used
visible_message("The <b>[src]</b> pings, <span class='spooky'>\"Acceleration step? (default 0.3, max 1)\"</span>")
var/max_accl_s = text2num(input(usr, "Acceleration step? (default 0.3, max 1)", "[VC.accel_step]"))
max_accl_s = clamp(max_accl_s, 0, 1)
VC.max_acceleration = max_accl_s
points += max_accl_s*100
*/
visible_message("The <b>[src]</b> pings, <span class='spooky'>\"Acceleration? (default [VC.acceleration], max 2)\"</span>")
var/accl = text2num(input(usr, "Acceleration? (default [VC.acceleration], max 2)", "[VC.acceleration]"))
accl = clamp(accl, 0, 2)
VC.acceleration = accl
VC.i_acell = accl
points += accl*100
visible_message("The <b>[src]</b> pings, <span class='spooky'>\"Maximum deceleration? (default [VC.max_deceleration], max 15)\"</span>")
var/deaccl = text2num(input(usr, "Max_deceleration? (default [VC.max_deceleration], max 15)", "[VC.max_deceleration]"))
deaccl = clamp(deaccl, 0, 15)
VC.max_deceleration = deaccl
VC.i_m_decell = deaccl
points += deaccl*10
visible_message("The <b>[src]</b> pings, <span class='spooky'>\"Maximum velocity? (default [VC.max_velocity], max 200)\"</span>")
var/m_velo = text2num(input(usr, "Maximum velocity? (default [VC.max_velocity], max 200)", "[VC.max_velocity]"))
m_velo = clamp(m_velo, 0, 200)
VC.max_velocity = m_velo
points += m_velo
visible_message("The <b>[src]</b> pings, <span class='spooky'>\"Boost power? (default [VC.boost_power], max 200)\"</span>")
var/boost = text2num(input(usr, "Boost power? (default [VC.boost_power], max 200)", "[VC.boost_power]"))
boost = clamp(boost, 0, 200)
VC.boost_power = boost
VC.i_boost = boost
points += boost
visible_message("The <b>[src]</b> pings, <span class='spooky'>\"Health points? (default [VC.max_integrity], max 1000)\"</span>")
var/health = text2num(input(usr, "Health points? (default [VC.max_integrity], max 1000)", "[VC.max_integrity]"))
health = clamp(health, 0, 500)
VC.max_integrity = health
points += health/2
visible_message("The <b>[src]</b> pings, <span class='spooky'>\"Arright, 'ow do ye want it tae look?\"</span>")
var/choices_icon = list("Racer", "Truck", "Cyber", "Ambulance", "Pod", "Clown")
var/choice_icon = input(usr, "Choose body", "Choose body") in choices_icon
switch(choice_icon)
if("Truck")
VC.icon_state = "truck"
if("Cyber")
VC.icon_state = "cyber"
if("Ambulance")
VC.icon_state = "ambutruck"
if("Pod")
VC.icon_state = "engineering_pod"
if("Clown")
VC.icon_state = "clowncar"
visible_message("The <b>[src]</b> pings, <span class='spooky'>\"Finally; what name are ye gonna give it?\"</span>")
var/choice_name = input(usr, "Pick a name!", "")
choice_name += " (Points cost:[points])"
VC.name = choice_name
visible_message("The <b>[src]</b> gives a final boop, <span class='spooky'>\"There ye be, enjoy!\"</span>")
if("How do Automatics work?")
visible_message("The image of Jacq on the <b>[src]</b> smiles, <span class='spooky'>\"Hold wasd to gain speed in a direction, c to enable/disable the clutch, 1 2 3 4 to change gears (help is gear 1, disarm is gear 2, grab is gear 3 and harm is gear 4) while holding a direction (make sure the clutch is enabled when you change gears, you should hear a sound when you've successfully changed gears), r to toggle handbrake, hold alt for brake and press shift for boost (the machine will beep when the boost is recharged)! If you hear an ebbing sound like \"brbrbrbrbr\" you need to gear down, the whining sound means you need to gear up. Hearing a pleasant \"whumwhumwhum\" is optimal gearage! It can be a lil slow to start, so make sure you're in the 1st gear, andusing a boost to get you started is a good idea. If you've got a good speed you'll likely never need to dip down to gear 1 again, and make sure to hold the acceleration pedal down while changing gears (hold a direction). 1st gear is for slow movement, and it's a good idea to mvoe to 2nd gear as quick as you can, you can coldstart a car from gear one by slowly moving, then using the boost to jump you up to gear 2 speeds. The upper gears are for unlimiting your top speed.\"</span>")
jacqrunes("They're a bit tricky, aye. Basically;", C)
if("Nothing, thanks")
visible_message("The image of Jacq on the <b>[src]</b> shrugs, <span class='spooky'>\"Suit yerself.\"</span>")
jacqrunes("Suit yerself.", C)
visible_message("The <b>[src]</b> beeps, <span class='spooky'>\"Oh and look after the crafts, aye? They can get a wee bit... explosive if banged up a tad too much. They move slower damaged too like. Ye can repair 'em with the welders o'er there.\"</span>")
jacqrunes("Oh and look after the crafts, aye? They can get a wee bit... explosive if banged up a tad too much. They move slower damaged too like. Ye can repair 'em with the welders o'er there. ", C)
/obj/item/clothing/head/hardhat/pumpkinhead/jaqc
name = "Jacq o' latern"
+21
View File
@@ -13,3 +13,24 @@
desc = "A keyring with a small steel key, and a pink fob reading \"Pussy Wagon\"."
icon_state = "keyjanitor"
//START VECTORCARKEYS
/obj/item/key/CMO
desc = "A keyring with a small steel key to the CMO\'s race hovercar."
/obj/item/key/RD
desc = "A keyring with a small steel key to the RD\'s race hovercar."
/obj/item/key/hop
desc = "A keyring with a small steel key to the HOP\'s race hovercar."
/obj/item/key/hos
desc = "A keyring with a small steel key to the HOS\'s race hovercar."
/obj/item/key/CE
desc = "A keyring with a small steel key to the CE\'s race hovercar."
/obj/item/key/QM
desc = "A keyring with a small steel key to the QM\'s race hovercar."
/obj/item/key/CAPT
desc = "A keyring with a small steel key to the Captain\'s race hovercar."