Weather Control Device (#28604)

* Weather Control Device

* defines name change

* Fixes

* New sprite and map tweaks
This commit is contained in:
Kurfursten
2021-01-19 12:20:06 -06:00
committed by GitHub
parent 4bc6a633fb
commit c4449c5056
8 changed files with 669 additions and 142 deletions

View File

@@ -10,6 +10,9 @@
//Forecast will stay unchanged until there are less than PREDICTION_MINIMUM weathers, at which point it will make a new forecast
//Every forecast is freshly generated, which means forecasts change!
#define INTENSIFY 1
#define ABATE -1
var/list/weathertracker = list() //associative list, gathers time spent one each weather for scoreboard
/datum/climate
@@ -38,6 +41,8 @@ var/list/weathertracker = list() //associative list, gathers time spent one each
else
var/datum/weather/future = new path(src)
forecasts += future
if(W.next_weather.len == 1)
break //Forecast no further.
cycle++
forecasts -= current_weather //remove it from our future weather
@@ -57,6 +62,29 @@ var/list/weathertracker = list() //associative list, gathers time spent one each
if(forecasts.len < PREDICTION_MINIMUM)
forecast()
#define INVALID_STEP -1
#define CANNOT_CHANGE -2
//step -1 to go down a step, 1 to go up a step
/datum/climate/proc/weather_shift(var/direction = INTENSIFY)
if(direction**2 != 1)
return INVALID_STEP //must be 1 or -1
if(current_weather)
var/weathers = current_weather.next_weather.len
if(weathers == 1)
return CANNOT_CHANGE
var/preferred_weather
if(direction == INTENSIFY)
preferred_weather = current_weather.next_weather[weathers] //the last value
else if(direction == ABATE)
preferred_weather = current_weather.next_weather[1] //the first value
if(preferred_weather == current_weather.type)
return FALSE
current_weather.timeleft = min(1 MINUTES, current_weather.timeleft)
current_weather.next_weather.Cut()
current_weather.next_weather[preferred_weather] = 100
forecast()
return TRUE
/datum/climate/proc/change_weather(weather)
if(ispath(weather))
//We have been provided a path. Let's see if it's identical to the one we have.
@@ -89,6 +117,8 @@ var/list/weathertracker = list() //associative list, gathers time spent one each
/datum/weather
var/name = "weather"
var/list/next_weather = list() //associative list
//for next_weather, order matters: put in order of weather intensity, so that step() will work
//only one in list means it can't be changed by the weather control device
var/timeleft = 1
var/datum/climate/parent
var/temperature = T20C

View File

@@ -1496,3 +1496,15 @@ obj/item/weapon/circuitboard/rdserver
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/weapon/stock_parts/capacitor = 1,
)
/obj/item/weapon/circuitboard/weathercontrol
name = "Circuit Board (Weather Control Device)"
desc = "A circuit board used to operate a weather control device."
build_path = /obj/machinery/weathercontrol
board_type = MACHINE
origin_tech = Tc_PROGRAMMING + "=4"
req_components = list(
/obj/item/weapon/stock_parts/matter_bin/adv/super/bluespace = 1,
/obj/item/weapon/stock_parts/micro_laser/high/ultra = 2,
/obj/item/weapon/cell/rad = 1,
)

View File

