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 //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! //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 var/list/weathertracker = list() //associative list, gathers time spent one each weather for scoreboard
/datum/climate /datum/climate
@@ -38,6 +41,8 @@ var/list/weathertracker = list() //associative list, gathers time spent one each
else else
var/datum/weather/future = new path(src) var/datum/weather/future = new path(src)
forecasts += future forecasts += future
if(W.next_weather.len == 1)
break //Forecast no further.
cycle++ cycle++
forecasts -= current_weather //remove it from our future weather 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) if(forecasts.len < PREDICTION_MINIMUM)
forecast() 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) /datum/climate/proc/change_weather(weather)
if(ispath(weather)) if(ispath(weather))
//We have been provided a path. Let's see if it's identical to the one we have. //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 /datum/weather
var/name = "weather" var/name = "weather"
var/list/next_weather = list() //associative list 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/timeleft = 1
var/datum/climate/parent var/datum/climate/parent
var/temperature = T20C 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/manipulator = 1,
/obj/item/weapon/stock_parts/capacitor = 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) materials = list(MAT_GLASS = 2000, SACID = 20)
category = "Console Boards" category = "Console Boards"
build_path = /obj/item/weapon/circuitboard/suspension_gen 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"; icon_state = "1-2";
tag = "" tag = ""
}, },
/obj/machinery/holosign/morgue,
/turf/simulated/floor{ /turf/simulated/floor{
icon_state = "dark" icon_state = "dark"
}, },
@@ -36520,13 +36521,17 @@
}, },
/area/science/server) /area/science/server)
"boN" = ( "boN" = (
/obj/machinery/light{
dir = 8
},
/turf/simulated/floor{ /turf/simulated/floor{
icon_state = "warnwhitecorner" icon_state = "white"
}, },
/area/science/lab) /area/science/lab)
"boO" = ( "boO" = (
/turf/simulated/floor{ /turf/simulated/floor{
icon_state = "warnwhite" dir = 1;
icon_state = "rampbottom"
}, },
/area/science/lab) /area/science/lab)
"boP" = ( "boP" = (
@@ -37036,46 +37041,18 @@
}, },
/area/science/server) /area/science/server)
"bpM" = ( "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{ /obj/machinery/firealarm{
dir = 8; dir = 8;
pixel_x = -24 pixel_x = -24
}, },
/turf/simulated/floor{ /turf/simulated/floor{
dir = 6; icon_state = "warnwhitecorner"
icon_state = "warnwhite"
}, },
/area/science/lab) /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" = ( "bpR" = (
/obj/machinery/r_n_d/fabricator/circuit_imprinter, /turf/simulated/floor{
/obj/item/weapon/reagent_containers/glass/beaker/sulphuric, icon_state = "warnwhite"
/turf/simulated/floor/bluegrid, },
/area/science/lab) /area/science/lab)
"bpS" = ( "bpS" = (
/obj/item/clothing/glasses/simonglasses, /obj/item/clothing/glasses/simonglasses,
@@ -37423,36 +37400,30 @@
/area/science/server) /area/science/server)
"bqx" = ( "bqx" = (
/obj/structure/window/reinforced{ /obj/structure/window/reinforced{
dir = 8 icon = 'icons/obj/objects.dmi';
icon_state = "rail";
name = "safety rail"
}, },
/obj/structure/window/reinforced{ /obj/machinery/r_n_d/destructive_analyzer,
dir = 1 /turf/simulated/floor/bluegrid,
},
/obj/structure/grille,
/obj/structure/window/reinforced,
/obj/structure/window/full/reinforced,
/turf/simulated/floor/plating,
/area/science/lab) /area/science/lab)
"bqy" = ( "bqy" = (
/obj/structure/window/reinforced{ /obj/structure/window/reinforced{
dir = 1 icon = 'icons/obj/objects.dmi';
icon_state = "rail";
name = "safety rail"
}, },
/obj/structure/grille, /obj/machinery/r_n_d/fabricator/protolathe,
/obj/structure/window/reinforced, /turf/simulated/floor/bluegrid,
/obj/structure/window/full/reinforced,
/turf/simulated/floor/plating,
/area/science/lab) /area/science/lab)
"bqz" = ( "bqz" = (
/obj/structure/window/reinforced{ /obj/structure/window/reinforced{
dir = 1 icon = 'icons/obj/objects.dmi';
icon_state = "rail";
name = "safety rail"
}, },
/obj/structure/window/reinforced{ /obj/machinery/r_n_d/fabricator/circuit_imprinter,
dir = 4 /turf/simulated/floor/bluegrid,
},
/obj/structure/grille,
/obj/structure/window/reinforced,
/obj/structure/window/full/reinforced,
/turf/simulated/floor/plating,
/area/science/lab) /area/science/lab)
"bqA" = ( "bqA" = (
/obj/structure/bed/chair{ /obj/structure/bed/chair{
@@ -44596,6 +44567,7 @@
tag = "" tag = ""
}, },
/obj/machinery/door_timer/cell_1{ /obj/machinery/door_timer/cell_1{
dir = 1;
pixel_y = 32 pixel_y = 32
}, },
/turf/simulated/floor{ /turf/simulated/floor{
@@ -100582,6 +100554,12 @@
/area/bridge/meeting_room{ /area/bridge/meeting_room{
name = "\improper Security Station Bridge" name = "\improper Security Station Bridge"
}) })
"dTR" = (
/turf/simulated/floor{
dir = 8;
icon_state = "rampbottom"
},
/area/science/lab)
"dWH" = ( "dWH" = (
/obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/segment,
/obj/machinery/door/firedoor/border_only{ /obj/machinery/door/firedoor/border_only{
@@ -100706,6 +100684,16 @@
icon_state = "freezerfloor" icon_state = "freezerfloor"
}, },
/area/security/perma) /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" = ( "eYF" = (
/obj/machinery/computer/climate/wall{ /obj/machinery/computer/climate/wall{
pixel_x = -30 pixel_x = -30
@@ -100904,6 +100892,13 @@
/area/maintenance/fsmaint2{ /area/maintenance/fsmaint2{
name = "Auxiliary Docking" 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" = ( "hiu" = (
/turf/simulated/floor{ /turf/simulated/floor{
dir = 1; dir = 1;
@@ -100911,6 +100906,14 @@
tag = "icon-darkblue (NORTH)" tag = "icon-darkblue (NORTH)"
}, },
/area/security/perma) /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" = ( "hrm" = (
/obj/structure/cable{ /obj/structure/cable{
d1 = 1; d1 = 1;
@@ -100928,6 +100931,13 @@
/area/maintenance/fsmaint2{ /area/maintenance/fsmaint2{
name = "Auxiliary Docking" name = "Auxiliary Docking"
}) })
"hta" = (
/obj/effect/decal/cleanable/blood/oil{
dir = 4;
icon_state = "floor6"
},
/turf/unsimulated/floor/snow/asphalt,
/area/science/lab)
"hxZ" = ( "hxZ" = (
/obj/machinery/light, /obj/machinery/light,
/obj/machinery/media/receiver/boombox/wallmount/muzak{ /obj/machinery/media/receiver/boombox/wallmount/muzak{
@@ -101058,6 +101068,18 @@
}, },
/turf/simulated/floor/carpet, /turf/simulated/floor/carpet,
/area/security/hos) /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" = ( "ioN" = (
/obj/machinery/door/airlock/external{ /obj/machinery/door/airlock/external{
req_access_txt = "13;24" req_access_txt = "13;24"
@@ -101152,6 +101174,10 @@
/area/engine/locker{ /area/engine/locker{
name = "\improper Engineering Foyer" name = "\improper Engineering Foyer"
}) })
"iZe" = (
/obj/item/weapon/storage/toolbox/mechanical,
/turf/unsimulated/floor/snow/asphalt,
/area/science/lab)
"jcq" = ( "jcq" = (
/obj/machinery/disposal, /obj/machinery/disposal,
/obj/structure/disposalpipe/trunk{ /obj/structure/disposalpipe/trunk{
@@ -101175,12 +101201,31 @@
icon_state = "dark" icon_state = "dark"
}, },
/area/security/brig) /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" = ( "juJ" = (
/obj/machinery/computer/climate/wall{ /obj/machinery/computer/climate/wall{
pixel_y = -30 pixel_y = -30
}, },
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/supply/miningdelivery) /area/supply/miningdelivery)
"jCa" = (
/turf/simulated/floor{
dir = 8;
icon_state = "neutralfull"
},
/area/science/lab)
"jCX" = ( "jCX" = (
/obj/machinery/door/airlock/vault{ /obj/machinery/door/airlock/vault{
name = "The Hole"; name = "The Hole";
@@ -101200,6 +101245,12 @@
icon_state = "dark vault stripe" icon_state = "dark vault stripe"
}, },
/area/security/perma) /area/security/perma)
"jNt" = (
/obj/machinery/light,
/turf/simulated/floor{
icon_state = "purple"
},
/area/science/lab)
"jTM" = ( "jTM" = (
/obj/machinery/door_control{ /obj/machinery/door_control{
desc = "A remote control-switch for a door to space."; desc = "A remote control-switch for a door to space.";
@@ -101301,6 +101352,9 @@
icon_state = "dark" icon_state = "dark"
}, },
/area/security/brig) /area/security/brig)
"kHu" = (
/turf/simulated/floor,
/area/science/lab)
"kJd" = ( "kJd" = (
/obj/structure/window/reinforced{ /obj/structure/window/reinforced{
dir = 8 dir = 8
@@ -101586,6 +101640,15 @@
}, },
/turf/unsimulated/floor/snow, /turf/unsimulated/floor/snow,
/area/surface/forest/south) /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" = ( "mwy" = (
/obj/machinery/atmospherics/unary/vent_scrubber/on{ /obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 8; dir = 8;
@@ -101639,6 +101702,21 @@
icon_state = "dark" icon_state = "dark"
}, },
/area/security/perma) /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" = ( "ndg" = (
/obj/structure/closet/wardrobe/pjs, /obj/structure/closet/wardrobe/pjs,
/obj/item/stack/sheet/wood{ /obj/item/stack/sheet/wood{
@@ -101674,6 +101752,11 @@
}, },
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/engineering/atmos) /area/engineering/atmos)
"noa" = (
/turf/simulated/floor{
icon_state = "purple"
},
/area/science/lab)
"nop" = ( "nop" = (
/obj/item/device/flashlight/lamp, /obj/item/device/flashlight/lamp,
/obj/structure/table/woodentable, /obj/structure/table/woodentable,
@@ -101681,6 +101764,17 @@
/area/security/toilet{ /area/security/toilet{
name = "Brig Dormitories" 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" = ( "nzq" = (
/obj/structure/grille, /obj/structure/grille,
/obj/structure/window/reinforced, /obj/structure/window/reinforced,
@@ -101719,6 +101813,18 @@
icon_state = "dark" icon_state = "dark"
}, },
/area/security/perma) /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" = ( "nZp" = (
/obj/structure/cable{ /obj/structure/cable{
d1 = 1; d1 = 1;
@@ -101890,6 +101996,18 @@
/area/maintenance/fsmaint2{ /area/maintenance/fsmaint2{
name = "Auxiliary Docking" 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" = ( "pqb" = (
/obj/structure/cable{ /obj/structure/cable{
d1 = 1; d1 = 1;
@@ -102033,6 +102151,13 @@
icon_state = "dark" icon_state = "dark"
}, },
/area/security/brig) /area/security/brig)
"qwz" = (
/obj/effect/decal/warning_stripes{
icon_state = "warning";
tag = "icon-warning"
},
/turf/unsimulated/floor/snow/asphalt,
/area/science/lab)
"qxT" = ( "qxT" = (
/obj/structure/sign/securearea{ /obj/structure/sign/securearea{
desc = "A warning sign which reads 'HIGH VOLTAGE'"; desc = "A warning sign which reads 'HIGH VOLTAGE'";
@@ -102097,6 +102222,24 @@
}, },
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/security/perma) /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" = ( "rgk" = (
/obj/machinery/door/airlock/glass_security{ /obj/machinery/door/airlock/glass_security{
name = "Prison Medbay"; name = "Prison Medbay";
@@ -102180,6 +102323,14 @@
/area/maintenance/fsmaint2{ /area/maintenance/fsmaint2{
name = "Auxiliary Docking" 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" = ( "rGr" = (
/obj/structure/punching_bag/clown, /obj/structure/punching_bag/clown,
/turf/simulated/floor{ /turf/simulated/floor{
@@ -102288,11 +102439,23 @@
}, },
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/engineering/atmos) /area/engineering/atmos)
"rVw" = (
/obj/structure/hanging_lantern{
dir = 1
},
/turf/unsimulated/floor/snow/asphalt,
/area/science/lab)
"rXG" = ( "rXG" = (
/turf/simulated/floor{ /turf/simulated/floor{
icon_state = "freezerfloor" icon_state = "freezerfloor"
}, },
/area/security/perma) /area/security/perma)
"sdG" = (
/obj/structure/hanging_lantern{
dir = 4
},
/turf/unsimulated/floor/snow/asphalt,
/area/science/lab)
"sel" = ( "sel" = (
/obj/machinery/door/firedoor/border_only{ /obj/machinery/door/firedoor/border_only{
name = "Firelock South" name = "Firelock South"
@@ -102427,6 +102590,14 @@
tag = "icon-darkred (SOUTHWEST)" tag = "icon-darkred (SOUTHWEST)"
}, },
/area/security/brig) /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" = ( "ucb" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/cable{ /obj/structure/cable{
@@ -102567,6 +102738,22 @@
/area/maintenance/fsmaint2{ /area/maintenance/fsmaint2{
name = "Auxiliary Docking" 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" = ( "vXP" = (
/obj/structure/cable{ /obj/structure/cable{
d1 = 1; d1 = 1;
@@ -102634,6 +102821,13 @@
icon_state = "dark" icon_state = "dark"
}, },
/area/security/perma) /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" = ( "wWo" = (
/obj/structure/cable{ /obj/structure/cable{
d1 = 1; d1 = 1;
@@ -102660,6 +102854,15 @@
/area/maintenance/fsmaint2{ /area/maintenance/fsmaint2{
name = "Auxiliary Docking" 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" = ( "xix" = (
/obj/structure/window/reinforced{ /obj/structure/window/reinforced{
dir = 1 dir = 1
@@ -102736,6 +102939,15 @@
}, },
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/engineering/atmos) /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" = ( "xFx" = (
/obj/structure/disposaloutlet, /obj/structure/disposaloutlet,
/obj/structure/window/reinforced{ /obj/structure/window/reinforced{
@@ -102754,6 +102966,14 @@
/area/maintenance/fsmaint2{ /area/maintenance/fsmaint2{
name = "Auxiliary Docking" 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" = ( "xIN" = (
/obj/effect/decal/warning_stripes{ /obj/effect/decal/warning_stripes{
icon_state = "warning"; icon_state = "warning";
@@ -102826,6 +103046,17 @@
}, },
/turf/unsimulated/floor/snow, /turf/unsimulated/floor/snow,
/area/surface/forest/south) /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" = ( "xTt" = (
/obj/structure/cable{ /obj/structure/cable{
d1 = 1; d1 = 1;
@@ -102853,6 +103084,7 @@
/area/security/perma) /area/security/perma)
"yaW" = ( "yaW" = (
/obj/machinery/door_timer/cell_3{ /obj/machinery/door_timer/cell_3{
dir = 8;
pixel_x = -32; pixel_x = -32;
pixel_y = 0 pixel_y = 0
}, },
@@ -102862,6 +103094,22 @@
tag = "icon-darkred (WEST)" tag = "icon-darkred (WEST)"
}, },
/area/security/brig) /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" = ( "ykP" = (
/obj/structure/window/reinforced{ /obj/structure/window/reinforced{
dir = 1 dir = 1
@@ -126901,7 +127149,7 @@ aYZ
aYZ aYZ
aYZ aYZ
aYZ aYZ
aYZ aZb
aYZ aYZ
aYZ aYZ
aZb aZb
@@ -127203,7 +127451,7 @@ aYZ
aYZ aYZ
aYZ aYZ
aYZ aYZ
aZb aYZ
aYZ aYZ
aYZ aYZ
aYZ aYZ
@@ -127501,11 +127749,11 @@ boL
boL boL
boL boL
boL boL
aYZ bjP
aYZ nJG
aYZ nJG
aYZ nJG
aYZ xTs
aYZ aYZ
aYZ aYZ
aYZ aYZ
@@ -127800,14 +128048,14 @@ bmX
bmd bmd
boN boN
bpM bpM
boO
rev
yjp
bjP bjP
aYZ rVw
aYZ nJR
aYZ nJR
aYZ eVS
aYZ
aYZ
aYZ
aYZ aYZ
aYZ aYZ
aYZ aYZ
@@ -128100,19 +128348,19 @@ bkR
blY blY
bmX bmX
bmd bmd
boO bmd
bpO bpR
bjP naM
aYZ kHu
aYZ noa
aYZ pcf
aYZ iZe
aYZ hta
aYZ nJR
aYZ jtQ
aYZ
aYZ aYZ
aYZ aYZ
boz
aYZ aYZ
aYZ aYZ
aYZ aYZ
@@ -128402,16 +128650,16 @@ bkQ
blX blX
bmY bmY
bmd bmd
boO bmd
bpN bpR
bqx bqx
aYZ kHu
aYZ noa
aYZ xiv
bdN wTp
aYZ tYI
aYZ uUg
aYZ eVS
aYZ aYZ
aYZ aYZ
aYZ aYZ
@@ -128704,16 +128952,16 @@ bkT
bma bma
bmZ bmZ
bmd bmd
boO bmd
bpQ bpR
bqy bqy
aYZ kHu
aYZ noa
aYZ xiv
aYZ qwz
aYZ ntc
aYZ xGd
aYZ eVS
aYZ aYZ
aYZ aYZ
aZb aZb
@@ -129006,18 +129254,18 @@ bkS
blZ blZ
bmd bmd
bmd bmd
boO bmd
bpP bpR
bqy mmF
kHu
jNt
xiv
hlM
uWm
rFQ
eVS
aYZ aYZ
aYZ aYZ
aYZ
aYZ
aYZ
aYZ
aYZ
baU
aYZ
boz boz
aYZ aYZ
aYZ aYZ
@@ -129308,18 +129556,18 @@ bkV
blY blY
bnb bnb
bmd bmd
boO bmd
bpR bpR
bqz bqz
kHu
noa
ila
nJR
sdG
nJR
eVS
aYZ aYZ
aYZ baU
aYZ
aYZ
aYZ
aYZ
aYZ
boz
aYZ
aYZ aYZ
aYZ aYZ
aYZ aYZ
@@ -129612,14 +129860,14 @@ bna
bnV bnV
boP boP
boP boP
bnX boP
aYZ kHu
aYZ dTR
aYZ xyP
aYZ haA
aYZ xyP
aYZ nJR
aYZ eVS
aYZ aYZ
aYZ aYZ
aYZ aYZ
@@ -129914,17 +130162,17 @@ bnc
bnW bnW
boP boP
bpS bpS
bnX boP
aYZ qZv
aYZ jCa
aYZ haA
aYZ xvF
aYZ xyP
aYZ nJR
aYZ jtQ
aYZ
aYZ aYZ
aYZ aYZ
bdN
aYZ aYZ
aYZ aYZ
aYZ aYZ
@@ -130216,14 +130464,14 @@ bkW
bjP bjP
boP boP
bnX bnX
boP
boP
bnX bnX
bnX xyP
bnX xyP
aYZ xyP
aYZ nJR
aYZ eVS
aYZ
aYZ
aYZ aYZ
aYZ 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.dm"
#include "code\game\machinery\vending_packs.dm" #include "code\game\machinery\vending_packs.dm"
#include "code\game\machinery\washing_machine.dm" #include "code\game\machinery\washing_machine.dm"
#include "code\game\machinery\weathercontrol.dm"
#include "code\game\machinery\wishgranter.dm" #include "code\game\machinery\wishgranter.dm"
#include "code\game\machinery\atmoalter\area_atmos_computer.dm" #include "code\game\machinery\atmoalter\area_atmos_computer.dm"
#include "code\game\machinery\atmoalter\canister.dm" #include "code\game\machinery\atmoalter\canister.dm"
@@ -2676,7 +2677,7 @@
#include "maprendering\maprendering.dm" #include "maprendering\maprendering.dm"
#include "maps\_map.dm" #include "maps\_map.dm"
#include "maps\_map_override.dm" #include "maps\_map_override.dm"
#include "maps\snaxi.dm" #include "maps\tgstation.dm"
#include "maps\defficiency\areas.dm" #include "maps\defficiency\areas.dm"
#include "maps\lampreystation\lamprey.dm" #include "maps\lampreystation\lamprey.dm"
#include "maps\packedstation\telecomms.dm" #include "maps\packedstation\telecomms.dm"