Merge branch 'master' into upstream-merge-12595

This commit is contained in:
Nadyr
2022-04-04 16:50:32 -04:00
committed by GitHub
28 changed files with 64249 additions and 184 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -22,7 +22,7 @@ var/list/preferences_datums = list()
var/UI_style_color = "#ffffff"
var/UI_style_alpha = 255
var/tooltipstyle = "Midnight" //Style for popup tooltips
var/client_fps = 0
var/client_fps = 40
var/ambience_freq = 5 // How often we're playing repeating ambience to a client.
var/ambience_chance = 35 // What's the % chance we'll play ambience (in conjunction with the above frequency)

View File

@@ -144,14 +144,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.",

View File

@@ -388,3 +388,307 @@
/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"

View File

@@ -47,6 +47,16 @@
icon_dead = "wah_fae_dead"
icon_rest = "wah_fae_rest"
/mob/living/simple_mob/vore/redpanda/blue
name = "blue wah"
desc = "Blue, but still cute!"
tt_desc = "Ailurus tribotum"
icon_state = "wah_bloo"
icon_living = "wah_bloo"
icon_dead = "wah_bloo_dead"
icon_rest = "wah_bloo_rest"
vore_ignores_undigestable = 0 // wah don't care you're edible or not, you still go in
vore_digest_chance = 0 // instead of digesting if you struggle...
vore_absorb_chance = 20 // you get to become adorable purple wahpudge.

View File

@@ -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()

View File

