@@ -62,6 +62,7 @@
|
||||
#define HOLOMAP_AREACOLOR_ARRIVALS "#0000FFCC"
|
||||
#define HOLOMAP_AREACOLOR_ESCAPE "#FF0000CC"
|
||||
#define HOLOMAP_AREACOLOR_DORMS "#CCCC0099"
|
||||
#define HOLOMAP_AREACOLOR_CIV "#3ea800" //VOREStation Addition
|
||||
|
||||
#define LIST_NUMERIC_SET(L, I, V) if(!L) { L = list(); } if (L.len < I) { L.len = I; } L[I] = V
|
||||
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
desc = "Concrete shaped into a path!"
|
||||
icon = 'icons/turf/outdoors_vr.dmi'
|
||||
icon_state = "sidewalk"
|
||||
edge_blending_priority = 1
|
||||
edge_blending_priority = -1
|
||||
movement_cost = -0.5
|
||||
initial_flooring = /decl/flooring/outdoors/sidewalk
|
||||
can_dirty = TRUE
|
||||
@@ -79,12 +79,31 @@
|
||||
desc = "Concrete shaped into a path!"
|
||||
icon = 'icons/turf/outdoors_vr.dmi'
|
||||
icon_base = "sidewalk"
|
||||
has_damage_range = 2
|
||||
damage_temperature = T0C+1400
|
||||
flags = TURF_REMOVE_CROWBAR | TURF_CAN_BREAK | TURF_CAN_BURN
|
||||
build_type = /obj/item/stack/tile/floor/sidewalk
|
||||
can_paint = 1
|
||||
can_engrave = FALSE
|
||||
|
||||
footstep_sounds = list("human" = list(
|
||||
'sound/effects/footstep/LightStone1.ogg',
|
||||
'sound/effects/footstep/LightStone2.ogg',
|
||||
'sound/effects/footstep/LightStone3.ogg',
|
||||
'sound/effects/footstep/LightStone4.ogg',))
|
||||
|
||||
/obj/item/stack/tile/floor/sidewalk
|
||||
name = "sidewalk tile"
|
||||
singular_name = "floor tile"
|
||||
desc = "A stone tile fit for covering a section of floor."
|
||||
icon_state = "tile"
|
||||
force = 6.0
|
||||
matter = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT / 4)
|
||||
throwforce = 15.0
|
||||
throw_speed = 5
|
||||
throw_range = 20
|
||||
no_variants = FALSE
|
||||
|
||||
/turf/simulated/floor/outdoors/sidewalk/Initialize(mapload)
|
||||
var/possibledirts = list(
|
||||
"[initial(icon_state)]" = 150,
|
||||
@@ -104,6 +123,21 @@
|
||||
|
||||
/turf/simulated/floor/outdoors/sidewalk/side
|
||||
icon_state = "side-walk"
|
||||
initial_flooring = /decl/flooring/outdoors/sidewalk/side
|
||||
|
||||
|
||||
/decl/flooring/outdoors/sidewalk/side
|
||||
icon_base = "sidewalk"
|
||||
build_type = /obj/item/stack/tile/floor/sidewalk/side
|
||||
|
||||
/obj/item/stack/tile/floor/sidewalk/side
|
||||
|
||||
/turf/simulated/floor/outdoors/sidewalk/slab
|
||||
icon_state = "slab"
|
||||
initial_flooring = /decl/flooring/outdoors/sidewalk/slab
|
||||
|
||||
/decl/flooring/outdoors/sidewalk/slab
|
||||
icon_base = "slab"
|
||||
build_type = /obj/item/stack/tile/floor/sidewalk/slab
|
||||
|
||||
/obj/item/stack/tile/floor/sidewalk/slab
|
||||
|
||||
@@ -141,14 +141,14 @@
|
||||
)
|
||||
|
||||
|
||||
heat_discomfort_level = 295
|
||||
heat_discomfort_level = 320 //VOREStation Edit - 46c (higher than normal humans) Don't spam red text if you're slightly warm.
|
||||
heat_discomfort_strings = list(
|
||||
"You feel soothingly warm.",
|
||||
"You feel the heat sink into your bones.",
|
||||
"You feel warm enough to take a nap."
|
||||
)
|
||||
|
||||
cold_discomfort_level = 292
|
||||
cold_discomfort_level = 288.15 //VOREStation Edit - 15c Give a little bit of wiggle room here come on.
|
||||
cold_discomfort_strings = list(
|
||||
"You feel chilly.",
|
||||
"You feel sluggish and cold.",
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
/mob/living/simple_mob/vore/alienanimals/catslug
|
||||
name = "catslug"
|
||||
desc = "A noodley bodied creature with thin arms and legs, and gloomy dark eyes."
|
||||
tt_desc = "Mollusca Feline"
|
||||
tt_desc = "Mollusca Feline"
|
||||
icon_state = "catslug"
|
||||
icon_living = "catslug"
|
||||
icon_dead = "catslug_dead"
|
||||
@@ -48,7 +48,7 @@
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive/catslug
|
||||
say_list_type = /datum/say_list/catslug
|
||||
player_msg = "You have escaped the foul weather, into this much more pleasant place. You are an intelligent creature capable of more than most think. You can pick up and use many things, and even carry some of them with you into the vents, which you can use to move around quickly. You're quiet and capable, you speak with your hands and your deeds! <br>- - - - -<br> <span class='notice'>Keep in mind, your goal should generally be to survive. You're expected to follow the same rules as everyone else, so don't go self antagging without permission from the staff team, but you are able and capable of defending yourself from those who would attack you for no reason.</span>"
|
||||
|
||||
|
||||
has_langs = list("Sign Language")
|
||||
|
||||
var/picked_color = FALSE
|
||||
@@ -160,9 +160,9 @@
|
||||
if(user != src)
|
||||
to_chat(user, "<span class='notice'>\The [user] feeds \the [O] to you.</span>")
|
||||
playsound(src, 'sound/items/eatfood.ogg', 75, 1)
|
||||
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/catslug/attack_hand(mob/living/carbon/human/M as mob)
|
||||
|
||||
|
||||
if(stat == DEAD)
|
||||
return ..()
|
||||
if(M.a_intent != I_HELP)
|
||||
@@ -211,7 +211,7 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/catslug/Login() //If someone plays as us let's just be a passive mob in case accidents happen if the player D/Cs
|
||||
/mob/living/simple_mob/vore/alienanimals/catslug/Login() //If someone plays as us let's just be a passive mob in case accidents happen if the player D/Cs
|
||||
. = ..()
|
||||
ai_holder.hostile = FALSE
|
||||
ai_holder.wander = FALSE
|
||||
@@ -240,7 +240,7 @@
|
||||
holder.lay_down()
|
||||
go_sleep()
|
||||
addtimer(CALLBACK(src, .proc/consider_awakening), rand(1 MINUTE, 5 MINUTES), TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE)
|
||||
else
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -307,12 +307,12 @@
|
||||
holder_type = /obj/item/weapon/holder/catslug/spaceslug
|
||||
makes_dirt = 0
|
||||
say_list_type = /datum/say_list/catslug/spaceslug
|
||||
|
||||
|
||||
minbodytemp = 0 // Shamelessly stolen temp & atmos tolerances from the space cat.
|
||||
maxbodytemp = 900
|
||||
heat_damage_per_tick = 3
|
||||
maxbodytemp = 900
|
||||
heat_damage_per_tick = 3
|
||||
cold_damage_per_tick = 2
|
||||
|
||||
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
min_tox = 0
|
||||
@@ -321,9 +321,9 @@
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
|
||||
|
||||
player_msg = "You are an intelligent creature capable of more than most think, clad in a spacesuit that protects you from the ravages of vacuum and hostile atmospheres alike. You can pick up and use many things, and even carry some of them with you into the vents, which you can use to move around quickly. You're quiet and capable, you speak with your hands and your deeds! <br>- - - - -<br> <span class='notice'>Keep in mind, your goal should generally be to survive. You're expected to follow the same rules as everyone else, so don't go self antagging without permission from the staff team, but you are able and capable of defending yourself from those who would attack you for no reason.</span>"
|
||||
|
||||
|
||||
has_langs = list("Sign Language")
|
||||
|
||||
/datum/say_list/catslug/spaceslug
|
||||
@@ -332,11 +332,11 @@
|
||||
/mob/living/simple_mob/vore/alienanimals/catslug/spaceslug/Initialize()
|
||||
. = ..()
|
||||
verbs += /mob/living/proc/ventcrawl
|
||||
verbs += /mob/living/proc/hide
|
||||
verbs += /mob/living/proc/hide
|
||||
verbs -= /mob/living/simple_mob/vore/alienanimals/catslug/proc/catslug_color //I don't even want to imagine what the colour change proc would do to their sprite, not to mention ghosts would need to be forced into the catslug so this is more just a safety net than anything
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/catslug/spaceslug/attack_hand(mob/living/carbon/human/M as mob)
|
||||
|
||||
|
||||
if(stat == DEAD)
|
||||
return ..()
|
||||
if(M.a_intent != I_HELP)
|
||||
@@ -387,4 +387,308 @@
|
||||
|
||||
/obj/item/weapon/holder/catslug/spaceslug
|
||||
item_state = "spaceslug"
|
||||
|
||||
|
||||
//Engineer catslug
|
||||
/datum/category_item/catalogue/fauna/catslug/engislug
|
||||
name = "Alien Wildlife - Catslug - Engineer O'Brimn"
|
||||
desc = "A resident worker at the NSB Rascal's Pass, Engineer O'Brimn \
|
||||
keeps the facilities pipework and machinery maintained between shifts. - \
|
||||
The Catslug is an omnivorous terrestrial creature.\
|
||||
Exhibiting properties of both a cat and a slug (hence its name)\
|
||||
it moves somewhat awkwardly. However, the unique qualities of\
|
||||
its body make it exceedingly flexible and smooth, allowing it to\
|
||||
wiggle into and move effectively in even extremely tight spaces.\
|
||||
Additionally, it has surprisingly capable hands, and moves quite\
|
||||
well on two legs or four. Caution is advised when interacting\
|
||||
with these creatures, they are quite intelligent, and proficient\
|
||||
tool users."
|
||||
value = CATALOGUER_REWARD_TRIVIAL //Local catslugs worth less than rarer ones
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/catslug/engislug
|
||||
name = "Engineer O'Brimn"
|
||||
desc = "A yellow-furred noodley bodied creature with thin arms and legs, and gloomy dark eyes. This one seems to be wearing a too-big high visibility vest and a full-face hardhat."
|
||||
tt_desc = "Mollusca Felis Munitor"
|
||||
icon_state = "engislug"
|
||||
icon_living = "engislug"
|
||||
icon_rest = "engislug_rest"
|
||||
icon_dead = "engislug_dead"
|
||||
digestable = 0
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/catslug/engislug)
|
||||
holder_type = /obj/item/weapon/holder/catslug/engislug
|
||||
makes_dirt = 0
|
||||
say_list_type = /datum/say_list/catslug/engislug
|
||||
|
||||
minbodytemp = 200
|
||||
maxbodytemp = 600 //engislug can survive a little heat, as a treat
|
||||
heat_damage_per_tick = 1
|
||||
cold_damage_per_tick = 2
|
||||
|
||||
min_oxy = 16 //Require atleast 16kPA oxygen
|
||||
max_oxy = 0
|
||||
min_tox = 0 //should still suffer hypoxia, but the mask ought to filter out not-nice gases for them
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
|
||||
has_langs = list("Sign Language")
|
||||
|
||||
/datum/say_list/catslug/engislug
|
||||
speak = list("Have any porl?", "What is that?", "Phoroncheck!", "Thump is mean work fine!", "What are you doing?", "How did you get here?", "Don't breathe in the spicy purple.", "Zap-zap ball bad.", "WAOW!", "The pipes make sense.")
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/catslug/engislug/Initialize()
|
||||
. = ..()
|
||||
verbs += /mob/living/proc/ventcrawl
|
||||
verbs += /mob/living/proc/hide
|
||||
verbs -= /mob/living/simple_mob/vore/alienanimals/catslug/proc/catslug_color //I don't even want to imagine what the colour change proc would do to their sprite, not to mention ghosts would need to be forced into the catslug so this is more just a safety net than anything
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/catslug/engislug/attack_hand(mob/living/carbon/human/M as mob)
|
||||
|
||||
if(stat == DEAD)
|
||||
return ..()
|
||||
if(M.a_intent != I_HELP)
|
||||
return ..()
|
||||
playsound(src, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
|
||||
if(resting)
|
||||
M.visible_message("<span class='notice'>\The [M.name] shakes \the [src] awake from their nap.</span>","<span class='notice'>You shake \the [src] awake!</span>")
|
||||
lay_down()
|
||||
ai_holder.go_wake()
|
||||
return
|
||||
if(M.zone_sel.selecting == BP_HEAD)
|
||||
M.visible_message( \
|
||||
"<span class='notice'>[M] pats \the [src] on their helmet.</span>", \
|
||||
"<span class='notice'>You pat \the [src] on their helmet.</span>", )
|
||||
if(client)
|
||||
return
|
||||
if(prob(10))
|
||||
visible_message("<span class='notice'>\The [src] purrs and leans into [M]'s hand.</span>")
|
||||
else if(M.zone_sel.selecting == BP_R_HAND || M.zone_sel.selecting == BP_L_HAND)
|
||||
M.visible_message( \
|
||||
"<span class='notice'>[M] shakes \the [src]'s hand.</span>", \
|
||||
"<span class='notice'>You shake \the [src]'s hand.</span>", )
|
||||
if(client)
|
||||
return
|
||||
if(prob(10))
|
||||
visible_message("<span class='notice'>\The [src]'s looks a little confused and bonks their helmet's faceplate against [M]'s hand experimentally, attempting to nibble at it.</span>")
|
||||
else if(M.zone_sel.selecting == "mouth")
|
||||
M.visible_message( \
|
||||
"<span class='notice'>[M] attempts to boop \the [src]'s nose, defeated only by the helmet they wear.</span>", \
|
||||
"<span class='notice'>You attempt to boop \the [src] on the nose, stopped only by that helmet they wear.</span>", )
|
||||
if(client)
|
||||
return
|
||||
if(prob(10))
|
||||
visible_message("<span class='notice'>\The [src]'s eyes widen as they stare at [M]. After a moment they rub at the faint mark [M]'s digit left upon the surface of their helmet's faceplate.</span>")
|
||||
else if(M.zone_sel.selecting == BP_GROIN)
|
||||
M.visible_message( \
|
||||
"<span class='notice'>[M] rubs \the [src]'s tummy...</span>", \
|
||||
"<span class='notice'>You rub \the [src]'s tummy... You feel the danger.</span>", )
|
||||
if(client)
|
||||
return
|
||||
visible_message("<span class='notice'>\The [src] pushes [M]'s hand away from their tummy and furrows their brow!</span>")
|
||||
if(prob(5))
|
||||
ai_holder.target = M
|
||||
ai_holder.track_target_position()
|
||||
ai_holder.set_stance(STANCE_FIGHT)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/holder/catslug/engislug
|
||||
item_state = "engislug"
|
||||
|
||||
//Security catslug
|
||||
/datum/category_item/catalogue/fauna/catslug/gatslug
|
||||
name = "Alien Wildlife - Catslug - Officer Gatslug"
|
||||
desc = "A resident worker at the NSB Rascal's Pass, Officer Gatslug \
|
||||
served with distinction during upheaval at the NSB Adephagia in 2321. \
|
||||
After their recovery from the wreckage afterwards, they were awarded \
|
||||
several commendations and an offer to serve aboard the latest NT venture \
|
||||
in the Virgo-Erigone system. - \
|
||||
The Catslug is an omnivorous terrestrial creature.\
|
||||
Exhibiting properties of both a cat and a slug (hence its name)\
|
||||
it moves somewhat awkwardly. However, the unique qualities of\
|
||||
its body make it exceedingly flexible and smooth, allowing it to\
|
||||
wiggle into and move effectively in even extremely tight spaces.\
|
||||
Additionally, it has surprisingly capable hands, and moves quite\
|
||||
well on two legs or four. Caution is advised when interacting\
|
||||
with these creatures, they are quite intelligent, and proficient\
|
||||
tool users."
|
||||
value = CATALOGUER_REWARD_TRIVIAL //Local catslugs worth less than rarer ones
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/catslug/gatslug
|
||||
name = "Officer Gatslug"
|
||||
desc = "A light red-furred noodley bodied creature with thin arms and legs, and gloomy dark eyes. This one seems to be wearing a security cap, bandolier and holobadge."
|
||||
tt_desc = "Mollusca Felis Magistratus"
|
||||
icon_state = "gatslug"
|
||||
icon_living = "gatslug"
|
||||
icon_rest = "gatslug_rest"
|
||||
icon_dead = "gatslug_dead"
|
||||
digestable = 0
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/catslug/gatslug)
|
||||
holder_type = /obj/item/weapon/holder/catslug/gatslug
|
||||
maxHealth = 75
|
||||
health = 75
|
||||
makes_dirt = 0
|
||||
say_list_type = /datum/say_list/catslug/gatslug
|
||||
melee_damage_upper = 10 //"Trained" security member, so they can hit that little bit harder
|
||||
armor = list(
|
||||
"melee" = 15,
|
||||
"bullet" = 0,
|
||||
"laser" = 0,
|
||||
"energy" = 0,
|
||||
"bomb" = 0,
|
||||
"bio" = 0,
|
||||
"rad" = 0
|
||||
) //Similarly, \some\ armour values for a smidge more survivability compared to other catslugs.
|
||||
|
||||
has_langs = list("Sign Language")
|
||||
|
||||
|
||||
/datum/say_list/catslug/gatslug
|
||||
speak = list("Have any flashbangs?", "Valids!", "Heard spiders?", "What is that?", "Freeze!", "What are you doing?", "How did you get here?", "Red alert means big bangsticks.", "No being naughty now.", "WAOW!", "Who ate all the donuts?")
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/catslug/gatslug/Initialize()
|
||||
. = ..()
|
||||
verbs += /mob/living/proc/ventcrawl
|
||||
verbs += /mob/living/proc/hide
|
||||
verbs -= /mob/living/simple_mob/vore/alienanimals/catslug/proc/catslug_color //I don't even want to imagine what the colour change proc would do to their sprite, not to mention ghosts would need to be forced into the catslug so this is more just a safety net than anything
|
||||
|
||||
/obj/item/weapon/holder/catslug/gatslug
|
||||
item_state = "gatslug"
|
||||
|
||||
//Medical catslug
|
||||
/datum/category_item/catalogue/fauna/catslug/medislug
|
||||
name = "Alien Wildlife - Catslug - Doctor Mlemulon"
|
||||
desc = "A resident worker at the NSB Rascal's Pass, Doctor Mlemulon \
|
||||
works hard to drink and eat all the remaining medicine stocks in \
|
||||
the smartfridge after the end of a shift. Rumour has it they have \
|
||||
a side business of trading advanced surgical tools for \"tasty yummers\" too. - \
|
||||
The Catslug is an omnivorous terrestrial creature.\
|
||||
Exhibiting properties of both a cat and a slug (hence its name)\
|
||||
it moves somewhat awkwardly. However, the unique qualities of\
|
||||
its body make it exceedingly flexible and smooth, allowing it to\
|
||||
wiggle into and move effectively in even extremely tight spaces.\
|
||||
Additionally, it has surprisingly capable hands, and moves quite\
|
||||
well on two legs or four. Caution is advised when interacting\
|
||||
with these creatures, they are quite intelligent, and proficient\
|
||||
tool users."
|
||||
value = CATALOGUER_REWARD_TRIVIAL //Local catslugs worth less than rarer ones
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/catslug/medislug
|
||||
name = "Doctor Mlemulon"
|
||||
desc = "A pale blue-furred noodley bodied creature with thin arms and legs, and gloomy dark eyes. This one appears to have a nurses hat perched upon it's head and a medi-hud."
|
||||
tt_desc = "Mollusca Felis Medicus"
|
||||
icon_state = "medislug"
|
||||
icon_living = "medislug"
|
||||
icon_rest = "medislug_rest"
|
||||
icon_dead = "medislug_dead"
|
||||
digestable = 0
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/catslug/medislug)
|
||||
holder_type = /obj/item/weapon/holder/catslug/medislug
|
||||
makes_dirt = 0
|
||||
say_list_type = /datum/say_list/catslug/medislug
|
||||
|
||||
has_langs = list("Sign Language")
|
||||
|
||||
/datum/say_list/catslug/medislug
|
||||
speak = list("Have any osteodaxon?", "What is that?", "Suit sensors!", "What are you doing?", "How did you get here?", "Put a mask on!", "No smoking!", "WAOW!", "Stop getting blood everywhere!", "WHERE IN MAINT?")
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/catslug/medislug/Initialize()
|
||||
. = ..()
|
||||
verbs += /mob/living/proc/ventcrawl
|
||||
verbs += /mob/living/proc/hide
|
||||
verbs -= /mob/living/simple_mob/vore/alienanimals/catslug/proc/catslug_color //I don't even want to imagine what the colour change proc would do to their sprite, not to mention ghosts would need to be forced into the catslug so this is more just a safety net than anything
|
||||
|
||||
/obj/item/weapon/holder/catslug/medislug
|
||||
item_state = "medislug"
|
||||
|
||||
//Science catslug
|
||||
/datum/category_item/catalogue/fauna/catslug/scienceslug
|
||||
name = "Alien Wildlife - Catslug - Professor Nubbins"
|
||||
desc = "A resident worker at the NSB Rascal's Pass, Professor Nubbins \
|
||||
is tasked with the periodic maintenance of the R&D servers. \
|
||||
Unfortunately, they take this to mean \"wipe all stored research\". - \
|
||||
The Catslug is an omnivorous terrestrial creature.\
|
||||
Exhibiting properties of both a cat and a slug (hence its name)\
|
||||
it moves somewhat awkwardly. However, the unique qualities of\
|
||||
its body make it exceedingly flexible and smooth, allowing it to\
|
||||
wiggle into and move effectively in even extremely tight spaces.\
|
||||
Additionally, it has surprisingly capable hands, and moves quite\
|
||||
well on two legs or four. Caution is advised when interacting\
|
||||
with these creatures, they are quite intelligent, and proficient\
|
||||
tool users."
|
||||
value = CATALOGUER_REWARD_TRIVIAL //Local catslugs worth less than rarer ones
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/catslug/scienceslug
|
||||
name = "Professor Nubbins"
|
||||
desc = "A purple-furred noodley bodied creature with thin arms and legs, and gloomy dark eyes. This one looks to be wearing a swanky white science beret, as well as a pair of goggles."
|
||||
tt_desc = "Mollusca Felis Inquisitorem"
|
||||
icon_state = "scienceslug"
|
||||
icon_living = "scienceslug"
|
||||
icon_rest = "scienceslug_rest"
|
||||
icon_dead = "scienceslug_dead"
|
||||
digestable = 0
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/catslug/scienceslug)
|
||||
holder_type = /obj/item/weapon/holder/catslug/scienceslug
|
||||
makes_dirt = 0
|
||||
say_list_type = /datum/say_list/catslug/scienceslug
|
||||
|
||||
has_langs = list("Sign Language")
|
||||
|
||||
/datum/say_list/catslug/scienceslug
|
||||
speak = list("Slimes, squish!", "What is that?", "Smoking in Toxins is not advised.", "What are you doing?", "How did you get here?", "Do not deconstruct the cube!", "WAOW!", "Where are our materials?", "The acid dispenser is not full of juice. Must remember that.")
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/catslug/scienceslug/Initialize()
|
||||
. = ..()
|
||||
verbs += /mob/living/proc/ventcrawl
|
||||
verbs += /mob/living/proc/hide
|
||||
verbs -= /mob/living/simple_mob/vore/alienanimals/catslug/proc/catslug_color //I don't even want to imagine what the colour change proc would do to their sprite, not to mention ghosts would need to be forced into the catslug so this is more just a safety net than anything
|
||||
|
||||
/obj/item/weapon/holder/catslug/scienceslug
|
||||
item_state = "scienceslug"
|
||||
|
||||
//Cargo catslug
|
||||
/datum/category_item/catalogue/fauna/catslug/cargoslug
|
||||
name = "Alien Wildlife - Catslug - Technician Nermley"
|
||||
desc = "A resident worker at the NSB Rascal's Pass, Technician Nermley \
|
||||
is something of a mystery. No one is sure where they came from, \
|
||||
local scuttlebutt is that they just turned up one day and started \
|
||||
moving crates around. - \
|
||||
The Catslug is an omnivorous terrestrial creature.\
|
||||
Exhibiting properties of both a cat and a slug (hence its name)\
|
||||
it moves somewhat awkwardly. However, the unique qualities of\
|
||||
its body make it exceedingly flexible and smooth, allowing it to\
|
||||
wiggle into and move effectively in even extremely tight spaces.\
|
||||
Additionally, it has surprisingly capable hands, and moves quite\
|
||||
well on two legs or four. Caution is advised when interacting\
|
||||
with these creatures, they are quite intelligent, and proficient\
|
||||
tool users."
|
||||
value = CATALOGUER_REWARD_TRIVIAL //Local catslugs worth less than rarer ones
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/catslug/cargoslug
|
||||
name = "Technician Nermley"
|
||||
desc = "A brown-furred noodley bodied creature with thin arms and legs, and gloomy dark eyes. This one has a flipped-round baseball cap on their head and a pair of black mittens."
|
||||
tt_desc = "Mollusca Felis Quisquiliae"
|
||||
icon_state = "cargoslug"
|
||||
icon_living = "cargoslug"
|
||||
icon_rest = "cargoslug_rest"
|
||||
icon_dead = "cargoslug_dead"
|
||||
digestable = 0
|
||||
catalogue_data = list(/datum/category_item/catalogue/fauna/catslug/cargoslug)
|
||||
holder_type = /obj/item/weapon/holder/catslug/cargoslug
|
||||
makes_dirt = 0
|
||||
say_list_type = /datum/say_list/catslug/cargoslug
|
||||
|
||||
has_langs = list("Sign Language")
|
||||
|
||||
/datum/say_list/catslug/cargoslug
|
||||
speak = list("Disposals is not for slip and slide.", "What is that?", "Stamp those manifests!", "What are you doing?", "How did you get here?", "Can order pizza crate?", "WAOW!", "Where are all of our materials?", "Got glubbs?")
|
||||
|
||||
/mob/living/simple_mob/vore/alienanimals/catslug/cargoslug/Initialize()
|
||||
. = ..()
|
||||
verbs += /mob/living/proc/ventcrawl
|
||||
verbs += /mob/living/proc/hide
|
||||
verbs -= /mob/living/simple_mob/vore/alienanimals/catslug/proc/catslug_color //I don't even want to imagine what the colour change proc would do to their sprite, not to mention ghosts would need to be forced into the catslug so this is more just a safety net than anything
|
||||
|
||||
/obj/item/weapon/holder/catslug/cargoslug
|
||||
item_state = "cargoslug"
|
||||
|
||||
@@ -0,0 +1,590 @@
|
||||
#define VIRGO3C_ONE_ATMOSPHERE 92.5 //kPa
|
||||
#define VIRGO3C_AVG_TEMP 288.15 //kelvin
|
||||
|
||||
#define VIRGO3C_PER_N2 0.78 //percent
|
||||
#define VIRGO3C_PER_O2 0.21
|
||||
#define VIRGO3C_PER_N2O 0.00 //Currently no capacity to 'start' a turf with this. See turf.dm
|
||||
#define VIRGO3C_PER_CO2 0.01
|
||||
#define VIRGO3C_PER_PHORON 0.00
|
||||
|
||||
//Math only beyond this point
|
||||
#define VIRGO3C_MOL_PER_TURF (VIRGO3C_ONE_ATMOSPHERE*CELL_VOLUME/(VIRGO3C_AVG_TEMP*R_IDEAL_GAS_EQUATION))
|
||||
#define VIRGO3C_MOL_N2 (VIRGO3C_MOL_PER_TURF * VIRGO3C_PER_N2)
|
||||
#define VIRGO3C_MOL_O2 (VIRGO3C_MOL_PER_TURF * VIRGO3C_PER_O2)
|
||||
#define VIRGO3C_MOL_N2O (VIRGO3C_MOL_PER_TURF * VIRGO3C_PER_N2O)
|
||||
#define VIRGO3C_MOL_CO2 (VIRGO3C_MOL_PER_TURF * VIRGO3C_PER_CO2)
|
||||
#define VIRGO3C_MOL_PHORON (VIRGO3C_MOL_PER_TURF * VIRGO3C_PER_PHORON)
|
||||
|
||||
//Turfmakers
|
||||
#define VIRGO3C_SET_ATMOS nitrogen=VIRGO3C_MOL_N2;oxygen=VIRGO3C_MOL_O2;carbon_dioxide=VIRGO3C_MOL_CO2;phoron=VIRGO3C_MOL_PHORON;temperature=VIRGO3C_AVG_TEMP
|
||||
#define VIRGO3C_TURF_CREATE(x) x/virgo3c/nitrogen=VIRGO3C_MOL_N2;x/virgo3c/oxygen=VIRGO3C_MOL_O2;x/virgo3c/carbon_dioxide=VIRGO3C_MOL_CO2;x/virgo3c/phoron=VIRGO3C_MOL_PHORON;x/virgo3c/temperature=VIRGO3C_AVG_TEMP;x/virgo3c/outdoors=TRUE;x/virgo3c/update_graphic(list/graphic_add = null, list/graphic_remove = null) return 0
|
||||
#define VIRGO3C_TURF_CREATE_UN(x) x/virgo3c/nitrogen=VIRGO3C_MOL_N2;x/virgo3c/oxygen=VIRGO3C_MOL_O2;x/virgo3c/carbon_dioxide=VIRGO3C_MOL_CO2;x/virgo3c/phoron=VIRGO3C_MOL_PHORON;x/virgo3c/temperature=VIRGO3C_AVG_TEMP
|
||||
|
||||
var/datum/planet/virgo3c/planet_virgo3c = null
|
||||
|
||||
/datum/time/virgo3c
|
||||
seconds_in_day = 6 HOURS
|
||||
|
||||
/datum/planet/virgo3c
|
||||
name = "Virgo-3c"
|
||||
desc = "A habitable moon of the gas giant Virgo 3. The volcanic activity of this moon keeps its atmosphere warm enough for life to flourish."
|
||||
current_time = new /datum/time/virgo3c()
|
||||
planetary_wall_type = /turf/unsimulated/wall/planetary/virgo3c
|
||||
|
||||
/datum/planet/virgo3c/New()
|
||||
..()
|
||||
planet_virgo3c = src
|
||||
weather_holder = new /datum/weather_holder/virgo3c(src)
|
||||
|
||||
/datum/planet/virgo3c/update_sun()
|
||||
..()
|
||||
var/datum/time/time = current_time
|
||||
var/length_of_day = time.seconds_in_day / 10 / 60 / 60
|
||||
var/noon = length_of_day / 2
|
||||
var/distance_from_noon = abs(text2num(time.show_time("hh")) - noon)
|
||||
sun_position = distance_from_noon / noon
|
||||
sun_position = abs(sun_position - 1)
|
||||
|
||||
var/low_brightness = null
|
||||
var/high_brightness = null
|
||||
|
||||
var/low_color = null
|
||||
var/high_color = null
|
||||
var/min = 0
|
||||
|
||||
switch(sun_position)
|
||||
if(0 to 0.45) // Night
|
||||
low_brightness = 0.1
|
||||
low_color = "#000066"
|
||||
|
||||
high_brightness = 0.2
|
||||
high_color = "#66004D"
|
||||
min = 0
|
||||
|
||||
if(0.45 to 0.50) // Twilight
|
||||
low_brightness = 0.5
|
||||
low_color = "#66004D"
|
||||
|
||||
high_brightness = 0.9
|
||||
high_color = "#CC3300"
|
||||
min = 0.40
|
||||
|
||||
if(0.50 to 0.55) // Sunrise/set
|
||||
low_brightness = 0.9
|
||||
low_color = "#CC3300"
|
||||
|
||||
high_brightness = 3.0
|
||||
high_color = "#FF9933"
|
||||
min = 0.50
|
||||
|
||||
if(0.55 to 1.00) // Noon
|
||||
low_brightness = 3.0
|
||||
low_color = "#DDDDDD"
|
||||
|
||||
high_brightness = 10.0
|
||||
high_color = "#FFFFFF"
|
||||
min = 0.70
|
||||
|
||||
var/interpolate_weight = (abs(min - sun_position)) * 4
|
||||
var/weather_light_modifier = 1
|
||||
if(weather_holder && weather_holder.current_weather)
|
||||
weather_light_modifier = weather_holder.current_weather.light_modifier
|
||||
|
||||
var/new_brightness = (LERP(low_brightness, high_brightness, interpolate_weight) ) * weather_light_modifier
|
||||
|
||||
var/new_color = null
|
||||
if(weather_holder && weather_holder.current_weather && weather_holder.current_weather.light_color)
|
||||
new_color = weather_holder.current_weather.light_color
|
||||
else
|
||||
var/list/low_color_list = hex2rgb(low_color)
|
||||
var/low_r = low_color_list[1]
|
||||
var/low_g = low_color_list[2]
|
||||
var/low_b = low_color_list[3]
|
||||
|
||||
var/list/high_color_list = hex2rgb(high_color)
|
||||
var/high_r = high_color_list[1]
|
||||
var/high_g = high_color_list[2]
|
||||
var/high_b = high_color_list[3]
|
||||
|
||||
var/new_r = LERP(low_r, high_r, interpolate_weight)
|
||||
var/new_g = LERP(low_g, high_g, interpolate_weight)
|
||||
var/new_b = LERP(low_b, high_b, interpolate_weight)
|
||||
|
||||
new_color = rgb(new_r, new_g, new_b)
|
||||
|
||||
spawn(1)
|
||||
update_sun_deferred(new_brightness, new_color)
|
||||
|
||||
|
||||
/datum/weather_holder/virgo3c
|
||||
temperature = T0C
|
||||
allowed_weather_types = list(
|
||||
WEATHER_CLEAR = new /datum/weather/virgo3c/clear(),
|
||||
WEATHER_OVERCAST = new /datum/weather/virgo3c/overcast(),
|
||||
WEATHER_LIGHT_SNOW = new /datum/weather/virgo3c/light_snow(),
|
||||
WEATHER_SNOW = new /datum/weather/virgo3c/snow(),
|
||||
WEATHER_BLIZZARD = new /datum/weather/virgo3c/blizzard(),
|
||||
WEATHER_RAIN = new /datum/weather/virgo3c/rain(),
|
||||
WEATHER_STORM = new /datum/weather/virgo3c/storm(),
|
||||
WEATHER_HAIL = new /datum/weather/virgo3c/hail(),
|
||||
WEATHER_BLOOD_MOON = new /datum/weather/virgo3c/blood_moon(),
|
||||
WEATHER_EMBERFALL = new /datum/weather/virgo3c/emberfall(),
|
||||
WEATHER_ASH_STORM = new /datum/weather/virgo3c/ash_storm(),
|
||||
WEATHER_FALLOUT = new /datum/weather/virgo3c/fallout()
|
||||
)
|
||||
roundstart_weather_chances = list(
|
||||
WEATHER_CLEAR = 50,
|
||||
WEATHER_OVERCAST = 10,
|
||||
WEATHER_RAIN = 1,
|
||||
WEATHER_LIGHT_SNOW = 1
|
||||
)
|
||||
|
||||
/datum/weather/virgo3c
|
||||
name = "virgo3c"
|
||||
temp_high = 283.15 // 10c
|
||||
temp_low = 273.15 // 0c
|
||||
|
||||
/datum/weather/virgo3c/clear
|
||||
name = "clear"
|
||||
transition_chances = list(
|
||||
WEATHER_CLEAR = 60,
|
||||
WEATHER_OVERCAST = 20,
|
||||
WEATHER_LIGHT_SNOW = 1,
|
||||
WEATHER_BLOODMOON = 1,
|
||||
WEATHER_EMBERFALL = 0.5)
|
||||
transition_messages = list(
|
||||
"The sky clears up.",
|
||||
"The sky is visible.",
|
||||
"The weather is calm."
|
||||
)
|
||||
sky_visible = TRUE
|
||||
observed_message = "The sky is clear."
|
||||
|
||||
/datum/weather/virgo3c/overcast
|
||||
name = "overcast"
|
||||
temp_high = 283.15 // 10c
|
||||
temp_low = 273.15 // 0c
|
||||
light_modifier = 0.8
|
||||
transition_chances = list(
|
||||
WEATHER_CLEAR = 25,
|
||||
WEATHER_OVERCAST = 50,
|
||||
WEATHER_RAIN = 5,
|
||||
WEATHER_LIGHT_SNOW = 5
|
||||
)
|
||||
observed_message = "It is overcast, all you can see are clouds."
|
||||
transition_messages = list(
|
||||
"All you can see above are clouds.",
|
||||
"Clouds cut off your view of the sky.",
|
||||
"It's very cloudy."
|
||||
)
|
||||
|
||||
/datum/weather/virgo3c/light_snow
|
||||
name = "light snow"
|
||||
icon_state = "snowfall_light"
|
||||
temp_high = 268.15 // -5c
|
||||
temp_low = 263.15 // -10c
|
||||
light_modifier = 0.7
|
||||
transition_chances = list(
|
||||
WEATHER_LIGHT_SNOW = 75,
|
||||
WEATHER_OVERCAST = 25,
|
||||
WEATHER_SNOW = 10,
|
||||
WEATHER_RAIN = 5
|
||||
)
|
||||
observed_message = "It is snowing lightly."
|
||||
transition_messages = list(
|
||||
"Small snowflakes begin to fall from above.",
|
||||
"It begins to snow lightly.",
|
||||
)
|
||||
|
||||
/datum/weather/virgo3c/snow
|
||||
name = "moderate snow"
|
||||
icon_state = "snowfall_med"
|
||||
temp_high = 268.15 // -5c
|
||||
temp_low = 263.15 // -10c
|
||||
wind_high = 2
|
||||
wind_low = 0
|
||||
light_modifier = 0.5
|
||||
flight_failure_modifier = 5
|
||||
transition_chances = list(
|
||||
WEATHER_SNOW = 75,
|
||||
WEATHER_LIGHT_SNOW = 25,
|
||||
WEATHER_BLIZZARD = 5
|
||||
)
|
||||
observed_message = "It is snowing."
|
||||
transition_messages = list(
|
||||
"It's starting to snow.",
|
||||
"The air feels much colder as snowflakes fall from above."
|
||||
)
|
||||
outdoor_sounds_type = /datum/looping_sound/weather/outside_snow
|
||||
indoor_sounds_type = /datum/looping_sound/weather/inside_snow
|
||||
|
||||
/datum/weather/virgo3c/blizzard
|
||||
name = "blizzard"
|
||||
icon_state = "snowfall_heavy"
|
||||
temp_high = 268.15 // -5c
|
||||
temp_low = 263.15 // -10c
|
||||
wind_high = 4
|
||||
wind_low = 2
|
||||
light_modifier = 0.3
|
||||
flight_failure_modifier = 10
|
||||
transition_chances = list(
|
||||
WEATHER_BLIZZARD = 50,
|
||||
WEATHER_SNOW = 50
|
||||
)
|
||||
observed_message = "A blizzard blows snow everywhere."
|
||||
transition_messages = list(
|
||||
"Strong winds howl around you as a blizzard appears.",
|
||||
"It starts snowing heavily, and it feels extremly cold now."
|
||||
)
|
||||
outdoor_sounds_type = /datum/looping_sound/weather/outside_blizzard
|
||||
indoor_sounds_type = /datum/looping_sound/weather/inside_blizzard
|
||||
|
||||
/datum/weather/virgo3c/rain
|
||||
name = "rain"
|
||||
icon_state = "rain"
|
||||
temp_high = 283.15 // 10c
|
||||
temp_low = 273.15 // 0c
|
||||
wind_high = 2
|
||||
wind_low = 1
|
||||
light_modifier = 0.5
|
||||
effect_message = "<span class='warning'>Rain falls on you.</span>"
|
||||
|
||||
transition_chances = list(
|
||||
WEATHER_OVERCAST = 25,
|
||||
WEATHER_RAIN = 50,
|
||||
WEATHER_STORM = 10,
|
||||
WEATHER_LIGHT_SNOW = 5
|
||||
)
|
||||
observed_message = "It is raining."
|
||||
transition_messages = list(
|
||||
"The sky is dark, and rain falls down upon you."
|
||||
)
|
||||
|
||||
/datum/weather/virgo3c/rain/process_effects()
|
||||
..()
|
||||
for(var/mob/living/L as anything in living_mob_list)
|
||||
if(L.z in holder.our_planet.expected_z_levels)
|
||||
var/turf/T = get_turf(L)
|
||||
if(!T.is_outdoors())
|
||||
continue // They're indoors, so no need to rain on them.
|
||||
|
||||
// If they have an open umbrella, it'll guard from rain
|
||||
var/obj/item/weapon/melee/umbrella/U = L.get_active_hand()
|
||||
if(!istype(U) || !U.open)
|
||||
U = L.get_inactive_hand()
|
||||
|
||||
if(istype(U) && U.open)
|
||||
if(show_message)
|
||||
to_chat(L, "<span class='notice'>Rain patters softly onto your umbrella.</span>")
|
||||
continue
|
||||
|
||||
L.water_act(1)
|
||||
if(show_message)
|
||||
to_chat(L, effect_message)
|
||||
|
||||
/datum/weather/virgo3c/storm
|
||||
name = "storm"
|
||||
icon_state = "storm"
|
||||
temp_high = 283.15 // 10c
|
||||
temp_low = 273.15 // 0c
|
||||
wind_high = 4
|
||||
wind_low = 2
|
||||
light_modifier = 0.3
|
||||
flight_failure_modifier = 10
|
||||
effect_message = "<span class='warning'>Rain falls on you, drenching you in water.</span>"
|
||||
|
||||
var/next_lightning_strike = 0 // world.time when lightning will strike.
|
||||
var/min_lightning_cooldown = 5 SECONDS
|
||||
var/max_lightning_cooldown = 1 MINUTE
|
||||
observed_message = "An intense storm pours down over the region."
|
||||
transition_messages = list(
|
||||
"You feel intense winds hit you as the weather takes a turn for the worst.",
|
||||
"Loud thunder is heard in the distance.",
|
||||
"A bright flash heralds the approach of a storm."
|
||||
)
|
||||
|
||||
|
||||
transition_chances = list(
|
||||
WEATHER_STORM = 50,
|
||||
WEATHER_RAIN = 50,
|
||||
WEATHER_BLIZZARD = 5,
|
||||
WEATHER_HAIL = 5
|
||||
)
|
||||
|
||||
/datum/weather/virgo3c/storm/process_effects()
|
||||
..()
|
||||
for(var/mob/living/L as anything in living_mob_list)
|
||||
if(L.z in holder.our_planet.expected_z_levels)
|
||||
var/turf/T = get_turf(L)
|
||||
if(!T.is_outdoors())
|
||||
continue // They're indoors, so no need to rain on them.
|
||||
|
||||
// If they have an open umbrella, it'll guard from rain
|
||||
var/obj/item/weapon/melee/umbrella/U = L.get_active_hand()
|
||||
if(!istype(U) || !U.open)
|
||||
U = L.get_inactive_hand()
|
||||
|
||||
if(istype(U) && U.open)
|
||||
if(show_message)
|
||||
to_chat(L, "<span class='notice'>Rain showers loudly onto your umbrella!</span>")
|
||||
continue
|
||||
|
||||
|
||||
L.water_act(2)
|
||||
if(show_message)
|
||||
to_chat(L, effect_message)
|
||||
|
||||
handle_lightning()
|
||||
|
||||
// This gets called to do lightning periodically.
|
||||
// There is a seperate function to do the actual lightning strike, so that badmins can play with it.
|
||||
/datum/weather/virgo3c/storm/proc/handle_lightning()
|
||||
if(world.time < next_lightning_strike)
|
||||
return // It's too soon to strike again.
|
||||
next_lightning_strike = world.time + rand(min_lightning_cooldown, max_lightning_cooldown)
|
||||
var/turf/T = pick(holder.our_planet.planet_floors) // This has the chance to 'strike' the sky, but that might be a good thing, to scare reckless pilots.
|
||||
lightning_strike(T)
|
||||
|
||||
/datum/weather/virgo3c/hail
|
||||
name = "hail"
|
||||
icon_state = "hail"
|
||||
temp_high = 268.15 // -5c
|
||||
temp_low = 263.15 // -10c
|
||||
light_modifier = 0.3
|
||||
flight_failure_modifier = 15
|
||||
timer_low_bound = 2
|
||||
timer_high_bound = 5
|
||||
effect_message = "<span class='warning'>The hail smacks into you!</span>"
|
||||
|
||||
transition_chances = list(
|
||||
WEATHER_HAIL = 25,
|
||||
WEATHER_RAIN = 75
|
||||
)
|
||||
observed_message = "Ice is falling from the sky."
|
||||
transition_messages = list(
|
||||
"Ice begins to fall from the sky.",
|
||||
"It begins to hail.",
|
||||
"An intense chill is felt, and chunks of ice start to fall from the sky, towards you."
|
||||
)
|
||||
|
||||
/datum/weather/virgo3c/hail/process_effects()
|
||||
..()
|
||||
for(var/mob/living/carbon/H as anything in human_mob_list)
|
||||
if(H.z in holder.our_planet.expected_z_levels)
|
||||
var/turf/T = get_turf(H)
|
||||
if(!T.is_outdoors())
|
||||
continue // They're indoors, so no need to pelt them with ice.
|
||||
|
||||
// If they have an open umbrella, it'll guard from hail
|
||||
var/obj/item/weapon/melee/umbrella/U = H.get_active_hand()
|
||||
if(!istype(U) || !U.open)
|
||||
U = H.get_inactive_hand()
|
||||
|
||||
if(istype(U) && U.open)
|
||||
if(show_message)
|
||||
to_chat(H, "<span class='notice'>Hail patters onto your umbrella.</span>")
|
||||
continue
|
||||
|
||||
var/target_zone = pick(BP_ALL)
|
||||
var/amount_blocked = H.run_armor_check(target_zone, "melee")
|
||||
var/amount_soaked = H.get_armor_soak(target_zone, "melee")
|
||||
|
||||
var/damage = rand(1,3)
|
||||
|
||||
if(amount_blocked >= 30)
|
||||
continue // No need to apply damage. Hardhats are 30. They should probably protect you from hail on your head.
|
||||
//Voidsuits are likewise 40, and riot, 80. Clothes are all less than 30.
|
||||
|
||||
if(amount_soaked >= damage)
|
||||
continue // No need to apply damage.
|
||||
|
||||
H.apply_damage(damage, BRUTE, target_zone, amount_blocked, amount_soaked, used_weapon = "hail")
|
||||
if(show_message)
|
||||
to_chat(H, effect_message)
|
||||
|
||||
/datum/weather/virgo3c/blood_moon
|
||||
name = "blood moon"
|
||||
light_modifier = 0.5
|
||||
light_color = "#FF0000"
|
||||
temp_high = 283.15 // 10c
|
||||
temp_low = 273.15 // 0c
|
||||
flight_failure_modifier = 25
|
||||
transition_chances = list(
|
||||
WEATHER_BLOODMOON = 75,
|
||||
WEATHER_CLEAR = 25
|
||||
)
|
||||
observed_message = "Everything is red. Something really ominous is going on."
|
||||
transition_messages = list(
|
||||
"The sky turns blood red!"
|
||||
)
|
||||
outdoor_sounds_type = /datum/looping_sound/weather/wind
|
||||
indoor_sounds_type = /datum/looping_sound/weather/wind/indoors
|
||||
|
||||
// Ash and embers fall forever, such as from a volcano or something.
|
||||
/datum/weather/virgo3c/emberfall
|
||||
name = "emberfall"
|
||||
icon_state = "ashfall_light"
|
||||
light_modifier = 0.7
|
||||
light_color = "#880000"
|
||||
temp_high = 293.15 // 20c
|
||||
temp_low = 283.15 // 10c
|
||||
flight_failure_modifier = 20
|
||||
transition_chances = list(
|
||||
WEATHER_ASH_STORM = 100
|
||||
)
|
||||
observed_message = "Soot, ash, and embers float down from above."
|
||||
transition_messages = list(
|
||||
"Gentle embers waft down around you like black snow. A wall of dark, glowing ash approaches in the distance..."
|
||||
)
|
||||
outdoor_sounds_type = /datum/looping_sound/weather/wind
|
||||
indoor_sounds_type = /datum/looping_sound/weather/wind/indoors
|
||||
|
||||
// Like the above but a lot more harmful.
|
||||
/datum/weather/virgo3c/ash_storm
|
||||
name = "ash storm"
|
||||
icon_state = "ashfall_heavy"
|
||||
light_modifier = 0.1
|
||||
light_color = "#FF0000"
|
||||
temp_high = 313.15 // 40c
|
||||
temp_low = 303.15 // 30c
|
||||
wind_high = 6
|
||||
wind_low = 3
|
||||
flight_failure_modifier = 50
|
||||
transition_chances = list(
|
||||
WEATHER_ASH_STORM = 5,
|
||||
WEATHER_CLEAR = 95
|
||||
)
|
||||
observed_message = "All that can be seen is black smoldering ash."
|
||||
transition_messages = list(
|
||||
"Smoldering clouds of scorching ash billow down around you!"
|
||||
)
|
||||
// Lets recycle.
|
||||
outdoor_sounds_type = /datum/looping_sound/weather/outside_blizzard
|
||||
indoor_sounds_type = /datum/looping_sound/weather/inside_blizzard
|
||||
|
||||
/datum/weather/virgo3c/ash_storm/process_effects()
|
||||
..()
|
||||
for(var/mob/living/L as anything in living_mob_list)
|
||||
if(L.z in holder.our_planet.expected_z_levels)
|
||||
var/turf/T = get_turf(L)
|
||||
if(!T.is_outdoors())
|
||||
continue // They're indoors, so no need to burn them with ash.
|
||||
else if (isanimal(L))
|
||||
continue //Don't murder the wildlife, they live here it's fine
|
||||
|
||||
L.inflict_heat_damage(1)
|
||||
to_chat(L, "<span class='warning'>Smoldering ash singes you!</span>")
|
||||
|
||||
// Totally radical.
|
||||
/datum/weather/virgo3c/fallout
|
||||
name = "fallout"
|
||||
icon_state = "fallout"
|
||||
light_modifier = 0.7
|
||||
light_color = "#CCFFCC"
|
||||
flight_failure_modifier = 30
|
||||
transition_chances = list(
|
||||
WEATHER_FALLOUT = 100
|
||||
)
|
||||
observed_message = "Radioactive soot and ash rains down from the heavens."
|
||||
transition_messages = list(
|
||||
"Radioactive soot and ash start to float down around you, contaminating whatever they touch."
|
||||
)
|
||||
outdoor_sounds_type = /datum/looping_sound/weather/wind
|
||||
indoor_sounds_type = /datum/looping_sound/weather/wind/indoors
|
||||
|
||||
// How much radiation a mob gets while on an outside tile.
|
||||
var/direct_rad_low = RAD_LEVEL_LOW
|
||||
var/direct_rad_high = RAD_LEVEL_MODERATE
|
||||
|
||||
// How much radiation is bursted onto a random tile near a mob.
|
||||
var/fallout_rad_low = RAD_LEVEL_HIGH
|
||||
var/fallout_rad_high = RAD_LEVEL_VERY_HIGH
|
||||
|
||||
/datum/weather/virgo3c/fallout/process_effects()
|
||||
..()
|
||||
for(var/mob/living/L as anything in living_mob_list)
|
||||
if(L.z in holder.our_planet.expected_z_levels)
|
||||
irradiate_nearby_turf(L)
|
||||
var/turf/T = get_turf(L)
|
||||
if(!T.is_outdoors())
|
||||
continue // They're indoors, so no need to irradiate them with fallout.
|
||||
|
||||
L.rad_act(rand(direct_rad_low, direct_rad_high))
|
||||
|
||||
// This makes random tiles near people radioactive for awhile.
|
||||
// Tiles far away from people are left alone, for performance.
|
||||
/datum/weather/virgo3c/fallout/proc/irradiate_nearby_turf(mob/living/L)
|
||||
if(!istype(L))
|
||||
return
|
||||
var/list/turfs = RANGE_TURFS(world.view, L)
|
||||
var/turf/T = pick(turfs) // We get one try per tick.
|
||||
if(!istype(T))
|
||||
return
|
||||
if(T.is_outdoors())
|
||||
SSradiation.radiate(T, rand(fallout_rad_low, fallout_rad_high))
|
||||
|
||||
/turf/unsimulated/wall/planetary/virgo3c
|
||||
name = "impassable rock"
|
||||
desc = "It's quite impassable"
|
||||
icon = 'icons/turf/walls.dmi'
|
||||
icon_state = "rock-dark"
|
||||
alpha = 0xFF
|
||||
VIRGO3C_SET_ATMOS
|
||||
|
||||
VIRGO3C_TURF_CREATE(/turf/simulated/mineral/cave)
|
||||
VIRGO3C_TURF_CREATE(/turf/simulated/floor/outdoors/newdirt)
|
||||
VIRGO3C_TURF_CREATE(/turf/simulated/floor/outdoors/newdirt_nograss)
|
||||
VIRGO3C_TURF_CREATE(/turf/simulated/floor/outdoors/sidewalk)
|
||||
VIRGO3C_TURF_CREATE(/turf/simulated/floor/outdoors/sidewalk/side)
|
||||
VIRGO3C_TURF_CREATE(/turf/simulated/floor/outdoors/sidewalk/slab)
|
||||
VIRGO3C_TURF_CREATE(/turf/simulated/floor/water)
|
||||
VIRGO3C_TURF_CREATE(/turf/simulated/floor/tiled)
|
||||
VIRGO3C_TURF_CREATE(/turf/simulated/floor/reinforced)
|
||||
VIRGO3C_TURF_CREATE(/turf/simulated/floor/glass/reinforced)
|
||||
VIRGO3C_TURF_CREATE(/turf/simulated/open)
|
||||
VIRGO3C_TURF_CREATE(/turf/simulated/floor/tiled/dark)
|
||||
VIRGO3C_TURF_CREATE(/turf/simulated/mineral)
|
||||
VIRGO3C_TURF_CREATE(/turf/simulated/floor)
|
||||
|
||||
/turf/simulated/floor/outdoors/grass/virgo3c
|
||||
VIRGO3C_SET_ATMOS
|
||||
|
||||
grass_types = list(
|
||||
/obj/structure/flora/ausbushes/sparsegrass = 50,
|
||||
/obj/structure/flora/ausbushes/fullgrass = 50,
|
||||
/obj/structure/flora/ausbushes/brflowers = 1,
|
||||
/obj/structure/flora/ausbushes/ppflowers = 1,
|
||||
/obj/structure/flora/ausbushes/ywflowers = 1
|
||||
)
|
||||
|
||||
/turf/simulated/floor/outdoors/grass/forest/virgo3c
|
||||
VIRGO3C_SET_ATMOS
|
||||
var/tree_chance = 5
|
||||
|
||||
var/animal_chance = 0.5
|
||||
var/animal_types = list(
|
||||
/mob/living/simple_mob/vore/alienanimals/teppi = 5,
|
||||
/mob/living/simple_mob/vore/redpanda = 20,
|
||||
/mob/living/simple_mob/vore/redpanda/fae = 1,
|
||||
/mob/living/simple_mob/vore/sheep = 10,
|
||||
/mob/living/simple_mob/vore/rabbit/black = 10,
|
||||
/mob/living/simple_mob/vore/rabbit/white = 10,
|
||||
/mob/living/simple_mob/vore/rabbit/brown = 10,
|
||||
/mob/living/simple_mob/vore/leopardmander = 1,
|
||||
/mob/living/simple_mob/vore/horse/big = 5,
|
||||
/mob/living/simple_mob/vore/bigdragon/friendly = 0.5,
|
||||
/mob/living/simple_mob/vore/alienanimals/dustjumper = 10
|
||||
)
|
||||
|
||||
|
||||
/turf/simulated/floor/outdoors/grass/forest/virgo3c/Initialize()
|
||||
if(tree_chance && prob(tree_chance) && !check_density())
|
||||
new /obj/structure/flora/tree/bigtree(src)
|
||||
|
||||
if(animal_chance && prob(animal_chance) && !check_density())
|
||||
var/animal_type = pickweight(animal_types)
|
||||
new animal_type(src)
|
||||
|
||||
. = ..()
|
||||
|
||||
//VIRGO3C_SET_ATMOS()
|
||||
@@ -5,7 +5,8 @@
|
||||
anchored = TRUE
|
||||
|
||||
var/working = FALSE
|
||||
|
||||
var/negative_dir = null //VOREStation Addition
|
||||
|
||||
/obj/machinery/recycling/process()
|
||||
return PROCESS_KILL // these are all stateful
|
||||
|
||||
@@ -85,7 +86,12 @@
|
||||
/obj/machinery/recycling/crusher/can_accept_item(obj/item/O)
|
||||
if(LAZYLEN(O.matter))
|
||||
return ..()
|
||||
return FALSE
|
||||
//VOREStation Addition Start - Let's the machine decide to put things it can't accept somewhere else.
|
||||
else if(negative_dir && isitem(O) && !ishuman(O.loc))
|
||||
O.forceMove(get_step(src, negative_dir))
|
||||
else
|
||||
return FALSE
|
||||
//VOREStation Addition End
|
||||
|
||||
/obj/machinery/recycling/crusher/take_item(obj/item/O)
|
||||
. = ..()
|
||||
|
||||
|
Before Width: | Height: | Size: 250 KiB After Width: | Height: | Size: 252 KiB |
|
Before Width: | Height: | Size: 1.9 MiB After Width: | Height: | Size: 2.1 MiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 92 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 29 KiB |
@@ -0,0 +1,51 @@
|
||||
/turf/simulated/mineral/vacuum/gb_mine/make_ore(var/rare_ore)
|
||||
if(mineral)
|
||||
return
|
||||
var/mineral_name
|
||||
if(rare_ore)
|
||||
mineral_name = pickweight(list(
|
||||
"marble" = 3,
|
||||
"uranium" = 10,
|
||||
"platinum" = 10,
|
||||
"hematite" = 20,
|
||||
"carbon" = 5,
|
||||
"diamond" = 1,
|
||||
"gold" = 8,
|
||||
"silver" = 8,
|
||||
"phoron" = 18,
|
||||
"lead" = 2,
|
||||
"verdantium" = 1))
|
||||
else
|
||||
mineral_name = pickweight(list(
|
||||
"marble" = 2,
|
||||
"uranium" = 5,
|
||||
"platinum" = 5,
|
||||
"hematite" = 35,
|
||||
"carbon" = 5,
|
||||
"gold" = 3,
|
||||
"silver" = 3,
|
||||
"phoron" = 25,
|
||||
"lead" = 1))
|
||||
|
||||
if(mineral_name && (mineral_name in GLOB.ore_data))
|
||||
mineral = GLOB.ore_data[mineral_name]
|
||||
UpdateMineral()
|
||||
update_icon()
|
||||
|
||||
/datum/random_map/noise/ore/mining
|
||||
descriptor = "asteroid field ore distribution map"
|
||||
deep_val = 0.2
|
||||
rare_val = 0.1
|
||||
|
||||
/datum/random_map/noise/ore/mining/check_map_sanity()
|
||||
return 1 //Totally random, but probably beneficial.
|
||||
|
||||
/area/gb_mine/
|
||||
ambience = list('sound/ambience/ambimine.ogg', 'sound/ambience/song_game.ogg')
|
||||
base_turf = /turf/simulated/mineral/floor/vacuum
|
||||
/area/gb_mine/unexplored
|
||||
name = "Virgo 3c Underground"
|
||||
icon_state = "unexplored"
|
||||
/area/gb_mine/explored
|
||||
name = "Virgo 3c Underground"
|
||||
icon_state = "explored"
|
||||
@@ -0,0 +1,25 @@
|
||||
#if !defined(USING_MAP_DATUM)
|
||||
|
||||
#include "groundbase_areas.dm"
|
||||
#include "groundbase_defines.dm"
|
||||
// #include "stellar_delight_shuttle_defs.dm"
|
||||
#include "groundbase_telecomms.dm"
|
||||
// #include "stellar_delight_things.dm"
|
||||
#include "..\offmap_vr\common_offmaps.dm"
|
||||
#include "..\tether\tether_jobs.dm"
|
||||
// #include "..\stellardelight\stellar_delight_areas.dm"
|
||||
// #include "..\tether\tether_areas.dm"
|
||||
|
||||
#if !AWAY_MISSION_TEST //Don't include these for just testing away missions
|
||||
#include "gb-z1.dmm"
|
||||
#include "gb-z2.dmm"
|
||||
#include "gb-z3.dmm"
|
||||
#endif
|
||||
|
||||
#define USING_MAP_DATUM /datum/map/groundbase
|
||||
|
||||
#elif !defined(MAP_OVERRIDE)
|
||||
|
||||
#warn A map has already been included, ignoring Groundbase
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,330 @@
|
||||
/area/groundbase
|
||||
name = "Groundbase"
|
||||
icon = 'icons/turf/areas_vr.dmi'
|
||||
icon_state = "blublacir"
|
||||
requires_power = TRUE
|
||||
dynamic_lighting = TRUE
|
||||
ambience = AMBIENCE_MAINTENANCE
|
||||
|
||||
/area/maintenance/groundbase
|
||||
name = "Maintenance"
|
||||
icon = 'icons/turf/areas_vr.dmi'
|
||||
icon_state = "purblasqu"
|
||||
flags = RAD_SHIELDED
|
||||
ambience = AMBIENCE_MAINTENANCE
|
||||
flags = AREA_FLAG_IS_NOT_PERSISTENT
|
||||
|
||||
|
||||
/area/groundbase/level1
|
||||
name = "Rascal's Pass Level 1"
|
||||
flags = AREA_FLAG_IS_NOT_PERSISTENT
|
||||
|
||||
/area/groundbase/level1/ne
|
||||
name = "Northeast Rascal's Pass Level 1"
|
||||
/area/groundbase/level1/nw
|
||||
name = "Northwest Rascal's Pass Level 1"
|
||||
/area/groundbase/level1/se
|
||||
name = "Southeast Rascal's Pass Level 1"
|
||||
/area/groundbase/level1/sw
|
||||
name = "Southwest Rascal's Pass Level 1"
|
||||
|
||||
/area/groundbase/level1/centsquare
|
||||
name = "\improper Central Square"
|
||||
|
||||
/area/groundbase/level1/northspur
|
||||
name = "\improper North Spur"
|
||||
/area/groundbase/level1/eastspur
|
||||
name = "\improper East Spur"
|
||||
/area/groundbase/level1/westspur
|
||||
name = "\improper West Spur"
|
||||
/area/groundbase/level1/southeastspur
|
||||
name = "\improper Southeast Spur"
|
||||
/area/groundbase/level1/southwestspur
|
||||
name = "\improper Southwest Spur"
|
||||
|
||||
|
||||
/area/groundbase/level2
|
||||
name = "Rascal's Pass Level 2"
|
||||
flags = AREA_FLAG_IS_NOT_PERSISTENT
|
||||
|
||||
/area/groundbase/level2/ne
|
||||
name = "Northeast Rascal's Pass Level 2"
|
||||
/area/groundbase/level2/nw
|
||||
name = "Northwest Rascal's Pass Level 2"
|
||||
/area/groundbase/level2/se
|
||||
name = "Southeast Rascal's Pass Level 2"
|
||||
/area/groundbase/level2/sw
|
||||
name = "Southwest Rascal's Pass Level 2"
|
||||
|
||||
/area/groundbase/level3
|
||||
name = "Rascal's Pass Level 3"
|
||||
flags = AREA_FLAG_IS_NOT_PERSISTENT
|
||||
|
||||
/area/groundbase/level3/ne
|
||||
name = "Northeast Rascal's Pass Level 3"
|
||||
/area/groundbase/level3/nw
|
||||
name = "Northwest Rascal's Pass Level 3"
|
||||
/area/groundbase/level3/se
|
||||
name = "Southeast Rascal's Pass Level 3"
|
||||
/area/groundbase/level3/sw
|
||||
name = "Southwest Rascal's Pass Level 3"
|
||||
|
||||
|
||||
/area/groundbase/science
|
||||
name = "Science"
|
||||
holomap_color = HOLOMAP_AREACOLOR_SCIENCE
|
||||
icon_state = "purwhisqu"
|
||||
/area/groundbase/science/hall
|
||||
name = "Science Hallway"
|
||||
/area/groundbase/science/rnd
|
||||
name = "Research and Development"
|
||||
/area/groundbase/science/robotics
|
||||
name = "Rocotics"
|
||||
/area/groundbase/science/server
|
||||
name = "Science Server Room"
|
||||
/area/groundbase/science/rd
|
||||
name = "Research Director's Office"
|
||||
/area/groundbase/science/circuits
|
||||
name = "Circuits Workshop"
|
||||
/area/groundbase/science/xenohall
|
||||
name = "Xeno Studies Hallway"
|
||||
/area/groundbase/science/xenobot
|
||||
name = "Xenobotany"
|
||||
/area/groundbase/science/xenobot/storage
|
||||
name = "Xenobotany Storage"
|
||||
/area/groundbase/science/picnic
|
||||
name = "Science Break Room"
|
||||
|
||||
/area/groundbase/command
|
||||
name = "Command"
|
||||
holomap_color = HOLOMAP_AREACOLOR_COMMAND
|
||||
icon_state = "bluwhisqu"
|
||||
/area/groundbase/command/bridge
|
||||
name = "Bridge"
|
||||
/area/groundbase/command/captain
|
||||
name = "Captain's Office"
|
||||
/area/groundbase/command/captainq
|
||||
name = "Captain's Quarters"
|
||||
/area/groundbase/command/hop
|
||||
name = "Head of Personnel"
|
||||
/area/groundbase/command/hall
|
||||
name = "Command Hallway"
|
||||
/area/groundbase/command/meeting
|
||||
name = "Command Meeting Room"
|
||||
/area/groundbase/command/ai
|
||||
name = "AI Core"
|
||||
/area/groundbase/command/ai/chamber
|
||||
name = "AI Chamber"
|
||||
/area/groundbase/command/ai/upload
|
||||
name = "AI Upload"
|
||||
/area/groundbase/command/ai/hall
|
||||
name = "AI Hall"
|
||||
/area/groundbase/command/ai/foyer
|
||||
name = "AI Foyer"
|
||||
/area/groundbase/command/ai/robot
|
||||
name = "Robot Storage"
|
||||
/area/groundbase/command/ai/storage
|
||||
name = "AI Storage"
|
||||
|
||||
/area/groundbase/security
|
||||
name = "Security"
|
||||
holomap_color = HOLOMAP_AREACOLOR_SECURITY
|
||||
icon_state = "redwhisqu"
|
||||
/area/groundbase/security/lobby
|
||||
name = "Security Lobby"
|
||||
/area/groundbase/security/processing
|
||||
name = "Security Processing"
|
||||
/area/groundbase/security/halls
|
||||
name = "Security South Hallway"
|
||||
/area/groundbase/security/halle
|
||||
name = "Security East Hallway"
|
||||
/area/groundbase/security/warden
|
||||
name = "Warden's Office"
|
||||
/area/groundbase/security/armory
|
||||
name = "Security Armory"
|
||||
/area/groundbase/security/briefing
|
||||
name = "Security Briefing Room"
|
||||
/area/groundbase/security/equipment
|
||||
name = "Security Equipment Room"
|
||||
/area/groundbase/security/iaa1
|
||||
name = "Internal Affairs West Office"
|
||||
/area/groundbase/security/iaa2
|
||||
name = "Internal Affairs East Office"
|
||||
/area/groundbase/security/detective
|
||||
name = "Detective's Office"
|
||||
/area/groundbase/security/hos
|
||||
name = "Head of Security's Office"
|
||||
/area/prison/cell_block/gb
|
||||
name = "Brig"
|
||||
|
||||
|
||||
/area/groundbase/medical
|
||||
name = "Medical"
|
||||
holomap_color = HOLOMAP_AREACOLOR_MEDICAL
|
||||
icon_state = "cyawhisqu"
|
||||
/area/groundbase/medical/lobby
|
||||
name = "Medical Lobby"
|
||||
/area/groundbase/medical/psych
|
||||
name = "Psychiatrist's Office"
|
||||
/area/groundbase/medical/Chemistry
|
||||
name = "Chemistry"
|
||||
/area/groundbase/medical/triage
|
||||
name = "Medical Triage"
|
||||
/area/groundbase/medical/lhallway
|
||||
name = "Medical Lower Hallway"
|
||||
/area/groundbase/medical/resleeving
|
||||
name = "Resleeving"
|
||||
/area/groundbase/medical/autoresleeving
|
||||
name = "Auto-Resleeving"
|
||||
/area/groundbase/medical/or1
|
||||
name = "Medical Operating Room 1"
|
||||
/area/groundbase/medical/or2
|
||||
name = "Medical Operating Room 2"
|
||||
/area/groundbase/medical/equipment
|
||||
name = "Medical Equipment Room"
|
||||
/area/groundbase/medical/office
|
||||
name = "Medical Office"
|
||||
/area/groundbase/medical/uhallway
|
||||
name = "Medical Upper Hallway"
|
||||
/area/groundbase/medical/cmo
|
||||
name = "Chief Medical Officer's Office"
|
||||
/area/groundbase/medical/paramedic
|
||||
name = "Paramedic Equipment Room"
|
||||
/area/groundbase/medical/patio
|
||||
name = "Medical Break Room"
|
||||
/area/groundbase/medical/patient1
|
||||
name = "Medical Patient Room 1"
|
||||
/area/groundbase/medical/patient2
|
||||
name = "Medical Patient Room 2"
|
||||
/area/groundbase/medical/patient3
|
||||
name = "Medical Patient Room 3"
|
||||
/area/groundbase/medical/patient4
|
||||
name = "Medical Patient Room 4"
|
||||
|
||||
/area/groundbase/engineering
|
||||
name = "Engineering"
|
||||
holomap_color = HOLOMAP_AREACOLOR_ENGINEERING
|
||||
icon_state = "yelwhisqu"
|
||||
/area/groundbase/engineering/lobby
|
||||
name = "Engineering Lobby"
|
||||
/area/groundbase/engineering/ce
|
||||
name = "Chief Engineer's Office"
|
||||
/area/groundbase/engineering/workshop
|
||||
name = "Engineering Workshop"
|
||||
/area/groundbase/engineering/eva
|
||||
name = "Engineering EVA"
|
||||
/area/groundbase/engineering/storage
|
||||
name = "Engineering Storage"
|
||||
/area/groundbase/engineering/techstorage
|
||||
name = "Engineering Tech Storage"
|
||||
/area/groundbase/engineering/engine
|
||||
name = "Engine"
|
||||
/area/groundbase/engineering/atmos
|
||||
name = "Atmospherics"
|
||||
/area/groundbase/engineering/atmos/monitoring
|
||||
name = "Atmospherics Monitoring"
|
||||
|
||||
/area/groundbase/cargo
|
||||
name = "Cargo"
|
||||
holomap_color = HOLOMAP_AREACOLOR_CARGO
|
||||
icon_state = "orawhisqu"
|
||||
/area/groundbase/cargo/office
|
||||
name = "Cargo Office"
|
||||
/area/groundbase/cargo/bay
|
||||
name = "Cargo Bay"
|
||||
/area/groundbase/cargo/qm
|
||||
name = "Quartermaster's Office"
|
||||
/area/groundbase/cargo/mining
|
||||
name = "Mining"
|
||||
/area/maintenance/groundbase/trashpit
|
||||
name = "Trash Pit"
|
||||
|
||||
/area/groundbase/civilian
|
||||
name = "Civilian"
|
||||
holomap_color = HOLOMAP_AREACOLOR_CIV
|
||||
icon_state = "grewhisqu"
|
||||
/area/groundbase/civilian/arrivals
|
||||
name = "Arrivals"
|
||||
/area/groundbase/civilian/toolstorage
|
||||
name = "Tool Storage"
|
||||
/area/groundbase/civilian/bar
|
||||
name = "Bar"
|
||||
/area/groundbase/civilian/hydroponics
|
||||
name = "Hydroponics"
|
||||
/area/groundbase/civilian/hydroponics/out
|
||||
name = "Hydroponics Animal Pen"
|
||||
/area/groundbase/civilian/kitchen
|
||||
name = "Kitchen"
|
||||
/area/groundbase/civilian/kitchen/freezer
|
||||
name = "Kitchen Freezer"
|
||||
/area/groundbase/civilian/kitchen/backroom
|
||||
name = "Kitchen Back Room"
|
||||
/area/groundbase/civilian/chapel
|
||||
name = "Chapel"
|
||||
/area/groundbase/civilian/chapel/office
|
||||
name = "Chaplain's Office"
|
||||
/area/groundbase/civilian/library
|
||||
name = "Library"
|
||||
/area/groundbase/civilian/pilot
|
||||
name = "Pilot Equipment Room"
|
||||
/area/groundbase/civilian/gateway
|
||||
name = "Gateway"
|
||||
/area/groundbase/civilian/janitor
|
||||
name = "Janitor's Closet"
|
||||
|
||||
/area/groundbase/exploration
|
||||
name = "Exploration"
|
||||
holomap_color = HOLOMAP_AREACOLOR_SCIENCE
|
||||
icon_state = "purwhisqu"
|
||||
/area/groundbase/exploration/equipment
|
||||
name = "Exploration Equipment Room"
|
||||
/area/groundbase/exploration/shuttlepad
|
||||
name = "Exploration Shuttlepad"
|
||||
|
||||
/area/groundbase/dorms
|
||||
name = "Dormitories"
|
||||
holomap_color = HOLOMAP_AREACOLOR_DORMS
|
||||
icon_state = "grawhisqu"
|
||||
flags = RAD_SHIELDED | BLUE_SHIELDED
|
||||
/area/groundbase/dorms/bathroom
|
||||
name = "Dormitory Bathroom"
|
||||
/area/groundbase/dorms/room1
|
||||
name = "Dorm Room 1"
|
||||
/area/groundbase/dorms/room2
|
||||
name = "Dorm Room 2"
|
||||
/area/groundbase/dorms/room3
|
||||
name = "Dorm Room 3"
|
||||
/area/groundbase/dorms/room4
|
||||
name = "Dorm Room 4"
|
||||
/area/groundbase/dorms/room5
|
||||
name = "Dorm Room 5"
|
||||
/area/groundbase/dorms/room6
|
||||
name = "Dorm Room 6"
|
||||
/area/groundbase/dorms/room7
|
||||
name = "Dorm Room 7"
|
||||
/area/groundbase/dorms/room8
|
||||
name = "Dorm Room 8"
|
||||
|
||||
/area/maintenance/groundbase/substation
|
||||
name = "Substation"
|
||||
holomap_color = HOLOMAP_AREACOLOR_ENGINEERING
|
||||
icon_state = "yelwhitri"
|
||||
/area/maintenance/groundbase/substation/medcargo
|
||||
name = "Medical/Cargo Substation"
|
||||
/area/maintenance/groundbase/substation/secsci
|
||||
name = "Security/Research Substation"
|
||||
/area/maintenance/groundbase/substation/aiciv
|
||||
name = "AI/Civilian Substation"
|
||||
/area/maintenance/groundbase/substation/command
|
||||
name = "Command Substation"
|
||||
|
||||
/area/maintenance/groundbase/level1/netunnel
|
||||
name = "\improper Level 1 Northeast Tunnel"
|
||||
/area/maintenance/groundbase/level1/nwtunnel
|
||||
name = "\improper Level 1 Northwest Tunnel"
|
||||
/area/maintenance/groundbase/level1/setunnel
|
||||
name = "\improper Level 1 Southeast Tunnel"
|
||||
/area/maintenance/groundbase/level1/stunnel
|
||||
name = "\improper Level 1 South Tunnel"
|
||||
/area/maintenance/groundbase/level1/swtunnel
|
||||
name = "\improper Level 1 Southwest Tunnel"
|
||||
@@ -0,0 +1,458 @@
|
||||
//Normal map defs
|
||||
#define Z_LEVEL_GB_BOTTOM 1
|
||||
#define Z_LEVEL_GB_MIDDLE 2
|
||||
#define Z_LEVEL_GB_TOP 3
|
||||
#define Z_LEVEL_CENTCOM 4
|
||||
#define Z_LEVEL_MISC 5
|
||||
#define Z_LEVEL_MINING 6
|
||||
#define Z_LEVEL_BEACH 7
|
||||
#define Z_LEVEL_BEACH_CAVE 8
|
||||
#define Z_LEVEL_AEROSTAT 9
|
||||
#define Z_LEVEL_AEROSTAT_SURFACE 10
|
||||
#define Z_LEVEL_DEBRISFIELD 11
|
||||
#define Z_LEVEL_FUELDEPOT 12
|
||||
#define Z_LEVEL_OFFMAP1 13
|
||||
#define Z_LEVEL_GATEWAY 14
|
||||
#define Z_LEVEL_OM_ADVENTURE 15
|
||||
|
||||
//Camera networks
|
||||
#define NETWORK_HALLS "Halls"
|
||||
|
||||
/datum/map/groundbase/New()
|
||||
..()
|
||||
var/choice = pickweight(list(
|
||||
"endo"
|
||||
))
|
||||
if(choice)
|
||||
lobby_screens = list(choice)
|
||||
|
||||
/datum/map/groundbase
|
||||
name = "RascalsPass"
|
||||
full_name = "NSB Rascal's Pass"
|
||||
path = "groundbase"
|
||||
|
||||
use_overmap = TRUE
|
||||
overmap_z = Z_LEVEL_MISC
|
||||
overmap_size = 25
|
||||
overmap_event_areas = 15
|
||||
usable_email_tlds = list("virgo.nt")
|
||||
|
||||
zlevel_datum_type = /datum/map_z_level/groundbase
|
||||
|
||||
lobby_icon = 'icons/misc/title_vr.dmi'
|
||||
lobby_screens = list("endo")
|
||||
id_hud_icons = 'icons/mob/hud_jobs_vr.dmi'
|
||||
|
||||
|
||||
holomap_smoosh = list(list(
|
||||
Z_LEVEL_GB_BOTTOM,
|
||||
Z_LEVEL_GB_MIDDLE,
|
||||
Z_LEVEL_GB_TOP))
|
||||
|
||||
station_name = "NSB Rascal's Pass"
|
||||
station_short = "Rascal's Pass"
|
||||
facility_type = "base"
|
||||
dock_name = "Virgo-3B Colony"
|
||||
dock_type = "surface"
|
||||
boss_name = "Central Command"
|
||||
boss_short = "CentCom"
|
||||
company_name = "NanoTrasen"
|
||||
company_short = "NT"
|
||||
starsys_name = "Virgo-Erigone"
|
||||
|
||||
shuttle_docked_message = "The scheduled shuttle to the %dock_name% has arrived. It will depart in approximately %ETD%."
|
||||
shuttle_leaving_dock = "The shuttle has departed. Estimate %ETA% until arrival at %dock_name%."
|
||||
shuttle_called_message = "A scheduled crew transfer to the %dock_name% is occuring. The shuttle will arrive shortly. Those departing should proceed to deck three, aft within %ETA%."
|
||||
shuttle_recall_message = "The scheduled crew transfer has been cancelled."
|
||||
shuttle_name = "Crew Transport"
|
||||
emergency_shuttle_docked_message = "The evacuation shuttle has arrived. You have approximately %ETD% to board the shuttle."
|
||||
emergency_shuttle_leaving_dock = "The emergency shuttle has departed. Estimate %ETA% until arrival at %dock_name%."
|
||||
emergency_shuttle_called_message = "An emergency evacuation has begun, and an off-schedule shuttle has been called. It will arrive at deck three, aft in approximately %ETA%."
|
||||
emergency_shuttle_recall_message = "The evacuation shuttle has been recalled."
|
||||
|
||||
station_networks = list(
|
||||
NETWORK_CARGO,
|
||||
NETWORK_CIRCUITS,
|
||||
NETWORK_CIVILIAN,
|
||||
NETWORK_COMMAND,
|
||||
NETWORK_ENGINE,
|
||||
NETWORK_ENGINEERING,
|
||||
NETWORK_EXPLORATION,
|
||||
NETWORK_MEDICAL,
|
||||
NETWORK_MINE,
|
||||
NETWORK_RESEARCH,
|
||||
NETWORK_RESEARCH_OUTPOST,
|
||||
NETWORK_ROBOTS,
|
||||
NETWORK_SECURITY,
|
||||
NETWORK_TELECOM,
|
||||
NETWORK_HALLS
|
||||
)
|
||||
secondary_networks = list(
|
||||
NETWORK_ERT,
|
||||
NETWORK_MERCENARY,
|
||||
NETWORK_THUNDER,
|
||||
NETWORK_COMMUNICATORS,
|
||||
NETWORK_ALARM_ATMOS,
|
||||
NETWORK_ALARM_POWER,
|
||||
NETWORK_ALARM_FIRE,
|
||||
NETWORK_TALON_HELMETS,
|
||||
NETWORK_TALON_SHIP
|
||||
)
|
||||
|
||||
bot_patrolling = FALSE
|
||||
|
||||
allowed_spawns = list("Gateway","Cryogenic Storage","Cyborg Storage","ITV Talon Cryo")
|
||||
spawnpoint_died = /datum/spawnpoint/cryo
|
||||
spawnpoint_left = /datum/spawnpoint/gateway
|
||||
spawnpoint_stayed = /datum/spawnpoint/cryo
|
||||
|
||||
|
||||
meteor_strike_areas = list(
|
||||
/area/groundbase/level3,
|
||||
/area/groundbase/level2,
|
||||
/area/groundbase/level1
|
||||
)
|
||||
|
||||
|
||||
default_skybox = /datum/skybox_settings/groundbase
|
||||
|
||||
unit_test_exempt_areas = list( //These are all outside
|
||||
/area/groundbase/level1,
|
||||
/area/groundbase/level1/ne,
|
||||
/area/groundbase/level1/nw,
|
||||
/area/groundbase/level1/se,
|
||||
/area/groundbase/level1/sw,
|
||||
/area/groundbase/level1/centsquare,
|
||||
/area/groundbase/level1/northspur,
|
||||
/area/groundbase/level1/eastspur,
|
||||
/area/groundbase/level1/westspur,
|
||||
/area/groundbase/level1/southeastspur,
|
||||
/area/groundbase/level1/southwestspur,
|
||||
/area/groundbase/level2,
|
||||
/area/groundbase/level2/ne,
|
||||
/area/groundbase/level2/nw,
|
||||
/area/groundbase/level2/se,
|
||||
/area/groundbase/level2/sw,
|
||||
/area/groundbase/level3,
|
||||
/area/groundbase/level3/ne,
|
||||
/area/groundbase/level3/nw,
|
||||
/area/groundbase/level3/se,
|
||||
/area/groundbase/level3/sw,
|
||||
/area/maintenance/groundbase/level1/netunnel,
|
||||
/area/maintenance/groundbase/level1/nwtunnel,
|
||||
/area/maintenance/groundbase/level1/setunnel,
|
||||
/area/maintenance/groundbase/level1/stunnel,
|
||||
/area/maintenance/groundbase/level1/swtunnel,
|
||||
/area/groundbase/science/picnic,
|
||||
/area/groundbase/medical/patio,
|
||||
/area/groundbase/civilian/hydroponics/out
|
||||
)
|
||||
|
||||
unit_test_exempt_from_atmos = list()
|
||||
|
||||
|
||||
lateload_z_levels = list(
|
||||
list("Groundbase - Central Command"),
|
||||
list("Groundbase - Misc"), //Shuttle transit zones, holodeck templates, OM
|
||||
list("V3c Underground"),
|
||||
list("Desert Planet - Z1 Beach","Desert Planet - Z2 Cave"),
|
||||
list("Remmi Aerostat - Z1 Aerostat","Remmi Aerostat - Z2 Surface"),
|
||||
list("Debris Field - Z1 Space"),
|
||||
list("Fuel Depot - Z1 Space"),
|
||||
list("Offmap Ship - Talon V2")
|
||||
)
|
||||
|
||||
lateload_gateway = list(
|
||||
list("Carp Farm"),
|
||||
list("Snow Field"),
|
||||
list("Listening Post"),
|
||||
list(list("Honleth Highlands A", "Honleth Highlands B")),
|
||||
list("Arynthi Lake Underground A","Arynthi Lake A"),
|
||||
list("Arynthi Lake Underground B","Arynthi Lake B"),
|
||||
list("Eggnog Town Underground","Eggnog Town"),
|
||||
list("Wild West")
|
||||
)
|
||||
|
||||
lateload_overmap = list(
|
||||
list("Grass Cave")
|
||||
)
|
||||
|
||||
ai_shell_restricted = TRUE
|
||||
ai_shell_allowed_levels = list(
|
||||
Z_LEVEL_GB_BOTTOM,
|
||||
Z_LEVEL_GB_MIDDLE,
|
||||
Z_LEVEL_GB_TOP,
|
||||
Z_LEVEL_MISC,
|
||||
Z_LEVEL_BEACH,
|
||||
Z_LEVEL_AEROSTAT
|
||||
)
|
||||
|
||||
planet_datums_to_make = list(
|
||||
/datum/planet/virgo3b,
|
||||
/datum/planet/virgo3c,
|
||||
/datum/planet/virgo4)
|
||||
|
||||
/datum/map/groundbase/get_map_info()
|
||||
. = list()
|
||||
. += "[full_name] is a recently established base on one of Virgo 3's moons."
|
||||
return jointext(., "<br>")
|
||||
|
||||
|
||||
/datum/map/groundbase/perform_map_generation()
|
||||
|
||||
new /datum/random_map/automata/cave_system/no_cracks(null, 1, 1, Z_LEVEL_MINING, world.maxx, world.maxy) // Create the mining Z-level.
|
||||
new /datum/random_map/noise/ore(null, 1, 1, Z_LEVEL_MINING, 64, 64) // Create the mining ore distribution map.
|
||||
return 1
|
||||
|
||||
/datum/skybox_settings/groundbase
|
||||
icon_state = "space5"
|
||||
use_stars = FALSE
|
||||
|
||||
/datum/planet/virgo3c
|
||||
expected_z_levels = list(
|
||||
Z_LEVEL_GB_BOTTOM,
|
||||
Z_LEVEL_GB_MIDDLE,
|
||||
Z_LEVEL_GB_TOP,
|
||||
Z_LEVEL_CENTCOM
|
||||
)
|
||||
/datum/planet/virgo4
|
||||
expected_z_levels = list(
|
||||
Z_LEVEL_BEACH
|
||||
)
|
||||
|
||||
/obj/effect/landmark/map_data/groundbase
|
||||
height = 3
|
||||
|
||||
/obj/effect/overmap/visitable/sector/virgo3b
|
||||
name = "Virgo 3B"
|
||||
desc = "Full of phoron, and home to the NSB Adephagia."
|
||||
scanner_desc = @{"[i]Registration[/i]: NSB Adephagia
|
||||
[i]Class[/i]: Installation
|
||||
[i]Transponder[/i]: Transmitting (CIV), NanoTrasen IFF
|
||||
[b]Notice[/b]: NanoTrasen Base, authorized personnel only"}
|
||||
known = TRUE
|
||||
in_space = TRUE
|
||||
|
||||
icon = 'icons/obj/overmap_vr.dmi'
|
||||
icon_state = "virgo3b"
|
||||
|
||||
skybox_icon = 'icons/skybox/virgo3b.dmi'
|
||||
skybox_icon_state = "small"
|
||||
skybox_pixel_x = 0
|
||||
skybox_pixel_y = 0
|
||||
|
||||
initial_generic_waypoints = list()
|
||||
initial_restricted_waypoints = list()
|
||||
|
||||
extra_z_levels = list()
|
||||
|
||||
/obj/effect/overmap/visitable/sector/virgo3c
|
||||
name = "Virgo 3C"
|
||||
desc = "A small, volcanically active moon."
|
||||
scanner_desc = @{"[i]Registration[/i]: NSB Rascal's Pass
|
||||
[i]Class[/i]: Installation
|
||||
[i]Transponder[/i]: Transmitting (CIV), NanoTrasen IFF
|
||||
[b]Notice[/b]: NanoTrasen Base, authorized personnel only"}
|
||||
known = TRUE
|
||||
in_space = TRUE
|
||||
|
||||
icon = 'icons/obj/overmap.dmi'
|
||||
icon_state = "lush"
|
||||
|
||||
skybox_icon = null
|
||||
skybox_icon_state = null
|
||||
skybox_pixel_x = 0
|
||||
skybox_pixel_y = 0
|
||||
|
||||
initial_generic_waypoints = list("groundbase")
|
||||
initial_restricted_waypoints = list("Exploration Shuttle" = list("gbexplo"))
|
||||
|
||||
extra_z_levels = list()
|
||||
|
||||
|
||||
// For making the 6-in-1 holomap, we calculate some offsets
|
||||
#define SHIP_MAP_SIZE 140 // Width and height of compiled in tether z levels.
|
||||
#define SHIP_HOLOMAP_CENTER_GUTTER 40 // 40px central gutter between columns
|
||||
#define SHIP_HOLOMAP_MARGIN_X ((HOLOMAP_ICON_SIZE - (2*SHIP_MAP_SIZE) - SHIP_HOLOMAP_CENTER_GUTTER) / 2) // 80
|
||||
#define SHIP_HOLOMAP_MARGIN_Y ((HOLOMAP_ICON_SIZE - (2*SHIP_MAP_SIZE)) / 2) // 30
|
||||
|
||||
// We have a bunch of stuff common to the station z levels
|
||||
/datum/map_z_level/groundbase
|
||||
flags = MAP_LEVEL_STATION|MAP_LEVEL_CONTACT|MAP_LEVEL_PLAYER|MAP_LEVEL_CONSOLES|MAP_LEVEL_XENOARCH_EXEMPT|MAP_LEVEL_PERSIST
|
||||
holomap_legend_x = 220
|
||||
holomap_legend_y = 160
|
||||
|
||||
/datum/map_z_level/groundbase/level_one
|
||||
z = Z_LEVEL_GB_BOTTOM
|
||||
name = "Level 1"
|
||||
base_turf = /turf/simulated/floor/outdoors/newdirt_nograss/virgo3c
|
||||
transit_chance = 0
|
||||
holomap_offset_x = SHIP_HOLOMAP_MARGIN_X
|
||||
holomap_offset_y = SHIP_HOLOMAP_MARGIN_Y
|
||||
|
||||
/datum/map_z_level/groundbase/deck_two
|
||||
z = Z_LEVEL_GB_MIDDLE
|
||||
name = "Level 2"
|
||||
base_turf = /turf/simulated/open/virgo3c
|
||||
transit_chance = 0
|
||||
holomap_offset_x = SHIP_HOLOMAP_MARGIN_X
|
||||
holomap_offset_y = SHIP_HOLOMAP_MARGIN_Y + SHIP_MAP_SIZE
|
||||
|
||||
/datum/map_z_level/groundbase/deck_three
|
||||
z = Z_LEVEL_GB_TOP
|
||||
name = "Level 3"
|
||||
base_turf = /turf/simulated/open/virgo3c
|
||||
transit_chance = 0
|
||||
holomap_offset_x = HOLOMAP_ICON_SIZE - SHIP_HOLOMAP_MARGIN_X - SHIP_MAP_SIZE
|
||||
holomap_offset_y = SHIP_HOLOMAP_MARGIN_Y + SHIP_MAP_SIZE
|
||||
|
||||
/datum/map_template/gb_lateload
|
||||
allow_duplicates = FALSE
|
||||
var/associated_map_datum
|
||||
|
||||
/////STATIC LATELOAD/////
|
||||
|
||||
/datum/map_template/gb_lateload/on_map_loaded(z)
|
||||
if(!associated_map_datum || !ispath(associated_map_datum))
|
||||
log_game("Extra z-level [src] has no associated map datum")
|
||||
return
|
||||
|
||||
new associated_map_datum(using_map, z)
|
||||
|
||||
/datum/map_template/gb_lateload/gb_centcom
|
||||
name = "Groundbase - Central Command"
|
||||
desc = "Central Command lives here!"
|
||||
mappath = 'gb-centcomm.dmm'
|
||||
|
||||
associated_map_datum = /datum/map_z_level/gb_lateload/gb_centcom
|
||||
|
||||
/datum/map_z_level/gb_lateload/gb_centcom
|
||||
z = Z_LEVEL_CENTCOM
|
||||
name = "Centcom"
|
||||
flags = MAP_LEVEL_ADMIN|MAP_LEVEL_SEALED|MAP_LEVEL_CONTACT|MAP_LEVEL_XENOARCH_EXEMPT
|
||||
base_turf = /turf/simulated/floor/outdoors/rocks
|
||||
|
||||
/area/centcom //Just to try to make sure there's not space!!!
|
||||
base_turf = /turf/simulated/floor/outdoors/rocks
|
||||
|
||||
/datum/map_template/gb_lateload/gb_misc
|
||||
name = "Groundbase - Misc"
|
||||
desc = "Misc areas, like some transit areas, holodecks, merc area."
|
||||
mappath = 'gb-misc.dmm'
|
||||
|
||||
associated_map_datum = /datum/map_z_level/gb_lateload/misc
|
||||
|
||||
/datum/map_z_level/gb_lateload/misc
|
||||
z = Z_LEVEL_MISC
|
||||
name = "Misc"
|
||||
flags = MAP_LEVEL_ADMIN|MAP_LEVEL_SEALED|MAP_LEVEL_CONTACT|MAP_LEVEL_XENOARCH_EXEMPT
|
||||
|
||||
#include "gb-mining.dm"
|
||||
/datum/map_template/gb_lateload/mining
|
||||
name = "V3c Underground"
|
||||
desc = "The caves underneath the survace of Virgo 3C"
|
||||
mappath = 'maps/groundbase/gb-mining.dmm'
|
||||
|
||||
associated_map_datum = /datum/map_z_level/gb_lateload/mining
|
||||
|
||||
/datum/map_template/gb_lateload/mining/on_map_loaded(z)
|
||||
. = ..()
|
||||
// seed_submaps(list(Z_LEVEL_MINING), 60, /area/gb_mine/unexplored, /datum/map_template/space_rocks) //POI seeding
|
||||
new /datum/random_map/automata/cave_system/no_cracks(null, 3, 3, Z_LEVEL_MINING, world.maxx - 4, world.maxy - 4)
|
||||
new /datum/random_map/noise/ore/mining(null, 1, 1, Z_LEVEL_MINING, 64, 64)
|
||||
|
||||
/datum/map_z_level/gb_lateload/mining
|
||||
z = Z_LEVEL_MINING
|
||||
name = "V3c Underground"
|
||||
base_turf = /turf/simulated/floor/outdoors/newdirt_nograss/virgo3c
|
||||
flags = MAP_LEVEL_PLAYER|MAP_LEVEL_CONTACT|MAP_LEVEL_CONSOLES
|
||||
|
||||
#include "../expedition_vr/aerostat/_aerostat.dm"
|
||||
/datum/map_template/common_lateload/away_aerostat
|
||||
name = "Remmi Aerostat - Z1 Aerostat"
|
||||
desc = "The Virgo 2 Aerostat away mission."
|
||||
mappath = 'maps/expedition_vr/aerostat/aerostat.dmm'
|
||||
associated_map_datum = /datum/map_z_level/common_lateload/away_aerostat
|
||||
|
||||
/////EXPLOSHUTTL/////
|
||||
// The shuttle's 'shuttle' computer
|
||||
/obj/machinery/computer/shuttle_control/explore/gbexplo
|
||||
name = "Shuttle control console"
|
||||
shuttle_tag = "gbexplo"
|
||||
req_one_access = list(access_pilot)
|
||||
|
||||
/obj/effect/overmap/visitable/ship/landable/gbexplo
|
||||
name = "Exploration Shuttle"
|
||||
desc = "A small shuttle from Rascal's Pass."
|
||||
vessel_mass = 2500
|
||||
vessel_size = SHIP_SIZE_TINY
|
||||
shuttle = "gbexplo"
|
||||
known = TRUE
|
||||
|
||||
// A shuttle lateloader landmark
|
||||
|
||||
/datum/shuttle/autodock/overmap/gbexplo
|
||||
name = "Exploration Shuttlepad"
|
||||
current_location = "ex_shuttlepad"
|
||||
docking_controller_tag = "ex_docker"
|
||||
shuttle_area = list(/area/shuttle/groundbase/exploration)
|
||||
fuel_consumption = 1
|
||||
defer_initialisation = TRUE
|
||||
|
||||
/area/shuttle/groundbase/exploration
|
||||
icon = 'icons/turf/areas_vr.dmi'
|
||||
icon_state = "yelwhitri"
|
||||
name = "Exploration Shuttle"
|
||||
requires_power = 1
|
||||
|
||||
//////////////////////////////////////////////
|
||||
|
||||
// Supply shuttle
|
||||
/datum/shuttle/autodock/ferry/supply/cargo
|
||||
name = "Supply"
|
||||
location = FERRY_LOCATION_OFFSITE
|
||||
shuttle_area = /area/shuttle/supply
|
||||
warmup_time = 10
|
||||
landmark_offsite = "supply_cc"
|
||||
landmark_station = "supply_station"
|
||||
docking_controller_tag = "supply_shuttle"
|
||||
flags = SHUTTLE_FLAGS_PROCESS|SHUTTLE_FLAGS_SUPPLY
|
||||
move_direction = WEST
|
||||
|
||||
////////////////////////////////////////////////
|
||||
|
||||
/datum/shuttle/autodock/ferry/emergency/escape
|
||||
name = "Escape"
|
||||
location = FERRY_LOCATION_OFFSITE
|
||||
shuttle_area = /area/shuttle/escape
|
||||
warmup_time = 10
|
||||
landmark_offsite = "escape_cc"
|
||||
landmark_station = "escape_station"
|
||||
landmark_transition = "escape_transit"
|
||||
move_time = SHUTTLE_TRANSIT_DURATION_RETURN
|
||||
move_direction = SOUTH
|
||||
docking_controller_tag = "escape_shuttle"
|
||||
|
||||
/obj/effect/shuttle_landmark/premade/groundbase
|
||||
name = "Rascal's Pass"
|
||||
landmark_tag = "groundbase"
|
||||
|
||||
/obj/effect/step_trigger/teleporter/to_mining
|
||||
icon = 'icons/obj/structures/stairs_64x64.dmi'
|
||||
icon_state = ""
|
||||
invisibility = 0
|
||||
/obj/effect/step_trigger/teleporter/to_mining/Initialize()
|
||||
. = ..()
|
||||
teleport_x = x
|
||||
teleport_y = y ++
|
||||
teleport_z = Z_LEVEL_MINING
|
||||
|
||||
/obj/effect/step_trigger/teleporter/from_mining
|
||||
icon = 'icons/obj/structures/stairs_64x64.dmi'
|
||||
icon_state = ""
|
||||
invisibility = 0
|
||||
/obj/effect/step_trigger/teleporter/from_mining/Initialize()
|
||||
. = ..()
|
||||
teleport_x = x
|
||||
teleport_y = y --
|
||||
teleport_z = Z_LEVEL_GB_BOTTOM
|
||||
@@ -0,0 +1,94 @@
|
||||
// ### Preset machines ###
|
||||
|
||||
|
||||
// #### Relays ####
|
||||
// Telecomms doesn't know about connected z-levels, so we need relays even for the other surface levels.
|
||||
/obj/machinery/telecomms/relay/preset/station
|
||||
id = "groundbase Relay"
|
||||
listening_level = 9
|
||||
autolinkers = list("groundbase_relay")
|
||||
|
||||
// #### Hub ####
|
||||
/obj/machinery/telecomms/hub/preset/groundbase
|
||||
id = "Hub"
|
||||
network = "tcommsat"
|
||||
autolinkers = list("hub",
|
||||
"groundbase_relay", "c_relay", "m_relay", "r_relay",
|
||||
"science", "medical", "supply", "service", "common", "command", "engineering", "security", "explorer", "unused",
|
||||
"hb_relay", "receiverA", "broadcasterA"
|
||||
)
|
||||
|
||||
/obj/machinery/telecomms/receiver/preset_right/groundbase
|
||||
id = "groundbase_rx"
|
||||
freq_listening = list(AI_FREQ, SCI_FREQ, MED_FREQ, SUP_FREQ, SRV_FREQ, COMM_FREQ, ENG_FREQ, SEC_FREQ, ENT_FREQ, EXP_FREQ)
|
||||
|
||||
/obj/machinery/telecomms/broadcaster/preset_right/groundbase
|
||||
id = "groundbase_tx"
|
||||
|
||||
/obj/machinery/telecomms/bus/preset_two/groundbase
|
||||
freq_listening = list(SUP_FREQ, SRV_FREQ, EXP_FREQ)
|
||||
|
||||
/obj/machinery/telecomms/server/presets/service/groundbase
|
||||
freq_listening = list(SRV_FREQ, EXP_FREQ)
|
||||
autolinkers = list("service", "explorer")
|
||||
|
||||
// Telecommunications Satellite
|
||||
/area/groundbase/command/tcomms
|
||||
name = "\improper Telecomms"
|
||||
ambience = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg')
|
||||
|
||||
/area/groundbase/command/tcomms/entrance
|
||||
name = "\improper Telecomms Teleporter"
|
||||
|
||||
/area/groundbase/command/tcomms/foyer
|
||||
name = "\improper Telecomms Foyer"
|
||||
|
||||
/area/groundbase/command/tcomms/storage
|
||||
name = "\improper Telecomms Storage"
|
||||
|
||||
/area/groundbase/command/tcomms/computer
|
||||
name = "\improper Telecomms Control Room"
|
||||
|
||||
/area/groundbase/command/tcomms/chamber
|
||||
name = "\improper Telecomms Central Compartment"
|
||||
flags = BLUE_SHIELDED
|
||||
|
||||
/area/maintenance/substation/tcomms
|
||||
name = "\improper Telecomms Substation"
|
||||
|
||||
/area/maintenance/station/tcomms
|
||||
name = "\improper Telecoms Maintenance"
|
||||
|
||||
/datum/map/groundbase/default_internal_channels()
|
||||
return list(
|
||||
num2text(PUB_FREQ) = list(),
|
||||
num2text(AI_FREQ) = list(access_synth),
|
||||
num2text(ENT_FREQ) = list(),
|
||||
num2text(ERT_FREQ) = list(access_cent_specops),
|
||||
num2text(COMM_FREQ)= list(access_heads),
|
||||
num2text(ENG_FREQ) = list(access_engine_equip, access_atmospherics),
|
||||
num2text(MED_FREQ) = list(access_medical_equip),
|
||||
num2text(MED_I_FREQ)=list(access_medical_equip),
|
||||
num2text(SEC_FREQ) = list(access_security),
|
||||
num2text(SEC_I_FREQ)=list(access_security),
|
||||
num2text(SCI_FREQ) = list(access_tox,access_robotics,access_xenobiology),
|
||||
num2text(SUP_FREQ) = list(access_cargo),
|
||||
num2text(SRV_FREQ) = list(access_janitor, access_hydroponics),
|
||||
num2text(EXP_FREQ) = list(access_explorer)
|
||||
)
|
||||
|
||||
/obj/item/device/multitool/groundbase_buffered
|
||||
name = "pre-linked multitool (groundbase hub)"
|
||||
desc = "This multitool has already been linked to the groundbase telecomms hub and can be used to configure one (1) relay."
|
||||
|
||||
/obj/item/device/multitool/groundbase_buffered/Initialize()
|
||||
. = ..()
|
||||
buffer = locate(/obj/machinery/telecomms/hub/preset/groundbase)
|
||||
|
||||
/obj/item/device/bluespaceradio/groundbase_prelinked
|
||||
name = "bluespace radio (Stellar Delight)"
|
||||
handset = /obj/item/device/radio/bluespacehandset/linked/groundbase_prelinked
|
||||
|
||||
/obj/item/device/radio/bluespacehandset/linked/groundbase_prelinked
|
||||
bs_tx_preload_id = "groundbase_rx" //Transmit to a receiver
|
||||
bs_rx_preload_id = "groundbase_tx" //Recveive from a transmitter
|
||||
@@ -3414,6 +3414,7 @@
|
||||
#include "code\modules\planet\sun.dm"
|
||||
#include "code\modules\planet\time.dm"
|
||||
#include "code\modules\planet\virgo3b_vr.dm"
|
||||
#include "code\modules\planet\virgo3c_vr.dm"
|
||||
#include "code\modules\planet\virgo4_vr.dm"
|
||||
#include "code\modules\planet\weather.dm"
|
||||
#include "code\modules\planet\weather_vr.dm"
|
||||
@@ -4097,6 +4098,7 @@
|
||||
#include "maps\expedition_vr\beach\submaps\mountains.dm"
|
||||
#include "maps\expedition_vr\beach\submaps\mountains_areas.dm"
|
||||
#include "maps\gateway_archive_vr\blackmarketpackers.dm"
|
||||
#include "maps\groundbase\groundbase.dm"
|
||||
#include "maps\offmap_vr\om_ships\abductor.dm"
|
||||
#include "maps\southern_cross\items\clothing\sc_accessory.dm"
|
||||
#include "maps\southern_cross\items\clothing\sc_suit.dm"
|
||||
@@ -4104,7 +4106,6 @@
|
||||
#include "maps\southern_cross\loadout\loadout_suit.dm"
|
||||
#include "maps\southern_cross\loadout\loadout_uniform.dm"
|
||||
#include "maps\southern_cross\loadout\loadout_vr.dm"
|
||||
#include "maps\stellardelight\stellar_delight.dm"
|
||||
#include "maps\submaps\_helpers.dm"
|
||||
#include "maps\submaps\_readme.dm"
|
||||
#include "maps\submaps\engine_submaps\engine.dm"
|
||||
|
||||