@@ -0,0 +1,184 @@
/obj/machinery/weathercontrol
name = "weather control device"
desc = "A device which uses weather control techniques such as cloud seeding to manipulate atmospheric conditions. It runs on bluespace crystals."
icon = 'icons/obj/stationobjs_32x64.dmi'
icon_state = "wcd0"
use_power = 1
density = 1
anchored = 1
machine_flags = SCREWTOGGLE | CROWDESTROY | WRENCHMOVE | FIXED2WORK
req_access = list(access_rnd)
idle_power_usage = 100
var/error_message = null
var/efficiency_modifier = 0 //Subtract from crystal costs
var/crystal_reserve = 0 //Powered by bluespace crystals, this represents how much.
/obj/machinery/weathercontrol/New()
. = ..()
component_parts = newlist(
/obj/item/weapon/circuitboard/weathercontrol,
/obj/item/weapon/cell/rad,
/obj/item/weapon/stock_parts/matter_bin/adv/super/bluespace,
/obj/item/weapon/stock_parts/micro_laser/high/ultra,
/obj/item/weapon/stock_parts/micro_laser/high/ultra)
RefreshParts()
/obj/machinery/weathercontrol/Destroy()
if(crystal_reserve >= 300)
new /obj/item/bluespace_crystal/flawless(loc)
else
while(crystal_reserve >= 3)
new /obj/item/bluespace_crystal(loc)
crystal_reserve -= 3
while(crystal_reserve > 0)
new /obj/item/bluespace_crystal/artificial(loc)
crystal_reserve--
..()
/obj/machinery/weathercontrol/RefreshParts()
var/T = 0
for(var/obj/item/weapon/stock_parts/micro_laser/ML in component_parts)
T += ML.rating
efficiency_modifier = (T/2)-3
//Both tier 3: 0; one tier 4: 0.5, both tier 4: 1
/obj/machinery/weathercontrol/update_icon()
icon_state = "wcd[crystal_reserve > 0]"
/obj/machinery/weathercontrol/attack_hand(mob/user)
return ui_interact(user)
/obj/machinery/weathercontrol/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open=NANOUI_FOCUS)
if (gcDestroyed || !get_turf(src) || !anchored)
if(!ui)
ui = nanomanager.get_open_ui(user, src, ui_key)
if(ui)
ui.close()
return
var/data[0]
data["error"] = error_message
if(map.climate)
var/datum/climate/C = map.climate
var/datum/weather/CW = C.current_weather
var/forecast_dat
for(var/datum/weather/W in C.forecasts)
forecast_dat += "[W.name] "
data["name"] = name
data["currentweather"] = CW
data["remaining_time"] = formatTimeDuration(CW.timeleft)
data["forecast"] = forecast_dat
data["crystals"] = crystal_reserve
else
data["error"] = "Error: No climate detected."
// update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
ui = new(user, src, ui_key, "weathercontrol.tmpl", "Weather Control Device", 380, 250)
ui.set_initial_data(data)
ui.open()
#define DISRUPT_COST 1
#define INTENSIFY_COST 1
#define ABATE_COST 2
#define SUCCESS 1
#define NOFIRE 2
#define NEED_CRYSTALS -3
#define POWER_ERROR -4
/obj/machinery/weathercontrol/Topic(href, href_list)
if(..())
return
if(usr.incapacitated() || (!Adjacent(usr)&&!isAdminGhost(usr)) || !usr.dexterity_check() || !map.climate)
return
if(!allowed(usr) && !emagged)
to_chat(usr,"<span class='warning'>Access denied.</span>")
return
if(stat & NOPOWER)
return
var/datum/climate/C = map.climate
var/datum/weather/CW = C.current_weather
var/feedback = NOFIRE
var/usedcost = 0
if(stat & NOPOWER)
feedback = POWER_ERROR
else
if(href_list["disrupt"])
feedback = SUCCESS
usedcost = DISRUPT_COST
if(!burn_crystals(DISRUPT_COST))
feedback = NEED_CRYSTALS
else
if(C.current_weather.next_weather.len < 2)
feedback = CANNOT_CHANGE
else
CW.timeleft = min(1 MINUTES, CW.timeleft)
C.forecast()
if(href_list["intensify"])
feedback = SUCCESS
usedcost = INTENSIFY_COST
if(!burn_crystals(INTENSIFY_COST))
feedback = NEED_CRYSTALS
else
feedback = C.weather_shift(INTENSIFY)
if(href_list["abate"])
feedback = SUCCESS
usedcost = ABATE_COST
if(!burn_crystals(ABATE_COST))
feedback = NEED_CRYSTALS
else
feedback = C.weather_shift(ABATE)
var/soundpath = 'sound/machines/warning-buzzer.ogg'
switch(feedback)
if(POWER_ERROR)
error_message = "Error: Unpowered."
if(NEED_CRYSTALS)
error_message = "Error: Refraction index low. Load new bluespace crystals."
if(CANNOT_CHANGE)
error_message = "Error: Cannot change weather."
refund(usedcost)
if(INVALID_STEP)
error_message = "Error: Machine malfunction."
refund(usedcost)
if(FALSE)
error_message = "Error: Weather already present."
refund(usedcost)
if(SUCCESS)
error_message = "Success: Atmoforming climate."
soundpath = 'sound/machines/hiss.ogg'
if(NOFIRE)
return
playsound(src, soundpath, vol = 50, vary = FALSE)
nanomanager.update_uis(src)
update_icon()
spawn(4 SECONDS)
error_message = null
return 1
/obj/machinery/weathercontrol/proc/burn_crystals(var/cost)
var/tcost = cost - efficiency_modifier
if(tcost>crystal_reserve)
return FALSE
crystal_reserve = max(0, crystal_reserve - tcost)
return TRUE
/obj/machinery/weathercontrol/proc/refund(var/num)
var/tnum = num - efficiency_modifier
crystal_reserve += tnum
/obj/machinery/weathercontrol/attackby(var/obj/item/I, var/mob/user)
..()
if(istype(I, /obj/item/bluespace_crystal))
var/obj/item/bluespace_crystal/B = I
if(user.drop_item(B, src))
crystal_reserve += B.blueChargeValue
B.playtoolsound(src, 50)
to_chat(user, "<span class='notice'>You insert \the [B] into \the [src].")
nanomanager.update_uis(src)
qdel(B)
update_icon()

