diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm index eba45a14bf..3b4e4ce09e 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm @@ -7,6 +7,9 @@ /area/ruin/powered/golem_ship) "c" = ( /obj/structure/closet/crate, +/obj/item/shovel, +/obj/item/shovel, +/obj/item/shovel, /obj/item/pickaxe, /obj/item/pickaxe, /obj/item/pickaxe, @@ -19,6 +22,8 @@ /area/ruin/powered/golem_ship) "d" = ( /obj/structure/closet/crate, +/obj/item/shovel, +/obj/item/shovel, /obj/item/pickaxe, /obj/item/pickaxe, /obj/item/storage/bag/ore, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm index a004ba7a9d..3c7cb364c6 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm @@ -694,8 +694,8 @@ /area/ruin/powered/syndicate_lava_base) "bJ" = ( /obj/structure/table/reinforced, -/obj/item/gun/ballistic/automatic/c20r/toy/unrestricted, -/obj/item/gun/ballistic/automatic/c20r/toy/unrestricted, +/obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot, +/obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot, /turf/open/floor/plasteel/vault{ dir = 8 }, diff --git a/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm b/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm index e44e4a9d2d..f667074c38 100644 --- a/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm +++ b/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm @@ -67,7 +67,7 @@ /area/ruin/space/has_grav/derelictoutpost/cargobay) "ao" = ( /obj/machinery/power/apc{ - cell_type = 0; + start_charge = 0; dir = 4; name = "Cargo Bay APC"; pixel_x = 24 @@ -749,7 +749,7 @@ /area/ruin/space/has_grav/derelictoutpost/powerstorage) "ca" = ( /obj/machinery/power/apc{ - cell_type = 0; + start_charge = 0; dir = 4; name = "Power Storage APC"; pixel_x = 23; @@ -845,7 +845,7 @@ /area/ruin/space/has_grav/derelictoutpost) "ck" = ( /obj/machinery/power/apc{ - cell_type = 0; + start_charge = 0; dir = 2; name = "Tradepost APC"; pixel_y = -24 @@ -2006,7 +2006,7 @@ /area/ruin/space/has_grav/derelictoutpost/cargostorage) "el" = ( /obj/machinery/power/apc{ - cell_type = 0; + start_charge = 0; dir = 4; name = "Cargo Storage APC"; pixel_x = 24 @@ -3907,4 +3907,4 @@ aa aa aa aa -"} +"} \ No newline at end of file diff --git a/_maps/RandomRuins/SpaceRuins/caravanambush.dmm b/_maps/RandomRuins/SpaceRuins/caravanambush.dmm index 43cd290ca0..d2a416bba2 100644 --- a/_maps/RandomRuins/SpaceRuins/caravanambush.dmm +++ b/_maps/RandomRuins/SpaceRuins/caravanambush.dmm @@ -815,8 +815,8 @@ /area/ruin/unpowered) "cC" = ( /obj/structure/closet/crate/secure/weapon, -/obj/item/gun/ballistic/automatic/c20r/toy/unrestricted, -/obj/item/gun/ballistic/automatic/c20r/toy/unrestricted, +/obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot, +/obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot, /turf/open/floor/mineral/titanium/yellow/airless, /area/ruin/unpowered) "cD" = ( diff --git a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm index 7a146f0988..6eae7dd6e1 100644 --- a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm +++ b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm @@ -1096,8 +1096,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 4; name = "Hydroponics APC"; pixel_x = 24 @@ -1466,8 +1465,7 @@ /area/ruin/space/has_grav/deepstorage) "cQ" = ( /obj/structure/cable/yellow, -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 4; name = "Storage APC"; pixel_x = 24 @@ -2260,8 +2258,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 4; name = "Armory APC"; pixel_x = 24 @@ -3085,8 +3082,7 @@ "fE" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /obj/structure/cable/yellow, -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 4; name = "Dormory APC"; pixel_x = 24 @@ -6625,4 +6621,4 @@ aa aa aa aa -"} +"} \ No newline at end of file diff --git a/_maps/RandomRuins/SpaceRuins/gasthelizards.dmm b/_maps/RandomRuins/SpaceRuins/gasthelizards.dmm index 75ba049548..6396cda06f 100644 --- a/_maps/RandomRuins/SpaceRuins/gasthelizards.dmm +++ b/_maps/RandomRuins/SpaceRuins/gasthelizards.dmm @@ -174,7 +174,6 @@ dir = 1 }, /obj/machinery/power/apc{ - cell_type = 2500; dir = 1; name = "Worn-out APC"; pixel_x = 1; diff --git a/_maps/RandomRuins/SpaceRuins/oldAIsat.dmm b/_maps/RandomRuins/SpaceRuins/oldAIsat.dmm index 864621b1df..193242e689 100644 --- a/_maps/RandomRuins/SpaceRuins/oldAIsat.dmm +++ b/_maps/RandomRuins/SpaceRuins/oldAIsat.dmm @@ -44,7 +44,6 @@ /area/tcommsat/chamber) "ak" = ( /obj/machinery/power/apc{ - cell_type = 2500; dir = 1; name = "Worn-out APC"; pixel_x = 1; diff --git a/_maps/RandomRuins/SpaceRuins/onehalf.dmm b/_maps/RandomRuins/SpaceRuins/onehalf.dmm index 237407f3e5..16d0d80887 100644 --- a/_maps/RandomRuins/SpaceRuins/onehalf.dmm +++ b/_maps/RandomRuins/SpaceRuins/onehalf.dmm @@ -350,7 +350,6 @@ icon_state = "0-8" }, /obj/machinery/power/apc{ - cell_type = 2500; dir = 1; name = "Mining Drone Bay APC"; pixel_y = 24 @@ -848,7 +847,6 @@ d2 = 4 }, /obj/machinery/power/apc{ - cell_type = 2500; dir = 1; name = "Bridge APC"; pixel_y = 24 diff --git a/_maps/RandomRuins/SpaceRuins/spacehotel.dmm b/_maps/RandomRuins/SpaceRuins/spacehotel.dmm index d1f7f178fc..f577cbbf37 100644 --- a/_maps/RandomRuins/SpaceRuins/spacehotel.dmm +++ b/_maps/RandomRuins/SpaceRuins/spacehotel.dmm @@ -655,8 +655,7 @@ name = "Hotel Guest Room 3" }) "bN" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 2; name = "Guest Room APC"; pixel_y = -24 @@ -719,8 +718,7 @@ name = "Hotel Guest Room 4" }) "bT" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 2; name = "Guest Room APC"; pixel_y = -24 @@ -783,8 +781,7 @@ name = "Hotel Guest Room 5" }) "bZ" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 2; name = "Guest Room APC"; pixel_y = -24 @@ -847,8 +844,7 @@ name = "Hotel Guest Room 6" }) "cf" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 2; name = "Guest Room APC"; pixel_y = -24 @@ -1379,8 +1375,7 @@ name = "Hotel Guest Room 2" }) "dn" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 1; name = "Guest Room APC"; pixel_y = 25 @@ -1461,8 +1456,7 @@ name = "Hotel Guest Room 1" }) "dv" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 1; name = "Guest Room APC"; pixel_y = 25 @@ -1874,8 +1868,7 @@ /turf/open/floor/plasteel/white, /area/ruin/space/has_grav/hotel/workroom) "eA" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 2; name = "Laundry APC"; pixel_y = -24 @@ -2080,8 +2073,7 @@ /turf/open/floor/plating, /area/ruin/space/has_grav/hotel) "fh" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 2; name = "Kitchen APC"; pixel_y = -24 @@ -2874,8 +2866,7 @@ /turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/hotel/bar) "hA" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 2; name = "Staff Room APC"; pixel_y = -24 @@ -3261,8 +3252,7 @@ }, /area/ruin/space/has_grav/hotel/power) "iw" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 1; name = "Power Storage APC"; pixel_y = 25 @@ -3427,8 +3417,7 @@ }, /area/ruin/space/has_grav/hotel/power) "iU" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 2; name = "Security APC"; pixel_y = -24 @@ -3500,8 +3489,7 @@ /turf/open/floor/plating, /area/ruin/space/has_grav/hotel/pool) "iZ" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 2; name = "Pool APC"; pixel_y = -24 @@ -3559,8 +3547,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 2; name = "Dock APC"; pixel_y = -24 @@ -4824,8 +4811,7 @@ /turf/open/floor/plasteel/neutral, /area/ruin/space/has_grav/hotel/custodial) "mJ" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 2; name = "Custodial APC"; pixel_y = -24 diff --git a/_maps/RandomZLevels/moonoutpost19.dmm b/_maps/RandomZLevels/moonoutpost19.dmm index 2edb5dcc12..44c5d01da5 100644 --- a/_maps/RandomZLevels/moonoutpost19.dmm +++ b/_maps/RandomZLevels/moonoutpost19.dmm @@ -1973,8 +1973,7 @@ }) "cK" = ( /obj/structure/cable, -/obj/machinery/power/apc{ - cell_type = 15000; +/obj/machinery/power/apc/highcap/fifteen_k{ dir = 2; locked = 1; name = "Worn-out APC"; @@ -4917,8 +4916,7 @@ }) "gG" = ( /obj/structure/cable, -/obj/machinery/power/apc{ - cell_type = 15000; +/obj/machinery/power/apc/highcap/fifteen_k{ dir = 4; locked = 0; name = "Worn-out APC"; @@ -6969,8 +6967,7 @@ icon_state = "0-2"; d2 = 2 }, -/obj/machinery/power/apc{ - cell_type = 15000; +/obj/machinery/power/apc/highcap/fifteen_k{ dir = 1; locked = 0; name = "Worn-out APC"; diff --git a/_maps/RandomZLevels/research.dmm b/_maps/RandomZLevels/research.dmm index 7da8026638..0841c32e24 100644 --- a/_maps/RandomZLevels/research.dmm +++ b/_maps/RandomZLevels/research.dmm @@ -371,9 +371,8 @@ icon_state = "0-2"; d2 = 2 }, -/obj/machinery/power/apc{ +/obj/machinery/power/apc/highcap/ten_k{ auto_name = 1; - cell_type = 9000; dir = 4; name = "Engineering APC"; pixel_x = 27; @@ -660,8 +659,7 @@ /turf/open/floor/plasteel/black, /area/awaymission/research/interior/gateway) "cb" = ( -/obj/machinery/power/apc{ - cell_type = 12000; +/obj/machinery/power/apc/highcap/fifteen_k{ dir = 4; name = "Gateway APC"; pixel_x = 24 @@ -988,8 +986,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 4; name = "Genetics APC"; pixel_x = 24 @@ -1718,8 +1715,7 @@ /turf/open/floor/plasteel/whitepurple, /area/awaymission/research/interior) "fa" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 4; name = "Cryostatis APC"; pixel_x = 24 @@ -1889,8 +1885,7 @@ /turf/open/floor/plasteel/black, /area/awaymission/research/interior/secure) "fy" = ( -/obj/machinery/power/apc{ - cell_type = 12000; +/obj/machinery/power/apc/highcap/fifteen_k{ dir = 4; name = "Vault APC"; pixel_x = 24 @@ -3057,8 +3052,7 @@ /turf/open/floor/plating, /area/awaymission/research/interior/maint) "iw" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 4; name = "Genetics APC"; pixel_x = 24 @@ -3655,8 +3649,7 @@ }, /area/awaymission/research/interior/medbay) "kp" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 4; name = "Dorms APC"; pixel_x = 24 diff --git a/_maps/RandomZLevels/undergroundoutpost45.dmm b/_maps/RandomZLevels/undergroundoutpost45.dmm index a22555c6c8..a1ddd715b1 100644 --- a/_maps/RandomZLevels/undergroundoutpost45.dmm +++ b/_maps/RandomZLevels/undergroundoutpost45.dmm @@ -3159,8 +3159,7 @@ dir = 1; network = list("UO45") }, -/obj/machinery/power/apc{ - cell_type = 15000; +/obj/machinery/power/apc/highcap/fifteen_k{ dir = 2; locked = 0; name = "Hydroponics APC"; @@ -6240,8 +6239,7 @@ icon_state = "0-4"; d2 = 4 }, -/obj/machinery/power/apc{ - cell_type = 15000; +/obj/machinery/power/apc/highcap/fifteen_k{ dir = 1; locked = 0; name = "UO45 Bar APC"; @@ -7619,8 +7617,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/power/apc{ - cell_type = 15000; +/obj/machinery/power/apc/highcap/fifteen_k{ dir = 2; locked = 0; name = "UO45 Research Division APC"; @@ -8313,8 +8310,7 @@ }) "mE" = ( /obj/structure/cable, -/obj/machinery/power/apc{ - cell_type = 15000; +/obj/machinery/power/apc/highcap/fifteen_k{ dir = 2; locked = 0; name = "UO45 Gateway APC"; @@ -11932,8 +11928,7 @@ icon_state = "0-4"; d2 = 4 }, -/obj/machinery/power/apc{ - cell_type = 15000; +/obj/machinery/power/apc/highcap/fifteen_k{ dir = 8; locked = 1; name = "UO45 Engineering APC"; @@ -12695,8 +12690,7 @@ }) "sj" = ( /obj/structure/cable, -/obj/machinery/power/apc{ - cell_type = 15000; +/obj/machinery/power/apc/highcap/fifteen_k{ dir = 2; locked = 0; name = "UO45 Mining APC"; diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index 27f366f7f8..d0287d6dba 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -851,8 +851,7 @@ /turf/open/floor/plasteel, /area/ai_monitored/security/armory) "acm" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 4; areastring = "/area/ai_monitored/security/armory"; name = "Armory APC"; @@ -2408,7 +2407,7 @@ dir = 4; id = "pod3"; name = "escape pod 3"; - port_angle = 180; + port_direction = 2; preferred_direction = 4 }, /turf/open/floor/mineral/titanium/blue, @@ -6369,7 +6368,7 @@ height = 5; id = "laborcamp"; name = "labor camp shuttle"; - port_angle = 90; + port_direction = 4; width = 9 }, /obj/docking_port/stationary{ @@ -16485,7 +16484,7 @@ height = 7; id = "arrival"; name = "arrival shuttle"; - port_angle = -90; + port_direction = 8; preferred_direction = 8; width = 15 }, @@ -20943,8 +20942,7 @@ }, /area/bridge) "aWW" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 2; name = "Bridge APC"; areastring = "/area/bridge"; @@ -22745,7 +22743,6 @@ /area/quartermaster/storage) "bbu" = ( /obj/machinery/power/apc{ - cell_type = 2500; dir = 1; name = "Captain's Office APC"; areastring = "/area/crew_quarters/heads/captain"; @@ -23802,8 +23799,7 @@ /turf/open/floor/plasteel/black, /area/ai_monitored/turret_protected/ai_upload) "bed" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 2; name = "Upload APC"; areastring = "/area/ai_monitored/turret_protected/ai_upload"; @@ -32546,7 +32542,7 @@ height = 24; id = "syndicate"; name = "syndicate infiltrator"; - port_angle = 0; + port_direction = 1; roundstart_move = "syndicate_away"; width = 18 }, @@ -37967,7 +37963,7 @@ height = 5; id = "mining"; name = "mining shuttle"; - port_angle = 90; + port_direction = 4; width = 7 }, /obj/docking_port/stationary{ @@ -42341,8 +42337,7 @@ /turf/open/floor/plasteel/white, /area/medical/virology) "bSX" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 1; name = "Virology APC"; areastring = "/area/medical/virology"; @@ -43924,8 +43919,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 1; name = "Telecomms Server APC"; areastring = "/area/tcommsat/server"; @@ -46081,8 +46075,7 @@ /obj/structure/closet/secure_closet/engineering_chief{ req_access_txt = "0" }, -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 4; name = "CE Office APC"; areastring = "/area/crew_quarters/heads/chief"; @@ -49118,8 +49111,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "cib" = ( -/obj/machinery/power/apc{ - cell_type = 15000; +/obj/machinery/power/apc/highcap/fifteen_k{ dir = 1; name = "Engineering APC"; areastring = "/area/engine/engineering"; @@ -49156,8 +49148,7 @@ dir = 1 }, /obj/structure/reagent_dispensers/watertank, -/obj/machinery/power/apc{ - cell_type = 15000; +/obj/machinery/power/apc/highcap/fifteen_k{ dir = 1; name = "Engineering APC"; areastring = "/area/engine/engineering"; @@ -52688,7 +52679,7 @@ dir = 4; id = "pod4"; name = "escape pod 4"; - port_angle = 180; + port_direction = 2; preferred_direction = 4 }, /turf/open/floor/mineral/titanium/blue, @@ -52995,7 +52986,7 @@ dir = 8; id = "pod2"; name = "escape pod 2"; - port_angle = 180 + port_direction = 2 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_2) @@ -55811,8 +55802,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 2; name = "AI Chamber APC"; areastring = "/area/ai_monitored/turret_protected/ai"; @@ -56189,7 +56179,7 @@ height = 13; id = "ferry"; name = "ferry shuttle"; - port_angle = 0; + port_direction = 1; preferred_direction = 4; roundstart_move = "ferry_away"; width = 5 @@ -56213,7 +56203,7 @@ dir = 8; id = "pod1"; name = "escape pod 1"; - port_angle = 180 + port_direction = 2 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_1) @@ -56382,7 +56372,7 @@ id = "whiteship"; launch_status = 0; name = "NT Medical Ship"; - port_angle = -90; + port_direction = 8; preferred_direction = 4; roundstart_move = "whiteship_away"; timid = null; @@ -60916,7 +60906,7 @@ height = 24; id = "syndicate"; name = "syndicate infiltrator"; - port_angle = 0; + port_direction = 1; roundstart_move = "syndicate_away"; width = 18 }, @@ -62503,7 +62493,6 @@ /area/quartermaster/sorting) "cNL" = ( /obj/machinery/power/apc{ - cell_type = 2500; dir = 1; name = "Central Maintenance APC"; areastring = "/area/maintenance/central"; @@ -129465,4 +129454,4 @@ aaa aaa aaa aaa -"} +"} \ No newline at end of file diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 0484d95b79..1c4fc30ee0 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -319,7 +319,7 @@ /obj/docking_port/mobile/pod{ id = "pod1"; name = "escape pod 1"; - port_angle = 180 + port_direction = 2 }, /obj/effect/turf_decal/stripes/end, /turf/open/floor/plasteel/white, @@ -335,7 +335,7 @@ /obj/docking_port/mobile/pod{ id = "pod2"; name = "escape pod 2"; - port_angle = 180 + port_direction = 2 }, /obj/effect/turf_decal/stripes/end, /turf/open/floor/plasteel/white, @@ -863,8 +863,7 @@ /area/maintenance/solars/starboard/fore) "abM" = ( /obj/structure/cable/white, -/obj/machinery/power/apc{ - cell_type = 10000; +/obj/machinery/power/apc/highcap/ten_k{ dir = 2; name = "Starboard Bow Solar APC"; areastring = "/area/maintenance/solars/starboard/fore"; @@ -2671,7 +2670,7 @@ height = 24; id = "syndicate"; name = "syndicate infiltrator"; - port_angle = 0; + port_direction = 1; roundstart_move = "syndicate_away"; width = 18 }, @@ -15589,8 +15588,7 @@ /area/maintenance/solars/port/fore) "aGh" = ( /obj/structure/cable/white, -/obj/machinery/power/apc{ - cell_type = 10000; +/obj/machinery/power/apc/highcap/ten_k{ dir = 2; name = "Port Bow Solar APC"; areastring = "/area/maintenance/solars/port/fore"; @@ -24570,8 +24568,7 @@ /area/security/prison) "aXv" = ( /obj/structure/cable/white, -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 2; name = "Prison Wing APC"; areastring = "/area/security/prison"; @@ -24696,7 +24693,7 @@ dir = 4; id = "pod3"; name = "escape pod 3"; - port_angle = 180; + port_direction = 2; preferred_direction = 4 }, /obj/effect/turf_decal/stripes/end{ @@ -27292,7 +27289,7 @@ height = 5; id = "mining"; name = "mining shuttle"; - port_angle = 90; + port_direction = 4; width = 7 }, /obj/docking_port/stationary{ @@ -27406,8 +27403,7 @@ }, /area/engine/atmos) "bdr" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 1; name = "Atmospherics APC"; areastring = "/area/engine/atmos"; @@ -37439,7 +37435,7 @@ height = 5; id = "laborcamp"; name = "labor camp shuttle"; - port_angle = 90; + port_direction = 4; width = 9 }, /obj/docking_port/stationary{ @@ -37815,8 +37811,7 @@ /turf/open/floor/plasteel, /area/engine/gravity_generator) "bwL" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 1; name = "Gravity Generator APC"; areastring = "/area/engine/gravity_generator"; @@ -38945,8 +38940,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 1; name = "Engineering Foyer APC"; areastring = "/area/engine/break_room"; @@ -43406,8 +43400,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - cell_type = 10000; +/obj/machinery/power/apc/highcap/ten_k{ dir = 1; name = "Council Chambers APC"; areastring = "/area/bridge/meeting_room/council"; @@ -43982,8 +43975,7 @@ /turf/closed/wall, /area/engine/transit_tube) "bHy" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 1; name = "Transit Tube Access APC"; areastring = "/area/engine/transit_tube"; @@ -44496,8 +44488,7 @@ /turf/open/floor/plasteel/grimy, /area/tcommsat/computer) "bIq" = ( -/obj/machinery/power/apc{ - cell_type = 10000; +/obj/machinery/power/apc/highcap/ten_k{ dir = 1; name = "Telecomms Monitoring APC"; areastring = "/area/tcommsat/computer"; @@ -44659,8 +44650,7 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 1; name = "Auxiliary Tool Storage APC"; areastring = "/area/storage/tools"; @@ -46594,8 +46584,7 @@ /turf/open/floor/wood, /area/crew_quarters/heads/captain) "bMI" = ( -/obj/machinery/power/apc{ - cell_type = 10000; +/obj/machinery/power/apc/highcap/ten_k{ dir = 2; name = "Captain's Office APC"; areastring = "/area/crew_quarters/heads/captain"; @@ -54595,8 +54584,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/power/apc{ - cell_type = 10000; +/obj/machinery/power/apc/highcap/ten_k{ dir = 1; name = "Brig APC"; areastring = "/area/security/brig"; @@ -55181,8 +55169,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/machinery/power/apc{ - cell_type = 10000; +/obj/machinery/power/apc/highcap/ten_k{ dir = 2; name = "Captain's Quarters APC"; areastring = "/area/crew_quarters/heads/captain/private"; @@ -58237,8 +58224,7 @@ "cig" = ( /obj/structure/table, /obj/item/hand_tele, -/obj/machinery/power/apc{ - cell_type = 10000; +/obj/machinery/power/apc/highcap/ten_k{ dir = 1; name = "Teleporter APC"; areastring = "/area/teleporter"; @@ -63428,8 +63414,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - cell_type = 10000; +/obj/machinery/power/apc/highcap/ten_k{ dir = 1; name = "Gateway APC"; areastring = "/area/gateway"; @@ -84197,8 +84182,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/power/apc{ - cell_type = 10000; +/obj/machinery/power/apc/highcap/ten_k{ dir = 1; name = "Mech Bay APC"; areastring = "/area/science/robotics/mechbay"; @@ -84331,8 +84315,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 1; name = "Cloning Lab APC"; areastring = "/area/medical/genetics/cloning"; @@ -92088,8 +92071,7 @@ /area/maintenance/starboard/aft) "dxk" = ( /obj/structure/cable/white, -/obj/machinery/power/apc{ - cell_type = 10000; +/obj/machinery/power/apc/highcap/ten_k{ dir = 2; name = "Starboard Quarter Solar APC"; areastring = "/area/maintenance/solars/starboard/aft"; @@ -102792,7 +102774,7 @@ name = "Delta emergency shuttle"; width = 30; preferred_direction = 2; - port_angle = 90 + port_direction = 4 }, /obj/docking_port/stationary{ dheight = 0; @@ -104595,8 +104577,7 @@ /area/maintenance/solars/port/aft) "dWj" = ( /obj/structure/cable/white, -/obj/machinery/power/apc{ - cell_type = 10000; +/obj/machinery/power/apc/highcap/ten_k{ dir = 2; name = "Port Quarter Solar APC"; areastring = "/area/maintenance/solars/port/aft"; @@ -107661,7 +107642,7 @@ height = 13; id = "ferry"; name = "ferry shuttle"; - port_angle = 0; + port_direction = 1; preferred_direction = 4; roundstart_move = "ferry_away"; width = 5 @@ -108844,8 +108825,7 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) "egC" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 1; name = "Departure Lounge APC"; areastring = "/area/hallway/secondary/exit/departure_lounge"; @@ -110542,7 +110522,7 @@ height = 24; id = "syndicate"; name = "syndicate infiltrator"; - port_angle = 0; + port_direction = 1; roundstart_move = "syndicate_away"; width = 18 }, @@ -178697,4 +178677,4 @@ aaa aaa aaa aaa -"} +"} \ No newline at end of file diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index a60e43dd83..488e4a088a 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -613,7 +613,7 @@ /obj/docking_port/mobile/pod{ id = "pod2"; name = "escape pod 2"; - port_angle = 180 + port_direction = 2 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_2) @@ -1461,7 +1461,6 @@ /area/security/execution/education) "acZ" = ( /obj/machinery/power/apc{ - cell_type = 2500; dir = 1; name = "Prisoner Education Chamber APC"; areastring = "/area/security/execution/education"; @@ -1771,7 +1770,7 @@ dir = 4; id = "pod3"; name = "escape pod 3"; - port_angle = 180; + port_direction = 2; preferred_direction = 4 }, /turf/open/floor/mineral/titanium/blue, @@ -2554,8 +2553,7 @@ }, /area/security/prison) "aeX" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 1; name = "Prison Wing APC"; areastring = "/area/security/prison"; @@ -3934,8 +3932,7 @@ }, /area/ai_monitored/security/armory) "ahF" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 2; name = "Armory APC"; areastring = "/area/ai_monitored/security/armory"; @@ -6333,8 +6330,7 @@ d2 = 4; icon_state = "1-4" }, -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 8; name = "Brig Control APC"; areastring = "/area/security/warden"; @@ -6499,7 +6495,6 @@ req_access_txt = "1" }, /obj/machinery/power/apc{ - cell_type = 2500; dir = 4; name = "Shooting Range APC"; areastring = "/area/security/range"; @@ -7000,8 +6995,7 @@ /turf/open/floor/plasteel, /area/security/main) "anC" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 4; name = "Security Office APC"; areastring = "/area/security/main"; @@ -12217,8 +12211,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/machinery/power/apc{ - cell_type = 10000; +/obj/machinery/power/apc/highcap/ten_k{ dir = 2; name = "Brig APC"; areastring = "/area/security/brig"; @@ -13956,7 +13949,7 @@ height = 5; id = "mining"; name = "mining shuttle"; - port_angle = 90; + port_direction = 4; width = 7 }, /obj/docking_port/stationary{ @@ -14172,7 +14165,7 @@ height = 5; id = "laborcamp"; name = "labor camp shuttle"; - port_angle = 90; + port_direction = 4; width = 9 }, /obj/docking_port/stationary{ @@ -17037,8 +17030,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 2; name = "Fore Primary Hallway APC"; areastring = "/area/hallway/primary/fore"; @@ -21223,8 +21215,7 @@ }, /area/hydroponics/garden) "aOO" = ( -/obj/machinery/power/apc{ - cell_type = 10000; +/obj/machinery/power/apc/highcap/ten_k{ dir = 8; name = "Engine Room APC"; areastring = "/area/engine/engineering"; @@ -22133,8 +22124,7 @@ /turf/open/floor/plasteel/black, /area/ai_monitored/turret_protected/ai_upload) "aQA" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 2; name = "Upload APC"; areastring = "/area/ai_monitored/turret_protected/ai_upload"; @@ -22691,7 +22681,7 @@ /obj/docking_port/mobile/pod{ id = "pod1"; name = "escape pod 1"; - port_angle = 180 + port_direction = 2 }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/pod_1) @@ -24313,7 +24303,6 @@ /area/security/courtroom) "aUG" = ( /obj/machinery/power/apc{ - cell_type = 2500; dir = 2; name = "Courtroom APC"; areastring = "/area/security/courtroom"; @@ -30962,7 +30951,6 @@ "bhf" = ( /obj/effect/landmark/blobstart, /obj/machinery/power/apc{ - cell_type = 2500; dir = 4; name = "Central Maintenance APC"; areastring = "/area/maintenance/central"; @@ -31519,7 +31507,7 @@ dir = 4; id = "pod4"; name = "escape pod 4"; - port_angle = 180; + port_direction = 2; preferred_direction = 4 }, /turf/open/floor/mineral/titanium/blue, @@ -32675,7 +32663,6 @@ }, /obj/item/hand_labeler, /obj/machinery/power/apc{ - cell_type = 2500; dir = 4; name = "Delivery Office APC"; areastring = "/area/quartermaster/sorting"; @@ -34503,7 +34490,6 @@ "bnE" = ( /obj/machinery/power/apc{ aidisabled = 0; - cell_type = 2500; dir = 4; name = "MiniSat Antechamber APC"; areastring = "/area/ai_monitored/turret_protected/aisat_interior"; @@ -34914,8 +34900,7 @@ /turf/open/floor/wood, /area/crew_quarters/heads/hop) "bop" = ( -/obj/machinery/power/apc{ - cell_type = 10000; +/obj/machinery/power/apc/highcap/ten_k{ dir = 8; name = "Bridge APC"; areastring = "/area/bridge"; @@ -36423,7 +36408,6 @@ "brd" = ( /obj/structure/table, /obj/machinery/power/apc{ - cell_type = 2500; dir = 8; name = "Art Storage APC"; areastring = "/area/storage/art"; @@ -37019,9 +37003,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/power/apc{ +/obj/machinery/power/apc/highcap/five_k{ aidisabled = 0; - cell_type = 5000; dir = 2; name = "MiniSat Foyer APC"; areastring = "/area/ai_monitored/turret_protected/aisat/foyer"; @@ -39570,8 +39553,7 @@ /turf/open/floor/plasteel/bar, /area/crew_quarters/bar) "bwR" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 1; name = "Bar APC"; areastring = "/area/crew_quarters/bar"; @@ -40107,8 +40089,7 @@ /area/crew_quarters/toilet/auxiliary) "bxS" = ( /obj/item/cigbutt, -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 2; name = "Port Maintenance APC"; areastring = "/area/maintenance/port"; @@ -40670,8 +40651,7 @@ }, /area/engine/atmos) "byX" = ( -/obj/machinery/power/apc{ - cell_type = 10000; +/obj/machinery/power/apc/highcap/ten_k{ dir = 1; name = "Atmospherics APC"; areastring = "/area/engine/atmos"; @@ -40909,8 +40889,7 @@ /turf/open/floor/plasteel/grimy, /area/tcommsat/computer) "bzt" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 4; name = "Telecomms Control Room APC"; areastring = "/area/tcommsat/computer"; @@ -42538,8 +42517,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 2; name = "Auxiliary Restrooms APC"; areastring = "/area/crew_quarters/toilet/auxiliary"; @@ -42794,8 +42772,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/power/apc{ - cell_type = 10000; +/obj/machinery/power/apc/highcap/ten_k{ dir = 1; name = "Command Hallway APC"; areastring = "/area/hallway/secondary/command"; @@ -45460,8 +45437,7 @@ }, /obj/item/storage/toolbox/emergency, /obj/item/device/flashlight, -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 4; name = "Gateway APC"; areastring = "/area/gateway"; @@ -47415,8 +47391,7 @@ /turf/open/floor/plasteel/black/telecomms/mainframe, /area/tcommsat/server) "bMs" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 4; name = "Telecomms Server Room APC"; areastring = "/area/tcommsat/server"; @@ -48631,8 +48606,7 @@ /turf/open/floor/wood, /area/bridge/showroom/corporate) "bOF" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 4; name = "Nanotrasen Corporate Showroom APC"; areastring = "/area/bridge/showroom/corporate"; @@ -50924,7 +50898,6 @@ /area/maintenance/starboard) "bTc" = ( /obj/machinery/power/apc{ - cell_type = 2500; dir = 1; name = "Starboard Maintenance APC"; areastring = "/area/maintenance/starboard"; @@ -51374,8 +51347,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, -/obj/machinery/power/apc{ - cell_type = 10000; +/obj/machinery/power/apc/highcap/ten_k{ dir = 1; name = "Central Primary Hallway APC"; areastring = "/area/hallway/primary/central"; @@ -55242,7 +55214,7 @@ id = "whiteship"; launch_status = 0; name = "NT Recovery White-Ship"; - port_angle = -90; + port_direction = 8; preferred_direction = 4; roundstart_move = "whiteship_away"; width = 27 @@ -59120,8 +59092,7 @@ /turf/open/floor/plasteel/white, /area/science/research) "ciJ" = ( -/obj/machinery/power/apc{ - cell_type = 10000; +/obj/machinery/power/apc/highcap/ten_k{ dir = 1; name = "Research Division APC"; areastring = "/area/science/research"; @@ -63763,8 +63734,7 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "crH" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 4; name = "Aft Hallway APC"; areastring = "/area/hallway/primary/aft"; @@ -64655,8 +64625,7 @@ /area/science/storage) "cti" = ( /obj/machinery/portable_atmospherics/canister/oxygen, -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 1; name = "Toxins Storage APC"; areastring = "/area/science/storage"; @@ -70046,8 +70015,7 @@ pixel_y = 2 }, /obj/item/storage/box/syringes, -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 1; name = "Virology APC"; areastring = "/area/medical/virology"; @@ -73954,8 +73922,7 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) "cKy" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 1; name = "Departure Lounge APC"; areastring = "/area/hallway/secondary/exit/departure_lounge"; @@ -74944,8 +74911,7 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) "cMk" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 2; name = "Aft Maintenance APC"; areastring = "/area/maintenance/aft"; @@ -78474,7 +78440,7 @@ height = 24; id = "syndicate"; name = "syndicate infiltrator"; - port_angle = 0; + port_direction = 1; roundstart_move = "syndicate_away"; width = 18 }, @@ -79453,7 +79419,7 @@ height = 13; id = "ferry"; name = "ferry shuttle"; - port_angle = 0; + port_direction = 1; preferred_direction = 4; roundstart_move = "ferry_away"; width = 5 @@ -82764,8 +82730,7 @@ pixel_y = 3 }, /obj/item/reagent_containers/dropper, -/obj/machinery/power/apc{ - cell_type = 10000; +/obj/machinery/power/apc/highcap/ten_k{ dir = 1; name = "Xenobiology APC"; areastring = "/area/science/xenobiology"; @@ -87024,7 +86989,6 @@ icon_state = "0-8" }, /obj/machinery/power/apc{ - cell_type = 2500; dir = 4; name = "Port Bow Maintenance APC"; areastring = "/area/maintenance/port/fore"; @@ -89548,8 +89512,7 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "dAd" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 2; name = "Starboard Quarter Maintenance APC"; areastring = "/area/maintenance/starboard/aft"; @@ -156338,4 +156301,4 @@ aaa aaa aaa aaa -"} +"} \ No newline at end of file diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm index 419737682f..1d961d66bc 100644 --- a/_maps/map_files/OmegaStation/OmegaStation.dmm +++ b/_maps/map_files/OmegaStation/OmegaStation.dmm @@ -2783,8 +2783,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 1; name = "Head of Personnel Quarter's APC"; areastring = "/area/crew_quarters/heads/hop"; @@ -2968,8 +2967,7 @@ /turf/open/floor/wood, /area/security/detectives_office) "afh" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 1; name = "Detective's Office APC"; areastring = "/area/security/detectives_office"; @@ -9503,7 +9501,7 @@ height = 5; id = "mining"; name = "mining shuttle"; - port_angle = 90; + port_direction = 4; width = 7 }, /obj/docking_port/stationary{ @@ -15182,8 +15180,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 1; name = "Central Starboard Maintenance APC"; areastring = "/area/maintenance/starboard/central"; @@ -16893,8 +16890,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 1; name = "Theatre Backstage APC"; areastring = "/area/crew_quarters/theatre"; @@ -19560,8 +19556,7 @@ d2 = 2; icon_state = "0-2" }, -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 1; name = "Central Port Maintenance APC"; areastring = "/area/maintenance/port/central"; @@ -21269,8 +21264,7 @@ /turf/open/floor/plasteel, /area/engine/gravity_generator) "aJl" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 1; name = "Gravity Generator APC"; areastring = "/area/engine/gravity_generator"; @@ -21563,8 +21557,7 @@ /obj/effect/decal/cleanable/dirt, /obj/item/storage/bag/trash, /obj/item/key/janitor, -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 1; name = "Custodial Closet APC"; areastring = "/area/janitor"; @@ -26410,8 +26403,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 1; name = "Chemistry Lab APC"; areastring = "/area/medical/chemistry"; @@ -30345,8 +30337,7 @@ locked = 0; pixel_x = -23 }, -/obj/machinery/power/apc{ - cell_type = 10000; +/obj/machinery/power/apc/highcap/ten_k{ dir = 1; name = "Mech Bay APC"; areastring = "/area/science/robotics/mechbay"; @@ -33800,8 +33791,7 @@ /obj/structure/chair/wood/normal{ dir = 8 }, -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 1; name = "Chapel APC"; areastring = "/area/chapel/main"; @@ -34639,8 +34629,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 1; name = "Arrivals APC"; areastring = "/area/hallway/secondary/entry"; @@ -37387,7 +37376,7 @@ height = 24; id = "syndicate"; name = "syndicate infiltrator"; - port_angle = 0; + port_direction = 1; roundstart_move = "syndicate_away"; width = 18 }, @@ -39910,7 +39899,7 @@ height = 13; id = "ferry"; name = "ferry shuttle"; - port_angle = 0; + port_direction = 1; preferred_direction = 4; roundstart_move = "ferry_away"; width = 5 @@ -106004,4 +105993,4 @@ aaa aaa aaa aaa -"} +"} \ No newline at end of file diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index 66a9216882..2001495fac 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -297,7 +297,7 @@ height = 24; id = "syndicate"; name = "syndicate infiltrator"; - port_angle = 0; + port_direction = 1; roundstart_move = "syndicate_away"; width = 18 }, @@ -3325,8 +3325,7 @@ }, /area/security/prison) "ahJ" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 1; name = "Prison Wing APC"; pixel_x = 1; @@ -3804,8 +3803,7 @@ /obj/item/storage/box/firingpins, /obj/item/storage/box/firingpins, /obj/item/key/security, -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 4; name = "Armory APC"; pixel_x = 24 @@ -5369,8 +5367,7 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/power/apc{ - cell_type = 10000; +/obj/machinery/power/apc/highcap/ten_k{ dir = 4; name = "Brig APC"; pixel_x = 24 @@ -7656,7 +7653,7 @@ id = "pod1"; launch_status = 0; name = "monastery shuttle"; - port_angle = 180; + port_direction = 2; width = 5 }, /turf/open/floor/mineral/titanium/blue, @@ -9701,7 +9698,7 @@ height = 5; id = "laborcamp"; name = "labor camp shuttle"; - port_angle = 90; + port_direction = 4; width = 9 }, /obj/docking_port/stationary{ @@ -10810,7 +10807,6 @@ /area/crew_quarters/heads/captain) "axS" = ( /obj/machinery/power/apc{ - cell_type = 2500; dir = 1; name = "Captain's Office APC"; pixel_y = 24 @@ -11495,8 +11491,7 @@ /area/bridge) "azo" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/power/apc{ - cell_type = 10000; +/obj/machinery/power/apc/highcap/ten_k{ dir = 4; name = "Bridge APC"; areastring = "/area/bridge"; @@ -12401,8 +12396,7 @@ }, /area/ai_monitored/turret_protected/ai_upload) "aBx" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 1; name = "Upload APC"; areastring = "/area/ai_monitored/turret_protected/ai_upload"; @@ -12508,8 +12502,7 @@ /turf/open/floor/wood, /area/crew_quarters/heads/hop) "aBH" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 8; name = "Central Hall APC"; pixel_x = -25 @@ -17679,8 +17672,7 @@ }, /area/hallway/secondary/exit/departure_lounge) "aMO" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 1; name = "Departure Lounge APC"; areastring = "/area/hallway/secondary/exit/departure_lounge"; @@ -17841,8 +17833,7 @@ /area/crew_quarters/toilet/auxiliary) "aNe" = ( /obj/structure/cable, -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 2; name = "Auxiliary Restrooms APC"; pixel_y = -24 @@ -20209,7 +20200,6 @@ /area/quartermaster/storage) "aSl" = ( /obj/machinery/power/apc{ - cell_type = 2500; dir = 4; name = "Cargo Maintenance APC"; pixel_x = 24 @@ -20903,7 +20893,7 @@ dwidth = 4; height = 15; name = "Pubby emergency shuttle"; - port_angle = 90; + port_direction = 4; width = 18 }, /turf/open/floor/plating, @@ -26406,7 +26396,7 @@ height = 5; id = "mining"; name = "mining shuttle"; - port_angle = 90; + port_direction = 4; width = 7 }, /obj/docking_port/stationary{ @@ -32730,7 +32720,7 @@ height = 13; id = "ferry"; name = "ferry shuttle"; - port_angle = 0; + port_direction = 1; preferred_direction = 4; roundstart_move = "ferry_away"; width = 5 @@ -33661,8 +33651,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/power/apc{ - cell_type = 10000; +/obj/machinery/power/apc/highcap/ten_k{ dir = 1; name = "Research Lobby APC"; pixel_y = 25 @@ -33769,8 +33758,7 @@ /turf/closed/wall, /area/science/research) "bvL" = ( -/obj/machinery/power/apc{ - cell_type = 10000; +/obj/machinery/power/apc/highcap/ten_k{ dir = 1; name = "Research Division APC"; pixel_y = 25 @@ -34020,8 +34008,7 @@ icon_state = "0-4"; d2 = 4 }, -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 8; name = "Xenobiology APC"; pixel_x = -25 @@ -39331,8 +39318,7 @@ /turf/open/floor/plasteel/white, /area/medical/virology) "bGU" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 1; name = "Virology APC"; pixel_y = 24 @@ -43456,7 +43442,7 @@ dir = 2; network = list("SS13") }, -/obj/item/circuitboard/computer/shuttle/monastery_shuttle, +/obj/item/circuitboard/computer/monastery_shuttle, /turf/open/floor/plasteel/darkgreen, /area/storage/tech) "bQx" = ( @@ -46639,8 +46625,7 @@ amount = 50 }, /obj/item/stack/cable_coil, -/obj/machinery/power/apc{ - cell_type = 10000; +/obj/machinery/power/apc/highcap/ten_k{ dir = 8; name = "Engine Room APC"; areastring = "/area/engine/engine_smes"; @@ -47190,8 +47175,7 @@ /turf/open/floor/plating, /area/maintenance/department/engine) "bYG" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 8; name = "Engineering Maintenance APC"; pixel_x = -25; @@ -47588,8 +47572,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "bZc" = ( -/obj/machinery/power/apc{ - cell_type = 15000; +/obj/machinery/power/apc/highcap/fifteen_k{ dir = 4; name = "Engineering APC"; pixel_x = 28 @@ -52041,7 +52024,7 @@ id = "whiteship"; launch_status = 0; name = "White Ship"; - port_angle = 90; + port_direction = 4; preferred_direction = 1; roundstart_move = "whiteship_away"; timid = null; @@ -53310,8 +53293,7 @@ /turf/open/floor/circuit/telecomms/mainframe, /area/tcommsat/server) "cmI" = ( -/obj/machinery/power/apc{ - cell_type = 5000; +/obj/machinery/power/apc/highcap/five_k{ dir = 1; layer = 4; name = "Telecomms Server APC"; @@ -58378,6 +58360,42 @@ }, /turf/open/floor/plasteel/black, /area/chapel/office) +"cBN" = ( +/obj/effect/spawner/structure/window/shuttle, +/turf/open/floor/plating, +/area/shuttle/escape) +"cBO" = ( +/obj/effect/spawner/structure/window/shuttle, +/turf/open/floor/plating, +/area/shuttle/escape) +"cBP" = ( +/obj/effect/spawner/structure/window/shuttle, +/turf/open/floor/plating, +/area/shuttle/escape) +"cBQ" = ( +/obj/effect/spawner/structure/window/shuttle, +/turf/open/floor/plating, +/area/shuttle/escape) +"cBR" = ( +/obj/effect/spawner/structure/window/shuttle, +/turf/open/floor/plating, +/area/shuttle/escape) +"cBS" = ( +/obj/effect/spawner/structure/window/shuttle, +/turf/open/floor/plating, +/area/shuttle/escape) +"cBT" = ( +/obj/effect/spawner/structure/window/shuttle, +/turf/open/floor/plating, +/area/shuttle/escape) +"cBU" = ( +/obj/effect/spawner/structure/window/shuttle, +/turf/open/floor/plating, +/area/shuttle/escape) +"cBV" = ( +/obj/effect/spawner/structure/window/shuttle, +/turf/open/floor/plating, +/area/shuttle/escape) (1,1,1) = {" aaa @@ -72108,11 +72126,11 @@ aaa aaa aaa aaa -bVq -cBF -bVq -cBG -bVq +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -72356,20 +72374,20 @@ aaa aaa aaa aFS -aFT -aFT +cBO +cBP aKs aFS aFS -aFT -aFT +cBT +cBU aFS aKs -cBC -aOc -aPj -aOc -cBH +aFS +aKs +aFS +aFS +aFS aaa aaa aaa @@ -72616,17 +72634,17 @@ aFS aIs aJx aJx -aFT +cBR aMI aNZ aNZ aNZ aMI -cBD -aOd -aPk -aQq -cBI +aNZ +aMI +aNZ +aVJ +aWD aaa aaa aaa @@ -72879,11 +72897,11 @@ aIx aIx aIx aIx -cBE -aOc -aPl -aOc -cBJ +aIx +aIx +aIx +aVJ +aWD aaa aaa aaa @@ -73130,7 +73148,7 @@ aFS aIu aJy aKt -aFT +cBS aIx aOa aOa @@ -73895,19 +73913,19 @@ aaa aaa aaa aaa -aFT +cBN aGQ aHw aIw aIw -aFT +cBQ aIx aIx aOc aPj aOc aIx -aFT +cBV aMI aMI aMI @@ -95714,8 +95732,8 @@ ajv aju ajt alQ -alb -alb +cBt +cBt aiS anY apt @@ -95972,7 +95990,7 @@ akh alc alR amF -alb +cBt anm ajv ajv @@ -96229,7 +96247,7 @@ cBm cBp alS amG -alb +cBt aiS aiS aiS @@ -123913,4 +123931,4 @@ aaa aaa aaa aaa -"} +"} \ No newline at end of file diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index ca7c26625b..3e78a685dc 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -1,4 +1,4 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aa" = ( /turf/open/space/basic, /area/space) @@ -58,10 +58,7 @@ /obj/item/stack/medical/ointment{ heal_burn = 10 }, -/turf/open/floor/holofloor{ - icon_state = "asteroid_warn_side"; - dir = 8 - }, +/turf/open/floor/holofloor/asteroid, /area/holodeck/rec_center/bunker) "am" = ( /obj/structure/table/wood{ @@ -160,10 +157,7 @@ "aA" = ( /obj/structure/table, /obj/machinery/recharger, -/turf/open/floor/holofloor{ - icon_state = "asteroidfloor"; - dir = 8 - }, +/turf/open/floor/holofloor/asteroid, /area/holodeck/rec_center/bunker) "aB" = ( /obj/structure/table/wood, @@ -213,10 +207,7 @@ "aJ" = ( /obj/structure/table, /obj/item/gun/energy/laser, -/turf/open/floor/holofloor{ - icon_state = "asteroidfloor"; - dir = 8 - }, +/turf/open/floor/holofloor/asteroid, /area/holodeck/rec_center/bunker) "aK" = ( /obj/structure/chair/wood/normal{ @@ -360,10 +351,7 @@ /obj/item/stack/medical/bruise_pack{ heal_brute = 10 }, -/turf/open/floor/holofloor{ - icon_state = "asteroid_warn_side"; - dir = 8 - }, +/turf/open/floor/holofloor/asteroid, /area/holodeck/rec_center/bunker) "bf" = ( /obj/structure/table/wood, @@ -428,7 +416,6 @@ /obj/item/surgicaldrill, /turf/open/floor/holofloor{ icon_state = "white"; - dir = 9 }, /area/holodeck/rec_center/medical) "br" = ( @@ -436,7 +423,6 @@ /obj/item/hemostat, /turf/open/floor/holofloor{ icon_state = "white"; - dir = 1 }, /area/holodeck/rec_center/medical) "bs" = ( @@ -447,7 +433,6 @@ /obj/item/circular_saw, /turf/open/floor/holofloor{ icon_state = "white"; - dir = 1 }, /area/holodeck/rec_center/medical) "bt" = ( @@ -455,7 +440,6 @@ /obj/item/retractor, /turf/open/floor/holofloor{ icon_state = "white"; - dir = 1 }, /area/holodeck/rec_center/medical) "bu" = ( @@ -464,7 +448,6 @@ /obj/item/cautery, /turf/open/floor/holofloor{ icon_state = "white"; - dir = 5 }, /area/holodeck/rec_center/medical) "bv" = ( @@ -492,33 +475,21 @@ /turf/open/floor/holofloor/beach, /area/holodeck/rec_center/beach) "bz" = ( -/turf/open/floor/holofloor/basalt, /obj/structure/table, /obj/machinery/readybutton, -/turf/open/floor/holofloor{ - icon_state = "warningline"; - dir = 2 - }, +/turf/open/floor/holofloor/basalt, /area/holodeck/rec_center/thunderdome) "bA" = ( -/turf/open/floor/holofloor/basalt, /obj/structure/table, /obj/item/clothing/head/helmet/thunderdome, /obj/item/clothing/suit/armor/tdome/red, /obj/item/clothing/under/color/red, /obj/item/holo/esword/red, -/turf/open/floor/holofloor{ - icon_state = "warningline"; - dir = 2 - }, +/turf/open/floor/holofloor/basalt, /area/holodeck/rec_center/thunderdome) "bB" = ( -/turf/open/floor/holofloor/basalt, /obj/structure/table, -/turf/open/floor/holofloor{ - icon_state = "warningline"; - dir = 2 - }, +/turf/open/floor/holofloor/basalt, /area/holodeck/rec_center/thunderdome) "bC" = ( /obj/machinery/readybutton, @@ -558,7 +529,6 @@ /obj/item/razor, /turf/open/floor/holofloor{ icon_state = "white"; - dir = 8 }, /area/holodeck/rec_center/medical) "bJ" = ( @@ -569,7 +539,6 @@ "bK" = ( /turf/open/floor/holofloor{ icon_state = "white"; - dir = 4 }, /area/holodeck/rec_center/medical) "bL" = ( @@ -636,19 +605,18 @@ "bX" = ( /turf/open/floor/holofloor{ icon_state = "white"; - dir = 10 }, /area/holodeck/rec_center/medical) "bZ" = ( /obj/structure/table/optable, /turf/open/floor/holofloor{ - icon_state = "white" + icon_state = "white"; }, /area/holodeck/rec_center/medical) "ca" = ( /obj/machinery/computer/operating, /turf/open/floor/holofloor{ - icon_state = "white" + icon_state = "white"; }, /area/holodeck/rec_center/medical) "cb" = ( @@ -658,7 +626,6 @@ /obj/item/clothing/mask/surgical, /turf/open/floor/holofloor{ icon_state = "white"; - dir = 6 }, /area/holodeck/rec_center/medical) "cc" = ( @@ -701,7 +668,7 @@ dir = 1 }, /turf/open/floor/holofloor{ - icon_state = "white" + icon_state = "white"; }, /area/holodeck/rec_center/medical) "cj" = ( @@ -714,13 +681,11 @@ /obj/machinery/reagentgrinder, /turf/open/floor/holofloor{ icon_state = "white"; - dir = 9 }, /area/holodeck/rec_center/medical) "cl" = ( /turf/open/floor/holofloor{ icon_state = "white"; - dir = 5 }, /area/holodeck/rec_center/medical) "cm" = ( @@ -731,13 +696,13 @@ }, /obj/item/storage/box/beakers, /turf/open/floor/holofloor{ - icon_state = "white" + icon_state = "white"; }, /area/holodeck/rec_center/medical) "cn" = ( /obj/machinery/washing_machine, /turf/open/floor/holofloor{ - icon_state = "white" + icon_state = "white"; }, /area/holodeck/rec_center/medical) "co" = ( @@ -812,26 +777,24 @@ /obj/machinery/chem_master, /turf/open/floor/holofloor{ icon_state = "white"; - dir = 10 }, /area/holodeck/rec_center/medical) "cz" = ( /turf/open/floor/holofloor{ icon_state = "white"; - dir = 6 }, /area/holodeck/rec_center/medical) "cA" = ( /obj/structure/table/glass, /obj/item/device/healthanalyzer, /turf/open/floor/holofloor{ - icon_state = "white" + icon_state = "white"; }, /area/holodeck/rec_center/medical) "cB" = ( /obj/structure/closet/wardrobe/white, /turf/open/floor/holofloor{ - icon_state = "white" + icon_state = "white"; }, /area/holodeck/rec_center/medical) "cC" = ( @@ -948,7 +911,6 @@ }, /turf/open/floor/holofloor{ icon_state = "white"; - dir = 9 }, /area/holodeck/rec_center/medical) "cW" = ( @@ -962,7 +924,6 @@ }, /turf/open/floor/holofloor{ icon_state = "white"; - dir = 5 }, /area/holodeck/rec_center/medical) "cX" = ( @@ -971,7 +932,7 @@ }, /obj/machinery/computer/pandemic, /turf/open/floor/holofloor{ - icon_state = "white" + icon_state = "white"; }, /area/holodeck/rec_center/medical) "cY" = ( @@ -1004,7 +965,6 @@ "de" = ( /turf/open/floor/holofloor{ icon_state = "white"; - dir = 8 }, /area/holodeck/rec_center/medical) "df" = ( @@ -1017,13 +977,11 @@ /obj/machinery/door/window/westleft, /turf/open/floor/holofloor{ icon_state = "white"; - dir = 1 }, /area/holodeck/rec_center/medical) "dh" = ( /turf/open/floor/holofloor{ icon_state = "white"; - dir = 1 }, /area/holodeck/rec_center/medical) "di" = ( @@ -1037,7 +995,6 @@ }, /turf/open/floor/holofloor{ icon_state = "white"; - dir = 10 }, /area/holodeck/rec_center/medical) "dk" = ( @@ -1050,7 +1007,7 @@ density = 0 }, /turf/open/floor/holofloor{ - icon_state = "white" + icon_state = "white"; }, /area/holodeck/rec_center/medical) "dl" = ( @@ -1061,7 +1018,7 @@ dir = 1 }, /turf/open/floor/holofloor{ - icon_state = "white" + icon_state = "white"; }, /area/holodeck/rec_center/medical) "dm" = ( @@ -1069,7 +1026,7 @@ density = 0 }, /turf/open/floor/holofloor{ - icon_state = "white" + icon_state = "white"; }, /area/holodeck/rec_center/medical) "dn" = ( @@ -1078,7 +1035,6 @@ }, /turf/open/floor/holofloor{ icon_state = "white"; - dir = 6 }, /area/holodeck/rec_center/medical) "do" = ( @@ -1115,16 +1071,12 @@ }, /area/holodeck/rec_center/thunderdome) "dt" = ( -/turf/open/floor/holofloor/basalt, /obj/structure/table, /obj/item/clothing/head/helmet/thunderdome, /obj/item/clothing/suit/armor/tdome/green, /obj/item/clothing/under/color/green, /obj/item/holo/esword/green, -/turf/open/floor/holofloor{ - icon_state = "warningline"; - dir = 1 - }, +/turf/open/floor/holofloor/basalt, /area/holodeck/rec_center/thunderdome) "du" = ( /turf/open/floor/holofloor/basalt, @@ -1158,11 +1110,7 @@ /turf/open/floor/holofloor/plating, /area/holodeck/rec_center/refuel) "dz" = ( -/turf/open/floor/holofloor/grass, -/turf/open/floor/holofloor{ - icon_state = "warningline"; - dir = 2 - }, +/turf/open/floor/holofloor/plating, /area/holodeck/rec_center/spacechess) "dA" = ( /obj/item/banner/blue, @@ -1248,21 +1196,15 @@ }, /area/holodeck/rec_center/chapelcourt) "dM" = ( -/obj/machinery/conveyor/holodeck{ - dir = 5; - id = "holocoaster"; - movedir = null; - verted = -1 - }, -/turf/open/floor/holofloor/asteroid, -/area/holodeck/rec_center/rollercoaster) +/turf/open/floor/holofloor, +/area/holodeck/rec_center/school) "dN" = ( /obj/machinery/conveyor/holodeck{ dir = 8; id = "holocoaster" }, /turf/open/floor/holofloor/asteroid, -/area/holodeck/rec_center/rollercoaster) +/area/holodeck/rec_center/school) "dO" = ( /obj/machinery/conveyor/holodeck{ dir = 6; @@ -1271,7 +1213,7 @@ verted = -1 }, /turf/open/floor/holofloor/asteroid, -/area/holodeck/rec_center/rollercoaster) +/area/holodeck/rec_center/school) "dP" = ( /turf/open/floor/holofloor{ dir = 8; @@ -1287,7 +1229,6 @@ }, /turf/open/floor/holofloor{ icon_state = "white"; - dir = 9 }, /area/holodeck/rec_center/firingrange) "dR" = ( @@ -1296,7 +1237,6 @@ }, /turf/open/floor/holofloor{ icon_state = "white"; - dir = 1 }, /area/holodeck/rec_center/firingrange) "dS" = ( @@ -1308,7 +1248,6 @@ }, /turf/open/floor/holofloor{ icon_state = "white"; - dir = 5 }, /area/holodeck/rec_center/firingrange) "dT" = ( @@ -1502,10 +1441,13 @@ id = "holocoaster" }, /turf/open/floor/holofloor/asteroid, -/area/holodeck/rec_center/rollercoaster) +/area/holodeck/rec_center/school) "em" = ( -/turf/open/floor/holofloor/asteroid, -/area/holodeck/rec_center/rollercoaster) +/obj/structure/table/wood, +/obj/item/folder, +/obj/item/melee/classic_baton/telescopic, +/turf/open/floor/holofloor, +/area/holodeck/rec_center/school) "en" = ( /obj/machinery/conveyor/holodeck{ dir = 1; @@ -1513,7 +1455,7 @@ layer = 2.5 }, /turf/open/floor/holofloor/asteroid, -/area/holodeck/rec_center/rollercoaster) +/area/holodeck/rec_center/school) "eo" = ( /obj/structure/window/reinforced{ dir = 8 @@ -1638,7 +1580,7 @@ "eF" = ( /obj/item/shovel, /turf/open/floor/holofloor/asteroid, -/area/holodeck/rec_center/rollercoaster) +/area/holodeck/rec_center/school) "eG" = ( /obj/structure/window/reinforced{ dir = 8 @@ -1808,14 +1750,14 @@ name = "coaster car" }, /turf/open/floor/holofloor/asteroid, -/area/holodeck/rec_center/rollercoaster) +/area/holodeck/rec_center/school) "fg" = ( -/obj/machinery/conveyor_switch/oneway{ - convdir = -1; - id = "holocoaster" - }, -/turf/open/floor/holofloor/asteroid, -/area/holodeck/rec_center/rollercoaster) +/obj/structure/table, +/obj/item/paper, +/obj/item/pen, +/obj/item/clothing/under/schoolgirl/orange, +/turf/open/floor/holofloor, +/area/holodeck/rec_center/school) "fh" = ( /obj/structure/window/reinforced, /turf/open/floor/holofloor/plating, @@ -1896,13 +1838,13 @@ /turf/open/floor/holofloor/plating, /area/holodeck/rec_center/kobayashi) "fr" = ( -/obj/structure/closet/crate/miningcar{ - can_buckle = 1; - desc = "Great for mining!"; - name = "minecart" - }, -/turf/open/floor/holofloor/asteroid, -/area/holodeck/rec_center/rollercoaster) +/obj/structure/table, +/obj/item/paper, +/obj/item/pen, +/obj/item/clothing/under/schoolgirl, +/obj/item/toy/katana, +/turf/open/floor/holofloor, +/area/holodeck/rec_center/school) "fs" = ( /obj/structure/table/reinforced, /obj/machinery/recharger, @@ -2038,14 +1980,14 @@ verted = -1 }, /turf/open/floor/holofloor/asteroid, -/area/holodeck/rec_center/rollercoaster) +/area/holodeck/rec_center/school) "fI" = ( /obj/machinery/conveyor/holodeck{ dir = 4; id = "holocoaster" }, /turf/open/floor/holofloor/asteroid, -/area/holodeck/rec_center/rollercoaster) +/area/holodeck/rec_center/school) "fJ" = ( /obj/machinery/conveyor/holodeck{ dir = 10; @@ -2053,7 +1995,7 @@ verted = -1 }, /turf/open/floor/holofloor/asteroid, -/area/holodeck/rec_center/rollercoaster) +/area/holodeck/rec_center/school) "fK" = ( /obj/item/target, /obj/item/target/clown, @@ -3081,7 +3023,7 @@ "je" = ( /obj/machinery/conveyor{ dir = 1; - id = "QMLoad2"; + id = "XCCQMLoad2"; movedir = 2 }, /obj/effect/turf_decal/stripes/line{ @@ -3092,7 +3034,7 @@ "jf" = ( /obj/machinery/conveyor_switch/oneway{ convdir = 1; - id = "QMLoad2"; + id = "XCCQMLoad2"; pixel_x = 6 }, /turf/open/floor/plasteel/brown{ @@ -3149,13 +3091,13 @@ /obj/machinery/door/poddoor{ density = 1; icon_state = "closed"; - id = "QMLoaddoor2"; + id = "XCCQMLoaddoor2"; name = "Supply Dock Loading Door"; opacity = 1 }, /obj/machinery/conveyor{ dir = 4; - id = "QMLoad2"; + id = "XCCQMLoad2"; movedir = 8 }, /obj/effect/turf_decal/stripes/end{ @@ -3167,7 +3109,7 @@ /obj/structure/plasticflaps, /obj/machinery/conveyor{ dir = 4; - id = "QMLoad2"; + id = "XCCQMLoad2"; movedir = 8 }, /obj/effect/turf_decal/stripes/line{ @@ -3179,13 +3121,13 @@ /obj/machinery/door/poddoor{ density = 1; icon_state = "closed"; - id = "QMLoaddoor2"; + id = "XCCQMLoaddoor2"; name = "Supply Dock Loading Door"; opacity = 1 }, /obj/machinery/conveyor{ dir = 4; - id = "QMLoad2"; + id = "XCCQMLoad2"; movedir = 8 }, /obj/effect/turf_decal/stripes/line{ @@ -3196,7 +3138,7 @@ "jo" = ( /obj/machinery/conveyor{ dir = 1; - id = "QMLoad2"; + id = "XCCQMLoad2"; movedir = 2 }, /obj/effect/turf_decal/stripes/end, @@ -3266,7 +3208,7 @@ /area/centcom/control) "jz" = ( /obj/machinery/button/door{ - id = "QMLoaddoor"; + id = "XCCQMLoaddoor"; layer = 4; name = "Loading Doors"; pixel_x = -27; @@ -3274,7 +3216,7 @@ }, /obj/machinery/button/door{ dir = 2; - id = "QMLoaddoor2"; + id = "XCCQMLoaddoor2"; layer = 4; name = "Loading Doors"; pixel_x = -27; @@ -3353,13 +3295,13 @@ /obj/machinery/door/poddoor{ density = 1; icon_state = "closed"; - id = "QMLoaddoor"; + id = "XCCQMLoaddoor"; name = "Supply Dock Loading Door"; opacity = 1 }, /obj/machinery/conveyor{ dir = 8; - id = "QMLoad" + id = "XCCQMLoad" }, /obj/effect/turf_decal/stripes/end{ dir = 8 @@ -3370,7 +3312,7 @@ /obj/structure/plasticflaps, /obj/machinery/conveyor{ dir = 8; - id = "QMLoad" + id = "XCCQMLoad" }, /obj/effect/turf_decal/stripes/line{ dir = 2 @@ -3381,13 +3323,13 @@ /obj/machinery/door/poddoor{ density = 1; icon_state = "closed"; - id = "QMLoaddoor"; + id = "XCCQMLoaddoor"; name = "Supply Dock Loading Door"; opacity = 1 }, /obj/machinery/conveyor{ dir = 8; - id = "QMLoad" + id = "XCCQMLoad" }, /obj/effect/turf_decal/stripes/line{ dir = 2 @@ -3397,7 +3339,7 @@ "jM" = ( /obj/machinery/conveyor{ dir = 8; - id = "QMLoad" + id = "XCCQMLoad" }, /obj/effect/turf_decal/stripes/end{ dir = 1 @@ -3418,7 +3360,7 @@ "jP" = ( /obj/machinery/conveyor{ dir = 1; - id = "QMLoad"; + id = "XCCQMLoad"; movedir = 2 }, /obj/effect/turf_decal/stripes/line{ @@ -3429,7 +3371,7 @@ "jQ" = ( /obj/machinery/conveyor_switch/oneway{ convdir = 1; - id = "QMLoad"; + id = "XCCQMLoad"; pixel_x = 6 }, /turf/open/floor/plasteel/brown{ @@ -8091,7 +8033,7 @@ /obj/docking_port/mobile/assault_pod{ dwidth = 3; name = "steel rain"; - port_angle = 90; + port_direction = 4; preferred_direction = 4 }, /turf/open/floor/plating, @@ -13647,6 +13589,80 @@ }, /turf/open/floor/plating/asteroid/snow/airless, /area/syndicate_mothership) +"QH" = ( +/obj/structure/table/wood, +/obj/item/toy/crayon/white, +/turf/open/floor/holofloor, +/area/holodeck/rec_center/school) +"QI" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/food/snacks/grown/apple, +/turf/open/floor/holofloor, +/area/holodeck/rec_center/school) +"QJ" = ( +/obj/structure/table, +/obj/item/paper, +/obj/item/pen, +/obj/item/clothing/under/schoolgirl, +/turf/open/floor/holofloor, +/area/holodeck/rec_center/school) +"QK" = ( +/obj/structure/table, +/obj/item/paper, +/obj/item/pen, +/obj/item/clothing/under/schoolgirl/green, +/turf/open/floor/holofloor, +/area/holodeck/rec_center/school) +"QL" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/holofloor, +/area/holodeck/rec_center/school) +"QM" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/holofloor, +/area/holodeck/rec_center/school) +"QN" = ( +/obj/structure/table, +/obj/item/paper, +/obj/item/pen, +/obj/item/clothing/under/schoolgirl/red, +/turf/open/floor/holofloor, +/area/holodeck/rec_center/school) +"QO" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/holofloor, +/area/holodeck/rec_center/school) +"QP" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/holofloor, +/area/holodeck/rec_center/school) +"QQ" = ( +/obj/structure/table, +/obj/item/paper, +/obj/item/pen, +/obj/item/clothing/under/schoolgirl/green, +/turf/open/floor/holofloor, +/area/holodeck/rec_center/school) +"QR" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/holofloor, +/area/holodeck/rec_center/school) +"QS" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/holofloor, +/area/holodeck/rec_center/school) (1,1,1) = {" aa @@ -40574,7 +40590,7 @@ AR Ay Ay Ay -CN +CL CV CV zV @@ -69964,7 +69980,7 @@ eK eL fi fv -fC +dz fN aa aa @@ -70221,7 +70237,7 @@ eL eK fj fw -fC +dz fN aa aa @@ -70478,7 +70494,7 @@ eK eL fi fx -fC +dz fN aa aa @@ -70704,16 +70720,16 @@ aa "} (223,1,1) = {" ac -ak -az -az -ak -az -az -ak -az -az -ak +aj +aj +aj +aj +aj +aj +aj +aj +aj +aj bl bp bH @@ -70735,7 +70751,7 @@ eL eK fj fy -fC +dz fN ab ab @@ -70964,10 +70980,10 @@ ac al aA aJ -ak +aj aJ aJ -ak +aj aJ aA be @@ -70992,7 +71008,7 @@ eK eL fi fv -fC +dz fN ab fR @@ -71488,13 +71504,13 @@ aR bl bq bI -bX -bJ +cl +cl ck cy -bJ +cl cV -de +cl dj ac dA @@ -71744,14 +71760,14 @@ bc bf bl br -bJ -bJ -bJ cl -cz -bJ +cl +cl +cl +cl +cl cW -df +cl dk ac dB @@ -72001,12 +72017,12 @@ bb bg bl bs -bJ +cl bZ ci cm cA -bJ +cl cX dg dl @@ -72258,14 +72274,14 @@ bb bg bl bt -bJ +cl ca ci -bJ -bJ -bJ -bJ -dh +cl +cl +cl +cl +cl dm ac dD @@ -72515,13 +72531,13 @@ bd bh bl bu -bK +cl cb ci cn cB -bJ -bJ +cl +cl cl dn ac @@ -76121,18 +76137,18 @@ cG bQ bQ bQ -ds +bB bl dM -el -el -el -el -ff -ff -ff -ff -fH +dM +dM +dM +dM +dM +dM +dM +dM +dM fN Ij Il @@ -76380,16 +76396,16 @@ bQ bQ dt bl -dN -em -eF -em +dM em +dM +QJ +QL fg -em -em -em -fI +QO +QQ +QR +dM fN fQ fQ @@ -76637,16 +76653,16 @@ bQ bQ dt bl -dN -em -em -em -em -em -em -em -em -fI +dM +QH +dM +dM +dM +dM +dM +dM +dM +dM fN fP fV @@ -76894,16 +76910,16 @@ bQ bQ dt bl -dN -em -em -em -em -em -em +dM +QI +dM +QK +QM +QN +QP fr -em -fI +QS +dM fN ab fT @@ -77149,18 +77165,18 @@ cG bQ bQ bQ -du +bz bl -dO -en -en -en -en -en -en -en -en -fJ +dM +dM +dM +dM +dM +dM +dM +dM +dM +dM fN ab ab @@ -79182,4 +79198,4 @@ aa aa HT HT -"} +"} \ No newline at end of file diff --git a/_maps/shuttles/cargo_birdboat.dmm b/_maps/shuttles/cargo_birdboat.dmm index f05af797d1..0644e9dd70 100644 --- a/_maps/shuttles/cargo_birdboat.dmm +++ b/_maps/shuttles/cargo_birdboat.dmm @@ -1,273 +1,591 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/closed/wall/mineral/titanium/overspace, -/area/shuttle/supply) -"b" = ( +"aa" = ( +/turf/open/space, +/area/space) +"ab" = ( /turf/closed/wall/mineral/titanium, -/area/shuttle/supply) -"c" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/supply) -"d" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/supply) -"e" = ( -/obj/machinery/conveyor{ - dir = 2; - id = "cargoshuttle"; - name = "cargo shuttle conveyor belt" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/supply) -"f" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "cargoshuttle"; - name = "cargo shuttle conveyor belt" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/supply) -"g" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "cargoshuttle"; - name = "cargo shuttle conveyor belt" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/supply) -"h" = ( -/obj/machinery/conveyor{ - dir = 9; - id = "cargoshuttle"; - name = "cargo shuttle conveyor belt" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/supply) -"i" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "cargoshuttle"; - name = "cargo shuttle conveyor belt" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/supply) -"j" = ( -/obj/machinery/conveyor{ - dir = 10; - id = "cargoshuttle"; - name = "cargo shuttle conveyor belt" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/supply) -"k" = ( -/obj/machinery/conveyor{ - dir = 6; - id = "cargoshuttle"; - name = "cargo shuttle conveyor belt" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/supply) -"l" = ( -/obj/machinery/door/poddoor{ - id = "QMLoaddoor2"; - name = "supply dock loading door" - }, -/obj/machinery/conveyor{ - dir = 8; - id = "cargoshuttle"; - name = "cargo shuttle conveyor belt" - }, +/area/shuttle/escape) +"ac" = ( +/obj/effect/spawner/structure/window/shuttle, /turf/open/floor/plating, -/area/shuttle/supply) -"m" = ( +/area/shuttle/escape) +"ad" = ( +/obj/structure/table, +/obj/item/scalpel, +/obj/item/retractor{ + pixel_y = 5 + }, +/obj/item/hemostat, +/turf/open/floor/plasteel/white, +/area/shuttle/escape) +"ae" = ( +/obj/structure/table, +/obj/item/cautery, +/obj/item/surgicaldrill, +/obj/item/circular_saw{ + pixel_y = 9 + }, +/turf/open/floor/plasteel/white, +/area/shuttle/escape) +"af" = ( +/turf/open/floor/plasteel/white, +/area/shuttle/escape) +"ag" = ( +/obj/structure/shuttle/engine/propulsion/right{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/shuttle/escape) +"ah" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/escape) +"ai" = ( +/obj/machinery/computer/emergency_shuttle, /turf/open/floor/mineral/titanium/blue, -/area/shuttle/supply) -"n" = ( -/turf/open/floor/mineral/titanium, -/area/shuttle/supply) -"o" = ( -/obj/machinery/door/airlock/titanium{ - name = "Supply Shuttle Airlock"; - req_access_txt = "31" +/area/shuttle/escape) +"aj" = ( +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/escape) +"ak" = ( +/obj/item/twohanded/required/kirbyplants{ + icon_state = "plant-22" }, -/turf/open/floor/plating, -/area/shuttle/supply) -"p" = ( -/obj/machinery/button/door{ - dir = 2; - id = "QMLoaddoor2"; - name = "Loading Doors"; - pixel_x = 24; - pixel_y = 8 - }, -/obj/machinery/button/door{ - id = "QMLoaddoor"; - name = "Loading Doors"; - pixel_x = 24; - pixel_y = -8 - }, -/obj/machinery/conveyor_switch/oneway{ - id = "cargoshuttle" +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/escape) +"al" = ( +/obj/structure/chair, +/turf/open/floor/mineral/plastitanium/brig, +/area/shuttle/escape) +"am" = ( +/obj/structure/chair, +/obj/machinery/light{ + dir = 1 }, +/turf/open/floor/mineral/plastitanium/brig, +/area/shuttle/escape) +"an" = ( +/obj/structure/table/optable, +/obj/item/surgical_drapes, +/turf/open/floor/plasteel/white, +/area/shuttle/escape) +"ao" = ( /obj/machinery/light{ dir = 4 }, -/turf/open/floor/mineral/titanium, -/area/shuttle/supply) -"q" = ( -/obj/machinery/door/airlock/titanium{ - name = "Supply Shuttle Airlock"; - req_access_txt = "31" +/turf/open/floor/plasteel/white, +/area/shuttle/escape) +"ap" = ( +/obj/structure/shuttle/engine/propulsion{ + dir = 4 }, -/obj/docking_port/mobile/supply{ - dwidth = 3; - width = 10; - timid = 1 - }, -/turf/open/floor/plating, -/area/shuttle/supply) -"r" = ( -/obj/machinery/door/poddoor{ - id = "QMLoaddoor"; - name = "supply dock loading door" - }, -/obj/machinery/conveyor{ - dir = 4; - id = "cargoshuttle"; - name = "cargo shuttle conveyor belt" - }, -/turf/open/floor/plating, -/area/shuttle/supply) -"s" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/shuttle/supply) -"t" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/supply) -"u" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/shuttle/engine/heater, /turf/open/floor/plating/airless, -/area/shuttle/supply) -"v" = ( -/turf/closed/wall/mineral/titanium, -/area/shuttle/supply) -"w" = ( -/turf/open/space, -/area/space) -"x" = ( -/obj/structure/shuttle/engine/propulsion/burst/left, -/turf/open/floor/plating/airless, -/area/shuttle/supply) -"y" = ( -/obj/structure/shuttle/engine/propulsion, -/turf/open/floor/plating/airless, -/area/shuttle/supply) -"z" = ( -/obj/structure/shuttle/engine/propulsion/burst/right, -/turf/open/floor/plating/airless, -/area/shuttle/supply) -"A" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "cargoshuttle"; - name = "cargo shuttle conveyor belt" - }, -/obj/machinery/light{ - dir = 1 - }, +/area/shuttle/escape) +"aq" = ( +/obj/machinery/computer/communications, /turf/open/floor/mineral/titanium/blue, -/area/shuttle/supply) -"B" = ( -/obj/machinery/light{ +/area/shuttle/escape) +"ar" = ( +/obj/structure/chair{ dir = 8 }, /turf/open/floor/mineral/titanium/blue, -/area/shuttle/supply) +/area/shuttle/escape) +"as" = ( +/obj/machinery/door/airlock/glass_command{ + name = "bridge door"; + req_access_txt = "19" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/escape) +"at" = ( +/turf/open/floor/mineral/plastitanium/brig, +/area/shuttle/escape) +"au" = ( +/obj/structure/shuttle/engine/propulsion/left{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/shuttle/escape) +"av" = ( +/obj/machinery/light, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/escape) +"aw" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = -32 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shuttle/escape) +"ax" = ( +/obj/structure/table, +/obj/machinery/recharger{ + active_power_usage = 0; + idle_power_usage = 0; + pixel_y = 4; + use_power = 0 + }, +/turf/open/floor/mineral/plastitanium/brig, +/area/shuttle/escape) +"ay" = ( +/obj/structure/table, +/obj/item/storage/box/handcuffs, +/turf/open/floor/mineral/plastitanium/brig, +/area/shuttle/escape) +"az" = ( +/obj/machinery/door/airlock/glass_security{ + name = "security airlock"; + req_access_txt = "63" + }, +/turf/open/floor/mineral/plastitanium/brig, +/area/shuttle/escape) +"aA" = ( +/obj/machinery/door/airlock/glass, +/turf/open/floor/plasteel/white, +/area/shuttle/escape) +"aB" = ( +/obj/item/twohanded/required/kirbyplants{ + icon_state = "plant-21"; + layer = 4.1 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/escape) +"aC" = ( +/turf/open/floor/mineral/titanium, +/area/shuttle/escape) +"aD" = ( +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"aE" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"aF" = ( +/obj/structure/table, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"aG" = ( +/obj/machinery/door/airlock/titanium, +/turf/open/floor/mineral/titanium, +/area/shuttle/escape) +"aH" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"aI" = ( +/obj/structure/table, +/obj/item/reagent_containers/food/snacks/boiledspaghetti{ + name = "pasghetti"; + pixel_x = 4; + pixel_y = 7 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"aJ" = ( +/obj/machinery/light/small, +/turf/open/floor/mineral/titanium, +/area/shuttle/escape) +"aK" = ( +/obj/machinery/door/airlock/titanium, +/obj/docking_port/mobile/emergency{ + dheight = 0; + dir = 8; + dwidth = 6; + height = 18; + port_direction = 4; + width = 14; + timid = 1; + name = "Birdboat emergency escape shuttle" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/escape) +"aL" = ( +/obj/structure/table, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"aM" = ( +/obj/structure/table, +/obj/item/reagent_containers/food/snacks/chocolatebar, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"aN" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/structure/window/reinforced, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"aO" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/structure/window/reinforced, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"aP" = ( +/obj/structure/chair, +/obj/structure/window/reinforced{ + dir = 1; + pixel_y = 2 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"aQ" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -27 + }, +/turf/open/floor/plasteel/white, +/area/shuttle/escape) +"aR" = ( +/obj/structure/table/glass, +/obj/item/storage/firstaid/fire{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/storage/firstaid/toxin, +/turf/open/floor/plasteel/white, +/area/shuttle/escape) +"aS" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"aT" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/light, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"aU" = ( +/obj/structure/table/glass, +/obj/item/storage/firstaid/brute{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/storage/firstaid/brute, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/shuttle/escape) +"aV" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = -32 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/escape) +"aW" = ( +/obj/structure/chair, +/turf/open/floor/plasteel/black, +/area/shuttle/escape) +"aX" = ( +/obj/machinery/sleeper{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/shuttle/escape) +"aY" = ( +/obj/structure/table/glass, +/obj/item/defibrillator/loaded, +/turf/open/floor/plasteel/white, +/area/shuttle/escape) (1,1,1) = {" -b -b -b -b -b -b -b -b -b -w +aa +aa +ab +ab +ac +ab +ac +ac +ac +ac +ac +ab +aa +aa "} (2,1,1) = {" -b -e -g -e -m -B -m -g -b -x +aa +ab +ah +aq +ak +ac +aB +aH +aH +aH +aB +ah +ab +aa "} (3,1,1) = {" -b -f -g -f -m -m -m -g -u -y +aa +ab +ai +ar +aj +as +aC +aC +aC +aC +aC +aS +ab +aa "} (4,1,1) = {" -b -A -g -f -m -m -m -g -u -y +aa +ac +aj +aj +av +ab +aD +aD +aL +aC +aC +aS +ab +aa "} (5,1,1) = {" -b -f -h -j -m -m -m -g -u -y +aa +ac +aj +aj +aw +ab +aE +aE +aM +aC +aC +aS +ab +aa "} (6,1,1) = {" -b -f -i -k -n -p -n -g -b -z +aa +ab +ak +aj +ak +ab +aF +aI +aL +aC +aC +aT +ah +ab "} (7,1,1) = {" -b -b -b -l -o -b -q -r -b -w +aa +ab +ab +as +ac +ab +aC +aC +aC +aC +aC +aC +aB +ab "} +(8,1,1) = {" +aa +ab +al +at +at +ac +aB +aC +aC +aC +aC +aC +aV +ab +"} +(9,1,1) = {" +aa +ab +al +at +at +az +aC +aC +aN +aP +aC +aC +aW +ac +"} +(10,1,1) = {" +aa +ab +am +at +at +ac +aC +aC +aN +aP +aC +aC +aW +ac +"} +(11,1,1) = {" +aa +ab +al +at +ax +ab +aC +aC +aN +aP +aC +aC +aW +ac +"} +(12,1,1) = {" +aa +ab +al +at +ay +ab +aC +aC +aO +aP +aC +aC +aB +ab +"} +(13,1,1) = {" +ab +ab +ab +ab +ab +ah +aC +aC +ah +ab +aA +ac +ab +ab +"} +(14,1,1) = {" +ab +ad +an +af +af +aA +aC +aC +aA +aQ +af +af +aX +ab +"} +(15,1,1) = {" +ab +ae +af +af +af +aA +aC +aC +aA +af +af +af +af +ab +"} +(16,1,1) = {" +ab +af +ao +af +ab +ab +aG +aG +ab +ab +aR +aU +aY +ab +"} +(17,1,1) = {" +ab +ab +ab +ab +ab +ab +aC +aJ +ab +ab +ab +ab +ab +ab +"} +(18,1,1) = {" +ab +ag +ap +au +ab +ab +aG +aK +ab +ab +ag +ap +au +ab +"} \ No newline at end of file diff --git a/_maps/shuttles/emergency_birdboat.dmm b/_maps/shuttles/emergency_birdboat.dmm index dd4ffeac54..0644e9dd70 100644 --- a/_maps/shuttles/emergency_birdboat.dmm +++ b/_maps/shuttles/emergency_birdboat.dmm @@ -198,7 +198,7 @@ dir = 8; dwidth = 6; height = 18; - port_angle = 90; + port_direction = 4; width = 14; timid = 1; name = "Birdboat emergency escape shuttle" @@ -588,4 +588,4 @@ ag ap au ab -"} +"} \ No newline at end of file diff --git a/_maps/shuttles/emergency_cere.dmm b/_maps/shuttles/emergency_cere.dmm index 0aaccabb3e..887a43aa69 100644 --- a/_maps/shuttles/emergency_cere.dmm +++ b/_maps/shuttles/emergency_cere.dmm @@ -540,7 +540,7 @@ dwidth = 15; height = 20; name = "Cere emergency shuttle"; - port_angle = 90; + port_direction = 4; preferred_direction = 2; width = 42 }, @@ -2075,4 +2075,4 @@ aa aa aa aa -"} +"} \ No newline at end of file diff --git a/_maps/shuttles/emergency_delta.dmm b/_maps/shuttles/emergency_delta.dmm index 48cd143c44..0b535fe457 100644 --- a/_maps/shuttles/emergency_delta.dmm +++ b/_maps/shuttles/emergency_delta.dmm @@ -444,7 +444,7 @@ name = "Delta emergency shuttle"; width = 30; preferred_direction = 2; - port_angle = 90 + port_direction = 4 }, /turf/open/floor/plating, /area/shuttle/escape) @@ -1669,4 +1669,4 @@ aa aa aa aa -"} +"} \ No newline at end of file diff --git a/_maps/shuttles/emergency_pubby.dmm b/_maps/shuttles/emergency_pubby.dmm index 5e14226d56..8a5f05cc01 100644 --- a/_maps/shuttles/emergency_pubby.dmm +++ b/_maps/shuttles/emergency_pubby.dmm @@ -279,7 +279,7 @@ dwidth = 4; height = 15; name = "Pubby emergency shuttle"; - port_angle = 90; + port_direction = 4; width = 18 }, /turf/open/floor/plating, @@ -638,4 +638,4 @@ ab ab ab aa -"} +"} \ No newline at end of file diff --git a/_maps/shuttles/ferry_base.dmm b/_maps/shuttles/ferry_base.dmm index f227228b85..8e33236727 100644 --- a/_maps/shuttles/ferry_base.dmm +++ b/_maps/shuttles/ferry_base.dmm @@ -57,7 +57,7 @@ id = "ferry"; name = "ferry shuttle"; roundstart_move = "ferry_away"; - port_angle = 180; + port_direction = 2; width = 5; timid = 1 }, @@ -170,4 +170,4 @@ d m d c -"} +"} \ No newline at end of file diff --git a/_maps/shuttles/ferry_lighthouse.dmm b/_maps/shuttles/ferry_lighthouse.dmm index d7880e1164..87f3d30e0e 100644 --- a/_maps/shuttles/ferry_lighthouse.dmm +++ b/_maps/shuttles/ferry_lighthouse.dmm @@ -184,7 +184,7 @@ name = "The Lighthouse"; roundstart_move = "ferry_away"; timid = 1; - port_angle = 180; + port_direction = 2; width = 16 }, /turf/open/floor/mineral/titanium/blue, diff --git a/_maps/shuttles/ferry_meat.dmm b/_maps/shuttles/ferry_meat.dmm index 6384f0e057..bb21220f03 100644 --- a/_maps/shuttles/ferry_meat.dmm +++ b/_maps/shuttles/ferry_meat.dmm @@ -113,7 +113,7 @@ id = "ferry"; name = "ferry shuttle"; roundstart_move = "ferry_away"; - port_angle = 180; + port_direction = 2; width = 5; timid = 1 }, diff --git a/_maps/shuttles/whiteship_box.dmm b/_maps/shuttles/whiteship_box.dmm index a52eb6aa36..338212e727 100644 --- a/_maps/shuttles/whiteship_box.dmm +++ b/_maps/shuttles/whiteship_box.dmm @@ -18,7 +18,7 @@ id = "whiteship"; launch_status = 0; name = "NT Medical Ship"; - port_angle = -90; + port_direction = 8; preferred_direction = 4; roundstart_move = "whiteship_away"; timid = null; diff --git a/_maps/shuttles/whiteship_cere.dmm b/_maps/shuttles/whiteship_cere.dmm index ce705d1850..913a9e65b8 100644 --- a/_maps/shuttles/whiteship_cere.dmm +++ b/_maps/shuttles/whiteship_cere.dmm @@ -21,7 +21,7 @@ id = "whiteship"; launch_status = 0; name = "NT Recovery White-Ship"; - port_angle = -90; + port_direction = 8; preferred_direction = 1; roundstart_move = "whiteship_away"; width = 16 diff --git a/_maps/shuttles/whiteship_meta.dmm b/_maps/shuttles/whiteship_meta.dmm index 67847a4b9f..7ac0a05c54 100644 --- a/_maps/shuttles/whiteship_meta.dmm +++ b/_maps/shuttles/whiteship_meta.dmm @@ -27,7 +27,7 @@ id = "whiteship"; launch_status = 0; name = "NT Recovery White-Ship"; - port_angle = -90; + port_direction = 8; preferred_direction = 4; roundstart_move = "whiteship_away"; width = 27 diff --git a/_maps/shuttles/whiteship_pubby.dmm b/_maps/shuttles/whiteship_pubby.dmm index 49c4f1dde0..e67318005c 100644 --- a/_maps/shuttles/whiteship_pubby.dmm +++ b/_maps/shuttles/whiteship_pubby.dmm @@ -92,7 +92,7 @@ id = "whiteship"; launch_status = 0; name = "White Ship"; - port_angle = 90; + port_direction = 4; preferred_direction = 1; roundstart_move = "whiteship_away"; timid = 1; diff --git a/code/__DEFINES/maps.dm b/code/__DEFINES/maps.dm index 084cc7d1ab..5e7ee3a468 100644 --- a/code/__DEFINES/maps.dm +++ b/code/__DEFINES/maps.dm @@ -35,7 +35,7 @@ Last space-z level = empty //zlevel defines, can be overridden for different maps in the appropriate _maps file. #define ZLEVEL_CENTCOM 1 -#define ZLEVEL_STATION 2 +#define ZLEVEL_STATION_PRIMARY 2 #define ZLEVEL_MINING 5 #define ZLEVEL_LAVALAND 5 #define ZLEVEL_EMPTY_SPACE 12 diff --git a/code/__HELPERS/priority_announce.dm b/code/__HELPERS/priority_announce.dm index d3b9580f37..0ffd8d8580 100644 --- a/code/__HELPERS/priority_announce.dm +++ b/code/__HELPERS/priority_announce.dm @@ -39,7 +39,7 @@ priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') for(var/obj/machinery/computer/communications/C in GLOB.machines) - if(!(C.stat & (BROKEN|NOPOWER)) && C.z == ZLEVEL_STATION) + if(!(C.stat & (BROKEN|NOPOWER)) && (C.z in GLOB.station_z_levels)) var/obj/item/paper/P = new /obj/item/paper(C.loc) P.name = "paper - '[title]'" P.info = text diff --git a/code/_globalvars/lists/mapping.dm b/code/_globalvars/lists/mapping.dm index 1581c904b9..a2d30b1528 100644 --- a/code/_globalvars/lists/mapping.dm +++ b/code/_globalvars/lists/mapping.dm @@ -1,55 +1,57 @@ -#define Z_NORTH 1 -#define Z_EAST 2 -#define Z_SOUTH 3 -#define Z_WEST 4 - +#define Z_NORTH 1 +#define Z_EAST 2 +#define Z_SOUTH 3 +#define Z_WEST 4 + GLOBAL_LIST_INIT(cardinals, list(NORTH, SOUTH, EAST, WEST)) -GLOBAL_LIST_INIT(alldirs, list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)) -GLOBAL_LIST_INIT(diagonals, list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)) - -//This list contains the z-level numbers which can be accessed via space travel and the percentile chances to get there. -//(Exceptions: extended, sandbox and nuke) -Errorage -//Was list("3" = 30, "4" = 70). -//Spacing should be a reliable method of getting rid of a body -- Urist. -//Go away Urist, I'm restoring this to the longer list. ~Errorage -GLOBAL_LIST_INIT(accessable_z_levels, list(1,3,4,5,6,7)) //Keep this to six maps, repeating z-levels is ok if needed - -GLOBAL_LIST(global_map) - //list/global_map = list(list(1,5),list(4,3))//an array of map Z levels. - //Resulting sector map looks like - //|_1_|_4_| - //|_5_|_3_| - // - //1 - SS13 - //4 - Derelict - //3 - AI satellite - //5 - empty space - -GLOBAL_LIST_EMPTY(landmarks_list) //list of all landmarks created -GLOBAL_LIST_EMPTY(start_landmarks_list) //list of all spawn points created -GLOBAL_LIST_EMPTY(department_security_spawns) //list of all department security spawns -GLOBAL_LIST_EMPTY(generic_event_spawns) //list of all spawns for events - -GLOBAL_LIST_EMPTY(wizardstart) -GLOBAL_LIST_EMPTY(newplayer_start) -GLOBAL_LIST_EMPTY(prisonwarp) //prisoners go to these -GLOBAL_LIST_EMPTY(holdingfacility) //captured people go here -GLOBAL_LIST_EMPTY(xeno_spawn)//Aliens spawn at these. -GLOBAL_LIST_EMPTY(tdome1) -GLOBAL_LIST_EMPTY(tdome2) -GLOBAL_LIST_EMPTY(tdomeobserve) -GLOBAL_LIST_EMPTY(tdomeadmin) -GLOBAL_LIST_EMPTY(prisonwarped) //list of players already warped -GLOBAL_LIST_EMPTY(blobstart) -GLOBAL_LIST_EMPTY(secequipment) -GLOBAL_LIST_EMPTY(deathsquadspawn) -GLOBAL_LIST_EMPTY(emergencyresponseteamspawn) -GLOBAL_LIST_EMPTY(ruin_landmarks) - - //away missions -GLOBAL_LIST_EMPTY(awaydestinations) //a list of landmarks that the warpgate can take you to - - //used by jump-to-area etc. Updated by area/updateName() -GLOBAL_LIST_EMPTY(sortedAreas) - -GLOBAL_LIST_EMPTY(all_abstract_markers) \ No newline at end of file +GLOBAL_LIST_INIT(alldirs, list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)) +GLOBAL_LIST_INIT(diagonals, list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)) + +//This list contains the z-level numbers which can be accessed via space travel and the percentile chances to get there. +//(Exceptions: extended, sandbox and nuke) -Errorage +//Was list("3" = 30, "4" = 70). +//Spacing should be a reliable method of getting rid of a body -- Urist. +//Go away Urist, I'm restoring this to the longer list. ~Errorage +GLOBAL_LIST_INIT(accessable_z_levels, list(1,3,4,5,6,7)) //Keep this to six maps, repeating z-levels is ok if needed + +GLOBAL_LIST_INIT(station_z_levels, list(ZLEVEL_STATION_PRIMARY)) + +GLOBAL_LIST(global_map) + //list/global_map = list(list(1,5),list(4,3))//an array of map Z levels. + //Resulting sector map looks like + //|_1_|_4_| + //|_5_|_3_| + // + //1 - SS13 + //4 - Derelict + //3 - AI satellite + //5 - empty space + +GLOBAL_LIST_EMPTY(landmarks_list) //list of all landmarks created +GLOBAL_LIST_EMPTY(start_landmarks_list) //list of all spawn points created +GLOBAL_LIST_EMPTY(department_security_spawns) //list of all department security spawns +GLOBAL_LIST_EMPTY(generic_event_spawns) //list of all spawns for events + +GLOBAL_LIST_EMPTY(wizardstart) +GLOBAL_LIST_EMPTY(newplayer_start) +GLOBAL_LIST_EMPTY(prisonwarp) //prisoners go to these +GLOBAL_LIST_EMPTY(holdingfacility) //captured people go here +GLOBAL_LIST_EMPTY(xeno_spawn)//Aliens spawn at these. +GLOBAL_LIST_EMPTY(tdome1) +GLOBAL_LIST_EMPTY(tdome2) +GLOBAL_LIST_EMPTY(tdomeobserve) +GLOBAL_LIST_EMPTY(tdomeadmin) +GLOBAL_LIST_EMPTY(prisonwarped) //list of players already warped +GLOBAL_LIST_EMPTY(blobstart) +GLOBAL_LIST_EMPTY(secequipment) +GLOBAL_LIST_EMPTY(deathsquadspawn) +GLOBAL_LIST_EMPTY(emergencyresponseteamspawn) +GLOBAL_LIST_EMPTY(ruin_landmarks) + + //away missions +GLOBAL_LIST_EMPTY(awaydestinations) //a list of landmarks that the warpgate can take you to + + //used by jump-to-area etc. Updated by area/updateName() +GLOBAL_LIST_EMPTY(sortedAreas) + +GLOBAL_LIST_EMPTY(all_abstract_markers) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index f1ac1af1af..5265a8e8ea 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -21,7 +21,7 @@ /obj/attackby(obj/item/I, mob/living/user, params) return I.attack_obj(src, user) -/mob/living/attackby(obj/item/I, mob/user, params) +/mob/living/attackby(obj/item/I, mob/living/user, params) user.changeNext_move(CLICK_CD_MELEE) if(user.a_intent == INTENT_HARM && stat == DEAD && butcher_results) //can we butcher it? var/sharpness = I.is_sharp() diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index 2c36e10d31..f2bb300471 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -117,7 +117,7 @@ SUBSYSTEM_DEF(mapping) var/start_time = REALTIMEOFDAY INIT_ANNOUNCE("Loading [config.map_name]...") - TryLoadZ(config.GetFullMapPath(), FailedZs, ZLEVEL_STATION) + TryLoadZ(config.GetFullMapPath(), FailedZs, ZLEVEL_STATION_PRIMARY) INIT_ANNOUNCE("Loaded station in [(REALTIMEOFDAY - start_time)/10]s!") if(SSdbcore.Connect()) var/datum/DBQuery/query_round_map_name = SSdbcore.NewQuery("UPDATE [format_table_name("round")] SET map_name = '[config.map_name]' WHERE id = [GLOB.round_id]") diff --git a/code/controllers/subsystem/minimap.dm b/code/controllers/subsystem/minimap.dm index 10c6f8e5c4..4e58212b44 100644 --- a/code/controllers/subsystem/minimap.dm +++ b/code/controllers/subsystem/minimap.dm @@ -5,7 +5,7 @@ SUBSYSTEM_DEF(minimap) var/const/MINIMAP_SIZE = 2048 var/const/TILE_SIZE = 8 - var/list/z_levels = list(ZLEVEL_STATION) + var/list/z_levels = list(ZLEVEL_STATION_PRIMARY) /datum/controller/subsystem/minimap/Initialize(timeofday) var/hash = md5(SSmapping.config.GetFullMapPath()) diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm index 8b8bc81ad2..13762b83f9 100644 --- a/code/controllers/subsystem/persistence.dm +++ b/code/controllers/subsystem/persistence.dm @@ -2,15 +2,13 @@ SUBSYSTEM_DEF(persistence) name = "Persistence" init_order = INIT_ORDER_PERSISTENCE flags = SS_NO_FIRE - var/secret_satchels var/list/satchel_blacklist = list() //this is a typecache var/list/new_secret_satchels = list() //these are objects - var/list/old_secret_satchels = "" + var/list/old_secret_satchels = list() var/list/obj/structure/chisel_message/chisel_messages = list() var/list/saved_messages = list() - var/trophy_sav var/list/saved_trophies = list() /datum/controller/subsystem/persistence/Initialize() @@ -21,32 +19,47 @@ SUBSYSTEM_DEF(persistence) ..() /datum/controller/subsystem/persistence/proc/LoadSatchels() - secret_satchels = file("data/npc_saves/SecretSatchels[SSmapping.config.map_name].json") - if(!fexists(secret_satchels)) - return - satchel_blacklist = typecacheof(list(/obj/item/stack/tile/plasteel, /obj/item/crowbar)) - var/list/json = list() - json = json_decode(file2text(secret_satchels)) - old_secret_satchels = json["data"] var/placed_satchel = 0 - if(old_secret_satchels.len) - if(old_secret_satchels.len >= 20) //guards against low drop pools assuring that one player cannot reliably find his own gear. - var/pos = rand(1, old_secret_satchels.len) - old_secret_satchels.Cut(pos, pos+1) - var/obj/item/storage/backpack/satchel/flat/F = new() - F.x = old_secret_satchels[pos]["x"] - F.y = old_secret_satchels[pos]["y"] - F.z = ZLEVEL_STATION - var/path = text2path(old_secret_satchels[pos]["saved_obj"]) - if(!ispath(path)) - return - if(isfloorturf(F.loc) && !istype(F.loc, /turf/open/floor/plating/)) - F.hide(1) - new path(F) - placed_satchel++ - + var/path + var/obj/item/storage/backpack/satchel/flat/F = new() + if(fexists("data/npc_saves/SecretSatchels.sav")) //legacy compatability to convert old format to new + var/savefile/secret_satchels = new /savefile("data/npc_saves/SecretSatchels.sav") + var/sav_text + secret_satchels[SSmapping.config.map_name] >> sav_text + fdel("data/npc_saves/SecretSatchels.sav") + if(sav_text) + old_secret_satchels = splittext(sav_text,"#") + if(old_secret_satchels.len >= 20) + var/satchel_string = pick_n_take(old_secret_satchels) + var/list/chosen_satchel = splittext(satchel_string,"|") + if(chosen_satchel.len == 3) + F.x = text2num(chosen_satchel[1]) + F.y = text2num(chosen_satchel[2]) + F.z = ZLEVEL_STATION_PRIMARY + path = text2path(chosen_satchel[3]) + else + var/json_file = file("data/npc_saves/SecretSatchels[SSmapping.config.map_name].json") + if(!fexists(json_file)) + return + var/list/json = list() + json = json_decode(file2text(json_file)) + old_secret_satchels = json["data"] + if(old_secret_satchels.len) + if(old_secret_satchels.len >= 20) //guards against low drop pools assuring that one player cannot reliably find his own gear. + var/pos = rand(1, old_secret_satchels.len) + old_secret_satchels.Cut(pos, pos+1) + F.x = old_secret_satchels[pos]["x"] + F.y = old_secret_satchels[pos]["y"] + F.z = ZLEVEL_STATION_PRIMARY + path = text2path(old_secret_satchels[pos]["saved_obj"]) + if(!ispath(path)) + return + if(isfloorturf(F.loc) && !istype(F.loc, /turf/open/floor/plating/)) + F.hide(1) + new path(F) + placed_satchel++ var/list/free_satchels = list() - for(var/turf/T in shuffle(block(locate(TRANSITIONEDGE,TRANSITIONEDGE,ZLEVEL_STATION), locate(world.maxx-TRANSITIONEDGE,world.maxy-TRANSITIONEDGE,ZLEVEL_STATION)))) //Nontrivially expensive but it's roundstart only + for(var/turf/T in shuffle(block(locate(TRANSITIONEDGE,TRANSITIONEDGE,ZLEVEL_STATION_PRIMARY), locate(world.maxx-TRANSITIONEDGE,world.maxy-TRANSITIONEDGE,ZLEVEL_STATION_PRIMARY)))) //Nontrivially expensive but it's roundstart only if(isfloorturf(T) && !istype(T, /turf/open/floor/plating/)) free_satchels += new /obj/item/storage/backpack/satchel/flat/secret(T) if(!isemptylist(free_satchels) && ((free_satchels.len + placed_satchel) >= (50 - old_secret_satchels.len) * 0.1)) //up to six tiles, more than enough to kill anything that moves @@ -58,16 +71,25 @@ SUBSYSTEM_DEF(persistence) break //Who's been duping the bird?! /datum/controller/subsystem/persistence/proc/LoadChiselMessages() - var/json_file = file("data/npc_saves/ChiselMessages[SSmapping.config.map_name].json") - if(!fexists(json_file)) - return - var/list/json - json = json_decode(file2text(json_file)) + var/list/saved_messages = list() + if(fexists("data/npc_saves/ChiselMessages.sav")) //legacy compatability to convert old format to new + var/savefile/chisel_messages_sav = new /savefile("data/npc_saves/ChiselMessages.sav") + var/saved_json + chisel_messages_sav[SSmapping.config.map_name] >> saved_json + if(!saved_json) + return + saved_messages = json_decode(saved_json) + fdel("data/npc_saves/ChiselMessages.sav") + else + var/json_file = file("data/npc_saves/ChiselMessages[SSmapping.config.map_name].json") + if(!fexists(json_file)) + return + var/list/json + json = json_decode(file2text(json_file)) - if(!json) - return - - var/list/saved_messages = json["data"] + if(!json) + return + saved_messages = json["data"] for(var/item in saved_messages) if(!islist(item)) @@ -95,17 +117,23 @@ SUBSYSTEM_DEF(persistence) log_world("Loaded [saved_messages.len] engraved messages on map [SSmapping.config.map_name]") /datum/controller/subsystem/persistence/proc/LoadTrophies() - trophy_sav = file("data/npc_saves/TrophyItems.json") - if(!fexists(trophy_sav)) - return - var/list/json = list() - json = json_decode(file2text(trophy_sav)) - - if(!json) - return - - saved_trophies = json["data"] - + if(fexists("data/npc_saves/TrophyItems.sav")) //legacy compatability to convert old format to new + var/savefile/S = new /savefile("data/npc_saves/TrophyItems.sav") + var/saved_json + S >> saved_json + if(!saved_json) + return + saved_trophies = json_decode(saved_json) + fdel("data/npc_saves/TrophyItems.sav") + else + var/json_file = file("data/npc_saves/TrophyItems.json") + if(!fexists(json_file)) + return + var/list/json = list() + json = json_decode(file2text(json_file)) + if(!json) + return + saved_trophies = json["data"] SetUpTrophies(saved_trophies.Copy()) /datum/controller/subsystem/persistence/proc/SetUpTrophies(list/trophy_items) @@ -140,9 +168,10 @@ SUBSYSTEM_DEF(persistence) /datum/controller/subsystem/persistence/proc/CollectSecretSatchels() var/list/satchels = list() + satchel_blacklist = typecacheof(list(/obj/item/stack/tile/plasteel, /obj/item/crowbar)) for(var/A in new_secret_satchels) var/obj/item/storage/backpack/satchel/flat/F = A - if(QDELETED(F) || F.z != ZLEVEL_STATION || F.invisibility != INVISIBILITY_MAXIMUM) + if(QDELETED(F) || F.z != ZLEVEL_STATION_PRIMARY || F.invisibility != INVISIBILITY_MAXIMUM) continue var/list/savable_obj = list() for(var/obj/O in F) @@ -159,10 +188,11 @@ SUBSYSTEM_DEF(persistence) data["y"] = F.y data["saved_obj"] = pick(savable_obj) satchels += list(data) + var/json_file = file("data/npc_saves/SecretSatchels[SSmapping.config.map_name].json") var/list/file_data = list() file_data["data"] = satchels - fdel(secret_satchels) - WRITE_FILE(secret_satchels, json_encode(file_data)) + fdel(json_file) + WRITE_FILE(json_file, json_encode(file_data)) /datum/controller/subsystem/persistence/proc/CollectChiselMessages() var/json_file = file("data/npc_saves/ChiselMessages[SSmapping.config.map_name].json") @@ -181,10 +211,11 @@ SUBSYSTEM_DEF(persistence) /datum/controller/subsystem/persistence/proc/CollectTrophies() + var/json_file = file("data/npc_saves/TrophyItems.json") var/list/file_data = list() file_data["data"] = saved_trophies - fdel(trophy_sav) - WRITE_FILE(trophy_sav, json_encode(file_data)) + fdel(json_file) + WRITE_FILE(json_file, json_encode(file_data)) /datum/controller/subsystem/persistence/proc/SaveTrophy(obj/structure/displaycase/trophy/T) if(!T.added_roundstart && T.showpiece) @@ -192,4 +223,4 @@ SUBSYSTEM_DEF(persistence) data["path"] = T.showpiece.type data["message"] = T.trophy_message data["placer_key"] = T.placer_key - saved_trophies += list(data) \ No newline at end of file + saved_trophies += list(data) diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index f9774f8cb5..de6445831d 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -290,7 +290,7 @@ SUBSYSTEM_DEF(shuttle) continue var/turf/T = get_turf(thing) - if(T && T.z == ZLEVEL_STATION) + if(T && (T.z in GLOB.station_z_levels)) callShuttle = 0 break @@ -384,7 +384,7 @@ SUBSYSTEM_DEF(shuttle) var/travel_dir = M.preferred_direction // Remember, the direction is the direction we appear to be // coming from - var/dock_angle = dir2angle(M.preferred_direction) + M.port_angle + 180 + var/dock_angle = dir2angle(M.preferred_direction) + dir2angle(M.port_direction) + 180 var/dock_dir = angle2dir(dock_angle) var/transit_width = SHUTTLE_TRANSIT_BORDER * 2 diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index cc82822847..04677f593f 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -387,7 +387,7 @@ SUBSYSTEM_DEF(ticker) if(bomb && bomb.loc) bombloc = bomb.z else if(!station_missed) - bombloc = ZLEVEL_STATION + bombloc = ZLEVEL_STATION_PRIMARY if(mode) mode.explosion_in_progress = 0 diff --git a/code/datums/antagonists/datum_cult.dm b/code/datums/antagonists/datum_cult.dm index d17b799ca2..8c05c54b21 100644 --- a/code/datums/antagonists/datum_cult.dm +++ b/code/datums/antagonists/datum_cult.dm @@ -40,7 +40,7 @@ if(!GLOB.summon_spots.len) while(GLOB.summon_spots.len < SUMMON_POSSIBILITIES) var/area/summon = pick(GLOB.sortedAreas - GLOB.summon_spots) - if(summon && (summon.z == ZLEVEL_STATION) && summon.valid_territory) + if(summon && (summon.z in GLOB.station_z_levels) && summon.valid_territory) GLOB.summon_spots += summon SSticker.mode.cult_objectives += "eldergod" diff --git a/code/datums/components/archaeology.dm b/code/datums/components/archaeology.dm index 22a6b24bc4..7c61613c41 100644 --- a/code/datums/components/archaeology.dm +++ b/code/datums/components/archaeology.dm @@ -17,7 +17,7 @@ for(var/I in other_archdrops) _archdrops[I] += other_archdrops[I] -/datum/component/archaeology/proc/Dig(mob/user, obj/item/W) +/datum/component/archaeology/proc/Dig(obj/item/W, mob/living/user) if(dug) to_chat(user, "Looks like someone has dug here already.") return FALSE @@ -63,7 +63,7 @@ if(isplatingturf(OT)) var/turf/open/floor/plating/POT = parent POT.icon_plating = "[POT.postdig_icon]" - OT.icon_state = "[OT.postdig_icon]" + POT.icon_state = "[OT.postdig_icon]" if(OT.slowdown) //Things like snow slow you down until you dig them. OT.slowdown = 0 diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index 7f09ffa48c..9be242a391 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -413,7 +413,7 @@ AD.Refresh() for(var/mob/living/carbon/human/H in shuffle(GLOB.living_mob_list)) - if(H.z != ZLEVEL_STATION) + if(!(H.z in GLOB.station_z_levels)) continue if(!H.HasDisease(D)) H.ForceContractDisease(D) diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index fc943a8049..0eb76388ae 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -1,230 +1,230 @@ -//wrapper -/proc/do_teleport(ateleatom, adestination, aprecision=0, afteleport=1, aeffectin=null, aeffectout=null, asoundin=null, asoundout=null) - var/datum/teleport/instant/science/D = new - if(D.start(arglist(args))) - return 1 - return 0 - -/datum/teleport - var/atom/movable/teleatom //atom to teleport - var/atom/destination //destination to teleport to - var/precision = 0 //teleport precision - var/datum/effect_system/effectin //effect to show right before teleportation - var/datum/effect_system/effectout //effect to show right after teleportation - var/soundin //soundfile to play before teleportation - var/soundout //soundfile to play after teleportation - var/force_teleport = 1 //if false, teleport will use Move() proc (dense objects will prevent teleportation) - -/datum/teleport/proc/start(ateleatom, adestination, aprecision=0, afteleport=1, aeffectin=null, aeffectout=null, asoundin=null, asoundout=null) - if(!initTeleport(arglist(args))) - return 0 - return 1 - -/datum/teleport/proc/initTeleport(ateleatom,adestination,aprecision,afteleport,aeffectin,aeffectout,asoundin,asoundout) - if(!setTeleatom(ateleatom)) - return 0 - if(!setDestination(adestination)) - return 0 - if(!setPrecision(aprecision)) - return 0 - setEffects(aeffectin,aeffectout) - setForceTeleport(afteleport) - setSounds(asoundin,asoundout) - return 1 - -//must succeed -/datum/teleport/proc/setPrecision(aprecision) - if(isnum(aprecision)) - precision = aprecision - return 1 - return 0 - -//must succeed -/datum/teleport/proc/setDestination(atom/adestination) - if(istype(adestination)) - destination = adestination - return 1 - return 0 - -//must succeed in most cases -/datum/teleport/proc/setTeleatom(atom/movable/ateleatom) - if(istype(ateleatom, /obj/effect) && !istype(ateleatom, /obj/effect/dummy/chameleon)) - qdel(ateleatom) - return 0 - if(istype(ateleatom)) - teleatom = ateleatom - return 1 - return 0 - -//custom effects must be properly set up first for instant-type teleports -//optional -/datum/teleport/proc/setEffects(datum/effect_system/aeffectin=null,datum/effect_system/aeffectout=null) - effectin = istype(aeffectin) ? aeffectin : null - effectout = istype(aeffectout) ? aeffectout : null - return 1 - -//optional -/datum/teleport/proc/setForceTeleport(afteleport) - force_teleport = afteleport - return 1 - -//optional -/datum/teleport/proc/setSounds(asoundin=null,asoundout=null) - soundin = isfile(asoundin) ? asoundin : null - soundout = isfile(asoundout) ? asoundout : null - return 1 - -//placeholder -/datum/teleport/proc/teleportChecks() - return 1 - -/datum/teleport/proc/playSpecials(atom/location,datum/effect_system/effect,sound) - if(location) - if(effect) - INVOKE_ASYNC(src, .proc/do_effect, location, effect) - if(sound) - INVOKE_ASYNC(src, .proc/do_sound, location, sound) - -/datum/teleport/proc/do_effect(atom/location, datum/effect_system/effect) - src = null - effect.attach(location) - effect.start() - -/datum/teleport/proc/do_sound(atom/location, sound) - src = null - playsound(location, sound, 60, 1) - -//do the monkey dance -/datum/teleport/proc/doTeleport() - - var/turf/destturf - var/turf/curturf = get_turf(teleatom) - destturf = get_teleport_turf(get_turf(destination), precision) - - if(!destturf || !curturf || destturf.is_transition_turf()) - return 0 - - var/area/A = get_area(curturf) - if(A.noteleport) - return 0 - - playSpecials(curturf,effectin,soundin) - if(force_teleport) - teleatom.forceMove(destturf) - if(ismegafauna(teleatom)) - message_admins("[teleatom] [ADMIN_FLW(teleatom)] has teleported from [ADMIN_COORDJMP(curturf)] to [ADMIN_COORDJMP(destturf)].") - playSpecials(destturf,effectout,soundout) - else - if(teleatom.Move(destturf)) - playSpecials(destturf,effectout,soundout) - if(ismegafauna(teleatom)) - message_admins("[teleatom] [ADMIN_FLW(teleatom)] has teleported from [ADMIN_COORDJMP(curturf)] to [ADMIN_COORDJMP(destturf)].") - return 1 - -/datum/teleport/proc/teleport() - if(teleportChecks()) - return doTeleport() - return 0 - -/datum/teleport/instant //teleports when datum is created - - start(ateleatom, adestination, aprecision=0, afteleport=1, aeffectin=null, aeffectout=null, asoundin=null, asoundout=null) - if(..()) - if(teleport()) - return 1 - return 0 - - -/datum/teleport/instant/science - -/datum/teleport/instant/science/setEffects(datum/effect_system/aeffectin,datum/effect_system/aeffectout) - if(aeffectin==null || aeffectout==null) - var/datum/effect_system/spark_spread/aeffect = new - aeffect.set_up(5, 1, teleatom) - effectin = effectin || aeffect - effectout = effectout || aeffect - return 1 - else - return ..() - -/datum/teleport/instant/science/setPrecision(aprecision) - ..() - if(istype(teleatom, /obj/item/storage/backpack/holding)) - precision = rand(1,100) - - var/list/bagholding = teleatom.search_contents_for(/obj/item/storage/backpack/holding) - if(bagholding.len) - precision = max(rand(1,100)*bagholding.len,100) - if(isliving(teleatom)) - var/mob/living/MM = teleatom - to_chat(MM, "The bluespace interface on your bag of holding interferes with the teleport!") - return 1 - -// Safe location finder - -/proc/find_safe_turf(zlevel = ZLEVEL_STATION, list/zlevels, extended_safety_checks = FALSE) - if(!zlevels) - zlevels = list(zlevel) - var/cycles = 1000 - for(var/cycle in 1 to cycles) - // DRUNK DIALLING WOOOOOOOOO - var/x = rand(1, world.maxx) - var/y = rand(1, world.maxy) - var/z = pick(zlevels) - var/random_location = locate(x,y,z) - - if(!isfloorturf(random_location)) - continue - var/turf/open/floor/F = random_location - if(!F.air) - continue - - var/datum/gas_mixture/A = F.air - var/list/A_gases = A.gases - var/trace_gases - for(var/id in A_gases) - if(id in GLOB.hardcoded_gases) - continue - trace_gases = TRUE - break - - // Can most things breathe? - if(trace_gases) - continue - if(!(A_gases["o2"] && A_gases["o2"][MOLES] >= 16)) - continue - if(A_gases["plasma"]) - continue - if(A_gases["co2"] && A_gases["co2"][MOLES] >= 10) - continue - - // Aim for goldilocks temperatures and pressure - if((A.temperature <= 270) || (A.temperature >= 360)) - continue - var/pressure = A.return_pressure() - if((pressure <= 20) || (pressure >= 550)) - continue - - if(extended_safety_checks) +//wrapper +/proc/do_teleport(ateleatom, adestination, aprecision=0, afteleport=1, aeffectin=null, aeffectout=null, asoundin=null, asoundout=null) + var/datum/teleport/instant/science/D = new + if(D.start(arglist(args))) + return 1 + return 0 + +/datum/teleport + var/atom/movable/teleatom //atom to teleport + var/atom/destination //destination to teleport to + var/precision = 0 //teleport precision + var/datum/effect_system/effectin //effect to show right before teleportation + var/datum/effect_system/effectout //effect to show right after teleportation + var/soundin //soundfile to play before teleportation + var/soundout //soundfile to play after teleportation + var/force_teleport = 1 //if false, teleport will use Move() proc (dense objects will prevent teleportation) + +/datum/teleport/proc/start(ateleatom, adestination, aprecision=0, afteleport=1, aeffectin=null, aeffectout=null, asoundin=null, asoundout=null) + if(!initTeleport(arglist(args))) + return 0 + return 1 + +/datum/teleport/proc/initTeleport(ateleatom,adestination,aprecision,afteleport,aeffectin,aeffectout,asoundin,asoundout) + if(!setTeleatom(ateleatom)) + return 0 + if(!setDestination(adestination)) + return 0 + if(!setPrecision(aprecision)) + return 0 + setEffects(aeffectin,aeffectout) + setForceTeleport(afteleport) + setSounds(asoundin,asoundout) + return 1 + +//must succeed +/datum/teleport/proc/setPrecision(aprecision) + if(isnum(aprecision)) + precision = aprecision + return 1 + return 0 + +//must succeed +/datum/teleport/proc/setDestination(atom/adestination) + if(istype(adestination)) + destination = adestination + return 1 + return 0 + +//must succeed in most cases +/datum/teleport/proc/setTeleatom(atom/movable/ateleatom) + if(istype(ateleatom, /obj/effect) && !istype(ateleatom, /obj/effect/dummy/chameleon)) + qdel(ateleatom) + return 0 + if(istype(ateleatom)) + teleatom = ateleatom + return 1 + return 0 + +//custom effects must be properly set up first for instant-type teleports +//optional +/datum/teleport/proc/setEffects(datum/effect_system/aeffectin=null,datum/effect_system/aeffectout=null) + effectin = istype(aeffectin) ? aeffectin : null + effectout = istype(aeffectout) ? aeffectout : null + return 1 + +//optional +/datum/teleport/proc/setForceTeleport(afteleport) + force_teleport = afteleport + return 1 + +//optional +/datum/teleport/proc/setSounds(asoundin=null,asoundout=null) + soundin = isfile(asoundin) ? asoundin : null + soundout = isfile(asoundout) ? asoundout : null + return 1 + +//placeholder +/datum/teleport/proc/teleportChecks() + return 1 + +/datum/teleport/proc/playSpecials(atom/location,datum/effect_system/effect,sound) + if(location) + if(effect) + INVOKE_ASYNC(src, .proc/do_effect, location, effect) + if(sound) + INVOKE_ASYNC(src, .proc/do_sound, location, sound) + +/datum/teleport/proc/do_effect(atom/location, datum/effect_system/effect) + src = null + effect.attach(location) + effect.start() + +/datum/teleport/proc/do_sound(atom/location, sound) + src = null + playsound(location, sound, 60, 1) + +//do the monkey dance +/datum/teleport/proc/doTeleport() + + var/turf/destturf + var/turf/curturf = get_turf(teleatom) + destturf = get_teleport_turf(get_turf(destination), precision) + + if(!destturf || !curturf || destturf.is_transition_turf()) + return 0 + + var/area/A = get_area(curturf) + if(A.noteleport) + return 0 + + playSpecials(curturf,effectin,soundin) + if(force_teleport) + teleatom.forceMove(destturf) + if(ismegafauna(teleatom)) + message_admins("[teleatom] [ADMIN_FLW(teleatom)] has teleported from [ADMIN_COORDJMP(curturf)] to [ADMIN_COORDJMP(destturf)].") + playSpecials(destturf,effectout,soundout) + else + if(teleatom.Move(destturf)) + playSpecials(destturf,effectout,soundout) + if(ismegafauna(teleatom)) + message_admins("[teleatom] [ADMIN_FLW(teleatom)] has teleported from [ADMIN_COORDJMP(curturf)] to [ADMIN_COORDJMP(destturf)].") + return 1 + +/datum/teleport/proc/teleport() + if(teleportChecks()) + return doTeleport() + return 0 + +/datum/teleport/instant //teleports when datum is created + + start(ateleatom, adestination, aprecision=0, afteleport=1, aeffectin=null, aeffectout=null, asoundin=null, asoundout=null) + if(..()) + if(teleport()) + return 1 + return 0 + + +/datum/teleport/instant/science + +/datum/teleport/instant/science/setEffects(datum/effect_system/aeffectin,datum/effect_system/aeffectout) + if(aeffectin==null || aeffectout==null) + var/datum/effect_system/spark_spread/aeffect = new + aeffect.set_up(5, 1, teleatom) + effectin = effectin || aeffect + effectout = effectout || aeffect + return 1 + else + return ..() + +/datum/teleport/instant/science/setPrecision(aprecision) + ..() + if(istype(teleatom, /obj/item/storage/backpack/holding)) + precision = rand(1,100) + + var/list/bagholding = teleatom.search_contents_for(/obj/item/storage/backpack/holding) + if(bagholding.len) + precision = max(rand(1,100)*bagholding.len,100) + if(isliving(teleatom)) + var/mob/living/MM = teleatom + to_chat(MM, "The bluespace interface on your bag of holding interferes with the teleport!") + return 1 + +// Safe location finder + +/proc/find_safe_turf(zlevel = ZLEVEL_STATION_PRIMARY, list/zlevels, extended_safety_checks = FALSE) + if(!zlevels) + zlevels = list(zlevel) + var/cycles = 1000 + for(var/cycle in 1 to cycles) + // DRUNK DIALLING WOOOOOOOOO + var/x = rand(1, world.maxx) + var/y = rand(1, world.maxy) + var/z = pick(zlevels) + var/random_location = locate(x,y,z) + + if(!isfloorturf(random_location)) + continue + var/turf/open/floor/F = random_location + if(!F.air) + continue + + var/datum/gas_mixture/A = F.air + var/list/A_gases = A.gases + var/trace_gases + for(var/id in A_gases) + if(id in GLOB.hardcoded_gases) + continue + trace_gases = TRUE + break + + // Can most things breathe? + if(trace_gases) + continue + if(!(A_gases["o2"] && A_gases["o2"][MOLES] >= 16)) + continue + if(A_gases["plasma"]) + continue + if(A_gases["co2"] && A_gases["co2"][MOLES] >= 10) + continue + + // Aim for goldilocks temperatures and pressure + if((A.temperature <= 270) || (A.temperature >= 360)) + continue + var/pressure = A.return_pressure() + if((pressure <= 20) || (pressure >= 550)) + continue + + if(extended_safety_checks) if(istype(F, /turf/open/lava)) //chasms aren't /floor, and so are pre-filtered var/turf/open/lava/L = F - if(!L.is_safe()) - continue - - // DING! You have passed the gauntlet, and are "probably" safe. - return F - -/proc/get_teleport_turfs(turf/center, precision = 0) - if(!precision) - return list(center) - var/list/posturfs = list() - for(var/turf/T in range(precision,center)) - if(T.is_transition_turf()) - continue // Avoid picking these. - var/area/A = T.loc - if(!A.noteleport) - posturfs.Add(T) - return posturfs - -/proc/get_teleport_turf(turf/center, precision = 0) - return safepick(get_teleport_turfs(center, precision)) + if(!L.is_safe()) + continue + + // DING! You have passed the gauntlet, and are "probably" safe. + return F + +/proc/get_teleport_turfs(turf/center, precision = 0) + if(!precision) + return list(center) + var/list/posturfs = list() + for(var/turf/T in range(precision,center)) + if(T.is_transition_turf()) + continue // Avoid picking these. + var/area/A = T.loc + if(!A.noteleport) + posturfs.Add(T) + return posturfs + +/proc/get_teleport_turf(turf/center, precision = 0) + return safepick(get_teleport_turfs(center, precision)) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index cee55375f0..5ad9f4aa6d 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -522,7 +522,7 @@ if(I == src) continue var/mob/M = I - if(M.z == ZLEVEL_STATION && !M.stat) + if((M.z in GLOB.station_z_levels) && !M.stat) last_healthy_headrev = FALSE break text += "head | not mindshielded | employee | [last_healthy_headrev ? "LAST " : ""]HEADREV | rev" diff --git a/code/datums/weather/weather.dm b/code/datums/weather/weather.dm index f4f2fc089c..a2abdf64a1 100644 --- a/code/datums/weather/weather.dm +++ b/code/datums/weather/weather.dm @@ -30,7 +30,7 @@ var/area_type = /area/space //Types of area to affect var/list/impacted_areas = list() //Areas to be affected by the weather, calculated when the weather begins var/list/protected_areas = list()//Areas that are protected and excluded from the affected areas. - var/target_z = ZLEVEL_STATION //The z-level to affect + var/target_z = ZLEVEL_STATION_PRIMARY //The z-level to affect var/overlay_layer = AREA_LAYER //Since it's above everything else, this is the layer used by default. TURF_LAYER is below mobs and walls if you need to use that. var/aesthetic = FALSE //If the weather has no purpose other than looks diff --git a/code/datums/weather/weather_types.dm b/code/datums/weather/weather_types.dm index d23bf3c8a6..3368dcf1dd 100644 --- a/code/datums/weather/weather_types.dm +++ b/code/datums/weather/weather_types.dm @@ -17,7 +17,7 @@ area_type = /area protected_areas = list(/area/space) - target_z = ZLEVEL_STATION + target_z = ZLEVEL_STATION_PRIMARY overlay_layer = ABOVE_OPEN_TURF_LAYER //Covers floors only immunity_type = "lava" @@ -48,7 +48,7 @@ end_duration = 0 area_type = /area - target_z = ZLEVEL_STATION + target_z = ZLEVEL_STATION_PRIMARY /datum/weather/advanced_darkness/update_areas() for(var/V in impacted_areas) @@ -142,7 +142,7 @@ area_type = /area protected_areas = list(/area/maintenance, /area/ai_monitored/turret_protected/ai_upload, /area/ai_monitored/turret_protected/ai_upload_foyer, /area/ai_monitored/turret_protected/ai, /area/storage/emergency/starboard, /area/storage/emergency/port, /area/shuttle) - target_z = ZLEVEL_STATION + target_z = ZLEVEL_STATION_PRIMARY immunity_type = "rad" diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 0baef4ace8..5acc64fbb8 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -75,7 +75,7 @@ GLOBAL_LIST_EMPTY(teleportlocs) if(GLOB.teleportlocs[AR.name]) continue var/turf/picked = safepick(get_area_turfs(AR.type)) - if (picked && (picked.z == ZLEVEL_STATION)) + if (picked && (picked.z in GLOB.station_z_levels)) GLOB.teleportlocs[AR.name] = AR sortTim(GLOB.teleportlocs, /proc/cmp_text_dsc) diff --git a/code/game/area/areas/holodeck.dm b/code/game/area/areas/holodeck.dm index cadc2e43d6..51399ca7e1 100644 --- a/code/game/area/areas/holodeck.dm +++ b/code/game/area/areas/holodeck.dm @@ -84,8 +84,8 @@ /area/holodeck/rec_center/firingrange name = "Holodeck - Firing Range" -/area/holodeck/rec_center/rollercoaster - name = "Holodeck - Roller Coaster" +/area/holodeck/rec_center/school + name = "Holodeck - Anime School" /area/holodeck/rec_center/chapelcourt name = "Holodeck - Chapel Courtroom" @@ -123,4 +123,4 @@ /area/holodeck/rec_center/thunderdome1218 name = "Holodeck - 1218 AD" - restricted = 1 + restricted = 1 \ No newline at end of file diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index cee9fc6262..05991cb213 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -560,7 +560,7 @@ flags_2 |= STATIONLOVING_2 /atom/movable/proc/relocate() - var/targetturf = find_safe_turf(ZLEVEL_STATION) + var/targetturf = find_safe_turf(ZLEVEL_STATION_PRIMARY) if(!targetturf) if(GLOB.blobstart.len > 0) targetturf = get_turf(pick(GLOB.blobstart)) @@ -592,7 +592,7 @@ /atom/movable/proc/in_bounds() . = FALSE var/turf/currentturf = get_turf(src) - if(currentturf && (currentturf.z == ZLEVEL_CENTCOM || currentturf.z == ZLEVEL_STATION || currentturf.z == ZLEVEL_TRANSIT)) + if(currentturf && (currentturf.z == ZLEVEL_CENTCOM || (currentturf.z in GLOB.station_z_levels) || currentturf.z == ZLEVEL_TRANSIT)) . = TRUE diff --git a/code/game/gamemodes/antag_spawner.dm b/code/game/gamemodes/antag_spawner.dm index ab9c041efe..15dd4157fe 100644 --- a/code/game/gamemodes/antag_spawner.dm +++ b/code/game/gamemodes/antag_spawner.dm @@ -238,7 +238,7 @@ /obj/item/antag_spawner/slaughter_demon/attack_self(mob/user) - if(user.z != ZLEVEL_STATION) + if(!(user.z in GLOB.station_z_levels)) to_chat(user, "You should probably wait until you reach the station.") return if(used) diff --git a/code/game/gamemodes/blob/blob_report.dm b/code/game/gamemodes/blob/blob_report.dm index ea6bd07c58..e90626485a 100644 --- a/code/game/gamemodes/blob/blob_report.dm +++ b/code/game/gamemodes/blob/blob_report.dm @@ -19,7 +19,7 @@ var/nukecode = random_nukecode() for(var/obj/machinery/nuclearbomb/bomb in GLOB.machines) if(bomb && bomb.r_code) - if(bomb.z == ZLEVEL_STATION) + if(bomb.z in GLOB.station_z_levels) bomb.r_code = nukecode intercepttext += "NanoTrasen Update: Biohazard Alert.
" @@ -91,7 +91,7 @@ if(count_territories) var/list/valid_territories = list() for(var/area/A in world) //First, collect all area types on the station zlevel - if(A.z == ZLEVEL_STATION) + if(A.z in GLOB.station_z_levels) if(!(A.type in valid_territories) && A.valid_territory) valid_territories |= A.type if(valid_territories.len) diff --git a/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm b/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm index 507c673921..d607adb37f 100644 --- a/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm +++ b/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm @@ -193,13 +193,13 @@ var/structure_number = 0 for(var/obj/structure/destructible/clockwork/powered/P in range(SIGIL_ACCESS_RANGE, src)) structure_number++ - to_chat(user, "It is storing [GLOB.ratvar_awakens ? "INFINITY":"[power_charge]"]W of power, \ + to_chat(user, "It is storing [GLOB.ratvar_awakens ? "INFINITE":"[DisplayPower(power_charge)] of"] power, \ and [structure_number] Clockwork Structure[structure_number == 1 ? " is":"s are"] in range.") to_chat(user, "While active, it will gradually drain power from nearby electronics. It is currently [isprocessing ? "active":"disabled"].") if(iscyborg(user)) to_chat(user, "You can recharge from the [sigil_name] by crossing it.") else if(!GLOB.ratvar_awakens) - to_chat(user, "Hitting the [sigil_name] with brass sheets will convert them to power at a rate of 1 brass sheet to [POWER_FLOOR]W power.") + to_chat(user, "Hitting the [sigil_name] with brass sheets will convert them to power at a rate of 1 brass sheet to [DisplayPower(POWER_FLOOR)] power.") if(!GLOB.ratvar_awakens) to_chat(user, "You can recharge Replica Fabricators from the [sigil_name].") @@ -207,7 +207,7 @@ if(is_servant_of_ratvar(user) && istype(I, /obj/item/stack/tile/brass) && !GLOB.ratvar_awakens) var/obj/item/stack/tile/brass/B = I user.visible_message("[user] places [B] on [src], causing it to disintegrate into glowing orange energy!", \ - "You charge the [sigil_name] with [B], providing it with [B.amount * POWER_FLOOR]W of power.") + "You charge the [sigil_name] with [B], providing it with [DisplayPower(B.amount * POWER_FLOOR)] of power.") modify_charge(-(B.amount * POWER_FLOOR)) playsound(src, 'sound/effects/light_flicker.ogg', (B.amount * POWER_FLOOR) * 0.01, 1) qdel(B) diff --git a/code/game/gamemodes/clock_cult/clock_helpers/fabrication_helpers.dm b/code/game/gamemodes/clock_cult/clock_helpers/fabrication_helpers.dm index 18c8103eef..a4409cf22c 100644 --- a/code/game/gamemodes/clock_cult/clock_helpers/fabrication_helpers.dm +++ b/code/game/gamemodes/clock_cult/clock_helpers/fabrication_helpers.dm @@ -269,7 +269,7 @@ fabricator.recharging = null if(user) user.visible_message("[user]'s [fabricator.name] stops draining glowing orange energy from [src].", \ - "You finish recharging your [fabricator.name]. It now contains [fabricator.get_power()]W/[fabricator.get_max_power()]W power.") + "You finish recharging your [fabricator.name]. It now contains [DisplayPower(fabricator.get_power())]/[DisplayPower(fabricator.get_max_power())] power.") //Fabricator mob heal proc, to avoid as much copypaste as possible. /mob/living/proc/fabricator_heal(mob/living/user, obj/item/clockwork/replica_fabricator/fabricator) diff --git a/code/game/gamemodes/clock_cult/clock_helpers/scripture_checks.dm b/code/game/gamemodes/clock_cult/clock_helpers/scripture_checks.dm index d6e56f38d5..d8281242ef 100644 --- a/code/game/gamemodes/clock_cult/clock_helpers/scripture_checks.dm +++ b/code/game/gamemodes/clock_cult/clock_helpers/scripture_checks.dm @@ -31,7 +31,7 @@ var/mob/living/silicon/ai/AI = ai if(AI.deployed_shell && is_servant_of_ratvar(AI.deployed_shell)) continue - if(is_servant_of_ratvar(AI) || !isturf(AI.loc) || AI.z != ZLEVEL_STATION || AI.stat == DEAD) + if(is_servant_of_ratvar(AI) || !isturf(AI.loc) || !(AI.z in GLOB.station_z_levels) || AI.stat == DEAD) continue .++ diff --git a/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm b/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm index 343f2e70e7..eecfec7780 100644 --- a/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm +++ b/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm @@ -500,7 +500,7 @@ anything but a last resort. Instead, it is recommended that a Sigil of Transmission is created. This sigil serves as both battery and power generator for nearby clockwork \ structures, and those structures will happily draw power from the sigil before they resort to APCs.

" dat += "Generating power is less easy. The most reliable and efficient way is using brass sheets; attacking a sigil of transmission with brass sheets will convert them \ - to power, at a rate of [POWER_FLOOR]W per sheet. (Brass sheets are created from replica fabricators, which are explained more in detail in the Conversion section.) \ + to power, at a rate of [DisplayPower(POWER_FLOOR)] per sheet. (Brass sheets are created from replica fabricators, which are explained more in detail in the Conversion section.) \ Activating a sigil of transmission will also cause it to drain power from the nearby area, which, while effective, serves as an obvious tell that there is something wrong.

" dat += "Without power, many structures will not function, making a base vulnerable to attack. For this reason, it is critical that you keep an eye on your power reserves and \ ensure that they remain comfortably high.

" diff --git a/code/game/gamemodes/clock_cult/clock_items/replica_fabricator.dm b/code/game/gamemodes/clock_cult/clock_items/replica_fabricator.dm index 3f7e826017..bd356982b5 100644 --- a/code/game/gamemodes/clock_cult/clock_items/replica_fabricator.dm +++ b/code/game/gamemodes/clock_cult/clock_items/replica_fabricator.dm @@ -126,22 +126,22 @@ to_chat(user, "Can be used to replace walls, floors, tables, windows, windoors, and airlocks with Clockwork variants.") to_chat(user, "Can construct Clockwork Walls on Clockwork Floors and deconstruct Clockwork Walls to Clockwork Floors.") if(uses_power) - to_chat(user, "It can consume floor tiles, rods, metal, and plasteel for power at rates of 2:[POWER_ROD]W, 1:[POWER_ROD]W, 1:[POWER_METAL]W, \ - and 1:[POWER_PLASTEEL]W, respectively.") - to_chat(user, "It can also consume brass sheets for power at a rate of 1:[POWER_FLOOR]W.") - to_chat(user, "It is storing [get_power()]W/[get_max_power()]W of power[charge_rate ? ", and is gaining [charge_rate*0.5]W of power per second":""].") - to_chat(user, "Use it in-hand to produce 5 brass sheets at a cost of [POWER_WALL_TOTAL]W power.") + to_chat(user, "It can consume floor tiles, rods, metal, and plasteel for power at rates of 2:[DisplayPower(POWER_ROD)], 1:[DisplayPower(POWER_ROD)], 1:[DisplayPower(POWER_METAL)], \ + and 1:[DisplayPower(POWER_PLASTEEL)], respectively.") + to_chat(user, "It can also consume brass sheets for power at a rate of 1:[DisplayPower(POWER_FLOOR)].") + to_chat(user, "It is storing [DisplayPower(get_power())]/[DisplayPower(get_max_power())] of power[charge_rate ? ", and is gaining [DisplayPower(charge_rate*0.5)] of power per second":""].") + to_chat(user, "Use it in-hand to produce 5 brass sheets at a cost of [DisplayPower(POWER_WALL_TOTAL)] power.") /obj/item/clockwork/replica_fabricator/attack_self(mob/living/user) if(is_servant_of_ratvar(user)) if(uses_power) if(!can_use_power(POWER_WALL_TOTAL)) - to_chat(user, "[src] requires [POWER_WALL_TOTAL]W of power to produce brass sheets!") + to_chat(user, "[src] requires [DisplayPower(POWER_WALL_TOTAL)] of power to produce brass sheets!") return modify_stored_power(-POWER_WALL_TOTAL) playsound(src, 'sound/items/deconstruct.ogg', 50, 1) new/obj/item/stack/tile/brass(user.loc, 5) - to_chat(user, "You use [stored_power ? "some":"all"] of [src]'s power to produce 5 brass sheets. It now stores [get_power()]W/[get_max_power()]W of power.") + to_chat(user, "You use [stored_power ? "some":"all"] of [src]'s power to produce 5 brass sheets. It now stores [DisplayPower(get_power())]/[DisplayPower(get_max_power())] of power.") /obj/item/clockwork/replica_fabricator/pre_attackby(atom/target, mob/living/user, params) if(!target || !user || !is_servant_of_ratvar(user) || istype(target, /obj/item/storage)) @@ -196,7 +196,7 @@ fabrication_values["power_cost"] = 0 var/turf/Y = get_turf(user) - if(!Y || (Y.z != ZLEVEL_STATION && Y.z != ZLEVEL_CENTCOM && Y.z != ZLEVEL_MINING && Y.z != ZLEVEL_LAVALAND)) + if(!Y || (!(Y.z in GLOB.station_z_levels) && Y.z != ZLEVEL_CENTCOM && Y.z != ZLEVEL_MINING && Y.z != ZLEVEL_LAVALAND)) fabrication_values["operation_time"] *= 2 if(fabrication_values["power_cost"] > 0) fabrication_values["power_cost"] *= 2 @@ -276,7 +276,7 @@ if(!silent) var/atom/A = fabrication_values["new_obj_type"] if(A) - to_chat(user, "You need [fabrication_values["power_cost"]]W power to fabricate \a [initial(A.name)] from [target]!") + to_chat(user, "You need [DisplayPower(fabrication_values["power_cost"])] power to fabricate \a [initial(A.name)] from [target]!") else if(stored_power - fabrication_values["power_cost"] > max_power) if(!silent) var/atom/A = fabrication_values["new_obj_type"] @@ -323,8 +323,8 @@ repair_values["power_required"] = round(repair_values["healing_for_cycle"]*MIN_CLOCKCULT_POWER, MIN_CLOCKCULT_POWER) //and get the power cost from that if(!can_use_power(RATVAR_POWER_CHECK) && !can_use_power(repair_values["power_required"])) if(!silent) - to_chat(user, "You need at least [repair_values["power_required"]]W power to start repairin[target == user ? "g yourself" : "g [target]"], and at least \ - [round(repair_values["amount_to_heal"]*MIN_CLOCKCULT_POWER, MIN_CLOCKCULT_POWER)]W to fully repair [target == user ? "yourself" : "[target.p_them()]"]!") + to_chat(user, "You need at least [DisplayPower(repair_values["power_required"])] power to start repairin[target == user ? "g yourself" : "g [target]"], and at least \ + [DisplayPower(repair_values["amount_to_heal"]*MIN_CLOCKCULT_POWER, MIN_CLOCKCULT_POWER)] to fully repair [target == user ? "yourself" : "[target.p_them()]"]!") return FALSE return TRUE diff --git a/code/game/gamemodes/clock_cult/clock_scripture.dm b/code/game/gamemodes/clock_cult/clock_scripture.dm index 318d3e243d..806d08dffb 100644 --- a/code/game/gamemodes/clock_cult/clock_scripture.dm +++ b/code/game/gamemodes/clock_cult/clock_scripture.dm @@ -158,7 +158,7 @@ Judgement: 12 servants, 5 caches, 300 CV, and any existing AIs are converted or /datum/clockwork_scripture/proc/check_offstation_penalty() var/turf/T = get_turf(invoker) - if(!T || (T.z != ZLEVEL_STATION && T.z != ZLEVEL_CENTCOM && T.z != ZLEVEL_MINING && T.z != ZLEVEL_LAVALAND)) + if(!T || (!(T.z in GLOB.station_z_levels) && T.z != ZLEVEL_CENTCOM && T.z != ZLEVEL_MINING && T.z != ZLEVEL_LAVALAND)) channel_time *= 2 for(var/i in consumed_components) if(consumed_components[i]) diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_applications.dm b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_applications.dm index d0b7f11eb4..2930088ca2 100644 --- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_applications.dm +++ b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_applications.dm @@ -175,7 +175,7 @@ to_chat(invoker, "\"It is too late to construct one of these, champion.\"") return FALSE var/turf/T = get_turf(invoker) - if(!T || T.z != ZLEVEL_STATION) + if(!T || !(T.z in GLOB.station_z_levels)) to_chat(invoker, "\"You must be on the station to construct one of these, champion.\"") return FALSE return ..() diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_judgement.dm b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_judgement.dm index e7beff846f..c7daef1450 100644 --- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_judgement.dm +++ b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_judgement.dm @@ -33,7 +33,7 @@ return FALSE var/area/A = get_area(invoker) var/turf/T = get_turf(invoker) - if(!T || T.z != ZLEVEL_STATION || istype(A, /area/shuttle) || !A.blob_allowed) + if(!T || !(T.z in GLOB.station_z_levels) || istype(A, /area/shuttle) || !A.blob_allowed) to_chat(invoker, "You must be on the station to activate the Ark!") return FALSE if(GLOB.clockwork_gateway_activated) diff --git a/code/game/gamemodes/clock_cult/clock_structure.dm b/code/game/gamemodes/clock_cult/clock_structure.dm index 0c29361e59..1da3053605 100644 --- a/code/game/gamemodes/clock_cult/clock_structure.dm +++ b/code/game/gamemodes/clock_cult/clock_structure.dm @@ -160,7 +160,7 @@ if(is_servant_of_ratvar(user) || isobserver(user)) var/powered = total_accessable_power() var/sigil_number = LAZYLEN(check_apc_and_sigils()) - to_chat(user, "It has access to [powered == INFINITY ? "INFINITY":"[powered]"]W of power, \ + to_chat(user, "It has access to [powered == INFINITY ? "INFINITE":"[DisplayPower(powered)] of"] power, \ and [sigil_number] Sigil[sigil_number == 1 ? "":"s"] of Transmission [sigil_number == 1 ? "is":"are"] in range.") /obj/structure/destructible/clockwork/powered/Destroy() diff --git a/code/game/gamemodes/clock_cult/clock_structures/clockwork_obelisk.dm b/code/game/gamemodes/clock_cult/clock_structures/clockwork_obelisk.dm index 4df615450f..de6b058b78 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/clockwork_obelisk.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/clockwork_obelisk.dm @@ -23,7 +23,7 @@ /obj/structure/destructible/clockwork/powered/clockwork_obelisk/examine(mob/user) ..() if(is_servant_of_ratvar(user) || isobserver(user)) - to_chat(user, "It requires [hierophant_cost]W to broadcast over the Hierophant Network, and [gateway_cost]W to open a Spatial Gateway.") + to_chat(user, "It requires [DisplayPower(hierophant_cost)] to broadcast over the Hierophant Network, and [DisplayPower(gateway_cost)] to open a Spatial Gateway.") /obj/structure/destructible/clockwork/powered/clockwork_obelisk/can_be_unfasten_wrench(mob/user, silent) if(active) diff --git a/code/game/gamemodes/clock_cult/clock_structures/mania_motor.dm b/code/game/gamemodes/clock_cult/clock_structures/mania_motor.dm index 732897fda4..23a50fdd4c 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/mania_motor.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/mania_motor.dm @@ -19,7 +19,7 @@ /obj/structure/destructible/clockwork/powered/mania_motor/examine(mob/user) ..() if(is_servant_of_ratvar(user) || isobserver(user)) - to_chat(user, "It requires [mania_cost]W to run.") + to_chat(user, "It requires [DisplayPower(mania_cost)] to run.") /obj/structure/destructible/clockwork/powered/mania_motor/forced_disable(bad_effects) if(active) diff --git a/code/game/gamemodes/clock_cult/clock_structures/prolonging_prism.dm b/code/game/gamemodes/clock_cult/clock_structures/prolonging_prism.dm index 9ef7fa4ab7..155413a612 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/prolonging_prism.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/prolonging_prism.dm @@ -48,7 +48,7 @@ if(active) return 0 var/turf/T = get_turf(src) - if(!T || T.z != ZLEVEL_STATION) + if(!T || !(T.z in GLOB.station_z_levels)) to_chat(user, "[src] must be on the station to function!") return 0 if(SSshuttle.emergency.mode != SHUTTLE_CALL) @@ -63,7 +63,7 @@ /obj/structure/destructible/clockwork/powered/prolonging_prism/process() var/turf/own_turf = get_turf(src) - if(SSshuttle.emergency.mode != SHUTTLE_CALL || delay_remaining <= 0 || !own_turf || own_turf.z != ZLEVEL_STATION) + if(SSshuttle.emergency.mode != SHUTTLE_CALL || delay_remaining <= 0 || !own_turf || !(own_turf.z in GLOB.station_z_levels)) forced_disable(FALSE) return . = ..() @@ -97,7 +97,7 @@ mean_x = Ceiling(mean_x) else mean_x = Floor(mean_x) - var/turf/semi_random_center_turf = locate(mean_x, mean_y, ZLEVEL_STATION) + var/turf/semi_random_center_turf = locate(mean_x, mean_y, ZLEVEL_STATION_PRIMARY) for(var/t in getline(src, semi_random_center_turf)) prism_turfs[t] = TRUE var/placement_style = prob(50) diff --git a/code/game/gamemodes/clock_cult/clock_structures/tinkerers_daemon.dm b/code/game/gamemodes/clock_cult/clock_structures/tinkerers_daemon.dm index 079fd081fe..4ceb7c3e26 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/tinkerers_daemon.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/tinkerers_daemon.dm @@ -33,7 +33,7 @@ to_chat(user, "It is currently producing random components.") to_chat(user, "It will produce a component every [round((production_cooldown*0.1) * get_efficiency_mod(TRUE), 0.1)] seconds and requires at least the following power for each component type:") for(var/i in GLOB.clockwork_component_cache) - to_chat(user, "[get_component_icon(i)] [get_component_name(i)]: [get_component_cost(i)]W ([GLOB.clockwork_component_cache[i]] exist[GLOB.clockwork_component_cache[i] == 1 ? "s" : ""])") + to_chat(user, "[get_component_icon(i)] [get_component_name(i)]: [DisplayPower(get_component_cost(i))] ([GLOB.clockwork_component_cache[i]] exist[GLOB.clockwork_component_cache[i] == 1 ? "s" : ""])") /obj/structure/destructible/clockwork/powered/tinkerers_daemon/forced_disable(bad_effects) if(active) @@ -80,7 +80,7 @@ if("Specific Component") var/list/components = list() for(var/i in GLOB.clockwork_component_cache) - components["[get_component_name(i)] ([get_component_cost(i)]W)"] = i + components["[get_component_name(i)] ([DisplayPower(get_component_cost(i))])"] = i var/input_component = input(user, "Choose a component type.", name) as null|anything in components component_id_to_produce = components[input_component] servants = 0 diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 624fa83a57..e16f991af7 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -104,7 +104,7 @@ if(!GLOB.summon_spots.len) while(GLOB.summon_spots.len < SUMMON_POSSIBILITIES) var/area/summon = pick(GLOB.sortedAreas - GLOB.summon_spots) - if((summon.z == ZLEVEL_STATION) && summon.valid_territory) + if((summon.z in GLOB.station_z_levels) && summon.valid_territory) GLOB.summon_spots += summon cult_objectives += "eldergod" diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index a9255e89da..4dd5f70731 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -257,7 +257,7 @@ This file contains the arcane tome files. to_chat(user, "There is already a rune here.") return FALSE - if(T.z != ZLEVEL_STATION && T.z != ZLEVEL_MINING) + if(!(T.z in GLOB.station_z_levels) && T.z != ZLEVEL_MINING) to_chat(user, "The veil is not weak enough here.") return FALSE diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 936afe9090..089265d2fb 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -465,7 +465,7 @@ structure_check() searches for nearby cultist structures required for the invoca /obj/effect/rune/narsie/invoke(var/list/invokers) if(used) return - if(z != ZLEVEL_STATION) + if(!(z in GLOB.station_z_levels)) return if(locate(/obj/singularity/narsie) in GLOB.poi_list) diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm index a56a2d6647..b405cc935c 100644 --- a/code/game/gamemodes/events.dm +++ b/code/game/gamemodes/events.dm @@ -1,80 +1,80 @@ -/proc/power_failure() - priority_announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Critical Power Failure", 'sound/ai/poweroff.ogg') - for(var/obj/machinery/power/smes/S in GLOB.machines) - if(istype(get_area(S), /area/ai_monitored/turret_protected) || S.z != ZLEVEL_STATION) - continue - S.charge = 0 - S.output_level = 0 - S.output_attempt = 0 - S.update_icon() - S.power_change() - - var/list/skipped_areas = list(/area/engine/engineering, /area/engine/supermatter, /area/engine/atmospherics_engine, /area/ai_monitored/turret_protected/ai) - - for(var/area/A in world) - if( !A.requires_power || A.always_unpowered ) - continue - - var/skip = 0 - for(var/area_type in skipped_areas) - if(istype(A,area_type)) - skip = 1 - break - if(A.contents) - for(var/atom/AT in A.contents) - if(AT.z != ZLEVEL_STATION) //Only check one, it's enough. - skip = 1 - break - if(skip) continue +/proc/power_failure() + priority_announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Critical Power Failure", 'sound/ai/poweroff.ogg') + for(var/obj/machinery/power/smes/S in GLOB.machines) + if(istype(get_area(S), /area/ai_monitored/turret_protected) || !(S.z in GLOB.station_z_levels)) + continue + S.charge = 0 + S.output_level = 0 + S.output_attempt = 0 + S.update_icon() + S.power_change() + + var/list/skipped_areas = list(/area/engine/engineering, /area/engine/supermatter, /area/engine/atmospherics_engine, /area/ai_monitored/turret_protected/ai) + + for(var/area/A in world) + if( !A.requires_power || A.always_unpowered ) + continue + + var/skip = 0 + for(var/area_type in skipped_areas) + if(istype(A,area_type)) + skip = 1 + break + if(A.contents) + for(var/atom/AT in A.contents) + if(!(AT.z in GLOB.station_z_levels)) //Only check one, it's enough. + skip = 1 + break + if(skip) continue A.power_light = FALSE A.power_equip = FALSE A.power_environ = FALSE - A.power_change() - - for(var/obj/machinery/power/apc/C in GLOB.apcs_list) - if(C.cell && C.z == ZLEVEL_STATION) + A.power_change() + + for(var/obj/machinery/power/apc/C in GLOB.apcs_list) + if(C.cell && (C.z in GLOB.station_z_levels)) var/area/A = C.area - - var/skip = 0 - for(var/area_type in skipped_areas) - if(istype(A,area_type)) - skip = 1 - break - if(skip) continue - - C.cell.charge = 0 - -/proc/power_restore() - - priority_announce("Power has been restored to [station_name()]. We apologize for the inconvenience.", "Power Systems Nominal", 'sound/ai/poweron.ogg') - for(var/obj/machinery/power/apc/C in GLOB.machines) - if(C.cell && C.z == ZLEVEL_STATION) - C.cell.charge = C.cell.maxcharge - C.failure_timer = 0 - for(var/obj/machinery/power/smes/S in GLOB.machines) - if(S.z != ZLEVEL_STATION) - continue - S.charge = S.capacity - S.output_level = S.output_level_max - S.output_attempt = 1 - S.update_icon() - S.power_change() - for(var/area/A in world) + + var/skip = 0 + for(var/area_type in skipped_areas) + if(istype(A,area_type)) + skip = 1 + break + if(skip) continue + + C.cell.charge = 0 + +/proc/power_restore() + + priority_announce("Power has been restored to [station_name()]. We apologize for the inconvenience.", "Power Systems Nominal", 'sound/ai/poweron.ogg') + for(var/obj/machinery/power/apc/C in GLOB.machines) + if(C.cell && (C.z in GLOB.station_z_levels)) + C.cell.charge = C.cell.maxcharge + C.failure_timer = 0 + for(var/obj/machinery/power/smes/S in GLOB.machines) + if(!(S.z in GLOB.station_z_levels)) + continue + S.charge = S.capacity + S.output_level = S.output_level_max + S.output_attempt = 1 + S.update_icon() + S.power_change() + for(var/area/A in world) if(!istype(A, /area/space) && !istype(A, /area/shuttle) && !istype(A, /area/arrival)) A.power_light = TRUE A.power_equip = TRUE A.power_environ = TRUE - A.power_change() - -/proc/power_restore_quick() - - priority_announce("All SMESs on [station_name()] have been recharged. We apologize for the inconvenience.", "Power Systems Nominal", 'sound/ai/poweron.ogg') - for(var/obj/machinery/power/smes/S in GLOB.machines) - if(S.z != ZLEVEL_STATION) - continue - S.charge = S.capacity - S.output_level = S.output_level_max - S.output_attempt = 1 - S.update_icon() - S.power_change() - + A.power_change() + +/proc/power_restore_quick() + + priority_announce("All SMESs on [station_name()] have been recharged. We apologize for the inconvenience.", "Power Systems Nominal", 'sound/ai/poweron.ogg') + for(var/obj/machinery/power/smes/S in GLOB.machines) + if(!(S.z in GLOB.station_z_levels)) + continue + S.charge = S.capacity + S.output_level = S.output_level_max + S.output_attempt = 1 + S.update_icon() + S.power_change() + diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 1c134205b2..311f2e505a 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -1,592 +1,560 @@ - - -/* - * GAMEMODES (by Rastaf0) - * - * In the new mode system all special roles are fully supported. - * You can have proper wizards/traitors/changelings/cultists during any mode. - * Only two things really depends on gamemode: - * 1. Starting roles, equipment and preparations - * 2. Conditions of finishing the round. - * - */ - - -/datum/game_mode - var/name = "invalid" - var/config_tag = null - var/votable = 1 - var/probability = 0 - var/station_was_nuked = 0 //see nuclearbomb.dm and malfunction.dm - var/explosion_in_progress = 0 //sit back and relax - var/round_ends_with_antag_death = 0 //flags_1 the "one verse the station" antags as such - var/list/datum/mind/modePlayer = new - var/list/datum/mind/antag_candidates = list() // List of possible starting antags goes here - var/list/restricted_jobs = list() // Jobs it doesn't make sense to be. I.E chaplain or AI cultist - var/list/protected_jobs = list() // Jobs that can't be traitors because - var/required_players = 0 - var/maximum_players = -1 // -1 is no maximum, positive numbers limit the selection of a mode on overstaffed stations - var/required_enemies = 0 - var/recommended_enemies = 0 - var/antag_flag = null //preferences flag such as BE_WIZARD that need to be turned on for players to be antag - var/mob/living/living_antag_player = null - var/list/datum/game_mode/replacementmode = null - var/round_converted = 0 //0: round not converted, 1: round going to convert, 2: round converted - var/reroll_friendly //During mode conversion only these are in the running - var/continuous_sanity_checked //Catches some cases where config options could be used to suggest that modes without antagonists should end when all antagonists die - var/enemy_minimum_age = 7 //How many days must players have been playing before they can play this antagonist - - var/announce_span = "warning" //The gamemode's name will be in this span during announcement. - var/announce_text = "This gamemode forgot to set a descriptive text! Uh oh!" //Used to describe a gamemode when it's announced. - - var/const/waittime_l = 600 - var/const/waittime_h = 1800 // started at 1800 - - var/list/datum/station_goal/station_goals = list() - - var/allow_persistence_save = TRUE - -/datum/game_mode/proc/announce() //Shows the gamemode's name and a fast description. - to_chat(world, "The gamemode is: [name]!") - to_chat(world, "[announce_text]") - - -///Checks to see if the game can be setup and ran with the current number of players or whatnot. -/datum/game_mode/proc/can_start() - var/playerC = 0 - for(var/mob/dead/new_player/player in GLOB.player_list) - if((player.client)&&(player.ready == PLAYER_READY_TO_PLAY)) - playerC++ - if(!GLOB.Debug2) - if(playerC < required_players || (maximum_players >= 0 && playerC > maximum_players)) - return 0 - antag_candidates = get_players_for_role(antag_flag) - if(!GLOB.Debug2) - if(antag_candidates.len < required_enemies) - return 0 - return 1 - else - message_admins("DEBUG: GAME STARTING WITHOUT PLAYER NUMBER CHECKS, THIS WILL PROBABLY BREAK SHIT.") - return 1 - - -///Attempts to select players for special roles the mode might have. -/datum/game_mode/proc/pre_setup() - return 1 - - -///Everyone should now be on the station and have their normal gear. This is the place to give the special roles extra things -/datum/game_mode/proc/post_setup(report) //Gamemodes can override the intercept report. Passing TRUE as the argument will force a report. - if(!report) - report = config.intercept - addtimer(CALLBACK(GLOBAL_PROC, .proc/display_roundstart_logout_report), ROUNDSTART_LOGOUT_REPORT_TIME) - - if(SSdbcore.Connect()) - var/sql - if(SSticker.mode) - sql += "game_mode = '[SSticker.mode]'" - if(GLOB.revdata.originmastercommit) - if(sql) - sql += ", " - sql += "commit_hash = '[GLOB.revdata.originmastercommit]'" - if(sql) - var/datum/DBQuery/query_round_game_mode = SSdbcore.NewQuery("UPDATE [format_table_name("round")] SET [sql] WHERE id = [GLOB.round_id]") - query_round_game_mode.Execute() - if(report) - addtimer(CALLBACK(src, .proc/send_intercept, 0), rand(waittime_l, waittime_h)) - generate_station_goals() - return 1 - - -///Handles late-join antag assignments -/datum/game_mode/proc/make_antag_chance(mob/living/carbon/human/character) - if(replacementmode && round_converted == 2) - replacementmode.make_antag_chance(character) - return - - -///Allows rounds to basically be "rerolled" should the initial premise fall through. Also known as mulligan antags. -/datum/game_mode/proc/convert_roundtype() - set waitfor = FALSE - var/list/living_crew = list() - - for(var/mob/Player in GLOB.mob_list) - if(Player.mind && Player.stat != DEAD && !isnewplayer(Player) && !isbrain(Player) && Player.client) - living_crew += Player - if(living_crew.len / GLOB.joined_player_list.len <= config.midround_antag_life_check) //If a lot of the player base died, we start fresh - message_admins("Convert_roundtype failed due to too many dead people. Limit is [config.midround_antag_life_check * 100]% living crew") - return null - - var/list/datum/game_mode/runnable_modes = config.get_runnable_midround_modes(living_crew.len) - var/list/datum/game_mode/usable_modes = list() - for(var/datum/game_mode/G in runnable_modes) - if(G.reroll_friendly && living_crew >= G.required_players) - usable_modes += G - else - qdel(G) - - if(!usable_modes) - message_admins("Convert_roundtype failed due to no valid modes to convert to. Please report this error to the Coders.") - return null - - replacementmode = pickweight(usable_modes) - - switch(SSshuttle.emergency.mode) //Rounds on the verge of ending don't get new antags, they just run out - if(SHUTTLE_STRANDED, SHUTTLE_ESCAPE) - return 1 - if(SHUTTLE_CALL) - if(SSshuttle.emergency.timeLeft(1) < initial(SSshuttle.emergencyCallTime)*0.5) - return 1 - - if(world.time >= (config.midround_antag_time_check * 600)) - message_admins("Convert_roundtype failed due to round length. Limit is [config.midround_antag_time_check] minutes.") - return null - - var/list/antag_candidates = list() - - for(var/mob/living/carbon/human/H in living_crew) - if(H.client && H.client.prefs.allow_midround_antag) - antag_candidates += H - - if(!antag_candidates) - message_admins("Convert_roundtype failed due to no antag candidates.") - return null - - antag_candidates = shuffle(antag_candidates) - - if(config.protect_roles_from_antagonist) - replacementmode.restricted_jobs += replacementmode.protected_jobs - if(config.protect_assistant_from_antagonist) - replacementmode.restricted_jobs += "Assistant" - - message_admins("The roundtype will be converted. If you have other plans for the station or feel the station is too messed up to inhabit stop the creation of antags or end the round now.") - - . = 1 - sleep(rand(600,1800)) - if(!SSticker.IsRoundInProgress()) - message_admins("Roundtype conversion cancelled, the game appears to have finished!") - round_converted = 0 - return - //somewhere between 1 and 3 minutes from now - if(!config.midround_antag[SSticker.mode.config_tag]) - round_converted = 0 - return 1 - for(var/mob/living/carbon/human/H in antag_candidates) - replacementmode.make_antag_chance(H) - round_converted = 2 - message_admins("-- IMPORTANT: The roundtype has been converted to [replacementmode.name], antagonists may have been created! --") - - -///Called by the gameSSticker -/datum/game_mode/process() - return 0 - - -/datum/game_mode/proc/check_finished(force_ending) //to be called by SSticker - if(replacementmode && round_converted == 2) - return replacementmode.check_finished() - if(SSshuttle.emergency && (SSshuttle.emergency.mode == SHUTTLE_ENDGAME)) - return TRUE - if(station_was_nuked) - return TRUE - if(!round_converted && (!config.continuous[config_tag] || (config.continuous[config_tag] && config.midround_antag[config_tag]))) //Non-continuous or continous with replacement antags - if(!continuous_sanity_checked) //make sure we have antags to be checking in the first place - for(var/mob/Player in GLOB.mob_list) - if(Player.mind) - if(Player.mind.special_role) - continuous_sanity_checked = 1 - return 0 - if(!continuous_sanity_checked) - message_admins("The roundtype ([config_tag]) has no antagonists, continuous round has been defaulted to on and midround_antag has been defaulted to off.") - config.continuous[config_tag] = 1 - config.midround_antag[config_tag] = 0 - SSshuttle.clearHostileEnvironment(src) - return 0 - - - if(living_antag_player && living_antag_player.mind && isliving(living_antag_player) && living_antag_player.stat != DEAD && !isnewplayer(living_antag_player) &&!isbrain(living_antag_player)) - return 0 //A resource saver: once we find someone who has to die for all antags to be dead, we can just keep checking them, cycling over everyone only when we lose our mark. - - for(var/mob/Player in GLOB.living_mob_list) - if(Player.mind && Player.stat != DEAD && !isnewplayer(Player) &&!isbrain(Player) && Player.client) - if(Player.mind.special_role) //Someone's still antaging! - living_antag_player = Player - return 0 - - if(!config.continuous[config_tag] || force_ending) - return 1 - - else - round_converted = convert_roundtype() - if(!round_converted) - if(round_ends_with_antag_death) - return 1 - else - config.midround_antag[config_tag] = 0 - return 0 - - return 0 - - -/datum/game_mode/proc/declare_completion() - var/clients = 0 - var/surviving_humans = 0 - var/surviving_total = 0 - var/ghosts = 0 - var/escaped_humans = 0 - var/escaped_total = 0 - - for(var/mob/M in GLOB.player_list) - if(M.client) - clients++ - if(ishuman(M)) - if(!M.stat) - surviving_humans++ - if(M.z == ZLEVEL_CENTCOM) - escaped_humans++ - if(!M.stat) - surviving_total++ - if(M.z == ZLEVEL_CENTCOM) - escaped_total++ - - - if(isobserver(M)) - ghosts++ - - if(clients > 0) - SSblackbox.set_val("round_end_clients",clients) - if(ghosts > 0) - SSblackbox.set_val("round_end_ghosts",ghosts) - if(surviving_humans > 0) - SSblackbox.set_val("survived_human",surviving_humans) - if(surviving_total > 0) - SSblackbox.set_val("survived_total",surviving_total) - if(escaped_humans > 0) - SSblackbox.set_val("escaped_human",escaped_humans) - if(escaped_total > 0) - SSblackbox.set_val("escaped_total",escaped_total) - send2irc("Server", "Round just ended.") - if(cult.len && !istype(SSticker.mode, /datum/game_mode/cult)) - datum_cult_completion() - - - if(GLOB.borers.len) - var/borertext = "
The borers were:" - for(var/mob/living/simple_animal/borer/B in GLOB.borers) - if((B.key || B.controlling) && B.stat != DEAD) - borertext += "
[B.controlling ? B.victim.key : B.key] was [B.truename]" - var/count = 1 - for(var/datum/objective/objective in B.mind.objectives) - if(objective.check_completion()) - borertext += "
Objective #[count]: [objective.explanation_text] Success!" - else - borertext += "
Objective #[count]: [objective.explanation_text] Fail." - count++ - - - to_chat(world, borertext) - - var/total_borers = 0 - for(var/mob/living/simple_animal/borer/B in GLOB.borers) - if((B.key || B.victim) && B.stat != DEAD) - total_borers++ - if(total_borers) - var/total_borer_hosts = 0 - for(var/mob/living/carbon/C in GLOB.mob_list) - var/mob/living/simple_animal/borer/D = C.has_brain_worms() - var/turf/location = get_turf(C) - if(location.z == ZLEVEL_CENTCOM && D && D.stat != DEAD) - total_borer_hosts++ - to_chat(world, "There were [total_borers] borers alive at round end!") - to_chat(world, "A total of [total_borer_hosts] borers with hosts escaped on the shuttle alive.") - - CHECK_TICK - return 0 - - -/datum/game_mode/proc/check_win() //universal trigger to be called at mob death, nuke explosion, etc. To be called from everywhere. - return 0 - - -/datum/game_mode/proc/send_intercept() - var/intercepttext = "Central Command Status Summary
" - intercepttext += "Central Command has intercepted and partially decoded a Syndicate transmission with vital information regarding their movements. The following report outlines the most \ - likely threats to appear in your sector." - var/list/possible_modes = list() - possible_modes.Add("blob", "changeling", "clock_cult", "cult", "extended", "malf", "nuclear", "revolution", "traitor", "wizard") - possible_modes -= name //remove the current gamemode to prevent it from being randomly deleted, it will be readded later - - for(var/i in 1 to 6) //Remove a few modes to leave four - possible_modes -= pick(possible_modes) - - possible_modes |= name //Re-add the actual gamemode - the intercept will thus always have the correct mode in its list - possible_modes = shuffle(possible_modes) //Meta prevention - - var/datum/intercept_text/i_text = new /datum/intercept_text - for(var/V in possible_modes) - intercepttext += i_text.build(V) - - if(station_goals.len) - intercepttext += "
Special Orders for [station_name()]:" - for(var/datum/station_goal/G in station_goals) - G.on_report() - intercepttext += G.get_report() - - print_command_report(intercepttext, "Central Command Status Summary", announce=FALSE) - priority_announce("A summary has been copied and printed to all communications consoles.", "Enemy communication intercepted. Security level elevated.", 'sound/ai/intercept.ogg') - if(GLOB.security_level < SEC_LEVEL_BLUE) - set_security_level(SEC_LEVEL_BLUE) - - -/datum/game_mode/proc/get_players_for_role(role) - var/list/players = list() - var/list/candidates = list() - var/list/drafted = list() - var/datum/mind/applicant = null - - // Ultimate randomizing code right here - for(var/mob/dead/new_player/player in GLOB.player_list) - if(player.client && player.ready == PLAYER_READY_TO_PLAY) - players += player - - // Shuffling, the players list is now ping-independent!!! - // Goodbye antag dante - players = shuffle(players) - - for(var/mob/dead/new_player/player in players) - if(player.client && player.ready == PLAYER_READY_TO_PLAY) - if(role in player.client.prefs.be_special) - if(!jobban_isbanned(player, "Syndicate") && !jobban_isbanned(player, role)) //Nodrak/Carn: Antag Job-bans - if(age_check(player.client)) //Must be older than the minimum age - candidates += player.mind // Get a list of all the people who want to be the antagonist for this round - - if(restricted_jobs) - for(var/datum/mind/player in candidates) - for(var/job in restricted_jobs) // Remove people who want to be antagonist but have a job already that precludes it - if(player.assigned_role == job) - candidates -= player - - if(candidates.len < recommended_enemies) - for(var/mob/dead/new_player/player in players) - if(player.client && player.ready == PLAYER_READY_TO_PLAY) - if(!(role in player.client.prefs.be_special)) // We don't have enough people who want to be antagonist, make a separate list of people who don't want to be one - if(!jobban_isbanned(player, "Syndicate") && !jobban_isbanned(player, role)) //Nodrak/Carn: Antag Job-bans - drafted += player.mind - - if(restricted_jobs) - for(var/datum/mind/player in drafted) // Remove people who can't be an antagonist - for(var/job in restricted_jobs) - if(player.assigned_role == job) - drafted -= player - - drafted = shuffle(drafted) // Will hopefully increase randomness, Donkie - - while(candidates.len < recommended_enemies) // Pick randomlly just the number of people we need and add them to our list of candidates - if(drafted.len > 0) - applicant = pick(drafted) - if(applicant) - candidates += applicant - drafted.Remove(applicant) - - else // Not enough scrubs, ABORT ABORT ABORT - break - - if(restricted_jobs) - for(var/datum/mind/player in drafted) // Remove people who can't be an antagonist - for(var/job in restricted_jobs) - if(player.assigned_role == job) - drafted -= player - - drafted = shuffle(drafted) // Will hopefully increase randomness, Donkie - - while(candidates.len < recommended_enemies) // Pick randomlly just the number of people we need and add them to our list of candidates - if(drafted.len > 0) - applicant = pick(drafted) - if(applicant) - candidates += applicant - drafted.Remove(applicant) - - else // Not enough scrubs, ABORT ABORT ABORT - break - - return candidates // Returns: The number of people who had the antagonist role set to yes, regardless of recomended_enemies, if that number is greater than recommended_enemies - // recommended_enemies if the number of people with that role set to yes is less than recomended_enemies, - // Less if there are not enough valid players in the game entirely to make recommended_enemies. - - - -/datum/game_mode/proc/num_players() - . = 0 - for(var/mob/dead/new_player/P in GLOB.player_list) - if(P.client && P.ready == PLAYER_READY_TO_PLAY) - . ++ - -/////////////////////////////////// -//Keeps track of all living heads// -/////////////////////////////////// -/datum/game_mode/proc/get_living_heads() - . = list() - for(var/mob/living/carbon/human/player in GLOB.mob_list) - if(player.stat != DEAD && player.mind && (player.mind.assigned_role in GLOB.command_positions)) - . |= player.mind - - -//////////////////////////// -//Keeps track of all heads// -//////////////////////////// -/datum/game_mode/proc/get_all_heads() - . = list() - for(var/mob/player in GLOB.mob_list) - if(player.mind && (player.mind.assigned_role in GLOB.command_positions)) - . |= player.mind - -////////////////////////////////////////////// -//Keeps track of all living security members// -////////////////////////////////////////////// -/datum/game_mode/proc/get_living_sec() - . = list() - for(var/mob/living/carbon/human/player in GLOB.mob_list) - if(player.stat != DEAD && player.mind && (player.mind.assigned_role in GLOB.security_positions)) - . |= player.mind - -//////////////////////////////////////// -//Keeps track of all security members// -//////////////////////////////////////// -/datum/game_mode/proc/get_all_sec() - . = list() - for(var/mob/living/carbon/human/player in GLOB.mob_list) - if(player.mind && (player.mind.assigned_role in GLOB.security_positions)) - . |= player.mind - -////////////////////////// -//Reports player logouts// -////////////////////////// -/proc/display_roundstart_logout_report() - var/msg = "Roundstart logout report\n\n" - for(var/mob/living/L in GLOB.mob_list) - - if(L.ckey) - var/found = 0 - for(var/client/C in GLOB.clients) - if(C.ckey == L.ckey) - found = 1 - break - if(!found) - msg += "[L.name] ([L.ckey]), the [L.job] (Disconnected)\n" - - - if(L.ckey && L.client) - if(L.client.inactivity >= (ROUNDSTART_LOGOUT_REPORT_TIME / 2)) //Connected, but inactive (alt+tabbed or something) - msg += "[L.name] ([L.ckey]), the [L.job] (Connected, Inactive)\n" - continue //AFK client - if(L.stat) - if(L.suiciding) //Suicider - msg += "[L.name] ([L.ckey]), the [L.job] (Suicide)\n" - continue //Disconnected client - if(L.stat == UNCONSCIOUS) - msg += "[L.name] ([L.ckey]), the [L.job] (Dying)\n" - continue //Unconscious - if(L.stat == DEAD) - msg += "[L.name] ([L.ckey]), the [L.job] (Dead)\n" - continue //Dead - - continue //Happy connected client - for(var/mob/dead/observer/D in GLOB.mob_list) - if(D.mind && D.mind.current == L) - if(L.stat == DEAD) - if(L.suiciding) //Suicider - msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] (Suicide)\n" - continue //Disconnected client - else - msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] (Dead)\n" - continue //Dead mob, ghost abandoned - else - if(D.can_reenter_corpse) - continue //Adminghost, or cult/wizard ghost - else - msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] (Ghosted)\n" - continue //Ghosted while alive - - - - for(var/mob/M in GLOB.mob_list) - if(M.client && M.client.holder) - to_chat(M, msg) - -/datum/game_mode/proc/printplayer(datum/mind/ply, fleecheck) - var/text = "
[ply.key] was [ply.name] the [ply.assigned_role] and" - if(ply.current) - if(ply.current.stat == DEAD) - text += " died" - else - text += " survived" - if(fleecheck && ply.current.z > ZLEVEL_STATION) - text += " while fleeing the station" - if(ply.current.real_name != ply.name) - text += " as [ply.current.real_name]" - else - text += " had their body destroyed" - return text - -/datum/game_mode/proc/printobjectives(datum/mind/ply) - var/text = "" - var/count = 1 - for(var/datum/objective/objective in ply.objectives) - if(objective.check_completion()) - text += "
Objective #[count]: [objective.explanation_text] Success!" - else - text += "
Objective #[count]: [objective.explanation_text] Fail." - count++ - return text - -//If the configuration option is set to require players to be logged as old enough to play certain jobs, then this proc checks that they are, otherwise it just returns 1 -/datum/game_mode/proc/age_check(client/C) - if(get_remaining_days(C) == 0) - return 1 //Available in 0 days = available right now = player is old enough to play. - return 0 - - -/datum/game_mode/proc/get_remaining_days(client/C) - if(!C) - return 0 - if(!config.use_age_restriction_for_jobs) - return 0 - if(!isnum(C.player_age)) - return 0 //This is only a number if the db connection is established, otherwise it is text: "Requires database", meaning these restrictions cannot be enforced - if(!isnum(enemy_minimum_age)) - return 0 - - return max(0, enemy_minimum_age - C.player_age) - -/datum/game_mode/proc/replace_jobbaned_player(mob/living/M, role_type, pref) - var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as a [role_type]?", "[role_type]", null, pref, 50, M) - var/mob/dead/observer/theghost = null - if(candidates.len) - theghost = pick(candidates) - to_chat(M, "Your mob has been taken over by a ghost! Appeal your job ban if you want to avoid this in the future!") - message_admins("[key_name_admin(theghost)] has taken control of ([key_name_admin(M)]) to replace a jobbaned player.") - M.ghostize(0) - M.key = theghost.key - -/datum/game_mode/proc/remove_antag_for_borging(datum/mind/newborgie) - SSticker.mode.remove_cultist(newborgie, 0, 0) - SSticker.mode.remove_revolutionary(newborgie, 0) - -/datum/game_mode/proc/generate_station_goals() - var/list/possible = list() - for(var/T in subtypesof(/datum/station_goal)) - var/datum/station_goal/G = T - if(config_tag in initial(G.gamemode_blacklist)) - continue - possible += T - var/goal_weights = 0 - while(possible.len && goal_weights < STATION_GOAL_BUDGET) - var/datum/station_goal/picked = pick_n_take(possible) - goal_weights += initial(picked.weight) - station_goals += new picked - - -/datum/game_mode/proc/declare_station_goal_completion() - for(var/V in station_goals) - var/datum/station_goal/G = V - G.print_result() + + +/* + * GAMEMODES (by Rastaf0) + * + * In the new mode system all special roles are fully supported. + * You can have proper wizards/traitors/changelings/cultists during any mode. + * Only two things really depends on gamemode: + * 1. Starting roles, equipment and preparations + * 2. Conditions of finishing the round. + * + */ + + +/datum/game_mode + var/name = "invalid" + var/config_tag = null + var/votable = 1 + var/probability = 0 + var/station_was_nuked = 0 //see nuclearbomb.dm and malfunction.dm + var/explosion_in_progress = 0 //sit back and relax + var/round_ends_with_antag_death = 0 //flags the "one verse the station" antags as such + var/list/datum/mind/modePlayer = new + var/list/datum/mind/antag_candidates = list() // List of possible starting antags goes here + var/list/restricted_jobs = list() // Jobs it doesn't make sense to be. I.E chaplain or AI cultist + var/list/protected_jobs = list() // Jobs that can't be traitors because + var/required_players = 0 + var/maximum_players = -1 // -1 is no maximum, positive numbers limit the selection of a mode on overstaffed stations + var/required_enemies = 0 + var/recommended_enemies = 0 + var/antag_flag = null //preferences flag such as BE_WIZARD that need to be turned on for players to be antag + var/mob/living/living_antag_player = null + var/list/datum/game_mode/replacementmode = null + var/round_converted = 0 //0: round not converted, 1: round going to convert, 2: round converted + var/reroll_friendly //During mode conversion only these are in the running + var/continuous_sanity_checked //Catches some cases where config options could be used to suggest that modes without antagonists should end when all antagonists die + var/enemy_minimum_age = 7 //How many days must players have been playing before they can play this antagonist + + var/announce_span = "warning" //The gamemode's name will be in this span during announcement. + var/announce_text = "This gamemode forgot to set a descriptive text! Uh oh!" //Used to describe a gamemode when it's announced. + + var/const/waittime_l = 600 + var/const/waittime_h = 1800 // started at 1800 + + var/list/datum/station_goal/station_goals = list() + + var/allow_persistence_save = TRUE + +/datum/game_mode/proc/announce() //Shows the gamemode's name and a fast description. + to_chat(world, "The gamemode is: [name]!") + to_chat(world, "[announce_text]") + + +///Checks to see if the game can be setup and ran with the current number of players or whatnot. +/datum/game_mode/proc/can_start() + var/playerC = 0 + for(var/mob/dead/new_player/player in GLOB.player_list) + if((player.client)&&(player.ready == PLAYER_READY_TO_PLAY)) + playerC++ + if(!GLOB.Debug2) + if(playerC < required_players || (maximum_players >= 0 && playerC > maximum_players)) + return 0 + antag_candidates = get_players_for_role(antag_flag) + if(!GLOB.Debug2) + if(antag_candidates.len < required_enemies) + return 0 + return 1 + else + message_admins("DEBUG: GAME STARTING WITHOUT PLAYER NUMBER CHECKS, THIS WILL PROBABLY BREAK SHIT.") + return 1 + + +///Attempts to select players for special roles the mode might have. +/datum/game_mode/proc/pre_setup() + return 1 + + +///Everyone should now be on the station and have their normal gear. This is the place to give the special roles extra things +/datum/game_mode/proc/post_setup(report) //Gamemodes can override the intercept report. Passing TRUE as the argument will force a report. + if(!report) + report = config.intercept + addtimer(CALLBACK(GLOBAL_PROC, .proc/display_roundstart_logout_report), ROUNDSTART_LOGOUT_REPORT_TIME) + + if(SSdbcore.Connect()) + var/sql + if(SSticker.mode) + sql += "game_mode = '[SSticker.mode]'" + if(GLOB.revdata.originmastercommit) + if(sql) + sql += ", " + sql += "commit_hash = '[GLOB.revdata.originmastercommit]'" + if(sql) + var/datum/DBQuery/query_round_game_mode = SSdbcore.NewQuery("UPDATE [format_table_name("round")] SET [sql] WHERE id = [GLOB.round_id]") + query_round_game_mode.Execute() + if(report) + addtimer(CALLBACK(src, .proc/send_intercept, 0), rand(waittime_l, waittime_h)) + generate_station_goals() + return 1 + + +///Handles late-join antag assignments +/datum/game_mode/proc/make_antag_chance(mob/living/carbon/human/character) + if(replacementmode && round_converted == 2) + replacementmode.make_antag_chance(character) + return + + +///Allows rounds to basically be "rerolled" should the initial premise fall through. Also known as mulligan antags. +/datum/game_mode/proc/convert_roundtype() + set waitfor = FALSE + var/list/living_crew = list() + + for(var/mob/Player in GLOB.mob_list) + if(Player.mind && Player.stat != DEAD && !isnewplayer(Player) && !isbrain(Player) && Player.client) + living_crew += Player + if(living_crew.len / GLOB.joined_player_list.len <= config.midround_antag_life_check) //If a lot of the player base died, we start fresh + message_admins("Convert_roundtype failed due to too many dead people. Limit is [config.midround_antag_life_check * 100]% living crew") + return null + + var/list/datum/game_mode/runnable_modes = config.get_runnable_midround_modes(living_crew.len) + var/list/datum/game_mode/usable_modes = list() + for(var/datum/game_mode/G in runnable_modes) + if(G.reroll_friendly && living_crew >= G.required_players) + usable_modes += G + else + qdel(G) + + if(!usable_modes) + message_admins("Convert_roundtype failed due to no valid modes to convert to. Please report this error to the Coders.") + return null + + replacementmode = pickweight(usable_modes) + + switch(SSshuttle.emergency.mode) //Rounds on the verge of ending don't get new antags, they just run out + if(SHUTTLE_STRANDED, SHUTTLE_ESCAPE) + return 1 + if(SHUTTLE_CALL) + if(SSshuttle.emergency.timeLeft(1) < initial(SSshuttle.emergencyCallTime)*0.5) + return 1 + + if(world.time >= (config.midround_antag_time_check * 600)) + message_admins("Convert_roundtype failed due to round length. Limit is [config.midround_antag_time_check] minutes.") + return null + + var/list/antag_candidates = list() + + for(var/mob/living/carbon/human/H in living_crew) + if(H.client && H.client.prefs.allow_midround_antag) + antag_candidates += H + + if(!antag_candidates) + message_admins("Convert_roundtype failed due to no antag candidates.") + return null + + antag_candidates = shuffle(antag_candidates) + + if(config.protect_roles_from_antagonist) + replacementmode.restricted_jobs += replacementmode.protected_jobs + if(config.protect_assistant_from_antagonist) + replacementmode.restricted_jobs += "Assistant" + + message_admins("The roundtype will be converted. If you have other plans for the station or feel the station is too messed up to inhabit stop the creation of antags or end the round now.") + + . = 1 + sleep(rand(600,1800)) + if(!SSticker.IsRoundInProgress()) + message_admins("Roundtype conversion cancelled, the game appears to have finished!") + round_converted = 0 + return + //somewhere between 1 and 3 minutes from now + if(!config.midround_antag[SSticker.mode.config_tag]) + round_converted = 0 + return 1 + for(var/mob/living/carbon/human/H in antag_candidates) + replacementmode.make_antag_chance(H) + round_converted = 2 + message_admins("-- IMPORTANT: The roundtype has been converted to [replacementmode.name], antagonists may have been created! --") + + +///Called by the gameSSticker +/datum/game_mode/process() + return 0 + + +/datum/game_mode/proc/check_finished(force_ending) //to be called by SSticker + if(replacementmode && round_converted == 2) + return replacementmode.check_finished() + if(SSshuttle.emergency && (SSshuttle.emergency.mode == SHUTTLE_ENDGAME)) + return TRUE + if(station_was_nuked) + return TRUE + if(!round_converted && (!config.continuous[config_tag] || (config.continuous[config_tag] && config.midround_antag[config_tag]))) //Non-continuous or continous with replacement antags + if(!continuous_sanity_checked) //make sure we have antags to be checking in the first place + for(var/mob/Player in GLOB.mob_list) + if(Player.mind) + if(Player.mind.special_role) + continuous_sanity_checked = 1 + return 0 + if(!continuous_sanity_checked) + message_admins("The roundtype ([config_tag]) has no antagonists, continuous round has been defaulted to on and midround_antag has been defaulted to off.") + config.continuous[config_tag] = 1 + config.midround_antag[config_tag] = 0 + SSshuttle.clearHostileEnvironment(src) + return 0 + + + if(living_antag_player && living_antag_player.mind && isliving(living_antag_player) && living_antag_player.stat != DEAD && !isnewplayer(living_antag_player) &&!isbrain(living_antag_player)) + return 0 //A resource saver: once we find someone who has to die for all antags to be dead, we can just keep checking them, cycling over everyone only when we lose our mark. + + for(var/mob/Player in GLOB.living_mob_list) + if(Player.mind && Player.stat != DEAD && !isnewplayer(Player) &&!isbrain(Player) && Player.client) + if(Player.mind.special_role) //Someone's still antaging! + living_antag_player = Player + return 0 + + if(!config.continuous[config_tag] || force_ending) + return 1 + + else + round_converted = convert_roundtype() + if(!round_converted) + if(round_ends_with_antag_death) + return 1 + else + config.midround_antag[config_tag] = 0 + return 0 + + return 0 + + +/datum/game_mode/proc/declare_completion() + var/clients = 0 + var/surviving_humans = 0 + var/surviving_total = 0 + var/ghosts = 0 + var/escaped_humans = 0 + var/escaped_total = 0 + + for(var/mob/M in GLOB.player_list) + if(M.client) + clients++ + if(ishuman(M)) + if(!M.stat) + surviving_humans++ + if(M.z == ZLEVEL_CENTCOM) + escaped_humans++ + if(!M.stat) + surviving_total++ + if(M.z == ZLEVEL_CENTCOM) + escaped_total++ + + + if(isobserver(M)) + ghosts++ + + if(clients > 0) + SSblackbox.set_val("round_end_clients",clients) + if(ghosts > 0) + SSblackbox.set_val("round_end_ghosts",ghosts) + if(surviving_humans > 0) + SSblackbox.set_val("survived_human",surviving_humans) + if(surviving_total > 0) + SSblackbox.set_val("survived_total",surviving_total) + if(escaped_humans > 0) + SSblackbox.set_val("escaped_human",escaped_humans) + if(escaped_total > 0) + SSblackbox.set_val("escaped_total",escaped_total) + send2irc("Server", "Round just ended.") + if(cult.len && !istype(SSticker.mode, /datum/game_mode/cult)) + datum_cult_completion() + + return 0 + + +/datum/game_mode/proc/check_win() //universal trigger to be called at mob death, nuke explosion, etc. To be called from everywhere. + return 0 + + +/datum/game_mode/proc/send_intercept() + var/intercepttext = "Central Command Status Summary
" + intercepttext += "Central Command has intercepted and partially decoded a Syndicate transmission with vital information regarding their movements. The following report outlines the most \ + likely threats to appear in your sector." + var/list/possible_modes = list() + possible_modes.Add("blob", "changeling", "clock_cult", "cult", "extended", "malf", "nuclear", "revolution", "traitor", "wizard") + possible_modes -= name //remove the current gamemode to prevent it from being randomly deleted, it will be readded later + + for(var/i in 1 to 6) //Remove a few modes to leave four + possible_modes -= pick(possible_modes) + + possible_modes |= name //Re-add the actual gamemode - the intercept will thus always have the correct mode in its list + possible_modes = shuffle(possible_modes) //Meta prevention + + var/datum/intercept_text/i_text = new /datum/intercept_text + for(var/V in possible_modes) + intercepttext += i_text.build(V) + + if(station_goals.len) + intercepttext += "
Special Orders for [station_name()]:" + for(var/datum/station_goal/G in station_goals) + G.on_report() + intercepttext += G.get_report() + + print_command_report(intercepttext, "Central Command Status Summary", announce=FALSE) + priority_announce("A summary has been copied and printed to all communications consoles.", "Enemy communication intercepted. Security level elevated.", 'sound/ai/intercept.ogg') + if(GLOB.security_level < SEC_LEVEL_BLUE) + set_security_level(SEC_LEVEL_BLUE) + + +/datum/game_mode/proc/get_players_for_role(role) + var/list/players = list() + var/list/candidates = list() + var/list/drafted = list() + var/datum/mind/applicant = null + + // Ultimate randomizing code right here + for(var/mob/dead/new_player/player in GLOB.player_list) + if(player.client && player.ready == PLAYER_READY_TO_PLAY) + players += player + + // Shuffling, the players list is now ping-independent!!! + // Goodbye antag dante + players = shuffle(players) + + for(var/mob/dead/new_player/player in players) + if(player.client && player.ready == PLAYER_READY_TO_PLAY) + if(role in player.client.prefs.be_special) + if(!jobban_isbanned(player, "Syndicate") && !jobban_isbanned(player, role)) //Nodrak/Carn: Antag Job-bans + if(age_check(player.client)) //Must be older than the minimum age + candidates += player.mind // Get a list of all the people who want to be the antagonist for this round + + if(restricted_jobs) + for(var/datum/mind/player in candidates) + for(var/job in restricted_jobs) // Remove people who want to be antagonist but have a job already that precludes it + if(player.assigned_role == job) + candidates -= player + + if(candidates.len < recommended_enemies) + for(var/mob/dead/new_player/player in players) + if(player.client && player.ready == PLAYER_READY_TO_PLAY) + if(!(role in player.client.prefs.be_special)) // We don't have enough people who want to be antagonist, make a separate list of people who don't want to be one + if(!jobban_isbanned(player, "Syndicate") && !jobban_isbanned(player, role)) //Nodrak/Carn: Antag Job-bans + drafted += player.mind + + if(restricted_jobs) + for(var/datum/mind/player in drafted) // Remove people who can't be an antagonist + for(var/job in restricted_jobs) + if(player.assigned_role == job) + drafted -= player + + drafted = shuffle(drafted) // Will hopefully increase randomness, Donkie + + while(candidates.len < recommended_enemies) // Pick randomlly just the number of people we need and add them to our list of candidates + if(drafted.len > 0) + applicant = pick(drafted) + if(applicant) + candidates += applicant + drafted.Remove(applicant) + + else // Not enough scrubs, ABORT ABORT ABORT + break + + if(restricted_jobs) + for(var/datum/mind/player in drafted) // Remove people who can't be an antagonist + for(var/job in restricted_jobs) + if(player.assigned_role == job) + drafted -= player + + drafted = shuffle(drafted) // Will hopefully increase randomness, Donkie + + while(candidates.len < recommended_enemies) // Pick randomlly just the number of people we need and add them to our list of candidates + if(drafted.len > 0) + applicant = pick(drafted) + if(applicant) + candidates += applicant + drafted.Remove(applicant) + + else // Not enough scrubs, ABORT ABORT ABORT + break + + return candidates // Returns: The number of people who had the antagonist role set to yes, regardless of recomended_enemies, if that number is greater than recommended_enemies + // recommended_enemies if the number of people with that role set to yes is less than recomended_enemies, + // Less if there are not enough valid players in the game entirely to make recommended_enemies. + + + +/datum/game_mode/proc/num_players() + . = 0 + for(var/mob/dead/new_player/P in GLOB.player_list) + if(P.client && P.ready == PLAYER_READY_TO_PLAY) + . ++ + +/////////////////////////////////// +//Keeps track of all living heads// +/////////////////////////////////// +/datum/game_mode/proc/get_living_heads() + . = list() + for(var/mob/living/carbon/human/player in GLOB.mob_list) + if(player.stat != DEAD && player.mind && (player.mind.assigned_role in GLOB.command_positions)) + . |= player.mind + + +//////////////////////////// +//Keeps track of all heads// +//////////////////////////// +/datum/game_mode/proc/get_all_heads() + . = list() + for(var/mob/player in GLOB.mob_list) + if(player.mind && (player.mind.assigned_role in GLOB.command_positions)) + . |= player.mind + +////////////////////////////////////////////// +//Keeps track of all living security members// +////////////////////////////////////////////// +/datum/game_mode/proc/get_living_sec() + . = list() + for(var/mob/living/carbon/human/player in GLOB.mob_list) + if(player.stat != DEAD && player.mind && (player.mind.assigned_role in GLOB.security_positions)) + . |= player.mind + +//////////////////////////////////////// +//Keeps track of all security members// +//////////////////////////////////////// +/datum/game_mode/proc/get_all_sec() + . = list() + for(var/mob/living/carbon/human/player in GLOB.mob_list) + if(player.mind && (player.mind.assigned_role in GLOB.security_positions)) + . |= player.mind + +////////////////////////// +//Reports player logouts// +////////////////////////// +/proc/display_roundstart_logout_report() + var/msg = "Roundstart logout report\n\n" + for(var/mob/living/L in GLOB.mob_list) + + if(L.ckey) + var/found = 0 + for(var/client/C in GLOB.clients) + if(C.ckey == L.ckey) + found = 1 + break + if(!found) + msg += "[L.name] ([L.ckey]), the [L.job] (Disconnected)\n" + + + if(L.ckey && L.client) + if(L.client.inactivity >= (ROUNDSTART_LOGOUT_REPORT_TIME / 2)) //Connected, but inactive (alt+tabbed or something) + msg += "[L.name] ([L.ckey]), the [L.job] (Connected, Inactive)\n" + continue //AFK client + if(L.stat) + if(L.suiciding) //Suicider + msg += "[L.name] ([L.ckey]), the [L.job] (Suicide)\n" + continue //Disconnected client + if(L.stat == UNCONSCIOUS) + msg += "[L.name] ([L.ckey]), the [L.job] (Dying)\n" + continue //Unconscious + if(L.stat == DEAD) + msg += "[L.name] ([L.ckey]), the [L.job] (Dead)\n" + continue //Dead + + continue //Happy connected client + for(var/mob/dead/observer/D in GLOB.mob_list) + if(D.mind && D.mind.current == L) + if(L.stat == DEAD) + if(L.suiciding) //Suicider + msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] (Suicide)\n" + continue //Disconnected client + else + msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] (Dead)\n" + continue //Dead mob, ghost abandoned + else + if(D.can_reenter_corpse) + continue //Adminghost, or cult/wizard ghost + else + msg += "[L.name] ([ckey(D.mind.key)]), the [L.job] (Ghosted)\n" + continue //Ghosted while alive + + + + for(var/mob/M in GLOB.mob_list) + if(M.client && M.client.holder) + to_chat(M, msg) + +/datum/game_mode/proc/printplayer(datum/mind/ply, fleecheck) + var/text = "
[ply.key] was [ply.name] the [ply.assigned_role] and" + if(ply.current) + if(ply.current.stat == DEAD) + text += " died" + else + text += " survived" + if(fleecheck && (!(ply.current.z in GLOB.station_z_levels))) + text += " while fleeing the station" + if(ply.current.real_name != ply.name) + text += " as [ply.current.real_name]" + else + text += " had their body destroyed" + return text + +/datum/game_mode/proc/printobjectives(datum/mind/ply) + var/text = "" + var/count = 1 + for(var/datum/objective/objective in ply.objectives) + if(objective.check_completion()) + text += "
Objective #[count]: [objective.explanation_text] Success!" + else + text += "
Objective #[count]: [objective.explanation_text] Fail." + count++ + return text + +//If the configuration option is set to require players to be logged as old enough to play certain jobs, then this proc checks that they are, otherwise it just returns 1 +/datum/game_mode/proc/age_check(client/C) + if(get_remaining_days(C) == 0) + return 1 //Available in 0 days = available right now = player is old enough to play. + return 0 + + +/datum/game_mode/proc/get_remaining_days(client/C) + if(!C) + return 0 + if(!config.use_age_restriction_for_jobs) + return 0 + if(!isnum(C.player_age)) + return 0 //This is only a number if the db connection is established, otherwise it is text: "Requires database", meaning these restrictions cannot be enforced + if(!isnum(enemy_minimum_age)) + return 0 + + return max(0, enemy_minimum_age - C.player_age) + +/datum/game_mode/proc/replace_jobbaned_player(mob/living/M, role_type, pref) + var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as a [role_type]?", "[role_type]", null, pref, 50, M) + var/mob/dead/observer/theghost = null + if(candidates.len) + theghost = pick(candidates) + to_chat(M, "Your mob has been taken over by a ghost! Appeal your job ban if you want to avoid this in the future!") + message_admins("[key_name_admin(theghost)] has taken control of ([key_name_admin(M)]) to replace a jobbaned player.") + M.ghostize(0) + M.key = theghost.key + +/datum/game_mode/proc/remove_antag_for_borging(datum/mind/newborgie) + SSticker.mode.remove_cultist(newborgie, 0, 0) + SSticker.mode.remove_revolutionary(newborgie, 0) + +/datum/game_mode/proc/generate_station_goals() + var/list/possible = list() + for(var/T in subtypesof(/datum/station_goal)) + var/datum/station_goal/G = T + if(config_tag in initial(G.gamemode_blacklist)) + continue + possible += T + var/goal_weights = 0 + while(possible.len && goal_weights < STATION_GOAL_BUDGET) + var/datum/station_goal/picked = pick_n_take(possible) + goal_weights += initial(picked.weight) + station_goals += new picked + + +/datum/game_mode/proc/declare_station_goal_completion() + for(var/V in station_goals) + var/datum/station_goal/G = V + G.print_result() diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm index 339a445db6..a81bc80a5a 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/game/gamemodes/malfunction/Malf_Modules.dm @@ -232,7 +232,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( /datum/action/innate/ai/nuke_station/Activate() var/turf/T = get_turf(owner) - if(!istype(T) || T.z != ZLEVEL_STATION) + if(!istype(T) || !(T.z in GLOB.station_z_levels)) to_chat(owner, "You cannot activate the doomsday device while off-station!") return if(alert(owner, "Send arming signal? (true = arm, false = cancel)", "purge_all_life()", "confirm = TRUE;", "confirm = FALSE;") != "confirm = TRUE;") @@ -355,7 +355,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( /obj/machinery/doomsday_device/process() var/turf/T = get_turf(src) - if(!T || T.z != ZLEVEL_STATION) + if(!T || !(T.z in GLOB.station_z_levels)) minor_announce("DOOMSDAY DEVICE OUT OF STATION RANGE, ABORTING", "ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4", TRUE) SSshuttle.clearHostileEnvironment(src) qdel(src) @@ -373,7 +373,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( milestones[key] = TRUE minor_announce("[key] SECONDS UNTIL DOOMSDAY DEVICE ACTIVATION!", "ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4", TRUE) -/obj/machinery/doomsday_device/proc/detonate(z_level = ZLEVEL_STATION) +/obj/machinery/doomsday_device/proc/detonate(z_level = ZLEVEL_STATION_PRIMARY) sound_to_playing_players('sound/machines/alarm.ogg') sleep(100) for(var/mob/living/L in GLOB.mob_list) @@ -425,7 +425,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( /datum/action/innate/ai/lockdown/Activate() for(var/obj/machinery/door/D in GLOB.airlocks) - if(D.z != ZLEVEL_STATION) + if(!(D.z in GLOB.station_z_levels)) continue INVOKE_ASYNC(D, /obj/machinery/door.proc/hostile_lockdown, src) addtimer(CALLBACK(D, /obj/machinery/door.proc/disable_lockdown), 900) @@ -503,7 +503,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( /datum/action/innate/ai/break_fire_alarms/Activate() for(var/obj/machinery/firealarm/F in GLOB.machines) - if(F.z != ZLEVEL_STATION) + if(!(F.z in GLOB.station_z_levels)) continue F.emagged = TRUE to_chat(owner, "All thermal sensors on the station have been disabled. Fire alerts will no longer be recognized.") @@ -530,7 +530,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( /datum/action/innate/ai/break_air_alarms/Activate() for(var/obj/machinery/airalarm/AA in GLOB.machines) - if(AA.z != ZLEVEL_STATION) + if(!(AA.z in GLOB.station_z_levels)) continue AA.emagged = TRUE to_chat(owner, "All air alarm safeties on the station have been overriden. Air alarms may now use the Flood environmental mode.") diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index 0265b37194..3bb3c8b43e 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -31,15 +31,15 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event var/max_i = 10//number of tries to spawn meteor. while(!isspaceturf(pickedstart)) var/startSide = pick(GLOB.cardinals) - pickedstart = spaceDebrisStartLoc(startSide, ZLEVEL_STATION) - pickedgoal = spaceDebrisFinishLoc(startSide, ZLEVEL_STATION) + pickedstart = spaceDebrisStartLoc(startSide, ZLEVEL_STATION_PRIMARY) + pickedgoal = spaceDebrisFinishLoc(startSide, ZLEVEL_STATION_PRIMARY) max_i-- if(max_i<=0) return var/Me = pickweight(meteortypes) var/obj/effect/meteor/M = new Me(pickedstart) M.dest = pickedgoal - M.z_original = ZLEVEL_STATION + M.z_original = ZLEVEL_STATION_PRIMARY spawn(0) walk_towards(M, M.dest, 1) @@ -96,7 +96,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event pass_flags = PASSTABLE var/heavy = 0 var/meteorsound = 'sound/effects/meteorimpact.ogg' - var/z_original = ZLEVEL_STATION + var/z_original = ZLEVEL_STATION_PRIMARY var/threat = 0 // used for determining which meteors are most interesting var/lifetime = DEFAULT_METEOR_LIFETIME diff --git a/code/game/gamemodes/miniantags/abduction/machinery/camera.dm b/code/game/gamemodes/miniantags/abduction/machinery/camera.dm index ffd1b88d25..97893d6d2e 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/camera.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/camera.dm @@ -9,7 +9,7 @@ var/datum/action/innate/vest_disguise_swap/vest_disguise_action = new var/datum/action/innate/set_droppoint/set_droppoint_action = new var/obj/machinery/abductor/console/console - z_lock = ZLEVEL_STATION + z_lock = ZLEVEL_STATION_PRIMARY icon = 'icons/obj/abductor.dmi' icon_state = "camera" diff --git a/code/game/gamemodes/miniantags/borer/borer_event.dm b/code/game/gamemodes/miniantags/borer/borer_event.dm index 7d74a065aa..6875a97db5 100644 --- a/code/game/gamemodes/miniantags/borer/borer_event.dm +++ b/code/game/gamemodes/miniantags/borer/borer_event.dm @@ -26,7 +26,7 @@ for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent in GLOB.machines) if(QDELETED(temp_vent)) continue - if(temp_vent.loc.z == ZLEVEL_STATION && !temp_vent.welded) + if(temp_vent.loc.z == ZLEVEL_STATION_PRIMARY && !temp_vent.welded) var/datum/pipeline/temp_vent_parent = temp_vent.PARENT1 if(temp_vent_parent.other_atmosmch.len > 20) vents += temp_vent diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index 2a7760dfc5..8979fb8c78 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -458,7 +458,7 @@ if(target == src) return - if(z != ZLEVEL_STATION && z != ZLEVEL_LAVALAND) + if(!(z in GLOB.station_z_levels) && z != ZLEVEL_LAVALAND) to_chat(src, "Our bluespace transceiver cannot locate a viable bluespace link, our teleportation abilities are useless in this area.") return @@ -469,8 +469,8 @@ var/turf/open/floor/F switch(z) //Only the station/lavaland - if(ZLEVEL_STATION) - F =find_safe_turf(zlevels = ZLEVEL_STATION, extended_safety_checks = TRUE) + if(ZLEVEL_STATION_PRIMARY) + F =find_safe_turf(zlevels = ZLEVEL_STATION_PRIMARY, extended_safety_checks = TRUE) if(ZLEVEL_LAVALAND) F = find_safe_turf(zlevels = ZLEVEL_LAVALAND, extended_safety_checks = TRUE) if(!F) diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index 95fc735ec6..5133fd26a4 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -435,7 +435,7 @@ var/off_station = 0 var/turf/bomb_location = get_turf(src) var/area/A = get_area(bomb_location) - if(bomb_location && (bomb_location.z == ZLEVEL_STATION)) + if(bomb_location && (bomb_location.z in GLOB.station_z_levels)) if(istype(A, /area/space)) off_station = NUKE_MISS_STATION if((bomb_location.x < (128-NUKERANGE)) || (bomb_location.x > (128+NUKERANGE)) || (bomb_location.y < (128-NUKERANGE)) || (bomb_location.y > (128+NUKERANGE))) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 4bc43a6acb..baf0f69ab9 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -126,7 +126,7 @@ if(target.current.stat == DEAD || !ishuman(target.current) || !target.current.ckey) return 1 var/turf/T = get_turf(target.current) - if(T && (T.z > ZLEVEL_STATION) || (target.current.client && target.current.client.is_afk())) //If they leave the station or go afk they count as dead for this + if(T && (!(T.z in GLOB.station_z_levels)) || (target.current.client && target.current.client.is_afk())) //If they leave the station or go afk they count as dead for this return 2 return 0 return 1 diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index f393dc5338..55fc571459 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -335,7 +335,7 @@ /datum/game_mode/revolution/proc/check_heads_victory() for(var/datum/mind/rev_mind in head_revolutionaries) var/turf/T = get_turf(rev_mind.current) - if((rev_mind) && (rev_mind.current) && (rev_mind.current.stat != DEAD) && T && (T.z == ZLEVEL_STATION)) + if((rev_mind) && (rev_mind.current) && (rev_mind.current.stat != DEAD) && T && (T.z in GLOB.station_z_levels)) if(ishuman(rev_mind.current)) return 0 return 1 diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index d56837b9ef..bc6833f84a 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -47,7 +47,7 @@ GLOB.cameranet.addCamera(src) proximity_monitor = new(src, 1) - if(mapload && z == ZLEVEL_STATION && prob(3) && !start_active) + if(mapload && (z in GLOB.station_z_levels) && prob(3) && !start_active) toggle_cam() /obj/machinery/camera/Destroy() diff --git a/code/game/machinery/computer/apc_control.dm b/code/game/machinery/computer/apc_control.dm index 8b3e946501..c93c96429c 100644 --- a/code/game/machinery/computer/apc_control.dm +++ b/code/game/machinery/computer/apc_control.dm @@ -66,7 +66,7 @@ if(filters["Responsive"] && !APC.aidisabled) continue dat += "[A]
\ - Charge: [APC.cell.charge] / [APC.cell.maxcharge] W ([round((APC.cell.charge / APC.cell.maxcharge) * 100)]%)
\ + Charge: [DisplayPower(APC.cell.charge)] / [DisplayPower(APC.cell.maxcharge)] ([round((APC.cell.charge / APC.cell.maxcharge) * 100)]%)
\ Area: [APC.area]
\ [APC.aidisabled || APC.panel_open ? "APC does not respond to interface query." : "APC responds to interface query."]

" dat += "Check Logs
" diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index fa0008b51b..082f1aa895 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -414,8 +414,8 @@ if(gameStatus == ORION_STATUS_GAMEOVER) dat = "

Game Over

" dat += "Like many before you, your crew never made it to Orion, lost to space...
Forever." - if(settlers.len == 0) - dat += "
Your entire crew died, your ship joins the fleet of ghost-ships littering the galaxy." + if(!settlers.len) + dat += "
Your entire crew died, and your ship joins the fleet of ghost-ships littering the galaxy." else if(food <= 0) dat += "
You ran out of food and starved." @@ -429,7 +429,6 @@ M.adjust_fire_stacks(5) M.IgniteMob() //flew into a star, so you're on fire to_chat(user, "You feel an immense wave of heat emanate from the arcade machine. Your skin bursts into flames.") - dat += "

OK...

" if(emagged) to_chat(user, "You're never going to make it to Orion...") @@ -439,6 +438,7 @@ name = "The Orion Trail" desc = "Learn how our ancestors got to Orion, and have fun in the process!" + dat += "

May They Rest In Peace

" else if(event) dat = eventdat else if(gameStatus == ORION_STATUS_NORMAL) @@ -454,7 +454,7 @@ dat += "

Go Around Continue

" else dat += "

Continue

" - dat += "

Kill a crewmember

" + dat += "

Kill a Crewmember

" dat += "

Close

" else dat = "

The Orion Trail

" @@ -609,17 +609,15 @@ if(prob(75)) event = ORION_TRAIL_BLACKHOLE event() - if(emagged) //has to be here because otherwise it doesn't work + if(emagged) playsound(loc, 'sound/effects/supermatter.ogg', 100, 1) say("A miniature black hole suddenly appears in front of [src], devouring [usr] alive!") if(isliving(usr)) var/mob/living/L = usr L.Stun(200, ignore_canstun = TRUE) //you can't run :^) var/S = new /obj/singularity/academy(usr.loc) - emagged = FALSE //immediately removes emagged status so people can't kill themselves by sprinting up and interacting - sleep(50) - say("[S] winks out, just as suddenly as it appeared.") - qdel(S) + addtimer(CALLBACK(src, /atom/movable/proc/say, "[S] winks out, just as suddenly as it appeared."), 50) + QDEL_IN(src, 50) else event = null turns += 1 @@ -691,19 +689,20 @@ if(prob(success)) FU = rand(5,15) FO = rand(5,15) - last_spaceport_action = "You successfully raided the spaceport! you gained [FU] Fuel and [FO] Food! (+[FU]FU,+[FO]FO)" + last_spaceport_action = "You successfully raided the spaceport! You gained [FU] Fuel and [FO] Food! (+[FU]FU,+[FO]FO)" else FU = rand(-5,-15) FO = rand(-5,-15) - last_spaceport_action = "You failed to raid the spaceport! you lost [FU*-1] Fuel and [FO*-1] Food in your scramble to escape! ([FU]FU,[FO]FO)" + last_spaceport_action = "You failed to raid the spaceport! You lost [FU*-1] Fuel and [FO*-1] Food in your scramble to escape! ([FU]FU,[FO]FO)" //your chance of lose a crewmember is 1/2 your chance of success //this makes higher % failures hurt more, don't get cocky space cowboy! if(prob(success*5)) var/lost_crew = remove_crewmember() - last_spaceport_action = "You failed to raid the spaceport! you lost [FU*-1] Fuel and [FO*-1] Food, AND [lost_crew] in your scramble to escape! ([FU]FI,[FO]FO,-Crew)" + last_spaceport_action = "You failed to raid the spaceport! You lost [FU*-1] Fuel and [FO*-1] Food, AND [lost_crew] in your scramble to escape! ([FU]FI,[FO]FO,-Crew)" if(emagged) - say("WEEWOO WEEWOO, Spaceport Security en route!") + say("WEEWOO! WEEWOO! Spaceport security en route!") + playsound(src, 'sound/items/weeoo1.ogg', 100, FALSE) for(var/i, i<=3, i++) var/mob/living/simple_animal/hostile/syndicate/ranged/orion/O = new/mob/living/simple_animal/hostile/syndicate/ranged/orion(get_turf(src)) O.target = usr @@ -766,9 +765,9 @@ eventdat += "
They have stolen [sfood] Food and [sfuel] Fuel." else if(prob(10)) var/deadname = remove_crewmember() - eventdat += "
[deadname] tried to fight back but was killed." + eventdat += "
[deadname] tried to fight back, but was killed." else - eventdat += "
Fortunately you fended them off without any trouble." + eventdat += "
Fortunately, you fended them off without any trouble." eventdat += "

Continue

" eventdat += "

Close

" canContinueEvent = 1 @@ -844,7 +843,7 @@ else if(prob(70)) lings_aboard = min(++lings_aboard,2) - eventdat += "

Kill a crewmember

" + eventdat += "

Kill a Crewmember

" eventdat += "

Risk it

" eventdat += "

Close

" canContinueEvent = 1 @@ -859,7 +858,7 @@ if(lings_aboard >= 2) ling2 = remove_crewmember() - eventdat += "Oh no, some of your crew are Changelings!" + eventdat += "Changelings among your crew suddenly burst from hiding and attack!" if(ling2) eventdat += "
[ling1] and [ling2]'s arms twist and contort into grotesque blades!" else @@ -870,18 +869,23 @@ var/chancetokill = 30*lings_aboard-(5*alive) //eg: 30*2-(10) = 50%, 2 lings, 2 crew is 50% chance if(prob(chancetokill)) var/deadguy = remove_crewmember() - eventdat += "
The Changeling[ling2 ? "s":""] run[ling2 ? "":"s"] up to [deadguy] and capitulates them!" + var/murder_text = pick("The changeling[ling2 ? "s" : ""] bring[ling2 ? "" : "s"] down [deadguy] and disembowel[ling2 ? "" : "s"] them in a spray of gore!", \ + "[ling2 ? pick(ling1, ling2) : ling1] corners [deadguy] and impales them through the stomach!", \ + "[ling2 ? pick(ling1, ling2) : ling1] decapitates [deadguy] in a single cleaving arc!") + eventdat += "
[murder_text]" else - eventdat += "
You valiantly fight off the Changeling[ling2 ? "s":""]!" - eventdat += "
You cut the Changeling[ling2 ? "s":""] up into meat... Eww" + eventdat += "

You valiantly fight off the changeling[ling2 ? "s":""]!" if(ling2) food += 30 lings_aboard = max(0,lings_aboard-2) else food += 15 lings_aboard = max(0,--lings_aboard) + eventdat += "
Well, it's perfectly good food...\ +
You cut the changeling[ling2 ? "s" : ""] into meat, gaining [ling2 ? "30" : "15"] Food!" else - eventdat += "
The Changeling[ling2 ? "s":""] run[ling2 ? "":"s"] away, What wimps!" + eventdat += "

[pick("Sensing unfavorable odds", "After a failed attack", "Suddenly breaking nerve")], \ + the changeling[ling2 ? "s":""] vanish[ling2 ? "" : "es"] into space through the airlocks! You're safe... for now." if(ling2) lings_aboard = max(0,lings_aboard-2) else @@ -895,17 +899,17 @@ if(ORION_TRAIL_SPACEPORT) gameStatus = ORION_STATUS_MARKET if(spaceport_raided) - eventdat += "The Spaceport is on high alert! They won't let you dock since you tried to attack them!" + eventdat += "The spaceport is on high alert! You've been barred from docking by the local authorities after your failed raid." if(last_spaceport_action) - eventdat += "
Last Spaceport Action: [last_spaceport_action]" + eventdat += "
Last Spaceport Action: [last_spaceport_action]" eventdat += "

Depart Spaceport

" eventdat += "

Close

" else - eventdat += "You pull the ship up to dock at a nearby Spaceport, lucky find!" - eventdat += "
This Spaceport is home to travellers who failed to reach Orion, but managed to find a different home..." + eventdat += "Your jump into the sector yields a spaceport - a lucky find!" + eventdat += "
This spaceport is home to travellers who failed to reach Orion, but managed to find a different home..." eventdat += "
Trading terms: FU = Fuel, FO = Food" if(last_spaceport_action) - eventdat += "
Last Spaceport Action: [last_spaceport_action]" + eventdat += "
Last action: [last_spaceport_action]" eventdat += "

Crew:

" eventdat += english_list(settlers) eventdat += "
Food: [food] | Fuel: [fuel]" @@ -926,7 +930,7 @@ add_crewmember() freecrew++ - eventdat += "
The traders of the spaceport take pitty on you, and give you some food and fuel (+[FU]FU,+[FO]FO)" + eventdat += "
The traders of the spaceport take pity on you, and generously give you some free supplies! (+[FU]FU, +[FO]FO)" if(freecrew) eventdat += "
You also gain a new crewmember!" @@ -938,15 +942,15 @@ //Buy crew if(food >= 10 && fuel >= 10) - eventdat += "

Hire a new Crewmember (-10FU,-10FO)

" + eventdat += "

Hire a New Crewmember (-10FU, -10FO)

" else - eventdat += "

Cant afford a new Crewmember

" + eventdat += "

You cannot afford a new crewmember.

" //Sell crew if(settlers.len > 1) - eventdat += "

Sell crew for Fuel and Food (+7FU,+7FO)

" + eventdat += "

Sell Crew for Fuel and Food (+7FU, +7FO)

" else - eventdat += "

Cant afford to sell a Crewmember

" + eventdat += "

You have no other crew to sell.

" //BUY/SELL STUFF eventdat += "

Spare Parts:

" @@ -955,30 +959,30 @@ if(fuel > 5) eventdat += "

Buy Engine Parts (-5FU)

" else - eventdat += "

Cant afford to buy Engine Parts" + eventdat += "

You cannot afford engine parts." //Hull plates if(fuel > 5) eventdat += "

Buy Hull Plates (-5FU)

" else - eventdat += "

Cant afford to buy Hull Plates" + eventdat += "

You cannot afford hull plates." //Electronics if(fuel > 5) eventdat += "

Buy Spare Electronics (-5FU)

" else - eventdat += "

Cant afford to buy Spare Electronics" + eventdat += "

You cannot afford spare electronics." //Trade if(fuel > 5) eventdat += "

Trade Fuel for Food (-5FU,+5FO)

" else - eventdat += "

Cant afford to Trade Fuel for Food 5) eventdat += "

Trade Food for Fuel (+5FU,-5FO)

" else - eventdat += "

Cant afford to Trade Food for FuelUnable to establish a connection: \black You're too far away from the station!") return usr.set_machine(src) diff --git a/code/game/machinery/computer/monastery_shuttle.dm b/code/game/machinery/computer/monastery_shuttle.dm index 98e7909954..b04c202dca 100644 --- a/code/game/machinery/computer/monastery_shuttle.dm +++ b/code/game/machinery/computer/monastery_shuttle.dm @@ -1,7 +1,7 @@ /obj/machinery/computer/shuttle/monastery_shuttle name = "monastery shuttle console" desc = "Used to control the monastery shuttle." - circuit = /obj/item/circuitboard/computer/shuttle/monastery_shuttle + circuit = /obj/item/circuitboard/computer/monastery_shuttle shuttleId = "pod1" possible_destinations = "monastery_shuttle_asteroid;monastery_shuttle_station" no_destination_swap = TRUE diff --git a/code/game/machinery/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm index 56a6320640..a7626258ae 100644 --- a/code/game/machinery/computer/prisoner.dm +++ b/code/game/machinery/computer/prisoner.dm @@ -56,7 +56,7 @@ var/loc_display = "Unknown" var/mob/living/M = T.imp_in - if(Tr.z == ZLEVEL_STATION && !isspaceturf(M.loc)) + if((Tr.z in GLOB.station_z_levels) && !isspaceturf(M.loc)) var/turf/mob_loc = get_turf(M) loc_display = mob_loc.loc diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index 2b66b23db3..518cd8ab09 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -61,7 +61,7 @@ if(stat & NOPOWER) return - if(src.z == ZLEVEL_STATION) + if(src.z in GLOB.station_z_levels) add_overlay("overlay_[GLOB.security_level]") else //var/green = SEC_LEVEL_GREEN @@ -121,7 +121,7 @@ var/list/data = list() data["emagged"] = emagged - if(src.z == ZLEVEL_STATION) + if(src.z in GLOB.station_z_levels) data["seclevel"] = get_security_level() else data["seclevel"] = "green" diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index 4cfc6809cc..5d6370188b 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -107,7 +107,7 @@ var/line1 var/line2 if(SSshuttle.supply.mode == SHUTTLE_IDLE) - if(SSshuttle.supply.z == ZLEVEL_STATION) + if(SSshuttle.supply.z in GLOB.station_z_levels) line1 = "CARGO" line2 = "Docked" else diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index 9077283a68..5638b92b99 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -106,7 +106,7 @@ // Off-Site Relays // -// You are able to send/receive signals from the station's z level (changeable in the ZLEVEL_STATION #define) if +// You are able to send/receive signals from the station's z level (changeable in the ZLEVEL_STATION_PRIMARY #define) if /obj/machinery/telecomms/relay/proc/toggle_level() @@ -114,7 +114,7 @@ var/turf/position = get_turf(src) // Toggle on/off getting signals from the station or the current Z level - if(listening_level == ZLEVEL_STATION) // equals the station + if(listening_level in GLOB.station_z_levels) // equals the station listening_level = position.z return TRUE return FALSE diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 30ad2627ca..07b21c1fe4 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -1158,8 +1158,8 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/item/clothing/suit/syndicatefake = 5, /obj/item/clothing/head/syndicatefake = 5) //OPS IN DORMS oh wait it's just a assistant contraband = list(/obj/item/gun/ballistic/shotgun/toy/crossbow = 10, //Congrats, you unlocked the +18 setting! - /obj/item/gun/ballistic/automatic/c20r/toy/riot/unrestricted = 10, - /obj/item/gun/ballistic/automatic/l6_saw/toy/riot/unrestricted = 10, + /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot = 10, + /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted/riot = 10, /obj/item/ammo_box/foambox/riot = 20, /obj/item/toy/katana = 10, /obj/item/twohanded/dualsaber/toy = 5, diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm index c25e188529..74adfbe535 100644 --- a/code/game/objects/items/circuitboards/computer_circuitboards.dm +++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm @@ -257,22 +257,6 @@ build_path = /obj/machinery/computer/telecomms/server origin_tech = "programming=3;magnets=3;bluespace=2" -/obj/item/circuitboard/computer/shuttle - name = "Shuttle (Computer Board)" - build_path = /obj/machinery/computer/shuttle - var/shuttleId - var/possible_destinations = "" - -/obj/item/circuitboard/computer/shuttle/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/device/multitool)) - var/chosen_id = round(input(usr, "Choose an ID number (-1 for reset):", "Input an Integer", null) as num|null) - if(chosen_id >= 0) - shuttleId = chosen_id - else - shuttleId = initial(shuttleId) - else - return ..() - /obj/item/circuitboard/computer/labor_shuttle name = "Labor Shuttle (Computer Board)" build_path = /obj/machinery/computer/shuttle/labor @@ -339,7 +323,7 @@ build_path = /obj/machinery/computer/apc_control origin_tech = "programming=3;engineering=3;powerstorage=2" -/obj/item/circuitboard/computer/shuttle/monastery_shuttle +/obj/item/circuitboard/computer/monastery_shuttle name = "Monastery Shuttle (Computer Board)" build_path = /obj/machinery/computer/shuttle/monastery_shuttle diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index 9a26f81375..fe2acd6948 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -302,7 +302,7 @@ Code: var/obj/machinery/power/apc/A = term.master L += A - menu += "

Total power: [powmonitor.attached.powernet.viewavail] W
Total load: [num2text(powmonitor.attached.powernet.viewload,10)] W
" + menu += "
Total power: [DisplayPower(powmonitor.attached.powernet.viewavail)]
Total load: [DisplayPower(powmonitor.attached.powernet.viewload)]
" menu += "" @@ -314,7 +314,7 @@ Code: for(var/obj/machinery/power/apc/A in L) menu += copytext(add_tspace(A.area.name, 30), 1, 30) - menu += " [S[A.equipment+1]] [S[A.lighting+1]] [S[A.environ+1]] [add_lspace(A.lastused_total, 6)] [A.cell ? "[add_lspace(round(A.cell.percent()), 3)]% [chg[A.charging+1]]" : " N/C"]
" + menu += " [S[A.equipment+1]] [S[A.lighting+1]] [S[A.environ+1]] [add_lspace(DisplayPower(A.lastused_total), 6)] [A.cell ? "[add_lspace(round(A.cell.percent()), 3)]% [chg[A.charging+1]]" : " N/C"]
" menu += "
" @@ -437,14 +437,14 @@ Code: switch(SSshuttle.supply.mode) if(SHUTTLE_CALL) menu += "Moving to " - if(SSshuttle.supply.z != ZLEVEL_STATION) + if(!(SSshuttle.supply.z in GLOB.station_z_levels)) menu += "station" else menu += "centcom" menu += " ([SSshuttle.supply.timeLeft(600)] Mins)" else menu += "At " - if(SSshuttle.supply.z != ZLEVEL_STATION) + if(!(SSshuttle.supply.z in GLOB.station_z_levels)) menu += "centcom" else menu += "station" diff --git a/code/game/objects/items/inducer.dm b/code/game/objects/items/inducer.dm index bc97925c00..a0a493530b 100644 --- a/code/game/objects/items/inducer.dm +++ b/code/game/objects/items/inducer.dm @@ -157,7 +157,7 @@ /obj/item/inducer/examine(mob/living/M) ..() if(cell) - to_chat(M, "It's display shows: [cell.charge]W") + to_chat(M, "It's display shows: [DisplayPower(cell.charge)]") else to_chat(M,"It's display is dark.") if(opened) diff --git a/code/game/objects/structures/transit_tubes/station.dm b/code/game/objects/structures/transit_tubes/station.dm index 9662f0c0e3..ffc62ac127 100644 --- a/code/game/objects/structures/transit_tubes/station.dm +++ b/code/game/objects/structures/transit_tubes/station.dm @@ -147,8 +147,11 @@ sleep(OPEN_DURATION + 2) pod_moving = 0 if(!QDELETED(pod)) + var/datum/gas_mixture/floor_mixture = loc.return_air() + floor_mixture.archive() pod.air_contents.archive() - pod.air_contents.share(loc.return_air(), 1) //mix the pod's gas mixture with the tile it's on + pod.air_contents.share(floor_mixture, 1) //mix the pod's gas mixture with the tile it's on + air_update_turf() /obj/structure/transit_tube/station/init_tube_dirs() switch(dir) diff --git a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm index 43394f01c9..1cf8e330fe 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm @@ -9,9 +9,9 @@ var/datum/gas_mixture/air_contents = new() -/obj/structure/transit_tube_pod/New(loc) - ..() - air_contents.assert_gases("o2", "n2") +/obj/structure/transit_tube_pod/Initialize() + . = ..() + air_contents.add_gases("o2", "n2") air_contents.gases["o2"][MOLES] = MOLES_O2STANDARD air_contents.gases["n2"][MOLES] = MOLES_N2STANDARD air_contents.temperature = T20C diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index a03caadd19..3617759e99 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -6,13 +6,11 @@ * Engine floor * Foam plating */ -// note that plating and engine floor do not call their parent attackby, unlike other flooring -// this is done in order to avoid inheriting the crowbar attackby /turf/open/floor/plating name = "plating" icon_state = "plating" - intact = 0 + intact = FALSE /turf/open/floor/plating/Initialize() if (!broken_states) diff --git a/code/game/turfs/simulated/floor/plating/asteroid.dm b/code/game/turfs/simulated/floor/plating/asteroid.dm index 57c64d2350..2649a3a14d 100644 --- a/code/game/turfs/simulated/floor/plating/asteroid.dm +++ b/code/game/turfs/simulated/floor/plating/asteroid.dm @@ -35,6 +35,8 @@ return /turf/open/floor/plating/asteroid/attackby(obj/item/W, mob/user, params) + if(..()) + return TRUE if(istype(W, /obj/item/storage/bag/ore)) var/obj/item/storage/bag/ore/S = W if(S.collection_mode == 1) @@ -62,6 +64,10 @@ return ..() ChangeTurf(/turf/open/space) +/turf/open/floor/plating/asteroid/ex_act(severity, target) + . = SendSignal(COMSIG_ATOM_EX_ACT, severity, target) + contents_explosion(severity, target) + /turf/open/floor/plating/asteroid/basalt name = "volcanic floor" diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 392d361773..0a87627e8e 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -622,7 +622,7 @@ if(3) var/count = 0 for(var/mob/living/carbon/monkey/Monkey in world) - if(Monkey.z == ZLEVEL_STATION) + if(Monkey.z in GLOB.station_z_levels) count++ return "Kill all [count] of the monkeys on the station" if(4) diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index c277dd59e0..f564374ba9 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -456,7 +456,7 @@ return SSblackbox.add_details("admin_secrets_fun_used","Egalitarian Station") for(var/obj/machinery/door/airlock/W in GLOB.machines) - if(W.z == ZLEVEL_STATION && !istype(get_area(W), /area/bridge) && !istype(get_area(W), /area/crew_quarters) && !istype(get_area(W), /area/security/prison)) + if((W.z in GLOB.station_z_levels) && !istype(get_area(W), /area/bridge) && !istype(get_area(W), /area/crew_quarters) && !istype(get_area(W), /area/security/prison)) W.req_access = list() message_admins("[key_name_admin(usr)] activated Egalitarian Station mode") priority_announce("CentCom airlock control override activated. Please take this time to get acquainted with your coworkers.", null, 'sound/ai/commandreport.ogg') diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index d9e9a9e1d4..f8131ec5c7 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -509,7 +509,7 @@ GLOBAL_PROTECT(AdminProcCallCount) for(var/area/A in world) if(on_station) var/turf/picked = safepick(get_area_turfs(A.type)) - if(picked && (picked.z == ZLEVEL_STATION)) + if(picked && (picked.z in GLOB.station_z_levels)) if(!(A.type in areas_all) && !is_type_in_typecache(A, station_areas_blacklist)) areas_all.Add(A.type) else if(!(A.type in areas_all)) diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 0f9d5e5654..e8ba7c8bab 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -79,7 +79,7 @@ for(var/mob/living/carbon/human/applicant in GLOB.player_list) if(ROLE_CHANGELING in applicant.client.prefs.be_special) var/turf/T = get_turf(applicant) - if(applicant.stat == CONSCIOUS && applicant.mind && !applicant.mind.special_role && T.z == ZLEVEL_STATION) + if(applicant.stat == CONSCIOUS && applicant.mind && !applicant.mind.special_role && (T.z in GLOB.station_z_levels)) if(!jobban_isbanned(applicant, ROLE_CHANGELING) && !jobban_isbanned(applicant, "Syndicate")) if(temp.age_check(applicant.client)) if(!(applicant.job in temp.restricted_jobs)) @@ -112,7 +112,7 @@ for(var/mob/living/carbon/human/applicant in GLOB.player_list) if(ROLE_REV in applicant.client.prefs.be_special) var/turf/T = get_turf(applicant) - if(applicant.stat == CONSCIOUS && applicant.mind && !applicant.mind.special_role && T.z == ZLEVEL_STATION) + if(applicant.stat == CONSCIOUS && applicant.mind && !applicant.mind.special_role && (T.z in GLOB.station_z_levels)) if(!jobban_isbanned(applicant, ROLE_REV) && !jobban_isbanned(applicant, "Syndicate")) if(temp.age_check(applicant.client)) if(!(applicant.job in temp.restricted_jobs)) @@ -154,7 +154,7 @@ for(var/mob/living/carbon/human/applicant in GLOB.player_list) if(ROLE_CULTIST in applicant.client.prefs.be_special) var/turf/T = get_turf(applicant) - if(applicant.stat == CONSCIOUS && applicant.mind && !applicant.mind.special_role && T.z == ZLEVEL_STATION) + if(applicant.stat == CONSCIOUS && applicant.mind && !applicant.mind.special_role && (T.z in GLOB.station_z_levels)) if(!jobban_isbanned(applicant, ROLE_CULTIST) && !jobban_isbanned(applicant, "Syndicate")) if(temp.age_check(applicant.client)) if(!(applicant.job in temp.restricted_jobs)) @@ -187,7 +187,7 @@ for(var/mob/living/carbon/human/applicant in GLOB.player_list) if(ROLE_SERVANT_OF_RATVAR in applicant.client.prefs.be_special) var/turf/T = get_turf(applicant) - if(applicant.stat == CONSCIOUS && applicant.mind && !applicant.mind.special_role && T.z == ZLEVEL_STATION) + if(applicant.stat == CONSCIOUS && applicant.mind && !applicant.mind.special_role && (T.z in GLOB.station_z_levels)) if(!jobban_isbanned(applicant, ROLE_SERVANT_OF_RATVAR) && !jobban_isbanned(applicant, "Syndicate")) if(temp.age_check(applicant.client)) if(!(applicant.job in temp.restricted_jobs)) @@ -356,7 +356,7 @@ return 0 return - + /datum/admins/proc/makeOfficial() var/mission = input("Assign a task for the official", "Assign Task", "Conduct a routine preformance review of [station_name()] and its Captain.") var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you wish to be considered to be a CentCom Official?", "deathsquad") diff --git a/code/modules/awaymissions/signpost.dm b/code/modules/awaymissions/signpost.dm index 00012f8a40..f6fd4d9071 100644 --- a/code/modules/awaymissions/signpost.dm +++ b/code/modules/awaymissions/signpost.dm @@ -5,11 +5,12 @@ anchored = TRUE density = TRUE var/question = "Travel back?" - var/zlevels = list(ZLEVEL_STATION) + var/list/zlevels = list() /obj/structure/signpost/New() . = ..() set_light(2) + zlevels = GLOB.station_z_levels /obj/structure/signpost/attackby(obj/item/W, mob/user, params) return attack_hand(user) diff --git a/code/modules/events/alien_infestation.dm b/code/modules/events/alien_infestation.dm index 161fcd8c16..545b72a1bc 100644 --- a/code/modules/events/alien_infestation.dm +++ b/code/modules/events/alien_infestation.dm @@ -40,7 +40,7 @@ for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent in GLOB.machines) if(QDELETED(temp_vent)) continue - if(temp_vent.loc.z == ZLEVEL_STATION && !temp_vent.welded) + if((temp_vent.loc.z in GLOB.station_z_levels) && !temp_vent.welded) var/datum/pipeline/temp_vent_parent = temp_vent.PARENT1 //Stops Aliens getting stuck in small networks. //See: Security, Virology diff --git a/code/modules/events/brand_intelligence.dm b/code/modules/events/brand_intelligence.dm index d655337ba6..461ffecd3f 100644 --- a/code/modules/events/brand_intelligence.dm +++ b/code/modules/events/brand_intelligence.dm @@ -27,7 +27,7 @@ /datum/round_event/brand_intelligence/start() for(var/obj/machinery/vending/V in GLOB.machines) - if(V.z != ZLEVEL_STATION) + if(!(V.z in GLOB.station_z_levels)) continue vendingMachines.Add(V) if(!vendingMachines.len) diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm index dbac242321..a3ce69e0bd 100644 --- a/code/modules/events/disease_outbreak.dm +++ b/code/modules/events/disease_outbreak.dm @@ -25,7 +25,7 @@ var/turf/T = get_turf(H) if(!T) continue - if(T.z != ZLEVEL_STATION) + if(!(T.z in GLOB.station_z_levels)) continue if(!H.client) continue diff --git a/code/modules/events/grid_check.dm b/code/modules/events/grid_check.dm index c6ba4d1bd0..f1af035a29 100644 --- a/code/modules/events/grid_check.dm +++ b/code/modules/events/grid_check.dm @@ -15,5 +15,5 @@ /datum/round_event/grid_check/start() for(var/P in GLOB.apcs_list) var/obj/machinery/power/apc/C = P - if(C.cell && C.z == ZLEVEL_STATION) + if(C.cell && (C.z in GLOB.station_z_levels)) C.energy_fail(rand(30,120)) \ No newline at end of file diff --git a/code/modules/events/holiday/xmas.dm b/code/modules/events/holiday/xmas.dm index ae58ece0bb..c5a9c1a142 100644 --- a/code/modules/events/holiday/xmas.dm +++ b/code/modules/events/holiday/xmas.dm @@ -25,7 +25,7 @@ /datum/round_event/presents/start() for(var/obj/structure/flora/tree/pine/xmas in world) - if(xmas.z != ZLEVEL_STATION) + if(!(xmas.z in GLOB.station_z_levels)) continue for(var/turf/open/floor/T in orange(1,xmas)) for(var/i=1,i<=rand(1,5),i++) diff --git a/code/modules/events/immovable_rod.dm b/code/modules/events/immovable_rod.dm index f3a21445d3..4cd718070b 100644 --- a/code/modules/events/immovable_rod.dm +++ b/code/modules/events/immovable_rod.dm @@ -1,102 +1,102 @@ -/* -Immovable rod random event. -The rod will spawn at some location outside the station, and travel in a straight line to the opposite side of the station -Everything solid in the way will be ex_act()'d -In my current plan for it, 'solid' will be defined as anything with density == 1 - ---NEOFite -*/ - -/datum/round_event_control/immovable_rod - name = "Immovable Rod" - typepath = /datum/round_event/immovable_rod - min_players = 15 - max_occurrences = 5 - -/datum/round_event/immovable_rod - announceWhen = 5 - -/datum/round_event/immovable_rod/announce() - priority_announce("What the fuck was that?!", "General Alert") - -/datum/round_event/immovable_rod/start() +/* +Immovable rod random event. +The rod will spawn at some location outside the station, and travel in a straight line to the opposite side of the station +Everything solid in the way will be ex_act()'d +In my current plan for it, 'solid' will be defined as anything with density == 1 + +--NEOFite +*/ + +/datum/round_event_control/immovable_rod + name = "Immovable Rod" + typepath = /datum/round_event/immovable_rod + min_players = 15 + max_occurrences = 5 + +/datum/round_event/immovable_rod + announceWhen = 5 + +/datum/round_event/immovable_rod/announce() + priority_announce("What the fuck was that?!", "General Alert") + +/datum/round_event/immovable_rod/start() var/startside = pick(GLOB.cardinals) - var/turf/startT = spaceDebrisStartLoc(startside, ZLEVEL_STATION) - var/turf/endT = spaceDebrisFinishLoc(startside, ZLEVEL_STATION) - new /obj/effect/immovablerod(startT, endT) - -/obj/effect/immovablerod - name = "immovable rod" - desc = "What the fuck is that?" - icon = 'icons/obj/objects.dmi' - icon_state = "immrod" - throwforce = 100 + var/turf/startT = spaceDebrisStartLoc(startside, ZLEVEL_STATION_PRIMARY) + var/turf/endT = spaceDebrisFinishLoc(startside, ZLEVEL_STATION_PRIMARY) + new /obj/effect/immovablerod(startT, endT) + +/obj/effect/immovablerod + name = "immovable rod" + desc = "What the fuck is that?" + icon = 'icons/obj/objects.dmi' + icon_state = "immrod" + throwforce = 100 density = TRUE anchored = TRUE - var/z_original = 0 - var/destination - var/notify = TRUE - -/obj/effect/immovablerod/New(atom/start, atom/end) - ..() + var/z_original = 0 + var/destination + var/notify = TRUE + +/obj/effect/immovablerod/New(atom/start, atom/end) + ..() SSaugury.register_doom(src, 2000) - z_original = z - destination = end - if(notify) - notify_ghosts("\A [src] is inbound!", - enter_link="(Click to orbit)", - source=src, action=NOTIFY_ORBIT) - GLOB.poi_list += src - if(end && end.z==z_original) - walk_towards(src, destination, 1) - -/obj/effect/immovablerod/Topic(href, href_list) - if(href_list["orbit"]) - var/mob/dead/observer/ghost = usr - if(istype(ghost)) - ghost.ManualFollow(src) - -/obj/effect/immovablerod/Destroy() - GLOB.poi_list -= src - . = ..() - -/obj/effect/immovablerod/Move() - if((z != z_original) || (loc == destination)) - qdel(src) - return ..() - -/obj/effect/immovablerod/ex_act(severity, target) - return 0 - + z_original = z + destination = end + if(notify) + notify_ghosts("\A [src] is inbound!", + enter_link="(Click to orbit)", + source=src, action=NOTIFY_ORBIT) + GLOB.poi_list += src + if(end && end.z==z_original) + walk_towards(src, destination, 1) + +/obj/effect/immovablerod/Topic(href, href_list) + if(href_list["orbit"]) + var/mob/dead/observer/ghost = usr + if(istype(ghost)) + ghost.ManualFollow(src) + +/obj/effect/immovablerod/Destroy() + GLOB.poi_list -= src + . = ..() + +/obj/effect/immovablerod/Move() + if((z != z_original) || (loc == destination)) + qdel(src) + return ..() + +/obj/effect/immovablerod/ex_act(severity, target) + return 0 + /obj/effect/immovablerod/Collide(atom/clong) - if(prob(10)) - playsound(src, 'sound/effects/bang.ogg', 50, 1) - audible_message("You hear a CLANG!") - - if(clong && prob(25)) - x = clong.x - y = clong.y - - if(isturf(clong) || isobj(clong)) - if(clong.density) + if(prob(10)) + playsound(src, 'sound/effects/bang.ogg', 50, 1) + audible_message("You hear a CLANG!") + + if(clong && prob(25)) + x = clong.x + y = clong.y + + if(isturf(clong) || isobj(clong)) + if(clong.density) clong.ex_act(EXPLODE_HEAVY) - - else if(isliving(clong)) - penetrate(clong) - else if(istype(clong, type)) - var/obj/effect/immovablerod/other = clong - visible_message("[src] collides with [other]!\ - ") - var/datum/effect_system/smoke_spread/smoke = new - smoke.set_up(2, get_turf(src)) - smoke.start() - qdel(src) - qdel(other) - -/obj/effect/immovablerod/proc/penetrate(mob/living/L) - L.visible_message("[L] is penetrated by an immovable rod!" , "The rod penetrates you!" , "You hear a CLANG!") - if(ishuman(L)) - var/mob/living/carbon/human/H = L - H.adjustBruteLoss(160) - if(L && (L.density || prob(10))) + + else if(isliving(clong)) + penetrate(clong) + else if(istype(clong, type)) + var/obj/effect/immovablerod/other = clong + visible_message("[src] collides with [other]!\ + ") + var/datum/effect_system/smoke_spread/smoke = new + smoke.set_up(2, get_turf(src)) + smoke.start() + qdel(src) + qdel(other) + +/obj/effect/immovablerod/proc/penetrate(mob/living/L) + L.visible_message("[L] is penetrated by an immovable rod!" , "The rod penetrates you!" , "You hear a CLANG!") + if(ishuman(L)) + var/mob/living/carbon/human/H = L + H.adjustBruteLoss(160) + if(L && (L.density || prob(10))) L.ex_act(EXPLODE_HEAVY) diff --git a/code/modules/events/portal_storm.dm b/code/modules/events/portal_storm.dm index 9658d8b144..552179343c 100644 --- a/code/modules/events/portal_storm.dm +++ b/code/modules/events/portal_storm.dm @@ -40,7 +40,7 @@ storm = storm = mutable_appearance('icons/obj/tesla_engine/energy_ball.dmi', "energy_ball_fast", FLY_LAYER) storm.color = "#00FF00" - station_areas = get_areas_in_z(ZLEVEL_STATION) + station_areas = get_areas_in_z(ZLEVEL_STATION_PRIMARY) number_of_bosses = 0 for(var/boss in boss_types) diff --git a/code/modules/events/radiation_storm.dm b/code/modules/events/radiation_storm.dm index e4f2b6b1a7..b1b6195f51 100644 --- a/code/modules/events/radiation_storm.dm +++ b/code/modules/events/radiation_storm.dm @@ -1,20 +1,19 @@ -/datum/round_event_control/radiation_storm - name = "Radiation Storm" - typepath = /datum/round_event/radiation_storm - max_occurrences = 1 - -/datum/round_event/radiation_storm - - -/datum/round_event/radiation_storm/setup() - startWhen = 3 - endWhen = startWhen + 1 - announceWhen = 1 - -/datum/round_event/radiation_storm/announce() - priority_announce("High levels of radiation detected near the station. Maintenance is best shielded from radiation.", "Anomaly Alert", 'sound/ai/radiation.ogg') - //sound not longer matches the text, but an audible warning is probably good - -/datum/round_event/radiation_storm/start() - SSweather.run_weather("radiation storm",ZLEVEL_STATION) - make_maint_all_access() +/datum/round_event_control/radiation_storm + name = "Radiation Storm" + typepath = /datum/round_event/radiation_storm + max_occurrences = 1 + +/datum/round_event/radiation_storm + + +/datum/round_event/radiation_storm/setup() + startWhen = 3 + endWhen = startWhen + 1 + announceWhen = 1 + +/datum/round_event/radiation_storm/announce() + priority_announce("High levels of radiation detected near the station. Maintenance is best shielded from radiation.", "Anomaly Alert", 'sound/ai/radiation.ogg') + //sound not longer matches the text, but an audible warning is probably good + +/datum/round_event/radiation_storm/start() + SSweather.run_weather("radiation storm",ZLEVEL_STATION_PRIMARY) diff --git a/code/modules/events/sentience.dm b/code/modules/events/sentience.dm index a425c540b3..253ef6a639 100644 --- a/code/modules/events/sentience.dm +++ b/code/modules/events/sentience.dm @@ -31,7 +31,7 @@ var/list/potential = list() for(var/mob/living/simple_animal/L in GLOB.living_mob_list) var/turf/T = get_turf(L) - if(T.z != ZLEVEL_STATION) + if(!(T.z in GLOB.station_z_levels)) continue if(!(L in GLOB.player_list) && !L.mind) potential += L diff --git a/code/modules/events/spider_infestation.dm b/code/modules/events/spider_infestation.dm index a3296ebab6..0a4b07a9cb 100644 --- a/code/modules/events/spider_infestation.dm +++ b/code/modules/events/spider_infestation.dm @@ -1,37 +1,37 @@ -/datum/round_event_control/spider_infestation - name = "Spider Infestation" - typepath = /datum/round_event/spider_infestation - weight = 5 - max_occurrences = 1 - min_players = 15 - -/datum/round_event/spider_infestation - announceWhen = 400 - - var/spawncount = 1 - - -/datum/round_event/spider_infestation/setup() - announceWhen = rand(announceWhen, announceWhen + 50) - spawncount = rand(5, 8) - -/datum/round_event/spider_infestation/announce() - priority_announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", 'sound/ai/aliens.ogg') - - -/datum/round_event/spider_infestation/start() - var/list/vents = list() - for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent in world) - if(temp_vent.loc.z == ZLEVEL_STATION && !temp_vent.welded) - var/datum/pipeline/temp_vent_parent = temp_vent.PARENT1 - if(temp_vent_parent.other_atmosmch.len > 20) - vents += temp_vent - - while((spawncount >= 1) && vents.len) - var/obj/vent = pick(vents) - var/spawn_type = /obj/structure/spider/spiderling - if(prob(66)) - spawn_type = /obj/structure/spider/spiderling/nurse - spawn_atom_to_turf(spawn_type, vent, 1, FALSE) - vents -= vent - spawncount-- +/datum/round_event_control/spider_infestation + name = "Spider Infestation" + typepath = /datum/round_event/spider_infestation + weight = 5 + max_occurrences = 1 + min_players = 15 + +/datum/round_event/spider_infestation + announceWhen = 400 + + var/spawncount = 1 + + +/datum/round_event/spider_infestation/setup() + announceWhen = rand(announceWhen, announceWhen + 50) + spawncount = rand(5, 8) + +/datum/round_event/spider_infestation/announce() + priority_announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", 'sound/ai/aliens.ogg') + + +/datum/round_event/spider_infestation/start() + var/list/vents = list() + for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent in world) + if((temp_vent.loc.z in GLOB.station_z_levels) && !temp_vent.welded) + var/datum/pipeline/temp_vent_parent = temp_vent.PARENT1 + if(temp_vent_parent.other_atmosmch.len > 20) + vents += temp_vent + + while((spawncount >= 1) && vents.len) + var/obj/vent = pick(vents) + var/spawn_type = /obj/structure/spider/spiderling + if(prob(66)) + spawn_type = /obj/structure/spider/spiderling/nurse + spawn_atom_to_turf(spawn_type, vent, 1, FALSE) + vents -= vent + spawncount-- diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm index 2039e58caa..f94d521e8d 100644 --- a/code/modules/events/vent_clog.dm +++ b/code/modules/events/vent_clog.dm @@ -1,49 +1,49 @@ -/datum/round_event_control/vent_clog - name = "Clogged Vents" - typepath = /datum/round_event/vent_clog - weight = 35 - -/datum/round_event/vent_clog - announceWhen = 1 - startWhen = 5 - endWhen = 35 - var/interval = 2 - var/list/vents = list() - var/list/gunk = list("water","carbon","flour","radium","toxin","cleaner","nutriment","condensedcapsaicin","mushroomhallucinogen","lube", - "plantbgone","banana","charcoal","space_drugs","morphine","holywater","ethanol","hot_coco","sacid") - -/datum/round_event/vent_clog/announce() - priority_announce("The scrubbers network is experiencing a backpressure surge. Some ejection of contents may occur.", "Atmospherics alert") - - -/datum/round_event/vent_clog/setup() - endWhen = rand(25, 100) - for(var/obj/machinery/atmospherics/components/unary/vent_scrubber/temp_vent in GLOB.machines) - if(temp_vent.loc.z == ZLEVEL_STATION && !temp_vent.welded) - var/datum/pipeline/temp_vent_parent = temp_vent.PARENT1 - if(temp_vent_parent.other_atmosmch.len > 20) - vents += temp_vent - if(!vents.len) - return kill() - -/datum/round_event/vent_clog/tick() - if(activeFor % interval == 0) - var/obj/machinery/atmospherics/components/unary/vent = pick_n_take(vents) - while(vent && vent.welded) - vent = pick_n_take(vents) - - if(vent && vent.loc) - var/datum/reagents/R = new/datum/reagents(50) - R.my_atom = vent - R.add_reagent(pick(gunk), 50) - - var/datum/effect_system/smoke_spread/chem/smoke = new - smoke.set_up(R, 1, vent, silent = 1) - playsound(vent.loc, 'sound/effects/smoke.ogg', 50, 1, -3) - smoke.start() - qdel(R) - - var/cockroaches = prob(33) ? 3 : 0 - while(cockroaches) - new /mob/living/simple_animal/cockroach(get_turf(vent)) - cockroaches-- +/datum/round_event_control/vent_clog + name = "Clogged Vents" + typepath = /datum/round_event/vent_clog + weight = 35 + +/datum/round_event/vent_clog + announceWhen = 1 + startWhen = 5 + endWhen = 35 + var/interval = 2 + var/list/vents = list() + var/list/gunk = list("water","carbon","flour","radium","toxin","cleaner","nutriment","condensedcapsaicin","mushroomhallucinogen","lube", + "plantbgone","banana","charcoal","space_drugs","morphine","holywater","ethanol","hot_coco","sacid") + +/datum/round_event/vent_clog/announce() + priority_announce("The scrubbers network is experiencing a backpressure surge. Some ejection of contents may occur.", "Atmospherics alert") + + +/datum/round_event/vent_clog/setup() + endWhen = rand(25, 100) + for(var/obj/machinery/atmospherics/components/unary/vent_scrubber/temp_vent in GLOB.machines) + if((temp_vent.loc.z in GLOB.station_z_levels) && !temp_vent.welded) + var/datum/pipeline/temp_vent_parent = temp_vent.PARENT1 + if(temp_vent_parent.other_atmosmch.len > 20) + vents += temp_vent + if(!vents.len) + return kill() + +/datum/round_event/vent_clog/tick() + if(activeFor % interval == 0) + var/obj/machinery/atmospherics/components/unary/vent = pick_n_take(vents) + while(vent && vent.welded) + vent = pick_n_take(vents) + + if(vent && vent.loc) + var/datum/reagents/R = new/datum/reagents(50) + R.my_atom = vent + R.add_reagent(pick(gunk), 50) + + var/datum/effect_system/smoke_spread/chem/smoke = new + smoke.set_up(R, 1, vent, silent = 1) + playsound(vent.loc, 'sound/effects/smoke.ogg', 50, 1, -3) + smoke.start() + qdel(R) + + var/cockroaches = prob(33) ? 3 : 0 + while(cockroaches) + new /mob/living/simple_animal/cockroach(get_turf(vent)) + cockroaches-- diff --git a/code/modules/events/wizard/advanced_darkness.dm b/code/modules/events/wizard/advanced_darkness.dm index e6d20ad70d..0f68bb936e 100644 --- a/code/modules/events/wizard/advanced_darkness.dm +++ b/code/modules/events/wizard/advanced_darkness.dm @@ -13,4 +13,4 @@ /datum/round_event/wizard/darkness/start() if(!started) started = TRUE - SSweather.run_weather("advanced darkness", ZLEVEL_STATION) + SSweather.run_weather("advanced darkness", ZLEVEL_STATION_PRIMARY) diff --git a/code/modules/events/wizard/curseditems.dm b/code/modules/events/wizard/curseditems.dm index 1dba06f239..f5b6ae1cc1 100644 --- a/code/modules/events/wizard/curseditems.dm +++ b/code/modules/events/wizard/curseditems.dm @@ -38,7 +38,7 @@ ruins_wizard_loadout = 1 for(var/mob/living/carbon/human/H in GLOB.living_mob_list) - if(ruins_spaceworthiness && (H.z != ZLEVEL_STATION || isspaceturf(H.loc) || isplasmaman(H))) + if(ruins_spaceworthiness && !(H.z in GLOB.station_z_levels) || isspaceturf(H.loc) || isplasmaman(H)) continue //#savetheminers if(ruins_wizard_loadout && H.mind && ((H.mind in SSticker.mode.wizards) || (H.mind in SSticker.mode.apprentices))) continue diff --git a/code/modules/events/wizard/lava.dm b/code/modules/events/wizard/lava.dm index 190752cc68..a4426ce928 100644 --- a/code/modules/events/wizard/lava.dm +++ b/code/modules/events/wizard/lava.dm @@ -12,4 +12,4 @@ /datum/round_event/wizard/lava/start() if(!started) started = TRUE - SSweather.run_weather("the floor is lava", ZLEVEL_STATION) + SSweather.run_weather("the floor is lava", ZLEVEL_STATION_PRIMARY) diff --git a/code/modules/events/wizard/petsplosion.dm b/code/modules/events/wizard/petsplosion.dm index 05582043b9..5654cbfe04 100644 --- a/code/modules/events/wizard/petsplosion.dm +++ b/code/modules/events/wizard/petsplosion.dm @@ -8,7 +8,7 @@ /datum/round_event_control/wizard/petsplosion/preRunEvent() for(var/mob/living/simple_animal/F in GLOB.living_mob_list) - if(!ishostile(F) && F.z == ZLEVEL_STATION) + if(!ishostile(F) && (F.z in GLOB.station_z_levels)) mobs_to_dupe++ if(mobs_to_dupe > 100 || !mobs_to_dupe) return EVENT_CANT_RUN @@ -24,7 +24,7 @@ if(activeFor >= 30 * countdown) // 0 seconds : 2 animals | 30 seconds : 4 animals | 1 minute : 8 animals countdown += 1 for(var/mob/living/simple_animal/F in GLOB.living_mob_list) //If you cull the heard before the next replication, things will be easier for you - if(!ishostile(F) && F.z == ZLEVEL_STATION) + if(!ishostile(F) && (F.z in GLOB.station_z_levels)) new F.type(F.loc) mobs_duped++ if(mobs_duped > 400) diff --git a/code/modules/events/wizard/shuffle.dm b/code/modules/events/wizard/shuffle.dm index e04cb2da2b..568a8fbc72 100644 --- a/code/modules/events/wizard/shuffle.dm +++ b/code/modules/events/wizard/shuffle.dm @@ -13,7 +13,7 @@ var/list/mobs = list() for(var/mob/living/carbon/human/H in GLOB.living_mob_list) - if(H.z != ZLEVEL_STATION) + if(!(H.z in GLOB.station_z_levels)) continue //lets not try to strand people in space or stuck in the wizards den moblocs += H.loc mobs += H diff --git a/code/modules/events/wormholes.dm b/code/modules/events/wormholes.dm index 167eb77cfc..6404307d34 100644 --- a/code/modules/events/wormholes.dm +++ b/code/modules/events/wormholes.dm @@ -21,7 +21,7 @@ /datum/round_event/wormholes/start() for(var/turf/open/floor/T in world) - if(T.z == ZLEVEL_STATION) + if(T.z in GLOB.station_z_levels) pick_turfs += T for(var/i = 1, i <= number_of_wormholes, i++) diff --git a/code/modules/hydroponics/grown/citrus.dm b/code/modules/hydroponics/grown/citrus.dm index 76401da535..2abbab0f29 100644 --- a/code/modules/hydroponics/grown/citrus.dm +++ b/code/modules/hydroponics/grown/citrus.dm @@ -53,7 +53,7 @@ /obj/item/reagent_containers/food/snacks/grown/citrus/orange seed = /obj/item/seeds/orange name = "orange" - desc = "It's an tangy fruit." + desc = "It's a tangy fruit." icon_state = "orange" filling_color = "#FFA500" diff --git a/code/modules/mining/aux_base.dm b/code/modules/mining/aux_base.dm index fbe5a1fb30..cd6104607f 100644 --- a/code/modules/mining/aux_base.dm +++ b/code/modules/mining/aux_base.dm @@ -37,7 +37,7 @@ interface with the mining shuttle at the landing site if a mobile beacon is also var/list/options = params2list(possible_destinations) var/obj/docking_port/mobile/M = SSshuttle.getShuttle(shuttleId) - var/dat = "[z == ZLEVEL_STATION ? "Docking clamps engaged. Standing by." : "Mining Shuttle Uplink: [M ? M.getStatusText() : "*OFFLINE*"]"]
" + var/dat = "[(z in GLOB.station_z_levels) ? "Docking clamps engaged. Standing by." : "Mining Shuttle Uplink: [M ? M.getStatusText() : "*OFFLINE*"]"]
" if(M) var/destination_found for(var/obj/docking_port/stationary/S in SSshuttle.stationary) @@ -47,7 +47,7 @@ interface with the mining shuttle at the landing site if a mobile beacon is also continue destination_found = 1 dat += "Send to [S.name]
" - if(!destination_found && z == ZLEVEL_STATION) //Only available if miners are lazy and did not set an LZ using the remote. + if(!destination_found && (z in GLOB.station_z_levels)) //Only available if miners are lazy and did not set an LZ using the remote. dat += "Prepare for blind drop? (Dangerous)
" if(LAZYLEN(turrets)) dat += "
Perimeter Defense System: Enable All / Disable All
\ @@ -86,7 +86,7 @@ interface with the mining shuttle at the landing site if a mobile beacon is also return if(href_list["move"]) - if(z != ZLEVEL_STATION && shuttleId == "colony_drop") + if(!(z in GLOB.station_z_levels) && shuttleId == "colony_drop") to_chat(usr, "You can't move the base again!") return var/shuttle_error = SSshuttle.moveShuttle(shuttleId, href_list["move"], 1) @@ -200,7 +200,7 @@ interface with the mining shuttle at the landing site if a mobile beacon is also var/obj/machinery/computer/auxillary_base/AB for (var/obj/machinery/computer/auxillary_base/A in GLOB.machines) - if(A.z == ZLEVEL_STATION) + if(A.z in GLOB.station_z_levels) AB = A break if(!AB) @@ -345,4 +345,4 @@ obj/docking_port/stationary/public_mining_dock #undef BAD_ZLEVEL #undef BAD_AREA #undef BAD_COORDS -#undef ZONE_SET \ No newline at end of file +#undef ZONE_SET diff --git a/code/modules/mining/aux_base_camera.dm b/code/modules/mining/aux_base_camera.dm index 56b7fe3175..1b245c209f 100644 --- a/code/modules/mining/aux_base_camera.dm +++ b/code/modules/mining/aux_base_camera.dm @@ -151,8 +151,7 @@ to_chat(owner, "You can only build within the mining base!") return FALSE - - if(build_target.z != ZLEVEL_STATION) + if(!(build_target.z in GLOB.station_z_levels)) to_chat(owner, "The mining base has launched and can no longer be modified.") return FALSE diff --git a/code/modules/mining/equipment/wormhole_jaunter.dm b/code/modules/mining/equipment/wormhole_jaunter.dm index 00fdbfb561..e0197cc4e3 100644 --- a/code/modules/mining/equipment/wormhole_jaunter.dm +++ b/code/modules/mining/equipment/wormhole_jaunter.dm @@ -41,7 +41,7 @@ for(var/obj/item/device/radio/beacon/B in GLOB.teleportbeacons) var/turf/T = get_turf(B) - if(T.z == ZLEVEL_STATION) + if(T.z in GLOB.station_z_levels) destinations += B return destinations @@ -93,7 +93,7 @@ /obj/effect/portal/wormhole/jaunt_tunnel/teleport(atom/movable/M) if(!ismob(M) && !isobj(M)) //No don't teleport lighting and effects! return - + if(M.anchored && (!ismob(M) || (istype(M, /obj/mecha) && !mech_sized))) return diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm index 9726022afc..abead3ab9a 100644 --- a/code/modules/mining/machine_redemption.dm +++ b/code/modules/mining/machine_redemption.dm @@ -102,7 +102,7 @@ smelt_ore(ore) /obj/machinery/mineral/ore_redemption/proc/send_console_message() - if(z != ZLEVEL_STATION) + if(!(z in GLOB.station_z_levels)) return message_sent = TRUE var/area/A = get_area(src) diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 71010d252e..15d05d37fe 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -69,7 +69,7 @@ var/global/list/dumb_rev_heads = list() /obj/machinery/computer/shuttle/mining/attack_hand(mob/user) - if(user.z == ZLEVEL_STATION && user.mind && (user.mind in SSticker.mode.head_revolutionaries) && !(user.mind in dumb_rev_heads)) + if((user.z in GLOB.station_z_levels) && user.mind && (user.mind in SSticker.mode.head_revolutionaries) && !(user.mind in dumb_rev_heads)) to_chat(user, "You get a feeling that leaving the station might be a REALLY dumb idea...") dumb_rev_heads += user.mind return diff --git a/code/modules/mob/dead/new_player/sprite_accessories.dm b/code/modules/mob/dead/new_player/sprite_accessories.dm index ec5a034f19..1eb1379dce 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories.dm @@ -500,6 +500,10 @@ name = "Sidecut" icon_state = "hair_sidecut" +/datum/sprite_accessory/hair/largebun + name = "Large Bun" + icon_state = "hair_largebun" + ///////////////////////////// // Facial Hair Definitions // ///////////////////////////// diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index a17e73c7bb..0cbcfc1443 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -106,7 +106,7 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) if(turfs.len) T = pick(turfs) else - T = locate(round(world.maxx/2), round(world.maxy/2), ZLEVEL_STATION) //middle of the station + T = locate(round(world.maxx/2), round(world.maxy/2), ZLEVEL_STATION_PRIMARY) //middle of the station loc = T @@ -819,8 +819,8 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp GLOB.observer_default_invisibility = amount /mob/dead/observer/proc/open_spawners_menu() - set name = "Mob spawners menu" - set desc = "See all currently available ghost spawners" + set name = "Spawners Menu" + set desc = "See all currently available spawners" set category = "Ghost" if(!spawners_menu) spawners_menu = new(src) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 9d8d2b704b..e2a257e0ce 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -422,7 +422,7 @@ All effects don't start immediately, but rather get worse over time; the rate is if(drunkenness >= 91) adjustBrainLoss(0.4) if(prob(20) && !stat) - if(SSshuttle.emergency.mode == SHUTTLE_DOCKED && z == ZLEVEL_STATION) //QoL mainly + if(SSshuttle.emergency.mode == SHUTTLE_DOCKED && (z in GLOB.station_z_levels)) //QoL mainly to_chat(src, "You're so tired... but you can't miss that shuttle...") else to_chat(src, "Just a quick nap...") diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index 91fe96ca86..d8a2985594 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -129,7 +129,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians update_health_hud() //we need to update all of our health displays to match our summoner and we can't practically give the summoner a hook to do it med_hud_set_health() med_hud_set_status() - if(summoner) + if(!QDELETED(summoner)) if(summoner.stat == DEAD) forceMove(summoner.loc) to_chat(src, "Your summoner has died!") diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm index a63e4cf89f..815b20c0c5 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm @@ -114,7 +114,7 @@ Difficulty: Medium if(L.stat == DEAD) visible_message("[src] butchers [L]!", "You butcher [L], restoring your health!") - if(z != ZLEVEL_STATION && !client) //NPC monsters won't heal while on station + if(!(z in GLOB.station_z_levels && !client)) //NPC monsters won't heal while on station if(guidance) adjustHealth(-L.maxHealth) else diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm index 02ca4a4e26..c4618db620 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm @@ -101,7 +101,7 @@ visible_message( "[src] devours [L]!", "You feast on [L], restoring your health!") - if(z != ZLEVEL_STATION && !client) //NPC monsters won't heal while on station + if(!(z in GLOB.station_z_levels && !client)) //NPC monsters won't heal while on station adjustBruteLoss(-L.maxHealth/2) L.gib() diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm index 12388807ba..de995f951a 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm @@ -146,8 +146,9 @@ /obj/effect/temp_visual/goliath_tentacle/Initialize(mapload, mob/living/new_spawner) . = ..() - if(locate(/obj/effect/temp_visual/goliath_tentacle) in loc) - return INITIALIZE_HINT_QDEL + for(var/obj/effect/temp_visual/goliath_tentacle/T in loc) + if(T != src) + return INITIALIZE_HINT_QDEL if(!QDELETED(new_spawner)) spawner = new_spawner if(ismineralturf(loc)) diff --git a/code/modules/modular_computers/file_system/programs/alarm.dm b/code/modules/modular_computers/file_system/programs/alarm.dm index fc050545a5..616fd15dd3 100644 --- a/code/modules/modular_computers/file_system/programs/alarm.dm +++ b/code/modules/modular_computers/file_system/programs/alarm.dm @@ -13,7 +13,7 @@ var/has_alert = 0 var/alarms = list("Fire" = list(), "Atmosphere" = list(), "Power" = list()) - var/alarm_z = list(ZLEVEL_STATION,ZLEVEL_LAVALAND) + var/alarm_z = list(ZLEVEL_STATION_PRIMARY,ZLEVEL_LAVALAND) /datum/computer_file/program/alarm_monitor/process_tick() ..() diff --git a/code/modules/modular_computers/file_system/programs/powermonitor.dm b/code/modules/modular_computers/file_system/programs/powermonitor.dm index b334f523f7..37b2b0c151 100644 --- a/code/modules/modular_computers/file_system/programs/powermonitor.dm +++ b/code/modules/modular_computers/file_system/programs/powermonitor.dm @@ -58,8 +58,8 @@ data["interval"] = record_interval / 10 data["attached"] = attached ? TRUE : FALSE if(attached) - data["supply"] = attached.powernet.viewavail - data["demand"] = attached.powernet.viewload + data["supply"] = DisplayPower(attached.powernet.viewavail) + data["demand"] = DisplayPower(attached.powernet.viewload) data["history"] = history data["areas"] = list() @@ -70,7 +70,7 @@ data["areas"] += list(list( "name" = A.area.name, "charge" = A.cell ? A.cell.percent() : 0, - "load" = A.lastused_total, + "load" = DisplayPower(A.lastused_total), "charging" = A.charging, "eqp" = A.equipment, "lgt" = A.lighting, diff --git a/code/modules/modular_computers/file_system/programs/sm_monitor.dm b/code/modules/modular_computers/file_system/programs/sm_monitor.dm index c12c83aaed..4a0532104a 100644 --- a/code/modules/modular_computers/file_system/programs/sm_monitor.dm +++ b/code/modules/modular_computers/file_system/programs/sm_monitor.dm @@ -44,7 +44,7 @@ //var/valid_z_levels = (GetConnectedZlevels(T.z) & using_map.station_levels) for(var/obj/machinery/power/supermatter_shard/S in GLOB.machines) // Delaminating, not within coverage, not on a tile. - if(!(S.z == ZLEVEL_STATION || S.z == ZLEVEL_MINING || S.z == T.z) || !istype(S.loc, /turf/)) + if(!((S.z in GLOB.station_z_levels) || S.z == ZLEVEL_MINING || S.z == T.z) || !istype(S.loc, /turf/)) continue supermatters.Add(S) diff --git a/code/modules/modular_computers/hardware/network_card.dm b/code/modules/modular_computers/hardware/network_card.dm index 24c1580ea2..8ed67d761b 100644 --- a/code/modules/modular_computers/hardware/network_card.dm +++ b/code/modules/modular_computers/hardware/network_card.dm @@ -48,7 +48,7 @@ if(holder) var/turf/T = get_turf(holder) - if((T && istype(T)) && (T.z == ZLEVEL_STATION || T.z == ZLEVEL_MINING)) + if((T && istype(T)) && ((T.z in GLOB.station_z_levels) || T.z == ZLEVEL_MINING)) // Computer is on station. Low/High signal depending on what type of network card you have if(long_range) return 2 diff --git a/code/modules/power/antimatter/control.dm b/code/modules/power/antimatter/control.dm index 85ae6edf14..7863f6a52f 100644 --- a/code/modules/power/antimatter/control.dm +++ b/code/modules/power/antimatter/control.dm @@ -306,7 +306,7 @@ dat += "Cores: [linked_cores.len]

" dat += "-Current Efficiency: [reported_core_efficiency]
" dat += "-Average Stability: [stored_core_stability] (update)
" - dat += "Last Produced: [stored_power]
" + dat += "Last Produced: [DisplayPower(stored_power)]
" dat += "Fuel: " if(!fueljar) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index b0212e6155..1545bfd452 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -55,7 +55,7 @@ var/areastring = null var/obj/item/stock_parts/cell/cell var/start_charge = 90 // initial cell charge % - var/cell_type = 2500 // 0=no cell, 1=regular, 2=high-cap (x5) <- old, now it's just 0=no cell, otherwise dictate cellcapacity by changing this value. 1 used to be 1000, 2 was 2500 + var/cell_type = /obj/item/stock_parts/cell/upgraded //Base cell has 2500 capacity. Enter the path of a different cell you want to use. cell determines charge rates, max capacity, ect. These can also be changed with other APC vars, but isn't recommended to minimize the risk of accidental usage of dirty editted APCs var/opened = 0 //0=closed, 1=opened, 2=cover removed var/shorted = 0 var/lighting = 3 @@ -92,6 +92,15 @@ var/update_overlay = -1 var/icon_update_needed = FALSE +/obj/machinery/power/apc/highcap/five_k + cell_type = /obj/item/stock_parts/cell/upgraded/plus + +/obj/machinery/power/apc/highcap/ten_k + cell_type = /obj/item/stock_parts/cell/high + +/obj/machinery/power/apc/highcap/fifteen_k + cell_type = /obj/item/stock_parts/cell/high/plus + /obj/machinery/power/apc/get_cell() return cell @@ -177,8 +186,7 @@ has_electronics = 2 //installed and secured // is starting with a power cell installed, create it and set its charge level if(cell_type) - src.cell = new/obj/item/stock_parts/cell(src) - cell.maxcharge = cell_type // cell_type is maximum charge (old default was 1000 or 2500 (values one and two respectively) + cell = new cell_type cell.charge = start_charge * cell.maxcharge / 100 // (convert percentage to actual value) var/area/A = src.loc.loc @@ -665,7 +673,7 @@ "powerCellStatus" = cell ? cell.percent() : null, "chargeMode" = chargemode, "chargingStatus" = charging, - "totalLoad" = lastused_total, + "totalLoad" = DisplayPower(lastused_total), "coverLocked" = coverlocked, "siliconUser" = user.has_unlimited_silicon_privilege || user.using_power_flow_console(), "malfStatus" = get_malf_status(user), @@ -673,7 +681,7 @@ "powerChannels" = list( list( "title" = "Equipment", - "powerLoad" = lastused_equip, + "powerLoad" = DisplayPower(lastused_equip), "status" = equipment, "topicParams" = list( "auto" = list("eqp" = 3), @@ -683,7 +691,7 @@ ), list( "title" = "Lighting", - "powerLoad" = lastused_light, + "powerLoad" = DisplayPower(lastused_light), "status" = lighting, "topicParams" = list( "auto" = list("lgt" = 3), @@ -693,7 +701,7 @@ ), list( "title" = "Environment", - "powerLoad" = lastused_environ, + "powerLoad" = DisplayPower(lastused_environ), "status" = environ, "topicParams" = list( "auto" = list("env" = 3), @@ -840,7 +848,7 @@ if(!malf.can_shunt) to_chat(malf, "You cannot shunt!") return - if(src.z != ZLEVEL_STATION) + if(!(src.z in GLOB.station_z_levels)) return occupier = new /mob/living/silicon/ai(src, malf.laws, malf) //DEAR GOD WHY? //IKR???? occupier.adjustOxyLoss(malf.getOxyLoss()) diff --git a/code/modules/power/apc.dm.rej b/code/modules/power/apc.dm.rej deleted file mode 100644 index 9e432f503c..0000000000 --- a/code/modules/power/apc.dm.rej +++ /dev/null @@ -1,13 +0,0 @@ -diff a/code/modules/power/apc.dm b/code/modules/power/apc.dm (rejected hunks) -@@ -867,9 +867,9 @@ - occupier.loc = src.loc - occupier.death() - occupier.gib() -- for(var/obj/item/weapon/pinpointer/P in GLOB.pinpointer_list) -+ for(var/obj/item/weapon/pinpointer/nuke/P in GLOB.pinpointer_list) - P.switch_mode_to(TRACK_NUKE_DISK) //Pinpointers go back to tracking the nuke disk -- P.nuke_warning = FALSE -+ P.alert = FALSE - - /obj/machinery/power/apc/transfer_ai(interaction, mob/user, mob/living/silicon/ai/AI, obj/item/device/aicard/card) - if(card.AI) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index a24c0d7c57..37ec831462 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -143,7 +143,7 @@ By design, d1 is the smallest direction and d2 is the highest else if(istype(W, /obj/item/device/multitool)) if(powernet && (powernet.avail > 0)) // is it powered? - to_chat(user, "[powernet.avail]W in power network.") + to_chat(user, "[DisplayPower(powernet.avail)] in power network.") else to_chat(user, "The cable is not powered.") shock(user, 5, 0.2) diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 34635084dd..16e2ae92f2 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -348,4 +348,4 @@ return /obj/item/stock_parts/cell/beam_rifle/emp_act(severity) - charge = Clamp((charge-(10000/severity)),0,maxcharge) + charge = Clamp((charge-(10000/severity)),0,maxcharge) \ No newline at end of file diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index 1e43380f2f..b5eef4260e 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -55,7 +55,7 @@ stat |= BROKEN update_icon() - + /obj/machinery/power/generator/Destroy() SSair.atmos_machinery -= src return ..() @@ -126,7 +126,7 @@ if(cold_air) var/datum/gas_mixture/cold_circ_air1 = cold_circ.AIR1 cold_circ_air1.merge(cold_air) - + update_icon() var/circ = "[cold_circ && cold_circ.last_pressure_delta > 0 ? "1" : "0"][hot_circ && hot_circ.last_pressure_delta > 0 ? "1" : "0"]" @@ -135,7 +135,7 @@ update_icon() src.updateDialog() - + /obj/machinery/power/generator/process() //Setting this number higher just makes the change in power output slower, it doesnt actualy reduce power output cause **math** var/power_output = round(lastgen / 10) @@ -161,15 +161,9 @@ var/datum/gas_mixture/hot_circ_air2 = hot_circ.AIR2 t += "
" - - var/displaygen = lastgenlev - if(displaygen < 1000000) //less than a MW - displaygen /= 1000 - t += "Output: [round(displaygen,0.01)] kW" - else - displaygen /= 1000000 - t += "Output: [round(displaygen,0.01)] MW" - + + t += "Output: [DisplayPower(lastgenlev)]" + t += "
" t += "Cold loop
" diff --git a/code/modules/power/monitor.dm b/code/modules/power/monitor.dm index 85a85113f6..a3edc99951 100644 --- a/code/modules/power/monitor.dm +++ b/code/modules/power/monitor.dm @@ -66,8 +66,8 @@ data["areas"] = list() if(attached) - data["supply"] = attached.powernet.viewavail - data["demand"] = attached.powernet.viewload + data["supply"] = DisplayPower(attached.powernet.viewavail) + data["demand"] = DisplayPower(attached.powernet.viewload) for(var/obj/machinery/power/terminal/term in attached.powernet.nodes) var/obj/machinery/power/apc/A = term.master if(istype(A)) @@ -79,7 +79,7 @@ data["areas"] += list(list( "name" = A.area.name, "charge" = cell_charge, - "load" = A.lastused_total, + "load" = DisplayPower(A.lastused_total), "charging" = A.charging, "eqp" = A.equipment, "lgt" = A.lighting, diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 630d248f25..0f4a58e5ef 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -230,7 +230,7 @@ var/stack_percent = round(sheet_left * 100, 1) dat += text("Current stack: [stack_percent]%
") dat += text("Power output: - [power_gen * power_output] +
") - dat += text("Power current: [(powernet == null ? "Unconnected" : "[avail()]")]
") + dat += text("Power current: [(powernet == null ? "Unconnected" : "[DisplayPower(avail())]")]
") dat += text("Heat: [current_heat]
") dat += "
Close" user << browse(dat, "window=port_gen") diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm index df969d869e..381dcbaa75 100644 --- a/code/modules/power/singularity/narsie.dm +++ b/code/modules/power/singularity/narsie.dm @@ -54,7 +54,7 @@ var/mob/living/L = cult_mind.current L.narsie_act() for(var/mob/living/player in GLOB.player_list) - if(player.stat != DEAD && player.loc.z == ZLEVEL_STATION && !iscultist(player)) + if(player.stat != DEAD && (player.loc.z in GLOB.station_z_levels) && !iscultist(player)) souls_needed[player] = TRUE soul_goal = round(1 + LAZYLEN(souls_needed) * 0.6) INVOKE_ASYNC(src, .proc/begin_the_end) diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 90226d532d..6cbc8f095d 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -335,14 +335,16 @@ "inputAttempt" = input_attempt, "inputting" = inputting, "inputLevel" = input_level, + "inputLevel_text" = DisplayPower(input_level), "inputLevelMax" = input_level_max, - "inputAvailable" = input_available, + "inputAvailable" = DisplayPower(input_available), "outputAttempt" = output_attempt, "outputting" = outputting, "outputLevel" = output_level, + "outputLevel_text" = DisplayPower(output_level), "outputLevelMax" = output_level_max, - "outputUsed" = output_used + "outputUsed" = DisplayPower(output_used) ) return data diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm index c8f8d8bfd0..ee531697aa 100644 --- a/code/modules/power/turbine.dm +++ b/code/modules/power/turbine.dm @@ -272,7 +272,7 @@ var/t = "Gas Turbine Generator
"
 
-	t += "Generated power : [round(lastgen)] W

" + t += "Generated power : [DisplayPower(lastgen)]

" t += "Turbine: [round(compressor.rpm)] RPM
" @@ -337,7 +337,7 @@ dat += {"Turbine status: [ src.compressor.starter ? "Off On" : "Off On"] \n
\nTurbine speed: [src.compressor.rpm]rpm
- \nPower currently being generated: [src.compressor.turbine.lastgen]W
+ \nPower currently being generated: [DisplayPower(src.compressor.turbine.lastgen)]
\nInternal gas temperature: [src.compressor.gas_contained.temperature]K
\n

Close \n
diff --git a/code/modules/procedural_mapping/mapGenerators/repair.dm b/code/modules/procedural_mapping/mapGenerators/repair.dm index f9b94bba89..9796535df7 100644 --- a/code/modules/procedural_mapping/mapGenerators/repair.dm +++ b/code/modules/procedural_mapping/mapGenerators/repair.dm @@ -20,11 +20,11 @@ if(!istype(mother, /datum/mapGenerator/repair/reload_station_map)) return var/datum/mapGenerator/repair/reload_station_map/mother1 = mother - if(mother1.z != ZLEVEL_STATION) + if(!(mother1.z in GLOB.station_z_levels)) return //This is only for reloading station blocks! GLOB.reloading_map = TRUE var/static/dmm_suite/reloader = new - var/list/bounds = reloader.load_map(file(SSmapping.config.GetFullMapPath()),measureOnly = FALSE, no_changeturf = FALSE,x_offset = 0, y_offset = 0, z_offset = ZLEVEL_STATION, cropMap=TRUE, lower_crop_x = mother1.x_low, lower_crop_y = mother1.y_low, upper_crop_x = mother1.x_high, upper_crop_y = mother1.y_high) + var/list/bounds = reloader.load_map(file(SSmapping.config.GetFullMapPath()),measureOnly = FALSE, no_changeturf = FALSE,x_offset = 0, y_offset = 0, z_offset = ZLEVEL_STATION_PRIMARY, cropMap=TRUE, lower_crop_x = mother1.x_low, lower_crop_y = mother1.y_low, upper_crop_x = mother1.x_high, upper_crop_y = mother1.y_high) var/list/obj/machinery/atmospherics/atmos_machines = list() var/list/obj/structure/cable/cables = list() @@ -87,13 +87,13 @@ /datum/mapGenerator/repair/reload_station_map/defineRegion(turf/start, turf/end) . = ..() - if(start.z != ZLEVEL_STATION || end.z != ZLEVEL_STATION) + if(!(start.z in GLOB.station_z_levels) || !(end.z in GLOB.station_z_levels)) return x_low = min(start.x, end.x) y_low = min(start.y, end.y) x_high = max(start.x, end.x) y_high = max(start.y, end.y) - z = ZLEVEL_STATION + z = ZLEVEL_STATION_PRIMARY GLOBAL_VAR_INIT(reloading_map, FALSE) diff --git a/code/modules/projectiles/guns/ballistic/toy.dm b/code/modules/projectiles/guns/ballistic/toy.dm index fc1ad963e4..3ddd6375b2 100644 --- a/code/modules/projectiles/guns/ballistic/toy.dm +++ b/code/modules/projectiles/guns/ballistic/toy.dm @@ -77,38 +77,34 @@ slot_flags = SLOT_BELT w_class = WEIGHT_CLASS_SMALL -/obj/item/gun/ballistic/automatic/c20r/toy +/obj/item/gun/ballistic/automatic/c20r/toy //This is the syndicate variant with syndicate firing pin and riot darts. name = "donksoft SMG" desc = "A bullpup two-round burst toy SMG, designated 'C-20r'. Ages 8 and up." icon = 'icons/obj/guns/toy.dmi' can_suppress = TRUE needs_permit = 0 - mag_type = /obj/item/ammo_box/magazine/toy/smgm45 + mag_type = /obj/item/ammo_box/magazine/toy/smgm45/riot casing_ejector = 0 -/obj/item/gun/ballistic/automatic/c20r/toy/unrestricted +/obj/item/gun/ballistic/automatic/c20r/toy/unrestricted //Use this for actual toys pin = /obj/item/device/firing_pin + mag_type = /obj/item/ammo_box/magazine/toy/smgm45 -/obj/item/gun/ballistic/automatic/smgm45/toy/riot +/obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot mag_type = /obj/item/ammo_box/magazine/toy/smgm45/riot -/obj/item/gun/ballistic/automatic/c20r/toy/riot/unrestricted - pin = /obj/item/device/firing_pin - -/obj/item/gun/ballistic/automatic/l6_saw/toy +/obj/item/gun/ballistic/automatic/l6_saw/toy //This is the syndicate variant with syndicate firing pin and riot darts. name = "donksoft LMG" desc = "A heavily modified toy light machine gun, designated 'L6 SAW'. Ages 8 and up." icon = 'icons/obj/guns/toy.dmi' can_suppress = FALSE needs_permit = 0 - mag_type = /obj/item/ammo_box/magazine/toy/m762 + mag_type = /obj/item/ammo_box/magazine/toy/m762/riot casing_ejector = 0 -/obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted +/obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted //Use this for actual toys pin = /obj/item/device/firing_pin + mag_type = /obj/item/ammo_box/magazine/toy/m762 -/obj/item/gun/ballistic/automatic/l6_saw/toy/riot +/obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted/riot mag_type = /obj/item/ammo_box/magazine/toy/m762/riot - -/obj/item/gun/ballistic/automatic/l6_saw/toy/riot/unrestricted - pin = /obj/item/device/firing_pin diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index f562da2df0..ce1f469f8d 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -45,14 +45,13 @@ if(istype(I, /obj/item/reagent_containers) && (I.container_type & OPENCONTAINER_1)) . = 1 //no afterattack if(beaker) - to_chat(user, "A beaker is already loaded into the machine!") + to_chat(user, "A container is already loaded into [src]!") return - if(!user.drop_item()) + if(!user.transferItemToLoc(I, src)) return beaker = I - I.loc = src - to_chat(user, "You add the beaker to the machine.") + to_chat(user, "You add [I] to [src].") icon_state = "mixer1b" return return ..() diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 14adaa5fd7..802e4c70ca 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -85,27 +85,25 @@ to_chat(user, "You can't use the [src.name] while its panel is opened!") return if(beaker) - to_chat(user, "A container is already loaded in the machine!") + to_chat(user, "A container is already loaded into [src]!") return - if(!user.drop_item()) + if(!user.transferItemToLoc(I, src)) return beaker = I - beaker.loc = src - to_chat(user, "You add the beaker to the machine.") + to_chat(user, "You add [I] to [src].") src.updateUsrDialog() icon_state = "mixer1" else if(!condi && istype(I, /obj/item/storage/pill_bottle)) if(bottle) - to_chat(user, "A pill bottle is already loaded into the machine!") + to_chat(user, "A pill bottle is already loaded into [src]!") return - if(!user.drop_item()) + if(!user.transferItemToLoc(I, src)) return bottle = I - bottle.loc = src - to_chat(user, "You add the pill bottle into the dispenser slot.") + to_chat(user, "You add [I] into the dispenser slot.") src.updateUsrDialog() else return ..() diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index c08e56dad6..311efd0140 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -118,21 +118,20 @@ if (istype(I, /obj/item/reagent_containers) && (I.container_type & OPENCONTAINER_1) ) if (!beaker) - if(!user.drop_item()) + if(!user.transferItemToLoc(I, src)) return 1 beaker = I - beaker.loc = src update_icon() src.updateUsrDialog() else - to_chat(user, "There's already a container inside.") + to_chat(user, "There's already a container inside [src].") return 1 //no afterattack if(is_type_in_list(I, dried_items)) if(istype(I, /obj/item/reagent_containers/food/snacks/grown)) var/obj/item/reagent_containers/food/snacks/grown/G = I if(!G.dry) - to_chat(user, "You must dry that first!") + to_chat(user, "You must dry [G] first!") return 1 if(holdingitems && holdingitems.len >= limit) @@ -146,11 +145,11 @@ B.remove_from_storage(G, src) holdingitems += G if(holdingitems && holdingitems.len >= limit) //Sanity checking so the blender doesn't overfill - to_chat(user, "You fill the All-In-One grinder to the brim.") + to_chat(user, "You fill [src] to the brim.") break if(!I.contents.len) - to_chat(user, "You empty the plant bag into the All-In-One grinder.") + to_chat(user, "You empty [I] into [src].") src.updateUsrDialog() return 1 @@ -162,8 +161,7 @@ to_chat(user, "Cannot refine into a reagent!") return 1 - if(user.drop_item()) - I.loc = src + if(user.transferItemToLoc(I, src)) holdingitems += I src.updateUsrDialog() return 0 diff --git a/code/modules/security_levels/security_levels.dm b/code/modules/security_levels/security_levels.dm index a3e190814e..e83061b232 100644 --- a/code/modules/security_levels/security_levels.dm +++ b/code/modules/security_levels/security_levels.dm @@ -1,134 +1,128 @@ -GLOBAL_VAR_INIT(security_level, 0) -//0 = code green -//1 = code blue -//2 = code red -//3 = code delta - -//config.alert_desc_blue_downto - -/proc/set_security_level(level) - switch(level) - if("green") - level = SEC_LEVEL_GREEN - if("blue") - level = SEC_LEVEL_BLUE - if("red") - level = SEC_LEVEL_RED - if("delta") - level = SEC_LEVEL_DELTA - - //Will not be announced if you try to set to the same level as it already is - if(level >= SEC_LEVEL_GREEN && level <= SEC_LEVEL_DELTA && level != GLOB.security_level) - switch(level) - if(SEC_LEVEL_GREEN) - minor_announce(config.alert_desc_green, "Attention! Security level lowered to green:") - if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL) - if(GLOB.security_level >= SEC_LEVEL_RED) - SSshuttle.emergency.modTimer(4) - else - SSshuttle.emergency.modTimer(2) - GLOB.security_level = SEC_LEVEL_GREEN - for(var/obj/machinery/firealarm/FA in GLOB.machines) - if(FA.z == ZLEVEL_STATION) - FA.update_icon() - if(SEC_LEVEL_BLUE) - if(GLOB.security_level < SEC_LEVEL_BLUE) - minor_announce(config.alert_desc_blue_upto, "Attention! Security level elevated to blue:",1) - if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL) - SSshuttle.emergency.modTimer(0.5) - else - minor_announce(config.alert_desc_blue_downto, "Attention! Security level lowered to blue:") - if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL) - SSshuttle.emergency.modTimer(2) - GLOB.security_level = SEC_LEVEL_BLUE - for(var/mob/M in GLOB.player_list) - M << sound('sound/misc/voybluealert.ogg') - for(var/obj/machinery/firealarm/FA in GLOB.machines) - if(FA.z == ZLEVEL_STATION) - FA.update_icon() - if(SEC_LEVEL_RED) - if(GLOB.security_level < SEC_LEVEL_RED) - minor_announce(config.alert_desc_red_upto, "Attention! Code red!",1) - if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL) - if(GLOB.security_level == SEC_LEVEL_GREEN) - SSshuttle.emergency.modTimer(0.25) - else - SSshuttle.emergency.modTimer(0.5) - else - minor_announce(config.alert_desc_red_downto, "Attention! Code red!") - GLOB.security_level = SEC_LEVEL_RED - for(var/mob/M in GLOB.player_list) - M << sound('sound/misc/voyalert.ogg') - - /* - At the time of commit, setting status displays didn't work properly - var/obj/machinery/computer/communications/CC = locate(/obj/machinery/computer/communications,world) - if(CC) - CC.post_status("alert", "redalert")*/ - - for(var/obj/machinery/firealarm/FA in GLOB.machines) - if(FA.z == ZLEVEL_STATION) - FA.update_icon() - for(var/obj/machinery/computer/shuttle/pod/pod in GLOB.machines) - pod.admin_controlled = 0 - if(SEC_LEVEL_DELTA) - minor_announce(config.alert_desc_delta, "Attention! Delta security level reached!",1) - if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL) - if(GLOB.security_level == SEC_LEVEL_GREEN) - SSshuttle.emergency.modTimer(0.25) - else if(GLOB.security_level == SEC_LEVEL_BLUE) - SSshuttle.emergency.modTimer(0.5) - GLOB.security_level = SEC_LEVEL_DELTA - for(var/mob/M in GLOB.player_list) - M << sound('sound/misc/deltakalaxon.ogg') - for(var/obj/machinery/firealarm/FA in GLOB.machines) - if(FA.z == ZLEVEL_STATION) - FA.update_icon() - for(var/obj/machinery/computer/shuttle/pod/pod in GLOB.machines) - pod.admin_controlled = 0 - else - return - -/proc/get_security_level() - switch(GLOB.security_level) - if(SEC_LEVEL_GREEN) - return "green" - if(SEC_LEVEL_BLUE) - return "blue" - if(SEC_LEVEL_RED) - return "red" - if(SEC_LEVEL_DELTA) - return "delta" - -/proc/num2seclevel(num) - switch(num) - if(SEC_LEVEL_GREEN) - return "green" - if(SEC_LEVEL_BLUE) - return "blue" - if(SEC_LEVEL_RED) - return "red" - if(SEC_LEVEL_DELTA) - return "delta" - -/proc/seclevel2num(seclevel) - switch( lowertext(seclevel) ) - if("green") - return SEC_LEVEL_GREEN - if("blue") - return SEC_LEVEL_BLUE - if("red") - return SEC_LEVEL_RED - if("delta") - return SEC_LEVEL_DELTA - - -/*DEBUG -/mob/verb/set_thing0() - set_security_level(0) -/mob/verb/set_thing1() - set_security_level(1) -/mob/verb/set_thing2() - set_security_level(2) -/mob/verb/set_thing3() - set_security_level(3) -*/ +GLOBAL_VAR_INIT(security_level, 0) +//0 = code green +//1 = code blue +//2 = code red +//3 = code delta + +//config.alert_desc_blue_downto + +/proc/set_security_level(level) + switch(level) + if("green") + level = SEC_LEVEL_GREEN + if("blue") + level = SEC_LEVEL_BLUE + if("red") + level = SEC_LEVEL_RED + if("delta") + level = SEC_LEVEL_DELTA + + //Will not be announced if you try to set to the same level as it already is + if(level >= SEC_LEVEL_GREEN && level <= SEC_LEVEL_DELTA && level != GLOB.security_level) + switch(level) + if(SEC_LEVEL_GREEN) + minor_announce(config.alert_desc_green, "Attention! Security level lowered to green:") + if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL) + if(GLOB.security_level >= SEC_LEVEL_RED) + SSshuttle.emergency.modTimer(4) + else + SSshuttle.emergency.modTimer(2) + GLOB.security_level = SEC_LEVEL_GREEN + for(var/obj/machinery/firealarm/FA in GLOB.machines) + if(FA.z in GLOB.station_z_levels) + FA.update_icon() + if(SEC_LEVEL_BLUE) + if(GLOB.security_level < SEC_LEVEL_BLUE) + minor_announce(config.alert_desc_blue_upto, "Attention! Security level elevated to blue:",1) + if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL) + SSshuttle.emergency.modTimer(0.5) + else + minor_announce(config.alert_desc_blue_downto, "Attention! Security level lowered to blue:") + if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL) + SSshuttle.emergency.modTimer(2) + GLOB.security_level = SEC_LEVEL_BLUE + for(var/obj/machinery/firealarm/FA in GLOB.machines) + if(FA.z in GLOB.station_z_levels) + FA.update_icon() + if(SEC_LEVEL_RED) + if(GLOB.security_level < SEC_LEVEL_RED) + minor_announce(config.alert_desc_red_upto, "Attention! Code red!",1) + if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL) + if(GLOB.security_level == SEC_LEVEL_GREEN) + SSshuttle.emergency.modTimer(0.25) + else + SSshuttle.emergency.modTimer(0.5) + else + minor_announce(config.alert_desc_red_downto, "Attention! Code red!") + GLOB.security_level = SEC_LEVEL_RED + + /* - At the time of commit, setting status displays didn't work properly + var/obj/machinery/computer/communications/CC = locate(/obj/machinery/computer/communications,world) + if(CC) + CC.post_status("alert", "redalert")*/ + + for(var/obj/machinery/firealarm/FA in GLOB.machines) + if(FA.z in GLOB.station_z_levels) + FA.update_icon() + for(var/obj/machinery/computer/shuttle/pod/pod in GLOB.machines) + pod.admin_controlled = 0 + if(SEC_LEVEL_DELTA) + minor_announce(config.alert_desc_delta, "Attention! Delta security level reached!",1) + if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL) + if(GLOB.security_level == SEC_LEVEL_GREEN) + SSshuttle.emergency.modTimer(0.25) + else if(GLOB.security_level == SEC_LEVEL_BLUE) + SSshuttle.emergency.modTimer(0.5) + GLOB.security_level = SEC_LEVEL_DELTA + for(var/obj/machinery/firealarm/FA in GLOB.machines) + if(FA.z in GLOB.station_z_levels) + FA.update_icon() + for(var/obj/machinery/computer/shuttle/pod/pod in GLOB.machines) + pod.admin_controlled = 0 + else + return + +/proc/get_security_level() + switch(GLOB.security_level) + if(SEC_LEVEL_GREEN) + return "green" + if(SEC_LEVEL_BLUE) + return "blue" + if(SEC_LEVEL_RED) + return "red" + if(SEC_LEVEL_DELTA) + return "delta" + +/proc/num2seclevel(num) + switch(num) + if(SEC_LEVEL_GREEN) + return "green" + if(SEC_LEVEL_BLUE) + return "blue" + if(SEC_LEVEL_RED) + return "red" + if(SEC_LEVEL_DELTA) + return "delta" + +/proc/seclevel2num(seclevel) + switch( lowertext(seclevel) ) + if("green") + return SEC_LEVEL_GREEN + if("blue") + return SEC_LEVEL_BLUE + if("red") + return SEC_LEVEL_RED + if("delta") + return SEC_LEVEL_DELTA + + +/*DEBUG +/mob/verb/set_thing0() + set_security_level(0) +/mob/verb/set_thing1() + set_security_level(1) +/mob/verb/set_thing2() + set_security_level(2) +/mob/verb/set_thing3() + set_security_level(3) +*/ diff --git a/code/modules/shuttle/arrivals.dm b/code/modules/shuttle/arrivals.dm index d89e1420fc..16aa279901 100644 --- a/code/modules/shuttle/arrivals.dm +++ b/code/modules/shuttle/arrivals.dm @@ -6,7 +6,7 @@ width = 7 height = 15 dir = WEST - port_angle = 180 + port_direction = SOUTH callTime = INFINITY ignitionTime = 50 diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index a3ebba05a1..8384e978e5 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -4,22 +4,11 @@ icon_keyboard = "tech_key" light_color = LIGHT_COLOR_CYAN req_access = list( ) - circuit = /obj/item/circuitboard/computer/shuttle var/shuttleId var/possible_destinations = "" var/admin_controlled var/no_destination_swap = 0 -/obj/machinery/computer/shuttle/Initialize() - ..() - return INITIALIZE_HINT_LATELOAD - -/obj/machinery/computer/shuttle/LateInitialize() - if(istype(circuit, /obj/item/circuitboard/computer/shuttle)) - var/obj/item/circuitboard/computer/shuttle/C = circuit - possible_destinations = C.possible_destinations - shuttleId = C.shuttleId - /obj/machinery/computer/shuttle/attack_hand(mob/user) if(..(user)) return diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index 6999de9555..8bc90cf787 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -183,7 +183,7 @@ width = 22 height = 11 dir = EAST - port_angle = -90 + port_direction = WEST roundstart_move = "emergency_away" var/sound_played = 0 //If the launch sound has been sent to all players on the shuttle itself diff --git a/code/modules/shuttle/navigation_computer.dm b/code/modules/shuttle/navigation_computer.dm index 32324ea233..9199e5eb14 100644 --- a/code/modules/shuttle/navigation_computer.dm +++ b/code/modules/shuttle/navigation_computer.dm @@ -1,7 +1,7 @@ /obj/machinery/computer/camera_advanced/shuttle_docker name = "navigation computer" desc = "Used to designate a precise transit location for a spacecraft." - z_lock = ZLEVEL_STATION + z_lock = ZLEVEL_STATION_PRIMARY jump_action = null var/datum/action/innate/shuttledocker_rotate/rotate_action = new var/datum/action/innate/shuttledocker_place/place_action = new diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 4326e6298e..d2843b67f2 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -260,7 +260,7 @@ // The direction the shuttle prefers to travel in var/preferred_direction = NORTH // And the angle from the front of the shuttle to the port - var/port_angle = 0 // used to be travelDir + var/port_direction = NORTH var/obj/docking_port/stationary/destination var/obj/docking_port/stationary/previous @@ -410,7 +410,7 @@ mode = SHUTTLE_RECALL /obj/docking_port/mobile/proc/enterTransit() - if(SSshuttle.lockdown && z == ZLEVEL_STATION) //emp went off, no escape + if(SSshuttle.lockdown && (z in GLOB.station_z_levels)) //emp went off, no escape return previous = null // if(!destination) @@ -574,7 +574,7 @@ if(move_mode & MOVE_AREA) areas_to_move[old_area] = TRUE - + old_turfs[place] = move_mode /*******************************************All onShuttleMove procs******************************************/ diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index 6ef04dcaba..56c7b85410 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -30,7 +30,7 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( callTime = 600 dir = WEST - port_angle = 90 + port_direction = EAST width = 12 dwidth = 5 height = 7 @@ -45,7 +45,7 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( SSshuttle.supply = src /obj/docking_port/mobile/supply/canMove() - if(z == ZLEVEL_STATION) + if(z in GLOB.station_z_levels) return check_blacklist(shuttle_areas) return ..() diff --git a/code/modules/shuttle/syndicate.dm b/code/modules/shuttle/syndicate.dm index f9d90dd342..b21df4000c 100644 --- a/code/modules/shuttle/syndicate.dm +++ b/code/modules/shuttle/syndicate.dm @@ -47,7 +47,7 @@ desc = "Used to designate a precise transit location for the syndicate shuttle." icon_screen = "syndishuttle" icon_keyboard = "syndie_key" - z_lock = ZLEVEL_STATION + z_lock = ZLEVEL_STATION_PRIMARY shuttleId = "syndicate" shuttlePortId = "syndicate_custom" shuttlePortName = "custom location" diff --git a/code/modules/station_goals/shield.dm b/code/modules/station_goals/shield.dm index 94cf2dfe9c..6639297e23 100644 --- a/code/modules/station_goals/shield.dm +++ b/code/modules/station_goals/shield.dm @@ -31,7 +31,7 @@ /datum/station_goal/proc/get_coverage() var/list/coverage = list() for(var/obj/machinery/satellite/meteor_shield/A in GLOB.machines) - if(!A.active || A.z != ZLEVEL_STATION) + if(!A.active || !(A.z in GLOB.station_z_levels)) continue coverage |= view(A.kill_range,A) return coverage.len diff --git a/html/changelogs/AutoChangeLog-pr-2484.yml b/html/changelogs/AutoChangeLog-pr-2484.yml new file mode 100644 index 0000000000..f7d8732121 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2484.yml @@ -0,0 +1,5 @@ +author: "Naksu" +delete-after: True +changes: + - spellcheck: "fixed inconsistent grammar between machines that derive from /obj/machinery/chem_dispenser" + - spellcheck: "touched up some chat messages to include references to objects instead of \"that\" or \"the machine\" etc., also removed references to beakers being loaded in machines that can accept any container" diff --git a/html/changelogs/AutoChangeLog-pr-2539.yml b/html/changelogs/AutoChangeLog-pr-2539.yml new file mode 100644 index 0000000000..3401e4c4c9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2539.yml @@ -0,0 +1,4 @@ +author: "ShizCalev" +delete-after: True +changes: + - tweak: "All power systems will now report their wattage values in Watts, Kilowatts, Megawatts, and Gigawatts. Gone are the days of seeing 48760 W total load when working with an APC!" diff --git a/html/changelogs/AutoChangeLog-pr-2599.yml b/html/changelogs/AutoChangeLog-pr-2599.yml new file mode 100644 index 0000000000..1a184bb194 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2599.yml @@ -0,0 +1,4 @@ +author: "Pubby" +delete-after: True +changes: + - bugfix: "Escape pods and PubbyStation's monastery shuttle are back in commission" diff --git a/html/changelogs/AutoChangeLog-pr-2615.yml b/html/changelogs/AutoChangeLog-pr-2615.yml new file mode 100644 index 0000000000..8ea320ce6c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2615.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "Stands now check if their user got queue deleted somehow" diff --git a/html/changelogs/AutoChangeLog-pr-2703.yml b/html/changelogs/AutoChangeLog-pr-2703.yml new file mode 100644 index 0000000000..f507d35652 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2703.yml @@ -0,0 +1,4 @@ +author: "Xhuis" +delete-after: True +changes: + - bugfix: "The Orion Trail machines are no longer on hardcore mode and you can now restart after losing." diff --git a/html/changelogs/AutoChangeLog-pr-2740.yml b/html/changelogs/AutoChangeLog-pr-2740.yml new file mode 100644 index 0000000000..bb5531fcf8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2740.yml @@ -0,0 +1,4 @@ +author: "VexingRaven" +delete-after: True +changes: + - bugfix: "The syndicate have once again stocked the toy C20r and L6 Saw with riot darts." diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index c8ab9f0e0a..5c61706c70 100644 Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index ef7f594c70..6ed5b6c928 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ diff --git a/tgui/assets/tgui.js b/tgui/assets/tgui.js index a41d648fe1..ca35db8917 100644 --- a/tgui/assets/tgui.js +++ b/tgui/assets/tgui.js @@ -1,16 +1,16 @@ require=function t(e,n,a){function r(o,s){if(!n[o]){if(!e[o]){var u="function"==typeof require&&require;if(!s&&u)return u(o,!0);if(i)return i(o,!0);var p=Error("Cannot find module '"+o+"'");throw p.code="MODULE_NOT_FOUND",p}var c=n[o]={exports:{}};e[o][0].call(c.exports,function(t){var n=e[o][1][t];return r(n?n:t)},c,c.exports,t,e,n,a)}return n[o].exports}for(var i="function"==typeof require&&require,o=0;o2?p[2]:void 0,l=Math.min((void 0===c?o:r(c,o))-u,o-s),f=1;for(s>u&&u+l>s&&(f=-1,u+=l-1,s+=l-1);l-- >0;)u in n?n[s]=n[u]:delete n[s],s+=f,u+=f;return n}},{76:76,79:79,80:80}],6:[function(t,e,n){"use strict";var a=t(80),r=t(76),i=t(79);e.exports=[].fill||function(t){for(var e=a(this),n=i(e.length),o=arguments,s=o.length,u=r(s>1?o[1]:void 0,n),p=s>2?o[2]:void 0,c=void 0===p?n:r(p,n);c>u;)e[u++]=t;return e}},{76:76,79:79,80:80}],7:[function(t,e,n){var a=t(78),r=t(79),i=t(76);e.exports=function(t){return function(e,n,o){var s,u=a(e),p=r(u.length),c=i(o,p);if(t&&n!=n){for(;p>c;)if(s=u[c++],s!=s)return!0}else for(;p>c;c++)if((t||c in u)&&u[c]===n)return t||c;return!t&&-1}}},{76:76,78:78,79:79}],8:[function(t,e,n){var a=t(17),r=t(34),i=t(80),o=t(79),s=t(9);e.exports=function(t){var e=1==t,n=2==t,u=3==t,p=4==t,c=6==t,l=5==t||c;return function(f,d,h){for(var m,v,g=i(f),b=r(g),y=a(d,h,3),x=o(b.length),_=0,w=e?s(f,x):n?s(f,0):void 0;x>_;_++)if((l||_ in b)&&(m=b[_],v=y(m,_,g),t))if(e)w[_]=v;else if(v)switch(t){case 3:return!0;case 5:return m;case 6:return _;case 2:w.push(m)}else if(p)return!1;return c?-1:u||p?p:w}}},{17:17,34:34,79:79,80:80,9:9}],9:[function(t,e,n){var a=t(38),r=t(36),i=t(83)("species");e.exports=function(t,e){var n;return r(t)&&(n=t.constructor,"function"!=typeof n||n!==Array&&!r(n.prototype)||(n=void 0),a(n)&&(n=n[i],null===n&&(n=void 0))),new(void 0===n?Array:n)(e)}},{36:36,38:38,83:83}],10:[function(t,e,n){var a=t(11),r=t(83)("toStringTag"),i="Arguments"==a(function(){return arguments}());e.exports=function(t){var e,n,o;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=(e=Object(t))[r])?n:i?a(e):"Object"==(o=a(e))&&"function"==typeof e.callee?"Arguments":o}},{11:11,83:83}],11:[function(t,e,n){var a={}.toString;e.exports=function(t){return a.call(t).slice(8,-1)}},{}],12:[function(t,e,n){"use strict";var a=t(46),r=t(31),i=t(60),o=t(17),s=t(69),u=t(18),p=t(27),c=t(42),l=t(44),f=t(82)("id"),d=t(30),h=t(38),m=t(65),v=t(19),g=Object.isExtensible||h,b=v?"_s":"size",y=0,x=function(t,e){if(!h(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!d(t,f)){if(!g(t))return"F";if(!e)return"E";r(t,f,++y)}return"O"+t[f]},_=function(t,e){var n,a=x(e);if("F"!==a)return t._i[a];for(n=t._f;n;n=n.n)if(n.k==e)return n};e.exports={getConstructor:function(t,e,n,r){var c=t(function(t,i){s(t,c,e),t._i=a.create(null),t._f=void 0,t._l=void 0,t[b]=0,void 0!=i&&p(i,n,t[r],t)});return i(c.prototype,{clear:function(){for(var t=this,e=t._i,n=t._f;n;n=n.n)n.r=!0,n.p&&(n.p=n.p.n=void 0),delete e[n.i];t._f=t._l=void 0,t[b]=0},"delete":function(t){var e=this,n=_(e,t);if(n){var a=n.n,r=n.p;delete e._i[n.i],n.r=!0,r&&(r.n=a),a&&(a.p=r),e._f==n&&(e._f=a),e._l==n&&(e._l=r),e[b]--}return!!n},forEach:function(t){for(var e,n=o(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.n:this._f;)for(n(e.v,e.k,this);e&&e.r;)e=e.p},has:function(t){return!!_(this,t)}}),v&&a.setDesc(c.prototype,"size",{get:function(){return u(this[b])}}),c},def:function(t,e,n){var a,r,i=_(t,e);return i?i.v=n:(t._l=i={i:r=x(e,!0),k:e,v:n,p:a=t._l,n:void 0,r:!1},t._f||(t._f=i),a&&(a.n=i),t[b]++,"F"!==r&&(t._i[r]=i)),t},getEntry:_,setStrong:function(t,e,n){c(t,e,function(t,e){this._t=t,this._k=e,this._l=void 0},function(){for(var t=this,e=t._k,n=t._l;n&&n.r;)n=n.p;return t._t&&(t._l=n=n?n.n:t._t._f)?"keys"==e?l(0,n.k):"values"==e?l(0,n.v):l(0,[n.k,n.v]):(t._t=void 0,l(1))},n?"entries":"values",!n,!0),m(e)}}},{17:17,18:18,19:19,27:27,30:30,31:31,38:38,42:42,44:44,46:46,60:60,65:65,69:69,82:82}],13:[function(t,e,n){var a=t(27),r=t(10);e.exports=function(t){return function(){if(r(this)!=t)throw TypeError(t+"#toJSON isn't generic");var e=[];return a(this,!1,e.push,e),e}}},{10:10,27:27}],14:[function(t,e,n){"use strict";var a=t(31),r=t(60),i=t(4),o=t(38),s=t(69),u=t(27),p=t(8),c=t(30),l=t(82)("weak"),f=Object.isExtensible||o,d=p(5),h=p(6),m=0,v=function(t){return t._l||(t._l=new g)},g=function(){this.a=[]},b=function(t,e){return d(t.a,function(t){return t[0]===e})};g.prototype={get:function(t){var e=b(this,t);return e?e[1]:void 0},has:function(t){return!!b(this,t)},set:function(t,e){var n=b(this,t);n?n[1]=e:this.a.push([t,e])},"delete":function(t){var e=h(this.a,function(e){return e[0]===t});return~e&&this.a.splice(e,1),!!~e}},e.exports={getConstructor:function(t,e,n,a){var i=t(function(t,r){s(t,i,e),t._i=m++,t._l=void 0,void 0!=r&&u(r,n,t[a],t)});return r(i.prototype,{"delete":function(t){return o(t)?f(t)?c(t,l)&&c(t[l],this._i)&&delete t[l][this._i]:v(this)["delete"](t):!1},has:function(t){return o(t)?f(t)?c(t,l)&&c(t[l],this._i):v(this).has(t):!1}}),i},def:function(t,e,n){return f(i(e))?(c(e,l)||a(e,l,{}),e[l][t._i]=n):v(t).set(e,n),t},frozenStore:v,WEAK:l}},{27:27,30:30,31:31,38:38,4:4,60:60,69:69,8:8,82:82}],15:[function(t,e,n){"use strict";var a=t(29),r=t(22),i=t(61),o=t(60),s=t(27),u=t(69),p=t(38),c=t(24),l=t(43),f=t(66);e.exports=function(t,e,n,d,h,m){var v=a[t],g=v,b=h?"set":"add",y=g&&g.prototype,x={},_=function(t){var e=y[t];i(y,t,"delete"==t?function(t){return m&&!p(t)?!1:e.call(this,0===t?0:t)}:"has"==t?function(t){return m&&!p(t)?!1:e.call(this,0===t?0:t)}:"get"==t?function(t){return m&&!p(t)?void 0:e.call(this,0===t?0:t)}:"add"==t?function(t){return e.call(this,0===t?0:t),this}:function(t,n){return e.call(this,0===t?0:t,n),this})};if("function"==typeof g&&(m||y.forEach&&!c(function(){(new g).entries().next()}))){var w,k=new g,E=k[b](m?{}:-0,1)!=k,S=c(function(){k.has(1)}),C=l(function(t){new g(t)});C||(g=e(function(e,n){u(e,g,t);var a=new v;return void 0!=n&&s(n,h,a[b],a),a}),g.prototype=y,y.constructor=g),m||k.forEach(function(t,e){w=1/e===-(1/0)}),(S||w)&&(_("delete"),_("has"),h&&_("get")),(w||E)&&_(b),m&&y.clear&&delete y.clear}else g=d.getConstructor(e,t,h,b),o(g.prototype,n);return f(g,t),x[t]=g,r(r.G+r.W+r.F*(g!=v),x),m||d.setStrong(g,t,h),g}},{22:22,24:24,27:27,29:29,38:38,43:43,60:60,61:61,66:66,69:69}],16:[function(t,e,n){var a=e.exports={version:"1.2.6"};"number"==typeof __e&&(__e=a)},{}],17:[function(t,e,n){var a=t(2);e.exports=function(t,e,n){if(a(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,a){return t.call(e,n,a)};case 3:return function(n,a,r){return t.call(e,n,a,r)}}return function(){return t.apply(e,arguments)}}},{2:2}],18:[function(t,e,n){e.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},{}],19:[function(t,e,n){e.exports=!t(24)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},{24:24}],20:[function(t,e,n){var a=t(38),r=t(29).document,i=a(r)&&a(r.createElement);e.exports=function(t){return i?r.createElement(t):{}}},{29:29,38:38}],21:[function(t,e,n){var a=t(46);e.exports=function(t){var e=a.getKeys(t),n=a.getSymbols;if(n)for(var r,i=n(t),o=a.isEnum,s=0;i.length>s;)o.call(t,r=i[s++])&&e.push(r);return e}},{46:46}],22:[function(t,e,n){var a=t(29),r=t(16),i=t(31),o=t(61),s=t(17),u="prototype",p=function(t,e,n){var c,l,f,d,h=t&p.F,m=t&p.G,v=t&p.S,g=t&p.P,b=t&p.B,y=m?a:v?a[e]||(a[e]={}):(a[e]||{})[u],x=m?r:r[e]||(r[e]={}),_=x[u]||(x[u]={});m&&(n=e);for(c in n)l=!h&&y&&c in y,f=(l?y:n)[c],d=b&&l?s(f,a):g&&"function"==typeof f?s(Function.call,f):f,y&&!l&&o(y,c,f),x[c]!=f&&i(x,c,d),g&&_[c]!=f&&(_[c]=f)};a.core=r,p.F=1,p.G=2,p.S=4,p.P=8,p.B=16,p.W=32,e.exports=p},{16:16,17:17,29:29,31:31,61:61}],23:[function(t,e,n){var a=t(83)("match");e.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[a]=!1,!"/./"[t](e)}catch(r){}}return!0}},{83:83}],24:[function(t,e,n){e.exports=function(t){try{return!!t()}catch(e){return!0}}},{}],25:[function(t,e,n){"use strict";var a=t(31),r=t(61),i=t(24),o=t(18),s=t(83);e.exports=function(t,e,n){var u=s(t),p=""[t];i(function(){var e={};return e[u]=function(){return 7},7!=""[t](e)})&&(r(String.prototype,t,n(o,u,p)),a(RegExp.prototype,u,2==e?function(t,e){return p.call(t,this,e)}:function(t){return p.call(t,this)}))}},{18:18,24:24,31:31,61:61,83:83}],26:[function(t,e,n){"use strict";var a=t(4);e.exports=function(){var t=a(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},{4:4}],27:[function(t,e,n){var a=t(17),r=t(40),i=t(35),o=t(4),s=t(79),u=t(84);e.exports=function(t,e,n,p){var c,l,f,d=u(t),h=a(n,p,e?2:1),m=0;if("function"!=typeof d)throw TypeError(t+" is not iterable!");if(i(d))for(c=s(t.length);c>m;m++)e?h(o(l=t[m])[0],l[1]):h(t[m]);else for(f=d.call(t);!(l=f.next()).done;)r(f,h,l.value,e)}},{17:17,35:35,4:4,40:40,79:79,84:84}],28:[function(t,e,n){var a=t(78),r=t(46).getNames,i={}.toString,o="object"==typeof window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(t){try{return r(t)}catch(e){return o.slice()}};e.exports.get=function(t){return o&&"[object Window]"==i.call(t)?s(t):r(a(t))}},{46:46,78:78}],29:[function(t,e,n){var a=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=a)},{}],30:[function(t,e,n){var a={}.hasOwnProperty;e.exports=function(t,e){return a.call(t,e)}},{}],31:[function(t,e,n){var a=t(46),r=t(59);e.exports=t(19)?function(t,e,n){return a.setDesc(t,e,r(1,n))}:function(t,e,n){return t[e]=n,t}},{19:19,46:46,59:59}],32:[function(t,e,n){e.exports=t(29).document&&document.documentElement},{29:29}],33:[function(t,e,n){e.exports=function(t,e,n){var a=void 0===n;switch(e.length){case 0:return a?t():t.call(n);case 1:return a?t(e[0]):t.call(n,e[0]);case 2:return a?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return a?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return a?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)}},{}],34:[function(t,e,n){var a=t(11);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==a(t)?t.split(""):Object(t)}},{11:11}],35:[function(t,e,n){var a=t(45),r=t(83)("iterator"),i=Array.prototype;e.exports=function(t){return void 0!==t&&(a.Array===t||i[r]===t)}},{45:45,83:83}],36:[function(t,e,n){var a=t(11);e.exports=Array.isArray||function(t){return"Array"==a(t)}},{11:11}],37:[function(t,e,n){var a=t(38),r=Math.floor;e.exports=function(t){return!a(t)&&isFinite(t)&&r(t)===t}},{38:38}],38:[function(t,e,n){e.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},{}],39:[function(t,e,n){var a=t(38),r=t(11),i=t(83)("match");e.exports=function(t){var e;return a(t)&&(void 0!==(e=t[i])?!!e:"RegExp"==r(t))}},{11:11,38:38,83:83}],40:[function(t,e,n){var a=t(4);e.exports=function(t,e,n,r){try{return r?e(a(n)[0],n[1]):e(n)}catch(i){var o=t["return"];throw void 0!==o&&a(o.call(t)),i}}},{4:4}],41:[function(t,e,n){"use strict";var a=t(46),r=t(59),i=t(66),o={};t(31)(o,t(83)("iterator"),function(){return this}),e.exports=function(t,e,n){t.prototype=a.create(o,{next:r(1,n)}),i(t,e+" Iterator")}},{31:31,46:46,59:59,66:66,83:83}],42:[function(t,e,n){"use strict";var a=t(48),r=t(22),i=t(61),o=t(31),s=t(30),u=t(45),p=t(41),c=t(66),l=t(46).getProto,f=t(83)("iterator"),d=!([].keys&&"next"in[].keys()),h="@@iterator",m="keys",v="values",g=function(){return this};e.exports=function(t,e,n,b,y,x,_){p(n,e,b);var w,k,E=function(t){if(!d&&t in A)return A[t];switch(t){case m:return function(){return new n(this,t)};case v:return function(){return new n(this,t)}}return function(){return new n(this,t)}},S=e+" Iterator",C=y==v,P=!1,A=t.prototype,O=A[f]||A[h]||y&&A[y],T=O||E(y);if(O){var R=l(T.call(new t));c(R,S,!0),!a&&s(A,h)&&o(R,f,g),C&&O.name!==v&&(P=!0,T=function(){return O.call(this)})}if(a&&!_||!d&&!P&&A[f]||o(A,f,T),u[e]=T,u[S]=g,y)if(w={values:C?T:E(v),keys:x?T:E(m),entries:C?E("entries"):T},_)for(k in w)k in A||i(A,k,w[k]);else r(r.P+r.F*(d||P),e,w);return w}},{22:22,30:30,31:31,41:41,45:45,46:46,48:48,61:61,66:66,83:83}],43:[function(t,e,n){var a=t(83)("iterator"),r=!1;try{var i=[7][a]();i["return"]=function(){r=!0},Array.from(i,function(){throw 2})}catch(o){}e.exports=function(t,e){if(!e&&!r)return!1;var n=!1;try{var i=[7],o=i[a]();o.next=function(){return{done:n=!0}},i[a]=function(){return o},t(i)}catch(s){}return n}},{83:83}],44:[function(t,e,n){e.exports=function(t,e){return{value:e,done:!!t}}},{}],45:[function(t,e,n){e.exports={}},{}],46:[function(t,e,n){var a=Object;e.exports={create:a.create,getProto:a.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:a.getOwnPropertyDescriptor,setDesc:a.defineProperty,setDescs:a.defineProperties,getKeys:a.keys,getNames:a.getOwnPropertyNames,getSymbols:a.getOwnPropertySymbols,each:[].forEach}},{}],47:[function(t,e,n){var a=t(46),r=t(78);e.exports=function(t,e){for(var n,i=r(t),o=a.getKeys(i),s=o.length,u=0;s>u;)if(i[n=o[u++]]===e)return n}},{46:46,78:78}],48:[function(t,e,n){e.exports=!1},{}],49:[function(t,e,n){e.exports=Math.expm1||function(t){return 0==(t=+t)?t:t>-1e-6&&1e-6>t?t+t*t/2:Math.exp(t)-1}},{}],50:[function(t,e,n){e.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&1e-8>t?t-t*t/2:Math.log(1+t)}},{}],51:[function(t,e,n){e.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:0>t?-1:1}},{}],52:[function(t,e,n){var a,r,i,o=t(29),s=t(75).set,u=o.MutationObserver||o.WebKitMutationObserver,p=o.process,c=o.Promise,l="process"==t(11)(p),f=function(){var t,e,n;for(l&&(t=p.domain)&&(p.domain=null,t.exit());a;)e=a.domain,n=a.fn,e&&e.enter(),n(),e&&e.exit(),a=a.next;r=void 0,t&&t.enter()};if(l)i=function(){p.nextTick(f)};else if(u){var d=1,h=document.createTextNode("");new u(f).observe(h,{characterData:!0}),i=function(){h.data=d=-d}}else i=c&&c.resolve?function(){c.resolve().then(f)}:function(){s.call(o,f)};e.exports=function(t){var e={fn:t,next:void 0,domain:l&&p.domain};r&&(r.next=e),a||(a=e,i()),r=e}},{11:11,29:29,75:75}],53:[function(t,e,n){var a=t(46),r=t(80),i=t(34);e.exports=t(24)(function(){var t=Object.assign,e={},n={},a=Symbol(),r="abcdefghijklmnopqrst";return e[a]=7,r.split("").forEach(function(t){n[t]=t}),7!=t({},e)[a]||Object.keys(t({},n)).join("")!=r})?function(t,e){for(var n=r(t),o=arguments,s=o.length,u=1,p=a.getKeys,c=a.getSymbols,l=a.isEnum;s>u;)for(var f,d=i(o[u++]),h=c?p(d).concat(c(d)):p(d),m=h.length,v=0;m>v;)l.call(d,f=h[v++])&&(n[f]=d[f]);return n}:Object.assign},{24:24,34:34,46:46,80:80}],54:[function(t,e,n){var a=t(22),r=t(16),i=t(24);e.exports=function(t,e){var n=(r.Object||{})[t]||Object[t],o={};o[t]=e(n),a(a.S+a.F*i(function(){n(1)}),"Object",o)}},{16:16,22:22,24:24}],55:[function(t,e,n){var a=t(46),r=t(78),i=a.isEnum;e.exports=function(t){return function(e){for(var n,o=r(e),s=a.getKeys(o),u=s.length,p=0,c=[];u>p;)i.call(o,n=s[p++])&&c.push(t?[n,o[n]]:o[n]);return c}}},{46:46,78:78}],56:[function(t,e,n){var a=t(46),r=t(4),i=t(29).Reflect;e.exports=i&&i.ownKeys||function(t){var e=a.getNames(r(t)),n=a.getSymbols;return n?e.concat(n(t)):e}},{29:29,4:4,46:46}],57:[function(t,e,n){"use strict";var a=t(58),r=t(33),i=t(2);e.exports=function(){for(var t=i(this),e=arguments.length,n=Array(e),o=0,s=a._,u=!1;e>o;)(n[o]=arguments[o++])===s&&(u=!0);return function(){var a,i=this,o=arguments,p=o.length,c=0,l=0;if(!u&&!p)return r(t,n,i);if(a=n.slice(),u)for(;e>c;c++)a[c]===s&&(a[c]=o[l++]);for(;p>l;)a.push(o[l++]);return r(t,a,i)}}},{2:2,33:33,58:58}],58:[function(t,e,n){e.exports=t(29)},{29:29}],59:[function(t,e,n){e.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},{}],60:[function(t,e,n){var a=t(61);e.exports=function(t,e){for(var n in e)a(t,n,e[n]);return t}},{61:61}],61:[function(t,e,n){var a=t(29),r=t(31),i=t(82)("src"),o="toString",s=Function[o],u=(""+s).split(o);t(16).inspectSource=function(t){return s.call(t)},(e.exports=function(t,e,n,o){"function"==typeof n&&(n.hasOwnProperty(i)||r(n,i,t[e]?""+t[e]:u.join(e+"")),n.hasOwnProperty("name")||r(n,"name",e)),t===a?t[e]=n:(o||delete t[e],r(t,e,n))})(Function.prototype,o,function(){return"function"==typeof this&&this[i]||s.call(this)})},{16:16,29:29,31:31,82:82}],62:[function(t,e,n){e.exports=function(t,e){var n=e===Object(e)?function(t){return e[t]}:e;return function(e){return(e+"").replace(t,n)}}},{}],63:[function(t,e,n){e.exports=Object.is||function(t,e){return t===e?0!==t||1/t===1/e:t!=t&&e!=e}},{}],64:[function(t,e,n){var a=t(46).getDesc,r=t(38),i=t(4),o=function(t,e){if(i(t),!r(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,n,r){try{r=t(17)(Function.call,a(Object.prototype,"__proto__").set,2),r(e,[]),n=!(e instanceof Array)}catch(i){n=!0}return function(t,e){return o(t,e),n?t.__proto__=e:r(t,e),t}}({},!1):void 0),check:o}},{17:17,38:38,4:4,46:46}],65:[function(t,e,n){"use strict";var a=t(29),r=t(46),i=t(19),o=t(83)("species");e.exports=function(t){var e=a[t];i&&e&&!e[o]&&r.setDesc(e,o,{configurable:!0,get:function(){return this}})}},{19:19,29:29,46:46,83:83}],66:[function(t,e,n){var a=t(46).setDesc,r=t(30),i=t(83)("toStringTag");e.exports=function(t,e,n){t&&!r(t=n?t:t.prototype,i)&&a(t,i,{configurable:!0,value:e})}},{30:30,46:46,83:83}],67:[function(t,e,n){var a=t(29),r="__core-js_shared__",i=a[r]||(a[r]={});e.exports=function(t){return i[t]||(i[t]={})}},{29:29}],68:[function(t,e,n){var a=t(4),r=t(2),i=t(83)("species");e.exports=function(t,e){var n,o=a(t).constructor;return void 0===o||void 0==(n=a(o)[i])?e:r(n)}},{2:2,4:4,83:83}],69:[function(t,e,n){e.exports=function(t,e,n){if(!(t instanceof e))throw TypeError(n+": use the 'new' operator!");return t}},{}],70:[function(t,e,n){var a=t(77),r=t(18);e.exports=function(t){return function(e,n){var i,o,s=r(e)+"",u=a(n),p=s.length;return 0>u||u>=p?t?"":void 0:(i=s.charCodeAt(u),55296>i||i>56319||u+1===p||(o=s.charCodeAt(u+1))<56320||o>57343?t?s.charAt(u):i:t?s.slice(u,u+2):(i-55296<<10)+(o-56320)+65536)}}},{18:18,77:77}],71:[function(t,e,n){var a=t(39),r=t(18);e.exports=function(t,e,n){if(a(e))throw TypeError("String#"+n+" doesn't accept regex!");return r(t)+""}},{18:18,39:39}],72:[function(t,e,n){var a=t(79),r=t(73),i=t(18);e.exports=function(t,e,n,o){var s=i(t)+"",u=s.length,p=void 0===n?" ":n+"",c=a(e);if(u>=c)return s;""==p&&(p=" ");var l=c-u,f=r.call(p,Math.ceil(l/p.length));return f.length>l&&(f=f.slice(0,l)),o?f+s:s+f}},{18:18,73:73,79:79}],73:[function(t,e,n){"use strict";var a=t(77),r=t(18);e.exports=function(t){var e=r(this)+"",n="",i=a(t);if(0>i||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(e+=e))1&i&&(n+=e);return n}},{18:18,77:77}],74:[function(t,e,n){var a=t(22),r=t(18),i=t(24),o=" \n\x0B\f\r  ᠎              \u2028\u2029\ufeff",s="["+o+"]",u="​…",p=RegExp("^"+s+s+"*"),c=RegExp(s+s+"*$"),l=function(t,e){var n={};n[t]=e(f),a(a.P+a.F*i(function(){return!!o[t]()||u[t]()!=u}),"String",n)},f=l.trim=function(t,e){return t=r(t)+"",1&e&&(t=t.replace(p,"")),2&e&&(t=t.replace(c,"")),t};e.exports=l},{18:18,22:22,24:24}],75:[function(t,e,n){var a,r,i,o=t(17),s=t(33),u=t(32),p=t(20),c=t(29),l=c.process,f=c.setImmediate,d=c.clearImmediate,h=c.MessageChannel,m=0,v={},g="onreadystatechange",b=function(){var t=+this;if(v.hasOwnProperty(t)){var e=v[t];delete v[t],e()}},y=function(t){b.call(t.data)};f&&d||(f=function(t){for(var e=[],n=1;arguments.length>n;)e.push(arguments[n++]);return v[++m]=function(){s("function"==typeof t?t:Function(t),e)},a(m),m},d=function(t){delete v[t]},"process"==t(11)(l)?a=function(t){l.nextTick(o(b,t,1))}:h?(r=new h,i=r.port2,r.port1.onmessage=y,a=o(i.postMessage,i,1)):c.addEventListener&&"function"==typeof postMessage&&!c.importScripts?(a=function(t){c.postMessage(t+"","*")},c.addEventListener("message",y,!1)):a=g in p("script")?function(t){u.appendChild(p("script"))[g]=function(){u.removeChild(this),b.call(t)}}:function(t){setTimeout(o(b,t,1),0)}),e.exports={set:f,clear:d}},{11:11,17:17,20:20,29:29,32:32,33:33}],76:[function(t,e,n){var a=t(77),r=Math.max,i=Math.min;e.exports=function(t,e){return t=a(t),0>t?r(t+e,0):i(t,e)}},{77:77}],77:[function(t,e,n){var a=Math.ceil,r=Math.floor;e.exports=function(t){return isNaN(t=+t)?0:(t>0?r:a)(t)}},{}],78:[function(t,e,n){var a=t(34),r=t(18);e.exports=function(t){return a(r(t))}},{18:18,34:34}],79:[function(t,e,n){var a=t(77),r=Math.min;e.exports=function(t){return t>0?r(a(t),9007199254740991):0}},{77:77}],80:[function(t,e,n){var a=t(18);e.exports=function(t){return Object(a(t))}},{18:18}],81:[function(t,e,n){var a=t(38);e.exports=function(t,e){if(!a(t))return t;var n,r;if(e&&"function"==typeof(n=t.toString)&&!a(r=n.call(t)))return r;if("function"==typeof(n=t.valueOf)&&!a(r=n.call(t)))return r;if(!e&&"function"==typeof(n=t.toString)&&!a(r=n.call(t)))return r;throw TypeError("Can't convert object to primitive value")}},{38:38}],82:[function(t,e,n){var a=0,r=Math.random();e.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++a+r).toString(36))}},{}],83:[function(t,e,n){var a=t(67)("wks"),r=t(82),i=t(29).Symbol;e.exports=function(t){return a[t]||(a[t]=i&&i[t]||(i||r)("Symbol."+t))}},{29:29,67:67,82:82}],84:[function(t,e,n){var a=t(10),r=t(83)("iterator"),i=t(45);e.exports=t(16).getIteratorMethod=function(t){return void 0!=t?t[r]||t["@@iterator"]||i[a(t)]:void 0}},{10:10,16:16,45:45,83:83}],85:[function(t,e,n){"use strict";var a,r=t(46),i=t(22),o=t(19),s=t(59),u=t(32),p=t(20),c=t(30),l=t(11),f=t(33),d=t(24),h=t(4),m=t(2),v=t(38),g=t(80),b=t(78),y=t(77),x=t(76),_=t(79),w=t(34),k=t(82)("__proto__"),E=t(8),S=t(7)(!1),C=Object.prototype,P=Array.prototype,A=P.slice,O=P.join,T=r.setDesc,R=r.getDesc,j=r.setDescs,M={};o||(a=!d(function(){return 7!=T(p("div"),"a",{get:function(){return 7}}).a}),r.setDesc=function(t,e,n){if(a)try{return T(t,e,n)}catch(r){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(h(t)[e]=n.value),t},r.getDesc=function(t,e){if(a)try{return R(t,e)}catch(n){}return c(t,e)?s(!C.propertyIsEnumerable.call(t,e),t[e]):void 0},r.setDescs=j=function(t,e){h(t);for(var n,a=r.getKeys(e),i=a.length,o=0;i>o;)r.setDesc(t,n=a[o++],e[n]);return t}),i(i.S+i.F*!o,"Object",{getOwnPropertyDescriptor:r.getDesc,defineProperty:r.setDesc,defineProperties:j});var L="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),D=L.concat("length","prototype"),N=L.length,F=function(){var t,e=p("iframe"),n=N,a=">";for(e.style.display="none",u.appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write("