More stuff, finalizes it I hope.
@@ -72,6 +72,9 @@ var/list/flooring_cache = list()
|
|||||||
if(!isnull(burnt) && (flooring.flags & TURF_CAN_BURN))
|
if(!isnull(burnt) && (flooring.flags & TURF_CAN_BURN))
|
||||||
overlays |= get_flooring_overlay("[flooring.icon_base]-burned-[burnt]","[flooring.icon_base]_burned[burnt]")
|
overlays |= get_flooring_overlay("[flooring.icon_base]-burned-[burnt]","[flooring.icon_base]_burned[burnt]")
|
||||||
|
|
||||||
|
if(weather_overlay)
|
||||||
|
overlays += weather_overlay
|
||||||
|
|
||||||
if(update_neighbors)
|
if(update_neighbors)
|
||||||
for(var/turf/simulated/floor/F in range(src, 1))
|
for(var/turf/simulated/floor/F in range(src, 1))
|
||||||
if(F == src)
|
if(F == src)
|
||||||
|
|||||||
@@ -1,239 +0,0 @@
|
|||||||
/client/verb/test_outdoors_lights()
|
|
||||||
var/amount_range = input("Range", "Light Test", 2) as num
|
|
||||||
var/amount_brightness = input("Brightness", "Light Test", 1) as num
|
|
||||||
var/new_color = input("Color", "Light Test", "#FFFFFF") as color
|
|
||||||
|
|
||||||
for(var/turf/simulated/floor/outdoors/T in outdoor_turfs)
|
|
||||||
T.set_light(amount_range, amount_brightness, new_color)
|
|
||||||
world << "Finished."
|
|
||||||
|
|
||||||
/*
|
|
||||||
/client/verb/test_outdoor_time()
|
|
||||||
var/new_time = input("New time, in hours", "Day/Night cycle", 1) as num
|
|
||||||
var/datum/time/sif/time = new()
|
|
||||||
time = time.add_hours(new_time)
|
|
||||||
world << time.show_time("hh:mm:ss")
|
|
||||||
|
|
||||||
var/length_of_day = time.seconds_in_day / 10 / 60 / 60 // 32
|
|
||||||
var/noon = length_of_day / 2
|
|
||||||
var/distance_from_noon = abs(text2num(time.show_time("hh")) - noon)
|
|
||||||
var/lerp_weight = distance_from_noon / noon
|
|
||||||
|
|
||||||
var/noon_range = 5
|
|
||||||
var/midnight_range = 3
|
|
||||||
|
|
||||||
var/noon_brightness = 1
|
|
||||||
var/midnight_brightness = 0.06
|
|
||||||
|
|
||||||
// var/amount_range = Interpolate(noon_range, midnight_range, weight = lerp_weight)
|
|
||||||
var/amount_range = 2
|
|
||||||
var/amount_brightness = Interpolate(noon_brightness, midnight_brightness, weight = lerp_weight) ** 3
|
|
||||||
|
|
||||||
world << "Changing time. [outdoor_turfs.len] turfs need to be updated. Expected ETA: [outdoor_turfs.len * 0.0033] seconds."
|
|
||||||
world << "Setting outdoor tiles to set_light([amount_range], [amount_brightness])."
|
|
||||||
var/i = 0
|
|
||||||
for(var/turf/simulated/floor/outdoors/T in outdoor_turfs)
|
|
||||||
T.set_light(amount_range, amount_brightness, "#FFFFFF")
|
|
||||||
i++
|
|
||||||
if(i % 30 == 0)
|
|
||||||
sleep(1)
|
|
||||||
world << "Finished."
|
|
||||||
*/
|
|
||||||
|
|
||||||
/client/verb/test_outdoor_timelapse()
|
|
||||||
var/i = 32
|
|
||||||
var/j = 0
|
|
||||||
while(i)
|
|
||||||
test_outdoor_time(j)
|
|
||||||
j++
|
|
||||||
i--
|
|
||||||
sleep(5 SECONDS)
|
|
||||||
|
|
||||||
/client/verb/test_outdoor_snow()
|
|
||||||
for(var/turf/simulated/floor/T in outdoor_turfs)
|
|
||||||
T.overlays |= image(icon = 'icons/turf/outdoors.dmi', icon_state = "snowfall_med", layer = LIGHTING_LAYER - 1)
|
|
||||||
|
|
||||||
|
|
||||||
/client/verb/test_outdoor_time(new_time as num)
|
|
||||||
//var/new_time = input("New time, in hours", "Day/Night cycle", 1) as num
|
|
||||||
var/datum/time/sif/time = new()
|
|
||||||
time = time.add_hours(new_time)
|
|
||||||
world << time.show_time("hh:mm:ss")
|
|
||||||
|
|
||||||
var/length_of_day = time.seconds_in_day / 10 / 60 / 60 // 32
|
|
||||||
var/noon = length_of_day / 2
|
|
||||||
var/distance_from_noon = abs(text2num(time.show_time("hh")) - noon)
|
|
||||||
var/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.40) // Night
|
|
||||||
low_brightness = 0.2
|
|
||||||
low_color = "#000066"
|
|
||||||
|
|
||||||
high_brightness = 0.5
|
|
||||||
high_color = "#66004D"
|
|
||||||
world << "Night."
|
|
||||||
min = 0
|
|
||||||
|
|
||||||
if(0.40 to 0.50) // Twilight
|
|
||||||
low_brightness = 0.6
|
|
||||||
low_color = "#66004D"
|
|
||||||
|
|
||||||
high_brightness = 0.8
|
|
||||||
high_color = "#CC3300"
|
|
||||||
world << "Twilight."
|
|
||||||
min = 0.40
|
|
||||||
|
|
||||||
if(0.50 to 0.70) // Sunrise/set
|
|
||||||
low_brightness = 0.8
|
|
||||||
low_color = "#CC3300"
|
|
||||||
|
|
||||||
high_brightness = 0.9
|
|
||||||
high_color = "#FF9933"
|
|
||||||
world << "Sunrise/set."
|
|
||||||
min = 0.50
|
|
||||||
|
|
||||||
if(0.70 to 1.00) // Noon
|
|
||||||
low_brightness = 0.9
|
|
||||||
low_color = "#DDDDDD"
|
|
||||||
|
|
||||||
high_brightness = 1.0
|
|
||||||
high_color = "#FFFFFF"
|
|
||||||
world << "Noon."
|
|
||||||
min = 0.70
|
|
||||||
|
|
||||||
//var/lerp_weight = (sun_position * 4 % 1) / (0.25 / 4) // This weirdness is needed because otherwise the compiler divides by zero.
|
|
||||||
var/lerp_weight = (abs(min - sun_position)) * 4
|
|
||||||
world << "lerp_weight is [lerp_weight], sun_position is [sun_position]."
|
|
||||||
var/new_brightness = Interpolate(low_brightness, high_brightness, weight = lerp_weight)
|
|
||||||
|
|
||||||
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 = Interpolate(low_r, high_r, weight = lerp_weight)
|
|
||||||
var/new_g = Interpolate(low_g, high_g, weight = lerp_weight)
|
|
||||||
var/new_b = Interpolate(low_b, high_b, weight = lerp_weight)
|
|
||||||
|
|
||||||
var/new_color = rgb(new_r, new_g, new_b)
|
|
||||||
|
|
||||||
world << "Changing time. [outdoor_turfs.len] turfs need to be updated. Expected ETA: [outdoor_turfs.len * 0.0033] seconds."
|
|
||||||
world << "Setting outdoor tiles to set_light(2, [new_brightness], [new_color])."
|
|
||||||
var/i = 0
|
|
||||||
for(var/turf/simulated/floor/T in outdoor_turfs)
|
|
||||||
T.set_light(2, new_brightness, new_color)
|
|
||||||
i++
|
|
||||||
if(i % 30 == 0)
|
|
||||||
sleep(1)
|
|
||||||
world << "Finished."
|
|
||||||
|
|
||||||
|
|
||||||
/turf/simulated/floor/proc/update_icon_edge()
|
|
||||||
if(edge_blending_priority)
|
|
||||||
// world << "edge_blending_priority detected"
|
|
||||||
for(var/checkdir in cardinal)
|
|
||||||
// world << "Checking [checkdir] dir."
|
|
||||||
var/turf/simulated/T = get_step(src, checkdir)
|
|
||||||
// world << "Found [T] ([T.x], [T.y], [T.z])."
|
|
||||||
if(istype(T) && T.edge_blending_priority && edge_blending_priority < T.edge_blending_priority && icon_state != T.icon_state)
|
|
||||||
// world << "edge_blending_priority of [T] was higher than [src]."
|
|
||||||
var/cache_key = "[T.get_edge_icon_state()]-[checkdir]"
|
|
||||||
// world << "cache_key is [cache_key]"
|
|
||||||
if(!turf_edge_cache[cache_key])
|
|
||||||
turf_edge_cache[cache_key] = image(icon = 'icons/turf/outdoors_edge.dmi', icon_state = "[T.get_edge_icon_state()]-edge", dir = checkdir)
|
|
||||||
// world << "Made new entry to cache."
|
|
||||||
overlays += turf_edge_cache[cache_key]
|
|
||||||
// world << "Applied overlay."
|
|
||||||
|
|
||||||
/turf/simulated/proc/get_edge_icon_state()
|
|
||||||
return icon_state
|
|
||||||
|
|
||||||
/turf/simulated/floor/outdoors/update_icon()
|
|
||||||
overlays.Cut()
|
|
||||||
update_icon_edge()
|
|
||||||
..()
|
|
||||||
|
|
||||||
/turf/simulated/floor/outdoors/mud
|
|
||||||
name = "grass"
|
|
||||||
icon_state = "mud_dark"
|
|
||||||
edge_blending_priority = 2
|
|
||||||
|
|
||||||
|
|
||||||
/turf/simulated/floor/outdoors/rocks
|
|
||||||
name = "rocks"
|
|
||||||
desc = "Hard as a rock."
|
|
||||||
icon_state = "rockwall"
|
|
||||||
edge_blending_priority = 1
|
|
||||||
|
|
||||||
var/list/grass_types = list(
|
|
||||||
/obj/structure/flora/ausbushes/sparsegrass,
|
|
||||||
/obj/structure/flora/ausbushes/fullgrass
|
|
||||||
)
|
|
||||||
|
|
||||||
/turf/simulated/floor/outdoors/grass
|
|
||||||
name = "grass"
|
|
||||||
icon_state = "grass"
|
|
||||||
edge_blending_priority = 3
|
|
||||||
demote_turf = /turf/simulated/floor/outdoors
|
|
||||||
var/grass_chance = 20
|
|
||||||
|
|
||||||
/turf/simulated/floor/outdoors/grass/sif
|
|
||||||
name = "growth"
|
|
||||||
icon_state = "grass_sif"
|
|
||||||
edge_blending_priority = 3
|
|
||||||
grass_chance = 0
|
|
||||||
|
|
||||||
|
|
||||||
/turf/simulated/floor/outdoors/grass/sif/forest
|
|
||||||
name = "thick growth"
|
|
||||||
icon_state = "grass_sif_dark"
|
|
||||||
edge_blending_priority = 4
|
|
||||||
|
|
||||||
/turf/simulated/floor/outdoors/grass/New()
|
|
||||||
if(prob(50))
|
|
||||||
icon_state += "2"
|
|
||||||
//edge_blending_priority++
|
|
||||||
|
|
||||||
if(grass_chance && prob(grass_chance))
|
|
||||||
var/grass_type = pick(grass_types)
|
|
||||||
new grass_type(src)
|
|
||||||
..()
|
|
||||||
|
|
||||||
/turf/simulated/floor/outdoors/grass/forest
|
|
||||||
name = "thick grass"
|
|
||||||
icon_state = "grass-dark"
|
|
||||||
grass_chance = 80
|
|
||||||
//tree_prob = 20
|
|
||||||
edge_blending_priority = 4
|
|
||||||
|
|
||||||
/turf/simulated/floor/outdoors/snow
|
|
||||||
name = "snow"
|
|
||||||
icon_state = "snow"
|
|
||||||
edge_blending_priority = 5
|
|
||||||
movement_cost = 2
|
|
||||||
var/list/crossed_dirs = list()
|
|
||||||
|
|
||||||
/turf/simulated/floor/outdoors/snow/Entered(atom/A)
|
|
||||||
if(isliving(A))
|
|
||||||
var/mdir = "[A.dir]"
|
|
||||||
crossed_dirs[mdir] = 1
|
|
||||||
update_icon()
|
|
||||||
. = ..()
|
|
||||||
|
|
||||||
/turf/simulated/floor/outdoors/snow/update_icon()
|
|
||||||
overlays.Cut()
|
|
||||||
for(var/d in crossed_dirs)
|
|
||||||
overlays += image(icon = 'icons/turf/outdoors.dmi', icon_state = "snow_footprints", dir = text2num(d))
|
|
||||||
6
code/game/turfs/simulated/outdoors/dirt.dm
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
/turf/simulated/floor/outdoors/dirt
|
||||||
|
name = "dirt"
|
||||||
|
desc = "Quite dirty!"
|
||||||
|
icon_state = "dirt-dark"
|
||||||
|
edge_blending_priority = 1
|
||||||
|
turf_layers = list(/turf/simulated/floor/outdoors/rocks)
|
||||||
42
code/game/turfs/simulated/outdoors/grass.dm
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
var/list/grass_types = list(
|
||||||
|
/obj/structure/flora/ausbushes/sparsegrass,
|
||||||
|
/obj/structure/flora/ausbushes/fullgrass
|
||||||
|
)
|
||||||
|
|
||||||
|
/turf/simulated/floor/outdoors/grass
|
||||||
|
name = "grass"
|
||||||
|
icon_state = "grass"
|
||||||
|
edge_blending_priority = 3
|
||||||
|
turf_layers = list(
|
||||||
|
/turf/simulated/floor/outdoors/rocks,
|
||||||
|
/turf/simulated/floor/outdoors/dirt
|
||||||
|
)
|
||||||
|
var/grass_chance = 20
|
||||||
|
|
||||||
|
/turf/simulated/floor/outdoors/grass/sif
|
||||||
|
name = "growth"
|
||||||
|
icon_state = "grass_sif"
|
||||||
|
edge_blending_priority = 3
|
||||||
|
grass_chance = 0
|
||||||
|
|
||||||
|
/turf/simulated/floor/outdoors/grass/New()
|
||||||
|
if(prob(50))
|
||||||
|
icon_state += "2"
|
||||||
|
//edge_blending_priority++
|
||||||
|
|
||||||
|
if(grass_chance && prob(grass_chance))
|
||||||
|
var/grass_type = pick(grass_types)
|
||||||
|
new grass_type(src)
|
||||||
|
..()
|
||||||
|
|
||||||
|
/turf/simulated/floor/outdoors/grass/forest
|
||||||
|
name = "thick grass"
|
||||||
|
icon_state = "grass-dark"
|
||||||
|
grass_chance = 80
|
||||||
|
//tree_prob = 20
|
||||||
|
edge_blending_priority = 4
|
||||||
|
|
||||||
|
/turf/simulated/floor/outdoors/grass/sif/forest
|
||||||
|
name = "thick growth"
|
||||||
|
icon_state = "grass_sif_dark"
|
||||||
|
edge_blending_priority = 4
|
||||||
@@ -4,18 +4,21 @@ var/list/outdoor_turfs = list()
|
|||||||
/turf/
|
/turf/
|
||||||
// If greater than 0, this turf will apply edge overlays on top of other turfs cardinally adjacent to it, if those adjacent turfs are of a different icon_state,
|
// If greater than 0, this turf will apply edge overlays on top of other turfs cardinally adjacent to it, if those adjacent turfs are of a different icon_state,
|
||||||
// and if those adjacent turfs have a lower edge_blending_priority.
|
// and if those adjacent turfs have a lower edge_blending_priority.
|
||||||
// TODO: Place on base /turf/ ?
|
|
||||||
var/edge_blending_priority = 0
|
var/edge_blending_priority = 0
|
||||||
|
// Outdoors var determines if the game should consider the turf to be 'outdoors', which controls certain things such as weather effects.
|
||||||
var/outdoors = FALSE
|
var/outdoors = FALSE
|
||||||
|
// This holds the image for the current weather effect.
|
||||||
|
var/image/weather_overlay = null
|
||||||
|
|
||||||
/turf/simulated/floor/outdoors
|
/turf/simulated/floor/outdoors
|
||||||
name = "dirt"
|
name = "generic ground"
|
||||||
desc = "Quite dirty."
|
desc = "Rather boring."
|
||||||
icon = 'icons/turf/outdoors.dmi'
|
icon = 'icons/turf/outdoors.dmi'
|
||||||
icon_state = "dirt-dark"
|
icon_state = null
|
||||||
edge_blending_priority = 1
|
edge_blending_priority = 1
|
||||||
outdoors = TRUE
|
outdoors = TRUE // This variable is used for weather effects.
|
||||||
var/demote_turf = /turf/simulated/floor/outdoors // If something destructive happens, the turf gets replaced by this one.
|
// When a turf gets demoted or promoted, this list gets adjusted. The top-most layer is the layer on the bottom of the list, due to how pop() works.
|
||||||
|
var/list/turf_layers = list(/turf/simulated/floor/outdoors/rocks)
|
||||||
|
|
||||||
/turf/simulated/floor/outdoors/initialize()
|
/turf/simulated/floor/outdoors/initialize()
|
||||||
update_icon()
|
update_icon()
|
||||||
@@ -24,7 +27,6 @@ var/list/outdoor_turfs = list()
|
|||||||
/turf/simulated/floor/New()
|
/turf/simulated/floor/New()
|
||||||
if(outdoors)
|
if(outdoors)
|
||||||
outdoor_turfs.Add(src)
|
outdoor_turfs.Add(src)
|
||||||
//set_light(2, 0.06, "#FFFFFF")
|
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/turf/simulated/floor/Destroy()
|
/turf/simulated/floor/Destroy()
|
||||||
@@ -32,6 +34,70 @@ var/list/outdoor_turfs = list()
|
|||||||
outdoor_turfs.Remove(src)
|
outdoor_turfs.Remove(src)
|
||||||
..()
|
..()
|
||||||
|
|
||||||
|
/turf/simulated/floor/proc/update_icon_edge()
|
||||||
|
if(edge_blending_priority)
|
||||||
|
for(var/checkdir in cardinal)
|
||||||
|
var/turf/simulated/T = get_step(src, checkdir)
|
||||||
|
if(istype(T) && T.edge_blending_priority && edge_blending_priority < T.edge_blending_priority && icon_state != T.icon_state)
|
||||||
|
var/cache_key = "[T.get_edge_icon_state()]-[checkdir]"
|
||||||
|
if(!turf_edge_cache[cache_key])
|
||||||
|
turf_edge_cache[cache_key] = image(icon = 'icons/turf/outdoors_edge.dmi', icon_state = "[T.get_edge_icon_state()]-edge", dir = checkdir)
|
||||||
|
overlays += turf_edge_cache[cache_key]
|
||||||
|
|
||||||
|
/turf/simulated/proc/get_edge_icon_state()
|
||||||
|
return icon_state
|
||||||
|
|
||||||
|
/turf/simulated/floor/outdoors/update_icon()
|
||||||
|
overlays.Cut()
|
||||||
|
update_icon_edge()
|
||||||
|
..()
|
||||||
|
|
||||||
|
/turf/simulated/floor/outdoors/mud
|
||||||
|
name = "grass"
|
||||||
|
icon_state = "mud_dark"
|
||||||
|
edge_blending_priority = 2
|
||||||
|
|
||||||
|
/turf/simulated/floor/outdoors/rocks
|
||||||
|
name = "rocks"
|
||||||
|
desc = "Hard as a rock."
|
||||||
|
icon_state = "rock"
|
||||||
|
edge_blending_priority = 1
|
||||||
|
|
||||||
|
|
||||||
|
// This proc adds a 'layer' on top of the turf.
|
||||||
|
/turf/simulated/floor/outdoors/proc/promote(var/new_turf_type)
|
||||||
|
var/list/new_turf_layer_list = turf_layers.Copy()
|
||||||
|
var/list/coords = list(x, y, z)
|
||||||
|
|
||||||
|
new_turf_layer_list.Add(src.type)
|
||||||
|
|
||||||
|
ChangeTurf(new_turf_type)
|
||||||
|
var/turf/simulated/floor/outdoors/T = locate(coords[1], coords[2], coords[3])
|
||||||
|
if(istype(T))
|
||||||
|
T.turf_layers = new_turf_layer_list.Copy()
|
||||||
|
|
||||||
|
// This proc removes the topmost layer.
|
||||||
|
/turf/simulated/floor/outdoors/proc/demote()
|
||||||
|
if(!turf_layers.len)
|
||||||
|
return // Cannot demote further.
|
||||||
|
var/list/new_turf_layer_list = turf_layers.Copy()
|
||||||
|
var/list/coords = list(x, y, z)
|
||||||
|
|
||||||
|
ChangeTurf(pop(new_turf_layer_list))
|
||||||
|
var/turf/simulated/floor/outdoors/T = locate(coords[1], coords[2], coords[3])
|
||||||
|
if(istype(T))
|
||||||
|
T.turf_layers = new_turf_layer_list.Copy()
|
||||||
|
|
||||||
|
// Called by weather processes, and maybe technomancers in the future.
|
||||||
|
/turf/simulated/floor/proc/chill()
|
||||||
|
return
|
||||||
|
|
||||||
|
/turf/simulated/floor/outdoors/chill()
|
||||||
|
promote(/turf/simulated/floor/outdoors/snow)
|
||||||
|
|
||||||
|
/turf/simulated/floor/outdoors/snow/chill()
|
||||||
|
return // Todo: Add heavy snow.
|
||||||
|
|
||||||
/turf/simulated/floor/outdoors/ex_act(severity)
|
/turf/simulated/floor/outdoors/ex_act(severity)
|
||||||
switch(severity)
|
switch(severity)
|
||||||
if(2)
|
if(2)
|
||||||
@@ -40,7 +106,4 @@ var/list/outdoor_turfs = list()
|
|||||||
if(3)
|
if(3)
|
||||||
if(prob(66))
|
if(prob(66))
|
||||||
return
|
return
|
||||||
if(demote_turf && src.type != demote_turf)
|
demote()
|
||||||
ChangeTurf(demote_turf)
|
|
||||||
else
|
|
||||||
ChangeTurf(get_base_turf_by_area(src))
|
|
||||||
35
code/game/turfs/simulated/outdoors/snow.dm
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
/turf/simulated/floor/outdoors/snow
|
||||||
|
name = "snow"
|
||||||
|
icon_state = "snow"
|
||||||
|
edge_blending_priority = 5
|
||||||
|
movement_cost = 2
|
||||||
|
turf_layers = list(
|
||||||
|
/turf/simulated/floor/outdoors/rocks,
|
||||||
|
/turf/simulated/floor/outdoors/dirt
|
||||||
|
)
|
||||||
|
var/list/crossed_dirs = list()
|
||||||
|
|
||||||
|
/turf/simulated/floor/outdoors/snow/Entered(atom/A)
|
||||||
|
if(isliving(A))
|
||||||
|
var/mdir = "[A.dir]"
|
||||||
|
crossed_dirs[mdir] = 1
|
||||||
|
update_icon()
|
||||||
|
. = ..()
|
||||||
|
|
||||||
|
/turf/simulated/floor/outdoors/snow/update_icon()
|
||||||
|
overlays.Cut()
|
||||||
|
..()
|
||||||
|
for(var/d in crossed_dirs)
|
||||||
|
overlays += image(icon = 'icons/turf/outdoors.dmi', icon_state = "snow_footprints", dir = text2num(d))
|
||||||
|
|
||||||
|
/turf/simulated/floor/outdoors/snow/attackby(var/obj/item/W, var/mob/user)
|
||||||
|
if(istype(W, /obj/item/weapon/shovel))
|
||||||
|
to_chat(user, "<span class='notice'>You begin to remove \the [src] with your [W].</span>")
|
||||||
|
if(do_after(user, 4 SECONDS))
|
||||||
|
to_chat(user, "<span class='notice'>\The [src] has been dug up, and now lies in a pile nearby.</span>")
|
||||||
|
new /obj/item/stack/material/snow(src)
|
||||||
|
demote()
|
||||||
|
else
|
||||||
|
to_chat(user, "<span class='notice'>You decide to not finish removing \the [src].</span>")
|
||||||
|
else
|
||||||
|
..()
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
desc = "A body of water. It seems shallow enough to walk through, if needed."
|
desc = "A body of water. It seems shallow enough to walk through, if needed."
|
||||||
icon = 'icons/turf/outdoors.dmi'
|
icon = 'icons/turf/outdoors.dmi'
|
||||||
icon_state = "water_shallow"
|
icon_state = "water_shallow"
|
||||||
var/under_state = "rockwall"
|
var/under_state = "rock"
|
||||||
edge_blending_priority = -1
|
edge_blending_priority = -1
|
||||||
movement_cost = 4
|
movement_cost = 4
|
||||||
outdoors = TRUE
|
outdoors = TRUE
|
||||||
@@ -16,11 +16,8 @@
|
|||||||
..()
|
..()
|
||||||
|
|
||||||
/turf/simulated/floor/water/update_icon()
|
/turf/simulated/floor/water/update_icon()
|
||||||
// icon_state = "rockwall"
|
|
||||||
..() // To get the edges. This also gets rid of other overlays so it needs to go first.
|
..() // To get the edges. This also gets rid of other overlays so it needs to go first.
|
||||||
// var/image/water_sprite = image(icon = 'icons/turf/outdoors.dmi', icon_state = "water_shallow", layer = FLOAT_LAYER - 0.1) // Layer is slightly lower so that the adjacent edges go over the water.
|
|
||||||
var/image/floorbed_sprite = image(icon = 'icons/turf/outdoors.dmi', icon_state = under_state)
|
var/image/floorbed_sprite = image(icon = 'icons/turf/outdoors.dmi', icon_state = under_state)
|
||||||
//water_sprite.alpha = 150
|
|
||||||
underlays.Add(floorbed_sprite)
|
underlays.Add(floorbed_sprite)
|
||||||
update_icon_edge()
|
update_icon_edge()
|
||||||
|
|
||||||
@@ -29,10 +26,12 @@
|
|||||||
|
|
||||||
/turf/simulated/floor/water/return_air_for_internal_lifeform(var/mob/living/L)
|
/turf/simulated/floor/water/return_air_for_internal_lifeform(var/mob/living/L)
|
||||||
if(L && L.lying)
|
if(L && L.lying)
|
||||||
if(L.can_breathe_water())
|
if(L.can_breathe_water()) // For squid.
|
||||||
var/datum/gas_mixture/water_breath = new()
|
var/datum/gas_mixture/water_breath = new()
|
||||||
var/amount = (ONE_ATMOSPHERE * BREATH_VOLUME) / (R_IDEAL_GAS_EQUATION * T20C)
|
var/datum/gas_mixture/above_air = return_air()
|
||||||
|
var/amount = 300
|
||||||
water_breath.adjust_gas("oxygen", amount) // Assuming water breathes just extract the oxygen directly from the water.
|
water_breath.adjust_gas("oxygen", amount) // Assuming water breathes just extract the oxygen directly from the water.
|
||||||
|
water_breath.temperature = above_air.temperature
|
||||||
return water_breath
|
return water_breath
|
||||||
else
|
else
|
||||||
return null // Lying down means they're submerged, which means no air.
|
return null // Lying down means they're submerged, which means no air.
|
||||||
@@ -41,12 +40,12 @@
|
|||||||
/turf/simulated/floor/water/Entered(atom/movable/AM, atom/oldloc)
|
/turf/simulated/floor/water/Entered(atom/movable/AM, atom/oldloc)
|
||||||
if(istype(AM, /mob/living))
|
if(istype(AM, /mob/living))
|
||||||
var/mob/living/L = AM
|
var/mob/living/L = AM
|
||||||
L.adjust_fire_stacks(-50)
|
|
||||||
L.update_water()
|
L.update_water()
|
||||||
if(!istype(oldloc, /turf/simulated/floor/water))
|
if(!istype(oldloc, /turf/simulated/floor/water))
|
||||||
to_chat(L, "<span class='warning'>You get drenched in water from entering \the [src]!</span>")
|
to_chat(L, "<span class='warning'>You get drenched in water from entering \the [src]!</span>")
|
||||||
else
|
else
|
||||||
to_chat(L, "<span class='warning'>[movement_message]</span>")
|
to_chat(L, "<span class='warning'>[movement_message]</span>")
|
||||||
|
AM.water_act(5)
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/turf/simulated/floor/water/Exited(atom/movable/AM, atom/newloc)
|
/turf/simulated/floor/water/Exited(atom/movable/AM, atom/newloc)
|
||||||
@@ -66,21 +65,38 @@
|
|||||||
movement_cost = 8
|
movement_cost = 8
|
||||||
movement_message = "You swim forwards."
|
movement_message = "You swim forwards."
|
||||||
depth = 2
|
depth = 2
|
||||||
|
|
||||||
/*
|
/*
|
||||||
/turf/simulated/floor/water/deep/update_icon()
|
/turf/simulated/floor/water/deep/update_icon()
|
||||||
..() // To get the edges. This also gets rid of other overlays so it needs to go first.
|
..() // To get the edges. This also gets rid of other overlays so it needs to go first.
|
||||||
icon_state = "abyss"
|
icon_state = "abyss"
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/turf/simulated/floor/water/pool
|
||||||
|
name = "pool"
|
||||||
|
desc = "Don't worry, it's not closed."
|
||||||
|
under_state = "pool"
|
||||||
|
outdoors = FALSE
|
||||||
|
|
||||||
/mob/living/proc/can_breathe_water()
|
/mob/living/proc/can_breathe_water()
|
||||||
return FALSE
|
return FALSE
|
||||||
|
|
||||||
/mob/living/carbon/human/can_breathe_water()
|
/mob/living/carbon/human/can_breathe_water()
|
||||||
if(species && species.name == "Skrell")
|
if(species)
|
||||||
return TRUE
|
return species.can_breathe_water()
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/mob/living/proc/check_submerged()
|
/mob/living/proc/check_submerged()
|
||||||
var/turf/simulated/floor/water/T = loc
|
var/turf/simulated/floor/water/T = loc
|
||||||
if(istype(T))
|
if(istype(T))
|
||||||
return T.depth
|
return T.depth
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
// Use this to have things react to having water applied to them.
|
||||||
|
/atom/movable/proc/water_act(amount)
|
||||||
|
return
|
||||||
|
|
||||||
|
/mob/living/water_act(amount)
|
||||||
|
adjust_fire_stacks(amount * 5)
|
||||||
|
for(var/atom/movable/AM in contents)
|
||||||
|
AM.water_act(amount)
|
||||||
@@ -40,6 +40,9 @@
|
|||||||
else
|
else
|
||||||
luminosity = 1
|
luminosity = 1
|
||||||
|
|
||||||
|
if(movement_cost && pathweight == 1) // This updates pathweight automatically.
|
||||||
|
pathweight = movement_cost
|
||||||
|
|
||||||
/turf/Destroy()
|
/turf/Destroy()
|
||||||
turfs -= src
|
turfs -= src
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
var/old_dynamic_lighting = dynamic_lighting
|
var/old_dynamic_lighting = dynamic_lighting
|
||||||
var/list/old_affecting_lights = affecting_lights
|
var/list/old_affecting_lights = affecting_lights
|
||||||
var/old_lighting_overlay = lighting_overlay
|
var/old_lighting_overlay = lighting_overlay
|
||||||
|
var/old_weather_overlay = weather_overlay
|
||||||
|
|
||||||
//world << "Replacing [src.type] with [N]"
|
//world << "Replacing [src.type] with [N]"
|
||||||
|
|
||||||
@@ -42,6 +43,9 @@
|
|||||||
if(old_fire)
|
if(old_fire)
|
||||||
fire = old_fire
|
fire = old_fire
|
||||||
|
|
||||||
|
if(old_weather_overlay)
|
||||||
|
W.weather_overlay = old_weather_overlay
|
||||||
|
|
||||||
if (istype(W,/turf/simulated/floor))
|
if (istype(W,/turf/simulated/floor))
|
||||||
W.RemoveLattice()
|
W.RemoveLattice()
|
||||||
|
|
||||||
@@ -65,6 +69,9 @@
|
|||||||
if(old_fire)
|
if(old_fire)
|
||||||
old_fire.RemoveFire()
|
old_fire.RemoveFire()
|
||||||
|
|
||||||
|
if(old_weather_overlay)
|
||||||
|
W.weather_overlay = old_weather_overlay
|
||||||
|
|
||||||
if(tell_universe)
|
if(tell_universe)
|
||||||
universe.OnTurfChange(W)
|
universe.OnTurfChange(W)
|
||||||
|
|
||||||
|
|||||||
@@ -200,7 +200,9 @@ var/list/admin_verbs_debug = list(
|
|||||||
/client/proc/toggle_debug_logs,
|
/client/proc/toggle_debug_logs,
|
||||||
/client/proc/admin_ghost, //allows us to ghost/reenter body at will,
|
/client/proc/admin_ghost, //allows us to ghost/reenter body at will,
|
||||||
/datum/admins/proc/view_runtimes,
|
/datum/admins/proc/view_runtimes,
|
||||||
/client/proc/show_gm_status
|
/client/proc/show_gm_status,
|
||||||
|
/datum/admins/proc/change_weather,
|
||||||
|
/datum/admins/proc/change_time
|
||||||
)
|
)
|
||||||
|
|
||||||
var/list/admin_verbs_paranoid_debug = list(
|
var/list/admin_verbs_paranoid_debug = list(
|
||||||
|
|||||||
@@ -968,3 +968,47 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
error_cache.showTo(usr)
|
error_cache.showTo(usr)
|
||||||
|
|
||||||
|
/datum/admins/proc/change_weather()
|
||||||
|
set category = "Debug"
|
||||||
|
set name = "Change Weather"
|
||||||
|
set desc = "Changes the current weather."
|
||||||
|
|
||||||
|
if(!check_rights(R_DEBUG))
|
||||||
|
return
|
||||||
|
|
||||||
|
var/datum/planet/planet = input(usr, "Which planet do you want to modify the weather on?", "Change Weather") in list(planet_sif)
|
||||||
|
var/datum/weather/new_weather = input(usr, "What weather do you want to change to?", "Change Weather") as null|anything in planet.weather_holder.allowed_weather_types
|
||||||
|
if(new_weather)
|
||||||
|
planet.weather_holder.change_weather(new_weather)
|
||||||
|
var/log = "[key_name(src)] changed [planet.name]'s weather to [new_weather]."
|
||||||
|
message_admins(log)
|
||||||
|
log_admin(log)
|
||||||
|
|
||||||
|
/datum/admins/proc/change_time()
|
||||||
|
set category = "Debug"
|
||||||
|
set name = "Change Planet Time"
|
||||||
|
set desc = "Changes the time of a planet."
|
||||||
|
|
||||||
|
if(!check_rights(R_DEBUG))
|
||||||
|
return
|
||||||
|
|
||||||
|
var/datum/planet/planet = input(usr, "Which planet do you want to modify time on?", "Change Time") in list(planet_sif)
|
||||||
|
|
||||||
|
var/datum/time/current_time_datum = planet.current_time
|
||||||
|
var/new_hour = input(usr, "What hour do you want to change to?", "Change Time", text2num(current_time_datum.show_time("hh"))) as null|num
|
||||||
|
if(!isnull(new_hour))
|
||||||
|
var/new_minute = input(usr, "What minute do you want to change to?", "Change Time", text2num(current_time_datum.show_time("mm")) ) as null|num
|
||||||
|
if(!isnull(new_minute))
|
||||||
|
var/type_needed = current_time_datum.type
|
||||||
|
world << "Type is [type_needed]."
|
||||||
|
var/datum/time/new_time = new type_needed()
|
||||||
|
new_time = new_time.add_hours(new_hour)
|
||||||
|
new_time = new_time.add_minutes(new_minute)
|
||||||
|
planet.current_time = new_time
|
||||||
|
spawn(1)
|
||||||
|
planet.update_sun()
|
||||||
|
|
||||||
|
var/log = "[key_name(src)] changed [planet.name]'s time to [planet.current_time.show_time("hh:mm")]."
|
||||||
|
message_admins(log)
|
||||||
|
log_admin(log)
|
||||||
@@ -146,3 +146,6 @@
|
|||||||
new/datum/stack_recipe("white folder", /obj/item/weapon/folder/white), \
|
new/datum/stack_recipe("white folder", /obj/item/weapon/folder/white), \
|
||||||
new/datum/stack_recipe("yellow folder", /obj/item/weapon/folder/yellow), \
|
new/datum/stack_recipe("yellow folder", /obj/item/weapon/folder/yellow), \
|
||||||
))
|
))
|
||||||
|
|
||||||
|
/material/snow/generate_recipes()
|
||||||
|
return // Snowmen and snowballs may come here later.
|
||||||
@@ -189,6 +189,12 @@
|
|||||||
icon_state = "sheet-card"
|
icon_state = "sheet-card"
|
||||||
default_type = "cardboard"
|
default_type = "cardboard"
|
||||||
|
|
||||||
|
/obj/item/stack/material/snow
|
||||||
|
name = "snow"
|
||||||
|
desc = "The temptation to build a snowfort rises."
|
||||||
|
icon_state = "sheet-snow"
|
||||||
|
default_type = "snow"
|
||||||
|
|
||||||
/obj/item/stack/material/leather
|
/obj/item/stack/material/leather
|
||||||
name = "leather"
|
name = "leather"
|
||||||
desc = "The by-product of mob grinding."
|
desc = "The by-product of mob grinding."
|
||||||
|
|||||||
@@ -628,6 +628,22 @@ var/list/name_to_material
|
|||||||
door_icon_base = "wood"
|
door_icon_base = "wood"
|
||||||
destruction_desc = "crumples"
|
destruction_desc = "crumples"
|
||||||
|
|
||||||
|
/material/snow
|
||||||
|
name = "snow"
|
||||||
|
stack_type = /obj/item/stack/material/snow
|
||||||
|
flags = MATERIAL_BRITTLE
|
||||||
|
icon_base = "solid"
|
||||||
|
icon_reinf = "reinf_over"
|
||||||
|
icon_colour = "#FFFFFF"
|
||||||
|
integrity = 1
|
||||||
|
hardness = 1
|
||||||
|
weight = 1
|
||||||
|
stack_origin_tech = list(TECH_MATERIAL = 1)
|
||||||
|
melting_point = T0C+1
|
||||||
|
destruction_desc = "crumples"
|
||||||
|
sheet_singular_name = "pile"
|
||||||
|
sheet_plural_name = "piles"
|
||||||
|
|
||||||
/material/cloth //todo
|
/material/cloth //todo
|
||||||
name = "cloth"
|
name = "cloth"
|
||||||
stack_origin_tech = list(TECH_MATERIAL = 2)
|
stack_origin_tech = list(TECH_MATERIAL = 2)
|
||||||
|
|||||||
@@ -457,7 +457,7 @@
|
|||||||
/mob/living/carbon/proc/should_have_organ(var/organ_check)
|
/mob/living/carbon/proc/should_have_organ(var/organ_check)
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
/mob/living/carbon/proc/can_feel_pain(var/check_organ)
|
/mob/living/carbon/can_feel_pain(var/check_organ)
|
||||||
if(isSynthetic())
|
if(isSynthetic())
|
||||||
return 0
|
return 0
|
||||||
return !(species.flags & NO_PAIN)
|
return !(species.flags & NO_PAIN)
|
||||||
@@ -305,3 +305,7 @@
|
|||||||
// Called in life() when the mob has no client.
|
// Called in life() when the mob has no client.
|
||||||
/datum/species/proc/handle_npc(var/mob/living/carbon/human/H)
|
/datum/species/proc/handle_npc(var/mob/living/carbon/human/H)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
// Called when lying down on a water tile.
|
||||||
|
/datum/species/proc/can_breathe_water()
|
||||||
|
return FALSE
|
||||||
@@ -193,6 +193,9 @@
|
|||||||
BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right)
|
BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/datum/species/skrell/can_breathe_water()
|
||||||
|
return TRUE
|
||||||
|
|
||||||
/datum/species/diona
|
/datum/species/diona
|
||||||
name = "Diona"
|
name = "Diona"
|
||||||
name_plural = "Dionaea"
|
name_plural = "Dionaea"
|
||||||
|
|||||||
@@ -796,3 +796,7 @@ default behaviour is:
|
|||||||
/mob/living/proc/update_water() // Involves overlays for humans. Maybe we'll get submerged sprites for borgs in the future?
|
/mob/living/proc/update_water() // Involves overlays for humans. Maybe we'll get submerged sprites for borgs in the future?
|
||||||
return
|
return
|
||||||
|
|
||||||
|
/mob/living/proc/can_feel_pain(var/check_organ)
|
||||||
|
if(isSynthetic())
|
||||||
|
return FALSE
|
||||||
|
return TRUE
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
// This holds information about a specific 'planetside' area, such as its time, weather, etc. This will most likely be used to model Sif,
|
// This holds information about a specific 'planetside' area, such as its time, weather, etc. This will most likely be used to model Sif,
|
||||||
// but away missions may also have use for this.
|
// but away missions may also have use for this.
|
||||||
|
|
||||||
var/datum/planet/sif/planet_sif = null
|
|
||||||
|
|
||||||
/datum/planet
|
/datum/planet
|
||||||
var/name = "a rock"
|
var/name = "a rock"
|
||||||
var/desc = "Someone neglected to write a nice description for this poor rock."
|
var/desc = "Someone neglected to write a nice description for this poor rock."
|
||||||
@@ -11,127 +9,34 @@ var/datum/planet/sif/planet_sif = null
|
|||||||
var/sun_process_interval = 1 HOUR
|
var/sun_process_interval = 1 HOUR
|
||||||
var/sun_last_process = null // world.time
|
var/sun_last_process = null // world.time
|
||||||
|
|
||||||
var/datum/weather_holder/current_weather = new()
|
var/datum/weather_holder/weather_holder
|
||||||
var/weather_process_interval = 20 MINUTES
|
|
||||||
var/weather_last_process = null // world.time as well.
|
|
||||||
|
|
||||||
/datum/planet/sif
|
var/sun_position = 0 // 0 means midnight, 1 means noon.
|
||||||
name = "Sif"
|
var/expected_z_levels = list()
|
||||||
desc = "Sif is a terrestrial planet in the Vir system. It is somewhat earth-like, in that it has oceans, a \
|
|
||||||
breathable atmosphere, a magnetic field, weather, and similar gravity to Earth. It is currently the capital planet of Vir. \
|
|
||||||
Its center of government is the equatorial city and site of first settlement, New Reykjavik." // Ripped straight from the wiki.
|
|
||||||
current_time = new /datum/time/sif() // 32 hour clocks are nice.
|
|
||||||
current_weather = new /datum/weather_holder/sif() // Cold weather is also nice.
|
|
||||||
|
|
||||||
/datum/planet/New()
|
/datum/planet/New()
|
||||||
..()
|
..()
|
||||||
|
weather_holder = new(src)
|
||||||
current_time = current_time.make_random_time()
|
current_time = current_time.make_random_time()
|
||||||
update_sun()
|
update_sun()
|
||||||
update_weather()
|
|
||||||
|
|
||||||
/datum/planet/proc/process(amount)
|
/datum/planet/proc/process(amount)
|
||||||
if(current_time)
|
if(current_time)
|
||||||
current_time = current_time.add_seconds(amount)
|
current_time = current_time.add_seconds(amount)
|
||||||
world << "It's currently [current_time.show_time("hh:mm")] on [name]."
|
update_weather() // We update this first, because some weather types decease the brightness of the sun.
|
||||||
if(sun_last_process <= world.time - sun_process_interval)
|
if(sun_last_process <= world.time - sun_process_interval)
|
||||||
update_sun()
|
update_sun()
|
||||||
if(weather_last_process <= world.time - weather_process_interval)
|
|
||||||
update_weather()
|
|
||||||
world << "Processed [name]."
|
|
||||||
|
|
||||||
|
|
||||||
|
// This changes the position of the sun on the planet.
|
||||||
/datum/planet/proc/update_sun()
|
/datum/planet/proc/update_sun()
|
||||||
sun_last_process = world.time
|
sun_last_process = world.time
|
||||||
world << "Praise the sun!"
|
|
||||||
|
|
||||||
|
|
||||||
/datum/planet/sif/update_sun()
|
|
||||||
..()
|
|
||||||
var/datum/time/time = current_time
|
|
||||||
var/length_of_day = time.seconds_in_day / 10 / 60 / 60 // 32
|
|
||||||
var/noon = length_of_day / 2
|
|
||||||
var/distance_from_noon = abs(text2num(time.show_time("hh")) - noon)
|
|
||||||
var/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.40) // Night
|
|
||||||
low_brightness = 0.2
|
|
||||||
low_color = "#000066"
|
|
||||||
|
|
||||||
high_brightness = 0.5
|
|
||||||
high_color = "#66004D"
|
|
||||||
world << "Night."
|
|
||||||
min = 0
|
|
||||||
|
|
||||||
if(0.40 to 0.50) // Twilight
|
|
||||||
low_brightness = 0.6
|
|
||||||
low_color = "#66004D"
|
|
||||||
|
|
||||||
high_brightness = 0.8
|
|
||||||
high_color = "#CC3300"
|
|
||||||
world << "Twilight."
|
|
||||||
min = 0.40
|
|
||||||
|
|
||||||
if(0.50 to 0.70) // Sunrise/set
|
|
||||||
low_brightness = 0.8
|
|
||||||
low_color = "#CC3300"
|
|
||||||
|
|
||||||
high_brightness = 0.9
|
|
||||||
high_color = "#FF9933"
|
|
||||||
world << "Sunrise/set."
|
|
||||||
min = 0.50
|
|
||||||
|
|
||||||
if(0.70 to 1.00) // Noon
|
|
||||||
low_brightness = 0.9
|
|
||||||
low_color = "#DDDDDD"
|
|
||||||
|
|
||||||
high_brightness = 1.0
|
|
||||||
high_color = "#FFFFFF"
|
|
||||||
world << "Noon."
|
|
||||||
min = 0.70
|
|
||||||
|
|
||||||
//var/lerp_weight = (sun_position * 4 % 1) / (0.25 / 4) // This weirdness is needed because otherwise the compiler divides by zero.
|
|
||||||
var/lerp_weight = (abs(min - sun_position)) * 4
|
|
||||||
world << "lerp_weight is [lerp_weight], sun_position is [sun_position]."
|
|
||||||
var/new_brightness = Interpolate(low_brightness, high_brightness, weight = lerp_weight)
|
|
||||||
|
|
||||||
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 = Interpolate(low_r, high_r, weight = lerp_weight)
|
|
||||||
var/new_g = Interpolate(low_g, high_g, weight = lerp_weight)
|
|
||||||
var/new_b = Interpolate(low_b, high_b, weight = lerp_weight)
|
|
||||||
|
|
||||||
var/new_color = rgb(new_r, new_g, new_b)
|
|
||||||
|
|
||||||
world << "Changing time. [outdoor_turfs.len] turfs need to be updated. Expected ETA: [outdoor_turfs.len * 0.0033] seconds."
|
|
||||||
world << "Setting outdoor tiles to set_light(2, [new_brightness], [new_color])."
|
|
||||||
var/i = 0
|
|
||||||
for(var/turf/simulated/floor/T in outdoor_turfs)
|
|
||||||
T.set_light(2, new_brightness, new_color)
|
|
||||||
i++
|
|
||||||
if(i % 30 == 0)
|
|
||||||
sleep(1)
|
|
||||||
world << "Finished."
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/datum/planet/proc/update_weather()
|
/datum/planet/proc/update_weather()
|
||||||
weather_last_process = world.time
|
if(weather_holder)
|
||||||
if(current_weather)
|
weather_holder.process()
|
||||||
current_weather.update()
|
|
||||||
|
// Returns the time datum of Sif.
|
||||||
|
/proc/get_sif_time()
|
||||||
|
if(planet_sif)
|
||||||
|
return planet_sif.current_time
|
||||||
@@ -1,2 +1,96 @@
|
|||||||
|
var/datum/planet/sif/planet_sif = null
|
||||||
|
|
||||||
/datum/planet/sif
|
/datum/planet/sif
|
||||||
name = "Sif"
|
name = "Sif"
|
||||||
|
|
||||||
|
/datum/planet/sif
|
||||||
|
name = "Sif"
|
||||||
|
desc = "Sif is a terrestrial planet in the Vir system. It is somewhat earth-like, in that it has oceans, a \
|
||||||
|
breathable atmosphere, a magnetic field, weather, and similar gravity to Earth. It is currently the capital planet of Vir. \
|
||||||
|
Its center of government is the equatorial city and site of first settlement, New Reykjavik." // Ripped straight from the wiki.
|
||||||
|
current_time = new /datum/time/sif() // 32 hour clocks are nice.
|
||||||
|
expected_z_levels = list(1) // To be changed when real map is finished.
|
||||||
|
|
||||||
|
/datum/planet/sif/New()
|
||||||
|
..()
|
||||||
|
weather_holder = new /datum/weather_holder/sif(src) // Cold weather is also nice.
|
||||||
|
|
||||||
|
// This code is horrible.
|
||||||
|
/datum/planet/sif/update_sun()
|
||||||
|
..()
|
||||||
|
var/datum/time/time = current_time
|
||||||
|
var/length_of_day = time.seconds_in_day / 10 / 60 / 60 // 32
|
||||||
|
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.40) // Night
|
||||||
|
low_brightness = 0.2
|
||||||
|
low_color = "#000066"
|
||||||
|
|
||||||
|
high_brightness = 0.5
|
||||||
|
high_color = "#66004D"
|
||||||
|
min = 0
|
||||||
|
|
||||||
|
if(0.40 to 0.50) // Twilight
|
||||||
|
low_brightness = 0.6
|
||||||
|
low_color = "#66004D"
|
||||||
|
|
||||||
|
high_brightness = 0.8
|
||||||
|
high_color = "#CC3300"
|
||||||
|
min = 0.40
|
||||||
|
|
||||||
|
if(0.50 to 0.70) // Sunrise/set
|
||||||
|
low_brightness = 0.8
|
||||||
|
low_color = "#CC3300"
|
||||||
|
|
||||||
|
high_brightness = 0.9
|
||||||
|
high_color = "#FF9933"
|
||||||
|
min = 0.50
|
||||||
|
|
||||||
|
if(0.70 to 1.00) // Noon
|
||||||
|
low_brightness = 0.9
|
||||||
|
low_color = "#DDDDDD"
|
||||||
|
|
||||||
|
high_brightness = 1.0
|
||||||
|
high_color = "#FFFFFF"
|
||||||
|
min = 0.70
|
||||||
|
|
||||||
|
var/lerp_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 = (Interpolate(low_brightness, high_brightness, weight = lerp_weight) ) * weather_light_modifier
|
||||||
|
|
||||||
|
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 = Interpolate(low_r, high_r, weight = lerp_weight)
|
||||||
|
var/new_g = Interpolate(low_g, high_g, weight = lerp_weight)
|
||||||
|
var/new_b = Interpolate(low_b, high_b, weight = lerp_weight)
|
||||||
|
|
||||||
|
var/new_color = rgb(new_r, new_g, new_b)
|
||||||
|
|
||||||
|
var/i = 0
|
||||||
|
for(var/turf/simulated/floor/T in outdoor_turfs)
|
||||||
|
T.set_light(2, new_brightness, new_color)
|
||||||
|
i++
|
||||||
|
if(i % 30 == 0)
|
||||||
|
sleep(1)
|
||||||
|
|||||||
@@ -70,17 +70,7 @@
|
|||||||
answer = replacetext(answer, "mm", minute_text)
|
answer = replacetext(answer, "mm", minute_text)
|
||||||
answer = replacetext(answer, "ss", second_text)
|
answer = replacetext(answer, "ss", second_text)
|
||||||
return answer
|
return answer
|
||||||
/*
|
|
||||||
/client/verb/test_time_systems()
|
|
||||||
var/input_seconds = input("Put in a number of seconds.", "Time Test") as num
|
|
||||||
//input_seconds = min(input_seconds, 864000)
|
|
||||||
world << "time2text() result: [time2text(input_seconds, "hh mm ss")]"
|
|
||||||
var/datum/time/time = new (input_seconds)
|
|
||||||
world << "show_time() result: [time.show_time("hh mm ss")]"
|
|
||||||
var/datum/time/sif/sif = new (input_seconds)
|
|
||||||
world << "sif show_time() result: [sif.show_time("hh mm ss")]"
|
|
||||||
*/
|
|
||||||
// 115,200
|
|
||||||
// We're gonna pretend there are 32 hours in a Sif day instead of 32.64 for the purposes of not losing sanity. We lose 38m 24s but the alternative is a path to madness.
|
// We're gonna pretend there are 32 hours in a Sif day instead of 32.64 for the purposes of not losing sanity. We lose 38m 24s but the alternative is a path to madness.
|
||||||
/datum/time/sif
|
/datum/time/sif
|
||||||
seconds_in_day = 60 * 60 * 32 * 10 // 115,200 seconds. If we did 32.64 hours/day it would be around 117,504 seconds instead.
|
seconds_in_day = 60 * 60 * 32 * 10 // 115,200 seconds. If we did 32.64 hours/day it would be around 117,504 seconds instead.
|
||||||
@@ -10,36 +10,259 @@
|
|||||||
#define WEATHER_HOT "hot"
|
#define WEATHER_HOT "hot"
|
||||||
|
|
||||||
/datum/weather_holder
|
/datum/weather_holder
|
||||||
var/current_weather = WEATHER_CLEAR
|
var/datum/planet/our_planet = null
|
||||||
|
var/datum/weather/current_weather = null
|
||||||
var/temperature = T20C
|
var/temperature = T20C
|
||||||
var/wind_dir = 0
|
var/wind_dir = 0
|
||||||
var/wind_speed = 0
|
var/wind_speed = 0
|
||||||
var/list/allowed_weather_types = list()
|
var/list/allowed_weather_types = list()
|
||||||
|
var/list/roundstart_weather_chances = list()
|
||||||
|
var/next_weather_shift = null
|
||||||
var/planetary_wall_type = null // Which walls to look for when updating temperature.
|
var/planetary_wall_type = null // Which walls to look for when updating temperature.
|
||||||
|
|
||||||
/datum/weather_holder/proc/update()
|
/datum/weather_holder/New(var/source)
|
||||||
//TODO: Do actual weather.
|
..()
|
||||||
|
our_planet = source
|
||||||
|
for(var/A in allowed_weather_types)
|
||||||
|
var/datum/weather/W = allowed_weather_types[A]
|
||||||
|
if(istype(W))
|
||||||
|
W.holder = src
|
||||||
|
|
||||||
|
/datum/weather_holder/proc/change_weather(var/new_weather)
|
||||||
|
var/old_light_modifier = null
|
||||||
|
if(current_weather)
|
||||||
|
old_light_modifier = current_weather.light_modifier // We store the old one, so we can determine if recalculating the sun is needed.
|
||||||
|
current_weather = allowed_weather_types[new_weather]
|
||||||
|
next_weather_shift = world.time + rand(20, 30) MINUTES
|
||||||
|
|
||||||
|
update_icon_effects()
|
||||||
update_temperature()
|
update_temperature()
|
||||||
world << "Temperature is now [temperature]."
|
if(old_light_modifier && current_weather.light_modifier != old_light_modifier) // Updating the sun should be done sparingly.
|
||||||
|
our_planet.update_sun()
|
||||||
|
message_admins("[our_planet.name]'s weather is now [new_weather], with a temperature of [temperature]°K ([temperature - T0C]°C | [temperature * 1.8 - 459.67]°F).")
|
||||||
|
|
||||||
|
/datum/weather_holder/proc/process()
|
||||||
|
if(world.time >= next_weather_shift)
|
||||||
|
var/new_weather
|
||||||
|
if(!current_weather)
|
||||||
|
new_weather = pickweight(roundstart_weather_chances)
|
||||||
|
else
|
||||||
|
new_weather = pickweight(current_weather.transition_chances)
|
||||||
|
change_weather(new_weather)
|
||||||
|
else
|
||||||
|
current_weather.process_effects()
|
||||||
|
|
||||||
|
/datum/weather_holder/proc/update_icon_effects()
|
||||||
|
if(current_weather)
|
||||||
|
for(var/turf/simulated/floor/T in outdoor_turfs)
|
||||||
|
if(T.z in our_planet.expected_z_levels)
|
||||||
|
T.overlays -= T.weather_overlay
|
||||||
|
T.weather_overlay = image(icon = current_weather.icon, icon_state = current_weather.icon_state, layer = LIGHTING_LAYER - 1)
|
||||||
|
T.overlays += T.weather_overlay
|
||||||
|
|
||||||
/datum/weather_holder/proc/update_temperature()
|
/datum/weather_holder/proc/update_temperature()
|
||||||
|
temperature = Interpolate(current_weather.temp_low, current_weather.temp_high, weight = our_planet.sun_position)
|
||||||
|
|
||||||
for(var/turf/unsimulated/wall/planetary/wall in planetary_walls)
|
for(var/turf/unsimulated/wall/planetary/wall in planetary_walls)
|
||||||
if(ispath(wall.type, planetary_wall_type))
|
if(ispath(wall.type, planetary_wall_type))
|
||||||
wall.temperature = temperature
|
wall.temperature = temperature
|
||||||
wall.make_air()
|
for(var/dir in cardinal)
|
||||||
|
var/turf/simulated/T = get_step(wall, dir)
|
||||||
|
if(istype(T))
|
||||||
|
if(T.zone)
|
||||||
|
T.zone.rebuild()
|
||||||
|
|
||||||
|
|
||||||
|
/datum/weather_holder/proc/get_weather_datum(desired_type)
|
||||||
|
return allowed_weather_types[desired_type]
|
||||||
|
|
||||||
/datum/weather_holder/sif
|
/datum/weather_holder/sif
|
||||||
temperature = T0C
|
temperature = T0C
|
||||||
allowed_weather_types = list(
|
allowed_weather_types = list(
|
||||||
WEATHER_CLEAR,
|
WEATHER_CLEAR = new /datum/weather/sif/clear(),
|
||||||
WEATHER_OVERCAST,
|
WEATHER_OVERCAST = new /datum/weather/sif/overcast(),
|
||||||
WEATHER_LIGHT_SNOW,
|
WEATHER_LIGHT_SNOW = new /datum/weather/sif/light_snow(),
|
||||||
WEATHER_SNOW,
|
WEATHER_SNOW = new /datum/weather/sif/snow(),
|
||||||
WEATHER_BLIZZARD,
|
WEATHER_BLIZZARD = new /datum/weather/sif/blizzard(),
|
||||||
WEATHER_RAIN,
|
WEATHER_RAIN = new /datum/weather/sif/rain(),
|
||||||
WEATHER_STORM,
|
WEATHER_STORM = new /datum/weather/sif/storm(),
|
||||||
WEATHER_HAIL,
|
WEATHER_HAIL = new /datum/weather/sif/hail()
|
||||||
WEATHER_WINDY
|
|
||||||
)
|
)
|
||||||
planetary_wall_type = /turf/unsimulated/wall/planetary/sif
|
planetary_wall_type = /turf/unsimulated/wall/planetary/sif
|
||||||
|
roundstart_weather_chances = list(
|
||||||
|
WEATHER_CLEAR = 30,
|
||||||
|
WEATHER_OVERCAST = 30,
|
||||||
|
WEATHER_LIGHT_SNOW = 20,
|
||||||
|
WEATHER_SNOW = 5,
|
||||||
|
WEATHER_BLIZZARD = 5,
|
||||||
|
WEATHER_RAIN = 5,
|
||||||
|
WEATHER_STORM = 2.5,
|
||||||
|
WEATHER_HAIL = 2.5
|
||||||
|
)
|
||||||
|
|
||||||
|
/datum/weather
|
||||||
|
var/name = "weather base"
|
||||||
|
var/icon = 'icons/effects/weather.dmi'
|
||||||
|
var/icon_state = null // Icon to apply to turf undergoing weather.
|
||||||
|
var/temp_high = T20C
|
||||||
|
var/temp_low = T0C
|
||||||
|
var/light_modifier = 1.0 // Lower numbers means more darkness.
|
||||||
|
var/transition_chances = list() // Assoc list
|
||||||
|
var/datum/weather_holder/holder = null
|
||||||
|
|
||||||
|
/datum/weather/proc/process_effects()
|
||||||
|
return
|
||||||
|
|
||||||
|
/datum/weather/sif
|
||||||
|
name = "sif base"
|
||||||
|
temp_high = 243.15 // -20c
|
||||||
|
temp_low = 233.15 // -30c
|
||||||
|
|
||||||
|
/datum/weather/sif/clear
|
||||||
|
name = "clear"
|
||||||
|
transition_chances = list(
|
||||||
|
WEATHER_CLEAR = 60,
|
||||||
|
WEATHER_OVERCAST = 40
|
||||||
|
)
|
||||||
|
|
||||||
|
/datum/weather/sif/overcast
|
||||||
|
name = "overcast"
|
||||||
|
light_modifier = 0.8
|
||||||
|
transition_chances = list(
|
||||||
|
WEATHER_CLEAR = 25,
|
||||||
|
WEATHER_OVERCAST = 50,
|
||||||
|
WEATHER_LIGHT_SNOW = 10,
|
||||||
|
WEATHER_SNOW = 5,
|
||||||
|
WEATHER_RAIN = 5,
|
||||||
|
WEATHER_HAIL = 5
|
||||||
|
)
|
||||||
|
|
||||||
|
/datum/weather/sif/light_snow
|
||||||
|
name = "light snow"
|
||||||
|
icon_state = "snowfall_light"
|
||||||
|
temp_high = 238.15 // -25c
|
||||||
|
temp_low = 228.15 // -35c
|
||||||
|
light_modifier = 0.7
|
||||||
|
transition_chances = list(
|
||||||
|
WEATHER_OVERCAST = 20,
|
||||||
|
WEATHER_LIGHT_SNOW = 50,
|
||||||
|
WEATHER_SNOW = 25,
|
||||||
|
WEATHER_HAIL = 5
|
||||||
|
)
|
||||||
|
|
||||||
|
/datum/weather/sif/snow
|
||||||
|
name = "moderate snow"
|
||||||
|
icon_state = "snowfall_med"
|
||||||
|
temp_high = 233.15 // -30c
|
||||||
|
temp_low = 223.15 // -40c
|
||||||
|
light_modifier = 0.5
|
||||||
|
transition_chances = list(
|
||||||
|
WEATHER_LIGHT_SNOW = 20,
|
||||||
|
WEATHER_SNOW = 50,
|
||||||
|
WEATHER_BLIZZARD = 20,
|
||||||
|
WEATHER_HAIL = 5,
|
||||||
|
WEATHER_OVERCAST = 5
|
||||||
|
)
|
||||||
|
|
||||||
|
/datum/weather/sif/snow/process_effects()
|
||||||
|
for(var/turf/simulated/floor/outdoors/snow/S in outdoor_turfs)
|
||||||
|
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/sif/blizzard
|
||||||
|
name = "blizzard"
|
||||||
|
icon_state = "snowfall_heavy"
|
||||||
|
temp_high = 223.15 // -40c
|
||||||
|
temp_low = 203.15 // -60c
|
||||||
|
light_modifier = 0.3
|
||||||
|
transition_chances = list(
|
||||||
|
WEATHER_SNOW = 45,
|
||||||
|
WEATHER_BLIZZARD = 40,
|
||||||
|
WEATHER_HAIL = 10,
|
||||||
|
WEATHER_OVERCAST = 5
|
||||||
|
)
|
||||||
|
|
||||||
|
/datum/weather/sif/blizzard/process_effects()
|
||||||
|
for(var/turf/simulated/floor/outdoors/snow/S in outdoor_turfs)
|
||||||
|
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/sif/rain
|
||||||
|
name = "rain"
|
||||||
|
icon_state = "rain"
|
||||||
|
light_modifier = 0.5
|
||||||
|
transition_chances = list(
|
||||||
|
WEATHER_OVERCAST = 25,
|
||||||
|
WEATHER_LIGHT_SNOW = 10,
|
||||||
|
WEATHER_RAIN = 50,
|
||||||
|
WEATHER_STORM = 10,
|
||||||
|
WEATHER_HAIL = 5
|
||||||
|
)
|
||||||
|
|
||||||
|
/datum/weather/sif/rain/process_effects()
|
||||||
|
for(var/mob/living/L in living_mob_list)
|
||||||
|
if(L.z in holder.our_planet.expected_z_levels)
|
||||||
|
var/turf/T = get_turf(L)
|
||||||
|
if(!T.outdoors)
|
||||||
|
return // They're indoors, so no need to rain on them.
|
||||||
|
|
||||||
|
L.adjust_fire_stacks(-5)
|
||||||
|
to_chat(L, "<span class='warning'>Rain falls on you.</span>")
|
||||||
|
|
||||||
|
/datum/weather/sif/storm
|
||||||
|
name = "storm"
|
||||||
|
icon_state = "storm"
|
||||||
|
temp_high = 233.15 // -30c
|
||||||
|
temp_low = 213.15 // -50c
|
||||||
|
light_modifier = 0.3
|
||||||
|
transition_chances = list(
|
||||||
|
WEATHER_RAIN = 45,
|
||||||
|
WEATHER_STORM = 40,
|
||||||
|
WEATHER_HAIL = 10,
|
||||||
|
WEATHER_OVERCAST = 5
|
||||||
|
)
|
||||||
|
|
||||||
|
/datum/weather/sif/rain/process_effects()
|
||||||
|
for(var/mob/living/L in living_mob_list)
|
||||||
|
if(L.z in holder.our_planet.expected_z_levels)
|
||||||
|
var/turf/T = get_turf(L)
|
||||||
|
if(!T.outdoors)
|
||||||
|
return // They're indoors, so no need to rain on them.
|
||||||
|
|
||||||
|
L.adjust_fire_stacks(-10)
|
||||||
|
to_chat(L, "<span class='warning'>Rain falls on you, drenching you in water.</span>")
|
||||||
|
|
||||||
|
/datum/weather/sif/hail
|
||||||
|
name = "hail"
|
||||||
|
icon_state = "hail"
|
||||||
|
temp_high = 233.15 // -30c
|
||||||
|
temp_low = 213.15 // -50c
|
||||||
|
light_modifier = 0.3
|
||||||
|
transition_chances = list(
|
||||||
|
WEATHER_RAIN = 45,
|
||||||
|
WEATHER_STORM = 10,
|
||||||
|
WEATHER_HAIL = 40,
|
||||||
|
WEATHER_OVERCAST = 5
|
||||||
|
)
|
||||||
|
|
||||||
|
/datum/weather/sif/hail/process_effects()
|
||||||
|
for(var/mob/living/L in living_mob_list)
|
||||||
|
if(L.z in holder.our_planet.expected_z_levels)
|
||||||
|
var/turf/T = get_turf(L)
|
||||||
|
if(!T.outdoors)
|
||||||
|
return // They're indoors, so no need to pelt them with ice.
|
||||||
|
|
||||||
|
var/target_zone = pick(BP_ALL)
|
||||||
|
var/amount_blocked = L.run_armor_check(target_zone, "melee")
|
||||||
|
|
||||||
|
if(amount_blocked >= 100)
|
||||||
|
return // No need to apply damage.
|
||||||
|
|
||||||
|
L.apply_damage(rand(5, 10), BRUTE, target_zone, amount_blocked, used_weapon = "hail")
|
||||||
|
to_chat(L, "<span class='warning'>The hail raining down on you [L.can_feel_pain() ? "hurts" : "damages you"]!</span>")
|
||||||
|
|||||||
BIN
icons/effects/weather.dmi
Normal file
|
After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
10
polaris.dme
@@ -998,7 +998,6 @@
|
|||||||
#include "code\game\turfs\simulated\floor_attackby.dm"
|
#include "code\game\turfs\simulated\floor_attackby.dm"
|
||||||
#include "code\game\turfs\simulated\floor_damage.dm"
|
#include "code\game\turfs\simulated\floor_damage.dm"
|
||||||
#include "code\game\turfs\simulated\floor_icon.dm"
|
#include "code\game\turfs\simulated\floor_icon.dm"
|
||||||
#include "code\game\turfs\simulated\floor_outdoors.dm"
|
|
||||||
#include "code\game\turfs\simulated\floor_static.dm"
|
#include "code\game\turfs\simulated\floor_static.dm"
|
||||||
#include "code\game\turfs\simulated\floor_types.dm"
|
#include "code\game\turfs\simulated\floor_types.dm"
|
||||||
#include "code\game\turfs\simulated\wall_attacks.dm"
|
#include "code\game\turfs\simulated\wall_attacks.dm"
|
||||||
@@ -1006,7 +1005,10 @@
|
|||||||
#include "code\game\turfs\simulated\wall_types.dm"
|
#include "code\game\turfs\simulated\wall_types.dm"
|
||||||
#include "code\game\turfs\simulated\walls.dm"
|
#include "code\game\turfs\simulated\walls.dm"
|
||||||
#include "code\game\turfs\simulated\water.dm"
|
#include "code\game\turfs\simulated\water.dm"
|
||||||
|
#include "code\game\turfs\simulated\outdoors\dirt.dm"
|
||||||
|
#include "code\game\turfs\simulated\outdoors\grass.dm"
|
||||||
#include "code\game\turfs\simulated\outdoors\outdoors.dm"
|
#include "code\game\turfs\simulated\outdoors\outdoors.dm"
|
||||||
|
#include "code\game\turfs\simulated\outdoors\snow.dm"
|
||||||
#include "code\game\turfs\snow\snow.dm"
|
#include "code\game\turfs\snow\snow.dm"
|
||||||
#include "code\game\turfs\space\cracked_asteroid.dm"
|
#include "code\game\turfs\space\cracked_asteroid.dm"
|
||||||
#include "code\game\turfs\space\space.dm"
|
#include "code\game\turfs\space\space.dm"
|
||||||
@@ -2163,5 +2165,9 @@
|
|||||||
#include "code\ZAS\Zone.dm"
|
#include "code\ZAS\Zone.dm"
|
||||||
#include "interface\interface.dm"
|
#include "interface\interface.dm"
|
||||||
#include "interface\skin.dmf"
|
#include "interface\skin.dmf"
|
||||||
#include "maps\plane-1.dmm"
|
#include "maps\polaris-1.dmm"
|
||||||
|
#include "maps\polaris-2.dmm"
|
||||||
|
#include "maps\polaris-3.dmm"
|
||||||
|
#include "maps\polaris-4.dmm"
|
||||||
|
#include "maps\polaris-5.dmm"
|
||||||
// END_INCLUDE
|
// END_INCLUDE
|
||||||
|
|||||||