View File

@@ -112,3 +112,13 @@
materials = list(MAT_GLASS = 2000, SACID = 20)
category = "Console Boards"
build_path = /obj/item/weapon/circuitboard/suspension_gen
/datum/design/weathercontroldevice
name = "Circuit Design (Weather Control Device)"
desc = "The circuitboard for a weather control device."
id = "weathercontrol"
req_tech = list(Tc_PROGRAMMING = 4)
build_type = IMPRINTER
materials = list(MAT_GLASS = 2000, SACID = 20)
category = "Console Boards"
build_path = /obj/item/weapon/circuitboard/weathercontrol

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -23260,6 +23260,7 @@
icon_state = "1-2";
tag = ""
},
/obj/machinery/holosign/morgue,
/turf/simulated/floor{
icon_state = "dark"
},
@@ -36520,13 +36521,17 @@
},
/area/science/server)
"boN" = (
/obj/machinery/light{
dir = 8
},
/turf/simulated/floor{
icon_state = "warnwhitecorner"
icon_state = "white"
},
/area/science/lab)
"boO" = (
/turf/simulated/floor{
icon_state = "warnwhite"
dir = 1;
icon_state = "rampbottom"
},
/area/science/lab)
"boP" = (
@@ -37036,46 +37041,18 @@
},
/area/science/server)
"bpM" = (
/obj/structure/table,
/obj/item/clothing/suit/storage/wintercoat/medical/science,
/obj/item/clothing/suit/storage/wintercoat/medical/science,
/obj/item/clothing/suit/storage/wintercoat/medical/science,
/obj/item/clothing/suit/storage/wintercoat/medical/science,
/obj/item/clothing/suit/storage/wintercoat/medical/science,
/obj/item/clothing/suit/storage/wintercoat/medical/science,
/obj/machinery/firealarm{
dir = 8;
pixel_x = -24
},
/turf/simulated/floor{
dir = 6;
icon_state = "warnwhite"
icon_state = "warnwhitecorner"
},
/area/science/lab)
"bpN" = (
/obj/machinery/r_n_d/destructive_analyzer,
/turf/simulated/floor/bluegrid,
/area/science/lab)
"bpO" = (
/obj/machinery/constructable_frame/machine_frame,
/obj/machinery/media/receiver/boombox/wallmount/muzak{
pixel_y = -24
},
/turf/simulated/floor/bluegrid,
/area/science/lab)
"bpP" = (
/obj/machinery/computer/rdconsole/core,
/obj/machinery/light,
/turf/simulated/floor/bluegrid,
/area/science/lab)
"bpQ" = (
/obj/machinery/r_n_d/fabricator/protolathe,
/turf/simulated/floor/bluegrid,
/area/science/lab)
"bpR" = (
/obj/machinery/r_n_d/fabricator/circuit_imprinter,
/obj/item/weapon/reagent_containers/glass/beaker/sulphuric,
/turf/simulated/floor/bluegrid,
/turf/simulated/floor{
icon_state = "warnwhite"
},
/area/science/lab)
"bpS" = (
/obj/item/clothing/glasses/simonglasses,
@@ -37423,36 +37400,30 @@
/area/science/server)
"bqx" = (
/obj/structure/window/reinforced{
dir = 8
icon = 'icons/obj/objects.dmi';
icon_state = "rail";
name = "safety rail"
},
/obj/structure/window/reinforced{
dir = 1
},
/obj/structure/grille,
/obj/structure/window/reinforced,
/obj/structure/window/full/reinforced,
/turf/simulated/floor/plating,
/obj/machinery/r_n_d/destructive_analyzer,
/turf/simulated/floor/bluegrid,
/area/science/lab)
"bqy" = (
/obj/structure/window/reinforced{
dir = 1
icon = 'icons/obj/objects.dmi';
icon_state = "rail";
name = "safety rail"
},
/obj/structure/grille,
/obj/structure/window/reinforced,
/obj/structure/window/full/reinforced,
/turf/simulated/floor/plating,
/obj/machinery/r_n_d/fabricator/protolathe,
/turf/simulated/floor/bluegrid,
/area/science/lab)
"bqz" = (
/obj/structure/window/reinforced{
dir = 1
icon = 'icons/obj/objects.dmi';
icon_state = "rail";
name = "safety rail"
},
/obj/structure/window/reinforced{
dir = 4
},
/obj/structure/grille,
/obj/structure/window/reinforced,
/obj/structure/window/full/reinforced,
/turf/simulated/floor/plating,
/obj/machinery/r_n_d/fabricator/circuit_imprinter,
/turf/simulated/floor/bluegrid,
/area/science/lab)
"bqA" = (
/obj/structure/bed/chair{
@@ -44596,6 +44567,7 @@
tag = ""
},
/obj/machinery/door_timer/cell_1{
dir = 1;
pixel_y = 32
},
/turf/simulated/floor{
@@ -100582,6 +100554,12 @@
/area/bridge/meeting_room{
name = "\improper Security Station Bridge"
})
"dTR" = (
/turf/simulated/floor{
dir = 8;
icon_state = "rampbottom"
},
/area/science/lab)
"dWH" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/door/firedoor/border_only{
@@ -100706,6 +100684,16 @@
icon_state = "freezerfloor"
},
/area/security/perma)
"eVS" = (
/obj/structure/fence{
dir = 4
},
/obj/effect/decal/warning_stripes{
icon_state = "warning";
tag = "icon-warning"
},
/turf/unsimulated/floor/snow/asphalt,
/area/science/lab)
"eYF" = (
/obj/machinery/computer/climate/wall{
pixel_x = -30
@@ -100904,6 +100892,13 @@
/area/maintenance/fsmaint2{
name = "Auxiliary Docking"
})
"haA" = (
/obj/machinery/door/airlock/external{
name = "Weather Control Access";
req_one_access_txt = "7; 29"
},
/turf/simulated/floor/plating,
/area/science/lab)
"hiu" = (
/turf/simulated/floor{
dir = 1;
@@ -100911,6 +100906,14 @@
tag = "icon-darkblue (NORTH)"
},
/area/security/perma)
"hlM" = (
/obj/effect/decal/warning_stripes{
dir = 8;
icon_state = "warning_corner";
tag = "icon-warning_corner (WEST)"
},
/turf/unsimulated/floor/snow/asphalt,
/area/science/lab)
"hrm" = (
/obj/structure/cable{
d1 = 1;
@@ -100928,6 +100931,13 @@
/area/maintenance/fsmaint2{
name = "Auxiliary Docking"
})
"hta" = (
/obj/effect/decal/cleanable/blood/oil{
dir = 4;
icon_state = "floor6"
},
/turf/unsimulated/floor/snow/asphalt,
/area/science/lab)
"hxZ" = (
/obj/machinery/light,
/obj/machinery/media/receiver/boombox/wallmount/muzak{
@@ -101058,6 +101068,18 @@
},
/turf/simulated/floor/carpet,
/area/security/hos)
"ila" = (
/obj/structure/window/reinforced{
dir = 1
},
/obj/structure/window/reinforced{
dir = 4
},
/obj/structure/grille,
/obj/structure/window/reinforced,
/obj/structure/window/full/reinforced,
/turf/simulated/floor/plating,
/area/science/lab)
"ioN" = (
/obj/machinery/door/airlock/external{
req_access_txt = "13;24"
@@ -101152,6 +101174,10 @@
/area/engine/locker{
name = "\improper Engineering Foyer"
})
"iZe" = (
/obj/item/weapon/storage/toolbox/mechanical,
/turf/unsimulated/floor/snow/asphalt,
/area/science/lab)
"jcq" = (
/obj/machinery/disposal,
/obj/structure/disposalpipe/trunk{
@@ -101175,12 +101201,31 @@
icon_state = "dark"
},
/area/security/brig)
"jtQ" = (
/obj/structure/fence{
dir = 4
},
/obj/effect/decal/warning_stripes{
icon_state = "warning";
tag = "icon-warning"
},
/obj/effect/decal/warning_stripes{
icon_state = "sci"
},
/turf/unsimulated/floor/snow/asphalt,
/area/science/lab)
"juJ" = (
/obj/machinery/computer/climate/wall{
pixel_y = -30
},
/turf/simulated/floor/plating,
/area/supply/miningdelivery)
"jCa" = (
/turf/simulated/floor{
dir = 8;
icon_state = "neutralfull"
},
/area/science/lab)
"jCX" = (
/obj/machinery/door/airlock/vault{
name = "The Hole";
@@ -101200,6 +101245,12 @@
icon_state = "dark vault stripe"
},
/area/security/perma)
"jNt" = (
/obj/machinery/light,
/turf/simulated/floor{
icon_state = "purple"
},
/area/science/lab)
"jTM" = (
/obj/machinery/door_control{
desc = "A remote control-switch for a door to space.";
@@ -101301,6 +101352,9 @@
icon_state = "dark"
},
/area/security/brig)
"kHu" = (
/turf/simulated/floor,
/area/science/lab)
"kJd" = (
/obj/structure/window/reinforced{
dir = 8
@@ -101586,6 +101640,15 @@
},
/turf/unsimulated/floor/snow,
/area/surface/forest/south)
"mmF" = (
/obj/structure/window/reinforced{
icon = 'icons/obj/objects.dmi';
icon_state = "rail";
name = "safety rail"
},
/obj/machinery/computer/rdconsole/core,
/turf/simulated/floor/bluegrid,
/area/science/lab)
"mwy" = (
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 8;
@@ -101639,6 +101702,21 @@
icon_state = "dark"
},
/area/security/perma)
"naM" = (
/obj/structure/window/reinforced{
dir = 8;
icon = 'icons/obj/objects.dmi';
icon_state = "rail";
name = "safety rail"
},
/obj/structure/window/reinforced{
icon = 'icons/obj/objects.dmi';
icon_state = "rail";
name = "safety rail"
},
/obj/machinery/constructable_frame/machine_frame,
/turf/simulated/floor/bluegrid,
/area/science/lab)
"ndg" = (
/obj/structure/closet/wardrobe/pjs,
/obj/item/stack/sheet/wood{
@@ -101674,6 +101752,11 @@
},
/turf/simulated/floor/plating,
/area/engineering/atmos)
"noa" = (
/turf/simulated/floor{
icon_state = "purple"
},
/area/science/lab)
"nop" = (
/obj/item/device/flashlight/lamp,
/obj/structure/table/woodentable,
@@ -101681,6 +101764,17 @@
/area/security/toilet{
name = "Brig Dormitories"
})
"ntc" = (
/obj/machinery/constructable_frame/machine_frame{
build_state = 2;
icon_state = "box_1"
},
/obj/item/weapon/circuitboard/weathercontrol,
/obj/effect/decal/warning_stripes{
icon_state = "bot"
},
/turf/unsimulated/floor/snow/asphalt,
/area/science/lab)
"nzq" = (
/obj/structure/grille,
/obj/structure/window/reinforced,
@@ -101719,6 +101813,18 @@
icon_state = "dark"
},
/area/security/perma)
"nJG" = (
/obj/effect/decal/warning_stripes{
dir = 8;
icon_state = "warning";
tag = "icon-warning (WEST)"
},
/obj/structure/fence,
/turf/unsimulated/floor/snow/asphalt,
/area/science/lab)
"nJR" = (
/turf/unsimulated/floor/snow/asphalt,
/area/science/lab)
"nZp" = (
/obj/structure/cable{
d1 = 1;
@@ -101890,6 +101996,18 @@
/area/maintenance/fsmaint2{
name = "Auxiliary Docking"
})
"pcf" = (
/obj/structure/window/reinforced{
dir = 8
},
/obj/structure/window/reinforced{
dir = 1
},
/obj/structure/grille,
/obj/structure/window/reinforced,
/obj/structure/window/full/reinforced,
/turf/simulated/floor/plating,
/area/science/lab)
"pqb" = (
/obj/structure/cable{
d1 = 1;
@@ -102033,6 +102151,13 @@
icon_state = "dark"
},
/area/security/brig)
"qwz" = (
/obj/effect/decal/warning_stripes{
icon_state = "warning";
tag = "icon-warning"
},
/turf/unsimulated/floor/snow/asphalt,
/area/science/lab)
"qxT" = (
/obj/structure/sign/securearea{
desc = "A warning sign which reads 'HIGH VOLTAGE'";
@@ -102097,6 +102222,24 @@
},
/turf/simulated/floor/plating,
/area/security/perma)
"qZv" = (
/obj/machinery/space_heater,
/obj/structure/window/reinforced{
icon = 'icons/obj/objects.dmi';
icon_state = "rail";
name = "safety rail"
},
/turf/simulated/floor{
dir = 4;
icon_state = "purple"
},
/area/science/lab)
"rev" = (
/turf/simulated/floor{
dir = 8;
icon_state = "purple"
},
/area/science/lab)
"rgk" = (
/obj/machinery/door/airlock/glass_security{
name = "Prison Medbay";
@@ -102180,6 +102323,14 @@
/area/maintenance/fsmaint2{
name = "Auxiliary Docking"
})
"rFQ" = (
/obj/effect/decal/warning_stripes{
dir = 1;
icon_state = "warning_corner";
tag = "icon-warning_corner (NORTH)"
},
/turf/unsimulated/floor/snow/asphalt,
/area/science/lab)
"rGr" = (
/obj/structure/punching_bag/clown,
/turf/simulated/floor{
@@ -102288,11 +102439,23 @@
},
/turf/simulated/floor/plating,
/area/engineering/atmos)
"rVw" = (
/obj/structure/hanging_lantern{
dir = 1
},
/turf/unsimulated/floor/snow/asphalt,
/area/science/lab)
"rXG" = (
/turf/simulated/floor{
icon_state = "freezerfloor"
},
/area/security/perma)
"sdG" = (
/obj/structure/hanging_lantern{
dir = 4
},
/turf/unsimulated/floor/snow/asphalt,
/area/science/lab)
"sel" = (
/obj/machinery/door/firedoor/border_only{
name = "Firelock South"
@@ -102427,6 +102590,14 @@
tag = "icon-darkred (SOUTHWEST)"
},
/area/security/brig)
"tYI" = (
/obj/effect/decal/warning_stripes{
dir = 4;
icon_state = "warning";
tag = "icon-warning (EAST)"
},
/turf/unsimulated/floor/snow/asphalt,
/area/science/lab)
"ucb" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/cable{
@@ -102567,6 +102738,22 @@
/area/maintenance/fsmaint2{
name = "Auxiliary Docking"
})
"uUg" = (
/obj/effect/decal/warning_stripes{
dir = 4;
icon_state = "warning_corner";
tag = "icon-warning_corner (EAST)"
},
/turf/unsimulated/floor/snow/asphalt,
/area/science/lab)
"uWm" = (
/obj/effect/decal/warning_stripes{
dir = 8;
icon_state = "warning";
tag = "icon-warning (WEST)"
},
/turf/unsimulated/floor/snow/asphalt,
/area/science/lab)
"vXP" = (
/obj/structure/cable{
d1 = 1;
@@ -102634,6 +102821,13 @@
icon_state = "dark"
},
/area/security/perma)
"wTp" = (
/obj/effect/decal/warning_stripes{
icon_state = "warning_corner";
tag = "icon-warning_corner"
},
/turf/unsimulated/floor/snow/asphalt,
/area/science/lab)
"wWo" = (
/obj/structure/cable{
d1 = 1;
@@ -102660,6 +102854,15 @@
/area/maintenance/fsmaint2{
name = "Auxiliary Docking"
})
"xiv" = (
/obj/structure/window/reinforced{
dir = 1
},
/obj/structure/grille,
/obj/structure/window/reinforced,
/obj/structure/window/full/reinforced,
/turf/simulated/floor/plating,
/area/science/lab)
"xix" = (
/obj/structure/window/reinforced{
dir = 1
@@ -102736,6 +102939,15 @@
},
/turf/simulated/floor/plating,
/area/engineering/atmos)
"xvF" = (
/obj/machinery/light/small{
dir = 4
},
/turf/simulated/floor/plating,
/area/science/lab)
"xyP" = (
/turf/simulated/wall,
/area/science/lab)
"xFx" = (
/obj/structure/disposaloutlet,
/obj/structure/window/reinforced{
@@ -102754,6 +102966,14 @@
/area/maintenance/fsmaint2{
name = "Auxiliary Docking"
})
"xGd" = (
/obj/effect/decal/warning_stripes{
dir = 1;
icon_state = "warning";
tag = "icon-warning (NORTH)"
},
/turf/unsimulated/floor/snow/asphalt,
/area/science/lab)
"xIN" = (
/obj/effect/decal/warning_stripes{
icon_state = "warning";
@@ -102826,6 +103046,17 @@
},
/turf/unsimulated/floor/snow,
/area/surface/forest/south)
"xTs" = (
/obj/structure/fence/end{
dir = 4
},
/obj/effect/decal/warning_stripes{
dir = 10;
icon_state = "warning";
tag = "icon-warning (SOUTHWEST)"
},
/turf/unsimulated/floor/snow/asphalt,
/area/science/lab)
"xTt" = (
/obj/structure/cable{
d1 = 1;
@@ -102853,6 +103084,7 @@
/area/security/perma)
"yaW" = (
/obj/machinery/door_timer/cell_3{
dir = 8;
pixel_x = -32;
pixel_y = 0
},
@@ -102862,6 +103094,22 @@
tag = "icon-darkred (WEST)"
},
/area/security/brig)
"yjp" = (
/obj/structure/table,
/obj/item/clothing/suit/storage/wintercoat/medical/science,
/obj/item/clothing/suit/storage/wintercoat/medical/science,
/obj/item/clothing/suit/storage/wintercoat/medical/science,
/obj/item/clothing/suit/storage/wintercoat/medical/science,
/obj/item/clothing/suit/storage/wintercoat/medical/science,
/obj/item/clothing/suit/storage/wintercoat/medical/science,
/obj/machinery/media/receiver/boombox/wallmount/muzak{
pixel_y = -24
},
/turf/simulated/floor{
dir = 10;
icon_state = "purple"
},
/area/science/lab)
"ykP" = (
/obj/structure/window/reinforced{
dir = 1
@@ -126901,7 +127149,7 @@ aYZ
aYZ
aYZ
aYZ
aYZ
aZb
aYZ
aYZ
aZb
@@ -127203,7 +127451,7 @@ aYZ
aYZ
aYZ
aYZ
aZb
aYZ
aYZ
aYZ
aYZ
@@ -127501,11 +127749,11 @@ boL
boL
boL
boL
aYZ
aYZ
aYZ
aYZ
aYZ
bjP
nJG
nJG
nJG
xTs
aYZ
aYZ
aYZ
@@ -127800,14 +128048,14 @@ bmX
bmd
boN
bpM
boO
rev
yjp
bjP
aYZ
aYZ
aYZ
aYZ
aYZ
aYZ
aYZ
rVw
nJR
nJR
eVS
aYZ
aYZ
aYZ
@@ -128100,19 +128348,19 @@ bkR
blY
bmX
bmd
boO
bpO
bjP
aYZ
aYZ
aYZ
aYZ
aYZ
aYZ
aYZ
aYZ
bmd
bpR
naM
kHu
noa
pcf
iZe
hta
nJR
jtQ
aYZ
aYZ
boz
aYZ
aYZ
aYZ
@@ -128402,16 +128650,16 @@ bkQ
blX
bmY
bmd
boO
bpN
bmd
bpR
bqx
aYZ
aYZ
aYZ
bdN
aYZ
aYZ
aYZ
kHu
noa
xiv
wTp
tYI
uUg
eVS
aYZ
aYZ
aYZ
@@ -128704,16 +128952,16 @@ bkT
bma
bmZ
bmd
boO
bpQ
bmd
bpR
bqy
aYZ
aYZ
aYZ
aYZ
aYZ
aYZ
aYZ
kHu
noa
xiv
qwz
ntc
xGd
eVS
aYZ
aYZ
aZb
@@ -129006,18 +129254,18 @@ bkS
blZ
bmd
bmd
boO
bpP
bqy
bmd
bpR
mmF
kHu
jNt
xiv
hlM
uWm
rFQ
eVS
aYZ
aYZ
aYZ
aYZ
aYZ
aYZ
aYZ
baU
aYZ
boz
aYZ
aYZ
@@ -129308,18 +129556,18 @@ bkV
blY
bnb
bmd
boO
bmd
bpR
bqz
kHu
noa
ila
nJR
sdG
nJR
eVS
aYZ
aYZ
aYZ
aYZ
aYZ
aYZ
aYZ
boz
aYZ
baU
aYZ
aYZ
aYZ
@@ -129612,14 +129860,14 @@ bna
bnV
boP
boP
bnX
aYZ
aYZ
aYZ
aYZ
aYZ
aYZ
aYZ
boP
kHu
dTR
xyP
haA
xyP
nJR
eVS
aYZ
aYZ
aYZ
@@ -129914,17 +130162,17 @@ bnc
bnW
boP
bpS
bnX
aYZ
aYZ
aYZ
aYZ
aYZ
aYZ
aYZ
aYZ
boP
qZv
jCa
haA
xvF
xyP
nJR
jtQ
aYZ
aYZ
bdN
aYZ
aYZ
aYZ
@@ -130216,14 +130464,14 @@ bkW
bjP
boP
bnX
boP
boP
bnX
bnX
bnX
aYZ
aYZ
aYZ
aYZ
aYZ
xyP
xyP
xyP
nJR
eVS
aYZ
aYZ
aYZ

View File

@@ -0,0 +1,42 @@
<!--
Used In File(s): \code\game\machinery\weathercontrol.dm
-->
{{if data.error}}
<div class='item'>
<div class='statusDisplay'>
<div class="line">
<span class='bad'>{{:data.error}}</span>
</div>
</div>
</div>
{{else}}
<div class='item'>
<div class='statusDisplay'>
<div class="line">
<div class="statusLabel">Crystal refraction:</div>
<div class="statusValue">{{:data.crystals}}</div>
</div>
</div>
</div>
<div class='item'>
<div class='statusDisplay'>
<div class="line">
<div class="statusLabel">Current snowfall:</div>
<div class="statusValue">{{:data.currentweather}} ({{:data.remaining_time}})</div>
</div>
<div class="line">
<div class="statusLabel">Forecast:</div>
<div class="statusValue">{{:data.forecast}}</div>
</div>
</div>
</div>
<div class='item'>
<div class='statusDisplay'>
<div class="line">
{{:helper.link("Disrupt", "arrowrefresh-1-w", {'disrupt': '1'})}}
{{:helper.link("Intensify", "arrowstop-1-n", {'intensify': '1'})}}
{{:helper.link("Abate", "arrowstop-1-s", {'abate': '1'})}}
</div>
</div>
</div>
{{/if}}

View File

@@ -698,6 +698,7 @@
#include "code\game\machinery\vending.dm"
#include "code\game\machinery\vending_packs.dm"
#include "code\game\machinery\washing_machine.dm"
#include "code\game\machinery\weathercontrol.dm"
#include "code\game\machinery\wishgranter.dm"
#include "code\game\machinery\atmoalter\area_atmos_computer.dm"
#include "code\game\machinery\atmoalter\canister.dm"
@@ -2676,7 +2677,7 @@
#include "maprendering\maprendering.dm"
#include "maps\_map.dm"
#include "maps\_map_override.dm"
#include "maps\snaxi.dm"
#include "maps\tgstation.dm"
#include "maps\defficiency\areas.dm"
#include "maps\lampreystation\lamprey.dm"
#include "maps\packedstation\telecomms.dm"