diff --git a/_maps/map_files/Delta/delta.dmm b/_maps/map_files/Delta/delta.dmm index bedbf0239c7..bac17c5a2ad 100644 --- a/_maps/map_files/Delta/delta.dmm +++ b/_maps/map_files/Delta/delta.dmm @@ -21229,10 +21229,8 @@ tag = "" }, /obj/machinery/igniter{ - icon_state = "igniter0"; id = "Incinerator"; - luminosity = 2; - on = 0 + luminosity = 2 }, /turf/simulated/floor/engine, /area/maintenance/incinerator) diff --git a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm index 937d3acfa47..63c912e11d7 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41A.II.dmm @@ -73649,10 +73649,8 @@ /area/medical/reception) "cuQ" = ( /obj/machinery/igniter{ - icon_state = "igniter0"; id = "Turbine_igniter"; - luminosity = 2; - on = 0 + luminosity = 2 }, /obj/structure/cable{ d1 = 1; diff --git a/_maps/map_files/MetaStation/z2.dmm b/_maps/map_files/MetaStation/z2.dmm index 199577ece74..bed554f54f2 100644 --- a/_maps/map_files/MetaStation/z2.dmm +++ b/_maps/map_files/MetaStation/z2.dmm @@ -1498,7 +1498,7 @@ /turf/unsimulated/wall, /area/tdome/arena_source) "eb" = ( -/obj/machinery/igniter, +/obj/machinery/igniter/on, /turf/simulated/floor/plasteel, /area/tdome/arena_source) "ec" = ( @@ -5805,7 +5805,7 @@ /turf/unsimulated/wall, /area/tdome/arena) "qu" = ( -/obj/machinery/igniter, +/obj/machinery/igniter/on, /turf/simulated/floor/plasteel, /area/tdome/arena) "qv" = ( @@ -6351,6 +6351,10 @@ /obj/structure/bed/abductor, /turf/unsimulated/floor/abductor, /area/abductor_ship) +"Ur" = ( +/obj/machinery/poolcontroller/invisible, +/turf/unsimulated/beach/water, +/area/centcom/holding) (1,1,1) = {" aa @@ -35864,7 +35868,7 @@ tv tu tu tQ -tU +Ur th ab ab diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm index 454b5e4fb6b..e6fda6f503a 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm @@ -24,9 +24,6 @@ "af" = ( /obj/structure/table, /obj/item/clothing/mask/gas, -/obj/machinery/light/small{ - dir = 1 - }, /obj/item/clothing/glasses/sunglasses/big, /obj/item/clothing/glasses/sunglasses/big, /obj/item/clothing/glasses/sunglasses/big, @@ -34,6 +31,9 @@ /area/ruin/powered/beach) "ag" = ( /obj/structure/reagent_dispensers/fueltank, +/obj/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/plating, /area/ruin/powered/beach) "ah" = ( @@ -198,8 +198,8 @@ /turf/simulated/floor/beach/sand, /area/ruin/powered/beach) "aL" = ( -/obj/machinery/vending/cigarette, /obj/effect/turf_decal/sand, +/obj/machinery/vending/cigarette/beach, /turf/simulated/floor/plasteel, /area/ruin/powered/beach) "aM" = ( @@ -438,6 +438,10 @@ /obj/item/storage/backpack/duffel, /turf/simulated/floor/beach/sand, /area/ruin/powered/beach) +"bL" = ( +/obj/machinery/poolcontroller/invisible, +/turf/simulated/floor/beach/water, +/area/ruin/powered/beach) "bM" = ( /turf/simulated/floor/plasteel/stairs/old, /area/ruin/powered/beach) @@ -477,12 +481,6 @@ "bW" = ( /turf/simulated/wall/r_wall, /area/ruin/powered/beach) -"cd" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/wall/mineral/sandstone, -/area/ruin/powered/beach) "cs" = ( /obj/effect/overlay/palmtree_l, /obj/machinery/light{ @@ -567,6 +565,14 @@ }, /turf/simulated/floor/pod, /area/ruin/powered/beach) +"Ei" = ( +/obj/effect/turf_decal/sand, +/obj/machinery/light/small{ + light_power = 3; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ruin/powered/beach) "Gc" = ( /turf/simulated/floor/pod/light, /area/ruin/powered/beach) @@ -1054,7 +1060,7 @@ aa (15,1,1) = {" aa bW -cd +aj aj aj aF @@ -1087,7 +1093,7 @@ aa aa bW ak -ar +Ei aj aE aC @@ -1335,7 +1341,7 @@ bU bU bU bU -bU +bL bW aa "} diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm index 451e6b84aa0..5822d05aa8a 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm @@ -120,10 +120,10 @@ /area/ruin/powered/animal_hospital) "aq" = ( /obj/structure/table, -/obj/item/cautery{ - pixel_x = 4 - }, /obj/item/surgicaldrill, +/obj/item/bonegel, +/obj/item/bonesetter, +/obj/item/FixOVein, /turf/simulated/floor/plasteel/white, /area/ruin/powered/animal_hospital) "ar" = ( @@ -243,6 +243,9 @@ /obj/structure/table, /obj/item/retractor, /obj/item/hemostat, +/obj/item/cautery{ + pixel_x = 4 + }, /turf/simulated/floor/plasteel/white, /area/ruin/powered/animal_hospital) "aE" = ( @@ -480,15 +483,13 @@ /turf/simulated/floor/plasteel, /area/ruin/powered/animal_hospital) "bm" = ( -/obj/structure/chair/comfy/teal{ - dir = 8 - }, /obj/effect/turf_decal/tile/blue{ dir = 1 }, /obj/effect/turf_decal/tile/blue{ dir = 4 }, +/obj/machinery/vending/crittercare, /turf/simulated/floor/plasteel, /area/ruin/powered/animal_hospital) "bn" = ( diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm index f102bf55c8f..66d5f5fce80 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm @@ -280,7 +280,7 @@ dir = 8 }, /obj/machinery/iv_drip, -/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/glass/beaker/waterbottle/large, /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/ash_walkers) "aR" = ( diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm index 0128135c6b0..74aa1875f96 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm @@ -179,6 +179,10 @@ /obj/effect/baseturf_helper, /turf/simulated/floor/plating, /area/ruin/powered) +"X" = ( +/obj/item/flashlight/lantern, +/turf/simulated/floor/plating/asteroid/basalt, +/area/ruin/powered) (1,1,1) = {" a @@ -383,7 +387,7 @@ b b f k -f +X b b b diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm index be387f22047..b097156d39a 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm @@ -11,6 +11,7 @@ id_tag = "seed_vault_inner"; locked = 1 }, +/obj/structure/fans/tiny, /turf/simulated/floor/plasteel/freezer, /area/ruin/powered/seedvault) "d" = ( diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm index 2358e040146..13850af5db7 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm @@ -682,15 +682,8 @@ /area/ruin/unpowered/syndicate_lava_base/engineering) "bf" = ( /obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/igniter{ - id = "syndicate_base_incinerator" - }, -/turf/simulated/floor/engine/vacuum, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"bg" = ( -/obj/structure/cable{ + d1 = 1; + d2 = 2; icon_state = "1-2" }, /obj/machinery/door/airlock/glass{ @@ -708,31 +701,35 @@ pixel_y = 0; req_access_txt = "150" }, -/turf/simulated/floor/engine, +/turf/simulated/floor/engine/insulated, /area/ruin/unpowered/syndicate_lava_base/engineering) -"bh" = ( +"bg" = ( /obj/machinery/light/small{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 8 +/turf/simulated/floor/engine/insulated, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"bh" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/turf/simulated/floor/engine, +/turf/simulated/floor/engine/insulated, /area/ruin/unpowered/syndicate_lava_base/engineering) "bi" = ( /obj/machinery/light/small{ dir = 4 }, -/obj/machinery/atmospherics/binary/pump/on{ - target_pressure = 4500 +/obj/machinery/atmospherics/binary/pump{ + name = "Incinerator Input" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 8 - }, -/turf/simulated/floor/engine, +/turf/simulated/floor/engine/insulated, /area/ruin/unpowered/syndicate_lava_base/engineering) "bj" = ( /obj/structure/cable{ + d1 = 1; + d2 = 2; icon_state = "1-2" }, /obj/machinery/door/airlock/glass{ @@ -750,7 +747,7 @@ pixel_y = 0; req_access_txt = "150" }, -/turf/simulated/floor/engine, +/turf/simulated/floor/engine/insulated, /area/ruin/unpowered/syndicate_lava_base/engineering) "bk" = ( /obj/structure/rack, @@ -766,7 +763,7 @@ /obj/effect/turf_decal/tile/brown{ dir = 4 }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/syndicate{ dir = 8; pixel_x = -26 }, @@ -1006,7 +1003,7 @@ /area/ruin/unpowered/syndicate_lava_base/engineering) "bG" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/manifold4w/visible/supply, +/obj/machinery/atmospherics/pipe/manifold/visible/supply, /turf/simulated/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/engineering) "bH" = ( @@ -1051,27 +1048,25 @@ "bM" = ( /obj/effect/turf_decal/stripes/corner, /obj/machinery/light/small, -/obj/structure/reagent_dispensers/fueltank, /obj/effect/decal/cleanable/dirt, -/obj/item/clothing/head/welding, -/obj/item/weldingtool/largetank, -/obj/machinery/atmospherics/pipe/simple/visible/supply, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4; - level = 2 +/obj/machinery/atmospherics/binary/pump{ + dir = 8; + name = "Plasma to Incinerator" }, /turf/simulated/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/engineering) "bN" = ( /obj/effect/turf_decal/stripes/line, -/obj/structure/reagent_dispensers/watertank, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 10; level = 2 }, +/obj/structure/reagent_dispensers/fueltank, +/obj/item/clothing/head/welding, +/obj/item/weldingtool/largetank, /turf/simulated/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/engineering) "bO" = ( @@ -1090,8 +1085,8 @@ pixel_x = -6; pixel_y = -25; req_access_txt = "150"; - tag_exterior_door = "syndicate_incinerator_exterior"; - tag_interior_door = "syndicate_incinerator_interior" + tag_exterior_door = "syndicate_base_incinerator_exterior"; + tag_interior_door = "syndicate_base_incinerator_interior" }, /obj/machinery/atmospherics/pipe/simple/visible/yellow, /turf/simulated/floor/plasteel, @@ -1103,8 +1098,7 @@ /turf/simulated/floor/plating, /area/ruin/unpowered/syndicate_lava_base/engineering) "bQ" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow, -/turf/simulated/wall/mineral/plastitanium/nodiagonal, +/turf/simulated/floor/engine/insulated, /area/ruin/unpowered/syndicate_lava_base/engineering) "bR" = ( /obj/machinery/optable, @@ -1273,7 +1267,7 @@ "ch" = ( /obj/machinery/air_sensor{ frequency = 1442; - id_tag = "Syndicate_Construction_o2_sensor" + id_tag = "syndie_lavaland_o2_sensor" }, /turf/simulated/floor/engine{ name = "o2 floor"; @@ -1360,6 +1354,60 @@ toxins = 70000 }, /area/ruin/unpowered/syndicate_lava_base/engineering) +"cp" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/igniter{ + id = "syndicate_base_incinerator" + }, +/turf/simulated/floor/engine/insulated, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"cq" = ( +/obj/machinery/atmospherics/unary/outlet_injector/on{ + dir = 1; + id = "syndie_lavaland_inc_in" + }, +/obj/structure/sign/vacuum/external{ + pixel_y = -32 + }, +/turf/simulated/floor/engine/insulated, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"cr" = ( +/obj/machinery/door/poddoor{ + id_tag = "lavalandsyndi_incineratorinput" + }, +/turf/simulated/floor/engine/insulated, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"cs" = ( +/obj/structure/cable, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/compressor{ + comp_id = "syndie_lavaland_incineratorturbine"; + dir = 1; + luminosity = 2 + }, +/turf/simulated/floor/engine/insulated, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"ct" = ( +/obj/structure/cable, +/obj/machinery/power/turbine{ + dir = 2; + luminosity = 2 + }, +/turf/simulated/floor/engine/insulated, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"cu" = ( +/obj/machinery/door/poddoor{ + id_tag = "lavalandsyndi_incineratoroutput" + }, +/turf/simulated/floor/engine/insulated, +/area/ruin/unpowered/syndicate_lava_base/engineering) "cA" = ( /obj/structure/table/reinforced, /obj/item/clothing/glasses/science, @@ -1635,7 +1683,7 @@ /turf/simulated/floor/plating, /area/ruin/unpowered/syndicate_lava_base/testlab) "dT" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/syndicate{ dir = 8; pixel_x = -26 }, @@ -1948,7 +1996,7 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/syndicate{ dir = 8; pixel_x = -26 }, @@ -2153,7 +2201,7 @@ /turf/simulated/floor/plasteel/dark, /area/ruin/unpowered/syndicate_lava_base/testlab) "eM" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/syndicate{ dir = 1; pixel_y = -24 }, @@ -2465,7 +2513,7 @@ /obj/item/clothing/glasses/hud/health, /obj/structure/disposalpipe/segment, /obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/syndicate{ dir = 4; pixel_x = 26 }, @@ -2619,21 +2667,21 @@ "ft" = ( /obj/effect/turf_decal/box/white/corners, /obj/structure/closet/crate, -/obj/item/reagent_containers/food/drinks/waterbottle/large{ +/obj/item/reagent_containers/glass/beaker/waterbottle/large{ pixel_x = -3; pixel_y = 3 }, -/obj/item/reagent_containers/food/drinks/waterbottle/large{ +/obj/item/reagent_containers/glass/beaker/waterbottle/large{ pixel_x = -3; pixel_y = 3 }, -/obj/item/reagent_containers/food/drinks/waterbottle/large, -/obj/item/reagent_containers/food/drinks/waterbottle/large, -/obj/item/reagent_containers/food/drinks/waterbottle/large{ +/obj/item/reagent_containers/glass/beaker/waterbottle/large, +/obj/item/reagent_containers/glass/beaker/waterbottle/large, +/obj/item/reagent_containers/glass/beaker/waterbottle/large{ pixel_x = 3; pixel_y = -3 }, -/obj/item/reagent_containers/food/drinks/waterbottle/large{ +/obj/item/reagent_containers/glass/beaker/waterbottle/large{ pixel_x = 3; pixel_y = -3 }, @@ -2870,12 +2918,6 @@ "gj" = ( /turf/simulated/wall/mineral/plastitanium/explosive, /area/ruin/unpowered/syndicate_lava_base/virology) -"gn" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/wall/mineral/plastitanium/nodiagonal, -/area/ruin/unpowered/syndicate_lava_base/engineering) "gp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 @@ -3556,12 +3598,12 @@ /turf/simulated/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/cargo) "hV" = ( -/obj/structure/filingcabinet/chestdrawer, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/brown, /obj/effect/turf_decal/tile/brown{ dir = 8 }, +/obj/machinery/autolathe, /turf/simulated/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/cargo) "hW" = ( @@ -3571,7 +3613,7 @@ /turf/simulated/wall/mineral/plastitanium/nodiagonal, /area/ruin/unpowered/syndicate_lava_base/main) "hZ" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/syndicate{ dir = 8; pixel_x = -26 }, @@ -3879,7 +3921,7 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/syndicate{ dir = 2; pixel_y = 24 }, @@ -3916,7 +3958,7 @@ /turf/simulated/floor/plasteel/dark, /area/ruin/unpowered/syndicate_lava_base/dormitories) "iG" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/syndicate{ dir = 8; pixel_x = -26 }, @@ -3941,7 +3983,8 @@ "iI" = ( /obj/machinery/door/airlock/vault{ id_tag = "syndie_lavaland_vault"; - req_access_txt = "150" + req_access_txt = "150"; + locked = 1 }, /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -4392,6 +4435,7 @@ /obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/structure/reagent_dispensers/watertank, /turf/simulated/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/main) "ju" = ( @@ -4574,7 +4618,8 @@ "jK" = ( /obj/machinery/atmospherics/unary/outlet_injector/on{ dir = 8; - volume_rate = 200 + volume_rate = 200; + id = "syndie_lavaland_waste" }, /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/syndicate_lava_base/engineering) @@ -4939,7 +4984,6 @@ dir = 8; pixel_x = 24 }, -/obj/machinery/vending/coffee, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -4951,6 +4995,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/vending/coffee/free, /turf/simulated/floor/plasteel/dark, /area/ruin/unpowered/syndicate_lava_base/bar) "kr" = ( @@ -5016,9 +5061,6 @@ icon_state = "2-4" }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /turf/simulated/floor/plating, /area/ruin/unpowered/syndicate_lava_base/engineering) "ky" = ( @@ -5036,9 +5078,6 @@ icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /turf/simulated/floor/plating, /area/ruin/unpowered/syndicate_lava_base/engineering) "kz" = ( @@ -5053,8 +5092,10 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/visible/supply, -/obj/machinery/atmospherics/pipe/manifold4w/visible/scrubbers, /obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers{ + dir = 8 + }, /turf/simulated/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/engineering) "kB" = ( @@ -5153,13 +5194,13 @@ /turf/simulated/floor/plasteel/dark, /area/ruin/unpowered/syndicate_lava_base/bar) "kM" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/syndicate{ dir = 4; pixel_x = 26 }, -/obj/machinery/vending/cigarette, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, +/obj/machinery/vending/cigarette/syndicate/free, /turf/simulated/floor/plasteel/dark, /area/ruin/unpowered/syndicate_lava_base/bar) "kN" = ( @@ -5211,12 +5252,6 @@ /obj/structure/sign/redcross, /turf/simulated/wall/mineral/plastitanium/nodiagonal, /area/ruin/unpowered/syndicate_lava_base/medbay) -"kU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/wall/mineral/plastitanium/explosive, -/area/ruin/unpowered/syndicate_lava_base/engineering) "kV" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -5246,7 +5281,7 @@ /obj/structure/chair{ dir = 1 }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/syndicate{ dir = 8; pixel_x = -26 }, @@ -5344,9 +5379,16 @@ dir = 1 }, /obj/structure/table, -/obj/item/storage/firstaid/fire, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, +/obj/item/storage/box/masks{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/storage/box/gloves{ + pixel_x = 5; + pixel_y = 5 + }, /turf/simulated/floor/plasteel/white/side{ dir = 5 }, @@ -5359,6 +5401,7 @@ dir = 1 }, /obj/structure/cable{ + d2 = 4; icon_state = "0-4" }, /obj/effect/decal/cleanable/dirt, @@ -5372,9 +5415,12 @@ dir = 1 }, /obj/structure/cable{ + d2 = 2; icon_state = "0-2" }, /obj/structure/cable{ + d1 = 2; + d2 = 8; icon_state = "2-8" }, /turf/simulated/floor/plating, @@ -5486,8 +5532,15 @@ /area/ruin/unpowered/syndicate_lava_base/medbay) "lK" = ( /obj/structure/table, -/obj/item/storage/firstaid/regular, +/obj/item/storage/firstaid/regular{ + pixel_x = -4; + pixel_y = -4 + }, /obj/effect/decal/cleanable/dirt, +/obj/item/storage/firstaid/fire{ + pixel_x = 4; + pixel_y = 4 + }, /turf/simulated/floor/plasteel/white/side{ dir = 4 }, @@ -5518,6 +5571,8 @@ /area/ruin/unpowered/syndicate_lava_base/engineering) "lM" = ( /obj/structure/cable{ + d1 = 1; + d2 = 2; icon_state = "1-2" }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -5708,7 +5763,7 @@ /turf/simulated/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/medbay) "mg" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/syndicate{ dir = 8; pixel_x = -26 }, @@ -5716,26 +5771,26 @@ /obj/machinery/cell_charger, /obj/item/stock_parts/cell/high/plus, /obj/effect/decal/cleanable/dirt, -/obj/machinery/pipedispenser{ - pixel_y = 12 - }, /obj/effect/decal/cleanable/dirt, +/obj/item/rpd{ + pixel_y = 3 + }, /turf/simulated/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/engineering) "mh" = ( /obj/structure/cable{ + d1 = 1; + d2 = 2; icon_state = "1-2" }, /turf/simulated/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/engineering) "mj" = ( -/obj/machinery/atmospherics/binary/pump/on{ - dir = 8; - name = "O2 to Incinerator"; - target_pressure = 4500 - }, -/obj/machinery/atmospherics/pipe/simple/visible/supply, /obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/binary/pump{ + dir = 8; + name = "O2 to Incinerator" + }, /turf/simulated/floor/plasteel, /area/ruin/unpowered/syndicate_lava_base/engineering) "mn" = ( @@ -5816,7 +5871,7 @@ /obj/structure/bed/roller, /obj/machinery/iv_drip, /obj/item/reagent_containers/iv_bag/blood/OMinus, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/syndicate{ dir = 8; pixel_x = -26 }, @@ -5870,6 +5925,8 @@ /area/ruin/unpowered/syndicate_lava_base/engineering) "mG" = ( /obj/structure/cable{ + d1 = 1; + d2 = 2; icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, @@ -5975,12 +6032,18 @@ id = "syndie_lavaland_incineratorturbine" }, /obj/machinery/door_control{ - pixel_x = 6; - pixel_y = -24 + id = "lavalandsyndi_incineratoroutput"; + name = "Incinerator Output Blast Door Control"; + pixel_x = -6; + pixel_y = -24; + req_access_txt = "150" }, /obj/machinery/door_control{ - pixel_x = -6; - pixel_y = -24 + id = "lavalandsyndi_incineratorinput"; + name = "Incinerator Input Blast Door Control"; + pixel_x = 6; + pixel_y = -24; + req_access_txt = "150" }, /obj/effect/turf_decal/stripes/line, /obj/effect/decal/cleanable/dirt, @@ -5989,6 +6052,8 @@ /area/ruin/unpowered/syndicate_lava_base/engineering) "nd" = ( /obj/structure/cable{ + d1 = 1; + d2 = 2; icon_state = "1-2" }, /obj/effect/turf_decal/stripes/line, @@ -5997,7 +6062,7 @@ /area/ruin/unpowered/syndicate_lava_base/engineering) "nf" = ( /obj/structure/sign/fire, -/turf/simulated/wall/mineral/plastitanium/nodiagonal, +/turf/simulated/wall/mineral/plastitanium/coated, /area/ruin/unpowered/syndicate_lava_base/engineering) "nh" = ( /obj/machinery/telecomms/relay/preset/ruskie{ @@ -6309,8 +6374,10 @@ "nB" = ( /obj/structure/table/reinforced, /obj/item/surgicaldrill, -/obj/item/cautery, /obj/effect/decal/cleanable/dirt, +/obj/item/bonegel, +/obj/item/bonesetter, +/obj/item/FixOVein, /turf/simulated/floor/plasteel/white/side, /area/ruin/unpowered/syndicate_lava_base/medbay) "nC" = ( @@ -6318,6 +6385,7 @@ /obj/item/retractor, /obj/item/hemostat, /obj/effect/decal/cleanable/dirt, +/obj/item/cautery, /turf/simulated/floor/plasteel/white/side{ dir = 6 }, @@ -6478,7 +6546,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/syndicate{ dir = 2; pixel_y = 24 }, @@ -6580,17 +6648,8 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel/white/side, /area/ruin/unpowered/syndicate_lava_base/medbay) -"oe" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume{ - dir = 8 - }, -/turf/simulated/floor/engine, -/area/ruin/unpowered/syndicate_lava_base/engineering) "oh" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/syndicate{ dir = 8; pixel_x = -26 }, @@ -6730,47 +6789,10 @@ }, /turf/simulated/floor/plating, /area/ruin/unpowered/syndicate_lava_base/arrivals) -"oz" = ( -/turf/simulated/floor/engine/vacuum, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"oB" = ( -/obj/machinery/atmospherics/unary/outlet_injector{ - dir = 1; - id = "syndie_lavaland_inc_in" - }, -/obj/structure/sign/vacuum/external{ - pixel_y = -32 - }, -/turf/simulated/floor/engine/vacuum, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"oE" = ( -/obj/structure/cable, -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/machinery/power/compressor{ - comp_id = "syndie_lavaland_incineratorturbine"; - dir = 1; - luminosity = 2 - }, -/turf/simulated/floor/engine/vacuum, -/area/ruin/unpowered/syndicate_lava_base/engineering) "oF" = ( /obj/structure/sign/securearea, /turf/simulated/wall/mineral/plastitanium/nodiagonal, /area/ruin/unpowered/syndicate_lava_base/arrivals) -"oG" = ( -/obj/structure/cable, -/obj/machinery/power/turbine{ - dir = 2; - luminosity = 2 - }, -/turf/simulated/floor/engine/vacuum, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"oH" = ( -/obj/machinery/door/poddoor, -/turf/simulated/floor/engine/vacuum, -/area/ruin/unpowered/syndicate_lava_base/engineering) "oP" = ( /obj/structure/sign/chemistry, /turf/simulated/wall/mineral/plastitanium/nodiagonal, @@ -6787,21 +6809,21 @@ }, /turf/simulated/floor/engine, /area/ruin/unpowered/syndicate_lava_base/testlab) -"tW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/wall/mineral/plastitanium/nodiagonal, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"uB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/wall/mineral/plastitanium/nodiagonal, -/area/ruin/unpowered/syndicate_lava_base/engineering) "vu" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/engine, /area/ruin/unpowered/syndicate_lava_base/testlab) +"yd" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/turf/simulated/wall/mineral/plastitanium/coated, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"yU" = ( +/turf/simulated/wall/mineral/plastitanium/explosive, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"Au" = ( +/turf/simulated/wall/mineral/plastitanium/explosive, +/area/ruin/unpowered/syndicate_lava_base/engineering) "BF" = ( /obj/structure/grille, /obj/structure/window/plastitanium, @@ -6838,12 +6860,6 @@ }, /turf/simulated/floor/engine, /area/ruin/unpowered/syndicate_lava_base/testlab) -"IJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/wall/mineral/plastitanium/nodiagonal, -/area/ruin/unpowered/syndicate_lava_base/engineering) "Lg" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 @@ -6855,15 +6871,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/engine, /area/ruin/unpowered/syndicate_lava_base/testlab) -"RE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/wall/mineral/plastitanium/nodiagonal, +"RI" = ( +/turf/simulated/wall/mineral/plastitanium/coated, /area/ruin/unpowered/syndicate_lava_base/engineering) "RV" = ( /obj/structure/sign/fire, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/wall/mineral/plastitanium/nodiagonal, /area/ruin/unpowered/syndicate_lava_base/engineering) "Tp" = ( @@ -7120,7 +7132,7 @@ ab ab ab mn -mn +mo mM nh mM @@ -7199,7 +7211,7 @@ ab ab ab eh -eh +gj eh eh eh @@ -7499,7 +7511,7 @@ ab ab ab eh -eh +gj eI eI gt @@ -7671,7 +7683,7 @@ lf bw jy jy -jy +jP np aH mT @@ -7741,7 +7753,7 @@ ab ab ab ae -ae +aL aq aq qG @@ -8255,7 +8267,7 @@ fH gG he hA -hz +hO id im bX @@ -8350,7 +8362,7 @@ dI dZ ew as -as +yU as gJ hh @@ -8615,18 +8627,18 @@ jt jF jT ju -gn -IJ -IJ -IJ -kU -IJ -IJ -IJ -uB ju ju ju +ju +Au +ju +ju +RI +RI +RI +RI +RI ab ab ab @@ -8672,12 +8684,12 @@ lL mg mF nc -ju -bh -ju -oz -ju -ju +RI +bg +RI +bQ +RI +RI nf ab ab @@ -8722,13 +8734,13 @@ lM mh mG nd -bg -oe -bj bf -oE -oG -oH +bh +bj +cp +cs +ct +cu ab ab ab @@ -8772,12 +8784,12 @@ bF ca bL bO -bQ +yd bi -bQ -oB -ju -ju +yd +cq +RI +RI nf ab ab @@ -8822,10 +8834,10 @@ bG mj bM RV -tW -RE -ju -oH +RI +RI +RI +cr nf ab ab @@ -8847,7 +8859,7 @@ ab ab ab dy -dy +dP eE fe dy @@ -8874,7 +8886,7 @@ bN bP cl cn -ju +RI ab ab ab @@ -8924,7 +8936,7 @@ mK kD cm co -ju +RI ab ab ab @@ -8967,14 +8979,14 @@ ab ju kD bB -ju +Au kD bB ju ju ju ju -ju +RI ab ab ab diff --git a/_maps/map_files/RandomZLevels/academy.dmm b/_maps/map_files/RandomZLevels/academy.dmm index 5dd4050d567..24f93b0a6ce 100644 --- a/_maps/map_files/RandomZLevels/academy.dmm +++ b/_maps/map_files/RandomZLevels/academy.dmm @@ -1365,7 +1365,7 @@ /turf/simulated/floor/plasteel, /area/awaymission/academy/classrooms) "dZ" = ( -/obj/machinery/igniter, +/obj/machinery/igniter/on, /turf/simulated/floor/plating, /area/awaymission/academy/classrooms) "ea" = ( @@ -3718,7 +3718,7 @@ /turf/space, /area/space/nearstation) "jz" = ( -/obj/machinery/igniter, +/obj/machinery/igniter/on, /turf/simulated/floor/plating, /area/awaymission/academy/academyaft) "jA" = ( diff --git a/_maps/map_files/RandomZLevels/beach.dmm b/_maps/map_files/RandomZLevels/beach.dmm index 76a7da40fb1..4544e3830d8 100644 --- a/_maps/map_files/RandomZLevels/beach.dmm +++ b/_maps/map_files/RandomZLevels/beach.dmm @@ -6,7 +6,7 @@ /turf/unsimulated/beach/water/deep, /area/awaymission/undersea) "ac" = ( -/obj/machinery/poolcontroller/seacontroller, +/obj/machinery/poolcontroller/invisible/sea, /turf/unsimulated/beach/water/deep, /area/awaymission/undersea) "ad" = ( @@ -1494,6 +1494,10 @@ /obj/structure/closet/crate, /turf/unsimulated/beach/sand, /area/awaymission/beach) +"LZ" = ( +/obj/machinery/poolcontroller/invisible, +/turf/unsimulated/beach/water/deep, +/area/awaymission/beach) (1,1,1) = {" aa @@ -15371,7 +15375,7 @@ du du du du -du +LZ "} (55,1,1) = {" aa diff --git a/_maps/map_files/RandomZLevels/centcomAway.dmm b/_maps/map_files/RandomZLevels/centcomAway.dmm index 8ef264193c7..98288fe54da 100644 --- a/_maps/map_files/RandomZLevels/centcomAway.dmm +++ b/_maps/map_files/RandomZLevels/centcomAway.dmm @@ -5193,7 +5193,7 @@ }, /area/awaymission/centcomAway/general) "mE" = ( -/obj/machinery/igniter, +/obj/machinery/igniter/on, /turf/simulated/floor/plasteel{ icon_state = "floor" }, diff --git a/_maps/map_files/RandomZLevels/moonoutpost19.dmm b/_maps/map_files/RandomZLevels/moonoutpost19.dmm index 3c62113aa0b..3d8d1868c2c 100644 --- a/_maps/map_files/RandomZLevels/moonoutpost19.dmm +++ b/_maps/map_files/RandomZLevels/moonoutpost19.dmm @@ -3608,7 +3608,7 @@ name = "MO19 Research" }) "fj" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 2; pixel_y = 24 }, @@ -5104,7 +5104,7 @@ pixel_y = 0; tag = "" }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 4; pixel_x = 28 }, @@ -5267,7 +5267,7 @@ pixel_x = -4; pixel_y = 2 }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 2; pixel_y = 24 }, @@ -5413,7 +5413,7 @@ pixel_x = 0; pixel_y = 0 }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 4; pixel_x = 28 }, @@ -6594,7 +6594,7 @@ name = "MO19 Arrivals" }) "jp" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 4; pixel_x = 24 }, @@ -7560,7 +7560,7 @@ name = "MO19 Arrivals" }) "kK" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 1; pixel_y = -24 }, @@ -8028,7 +8028,7 @@ name = "MO19 Arrivals" }) "lt" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 4; pixel_x = 24 }, @@ -8649,7 +8649,7 @@ name = "MO19 Arrivals" }) "mw" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 4; pixel_x = 24 }, @@ -8898,7 +8898,7 @@ name = "MO19 Arrivals" }) "mS" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 4; pixel_x = 24 }, diff --git a/_maps/map_files/RandomZLevels/spacehotel.dmm b/_maps/map_files/RandomZLevels/spacehotel.dmm index b9232daea52..541156ddc57 100644 --- a/_maps/map_files/RandomZLevels/spacehotel.dmm +++ b/_maps/map_files/RandomZLevels/spacehotel.dmm @@ -859,9 +859,6 @@ }, /turf/unsimulated/beach/sand, /area/awaymission/beach) -"bD" = ( -/turf/simulated/floor/plating/lava/smooth, -/area/awaymission) "bE" = ( /obj/effect/decal{ name = "rock"; @@ -1619,7 +1616,7 @@ requires_power = 0 }) "cR" = ( -/obj/machinery/poolcontroller/seacontroller, +/obj/machinery/poolcontroller/invisible/sea, /turf/unsimulated/wall/metal, /area/awaymission/undersea{ requires_power = 0 @@ -2062,12 +2059,6 @@ }, /turf/unsimulated/beach/water/drop/dense, /area/awaymission/beach) -"dH" = ( -/turf/simulated/floor/plating/lava/smooth, -/area/awaymission{ - name = "Snowland"; - requires_power = 0 - }) "dI" = ( /obj/machinery/light, /turf/unsimulated/beach/water/deep/wood_floor{ @@ -4814,6 +4805,15 @@ icon_state = "cult" }, /area/awaymission/spacehotel) +"VG" = ( +/obj/effect/decal{ + name = "rock"; + icon = 'icons/turf/mining.dmi'; + icon_state = "rock_side_w" + }, +/obj/machinery/poolcontroller/invisible, +/turf/unsimulated/beach/water/deep/dense, +/area/awaymission/beach) (1,1,1) = {" aa @@ -4842,15 +4842,15 @@ aa dw dk dk -dH -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -4972,15 +4972,15 @@ aa dw dk dk -dH -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -5102,15 +5102,15 @@ aa dw dk dk -dH -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -5232,15 +5232,15 @@ aa dx dk dk -dH -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -5363,14 +5363,14 @@ aa dw dk dk -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -5493,14 +5493,14 @@ aa dw dk dk -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -5623,14 +5623,14 @@ aa dw dk dk -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -5753,14 +5753,14 @@ dy dk dk dF -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -5883,14 +5883,14 @@ dw dk dk dF -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -6013,14 +6013,14 @@ dk dk dF dF -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -6143,14 +6143,14 @@ dk dF dF dF -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -6273,14 +6273,14 @@ dk dF dF dF -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -6403,14 +6403,14 @@ dk dk dF dF -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -6533,14 +6533,14 @@ dw dk dk dF -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -6663,14 +6663,14 @@ dw dk dk dF -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -6793,14 +6793,14 @@ dw dk dk dF -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -6923,14 +6923,14 @@ dx dk dk dF -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -7053,14 +7053,14 @@ aa dw dk dk -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -7183,14 +7183,14 @@ aa dw dk dk -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -7313,14 +7313,14 @@ aa dw dk dk -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -7443,14 +7443,14 @@ aa dw dk dk -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -7573,14 +7573,14 @@ aa dw dk dk -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -7703,14 +7703,14 @@ aa dw dk dk -dH -dH -dH -dH -dH -dH -dH -dH +dF +dF +dF +dF +dF +dF +dF +dF ah ah ah @@ -10564,7 +10564,7 @@ dC dG dB dB -dB +VG ah ah ah @@ -13274,24 +13274,24 @@ ad ad ad ad -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad ad ad @@ -13404,24 +13404,24 @@ ad ad ad ad -bD -bD -bD +ad +ad +ad bL cq cq cE cO -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad ad ad @@ -13534,8 +13534,8 @@ ad ad ad ad -bD -bD +ad +ad bL bV bV @@ -13544,14 +13544,14 @@ bV cq cE cO -bD -bD -bD -bD -bD -bD -bD -bD +ad +ad +ad +ad +ad +ad +ad +ad ad ad ad @@ -13664,7 +13664,7 @@ ad ad ad ad -bD +ad bL bV bV @@ -13674,14 +13674,14 @@ bV bV cV cO -bD -bD -bD -bD -bD -bD -bD -bD +ad +ad +ad +ad +ad +ad +ad +ad ad ad ad @@ -13794,7 +13794,7 @@ ad ad ad ad -bD +ad bM bV cf @@ -13805,15 +13805,15 @@ cf bV cE cO -bD -bD -bD -bD -bD -bD -bD -bD -bD +ad +ad +ad +ad +ad +ad +ad +ad +ad ad ad ad @@ -13924,7 +13924,7 @@ ad ad ad ad -bD +ad bM bV bV @@ -13935,15 +13935,15 @@ bV bV cV cO -bD +ad bL dd dd cE cO -bD -bD -bD +ad +ad +ad dJ dL cO @@ -14054,7 +14054,7 @@ ad ad ad ad -bD +ad bN bV bV @@ -14068,7 +14068,7 @@ dd dd cP cO -bD +ad dE cO bL @@ -14184,8 +14184,8 @@ ad ad ad ad -bD -bD +ad +ad bM bV bV @@ -14195,15 +14195,15 @@ bV bV cV cO -bD -bD -bD -bD +ad +ad +ad +ad bN dd cP cO -bD +ad dJ dN cO @@ -14314,8 +14314,8 @@ ad ad ad ad -bD -bD +ad +ad bM cf bV @@ -14325,15 +14325,15 @@ cf bV cP cO -bD -bD -bD -bD -bD -bD -bD -bD -bD +ad +ad +ad +ad +ad +ad +ad +ad +ad ad ad ad @@ -14444,8 +14444,8 @@ ad ad ad ad -bD -bD +ad +ad bM bV bV @@ -14454,16 +14454,16 @@ bV bV cV cO -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad ad ad @@ -14574,8 +14574,8 @@ ad ad ad ad -bD -bD +ad +ad bN cg cg @@ -14584,16 +14584,16 @@ bV bV cP cO -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad ad ad @@ -14704,26 +14704,26 @@ ad ad ad ad -bD -bD -bD -bD -bD +ad +ad +ad +ad +ad bN cg cP cO -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad ad ad @@ -14834,26 +14834,26 @@ ad ad ad ad -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD -bD +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad ad ad ad diff --git a/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm b/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm index 8f9f3746ea8..c5741039f2b 100644 --- a/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm +++ b/_maps/map_files/RandomZLevels/undergroundoutpost45.dmm @@ -812,7 +812,7 @@ name = "UO45 Central Hall" }) "by" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 4; pixel_x = 24 }, @@ -1841,7 +1841,7 @@ name = "UO45 Central Hall" }) "do" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 2; pixel_x = 0; pixel_y = 24 @@ -2133,7 +2133,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 2; pixel_x = 0; pixel_y = 24 @@ -3590,7 +3590,7 @@ name = "UO45 Central Hall" }) "fW" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 1; pixel_x = 0; pixel_y = -24 @@ -4205,7 +4205,7 @@ name = "UO45 Research" }) "gZ" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 2; pixel_x = 0; pixel_y = 24 @@ -4314,7 +4314,7 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 8; pixel_x = -24 }, @@ -5061,7 +5061,7 @@ name = "UO45 Crew Quarters" }) "iq" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 8; pixel_x = -24 }, @@ -5827,7 +5827,7 @@ name = "UO45 Crew Quarters" }) "jw" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 8; pixel_x = -24 }, @@ -6511,7 +6511,7 @@ initialize_directions = 11; tag = "icon-manifold-r-f (EAST)" }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 4; pixel_x = 24 }, @@ -7046,7 +7046,7 @@ name = "UO45 Crew Quarters" }) "lg" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 1; pixel_x = 0; pixel_y = -24 @@ -7409,7 +7409,7 @@ pixel_x = 0; tag = "" }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 1; pixel_x = 0; pixel_y = -24 @@ -7594,7 +7594,7 @@ icon_state = "pipe-j1"; tag = "icon-pipe-j1 (EAST)" }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 1; pixel_x = 0; pixel_y = -24 @@ -7668,7 +7668,7 @@ name = "UO45 Research" }) "lN" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 1; pixel_x = 0; pixel_y = -24 @@ -8181,7 +8181,7 @@ }) "mz" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 8; pixel_x = -24 }, @@ -8241,7 +8241,7 @@ name = "UO45 Gateway" }) "mE" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 1; pixel_x = 0; pixel_y = -24 @@ -9938,7 +9938,7 @@ scrub_N2O = 0; scrub_Toxins = 0 }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 1; pixel_x = 0; pixel_y = -24 @@ -10347,7 +10347,7 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 8; pixel_x = -24 }, @@ -10384,7 +10384,7 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 4; pixel_x = 24 }, @@ -11386,7 +11386,7 @@ /obj/item/storage/toolbox/mechanical{ pixel_y = 5 }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 2; pixel_x = 0; pixel_y = 24 @@ -11735,7 +11735,7 @@ name = "UO45 Engineering" }) "rj" = ( -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 2; pixel_x = 0; pixel_y = 24 @@ -12914,7 +12914,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 1; pixel_x = 0; pixel_y = -24 @@ -15179,7 +15179,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 1; pixel_x = 0; pixel_y = -24 @@ -16281,7 +16281,7 @@ }) "xp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/firealarm{ +/obj/machinery/firealarm/no_alarm{ dir = 4; pixel_x = 24 }, diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 5ebe99b8b3f..2107bdd7500 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -17671,7 +17671,7 @@ /obj/item/reagent_containers/food/drinks/drinkingglass{ pixel_x = -5 }, -/obj/item/reagent_containers/food/drinks/waterbottle, +/obj/item/reagent_containers/glass/beaker/waterbottle, /turf/simulated/floor/plating, /area/maintenance/fpmaint2) "aDE" = ( @@ -18969,7 +18969,7 @@ /area/crew_quarters/courtroom) "aGr" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/waterbottle, +/obj/item/reagent_containers/glass/beaker/waterbottle, /turf/simulated/floor/plasteel{ icon_state = "red"; dir = 4 @@ -20138,7 +20138,7 @@ /area/crew_quarters/courtroom) "aIX" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/waterbottle{ +/obj/item/reagent_containers/glass/beaker/waterbottle{ pixel_x = 5 }, /obj/item/reagent_containers/food/drinks/drinkingglass{ @@ -22042,7 +22042,7 @@ /obj/item/reagent_containers/food/drinks/drinkingglass{ pixel_x = -5 }, -/obj/item/reagent_containers/food/drinks/waterbottle{ +/obj/item/reagent_containers/glass/beaker/waterbottle{ pixel_x = 5 }, /turf/simulated/floor/carpet, @@ -22758,7 +22758,7 @@ /area/maintenance/fpmaint) "aOw" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/waterbottle{ +/obj/item/reagent_containers/glass/beaker/waterbottle{ pixel_x = 5 }, /obj/item/reagent_containers/food/drinks/drinkingglass{ @@ -74238,9 +74238,7 @@ /area/toxins/test_area) "cCw" = ( /obj/machinery/igniter{ - icon_state = "igniter0"; - id = "Incinerator"; - on = 0 + id = "Incinerator" }, /turf/simulated/floor/engine/insulated, /area/maintenance/incinerator) @@ -93941,9 +93939,7 @@ tag = "" }, /obj/machinery/igniter{ - icon_state = "igniter0"; - id = "gasturbine"; - on = 0 + id = "gasturbine" }, /turf/simulated/floor/engine/insulated, /area/maintenance/turbine) diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm index dda71eb7e09..7a43bfc098b 100644 --- a/_maps/map_files/cyberiad/z2.dmm +++ b/_maps/map_files/cyberiad/z2.dmm @@ -3499,7 +3499,7 @@ /turf/unsimulated/wall, /area/tdome/arena) "jb" = ( -/obj/machinery/igniter, +/obj/machinery/igniter/on, /turf/simulated/floor/plasteel, /area/tdome/arena) "jc" = ( @@ -4426,7 +4426,7 @@ /turf/unsimulated/wall, /area/tdome/arena_source) "lD" = ( -/obj/machinery/igniter, +/obj/machinery/igniter/on, /turf/simulated/floor/plasteel, /area/tdome/arena_source) "lE" = ( @@ -12566,6 +12566,10 @@ /obj/effect/landmark/ai_multicam_room, /turf/unsimulated/ai_visible, /area/ai_multicam_room) +"Qt" = ( +/obj/machinery/poolcontroller/invisible, +/turf/unsimulated/beach/water, +/area/ninja/holding) "QE" = ( /obj/structure/chair/sofa/right, /turf/simulated/shuttle/floor{ @@ -54450,7 +54454,7 @@ fI fH fH he -hv +Qt fg aN aN diff --git a/_maps/map_files/generic/Lavaland.dmm b/_maps/map_files/generic/Lavaland.dmm index 6f8f4195dfb..3bfdb1d12b2 100644 --- a/_maps/map_files/generic/Lavaland.dmm +++ b/_maps/map_files/generic/Lavaland.dmm @@ -112,8 +112,8 @@ "au" = ( /obj/structure/rack, /obj/item/storage/bag/ore, -/obj/item/pickaxe, -/obj/item/flashlight, +/obj/item/pickaxe/safety, +/obj/item/flashlight/lantern, /obj/item/clothing/glasses/meson, /obj/item/mining_scanner, /turf/simulated/floor/plasteel, @@ -121,8 +121,8 @@ "av" = ( /obj/structure/rack, /obj/item/storage/bag/ore, -/obj/item/flashlight, -/obj/item/pickaxe, +/obj/item/flashlight/lantern, +/obj/item/pickaxe/safety, /obj/item/clothing/glasses/meson, /obj/item/mining_scanner, /turf/simulated/floor/plasteel, @@ -628,6 +628,7 @@ /obj/effect/turf_decal/tile/brown{ dir = 4 }, +/obj/effect/baseturf_helper/lava_land/surface, /turf/simulated/floor/plasteel, /area/mine/eva) "bH" = ( @@ -898,6 +899,7 @@ opacity = 0; req_access_txt = "54" }, +/obj/structure/fans/tiny, /turf/simulated/floor/plasteel, /area/mine/eva) "ck" = ( @@ -1376,14 +1378,14 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 6 }, -/obj/machinery/meter, /turf/simulated/floor/plating, /area/mine/living_quarters) "dq" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ dir = 1 }, /turf/simulated/floor/plating, @@ -1581,7 +1583,7 @@ /turf/simulated/floor/plating, /area/mine/living_quarters) "dI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 5 }, /turf/simulated/floor/plating, @@ -1657,10 +1659,7 @@ name = "Mining Station Maintenance"; req_access_txt = "48" }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/visible/universal, /turf/simulated/floor/plating, /area/mine/living_quarters) "dT" = ( @@ -1709,6 +1708,7 @@ opacity = 0; req_access_txt = "54" }, +/obj/structure/fans/tiny, /turf/simulated/floor/plasteel, /area/mine/eva) "dZ" = ( @@ -2923,6 +2923,7 @@ name = "Labor Camp Airlock"; req_access_txt = "2" }, +/obj/structure/fans/tiny, /turf/simulated/floor/plasteel, /area/mine/laborcamp) "gv" = ( @@ -2933,6 +2934,7 @@ opacity = 0; req_one_access_txt = "48" }, +/obj/structure/fans/tiny, /turf/simulated/floor/plasteel, /area/mine/production) "gw" = ( @@ -2943,6 +2945,7 @@ opacity = 0; req_access_txt = "48" }, +/obj/structure/fans/tiny, /turf/simulated/floor/plasteel, /area/mine/production) "gx" = ( @@ -2952,6 +2955,7 @@ locked = 1; name = "Labor Camp External Access" }, +/obj/structure/fans/tiny, /turf/simulated/floor/plasteel, /area/mine/laborcamp) "gy" = ( @@ -3012,6 +3016,7 @@ locked = 1; name = "Labor Camp External Access" }, +/obj/structure/fans/tiny, /turf/simulated/floor/plasteel, /area/mine/laborcamp) "gF" = ( diff --git a/_maps/map_files/generic/z5.dmm b/_maps/map_files/generic/z5.dmm index 465bf0bdaa0..99e23f4c9d4 100644 --- a/_maps/map_files/generic/z5.dmm +++ b/_maps/map_files/generic/z5.dmm @@ -1612,21 +1612,11 @@ /obj/item/clothing/glasses/meson, /obj/item/flashlight, /obj/item/storage/bag/ore, -/obj/item/shovel{ - attack_verb = list("ineffectively hit"); - desc = "A large tool for digging and moving dirt. Was modified with extra safety, making it ineffective as a weapon."; - force = 1; - name = "safety shovel"; - pixel_x = -5; - throwforce = 1 +/obj/item/shovel/safety{ + pixel_x = -5 }, -/obj/item/pickaxe{ - attack_verb = list("ineffectively hit"); - desc = "A pickaxe designed to be only effective at digging rock and ore, very ineffective as a weapon."; - force = 1; - name = "safety pickaxe"; - pixel_x = 5; - throwforce = 1 +/obj/item/pickaxe/safety{ + pixel_x = 5 }, /obj/item/radio/intercom/locked/prison{ pixel_y = 25 @@ -1642,21 +1632,11 @@ /obj/item/clothing/glasses/meson, /obj/item/flashlight, /obj/item/storage/bag/ore, -/obj/item/shovel{ - attack_verb = list("ineffectively hit"); - desc = "A large tool for digging and moving dirt. Was modified with extra safety, making it ineffective as a weapon."; - force = 1; - name = "safety shovel"; - pixel_x = -5; - throwforce = 1 +/obj/item/shovel/safety{ + pixel_x = -5 }, -/obj/item/pickaxe{ - attack_verb = list("ineffectively hit"); - desc = "A pickaxe designed to be only effective at digging rock and ore, very ineffective as a weapon."; - force = 1; - name = "safety pickaxe"; - pixel_x = 5; - throwforce = 1 +/obj/item/pickaxe/safety{ + pixel_x = 5 }, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" @@ -1669,21 +1649,11 @@ /obj/item/clothing/glasses/meson, /obj/item/flashlight, /obj/item/storage/bag/ore, -/obj/item/shovel{ - attack_verb = list("ineffectively hit"); - desc = "A large tool for digging and moving dirt. Was modified with extra safety, making it ineffective as a weapon."; - force = 1; - name = "safety shovel"; - pixel_x = -5; - throwforce = 1 +/obj/item/shovel/safety{ + pixel_x = -5 }, -/obj/item/pickaxe{ - attack_verb = list("ineffectively hit"); - desc = "A pickaxe designed to be only effective at digging rock and ore, very ineffective as a weapon."; - force = 1; - name = "safety pickaxe"; - pixel_x = 5; - throwforce = 1 +/obj/item/pickaxe/safety{ + pixel_x = 5 }, /obj/machinery/status_display{ density = 0; @@ -1702,21 +1672,11 @@ /obj/item/clothing/glasses/meson, /obj/item/flashlight, /obj/item/storage/bag/ore, -/obj/item/shovel{ - attack_verb = list("ineffectively hit"); - desc = "A large tool for digging and moving dirt. Was modified with extra safety, making it ineffective as a weapon."; - force = 1; - name = "safety shovel"; - pixel_x = -5; - throwforce = 1 +/obj/item/shovel/safety{ + pixel_x = -5 }, -/obj/item/pickaxe{ - attack_verb = list("ineffectively hit"); - desc = "A pickaxe designed to be only effective at digging rock and ore, very ineffective as a weapon."; - force = 1; - name = "safety pickaxe"; - pixel_x = 5; - throwforce = 1 +/obj/item/pickaxe/safety{ + pixel_x = 5 }, /obj/machinery/camera{ c_tag = "Labor Camp Storage"; diff --git a/_maps/map_files/templates/shelter_1.dmm b/_maps/map_files/templates/shelter_1.dmm index 0cebbd66b5f..0123bf7329c 100644 --- a/_maps/map_files/templates/shelter_1.dmm +++ b/_maps/map_files/templates/shelter_1.dmm @@ -15,7 +15,7 @@ /turf/simulated/floor/pod, /area/survivalpod) "d" = ( -/obj/machinery/smartfridge/survival_pod/loaded, +/obj/machinery/smartfridge/survival_pod, /turf/simulated/floor/pod, /area/survivalpod) "e" = ( @@ -30,6 +30,9 @@ /area/survivalpod) "g" = ( /obj/machinery/sleeper/survival_pod, +/obj/machinery/vending/wallmed1/survival_pod{ + pixel_x = -24 + }, /turf/simulated/floor/pod, /area/survivalpod) "h" = ( diff --git a/_maps/map_files/templates/shelter_2.dmm b/_maps/map_files/templates/shelter_2.dmm index 4a6b445ab4c..1c2e99a0c4d 100644 --- a/_maps/map_files/templates/shelter_2.dmm +++ b/_maps/map_files/templates/shelter_2.dmm @@ -9,7 +9,7 @@ /turf/simulated/wall/mineral/titanium/survival, /area/survivalpod) "c" = ( -/obj/machinery/smartfridge/survival_pod/loaded, +/obj/machinery/smartfridge/survival_pod, /turf/simulated/floor/pod, /area/survivalpod) "d" = ( @@ -39,6 +39,9 @@ /area/survivalpod) "i" = ( /obj/machinery/sleeper/survival_pod, +/obj/machinery/vending/wallmed1/survival_pod{ + pixel_x = -24 + }, /turf/simulated/floor/pod, /area/survivalpod) "j" = ( @@ -161,7 +164,7 @@ icon_state = "cutout_lusty"; name = "lusty xenomorph maid" }, - /turf/simulated/floor/carpet/black, +/turf/simulated/floor/carpet/black, /area/survivalpod) "A" = ( /obj/structure/table/wood/fancy/black, diff --git a/_maps/map_files/templates/spacehotel/s_01.dmm b/_maps/map_files/templates/spacehotel/s_01.dmm index f7c6ba629c6..f97f6613f07 100644 --- a/_maps/map_files/templates/spacehotel/s_01.dmm +++ b/_maps/map_files/templates/spacehotel/s_01.dmm @@ -141,6 +141,10 @@ icon_state = "freezerfloor" }, /area/template_noop) +"K" = ( +/obj/machinery/poolcontroller/invisible, +/turf/unsimulated/beach/water, +/area/template_noop) (1,1,1) = {" a @@ -153,7 +157,7 @@ a "} (2,1,1) = {" a -b +K b l o diff --git a/_maps/map_files/templates/spacehotel/s_02.dmm b/_maps/map_files/templates/spacehotel/s_02.dmm index 5aa78f57470..c3ee3c4a727 100644 --- a/_maps/map_files/templates/spacehotel/s_02.dmm +++ b/_maps/map_files/templates/spacehotel/s_02.dmm @@ -142,6 +142,10 @@ icon_state = "freezerfloor" }, /area/template_noop) +"O" = ( +/obj/machinery/poolcontroller/invisible, +/turf/unsimulated/beach/water, +/area/template_noop) (1,1,1) = {" a @@ -154,7 +158,7 @@ a "} (2,1,1) = {" a -b +O b l o diff --git a/_maps/map_files/templates/spacehotel/s_04.dmm b/_maps/map_files/templates/spacehotel/s_04.dmm index 564246a2854..81c1306da96 100644 --- a/_maps/map_files/templates/spacehotel/s_04.dmm +++ b/_maps/map_files/templates/spacehotel/s_04.dmm @@ -190,6 +190,10 @@ icon_state = "floor4" }, /area/template_noop) +"X" = ( +/obj/machinery/poolcontroller/invisible, +/turf/unsimulated/beach/water, +/area/template_noop) (1,1,1) = {" a @@ -202,7 +206,7 @@ a "} (2,1,1) = {" a -b +X b l o diff --git a/_maps/map_files/templates/spacehotel/s_05.dmm b/_maps/map_files/templates/spacehotel/s_05.dmm index 62c82037700..1ff9546e265 100644 --- a/_maps/map_files/templates/spacehotel/s_05.dmm +++ b/_maps/map_files/templates/spacehotel/s_05.dmm @@ -129,6 +129,10 @@ icon_state = "freezerfloor" }, /area/template_noop) +"Z" = ( +/obj/machinery/poolcontroller/invisible, +/turf/unsimulated/beach/water, +/area/template_noop) (1,1,1) = {" a @@ -141,7 +145,7 @@ a "} (2,1,1) = {" a -b +Z b k n diff --git a/_maps/map_files/templates/spacehotel/s_06.dmm b/_maps/map_files/templates/spacehotel/s_06.dmm index fa839217019..03a1e7e9e99 100644 --- a/_maps/map_files/templates/spacehotel/s_06.dmm +++ b/_maps/map_files/templates/spacehotel/s_06.dmm @@ -131,6 +131,10 @@ icon_state = "freezerfloor" }, /area/template_noop) +"X" = ( +/obj/machinery/poolcontroller/invisible, +/turf/unsimulated/beach/water, +/area/template_noop) (1,1,1) = {" a @@ -143,7 +147,7 @@ a "} (2,1,1) = {" a -b +X b m p diff --git a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm index 62b4f55470e..b9902dbb066 100644 --- a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm @@ -56,6 +56,9 @@ /obj/machinery/atmospherics/binary/dp_vent_pump/high_volume name = "large dual port air vent" +/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume/on + on = TRUE + /obj/machinery/atmospherics/binary/dp_vent_pump/high_volume/New() ..() air1.volume = 1000 diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 4ff62ea4c89..c4478f62837 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -17,6 +17,8 @@ #define ismecha(A) (istype(A, /obj/mecha)) +#define iseffect(A) (istype(A, /obj/effect)) + #define is_cleanable(A) (istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/rune)) //if something is cleanable #define is_pen(W) (istype(W, /obj/item/pen)) diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm index 65372fed1c8..34ad4d69e54 100644 --- a/code/__DEFINES/role_preferences.dm +++ b/code/__DEFINES/role_preferences.dm @@ -43,6 +43,7 @@ #define ROLE_DRONE "drone" #define ROLE_DEATHSQUAD "deathsquad" #define ROLE_EVENTMISC "eventmisc" +#define ROLE_GHOST "ghost role" //Missing assignment means it's not a gamemode specific role, IT'S NOT A BUG OR ERROR. //The gamemode specific ones are just so the gamemodes can query whether a player is old enough diff --git a/code/__DEFINES/rolebans.dm b/code/__DEFINES/rolebans.dm index b2eb79e26be..d6e54abf14a 100644 --- a/code/__DEFINES/rolebans.dm +++ b/code/__DEFINES/rolebans.dm @@ -25,6 +25,7 @@ var/global/list/other_roles = list( ROLE_SENTIENT, ROLE_NYMPH, ROLE_ERT, + ROLE_GHOST, "AntagHUD", "Records" ) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 7b9d207e172..f7c5b670dc8 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1718,8 +1718,8 @@ var/mob/dview/dview_mob = new /proc/turf_clear(turf/T) for(var/atom/A in T) if(A.simulated) - return 0 - return 1 + return FALSE + return TRUE /proc/screen_loc2turf(scr_loc, turf/origin) var/tX = splittext(scr_loc, ",") diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index b8e6ee4bc14..b45ef833b9f 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -30,7 +30,7 @@ SUBSYSTEM_DEF(mapping) var/mining_type = MINETYPE if (mining_type == "lavaland") // Spawn Lavaland ruins and rivers. - seedRuins(list(level_name_to_num(MINING)), config.lavaland_budget, /area/lavaland/surface/outdoors, lava_ruins_templates) + seedRuins(list(level_name_to_num(MINING)), config.lavaland_budget, /area/lavaland/surface/outdoors/unexplored, lava_ruins_templates) spawn_rivers() else // Populate mining Z-level hidden rooms diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index fafc244af14..bbe2db385a0 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -523,3 +523,5 @@ SUBSYSTEM_DEF(ticker) /datum/controller/subsystem/ticker/proc/HasRoundStarted() return current_state >= GAME_STATE_PLAYING +/datum/controller/subsystem/ticker/proc/IsRoundInProgress() + return current_state == GAME_STATE_PLAYING \ No newline at end of file diff --git a/code/datums/cache/air_alarm.dm b/code/datums/cache/air_alarm.dm index a4d012df464..662b0958d5c 100644 --- a/code/datums/cache/air_alarm.dm +++ b/code/datums/cache/air_alarm.dm @@ -13,15 +13,16 @@ var/global/datum/repository/air_alarm/air_alarm_repository = new() if(SSticker && SSticker.current_state < GAME_STATE_PLAYING && istype(passed_alarm)) // Generating the list for the first time as the game hasn't started - no need to run through the machines list everything every time alarms = cache_entry.data // Don't deleate the list - if(is_station_contact(passed_alarm.z)) // Still need sanity checks + if(is_station_contact(passed_alarm.z) && passed_alarm.remote_control) // Still need sanity checks alarms[++alarms.len] = passed_alarm.get_nano_data_console() else for(var/obj/machinery/alarm/alarm in (monitored_alarms ? monitored_alarms : GLOB.air_alarms)) // Generating the whole list again is a bad habit but I can't be bothered to fix it right now if(!monitored_alarms && !is_station_contact(alarm.z)) continue + if(!alarm.remote_control) + continue alarms[++alarms.len] = alarm.get_nano_data_console() - cache_entry.timestamp = world.time //+ 10 SECONDS cache_entry.data = alarms return alarms diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 05f430136f0..b7d687d090b 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -624,7 +624,7 @@ var/record_id_num = 1001 clothes_s = new /icon('icons/mob/uniform.dmi', "syndicate_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY) clothes_s.Blend(new /icon('icons/mob/hands.dmi', "swat_gl"), ICON_UNDERLAY) - else if(H.mind.assigned_role in get_all_centcom_jobs()) + else if(H.mind && H.mind.assigned_role in get_all_centcom_jobs()) clothes_s = new /icon('icons/mob/uniform.dmi', "officer_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY) else diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index 82fe75b3cf7..91af56437cf 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -1964,7 +1964,7 @@ var/list/ghostteleportlocs = list() /area/traitor name = "\improper Syndicate Base" icon_state = "syndie_hall" - report_alerts = 0 + report_alerts = FALSE /area/traitor/rnd name = "\improper Syndicate Research and Development" @@ -2134,7 +2134,7 @@ var/list/ghostteleportlocs = list() /area/awaymission name = "\improper Strange Location" icon_state = "away" - report_alerts = 0 + report_alerts = FALSE /area/awaymission/example name = "\improper Strange Station" @@ -2160,7 +2160,7 @@ var/list/ghostteleportlocs = list() /area/awaycontent name = "space" - report_alerts = 0 + report_alerts = FALSE /area/awaycontent/a1 icon_state = "awaycontent1" diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 8e9505095f2..638fe29ab6d 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -19,9 +19,9 @@ var/eject = null - var/debug = 0 + var/debug = FALSE var/requires_power = TRUE - var/always_unpowered = 0 //this gets overriden to 1 for space in area/New() + var/always_unpowered = FALSE //this gets overriden to 1 for space in area/New() var/power_equip = TRUE var/power_light = TRUE @@ -33,7 +33,7 @@ var/static_equip var/static_light = FALSE var/static_environ - + var/has_gravity = TRUE var/list/apc = list() var/no_air = null @@ -128,10 +128,11 @@ /area/proc/atmosalert(danger_level, var/alarm_source, var/force = FALSE) - if(danger_level == ATMOS_ALARM_NONE) - SSalarms.atmosphere_alarm.clearAlarm(src, alarm_source) - else - SSalarms.atmosphere_alarm.triggerAlarm(src, alarm_source, severity = danger_level) + if(report_alerts) + if(danger_level == ATMOS_ALARM_NONE) + SSalarms.atmosphere_alarm.clearAlarm(src, alarm_source) + else + SSalarms.atmosphere_alarm.triggerAlarm(src, alarm_source, severity = danger_level) //Check all the alarms before lowering atmosalm. Raising is perfectly fine. If force = 1 we don't care. for(var/obj/machinery/alarm/AA in src) diff --git a/code/game/area/areas/ruins/lavaland.dm b/code/game/area/areas/ruins/lavaland.dm index 7c85299f4d2..6b1930e1a41 100644 --- a/code/game/area/areas/ruins/lavaland.dm +++ b/code/game/area/areas/ruins/lavaland.dm @@ -36,6 +36,7 @@ name = "Secret Base" icon_state = "dk_yellow" ambientsounds = list('sound/ambience/ambidanger.ogg', 'sound/ambience/ambidanger2.ogg') + report_alerts = FALSE /area/ruin/unpowered/syndicate_lava_base/engineering name = "Syndicate Lavaland Engineering" diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 32e6487ca57..c52df8c7912 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -12,7 +12,7 @@ var/last_bumped = 0 var/pass_flags = 0 var/germ_level = GERM_LEVEL_AMBIENT // The higher the germ level, the more germ on the atom. - var/simulated = 1 //filter for actions - used by lighting overlays + var/simulated = TRUE //filter for actions - used by lighting overlays var/atom_say_verb = "says" var/dont_save = 0 // For atoms that are temporary by necessity - like lighting overlays diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index ed89a75cd5d..bcaf21d5cde 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -380,26 +380,23 @@ //Overlays /atom/movable/overlay var/atom/master = null - anchored = 1 + anchored = TRUE + simulated = FALSE /atom/movable/overlay/New() verbs.Cut() return /atom/movable/overlay/attackby(a, b, c) - if(src.master) - return src.master.attackby(a, b, c) - return - + if(master) + return master.attackby(a, b, c) /atom/movable/overlay/attack_hand(a, b, c) - if(src.master) - return src.master.attack_hand(a, b, c) - return + if(master) + return master.attack_hand(a, b, c) - -/atom/movable/proc/water_act(var/volume, var/temperature, var/source) //amount of water acting : temperature of water in kelvin : object that called it (for shennagins) - return 1 +/atom/movable/proc/water_act(volume, temperature, source, method = TOUCH) //amount of water acting : temperature of water in kelvin : object that called it (for shennagins) + return TRUE /atom/movable/proc/handle_buckled_mob_movement(newloc,direct) if(!buckled_mob.Move(newloc, direct)) diff --git a/code/game/gamemodes/autotraitor/autotraitor.dm b/code/game/gamemodes/autotraitor/autotraitor.dm index 63f9d5fbaff..2137888d0b8 100644 --- a/code/game/gamemodes/autotraitor/autotraitor.dm +++ b/code/game/gamemodes/autotraitor/autotraitor.dm @@ -96,7 +96,7 @@ for(var/obj/item/implant/mindshield/I in H.contents) if(I && I.implanted) possible_traitors -= player - if(!H.job) //Golems, special events stuff, etc. + if(!H.job || H.mind.offstation_role) //Golems, special events stuff, etc. possible_traitors -= player //message_admins("Live Players: [playercount]") //message_admins("Live Traitors: [traitorcount]") diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index 8689c6fb1d9..e73474bad7d 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -175,136 +175,188 @@ /atom/proc/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) S.DisIntegrate(src) + return TRUE /obj/item/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) S.Integrate(src) + return FALSE + +/atom/movable/swarmer_act() + if(!simulated) + return FALSE + return ..() + +/obj/effect/swarmer_act() + return FALSE + +/obj/effect/decal/cleanable/robot_debris/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) + S.DisIntegrate(src) + qdel(src) + return TRUE /obj/item/gun/swarmer_act()//Stops you from eating the entire armory - return + return FALSE /turf/simulated/floor/swarmer_act()//ex_act() on turf calls it on its contents, this is to prevent attacking mobs by DisIntegrate()'ing the floor - return + return FALSE /obj/machinery/atmospherics/swarmer_act() - return + return FALSE /obj/structure/disposalpipe/swarmer_act() - return + return FALSE /obj/machinery/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) S.DismantleMachine(src) + return TRUE /obj/machinery/light/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) S.DisIntegrate(src) + return TRUE /obj/machinery/door/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) S.DisIntegrate(src) + return TRUE /obj/machinery/camera/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) S.DisIntegrate(src) toggle_cam(S, 0) + return TRUE /obj/structure/particle_accelerator/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) to_chat(S, "Disrupting the power grid would bring no benefit to us. Aborting.") + return FALSE /obj/machinery/particle_accelerator/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) // Since the console is still parented to this to_chat(S, "Disrupting the power grid would bring no benefit to us. Aborting.") + return FALSE /obj/machinery/field/generator/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) if(!active) S.DisIntegrate(src) - return + return TRUE to_chat(S, "An inhospitable area may be created as a result of destroying this object. Aborting.") + return FALSE /obj/machinery/gravity_generator/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) S.DisIntegrate(src) + return TRUE /obj/machinery/vending/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)//It's more visually interesting than dismantling the machine S.DisIntegrate(src) + return TRUE /obj/machinery/turretid/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) S.DisIntegrate(src) + return TRUE /obj/machinery/chem_dispenser/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) to_chat(S, "The volatile chemicals in this machine would destroy us. Aborting.") + return FALSE /obj/machinery/nuclearbomb/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) to_chat(S, "This device's destruction would result in the extermination of everything in the area. Aborting.") + return FALSE /obj/effect/rune/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) to_chat(S, "Searching... sensor malfunction! Target lost. Aborting.") + return FALSE /obj/structure/reagent_dispensers/fueltank/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) to_chat(S, "Destroying this object would cause a chain reaction. Aborting.") + return FALSE /obj/structure/cable/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) to_chat(S, "Disrupting the power grid would bring no benefit to us. Aborting.") + return FALSE /obj/machinery/portable_atmospherics/canister/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) to_chat(S, "An inhospitable area may be created as a result of destroying this object. Aborting.") + return FALSE /obj/machinery/telecomms/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) to_chat(S, "This communications relay should be preserved, it will be a useful resource to our masters in the future. Aborting.") + return FALSE /obj/machinery/message_server/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) to_chat(S, "This communications relay should be preserved, it will be a useful resource to our masters in the future. Aborting.") + return FALSE /obj/machinery/blackbox_recorder/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) to_chat(S, "This machine has recorded large amounts of data on this structure and its inhabitants, it will be a useful resource to our masters in the future. Aborting. ") + return FALSE /obj/machinery/power/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) to_chat(S, "Disrupting the power grid would bring no benefit to us. Aborting.") + return FALSE /obj/machinery/gateway/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) to_chat(S, "This bluespace source will be important to us later. Aborting.") + return FALSE /obj/machinery/cryopod/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) to_chat(S, "This cryogenic sleeper should be preserved, it will be a useful resource to our masters in the future. Aborting.") + return FALSE /obj/structure/cryofeed/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) to_chat(S, "This cryogenic feed should be preserved, it will be a useful resource to our masters in the future. Aborting.") + return FALSE /obj/machinery/computer/cryopod/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) to_chat(S, "This cryopod control computer should be preserved, it contains useful items and information about the inhabitants. Aborting.") + return FALSE /turf/simulated/wall/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) for(var/turf/T in range(1, src)) if(istype(T, /turf/space) || istype(T.loc, /area/space) || istype(T, /turf/simulated/floor/plating/airless)) to_chat(S, "Destroying this object has the potential to cause a hull breach. Aborting.") - return - ..() + return FALSE + return ..() /obj/structure/window/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) for(var/turf/T in range(1, src)) if(istype(T, /turf/space) || istype(T.loc, /area/space)) to_chat(S, "Destroying this object has the potential to cause a hull breach. Aborting.") - return - ..() + return FALSE + return ..() /obj/item/stack/cable_coil/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)//Wiring would be too effective as a resource to_chat(S, "This object does not contain enough materials to work with.") + return FALSE /obj/item/circuitboard/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) to_chat(S, "This object does not contain enough materials to work with.") + return FALSE /obj/machinery/porta_turret/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) to_chat(S, "Attempting to dismantle this machine would result in an immediate counterattack. Aborting.") + return FALSE /obj/spacepod/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) to_chat(S, "Destroying this vehicle would destroy us. Aborting.") + return FALSE /obj/machinery/clonepod/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) if(occupant) to_chat(S, "Destroying this machine while it is occupied would result in biological and sentient resources to be harmed. Aborting.") - return - ..() + return FALSE + return ..() /mob/living/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) S.DisperseTarget(src) + return TRUE /mob/living/carbon/slime/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) to_chat(S, "This biological resource is somehow resisting our bluespace transceiver. Aborting.") + return FALSE +/obj/structure/lattice/catwalk/swarmer_catwalk/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) + to_chat(S, "We have created these for our own benefit. Aborting.") + return FALSE + +/obj/structure/shuttle/engine/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) + to_chat(S, "This shuttle may be important to us later. Aborting.") + return FALSE ////END CTRL CLICK FOR SWARMERS//// diff --git a/code/game/gamemodes/miniantags/morph/morph.dm b/code/game/gamemodes/miniantags/morph/morph.dm index bcaecfb0eea..81e052a85d8 100644 --- a/code/game/gamemodes/miniantags/morph/morph.dm +++ b/code/game/gamemodes/miniantags/morph/morph.dm @@ -45,6 +45,16 @@ You can restore yourself to your original form while morphed by shift-clicking yourself.
\ Finally, you can attack any item or dead creature to consume it - creatures will restore 1/3 of your max health." +/mob/living/simple_animal/hostile/morph/wizard + name = "magical morph" + real_name = "magical morph" + desc = "A revolting, pulsating pile of flesh. This one looks somewhat.. magical." + +/mob/living/simple_animal/hostile/morph/wizard/New() + . = ..() + AddSpell(new /obj/effect/proc_holder/spell/targeted/smoke) + AddSpell(new /obj/effect/proc_holder/spell/targeted/forcewall) + /mob/living/simple_animal/hostile/morph/examine(mob/user) if(morphed) if(form) diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index f732e251a0a..09d5fecb8a2 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -290,6 +290,10 @@ emote_hear = list("gaffaws", "laughs") response_help = "hugs" attacktext = "wildly tickles" + maxHealth = 150 + health = 150 + melee_damage_lower = 20 + melee_damage_upper = 20 attack_sound = 'sound/items/bikehorn.ogg' feast_sound = 'sound/spookoween/scary_horn2.ogg' diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 5b06e09f5ba..ef68117e1c4 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -532,7 +532,7 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu var/list/priority_targets = list() for(var/datum/mind/possible_target in SSticker.minds) - if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != DEAD) && (possible_target.assigned_role != possible_target.special_role)) + if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != DEAD) && (possible_target.assigned_role != possible_target.special_role) && !possible_target.offstation_role) possible_targets += possible_target for(var/role in roles) if(possible_target.assigned_role == role) diff --git a/code/game/gamemodes/shadowling/shadowling_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm index 2515de135fa..276f8d2eb1f 100644 --- a/code/game/gamemodes/shadowling/shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm @@ -24,8 +24,35 @@ panel = "Shadowling Abilities" charge_max = 300 clothes_req = 0 + range = 10 //has no effect beyond this range, so setting this makes invalid/useless targets not show up in popup action_icon_state = "glare" - humans_only = 1 + humans_only = 1 //useless since we override chose_targets, but might be used for other code later??? Might remove, idk + +/obj/effect/proc_holder/spell/targeted/glare/choose_targets(mob/user) + var/list/possible_targets = list() + for(var/mob/living/carbon/human/target in view_or_range(range, user, "view")) + if(target.stat) + continue + if(is_shadow_or_thrall(target)) + continue + possible_targets += target + var/mob/living/carbon/human/M + var/list/targets = list() + if(possible_targets.len == 1)//no choice involved + targets = possible_targets + else + M = input("Choose the target for the spell.", "Targeting") as mob in possible_targets + if(M in view_or_range(range, user, "view")) + targets += M + + + if(!targets.len) //doesn't waste the spell + revert_cast(user) + return + + perform(targets, user = user) + return + /obj/effect/proc_holder/spell/targeted/glare/cast(list/targets, mob/user = usr) for(var/mob/living/carbon/human/target in targets) diff --git a/code/game/gamemodes/wizard/raginmages.dm b/code/game/gamemodes/wizard/raginmages.dm index bb62b7bebea..57a4f4e17de 100644 --- a/code/game/gamemodes/wizard/raginmages.dm +++ b/code/game/gamemodes/wizard/raginmages.dm @@ -3,36 +3,35 @@ config_tag = "raginmages" required_players = 20 use_huds = 1 + but_wait_theres_more = 1 var/max_mages = 0 - var/making_mage = 0 + var/making_mage = FALSE var/mages_made = 1 var/time_checked = 0 - var/players_per_mage = 6 // If the admin wants to tweak things or something - but_wait_theres_more = 1 + var/players_per_mage = 10 // If the admin wants to tweak things or something var/delay_per_mage = 4200 // Every 7 minutes by default var/time_till_chaos = 18000 // Half-hour in /datum/game_mode/wizard/raginmages/announce() to_chat(world, "The current game mode is - Ragin' Mages!") - to_chat(world, "The Space Wizard Federation is pissed, help defeat all the space wizards!") - + to_chat(world, "The Space Wizard Federation is pissed, crew must help defeat all the Space Wizards invading the station!") /datum/game_mode/wizard/raginmages/greet_wizard(var/datum/mind/wizard, var/you_are=1) if(you_are) to_chat(wizard.current, "You are the Space Wizard!") - to_chat(wizard.current, "The Space Wizards Federation has given you the following tasks:") + to_chat(wizard.current, "The Space Wizard Federation has given you the following tasks:") var/obj_count = 1 + to_chat(wizard.current, "Supreme Objective: Make sure the station pays for its actions against our diplomats. We might send more Wizards to the station if the situation is not developing in our favour.") for(var/datum/objective/objective in wizard.objectives) to_chat(wizard.current, "Objective #[obj_count]: [objective.explanation_text]") obj_count++ - to_chat(wizard.current, "Objective Alpha: Make sure the station pays for its actions against our diplomats") return /datum/game_mode/wizard/raginmages/check_finished() var/wizards_alive = 0 - // Accidental pun! - var/wizard_cap = (max_mages || (num_players_started() / players_per_mage)) + var/wizard_cap = CEILING((num_players_started() / players_per_mage), 1) + max_mages = wizard_cap for(var/datum/mind/wizard in wizards) if(isnull(wizard.current)) continue @@ -115,71 +114,44 @@ qdel(B) /datum/game_mode/wizard/raginmages/proc/make_more_mages() - if(making_mage || SSshuttle.emergency.mode >= SHUTTLE_ESCAPE) - return 0 - making_mage = 1 - var/list/candidates = list() + return FALSE + making_mage = TRUE + + var/list/mob/dead/observer/candidates = pollCandidates("Do you want to play as a raging Space Wizard?", ROLE_WIZARD, TRUE, poll_time = 20 SECONDS) var/mob/dead/observer/harry = null - spawn(rand(200, 600)) - message_admins("SWF is still pissed, sending another wizard - [max_mages - mages_made] left.") - //Protip: This returns clients, not ghosts - candidates = get_candidate_ghosts(ROLE_WIZARD) - if(!candidates.len) - message_admins("No applicable clients for the next ragin' mage, asking ghosts instead.") - var/time_passed = world.time - for(var/mob/dead/observer/G in GLOB.player_list) - if(!jobban_isbanned(G, "wizard") && !jobban_isbanned(G, "Syndicate")) - spawn(0) - switch(alert(G, "Do you wish to be considered for the position of Space Wizard Foundation 'diplomat'?","Please answer in 30 seconds!","Yes","No")) - if("Yes") - if((world.time-time_passed)>300)//If more than 30 game seconds passed. - continue - candidates += G - if("No") - continue - sleep(300) - if(!candidates.len) - message_admins("This is awkward, sleeping until another mage check...") - making_mage = 0 - return + message_admins("SWF is still pissed, sending another wizard - [max_mages - mages_made] left.") + + if(!candidates.len) + message_admins("This is awkward, sleeping until another mage check..") + making_mage = FALSE + sleep(300) + return + else + harry = pick(candidates) + making_mage = FALSE + if(harry) + var/mob/living/carbon/human/new_character= makeBody(harry) + new_character.mind.make_Wizard() // This puts them at the wizard spawn, worry not + mages_made++ + return TRUE else - candidates = shuffle(candidates) - for(var/mob/dead/observer/i in candidates) - if(!i) continue //Dont bother removing them from the list since we only grab one wizard - - // YER A WIZZERD HARRY - harry = i - break - - making_mage = 0 - if(harry) - var/mob/living/carbon/human/new_character= makeBody(harry) - - - new_character.mind.make_Wizard() // This puts them at the wizard spawn, worry not - mages_made++ - return 1 - else - log_runtime(EXCEPTION("The candidates list for ragin' mages contained non-observer entries!"), src) - return 0 + log_runtime(EXCEPTION("The candidates list for ragin' mages contained non-observer entries!"), src) + return FALSE // ripped from -tg-'s wizcode, because whee lets make a very general proc for a very specific gamemode // This probably wouldn't do half bad as a proc in __HELPERS // Lemme know if this causes species to mess up spectacularly or anything /datum/game_mode/wizard/raginmages/proc/makeBody(var/mob/dead/observer/G) - if(!G || !G.key) return // Let's not steal someone's soul here - + if(!G || !G.key) + return // Let's not steal someone's soul here var/mob/living/carbon/human/new_character = new(pick(latejoin)) - G.client.prefs.copy_to(new_character) - new_character.key = G.key - return new_character /datum/game_mode/wizard/raginmages/declare_completion() if(finished) - feedback_set_details("round_end_result","raging wizard loss - wizard killed") - to_chat(world, " The crew has managed to hold off the wizard attack! The Space Wizards Federation has been taught a lesson they will not soon forget!") + feedback_set_details("round_end_result", "raging wizard loss - wizard killed") + to_chat(world, " The crew has managed to hold off the Wizard attack! The Space Wizard Federation has been taught a lesson they will not soon forget!") ..(1) diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 5592f5f41fc..7d941a41bde 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -229,6 +229,12 @@ log_name = "LD" category = "Defensive" +/datum/spellbook_entry/lichdom/IsAvailible() + if(SSticker.mode.name == "ragin' mages") + return FALSE + else + return TRUE + /datum/spellbook_entry/lightningbolt name = "Lightning Bolt" spell_type = /obj/effect/proc_holder/spell/targeted/lightning @@ -398,8 +404,8 @@ name = "Bottle of Tickles" desc = "A bottle of magically infused fun, the smell of which will \ attract adorable extradimensional beings when broken. These beings \ - are similar to slaughter demons, but they do not permamently kill \ - their victims, instead putting them in an extradimensional hugspace, \ + are similar to slaughter demons, but are a little weaker and they do not permamently \ + kill their victims, instead putting them in an extradimensional hugspace, \ to be released on the demon's death. Chaotic, but not ultimately \ damaging. The crew's reaction to the other hand could be very \ destructive." @@ -411,7 +417,7 @@ /datum/spellbook_entry/item/oozebottle name = "Bottle of Ooze" - desc = "A bottle of magically infused ooze, which will awake an all-consuming Morph, capable of cunningly disguising itself as any object it comes in contact with. Be careful though, as Morph diet includes Wizards." + desc = "A bottle of magically infused ooze, which will awake an all-consuming Morph, capable of cunningly disguising itself as any object it comes in contact with and even casting some very basic spells. Be careful though, as Morph diet includes Wizards." item_path = /obj/item/antag_spawner/morph cost = 1 log_name = "BO" @@ -419,7 +425,7 @@ category = "Assistance" /datum/spellbook_entry/item/tarotdeck - name = "Tarot Deck" + name = "Guardian Deck" desc = "A deck of guardian tarot cards, capable of binding a personal guardian to your body. There are multiple types of guardian available, but all of them will transfer some amount of damage to you. \ It would be wise to avoid buying these with anything capable of causing you to swap bodies with others." item_path = /obj/item/guardiancreator @@ -439,14 +445,6 @@ item_path = /obj/item/twohanded/singularityhammer log_name = "SI" -/datum/spellbook_entry/item/cursed_heart - name = "Cursed Heart" - desc = "A heart that has been revived by dark magicks. The user must ensure the heart is manually beaten or their blood circulation will suffer, but every beat heals their injuries. It must beat every 6 seconds." - item_path = /obj/item/organ/internal/heart/cursed/wizard - log_name = "CH" - cost = 1 - category = "Defensive" - /datum/spellbook_entry/summon name = "Summon Stuff" category = "Rituals" @@ -473,9 +471,12 @@ name = "Summon Ghosts" desc = "Spook the crew out by making them see dead people. Be warned, ghosts are capricious and occasionally vindicative, and some will use their incredibly minor abilities to frustrate you." cost = 0 + log_name = "SGH" /datum/spellbook_entry/summon/ghosts/IsAvailible() - if(!SSticker.mode) + if(!SSticker.mode) // In case spellbook is placed on map + return FALSE + if(SSticker.mode.name == "ragin' mages") return FALSE else return TRUE @@ -489,18 +490,17 @@ /datum/spellbook_entry/summon/guns name = "Summon Guns" - category = "Rituals" - desc = "Nothing could possibly go wrong with arming a crew of lunatics just itching for an excuse to kill you. Just be careful not to stand still too long!" + desc = "Nothing could possibly go wrong with arming a crew of lunatics just itching for an excuse to kill you. Just be careful not to stand still too long! You will also receive 1 extra point to use in your spellbook." cost = 0 log_name = "SG" /datum/spellbook_entry/summon/guns/IsAvailible() if(!SSticker.mode) // In case spellbook is placed on map - return 0 + return FALSE if(SSticker.mode.name == "ragin' mages") - return 0 + return FALSE else - return 1 + return TRUE /datum/spellbook_entry/summon/guns/Buy(var/mob/living/carbon/human/user,var/obj/item/spellbook/book) feedback_add_details("wizard_spell_learned",log_name) @@ -512,18 +512,17 @@ /datum/spellbook_entry/summon/magic name = "Summon Magic" - category = "Challenges" - desc = "Share the wonders of magic with the crew and show them why they aren't to be trusted with it at the same time." + desc = "Share the wonders of magic with the crew and show them why they aren't to be trusted with it at the same time. You will also receive 1 extra point to use in your spellbook." cost = 0 log_name = "SU" /datum/spellbook_entry/summon/magic/IsAvailible() if(!SSticker.mode) // In case spellbook is placed on map - return 0 + return FALSE if(SSticker.mode.name == "ragin' mages") - return 0 + return FALSE else - return 1 + return TRUE /datum/spellbook_entry/summon/magic/Buy(var/mob/living/carbon/human/user,var/obj/item/spellbook/book) feedback_add_details("wizard_spell_learned",log_name) @@ -611,9 +610,6 @@ dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased.
" dat += "For spells: the number after the spell name is the cooldown time.
" dat += "You can reduce this number by spending more points on the spell.
" - if("Challenges") - dat += "The Wizard Federation typically has hard limits on the potency and number of spells brought to the station based on risk.
" - dat += "Arming the station against you will increases the risk, but will grant you one more charge for your spellbook.
" if("Rituals") dat += "These powerful spells change the very fabric of reality. Not always in your favour.
" return dat diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index 1e9bf6ce4c0..5ac62401d23 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -7,7 +7,6 @@ required_players = 20 required_enemies = 1 recommended_enemies = 1 - var/use_huds = 0 var/finished = 0 var/but_wait_theres_more = 0 @@ -16,7 +15,6 @@ to_chat(world, "The current game mode is - Wizard!") to_chat(world, "There is a SPACE WIZARD on the station. You can't let him achieve his objective!") - /datum/game_mode/wizard/can_start()//This could be better, will likely have to recode it later if(!..()) return 0 @@ -41,7 +39,6 @@ ..() return 1 - /datum/game_mode/wizard/post_setup() for(var/datum/mind/wizard in wizards) log_game("[key_name(wizard)] has been selected as a Wizard") @@ -73,7 +70,6 @@ wizhud.join_hud(wiz_mind.current) set_antag_hud(wiz_mind.current, ((wiz_mind in wizards) ? "hudwizard" : "apprentice")) - /datum/game_mode/proc/update_wiz_icons_removed(datum/mind/wiz_mind) var/datum/atom_hud/antag/wizhud = huds[ANTAG_HUD_WIZ] wizhud.leave_hud(wiz_mind.current) @@ -85,7 +81,6 @@ wizard.objectives += wiz_objective return - /datum/game_mode/proc/name_wizard(mob/living/carbon/human/wizard_mob) //Allows the wizard to choose a custom name or go with a random one. Spawn 0 so it does not lag the round starting. var/wizard_name_first = pick(GLOB.wizard_first) @@ -103,7 +98,6 @@ wizard_mob.mind.name = newname return - /datum/game_mode/proc/greet_wizard(var/datum/mind/wizard, var/you_are=1) addtimer(CALLBACK(wizard.current, /mob/.proc/playsound_local, null, 'sound/ambience/antag/ragesmages.ogg', 100, 0), 30) if(you_are) @@ -116,7 +110,6 @@ obj_count++ return - /*/datum/game_mode/proc/learn_basic_spells(mob/living/carbon/human/wizard_mob) if(!istype(wizard_mob)) return @@ -164,7 +157,6 @@ wizard_mob.gene_stability += DEFAULT_GENE_STABILITY //magic return 1 - /datum/game_mode/wizard/check_finished() var/wizards_alive = 0 var/traitors_alive = 0 @@ -189,8 +181,6 @@ finished = 1 return 1 - - /datum/game_mode/wizard/declare_completion(var/ragin = 0) if(finished && !ragin) feedback_set_details("round_end_result","wizard loss - wizard killed") @@ -198,7 +188,6 @@ ..() return 1 - /datum/game_mode/proc/auto_declare_completion_wizard() if(wizards.len) var/text = "
the wizards/witches were:" diff --git a/code/game/jobs/job_objective.dm b/code/game/jobs/job_objective.dm index 4456bb571e5..48fa911bcf5 100644 --- a/code/game/jobs/job_objective.dm +++ b/code/game/jobs/job_objective.dm @@ -49,7 +49,7 @@ if(!employee.job_objectives.len)//If the employee had no objectives, don't need to process this. continue - if(employee.assigned_role == employee.special_role) //If the character is an offstation character, skip them. + if(employee.assigned_role == employee.special_role || employee.offstation_role) //If the character is an offstation character, skip them. continue var/tasks_completed=0 diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 9a062d31de4..52cd5bdfee8 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -86,8 +86,8 @@ var/frequency = ATMOS_VENTSCRUB //var/skipprocess = 0 //Experimenting var/alarm_frequency = ATMOS_FIRE_FREQ - var/remote_control = 0 - var/rcon_setting = 2 + var/remote_control = TRUE + var/rcon_setting = RCON_AUTO var/rcon_time = 0 var/locked = 1 var/datum/wires/alarm/wires = null @@ -98,7 +98,7 @@ // Waiting on a device to respond. // Specifies an id_tag. NULL means we aren't waiting. - var/waiting_on_device=null + var/waiting_on_device = null var/mode = AALARM_MODE_SCRUBBING var/preset = AALARM_PRESET_HUMAN @@ -117,16 +117,18 @@ var/list/TLV = list() - var/report_danger_level = 1 + var/report_danger_level = TRUE - var/automatic_emergency = 1 //Does the alarm automaticly respond to an emergency condition + var/automatic_emergency = TRUE //Does the alarm automaticly respond to an emergency condition /obj/machinery/alarm/monitor - report_danger_level = 0 + report_danger_level = FALSE /obj/machinery/alarm/syndicate //general syndicate access - report_danger_level = 0 + report_danger_level = FALSE + remote_control = FALSE req_access = list(access_syndicate) + req_one_access = list() /obj/machinery/alarm/monitor/server preset = AALARM_PRESET_SERVER diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 5028db8f0c6..d59aca72145 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -295,10 +295,12 @@ to_chat(O, "The screen bursts into static.") /obj/machinery/camera/proc/triggerCameraAlarm() - SSalarms.camera_alarm.triggerAlarm(loc, src) + if(is_station_contact(z)) + SSalarms.camera_alarm.triggerAlarm(loc, src) /obj/machinery/camera/proc/cancelCameraAlarm() - SSalarms.camera_alarm.clearAlarm(loc, src) + if(is_station_contact(z)) + SSalarms.camera_alarm.clearAlarm(loc, src) /obj/machinery/camera/proc/can_use() if(!status) diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm index 17f64c07cb8..312e4cf577e 100644 --- a/code/game/machinery/camera/motion.dm +++ b/code/game/machinery/camera/motion.dm @@ -43,19 +43,20 @@ /obj/machinery/camera/proc/cancelAlarm() if(!status || (stat & NOPOWER)) - return 0 - if(detectTime == -1) + return FALSE + if(detectTime == -1 && is_station_contact(z)) SSalarms.motion_alarm.clearAlarm(loc, src) detectTime = 0 - return 1 + return TRUE /obj/machinery/camera/proc/triggerAlarm() if(!status || (stat & NOPOWER)) - return 0 - if(!detectTime) return 0 + return FALSE + if(!detectTime || !is_station_contact(z)) + return FALSE SSalarms.motion_alarm.triggerAlarm(loc, src) detectTime = -1 - return 1 + return TRUE /obj/machinery/camera/HasProximity(atom/movable/AM as mob|obj) // Motion cameras outside of an "ai monitored" area will use this to detect stuff. diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index 835b0264229..e9504157063 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -21,6 +21,16 @@ FIRE ALARM var/wiresexposed = 0 var/buildstage = 2 // 2 = complete, 1 = no wires, 0 = circuit gone + var/report_fire_alarms = TRUE // Should triggered fire alarms also trigger an actual alarm? + var/show_alert_level = TRUE // Should fire alarms display the current alert level? + +/obj/machinery/firealarm/no_alarm + report_fire_alarms = FALSE + +/obj/machinery/firealarm/syndicate + report_fire_alarms = FALSE + show_alert_level = FALSE + /obj/machinery/firealarm/update_icon() if(wiresexposed) @@ -215,40 +225,38 @@ FIRE ALARM time = min(max(round(time), 0), 120) /obj/machinery/firealarm/proc/reset() - if(!( working )) + if(!working) return var/area/A = get_area(src) A.fire_reset() + for(var/obj/machinery/firealarm/FA in A) - SSalarms.fire_alarm.clearAlarm(loc, FA) - return + if(is_station_contact(z) && FA.report_fire_alarms) + SSalarms.fire_alarm.clearAlarm(loc, FA) /obj/machinery/firealarm/proc/alarm(var/duration = 0) - if(!( working)) + if(!working) return + var/area/A = get_area(src) for(var/obj/machinery/firealarm/FA in A) - SSalarms.fire_alarm.triggerAlarm(loc, FA, duration) + if(is_station_contact(z) && FA.report_fire_alarms) + SSalarms.fire_alarm.triggerAlarm(loc, FA, duration) + else + A.fire_alert() // Manually trigger alarms if the alarm isn't reported + update_icon() - //playsound(loc, 'sound/ambience/signal.ogg', 75, 0) - return /obj/machinery/firealarm/New(location, direction, building) ..() - if(location) - loc = location - - if(direction) - dir = direction - if(building) buildstage = 0 - wiresexposed = 1 + wiresexposed = TRUE pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24) pixel_y = (dir & 3)? (dir ==1 ? -24 : 24) : 0 - if(is_station_contact(z)) + if(is_station_contact(z) && show_alert_level) if(security_level) overlays += image('icons/obj/monitors.dmi', "overlay_[get_security_level()]") else diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index 20d15a29e1f..22cf6d56ecd 100755 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -6,12 +6,15 @@ plane = FLOOR_PLANE armor = list(melee = 50, bullet = 30, laser = 70, energy = 50, bomb = 20, bio = 0, rad = 0) var/id = null - var/on = 1.0 - anchored = 1.0 + var/on = FALSE + anchored = TRUE use_power = IDLE_POWER_USE idle_power_usage = 2 active_power_usage = 4 +/obj/machinery/igniter/on + on = TRUE + /obj/machinery/igniter/attack_ai(mob/user as mob) return src.attack_hand(user) @@ -51,8 +54,8 @@ icon = 'icons/obj/stationobjs.dmi' icon_state = "migniter" var/id = null - var/disable = 0 - var/last_spark = 0 + var/disable = FALSE + var/last_spark = FALSE var/base_state = "migniter" anchored = 1 diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 072281cb188..2bc9196740e 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -148,8 +148,8 @@ Class Procs: if(!speed_process) return speed_process = FALSE - START_PROCESSING(SSmachines, src) STOP_PROCESSING(SSfastprocess, src) + START_PROCESSING(SSmachines, src) /obj/machinery/Destroy() if(myArea) @@ -348,28 +348,28 @@ Class Procs: return attack_hand(user) /obj/machinery/attack_hand(mob/user as mob) - if(user.lying || user.stat) - return 1 + if(user.incapacitated()) + return TRUE if(!user.IsAdvancedToolUser()) to_chat(user, "You don't have the dexterity to do this!") - return 1 + return TRUE if(ishuman(user)) var/mob/living/carbon/human/H = user if(H.getBrainLoss() >= 60) visible_message("[H] stares cluelessly at [src] and drools.") - return 1 + return TRUE else if(prob(H.getBrainLoss())) to_chat(user, "You momentarily forget how to use [src].") - return 1 + return TRUE if(panel_open) add_fingerprint(user) - return 0 + return FALSE if(!interact_offline && stat & (NOPOWER|BROKEN|MAINT)) - return 1 + return TRUE add_fingerprint(user) diff --git a/code/game/machinery/poolcontroller.dm b/code/game/machinery/poolcontroller.dm index 17fae9df6f6..0d6f76aad38 100644 --- a/code/game/machinery/poolcontroller.dm +++ b/code/game/machinery/poolcontroller.dm @@ -20,13 +20,36 @@ var/list/linkedmist = list() //Used to keep track of created mist var/deep_water = FALSE //set to 1 to drown even standing people +/obj/machinery/poolcontroller/invisible + invisibility = INVISIBILITY_MAXIMUM + name = "Water Controller" + desc = "An invisible water controller. Players shouldn't see this." -/obj/machinery/poolcontroller/New() //This proc automatically happens on world start +/obj/machinery/poolcontroller/invisible/sea + name = "Sea Controller" + desc = "A controller for the underwater portion of the sea. Players shouldn't see this." + deep_water = TRUE + +/obj/machinery/poolcontroller/Initialize(mapload) + var/contents_loop = linked_area if(!linked_area) - for(var/turf/simulated/floor/beach/water/W in range(srange,src)) //Search for /turf/simulated/floor/beach/water in the range of var/srange - linkedturfs += W //Add found pool turfs to the central list. - W.linkedcontroller = src // And add the linked controller to itself. - ..() //Changed to call parent as per MarkvA's recommendation + contents_loop = range(srange, src) + + for(var/turf/T in contents_loop) + if(istype(T, /turf/simulated/floor/beach/water)) + var/turf/simulated/floor/beach/water/W = T + W.linkedcontroller = src + linkedturfs += T + else if(istype(T, /turf/unsimulated/beach/water)) + var/turf/unsimulated/beach/water/W = T + W.linkedcontroller = src + linkedturfs += T + + . = ..() + +/obj/machinery/poolcontroller/invisible/Initialize(mapload) + linked_area = get_area(src) + . = ..() /obj/machinery/poolcontroller/emag_act(user as mob) //Emag_act, this is called when it is hit with a cryptographic sequencer. if(!emagged) //If it is not already emagged, emag it. @@ -190,20 +213,6 @@ return 1 -/obj/machinery/poolcontroller/seacontroller - invisibility = 101 - unacidable = 1 - name = "Sea Controller" - desc = "A controller for the underwater portion of the sea. Players shouldn't see this." - deep_water = TRUE //deep sea is deep water - -/obj/machinery/poolcontroller/seacontroller/Initialize() - linked_area = get_area(src) - for(var/turf/unsimulated/beach/water/W in linked_area) - linkedturfs += W //Add found pool turfs to the central list. - W.linkedcontroller = src // And add the linked controller to itself. - ..() - #undef FRIGID #undef COOL #undef NORMAL diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index 46138139ce8..bc2af073fc6 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -284,6 +284,7 @@ var/turf/simulated/wall/mineral/plastitanium/explosive/E = wall if(E.explosive_wall_group == explosive_wall_group) E.self_destruct() + sleep(5) ///Bomb Cores/// @@ -301,6 +302,7 @@ var/range_medium = 9 var/range_light = 17 var/range_flame = 17 + var/admin_log = TRUE /obj/item/bombcore/ex_act(severity) //Little boom can chain a big boom detonate() @@ -314,7 +316,7 @@ if(adminlog) message_admins(adminlog) log_game(adminlog) - explosion(get_turf(src), range_heavy, range_medium, range_light, flame_range = range_flame) + explosion(get_turf(src), range_heavy, range_medium, range_light, flame_range = range_flame, adminlog = admin_log) if(loc && istype(loc, /obj/machinery/syndicatebomb)) qdel(loc) qdel(src) @@ -405,6 +407,9 @@ range_light = 20 range_flame = 20 +/obj/item/bombcore/large/explosive_wall + admin_log = FALSE + /obj/item/bombcore/large/underwall layer = ABOVE_OPEN_TURF_LAYER diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 3688b4abe9b..a96a1c0d518 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -1031,6 +1031,7 @@ contraband = list(/obj/item/gun/projectile/shotgun/toy/crossbow= 10, //Congrats, you unlocked the +18 setting! /obj/item/gun/projectile/automatic/c20r/toy/riot = 10, /obj/item/gun/projectile/automatic/l6_saw/toy/riot = 10, + /obj/item/gun/projectile/automatic/sniper_rifle/toy = 10, /obj/item/ammo_box/foambox/riot = 20, /obj/item/toy/katana = 10, /obj/item/twohanded/dualsaber/toy = 5, @@ -1053,6 +1054,36 @@ /obj/machinery/vending/cigarette/free prices = list() +/obj/machinery/vending/cigarette/syndicate + products = list(/obj/item/storage/fancy/cigarettes/cigpack_syndicate = 7, + /obj/item/storage/fancy/cigarettes/cigpack_uplift = 3, + /obj/item/storage/fancy/cigarettes/cigpack_robust = 2, + /obj/item/storage/fancy/cigarettes/cigpack_carp = 3, + /obj/item/storage/fancy/cigarettes/cigpack_midori = 1, + /obj/item/storage/box/matches = 10, + /obj/item/lighter/zippo = 4, + /obj/item/storage/fancy/rollingpapers = 5) + +/obj/machinery/vending/cigarette/syndicate/free + prices = list() + +/obj/machinery/vending/cigarette/beach //Used in the lavaland_biodome_beach.dmm ruin + name = "\improper ShadyCigs Ultra" + desc = "Now with extra premium products!" + product_ads = "Probably not bad for you!;Dope will get you through times of no money better than money will get you through times of no dope!;It's good for you!" + product_slogans = "Turn on, tune in, drop out!;Better living through chemistry!;Toke!;Don't forget to keep a smile on your lips and a song in your heart!" + products = list(/obj/item/storage/fancy/cigarettes = 5, + /obj/item/storage/fancy/cigarettes/cigpack_uplift = 3, + /obj/item/storage/fancy/cigarettes/cigpack_robust = 3, + /obj/item/storage/fancy/cigarettes/cigpack_carp = 3, + /obj/item/storage/fancy/cigarettes/cigpack_midori = 3, + /obj/item/storage/box/matches = 10, + /obj/item/lighter/random = 4, + /obj/item/storage/fancy/rollingpapers = 5) + premium = list(/obj/item/clothing/mask/cigarette/cigar/havana = 2, + /obj/item/storage/fancy/cigarettes/cigpack_robustgold = 1, + /obj/item/lighter/zippo = 3) + /obj/machinery/vending/cigarette/New() ..() component_parts = list() @@ -1100,10 +1131,10 @@ product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?" icon_state = "wallmed" icon_deny = "wallmed-deny" - req_access_txt = "5" - density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude + req_access = list(access_medical) + density = FALSE //It is wall-mounted, and thus, not dense. --Superxpdude products = list(/obj/item/stack/medical/bruise_pack = 2, /obj/item/stack/medical/ointment = 2, /obj/item/reagent_containers/hypospray/autoinjector = 4, /obj/item/healthanalyzer = 1) - contraband = list(/obj/item/reagent_containers/syringe/charcoal = 4,/obj/item/reagent_containers/syringe/antiviral = 4,/obj/item/reagent_containers/food/pill/tox = 1) + contraband = list(/obj/item/reagent_containers/syringe/charcoal = 4, /obj/item/reagent_containers/syringe/antiviral = 4, /obj/item/reagent_containers/food/pill/tox = 1) armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0) /obj/machinery/vending/wallmed2 @@ -1111,10 +1142,10 @@ desc = "Wall-mounted Medical Equipment dispenser." icon_state = "wallmed" icon_deny = "wallmed-deny" - req_access_txt = "5" - density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude - products = list(/obj/item/reagent_containers/hypospray/autoinjector = 5,/obj/item/reagent_containers/syringe/charcoal = 3,/obj/item/stack/medical/bruise_pack = 3, - /obj/item/stack/medical/ointment =3,/obj/item/healthanalyzer = 3) + req_access = list(access_medical) + density = FALSE //It is wall-mounted, and thus, not dense. --Superxpdude + products = list(/obj/item/reagent_containers/hypospray/autoinjector = 5, /obj/item/reagent_containers/syringe/charcoal = 3, /obj/item/stack/medical/bruise_pack = 3, + /obj/item/stack/medical/ointment = 3, /obj/item/healthanalyzer = 3) contraband = list(/obj/item/reagent_containers/food/pill/tox = 3) armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0) diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index faaf623fa50..691ed994875 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -3,68 +3,126 @@ desc = "Looks unstable. Best to test it with the clown." icon = 'icons/obj/stationobjs.dmi' icon_state = "portal" - density = 1 - unacidable = 1//Can't destroy energy portals. - var/failchance = 5 + density = TRUE + unacidable = TRUE + anchored = TRUE + var/obj/item/target = null var/creator = null - anchored = 1 - var/precision = 1 // how close to the portal you will teleport. 0 = on the portal, 1 = adjacent - var/can_multitool_to_remove = 0 + + var/failchance = 5 + var/fail_icon = "portal1" + + var/precision = TRUE // how close to the portal you will teleport. FALSE = on the portal, TRUE = adjacent + var/can_multitool_to_remove = FALSE var/ignore_tele_proof_area_setting = FALSE /obj/effect/portal/Bumped(mob/M as mob|obj) teleport(M) -/obj/effect/portal/New(loc, turf/target, creator=null, lifespan=300) +/obj/effect/portal/New(loc, turf/target, creator = null, lifespan = 300) + ..() + GLOB.portals += src - src.loc = loc + src.target = target src.creator = creator + if(lifespan > 0) spawn(lifespan) qdel(src) /obj/effect/portal/Destroy() GLOB.portals -= src - if(istype(creator, /obj)) + + if(isobj(creator)) var/obj/O = creator O.portal_destroyed(src) + creator = null target = null return ..() -/obj/effect/portal/proc/teleport(atom/movable/M as mob|obj) - if(istype(M, /obj/effect)) //sparks don't teleport +/obj/effect/portal/singularity_pull() + return + +/obj/effect/portal/singularity_act() + return + +/obj/effect/portal/Crossed(atom/movable/AM) + if(isobserver(AM)) + return ..() + + if(!teleport(AM)) + return ..() + +/obj/effect/portal/attack_tk(mob/user) + return + +/obj/effect/portal/attack_hand(mob/user) + . = ..() + if(.) return - if(M.anchored&&istype(M, /obj/mecha)) - return - if(!( target )) - qdel(src) - return - if(istype(M, /atom/movable)) - if(prob(failchance)) - src.icon_state = "portal1" - if(!do_teleport(M, locate(rand(5, world.maxx - 5), rand(5, world.maxy -5), 3), 0, bypass_area_flag = ignore_tele_proof_area_setting)) // Try to send them to deep space. - invalid_teleport() - else - if(!do_teleport(M, target, precision, bypass_area_flag = ignore_tele_proof_area_setting)) // Try to send them to a turf adjacent to target. - invalid_teleport() + if(get_turf(user) == get_turf(src)) + teleport(user) + if(Adjacent(user)) + user.forceMove(get_turf(src)) + +/obj/effect/portal/attack_ghost(mob/dead/observer/O) + if(target) + O.forceMove(target) /obj/effect/portal/attackby(obj/item/A, mob/user) - if(istype(A, /obj/item/multitool) && can_multitool_to_remove) + if(ismultitool(A) && can_multitool_to_remove) qdel(src) + else if(user && Adjacent(user)) + user.forceMove(get_turf(src)) + return TRUE + +/obj/effect/portal/proc/can_teleport(atom/movable/M) + . = TRUE + + if(!istype(M)) + . = FALSE + + if(!M.simulated || iseffect(M)) + . = FALSE + + if(M.anchored && ismecha(M)) + . = FALSE + +/obj/effect/portal/proc/teleport(atom/movable/M) + if(!can_teleport(M)) + return FALSE + + if(!target) + qdel(src) + return FALSE + + if(ismegafauna(M)) + message_admins("[M] has used a portal at [ADMIN_VERBOSEJMP(src)] made by [key_name_admin(usr)].") + + if(prob(failchance)) + icon_state = fail_icon + if(!do_teleport(M, locate(rand(5, world.maxx - 5), rand(5, world.maxy -5), 3), 0, bypass_area_flag = ignore_tele_proof_area_setting)) // Try to send them to deep space. + invalid_teleport() + return FALSE + else + if(!do_teleport(M, target, precision, bypass_area_flag = ignore_tele_proof_area_setting)) // Try to send them to a turf adjacent to target. + invalid_teleport() + return FALSE + + return TRUE /obj/effect/portal/proc/invalid_teleport() visible_message("[src] flickers and fails due to bluespace interference!") do_sparks(5, 0, loc) qdel(src) - /obj/effect/portal/redspace name = "redspace portal" desc = "A portal capable of bypassing bluespace interference." icon_state = "portal1" failchance = 0 precision = 0 - ignore_tele_proof_area_setting = TRUE \ No newline at end of file + ignore_tele_proof_area_setting = TRUE diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index b7311519f7a..4dcd2cbdd32 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -242,7 +242,8 @@ /obj/item/gun/projectile/automatic/toy/pistol/enforcer = 50, /obj/item/gun/projectile/shotgun/toy = 50, /obj/item/gun/projectile/shotgun/toy/crossbow = 50, - /obj/item/gun/projectile/shotgun/toy/tommygun = 50 + /obj/item/gun/projectile/shotgun/toy/tommygun = 50, + /obj/item/gun/projectile/automatic/sniper_rifle/toy = 50 ) diff --git a/code/game/objects/effects/temporary_visuals/temporary_visual.dm b/code/game/objects/effects/temporary_visuals/temporary_visual.dm index bb6cca92644..23b1aaa0d2e 100644 --- a/code/game/objects/effects/temporary_visuals/temporary_visual.dm +++ b/code/game/objects/effects/temporary_visuals/temporary_visual.dm @@ -1,16 +1,23 @@ //temporary visual effects /obj/effect/temp_visual - anchored = 1 + icon_state = "nothing" + anchored = TRUE layer = ABOVE_MOB_LAYER mouse_opacity = MOUSE_OPACITY_TRANSPARENT - var/duration = 10 + var/duration = 10 //in deciseconds var/randomdir = TRUE + var/timerid -/obj/effect/temp_visual/New() +/obj/effect/temp_visual/Initialize(mapload) + . = ..() if(randomdir) setDir(pick(cardinal)) - QDEL_IN(src, duration) + timerid = QDEL_IN(src, duration) + +/obj/effect/temp_visual/Destroy() + . = ..() + deltimer(timerid) /obj/effect/temp_visual/singularity_act() return @@ -24,7 +31,7 @@ /obj/effect/temp_visual/dir_setting randomdir = FALSE -/obj/effect/temp_visual/dir_setting/New(loc, set_dir) +/obj/effect/temp_visual/dir_setting/Initialize(mapload, set_dir) if(set_dir) setDir(set_dir) - ..() \ No newline at end of file + . = ..() diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm index f21bbb69c02..87f489513d2 100644 --- a/code/game/objects/explosion.dm +++ b/code/game/objects/explosion.dm @@ -1,6 +1,6 @@ //TODO: Flash range does nothing currently -/proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, ignorecap = 0, flame_range = 0 ,silent = 0, smoke = 1, cause = null, breach = TRUE) +/proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, ignorecap = 0, flame_range = 0, silent = 0, smoke = 1, cause = null, breach = TRUE) src = null //so we don't abort once src is deleted epicenter = get_turf(epicenter) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index a8803ffb6ed..073cd0df669 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -149,6 +149,10 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d /obj/item/blob_act() qdel(src) +/obj/item/water_act(volume, temperature, source, method = TOUCH) + . = ..() + extinguish() + /obj/item/verb/move_to_top() set name = "Move To Top" set category = null diff --git a/code/game/objects/items/dehy_carp.dm b/code/game/objects/items/dehy_carp.dm index a975a0b4d06..fb59b24aeda 100644 --- a/code/game/objects/items/dehy_carp.dm +++ b/code/game/objects/items/dehy_carp.dm @@ -22,6 +22,10 @@ owned = 0 return ..() +/obj/item/toy/carpplushie/dehy_carp/water_act(volume, temperature, source, method = TOUCH) + . = ..() + if(volume >= 1) + Swell() /obj/item/toy/carpplushie/dehy_carp/afterattack(obj/O, mob/user,proximity) if(!proximity) return diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index 50cab97ee48..db7c08b1863 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -136,7 +136,9 @@ var/global/list/datum/stack_recipe/sinew_recipes = list ( \ /obj/item/clothing/suit/space/eva/plasmaman/miner, /obj/item/clothing/head/helmet/space/eva/plasmaman/miner, /obj/item/clothing/suit/hooded/explorer, - /obj/item/clothing/head/hooded/explorer + /obj/item/clothing/head/hooded/explorer, + /obj/item/clothing/suit/space/eva/plasmaman/explorer, + /obj/item/clothing/head/helmet/space/eva/plasmaman/explorer )) /obj/item/stack/sheet/animalhide/goliath_hide/afterattack(atom/target, mob/user, proximity_flag) @@ -203,7 +205,12 @@ var/global/list/datum/stack_recipe/sinew_recipes = list ( \ else ..() -//Step two - washing..... it's actually in washing machine code. +//Step two - washing (also handled by water reagent code and washing machine code) +/obj/item/stack/sheet/hairlesshide/water_act(volume, temperature, source, method = TOUCH) + . = ..() + if(volume >= 10) + new /obj/item/stack/sheet/wetleather(get_turf(src), amount) + qdel(src) //Step three - drying /obj/item/stack/sheet/wetleather/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 2c1222154b0..94f195e9c20 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -385,8 +385,8 @@ var/global/list/datum/stack_recipe/brass_recipes = list (\ GLOBAL_LIST_INIT(plastic_recipes, list( new /datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 5, one_per_turf = 1, on_floor = 1, time = 40), \ new /datum/stack_recipe("wet floor sign", /obj/item/caution, 2), \ - new /datum/stack_recipe("water bottle", /obj/item/reagent_containers/food/drinks/waterbottle/empty), \ - new /datum/stack_recipe("large water bottle", /obj/item/reagent_containers/food/drinks/waterbottle/large/empty,3), \ + new /datum/stack_recipe("water bottle", /obj/item/reagent_containers/glass/beaker/waterbottle/empty), \ + new /datum/stack_recipe("large water bottle", /obj/item/reagent_containers/glass/beaker/waterbottle/large/empty,3), \ new /datum/stack_recipe("plastic crate", /obj/structure/closet/crate/plastic, 10, one_per_turf = 1, on_floor = 1), \ new /datum/stack_recipe("plastic ashtray", /obj/item/ashtray/plastic, 2, one_per_turf = 1, on_floor = 1), \ new /datum/stack_recipe("plastic fork", /obj/item/kitchen/utensil/pfork, 1, on_floor = 1), \ diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index b0a1286d3b2..75decb95413 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -111,16 +111,11 @@ if(istype(E, /datum/stack_recipe)) var/datum/stack_recipe/R = E - var/max_multiplier = round(src.amount / R.req_amount) + var/max_multiplier = round(amount / R.req_amount) var/title var/can_build = 1 can_build = can_build && (max_multiplier > 0) - /* - if(R.one_per_turf) - can_build = can_build && !(locate(R.result_type) in usr.loc) - if(R.on_floor) - can_build = can_build && istype(usr.loc, /turf/simulated/floor) - */ + if(R.res_amount > 1) title += "[R.res_amount]x [R.title]\s" else @@ -131,12 +126,13 @@ else t1 += "[title]" continue - if(R.max_res_amount>1 && max_multiplier>1) + if(R.max_res_amount > 1 && max_multiplier > 1) max_multiplier = min(max_multiplier, round(R.max_res_amount / R.res_amount)) t1 += " |" - var/list/multipliers = list(5,10,25) + + var/list/multipliers = list(5, 10, 25) for(var/n in multipliers) - if(max_multiplier>=n) + if(max_multiplier >= n) t1 += " [n * R.res_amount]x" if(!(max_multiplier in multipliers)) t1 += " [max_multiplier * R.res_amount]x" @@ -165,7 +161,7 @@ var/datum/stack_recipe/R = recipes_list[text2num(href_list["make"])] var/multiplier = text2num(href_list["multiplier"]) - if(!multiplier) + if(!multiplier || multiplier <= 0 || multiplier > 50) // Href exploit checks multiplier = 1 if(amount < R.req_amount * multiplier) diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 6b54f61537e..c03b9694cfa 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -93,14 +93,14 @@ GLOBAL_LIST_INIT(captain_display_cases, list()) icon = 'icons/obj/stationobjs.dmi' icon_state = "glassbox20" desc = "A display case for prized possessions. It taunts you to kick it." - density = 1 - anchored = 1 - unacidable = 1 //Dissolving the case would also delete the contents. + density = TRUE + anchored = TRUE + unacidable = TRUE //Dissolving the case would also delete the contents. var/health = 30 var/obj/item/occupant = null - var/destroyed = 0 - var/locked = 0 - var/burglar_alarm = 0 + var/destroyed = FALSE + var/locked = FALSE + var/burglar_alarm = FALSE var/ue = null var/image/occupant_overlay = null var/obj/item/airlock_electronics/circuit @@ -116,8 +116,8 @@ GLOBAL_LIST_INIT(captain_display_cases, list()) /obj/structure/displaycase/captains_laser name = "captain's display case" desc = "A display case for the captain's antique laser gun. Hooked up with an anti-theft system." - burglar_alarm = 1 - locked = 1 + burglar_alarm = TRUE + locked = TRUE req_access = list(access_captain) start_showpiece_type = /obj/item/gun/energy/laser/captain @@ -205,7 +205,7 @@ GLOBAL_LIST_INIT(captain_display_cases, list()) return /obj/structure/displaycase/proc/burglar_alarm() - if(burglar_alarm) + if(burglar_alarm && is_station_contact(z)) var/area/alarmed = get_area(src) alarmed.burglaralert(src) visible_message("The burglar alarm goes off!") @@ -215,10 +215,10 @@ GLOBAL_LIST_INIT(captain_display_cases, list()) sleep(74) // 7.4 seconds long /obj/structure/displaycase/update_icon() - if(src.destroyed) - src.icon_state = "glassbox2b" + if(destroyed) + icon_state = "glassbox2b" else - src.icon_state = "glassbox2[locked]" + icon_state = "glassbox2[locked]" overlays = 0 if(occupant) var/icon/occupant_icon=getFlatIcon(occupant) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index b48774eb046..726d9a88a7f 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -600,7 +600,7 @@ wateract = (W.wash(user, src)) busy = 0 if(wateract) - W.water_act(20,310.15,src) + W.water_act(20, 310.15, src) if("Disconnect") user.visible_message("[user] starts disconnecting [src].", "You begin disconnecting [src]...") if(do_after(user, 40 * O.toolspeed, target = src)) @@ -633,7 +633,7 @@ wateract = (O.wash(user, src)) busy = 0 if(wateract) - O.water_act(20,310.15,src) + O.water_act(20, 310.15, src) /obj/structure/sink/update_icon() ..() diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index a80bab94055..541240beb9f 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -18,8 +18,25 @@ visibilityChanged() /turf/simulated/proc/break_tile() + return /turf/simulated/proc/burn_tile() + return + +/turf/simulated/proc/water_act(volume, temperature, source) + if(volume >= 3) + MakeSlippery() + + for(var/mob/living/carbon/slime/M in src) + M.apply_water() + + var/hotspot = (locate(/obj/effect/hotspot) in src) + if(hotspot) + var/datum/gas_mixture/lowertemp = remove_air(air.total_moles()) + lowertemp.temperature = max(min(lowertemp.temperature-2000,lowertemp.temperature / 2), 0) + lowertemp.react() + assume_air(lowertemp) + qdel(hotspot) /turf/simulated/proc/MakeSlippery(wet_setting = TURF_WET_WATER) // 1 = Water, 2 = Lube, 3 = Ice, 4 = Permafrost if(wet >= wet_setting) @@ -99,7 +116,7 @@ if(TURF_WET_PERMAFROST) // Permafrost M.slip("the frosted floor", 0, 5, tilesSlipped = 1, walkSafely = 0, slipAny = 1) -/turf/simulated/ChangeTurf(var/path) +/turf/simulated/ChangeTurf(path, defer_change = FALSE, keep_icon = TRUE, ignore_air = FALSE) . = ..() queue_smooth_neighbors(src) diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 2877f9f01d5..7166a7fbfc0 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -120,30 +120,40 @@ var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3"," /turf/simulated/floor/proc/make_plating() return ChangeTurf(/turf/simulated/floor/plating) -/turf/simulated/floor/ChangeTurf(turf/simulated/floor/T, defer_change = FALSE, keep_icon = TRUE) - if(!istype(src,/turf/simulated/floor)) return ..() //fucking turfs switch the fucking src of the fucking running procs - if(!ispath(T,/turf/simulated/floor)) return ..() +/turf/simulated/floor/ChangeTurf(turf/simulated/floor/T, defer_change = FALSE, keep_icon = TRUE, ignore_air = FALSE) + if(!istype(src, /turf/simulated/floor)) + return ..() //fucking turfs switch the fucking src of the fucking running procs + if(!ispath(T, /turf/simulated/floor)) + return ..() + var/old_icon = icon_regular_floor var/old_plating = icon_plating var/old_dir = dir + var/turf/simulated/floor/W = ..() + if(keep_icon) W.icon_regular_floor = old_icon W.icon_plating = old_plating W.dir = old_dir + W.update_icon() return W /turf/simulated/floor/attackby(obj/item/C as obj, mob/user as mob, params) if(!C || !user) - return 1 + return TRUE + if(..()) - return 1 + return TRUE + if(intact && iscrowbar(C)) pry_tile(C, user) - return 1 + return TRUE + if(intact && istype(C, /obj/item/stack/tile)) try_replace_tile(C, user, params) + if(istype(C, /obj/item/pipe)) var/obj/item/pipe/P = C if(P.pipe_type != -1) // ANY PIPE @@ -152,6 +162,7 @@ var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3"," "You slide [P] along \the [src].", \ "You hear the scrape of metal against something.") user.drop_item() + if(P.is_bent_pipe()) // bent pipe rotation fix see construction.dm P.dir = 5 if(user.dir == 1) @@ -161,13 +172,14 @@ var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3"," else if(user.dir == 4) P.dir = 10 else - P.dir = user.dir + P.setDir(user.dir) + P.x = src.x P.y = src.y P.z = src.z - P.loc = src - return 1 - return 0 + P.forceMove(src) + return TRUE + return FALSE /turf/simulated/floor/proc/try_replace_tile(obj/item/stack/tile/T, mob/user, params) if(T.turf_type == type) diff --git a/code/game/turfs/simulated/floor/asteroid.dm b/code/game/turfs/simulated/floor/asteroid.dm index 1a8522ba9be..43d77bd39be 100644 --- a/code/game/turfs/simulated/floor/asteroid.dm +++ b/code/game/turfs/simulated/floor/asteroid.dm @@ -58,18 +58,21 @@ gets_dug() return - if(istype(W,/obj/item/storage/bag/ore)) + else if(istype(W,/obj/item/storage/bag/ore)) var/obj/item/storage/bag/ore/S = W if(S.collection_mode == 1) for(var/obj/item/stack/ore/O in src.contents) O.attackby(W,user) return - if(istype(W, /obj/item/stack/tile)) + else if(istype(W, /obj/item/stack/tile)) var/obj/item/stack/tile/Z = W if(!Z.use(1)) return - ChangeTurf(Z.turf_type) + if(istype(Z, /obj/item/stack/tile/plasteel)) // Turn asteroid floors into plating by default + ChangeTurf(/turf/simulated/floor/plating, keep_icon = FALSE) + else + ChangeTurf(Z.turf_type, keep_icon = FALSE) playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) /turf/simulated/floor/plating/asteroid/gets_drilled() @@ -89,12 +92,6 @@ slowdown = 0 return -/turf/simulated/floor/plating/asteroid/singularity_act() - return - -/turf/simulated/floor/plating/asteroid/singularity_pull(S, current_size) - return - /turf/simulated/floor/plating/asteroid/basalt name = "volcanic floor" baseturf = /turf/simulated/floor/plating/asteroid/basalt @@ -164,7 +161,7 @@ GLOBAL_LIST_INIT(megafauna_spawn_list, list(/mob/living/simple_animal/hostile/me has_data = TRUE /turf/simulated/floor/plating/asteroid/airless/cave/volcanic - mob_spawn_list = list(/mob/living/simple_animal/hostile/asteroid/goliath/beast = 50, /mob/living/simple_animal/hostile/spawner/lavaland/goliath = 3, \ + mob_spawn_list = list(/mob/living/simple_animal/hostile/asteroid/goliath/beast/random = 50, /mob/living/simple_animal/hostile/spawner/lavaland/goliath = 3, \ /mob/living/simple_animal/hostile/asteroid/basilisk/watcher = 40, /mob/living/simple_animal/hostile/spawner/lavaland = 2, \ /mob/living/simple_animal/hostile/asteroid/hivelord/legion = 30, /mob/living/simple_animal/hostile/spawner/lavaland/legion = 3, \ SPAWN_MEGAFAUNA = 6, /mob/living/simple_animal/hostile/asteroid/goldgrub = 10) diff --git a/code/game/turfs/simulated/floor/chasm.dm b/code/game/turfs/simulated/floor/chasm.dm index f3273c7786a..6a213400d04 100644 --- a/code/game/turfs/simulated/floor/chasm.dm +++ b/code/game/turfs/simulated/floor/chasm.dm @@ -8,7 +8,7 @@ canSmoothWith = list(/turf/simulated/floor/chasm) density = TRUE //This will prevent hostile mobs from pathing into chasms, while the canpass override will still let it function like an open turf var/static/list/falling_atoms = list() //Atoms currently falling into the chasm - var/static/list/forbidden_types = typecacheof(list(/obj/effect/portal, /obj/singularity, /obj/structure/stone_tile, /obj/item/projectile, /obj/effect/temp_visual, /obj/effect/collapse, /obj/effect/collapse, /atom/movable/lighting_object)) + var/static/list/forbidden_types = typecacheof(list(/obj/effect/portal, /obj/singularity, /obj/structure/stone_tile, /obj/item/projectile, /obj/effect/temp_visual, /obj/effect/collapse, /obj/effect/collapse)) var/drop_x = 1 var/drop_y = 1 var/drop_z = 1 @@ -75,7 +75,7 @@ return FALSE if(!isliving(AM) && !isobj(AM)) return FALSE - if(is_type_in_typecache(AM, forbidden_types) || AM.throwing) + if(!AM.simulated || is_type_in_typecache(AM, forbidden_types) || AM.throwing) return FALSE //Flies right over the chasm if(isliving(AM)) diff --git a/code/game/turfs/simulated/floor/lava.dm b/code/game/turfs/simulated/floor/lava.dm index c1a8bfd6fea..d1ee346b302 100644 --- a/code/game/turfs/simulated/floor/lava.dm +++ b/code/game/turfs/simulated/floor/lava.dm @@ -53,13 +53,13 @@ return FALSE var/thing_to_check = src - if (AM) + if(AM) thing_to_check = list(AM) for(var/thing in thing_to_check) - if(istype(thing, /atom/movable/lighting_object) || istype(thing, /atom/movable/overlay)) - continue if(isobj(thing)) var/obj/O = thing + if(!O.simulated) + continue if((O.resistance_flags & (LAVA_PROOF|INDESTRUCTIBLE)) || O.throwing) continue . = 1 @@ -71,7 +71,7 @@ O.resistance_flags &= ~FIRE_PROOF O.fire_act(10000, 1000) - else if (isliving(thing)) + else if(isliving(thing)) . = 1 var/mob/living/L = thing if(L.flying) diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm index de1e61039e7..ddf71b96798 100644 --- a/code/game/turfs/simulated/floor/misc_floor.dm +++ b/code/game/turfs/simulated/floor/misc_floor.dm @@ -43,6 +43,9 @@ name = "beach" icon = 'icons/misc/beach.dmi' +/turf/simulated/floor/beach/pry_tile(obj/item/C, mob/user, silent = FALSE) + return + /turf/simulated/floor/beach/sand name = "sand" icon_state = "sand" @@ -67,10 +70,6 @@ mouse_opacity = MOUSE_OPACITY_TRANSPARENT var/obj/machinery/poolcontroller/linkedcontroller = null -/turf/simulated/floor/beach/water/pry_tile(obj/item/C, mob/user, silent = FALSE) - return //cannot pry off tiles of water - - /turf/simulated/floor/beach/water/New() ..() var/image/overlay_image = image('icons/misc/beach.dmi', icon_state = "water5", layer = ABOVE_MOB_LAYER) diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index 6218b2a702d..ee53cd0ca35 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -2,7 +2,7 @@ name = "plating" icon_state = "plating" icon = 'icons/turf/floors/plating.dmi' - intact = 0 + intact = FALSE floor_tile = null broken_states = list("damaged1", "damaged2", "damaged3", "damaged4", "damaged5") burnt_states = list("floorscorched1", "floorscorched2") @@ -25,16 +25,16 @@ /turf/simulated/floor/plating/attackby(obj/item/C, mob/user, params) if(..()) - return 1 + return TRUE if(istype(C, /obj/item/stack/rods)) if(broken || burnt) to_chat(user, "Repair the plating first!") - return 1 + return TRUE var/obj/item/stack/rods/R = C if(R.get_amount() < 2) to_chat(user, "You need two rods to make a reinforced floor!") - return 1 + return TRUE else to_chat(user, "You begin reinforcing the floor...") if(do_after(user, 30 * C.toolspeed, target = src)) @@ -43,7 +43,7 @@ playsound(src, C.usesound, 80, 1) R.use(2) to_chat(user, "You reinforce the floor.") - return 1 + return TRUE else if(istype(C, /obj/item/stack/tile)) if(!broken && !burnt) @@ -54,20 +54,20 @@ playsound(src, 'sound/weapons/genhit.ogg', 50, 1) else to_chat(user, "This section is too damaged to support a tile! Use a welder to fix the damage.") - return 1 + return TRUE else if(istype(C, /obj/item/weldingtool)) var/obj/item/weldingtool/welder = C - if( welder.isOn() && (broken || burnt) ) - if(welder.remove_fuel(0,user)) + if(welder.isOn() && (broken || burnt)) + if(welder.remove_fuel(0, user)) to_chat(user, "You fix some dents on the broken plating.") playsound(src, welder.usesound, 80, 1) overlays -= current_overlay current_overlay = null - burnt = 0 - broken = 0 + burnt = FALSE + broken = FALSE update_icon() - return 1 + return TRUE /turf/simulated/floor/plating/airless icon_state = "plating" @@ -103,6 +103,9 @@ /turf/simulated/floor/engine/attack_hand(mob/user as mob) user.Move_Pulled(src) +/turf/simulated/floor/engine/pry_tile(obj/item/C, mob/user, silent = FALSE) + return + /turf/simulated/floor/engine/attackby(obj/item/C as obj, mob/user as mob, params) if(!C || !user) return @@ -115,6 +118,7 @@ new /obj/item/stack/rods(src, 2) ChangeTurf(/turf/simulated/floor/plating) return + if(istype(C, /obj/item/stack/sheet/plasteel) && !insulated) //Insulating the floor to_chat(user, "You begin insulating [src]...") if(do_after(user, 40, target = src) && !insulated) //You finish insulating the insulated insulated insulated insulated insulated insulated insulated insulated vacuum floor @@ -220,6 +224,9 @@ /turf/simulated/floor/snow/ex_act(severity) return +/turf/simulated/floor/snow/pry_tile(obj/item/C, mob/user, silent = FALSE) + return + /turf/simulated/floor/plating/metalfoam name = "foamed metal plating" icon_state = "metalfoam" @@ -238,7 +245,8 @@ /turf/simulated/floor/plating/metalfoam/attackby(var/obj/item/C, mob/user, params) if(..()) - return 1 + return TRUE + if(istype(C) && C.force) user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) diff --git a/code/game/turfs/simulated/minerals.dm b/code/game/turfs/simulated/minerals.dm index ad3e981154d..119f0b000d9 100644 --- a/code/game/turfs/simulated/minerals.dm +++ b/code/game/turfs/simulated/minerals.dm @@ -22,7 +22,7 @@ var/spreadChance = 0 //the percentual chance of an ore spreading to the neighbouring tiles var/last_act = 0 var/scan_state = null //Holder for the image we display when we're pinged by a mining scanner - var/defer_change = 0 + var/defer_change = FALSE /turf/simulated/mineral/New() if (!canSmoothWith) diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 23038b21be5..8163bc75acc 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -136,7 +136,7 @@ var/obj/structure/sign/poster/P = O P.roll_and_drop(src) else - O.loc = src + O.forceMove(src) ChangeTurf(/turf/simulated/floor/plating) diff --git a/code/game/turfs/simulated/walls_mineral.dm b/code/game/turfs/simulated/walls_mineral.dm index 02c183353d8..74d0e216614 100644 --- a/code/game/turfs/simulated/walls_mineral.dm +++ b/code/game/turfs/simulated/walls_mineral.dm @@ -275,8 +275,20 @@ icon_state = "map-overspace" fixed_underlay = list("space"=1) +/turf/simulated/wall/mineral/plastitanium/coated + name = "coated wall" + max_temperature = INFINITY + icon_state = "map-shuttle_nd" + smooth = SMOOTH_MORE + +/turf/simulated/wall/mineral/plastitanium/coated/Initialize(mapload) + . = ..() + desc += " It seems to have additional plating to protect against heat." + /turf/simulated/wall/mineral/plastitanium/explosive var/explosive_wall_group = EXPLOSIVE_WALL_GROUP_SYNDICATE_BASE + icon_state = "map-shuttle_nd" + smooth = SMOOTH_MORE /turf/simulated/wall/mineral/plastitanium/explosive/Initialize(mapload) . = ..() @@ -287,9 +299,12 @@ return ..() /turf/simulated/wall/mineral/plastitanium/explosive/proc/self_destruct() - var/obj/item/bombcore/large/bombcore = new(get_turf(src)) + var/obj/item/bombcore/large/explosive_wall/bombcore = new(get_turf(src)) bombcore.detonate() +/turf/simulated/wall/mineral/plastitanium/explosive/ex_act(severity) + return + //have to copypaste this code /turf/simulated/wall/mineral/plastitanium/interior/copyTurf(turf/T) if(T.type != type) diff --git a/code/game/turfs/space/transit.dm b/code/game/turfs/space/transit.dm index c08189e4d93..79bf171ce1f 100644 --- a/code/game/turfs/space/transit.dm +++ b/code/game/turfs/space/transit.dm @@ -88,7 +88,7 @@ /turf/space/transit/Entered(atom/movable/AM, atom/OldLoc, ignoreRest = 0) if(!AM) return - if(istype(AM, /obj/docking_port) || !AM.simulated) + if(!AM.simulated || istype(AM, /obj/docking_port)) return //this was fucking hilarious, the docking ports were getting thrown to random Z-levels var/max = world.maxx-TRANSITIONEDGE var/min = 1+TRANSITIONEDGE diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 9ca42122410..53cf1917404 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -180,8 +180,8 @@ if(L) qdel(L) -/turf/proc/TerraformTurf(path) - return ChangeTurf(path) +/turf/proc/TerraformTurf(path, defer_change = FALSE, keep_icon = TRUE, ignore_air = FALSE) + return ChangeTurf(path, defer_change, keep_icon, ignore_air) //Creates a new turf /turf/proc/ChangeTurf(path, defer_change = FALSE, keep_icon = TRUE, ignore_air = FALSE) @@ -209,7 +209,6 @@ if(!defer_change) W.AfterChange(ignore_air) - W.blueprint_data = old_blueprint_data recalc_atom_opacity() @@ -492,16 +491,14 @@ var/turf/T0 = src for(var/X in T0.GetAllContents()) var/atom/A = X + if(!A.simulated) + continue if(istype(A, /mob/dead)) continue if(istype(A, /obj/effect/landmark)) continue if(istype(A, /obj/docking_port)) continue - if(istype(A, /atom/movable/lighting_object)) - continue - if(!A.simulated) - continue qdel(A, force=TRUE) T0.ChangeTurf(turf_type) diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 2d076b4e90f..a2a95db957a 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -29,7 +29,7 @@ client/proc/one_click_antag() // You pass in ROLE define (optional), the applicant, and the gamemode, and it will return true / false depending on whether the applicant qualify for the candidacy in question if(jobban_isbanned(M, "Syndicate")) return FALSE - if(M.stat || !M.mind || M.mind.special_role) + if(M.stat || !M.mind || M.mind.special_role || M.mind.offstation_role) return FALSE if(temp) if((M.mind.assigned_role in temp.restricted_jobs) || (M.client.prefs.species in temp.protected_species)) diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm index f8d008c0c2c..d52507bee1d 100644 --- a/code/modules/antagonists/_common/antag_spawner.dm +++ b/code/modules/antagonists/_common/antag_spawner.dm @@ -167,7 +167,7 @@ var/mob/living/demon_type = /mob/living/simple_animal/slaughter /obj/item/antag_spawner/slaughter_demon/attack_self(mob/user) - if(level_blocks_magic(user.z))//this is to make sure the wizard does NOT summon a demon from the Den.. + if(level_blocks_magic(user.z)) //this is to make sure the wizard does NOT summon a demon from the Den.. to_chat(user, "You should probably wait until you reach the station.") return @@ -177,7 +177,10 @@ used = TRUE to_chat(user, "You break the seal on the bottle, calling upon the dire spirits of the underworld...") - var/list/candidates = pollCandidates("Do you want to play as a slaughter demon summoned by [user.real_name]?", ROLE_DEMON, 1, 100) + var/type = "slaughter" + if(demon_type == /mob/living/simple_animal/slaughter/laughter) + type = "laughter" + var/list/candidates = pollCandidates("Do you want to play as a [type] demon summoned by [user.real_name]?", ROLE_DEMON, 1, 100) if(candidates.len > 0) var/mob/C = pick(candidates) @@ -208,7 +211,6 @@ KillDaCrew.owner = S.mind KillDaCrew.explanation_text = "[objective_verb] everyone else while you're at it." S.mind.objectives += KillDaCrew - S.mind.objectives += KillDaCrew to_chat(S, "Objective #[1]: [KillDaWiz.explanation_text]") to_chat(S, "Objective #[2]: [KillDaCrew.explanation_text]") @@ -220,7 +222,7 @@ color = "#FF69B4" // HOT PINK veil_msg = "You sense an adorable presence \ lurking just beyond the veil..." - objective_verb = "Hug and Tickle" + objective_verb = "Hug and tickle" demon_type = /mob/living/simple_animal/slaughter/laughter ///////////MORPH @@ -248,7 +250,7 @@ used = TRUE to_chat(user, "You break the seal on the bottle, calling upon the dire sludge to awaken...") - var/list/candidates = pollCandidates("Do you want to play as a morph awakened by [user.real_name]?", ROLE_MORPH, 1, 100) + var/list/candidates = pollCandidates("Do you want to play as a magical morph awakened by [user.real_name]?", ROLE_MORPH, 1, 100) if(candidates.len > 0) var/mob/C = pick(candidates) @@ -262,7 +264,7 @@ to_chat(user, "The sludge does not respond to your attempt to awake it. Perhaps you should try again later.") /obj/item/antag_spawner/morph/spawn_antag(client/C, turf/T, type = "", mob/user) - var/mob/living/simple_animal/hostile/morph/M = new /mob/living/simple_animal/hostile/morph(pick(xeno_spawn)) + var/mob/living/simple_animal/hostile/morph/wizard/M = new /mob/living/simple_animal/hostile/morph/wizard(pick(xeno_spawn)) M.key = C.key M.mind.assigned_role = SPECIAL_ROLE_MORPH M.mind.special_role = SPECIAL_ROLE_MORPH diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 37a29d8e79e..9a74edfdc62 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -28,9 +28,9 @@ var/datum/disease/disease = null //Do they start with a pre-spawned disease? var/mob_color //Change the mob's color var/assignedrole - var/banType = "lavaland" + var/banType = ROLE_GHOST var/ghost_usable = TRUE - + var/offstation_role = TRUE // If set to true, the role of the user's mind will be set to offstation /obj/effect/mob_spawn/attack_ghost(mob/user) var/mob/dead/observer/O = user @@ -111,6 +111,7 @@ MM.objectives += new/datum/objective(objective) if(assignedrole) M.mind.assigned_role = assignedrole + M.mind.offstation_role = offstation_role special(M, name) MM.name = M.real_name if(uses > 0) diff --git a/code/modules/awaymissions/maploader/reader.dm b/code/modules/awaymissions/maploader/reader.dm index 816007d4ff8..4d5d464e136 100644 --- a/code/modules/awaymissions/maploader/reader.dm +++ b/code/modules/awaymissions/maploader/reader.dm @@ -176,7 +176,7 @@ var/global/dmm_suite/preloader/_preloader = new for(var/t in block(locate(bounds[MAP_MINX], bounds[MAP_MINY], bounds[MAP_MINZ]), locate(bounds[MAP_MAXX], bounds[MAP_MAXY], bounds[MAP_MAXZ]))) var/turf/T = t //we do this after we load everything in. if we don't; we'll have weird atmos bugs regarding atmos adjacent turfs - T.AfterChange(1,keep_cabling = TRUE) + T.AfterChange(1, keep_cabling = TRUE) return bounds /** @@ -321,7 +321,7 @@ var/global/dmm_suite/preloader/_preloader = new var/turf/T = locate(x,y,z) if(T) if(ispath(path, /turf)) - T.ChangeTurf(path, 1, 0) + T.ChangeTurf(path, defer_change = TRUE, keep_icon = FALSE) instance = T else if(ispath(path, /area)) diff --git a/code/modules/awaymissions/mission_code/academy.dm b/code/modules/awaymissions/mission_code/academy.dm index 9ae1cdb223e..2c764443e72 100644 --- a/code/modules/awaymissions/mission_code/academy.dm +++ b/code/modules/awaymissions/mission_code/academy.dm @@ -3,7 +3,7 @@ /area/awaymission/academy name = "\improper Academy Asteroids" icon_state = "away" - report_alerts = 0 + report_alerts = FALSE /area/awaymission/academy/headmaster name = "\improper Academy Fore Block" diff --git a/code/modules/awaymissions/mission_code/centcomAway.dm b/code/modules/awaymissions/mission_code/centcomAway.dm index 447c53b0fb6..1dc26f932e0 100644 --- a/code/modules/awaymissions/mission_code/centcomAway.dm +++ b/code/modules/awaymissions/mission_code/centcomAway.dm @@ -3,7 +3,7 @@ /area/awaymission/centcomAway name = "XCC-P5831" icon_state = "away" - report_alerts = 0 + report_alerts = FALSE /area/awaymission/centcomAway/general name = "XCC-P5831" diff --git a/code/modules/awaymissions/mission_code/stationCollision.dm b/code/modules/awaymissions/mission_code/stationCollision.dm index e84df256f6b..ed888d65465 100644 --- a/code/modules/awaymissions/mission_code/stationCollision.dm +++ b/code/modules/awaymissions/mission_code/stationCollision.dm @@ -161,7 +161,7 @@ var/sc_safecode5 = "[rand(0,9)]" desc = "Your body becomes weak and your feel your mind slipping away as you try to comprehend what you know can't be possible." move_self = 0 //Contianed narsie does not move! grav_pull = 0 //Contained narsie does not pull stuff in! - var/uneatable = list(/turf/space, /obj/effect/overlay, /atom/movable/lighting_object, /mob/living/simple_animal/hostile/construct) + var/uneatable = list(/turf/space, /obj/effect/overlay, /mob/living/simple_animal/hostile/construct) //Override this to prevent no adminlog runtimes and admin warnings about a singularity without containment /obj/singularity/narsie/sc_Narsie/admin_investigate_setup() @@ -173,14 +173,16 @@ var/sc_safecode5 = "[rand(0,9)]" mezzer() /obj/singularity/narsie/sc_Narsie/consume(var/atom/A) + if(!A.simulated) + return FALSE if(is_type_in_list(A, uneatable)) - return 0 + return FALSE if(istype(A,/mob/living)) var/mob/living/L = A L.gib() else if(istype(A,/obj/)) var/obj/O = A - O.ex_act(1.0) + O.ex_act(1) if(O) qdel(O) else if(isturf(A)) var/turf/T = A diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 2675d778366..35f346402f9 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -258,8 +258,8 @@ item_state = "head_mirror" sprite_sheets = list( - "Vox" = 'icons/mob/species/vox/head.dmi', - "Drask" = 'icons/mob/species/drask/head.dmi', - "Grey" = 'icons/mob/species/grey/head.dmi' + "Vox" = 'icons/mob/species/vox/head.dmi', + "Drask" = 'icons/mob/species/drask/head.dmi', + "Grey" = 'icons/mob/species/grey/head.dmi' ) diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 6a33cdc5a1a..289250befac 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -70,6 +70,15 @@ armor = list("melee" = 10, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 0, "bio" = 50, "rad" = 0) resistance_flags = FIRE_PROOF + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/mask.dmi', + "Unathi" = 'icons/mob/species/unathi/mask.dmi', + "Tajaran" = 'icons/mob/species/tajaran/mask.dmi', + "Vulpkanin" = 'icons/mob/species/vulpkanin/mask.dmi', + "Drask" = 'icons/mob/species/drask/mask.dmi', + "Grey" = 'icons/mob/species/grey/mask.dmi' + ) + /obj/item/clothing/mask/gas/explorer/attack_self(mob/user) adjustmask(user) diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm index 57588f29d62..e355aead650 100644 --- a/code/modules/clothing/spacesuits/plasmamen.dm +++ b/code/modules/clothing/spacesuits/plasmamen.dm @@ -235,6 +235,16 @@ base_state = "plasmamanMiner_helmet" armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50) +/obj/item/clothing/suit/space/eva/plasmaman/explorer + name = "plasmaman explorer suit" + icon_state = "plasmamanExplorer_suit" + armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 50, bio = 100, rad = 50, fire = 50, acid = 50) + +/obj/item/clothing/head/helmet/space/eva/plasmaman/explorer + name = "plasmaman explorer helmet" + icon_state = "plasmamanExplorer_helmet0" + base_state = "plasmamanExplorer_helmet" + armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 50, bio = 100, rad = 50, fire = 50, acid = 50) // MEDSCI diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm index bf9d9a4569b..6bfd40ad0ad 100644 --- a/code/modules/clothing/under/jobs/civilian.dm +++ b/code/modules/clothing/under/jobs/civilian.dm @@ -224,6 +224,8 @@ item_state = "explorer" item_color = "explorer" + sprite_sheets = list() + /obj/item/clothing/under/barber desc = "It's a barber's uniform." name = "barber's uniform" diff --git a/code/modules/events/wormholes.dm b/code/modules/events/wormholes.dm index be145752671..811eed6b9de 100644 --- a/code/modules/events/wormholes.dm +++ b/code/modules/events/wormholes.dm @@ -34,7 +34,6 @@ qdel(O) wormholes.Cut() - /obj/effect/portal/wormhole name = "wormhole" desc = "It looks highly unstable; It could close at any moment." @@ -42,23 +41,26 @@ icon_state = "anom" failchance = 0 -/obj/effect/portal/wormhole/attack_hand(mob/user) - teleport(user) +/obj/effect/portal/wormhole/can_teleport(atom/movable/M) + . = ..() -/obj/effect/portal/wormhole/attackby(obj/item/I, mob/user, params) - teleport(user) + if(istype(M, /obj/singularity)) + . = FALSE /obj/effect/portal/wormhole/teleport(atom/movable/M) - if(istype(M, /obj/effect)) //sparks don't teleport - return - if(M.anchored && istype(M, /obj/mecha)) - return + if(!can_teleport(M)) + return FALSE - if(istype(M, /atom/movable)) - var/turf/target - if(GLOB.portals.len) - var/obj/effect/portal/P = pick(GLOB.portals) - if(P && isturf(P.loc)) - target = P.loc - if(!target) return - do_teleport(M, target, 1, 1, 0, 0) ///You will appear adjacent to the beacon + var/turf/target + if(GLOB.portals.len) + var/obj/effect/portal/P = pick(GLOB.portals) + if(P && isturf(P.loc)) + target = P.loc + + if(!target) + return FALSE + + if(!do_teleport(M, target, 1, TRUE)) ///You will appear adjacent to the beacon + return FALSE + + return TRUE diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm index 785231a588d..41c5ff0bdf3 100644 --- a/code/modules/food_and_drinks/drinks/drinks.dm +++ b/code/modules/food_and_drinks/drinks/drinks.dm @@ -354,31 +354,6 @@ icon_state = "goonbag" list_reagents = list("wine" = 70) -/obj/item/reagent_containers/food/drinks/waterbottle - name = "bottle of water" - desc = "A bottle of water filled at an old Earth bottling facility." - icon = 'icons/obj/drinks.dmi' - icon_state = "smallbottle" - item_state = "bottle" - list_reagents = list("water" = 49.5, "fluorine" = 0.5) //see desc, don't think about it too hard - materials = list(MAT_GLASS = 0) - volume = 50 - amount_per_transfer_from_this = 10 - -/obj/item/reagent_containers/food/drinks/waterbottle/empty - list_reagents = list() - -/obj/item/reagent_containers/food/drinks/waterbottle/large - desc = "A fresh commercial-sized bottle of water." - icon_state = "largebottle" - materials = list(MAT_GLASS = 0) - list_reagents = list("water" = 100) - volume = 100 - amount_per_transfer_from_this = 20 - -/obj/item/reagent_containers/food/drinks/waterbottle/large/empty - list_reagents = list() - /obj/item/reagent_containers/food/drinks/oilcan name = "oil can" desc = "Contains oil intended for use on cyborgs, robots, and other synthetics." diff --git a/code/modules/food_and_drinks/food/foods/meat.dm b/code/modules/food_and_drinks/food/foods/meat.dm index 7d557561e49..eb9569ad356 100644 --- a/code/modules/food_and_drinks/food/foods/meat.dm +++ b/code/modules/food_and_drinks/food/foods/meat.dm @@ -129,7 +129,7 @@ name = "goliath meat" desc = "A slab of goliath meat. It's not very edible now, but it cooks great in lava." icon_state = "goliathmeat" - list_reagents = list("nutriment" = 3, "toxin" = 5) + list_reagents = list("protein" = 3, "toxin" = 5) /obj/item/reagent_containers/food/snacks/goliath/burn() visible_message("[src] finishes cooking!") @@ -222,6 +222,7 @@ resistance_flags = LAVA_PROOF | FIRE_PROOF icon_state = "goliathsteak" trash = null + list_reagents = list("protein" = 6, "vitamin" = 2) ////////////////////// // Cubes // @@ -237,8 +238,9 @@ var/datum/species/monkey_type = /datum/species/monkey list_reagents = list("nutriment" = 2) -/obj/item/reagent_containers/food/snacks/monkeycube/water_act(volume, temperature) - if(volume >= 5) +/obj/item/reagent_containers/food/snacks/monkeycube/water_act(volume, temperature, source, method = TOUCH) + . = ..() + if(volume >= 1) return Expand() /obj/item/reagent_containers/food/snacks/monkeycube/wash(mob/user, atom/source) diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm index 132b2257bfd..48b4453f6d4 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm @@ -11,17 +11,15 @@ idle_power_usage = 5 active_power_usage = 100 var/max_n_of_items = 1500 - var/icon_on = "smartfridge" - var/icon_off = "smartfridge-off" - var/icon_panel = "smartfridge-panel" var/item_quants = list() - var/seconds_electrified = 0; - var/shoot_inventory = 0 - var/locked = 0 - var/scan_id = 1 - var/is_secure = 0 + var/seconds_electrified = 0 + var/shoot_inventory = FALSE + var/locked = FALSE + var/scan_id = TRUE + var/is_secure = FALSE var/can_dry = FALSE var/drying = FALSE + var/visible_contents = TRUE var/datum/wires/smartfridge/wires = null /obj/machinery/smartfridge/New() @@ -65,8 +63,6 @@ desc = "When you need seeds fast!" icon = 'icons/obj/vending.dmi' icon_state = "seeds" - icon_on = "seeds" - icon_off = "seeds-off" /obj/machinery/smartfridge/seeds/accept_check(obj/item/O) if(istype(O,/obj/item/seeds/)) @@ -77,7 +73,6 @@ name = "\improper Refrigerated Medicine Storage" desc = "A refrigerated storage unit for storing medicine and chemicals." icon_state = "smartfridge" //To fix the icon in the map editor. - icon_on = "smartfridge" /obj/machinery/smartfridge/medbay/accept_check(obj/item/O) if(istype(O,/obj/item/reagent_containers/glass)) @@ -104,7 +99,6 @@ name = "\improper Secure Refrigerated Medicine Storage" desc = "A refrigerated storage unit for storing medicine and chemicals." icon_state = "smartfridge" //To fix the icon in the map editor. - icon_on = "smartfridge" req_one_access_txt = "5;33" /obj/machinery/smartfridge/secure/medbay/accept_check(obj/item/O) @@ -122,7 +116,6 @@ name = "\improper Smart Chemical Storage" desc = "A refrigerated storage unit for medicine and chemical storage." icon_state = "smartfridge" //To fix the icon in the map editor. - icon_on = "smartfridge" req_access_txt = "33" var/list/spawn_meds = list() @@ -162,12 +155,10 @@ desc = "A machine capable of storing a variety of disks. Denoted by most as the DSU (disk storage unit)." icon_state = "disktoaster" pass_flags = PASSTABLE + visible_contents = FALSE /obj/machinery/smartfridge/disks/accept_check(obj/item/O) - if(istype(O, /obj/item/disk/)) - return TRUE - else - return FALSE + return istype(O, /obj/item/disk) // ---------------------------- // Virology Medical Smartfridge @@ -227,7 +218,7 @@ /obj/machinery/smartfridge/update_icon() if(stat & (BROKEN|NOPOWER)) icon_state = "[initial(icon_state)]-off" - else + else if(visible_contents) switch(contents.len) if(0) icon_state = "[initial(icon_state)]" @@ -237,6 +228,8 @@ icon_state = "[initial(icon_state)]2" if(76 to INFINITY) icon_state = "[initial(icon_state)]3" + else + icon_state = "[initial(icon_state)]" /******************* * Item Adding @@ -460,13 +453,12 @@ name = "drying rack" desc = "A wooden contraption, used to dry plant products, food and leather." icon = 'icons/obj/hydroponics/equipment.dmi' - icon_state = "drying_rack_on" + icon_state = "drying_rack" use_power = IDLE_POWER_USE idle_power_usage = 5 active_power_usage = 200 - icon_on = "drying_rack_on" - icon_off = "drying_rack" can_dry = TRUE + visible_contents = FALSE /obj/machinery/smartfridge/drying_rack/New() ..() @@ -524,6 +516,7 @@ /obj/machinery/smartfridge/drying_rack/update_icon() ..() + overlays.Cut() if(drying) overlays += "drying_rack_drying" diff --git a/code/modules/library/random_books.dm b/code/modules/library/random_books.dm index 9fc396f5eff..f36e493ce3f 100644 --- a/code/modules/library/random_books.dm +++ b/code/modules/library/random_books.dm @@ -49,7 +49,7 @@ if(prob(25)) category = null var/c = category? " AND category='[sanitizeSQL(category)]'" :"" - var/DBQuery/query_get_random_books = dbcon.NewQuery("SELECT * FROM [format_table_name("library")] WHERE isnull(flagged)[c] GROUP BY title ORDER BY rand() LIMIT [amount];") + var/DBQuery/query_get_random_books = dbcon.NewQuery("SELECT * FROM [format_table_name("library")] WHERE (isnull(flagged) OR flagged = 0)[c] GROUP BY title ORDER BY rand() LIMIT [amount];") query_get_random_books.Execute() while(query_get_random_books.NextRow()) var/obj/item/book/B = new(location) diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm new file mode 100644 index 00000000000..d846e065761 --- /dev/null +++ b/code/modules/mining/equipment/survival_pod.dm @@ -0,0 +1,357 @@ +/area/survivalpod + name = "\improper Emergency Shelter" + icon_state = "away" + requires_power = FALSE + has_gravity = TRUE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED + +/obj/item/survivalcapsule + name = "bluespace shelter capsule" + desc = "An emergency shelter stored within a pocket of bluespace." + icon_state = "capsule" + icon = 'icons/obj/mining.dmi' + w_class = WEIGHT_CLASS_TINY + origin_tech = "engineering=3;bluespace=3" + var/template_id = "shelter_alpha" + var/datum/map_template/shelter/template + var/used = FALSE + +/obj/item/survivalcapsule/proc/get_template() + if(template) + return + template = shelter_templates[template_id] + if(!template) + log_runtime("Shelter template ([template_id]) not found!", src) + qdel(src) + +/obj/item/survivalcapsule/examine(mob/user) + . = ..() + get_template() + to_chat(user, "This capsule has the [template.name] stored.") + to_chat(user, template.description) + +/obj/item/survivalcapsule/attack_self() + // Can't grab when capsule is New() because templates aren't loaded then + get_template() + if(used == FALSE) + loc.visible_message("[src] begins to shake. Stand back!") + used = TRUE + sleep(50) + var/turf/deploy_location = get_turf(src) + var/status = template.check_deploy(deploy_location) + switch(status) + if(SHELTER_DEPLOY_BAD_AREA) + loc.visible_message("[src] will not function in this area.") + if(SHELTER_DEPLOY_BAD_TURFS, SHELTER_DEPLOY_ANCHORED_OBJECTS) + var/width = template.width + var/height = template.height + loc.visible_message("[src] doesn't have room to deploy! You need to clear a [width]x[height] area!") + + if(status != SHELTER_DEPLOY_ALLOWED) + used = FALSE + return + + playsound(get_turf(src), 'sound/effects/phasein.ogg', 100, 1) + + var/turf/T = deploy_location + if(!is_mining_level(T.z))//only report capsules away from the mining/lavaland level + message_admins("[key_name_admin(usr)] ([ADMIN_QUE(usr,"?")]) ([ADMIN_FLW(usr,"FLW")]) activated a bluespace capsule away from the mining level! (JMP)") + log_admin("[key_name(usr)] activated a bluespace capsule away from the mining level at [T.x], [T.y], [T.z]") + template.load(deploy_location, centered = TRUE) + new /obj/effect/particle_effect/smoke(get_turf(src)) + qdel(src) + +/obj/item/survivalcapsule/luxury + name = "luxury bluespace shelter capsule" + desc = "An exorbitantly expensive luxury suite stored within a pocket of bluespace." + origin_tech = "engineering=3;bluespace=4" + template_id = "shelter_beta" + +//Pod turfs and objects + +//Window +/obj/structure/window/shuttle/survival_pod + name = "pod window" + icon = 'icons/obj/smooth_structures/pod_window.dmi' + icon_state = "smooth" + dir = FULLTILE_WINDOW_DIR + max_integrity = 100 + fulltile = TRUE + reinf = TRUE + heat_resistance = 1600 + armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 50, "bio" = 100, "rad" = 100) + smooth = SMOOTH_MORE + canSmoothWith = list(/turf/simulated/wall/mineral/titanium/survival, /obj/machinery/door/airlock/survival_pod, /obj/structure/window/shuttle/survival_pod) + explosion_block = 3 + level = 3 + glass_type = /obj/item/stack/sheet/titaniumglass + glass_amount = 2 + +/obj/structure/window/reinforced/survival_pod + name = "pod window" + icon = 'icons/obj/lavaland/survival_pod.dmi' + icon_state = "pwindow" + +//Floors +/turf/simulated/floor/pod + name = "pod floor" + icon_state = "podfloor" + icon_regular_floor = "podfloor" + floor_tile = /obj/item/stack/tile/pod + +/turf/simulated/floor/pod/light + icon_state = "podfloor_light" + icon_regular_floor = "podfloor_light" + floor_tile = /obj/item/stack/tile/pod/light + +/turf/simulated/floor/pod/dark + icon_state = "podfloor_dark" + icon_regular_floor = "podfloor_dark" + floor_tile = /obj/item/stack/tile/pod/dark + +//Door +/obj/machinery/door/airlock/survival_pod + icon = 'icons/obj/doors/airlocks/survival/survival.dmi' + overlays_file = 'icons/obj/doors/airlocks/survival/survival_overlays.dmi' + assemblytype = /obj/structure/door_assembly/door_assembly_pod + +/obj/machinery/door/airlock/survival_pod/glass + opacity = FALSE + glass = TRUE + +/obj/structure/door_assembly/door_assembly_pod + name = "pod airlock assembly" + icon = 'icons/obj/doors/airlocks/survival/survival.dmi' + base_name = "pod airlock" + overlays_file = 'icons/obj/doors/airlocks/survival/survival_overlays.dmi' + airlock_type = /obj/machinery/door/airlock/survival_pod + glass_type = /obj/machinery/door/airlock/survival_pod/glass + +//Windoor +/obj/machinery/door/window/survival_pod + icon = 'icons/obj/lavaland/survival_pod.dmi' + icon_state = "windoor" + base_state = "windoor" + +//Table +/obj/structure/table/survival_pod + icon = 'icons/obj/lavaland/survival_pod.dmi' + icon_state = "table" + smooth = SMOOTH_FALSE + +//Sleeper +/obj/machinery/sleeper/survival_pod + icon = 'icons/obj/lavaland/survival_pod.dmi' + icon_state = "sleeper-open" + density = FALSE + +/obj/machinery/sleeper/survival_pod/New() + ..() + component_parts = list() + component_parts += new /obj/item/circuitboard/sleeper/survival(null) + var/obj/item/stock_parts/matter_bin/B = new(null) + B.rating = initial_bin_rating + component_parts += B + component_parts += new /obj/item/stock_parts/manipulator(null) + component_parts += new /obj/item/stock_parts/console_screen(null) + component_parts += new /obj/item/stock_parts/console_screen(null) + component_parts += new /obj/item/stack/cable_coil(null, 1) + RefreshParts() + +//NanoMed +/obj/machinery/vending/wallmed1/survival_pod + name = "survival pod medical supply" + desc = "Wall-mounted Medical Equipment dispenser. This one seems just a tiny bit smaller." + req_access = list() + refill_canister = null + + products = list(/obj/item/reagent_containers/food/pill/patch/styptic = 5, + /obj/item/reagent_containers/food/pill/patch/silver_sulf = 5, + /obj/item/reagent_containers/food/pill/charcoal = 2, + /obj/item/stack/medical/bruise_pack/advanced = 1, + /obj/item/stack/medical/ointment/advanced = 1, + /obj/item/reagent_containers/hypospray/autoinjector = 2, + /obj/item/stack/medical/splint = 1) + contraband = list(/obj/item/reagent_containers/food/pill/tox = 2, + /obj/item/reagent_containers/food/pill/morphine = 2) + +//Computer +/obj/item/gps/computer + name = "pod computer" + icon_state = "pod_computer" + icon = 'icons/obj/lavaland/pod_computer.dmi' + anchored = 1 + density = 1 + pixel_y = -32 + +/obj/item/gps/computer/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/wrench)) + playsound(loc, W.usesound, 50, 1) + user.visible_message("[user] disassembles the gps.", \ + "You start to disassemble the gps...", "You hear clanking and banging noises.") + if(do_after(user, 20 * W.toolspeed, target = src)) + new /obj/item/gps(loc) + qdel(src) + return ..() + +/obj/item/gps/computer/attack_hand(mob/user) + attack_self(user) + +//Bed +/obj/structure/bed/pod + icon = 'icons/obj/lavaland/survival_pod.dmi' + icon_state = "bed" + +//Survival Storage Unit +/obj/machinery/smartfridge/survival_pod + name = "survival pod storage" + desc = "A heated storage unit." + icon_state = "donkvendor" + icon = 'icons/obj/lavaland/donkvendor.dmi' + light_range = 8 + light_power = 1.2 + light_color = "#DDFFD3" + max_n_of_items = 10 + pixel_y = -4 + can_deconstruct = FALSE + var/empty = FALSE + +/obj/machinery/smartfridge/survival_pod/Initialize(mapload) + . = ..() + + if(empty) + return + + for(var/i in 1 to 5) + var/obj/item/reagent_containers/food/snacks/warmdonkpocket_weak/W = new(src) + load(W) + if(prob(50)) + var/obj/item/storage/pill_bottle/dice/D = new(src) + load(D) + else + var/obj/item/instrument/guitar/G = new(src) + load(G) + +/obj/machinery/smartfridge/survival_pod/update_icon() + return + +/obj/machinery/smartfridge/survival_pod/accept_check(obj/item/O) + return isitem(O) + +/obj/machinery/smartfridge/survival_pod/empty + name = "dusty survival pod storage" + desc = "A heated storage unit. This one's seen better days." + empty = TRUE + +//Fans +/obj/structure/fans + icon = 'icons/obj/lavaland/survival_pod.dmi' + icon_state = "fans" + name = "environmental regulation system" + desc = "A large machine releasing a constant gust of air." + anchored = 1 + density = 1 + var/arbitraryatmosblockingvar = 1 + var/buildstacktype = /obj/item/stack/sheet/metal + var/buildstackamount = 5 + +/obj/structure/fans/Initialize(loc) + ..() + air_update_turf(1) + +/obj/structure/fans/Destroy() + arbitraryatmosblockingvar = 0 + air_update_turf(1) + return ..() + +/obj/structure/fans/CanAtmosPass(turf/T) + return !arbitraryatmosblockingvar + +/obj/structure/fans/deconstruct() + if(buildstacktype) + new buildstacktype(loc, buildstackamount) + qdel(src) + +/obj/structure/fans/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/wrench)) + playsound(loc, W.usesound, 50, 1) + user.visible_message("[user] disassembles the fan.", \ + "You start to disassemble the fan...", "You hear clanking and banging noises.") + if(do_after(user, 20 * W.toolspeed, target = src)) + deconstruct() + return ..() + +/obj/structure/fans/tiny + name = "tiny fan" + desc = "A tiny fan, releasing a thin gust of air." + layer = TURF_LAYER+0.1 + density = 0 + icon_state = "fan_tiny" + buildstackamount = 2 + +/obj/structure/fans/tiny/invisible + name = "air flow blocker" + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF + unacidable = TRUE + invisibility = INVISIBILITY_ABSTRACT + +//Signs +/obj/structure/sign/mining + name = "nanotrasen mining corps sign" + desc = "A sign of relief for weary miners, and a warning for would-be competitors to Nanotrasen's mining claims." + icon = 'icons/turf/walls/survival_pod_walls.dmi' + icon_state = "ntpod" + +/obj/structure/sign/mining/survival + name = "shelter sign" + desc = "A high visibility sign designating a safe shelter." + icon = 'icons/turf/walls/survival_pod_walls.dmi' + icon_state = "survival" + +//Fluff +/obj/structure/tubes + icon_state = "tubes" + icon = 'icons/obj/lavaland/survival_pod.dmi' + name = "tubes" + anchored = 1 + layer = MOB_LAYER - 0.2 + density = 0 + +/obj/structure/tubes/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/wrench)) + playsound(loc, W.usesound, 50, 1) + user.visible_message("[user] disassembles [src].", \ + "You start to disassemble [src]...", "You hear clanking and banging noises.") + if(do_after(user, 20 * W.toolspeed, target = src)) + new /obj/item/stack/rods(loc) + qdel(src) + return ..() + +/obj/item/fakeartefact + name = "expensive forgery" + icon = 'icons/mob/screen_gen.dmi' + icon_state = "x2" + var/possible = list(/obj/item/ship_in_a_bottle, + /obj/item/gun/energy/pulse, + /obj/item/sleeping_carp_scroll, + /obj/item/shield/changeling, + /obj/item/lava_staff, + /obj/item/katana/energy, + /obj/item/hierophant_staff, + /obj/item/storage/toolbox/green/memetic, + /obj/item/gun/projectile/automatic/l6_saw, + /obj/item/gun/magic/staff/chaos, + /obj/item/gun/magic/staff/spellblade, + /obj/item/gun/magic/wand/death, + /obj/item/gun/magic/wand/fireball, + /obj/item/stack/telecrystal/twenty, + /obj/item/banhammer) + +/obj/item/fakeartefact/New() + . = ..() + var/obj/item/I = pick(possible) + name = initial(I.name) + icon = initial(I.icon) + desc = initial(I.desc) + icon_state = initial(I.icon_state) + item_state = initial(I.item_state) diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 787d60797d4..ade3c1ffd5c 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -487,7 +487,7 @@ /datum/data/mining_equipment/New(name, path, equipment_cost) equipment_name = name equipment_path = path - equipment_cost = cost + cost = equipment_cost /obj/machinery/mineral/equipment_vendor/New() ..() @@ -701,7 +701,7 @@ /obj/item/wormhole_jaunter name = "wormhole jaunter" - desc = "A single use device harnessing outdated wormhole technology, Nanotrasen has since turned its eyes to blue space for more accurate teleportation. The wormholes it creates are unpleasant to travel through, to say the least." + desc = "A single use device harnessing outdated wormhole technology, Nanotrasen has since turned its eyes to bluespace for more accurate teleportation. The wormholes it creates are unpleasant to travel through, to say the least.\nThanks to modifications provided by the Free Golems, this jaunter can be worn on the belt to provide protection from chasms." icon = 'icons/obj/items.dmi' icon_state = "Jaunter" item_state = "electronic" @@ -710,15 +710,16 @@ throw_speed = 3 throw_range = 5 origin_tech = "bluespace=2" + slot_flags = SLOT_BELT /obj/item/wormhole_jaunter/attack_self(mob/user) - user.visible_message("[user.name] activates the [src.name]!") + user.visible_message("[user.name] activates the [name]!") activate(user, TRUE) /obj/item/wormhole_jaunter/proc/turf_check(mob/user) var/turf/device_turf = get_turf(user) if(!device_turf || !is_teleport_allowed(device_turf.z)) - to_chat(user, "You're having difficulties getting the [src.name] to work.") + to_chat(user, "You're having difficulties getting the [name] to work.") return FALSE return TRUE @@ -738,49 +739,42 @@ var/list/L = get_destinations(user) if(!L.len) - to_chat(user, "The [src.name] found no beacons in the world to anchor a wormhole to.") + to_chat(user, "The [name] found no beacons in the world to anchor a wormhole to.") return var/chosen_beacon = pick(L) - var/obj/effect/portal/wormhole/jaunt_tunnel/J = new (get_turf(src), src, 100, null, FALSE, get_turf(chosen_beacon)) + var/obj/effect/portal/jaunt_tunnel/J = new(get_turf(src), get_turf(chosen_beacon), src, 100) if(adjacent) try_move_adjacent(J) + else + J.teleport(user) playsound(src,'sound/effects/sparks4.ogg',50,1) qdel(src) /obj/item/wormhole_jaunter/proc/chasm_react(mob/user) - if(user.get_item_by_slot(SLOT_BELT) == src) + if(user.get_item_by_slot(slot_belt) == src) to_chat(user, "Your [name] activates, saving you from the chasm!") activate(user, FALSE) else to_chat(user, "[src] is not attached to your belt, preventing it from saving you from the chasm. RIP.") -/obj/effect/portal/wormhole/jaunt_tunnel +/obj/effect/portal/jaunt_tunnel name = "jaunt tunnel" icon = 'icons/effects/effects.dmi' icon_state = "bhole3" desc = "A stable hole in the universe made by a wormhole jaunter. Turbulent doesn't even begin to describe how rough passage through one of these is, but at least it will always get you somewhere near a beacon." + failchance = 0 -/obj/effect/portal/wormhole/jaunt_tunnel/teleport(atom/movable/M) - if(istype(M, /obj/effect)) - return - if(istype(M, /atom/movable)) - if(do_teleport(M, target, 6)) - if(isliving(M)) - var/mob/living/L = M - L.Weaken(3) - if(ishuman(L)) - shake_camera(L, 20, 1) - var/mob/living/carbon/human/H = L - spawn(20) - if(H && H.check_has_mouth()) - H.visible_message("[L.name] vomits from travelling through the [src.name]!", "You throw up from travelling through the [src.name]!") - H.nutrition -= 20 - H.adjustToxLoss(-3) - var/turf/T = get_turf(H) - T.add_vomit_floor() - else - visible_message("[src] flickers and fails, due to bluespace interference!") - qdel(src) +/obj/effect/portal/jaunt_tunnel/teleport(atom/movable/M) + . = ..() + if(.) + // KERPLUNK + playsound(M,'sound/weapons/resonator_blast.ogg', 50, 1) + if(iscarbon(M)) + var/mob/living/carbon/L = M + L.Weaken(6) + if(ishuman(L)) + shake_camera(L, 20, 1) + addtimer(CALLBACK(L, /mob/living/carbon.proc/vomit), 20) /**********************Resonator**********************/ diff --git a/code/modules/mining/explorer_gear.dm b/code/modules/mining/explorer_gear.dm index 9cae3f42f19..6453f54c979 100644 --- a/code/modules/mining/explorer_gear.dm +++ b/code/modules/mining/explorer_gear.dm @@ -14,15 +14,30 @@ allowed = list(/obj/item/flashlight, /obj/item/tank, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe) resistance_flags = FIRE_PROOF + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/suit.dmi', + "Drask" = 'icons/mob/species/drask/suit.dmi', + "Tajaran" = 'icons/mob/species/tajaran/suit.dmi', + "Unathi" = 'icons/mob/species/unathi/suit.dmi', + "Vulpkanin" = 'icons/mob/species/vulpkanin/suit.dmi' + ) + /obj/item/clothing/head/hooded/explorer name = "explorer hood" desc = "An armoured hood for exploring harsh environments." icon_state = "explorer" item_state = "explorer" body_parts_covered = HEAD - flags = BLOCKHAIR + flags = BLOCKHAIR | NODROP flags_cover = HEADCOVERSEYES min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 50) - resistance_flags = FIRE_PROOF \ No newline at end of file + resistance_flags = FIRE_PROOF + + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/head.dmi', + "Drask" = 'icons/mob/species/drask/head.dmi', + "Grey" = 'icons/mob/species/grey/head.dmi', + "Skrell" = 'icons/mob/species/skrell/head.dmi' + ) \ No newline at end of file diff --git a/code/modules/mining/lavaland/ash_flora.dm b/code/modules/mining/lavaland/ash_flora.dm index 0e0d248d8b7..ab714c6f1a6 100644 --- a/code/modules/mining/lavaland/ash_flora.dm +++ b/code/modules/mining/lavaland/ash_flora.dm @@ -4,6 +4,7 @@ icon_state = "l_mushroom" name = "large mushrooms" desc = "A number of large mushrooms, covered in a faint layer of ash and what can only be spores." + anchored = TRUE var/harvested_name = "shortened mushrooms" var/harvested_desc = "Some quickly regrowing mushrooms, formerly known to be quite large." var/needs_sharp_harvest = TRUE diff --git a/code/modules/mining/lavaland/loot/ashdragon_loot.dm b/code/modules/mining/lavaland/loot/ashdragon_loot.dm index a213a7cfe17..4f8f01498d0 100644 --- a/code/modules/mining/lavaland/loot/ashdragon_loot.dm +++ b/code/modules/mining/lavaland/loot/ashdragon_loot.dm @@ -72,7 +72,7 @@ var/mob/dead/observer/current_spirits = list() for(var/mob/dead/observer/O in GLOB.player_list) - if(is_type_in_list(O.following, contents)) + if((O.following in contents)) ghost_counter++ O.invisibility = 0 current_spirits |= O @@ -198,7 +198,7 @@ user.visible_message("[user] turns \the [T] into [transform_string]!") message_admins("[key_name_admin(user)] fired the lava staff at [get_area(target)] (JMP).") log_game("[key_name(user)] fired the lava staff at [get_area(target)] ([T.x], [T.y], [T.z]).") - T.ChangeTurf(turf_type) + T.TerraformTurf(turf_type, keep_icon = FALSE) timer = world.time + create_cooldown qdel(L) else @@ -207,7 +207,7 @@ return else user.visible_message("[user] turns \the [T] into [reset_string]!") - T.ChangeTurf(reset_turf_type) + T.TerraformTurf(reset_turf_type, keep_icon = FALSE) timer = world.time + reset_cooldown playsound(T,'sound/magic/fireball.ogg', 200, 1) diff --git a/code/modules/mining/lavaland/loot/colossus_loot.dm b/code/modules/mining/lavaland/loot/colossus_loot.dm index 33e4a9297c9..2490f6f48db 100644 --- a/code/modules/mining/lavaland/loot/colossus_loot.dm +++ b/code/modules/mining/lavaland/loot/colossus_loot.dm @@ -5,8 +5,6 @@ desc = "A completely indestructible chunk of crystal, rumoured to predate the start of this universe. It looks like you could store things inside it." icon = 'icons/obj/lavaland/artefacts.dmi' icon_state = "blackbox" - icon_on = "blackbox" - icon_off = "blackbox" luminosity = 8 max_n_of_items = INFINITY unacidable = 1 diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 573ff630350..d8286bc8698 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -30,7 +30,6 @@ if(6) new /obj/item/pickaxe/diamond(src) if(7) - new /obj/item/clothing/head/culthood(src) new /obj/item/clothing/suit/hooded/cultrobes(src) new /obj/item/bedsheet/cult(src) if(8) diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index 860692673a5..03b8404b1f0 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -20,18 +20,27 @@ anchored = TRUE var/obj/machinery/mineral/processing_unit/machine = null var/machinedir = EAST + speed_process = TRUE -/obj/machinery/mineral/processing_unit_console/New() - ..() +/obj/machinery/mineral/processing_unit_console/Initialize(mapload) + . = ..() machine = locate(/obj/machinery/mineral/processing_unit, get_step(src, machinedir)) if(machine) machine.CONSOLE = src else - qdel(src) + return INITIALIZE_HINT_QDEL + +/obj/machinery/mineral/processing_unit_console/attack_ghost(mob/user) + return ui_interact(user) /obj/machinery/mineral/processing_unit_console/attack_hand(mob/user) if(..()) - return + return TRUE + + return ui_interact(user) + +/obj/machinery/mineral/processing_unit_console/ui_interact(mob/user) + . = ..() if(!machine) return @@ -43,7 +52,8 @@ /obj/machinery/mineral/processing_unit_console/Topic(href, href_list) if(..()) - return + return TRUE + usr.set_machine(src) add_fingerprint(usr) @@ -59,15 +69,14 @@ machine.on = (href_list["set_on"] == "on") updateUsrDialog() + return TRUE /obj/machinery/mineral/processing_unit_console/Destroy() machine = null return ..() - /**********************Mineral processing unit**************************/ - /obj/machinery/mineral/processing_unit name = "furnace" icon = 'icons/obj/machines/mining_machines.dmi' @@ -81,8 +90,8 @@ var/datum/research/files speed_process = TRUE -/obj/machinery/mineral/processing_unit/New() - ..() +/obj/machinery/mineral/processing_unit/Initialize(mapload) + . = ..() AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TRANQUILLITE, MAT_TITANIUM, MAT_BLUESPACE), INFINITY, TRUE, /obj/item/stack) files = new /datum/research/smelter(src) @@ -99,6 +108,7 @@ for(var/obj/item/stack/ore/O in T) process_ore(O) CHECK_TICK + if(on) if(selected_material) smelt_ore() @@ -106,11 +116,9 @@ else if(selected_alloy) smelt_alloy() - if(CONSOLE) CONSOLE.updateUsrDialog() - /obj/machinery/mineral/processing_unit/proc/process_ore(obj/item/stack/ore/O) GET_COMPONENT(materials, /datum/component/material_container) var/material_amount = materials.get_item_material_amount(O) @@ -167,7 +175,6 @@ var/out = get_step(src, output_dir) materials.retrieve_sheets(sheets_to_remove, selected_material, out) - /obj/machinery/mineral/processing_unit/proc/smelt_alloy() var/datum/design/alloy = files.FindDesignByID(selected_alloy) //check if it's a valid design if(!alloy) diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 72b36bd38a5..8ba8b13c09c 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -93,8 +93,8 @@ icon_state = "pickaxe" flags = CONDUCT slot_flags = SLOT_BELT - force = 15.0 - throwforce = 10.0 + force = 15 + throwforce = 10 item_state = "pickaxe" w_class = WEIGHT_CLASS_BULKY materials = list(MAT_METAL=2000) //one sheet, but where can you make them? @@ -114,6 +114,13 @@ name = "emergency disembarkation tool" desc = "For extracting yourself from rough landings." +/obj/item/pickaxe/safety + name = "safety pickaxe" + desc = "A pickaxe designed to be only effective at digging rock and ore, very ineffective as a weapon." + force = 1 + throwforce = 1 + attack_verb = list("ineffectively hit") + /obj/item/pickaxe/silver name = "silver-plated pickaxe" icon_state = "spickaxe" @@ -193,8 +200,8 @@ icon_state = "shovel" flags = CONDUCT slot_flags = SLOT_BELT - force = 8.0 - throwforce = 4.0 + force = 8 + throwforce = 4 item_state = "shovel" w_class = WEIGHT_CLASS_NORMAL materials = list(MAT_METAL=50) @@ -208,11 +215,17 @@ desc = "A small tool for digging and moving dirt." icon_state = "spade" item_state = "spade" - force = 5.0 - throwforce = 7.0 + force = 5 + throwforce = 7 w_class = WEIGHT_CLASS_SMALL toolspeed = 2 +/obj/item/shovel/safety + name = "safety shovel" + desc = "A large tool for digging and moving dirt. Was modified with extra safety, making it ineffective as a weapon." + force = 1 + throwforce = 1 + attack_verb = list("ineffectively hit") /**********************Mining car (Crate like thing, not the rail car)**************************/ @@ -279,351 +292,3 @@ colorindex = 0 icon_state = "mobcap[colorindex]" update_icon() - -/*****************************Survival Pod********************************/ - - -/area/survivalpod - name = "\improper Emergency Shelter" - icon_state = "away" - requires_power = FALSE - has_gravity = TRUE - dynamic_lighting = DYNAMIC_LIGHTING_FORCED - -/obj/item/survivalcapsule - name = "bluespace shelter capsule" - desc = "An emergency shelter stored within a pocket of bluespace." - icon_state = "capsule" - icon = 'icons/obj/mining.dmi' - w_class = WEIGHT_CLASS_TINY - origin_tech = "engineering=3;bluespace=3" - var/template_id = "shelter_alpha" - var/datum/map_template/shelter/template - var/used = FALSE - -/obj/item/survivalcapsule/proc/get_template() - if(template) - return - template = shelter_templates[template_id] - if(!template) - log_runtime("Shelter template ([template_id]) not found!", src) - qdel(src) - -/obj/item/survivalcapsule/examine(mob/user) - . = ..() - get_template() - to_chat(user, "This capsule has the [template.name] stored.") - to_chat(user, template.description) - -/obj/item/survivalcapsule/attack_self() - // Can't grab when capsule is New() because templates aren't loaded then - get_template() - if(used == FALSE) - loc.visible_message("[src] begins to shake. Stand back!") - used = TRUE - sleep(50) - var/turf/deploy_location = get_turf(src) - var/status = template.check_deploy(deploy_location) - switch(status) - if(SHELTER_DEPLOY_BAD_AREA) - loc.visible_message("[src] will not function in this area.") - if(SHELTER_DEPLOY_BAD_TURFS, SHELTER_DEPLOY_ANCHORED_OBJECTS) - var/width = template.width - var/height = template.height - loc.visible_message("[src] doesn't have room to deploy! You need to clear a [width]x[height] area!") - - if(status != SHELTER_DEPLOY_ALLOWED) - used = FALSE - return - - playsound(get_turf(src), 'sound/effects/phasein.ogg', 100, 1) - - var/turf/T = deploy_location - if(!is_mining_level(T.z))//only report capsules away from the mining/lavaland level - message_admins("[key_name_admin(usr)] ([ADMIN_QUE(usr,"?")]) ([ADMIN_FLW(usr,"FLW")]) activated a bluespace capsule away from the mining level! (JMP)") - log_admin("[key_name(usr)] activated a bluespace capsule away from the mining level at [T.x], [T.y], [T.z]") - template.load(deploy_location, centered = TRUE) - new /obj/effect/particle_effect/smoke(get_turf(src)) - qdel(src) - -/obj/item/survivalcapsule/luxury - name = "luxury bluespace shelter capsule" - desc = "An exorbitantly expensive luxury suite stored within a pocket of bluespace." - origin_tech = "engineering=3;bluespace=4" - template_id = "shelter_beta" - -//Pod turfs and objects - -//Window -/obj/structure/window/shuttle/survival_pod - name = "pod window" - icon = 'icons/obj/smooth_structures/pod_window.dmi' - icon_state = "smooth" - dir = FULLTILE_WINDOW_DIR - max_integrity = 100 - fulltile = TRUE - reinf = TRUE - heat_resistance = 1600 - armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 50, "bio" = 100, "rad" = 100) - smooth = SMOOTH_MORE - canSmoothWith = list(/turf/simulated/wall/mineral/titanium/survival, /obj/machinery/door/airlock/survival_pod, /obj/structure/window/shuttle/survival_pod) - explosion_block = 3 - level = 3 - glass_type = /obj/item/stack/sheet/titaniumglass - glass_amount = 2 - -/obj/structure/window/reinforced/survival_pod - name = "pod window" - icon = 'icons/obj/lavaland/survival_pod.dmi' - icon_state = "pwindow" - -//Floors -/turf/simulated/floor/pod - name = "pod floor" - icon_state = "podfloor" - icon_regular_floor = "podfloor" - floor_tile = /obj/item/stack/tile/pod - -/turf/simulated/floor/pod/light - icon_state = "podfloor_light" - icon_regular_floor = "podfloor_light" - floor_tile = /obj/item/stack/tile/pod/light - -/turf/simulated/floor/pod/dark - icon_state = "podfloor_dark" - icon_regular_floor = "podfloor_dark" - floor_tile = /obj/item/stack/tile/pod/dark - -//Door -/obj/machinery/door/airlock/survival_pod - icon = 'icons/obj/doors/airlocks/survival/survival.dmi' - overlays_file = 'icons/obj/doors/airlocks/survival/survival_overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_pod - -/obj/machinery/door/airlock/survival_pod/glass - opacity = FALSE - glass = TRUE - -/obj/structure/door_assembly/door_assembly_pod - name = "pod airlock assembly" - icon = 'icons/obj/doors/airlocks/survival/survival.dmi' - base_name = "pod airlock" - overlays_file = 'icons/obj/doors/airlocks/survival/survival_overlays.dmi' - airlock_type = /obj/machinery/door/airlock/survival_pod - glass_type = /obj/machinery/door/airlock/survival_pod/glass - -//Windoor -/obj/machinery/door/window/survival_pod - icon = 'icons/obj/lavaland/survival_pod.dmi' - icon_state = "windoor" - base_state = "windoor" - -//Table -/obj/structure/table/survival_pod - icon = 'icons/obj/lavaland/survival_pod.dmi' - icon_state = "table" - smooth = SMOOTH_FALSE - -//Sleeper -/obj/machinery/sleeper/survival_pod - icon = 'icons/obj/lavaland/survival_pod.dmi' - icon_state = "sleeper-open" - density = 0 - -/obj/machinery/sleeper/survival_pod/New() - ..() - component_parts = list() - component_parts += new /obj/item/circuitboard/sleeper/survival(null) - var/obj/item/stock_parts/matter_bin/B = new(null) - B.rating = initial_bin_rating - component_parts += B - component_parts += new /obj/item/stock_parts/manipulator(null) - component_parts += new /obj/item/stock_parts/console_screen(null) - component_parts += new /obj/item/stock_parts/console_screen(null) - component_parts += new /obj/item/stack/cable_coil(null, 1) - RefreshParts() - -//Computer -/obj/item/gps/computer - name = "pod computer" - icon_state = "pod_computer" - icon = 'icons/obj/lavaland/pod_computer.dmi' - anchored = 1 - density = 1 - pixel_y = -32 - -/obj/item/gps/computer/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/wrench)) - playsound(loc, W.usesound, 50, 1) - user.visible_message("[user] disassembles the gps.", \ - "You start to disassemble the gps...", "You hear clanking and banging noises.") - if(do_after(user, 20 * W.toolspeed, target = src)) - new /obj/item/gps(loc) - qdel(src) - return ..() - -/obj/item/gps/computer/attack_hand(mob/user) - attack_self(user) - -//Bed -/obj/structure/bed/pod - icon = 'icons/obj/lavaland/survival_pod.dmi' - icon_state = "bed" - -//Survival Storage Unit -/obj/machinery/smartfridge/survival_pod - name = "survival pod storage" - desc = "A heated storage unit." - icon_state = "donkvendor" - icon = 'icons/obj/lavaland/donkvendor.dmi' - icon_on = "donkvendor" - icon_off = "donkvendor" - light_range = 8 - max_n_of_items = 10 - pixel_y = -4 - -/obj/machinery/smartfridge/survival_pod/update_icon() - return - -/obj/item/circuitboard/smartfridge/survival - name = "circuit board (Smartfridge Survival)" - build_path = /obj/machinery/smartfridge/survival_pod - -/obj/item/circuitboard/smartfridge/attackby(obj/item/I, mob/user, params) - return - -/obj/machinery/smartfridge/survival_pod/accept_check(obj/item/O) - if(istype(O, /obj/item)) - return 1 - return 0 - -/obj/machinery/smartfridge/survival_pod/New() - ..() - component_parts = list() - component_parts += new /obj/item/circuitboard/smartfridge/survival(null) - component_parts += new /obj/item/stock_parts/matter_bin(null) - RefreshParts() - -/obj/machinery/smartfridge/survival_pod/loaded/New() - ..() - for(var/i in 1 to 5) - var/obj/item/reagent_containers/food/snacks/warmdonkpocket_weak/W = new(src) - load(W) - if(prob(50)) - var/obj/item/storage/pill_bottle/dice/D = new(src) - load(D) - else - var/obj/item/instrument/guitar/G = new(src) - load(G) - -//Fans -/obj/structure/fans - icon = 'icons/obj/lavaland/survival_pod.dmi' - icon_state = "fans" - name = "environmental regulation system" - desc = "A large machine releasing a constant gust of air." - anchored = 1 - density = 1 - var/arbitraryatmosblockingvar = 1 - var/buildstacktype = /obj/item/stack/sheet/metal - var/buildstackamount = 5 - -/obj/structure/fans/Initialize(loc) - ..() - air_update_turf(1) - -/obj/structure/fans/Destroy() - arbitraryatmosblockingvar = 0 - air_update_turf(1) - return ..() - -/obj/structure/fans/CanAtmosPass(turf/T) - return !arbitraryatmosblockingvar - -/obj/structure/fans/deconstruct() - if(buildstacktype) - new buildstacktype(loc, buildstackamount) - qdel(src) - -/obj/structure/fans/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/wrench)) - playsound(loc, W.usesound, 50, 1) - user.visible_message("[user] disassembles the fan.", \ - "You start to disassemble the fan...", "You hear clanking and banging noises.") - if(do_after(user, 20 * W.toolspeed, target = src)) - deconstruct() - return ..() - -/obj/structure/fans/tiny - name = "tiny fan" - desc = "A tiny fan, releasing a thin gust of air." - layer = TURF_LAYER+0.1 - density = 0 - icon_state = "fan_tiny" - buildstackamount = 2 - -/obj/structure/fans/tiny/invisible - name = "air flow blocker" - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF - unacidable = TRUE - invisibility = INVISIBILITY_ABSTRACT - -//Signs -/obj/structure/sign/mining - name = "nanotrasen mining corps sign" - desc = "A sign of relief for weary miners, and a warning for would-be competitors to Nanotrasen's mining claims." - icon = 'icons/turf/walls/survival_pod_walls.dmi' - icon_state = "ntpod" - -/obj/structure/sign/mining/survival - name = "shelter sign" - desc = "A high visibility sign designating a safe shelter." - icon = 'icons/turf/walls/survival_pod_walls.dmi' - icon_state = "survival" - -//Fluff -/obj/structure/tubes - icon_state = "tubes" - icon = 'icons/obj/lavaland/survival_pod.dmi' - name = "tubes" - anchored = 1 - layer = MOB_LAYER - 0.2 - density = 0 - -/obj/structure/tubes/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/wrench)) - playsound(loc, W.usesound, 50, 1) - user.visible_message("[user] disassembles [src].", \ - "You start to disassemble [src]...", "You hear clanking and banging noises.") - if(do_after(user, 20 * W.toolspeed, target = src)) - new /obj/item/stack/rods(loc) - qdel(src) - return ..() - -/obj/item/fakeartefact - name = "expensive forgery" - icon = 'icons/mob/screen_gen.dmi' - icon_state = "x2" - var/possible = list(/obj/item/ship_in_a_bottle, - /obj/item/gun/energy/pulse, - /obj/item/sleeping_carp_scroll, - /obj/item/shield/changeling, - /obj/item/lava_staff, - /obj/item/katana/energy, - /obj/item/storage/toolbox/green/memetic, - /obj/item/gun/projectile/automatic/l6_saw, - /obj/item/gun/magic/staff/chaos, - /obj/item/gun/magic/staff/spellblade, - /obj/item/gun/magic/wand/death, - /obj/item/gun/magic/wand/fireball, - /obj/item/stack/telecrystal, - /obj/item/banhammer) - -/obj/item/fakeartefact/New() - . = ..() - var/obj/item/I = pick(possible) - name = initial(I.name) - icon = initial(I.icon) - desc = initial(I.desc) - icon_state = initial(I.icon_state) - item_state = initial(I.item_state) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 14ead863f53..c8c7d5c32e3 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -95,6 +95,11 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) updateallghostimages() return ..() +/mob/dead/observer/examine(mob/user) + ..() + if(!invisibility) + to_chat(user, "It seems extremely obvious.") + // This seems stupid, but it's the easiest way to avoid absolutely ridiculous shit from happening // Copying an appearance directly from a mob includes it's verb list, it's invisibility, it's alpha, and it's density // You might recognize these things as "fucking ridiculous to put in an appearance" diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index d412d604ec2..bb7bcfc94e1 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -245,6 +245,10 @@ /mob/proc/get_item_by_slot(slot_id) switch(slot_id) + if(slot_wear_mask) + return wear_mask + if(slot_back) + return back if(slot_l_hand) return l_hand if(slot_r_hand) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 31788ecc8cf..2c7a2d67c55 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -712,17 +712,18 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump, return back if(slot_wear_mask) return wear_mask - if(slot_handcuffed) - return handcuffed - if(slot_legcuffed) - return legcuffed + if(slot_wear_suit) + return wear_suit if(slot_l_hand) return l_hand if(slot_r_hand) return r_hand + if(slot_handcuffed) + return handcuffed + if(slot_legcuffed) + return legcuffed return null - //generates realistic-ish pulse output based on preset levels /mob/living/carbon/proc/get_pulse(var/method) //method 0 is for hands, 1 is for machines, more accurate var/temp = 0 //see setup.dm:694 diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index d4cafa847fd..7b8790076ce 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -14,11 +14,10 @@ return TRUE ..() -/mob/living/carbon/water_act(volume, temperature, source) +/mob/living/carbon/water_act(volume, temperature, source, method = TOUCH) + . = ..() if(volume > 10) //anything over 10 volume will make the mob wetter. wetlevel = min(wetlevel + 1,5) - ..() - /mob/living/carbon/attackby(obj/item/I, mob/user, params) if(lying && surgeries.len) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 2cd524f8a15..bc0c33c233d 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1711,8 +1711,8 @@ Eyes need to have significantly high darksight to shine unless the mob has the X /mob/living/carbon/human/IsAdvancedToolUser() if(dna.species.has_fine_manipulation) - return 1 - return 0 + return TRUE + return FALSE /mob/living/carbon/human/get_permeability_protection() var/list/prot = list("hands"=0, "chest"=0, "groin"=0, "legs"=0, "feet"=0, "arms"=0, "head"=0) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 873282ca1d4..b95920e688b 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -506,9 +506,9 @@ emp_act return 0 ..() -/mob/living/carbon/human/water_act(volume, temperature, source) - ..() - dna.species.water_act(src,volume,temperature,source) +/mob/living/carbon/human/water_act(volume, temperature, source, method = TOUCH) + . = ..() + dna.species.water_act(src, volume, temperature, source, method) /mob/living/carbon/human/is_eyes_covered(check_glasses = TRUE, check_head = TRUE, check_mask = TRUE) if(check_glasses && glasses && (glasses.flags_cover & GLASSESCOVERSEYES)) diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm index 7dc6c042e0c..85f491f71f0 100644 --- a/code/modules/mob/living/carbon/human/species/_species.dm +++ b/code/modules/mob/living/carbon/human/species/_species.dm @@ -718,7 +718,7 @@ It'll return null if the organ doesn't correspond, so include null checks when u H.sync_lighting_plane_alpha() -/datum/species/proc/water_act(mob/living/carbon/human/M, volume, temperature, source) +/datum/species/proc/water_act(mob/living/carbon/human/M, volume, temperature, source, method = TOUCH) if(abs(temperature - M.bodytemperature) > 10) //If our water and mob temperature varies by more than 10K, cool or/ heat them appropriately M.bodytemperature = (temperature + M.bodytemperature) * 0.5 //Approximation for gradual heating or cooling diff --git a/code/modules/mob/living/carbon/human/species/grey.dm b/code/modules/mob/living/carbon/human/species/grey.dm index 29ab2a0ee8d..3b8bbe34ffb 100644 --- a/code/modules/mob/living/carbon/human/species/grey.dm +++ b/code/modules/mob/living/carbon/human/species/grey.dm @@ -36,10 +36,38 @@ genemutcheck(H, REMOTETALKBLOCK, null, MUTCHK_FORCED) H.dna.default_blocks.Add(REMOTETALKBLOCK) -/datum/species/grey/water_act(mob/living/carbon/human/H, volume, temperature, source) - ..() - H.take_organ_damage(5, min(volume, 20)) - H.emote("scream") +/datum/species/grey/water_act(mob/living/carbon/human/H, volume, temperature, source, method = TOUCH) + . = ..() + + if(method == TOUCH) + if(volume > 25) + if(H.wear_mask) + to_chat(H, "Your [H.wear_mask] protects you from the acid!") + return + + if(H.head) + to_chat(H, "Your [H.wear_mask] protects you from the acid!") + return + + if(prob(75)) + H.take_organ_damage(5, 10) + H.emote("scream") + var/obj/item/organ/external/affecting = H.get_organ("head") + if(affecting) + affecting.disfigure() + else + H.take_organ_damage(5, 10) + else + H.take_organ_damage(5, 10) + else + to_chat(H, "The water stings[volume < 10 ? " you, but isn't concentrated enough to harm you" : null]!") + if(volume >= 10) + H.adjustFireLoss(min(max(4, (volume - 10) * 2), 20)) + H.emote("scream") + to_chat(H, "The water stings[volume < 10 ? " you, but isn't concentrated enough to harm you" : null]!") + if(volume >= 10) + H.adjustFireLoss(min(max(4, (volume - 10) * 2), 20)) + H.emote("scream") /datum/species/grey/after_equip_job(datum/job/J, mob/living/carbon/human/H) var/translator_pref = H.client.prefs.speciesprefs diff --git a/code/modules/mob/living/carbon/human/species/plasmaman.dm b/code/modules/mob/living/carbon/human/species/plasmaman.dm index bb900cdb5b6..785d737aec2 100644 --- a/code/modules/mob/living/carbon/human/species/plasmaman.dm +++ b/code/modules/mob/living/carbon/human/species/plasmaman.dm @@ -130,8 +130,8 @@ suit=/obj/item/clothing/suit/space/eva/plasmaman/cargo helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/cargo if("Shaft Miner") - suit=/obj/item/clothing/suit/space/eva/plasmaman/miner - helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/miner + suit=/obj/item/clothing/suit/space/eva/plasmaman/explorer + helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/explorer if("Botanist") suit=/obj/item/clothing/suit/space/eva/plasmaman/botanist helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/botanist diff --git a/code/modules/mob/living/carbon/human/species/unathi.dm b/code/modules/mob/living/carbon/human/species/unathi.dm index 72ee0f99cc2..6146f00fa6f 100644 --- a/code/modules/mob/living/carbon/human/species/unathi.dm +++ b/code/modules/mob/living/carbon/human/species/unathi.dm @@ -116,4 +116,4 @@ default_language = "Sinta'unathi" slowdown = -0.80 - species_traits = list(NO_BREATHE, NOGUNS) \ No newline at end of file + species_traits = list(NO_BREATHE, NOGUNS) diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index e0c58c484d8..276ee7b246e 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -3,9 +3,9 @@ set background = BACKGROUND_ENABLED if(notransform) - return 0 + return FALSE if(!loc) - return 0 + return FALSE var/datum/gas_mixture/environment = loc.return_air() if(client || registered_z) // This is a temporary error tracker to make sure we've caught everything diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index e9df2f0edad..f0c3b85ece1 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -216,13 +216,9 @@ fire_stacks += L.fire_stacks IgniteMob() -//Mobs on Fire end - -/mob/living/water_act(volume, temperature) - if(volume >= 20) fire_stacks -= 0.5 - if(volume >= 50) fire_stacks -= 1 - - +/mob/living/water_act(volume, temperature, source, method = TOUCH) + . = ..() + adjust_fire_stacks(-(volume * 0.2)) //This is called when the mob is thrown into a dense turf /mob/living/proc/turf_collision(var/turf/T, var/speed) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 1c82e9e8779..4a8d8c48f5b 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -98,7 +98,7 @@ return 0 /mob/living/silicon/IsAdvancedToolUser() - return 1 + return TRUE /mob/living/silicon/bullet_act(var/obj/item/projectile/Proj) diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm index 77eb74e5696..5feebb53059 100644 --- a/code/modules/mob/living/simple_animal/bot/construction.dm +++ b/code/modules/mob/living/simple_animal/bot/construction.dm @@ -594,7 +594,7 @@ var/robot_arm = /obj/item/robot_parts/l_arm qdel(src) /obj/item/honkbot_arm_assembly - name = "incomplete honkbot assembly." + name = "incomplete honkbot assembly" desc = "A clown box with a robot arm permanently grafted to it." icon = 'icons/obj/aibots.dmi' icon_state = "honkbot_arm" @@ -625,8 +625,8 @@ var/robot_arm = /obj/item/robot_parts/l_arm if(istype(W, /obj/item/instrument/trombone)) if(!user.unEquip(W)) return - to_chat(user, "You add the trombone to [src]! Heeeenk! ") + to_chat(user, "You add the trombone to [src]! Heeeenk!") qdel(W) - var/mob/living/simple_animal/bot/honkbot/A = new /mob/living/simple_animal/bot/honkbot(T) + var/mob/living/simple_animal/bot/honkbot/A = new /mob/living/simple_animal/bot/honkbot(get_turf(src)) A.robot_arm = robot_arm qdel(src) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/bot/honkbot.dm b/code/modules/mob/living/simple_animal/bot/honkbot.dm index 958f493e309..45b10950669 100644 --- a/code/modules/mob/living/simple_animal/bot/honkbot.dm +++ b/code/modules/mob/living/simple_animal/bot/honkbot.dm @@ -37,7 +37,7 @@ . = ..() update_icon() auto_patrol = TRUE - var/datum/job/clown/J = new/datum/job/clown + var/datum/job/clown/J = new /datum/job/clown() access_card.access += J.get_access() prev_access = access_card.access diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index 62784a793f9..4dea368ad5e 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -16,8 +16,8 @@ turns_per_move = 5 see_in_dark = 6 mob_size = MOB_SIZE_SMALL - simplespecies = /mob/living/simple_animal/pet/cat - childtype = /mob/living/simple_animal/pet/cat/kitten + animal_species = /mob/living/simple_animal/pet/cat + childtype = list(/mob/living/simple_animal/pet/cat/kitten) butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 3) response_help = "pets" response_disarm = "gently pushes aside" diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index 970ac596482..90ed82ff395 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -22,8 +22,8 @@ response_disarm = "bops" response_harm = "kicks" see_in_dark = 5 - childtype = /mob/living/simple_animal/pet/corgi/puppy - simplespecies = /mob/living/simple_animal/pet/corgi + childtype = list(/mob/living/simple_animal/pet/corgi) + animal_species = /mob/living/simple_animal/pet/corgi gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY var/shaved = 0 var/obj/item/inventory_head diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 0f4fd774dc5..9c787639ba4 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -67,7 +67,7 @@ . = ..() if(!.) walk(src, 0) - return 0 + return FALSE /mob/living/simple_animal/hostile/handle_automated_action() if(AIStatus == AI_OFF) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm index 9486f1b11bb..68db8cb1274 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm @@ -130,7 +130,7 @@ Difficulty: Medium playsound(T,'sound/magic/fireball.ogg', 200, 1) new /obj/effect/temp_visual/fireball(T) sleep(12) - explosion(T, 0, 0, 1, 0, 0, 0, 1) + explosion(T, 0, 0, 1, 0, 0, 0, 1, 1) /mob/living/simple_animal/hostile/megafauna/dragon/OpenFire() anger_modifier = Clamp(((maxHealth - health)/50),0,20) diff --git a/code/modules/mob/living/simple_animal/hostile/mining/basilisk.dm b/code/modules/mob/living/simple_animal/hostile/mining/basilisk.dm index a947cace8e2..28aacd37a73 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/basilisk.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/basilisk.dm @@ -77,7 +77,6 @@ stat_attack = 1 flying = TRUE robust_searching = 1 - var/fromtendril = FALSE loot = list() butcher_results = list(/obj/item/stack/ore/diamond = 2, /obj/item/stack/sheet/sinew = 2, /obj/item/stack/sheet/bone = 1) diff --git a/code/modules/mob/living/simple_animal/hostile/mining/goliath.dm b/code/modules/mob/living/simple_animal/hostile/mining/goliath.dm index 391bc4ce67d..a1c488b4068 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/goliath.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/goliath.dm @@ -10,7 +10,7 @@ attack_sound = 'sound/weapons/punch4.ogg' mouse_opacity = MOUSE_OPACITY_OPAQUE move_to_delay = 40 - ranged = 1 + ranged = TRUE ranged_cooldown = 2 //By default, start the Goliath with his cooldown off so that people can run away quickly on first sight ranged_cooldown_time = 120 friendly = "wails at" @@ -31,12 +31,12 @@ move_force = MOVE_FORCE_VERY_STRONG move_resist = MOVE_FORCE_VERY_STRONG pull_force = MOVE_FORCE_VERY_STRONG - var/pre_attack = 0 + var/pre_attack = FALSE var/pre_attack_icon = "Goliath_preattack" - loot = list(/obj/item/stack/sheet/animalhide/goliath_hide{layer = 4.1}) + loot = list(/obj/item/stack/sheet/animalhide/goliath_hide) /mob/living/simple_animal/hostile/asteroid/goliath/Life() - ..() + . = ..() handle_preattack() /mob/living/simple_animal/hostile/asteroid/goliath/proc/handle_preattack() @@ -56,11 +56,10 @@ var/tturf = get_turf(target) if(get_dist(src, target) <= 7)//Screen range check, so you can't get tentacle'd offscreen visible_message("The [src.name] digs its tentacles under [target.name]!") - new /obj/effect/goliath_tentacle/original(tturf, src) + new /obj/effect/temp_visual/goliath_tentacle/original(tturf, src) ranged_cooldown = world.time + ranged_cooldown_time icon_state = icon_aggro - pre_attack = 0 - return + pre_attack = FALSE /mob/living/simple_animal/hostile/asteroid/goliath/adjustHealth(damage) ranged_cooldown-- @@ -72,46 +71,105 @@ handle_preattack() if(icon_state != icon_aggro) icon_state = icon_aggro - return -/obj/effect/goliath_tentacle - name = "Goliath tentacle" +// Lavaland Goliath +/mob/living/simple_animal/hostile/asteroid/goliath/beast + name = "goliath" + desc = "A hulking, armor-plated beast with long tendrils arching from its back." + icon = 'icons/mob/lavaland/lavaland_monsters.dmi' + icon_state = "goliath" + icon_living = "goliath" + icon_aggro = "goliath" + icon_dead = "goliath_dead" + throw_message = "does nothing to the tough hide of the" + pre_attack_icon = "goliath2" + butcher_results = list(/obj/item/reagent_containers/food/snacks/goliath = 2, /obj/item/stack/sheet/animalhide/goliath_hide = 1, /obj/item/stack/sheet/bone = 2) + loot = list() + stat_attack = TRUE + robust_searching = TRUE + +/mob/living/simple_animal/hostile/asteroid/goliath/beast/random/Initialize() + . = ..() + if(prob(1)) + new /mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient(loc) + return INITIALIZE_HINT_QDEL + +/mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient + name = "ancient goliath" + desc = "Goliaths are biologically immortal, and rare specimens have survived for centuries. This one is clearly ancient, and its tentacles constantly churn the earth around it." + icon_state = "Goliath" + icon_living = "Goliath" + icon_aggro = "Goliath_alert" + icon_dead = "Goliath_dead" + maxHealth = 400 + health = 400 + speed = 4 + pre_attack_icon = "Goliath_preattack" + throw_message = "does nothing to the rocky hide of the" + loot = list(/obj/item/stack/sheet/animalhide/goliath_hide) //A throwback to the asteroid days + butcher_results = list(/obj/item/reagent_containers/food/snacks/goliath = 2, /obj/item/stack/sheet/bone = 2) + wander = FALSE + var/list/cached_tentacle_turfs + var/turf/last_location + var/tentacle_recheck_cooldown = 100 + +/mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient/Life() + . = ..() + if(!.) // dead + return + if(isturf(loc)) + if(!LAZYLEN(cached_tentacle_turfs) || loc != last_location || tentacle_recheck_cooldown <= world.time) + LAZYCLEARLIST(cached_tentacle_turfs) + last_location = loc + tentacle_recheck_cooldown = world.time + initial(tentacle_recheck_cooldown) + for(var/turf/simulated/floor/T in orange(4, loc)) + LAZYADD(cached_tentacle_turfs, T) + for(var/t in cached_tentacle_turfs) + if(isfloorturf(t)) + if(prob(10)) + new /obj/effect/temp_visual/goliath_tentacle(t, src) + else + cached_tentacle_turfs -= t + +/mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril + fromtendril = TRUE + +// Tentacles +/obj/effect/temp_visual/goliath_tentacle + name = "goliath tentacle" icon = 'icons/mob/lavaland/lavaland_monsters.dmi' icon_state = "Goliath_tentacle_spawn" layer = BELOW_MOB_LAYER var/mob/living/spawner - var/timerid -/obj/effect/goliath_tentacle/New(var/loc, mob/living/new_spawner) +/obj/effect/temp_visual/goliath_tentacle/Initialize(mapload, mob/living/new_spawner) . = ..() - for(var/obj/effect/goliath_tentacle/T in loc) + 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)) var/turf/simulated/mineral/M = loc M.gets_drilled() deltimer(timerid) timerid = addtimer(CALLBACK(src, .proc/tripanim), 7, TIMER_STOPPABLE) -/obj/effect/goliath_tentacle/original/New(var/loc, mob/living/new_spawner) +/obj/effect/temp_visual/goliath_tentacle/original/Initialize(mapload, new_spawner) . = ..() var/list/directions = cardinal.Copy() for(var/i in 1 to 3) var/spawndir = pick_n_take(directions) var/turf/T = get_step(src, spawndir) if(T) - new /obj/effect/goliath_tentacle(T, spawner) + new /obj/effect/temp_visual/goliath_tentacle(T, spawner) -/obj/effect/goliath_tentacle/proc/tripanim() +/obj/effect/temp_visual/goliath_tentacle/proc/tripanim() icon_state = "Goliath_tentacle_wiggle" deltimer(timerid) timerid = addtimer(CALLBACK(src, .proc/trip), 3, TIMER_STOPPABLE) -/obj/effect/goliath_tentacle/proc/trip() +/obj/effect/temp_visual/goliath_tentacle/proc/trip() var/latched = FALSE for(var/mob/living/L in loc) if((!QDELETED(spawner) && spawner.faction_check_mob(L)) || L.stat == DEAD) @@ -126,22 +184,7 @@ deltimer(timerid) timerid = addtimer(CALLBACK(src, .proc/retract), 10, TIMER_STOPPABLE) -/obj/effect/goliath_tentacle/proc/retract() +/obj/effect/temp_visual/goliath_tentacle/proc/retract() icon_state = "Goliath_tentacle_retract" deltimer(timerid) - timerid = QDEL_IN(src, 7) - -/mob/living/simple_animal/hostile/asteroid/goliath/beast - name = "goliath" - desc = "A hulking, armor-plated beast with long tendrils arching from its back." - icon = 'icons/mob/lavaland/lavaland_monsters.dmi' - icon_state = "goliath" - icon_living = "goliath" - icon_aggro = "goliath" - icon_dead = "goliath_dead" - throw_message = "does nothing to the tough hide of the" - pre_attack_icon = "goliath2" - butcher_results = list(/obj/item/reagent_containers/food/snacks/goliath = 2, /obj/item/stack/sheet/animalhide/goliath_hide = 1, /obj/item/stack/sheet/bone = 2) - loot = list() - stat_attack = 1 - robust_searching = 1 \ No newline at end of file + timerid = QDEL_IN(src, 5) diff --git a/code/modules/mob/living/simple_animal/hostile/mining/gutlunch.dm b/code/modules/mob/living/simple_animal/hostile/mining/gutlunch.dm index 4e924a5424c..6e5c840a401 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/gutlunch.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/gutlunch.dm @@ -35,7 +35,7 @@ loot = list(/obj/effect/decal/cleanable/blood/gibs) deathmessage = "is pulped into bugmash." - simplespecies = /mob/living/simple_animal/hostile/asteroid/gutlunch + animal_species = /mob/living/simple_animal/hostile/asteroid/gutlunch childtype = list(/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck = 45, /mob/living/simple_animal/hostile/asteroid/gutlunch/guthen = 55) wanted_objects = list(/obj/effect/decal/cleanable/blood/gibs) @@ -64,7 +64,7 @@ ..() /mob/living/simple_animal/hostile/asteroid/gutlunch/AttackingTarget() - if(is_type_in_list(target, wanted_objects)) //we eats + if(is_type_in_typecache(target, wanted_objects)) //we eats udder.generateMilk() regenerate_icons() visible_message("[src] slurps up [target].") diff --git a/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm index 51b8e0c9842..60c1f5e08e7 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm @@ -236,7 +236,6 @@ del_on_death = 1 stat_attack = 1 robust_searching = 1 - var/fromtendril = FALSE var/dwarf_mob = FALSE var/mob/living/carbon/human/stored_mob diff --git a/code/modules/mob/living/simple_animal/hostile/mining/mining.dm b/code/modules/mob/living/simple_animal/hostile/mining/mining.dm index 2fd5e6ef0f2..e23624a5a9d 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/mining.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/mining.dm @@ -15,6 +15,7 @@ a_intent = INTENT_HARM var/throw_message = "bounces off of" var/icon_aggro = null // for swapping to when we get aggressive + var/fromtendril = FALSE see_in_dark = 8 see_invisible = SEE_INVISIBLE_MINIMUM mob_size = MOB_SIZE_LARGE diff --git a/code/modules/mob/living/simple_animal/hostile/mining/necropolis_tendril.dm b/code/modules/mob/living/simple_animal/hostile/mining/necropolis_tendril.dm index e8dfa093918..2ee9c387140 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/necropolis_tendril.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/necropolis_tendril.dm @@ -73,7 +73,7 @@ qdel(src) /mob/living/simple_animal/hostile/spawner/lavaland/goliath - mob_type = /mob/living/simple_animal/hostile/asteroid/goliath/beast + mob_type = /mob/living/simple_animal/hostile/asteroid/goliath/beast/tendril /mob/living/simple_animal/hostile/spawner/lavaland/legion mob_type = /mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index 67fb7722198..efc18895141 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -140,7 +140,7 @@ move_resist = MOVE_FORCE_VERY_STRONG pull_force = MOVE_FORCE_VERY_STRONG var/pre_attack = 0 - loot = list(/obj/item/asteroid/goliath_hide{layer = 4.1}) + loot = list(/obj/item/stack/sheet/animalhide/goliath_hide{layer = ABOVE_MOB_LAYER}) /mob/living/simple_animal/hostile/asteroid/goliath/Life() ..() @@ -223,46 +223,3 @@ else spawn(50) qdel(src) - -/obj/item/asteroid/goliath_hide - name = "goliath hide plates" - desc = "Pieces of a goliath's rocky hide, these might be able to make your suit a bit more durable to attack from the local fauna." - icon = 'icons/obj/items.dmi' - icon_state = "goliath_hide" - flags = NOBLUDGEON - w_class = WEIGHT_CLASS_NORMAL - layer = 4 - -/obj/item/asteroid/goliath_hide/afterattack(atom/target, mob/user, proximity_flag) - if(proximity_flag) - if(istype(target, /obj/item/clothing/suit/space/hardsuit/mining) || istype(target, /obj/item/clothing/head/helmet/space/hardsuit/mining) || istype(target, /obj/item/clothing/suit/space/eva/plasmaman/miner) || istype(target, /obj/item/clothing/head/helmet/space/eva/plasmaman/miner)) - var/obj/item/clothing/C = target - var/current_armor = C.armor - if(current_armor["melee"] < 60) - current_armor["melee"] = min(current_armor["melee"] + 10, 60) - to_chat(user, "You strengthen [target], improving its resistance against melee attacks.") - qdel(src) - else - to_chat(user, "You can't improve [C] any further.") - return - if(istype(target, /obj/mecha/working/ripley)) - var/obj/mecha/D = target - if(D.icon_state != "ripley-open") - to_chat(user, "You can't add armour onto the mech while someone is inside!") - return - var/list/damage_absorption = D.damage_absorption - if(damage_absorption["brute"] > 0.3) - damage_absorption["brute"] = max(damage_absorption["brute"] - 0.1, 0.3) - damage_absorption["bullet"] = damage_absorption["bullet"] - 0.05 - damage_absorption["fire"] = damage_absorption["fire"] - 0.05 - damage_absorption["laser"] = damage_absorption["laser"] - 0.025 - to_chat(user, "You strengthen [target], improving its resistance against melee attacks.") - qdel(src) - D.overlays += image("icon"="mecha.dmi", "icon_state"="ripley-g-open") - D.desc = "Autonomous Power Loader Unit. Its armour is enhanced with some goliath hide plates." - if(damage_absorption["brute"] == 0.3) - D.overlays += image("icon"="mecha.dmi", "icon_state"="ripley-g-full-open") - D.desc = "Autonomous Power Loader Unit. It's wearing a fearsome carapace entirely composed of goliath hide plates - the pilot must be an experienced monster hunter." - else - to_chat(user, "You can't improve [D] any further!") - return diff --git a/code/modules/mob/living/simple_animal/posessed_object.dm b/code/modules/mob/living/simple_animal/posessed_object.dm index 7afb3b01cbc..f290dd7f2ef 100644 --- a/code/modules/mob/living/simple_animal/posessed_object.dm +++ b/code/modules/mob/living/simple_animal/posessed_object.dm @@ -108,7 +108,7 @@ /mob/living/simple_animal/possessed_object/IsAdvancedToolUser() // So we can shoot guns (Mostly ourselves), among other things. - return 1 + return TRUE /mob/living/simple_animal/possessed_object/get_access() // If we've possessed an ID card we've got access to lots of fun things! diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 3799daacb63..6955633efce 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -62,10 +62,9 @@ var/can_collar = 0 // can add collar to mob or not //Hot simple_animal baby making vars - - var/childtype = null - var/scan_ready = 1 - var/simplespecies //Sorry, no spider+corgi buttbabies. + var/list/childtype = null + var/next_scan_time = 0 + var/animal_species //Sorry, no spider+corgi buttbabies. var/gold_core_spawnable = CHEM_MOB_SPAWN_INVALID //if CHEM_MOB_SPAWN_HOSTILE can be spawned by plasma with gold core, CHEM_MOB_SPAWN_FRIENDLY are 'friendlies' spawned with blood @@ -446,27 +445,32 @@ /mob/living/simple_animal/proc/make_babies() // <3 <3 <3 - if(gender != FEMALE || stat || !scan_ready || !childtype || !simplespecies) - return - scan_ready = 0 - spawn(400) - scan_ready = 1 - var/alone = 1 + if(gender != FEMALE || stat || next_scan_time > world.time || !childtype || !animal_species || !SSticker.IsRoundInProgress()) + return FALSE + next_scan_time = world.time + 400 + + var/alone = TRUE var/mob/living/simple_animal/partner var/children = 0 + for(var/mob/M in oview(7, src)) - if(istype(M, childtype)) //Check for children FIRST. + if(M.stat != CONSCIOUS) //Check if it's conscious FIRST. + continue + else if(istype(M, childtype)) //Check for children SECOND. children++ - else if(istype(M, simplespecies)) - if(M.client) + else if(istype(M, animal_species)) + if(M.ckey) continue else if(!istype(M, childtype) && M.gender == MALE) //Better safe than sorry ;_; partner = M - else if(istype(M, /mob/)) - alone = 0 - continue + else if(isliving(M) && !faction_check_mob(M)) //shyness check. we're not shy in front of things that share a faction with us. + return //we never mate when not alone, so just abort early + if(alone && partner && children < 3) - return new childtype(loc) + var/childspawn = pickweight(childtype) + var/turf/target = get_turf(loc) + if(target) + return new childspawn(target) /mob/living/simple_animal/say_quote(var/message) var/verb = "says" diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index fb11e2ef277..c74d7545473 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1010,7 +1010,7 @@ var/list/slot_equipment_priority = list( \ var/atom/A = foo if(A.invisibility > see_invisible) continue - if(is_type_in_list(A, shouldnt_see)) + if(is_type_in_list(A, shouldnt_see) || !A.simulated) continue statpanel_things += A statpanel(listed_turf.name, null, statpanel_things) @@ -1068,7 +1068,7 @@ var/list/slot_equipment_priority = list( \ /mob/proc/IsAdvancedToolUser()//This might need a rename but it should replace the can this mob use things check - return 0 + return FALSE /mob/proc/swap_hand() return diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 60a3637166a..b378705becb 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -176,7 +176,7 @@ var/player_ghosted = 0 var/turf/listed_turf = null //the current turf being examined in the stat panel - var/list/shouldnt_see = list(/atom/movable/lighting_object) //list of objects that this mob shouldn't see in the stat panel. this silliness is needed because of AI alt+click and cult blood runes + var/list/shouldnt_see = list() //list of objects that this mob shouldn't see in the stat panel. this silliness is needed because of AI alt+click and cult blood runes var/kills = 0 diff --git a/code/modules/nano/modules/atmos_control.dm b/code/modules/nano/modules/atmos_control.dm index 9936895e473..3b61ea0f557 100644 --- a/code/modules/nano/modules/atmos_control.dm +++ b/code/modules/nano/modules/atmos_control.dm @@ -42,6 +42,7 @@ /datum/nano_module/atmos_control/ui_data(mob/user, ui_key = "main", datum/topic_state/state = default_state) var/data[0] data["alarms"] = air_alarm_repository.air_alarm_data(monitored_alarms) + return data /datum/nano_module/atmos_control/proc/generate_state(air_alarm) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index b868945f065..a69ff2a793b 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -99,7 +99,7 @@ var/indestructible = 0 // If set, prevents aliens from destroying it var/keep_preset_name = 0 - var/report_power_alarm = 1 + var/report_power_alarm = TRUE var/shock_proof = 0 //if set to 1, this APC will not arc bolts of electricity if it's overloaded. @@ -117,11 +117,11 @@ operating = 0 /obj/machinery/power/apc/noalarm - report_power_alarm = 0 + report_power_alarm = FALSE /obj/machinery/power/apc/syndicate //general syndicate access req_access = list(access_syndicate) - report_power_alarm = 0 + report_power_alarm = FALSE /obj/item/apc_electronics name = "power control module" @@ -1171,14 +1171,14 @@ lighting = autoset(lighting, 1) environ = autoset(environ, 1) autoflag = 3 - if(report_power_alarm) + if(report_power_alarm && is_station_contact(z)) SSalarms.power_alarm.clearAlarm(loc, src) else if(cell.charge < 1250 && cell.charge > 750 && longtermpower < 0) // <30%, turn off equipment if(autoflag != 2) equipment = autoset(equipment, 2) lighting = autoset(lighting, 1) environ = autoset(environ, 1) - if(report_power_alarm) + if(report_power_alarm && is_station_contact(z)) SSalarms.power_alarm.triggerAlarm(loc, src) autoflag = 2 else if(cell.charge < 750 && cell.charge > 10) // <15%, turn off lighting & equipment @@ -1186,7 +1186,7 @@ equipment = autoset(equipment, 2) lighting = autoset(lighting, 2) environ = autoset(environ, 1) - if(report_power_alarm) + if(report_power_alarm && is_station_contact(z)) SSalarms.power_alarm.triggerAlarm(loc, src) autoflag = 1 else if(cell.charge <= 0) // zero charge, turn all off @@ -1194,7 +1194,7 @@ equipment = autoset(equipment, 0) lighting = autoset(lighting, 0) environ = autoset(environ, 0) - if(report_power_alarm) + if(report_power_alarm && is_station_contact(z)) SSalarms.power_alarm.triggerAlarm(loc, src) autoflag = 0 @@ -1250,7 +1250,7 @@ equipment = autoset(equipment, 0) lighting = autoset(lighting, 0) environ = autoset(environ, 0) - if(report_power_alarm) + if(report_power_alarm && is_station_contact(z)) SSalarms.power_alarm.triggerAlarm(loc, src) autoflag = 0 diff --git a/code/modules/reagents/chemistry/reagents/water.dm b/code/modules/reagents/chemistry/reagents/water.dm index 57f8b96b787..fc79d0b336b 100644 --- a/code/modules/reagents/chemistry/reagents/water.dm +++ b/code/modules/reagents/chemistry/reagents/water.dm @@ -19,68 +19,16 @@ drink_name = "Glass of Water" drink_desc = "The father of all refreshments." taste_message = null + var/water_temperature = 283.15 // As reagents don't have a temperature value, we'll just use 10 celsius. -/datum/reagent/water/reaction_mob(mob/living/M, method=TOUCH, volume) - if(method == TOUCH) - // Put out fire - M.adjust_fire_stacks(-(volume * 0.2)) - - if(isgrey(M)) // You gosh darn snowflakes - var/mob/living/carbon/human/G = M - if(method == TOUCH) - if(volume > 25) - if(G.wear_mask) - to_chat(G, "Your [G.wear_mask] protects you from the acid!") - return - - if(G.head) - to_chat(G, "Your [G.wear_mask] protects you from the acid!") - return - - if(prob(75)) - G.take_organ_damage(5, 10) - G.emote("scream") - var/obj/item/organ/external/affecting = G.get_organ("head") - if(affecting) - affecting.disfigure() - else - G.take_organ_damage(5, 10) - else - G.take_organ_damage(5, 10) - else - to_chat(G, "The water stings[volume < 10 ? " you, but isn't concentrated enough to harm you" : null]!") - if(volume >= 10) - G.adjustFireLoss(min(max(4, (volume - 10) * 2), 20)) - G.emote("scream") +/datum/reagent/water/reaction_mob(mob/living/M, method = TOUCH, volume) + M.water_act(volume, water_temperature, src, method) /datum/reagent/water/reaction_turf(turf/simulated/T, volume) - if(!istype(T)) - return - if(volume >= 3) - T.MakeSlippery() - - for(var/mob/living/carbon/slime/M in T) - M.apply_water() - - var/hotspot = (locate(/obj/effect/hotspot) in T) - if(hotspot) - var/datum/gas_mixture/lowertemp = T.remove_air( T.air.total_moles()) - lowertemp.temperature = max(min(lowertemp.temperature-2000,lowertemp.temperature / 2), 0) - lowertemp.react() - T.assume_air(lowertemp) - qdel(hotspot) + T.water_act(volume, water_temperature, src) /datum/reagent/water/reaction_obj(obj/O, volume) - O.extinguish() - - if(istype(O, /obj/item/reagent_containers/food/snacks/monkeycube)) - var/obj/item/reagent_containers/food/snacks/monkeycube/cube = O - cube.Expand() - // Dehydrated carp - if(istype(O, /obj/item/toy/carpplushie/dehy_carp)) - var/obj/item/toy/carpplushie/dehy_carp/dehy = O - dehy.Swell() // Makes a carp - + O.water_act(volume, water_temperature, src) /datum/reagent/lube name = "Space Lube" @@ -109,7 +57,7 @@ if(!(istype(B) && B.off_floor)) qdel(O) else - if(!istype(O, /atom/movable/lighting_object)) + if(O.simulated) O.color = initial(O.color) O.clean_blood() diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index a350d75a4b4..829d8fd2226 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -55,13 +55,6 @@ update_icon() return -// this prevented pills, food, and other things from being picked up by bags. -// possibly intentional, but removing it allows us to not duplicate functionality. -// -Sayu (storage conslidation) -/* -/obj/item/reagent_containers/attackby(obj/item/I as obj, mob/user as mob, params) - return -*/ /obj/item/reagent_containers/afterattack(obj/target, mob/user , flag) return diff --git a/code/modules/reagents/reagent_containers/glass_containers.dm b/code/modules/reagents/reagent_containers/glass_containers.dm index d67d888a75b..17d68f7e607 100644 --- a/code/modules/reagents/reagent_containers/glass_containers.dm +++ b/code/modules/reagents/reagent_containers/glass_containers.dm @@ -56,9 +56,54 @@ if(!is_open_container()) to_chat(user, "Airtight lid seals it completely.") +/obj/item/reagent_containers/glass/attack(mob/M, mob/user, def_zone) + if(!is_open_container()) + return ..() + + if(!reagents || !reagents.total_volume) + to_chat(user, "[src] is empty!") + return + + if(istype(M)) + var/list/transferred = list() + for(var/datum/reagent/R in reagents.reagent_list) + transferred += R.name + var/contained = english_list(transferred) + + if(user.a_intent == INTENT_HARM) + M.visible_message("[user] splashes the contents of [src] onto [M]!", \ + "[user] splashes the contents of [src] onto [M]!") + add_attack_logs(M, user, "Splashed with [name] containing [contained]", !!M.ckey ? null : ATKLOG_ALL) + if(!iscarbon(user)) + M.LAssailant = null + else + M.LAssailant = user + + reagents.reaction(M, TOUCH) + reagents.clear_reagents() + else + if(M != user) + M.visible_message("[user] attempts to feed something to [M].", \ + "[user] attempts to feed something to you.") + if(!do_mob(user, M)) + return + if(!reagents || !reagents.total_volume) + return // The drink might be empty after the delay, such as by spam-feeding + M.visible_message("[user] feeds something to [M].", "[user] feeds something to you.") + add_attack_logs(M, user, "Fed with [name] containing [contained]", !!M.ckey ? null : ATKLOG_ALL) + else + to_chat(user, "You swallow a gulp of [src].") + + reagents.reaction(M, INGEST) + addtimer(CALLBACK(reagents, /datum/reagents.proc/trans_to, M, 5), 5) + playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1) + else + return ..() + /obj/item/reagent_containers/glass/afterattack(obj/target, mob/user, proximity) if(!proximity) return + if(!is_open_container()) return @@ -66,26 +111,7 @@ if(istype(target, type)) return - if(user.a_intent != INTENT_HELP && ismob(target) && target.reagents && reagents.total_volume) - to_chat(user, "You splash the solution onto [target].") - - var/mob/living/M = target - var/list/injected = list() - for(var/datum/reagent/R in reagents.reagent_list) - injected += R.name - var/contained = english_list(injected) - add_attack_logs(M, user, "Splashed with [name] containing [contained]", !!M.ckey ? null : ATKLOG_ALL) - if(!iscarbon(user)) - M.LAssailant = null - else - M.LAssailant = user - - for(var/mob/O in viewers(world.view, user)) - O.show_message(text("[] has been splashed with something by []!", target, user), 1) - reagents.reaction(target, TOUCH) - spawn(5) reagents.clear_reagents() - return - else if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us. + if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us. if(target.reagents && !target.reagents.total_volume) to_chat(user, "[target] is empty and can't be refilled!") return @@ -116,12 +142,11 @@ else if(istype(target, /obj/effect/decal)) //stops splashing while scooping up fluids return - else if(reagents.total_volume) - to_chat(user, "You splash the solution onto [target].") + else if(reagents.total_volume && user.a_intent == INTENT_HARM) + user.visible_message("[user] splashes the contents of [src] onto [target]!", \ + "You splash the contents of [src] onto [target].") reagents.reaction(target, TOUCH) - spawn(5) reagents.clear_reagents() - return - + reagents.clear_reagents() /obj/item/reagent_containers/glass/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/pen) || istype(I, /obj/item/flashlight/pen)) @@ -338,3 +363,28 @@ qdel(src) else ..() + +/obj/item/reagent_containers/glass/beaker/waterbottle + name = "bottle of water" + desc = "A bottle of water filled at an old Earth bottling facility." + icon = 'icons/obj/drinks.dmi' + icon_state = "smallbottle" + item_state = "bottle" + list_reagents = list("water" = 49.5, "fluorine" = 0.5) //see desc, don't think about it too hard + materials = list(MAT_GLASS = 0) + volume = 50 + amount_per_transfer_from_this = 10 + +/obj/item/reagent_containers/glass/beaker/waterbottle/empty + list_reagents = list() + +/obj/item/reagent_containers/glass/beaker/waterbottle/large + desc = "A fresh commercial-sized bottle of water." + icon_state = "largebottle" + materials = list(MAT_GLASS = 0) + list_reagents = list("water" = 100) + volume = 100 + amount_per_transfer_from_this = 20 + +/obj/item/reagent_containers/glass/beaker/waterbottle/large/empty + list_reagents = list() \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index ec89b8a463a..cffc2f0ef06 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -76,6 +76,12 @@ icon_state = "pill16" list_reagents = list("adminordrazine" = 50) +/obj/item/reagent_containers/food/pill/morphine + name = "Morphine pill" + desc = "Commonly used to treat insomnia." + icon_state = "pill8" + list_reagents = list("morphine" = 30) + /obj/item/reagent_containers/food/pill/methamphetamine name = "Methamphetamine pill" desc = "Helps improve the ability to concentrate." diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 6413765c99c..4c9ca937409 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -246,7 +246,7 @@ return // Clumsy folks can only flush it. - if(user.IsAdvancedToolUser(1)) + if(user.IsAdvancedToolUser()) ui_interact(user) else flush = !flush diff --git a/code/modules/ruins/lavalandruin_code/ash_walker_den.dm b/code/modules/ruins/lavalandruin_code/ash_walker_den.dm index 686bc77ceaa..7800b3eb9ab 100644 --- a/code/modules/ruins/lavalandruin_code/ash_walker_den.dm +++ b/code/modules/ruins/lavalandruin_code/ash_walker_den.dm @@ -67,7 +67,8 @@ move_resist = MOVE_FORCE_NORMAL density = FALSE flavour_text = "You are an ash walker. Your tribe worships the Necropolis. The wastes are sacred ground, its monsters a blessed bounty. \ - You have seen lights in the distance... they foreshadow the arrival of outsiders that seek to tear apart the Necropolis and its domain. Fresh sacrifices for your nest." + You have seen lights in the distance... they foreshadow the arrival of outsiders that seek to tear apart the Necropolis and its domain. Fresh sacrifices for your nest. \ +
You are free to attack miners and other outsiders. DO NOT leave Lavaland without admin permission! DO NOT attack the mining outpost without being provoked." assignedrole = "Ash Walker" /obj/effect/mob_spawn/human/ash_walker/special(mob/living/carbon/human/new_spawn) diff --git a/code/modules/ruins/lavalandruin_code/syndicate_base.dm b/code/modules/ruins/lavalandruin_code/syndicate_base.dm index 0f092ab4509..bbfa4ef688a 100644 --- a/code/modules/ruins/lavalandruin_code/syndicate_base.dm +++ b/code/modules/ruins/lavalandruin_code/syndicate_base.dm @@ -28,12 +28,14 @@ death = FALSE icon = 'icons/obj/cryogenic2.dmi' icon_state = "sleeper_s" - flavour_text = "You are a syndicate agent, employed in a top secret research facility developing biological weapons. Unfortunately, your hated enemy, Nanotrasen, has begun mining in this sector. Continue your research as best you can, and try to keep a low profile. The base is rigged with explosives, DO NOT abandon it or let it fall into enemy hands!" + flavour_text = "You are a syndicate agent, employed in a top secret research facility developing biological weapons. Unfortunately, your hated enemy, Nanotrasen, has begun mining in this sector. Continue your research as best you can, and try to keep a low profile. The base is rigged with explosives, do not abandon it or let it fall into enemy hands! \ +
You are free to attack anyone not aligned with the Syndicate in the vicinity of your base. DO NOT work against Syndicate personnel (such as traitors or nuclear operatives). You may work with or against non-Syndicate antagonists on a case-by-case basis. DO NOT leave your base without admin permission." outfit = /datum/outfit/lavaland_syndicate assignedrole = "Lavaland Syndicate" /obj/effect/mob_spawn/human/lavaland_syndicate/Destroy() - new/obj/structure/fluff/empty_sleeper/syndicate(get_turf(src)) + var/obj/structure/fluff/empty_sleeper/syndicate/S = new /obj/structure/fluff/empty_sleeper/syndicate(get_turf(src)) + S.setDir(dir) return ..() /datum/outfit/lavaland_syndicate @@ -55,11 +57,13 @@ /obj/effect/mob_spawn/human/lavaland_syndicate/comms name = "Syndicate Comms Agent sleeper" mob_name = "Syndicate Comms Agent" - flavour_text = "You are a syndicate agent, employed in a top secret research facility developing biological weapons. Unfortunately, your hated enemy, Nanotrasen, has begun mining in this sector. Monitor enemy activity as best you can, and try to keep a low profile. DO NOT abandon the base. Use the communication equipment to provide support to any field agents, and sow disinformation to throw Nanotrasen off your trail. Do not let the base fall into enemy hands!" + flavour_text = "You are a syndicate agent, employed in a top secret research facility developing biological weapons. Unfortunately, your hated enemy, Nanotrasen, has begun mining in this sector. Monitor enemy activity as best you can, and try to keep a low profile. Do not abandon the base. Use the communication equipment to provide support to any field agents, and sow disinformation to throw Nanotrasen off your trail. Do not let the base fall into enemy hands! \ +
You are free to attack anyone not aligned with the Syndicate in the vicinity of your base. DO NOT work against Syndicate personnel (such as traitors or nuclear operatives). You may work with or against non-Syndicate antagonists on a case-by-case basis. DO NOT leave your base without admin permission." outfit = /datum/outfit/lavaland_syndicate/comms /obj/effect/mob_spawn/human/lavaland_syndicate/comms/space - flavour_text = "You are a syndicate agent, assigned to a small listening post station situated near your hated enemy's top secret research facility: Space Station 13. Monitor enemy activity as best you can, and try to keep a low profile. DO NOT abandon the base. Use the communication equipment to provide support to any field agents, and sow disinformation to throw Nanotrasen off your trail. Do not let the base fall into enemy hands!" + flavour_text = "You are a syndicate agent, assigned to a small listening post station situated near your hated enemy's top secret research facility: Space Station 13. Monitor enemy activity as best you can, and try to keep a low profile. Do not abandon the base. Use the communication equipment to provide support to any field agents, and sow disinformation to throw Nanotrasen off your trail. Do not let the base fall into enemy hands! \ +
You are free to attack anyone not aligned with the Syndicate in the vicinity of your base. DO NOT work against Syndicate personnel (such as traitors or nuclear operatives). You may work with or against non-Syndicate antagonists on a case-by-case basis. DO NOT leave your base without admin permission." /obj/effect/mob_spawn/human/lavaland_syndicate/comms/space/Initialize(mapload) . = ..() @@ -70,10 +74,10 @@ /datum/outfit/lavaland_syndicate/comms name = "Lavaland Syndicate Comms Agent" r_hand = /obj/item/melee/energy/sword/saber - mask = /obj/item/clothing/mask/gas/voice + mask = /obj/item/clothing/mask/chameleon/gps suit = /obj/item/clothing/suit/armor/vest -/obj/item/clothing/mask/gas/voice/gps/New() +/obj/item/clothing/mask/chameleon/gps/New() . = ..() new /obj/item/gps/internal/lavaland_syndicate_base(src) diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index 28cb96b128b..b6a7e7bb28f 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -58,12 +58,10 @@ var/contcount for(var/atom/A in T.contents) - if(istype(A,/atom/movable/lighting_object)) - continue - if(istype(A,/obj/machinery/light)) - continue //hacky but whatever, shuttles need three spots each for this shit if(!A.simulated) continue + if(istype(A, /obj/machinery/light)) + continue //hacky but whatever, shuttles need three spots each for this shit contcount++ if(contcount) diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm index 512de9de9e9..987315ac13b 100644 --- a/code/modules/surgery/organs/heart.dm +++ b/code/modules/surgery/organs/heart.dm @@ -82,11 +82,10 @@ var/heal_burn = 0 var/heal_oxy = 0 - /obj/item/organ/internal/heart/cursed/attack(mob/living/carbon/human/H, mob/living/carbon/human/user, obj/target) if(H == user && istype(H)) if(NO_BLOOD in H.dna.species.species_traits) - to_chat(H, "\The [src] is not compatible with your form!") + to_chat(H, "[src] is not compatible with your form!") return playsound(user,'sound/effects/singlebeat.ogg', 40, 1) user.drop_item() @@ -111,17 +110,16 @@ if(owner) to_chat(owner, "Your heart has been replaced with a cursed one, you have to pump this one manually otherwise you'll die!") - /datum/action/item_action/organ_action/cursed_heart name = "pump your blood" //You are now brea- pumping blood manually /datum/action/item_action/organ_action/cursed_heart/Trigger() . = ..() - if(. && istype(target,/obj/item/organ/internal/heart/cursed)) + if(. && istype(target, /obj/item/organ/internal/heart/cursed)) var/obj/item/organ/internal/heart/cursed/cursed_heart = target - if(world.time < (cursed_heart.last_pump + (cursed_heart.pump_delay-10))) //no spam + if(world.time < (cursed_heart.last_pump + (cursed_heart.pump_delay - 10))) //no spam to_chat(owner, "Too soon!") return @@ -132,7 +130,7 @@ var/mob/living/carbon/human/H = owner if(istype(H)) if(!(NO_BLOOD in H.dna.species.species_traits)) - H.blood_volume = min(H.blood_volume + cursed_heart.blood_loss*0.5, BLOOD_VOLUME_NORMAL) + H.blood_volume = min(H.blood_volume + cursed_heart.blood_loss * 0.5, BLOOD_VOLUME_NORMAL) if(owner.client) owner.client.color = "" diff --git a/code/modules/telesci/gps.dm b/code/modules/telesci/gps.dm index ca22fb5cb0e..29a4509ae7a 100644 --- a/code/modules/telesci/gps.dm +++ b/code/modules/telesci/gps.dm @@ -80,19 +80,18 @@ var/list/GPS_list = list() popup.open() /obj/item/gps/Topic(href, href_list) - if(..(state = inventory_state)) + if(..()) return 1 if(href_list["tag"] ) - var/a = input("Please enter desired tag.", name, gpstag) as text|null - if(!a || ..(state = inventory_state)) - return 1 + var/tag = input("Please enter desired tag.", name, gpstag) as text|null + if(!tag || ..()) + return TRUE - a = uppertext(sanitize(copytext(a, 1, 5))) - if(src.loc == usr) - gpstag = a - name = "global positioning system ([gpstag])" - attack_self(usr) + tag = uppertext(sanitize(copytext(tag, 1, 5))) + gpstag = tag + name = "global positioning system ([gpstag])" + attack_self(usr) /obj/item/gps/science icon_state = "gps-s" diff --git a/code/modules/tram/tram.dm b/code/modules/tram/tram.dm index fed50355dde..0f80c99405e 100644 --- a/code/modules/tram/tram.dm +++ b/code/modules/tram/tram.dm @@ -22,7 +22,7 @@ var/delay_timer = null - var/list/blacklist = list(/obj/tram/rail,/atom/movable/lighting_object) + var/list/blacklist = list(/obj/tram/rail) var/list/ancwhitelist = list(/obj/tram, /obj/vehicle, /obj/structure/chair, /obj/structure/grille, /obj/structure/window) /obj/tram/tram_controller/New() @@ -135,14 +135,20 @@ tram += src /obj/tram/tram_controller/proc/check_validity(var/atom/movable/AM) - if(!AM) return 0 - if(is_type_in_list(AM, blacklist)) return 0 - if(!AM.simulated) return 0 + if(!AM) + return FALSE + + if(!AM.simulated) + return FALSE + + if(is_type_in_list(AM, blacklist)) + return FALSE + if(AM.anchored) if(is_type_in_list(AM, ancwhitelist)) - return 1 - return 0 - return 1 + return TRUE + return FALSE + return TRUE /obj/tram/tram_controller/proc/init_controllers() for(var/obj/tram/controlpad/CCP in tram) diff --git a/html/changelogs/AutoChangeLog-pr-11421.yml b/html/changelogs/AutoChangeLog-pr-11421.yml new file mode 100644 index 00000000000..83e285205c3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11421.yml @@ -0,0 +1,16 @@ +author: "Arkatos" +delete-after: True +changes: + - bugfix: "Ragin' Mages gamemode should now be playable without any major issue" + - bugfix: "Slaughter and Laughter Demons no longer have duplicit objective shown at the Round End" + - bugfix: "Laughter Demon is now properly called Laughter Demon instead of Slaughter Demon in the role polls" + - spellcheck: "Improved wording and fixed mistakes in Wizard and Ragin' Mages gamemodes" + - tweak: "Wizards are now properly polled in the Ragin' Mages gamemode" + - tweak: "You can no longer buy Summon Ghosts spell in the Ragin' Mages gamemode" + - tweak: "You can no longer buy Bind Soul spell in the Ragin' Mages gamemode" + - tweak: "Deck of tarot cards renamed to Guardian Deck in the Wizard spellbook" + - tweak: "Rituals and Challenges categories merged into one in the Wizard spellbook" + - tweak: "Laughter Demon is now slightly weaker compared to the Slaughter Demon" + - tweak: "Bottle of Ooze now creates a magical morph instead of a normal one. Magical morph is capable of casting smoke and forcewall spells." + - tweak: "Visible ghosts will now get a special description about their visibility" + - rscdel: "Removed Cursed Heart from the Wizard spellbook" diff --git a/html/changelogs/AutoChangeLog-pr-11482.yml b/html/changelogs/AutoChangeLog-pr-11482.yml new file mode 100644 index 00000000000..65cc53a7f97 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11482.yml @@ -0,0 +1,4 @@ +author: "TDSSS" +delete-after: True +changes: + - tweak: "Sling glare popup no longer lists invalid targets for glaring" diff --git a/html/changelogs/AutoChangeLog-pr-11620.yml b/html/changelogs/AutoChangeLog-pr-11620.yml new file mode 100644 index 00000000000..6511722a427 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11620.yml @@ -0,0 +1,4 @@ +author: "Citinited" +delete-after: True +changes: + - bugfix: "Fixes conveyor belts not moving items spawned via an autolathe. (And other possible behaviours when machines switch between speed and normal processes)" diff --git a/html/changelogs/AutoChangeLog-pr-11628.yml b/html/changelogs/AutoChangeLog-pr-11628.yml new file mode 100644 index 00000000000..165e24173b7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11628.yml @@ -0,0 +1,14 @@ +author: "Markolie" +delete-after: True +changes: + - rscadd: "Added custom explorer gas mask sprites for Grey/Drask." + - rscadd: "Added a lantern to the Hermit cave." + - rscadd: "Added a bone setter, bone gel, FixOVein, sterile masks and sterile gloves to the Lavaland Syndicate base." + - rscadd: "The pickaxes on the Lavaland labor camp have been replaced with safety variants. The flashlights have been replaced with lanterns." + - bugfix: "Fixed many species missing sprites for explorer gas masks and jumpsuits. They now use the humans icons until we have custom sprites." + - bugfix: "Resolved an issue with piping not working on the Lavaland mining bases." + - bugfix: "Fixed all items being free in the mining vendor." + - bugfix: "Fixed improper wiring to the turbine in the Lavaland Syndicate base." + - bugfix: "Fixed the Lavaland Syndicate base oxygen sensor not working." + - bugfix: "Moved the pipe dispenser in the Lavaland Syndicate base so it doesn't clip with tables." + - bugfix: "Fixed the Lavaland Syndicate base incinerator doors not working." diff --git a/html/changelogs/AutoChangeLog-pr-11630.yml b/html/changelogs/AutoChangeLog-pr-11630.yml new file mode 100644 index 00000000000..043b23d37ac --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11630.yml @@ -0,0 +1,21 @@ +author: "Markolie and Ionward" +delete-after: True +changes: + - rscadd: "Added Tajaran, Vulpkanin, Unathi and Vox sprites for the explorer gas mask (thanks to Ionward!)" + - rscadd: "Added custom species sprites for the explorer suits and hoods (thanks to Ionward!)" + - rscadd: "Added missing surgical tools and a pet vendor to the animal hospital." + - rscadd: "Added a custom cigarette vendor to the beach biodome ruin." + - rscadd: "Added an autolathe and RPD to the Lavaland Syndicate base. Also added a custom cigarette vendor and made the vendors not charge money." + - rscadd: "Added tiny fans to the mining base and labor camp exist." + - rscadd: "A separate jobban for ghost roles has been added." + - bugfix: "The alternative sink now has directional sprites. This resolves an issue with shelters having sinks facing the wrong way." + - bugfix: "Fixed the Syndicate sleepers on the Lavaland Syndicate base pointing the wrong way when a ghost role spawns in." + - bugfix: "Fixed Lava being removed by the staff of lava not working. Also added a missing warning effect when the staff is turning regular turf into lava." + - bugfix: "Fixed random bookcases not spawning books (hopefully)." + - bugfix: "Fixed surgical drapes not having a sprite." + - bugfix: "Fixed being unable to modify the GPS tag of shelters." + - bugfix: "Fixed the Lavaland swarmers not eating anything." + - bugfix: "The ash drake swoop attack is no longer incredibly loud." + - tweak: "The Syndicate base self-destruct is now much more powerful and capable of destroying the entire base." + - tweak: "The flavor text of Ash Walkers and Syndicate operatives now clarifies what they can('t) do." + - tweak: "Ash walkers can no longer use machinery." diff --git a/html/changelogs/AutoChangeLog-pr-11641.yml b/html/changelogs/AutoChangeLog-pr-11641.yml new file mode 100644 index 00000000000..8a74e6e0461 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11641.yml @@ -0,0 +1,8 @@ +author: "Markolie" +delete-after: True +changes: + - tweak: "Ash Walkers now once more have fine manipulation. Their lack of fine manipulation caused unintended side effects (such as them being unable to mine)." + - bugfix: "Ash Walkers (and other ghost spawner roles) can no longer be antagonist targets or become antagonists through the antagonist creation." + - bugfix: "Fixed the Lavaland Syndicate base incinerator buttons not working." + - bugfix: "Fixed the Syndicate communication agent spawning with a broken voice changer mask." + - bugfix: "Fixed the Disk Compartmentalizer not having a sprite." diff --git a/html/changelogs/AutoChangeLog-pr-11643.yml b/html/changelogs/AutoChangeLog-pr-11643.yml new file mode 100644 index 00000000000..74fa2f18b4e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11643.yml @@ -0,0 +1,18 @@ +author: "Markolie" +delete-after: True +changes: + - rscadd: "The Ancient Goliath now has a small chance of spawning instead of regular goliaths." + - rscadd: "Survival capsules now have a NanoMed." + - tweak: "Water bottles now behave as glass containers." + - tweak: "The behaviour of glass reagent containers has changed. When used on non-mobs, contents will now only be spilled on harm intent. When used on mobs, on any intent aside from harm the contents will be fed to the mob like regular drinks. On harm intent it will still be spilled." + - tweak: "Hairless hide can now be made wet using most sources of water (minimum volume of 10), instead of just washing machines." + - bugfix: "Added some additional offstation role checks to ensure ghost spawner roles don't become antagonists, are kidnap targets or are counted towards station goals." + - bugfix: "Fixed some piping in the Lavaland Syndicate base incinerator and made sure the vault door starts locked." + - bugfix: "Fixed the Lavaland swarmers getting stuck on propulsion." + - bugfix: "Fix goliath tentacles sometimes being left behind." + - bugfix: "The walls around the Lavaland Syndicate base turbine have been coated, to prevent them from starting a plasma fire in the base." + - bugfix: "Syndicate agents can now access the air alarms on the Lavaland Syndicate base." + - bugfix: "Air alarm control computers can no longer access the air alarms on the Lavaland Syndicate base." + - bugfix: "Fixed the disk compartmentalizer/drying rack missing a sprite under certain circumstances." + - bugfix: "Fixed the Lavaland Syndicate base triggering atmospherics alerts." + - bugfix: "You can now properly place tiles on basalt." diff --git a/html/changelogs/AutoChangeLog-pr-11656.yml b/html/changelogs/AutoChangeLog-pr-11656.yml new file mode 100644 index 00000000000..5b0a8408162 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11656.yml @@ -0,0 +1,4 @@ +author: "Markolie" +delete-after: True +changes: + - bugfix: "An exploit with the sheet multiplier has been fixed." diff --git a/html/changelogs/AutoChangeLog-pr-11664.yml b/html/changelogs/AutoChangeLog-pr-11664.yml new file mode 100644 index 00000000000..8acfb84a4f9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11664.yml @@ -0,0 +1,21 @@ +author: "Markolie" +delete-after: True +changes: + - rscadd: "Portals can now be activated by clicking on them with or without an object. Ghosts can now also click on them to be taken to their destination." + - rscadd: "Portals now warn admins when they are used to teleport megafauna." + - tweak: "The singularity can now eat basalt and chasms on Lavaland. They get turned into lava." + - bugfix: "AI swarmers will no longer get stuck on effects (such as blood)." + - bugfix: "Fixed the spectral blade turning all ghosts visible." + - bugfix: "Fixed a runtime with assigning outfits to mindless mobs." + - bugfix: "Fixed certain alarms triggering despite being outside of station contact and the Syndicate base still triggering fire alarms." + - bugfix: "Fixed being unable to put the wormhole jaunter in the belt slot." + - bugfix: "Fixed the disk compartmentalizer not accepting disks." + - bugfix: "Gutlunches and Gubbucks will now reproduce properly." + - bugfix: "The necropolis chest cult clothing drop no longer spawns with a cult hood as well, as that's part of the suit itself." + - bugfix: "Goliath steaks can now be eaten properly." + - bugfix: "Fixed a stray light on the beach ruin." + - bugfix: "Lavaland ruins should no longer spawn on the Labor Camp." + - bugfix: "Ancient goliaths will now properly randomly spawn tentacles." + - bugfix: "The labor camp will now spawn properly with a processing console." + - bugfix: "Water turfs in the beach ruin (and other water turfs that previously didn't do so) will now properly apply water to you." + - bugfix: "Ash flora is now anchored." diff --git a/html/changelogs/AutoChangeLog-pr-11676.yml b/html/changelogs/AutoChangeLog-pr-11676.yml new file mode 100644 index 00000000000..cf6f4267e66 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11676.yml @@ -0,0 +1,4 @@ +author: "Terilia" +delete-after: True +changes: + - rscadd: "Added the Donksoft sniper into the Trader spawnpool." diff --git a/html/changelogs/AutoChangeLog-pr-11688.yml b/html/changelogs/AutoChangeLog-pr-11688.yml new file mode 100644 index 00000000000..638a332682c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11688.yml @@ -0,0 +1,6 @@ +author: "Markolie" +delete-after: True +changes: + - bugfix: "Gutlunches will now eat properly." + - bugfix: "The tesla can no longer travel through wormholes." + - bugfix: "Fixed an issue with honkbot construction." diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index 35694b3719e..26526f68951 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/mob/species/drask/head.dmi b/icons/mob/species/drask/head.dmi index 41bf78cc8c6..fadfc1ed68d 100644 Binary files a/icons/mob/species/drask/head.dmi and b/icons/mob/species/drask/head.dmi differ diff --git a/icons/mob/species/drask/mask.dmi b/icons/mob/species/drask/mask.dmi index c1357c43144..dffedfb1c78 100644 Binary files a/icons/mob/species/drask/mask.dmi and b/icons/mob/species/drask/mask.dmi differ diff --git a/icons/mob/species/drask/suit.dmi b/icons/mob/species/drask/suit.dmi index 697c3888f77..a5fa1e95a3c 100644 Binary files a/icons/mob/species/drask/suit.dmi and b/icons/mob/species/drask/suit.dmi differ diff --git a/icons/mob/species/grey/head.dmi b/icons/mob/species/grey/head.dmi index e24367a10e2..201e1032562 100644 Binary files a/icons/mob/species/grey/head.dmi and b/icons/mob/species/grey/head.dmi differ diff --git a/icons/mob/species/grey/mask.dmi b/icons/mob/species/grey/mask.dmi index 1225b1e68ad..112895a6009 100644 Binary files a/icons/mob/species/grey/mask.dmi and b/icons/mob/species/grey/mask.dmi differ diff --git a/icons/mob/species/plasmaman/helmet.dmi b/icons/mob/species/plasmaman/helmet.dmi index 188db97e788..bd5465857d8 100644 Binary files a/icons/mob/species/plasmaman/helmet.dmi and b/icons/mob/species/plasmaman/helmet.dmi differ diff --git a/icons/mob/species/plasmaman/suit.dmi b/icons/mob/species/plasmaman/suit.dmi index 42832013f85..c4d1a7a2b3c 100644 Binary files a/icons/mob/species/plasmaman/suit.dmi and b/icons/mob/species/plasmaman/suit.dmi differ diff --git a/icons/mob/species/skrell/head.dmi b/icons/mob/species/skrell/head.dmi new file mode 100644 index 00000000000..ec5e8dd62e4 Binary files /dev/null and b/icons/mob/species/skrell/head.dmi differ diff --git a/icons/mob/species/tajaran/mask.dmi b/icons/mob/species/tajaran/mask.dmi index 8cb76c80b75..3b2c1891c07 100644 Binary files a/icons/mob/species/tajaran/mask.dmi and b/icons/mob/species/tajaran/mask.dmi differ diff --git a/icons/mob/species/tajaran/suit.dmi b/icons/mob/species/tajaran/suit.dmi index 1b7299cc8fb..bcc02304de0 100644 Binary files a/icons/mob/species/tajaran/suit.dmi and b/icons/mob/species/tajaran/suit.dmi differ diff --git a/icons/mob/species/unathi/mask.dmi b/icons/mob/species/unathi/mask.dmi index a4218e5af40..5274697cdc1 100644 Binary files a/icons/mob/species/unathi/mask.dmi and b/icons/mob/species/unathi/mask.dmi differ diff --git a/icons/mob/species/unathi/suit.dmi b/icons/mob/species/unathi/suit.dmi index 6e2c3d9836d..3c372768f16 100644 Binary files a/icons/mob/species/unathi/suit.dmi and b/icons/mob/species/unathi/suit.dmi differ diff --git a/icons/mob/species/vox/head.dmi b/icons/mob/species/vox/head.dmi index fb0c9962a07..7d9f2999e27 100644 Binary files a/icons/mob/species/vox/head.dmi and b/icons/mob/species/vox/head.dmi differ diff --git a/icons/mob/species/vox/mask.dmi b/icons/mob/species/vox/mask.dmi index 971978ccff4..b836b78538f 100644 Binary files a/icons/mob/species/vox/mask.dmi and b/icons/mob/species/vox/mask.dmi differ diff --git a/icons/mob/species/vox/suit.dmi b/icons/mob/species/vox/suit.dmi index 3af770d719a..0716073b931 100644 Binary files a/icons/mob/species/vox/suit.dmi and b/icons/mob/species/vox/suit.dmi differ diff --git a/icons/mob/species/vulpkanin/mask.dmi b/icons/mob/species/vulpkanin/mask.dmi index 8f7f7f103c2..43b527266b8 100644 Binary files a/icons/mob/species/vulpkanin/mask.dmi and b/icons/mob/species/vulpkanin/mask.dmi differ diff --git a/icons/mob/species/vulpkanin/suit.dmi b/icons/mob/species/vulpkanin/suit.dmi index 61d5e4b3b67..751ecf7626d 100644 Binary files a/icons/mob/species/vulpkanin/suit.dmi and b/icons/mob/species/vulpkanin/suit.dmi differ diff --git a/icons/obj/clothing/species/plasmaman/hats.dmi b/icons/obj/clothing/species/plasmaman/hats.dmi index 1d85d184ad1..fc76e521d55 100644 Binary files a/icons/obj/clothing/species/plasmaman/hats.dmi and b/icons/obj/clothing/species/plasmaman/hats.dmi differ diff --git a/icons/obj/clothing/species/plasmaman/suits.dmi b/icons/obj/clothing/species/plasmaman/suits.dmi index 43d69f5fa82..78ddd94dedb 100644 Binary files a/icons/obj/clothing/species/plasmaman/suits.dmi and b/icons/obj/clothing/species/plasmaman/suits.dmi differ diff --git a/icons/obj/hydroponics/equipment.dmi b/icons/obj/hydroponics/equipment.dmi index 3b1c4c07cfa..f9e4f6bfbfc 100644 Binary files a/icons/obj/hydroponics/equipment.dmi and b/icons/obj/hydroponics/equipment.dmi differ diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index e212d9c5882..5a976767f11 100644 Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ diff --git a/icons/obj/vending.dmi b/icons/obj/vending.dmi index b7aaa3f83f3..5be90269399 100755 Binary files a/icons/obj/vending.dmi and b/icons/obj/vending.dmi differ diff --git a/icons/obj/watercloset.dmi b/icons/obj/watercloset.dmi index e30d7888844..baa04328498 100644 Binary files a/icons/obj/watercloset.dmi and b/icons/obj/watercloset.dmi differ diff --git a/paradise.dme b/paradise.dme index 1bf74ad556c..c49361b8e20 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1636,6 +1636,7 @@ #include "code\modules\mining\satchel_ore_boxdm.dm" #include "code\modules\mining\shelters.dm" #include "code\modules\mining\equipment\marker_beacons.dm" +#include "code\modules\mining\equipment\survival_pod.dm" #include "code\modules\mining\laborcamp\laborshuttle.dm" #include "code\modules\mining\laborcamp\laborstacker.dm" #include "code\modules\mining\lavaland\ash_flora.dm"