@@ -32,40 +32,35 @@ var/datum/planet/virgo4/planet_virgo4 = null
var/min = 0
switch(sun_position)
<<<<<<< HEAD:code/modules/planet/virgo4_vr
if(0 to 0.30) // Night
low_brightness = 0.1
=======
if(0 to 0.45) // Night
if(0 to 0.20) // Night
low_brightness = 0.3
>>>>>>> 72fbb37dbd... Merge pull request #12595 from Very-Soft/gbtweaks:code/modules/planet/virgo3c_vr.dm
low_color = "#000066"
high_brightness = 0.4
high_brightness = 0.5
high_color = "#66004D"
min = 0
if(0.30 to 0.40) // Twilight
low_brightness = 0.4
if(0.20 to 0.30) // Twilight
low_brightness = 0.5
low_color = "#66004D"
high_brightness = 0.6
high_brightness = 0.9
high_color = "#CC3300"
min = 0.40
if(0.40 to 0.50) // Sunrise/set
low_brightness = 0.7
if(0.30 to 0.40) // Sunrise/set
low_brightness = 0.9
low_color = "#CC3300"
high_brightness = 0.9
high_brightness = 3.0
high_color = "#FF9933"
min = 0.50
if(0.50 to 1.00) // Noon
low_brightness = 1
if(0.40 to 1.00) // Noon
low_brightness = 3.0
low_color = "#DDDDDD"
high_brightness = 2
high_brightness = 10.0
high_color = "#FFFFFF"
min = 0.70
@@ -97,7 +92,7 @@ var/datum/planet/virgo4/planet_virgo4 = null
new_color = rgb(new_r, new_g, new_b)
spawn(1)
update_sun_deferred(2, new_brightness, new_color)
update_sun_deferred(new_brightness, new_color)
/datum/weather_holder/virgo4
@@ -192,15 +187,17 @@ var/datum/planet/virgo4/planet_virgo4 = null
outdoor_sounds_type = /datum/looping_sound/weather/outside_snow
indoor_sounds_type = /datum/looping_sound/weather/inside_snow
/*
/datum/weather/virgo4/snow/process_effects()
..()
for(var/turf/simulated/floor/outdoors/snow/S in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either
for(var/turf/simulated/floor/outdoors/snow/S as anything in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either
if(S.z in holder.our_planet.expected_z_levels)
for(var/dir_checked in cardinal)
var/turf/simulated/floor/T = get_step(S, dir_checked)
if(istype(T))
if(istype(T, /turf/simulated/floor/outdoors) && prob(33))
T.chill()
*/
/datum/weather/virgo4/blizzard
name = "blizzard"
@@ -222,15 +219,17 @@ var/datum/planet/virgo4/planet_virgo4 = null
outdoor_sounds_type = /datum/looping_sound/weather/outside_blizzard
indoor_sounds_type = /datum/looping_sound/weather/inside_blizzard
/*
/datum/weather/virgo4/blizzard/process_effects()
..()
for(var/turf/simulated/floor/outdoors/snow/S in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either
for(var/turf/simulated/floor/outdoors/snow/S as anything in SSplanets.new_outdoor_turfs) //This didn't make any sense before SSplanets, either
if(S.z in holder.our_planet.expected_z_levels)
for(var/dir_checked in cardinal)
var/turf/simulated/floor/T = get_step(S, dir_checked)
if(istype(T))
if(istype(T, /turf/simulated/floor/outdoors) && prob(50))
T.chill()
*/
/datum/weather/virgo4/rain
name = "rain"
@@ -253,22 +252,18 @@ var/datum/planet/virgo4/planet_virgo4 = null
/datum/weather/virgo4/rain/process_effects()
..()
for(var/mob/living/L in living_mob_list)
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.outdoors)
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
if(istype(L.get_active_hand(), /obj/item/weapon/melee/umbrella))
var/obj/item/weapon/melee/umbrella/U = L.get_active_hand()
if(U.open)
if(show_message)
to_chat(L, "<span class='notice'>Rain patters softly onto your umbrella.</span>")
continue
else if(istype(L.get_inactive_hand(), /obj/item/weapon/melee/umbrella))
var/obj/item/weapon/melee/umbrella/U = L.get_inactive_hand()
if(U.open)
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
@@ -303,22 +298,18 @@ var/datum/planet/virgo4/planet_virgo4 = null
/datum/weather/virgo4/storm/process_effects()
..()
for(var/mob/living/L in living_mob_list)
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.outdoors)
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
if(istype(L.get_active_hand(), /obj/item/weapon/melee/umbrella))
var/obj/item/weapon/melee/umbrella/U = L.get_active_hand()
if(U.open)
if(show_message)
to_chat(L, "<span class='notice'>Rain showers loudly onto your umbrella!</span>")
continue
else if(istype(L.get_inactive_hand(), /obj/item/weapon/melee/umbrella))
var/obj/item/weapon/melee/umbrella/U = L.get_inactive_hand()
if(U.open)
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
@@ -360,20 +351,18 @@ var/datum/planet/virgo4/planet_virgo4 = null
/datum/weather/virgo4/hail/process_effects()
..()
for(var/humie in human_mob_list)
var/mob/living/carbon/human/H = humie
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.outdoors)
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
if(istype(H.get_active_hand(), /obj/item/weapon/melee/umbrella))
U = H.get_active_hand()
else if(istype(H.get_inactive_hand(), /obj/item/weapon/melee/umbrella))
var/obj/item/weapon/melee/umbrella/U = H.get_active_hand()
if(!istype(U) || !U.open)
U = H.get_inactive_hand()
if(U && U.open)
if(istype(U) && U.open)
if(show_message)
to_chat(H, "<span class='notice'>Hail patters onto your umbrella.</span>")
continue
@@ -455,11 +444,10 @@ var/datum/planet/virgo4/planet_virgo4 = null
/datum/weather/virgo4/ash_storm/process_effects()
..()
for(var/thing in living_mob_list)
var/mob/living/L = thing
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.outdoors)
if(!T.is_outdoors())
continue // They're indoors, so no need to burn them with ash.
L.inflict_heat_damage(rand(1, 3))
@@ -492,12 +480,11 @@ var/datum/planet/virgo4/planet_virgo4 = null
/datum/weather/virgo4/fallout/process_effects()
..()
for(var/thing in living_mob_list)
var/mob/living/L = thing
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.outdoors)
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))
@@ -511,10 +498,9 @@ var/datum/planet/virgo4/planet_virgo4 = null
var/turf/T = pick(turfs) // We get one try per tick.
if(!istype(T))
return
if(T.outdoors)
if(T.is_outdoors())
SSradiation.radiate(T, rand(fallout_rad_low, fallout_rad_high))
<<<<<<< HEAD:code/modules/planet/virgo4_vr
/turf/unsimulated/wall/planetary/normal/virgo4
name = "deep ocean"
alpha = 0
@@ -526,81 +512,3 @@ var/datum/planet/virgo4/planet_virgo4 = null
input_level = input_level_max
output_level = output_level_max
input_attempt = TRUE
=======
/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/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/mineral/cave/virgo3c
VIRGO3C_SET_ATMOS
outdoors = 0
/turf/simulated/mineral/floor/virgo3c
VIRGO3C_SET_ATMOS
outdoors = 0
/turf/simulated/mineral/floor/ignore_mapgen/virgo3c
VIRGO3C_SET_ATMOS
outdoors = 0
/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()
>>>>>>> 72fbb37dbd... Merge pull request #12595 from Very-Soft/gbtweaks:code/modules/planet/virgo3c_vr.dm

View File

@@ -5,6 +5,7 @@
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 ..()
//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)
. = ..()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 250 KiB

After

Width:  |  Height:  |  Size: 252 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

After

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 301 KiB

After

Width:  |  Height:  |  Size: 305 KiB

View File

@@ -125,6 +125,9 @@ macro "borghotkeymode"
elem
name = "5"
command = ".me"
elem
name = "6"
command = ".Subtle"
elem
name = "A"
command = "KeyDown A"
@@ -190,16 +193,19 @@ macro "borghotkeymode"
command = ".northeast"
elem
name = "Y"
command = "Activate-Held-Object"
command = ".Whisper"
elem
name = "CTRL+Y"
command = "Activate-Held-Object"
command = ".Whisper"
elem
name = "Z"
command = "Activate-Held-Object"
elem
name = "CTRL+Z"
command = "Activate-Held-Object"
elem
name = "U"
command = "Rest"
elem
name = "NUMPAD1"
command = "body-r-leg"
@@ -920,6 +926,9 @@ macro "borgmacro"
elem
name = "CTRL+Z"
command = "Activate-Held-Object"
elem
name = "CTRL+U"
command = "Rest"
elem
name = "CTRL+NUMPAD1"
command = "body-r-leg"

File diff suppressed because it is too large Load Diff

View File

@@ -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"

23054
maps/groundbase/gb-misc.dmm Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -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

View File

@@ -484,33 +484,24 @@
</style>
</head>
<body>
Technical Order (TO) 1-33-34-2 <br>
<h1>Operator's Manual - Rotary Electric Generator, D-Type</h1><br><br>
Supporting Data: <br>
- TO 1-33-34-4-1 Illustrated Parts Breakdown - Rotary Electric Generator, D-Type <br>
- TO 1-33-34-6 Inspection Work Cards - Rotary Electric Generator, D-Type <br><br>
Support Equipment: <br>
- Torque Wrench, 100-80,000 inch-pounds <br>
- Composite Tool Kit, Standard <br>
- Multitool with Lead Kit, Wire Kit <br> <br>
Required Supplies: <br>
- stainless steel, 10,000cm3 <br>
- lubrication, petrolatum, 6000ml <br>
- electrical wiring, 5m <br>
- component set, capacitors (any grade) <br>
- circuitry board, REG <br> <br>
<h1>SETUP AND OPERATING PROCEDURES</h1> <br> <br>
Setup: <br> <br>
CAUTION: Do not remove too much air from the work space or personnel may be exposed to hypoxia or similar effects. <br> <br>
1. Prepare setup area. Remove machinery, debris, foreign objects, people, and extra air. <br> <br>
2. Lay out preliminary electrical wiring. <br>
@@ -534,9 +525,7 @@
9. Wait for assembly to finish inflating, and the unit is ready for service. <br> <br>
Operating Procedures: <br> <br>
NOTE: Operation of REG-D type generators requires significant physical effort. Ensure users are provided adequare nutrition and hydration throughout the working period. <br> <br>
1. Designate the individual who will be operating the REG-D. <br> <br>
@@ -552,8 +541,6 @@
5. Continue to run on the REG-D track body until sufficient energy is stored in systems or Operator is no longer able or willing to continue. <br> <br>
6. To end a session, carefully lower forward running speed until the track body comes to a complete stop, then disembark the REG-D. <br> <br>
REFER TO TO 1-33-34-6 FOR MAINTENANCE AND INSPECTION PROCEDURES
</body>
</html>

View File

@@ -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