diff --git a/_maps/map_files/CogStation/CogStation.dmm b/_maps/map_files/CogStation/CogStation.dmm index 3c64b9f6ad..f88a891b39 100644 --- a/_maps/map_files/CogStation/CogStation.dmm +++ b/_maps/map_files/CogStation/CogStation.dmm @@ -64,8 +64,8 @@ /turf/closed/wall, /area/maintenance/port/fore) "aam" = ( -/obj/structure/table, -/obj/item/storage/box/lights/mixed, +/obj/structure/rack, +/obj/item/storage/toolbox/emergency, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/port/fore) @@ -90,15 +90,13 @@ /turf/open/floor/plasteel/airless/solarpanel, /area/solar/starboard/fore) "aap" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/open/floor/plating, -/area/maintenance/port/fore) +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/closed/wall, +/area/crew_quarters/observatory) "aaq" = ( -/obj/structure/rack, -/obj/item/storage/toolbox/emergency, -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating, -/area/maintenance/port/fore) +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/turf/closed/wall/r_wall, +/area/crew_quarters/observatory) "aar" = ( /obj/machinery/conveyor/auto{ dir = 8; @@ -664,14 +662,6 @@ }, /turf/open/floor/plating/airless, /area/router/aux) -"abF" = ( -/obj/machinery/mass_driver{ - dir = 8; - id = "sb_out"; - name = "Router Driver" - }, -/turf/open/floor/plating/airless, -/area/router/aux) "abG" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -709,13 +699,6 @@ /obj/item/paper/fluff/cogstation/cluwne, /turf/open/floor/plating, /area/crew_quarters/theatre/clown) -"abJ" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "sb_off" - }, -/turf/open/floor/plating/airless, -/area/router/aux) "abK" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -819,17 +802,10 @@ }, /turf/open/floor/plating, /area/maintenance/port/fore) -"abZ" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "sb_off" - }, -/turf/open/floor/plating/airless, -/area/router/aux) "aca" = ( -/obj/machinery/conveyor{ +/obj/machinery/conveyor/auto{ dir = 5; - id = "pb_off" + id = "pb" }, /turf/open/floor/plating/airless, /area/router/aux) @@ -858,17 +834,9 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) "ace" = ( -/obj/machinery/conveyor{ +/obj/machinery/conveyor/auto{ dir = 4; - id = "pb_off" - }, -/turf/open/floor/plating/airless, -/area/router/aux) -"acf" = ( -/obj/machinery/mass_driver{ - dir = 4; - id = "pb_out"; - name = "Router Driver" + id = "pb" }, /turf/open/floor/plating/airless, /area/router/aux) @@ -898,9 +866,9 @@ name = "Medical Booth" }) "acj" = ( -/obj/machinery/conveyor{ +/obj/machinery/conveyor/auto{ dir = 4; - id = "solar_off" + id = "solar" }, /turf/open/floor/plating/airless, /area/router/aux) @@ -973,8 +941,8 @@ /obj/structure/disposalpipe/junction{ dir = 4 }, -/obj/machinery/conveyor{ - id = "solar_off" +/obj/machinery/conveyor/auto{ + id = "solar" }, /turf/open/floor/plating/airless, /area/router/aux) @@ -1052,25 +1020,10 @@ /obj/structure/rack, /turf/open/floor/plasteel, /area/ai_monitored/security/armory) -"acz" = ( -/obj/machinery/mass_driver{ - dir = 4; - id = "sb_in"; - name = "Router Driver" - }, -/turf/open/floor/plating/airless, -/area/router/aux) -"acA" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "sb_off" - }, -/turf/open/floor/plating/airless, -/area/router/aux) "acB" = ( /obj/machinery/conveyor{ dir = 6; - id = "sb_off" + id = "starboard" }, /turf/open/floor/plating/airless, /area/router/aux) @@ -1109,9 +1062,9 @@ /turf/closed/wall, /area/crew_quarters/lounge) "acG" = ( -/obj/machinery/conveyor{ +/obj/machinery/conveyor/auto{ dir = 1; - id = "pb_off" + id = "pb" }, /turf/open/floor/plating/airless, /area/router/aux) @@ -1142,8 +1095,8 @@ /area/crew_quarters/lounge) "acJ" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/conveyor{ - id = "solar_off" +/obj/machinery/conveyor/auto{ + id = "solar" }, /turf/open/floor/plating/airless, /area/router/aux) @@ -1297,18 +1250,11 @@ }, /turf/closed/wall/r_wall, /area/security/brig) -"adc" = ( -/obj/machinery/conveyor{ - id = "sb_off" - }, -/turf/open/floor/plating/airless, -/area/router/aux) "add" = ( -/obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 6 }, -/turf/open/floor/plating, +/turf/closed/wall, /area/crew_quarters/observatory) "ade" = ( /obj/machinery/atmospherics/components/binary/valve/digital/on, @@ -1332,11 +1278,10 @@ /turf/open/floor/plasteel, /area/crew_quarters/lounge) "adh" = ( -/obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 10 }, -/turf/open/floor/plating, +/turf/closed/wall, /area/crew_quarters/observatory) "adi" = ( /turf/open/floor/plasteel, @@ -1349,8 +1294,8 @@ /obj/structure/disposalpipe/segment{ dir = 5 }, -/obj/machinery/conveyor{ - id = "solar_off" +/obj/machinery/conveyor/auto{ + id = "solar" }, /turf/open/floor/plating/airless, /area/router/aux) @@ -1494,9 +1439,8 @@ /turf/open/floor/plasteel/dark, /area/crew_quarters/observatory) "adG" = ( -/obj/machinery/mass_driver{ - id = "serv_in"; - name = "Router Driver" +/obj/machinery/mass_driver/pressure_plate{ + id = "hydro_in" }, /turf/open/floor/plating/airless, /area/router/aux) @@ -1535,13 +1479,6 @@ /obj/machinery/atmospherics/pipe/simple/cyan/hidden, /turf/open/floor/plasteel/stairs/medium, /area/security/brig) -"adL" = ( -/obj/machinery/mass_driver{ - id = "starboard_in"; - name = "Router Driver" - }, -/turf/open/floor/plating/airless, -/area/router/aux) "adM" = ( /turf/closed/wall, /area/crew_quarters/observatory) @@ -2671,8 +2608,9 @@ /turf/open/floor/plating, /area/construction) "agy" = ( -/obj/effect/landmark/xeno_spawn, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/table, +/obj/item/storage/box/lights/mixed, +/obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/port/fore) "agz" = ( @@ -4478,6 +4416,7 @@ /obj/structure/plasticflaps, /obj/structure/fans/tiny, /obj/machinery/door/poddoor{ + id = "security_out"; name = "Security Router" }, /turf/open/floor/plating, @@ -4661,7 +4600,7 @@ "als" = ( /obj/machinery/mass_driver{ dir = 1; - id = "sec_out"; + id = "security_out"; name = "Router Driver" }, /turf/open/floor/plating, @@ -5525,16 +5464,15 @@ dir = 8 }, /obj/item/destTagger, -/obj/machinery/button/door{ - id = "secblock"; - name = "Router Access Control"; - pixel_x = 8; - pixel_y = 24; - req_access_txt = "1" - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 }, +/obj/machinery/button/massdriver{ + id = "security_out"; + name = "Security Driver Control"; + pixel_x = 8; + pixel_y = 24 + }, /turf/open/floor/plasteel, /area/router/sec) "ant" = ( @@ -5817,9 +5755,9 @@ /turf/open/floor/plating, /area/maintenance/solars/port) "anW" = ( -/obj/machinery/conveyor{ +/obj/machinery/conveyor/auto{ dir = 1; - id = "sec_off" + id = "sec" }, /turf/open/floor/plating, /area/router/sec) @@ -6276,20 +6214,20 @@ "aoS" = ( /obj/structure/plasticflaps, /obj/structure/fans/tiny, -/obj/machinery/conveyor{ - id = "serv_off" - }, /obj/machinery/door/poddoor{ - id = "servblock"; + id = "hydro_in"; name = "Service Router" }, +/obj/machinery/conveyor/auto{ + id = "service" + }, /turf/open/floor/plating, /area/router/service) "aoT" = ( /obj/structure/plasticflaps, /obj/structure/fans/tiny, /obj/machinery/door/poddoor{ - id = "servblock"; + id = "hydro_out"; name = "Service Router" }, /turf/open/floor/plating, @@ -6478,11 +6416,6 @@ /obj/structure/cable{ icon_state = "2-8" }, -/obj/machinery/button/massdriver{ - id = "sec_out"; - pixel_x = 24; - pixel_y = 24 - }, /turf/open/floor/plasteel, /area/router/sec) "aps" = ( @@ -6792,8 +6725,8 @@ }, /area/chapel/main) "aqe" = ( -/obj/machinery/conveyor{ - id = "serv_off" +/obj/machinery/conveyor/auto{ + id = "service" }, /turf/open/floor/plating, /area/router/service) @@ -6933,7 +6866,7 @@ "aqy" = ( /obj/machinery/mass_driver{ dir = 1; - id = "serv_out"; + id = "hydro_out"; name = "Router Driver" }, /turf/open/floor/plating, @@ -7497,11 +7430,6 @@ light_color = "#ffc1c1" }, /obj/item/destTagger, -/obj/machinery/button/massdriver{ - id = "serv_out"; - pixel_x = 8; - pixel_y = -4 - }, /obj/machinery/requests_console{ department = "Service Router"; name = "Service Router RC"; @@ -7510,9 +7438,9 @@ /turf/open/floor/plasteel, /area/router/service) "arL" = ( -/obj/machinery/conveyor{ +/obj/machinery/conveyor/auto{ dir = 1; - id = "serv_off" + id = "service" }, /turf/open/floor/plating, /area/router/service) @@ -7962,12 +7890,11 @@ /obj/effect/turf_decal/stripes/line{ dir = 9 }, -/obj/machinery/button/door{ - id = "servblock"; - name = "Router Access Control"; +/obj/machinery/button/massdriver{ + id = "hydro_out"; + name = "Service Driver Control"; pixel_x = 8; - pixel_y = 24; - req_one_access_txt = "12;25;26;28;35;46" + pixel_y = 24 }, /turf/open/floor/plasteel, /area/router/service) @@ -8538,7 +8465,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, -/obj/effect/landmark/xeno_spawn, /turf/open/floor/carpet/purple, /area/crew_quarters/dorms/purple) "atZ" = ( @@ -9047,9 +8973,9 @@ dir = 8 }, /obj/machinery/turnstile{ - name = "Genpop Entrance Turnstile"; - icon_state = "turnstile_map"; dir = 8; + icon_state = "turnstile_map"; + name = "Genpop Entrance Turnstile"; req_access_txt = "69" }, /turf/open/floor/plasteel, @@ -9730,9 +9656,9 @@ name = "Brig Lockdown" }, /obj/machinery/turnstile{ - name = "Genpop Entrance Turnstile"; - icon_state = "turnstile_map"; dir = 8; + icon_state = "turnstile_map"; + name = "Genpop Entrance Turnstile"; req_access_txt = "69" }, /turf/open/floor/plasteel, @@ -10134,9 +10060,6 @@ /turf/open/floor/plasteel, /area/hydroponics) "axt" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -10473,12 +10396,6 @@ /obj/structure/cable{ icon_state = "1-4" }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, /turf/open/floor/engine, /area/engine/supermatter{ name = "Thermo-Electric Generator" @@ -11341,10 +11258,9 @@ /turf/open/floor/plasteel, /area/security/prison) "azO" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/landmark/blobstart, -/turf/open/floor/plasteel, -/area/hydroponics/lobby) +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating, +/area/maintenance/port/fore) "azP" = ( /obj/effect/turf_decal/bot, /obj/machinery/vending/cola/random, @@ -11515,6 +11431,7 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/solars/port) "aAj" = ( @@ -12941,9 +12858,6 @@ "aCZ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/sign/warning/electricshock, -/obj/structure/cable{ - icon_state = "1-2" - }, /turf/open/floor/plating, /area/engine/supermatter{ name = "Thermo-Electric Generator" @@ -15408,7 +15322,7 @@ icon_state = "0-4" }, /obj/machinery/power/apc{ - areastring = "/area/maintenance/central"; + areastring = "/area/security/main"; dir = 1; name = "Security Office APC"; pixel_y = 24 @@ -18668,6 +18582,9 @@ }) "aOl" = ( /obj/effect/turf_decal/delivery, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /turf/open/floor/engine, /area/engine/supermatter{ name = "Thermo-Electric Generator" @@ -18988,6 +18905,9 @@ /turf/open/floor/plating, /area/crew_quarters/fitness/cogpool) "aOV" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /turf/open/floor/plasteel/stairs, /area/engine/supermatter{ name = "Thermo-Electric Generator" @@ -19401,7 +19321,7 @@ icon_state = "0-8" }, /turf/open/floor/plating, -/area/space/nearstation) +/area/crew_quarters/fitness/cogpool) "aPO" = ( /obj/machinery/atmospherics/pipe/manifold/supply/visible{ dir = 8 @@ -19667,16 +19587,10 @@ icon_state = "4-8" }, /turf/open/floor/plating/airless, -/area/space/nearstation) +/area/crew_quarters/fitness/cogpool) "aQq" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/closed/wall/r_wall, -/area/space/nearstation) +/turf/open/floor/plating/airless, +/area/crew_quarters/fitness/cogpool) "aQr" = ( /obj/structure/grille, /obj/structure/disposalpipe/segment{ @@ -19689,7 +19603,7 @@ icon_state = "0-4" }, /turf/open/floor/plating, -/area/space/nearstation) +/area/crew_quarters/lounge/jazz) "aQs" = ( /obj/machinery/firealarm{ dir = 1; @@ -20145,6 +20059,9 @@ /area/crew_quarters/heads/hop) "aRp" = ( /obj/structure/sign/warning/fire, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /turf/closed/wall/r_wall, /area/engine/supermatter{ name = "Thermo-Electric Generator" @@ -20304,7 +20221,9 @@ dir = 1 }, /obj/effect/turf_decal/stripes/line, -/obj/structure/cable, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, /turf/open/floor/engine, /area/engine/supermatter{ name = "Thermo-Electric Generator" @@ -21439,6 +21358,9 @@ dir = 1; pixel_y = -26 }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /turf/open/floor/plasteel, /area/engine/engineering{ name = "Engine Room" @@ -21744,10 +21666,6 @@ /turf/open/floor/plating, /area/maintenance/department/eva) "aUR" = ( -/obj/machinery/atmospherics/pipe/simple/general/hidden{ - dir = 8; - icon_state = "intact" - }, /obj/structure/cable{ icon_state = "4-8" }, @@ -21936,19 +21854,14 @@ dir = 8; pixel_y = -22 }, -/obj/machinery/button/massdriver{ - id = "public_out"; - pixel_x = 24; - pixel_y = -6 - }, /obj/effect/turf_decal/stripes/corner{ dir = 1 }, -/obj/machinery/button/door{ - id = "pubblock"; - name = "Router Access Control"; +/obj/machinery/button/massdriver{ + id = "public_out"; + name = "Public Router Control"; pixel_x = 24; - pixel_y = 24 + pixel_y = -8 }, /turf/open/floor/plasteel, /area/router/public) @@ -25118,9 +25031,11 @@ /turf/open/space/basic, /area/space/nearstation) "bcc" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 8 + }, /turf/closed/wall/r_wall, -/area/space/nearstation) +/area/crew_quarters/lounge/jazz) "bcd" = ( /obj/item/kirbyplants{ icon_state = "plant-14" @@ -25134,8 +25049,8 @@ id = "public" }, /obj/structure/fans/tiny, -/obj/machinery/door/poddoor/preopen{ - id = "cargoblock"; +/obj/machinery/door/poddoor{ + id = "public_in"; name = "Public Router" }, /turf/open/floor/plating, @@ -25148,8 +25063,8 @@ "bcg" = ( /obj/structure/plasticflaps, /obj/structure/fans/tiny, -/obj/machinery/door/poddoor/preopen{ - id = "cargoblock"; +/obj/machinery/door/poddoor{ + id = "public_out"; name = "Public Router" }, /turf/open/floor/plating, @@ -25426,7 +25341,7 @@ dir = 5 }, /turf/closed/wall/r_wall, -/area/space/nearstation) +/area/crew_quarters/fitness/cogpool) "bcP" = ( /obj/structure/cable{ icon_state = "4-8" @@ -25447,9 +25362,6 @@ /area/hallway/primary/central) "bcS" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Courtroom" - }, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/security/courtroom) @@ -25492,10 +25404,12 @@ /turf/closed/wall, /area/hallway/primary/central) "bcY" = ( -/obj/machinery/power/smes, /obj/structure/cable{ icon_state = "0-2" }, +/obj/machinery/power/smes{ + charge = 5e+006 + }, /turf/open/floor/plating, /area/ai_monitored/turret_protected/ai_upload_foyer) "bcZ" = ( @@ -25775,15 +25689,11 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "bdE" = ( -/obj/machinery/atmospherics/pipe/simple/general/hidden{ - dir = 8; - icon_state = "intact" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/dark, -/area/bridge) +/obj/effect/landmark/xeno_spawn, +/turf/open/floor/grass, +/area/hydroponics/garden{ + name = "Nature Preserve" + }) "bdF" = ( /obj/effect/turf_decal/tile/purple{ dir = 4 @@ -26013,6 +25923,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plasteel, /area/science/mixing) "bel" = ( @@ -26079,7 +25990,7 @@ dir = 8 }, /turf/closed/wall/r_wall, -/area/space/nearstation) +/area/crew_quarters/fitness/cogpool) "bet" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 @@ -26128,7 +26039,7 @@ dir = 8 }, /turf/closed/wall/r_wall/rust, -/area/space/nearstation) +/area/crew_quarters/fitness/cogpool) "bez" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -26165,7 +26076,7 @@ dir = 10 }, /turf/closed/wall/r_wall, -/area/space/nearstation) +/area/crew_quarters/lounge/jazz) "beE" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -26173,6 +26084,10 @@ }, /obj/structure/fans/tiny, /obj/structure/plasticflaps, +/obj/machinery/door/poddoor{ + id = "starboardbelthell_in"; + name = "Belt Hell" + }, /turf/open/floor/plating, /area/maintenance/disposal) "beF" = ( @@ -26874,11 +26789,15 @@ /turf/open/space/basic, /area/space/nearstation) "bgi" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-2" }, -/turf/open/space/basic, -/area/space) +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "bgj" = ( /obj/structure/table, /obj/item/weldingtool/mini, @@ -27474,6 +27393,7 @@ id = "sec" }, /obj/machinery/door/poddoor{ + id = "security_in"; name = "Security Router" }, /turf/open/floor/plating, @@ -27570,8 +27490,12 @@ /turf/open/floor/plasteel, /area/maintenance/department/chapel) "bhI" = ( -/turf/closed/wall/r_wall, -/area/maintenance/disposal/incinerator) +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "bhJ" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 @@ -27847,12 +27771,6 @@ /area/quartermaster/storage) "bim" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/button/massdriver{ - id = "router_in"; - name = "mass driver button (Router)"; - pixel_x = 24; - pixel_y = -8 - }, /turf/open/floor/plating, /area/maintenance/disposal) "bin" = ( @@ -27966,9 +27884,6 @@ /area/quartermaster/storage) "bix" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Courtroom" - }, /obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 4 @@ -28112,9 +28027,10 @@ /turf/open/floor/plating, /area/maintenance/disposal) "biO" = ( -/obj/effect/landmark/xeno_spawn, -/turf/open/floor/plating, -/area/maintenance/solars/starboard/fore) +/obj/structure/grille, +/obj/machinery/atmospherics/pipe/simple/brown/visible, +/turf/closed/wall/r_wall, +/area/engine/atmos) "biP" = ( /obj/machinery/light{ dir = 4; @@ -28721,6 +28637,11 @@ dir = 9; id = "mail" }, +/obj/structure/window/reinforced{ + dir = 8; + layer = 2.9 + }, +/obj/structure/window/reinforced, /turf/open/floor/plating, /area/quartermaster/sorting) "bkc" = ( @@ -29042,6 +28963,9 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /turf/open/floor/plasteel, /area/engine/engineering{ name = "Engine Room" @@ -29936,10 +29860,13 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "bmz" = ( -/obj/structure/closet/firecloset, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/storage/primary) +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/brown/visible, +/turf/open/space/basic, +/area/space/nearstation) "bmA" = ( /obj/item/stack/tile/plasteel{ pixel_x = 10; @@ -30321,6 +30248,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, /turf/open/floor/plasteel, /area/engine/break_room) "bng" = ( @@ -30448,6 +30378,9 @@ /area/crew_quarters/lounge/jazz) "bnp" = ( /obj/effect/turf_decal/delivery, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, /turf/open/floor/plasteel, /area/engine/break_room) "bnq" = ( @@ -30608,7 +30541,6 @@ /obj/structure/cable{ icon_state = "1-8" }, -/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/fore) "bnI" = ( @@ -31542,7 +31474,7 @@ }) "bpL" = ( /obj/structure/cable{ - icon_state = "1-4" + icon_state = "1-2" }, /turf/closed/wall/r_wall, /area/engine/engine_smes{ @@ -31555,10 +31487,7 @@ "bpN" = ( /obj/structure/grille, /obj/machinery/power/terminal, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/structure/cable{ +/obj/structure/cable/yellow{ icon_state = "0-4" }, /turf/open/floor/plating, @@ -32182,9 +32111,9 @@ }, /area/maintenance/central) "brf" = ( -/obj/effect/landmark/xeno_spawn, -/turf/open/floor/plating, -/area/maintenance/starboard/central) +/obj/machinery/atmospherics/pipe/manifold/green/visible, +/turf/open/floor/plasteel, +/area/engine/atmos) "brg" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -32770,7 +32699,6 @@ name = "Station Intercom (Common)"; pixel_x = 26 }, -/obj/effect/landmark/xeno_spawn, /obj/machinery/atmospherics/pipe/simple/orange/hidden, /turf/open/floor/plasteel, /area/maintenance/disposal) @@ -33277,8 +33205,8 @@ "bts" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/light_construct/small{ - icon_state = "bulb-construct-stage1"; - dir = 1 + dir = 1; + icon_state = "bulb-construct-stage1" }, /turf/open/floor/plasteel, /area/maintenance/aft) @@ -33519,17 +33447,21 @@ "btZ" = ( /obj/structure/plasticflaps, /obj/structure/fans/tiny, +/obj/machinery/door/poddoor{ + id = "public_in"; + name = "Public Router" + }, /turf/open/floor/plating, /area/router) "bua" = ( /turf/closed/wall/r_wall, /area/science/robotics/mechbay) "bub" = ( -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, /obj/machinery/light, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/scrubber, /turf/open/floor/plasteel, /area/hallway/primary/aft) "buc" = ( @@ -33543,6 +33475,10 @@ /obj/machinery/conveyor{ id = "router_off" }, +/obj/machinery/door/poddoor{ + id = "public_out"; + name = "Public Router" + }, /turf/open/floor/plating, /area/router) "bue" = ( @@ -33644,10 +33580,9 @@ /area/maintenance/department/chapel) "bus" = ( /obj/structure/window/reinforced/spawner/east, -/obj/machinery/mass_driver{ +/obj/machinery/mass_driver/pressure_plate{ dir = 1; - id = "public_in"; - name = "Router Driver" + id = "public_in" }, /turf/open/floor/plating, /area/router) @@ -34430,17 +34365,6 @@ name = "Routing Depot RC"; pixel_y = 28 }, -/obj/machinery/button/massdriver{ - id = "eva_in"; - name = "mass driver button (EVA)"; - pixel_x = -24 - }, -/obj/machinery/button/massdriver{ - id = "public_in"; - name = "mass driver button (Public)"; - pixel_x = -24; - pixel_y = 8 - }, /turf/open/floor/plasteel, /area/router) "bwi" = ( @@ -34783,9 +34707,9 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/conveyor{ +/obj/machinery/conveyor/auto{ dir = 1; - id = "router_off" + id = "router" }, /turf/open/floor/plating, /area/router) @@ -35059,6 +34983,12 @@ pixel_x = 3; pixel_y = 1 }, +/obj/machinery/button/massdriver{ + id = "trash"; + name = "Trash Driver"; + pixel_x = -24; + pixel_y = -8 + }, /turf/open/floor/plating, /area/maintenance/disposal) "bxt" = ( @@ -35105,7 +35035,6 @@ /area/tcommsat/computer) "bxy" = ( /obj/item/trash/candle, -/obj/effect/landmark/xeno_spawn, /turf/open/floor/plating{ icon_state = "platingdmg3" }, @@ -35122,6 +35051,9 @@ dir = 1 }, /obj/item/paper/guides/cogstation/letter_eng, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, /turf/open/floor/plasteel, /area/engine/break_room) "bxA" = ( @@ -35536,7 +35468,6 @@ /area/maintenance/starboard/central) "byu" = ( /obj/structure/disposalpipe/segment, -/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/cyan/hidden, /turf/open/floor/plating, /area/maintenance/starboard/central) @@ -35616,11 +35547,6 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/button/massdriver{ - id = "eva_out"; - pixel_x = 24; - pixel_y = 24 - }, /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 9 }, @@ -35633,7 +35559,7 @@ }, /obj/machinery/conveyor/auto{ dir = 4; - id = "EVA" + id = "eva" }, /turf/open/floor/plating, /area/router/eva) @@ -35954,7 +35880,7 @@ dir = 4; id = "MiningConveyer" }, -/turf/open/floor/plating/airless, +/turf/open/floor/plating, /area/quartermaster/miningoffice) "bzv" = ( /obj/effect/turf_decal/stripes/line, @@ -35966,7 +35892,7 @@ id = "MiningConveyer" }, /obj/structure/plasticflaps, -/turf/open/floor/plating/airless, +/turf/open/floor/plating, /area/quartermaster/miningoffice) "bzw" = ( /obj/structure/disposalpipe/segment{ @@ -36032,8 +35958,8 @@ "bzD" = ( /obj/structure/plasticflaps, /obj/structure/fans/tiny, -/obj/machinery/door/poddoor/preopen{ - id = "evablock"; +/obj/machinery/door/poddoor{ + id = "eva_out"; name = "EVA Router" }, /turf/open/floor/plating, @@ -36041,17 +35967,21 @@ "bzE" = ( /obj/structure/plasticflaps, /obj/structure/fans/tiny, -/obj/machinery/conveyor{ +/obj/machinery/door/poddoor{ + id = "eva_out"; + name = "EVA Router" + }, +/obj/machinery/conveyor/auto{ dir = 4; - id = "router_off" + id = "router" }, /turf/open/floor/plating, /area/router) "bzF" = ( /obj/structure/window/reinforced/spawner, -/obj/machinery/conveyor{ +/obj/machinery/conveyor/auto{ dir = 4; - id = "router_off" + id = "router" }, /turf/open/floor/plating, /area/router) @@ -36067,6 +35997,7 @@ "bzH" = ( /obj/structure/disposalpipe/segment, /obj/structure/grille/broken, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/disposal) "bzI" = ( @@ -37032,9 +36963,12 @@ "bBE" = ( /obj/structure/grille, /obj/machinery/power/terminal, -/obj/structure/cable{ +/obj/structure/cable/yellow{ icon_state = "0-8" }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, /turf/open/floor/plating, /area/engine/engine_smes{ name = "Power Monitoring" @@ -37392,6 +37326,12 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/machinery/button/massdriver{ + id = "eva_out"; + name = "EVA Driver Control"; + pixel_x = 24; + pixel_y = -22 + }, /turf/open/floor/plasteel, /area/router/eva) "bCv" = ( @@ -37433,9 +37373,8 @@ dir = 4 }, /obj/effect/turf_decal/tile/yellow, -/obj/structure/closet/secure_closet/engineering_personal, -/obj/item/clothing/under/misc/overalls, /obj/structure/window/reinforced/spawner/east, +/obj/structure/closet/firecloset, /turf/open/floor/plasteel, /area/storage/primary) "bCA" = ( @@ -37471,8 +37410,8 @@ }, /obj/structure/plasticflaps, /obj/structure/fans/tiny, -/obj/machinery/door/poddoor/preopen{ - id = "evablock"; +/obj/machinery/door/poddoor{ + id = "eva_in"; name = "EVA Router" }, /turf/open/floor/plating, @@ -37561,10 +37500,9 @@ "bCR" = ( /obj/structure/window/reinforced/spawner/north, /obj/effect/turf_decal/stripes/line, -/obj/machinery/mass_driver{ +/obj/machinery/mass_driver/pressure_plate{ dir = 8; - id = "airbridge_in"; - name = "Router Driver" + id = "eva_in" }, /turf/open/floor/plating, /area/router) @@ -37580,9 +37518,9 @@ /obj/structure/window/reinforced/spawner/north, /obj/effect/turf_decal/stripes/line, /obj/structure/disposalpipe/sorting/mail/flip, -/obj/machinery/conveyor{ +/obj/machinery/conveyor/auto{ dir = 8; - id = "router_off" + id = "router" }, /turf/open/floor/plating, /area/router) @@ -37636,13 +37574,13 @@ /turf/open/floor/plasteel/white, /area/medical/chemistry) "bCZ" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "router_off" - }, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/conveyor/auto{ + dir = 8; + id = "router" + }, /turf/open/floor/plating, /area/router) "bDa" = ( @@ -37909,14 +37847,14 @@ dir = 1 }, /obj/effect/turf_decal/stripes/line, -/obj/machinery/conveyor{ - dir = 8; - id = "router_off" - }, /obj/structure/disposalpipe/junction/flip{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/machinery/conveyor/auto{ + dir = 8; + id = "router" + }, /turf/open/floor/plating, /area/router) "bDE" = ( @@ -38139,12 +38077,13 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/conveyor{ - dir = 8; - id = "router_off" - }, /obj/structure/disposalpipe/sorting/mail{ - dir = 4 + dir = 4; + sortType = 9 + }, +/obj/machinery/conveyor/auto{ + dir = 8; + id = "router" }, /turf/open/floor/plating, /area/router) @@ -38167,9 +38106,9 @@ /obj/structure/disposalpipe/segment{ dir = 10 }, -/obj/machinery/conveyor{ +/obj/machinery/conveyor/auto{ dir = 8; - id = "router_off" + id = "router" }, /turf/open/floor/plating, /area/router) @@ -38359,9 +38298,9 @@ }, /obj/effect/turf_decal/stripes/line, /obj/structure/disposalpipe/segment, -/obj/machinery/conveyor{ +/obj/machinery/conveyor/auto{ dir = 8; - id = "router_off" + id = "router" }, /turf/open/floor/plating, /area/router) @@ -38491,7 +38430,9 @@ /area/crew_quarters/bar) "bEK" = ( /obj/machinery/atmospherics/pipe/simple/supply/visible, -/obj/machinery/space_heater, +/obj/machinery/space_heater{ + anchored = 1 + }, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, @@ -39424,18 +39365,6 @@ pixel_x = 26 }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/button/massdriver{ - id = "eng_in"; - name = "mass driver button (Engineering)"; - pixel_x = 24; - pixel_y = -8 - }, -/obj/machinery/button/massdriver{ - id = "router_out"; - name = "mass driver button (Other)"; - pixel_x = 24; - pixel_y = 12 - }, /turf/open/floor/plasteel, /area/router) "bGz" = ( @@ -39527,12 +39456,6 @@ /obj/item/clothing/gloves/color/grey, /turf/open/floor/plating, /area/maintenance/starboard/central) -"bGK" = ( -/obj/machinery/conveyor{ - id = "starboard_off" - }, -/turf/open/floor/plating/airless, -/area/router/aux) "bGL" = ( /obj/structure/chair{ dir = 1 @@ -39574,14 +39497,6 @@ /obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet) -"bGP" = ( -/obj/machinery/mass_driver{ - dir = 1; - id = "secserv"; - name = "Router Driver" - }, -/turf/open/floor/plating/airless, -/area/router/aux) "bGQ" = ( /obj/structure/lattice/catwalk, /obj/structure/disposalpipe/segment{ @@ -39696,13 +39611,6 @@ name = "EVA Router APC"; pixel_x = 24 }, -/obj/machinery/button/door{ - id = "evablock"; - name = "Router Access Control"; - pixel_x = 24; - pixel_y = 10; - req_access_txt = "19" - }, /turf/open/floor/plasteel, /area/router/eva) "bHb" = ( @@ -40583,8 +40491,9 @@ /area/maintenance/department/chapel) "bIY" = ( /obj/machinery/atmospherics/pipe/simple/violet/hidden, +/obj/structure/lattice, /turf/open/space/basic, -/area/space) +/area/space/nearstation) "bIZ" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -42717,20 +42626,12 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/machinery/mass_driver{ +/obj/machinery/mass_driver/pressure_plate{ dir = 4; - id = "router_out"; - name = "Router Driver" + id = "starboardbelthell_out" }, /turf/open/floor/plating, /area/router) -"bNo" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "starboard_off" - }, -/turf/open/floor/plating/airless, -/area/router/aux) "bNp" = ( /obj/machinery/light{ dir = 1 @@ -42756,6 +42657,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/plasteel, /area/engine/atmos) "bNr" = ( @@ -43726,7 +43628,6 @@ /turf/open/space/basic, /area/space/nearstation) "bPB" = ( -/obj/machinery/meter, /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 }, @@ -43736,13 +43637,12 @@ /turf/open/floor/plasteel, /area/engine/atmos) "bPC" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 4; - name = "Waste In" - }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engine/atmos) "bPD" = ( @@ -43963,7 +43863,7 @@ dir = 8 }, /obj/structure/disposalpipe/sorting/mail{ - sortType = 1 + sortType = 2 }, /obj/machinery/atmospherics/pipe/simple/orange/hidden, /turf/open/floor/plasteel, @@ -44382,7 +44282,6 @@ /obj/structure/chair/office/dark{ dir = 4 }, -/obj/effect/landmark/start/atmospheric_technician, /obj/effect/turf_decal/stripes/corner{ dir = 4 }, @@ -45195,6 +45094,7 @@ /area/science/mixing) "bSm" = ( /obj/machinery/modular_computer/console/preset/engineering, +/obj/structure/cable/yellow, /turf/open/floor/plasteel, /area/engine/engine_smes{ name = "Power Monitoring" @@ -45207,12 +45107,12 @@ name = "Power Monitoring" }) "bSo" = ( -/obj/structure/cable{ - icon_state = "1-4" +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/turf/open/floor/plating, -/area/engine/engine_smes{ - name = "Power Monitoring" +/turf/open/floor/engine, +/area/engine/supermatter{ + name = "Thermo-Electric Generator" }) "bSp" = ( /obj/structure/cable{ @@ -45325,7 +45225,7 @@ }, /obj/structure/disposalpipe/sorting/mail/flip{ dir = 1; - sortType = 11 + sortType = 9 }, /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 @@ -45837,6 +45737,7 @@ "bTF" = ( /obj/structure/grille/broken, /obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plating, /area/router) "bTG" = ( @@ -46008,15 +45909,15 @@ /turf/open/space/basic, /area/space/nearstation) "bUa" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 - }, /obj/machinery/camera{ c_tag = "Atmospherics - Entrance" }, /obj/machinery/firealarm{ pixel_y = 26 }, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 6 + }, /turf/open/floor/plasteel, /area/engine/atmos) "bUb" = ( @@ -47053,10 +46954,10 @@ /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/structure/cable{ icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/supplymain/visible, /turf/open/floor/plasteel, /area/engine/atmos) "bVY" = ( @@ -47260,9 +47161,6 @@ /turf/open/floor/engine/n2o, /area/engine/atmos) "bWq" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/cyan/hidden, /obj/machinery/airalarm{ dir = 8; @@ -47414,12 +47312,10 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "bWG" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, /obj/structure/cable{ icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/manifold/orange/visible, /turf/open/floor/plasteel, /area/engine/atmos) "bWH" = ( @@ -48037,9 +47933,9 @@ /area/maintenance/aft) "bXM" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/conveyor{ +/obj/machinery/conveyor/auto{ dir = 8; - id = "router_off" + id = "router" }, /turf/open/floor/plating, /area/router) @@ -48060,11 +47956,11 @@ /turf/open/floor/plasteel, /area/science/xenobiology) "bXP" = ( -/obj/structure/cable{ - icon_state = "0-4" +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 }, -/turf/open/floor/plating/airless, -/area/space/nearstation) +/turf/open/floor/plasteel, +/area/engine/atmos) "bXQ" = ( /obj/structure/closet/l3closet/scientist, /obj/effect/turf_decal/tile/purple, @@ -48117,11 +48013,12 @@ name = "Research Sector" }) "bXV" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Pure to Mix" }, -/turf/open/floor/plating/airless, -/area/space/nearstation) +/turf/open/floor/plasteel, +/area/engine/atmos) "bXW" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -48197,11 +48094,9 @@ name = "Research Sector" }) "bYd" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/closed/wall/r_wall, -/area/hallway/primary/central) +/obj/machinery/atmospherics/pipe/manifold4w/yellow/visible, +/turf/open/floor/plasteel, +/area/engine/atmos) "bYe" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/cyan/hidden, @@ -48220,6 +48115,10 @@ id = "router" }, /obj/structure/fans/tiny, +/obj/machinery/door/poddoor{ + id = "starboardbelthell_in"; + name = "Belt Hell" + }, /turf/open/floor/plating, /area/router) "bYg" = ( @@ -48576,14 +48475,15 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "bYP" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, /obj/structure/cable{ - icon_state = "0-8" + icon_state = "4-8" + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Distro to Waste" }, /turf/open/floor/plasteel, -/area/hallway/primary/central) +/area/engine/atmos) "bYQ" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ @@ -49034,12 +48934,22 @@ /turf/open/floor/engine/co2, /area/engine/atmos) "bZQ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 5 +/obj/item/radio/intercom{ + name = "Station Intercom (General)"; + pixel_y = -30 }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/open/floor/plasteel, -/area/hallway/primary/central) +/obj/item/radio/intercom{ + name = "Station Intercom (General)"; + pixel_y = -30 + }, +/obj/structure/tank_dispenser{ + pixel_x = -1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/engine/atmos) "bZR" = ( /obj/effect/spawner/structure/window/plasma/reinforced, /turf/open/floor/plating, @@ -49174,6 +49084,7 @@ /turf/open/floor/plasteel, /area/engine/break_room) "cai" = ( +/obj/machinery/atmospherics/pipe/simple/dark/visible, /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 }, @@ -49194,7 +49105,7 @@ "cak" = ( /obj/structure/sign/warning/fire, /turf/closed/wall/r_wall, -/area/maintenance/disposal/incinerator) +/area/engine/atmos) "cal" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 10 @@ -49206,7 +49117,7 @@ "cam" = ( /obj/machinery/door/poddoor/incinerator_atmos_main, /turf/open/floor/engine/vacuum, -/area/maintenance/disposal/incinerator) +/area/engine/atmos) "can" = ( /obj/machinery/power/turbine{ dir = 8 @@ -49215,7 +49126,7 @@ icon_state = "0-4" }, /turf/open/floor/engine/vacuum, -/area/maintenance/disposal/incinerator) +/area/engine/atmos) "cao" = ( /obj/machinery/power/compressor{ dir = 4 @@ -49227,7 +49138,7 @@ icon_state = "0-4" }, /turf/open/floor/engine/vacuum, -/area/maintenance/disposal/incinerator) +/area/engine/atmos) "cap" = ( /obj/structure/cable{ icon_state = "4-8" @@ -49238,7 +49149,7 @@ }, /obj/machinery/igniter/incinerator_atmos, /turf/open/floor/engine/vacuum, -/area/maintenance/disposal/incinerator) +/area/engine/atmos) "caq" = ( /obj/machinery/door/airlock/public/glass/incinerator/atmos_exterior, /obj/effect/mapping_helpers/airlock/locked, @@ -49249,7 +49160,7 @@ dir = 4 }, /turf/open/floor/engine/vacuum, -/area/maintenance/disposal/incinerator) +/area/engine/atmos) "car" = ( /obj/machinery/atmospherics/pipe/manifold/yellow/visible, /turf/open/floor/plasteel, @@ -49263,7 +49174,6 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/engine/vacuum, /area/engine/atmos) "cat" = ( @@ -49273,7 +49183,7 @@ "cau" = ( /obj/machinery/door/poddoor/incinerator_atmos_aux, /turf/open/floor/engine/vacuum, -/area/maintenance/disposal/incinerator) +/area/engine/atmos) "cav" = ( /turf/closed/wall/r_wall, /area/science/explab) @@ -49545,6 +49455,7 @@ "cbe" = ( /obj/structure/table/reinforced, /obj/item/clothing/mask/gas, +/obj/effect/landmark/blobstart, /turf/open/floor/engine, /area/science/explab) "cbf" = ( @@ -49926,13 +49837,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/central) -"cbS" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "starboard_off" - }, -/turf/open/floor/plating/airless, -/area/router/aux) "cbT" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/visible{ dir = 4 @@ -49940,28 +49844,28 @@ /obj/structure/disposalpipe/segment{ dir = 9 }, -/obj/machinery/firealarm{ - dir = 1; - pixel_x = -2; - pixel_y = -27 - }, /obj/structure/cable{ icon_state = "1-8" }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -26 + }, /turf/open/floor/plasteel, /area/engine/atmos) "cbU" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 8; - name = "Air to Distro" - }, /obj/machinery/power/apc/highcap/ten_k{ areastring = "/area/engine/atmos"; name = "Atmospherics APC"; - pixel_y = -28 + pixel_y = -24 }, /obj/structure/cable, -/turf/open/floor/plasteel, +/obj/machinery/atmospherics/pipe/manifold/supplymain/visible, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/vending/wardrobe/atmos_wardrobe, +/turf/open/floor/plasteel/dark, /area/engine/atmos) "cbV" = ( /obj/structure/disposalpipe/segment, @@ -50055,9 +49959,9 @@ /obj/structure/disposalpipe/segment{ dir = 10 }, -/obj/machinery/conveyor{ +/obj/machinery/conveyor/auto{ dir = 1; - id = "starboard_off" + id = "starboard" }, /turf/open/floor/plating/airless, /area/router/aux) @@ -50084,9 +49988,8 @@ /area/router) "cci" = ( /obj/structure/window/reinforced/spawner/west, -/obj/machinery/mass_driver{ - id = "workshop_in"; - name = "Router Driver" +/obj/machinery/mass_driver/pressure_plate{ + id = "portbelthell_out" }, /turf/open/floor/plating, /area/router) @@ -50184,9 +50087,9 @@ /area/router/aux) "ccs" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/conveyor{ +/obj/machinery/conveyor/auto{ dir = 1; - id = "starboard_off" + id = "starboard" }, /turf/open/floor/plating/airless, /area/router/aux) @@ -50247,6 +50150,10 @@ id = "router" }, /obj/structure/fans/tiny, +/obj/machinery/door/poddoor{ + id = "portbelthell_in"; + name = "Airbridge Router" + }, /turf/open/floor/plating, /area/router) "ccz" = ( @@ -50320,11 +50227,10 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/central) "ccE" = ( -/obj/machinery/mass_driver{ - id = "eng_in"; - name = "Router Driver" - }, /obj/effect/decal/cleanable/dirt, +/obj/machinery/mass_driver/pressure_plate{ + id = "engi_in" + }, /turf/open/floor/plating, /area/router) "ccF" = ( @@ -50349,10 +50255,9 @@ /turf/open/floor/plasteel, /area/engine/atmos) "ccH" = ( -/obj/machinery/mass_driver{ +/obj/machinery/mass_driver/pressure_plate{ dir = 8; - id = "disposal_in"; - name = "Router Driver" + id = "recycle_in" }, /turf/open/floor/plating/airless, /area/router/aux) @@ -50368,13 +50273,6 @@ }, /turf/open/floor/plating, /area/maintenance/disposal) -"ccJ" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "starboard_off" - }, -/turf/open/floor/plating/airless, -/area/router/aux) "ccK" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 9 @@ -50409,7 +50307,8 @@ "ccO" = ( /obj/structure/grille, /obj/structure/disposalpipe/sorting/mail{ - dir = 8 + dir = 8; + sortType = 21 }, /turf/open/floor/plating/airless, /area/router/aux) @@ -50673,10 +50572,7 @@ /turf/open/space/basic, /area/space/nearstation) "cdq" = ( -/obj/machinery/mass_driver{ - id = "sq_in"; - name = "Router Driver" - }, +/obj/machinery/mass_driver/pressure_plate, /turf/open/floor/plating/airless, /area/router/aux) "cdr" = ( @@ -50820,8 +50716,8 @@ "cdG" = ( /obj/structure/plasticflaps, /obj/structure/fans/tiny, -/obj/machinery/door/poddoor/preopen{ - id = "engblock"; +/obj/machinery/door/poddoor{ + id = "engi_out"; name = "Engineering Router" }, /turf/open/floor/plating, @@ -50961,8 +50857,8 @@ id = "eng" }, /obj/structure/fans/tiny, -/obj/machinery/door/poddoor/preopen{ - id = "engblock"; +/obj/machinery/door/poddoor{ + id = "engi_in"; name = "Engineering Router" }, /turf/open/floor/plating, @@ -51172,7 +51068,7 @@ /obj/structure/window/reinforced/spawner/east, /obj/machinery/mass_driver{ dir = 1; - id = "eng_out"; + id = "engi_out"; name = "Router Driver" }, /obj/structure/window/reinforced/spawner/west, @@ -51391,17 +51287,11 @@ dir = 1 }, /obj/machinery/button/massdriver{ - id = "eng_out"; + id = "engi_out"; + name = "Engineering Driver Control"; pixel_x = -24; pixel_y = 24 }, -/obj/machinery/button/door{ - id = "engblock"; - name = "Router Access Control"; - pixel_x = -24; - pixel_y = 32; - req_access_txt = "31" - }, /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 4 }, @@ -51483,12 +51373,12 @@ /turf/open/floor/plasteel, /area/router/eng) "ceU" = ( -/obj/machinery/atmospherics/pipe/simple/dark/visible{ - dir = 9 - }, /obj/structure/fireaxecabinet{ pixel_y = -32 }, +/obj/machinery/atmospherics/pipe/simple/dark/visible{ + dir = 9 + }, /turf/open/floor/plasteel, /area/engine/atmos) "ceV" = ( @@ -51888,15 +51778,15 @@ name = "Canister Storage" }) "cfM" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, /obj/structure/cable{ icon_state = "2-8" }, /obj/structure/cable{ icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/manifold/supplymain/visible{ + dir = 1 + }, /turf/open/floor/plasteel, /area/engine/atmos) "cfN" = ( @@ -51921,13 +51811,14 @@ /turf/open/floor/plasteel, /area/quartermaster/warehouse) "cfP" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/visible, /obj/structure/cable{ icon_state = "4-8" }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Mix to Distro" + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible, /turf/open/floor/plasteel, /area/engine/atmos) "cfQ" = ( @@ -51954,10 +51845,16 @@ /turf/open/floor/plasteel/dark, /area/crew_quarters/bar) "cfT" = ( -/obj/machinery/atmospherics/pipe/manifold/orange/visible, /obj/structure/cable{ icon_state = "2-8" }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Air to Mix" + }, +/obj/machinery/atmospherics/pipe/simple/brown/visible{ + dir = 8 + }, /turf/open/floor/plasteel, /area/engine/atmos) "cfU" = ( @@ -52061,6 +51958,10 @@ id = "disposal" }, /obj/structure/fans/tiny, +/obj/machinery/door/poddoor{ + id = "starboardbelthell_out"; + name = "Belt Hell" + }, /turf/open/floor/plating, /area/maintenance/disposal) "cge" = ( @@ -52097,20 +51998,14 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/central) "cgg" = ( -/obj/effect/landmark/start/atmospheric_technician, -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 10 - }, /obj/structure/cable{ icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/manifold4w/cyan/visible, /turf/open/floor/plasteel, /area/engine/atmos) "cgh" = ( /obj/machinery/pipedispenser, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 - }, /obj/effect/turf_decal/stripes/end{ dir = 1 }, @@ -52260,10 +52155,12 @@ /turf/open/floor/plasteel/dark, /area/engine/teg_hot) "cgx" = ( -/obj/machinery/atmospherics/pipe/manifold4w/cyan/visible, /obj/structure/cable{ icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ + dir = 8 + }, /turf/open/floor/plasteel, /area/engine/atmos) "cgy" = ( @@ -52271,10 +52168,10 @@ /turf/closed/wall/rust, /area/maintenance/solars/starboard/aft) "cgz" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 4 - }, /obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/components/binary/pump{ + name = "Port to Filter" + }, /turf/open/floor/plasteel, /area/engine/atmos) "cgA" = ( @@ -52629,37 +52526,23 @@ name = "Nature Preserve" }) "chn" = ( -/obj/machinery/atmospherics/pipe/manifold/orange/visible{ - dir = 1 - }, /obj/machinery/light{ dir = 8 }, -/obj/machinery/power/apc{ - areastring = "/area/maintenance/disposal/incinerator"; - dir = 8; - name = "Incinerator APC"; - pixel_x = -24 - }, -/obj/structure/cable{ - icon_state = "0-4" - }, +/obj/machinery/atmospherics/pipe/manifold4w/orange/visible, /turf/open/floor/plasteel, /area/engine/atmos) "cho" = ( /turf/closed/wall/r_wall/rust, /area/maintenance/department/eva) "chp" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/cyan/visible, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, /turf/open/floor/plasteel, /area/engine/atmos) "chq" = ( @@ -52712,10 +52595,10 @@ /turf/open/floor/plating, /area/maintenance/disposal) "chx" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible, /obj/structure/cable{ icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/plasteel, /area/engine/atmos) "chy" = ( @@ -52826,21 +52709,21 @@ /turf/open/floor/plating, /area/engine/teg_cold) "chL" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 6 - }, /obj/structure/cable{ icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 6 + }, /turf/open/floor/plasteel, /area/engine/atmos) "chM" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ - dir = 4 - }, /obj/structure/cable{ icon_state = "1-8" }, +/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engine/atmos) "chN" = ( @@ -52919,11 +52802,13 @@ /turf/open/floor/engine, /area/science/storage) "chS" = ( -/obj/machinery/suit_storage_unit/atmos, /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 6 + }, +/obj/machinery/portable_atmospherics/pump, /turf/open/floor/plasteel/dark, /area/engine/atmos) "chT" = ( @@ -53102,12 +52987,11 @@ dir = 1 }, /obj/effect/turf_decal/stripes/line, -/obj/machinery/mass_driver{ - dir = 8; - id = "router_in"; - name = "Router Driver" - }, /obj/effect/decal/cleanable/dirt, +/obj/machinery/mass_driver/pressure_plate{ + dir = 8; + id = "starboardbelthell_in" + }, /turf/open/floor/plating, /area/maintenance/disposal) "cil" = ( @@ -53127,7 +53011,7 @@ "cim" = ( /obj/structure/disposalpipe/sorting/mail/flip{ dir = 1; - sortType = 11 + sortType = 9 }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, @@ -53150,11 +53034,10 @@ /turf/closed/wall, /area/science/robotics/mechbay) "cip" = ( -/obj/machinery/mass_driver{ - id = "cargo_in"; - name = "Router Driver" - }, /obj/effect/decal/cleanable/dirt, +/obj/machinery/mass_driver/pressure_plate{ + id = "cargo_in" + }, /turf/open/floor/plating, /area/maintenance/disposal) "ciq" = ( @@ -53187,6 +53070,7 @@ /obj/structure/cable{ icon_state = "2-4" }, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/port/fore) "ciu" = ( @@ -53242,7 +53126,7 @@ "ciB" = ( /obj/structure/frame/computer, /obj/structure/disposalpipe/segment, -/turf/open/floor/plating/airless, +/turf/open/floor/plating, /area/maintenance/port/fore) "ciC" = ( /obj/structure/table, @@ -53280,12 +53164,13 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "ciG" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "disposal_off" +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/turf/open/floor/plating, -/area/maintenance/disposal) +/turf/closed/wall/r_wall, +/area/engine/engineering{ + name = "Engine Room" + }) "ciH" = ( /obj/machinery/atmospherics/pipe/simple/supply/visible{ dir = 6 @@ -53351,10 +53236,9 @@ /turf/open/floor/plasteel/grimy, /area/crew_quarters/kitchen) "ciO" = ( -/obj/machinery/mass_driver{ +/obj/machinery/mass_driver/pressure_plate{ dir = 4; - id = "disposal_out"; - name = "Router Driver" + id = "recycle_out" }, /turf/open/floor/plating, /area/maintenance/disposal) @@ -53487,7 +53371,8 @@ /obj/structure/fans/tiny, /obj/structure/plasticflaps, /obj/machinery/door/poddoor{ - name = "Disposal Router" + id = "recycle_out"; + name = "Belt Hell" }, /turf/open/floor/plating, /area/maintenance/disposal) @@ -53539,6 +53424,10 @@ dir = 1; id = "disposal" }, +/obj/machinery/door/poddoor{ + id = "cargo_out"; + name = "Cargo Router" + }, /turf/open/floor/plating, /area/maintenance/disposal) "cjj" = ( @@ -53897,9 +53786,6 @@ /area/engine/teg_cold) "cjV" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Engineering Sector" - }, /obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/segment{ dir = 4 @@ -53929,8 +53815,8 @@ /obj/machinery/button/door{ id = "hos"; name = "HoS Office Shutters"; - pixel_y = -32; - pixel_x = -5 + pixel_x = -5; + pixel_y = -32 }, /turf/open/floor/plasteel/grimy, /area/crew_quarters/heads/hos) @@ -55207,8 +55093,8 @@ "cmH" = ( /obj/structure/plasticflaps, /obj/structure/fans/tiny, -/obj/machinery/door/poddoor/preopen{ - id = "cargoblock"; +/obj/machinery/door/poddoor{ + id = "cargo_out"; name = "Cargo Router" }, /turf/open/floor/plating, @@ -55275,14 +55161,18 @@ /turf/open/floor/plasteel/white, /area/medical/chemistry) "cmL" = ( -/obj/effect/landmark/blobstart, -/turf/open/floor/plating, -/area/maintenance/aft) +/obj/machinery/light, +/obj/machinery/suit_storage_unit/atmos, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/engine/atmos) "cmM" = ( /obj/structure/sign/poster/official/safety_internals{ pixel_x = -32 }, -/obj/effect/landmark/blobstart, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plating, /area/maintenance/starboard/aft) "cmN" = ( @@ -55421,6 +55311,9 @@ /area/quartermaster/qm) "cmX" = ( /obj/machinery/light/small, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /turf/open/floor/engine, /area/engine/supermatter{ name = "Thermo-Electric Generator" @@ -55535,9 +55428,11 @@ /turf/open/floor/plasteel, /area/engine/teg_cold) "cni" = ( -/obj/effect/landmark/xeno_spawn, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) +/obj/machinery/atmospherics/components/binary/pump{ + name = "Port to Fuel Pipe" + }, +/turf/open/floor/plasteel, +/area/engine/atmos) "cnj" = ( /obj/machinery/camera{ c_tag = "Research - Observatory"; @@ -55570,7 +55465,6 @@ dir = 1; pixel_x = 5 }, -/obj/effect/landmark/xeno_spawn, /turf/open/floor/plasteel/dark, /area/science/xenobiology) "cnm" = ( @@ -55646,7 +55540,8 @@ id = "disposal" }, /obj/machinery/door/poddoor{ - name = "Disposal Router" + id = "recycle_in"; + name = "Belt Hell" }, /turf/open/floor/plating, /area/maintenance/disposal) @@ -55815,14 +55710,6 @@ /obj/item/target/clown, /turf/open/floor/plasteel, /area/science/mixing) -"cnM" = ( -/obj/machinery/mass_driver{ - dir = 8; - id = "pb_in"; - name = "Router Driver" - }, -/turf/open/floor/plating/airless, -/area/router/aux) "cnN" = ( /obj/structure/bookcase/random/fiction, /obj/effect/turf_decal/tile/neutral, @@ -56008,13 +55895,15 @@ name = "Electrical Substation" }) "coh" = ( -/obj/machinery/power/smes, /obj/structure/cable{ icon_state = "0-4" }, /obj/structure/cable{ icon_state = "0-8" }, +/obj/machinery/power/smes{ + charge = 5e+006 + }, /turf/open/floor/plating, /area/engine/storage_shared{ name = "Electrical Substation" @@ -56203,8 +56092,8 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 8 +/obj/machinery/atmospherics/pipe/manifold/orange/hidden{ + dir = 1 }, /turf/open/floor/plasteel, /area/hallway/primary/aft) @@ -56248,7 +56137,7 @@ /obj/structure/cable{ icon_state = "1-8" }, -/obj/machinery/atmospherics/pipe/manifold/orange/hidden, +/obj/machinery/atmospherics/pipe/manifold4w/orange/hidden, /turf/open/floor/plasteel, /area/hallway/primary/aft) "coE" = ( @@ -56679,8 +56568,8 @@ id = "cargo" }, /obj/structure/fans/tiny, -/obj/machinery/door/poddoor/preopen{ - id = "cargoblock"; +/obj/machinery/door/poddoor{ + id = "cargo_in"; name = "Cargo Router" }, /turf/open/floor/plating, @@ -56792,6 +56681,10 @@ "cpE" = ( /obj/structure/fans/tiny, /obj/structure/plasticflaps, +/obj/machinery/door/poddoor{ + id = "cargo_in"; + name = "Cargo Router" + }, /turf/open/floor/plating, /area/maintenance/disposal) "cpF" = ( @@ -56901,12 +56794,18 @@ /obj/effect/turf_decal/stripes/line{ dir = 10 }, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 6 + }, /turf/open/floor/plasteel/dark, /area/engine/atmos) "cpO" = ( /obj/structure/closet/secure_closet/atmospherics, /obj/item/cartridge/atmos, /obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, /turf/open/floor/plasteel/dark, /area/engine/atmos) "cpP" = ( @@ -56917,14 +56816,12 @@ /turf/open/floor/plasteel/white, /area/gateway) "cpQ" = ( -/obj/machinery/vending/wardrobe/atmos_wardrobe, /obj/effect/turf_decal/stripes/line{ dir = 6; layer = 2.03 }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/manifold/orange/visible, +/obj/machinery/portable_atmospherics/pump, /turf/open/floor/plasteel/dark, /area/engine/atmos) "cpR" = ( @@ -57238,6 +57135,9 @@ /obj/effect/turf_decal/tile/red{ dir = 1 }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, /turf/open/floor/plasteel, /area/engine/break_room) "cqt" = ( @@ -57260,6 +57160,9 @@ /obj/effect/turf_decal/tile/red{ dir = 1 }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, /turf/open/floor/plasteel, /area/engine/break_room) "cqv" = ( @@ -57273,6 +57176,9 @@ /obj/effect/turf_decal/tile/red{ dir = 1 }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, /turf/open/floor/plasteel, /area/engine/break_room) "cqw" = ( @@ -57617,11 +57523,6 @@ name = "\improper KEEP CLEAR: HIGH SPEED DELIVERIES"; pixel_y = 32 }, -/obj/machinery/button/massdriver{ - id = "cargo_out"; - pixel_x = -8; - pixel_y = -4 - }, /turf/open/floor/plasteel, /area/quartermaster/sorting) "cre" = ( @@ -58608,9 +58509,9 @@ /obj/machinery/button/door{ id = "robotics"; name = "Shutters Control Button"; + pixel_x = -24; pixel_y = 8; - req_access_txt = "29"; - pixel_x = -24 + req_access_txt = "29" }, /turf/open/floor/plasteel/dark/side{ dir = 8 @@ -58648,8 +58549,6 @@ dir = 8; light_color = "#e8eaff" }, -/obj/effect/landmark/blobstart, -/obj/effect/landmark/xeno_spawn, /turf/open/floor/engine, /area/science/explab) "ctc" = ( @@ -58998,6 +58897,10 @@ /area/science/explab) "ctJ" = ( /obj/structure/plasticflaps, +/obj/machinery/door/poddoor{ + id = "portbelthell_in"; + name = "Airbridge Router" + }, /turf/open/floor/plating, /area/engine/workshop) "ctK" = ( @@ -59005,6 +58908,10 @@ /obj/machinery/conveyor{ id = "workshop_off" }, +/obj/machinery/door/poddoor{ + id = "portbelthell_out"; + name = "Airbridge Router" + }, /turf/open/floor/plating, /area/engine/workshop) "ctL" = ( @@ -59474,7 +59381,7 @@ dir = 4 }, /turf/open/floor/plating/airless, -/area/space/nearstation) +/area/crew_quarters/fitness/cogpool) "cuy" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -59685,17 +59592,16 @@ /area/router/air) "cuS" = ( /obj/structure/window/reinforced/spawner/east, -/obj/machinery/mass_driver{ +/obj/machinery/mass_driver/pressure_plate{ dir = 1; - id = "workshop_out"; - name = "Router Driver" + id = "portbelthell_in" }, /turf/open/floor/plating, /area/engine/workshop) "cuT" = ( /obj/structure/window/reinforced/spawner/west, -/obj/machinery/conveyor{ - id = "workshop_off" +/obj/machinery/conveyor/auto{ + id = "airbridge" }, /turf/open/floor/plating, /area/engine/workshop) @@ -59908,9 +59814,9 @@ /area/router/air) "cvq" = ( /obj/structure/window/reinforced/spawner/east, -/obj/machinery/conveyor{ +/obj/machinery/conveyor/auto{ dir = 1; - id = "workshop_off" + id = "airbridge" }, /turf/open/floor/plating, /area/engine/workshop) @@ -60422,12 +60328,11 @@ /obj/structure/disposalpipe/segment{ dir = 10 }, -/obj/machinery/button/door{ - id = "cargoblock"; - name = "Router Access Control"; +/obj/machinery/button/massdriver{ + id = "cargo_out"; + name = "Cargo Driver Control"; pixel_x = -24; - pixel_y = 24; - req_access_txt = "31" + pixel_y = 24 }, /turf/open/floor/plasteel, /area/quartermaster/sorting) @@ -60587,6 +60492,9 @@ /obj/effect/turf_decal/stripes/line, /obj/machinery/door/firedoor/heavy, /obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, /turf/open/floor/plasteel, /area/engine/engine_smes{ name = "Power Monitoring" @@ -60894,6 +60802,7 @@ /obj/machinery/airalarm{ pixel_y = 24 }, +/obj/structure/cable/yellow, /turf/open/floor/plasteel, /area/engine/engine_smes{ name = "Power Monitoring" @@ -66167,15 +66076,16 @@ }, /obj/machinery/button/massdriver{ id = "airbridge_out"; + name = "Airbridge Driver Control"; pixel_x = -8; pixel_y = 24 }, /turf/open/floor/plasteel, /area/router/air) "cGa" = ( -/obj/machinery/conveyor{ +/obj/machinery/conveyor/auto{ dir = 4; - id = "airbridge_off" + id = "router" }, /turf/open/floor/plating, /area/router/air) @@ -66261,9 +66171,9 @@ /area/medical/medbay/central) "cGf" = ( /obj/structure/window/reinforced/spawner, -/obj/machinery/conveyor{ +/obj/machinery/conveyor/auto{ dir = 4; - id = "airbridge_off" + id = "router" }, /turf/open/floor/plating, /area/router/air) @@ -66273,9 +66183,9 @@ dir = 1 }, /obj/structure/window/reinforced/spawner, -/obj/machinery/conveyor{ +/obj/machinery/conveyor/auto{ dir = 4; - id = "airbridge_off" + id = "router" }, /turf/open/floor/plating, /area/router/air) @@ -66287,7 +66197,7 @@ /obj/structure/window/reinforced/spawner, /obj/machinery/mass_driver{ dir = 4; - id = "airbridge_in"; + id = "airbridge_out"; name = "Router Driver" }, /turf/open/floor/plating, @@ -66730,7 +66640,6 @@ /turf/open/floor/engine, /area/science/storage) "cGW" = ( -/obj/effect/landmark/blobstart, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -67029,7 +66938,6 @@ /obj/structure/cable{ icon_state = "1-4" }, -/obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/manifold/orange/hidden{ dir = 4 }, @@ -67284,6 +67192,7 @@ /obj/structure/plasticflaps, /obj/structure/fans/tiny, /obj/machinery/door/poddoor{ + id = "airbridge_out"; name = "Airbridge Router" }, /turf/open/floor/plating, @@ -67326,7 +67235,6 @@ /turf/open/floor/plating, /area/maintenance/aft) "cId" = ( -/obj/effect/landmark/xeno_spawn, /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 5 }, @@ -67363,17 +67271,21 @@ /area/medical/genetics) "cIh" = ( /obj/structure/plasticflaps, -/obj/machinery/conveyor{ +/obj/machinery/door/poddoor{ + id = "airbridge_out"; + name = "Airbridge Router" + }, +/obj/machinery/conveyor/auto{ dir = 4; - id = "workshop_off" + id = "router" }, /turf/open/floor/plating, /area/engine/workshop) "cIi" = ( /obj/structure/window/reinforced/spawner, -/obj/machinery/conveyor{ +/obj/machinery/conveyor/auto{ dir = 4; - id = "workshop_off" + id = "router" }, /turf/open/floor/plating, /area/engine/workshop) @@ -67473,9 +67385,9 @@ "cIq" = ( /obj/structure/window/reinforced/spawner, /obj/structure/window/reinforced/spawner/east, -/obj/machinery/conveyor{ +/obj/machinery/conveyor/auto{ dir = 1; - id = "workshop_off" + id = "airbridge" }, /turf/open/floor/plating, /area/engine/workshop) @@ -67502,13 +67414,13 @@ name = "Atmospherics"; req_access_txt = "24" }, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, /obj/structure/cable{ icon_state = "4-8" }, /obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/simple/supplymain/visible{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engine/atmos) "cIt" = ( @@ -67737,9 +67649,6 @@ /area/hallway/primary/aft) "cIN" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Engineering Sector" - }, /obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/segment{ dir = 4 @@ -68040,17 +67949,6 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) -"cJo" = ( -/obj/machinery/atmospherics/pipe/simple/supplymain/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/obj/machinery/portable_atmospherics/pump, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel/white/corner, -/area/engine/atmos) "cJp" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 4 @@ -68103,14 +68001,10 @@ /turf/open/floor/plasteel, /area/ai_monitored/turret_protected/ai_upload_foyer) "cJu" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 1 +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Mix to Engine" }, -/obj/machinery/portable_atmospherics/canister, -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/engine/atmos) "cJv" = ( @@ -68256,14 +68150,9 @@ /turf/open/floor/plasteel, /area/engine/gravity_generator) "cJH" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister, /obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 + dir = 9 }, -/obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/engine/atmos) "cJI" = ( @@ -68982,11 +68871,12 @@ /obj/effect/turf_decal/tile/green{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 5 +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 1; + name = "Unfiltered & Air to Mix" }, -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 10 +/obj/machinery/atmospherics/pipe/simple/brown/visible{ + dir = 8 }, /turf/open/floor/plasteel, /area/engine/atmos) @@ -69016,10 +68906,10 @@ /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/violet/visible, /obj/structure/extinguisher_cabinet{ pixel_y = 29 }, +/obj/machinery/atmospherics/pipe/simple/violet/visible, /turf/open/floor/plasteel, /area/engine/atmos) "cLh" = ( @@ -69075,7 +68965,6 @@ /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/closed/wall/r_wall, /area/engine/atmos) "cLn" = ( @@ -69262,8 +69151,8 @@ /area/router/air) "cLK" = ( /obj/structure/window/reinforced/spawner/north, -/obj/machinery/conveyor{ - id = "airbridge_off" +/obj/machinery/conveyor/auto{ + id = "airbridge" }, /turf/open/floor/plating, /area/router/air) @@ -69289,9 +69178,9 @@ /area/medical/virology) "cLO" = ( /obj/structure/window/reinforced/spawner/north, -/obj/machinery/conveyor{ +/obj/machinery/conveyor/auto{ dir = 8; - id = "airbridge_off" + id = "airbridge" }, /turf/open/floor/plating, /area/router/air) @@ -69328,6 +69217,7 @@ id = "airbridge_off" }, /obj/machinery/door/poddoor{ + id = "airbridge_in"; name = "Airbridge Router" }, /turf/open/floor/plating, @@ -69338,10 +69228,9 @@ dir = 1 }, /obj/effect/turf_decal/stripes/line, -/obj/machinery/mass_driver{ +/obj/machinery/mass_driver/pressure_plate{ dir = 8; - id = "workshop_in"; - name = "Router Driver" + id = "airbridge_in" }, /turf/open/floor/plating, /area/engine/workshop) @@ -69363,8 +69252,8 @@ /turf/open/floor/plating/airless, /area/medical/virology) "cLV" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/heater/on{ - dir = 4 +/obj/machinery/atmospherics/components/binary/pump/on{ + name = "Waste to Filter" }, /turf/open/floor/plasteel, /area/engine/atmos) @@ -69381,19 +69270,13 @@ dir = 6 }, /turf/closed/wall/r_wall, -/area/maintenance/disposal/incinerator) +/area/engine/atmos) "cLY" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/incinerator_output{ dir = 4 }, /turf/open/floor/engine/vacuum, -/area/maintenance/disposal/incinerator) -"cLZ" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 4 - }, -/turf/closed/wall/r_wall, -/area/maintenance/disposal/incinerator) +/area/engine/atmos) "cMa" = ( /obj/machinery/light/small{ dir = 1; @@ -69404,21 +69287,17 @@ dir = 4 }, /turf/open/floor/engine/vacuum, -/area/maintenance/disposal/incinerator) +/area/engine/atmos) "cMb" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/closed/wall/r_wall, /area/engine/atmos) "cMc" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ - dir = 9 - }, /turf/open/floor/plasteel, /area/engine/atmos) "cMd" = ( @@ -69451,9 +69330,10 @@ /turf/open/floor/plasteel, /area/engine/atmos) "cMi" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible, -/obj/structure/closet/firecloset, -/turf/open/floor/plasteel, +/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/atmos_waste{ + dir = 1 + }, +/turf/open/floor/plating/airless, /area/engine/atmos) "cMj" = ( /obj/structure/cable{ @@ -69463,7 +69343,7 @@ dir = 1 }, /turf/open/floor/engine/vacuum, -/area/maintenance/disposal/incinerator) +/area/engine/atmos) "cMk" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 @@ -69527,7 +69407,7 @@ dir = 4 }, /turf/open/floor/engine/vacuum, -/area/maintenance/disposal/incinerator) +/area/engine/atmos) "cMu" = ( /obj/machinery/light/small, /obj/machinery/atmospherics/pipe/simple/cyan/visible, @@ -69535,7 +69415,7 @@ dir = 8 }, /turf/open/floor/engine/vacuum, -/area/maintenance/disposal/incinerator) +/area/engine/atmos) "cMv" = ( /obj/machinery/button/door/incinerator_vent_atmos_main{ pixel_x = -24; @@ -69545,29 +69425,27 @@ pixel_x = -40; pixel_y = 8 }, -/obj/machinery/atmospherics/pipe/simple/general/visible{ +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/machinery/atmospherics/pipe/simple/dark/visible{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/plasteel, /area/engine/atmos) "cMw" = ( -/obj/machinery/atmospherics/components/binary/valve/digital{ - name = "Waste Release" - }, +/obj/machinery/atmospherics/pipe/simple/orange/visible, /obj/machinery/atmospherics/pipe/simple/dark/visible{ dir = 4 }, /turf/open/floor/plasteel, /area/engine/atmos) "cMx" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 5 - }, /obj/item/radio/intercom{ name = "Station Intercom (General)"; pixel_y = -30 }, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 5 + }, /turf/open/floor/plasteel, /area/engine/atmos) "cMy" = ( @@ -69659,14 +69537,20 @@ /turf/open/floor/plasteel/white/corner, /area/engine/atmos) "cMG" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 5 +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/closed/wall/r_wall, -/area/maintenance/disposal/incinerator) +/obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) "cMH" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/visible, -/turf/closed/wall/r_wall, +/obj/machinery/suit_storage_unit/atmos, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, /area/engine/atmos) "cMI" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible{ @@ -69717,13 +69601,12 @@ /turf/open/floor/plating, /area/engine/atmos) "cMP" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/atmos_waste{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/supplymain/visible{ dir = 4 }, -/turf/open/floor/plating/airless, +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, /area/engine/atmos) "cMQ" = ( /obj/structure/lattice, @@ -69755,16 +69638,16 @@ dir = 1 }, /obj/effect/turf_decal/stripes/line, -/obj/machinery/conveyor{ +/obj/machinery/conveyor/auto{ dir = 8; - id = "workshop_off" + id = "airbridge" }, /turf/open/floor/plating, /area/engine/workshop) "cMV" = ( -/obj/machinery/conveyor{ - dir = 10; - id = "workshop_off" +/obj/machinery/conveyor/auto{ + dir = 8; + id = "airbridge" }, /turf/open/floor/plating, /area/engine/workshop) @@ -69943,17 +69826,10 @@ /obj/machinery/light, /turf/open/floor/plasteel, /area/router/air) -"cNm" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "airbridge_off" - }, -/turf/open/floor/plating, -/area/router/air) "cNn" = ( -/obj/machinery/conveyor{ - dir = 10; - id = "airbridge_off" +/obj/machinery/conveyor/auto{ + dir = 8; + id = "airbridge" }, /turf/open/floor/plating, /area/router/air) @@ -70359,6 +70235,7 @@ icon_state = "2-4" }, /obj/effect/landmark/event_spawn, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plasteel/white, /area/science/xenobiology) "cOr" = ( @@ -70499,6 +70376,12 @@ dir = 4; pixel_x = -22 }, +/obj/machinery/button/massdriver{ + id = "research_out"; + name = "Medsci Driver Control"; + pixel_x = -24; + pixel_y = -24 + }, /turf/open/floor/plasteel, /area/router/medsci) "cOF" = ( @@ -70527,8 +70410,8 @@ /turf/closed/wall/r_wall, /area/router/medsci) "cOJ" = ( -/obj/machinery/conveyor{ - id = "medsci_off" +/obj/machinery/conveyor/auto{ + id = "medsci" }, /turf/open/floor/plating, /area/router/medsci) @@ -70538,11 +70421,6 @@ /obj/item/hand_labeler, /obj/item/destTagger, /obj/machinery/light, -/obj/machinery/button/massdriver{ - id = "medsci_out"; - pixel_x = -8; - pixel_y = 8 - }, /obj/machinery/requests_console{ department = "MedSci Router"; name = "MedSci Router RC"; @@ -70551,9 +70429,9 @@ /turf/open/floor/plating, /area/router/medsci) "cOL" = ( -/obj/machinery/conveyor{ +/obj/machinery/conveyor/auto{ dir = 1; - id = "medsci_off" + id = "medsci" }, /turf/open/floor/plating, /area/router/medsci) @@ -70579,7 +70457,7 @@ /area/janitor/aux) "cOP" = ( /obj/machinery/mass_driver{ - id = "medsci_out"; + id = "research_out"; name = "Router Driver" }, /turf/open/floor/plating, @@ -70649,6 +70527,7 @@ /obj/structure/plasticflaps, /obj/structure/fans/tiny, /obj/machinery/door/poddoor{ + id = "research_out"; name = "MedSci Router" }, /turf/open/floor/plating, @@ -70657,11 +70536,12 @@ /obj/structure/plasticflaps, /obj/structure/fans/tiny, /obj/machinery/door/poddoor{ + id = "research_in"; name = "MedSci Router" }, -/obj/machinery/conveyor{ +/obj/machinery/conveyor/auto{ dir = 1; - id = "medsci_off" + id = "medsci" }, /turf/open/floor/plating, /area/router/medsci) @@ -70691,6 +70571,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plasteel, /area/janitor/aux) "cOX" = ( @@ -70768,100 +70649,88 @@ /turf/open/floor/plasteel/white, /area/medical/virology) "cPd" = ( -/obj/machinery/conveyor{ - id = "sq_off" +/obj/machinery/conveyor/auto{ + id = "starboard" }, /turf/open/floor/plating/airless, /area/router/aux) "cPe" = ( -/obj/machinery/mass_driver{ - dir = 1; - id = "sq_out"; - name = "Router Driver" +/obj/machinery/mass_driver/pressure_plate{ + dir = 1 }, /turf/open/floor/plating/airless, /area/router/aux) -"cPf" = ( -/obj/machinery/conveyor/auto, -/turf/open/floor/plating/airless, -/area/router/aux) "cPg" = ( -/obj/machinery/mass_driver{ +/obj/machinery/mass_driver/pressure_plate{ dir = 1; - id = "medsci_in"; - name = "Router Driver" + id = "research_in" }, /turf/open/floor/plating/airless, /area/router/aux) "cPh" = ( -/obj/machinery/conveyor{ +/obj/machinery/conveyor/auto{ dir = 1; - id = "sq_off" + id = "starboard" }, /turf/open/floor/plating/airless, /area/router/aux) "cPi" = ( -/obj/machinery/conveyor{ +/obj/machinery/conveyor/auto{ dir = 1; - id = "viro_off" + id = "pq" }, /turf/open/floor/plating/airless, /area/router/aux) "cPj" = ( -/obj/machinery/conveyor{ +/obj/machinery/conveyor/auto{ dir = 9; - id = "viro_off" + id = "medsci" }, /turf/open/floor/plating/airless, /area/router/aux) "cPk" = ( -/obj/machinery/conveyor{ +/obj/machinery/conveyor/auto{ dir = 8; - id = "viro_off" + id = "medsci" }, /turf/open/floor/plating/airless, /area/router/aux) "cPl" = ( -/obj/machinery/mass_driver{ - dir = 8; - id = "viro_in"; - name = "Router Driver" +/obj/machinery/mass_driver/pressure_plate{ + dir = 8 }, /turf/open/floor/plating/airless, /area/router/aux) "cPm" = ( -/obj/machinery/conveyor{ +/obj/machinery/conveyor/auto{ dir = 8; - id = "sq_off" + id = "starboard" }, /turf/open/floor/plating/airless, /area/router/aux) "cPn" = ( -/obj/machinery/conveyor{ +/obj/machinery/conveyor/auto{ dir = 10; - id = "sq_off" + id = "starboard" }, /turf/open/floor/plating/airless, /area/router/aux) "cPo" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "viro_off" +/obj/machinery/conveyor/auto{ + id = "pq" }, /turf/open/floor/plating/airless, /area/router/aux) "cPp" = ( -/obj/machinery/mass_driver{ - dir = 4; - id = "viro_out"; - name = "Router Driver" +/obj/machinery/mass_driver/pressure_plate{ + dir = 4 }, /turf/open/floor/plating/airless, /area/router/aux) "cPq" = ( -/obj/machinery/conveyor{ +/obj/machinery/conveyor/auto{ dir = 4; - id = "sq_off" + id = "starboard" }, /turf/open/floor/plating/airless, /area/router/aux) @@ -71867,7 +71736,7 @@ id = "MiningConveyorBlastDoor"; name = "Asteroid Mining Load Door" }, -/turf/open/floor/plating/airless, +/turf/open/floor/plating, /area/quartermaster/miningoffice) "cRb" = ( /obj/machinery/computer/cloning, @@ -71932,13 +71801,7 @@ /obj/machinery/atmospherics/pipe/simple/supplymain/visible{ dir = 4 }, -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/obj/machinery/portable_atmospherics/pump, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/machinery/light, -/turf/open/floor/plasteel/white/corner, +/turf/open/floor/plasteel, /area/engine/atmos) "cRh" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ @@ -71972,8 +71835,8 @@ /obj/item/stock_parts/cell/high{ charge = 100; maxcharge = 15000; - pixel_y = 3; - pixel_x = 4 + pixel_x = 4; + pixel_y = 3 }, /obj/item/stock_parts/cell/high{ charge = 100; @@ -72137,29 +72000,41 @@ name = "Medbay Treatment Center" }) "cVq" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ +/obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /turf/open/floor/plasteel, -/area/engine/atmos) +/area/hallway/primary/aft) "cVO" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/simple/general/visible, +/obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/plasteel, /area/engine/atmos) "dpO" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ +/obj/machinery/atmospherics/components/unary/thermomachine/heater/on{ dir = 4 }, /turf/open/floor/plasteel, /area/engine/atmos) +"dwH" = ( +/obj/structure/plasticflaps, +/obj/machinery/conveyor/auto{ + dir = 1; + id = "router" + }, +/obj/structure/fans/tiny, +/obj/machinery/door/poddoor{ + id = "engi_out"; + name = "Engineering Router" + }, +/turf/open/floor/plating, +/area/router) "dVR" = ( -/obj/machinery/atmospherics/pipe/manifold4w/general/visible, -/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/violet/visible, /turf/open/floor/plasteel, /area/engine/atmos) "dYm" = ( @@ -72170,12 +72045,12 @@ /turf/open/floor/engine, /area/science/storage) "eCy" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 9 - }, /obj/structure/extinguisher_cabinet{ pixel_x = -27 }, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 9 + }, /turf/open/floor/plasteel, /area/engine/atmos) "eIh" = ( @@ -72194,13 +72069,15 @@ }, /area/engine/atmos) "eKM" = ( -/obj/item/radio/intercom{ - name = "Station Intercom (General)"; - pixel_y = -30 - }, /obj/machinery/atmospherics/pipe/manifold/supplymain/visible, /turf/open/floor/plasteel, /area/engine/atmos) +"eSd" = ( +/obj/machinery/mass_driver/pressure_plate{ + id = "security_in" + }, +/turf/open/floor/plating/airless, +/area/router/aux) "eTZ" = ( /obj/effect/turf_decal/tile/green{ dir = 4 @@ -72208,10 +72085,9 @@ /obj/effect/turf_decal/tile/green{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/green/visible{ +/obj/machinery/atmospherics/pipe/manifold/brown/visible{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/yellow/visible, /turf/open/floor/plasteel, /area/engine/atmos) "eUF" = ( @@ -72238,24 +72114,25 @@ /turf/open/floor/plasteel, /area/engine/atmos) "fkx" = ( -/obj/machinery/atmospherics/pipe/simple/dark/visible{ - dir = 4 +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 }, +/obj/machinery/portable_atmospherics/scrubber, /turf/open/floor/plasteel, -/area/engine/atmos) +/area/hallway/primary/aft) "fti" = ( -/obj/machinery/atmospherics/components/binary/pump, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ +/obj/machinery/atmospherics/pipe/manifold/green/visible{ dir = 8 }, /turf/open/floor/plasteel, /area/engine/atmos) "fui" = ( -/obj/machinery/atmospherics/pipe/simple/violet/visible{ - dir = 4 +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 }, -/turf/open/space/basic, -/area/space) +/obj/machinery/portable_atmospherics/pump, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) "fuE" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/orange/visible{ @@ -72271,32 +72148,22 @@ }, /turf/open/floor/plasteel, /area/science/mixing) -"fIw" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible{ - dir = 4 - }, -/obj/machinery/meter, -/turf/open/floor/plasteel, -/area/engine/atmos) "guK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/space/basic, /area/space) "gDY" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "Fuel Pipe to Incinerator" - }, /obj/machinery/light, -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/machinery/atmospherics/pipe/simple/dark/visible{ + dir = 4 }, /turf/open/floor/plasteel, /area/engine/atmos) "gGG" = ( /obj/structure/lattice, -/obj/machinery/atmospherics/pipe/manifold/orange/visible{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 5 }, /turf/open/space/basic, /area/space/nearstation) @@ -72330,24 +72197,15 @@ /turf/open/floor/plasteel, /area/tcommsat/computer) "hlo" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible{ - dir = 1 - }, -/obj/machinery/meter, +/obj/effect/landmark/blobstart, /turf/open/floor/plasteel, -/area/engine/atmos) +/area/quartermaster/miningdock/airless) "hlV" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/simple/supplymain/visible{ - dir = 4 - }, -/turf/open/floor/plating/airless, -/area/space/nearstation) +/obj/effect/landmark/blobstart, +/turf/open/floor/plating, +/area/storage/tech) "hDz" = ( -/obj/machinery/space_heater, -/obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{ - dir = 4 - }, +/obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/plasteel, /area/engine/atmos) "hFa" = ( @@ -72358,19 +72216,10 @@ /turf/open/floor/engine, /area/science/storage) "hKC" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 10 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"hMZ" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "Pure to Port" +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/general/visible, /turf/open/floor/plasteel, /area/engine/atmos) "hXk" = ( @@ -72384,17 +72233,10 @@ /obj/machinery/atmospherics/pipe/manifold/orange/visible, /turf/open/space/basic, /area/space/nearstation) -"iAW" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) "iQY" = ( /obj/machinery/atmospherics/pipe/manifold/yellow/visible{ dir = 4 }, -/obj/structure/closet/firecloset, /turf/open/floor/plasteel, /area/engine/atmos) "jiZ" = ( @@ -72403,19 +72245,8 @@ }, /turf/closed/wall/r_wall, /area/engine/atmos) -"jml" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - layer = 2.4 - }, -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, -/turf/open/floor/plasteel, -/area/engine/atmos) "jon" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ +/obj/machinery/atmospherics/pipe/simple/violet/visible{ dir = 4 }, /turf/open/floor/plasteel, @@ -72435,16 +72266,6 @@ /area/engine/secure_construction{ name = "Engineering Construction Area" }) -"jXo" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 10 - }, -/turf/closed/wall/r_wall, -/area/engine/atmos) -"kxw" = ( -/obj/machinery/atmospherics/pipe/simple/violet/visible, -/turf/open/space/basic, -/area/space) "kzb" = ( /obj/machinery/atmospherics/pipe/manifold/orange/hidden{ dir = 4 @@ -72455,16 +72276,12 @@ /obj/machinery/atmospherics/pipe/simple/yellow/visible{ dir = 4 }, -/obj/machinery/atmospherics/components/binary/pump{ - dir = 1; - name = "Mix to Engine" - }, +/obj/machinery/atmospherics/pipe/simple/violet/visible, /turf/open/floor/plasteel, /area/engine/atmos) "lcD" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "Air to Port" +/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ + dir = 1 }, /turf/open/floor/plasteel, /area/engine/atmos) @@ -72472,8 +72289,9 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/yellow/visible{ - dir = 8 +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 8; + name = "Mix to Filter" }, /turf/open/floor/plasteel, /area/engine/atmos) @@ -72487,7 +72305,10 @@ name = "Engine Room" }) "mqB" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Air to Ports" + }, /turf/open/floor/plasteel, /area/engine/atmos) "mxW" = ( @@ -72497,13 +72318,12 @@ }, /turf/open/space/basic, /area/space/nearstation) -"mBP" = ( -/obj/effect/landmark/xeno_spawn, -/turf/open/floor/plasteel, -/area/science/mixing) "mEa" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/visible, -/obj/machinery/meter, +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 8; + name = "Air to Distro" + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible, /turf/open/floor/plasteel, /area/engine/atmos) "mIm" = ( @@ -72530,36 +72350,14 @@ /obj/machinery/atmospherics/pipe/simple/orange/hidden, /turf/open/floor/plasteel, /area/tcommsat/computer) -"mNN" = ( -/obj/machinery/space_heater, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"ntC" = ( -/obj/machinery/atmospherics/components/binary/pump{ - name = "Port to Fuel Pipe" - }, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) "nvn" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible{ - dir = 1 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, /turf/open/floor/plasteel, /area/engine/atmos) "nAF" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "Mix to Port" - }, +/obj/machinery/atmospherics/pipe/manifold4w/general/visible, /turf/open/floor/plasteel, /area/engine/atmos) "nBM" = ( @@ -72570,26 +72368,9 @@ }, /turf/open/floor/plating, /area/engine/atmos) -"nEX" = ( -/obj/machinery/atmospherics/pipe/simple/dark/visible{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ - dir = 6 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"nLV" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/green/visible, -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 4 - }, -/turf/open/floor/plating, -/area/engine/atmos) "ony" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/manifold/yellow/visible{ +/obj/machinery/atmospherics/pipe/manifold/brown/visible{ dir = 4 }, /turf/open/floor/plating, @@ -72618,6 +72399,13 @@ /obj/machinery/atmospherics/pipe/simple/yellow/visible, /turf/open/floor/plasteel, /area/engine/atmos) +"pZq" = ( +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 8; + sortType = 12 + }, +/turf/open/floor/plating/airless, +/area/router/aux) "qeq" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -72625,41 +72413,72 @@ }, /turf/open/space/basic, /area/space/nearstation) -"qgO" = ( -/obj/machinery/portable_atmospherics/scrubber, -/turf/open/floor/plasteel, -/area/engine/atmos) "qlJ" = ( /obj/structure/lattice/catwalk, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supplymain/visible, /turf/open/space/basic, /area/space/nearstation) -"qvB" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/heater{ - dir = 8 +"qGi" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/turf/open/floor/plasteel, -/area/engine/atmos) +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/closed/wall/r_wall, +/area/engine/engine_smes{ + name = "Power Monitoring" + }) "qHL" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/manifold/yellow/visible{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/brown/visible{ + dir = 6 }, /turf/open/floor/plating, /area/engine/atmos) -"qWY" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - name = "Waste In" +"qMN" = ( +/obj/structure/plasticflaps, +/obj/structure/fans/tiny, +/obj/machinery/door/poddoor{ + id = "starboardbelthell_out"; + name = "Belt Hell" }, +/turf/open/floor/plating, +/area/router) +"qWY" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible, /turf/open/floor/plasteel, /area/engine/atmos) "rdF" = ( -/obj/machinery/atmospherics/pipe/simple/dark/visible{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/simple/dark/visible, /turf/open/floor/plasteel, /area/engine/atmos) +"rke" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/closed/wall/r_wall, +/area/engine/engine_smes{ + name = "Power Monitoring" + }) +"rqk" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/closed/wall/r_wall, +/area/engine/engine_smes{ + name = "Power Monitoring" + }) +"rOE" = ( +/obj/structure/plasticflaps, +/obj/structure/fans/tiny, +/obj/machinery/door/poddoor{ + id = "eva_in"; + name = "EVA Router" + }, +/turf/open/floor/plating, +/area/router) "rTW" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/violet/visible{ @@ -72673,22 +72492,28 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) -"sdp" = ( -/obj/structure/reagent_dispensers/foamtank, -/turf/open/floor/engine, -/area/engine/secure_construction{ - name = "Engineering Construction Area" - }) -"sHB" = ( -/obj/machinery/atmospherics/pipe/manifold/orange/visible{ - dir = 4 +"sky" = ( +/obj/machinery/conveyor/auto{ + dir = 4; + id = "pq" }, +/turf/open/floor/plating/airless, +/area/router/aux) +"sAm" = ( +/obj/structure/plasticflaps, +/obj/machinery/door/poddoor{ + id = "airbridge_out"; + name = "Airbridge Router" + }, +/turf/open/floor/plating, +/area/engine/workshop) +"sHB" = ( +/obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/plasteel, /area/engine/atmos) "sRD" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 5 - }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/machinery/portable_atmospherics/canister, /turf/open/floor/plasteel, /area/engine/atmos) "sVC" = ( @@ -72699,6 +72524,15 @@ /obj/machinery/atmospherics/pipe/simple/supplymain/visible, /turf/open/space/basic, /area/space/nearstation) +"tff" = ( +/obj/structure/plasticflaps, +/obj/structure/fans/tiny, +/obj/machinery/door/poddoor{ + id = "portbelthell_out"; + name = "Airbridge Router" + }, +/turf/open/floor/plating, +/area/router) "tjb" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ @@ -72714,12 +72548,15 @@ /obj/machinery/atmospherics/pipe/simple/violet/visible, /turf/open/space/basic, /area/space/nearstation) -"tuF" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 6 +"tsU" = ( +/obj/structure/plasticflaps, +/obj/structure/fans/tiny, +/obj/machinery/door/poddoor{ + id = "engi_in"; + name = "Engineering Router" }, -/turf/closed/wall/r_wall, -/area/engine/atmos) +/turf/open/floor/plating, +/area/router) "tyI" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/visible{ dir = 4 @@ -72728,36 +72565,28 @@ /area/engine/atmos) "tXV" = ( /obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - layer = 2.4 + name = "Pure to Ports" }, /turf/open/floor/plasteel, /area/engine/atmos) "tZj" = ( -/obj/structure/tank_dispenser{ - pixel_x = -1 - }, -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/manifold/general/visible, /turf/open/floor/plasteel, /area/engine/atmos) "tZC" = ( -/obj/machinery/atmospherics/pipe/manifold4w/orange/visible, -/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/manifold/orange/visible{ + dir = 1 + }, /turf/open/floor/plasteel, /area/engine/atmos) "urj" = ( -/obj/machinery/atmospherics/pipe/simple/general/hidden{ - dir = 8; - icon_state = "intact" - }, /obj/structure/cable{ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ dir = 4 }, +/obj/effect/landmark/xeno_spawn, /turf/open/floor/plasteel/dark, /area/bridge) "uwK" = ( @@ -72778,27 +72607,18 @@ /turf/open/floor/plasteel, /area/engine/atmos) "uVD" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 5 +/obj/machinery/atmospherics/pipe/simple/brown/visible{ + dir = 9 }, /turf/open/floor/plasteel, /area/engine/atmos) "vcb" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 10 +/obj/machinery/atmospherics/pipe/simple/brown/visible, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 }, /turf/open/floor/plasteel, /area/engine/atmos) -"vsO" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/closed/wall/r_wall, -/area/engine/atmos) "vxU" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible, /obj/structure/extinguisher_cabinet{ @@ -72818,7 +72638,9 @@ /turf/open/space/basic, /area/space/nearstation) "wWH" = ( -/obj/machinery/atmospherics/pipe/manifold4w/general/visible, +/obj/machinery/atmospherics/components/unary/thermomachine/heater{ + dir = 1 + }, /turf/open/floor/plasteel, /area/engine/atmos) "xcO" = ( @@ -72828,24 +72650,8 @@ /obj/effect/turf_decal/tile/green{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 - }, /obj/machinery/atmospherics/components/binary/pump{ - dir = 0; - name = "Mix Outlet Pump" - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"xjk" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"xkC" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 9 + name = "Mix to Ports" }, /turf/open/floor/plasteel, /area/engine/atmos) @@ -72862,9 +72668,8 @@ /turf/closed/wall, /area/quartermaster/storage) "xCy" = ( -/obj/machinery/atmospherics/components/binary/pump, -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/violet/visible{ + dir = 9 }, /turf/open/floor/plasteel, /area/engine/atmos) @@ -92048,7 +91853,7 @@ aaa aaa bcy bdf -mBP +bdf crJ blT bqJ @@ -92763,7 +92568,7 @@ auL aAc aGq aJX -bdE +cQQ cen aGq cvK @@ -95885,7 +95690,7 @@ bhS beJ beJ bGI -bXP +aaU aaa aaa aaa @@ -96142,7 +95947,7 @@ bdg beJ beJ bGI -bXV +aaU aaa aaa aaa @@ -96399,7 +96204,7 @@ bdg beJ ceI bGI -bXV +aaU aaa aaa aaa @@ -96656,7 +96461,7 @@ bdg cmd beT bGI -bXV +aaU aaa aaa aaa @@ -96913,7 +96718,7 @@ bdg beJ bfd bdg -bXV +aaU aaa aaa ceD @@ -97170,7 +96975,7 @@ bdg beJ bfd bdg -bXV +aaU aaa bdg buB @@ -97427,7 +97232,7 @@ bdg caW bJy bdg -bXV +aaU aaU bdg bjg @@ -97684,7 +97489,7 @@ bdg beJ bfd bGI -bYd +bGI bGI bGI bzb @@ -97941,7 +97746,7 @@ beJ beJ bfd blc -bYP +beJ coS aXc aXc @@ -98116,7 +97921,7 @@ aak aak aak aak -aak +eSd aaa aaa aaa @@ -98198,7 +98003,7 @@ bzB bgA bWf bXm -bZQ +bgA bWq ccN cei @@ -98263,10 +98068,10 @@ aaa aaa aaa aaa -cPf -cPf -cPf -cPf +cPo +cPo +cPo +cPo cPo abp aaa @@ -98524,7 +98329,7 @@ abM abR abM abM -cPo +sky aaU aaa aaa @@ -98781,7 +98586,7 @@ cPg cPi cPj abR -cPo +sky aaU aaa aaa @@ -99038,7 +98843,7 @@ aaa aaa cPk abR -cPo +sky aaU aaa aaa @@ -99399,7 +99204,7 @@ aaa aaU aar abM -acf +cPp aaU aaa aaa @@ -99661,12 +99466,12 @@ aaU aaa aaa aaa +adM adj adj adj adj -adj -adj +adM aaU aaU aaa @@ -99918,12 +99723,12 @@ aaU aaa aaa aaa -adj +adM aeC afv adF agM -adj +adM aaa aaU aaU @@ -100175,12 +99980,12 @@ aaU aaa aaa aaa -adj +adM aeR afx aga afI -adj +adM aaa aaa aaU @@ -100432,20 +100237,20 @@ aaU add adC adC -adC +aap aeS adj adj agN +aiX ahL ahL -ahL -ahL +aaq afD afQ age age -agy +age age age afC @@ -100697,8 +100502,8 @@ aad aad aad aad -adM -aaj +aiM +agy aaI ami akX @@ -100955,7 +100760,7 @@ aad aad aad aiM -aaj +azO aaI aco akX @@ -101020,7 +100825,7 @@ bRf cCG cCH cCG -bUw +bgi bVJ cCG bWF @@ -101277,7 +101082,7 @@ bcf bcf bCs bcf -bwU +bhI bCD bcf bcf @@ -101469,7 +101274,7 @@ aad aad aad aiM -aap +aco abd abT akX @@ -101725,8 +101530,8 @@ aad aad aad aad -adM -aaq +aiM +aco aaI acF akX @@ -101982,7 +101787,7 @@ agO adj adj adj -adM +aiM aat abf acF @@ -103105,7 +102910,7 @@ aaa cuR cGa cuR -cNm +cNn cuR cIH cgv @@ -103927,7 +103732,7 @@ aaa aaa aaa aaa -aaa +cpB ckl ckl ckl @@ -105619,7 +105424,7 @@ aYi baU bdh aOJ -aog +bdE aog axV aHV @@ -106149,7 +105954,7 @@ aaU aaa btT bzE -btZ +rOE btT aaa aaa @@ -106188,7 +105993,7 @@ aaa aaa ctG cIh -ctJ +sAm ctG cIy bjm @@ -106925,7 +106730,7 @@ bKl bQW bUp cci -btZ +tff aSq bgh bIY @@ -107163,7 +106968,7 @@ bdP bfF bha bdP -abp +aOJ aPN bes aaU @@ -107208,8 +107013,8 @@ aPg aPg cet bpL -bBO -bBO +bpL +rqk bBO bBO ctG @@ -107228,7 +107033,7 @@ bZq bZh cEE bpD -cmL +bpD cyS byQ byQ @@ -107420,7 +107225,7 @@ bdW bfJ bhc bdP -abp +aOJ aPN bes aaU @@ -107466,7 +107271,7 @@ cdV cdV bpN bCa -bSo +bSp bSv cfl ctX @@ -107677,7 +107482,7 @@ bdY bfM bhg bdP -abp +aOJ aPN bey aaU @@ -107934,7 +107739,7 @@ bdP bdP bhl bdP -abp +aOJ aPN bes aaU @@ -107978,7 +107783,7 @@ cmf cnK cnK cdV -bBO +rke bUB bSq bVf @@ -108191,7 +107996,7 @@ aaU aaU cuA cuy -bcc +blD bcO bes aaU @@ -108448,7 +108253,7 @@ aaa aaa aaa aaU -brs +aQq aPR cux aaU @@ -108492,7 +108297,7 @@ cmE cok cok cdV -bBO +rke bPv cBd cfi @@ -108705,7 +108510,7 @@ aaa aaa aaa aaU -brs +aQq aQp cux aaU @@ -108749,7 +108554,7 @@ cmG coT cpL cpZ -bBO +qGi cxd cBd cfj @@ -108962,9 +108767,9 @@ aaU aaU aaU aaU -abp -aQq -bes +aUq +bmO +bcc aaU aaa aaa @@ -109006,7 +108811,7 @@ cmY cdV cdV cdV -bBO +qGi bSm cBk cfk @@ -109066,7 +108871,7 @@ aaa aaa aaa aaa -aaa +cpB aaa ckl ckl @@ -109219,9 +109024,9 @@ aaa aaa aaa aaU -abp +aUq aQr -bes +bcc aaU aaa aaa @@ -109239,7 +109044,7 @@ bBv bXM ccn ccA -ccy +dwH aTl bsz cdG @@ -109263,7 +109068,7 @@ cks crv crx aeI -bBO +rke bSn cBl bSn @@ -109476,7 +109281,7 @@ aaa aaa aaa aaU -abp +aUq aQr beD cuy @@ -109496,7 +109301,7 @@ bUc bXM cco ccE -btZ +tsU aTl bsz cdU @@ -109534,7 +109339,7 @@ cNt beZ cIS coz -bty +fkx bBl aaU aaU @@ -110046,9 +109851,9 @@ cJy cNg cNs cIB -cIM -bXX -bty +cMG +cVq +fui bBl aaU bIm @@ -110262,7 +110067,7 @@ aaa btT bBX btT -btZ +qMN btT aaa aaU @@ -110303,9 +110108,9 @@ cvi cuN cNv bhT -cIM -bXX -bty +cMG +cVq +fui bzr byT cfc @@ -110799,12 +110604,12 @@ aCZ aRG aOl aOV -avQ +bSo cmX aRp bkJ aUf -aeI +ciG bnp cmO cfU @@ -112870,7 +112675,7 @@ biV cKg cLn cLz -bmz +cLz biV cdP bXX @@ -113177,7 +112982,7 @@ aaa aaa aaa aaa -aaa +cpB aaa aaa ckl @@ -113336,7 +113141,7 @@ cAM bCP boA aYC -brf +att att att att @@ -114066,7 +113871,7 @@ aaa aaU aio akZ -biO +aKe bEt bEA aik @@ -114643,7 +114448,7 @@ aaa bsz anr bcI -sdp +bgw bUX bgw uwK @@ -116226,7 +116031,7 @@ btz bPm bxH bSf -bzd +hlV bQD bxH bxH @@ -116873,7 +116678,7 @@ aaa aaa aaa aaU -cnM +cPl abM acj aaU @@ -117470,8 +117275,8 @@ aaa aaa aaa aaa -bgi -fui +bMp +bJv aaa cwK aaa @@ -117727,8 +117532,8 @@ aZG aaa aaa aaa -bgi -fui +bMp +bJv aaa cwI aaa @@ -117984,8 +117789,8 @@ aaa aaa aaa aaa -bgi -fui +bMp +bJv aaa cwK aaa @@ -118026,7 +117831,7 @@ bYh bYn bYn bYE -cni +bYn cyf cgy bIz @@ -118488,16 +118293,16 @@ bzO caD bzn bjz -ciG +ciq bAK ciV aMI aaa bJj bLS -kxw -kxw -kxw +bHg +bHg +bHg bPA wPS aaa @@ -118931,7 +118736,7 @@ aaa aaU aav abM -acz +cPp aaU aaa aaa @@ -118961,7 +118766,7 @@ avz awx axU ayL -azO +azU aAu awp aCP @@ -119533,10 +119338,10 @@ cPD bVE cbT cww -bhI -bhI +cww +cww can -bhI +cww aaa anr aaa @@ -119786,15 +119591,15 @@ bNb bPL cwB cwB -cwB +hDz bVX eKM +bZQ +cww cww -bhI -bhI cao -bhI -bhI +cww +cww anr aaa aaU @@ -120041,13 +119846,13 @@ cww bjE bNq bQK -qgO +cwB chO cpN bWG cRg -jiZ -bhI +cmL +cww cLY cap cMt @@ -120301,14 +120106,14 @@ bNd bNE cww cpO -bWG -cJo +bYP +cRg cMH -bhI -cLZ +cww +cMb caq -cLZ -bhI +cMb +cww anr aaa aaU @@ -120557,15 +120362,15 @@ cww cww cww cww -cww +cLm cIs tyI -cMJ +cww cLX cMa cMj cMu -cMG +jiZ anr aaU aaU @@ -120812,17 +120617,17 @@ pgu pgu pgu gGG -vsO +cww chS cpQ cfM cbU -jXo +cww cLm cMb cas cMb -cMH +cMJ anr aaa aaa @@ -121069,9 +120874,9 @@ aXx aXx aXx bfW -tuF +cww lRy -fti +cMl cfP mEa cLV @@ -121326,7 +121131,7 @@ bca cat cKX bQN -nLV +cLb cLd fti cfT @@ -121337,7 +121142,7 @@ chx chM gDY jiZ -hlV +anr aaa aaa aaU @@ -121595,7 +121400,7 @@ rUl cMw cfs cMP -aaa +cMi aaa aaU aaa @@ -121838,14 +121643,14 @@ aXx bca bca cKQ -cKY -bQO +biO +bmz ony xcO hKC cVO -sRD -cMe +nAF +cni cai rdF cMk @@ -122099,12 +121904,12 @@ aXx bfW cww bUa -cMr +brf sRD -cMo +nAF cgz -cai -fkx +cJH +cwB cMl cMx cMJ @@ -122356,13 +122161,13 @@ cKX bQN cLb cLe -cMo -hMZ +bXP +sRD nAF lcD -cai -fkx -mNN +cwB +cwB +cwB cLo nBM cfD @@ -122613,12 +122418,12 @@ bZR bfW cwA cLf -cMo -iAW -fIw +bXV +sRD +nAF wWH -ntC -nEX +cwB +cwB hDz cLp oMB @@ -122870,11 +122675,11 @@ cKY bQO cLc eIh -car +bYd tXV tZj -jml -cVq +cwB +cwB cMc cMm cMy @@ -123128,10 +122933,10 @@ bfW cww bhJ cMo -iAW +cwB cJu -iAW -cJH +cwB +cwB cMd cMn cMz @@ -123385,10 +123190,10 @@ bQN cLb cLh cMo -iAW -cJu -hlo -cJH +cwB +jon +cwB +cwB cMe cMo cLq @@ -123643,9 +123448,9 @@ bWK cLi xKr nvn -cJu -iAW -cJH +jon +cwB +cwB cMe cMo cMA @@ -123899,10 +123704,10 @@ cLa cLc fgS car -iAW +cwB jon -xjk -cai +cwB +cwB cMg cMq cMB @@ -124159,7 +123964,7 @@ kOG dVR xCy sHB -xkC +cwB cMe cMr cMC @@ -124413,7 +124218,7 @@ bQS cLb cLj cMo -qvB +cwB cgh cgA chq @@ -124931,7 +124736,7 @@ prx vxU cLW ccG -cMi +prx iQY cMF cMO @@ -125728,7 +125533,7 @@ cNB cNB cNB cNG -cNN +hlo cNT cNy cNX @@ -125941,7 +125746,7 @@ aaa aaa aaa aaU -cbS +cPq abM ccH aaU @@ -126125,9 +125930,9 @@ aaa aaa aaa aaU -abF +cPl abM -acA +cPq aaU aaa aaa @@ -126198,9 +126003,9 @@ aaa aaa aaa aaU -cbS +cPq abR -ccJ +cPm aaU aaa aaa @@ -126382,9 +126187,9 @@ aaa aaa aaa aaU -abJ +cPm abR -acA +cPq aaU aaU aaU @@ -126639,12 +126444,12 @@ aaa aaa aaa aaU -abJ +cPm abR acB -adc -adc -adL +cPd +cPd +cdq aaa aaa aaa @@ -126709,14 +126514,14 @@ aaU aaa aaa aaa -bGK -bGK +cPd +cPd bUe ccc abR -aaY +pZq cdb -bGK +cPd cdq aaa aaa @@ -126896,7 +126701,7 @@ aaa aaa aaa aaU -abJ +cPm abM abR abM @@ -127153,12 +126958,12 @@ aaa aaa aaa abp -abJ -abZ -abZ -abZ -abZ -abZ +cPm +cPh +cPh +cPh +cPh +cPh aaa aaa aaa @@ -127223,15 +127028,15 @@ aaU aaa aaa aaa -bGP -bNo -bNo +cPe +cPh +cPh ccf ccs ccP cdi -bNo -bNo +cPh +cPh aaa aaa aaa diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm index fdb57fa0af..668bcead78 100644 --- a/_maps/map_files/OmegaStation/OmegaStation.dmm +++ b/_maps/map_files/OmegaStation/OmegaStation.dmm @@ -1240,13 +1240,26 @@ /turf/open/floor/plasteel/white, /area/crew_quarters/heads/hop) "abL" = ( -/obj/structure/sign/warning/securearea, -/turf/closed/wall, -/area/maintenance/starboard/fore) +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/effect/turf_decal/box, +/obj/machinery/power/solar{ + id = "forestarboard"; + name = "Fore-Starboard Solar Array" + }, +/turf/open/floor/plasteel/airless/solarpanel, +/area/solar/starboard/fore) "abM" = ( -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/maintenance/starboard/fore) +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/space/basic, +/area/solar/starboard/fore) "abN" = ( /obj/structure/sign/warning/vacuum, /turf/closed/wall, @@ -1602,15 +1615,16 @@ /turf/open/floor/plasteel/white, /area/crew_quarters/heads/hop) "acu" = ( -/obj/structure/sign/warning/vacuum{ - pixel_x = 32; - pixel_y = 32 +/obj/structure/cable{ + icon_state = "0-8" }, -/obj/effect/turf_decal/delivery, -/obj/machinery/atmospherics/components/unary/vent_pump/on, -/obj/effect/landmark/xeno_spawn, -/turf/open/floor/plasteel, -/area/maintenance/starboard/fore) +/obj/effect/turf_decal/box, +/obj/machinery/power/solar{ + id = "forestarboard"; + name = "Fore-Starboard Solar Array" + }, +/turf/open/floor/plasteel/airless/solarpanel, +/area/solar/starboard/fore) "acv" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -2131,20 +2145,12 @@ /turf/open/floor/plasteel/white, /area/crew_quarters/heads/hop) "adm" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/cable/white{ - icon_state = "0-2" +/obj/structure/sign/warning/securearea{ + pixel_x = 32; + pixel_y = -32 }, -/obj/machinery/power/apc{ - areastring = "/area/maintenance/starboard/fore"; - dir = 4; - name = "Starboard Bow Maintenance APC"; - pixel_x = 26 - }, -/turf/open/floor/plating{ - icon_state = "platingdmg2" - }, -/area/maintenance/starboard/fore) +/turf/open/space/basic, +/area/space) "adn" = ( /turf/closed/wall, /area/quartermaster/storage) @@ -2157,15 +2163,9 @@ /turf/closed/wall, /area/quartermaster/storage) "adq" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/closet/emcloset/anchored, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/maintenance/starboard/fore) +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/solar/starboard/fore) "adr" = ( /obj/structure/cable{ icon_state = "4-8" @@ -2194,20 +2194,12 @@ /turf/open/floor/plating, /area/engine/supermatter) "adt" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "0-4" }, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/door/airlock/external{ - name = "External Airlock"; - req_access_txt = "13" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel, -/area/maintenance/starboard/fore) +/turf/open/space/basic, +/area/solar/starboard/fore) "adu" = ( /turf/closed/wall, /area/quartermaster/qm) @@ -2393,13 +2385,18 @@ /turf/open/floor/wood, /area/crew_quarters/heads/captain/private) "adM" = ( -/obj/structure/sign/warning/vacuum{ - pixel_x = 32; - pixel_y = 32 +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "2-8" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/space/basic, +/area/solar/starboard/fore) "adN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/item/radio/intercom{ @@ -2597,11 +2594,12 @@ /turf/open/floor/plasteel, /area/quartermaster/storage) "aef" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 8 +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "0-8" }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) +/turf/open/space/basic, +/area/solar/starboard/fore) "aeg" = ( /obj/machinery/conveyor{ dir = 8; @@ -3099,6 +3097,7 @@ "aeS" = ( /obj/structure/closet/crate, /obj/effect/turf_decal/delivery, +/obj/item/toy/figure/cargotech, /turf/open/floor/plasteel, /area/quartermaster/storage) "aeT" = ( @@ -5559,7 +5558,8 @@ icon_state = "plant-21" }, /obj/machinery/camera{ - c_tag = "Chemistry" + c_tag = "Chemistry"; + network = list("ss13","medbay") }, /obj/effect/turf_decal/tile/yellow{ dir = 8 @@ -6262,12 +6262,8 @@ /turf/open/floor/plasteel, /area/medical/medbay/zone3) "ajP" = ( -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/effect/landmark/start/research_director, -/turf/open/floor/plasteel, -/area/science/mixing) +/turf/closed/wall/r_wall, +/area/crew_quarters/heads/hor) "ajQ" = ( /obj/effect/turf_decal/loading_area{ dir = 8 @@ -7432,7 +7428,8 @@ dir = 4 }, /obj/machinery/camera{ - c_tag = "Chief Engineer's Office" + c_tag = "Chief Engineer's Office"; + network = list("ss13","engine") }, /mob/living/simple_animal/parrot/Poly, /turf/open/floor/plasteel/dark, @@ -12020,18 +12017,28 @@ }, /area/engine/atmos) "asH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ - dir = 8 - }, -/obj/machinery/camera{ - c_tag = "Atmospherics North East"; - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow{ +/obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 }, -/turf/open/floor/plasteel/checker, +/obj/machinery/atmospherics/components/binary/pump{ + name = "Plasma to Pure" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera{ + c_tag = "Atmospherics North"; + network = list("ss13","engine") + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, /area/engine/atmos) "asI" = ( /obj/structure/sign/warning/vacuum{ @@ -15126,7 +15133,8 @@ "axu" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, /obj/machinery/camera{ - c_tag = "Atmospherics Monitoring" + c_tag = "Atmospherics Monitoring"; + network = list("ss13","engine") }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, @@ -15702,6 +15710,10 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/item/toy/figure/atmos{ + pixel_x = -2; + pixel_y = 2 + }, /turf/open/floor/plasteel/dark/corner{ dir = 1 }, @@ -18253,23 +18265,25 @@ /turf/open/floor/plasteel/dark, /area/engine/atmos) "aCF" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 4; - name = "Air to External Air Ports" +/obj/effect/decal/cleanable/dirt, +/obj/item/radio/intercom{ + name = "Station Intercom"; + pixel_y = 24 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/camera{ - c_tag = "Atmospherics South East"; - dir = 1 + c_tag = "Atmospherics North West"; + dir = 4; + network = list("ss13","engine") }, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ +/obj/effect/turf_decal/tile/yellow{ dir = 4 }, -/turf/open/floor/plasteel/dark, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/plasteel/dark/corner{ + dir = 1 + }, /area/engine/atmos) "aCG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -19324,7 +19338,8 @@ }, /obj/machinery/camera{ c_tag = "Engineering Secure Storage"; - dir = 4 + dir = 4; + network = list("ss13","engine") }, /obj/effect/turf_decal/bot, /obj/effect/turf_decal/tile/neutral, @@ -20192,7 +20207,8 @@ }, /obj/machinery/camera{ c_tag = "SMES Access"; - dir = 8 + dir = 8; + network = list("ss13","engine") }, /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -20226,23 +20242,22 @@ /turf/open/floor/plasteel, /area/engine/engineering) "aFB" = ( -/obj/machinery/shower{ - dir = 8; - name = "emergency shower" +/obj/structure/cable{ + icon_state = "0-8" }, -/obj/machinery/light/small, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ +/obj/machinery/power/terminal{ dir = 4 }, +/obj/effect/turf_decal/delivery, +/obj/machinery/airalarm{ + pixel_y = 24 + }, /obj/machinery/camera{ - c_tag = "Engineering Access"; - dir = 8 + c_tag = "Starboard Bow Solar"; + network = list("ss13","engine") }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/floor/plasteel, -/area/engine/engineering) +/turf/open/floor/plating, +/area/maintenance/solars/starboard/fore) "aFC" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 @@ -20787,7 +20802,8 @@ /obj/machinery/light, /obj/machinery/camera{ c_tag = "Engineering Foyer"; - dir = 1 + dir = 1; + network = list("ss13","engine") }, /obj/machinery/power/apc{ areastring = "/area/engine/break_room"; @@ -21227,22 +21243,20 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "aGY" = ( -/obj/structure/bed/dogbed/runtime, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/delivery, -/obj/structure/sign/poster/official/medical_green_cross{ - pixel_x = -32 - }, /obj/machinery/camera{ - c_tag = "CMO's Office"; - dir = 4 + c_tag = "Genetics Cloning"; + dir = 4; + network = list("ss13","medbay") }, -/mob/living/simple_animal/pet/cat/Runtime, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/heads/cmo) +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -22 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/medical/genetics) "aGZ" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -21343,7 +21357,8 @@ "aHg" = ( /obj/machinery/camera{ c_tag = "Gravity Generator Room"; - dir = 8 + dir = 8; + network = list("ss13","engine") }, /obj/effect/turf_decal/bot_white/left, /obj/effect/turf_decal/tile/neutral{ @@ -22188,7 +22203,8 @@ pixel_x = -32 }, /obj/machinery/camera{ - c_tag = "Engineering Monitoring" + c_tag = "Engineering Monitoring"; + network = list("ss13","engine") }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, @@ -22593,28 +22609,24 @@ /turf/open/floor/plasteel/white, /area/medical/genetics) "aJe" = ( -/obj/structure/table, -/obj/machinery/airalarm/unlocked{ - dir = 4; - pixel_x = -23 +/obj/machinery/firealarm{ + pixel_y = 24 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +/obj/structure/extinguisher_cabinet{ + pixel_x = -24; + pixel_y = 32 }, -/obj/effect/turf_decal/tile/neutral, -/obj/item/clipboard, -/obj/item/folder/white, -/obj/item/storage/pill_bottle/mutadone{ - pixel_x = -8; - pixel_y = 8 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/machinery/camera{ + c_tag = "Gravity Generator Entry"; + network = list("ss13","engine"); + pixel_x = 23 }, -/obj/item/storage/pill_bottle/mannitol{ - pixel_x = -8; - pixel_y = 2 +/obj/effect/turf_decal/stripes/line{ + dir = 9 }, -/obj/item/radio/headset/headset_medsci, -/turf/open/floor/plasteel/dark, -/area/medical/genetics) +/turf/open/floor/plasteel, +/area/engine/gravity_generator) "aJf" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ @@ -22684,23 +22696,30 @@ /turf/open/floor/plating, /area/engine/gravity_generator) "aJk" = ( -/obj/machinery/firealarm{ - pixel_y = 24 +/obj/structure/table/reinforced, +/obj/item/lightreplacer, +/obj/structure/cable/white{ + icon_state = "1-8" }, -/obj/structure/extinguisher_cabinet{ - pixel_x = -24; - pixel_y = 32 +/obj/structure/cable/white{ + icon_state = "4-8" }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/obj/machinery/camera{ - c_tag = "Gravity Generator Entry"; - pixel_x = 23 - }, -/obj/effect/turf_decal/stripes/line{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/item/toy/figure/engineer, /turf/open/floor/plasteel, -/area/engine/gravity_generator) +/area/engine/engineering) "aJl" = ( /obj/machinery/power/apc/highcap/five_k{ areastring = "/area/engine/gravity_generator"; @@ -23105,19 +23124,13 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "aJO" = ( -/obj/machinery/camera{ - c_tag = "Genetics Cloning"; - dir = 4 +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "rdprivacy"; + name = "Director's Privacy Blast Door" }, -/obj/machinery/airalarm{ - dir = 4; - pixel_x = -22 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/turf/open/floor/plasteel/white, -/area/medical/genetics) +/turf/open/floor/plating, +/area/crew_quarters/heads/hor) "aJP" = ( /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -23393,21 +23406,9 @@ /turf/closed/wall, /area/maintenance/port/aft) "aKo" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/door/airlock/external{ - name = "External Airlock"; - req_access_txt = "13" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/maintenance/port/aft) +/obj/structure/lattice, +/turf/open/floor/plating/asteroid/airless, +/area/asteroid/nearstation) "aKp" = ( /obj/machinery/airalarm{ dir = 4; @@ -23445,17 +23446,16 @@ /turf/open/floor/plasteel/dark, /area/engine/gravity_generator) "aKr" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 4 +/obj/machinery/power/solar{ + id = "aftport"; + name = "Aft-Port Solar Array" }, -/obj/effect/landmark/xeno_spawn, -/obj/structure/sign/warning/vacuum{ - pixel_x = -32; - pixel_y = 32 +/obj/structure/cable{ + icon_state = "0-4" }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/maintenance/port/aft) +/obj/effect/turf_decal/box, +/turf/open/floor/plasteel/airless/solarpanel, +/area/solar/port/aft) "aKs" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command/glass{ @@ -23599,11 +23599,15 @@ /turf/open/floor/engine, /area/engine/supermatter) "aKB" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "2-4" }, -/turf/open/floor/plasteel, -/area/maintenance/port/aft) +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/space/basic, +/area/solar/port/aft) "aKC" = ( /obj/machinery/atmospherics/components/binary/pump{ name = "Gas to Chamber" @@ -23623,24 +23627,16 @@ /turf/open/floor/plasteel/dark, /area/engine/engineering) "aKF" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/obj/machinery/power/solar{ + id = "aftport"; + name = "Aft-Port Solar Array" }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 +/obj/structure/cable{ + icon_state = "0-8" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/external{ - name = "External Airlock"; - req_access_txt = "13" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/maintenance/port/aft) +/obj/effect/turf_decal/box, +/turf/open/floor/plasteel/airless/solarpanel, +/area/solar/port/aft) "aKG" = ( /obj/structure/cable/white{ icon_state = "1-2" @@ -23749,29 +23745,15 @@ /turf/open/floor/plasteel, /area/engine/engineering) "aKM" = ( -/obj/structure/table/reinforced, -/obj/item/lightreplacer, -/obj/structure/cable/white{ - icon_state = "1-8" - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 +/obj/machinery/light_switch{ + pixel_y = -24 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/bot, +/obj/structure/closet/l3closet/janitor, +/obj/item/toy/figure/janitor, /turf/open/floor/plasteel, -/area/engine/engineering) +/area/janitor) "aKN" = ( /obj/structure/cable/white{ icon_state = "4-8" @@ -24267,13 +24249,18 @@ }, /area/maintenance/port/aft) "aLz" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "2-4" }, -/obj/machinery/light/small, -/obj/structure/closet/emcloset/anchored, -/turf/open/floor/plasteel, -/area/maintenance/port/aft) +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/space/basic, +/area/solar/port/aft) "aLA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 @@ -24291,12 +24278,8 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "aLC" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/item/cigbutt, -/turf/open/floor/plating, -/area/maintenance/port/aft) +/turf/closed/wall, +/area/maintenance/solars/port/aft) "aLD" = ( /obj/machinery/power/port_gen/pacman, /obj/effect/turf_decal/stripes/line{ @@ -24395,11 +24378,13 @@ /turf/open/floor/plasteel, /area/engine/gravity_generator) "aLL" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/effect/turf_decal/box, +/obj/structure/cable{ + icon_state = "0-4" }, -/turf/open/floor/plating/airless, -/area/maintenance/port/aft) +/obj/machinery/power/tracker, +/turf/open/floor/plasteel/airless/solarpanel, +/area/solar/port/aft) "aLM" = ( /obj/structure/cable/white{ icon_state = "1-2" @@ -24937,27 +24922,19 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "aMH" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "0-8" }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/door/airlock/maintenance_hatch{ - name = "Maintenance Hatch"; - req_access_txt = "12" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/maintenance/port/aft) +/turf/open/space/basic, +/area/solar/port/aft) "aMI" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "0-4" }, -/turf/open/floor/plasteel/dark, -/area/maintenance/port/aft) +/turf/open/space/basic, +/area/solar/port/aft) "aMJ" = ( /turf/closed/wall/r_wall, /area/tcommsat/server) @@ -25023,21 +25000,18 @@ /turf/open/floor/engine, /area/engine/engineering) "aMQ" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "1-4" }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +/obj/structure/cable{ + icon_state = "2-4" }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/maintenance/port/aft) +/turf/open/space/basic, +/area/solar/port/aft) "aMR" = ( /obj/machinery/camera{ c_tag = "Supermatter Chamber"; @@ -25256,14 +25230,32 @@ /turf/open/floor/plasteel, /area/janitor) "aNl" = ( -/obj/machinery/light_switch{ - pixel_y = -24 +/obj/structure/table, +/obj/machinery/airalarm/unlocked{ + dir = 4; + pixel_x = -23 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/bot, -/obj/structure/closet/l3closet/janitor, -/turf/open/floor/plasteel, -/area/janitor) +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/item/clipboard, +/obj/item/folder/white, +/obj/item/storage/pill_bottle/mutadone{ + pixel_x = -8; + pixel_y = 8 + }, +/obj/item/storage/pill_bottle/mannitol{ + pixel_x = -8; + pixel_y = 2 + }, +/obj/item/radio/headset/headset_medsci, +/obj/item/toy/figure/geneticist{ + pixel_x = 5; + pixel_y = 13 + }, +/turf/open/floor/plasteel/dark, +/area/medical/genetics) "aNm" = ( /obj/effect/turf_decal/bot, /obj/machinery/vending/wardrobe/jani_wardrobe, @@ -25574,23 +25566,17 @@ /turf/open/floor/plasteel/white, /area/medical/genetics) "aNO" = ( -/obj/machinery/camera{ - c_tag = "Genetics Lab"; - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 +/obj/effect/turf_decal/tile/purple{ + dir = 4 }, -/obj/machinery/computer/scan_consolenew{ - icon_state = "computer"; - dir = 1 +/obj/structure/sign/poster/official/anniversary_vintage_reprint{ + pixel_x = 32 }, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel/dark, -/area/medical/genetics) +/turf/open/floor/plasteel/white, +/area/science/research) "aNP" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -25743,22 +25729,10 @@ /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/heads/cmo) "aOc" = ( -/obj/machinery/door/airlock/maintenance_hatch{ - name = "Maintenance Hatch"; - req_access_txt = "12" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/maintenance/port/aft) +/obj/structure/lattice/catwalk, +/obj/effect/landmark/xeno_spawn, +/turf/open/space/basic, +/area/solar/port/aft) "aOd" = ( /obj/machinery/power/apc{ areastring = "/area/engine/engineering"; @@ -26118,17 +26092,18 @@ /turf/open/floor/engine, /area/engine/engineering) "aOH" = ( -/obj/structure/cable/white{ - icon_state = "1-2" +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "2-4" }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 4 +/obj/structure/cable{ + icon_state = "1-4" }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/open/floor/plating, -/area/maintenance/port/aft) +/turf/open/space/basic, +/area/solar/port/aft) "aOI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 @@ -26328,21 +26303,15 @@ /turf/closed/wall, /area/medical/genetics) "aOX" = ( -/obj/machinery/requests_console{ - department = "Medbay"; - departmentType = 1; - name = "Medbay RC"; - pixel_x = -30 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/camera{ - c_tag = "Medbay Storage" + c_tag = "R&D"; + dir = 1; + network = list("ss13","rd") }, -/obj/machinery/rnd/production/techfab/department/medical, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes/box, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel, -/area/medical/medbay/zone3) +/obj/effect/turf_decal/tile/purple, +/turf/open/floor/plasteel/white, +/area/science/lab) "aOY" = ( /obj/structure/cable/white{ icon_state = "1-2" @@ -27124,18 +27093,24 @@ }, /area/hallway/primary/port/aft) "aQe" = ( -/obj/structure/table/glass, -/obj/effect/turf_decal/tile/blue{ - dir = 8 +/obj/machinery/camera{ + c_tag = "Genetics Lab"; + dir = 8; + network = list("ss13","medbay") }, -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/item/paper_bin, -/obj/item/pen, -/obj/item/stamp/cmo, -/turf/open/floor/plasteel/cafeteria, -/area/crew_quarters/heads/cmo) +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/computer/scan_consolenew{ + icon_state = "computer"; + dir = 1 + }, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/dark, +/area/medical/genetics) "aQf" = ( /obj/machinery/firealarm{ dir = 1; @@ -27423,40 +27398,12 @@ /turf/open/floor/plasteel/dark, /area/medical/morgue) "aQE" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/cable/white{ - icon_state = "0-8" - }, -/obj/structure/table/wood, -/obj/item/storage/box/bodybags{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/box/bodybags, -/obj/machinery/power/apc{ - areastring = "/area/medical/morgue"; +/obj/machinery/airalarm/unlocked{ dir = 4; - name = "Morgue APC"; - pixel_x = 26 + pixel_x = -23 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/camera{ - c_tag = "Morgue"; - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/medical/morgue) +/turf/open/floor/plating/asteroid, +/area/crew_quarters/heads/hor) "aQF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -28843,24 +28790,20 @@ /turf/open/floor/plasteel/white, /area/medical/virology) "aTn" = ( -/obj/effect/landmark/start/virologist, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 4 +/obj/structure/table/plasmaglass, +/obj/machinery/recharger, +/obj/item/paicard{ + pixel_x = 15 }, -/obj/machinery/power/apc/highcap/five_k{ - areastring = "/area/medical/virology"; - dir = 1; - name = "Virology APC"; - pixel_y = 24 +/obj/structure/sign/poster/official/ue_no{ + pixel_y = 32 }, -/obj/structure/cable/white{ - icon_state = "0-4" +/obj/item/toy/figure/rd{ + pixel_x = -8; + pixel_y = 14 }, -/obj/machinery/camera{ - c_tag = "Virology" - }, -/turf/open/floor/plasteel, -/area/medical/virology) +/turf/open/floor/plating/asteroid, +/area/crew_quarters/heads/hor) "aTo" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall/r_wall, @@ -30094,14 +30037,24 @@ /turf/open/floor/plasteel/white, /area/science/research) "aVz" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ +/obj/machinery/shower{ + dir = 8; + name = "emergency shower" + }, +/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 +/obj/machinery/camera{ + c_tag = "Engineering Access"; + dir = 8; + network = list("ss13","engine") }, -/turf/open/floor/plasteel/white, -/area/science/research) +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) "aVA" = ( /turf/closed/wall, /area/science/research) @@ -30424,6 +30377,10 @@ /obj/item/reagent_containers/glass/bottle/epinephrine, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/dropper, +/obj/item/toy/figure/chemist{ + pixel_x = -6; + pixel_y = 11 + }, /turf/open/floor/plasteel/white, /area/medical/chemistry) "aWg" = ( @@ -30516,14 +30473,24 @@ /turf/open/floor/plasteel/white, /area/science/lab) "aWm" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/camera{ - c_tag = "R&D"; - dir = 1 +/obj/structure/table, +/obj/item/storage/box/gloves{ + pixel_x = 3; + pixel_y = 3 }, -/obj/effect/turf_decal/tile/purple, -/turf/open/floor/plasteel/white, -/area/science/lab) +/obj/item/storage/box/beakers, +/obj/structure/extinguisher_cabinet{ + pixel_x = -26 + }, +/obj/machinery/camera{ + c_tag = "Medbay West"; + network = list("ss13","medbay") + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/medical/medbay/zone3) "aWn" = ( /obj/machinery/firealarm{ dir = 1; @@ -31056,23 +31023,22 @@ /turf/open/floor/plasteel/dark, /area/library) "aXm" = ( -/obj/structure/table, -/obj/item/storage/box/gloves{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/box/beakers, -/obj/structure/extinguisher_cabinet{ - pixel_x = -26 - }, -/obj/machinery/camera{ - c_tag = "Medbay West" - }, -/obj/effect/turf_decal/stripes/line{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/plasteel, -/area/medical/medbay/zone3) +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/camera{ + c_tag = "Research Division North"; + network = list("ss13","rd") + }, +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/science/research) "aXn" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/tile/blue{ @@ -31711,18 +31677,26 @@ /turf/open/floor/plasteel/white, /area/science/research) "aYp" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 24 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/machinery/camera{ - c_tag = "Research Division South"; + c_tag = "Communications Relay"; + dir = 8; + network = list("ss13","tcomms") + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/vending/wardrobe/science_wardrobe, -/obj/effect/turf_decal/tile/purple, -/turf/open/floor/plasteel/white, -/area/science/research) +/turf/open/floor/plasteel/dark/telecomms, +/area/tcommsat/server) "aYq" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ dir = 1 @@ -31880,21 +31854,25 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "aYB" = ( -/obj/machinery/shower{ - desc = "From what you understand it was put in rather recently, but the design looks right out of the 2510's. Weird."; - dir = 1; - icon_state = "shower"; - name = "Emergency Shower" +/obj/machinery/door/firedoor/heavy, +/obj/machinery/door/airlock/command{ + name = "Research Director's Office"; + req_access_txt = "30" + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, /obj/effect/turf_decal/stripes/line{ - dir = 6 + dir = 4 }, -/obj/machinery/camera{ - c_tag = "Virology Access"; - dir = 1 +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/turf/open/floor/plasteel/white, -/area/medical/virology) +/turf/open/floor/plasteel, +/area/crew_quarters/heads/hor) "aYC" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/landmark/event_spawn, @@ -32693,6 +32671,17 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) +"aZS" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/solar/port/aft) +"aZT" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating/airless, +/area/solar/port/aft) "aZU" = ( /obj/machinery/recharge_station, /obj/effect/landmark/start/cyborg, @@ -32820,6 +32809,25 @@ }, /turf/open/floor/plasteel/dark, /area/science/robotics/lab) +"bae" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/airlock/external{ + name = "External Airlock"; + req_access_txt = "13" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/maintenance/solars/port/aft) "baf" = ( /obj/item/stack/sheet/metal/fifty, /obj/item/stack/sheet/metal/fifty, @@ -32893,6 +32901,148 @@ icon_state = "platingdmg1" }, /area/maintenance/starboard) +"baj" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/obj/effect/landmark/xeno_spawn, +/obj/structure/sign/warning/vacuum{ + pixel_x = -32; + pixel_y = 32 + }, +/obj/effect/turf_decal/delivery, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/maintenance/solars/port/aft) +"bak" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/maintenance/solars/port/aft) +"bal" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/external{ + name = "External Airlock"; + req_access_txt = "13" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/maintenance/solars/port/aft) +"bam" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/sign/warning/vacuum{ + pixel_y = 32 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plating, +/area/maintenance/solars/port/aft) +"ban" = ( +/obj/structure/cable/white{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/turf/open/floor/plating, +/area/maintenance/solars/port/aft) +"bao" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/structure/sign/warning/electricshock{ + pixel_y = -32 + }, +/turf/open/floor/plating, +/area/maintenance/solars/port/aft) +"bap" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Maintenance Hatch"; + req_access_txt = "12" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/maintenance/solars/port/aft) +"baq" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/structure/cable/white{ + icon_state = "2-8" + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) +"bar" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/space/basic, +/area/solar/port/aft) +"bas" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light/small, +/obj/structure/closet/emcloset/anchored, +/turf/open/floor/plasteel, +/area/maintenance/solars/port/aft) +"bat" = ( +/turf/closed/wall/r_wall/rust, +/area/maintenance/solars/port/aft) +"bau" = ( +/turf/closed/wall/r_wall, +/area/maintenance/solars/port/aft) +"bav" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/closed/wall, +/area/maintenance/solars/port/aft) "baw" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/sign/departments/medbay/alt, @@ -33013,6 +33163,17 @@ }, /turf/open/floor/plasteel, /area/medical/medbay/zone3) +"baE" = ( +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/engineering{ + name = "Port Quarter Solar Access"; + req_access_txt = "10" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating, +/area/maintenance/solars/port/aft) "baF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/tile/blue, @@ -33123,28 +33284,22 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "baN" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = -24 +/obj/machinery/computer/card/minor/rd, +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 1 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/structure/cable/white{ - icon_state = "1-2" +/obj/item/aicard, +/turf/open/floor/plasteel{ + icon_state = "sepia" }, -/obj/structure/cable/white{ - icon_state = "1-4" - }, -/obj/machinery/camera{ - c_tag = "Mech Bay"; - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/plasteel, -/area/science/robotics/mechbay) +/area/crew_quarters/heads/hor) "baO" = ( /obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, /obj/structure/cable/white{ @@ -33290,6 +33445,165 @@ }, /turf/open/floor/plasteel/dark, /area/science/robotics/lab) +"bbb" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/structure/cable/white{ + icon_state = "1-4" + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) +"bbc" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/item/cigbutt, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) +"bbd" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) +"bbe" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/plating/airless, +/area/maintenance/port/aft) +"bbf" = ( +/obj/machinery/power/smes, +/obj/structure/cable/white{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/maintenance/solars/port/aft) +"bbg" = ( +/obj/structure/lattice/catwalk, +/obj/effect/landmark/xeno_spawn, +/turf/open/space/basic, +/area/solar/starboard/fore) +"bbh" = ( +/obj/structure/cable/white{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating, +/area/maintenance/solars/port/aft) +"bbi" = ( +/obj/structure/cable/white{ + icon_state = "0-8" + }, +/obj/structure/cable/white{ + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + areastring = "/area/maintenance/solars/port/aft"; + dir = 4; + name = "Port Quarter Solar APC"; + pixel_x = 26 + }, +/turf/open/floor/plating, +/area/maintenance/solars/port/aft) +"bbj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Maintenance Hatch"; + req_access_txt = "12" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/maintenance/port/aft) +"bbk" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/maintenance/port/aft) +"bbl" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/maintenance/port/aft) +"bbm" = ( +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Maintenance Hatch"; + req_access_txt = "12" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/maintenance/port/aft) +"bbn" = ( +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable/white{ + icon_state = "1-8" + }, +/turf/open/floor/plating, +/area/maintenance/port/aft) +"bbo" = ( +/obj/structure/cable/white{ + icon_state = "1-4" + }, +/turf/open/floor/plating, +/area/maintenance/solars/port/aft) "bbp" = ( /obj/machinery/light{ dir = 8 @@ -33603,6 +33917,153 @@ }, /turf/open/floor/plasteel/dark, /area/science/robotics/lab) +"bbP" = ( +/obj/machinery/modular_computer/console/preset/research, +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/plasteel{ + icon_state = "sepia" + }, +/area/crew_quarters/heads/hor) +"bbQ" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/space/basic, +/area/solar/starboard/fore) +"bbR" = ( +/obj/structure/cable/white{ + icon_state = "0-8" + }, +/obj/structure/cable/white, +/obj/machinery/power/solar_control{ + dir = 8; + id = "aftport"; + name = "Port Quarter Solar Control" + }, +/obj/effect/turf_decal/bot, +/turf/open/floor/plating, +/area/maintenance/solars/port/aft) +"bbS" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/space/basic, +/area/solar/port/aft) +"bbT" = ( +/turf/closed/wall, +/area/maintenance/solars/starboard/fore) +"bbU" = ( +/turf/closed/wall/r_wall, +/area/maintenance/solars/starboard/fore) +"bbV" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/space/basic, +/area/solar/starboard/fore) +"bbW" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/space/basic, +/area/solar/starboard/fore) +"bbX" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/closet/emcloset/anchored, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/maintenance/solars/starboard/fore) +"bbY" = ( +/obj/structure/lattice/catwalk, +/turf/open/floor/plating/airless, +/area/solar/starboard/fore) +"bbZ" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel, +/area/maintenance/solars/starboard/fore) +"bca" = ( +/obj/structure/sign/warning/vacuum{ + pixel_x = 32; + pixel_y = 32 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/obj/effect/landmark/xeno_spawn, +/obj/effect/turf_decal/delivery, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/maintenance/solars/starboard/fore) +"bcb" = ( +/obj/machinery/door/airlock/external{ + name = "External Airlock"; + req_access_txt = "13" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/maintenance/solars/starboard/fore) +"bcc" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/external{ + name = "External Airlock"; + req_access_txt = "13" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/maintenance/solars/starboard/fore) "bcd" = ( /obj/item/retractor, /obj/item/hemostat, @@ -33921,12 +34382,166 @@ }, /turf/open/floor/plasteel/dark, /area/science/robotics/lab) +"bcD" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/space/basic, +/area/solar/starboard/fore) "bcE" = ( /obj/structure/closet/l3closet/scientist{ pixel_x = -2 }, /turf/open/floor/plasteel, /area/science/mixing) +"bcF" = ( +/obj/structure/sign/warning/securearea, +/turf/closed/wall/r_wall, +/area/maintenance/solars/starboard/fore) +"bcG" = ( +/obj/structure/sign/warning/vacuum{ + pixel_x = 32; + pixel_y = 32 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plating, +/area/maintenance/solars/starboard/fore) +"bcH" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/maintenance/solars/starboard/fore) +"bcI" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/maintenance/solars/starboard/fore) +"bcJ" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/effect/turf_decal/box, +/obj/machinery/power/tracker, +/turf/open/floor/plasteel/airless/solarpanel, +/area/solar/starboard/fore) +"bcK" = ( +/obj/machinery/power/smes, +/obj/structure/cable/white{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/maintenance/solars/starboard/fore) +"bcL" = ( +/obj/structure/cable/white{ + icon_state = "0-2" + }, +/obj/structure/cable/white{ + icon_state = "0-8" + }, +/obj/machinery/power/solar_control{ + dir = 2; + id = "forestarboard"; + name = "Starboard Bow Solar Control" + }, +/obj/effect/turf_decal/bot, +/turf/open/floor/plating, +/area/maintenance/solars/starboard/fore) +"bcM" = ( +/obj/structure/cable/white{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/solars/starboard/fore) +"bcN" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/structure/sign/warning/electricshock{ + pixel_x = 32; + pixel_y = -32 + }, +/turf/open/floor/plating, +/area/maintenance/solars/starboard/fore) +"bcO" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/engineering{ + name = "Starboard Bow Solar Access"; + req_access_txt = "10" + }, +/turf/open/floor/plating, +/area/maintenance/solars/starboard/fore) +"bcP" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/solars/starboard/fore) +"bcQ" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/turf/open/space/basic, +/area/solar/starboard/fore) +"bcR" = ( +/obj/structure/cable/white{ + icon_state = "1-8" + }, +/turf/open/floor/plating, +/area/maintenance/solars/starboard/fore) +"bcS" = ( +/obj/structure/lattice, +/obj/structure/sign/warning/securearea{ + pixel_x = -32 + }, +/turf/open/floor/plating/asteroid/airless, +/area/asteroid/nearstation) +"bcT" = ( +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/external{ + name = "External Airlock"; + req_access_txt = "13" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/maintenance/solars/starboard/fore) "bcU" = ( /obj/item/circular_saw, /obj/item/surgicaldrill{ @@ -34172,6 +34787,15 @@ }, /turf/open/floor/plating, /area/security/checkpoint) +"bdi" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) "bdj" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -34317,20 +34941,20 @@ /turf/open/floor/plasteel/dark, /area/science/robotics/lab) "bdv" = ( -/obj/structure/table/reinforced, -/obj/structure/window/reinforced{ +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ dir = 8 }, -/obj/item/clothing/gloves/color/latex, -/obj/item/surgical_drapes, -/obj/item/cautery, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ +/obj/machinery/camera{ + c_tag = "Atmospherics North East"; + dir = 8; + network = list("ss13","engine") + }, +/obj/effect/turf_decal/tile/yellow{ dir = 4 }, -/turf/open/floor/plasteel/dark, -/area/science/robotics/lab) +/turf/open/floor/plasteel/checker, +/area/engine/atmos) "bdw" = ( /obj/machinery/holopad, /obj/effect/turf_decal/tile/purple{ @@ -34378,6 +35002,243 @@ /obj/structure/sign/warning/fire, /turf/closed/wall, /area/science/mixing) +"bdB" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating/airless, +/area/solar/starboard/fore) +"bdC" = ( +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plating, +/area/maintenance/solars/port/aft) +"bdD" = ( +/obj/structure/displaycase/labcage, +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/power/apc{ + areastring = "/area/crew_quarters/heads/hor"; + dir = 1; + name = "RD Office APC"; + pixel_y = 26 + }, +/obj/structure/cable/white{ + icon_state = "0-2" + }, +/turf/open/floor/plasteel{ + icon_state = "sepia" + }, +/area/crew_quarters/heads/hor) +"bdE" = ( +/obj/structure/cable/white{ + icon_state = "0-4" + }, +/obj/structure/cable/white{ + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + areastring = "/area/maintenance/solars/starboard/fore"; + dir = 2; + name = "Starboard Bow Solar APC"; + pixel_y = -26 + }, +/turf/open/floor/plating, +/area/maintenance/solars/starboard/fore) +"bdF" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/power/apc{ + areastring = "/area/maintenance/starboard/fore"; + dir = 4; + name = "Starboard Bow Maintenance APC"; + pixel_x = 26 + }, +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/structure/cable/white{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/fore) +"bdG" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/airalarm{ + dir = 1; + pixel_y = -22 + }, +/turf/open/floor/plating, +/area/maintenance/solars/port/aft) +"bdH" = ( +/obj/machinery/requests_console{ + department = "Medbay"; + departmentType = 1; + name = "Medbay RC"; + pixel_x = -30 + }, +/obj/machinery/camera{ + c_tag = "Medbay Storage"; + network = list("ss13","medbay") + }, +/obj/machinery/rnd/production/techfab/department/medical, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/box, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel, +/area/medical/medbay/zone3) +"bdI" = ( +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/holopad, +/turf/open/floor/plasteel{ + icon_state = "sepia" + }, +/area/crew_quarters/heads/hor) +"bdJ" = ( +/obj/structure/chair/office/dark{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/landmark/start/research_director, +/turf/open/floor/plasteel{ + icon_state = "sepia" + }, +/area/crew_quarters/heads/hor) +"bdK" = ( +/obj/machinery/computer/mecha{ + dir = 8 + }, +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/plasteel{ + icon_state = "sepia" + }, +/area/crew_quarters/heads/hor) +"bdL" = ( +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/landmark/start/research_director, +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel{ + icon_state = "sepia" + }, +/area/crew_quarters/heads/hor) +"bdM" = ( +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/turf/open/floor/plasteel{ + icon_state = "sepia" + }, +/area/crew_quarters/heads/hor) +"bdN" = ( +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/keycard_auth{ + pixel_x = 24; + pixel_y = -24 + }, +/obj/machinery/button/door{ + id = "rdprivacy"; + name = "Director's Privacy Toggle"; + pixel_x = 24; + pixel_y = -38 + }, +/obj/machinery/light_switch{ + pixel_x = 40; + pixel_y = -24 + }, +/obj/machinery/button/door{ + id = "rdxeno"; + name = "Xenobiology Containment Lockdown"; + pixel_x = 38; + pixel_y = -38; + req_access_txt = "47" + }, +/turf/open/floor/plasteel{ + icon_state = "sepia" + }, +/area/crew_quarters/heads/hor) +"bdO" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall/r_wall, +/area/crew_quarters/heads/hor) +"bdP" = ( +/obj/machinery/light{ + dir = 1; + light_color = "#c1caff" + }, +/obj/structure/flora/tree/palm, +/turf/open/floor/plating/asteroid, +/area/crew_quarters/heads/hor) "bdQ" = ( /obj/structure/closet/secure_closet/medical2, /obj/machinery/airalarm{ @@ -34485,25 +35346,23 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/zone3) "bdW" = ( -/obj/structure/closet/crate/freezer/blood, -/obj/structure/extinguisher_cabinet{ - pixel_y = -26 +/obj/structure/bed/dogbed/runtime, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 +/obj/effect/turf_decal/delivery, +/obj/structure/sign/poster/official/medical_green_cross{ + pixel_x = -32 }, /obj/machinery/camera{ - c_tag = "Medbay Recovery Room"; - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 + c_tag = "CMO's Office"; + dir = 4; + network = list("ss13","medbay") }, +/mob/living/simple_animal/pet/cat/Runtime, /turf/open/floor/plasteel/dark, -/area/medical/medbay/zone3) +/area/crew_quarters/heads/cmo) "bdX" = ( /obj/machinery/computer/crew{ dir = 4 @@ -34788,10 +35647,174 @@ /obj/machinery/door/poddoor/incinerator_toxmix, /turf/open/floor/engine/vacuum, /area/science/mixing) +"beu" = ( +/obj/machinery/portable_atmospherics/pump, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/science/mixing) +"bev" = ( +/obj/structure/table/plasmaglass, +/obj/item/paper_bin, +/obj/item/pen, +/obj/item/stamp/rd, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/open/floor/plating/asteroid, +/area/crew_quarters/heads/hor) +"bew" = ( +/obj/machinery/computer/aifixer{ + dir = 8 + }, +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/plasteel{ + icon_state = "sepia" + }, +/area/crew_quarters/heads/hor) +"bex" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + icon_state = "sepia" + }, +/area/crew_quarters/heads/hor) +"bey" = ( +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/item/paper_bin, +/obj/item/pen, +/obj/item/stamp/cmo, +/obj/machinery/light_switch{ + pixel_x = 24; + pixel_y = -24 + }, +/turf/open/floor/plasteel/cafeteria, +/area/crew_quarters/heads/cmo) +"bez" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -26 + }, +/turf/open/floor/plasteel{ + icon_state = "sepia" + }, +/area/crew_quarters/heads/hor) +"beA" = ( +/obj/structure/closet/bombcloset, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/science/mixing) +"beB" = ( +/obj/structure/cable/white{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple, +/turf/open/floor/plasteel, +/area/science/mixing) +"beC" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = -24 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/structure/cable/white{ + icon_state = "1-4" + }, +/obj/machinery/camera{ + c_tag = "Mech Bay"; + dir = 4; + network = list("ss13","rd") + }, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/science/robotics/mechbay) +"beD" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/structure/sign/poster/official/soft_cap_pop_art{ + pixel_y = -32 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/turf/open/floor/plasteel{ + icon_state = "sepia" + }, +/area/crew_quarters/heads/hor) "beE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/medical/medbay/zone3) +"beF" = ( +/obj/machinery/camera{ + c_tag = "Toxins Lab West"; + network = list("ss13","rd") + }, +/turf/open/floor/plasteel, +/area/science/mixing) "beG" = ( /obj/structure/sign/departments/medbay/alt, /turf/closed/wall, @@ -34928,6 +35951,146 @@ }, /turf/closed/wall/r_wall, /area/science/robotics/lab) +"beR" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/camera{ + c_tag = "Research Director's Office"; + dir = 1; + network = list("ss13","rd") + }, +/obj/item/radio/intercom{ + name = "Station Intercom"; + pixel_y = -26 + }, +/turf/open/floor/plasteel{ + icon_state = "sepia" + }, +/area/crew_quarters/heads/hor) +"beS" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "1-8" + }, +/obj/machinery/requests_console{ + announcementConsole = 1; + department = "Research Director's Desk"; + departmentType = 5; + name = "Research Director RC"; + pixel_x = 0; + pixel_y = -32; + receive_ore_updates = 1 + }, +/turf/open/floor/plasteel{ + icon_state = "sepia" + }, +/area/crew_quarters/heads/hor) +"beT" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/science/mixing) +"beU" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/science/mixing) +"beV" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/closet/bombcloset, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/science/mixing) +"beW" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/science/mixing) +"beX" = ( +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple, +/turf/open/floor/plasteel, +/area/science/mixing) +"beY" = ( +/obj/structure/sign/warning/nosmoking/circle, +/turf/closed/wall/r_wall, +/area/crew_quarters/heads/hor) +"beZ" = ( +/obj/machinery/light_switch{ + pixel_x = -24 + }, +/turf/open/floor/plasteel, +/area/science/mixing) +"bfa" = ( +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/science/mixing) +"bfb" = ( +/obj/machinery/portable_atmospherics/scrubber, +/obj/item/storage/firstaid/toxin, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/science/mixing) +"bfc" = ( +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/science/mixing) +"bfd" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/science/mixing) "bfe" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/airalarm/unlocked{ @@ -34967,6 +36130,37 @@ /obj/effect/turf_decal/tile/purple, /turf/open/floor/plasteel, /area/hallway/primary/aft) +"bfh" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/science/mixing) +"bfi" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/structure/cable/white{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel, +/area/science/mixing) +"bfj" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/science/mixing) +"bfk" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel, +/area/science/mixing) "bfl" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -35031,6 +36225,15 @@ }, /turf/open/floor/plating, /area/maintenance/starboard) +"bfq" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/science/mixing) "bfr" = ( /obj/structure/cable/white{ icon_state = "1-8" @@ -35043,6 +36246,32 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"bfs" = ( +/obj/machinery/vending/wardrobe/science_wardrobe, +/obj/machinery/light, +/turf/open/floor/plasteel, +/area/science/mixing) +"bft" = ( +/obj/structure/closet/secure_closet/RD, +/obj/machinery/light, +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/item/circuitboard/aicore, +/turf/open/floor/plasteel{ + icon_state = "sepia" + }, +/area/crew_quarters/heads/hor) "bfu" = ( /turf/closed/wall, /area/chapel/main) @@ -35061,6 +36290,27 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/plasteel/white, /area/chapel/main) +"bfw" = ( +/obj/machinery/suit_storage_unit/rd, +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/computer/security/telescreen/rd{ + dir = 1; + icon_state = "telescreen"; + pixel_y = -28 + }, +/turf/open/floor/plasteel{ + icon_state = "sepia" + }, +/area/crew_quarters/heads/hor) "bfx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 @@ -35073,16 +36323,148 @@ }, /turf/closed/wall, /area/chapel/main) +"bfz" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/science/mixing) "bfA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /turf/closed/wall, /area/chapel/main) +"bfB" = ( +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/science/mixing) "bfC" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/closed/wall/rust, /area/chapel/main) +"bfD" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "0-8" + }, +/obj/structure/table/wood, +/obj/item/storage/box/bodybags{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/box/bodybags, +/obj/machinery/power/apc{ + areastring = "/area/medical/morgue"; + dir = 4; + name = "Morgue APC"; + pixel_x = 26 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Morgue"; + dir = 8; + network = list("ss13","medbay") + }, +/turf/open/floor/plasteel/dark, +/area/medical/morgue) +"bfE" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/item/clothing/gloves/color/latex, +/obj/item/surgical_drapes, +/obj/item/cautery, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/item/toy/figure/roboticist{ + pixel_x = -4; + pixel_y = 14 + }, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) +"bfF" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Surgery Operating"; + dir = 1; + network = list("ss13","medbay"); + pixel_x = 22 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/medical/medbay/zone3) +"bfG" = ( +/obj/structure/closet/crate/freezer/blood, +/obj/structure/extinguisher_cabinet{ + pixel_y = -26 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/camera{ + c_tag = "Medbay Recovery Room"; + dir = 8; + network = list("ss13","medbay") + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/medical/medbay/zone3) +"bfH" = ( +/obj/effect/landmark/start/virologist, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/power/apc/highcap/five_k{ + areastring = "/area/medical/virology"; + dir = 1; + name = "Virology APC"; + pixel_y = 24 + }, +/obj/structure/cable/white{ + icon_state = "0-4" + }, +/obj/machinery/camera{ + c_tag = "Virology"; + network = list("ss13","medbay") + }, +/turf/open/floor/plasteel, +/area/medical/virology) "bfI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable/white{ @@ -35160,6 +36542,36 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) +"bfM" = ( +/obj/machinery/shower{ + desc = "From what you understand it was put in rather recently, but the design looks right out of the 2510's. Weird."; + dir = 1; + icon_state = "shower"; + name = "Emergency Shower" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/camera{ + c_tag = "Virology Access"; + dir = 1; + network = list("ss13","medbay") + }, +/turf/open/floor/plasteel/white, +/area/medical/virology) +"bfN" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/camera{ + c_tag = "Xenobiology North"; + dir = 4; + network = list("ss13","rd"); + pixel_y = -5 + }, +/turf/open/floor/plasteel, +/area/science/xenobiology) "bfO" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 @@ -35365,6 +36777,48 @@ }, /turf/open/floor/plasteel/dark, /area/chapel/main) +"bgc" = ( +/obj/machinery/shower{ + dir = 4; + name = "emergency shower" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/end{ + dir = 8 + }, +/obj/machinery/camera{ + c_tag = "Xenobiology Central"; + dir = 4; + network = list("ss13","rd"); + pixel_y = -5 + }, +/turf/open/floor/plasteel, +/area/science/xenobiology) +"bgd" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/beakers{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/box/syringes, +/obj/item/extinguisher/mini, +/obj/machinery/airalarm/unlocked{ + dir = 4; + pixel_x = -23 + }, +/obj/machinery/newscaster{ + pixel_y = -32 + }, +/obj/machinery/camera{ + c_tag = "Xenobiology Lab"; + dir = 4; + network = list("ss13","rd") + }, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/science/xenobiology) "bge" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 @@ -35399,6 +36853,88 @@ heat_capacity = 1e+006 }, /area/hallway/primary/aft) +"bgg" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/monkeycubes, +/obj/item/storage/box/monkeycubes, +/obj/machinery/status_display{ + pixel_y = -32 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/camera{ + c_tag = "Xenobiology South"; + dir = 1; + network = list("ss13","rd") + }, +/turf/open/floor/plasteel, +/area/science/xenobiology) +"bgh" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -26 + }, +/obj/machinery/camera{ + c_tag = "Atmospherics South West"; + dir = 1; + network = list("ss13","engine") + }, +/turf/open/floor/plasteel, +/area/engine/atmos) +"bgi" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 4; + name = "Air to External Air Ports" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/camera{ + c_tag = "Atmospherics South East"; + dir = 1; + network = list("ss13","engine") + }, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/engine/atmos) +"bgj" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/airlock_sensor{ + id_tag = "incinerator_airlock_sensor"; + master_tag = "incinerator_airlock_control"; + pixel_y = 24 + }, +/obj/machinery/camera/autoname{ + network = list("ss13","engine") + }, +/turf/open/floor/engine, +/area/maintenance/disposal/incinerator) +"bgk" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/light/small, +/obj/machinery/camera{ + c_tag = "Port Quarter Solar"; + dir = 1; + network = list("ss13","engine") + }, +/turf/open/floor/plating, +/area/maintenance/solars/port/aft) "bgl" = ( /obj/machinery/vending/cola/random, /obj/machinery/newscaster{ @@ -35426,6 +36962,20 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"bgn" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 24 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/machinery/camera{ + c_tag = "Research Division South"; + dir = 8; + network = list("ss13","rd") + }, +/obj/machinery/vending/wardrobe/science_wardrobe, +/obj/effect/turf_decal/tile/purple, +/turf/open/floor/plasteel/white, +/area/science/research) "bgo" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable/white{ @@ -36708,22 +38258,6 @@ }, /turf/open/floor/plasteel/dark, /area/hallway/secondary/entry) -"biC" = ( -/obj/machinery/shower{ - dir = 4; - name = "emergency shower" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/stripes/end{ - dir = 8 - }, -/obj/machinery/camera{ - c_tag = "Xenobiology Central"; - dir = 4; - pixel_y = -5 - }, -/turf/open/floor/plasteel, -/area/science/xenobiology) "biD" = ( /obj/machinery/shower{ dir = 8; @@ -37394,46 +38928,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) -"bjP" = ( -/obj/structure/table/reinforced, -/obj/item/storage/box/beakers{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/box/syringes, -/obj/item/extinguisher/mini, -/obj/machinery/airalarm/unlocked{ - dir = 4; - pixel_x = -23 - }, -/obj/machinery/newscaster{ - pixel_y = -32 - }, -/obj/machinery/camera{ - c_tag = "Xenobiology Lab"; - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/plasteel, -/area/science/xenobiology) -"bjQ" = ( -/obj/structure/table/reinforced, -/obj/item/storage/box/monkeycubes, -/obj/item/storage/box/monkeycubes, -/obj/machinery/status_display{ - pixel_y = -32 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/camera{ - c_tag = "Xenobiology South"; - dir = 1 - }, -/turf/open/floor/plasteel, -/area/science/xenobiology) "bjR" = ( /obj/machinery/computer/camera_advanced/xenobio{ dir = 1 @@ -37842,22 +39336,6 @@ /obj/machinery/telecomms/broadcaster/preset_left/birdstation, /turf/open/floor/circuit/telecomms/mainframe, /area/tcommsat/server) -"blr" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/machinery/camera{ - c_tag = "Research Division North" - }, -/obj/effect/landmark/event_spawn, -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/turf/open/floor/plasteel/white, -/area/science/research) "bls" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -37879,27 +39357,6 @@ heat_capacity = 1e+006 }, /area/hallway/primary/aft) -"blt" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/machinery/camera{ - c_tag = "Surgery Operating"; - dir = 1; - pixel_x = 22 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/medical/medbay/zone3) "blv" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -38713,26 +40170,6 @@ }, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) -"buU" = ( -/obj/machinery/camera{ - c_tag = "Communications Relay"; - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark/telecomms, -/area/tcommsat/server) "buW" = ( /turf/closed/wall/r_wall, /area/engine/supermatter) @@ -39147,9 +40584,6 @@ heat_capacity = 1e+006 }, /area/hallway/secondary/entry) -"bxZ" = ( -/turf/closed/wall, -/area/maintenance/starboard/fore) "bye" = ( /turf/closed/wall/rust, /area/maintenance/fore) @@ -39204,14 +40638,6 @@ dir = 1 }, /area/engine/atmos) -"bNB" = ( -/obj/machinery/portable_atmospherics/pump, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, -/area/science/mixing) "bOJ" = ( /obj/machinery/camera{ c_tag = "Toxins Launch Room Access"; @@ -39225,15 +40651,6 @@ }, /turf/open/floor/plasteel, /area/science/mixing) -"bWO" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 4 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel, -/area/science/mixing) "bYE" = ( /obj/structure/sign/warning/fire, /obj/machinery/atmospherics/pipe/simple/general/visible{ @@ -39372,19 +40789,6 @@ }, /turf/open/floor/engine/vacuum, /area/maintenance/disposal/incinerator) -"cGz" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -26 - }, -/obj/machinery/camera{ - c_tag = "Atmospherics South West"; - dir = 1 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) "cRz" = ( /obj/machinery/button/door{ id = "supplybridge"; @@ -39593,18 +40997,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/engine/atmos) -"edA" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/door/airlock/external{ - name = "External Airlock"; - req_access_txt = "13" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/maintenance/starboard/fore) "eew" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ @@ -39736,18 +41128,6 @@ }, /turf/open/floor/plasteel/dark, /area/engine/atmos) -"eFp" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/camera{ - c_tag = "Xenobiology North"; - dir = 4; - pixel_y = -5 - }, -/turf/open/floor/plasteel, -/area/science/xenobiology) "eGm" = ( /turf/closed/wall/r_wall, /area/science/storage) @@ -40199,12 +41579,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"hns" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/closed/wall/rust, -/area/science/mixing) "hpr" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=3.2-AtriumSW"; @@ -40510,14 +41884,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/visible, /turf/open/floor/plasteel, /area/engine/atmos) -"iXB" = ( -/obj/structure/closet/bombcloset, -/obj/machinery/light_switch{ - pixel_y = 28 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, -/area/science/mixing) "iZQ" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/carbon_input, /turf/open/floor/engine/co2, @@ -40723,13 +42089,6 @@ }, /turf/open/floor/plasteel, /area/science/mixing) -"jLT" = ( -/obj/machinery/portable_atmospherics/scrubber, -/obj/item/storage/firstaid/toxin, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel, -/area/science/mixing) "jRe" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -40888,10 +42247,6 @@ /obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/plating, /area/science/storage) -"lmr" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel, -/area/science/mixing) "low" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 @@ -40963,26 +42318,6 @@ }, /turf/open/floor/plasteel, /area/science/mixing) -"lAs" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/radio/intercom{ - name = "Station Intercom"; - pixel_y = 24 - }, -/obj/machinery/camera{ - c_tag = "Atmospherics North West"; - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/turf/open/floor/plasteel/dark/corner{ - dir = 1 - }, -/area/engine/atmos) "lCg" = ( /obj/machinery/door/airlock/external{ name = "Supply Dock Airlock"; @@ -41082,13 +42417,6 @@ "meo" = ( /turf/closed/wall/r_wall/rust, /area/science/mixing) -"mfj" = ( -/obj/machinery/holopad, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/science/mixing) "mgs" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/air_input{ dir = 1 @@ -41492,15 +42820,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel, /area/hallway/primary/starboard) -"oRo" = ( -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/science/mixing) "pbT" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 @@ -41699,10 +43018,6 @@ }, /turf/closed/wall/r_wall, /area/engine/atmos) -"pXH" = ( -/obj/machinery/vending/wardrobe/science_wardrobe, -/turf/open/floor/plasteel, -/area/science/mixing) "pZU" = ( /obj/structure/lattice, /obj/structure/grille, @@ -41877,23 +43192,6 @@ /obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/plasteel, /area/engine/atmos) -"rjV" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/airlock_sensor{ - id_tag = "incinerator_airlock_sensor"; - master_tag = "incinerator_airlock_control"; - pixel_y = 24 - }, -/obj/machinery/camera/autoname, -/turf/open/floor/engine, -/area/maintenance/disposal/incinerator) "rlq" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -41906,13 +43204,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) -"rpy" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 - }, -/obj/structure/sign/warning/nosmoking/circle, -/turf/closed/wall, -/area/science/mixing) "rzn" = ( /obj/machinery/status_display, /turf/closed/wall, @@ -41992,18 +43283,6 @@ /mob/living/simple_animal/opossum, /turf/open/floor/plating, /area/maintenance/starboard) -"scn" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/science/mixing) "sdL" = ( /obj/effect/turf_decal/delivery, /obj/machinery/hydroponics/soil, @@ -44838,12 +46117,6 @@ "tin" = ( /turf/open/floor/engine/vacuum, /area/science/mixing) -"tms" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/closed/wall, -/area/maintenance/starboard/aft) "ttp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/white{ @@ -45023,29 +46296,6 @@ }, /turf/closed/wall/r_wall, /area/engine/atmos) -"uoy" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/components/binary/pump{ - name = "Plasma to Pure" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/camera{ - c_tag = "Atmospherics North" - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/engine/atmos) "upN" = ( /obj/machinery/door/airlock/research{ name = "Toxins Launch Room"; @@ -45776,14 +47026,6 @@ /obj/structure/grille, /turf/closed/wall/r_wall, /area/engine/atmos) -"xLe" = ( -/obj/structure/closet/bombcloset, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, -/area/science/mixing) "xPz" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 9 @@ -70444,22 +71686,22 @@ jFP jFP jFP jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa jFP jFP jFP @@ -70701,22 +71943,22 @@ jFP jFP jFP jFP -jFP -jFP -jFP -uXD -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP +aaa +aaa +aaa +aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa jFP jFP jFP @@ -70959,19 +72201,19 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +pZU +sdX +pZU +pZU +pZU +sdX +aLL +sdX +pZU +pZU +pZU +sdX +pZU aaa aaa jFP @@ -71216,19 +72458,19 @@ aaa aaa aaa aaa +pZU aaa aaa aaa aaa aaa +aMH aaa aaa aaa aaa aaa -aaa -aaa -aaa +pZU aaa aaa jFP @@ -71473,19 +72715,19 @@ aaa aaa aaa aaa +pZU aaa +aKr +aKr +aKr +aKr +aMI +aKr +aKr +aKr +aKr aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +pZU aaa aaa jFP @@ -71730,19 +72972,19 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +sdX +sdX +aKB +aLz +aLz +aLz +aMQ +bar +bar +bar +bbS +sdX +sdX aaa aaa jFP @@ -71987,19 +73229,19 @@ aaa aaa aaa aaa +pZU aaa +aKF +aKF +aKF +aKF +aMH +aKF +aKF +aKF +aKF aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +pZU aaa aaa jFP @@ -72225,7 +73467,7 @@ aad aad aad gdA -rjV +bgj fsJ eyu uvg @@ -72244,19 +73486,19 @@ aaa aaa aaa aaa +pZU aaa aaa aaa aaa aaa +aOc aaa aaa aaa aaa aaa -aaa -aaa -aaa +pZU aaa aaa jFP @@ -72501,19 +73743,19 @@ aaa aaa aaa aaa +pZU aaa +aKr +aKr +aKr +aKr +aMI +aKr +aKr +aKr +aKr aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +pZU aaa aaa jFP @@ -72758,19 +74000,19 @@ aac aac aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +pZU +sdX +aKB +aLz +aLz +aLz +aOH +bar +bar +bar +bbS +sdX +sdX aaa aaa jFP @@ -72988,7 +74230,7 @@ aad aad aad aqz -lAs +aCF qTa oJp hUG @@ -73015,19 +74257,19 @@ aad aac aac aac +sdX aaa +aKF +aKF +aKF +aKF +aMH +aKF +aKF +aKF +aKF aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +pZU aaa aaa jFP @@ -73255,7 +74497,7 @@ bGL vuN jkl eew -cGz +bgh qUW aqz aqz @@ -73272,19 +74514,19 @@ aad aad aad aad -aac -aac -aaa +aKo aaa aaa aaa aaa aaa +aZS aaa aaa aaa aaa aaa +pZU aaa aaa jFP @@ -73529,19 +74771,19 @@ aad aad aad aad -aad +adx aad aac aad aad aad -bvg +aZT aac aaa aaa aaa aaa -aaa +pZU aaa aaa jFP @@ -73791,14 +75033,14 @@ aad aad aad aad -aKm -aKo -aKm -aKm -aaa -aaa -aaa -aaa +aLC +bae +aLC +aLC +sdX +sdX +sdX +sdX aaa aaa aaa @@ -74049,13 +75291,13 @@ aMJ aMJ sJV aMJ -aKr -aLz -aKm -aaa +baj +bas +aLC aaa aaa aaa +pZU aaa aaa aaa @@ -74306,13 +75548,13 @@ buJ buO sKn aMJ -aKB -aLs -aKm -aac -aaa -aaa +bak +bat +aLC +aLC +aLC aaa +pZU aaa aaa aaa @@ -74547,7 +75789,7 @@ anv anK aoo aGe -aJk +aJe aKt aLH aMK @@ -74563,13 +75805,13 @@ buK sKj buR aMJ -aKF -aqo -aad -aac -aaa -aaa +bal +bau +bbf +bbo +aLC aaa +pZU aaa aaa aaa @@ -74820,13 +76062,13 @@ buL buP buS aMJ -aKJ -aKm -aad -aad -aaa -aaa -aaa +bam +bav +bdC +bgk +aLC +sdX +sdX aaa aaa aaa @@ -75077,13 +76319,13 @@ buK sKj buR aMJ -aKJ -aKm -aad -aad -aaa -aaa +ban +baE +bbh +bdG +aLC aaa +pZU aaa aaa aaa @@ -75300,7 +76542,7 @@ pNE oOk xej oaV -uoy +asH lqz fFw auq @@ -75332,15 +76574,15 @@ aTZ blq buN buQ -buU +aYp sJV -aKJ -aqo -aad -aaa -aaa -aaa +bao +bau +bbi +bbR +aLC aaa +pZU aaa aaa aaa @@ -75591,13 +76833,13 @@ sJV aMJ aMJ sJV -aKJ -aqo -aLs -aac -aaa -aaa +bap +bau +bat +aLC +aLC aaa +pZU aaa aaa aaa @@ -75848,13 +77090,13 @@ aad bvo aad aKm -aLp -aLB +baq +bbb aKm aac aac aac -aac +aKo aaa aaa aaa @@ -76106,12 +77348,12 @@ aUQ aXc aKm aqo -aLC +bbc aLv aac aac aac -aad +adx aad aaa aaa @@ -76363,7 +77605,7 @@ aUR aUQ bvo aLs -aKJ +bbd aKm aac aad @@ -76620,7 +77862,7 @@ aWz aVL bvo aqo -aLL +bbe aKm aad aad @@ -76877,7 +78119,7 @@ aWz aUQ bvg aKm -aKJ +bbd aKm aKm aad @@ -77134,7 +78376,7 @@ aWz aVL bvg aLv -aKJ +bbd aME aKm aad @@ -77391,7 +78633,7 @@ aUU aUQ bvg aKm -aKJ +bbd aMF aKm aac @@ -77648,7 +78890,7 @@ aWz aVL bvg aKm -aKJ +bbd aMG aKm aKm @@ -77905,8 +79147,8 @@ aWz aUQ bvo aKm -aLp -aLB +baq +bbb aOI aPQ aPQ @@ -78128,7 +79370,7 @@ asA asD sAx arA -asH +bdv atI auB avG @@ -78163,7 +79405,7 @@ aVL bvo aqo aKm -aMH +bbj axU aKm aMG @@ -78420,7 +79662,7 @@ aUQ aad aLs aLX -aMI +bbk aOL aPR aQV @@ -78677,7 +79919,7 @@ aVL aad aqo aMv -aMQ +bbl aOM aPS aRc @@ -78909,10 +80151,10 @@ ayl azr aAt aBB -aCF +bgi aDu aEz -aFB +aVz aGo aHu aIr @@ -78934,7 +80176,7 @@ bvo bvo aqo aMw -aMI +bbk aON aPT aRd @@ -78943,7 +80185,7 @@ aUm aKm aVH aRe -aTn +bfH aWL aZB aTv @@ -79191,7 +80433,7 @@ axX aEg aEg aMD -aOc +bbm aOS aPU aRj @@ -79448,7 +80690,7 @@ aFM aFM aKl aFM -aOH +bbn aOT aPV uXV @@ -79715,7 +80957,7 @@ aKm aSQ aKV aWJ -aYB +bfM aKV aYA aZJ @@ -80459,7 +81701,7 @@ aGt aHz aIw aJF -aKM +aJk aMa aNe aEt @@ -81502,7 +82744,7 @@ aVT aVQ aXg ajG -aGY +bdW aOl aOQ aCy @@ -82017,7 +83259,7 @@ aVQ aXk ajG aOZ -aQe +bey aOK aCy aPE @@ -82774,7 +84016,7 @@ aIC aJK aKR aMg -aNl +aKM aID aOU aQc @@ -82792,7 +84034,7 @@ aNS aPz aPB aPH -aQE +bfD aQL aRb aVc @@ -83037,13 +84279,13 @@ aEh aFh aGf aHG -aJe +aNl aJo aLo aLu aMl aOW -aOX +bdH aGZ aOE aPv @@ -83555,7 +84797,7 @@ aJg aJA aLr aLA -aNO +aQe ail aXQ aYI @@ -83821,7 +85063,7 @@ baw aSh bcf bcW -blt +bfF ooX avB bfA @@ -84066,11 +85308,11 @@ bxQ sJJ ail aGF -aJO +aGY aNL aNo aNP -aXm +aWm aXS aYK aZG @@ -85106,7 +86348,7 @@ baB bbr bci bcZ -bdW +bfG aSh atE bfA @@ -89214,7 +90456,7 @@ aXy aYi aZb aZU -baN +beC bbC bct bdl @@ -89722,7 +90964,7 @@ aSw aTI aUC aVv -aWm +aOX aWV aXA aYk @@ -90261,7 +91503,7 @@ nTi jdD bhb bhO -bjP +bgd bfP aad aad @@ -90495,7 +91737,7 @@ aSz aTL aWp aWW -blr +aXm aYn aZf aZY @@ -90510,15 +91752,15 @@ bfQ bgq bhc bhP -eFp +bfN bhP pLb bhP -biC +bgc bhP bjq bjD -bjQ +bgg bfP aad aad @@ -90952,9 +92194,9 @@ sOk aae aae aaf -aaa -aaa -aaa +sdX +sdX +sdX aae aad abs @@ -91006,11 +92248,11 @@ aRv aSB aTN aUG -aVz +aNO aWr aWX aXE -aYp +bgn aZh baa baU @@ -91208,12 +92450,12 @@ aad aad aaa aaa -aae -aaa -aaa -bxZ -abL -bxZ +bbT +bbT +bbT +bbT +bcF +bbT swz abs abs @@ -91464,17 +92706,17 @@ sMq aad aad aaa -aaa -aae -aad -aac -edA -abM -acu -adt -adM -aef adm +bbT +bbX +bbZ +bcc +bcG +bcM +bcT +bym +bdi +bdF bxw bym afB @@ -91722,13 +92964,13 @@ aad aad aaa aad -aah -aad -aad -bxZ -bxZ -adq -bxZ +bbU +bbT +bca +bbT +bcH +bcN +bbT adY aei adn @@ -91787,7 +93029,7 @@ bad baX bbL bcA -bdv +bfE beo aZl sPK @@ -91980,11 +93222,11 @@ aac aaa aad aad -aad -aad -aad -bxZ -bxZ +bbT +bcb +bbT +bcI +bcO adu adu aej @@ -92237,11 +93479,11 @@ aac aaa aaa aad -aac -aac -aad -aad -aad +bbY +bdB +bbT +aFB +bcP ady adZ aek @@ -92489,16 +93731,16 @@ sMq sMr sMr aad +adx +sdX +sdX +bbW +bcQ +adq aad -aaa -aaa -aaa -aaa -aaa -aad -aad -aad -aad +bbT +bcK +bdE adu aea aen @@ -92746,16 +93988,16 @@ aad aad aad aad -aac +aKo +aaa +aaa +aef aaa aaa aaa -aaa -aaa -aaa -aad -aad -aad +bbT +bcL +bcR adu aeb aeP @@ -93000,19 +94242,19 @@ aad aad aac aac -aad +adx aaa aaa +sdX aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aac -aac +adq +sdX +sdX +sdX +bbT +bbT +bbU adu adu adu @@ -93257,19 +94499,19 @@ aad aac aac aaa +sdX +aaa +aaa +sdX +aaa +aaa +adq aaa aaa aaa +sdX aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aac +bcS aad aad aad @@ -93322,8 +94564,8 @@ auu avz avF abv -sON -tms +hXc +orV hXc abP jLF @@ -93514,19 +94756,19 @@ aad aaa aaa aaa +pZU aaa +abL +abL +abL +abL +adt +abL +abL +abL +abL aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aac +aKo aac aad aad @@ -93579,8 +94821,8 @@ aux avA avH abv -aad -orV +beA +beV iio tPn wOe @@ -93771,19 +95013,19 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +pZU +sdX +abM +bbQ +bbQ +bbQ +adM +bbV +bbV +bbV +bcD +sdX +pZU aaa aaa aac @@ -93836,9 +95078,9 @@ atF atF atF swG -aad -hns -iXB +beF +beW +beZ hVE sPq hVE @@ -94028,19 +95270,19 @@ aaa aaa aaa aaa +pZU aaa +acu +acu +acu +acu +aef +acu +acu +acu +acu aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +pZU aaa aaa aaa @@ -94092,14 +95334,14 @@ aaa aaa aaa aad -aad -aad -hns -xLe +iio +beB +beX +bfa +bfc +bfi hVE -ajP -hVE -pXH +bfs sVt vCu tin @@ -94285,19 +95527,19 @@ aaa aaa aaa aaa +pZU aaa aaa aaa aaa aaa +bbg aaa aaa aaa aaa aaa -aaa -aaa -aaa +pZU aaa aaa aaa @@ -94347,13 +95589,13 @@ aaa aaa aaa aaa -aac aad -aad -aad -orV +ajP +ajP +aYB +ajP nMh -hVE +beW sPq wPr jIk @@ -94542,19 +95784,19 @@ aaa aaa aaa aaa +sdX aaa +abL +abL +abL +abL +adt +abL +abL +abL +abL aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +sdX aaa aaa aaa @@ -94604,14 +95846,14 @@ aaa aaa aaa aaa -aac -aac aad -aad -orV +ajP +aQE +bex +ajP pdX -hVE -bWO +bfd +bfj oKp dXv sVt @@ -94796,23 +96038,23 @@ jFP jFP jFP jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP aaa aaa aaa +pZU +sdX +abM +bbQ +bbQ +bbQ +adM +bbV +bbV +bbV +bcD +sdX +pZU +aaa aaa aaa aaa @@ -94860,15 +96102,15 @@ aaf aaa aaa aaa -aaa aac aad -aad -aad -rpy -jLT -lmr -oRo +ajP +bdP +bez +beY +bfb +bfh +bfk pAN nTg gcw @@ -95053,23 +96295,23 @@ jFP jFP jFP jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP aaa aaa aaa +pZU +aaa +acu +acu +acu +acu +aef +acu +acu +acu +acu +aaa +pZU +aaa aaa aaa aaa @@ -95117,15 +96359,15 @@ aaf aaa aaa aaa -aaa -aac aad aad -aad -sVt -bNB -hVE -sPq +ajP +aTn +beD +bdO +beu +mvB +beT hVE lzC sVt @@ -95310,23 +96552,23 @@ jFP jFP jFP jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP aaa aaa aaa +pZU +aaa +aaa +aaa +aaa +aaa +adt +aaa +aaa +aaa +aaa +aaa +pZU +aaa aaa aaa aaa @@ -95374,15 +96616,15 @@ aaf aaa aaa aaa -aaa -aac aad -aad -aad -sVt +ajP +ajP +bev +beR +ajP jXX wwT -sPq +beU tFk hVE lzG @@ -95567,23 +96809,23 @@ jFP jFP jFP jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP aaa aaa aaa +sdX +sdX +pZU +pZU +pZU +sdX +bcJ +sdX +pZU +pZU +pZU +sdX +sdX +aaa aaa aaa aaa @@ -95631,16 +96873,16 @@ aaa aaa aaa aaa -aaa -aac -aad -aad -aad -meo +ajP +ajP +bdD +bdL +beS +ajP xiZ wvy -sPq -mfj +bfz +bfB mvB mvB kqH @@ -95824,20 +97066,20 @@ jFP jFP jFP jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -95888,12 +97130,12 @@ aaa aaa aaa aaa -aaa -aac -aac -aad -aad -sVt +aJO +baN +bdI +bdM +bft +ajP mhf kCG ybw @@ -96081,20 +97323,20 @@ jFP jFP jFP jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -96145,12 +97387,12 @@ aaf aaa aaa aaa -aaa -aac -aac -aad -aad -sVt +aJO +bbP +bdJ +bdN +bfw +ajP sVt sVt sVt @@ -96338,20 +97580,20 @@ jFP jFP jFP jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -96402,16 +97644,16 @@ aaf aaa aaa aaa -aaa -aaa -aad -aad -eGm -eGm +aJO +aJO +bdK +bew +ajP +ajP eGm meo uiT -scn +bfq bpj iio aad @@ -96595,20 +97837,20 @@ jFP jFP jFP jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -96660,10 +97902,10 @@ aaa aaa aaa aaa -aaa -aad -aad -leU +aJO +aJO +aJO +ajP dfK dfK sVt @@ -96852,20 +98094,20 @@ jFP jFP jFP jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP -jFP +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa diff --git a/_maps/shuttles/emergency_arena.dmm b/_maps/shuttles/emergency_arena.dmm index 1314b8a732..2ba9206830 100644 --- a/_maps/shuttles/emergency_arena.dmm +++ b/_maps/shuttles/emergency_arena.dmm @@ -43,7 +43,7 @@ }, /area/shuttle/escape/arena) "l" = ( -/obj/structure/closet/crate/necropolis/tendril, +/obj/structure/closet/crate/necropolis/tendril/magic, /turf/open/indestructible/necropolis/air, /area/shuttle/escape/arena) "m" = ( @@ -65,10 +65,18 @@ /obj/structure/healingfountain, /turf/open/indestructible/necropolis/air, /area/shuttle/escape/arena) +"t" = ( +/obj/structure/closet/crate/necropolis/tendril/misc, +/turf/open/indestructible/necropolis/air, +/area/shuttle/escape/arena) "z" = ( /obj/effect/landmark/shuttle_arena_safe, /turf/open/indestructible/necropolis/air, /area/shuttle/escape/arena) +"H" = ( +/obj/structure/closet/crate/necropolis/tendril/weapon_armor, +/turf/open/indestructible/necropolis/air, +/area/shuttle/escape/arena) (1,1,1) = {" a @@ -264,16 +272,16 @@ m l j m -l +H j k -l +H j m -l +t j m -j +t j p g @@ -524,16 +532,16 @@ m l j m -l +H j m -l +H j m -l +t j m -j +t j p g diff --git a/byond-extools.dll b/byond-extools.dll index bd6b34c48e..ea5491a741 100644 Binary files a/byond-extools.dll and b/byond-extools.dll differ diff --git a/code/__DEFINES/_extools.dm b/code/__DEFINES/_extools.dm new file mode 100644 index 0000000000..4513243aae --- /dev/null +++ b/code/__DEFINES/_extools.dm @@ -0,0 +1 @@ +#define EXTOOLS (world.system_type == MS_WINDOWS ? "byond-extools.dll" : "libbyond-extools.so") diff --git a/code/__DEFINES/admin/keybindings.dm b/code/__DEFINES/admin/keybindings.dm index fcfe7c5e58..e8616fd3ce 100644 --- a/code/__DEFINES/admin/keybindings.dm +++ b/code/__DEFINES/admin/keybindings.dm @@ -1,6 +1,6 @@ // Defines for managed input/keybinding system. /// Max length of a keypress command before it's considered to be a forged packet/bogus command -#define MAX_KEYPRESS_COMMANDLENGTH 32 +#define MAX_KEYPRESS_COMMANDLENGTH 64 /// Maximum keys that can be bound to one button #define MAX_COMMANDS_PER_KEY 5 /// Maximum keys per keybind diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm index 621af2c811..dad2a38afd 100644 --- a/code/__DEFINES/atmospherics.dm +++ b/code/__DEFINES/atmospherics.dm @@ -281,8 +281,6 @@ GLOBAL_LIST_INIT(atmos_adjacent_savings, list(0,0)) #define CALCULATE_ADJACENT_TURFS(T) SSadjacent_air.queue[T] = 1 #endif -#define EXTOOLS (world.system_type == MS_WINDOWS ? "byond-extools.dll" : "libbyond-extools.so") - GLOBAL_VAR(atmos_extools_initialized) // this must be an uninitialized (null) one or init_monstermos will be called twice because reasons #define ATMOS_EXTOOLS_CHECK if(!GLOB.atmos_extools_initialized){\ GLOB.atmos_extools_initialized=TRUE;\ diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 80ea5ebd11..02e3fe6f3d 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -43,6 +43,8 @@ // /atom signals //from base of atom/proc/Initialize(): sent any time a new atom is created #define COMSIG_ATOM_CREATED "atom_created" +//from SSatoms InitAtom - Only if the atom was not deleted or failed initialization +#define COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZE "atom_init_success" #define COMSIG_PARENT_ATTACKBY "atom_attackby" //from base of atom/attackby(): (/obj/item, /mob/living, params) #define COMPONENT_NO_AFTERATTACK 1 //Return this in response if you don't want afterattack to be called #define COMSIG_ATOM_HULK_ATTACK "hulk_attack" //from base of atom/attack_hulk(): (/mob/living/carbon/human) @@ -290,6 +292,10 @@ #define COMPONENT_INTERRUPT_LIFE_BIOLOGICAL 1 // interrupt biological processes #define COMPONENT_INTERRUPT_LIFE_PHYSICAL 2 // interrupt physical handling +#define COMSIG_LIVING_BIOLOGICAL_LIFE "biological_life" //from base of mob/living/BiologicalLife() (seconds, times_fired) + +#define COMSIG_LIVING_PHYSICAL_LIFE "physical_life" //from base of mob/living/PhysicalLife() (seconds, times_fired) + // /mob/living/carbon physiology signals #define COMSIG_CARBON_GAIN_WOUND "carbon_gain_wound" //from /datum/wound/proc/apply_wound() (/mob/living/carbon/C, /datum/wound/W, /obj/item/bodypart/L) #define COMSIG_CARBON_LOSE_WOUND "carbon_lose_wound" //from /datum/wound/proc/remove_wound() (/mob/living/carbon/C, /datum/wound/W, /obj/item/bodypart/L) diff --git a/code/__DEFINES/food.dm b/code/__DEFINES/food.dm index 77e8d82aca..03110ad04e 100644 --- a/code/__DEFINES/food.dm +++ b/code/__DEFINES/food.dm @@ -12,6 +12,7 @@ #define TOXIC (1<<11) #define PINEAPPLE (1<<12) #define BREAKFAST (1<<13) +#define ANTITOXIC (1<<14) #define DRINK_NICE 1 #define DRINK_GOOD 2 diff --git a/code/__DEFINES/loadout.dm b/code/__DEFINES/loadout.dm index 94059c0880..767894050d 100644 --- a/code/__DEFINES/loadout.dm +++ b/code/__DEFINES/loadout.dm @@ -54,3 +54,16 @@ //donator items #define LOADOUT_CATEGORY_DONATOR "Donator" + +//how many prosthetics can we have +#define MAXIMUM_LOADOUT_PROSTHETICS 2 + +//what limbs can be amputated or be prosthetic +#define LOADOUT_ALLOWED_LIMB_TARGETS list(BODY_ZONE_L_ARM,BODY_ZONE_R_ARM,BODY_ZONE_L_LEG,BODY_ZONE_R_LEG) + +//options for modifiying limbs +#define LOADOUT_LIMB_NORMAL "Normal" +#define LOADOUT_LIMB_PROSTHETIC "Prosthetic" +#define LOADOUT_LIMB_AMPUTATED "Amputated" + +#define LOADOUT_LIMBS list(LOADOUT_LIMB_NORMAL,LOADOUT_LIMB_PROSTHETIC,LOADOUT_LIMB_AMPUTATED) //you can amputate your legs/arms though \ No newline at end of file diff --git a/code/__DEFINES/research/anomalies.dm b/code/__DEFINES/research/anomalies.dm new file mode 100644 index 0000000000..35d99a982d --- /dev/null +++ b/code/__DEFINES/research/anomalies.dm @@ -0,0 +1,21 @@ +// Anomaly core types +/// Bluespace cores +#define ANOMALY_CORE_BLUESPACE /obj/item/assembly/signaler/anomaly/bluespace +/// Gravitational cores +#define ANOMALY_CORE_GRAVITATIONAL /obj/item/assembly/signaler/anomaly/grav +/// Flux +#define ANOMALY_CORE_FLUX /obj/item/assembly/signaler/anomaly/flux +/// Vortex +#define ANOMALY_CORE_VORTEX /obj/item/assembly/signaler/anomaly/vortex +/// Pyro +#define ANOMALY_CORE_PYRO /obj/item/assembly/signaler/anomaly/pyro + +// Max amounts of cores you can make +#define MAX_CORES_BLUESPACE 8 +#define MAX_CORES_GRAVITATIONAL 8 +#define MAX_CORES_FLUX 8 +#define MAX_CORES_VORTEX 8 +#define MAX_CORES_PYRO 8 + +/// chance supermatter anomalies drop real cores +#define SUPERMATTER_ANOMALY_DROP_CHANCE 20 diff --git a/code/__HELPERS/_extools_api.dm b/code/__HELPERS/_extools_api.dm new file mode 100644 index 0000000000..af348dc939 --- /dev/null +++ b/code/__HELPERS/_extools_api.dm @@ -0,0 +1,5 @@ +#define EXTOOLS_LOGGING // rust_g is used as a fallback if this is undefined + +/proc/extools_log_write() + +/proc/extools_finalize_logging() diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm index 15e2abc81f..583427cab7 100644 --- a/code/__HELPERS/_logging.dm +++ b/code/__HELPERS/_logging.dm @@ -4,10 +4,15 @@ #define SEND_SOUND(target, sound) DIRECT_OUTPUT(target, sound) #define SEND_TEXT(target, text) DIRECT_OUTPUT(target, text) #define WRITE_FILE(file, text) DIRECT_OUTPUT(file, text) +#ifdef EXTOOLS_LOGGING +// proc hooked, so we can just put in standard TRUE and FALSE +#define WRITE_LOG(log, text) extools_log_write(log,text,TRUE) +#define WRITE_LOG_NO_FORMAT(log, text) extools_log_write(log,text,FALSE) +#else //This is an external call, "true" and "false" are how rust parses out booleans #define WRITE_LOG(log, text) rustg_log_write(log, text, "true") #define WRITE_LOG_NO_FORMAT(log, text) rustg_log_write(log, text, "false") - +#endif //print a warning message to world.log #define WARNING(MSG) warning("[MSG] in [__FILE__] at line [__LINE__] src: [UNLINT(src)] usr: [usr].") /proc/warning(msg) @@ -234,7 +239,11 @@ /* Close open log handles. This should be called as late as possible, and no logging should hapen after. */ /proc/shutdown_logging() +#ifdef EXTOOLS_LOGGING + extools_finalize_logging() +#else rustg_log_close_all() +#endif /* Helper procs for building detailed log lines */ diff --git a/code/__HELPERS/files.dm b/code/__HELPERS/files.dm index 8b4f8d5b54..aad5b4cab1 100644 --- a/code/__HELPERS/files.dm +++ b/code/__HELPERS/files.dm @@ -71,3 +71,18 @@ /proc/pathflatten(path) return replacetext(path, "/", "_") + +/// Returns the md5 of a file at a given path. +/proc/md5filepath(path) + . = md5(file(path)) + +/// Save file as an external file then md5 it. +/// Used because md5ing files stored in the rsc sometimes gives incorrect md5 results. +/proc/md5asfile(file) + var/static/notch = 0 + // its importaint this code can handle md5filepath sleeping instead of hard blocking, if it's converted to use rust_g. + var/filename = "tmp/md5asfile.[world.realtime].[world.timeofday].[world.time].[world.tick_usage].[notch]" + notch = WRAP(notch+1, 0, 2^15) + fcopy(file, filename) + . = md5filepath(filename) + fdel(filename) diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 11332863f5..2bd477d98c 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -1126,12 +1126,13 @@ GLOBAL_DATUM_INIT(dummySave, /savefile, new("tmp/dummySave.sav")) //Cache of ico var/list/partial = splittext(iconData, "{") return replacetext(copytext_char(partial[2], 3, -5), "\n", "") -/proc/icon2html(thing, target, icon_state, dir, frame = 1, moving = FALSE) +/proc/icon2html(thing, target, icon_state, dir = SOUTH, frame = 1, moving = FALSE, sourceonly = FALSE) if (!thing) return var/key var/icon/I = thing + if (!target) return if (target == world) @@ -1147,17 +1148,26 @@ GLOBAL_DATUM_INIT(dummySave, /savefile, new("tmp/dummySave.sav")) //Cache of ico if (!isicon(I)) if (isfile(thing)) //special snowflake var/name = sanitize_filename("[generate_asset_name(thing)].png") - if(!SSassets.cache[name]) + if (!SSassets.cache[name]) SSassets.transport.register_asset(name, thing) for (var/thing2 in targets) SSassets.transport.send_assets(thing2, name) + if(sourceonly) + return SSassets.transport.get_asset_url(name) return "" var/atom/A = thing - if (isnull(dir)) - dir = A.dir + + I = A.icon if (isnull(icon_state)) icon_state = A.icon_state - I = A.icon + if (!(icon_state in icon_states(I, 1))) + icon_state = initial(A.icon_state) + if (isnull(dir)) + dir = initial(A.dir) + + if (isnull(dir)) + dir = A.dir + if (ishuman(thing)) // Shitty workaround for a BYOND issue. var/icon/temp = I I = icon() diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index 71c2b2e13b..09d4aadf50 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -279,7 +279,8 @@ GLOBAL_LIST_INIT(unlocked_mutant_parts, list("horns", "insect_fluff")) //parts in either of the above two lists that require a second option that allows them to be coloured GLOBAL_LIST_INIT(colored_mutant_parts, list("insect_wings" = "wings_color", "deco_wings" = "wings_color", "horns" = "horns_color")) -//species ids that have greyscale sprites +//body ids that have greyscale sprites GLOBAL_LIST_INIT(greyscale_limb_types, list("human","moth","lizard","pod","plant","jelly","slime","golem","lum","stargazer","mush","ethereal","snail","c_golem","b_golem","mammal","xeno","ipc","insect","synthliz","avian","aquatic")) -//species ids that need snowflake coloring applied +//body ids that have prosthetic sprites +GLOBAL_LIST_INIT(prosthetic_limb_types, list("xion","bishop","cybersolutions","grayson","hephaestus","nanotrasen","talon")) diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index 6dc1433bc8..980ec38909 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -184,14 +184,23 @@ /obj/screen/alert/hot name = "Too Hot" - desc = "You're flaming hot! Get somewhere cooler and take off any insulating clothing like a fire suit." + desc = "The air around you is pretty toasty! Consider putting on some insulating clothing, or moving to a cooler area." icon_state = "hot" /obj/screen/alert/cold name = "Too Cold" - desc = "You're freezing cold! Get somewhere warmer and take off any insulating clothing like a space suit." + desc = "The air around you is pretty cold! Consider wearing a coat, or moving to a warmer area." icon_state = "cold" +/obj/screen/alert/sweat + name = "Sweating" + desc = "You're sweating! Get somewhere cooler and take off any insulating clothing like a fire suit." + icon_state = "sweat" + +/obj/screen/alert/shiver + name = "Shivering" + desc = "You're shivering! Get somewhere warmer and take off any insulating clothing like a space suit." + /obj/screen/alert/lowpressure name = "Low Pressure" desc = "The air around you is hazardously thin. A space suit would protect you." diff --git a/code/controllers/subsystem/atoms.dm b/code/controllers/subsystem/atoms.dm index db1fced637..b9a4785f49 100644 --- a/code/controllers/subsystem/atoms.dm +++ b/code/controllers/subsystem/atoms.dm @@ -90,6 +90,8 @@ SUBSYSTEM_DEF(atoms) qdeleted = TRUE else if(!(A.flags_1 & INITIALIZED_1)) BadInitializeCalls[the_type] |= BAD_INIT_DIDNT_INIT + else + SEND_SIGNAL(A,COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZE) return qdeleted || QDELING(A) diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm index 5b60747725..e1b6e6f6e2 100644 --- a/code/controllers/subsystem/persistence.dm +++ b/code/controllers/subsystem/persistence.dm @@ -48,25 +48,6 @@ SUBSYSTEM_DEF(persistence) /datum/controller/subsystem/persistence/proc/LoadSatchels() var/placed_satchel = 0 var/path - if(fexists("data/npc_saves/SecretSatchels.sav")) //legacy conversion. Will only ever run once. - var/savefile/secret_satchels = new /savefile("data/npc_saves/SecretSatchels.sav") - for(var/map in secret_satchels) - var/json_file = file("data/npc_saves/SecretSatchels[map].json") - var/list/legacy_secret_satchels = splittext(secret_satchels[map],"#") - var/list/satchels = list() - for(var/i=1,i<=legacy_secret_satchels.len,i++) - var/satchel_string = legacy_secret_satchels[i] - var/list/chosen_satchel = splittext(satchel_string,"|") - if(chosen_satchel.len == 3) - var/list/data = list() - data["x"] = text2num(chosen_satchel[1]) - data["y"] = text2num(chosen_satchel[2]) - data["saved_obj"] = chosen_satchel[3] - satchels += list(data) - var/list/file_data = list() - file_data["data"] = satchels - WRITE_FILE(json_file, json_encode(file_data)) - fdel("data/npc_saves/SecretSatchels.sav") var/json_file = file("data/npc_saves/SecretSatchels[SSmapping.config.map_name].json") var/list/json = list() diff --git a/code/controllers/subsystem/research.dm b/code/controllers/subsystem/research.dm index 60c5dd5b99..ac9db60ccc 100644 --- a/code/controllers/subsystem/research.dm +++ b/code/controllers/subsystem/research.dm @@ -294,6 +294,17 @@ SUBSYSTEM_DEF(research) //[88nodes * 5000points/node] / [1.5hr * 90min/hr * 60s/min] //Around 450000 points max??? + /// The global list of raw anomaly types that have been refined, for hard limits. + var/list/created_anomaly_types = list() + /// The hard limits of cores created for each anomaly type. For faster code lookup without switch statements. + var/list/anomaly_hard_limit_by_type = list( + ANOMALY_CORE_BLUESPACE = MAX_CORES_BLUESPACE, + ANOMALY_CORE_PYRO = MAX_CORES_PYRO, + ANOMALY_CORE_GRAVITATIONAL = MAX_CORES_GRAVITATIONAL, + ANOMALY_CORE_VORTEX = MAX_CORES_VORTEX, + ANOMALY_CORE_FLUX = MAX_CORES_FLUX + ) + /datum/controller/subsystem/research/Initialize() point_types = TECHWEB_POINT_TYPE_LIST_ASSOCIATIVE_NAMES initialize_all_techweb_designs() diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index c2a954a993..19f19f05ac 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -396,6 +396,7 @@ SUBSYSTEM_DEF(ticker) SSjob.EquipRank(N, player.mind.assigned_role, 0) if(CONFIG_GET(flag/roundstart_traits) && ishuman(N.new_character)) SSquirks.AssignQuirks(N.new_character, N.client, TRUE, TRUE, SSjob.GetJob(player.mind.assigned_role), FALSE, N) + N.client.prefs.post_copy_to(player) CHECK_TICK if(captainless) for(var/mob/dead/new_player/N in GLOB.player_list) diff --git a/code/datums/accents.dm b/code/datums/accents.dm index 9baba90c32..ce32aa0884 100644 --- a/code/datums/accents.dm +++ b/code/datums/accents.dm @@ -78,23 +78,22 @@ speech_args[SPEECH_MESSAGE] = lowertext(message) return speech_args -/datum/accent/bone +/datum/accent/span var/span_flag -/datum/accent/bone/modify_speech(list/speech_args) - speech_args[SPEECH_SPANS] = span_flag +/datum/accent/span/modify_speech(list/speech_args) + speech_args[SPEECH_SPANS] |= span_flag return speech_args //bone tongues either have the sans accent or the papyrus accent -/datum/accent/bone/sans +/datum/accent/span/sans span_flag = SPAN_SANS -/datum/accent/bone/papyrus +/datum/accent/span/papyrus span_flag = SPAN_PAPYRUS -/datum/accent/robot/modify_speech(list/speech_args) - speech_args[SPEECH_SPANS] = SPAN_ROBOT - return speech_args +/datum/accent/span/robot + span_flag = SPAN_ROBOT /datum/accent/dullahan/modify_speech(list/speech_args, datum/source, mob/living/carbon/owner) if(owner) diff --git a/code/datums/components/crafting/recipes/recipes_clothing.dm b/code/datums/components/crafting/recipes/recipes_clothing.dm index 717e99e8b2..df0a2a091a 100644 --- a/code/datums/components/crafting/recipes/recipes_clothing.dm +++ b/code/datums/components/crafting/recipes/recipes_clothing.dm @@ -273,6 +273,16 @@ time = 30 category = CAT_CLOTHING +/datum/crafting_recipe/twinsheath + name = "Twin Sword Sheath" + result = /obj/item/storage/belt/sabre/twin + reqs = list(/obj/item/stack/sheet/mineral/wood = 3, + /obj/item/stack/sheet/leather = 8) + tools = list(TOOL_WIRECUTTER) + time = 70 + category = CAT_CLOTHING + + /datum/crafting_recipe/durathread_reinforcement_kit name = "Durathread Reinforcement Kit" result = /obj/item/armorkit diff --git a/code/datums/components/crafting/recipes/recipes_misc.dm b/code/datums/components/crafting/recipes/recipes_misc.dm index f113be728d..14987bac44 100644 --- a/code/datums/components/crafting/recipes/recipes_misc.dm +++ b/code/datums/components/crafting/recipes/recipes_misc.dm @@ -120,6 +120,53 @@ category = CAT_MISC always_availible = FALSE // Disabled til learned +/datum/crafting_recipe/furnace + name = "Sandstone Furnace" + result = /obj/structure/furnace + time = 300 + reqs = list(/obj/item/stack/sheet/mineral/sandstone = 15, + /obj/item/stack/sheet/metal = 4, + /obj/item/stack/rods = 2) + tools = list(TOOL_CROWBAR) + subcategory = CAT_MISCELLANEOUS + category = CAT_MISC + +/datum/crafting_recipe/tableanvil + name = "Table Anvil" + result = /obj/structure/anvil/obtainable/table + time = 300 + reqs = list(/obj/item/stack/sheet/metal = 4, + /obj/item/stack/rods = 2) + tools = list(TOOL_SCREWDRIVER, TOOL_WRENCH, TOOL_WELDER) + subcategory = CAT_MISCELLANEOUS + category = CAT_MISC + +/datum/crafting_recipe/sandvil + name = "Sandstone Anvil" + result = /obj/structure/anvil/obtainable/sandstone + time = 300 + reqs = list(/obj/item/stack/sheet/mineral/sandstone = 24) + tools = list(TOOL_CROWBAR) + subcategory = CAT_MISCELLANEOUS + category = CAT_MISC + +/datum/crafting_recipe/basaltblock + name = "Sintered Basalt Block" + result = /obj/item/basaltblock + time = 200 + reqs = list(/obj/item/stack/ore/glass/basalt = 50) + tools = list(TOOL_WELDER) + subcategory = CAT_MISCELLANEOUS + category = CAT_MISC + +/datum/crafting_recipe/basaltanvil + name = "Basalt Anvil" + result = /obj/structure/anvil/obtainable/basalt + time = 200 + reqs = list(/obj/item/basaltblock = 5) + tools = list(TOOL_CROWBAR) + subcategory = CAT_MISCELLANEOUS + category = CAT_MISC /////////////////// //Tools & Storage// /////////////////// @@ -175,6 +222,17 @@ subcategory = CAT_TOOL category = CAT_MISC +/datum/crafting_recipe/toolboxhammer + name = "Toolbox Hammer" + result = /obj/item/melee/smith/hammer/toolbox + tools = list(TOOL_SCREWDRIVER, TOOL_WRENCH, TOOL_WELDER) + reqs = list(/obj/item/storage/toolbox = 1, + /obj/item/stack/sheet/metal = 4, + /obj/item/stack/rods = 2) + time = 40 + subcategory = CAT_TOOL + category = CAT_MISC + /datum/crafting_recipe/papersack name = "Paper Sack" result = /obj/item/storage/box/papersack @@ -358,6 +416,25 @@ //Unsorted// //////////// + + +/datum/crafting_recipe/stick + name = "Stick" + time = 30 + reqs = list(/obj/item/stack/sheet/mineral/wood = 1) + result = /obj/item/stick + subcategory = CAT_MISCELLANEOUS + category = CAT_MISC + + +/datum/crafting_recipe/swordhilt + name = "Sword Hilt" + time = 30 + reqs = list(/obj/item/stack/sheet/mineral/wood = 2) + result = /obj/item/swordhandle + subcategory = CAT_MISCELLANEOUS + category = CAT_MISC + /datum/crafting_recipe/blackcarpet name = "Black Carpet" reqs = list(/obj/item/stack/tile/carpet = 50, /obj/item/toy/crayon/black = 1) diff --git a/code/datums/components/fantasy/prefixes.dm b/code/datums/components/fantasy/prefixes.dm index b6de85cab0..0ada00a2e8 100644 --- a/code/datums/components/fantasy/prefixes.dm +++ b/code/datums/components/fantasy/prefixes.dm @@ -45,8 +45,9 @@ /datum/fantasy_affix/tactical/apply(datum/component/fantasy/comp, newName) var/obj/item/master = comp.parent - master.AddElement(/datum/element/tactical) - comp.appliedElements += list(/datum/element/tactical) + var/list/dat = list(/datum/element/tactical) + master._AddElement(dat) + comp.appliedElements += list(dat) return "tactical [newName]" /datum/fantasy_affix/pyromantic diff --git a/code/datums/elements/decal.dm b/code/datums/elements/decal.dm index 5ddd5bd03e..a20d46c813 100644 --- a/code/datums/elements/decal.dm +++ b/code/datums/elements/decal.dm @@ -41,19 +41,27 @@ var/atom/A = target num_decals_per_atom[A]-- if(!num_decals_per_atom[A]) - UnregisterSignal(A, list(COMSIG_ATOM_DIR_CHANGE, COMSIG_COMPONENT_CLEAN_ACT, COMSIG_PARENT_EXAMINE, COMSIG_ATOM_UPDATE_OVERLAYS)) + UnregisterSignal(A, list(COMSIG_ATOM_DIR_CHANGE, COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZE, + COMSIG_COMPONENT_CLEAN_ACT, COMSIG_PARENT_EXAMINE, COMSIG_ATOM_UPDATE_OVERLAYS)) LAZYREMOVE(num_decals_per_atom, A) apply(A) return ..() /datum/element/decal/proc/apply(atom/target) - target.update_icon() + if(target.flags_1 & INITIALIZED_1) + target.update_icon() //could use some queuing here now maybe. + else if(!QDELETED(target) && num_decals_per_atom[target] == 1) + RegisterSignal(target, COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZE, .proc/late_update_icon) if(isitem(target)) addtimer(CALLBACK(target, /obj/item/.proc/update_slot_icon), 0, TIMER_UNIQUE) +/datum/element/decal/proc/late_update_icon(atom/source) + source.update_icon() + UnregisterSignal(source,COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZE) + /datum/element/decal/proc/apply_overlay(atom/source, list/overlay_list) if(first_dir) - pic.dir = turn(first_dir, -dir2angle(source.dir)) + pic.dir = first_dir == SOUTH ? source.dir : turn(first_dir, dir2angle(source.dir)-180) //Never turn a dir by 0. for(var/i in 1 to num_decals_per_atom[source]) overlay_list += pic diff --git a/code/datums/elements/polychromic.dm b/code/datums/elements/polychromic.dm index 1c438c86c5..7ae0d04b05 100644 --- a/code/datums/elements/polychromic.dm +++ b/code/datums/elements/polychromic.dm @@ -61,7 +61,7 @@ A.AddElement(/datum/element/update_icon_updates_onmob) RegisterSignal(A, COMSIG_ITEM_WORN_OVERLAYS, .proc/apply_worn_overlays) if(suits_with_helmet_typecache[A.type]) - RegisterSignal(A, COMSIG_SUIT_MADE_HELMET, .proc/register_helmet) + RegisterSignal(A, COMSIG_SUIT_MADE_HELMET, .proc/register_helmet) //you better work now you slut else if(_flags & POLYCHROMIC_ACTION && ismob(A)) //in the event mob update icon procs are ever standarized. var/datum/action/polychromic/P = new(A) RegisterSignal(P, COMSIG_ACTION_TRIGGER, .proc/activate_action) @@ -166,6 +166,15 @@ examine_list += "Alt-click to recolor it." /datum/element/polychromic/proc/register_helmet(atom/source, obj/item/clothing/head/H) + if(!isitem(H)) //backup in case if it messes up somehow + if(istype(source,/obj/item/clothing/suit/hooded)) //so how come it be like this, where toggleable headslots are named separately (helmet/hood) anyways? + var/obj/item/clothing/suit/hooded/sourcesuit = source + H = sourcesuit.hood + else if(istype(source,/obj/item/clothing/suit/space/hardsuit)) + var/obj/item/clothing/suit/space/hardsuit/sourcesuit = source + H = sourcesuit.helmet + else + return suit_by_helmet[H] = source helmet_by_suit[source] = H colors_by_atom[H] = colors_by_atom[source] diff --git a/code/datums/materials/basemats.dm b/code/datums/materials/basemats.dm index 1469965b57..76e60bc6dc 100644 --- a/code/datums/materials/basemats.dm +++ b/code/datums/materials/basemats.dm @@ -35,23 +35,24 @@ Unless you know what you're doing, only use the first three numbers. They're in value_per_unit = 0.025 beauty_modifier = 0.075 -///Slight force increase +///Slight force decrease. It's gold, it's soft as fuck. /datum/material/gold name = "gold" desc = "Gold" color = list(340/255, 240/255, 50/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) //gold is shiny, but not as bright as bananium - strength_modifier = 1.2 + strength_modifier = 0.8 categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) sheet_type = /obj/item/stack/sheet/mineral/gold value_per_unit = 0.0625 beauty_modifier = 0.15 armor_modifiers = list("melee" = 1.1, "bullet" = 1.1, "laser" = 1.15, "energy" = 1.15, "bomb" = 1, "bio" = 1, "rad" = 1, "fire" = 0.7, "acid" = 1.1) -///Has no special properties +///Small force increase, for diamond swords /datum/material/diamond name = "diamond" desc = "Highly pressurized carbon" color = list(48/255, 272/255, 301/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) + strength_modifier = 1.1 alpha = 132 categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) sheet_type = /obj/item/stack/sheet/mineral/diamond @@ -106,6 +107,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "bluespace crystal" desc = "Crystals with bluespace properties" color = list(119/255, 217/255, 396/255,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0) + integrity_modifier = 0.2 //these things shatter when thrown. alpha = 200 categories = list(MAT_CATEGORY_ORE = TRUE) beauty_modifier = 0.5 @@ -139,7 +141,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "titanium" desc = "Titanium" color = "#b3c0c7" - strength_modifier = 1.3 + strength_modifier = 1.1 categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) sheet_type = /obj/item/stack/sheet/mineral/titanium value_per_unit = 0.0625 @@ -203,7 +205,7 @@ Unless you know what you're doing, only use the first three numbers. They're in name = "adamantine" desc = "A powerful material made out of magic, I mean science!" color = "#6d7e8e" - strength_modifier = 1.5 + strength_modifier = 1.3 categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) sheet_type = /obj/item/stack/sheet/mineral/adamantine value_per_unit = 0.25 @@ -276,16 +278,29 @@ Unless you know what you're doing, only use the first three numbers. They're in desc = "Mir'ntrath barhah Nar'sie." color = "#3C3434" categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) + strength_modifier = 1.2 sheet_type = /obj/item/stack/sheet/runed_metal value_per_unit = 0.75 armor_modifiers = list("melee" = 1.2, "bullet" = 1.2, "laser" = 1, "energy" = 1, "bomb" = 1.2, "bio" = 1.2, "rad" = 1.5, "fire" = 1.5, "acid" = 1.5) beauty_modifier = -0.15 texture_layer_icon_state = "runed" +/datum/material/brass + name = "brass" + desc = "Tybel gb-Ratvar" + color = "#917010" + categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) + strength_modifier = 1.3 // Replicant Alloy is very good for skull beatings.. + sheet_type = /obj/item/stack/tile/brass + value_per_unit = 0.75 + armor_modifiers = list("melee" = 1.4, "bullet" = 1.4, "laser" = 0, "energy" = 0, "bomb" = 1.4, "bio" = 1.2, "rad" = 1.5, "fire" = 1.5, "acid" = 1.5) //But it has.. a few problems that can't easily be compensated for. + beauty_modifier = 0.3 //It really beats the cold plain plating of the station, doesn't it? + /datum/material/bronze name = "bronze" desc = "Clock Cult? Never heard of it." color = "#92661A" + strength_modifier = 1.1 categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) sheet_type = /obj/item/stack/sheet/bronze value_per_unit = 0.025 diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm index 38b004a657..1abe077980 100644 --- a/code/datums/mood_events/generic_negative_events.dm +++ b/code/datums/mood_events/generic_negative_events.dm @@ -204,6 +204,11 @@ mood_change = -1 timeout = 2 MINUTES +/datum/mood_event/plush_bite + description = "IT BIT ME!! OW!\n" + mood_change = -3 + timeout = 2 MINUTES + //Cursed stuff below /datum/mood_event/emptypred diff --git a/code/datums/mutations/_mutations.dm b/code/datums/mutations/_mutations.dm index fb5f6ed5f6..3bddfdaa63 100644 --- a/code/datums/mutations/_mutations.dm +++ b/code/datums/mutations/_mutations.dm @@ -11,7 +11,7 @@ var/lowest_value = 256 * 8 var/text_gain_indication = "" var/text_lose_indication = "" - var/list/mutable_appearance/visual_indicators = list() + var/list/visual_indicators = list() var/obj/effect/proc_holder/spell/power var/layer_used = MUTATIONS_LAYER //which mutation layer to use var/list/species_allowed = list() //to restrict mutation to only certain species diff --git a/code/datums/skills/_skill_holder.dm b/code/datums/skills/_skill_holder.dm index 73748417c3..83c95c6439 100644 --- a/code/datums/skills/_skill_holder.dm +++ b/code/datums/skills/_skill_holder.dm @@ -110,7 +110,7 @@ /** * Automatic skill increase, multiplied by skill affinity if existing. - * Only works if skill is numerical. + * Only works if skill is numerical or levelled.. */ /datum/mind/proc/auto_gain_experience(skill, value, maximum, silent = FALSE) if(!ispath(skill, /datum/skill)) diff --git a/code/datums/skills/blacksmithing.dm b/code/datums/skills/blacksmithing.dm new file mode 100644 index 0000000000..0bddae5562 --- /dev/null +++ b/code/datums/skills/blacksmithing.dm @@ -0,0 +1,6 @@ +/datum/skill/level/dorfy/blacksmithing + name = "Blacksmithing" + desc = "Making metal into fancy shapes using heat and force. Higher levels increase both your working speed at an anvil as well as the quality of your works." + name_color = COLOR_FLOORTILE_GRAY + skill_traits = list(SKILL_SANITY, SKILL_INTELLIGENCE, SKILL_USE_TOOL, SKILL_TRAINING_TOOL) + ui_category = SKILL_UI_CAT_MISC diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index 9cd47403d1..a2f534115a 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -533,6 +533,38 @@ if(100) H.adjustOrganLoss(ORGAN_SLOT_BRAIN,20) +/datum/status_effect/corrosion_curse/lesser + id = "corrosion_curse_lesser" + duration = 20 SECONDS + +/datum/status_effect/corrosion_curse/lesser/tick() + . = ..() + if(!ishuman(owner)) + return + var/mob/living/carbon/human/H = owner + var/chance = rand(0,100) + switch(chance) + if(0 to 19) + H.adjustBruteLoss(6) + if(20 to 29) + H.Dizzy(10) + if(30 to 39) + H.adjustOrganLoss(ORGAN_SLOT_LIVER,2) + if(40 to 49) + H.adjustOrganLoss(ORGAN_SLOT_HEART,2) + if(50 to 59) + H.adjustOrganLoss(ORGAN_SLOT_STOMACH,2) + if(60 to 69) + H.adjustOrganLoss(ORGAN_SLOT_EYES,5) + if(70 to 79) + H.adjustOrganLoss(ORGAN_SLOT_EARS,5) + if(80 to 89) + H.adjustOrganLoss(ORGAN_SLOT_LUNGS,5) + if(90 to 99) + H.adjustOrganLoss(ORGAN_SLOT_TONGUE,5) + if(100) + H.adjustOrganLoss(ORGAN_SLOT_BRAIN,10) + /datum/status_effect/amok id = "amok" status_type = STATUS_EFFECT_REPLACE diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm index 68b5d6f987..322fba0a33 100644 --- a/code/datums/traits/negative.dm +++ b/code/datums/traits/negative.dm @@ -211,24 +211,27 @@ GLOBAL_LIST_EMPTY(family_heirlooms) H.gain_trauma(T, TRAUMA_RESILIENCE_ABSOLUTE) /datum/quirk/paraplegic/on_spawn() - if(quirk_holder.buckled) // Handle late joins being buckled to arrival shuttle chairs. - quirk_holder.buckled.unbuckle_mob(quirk_holder) + if(quirk_holder.client) + var/modified_limbs = quirk_holder.client.prefs.modified_limbs + if(!(modified_limbs[BODY_ZONE_L_LEG] == LOADOUT_LIMB_AMPUTATED && modified_limbs[BODY_ZONE_R_LEG] == LOADOUT_LIMB_AMPUTATED && !isjellyperson(quirk_holder))) + if(quirk_holder.buckled) // Handle late joins being buckled to arrival shuttle chairs. + quirk_holder.buckled.unbuckle_mob(quirk_holder) - var/turf/T = get_turf(quirk_holder) - var/obj/structure/chair/spawn_chair = locate() in T + var/turf/T = get_turf(quirk_holder) + var/obj/structure/chair/spawn_chair = locate() in T - var/obj/vehicle/ridden/wheelchair/wheels = new(T) - if(spawn_chair) // Makes spawning on the arrivals shuttle more consistent looking - wheels.setDir(spawn_chair.dir) + var/obj/vehicle/ridden/wheelchair/wheels = new(T) + if(spawn_chair) // Makes spawning on the arrivals shuttle more consistent looking + wheels.setDir(spawn_chair.dir) - wheels.buckle_mob(quirk_holder) + wheels.buckle_mob(quirk_holder) - // During the spawning process, they may have dropped what they were holding, due to the paralysis - // So put the things back in their hands. + // During the spawning process, they may have dropped what they were holding, due to the paralysis + // So put the things back in their hands. - for(var/obj/item/I in T) - if(I.fingerprintslast == quirk_holder.ckey) - quirk_holder.put_in_hands(I) + for(var/obj/item/I in T) + if(I.fingerprintslast == quirk_holder.ckey) + quirk_holder.put_in_hands(I) /datum/quirk/poor_aim name = "Poor Aim" @@ -244,42 +247,6 @@ GLOBAL_LIST_EMPTY(family_heirlooms) mob_trait = TRAIT_PROSOPAGNOSIA medical_record_text = "Patient suffers from prosopagnosia and cannot recognize faces." -/datum/quirk/prosthetic_limb - name = "Prosthetic Limb" - desc = "An accident caused you to lose one of your limbs. Because of this, you now have a random prosthetic!" - value = -1 - var/slot_string = "limb" - -/datum/quirk/prosthetic_limb/on_spawn() - var/mob/living/carbon/human/H = quirk_holder - var/limb_slot - if(HAS_TRAIT(H, TRAIT_PARA))//Prevent paraplegic legs being replaced - limb_slot = pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM) - else - limb_slot = pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) - var/obj/item/bodypart/old_part = H.get_bodypart(limb_slot) - var/obj/item/bodypart/prosthetic - switch(limb_slot) - if(BODY_ZONE_L_ARM) - prosthetic = new/obj/item/bodypart/l_arm/robot/surplus(quirk_holder) - slot_string = "left arm" - if(BODY_ZONE_R_ARM) - prosthetic = new/obj/item/bodypart/r_arm/robot/surplus(quirk_holder) - slot_string = "right arm" - if(BODY_ZONE_L_LEG) - prosthetic = new/obj/item/bodypart/l_leg/robot/surplus(quirk_holder) - slot_string = "left leg" - if(BODY_ZONE_R_LEG) - prosthetic = new/obj/item/bodypart/r_leg/robot/surplus(quirk_holder) - slot_string = "right leg" - prosthetic.replace_limb(H) - qdel(old_part) - H.regenerate_icons() - -/datum/quirk/prosthetic_limb/post_add() - to_chat(quirk_holder, "Your [slot_string] has been replaced with a surplus prosthetic. It is fragile and will easily come apart under duress. Additionally, \ - you need to use a welding tool and cables to repair it, instead of bruise packs and ointment.") - /datum/quirk/insanity name = "Reality Dissociation Syndrome" desc = "You suffer from a severe disorder that causes very vivid hallucinations. Mindbreaker toxin can suppress its effects, and you are immune to mindbreaker's hallucinogenic properties. This is not a license to grief." diff --git a/code/datums/wires/airlock.dm b/code/datums/wires/airlock.dm index 179adf46bd..9af78b0090 100644 --- a/code/datums/wires/airlock.dm +++ b/code/datums/wires/airlock.dm @@ -71,7 +71,7 @@ /datum/wires/airlock/on_pulse(wire) set waitfor = FALSE var/obj/machinery/door/airlock/A = holder - if(!A.hasSiliconAccessInArea(usr) && A.isElectrified() && A.shock(usr, 100)) + if(usr && !A.hasSiliconAccessInArea(usr) && A.isElectrified() && A.shock(usr, 100)) return FALSE switch(wire) if(WIRE_POWER1, WIRE_POWER2) // Pulse to loose power. @@ -127,7 +127,7 @@ /datum/wires/airlock/on_cut(wire, mend) var/obj/machinery/door/airlock/A = holder - if(!A.hasSiliconAccessInArea(usr) && A.isElectrified() && A.shock(usr, 100)) + if(usr && !A.hasSiliconAccessInArea(usr) && A.isElectrified() && A.shock(usr, 100)) return FALSE switch(wire) if(WIRE_POWER1, WIRE_POWER2) // Cut to loose power, repair all to gain power. diff --git a/code/game/area/Space_Station_13_areas.dm b/code/game/area/Space_Station_13_areas.dm index cbad2f7ab0..5310b24202 100644 --- a/code/game/area/Space_Station_13_areas.dm +++ b/code/game/area/Space_Station_13_areas.dm @@ -43,6 +43,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station outdoors = TRUE ambientsounds = SPACE blob_allowed = FALSE //Eating up space doesn't count for victory as a blob. + considered_hull_exterior = TRUE /area/space/nearstation icon_state = "space_near" @@ -1592,4 +1593,4 @@ NOTE: there are two lists of areas in the end of this file: centcom and station valid_territory = FALSE outdoors = TRUE ambientsounds = SPACE - blob_allowed = FALSE //While part of the station, what good will it do you? \ No newline at end of file + blob_allowed = FALSE //While part of the station, what good will it do you? diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 672d5c096f..b9415f3cf8 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -34,6 +34,9 @@ /// If megafauna can be spawned by natural random generation var/megafauna_spawn_allowed = FALSE + /// Considered space for hull shielding + var/considered_hull_exterior = FALSE + var/fire = null var/atmos = TRUE var/atmosalm = FALSE diff --git a/code/game/gamemodes/dynamic/dynamic.dm b/code/game/gamemodes/dynamic/dynamic.dm index 659d50c077..eac7347479 100644 --- a/code/game/gamemodes/dynamic/dynamic.dm +++ b/code/game/gamemodes/dynamic/dynamic.dm @@ -6,10 +6,6 @@ GLOBAL_VAR_INIT(dynamic_latejoin_delay_max, (30 MINUTES)) GLOBAL_VAR_INIT(dynamic_midround_delay_min, (10 MINUTES)) GLOBAL_VAR_INIT(dynamic_midround_delay_max, (30 MINUTES)) -GLOBAL_VAR_INIT(dynamic_event_delay_min, (10 MINUTES)) -GLOBAL_VAR_INIT(dynamic_event_delay_max, (30 MINUTES)) // this is on top of regular events, so can't be quite as often - - // -- Roundstart injection delays GLOBAL_VAR_INIT(dynamic_first_latejoin_delay_min, (2 MINUTES)) GLOBAL_VAR_INIT(dynamic_first_latejoin_delay_max, (30 MINUTES)) @@ -58,7 +54,7 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null) // Threat logging vars /// Starting threat level, for things that increase it but can bring it back down. var/initial_threat_level = 0 - /// Target threat level right now. Events and antags will try to keep the round at this level. + /// Target threat level right now. Antags will try to keep the round at this level. var/threat_level = 0 /// The current antag threat. Recalculated every time a ruletype starts or ends. var/threat = 0 @@ -80,8 +76,6 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null) var/list/latejoin_rules = list() /// List of midround rules used for selecting the rules. var/list/midround_rules = list() - /// List of events used for reducing threat without causing antag injection (necessarily). - var/list/events = list() /** # Pop range per requirement. * If the value is five the range is: * 0-4, 5-9, 10-14, 15-19, 20-24, 25-29, 30-34, 35-39, 40-54, 45+ @@ -119,8 +113,6 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null) var/latejoin_injection_cooldown = 0 /// When world.time is over this number the mode tries to inject a midround ruleset. var/midround_injection_cooldown = 0 - /// When wor.dtime is over this number the mode tries to do an event. - var/event_injection_cooldown = 0 /// When TRUE GetInjectionChance returns 100. var/forced_injection = FALSE /// Forced ruleset to be executed for the next latejoin. @@ -184,7 +176,6 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null) dat += "
Injection Timers: ([storyteller.get_injection_chance(TRUE)]% chance)
" dat += "Latejoin: [(latejoin_injection_cooldown-world.time)>60*10 ? "[round((latejoin_injection_cooldown-world.time)/60/10,0.1)] minutes" : "[(latejoin_injection_cooldown-world.time)/10] seconds"] \[Now!\]
" dat += "Midround: [(midround_injection_cooldown-world.time)>60*10 ? "[round((midround_injection_cooldown-world.time)/60/10,0.1)] minutes" : "[(midround_injection_cooldown-world.time)/10] seconds"] \[Now!\]
" - dat += "Event: [(event_injection_cooldown-world.time)>60*10 ? "[round((event_injection_cooldown-world.time)/60/10,0.1)] minutes" : "[(event_injection_cooldown-world.time)/10] seconds"] \[Now!\]
" usr << browse(dat.Join(), "window=gamemode_panel;size=500x500") /datum/game_mode/dynamic/Topic(href, href_list) @@ -204,10 +195,7 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null) var/threatadd = input("Specify how much threat to add (negative to subtract). This can inflate the threat level.", "Adjust Threat", 0) as null|num if(!threatadd) return - if(threatadd > 0) - create_threat(threatadd) - else - remove_threat(threatadd) + create_threat(threatadd) else if (href_list["injectlate"]) latejoin_injection_cooldown = 0 forced_injection = TRUE @@ -216,10 +204,6 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null) midround_injection_cooldown = 0 forced_injection = TRUE message_admins("[key_name(usr)] forced a midround injection.", 1) - else if (href_list["forceevent"]) - event_injection_cooldown = 0 - // events always happen anyway - message_admins("[key_name(usr)] forced an event.", 1) else if (href_list["threatlog"]) show_threatlog(usr) else if (href_list["stacking_limit"]) @@ -377,8 +361,6 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null) generate_threat() storyteller.start_injection_cooldowns() - SSevents.frequency_lower = storyteller.event_frequency_lower // 6 minutes by default - SSevents.frequency_upper = storyteller.event_frequency_upper // 20 minutes by default log_game("DYNAMIC: Dynamic Mode initialized with a Threat Level of... [threat_level]!") initial_threat_level = threat_level return TRUE @@ -397,9 +379,6 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null) if ("Midround") if (ruleset.weight) midround_rules += ruleset - if("Event") - if(ruleset.weight) - events += ruleset for(var/mob/dead/new_player/player in GLOB.player_list) if(player.ready == PLAYER_READY_TO_PLAY && player.mind) roundstart_pop_ready++ @@ -596,8 +575,6 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null) latejoin_rules = remove_from_list(latejoin_rules, rule.type) else if(rule.ruletype == "Midround") midround_rules = remove_from_list(midround_rules, rule.type) - else if(rule.ruletype == "Event") - events = remove_from_list(events,rule.type) addtimer(CALLBACK(src, /datum/game_mode/dynamic/.proc/execute_midround_latejoin_rule, rule), rule.delay) return TRUE @@ -706,17 +683,6 @@ GLOBAL_VAR_INIT(dynamic_forced_storyteller, null) picking_midround_latejoin_rule(drafted_rules) // get_injection_chance can do things on fail - if(event_injection_cooldown < world.time) - SSblackbox.record_feedback("tally","dynamic",1,"Attempted event injections") - event_injection_cooldown = storyteller.get_event_cooldown() + world.time - message_admins("DYNAMIC: Doing event injection.") - log_game("DYNAMIC: Doing event injection.") - update_playercounts() - var/list/drafted_rules = storyteller.event_draft() - if(drafted_rules.len > 0) - SSblackbox.record_feedback("tally","dynamic",1,"Successful event injections") - picking_midround_latejoin_rule(drafted_rules) - /// Updates current_players. /datum/game_mode/dynamic/proc/update_playercounts() current_players[CURRENT_LIVING_PLAYERS] = list() diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm deleted file mode 100644 index 1ee226875b..0000000000 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm +++ /dev/null @@ -1,454 +0,0 @@ -/datum/dynamic_ruleset/event - ruletype = "Event" - var/typepath // typepath of the event - var/triggering - var/earliest_start = 20 MINUTES - -/datum/dynamic_ruleset/event/get_blackbox_info() - var/list/ruleset_data = list() - ruleset_data["name"] = name - ruleset_data["rule_type"] = ruletype - ruleset_data["cost"] = total_cost - ruleset_data["weight"] = weight - ruleset_data["scaled_times"] = scaled_times - ruleset_data["event_type"] = typepath - ruleset_data["population_tier"] = indice_pop - return ruleset_data - -/datum/dynamic_ruleset/event/execute() - var/datum/round_event/E = new typepath() - E.current_players = get_active_player_count(alive_check = 1, afk_check = 1, human_check = 1) - // E.control = src // can't be done! we just don't use events that require these, those can be from_ghost almost always - - testing("[time2text(world.time, "hh:mm:ss")] [E.type]") - deadchat_broadcast("[name] has just been triggered by dynamic!") - log_game("Random Event triggering: [name] ([typepath])") - - return E - -/datum/dynamic_ruleset/event/ready(forced = FALSE) - if (!forced) - if(earliest_start >= world.time-SSticker.round_start_time) - return FALSE - var/job_check = 0 - if (enemy_roles.len > 0) - for (var/mob/M in mode.current_players[CURRENT_LIVING_PLAYERS]) - if (M.stat == DEAD) - continue // Dead players cannot count as opponents - if (M.mind && M.mind.assigned_role && (M.mind.assigned_role in enemy_roles)) - job_check++ // Checking for "enemies" (such as sec officers). To be counters, they must either not be candidates to that rule, or have a job that restricts them from it - - var/threat = round(mode.threat_level/10) - if (job_check < required_enemies[threat]) - SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough enemy roles") - return FALSE - return TRUE - -////////////////////////////////////////////// -// // -// PIRATES // -// // -////////////////////////////////////////////// - -/datum/dynamic_ruleset/event/pirates - name = "Space Pirates" - config_tag = "pirates" - typepath = /datum/round_event/pirates - antag_flag = ROLE_TRAITOR - enemy_roles = list("AI","Security Officer","Head of Security","Captain") - required_enemies = list(2,2,1,1,0,0,0,0,0,0) - weight = 5 - cost = 10 - earliest_start = 30 MINUTES - blocking_rules = list(/datum/dynamic_ruleset/roundstart/nuclear,/datum/dynamic_ruleset/midround/from_ghosts/nuclear) - requirements = list(70,60,50,50,40,40,40,30,20,15) - property_weights = list("story_potential" = 1, "trust" = 1, "chaos" = 1) - high_population_requirement = 15 - -/datum/dynamic_ruleset/event/pirates/ready(forced = FALSE) - if (!SSmapping.empty_space) - return FALSE - return ..() - -////////////////////////////////////////////// -// // -// SPIDERS // -// // -////////////////////////////////////////////// - -/datum/dynamic_ruleset/event/spiders - name = "Spider Infestation" - config_tag = "spiders" - typepath = /datum/round_event/spider_infestation - enemy_roles = list("AI","Security Officer","Head of Security","Captain") - required_enemies = list(2,2,1,1,0,0,0,0,0,0) - weight = 5 - cost = 10 - requirements = list(70,60,50,50,40,40,40,30,20,15) - high_population_requirement = 15 - property_weights = list("chaos" = 1, "valid" = 1) - -////////////////////////////////////////////// -// // -// CLOGGED VENTS // -// // -////////////////////////////////////////////// - -/datum/dynamic_ruleset/event/ventclog - name = "Clogged Vents" - config_tag = "ventclog" - typepath = /datum/round_event/vent_clog - enemy_roles = list("Chemist","Medical Doctor","Chief Medical Officer") - required_enemies = list(1,1,1,0,0,0,0,0,0,0) - cost = 2 - weight = 4 - repeatable_weight_decrease = 3 - requirements = list(5,5,5,5,5,5,5,5,5,5) // yes, can happen on fake-extended - high_population_requirement = 5 - repeatable = TRUE - property_weights = list("chaos" = 1, "extended" = 2) - -/datum/dynamic_ruleset/event/ventclog/ready() - if(mode.threat_level > 30 && mode.threat >= 5 && prob(20)) - name = "Clogged Vents: Threatening" - cost = 5 - required_enemies = list(3,3,3,2,2,2,1,1,1,1) - typepath = /datum/round_event/vent_clog/threatening - else if(mode.threat_level > 15 && mode.threat > 15 && prob(30)) - name = "Clogged Vents: Catastrophic" - cost = 15 - required_enemies = list(2,2,1,1,1,1,0,0,0,0) - typepath = /datum/round_event/vent_clog/catastrophic - else - cost = 2 - name = "Clogged Vents: Normal" - required_enemies = list(1,1,1,0,0,0,0,0,0,0) - typepath = /datum/round_event/vent_clog - return ..() - -////////////////////////////////////////////// -// // -// ION STORM // -// // -////////////////////////////////////////////// - -/datum/dynamic_ruleset/event/ion_storm - name = "Ion Storm" - config_tag = "ion_storm" - typepath = /datum/round_event/ion_storm - enemy_roles = list("Research Director","Captain","Chief Engineer") - required_enemies = list(1,1,0,0,0,0,0,0,0,0) - weight = 4 - // no repeatable weight decrease. too variable to be unfun multiple times in one round - cost = 1 - requirements = list(5,5,5,5,5,5,5,5,5,5) - high_population_requirement = 5 - repeatable = TRUE - property_weights = list("story_potential" = 1, "extended" = 1) - always_max_weight = TRUE - -////////////////////////////////////////////// -// // -// METEORS // -// // -////////////////////////////////////////////// - -/datum/dynamic_ruleset/event/meteor_wave - name = "Meteor Wave" - config_tag = "meteor_wave" - typepath = /datum/round_event/meteor_wave - enemy_roles = list("Chief Engineer","Station Engineer","Atmospheric Technician","Captain","Cyborg") - required_enemies = list(3,3,3,3,3,3,3,3,3,3) - cost = 15 - weight = 3 - earliest_start = 25 MINUTES - repeatable_weight_decrease = 2 - requirements = list(60,50,40,30,30,30,30,30,30,30) - high_population_requirement = 30 - property_weights = list("extended" = -2) - -/datum/dynamic_ruleset/event/meteor_wave/ready() - if(world.time-SSticker.round_start_time > 35 MINUTES && mode.threat_level > 40 && mode.threat >= 25 && prob(30)) - name = "Meteor Wave: Threatening" - cost = 25 - typepath = /datum/round_event/meteor_wave/threatening - else if(world.time-SSticker.round_start_time > 45 MINUTES && mode.threat_level > 50 && mode.threat >= 40 && prob(30)) - name = "Meteor Wave: Catastrophic" - cost = 40 - typepath = /datum/round_event/meteor_wave/catastrophic - else - name = "Meteor Wave: Normal" - cost = 15 - typepath = /datum/round_event/meteor_wave - return ..() - -////////////////////////////////////////////// -// // -// ANOMALIES // -// // -////////////////////////////////////////////// - -/datum/dynamic_ruleset/event/anomaly_bluespace - name = "Anomaly: Bluespace" - config_tag = "anomaly_bluespace" - typepath = /datum/round_event/anomaly/anomaly_bluespace - enemy_roles = list("Chief Engineer","Station Engineer","Atmospheric Technician","Research Director","Scientist","Captain") - required_enemies = list(1,1,1,0,0,0,0,0,0,0) - weight = 2 - repeatable_weight_decrease = 1 - cost = 3 - requirements = list(5,5,5,5,5,5,5,5,5,5) - high_population_requirement = 5 - repeatable = TRUE - property_weights = list("extended" = 1) - -/datum/dynamic_ruleset/event/anomaly_flux - name = "Anomaly: Hyper-Energetic Flux" - config_tag = "anomaly_flux" - typepath = /datum/round_event/anomaly/anomaly_flux - enemy_roles = list("Chief Engineer","Station Engineer","Atmospheric Technician","Research Director","Scientist","Captain") - required_enemies = list(1,1,1,0,0,0,0,0,0,0) - weight = 2 - repeatable_weight_decrease = 1 - cost = 5 - requirements = list(5,5,5,5,5,5,5,5,5,5) - high_population_requirement = 10 - repeatable = TRUE - property_weights = list("extended" = 1) - -/datum/dynamic_ruleset/event/anomaly_gravitational - name = "Anomaly: Gravitational" - config_tag = "anomaly_gravitational" - typepath = /datum/round_event/anomaly/anomaly_grav - weight = 2 - repeatable_weight_decrease = 1 - cost = 3 - requirements = list(5,5,5,5,5,5,5,5,5,5) - high_population_requirement = 5 - repeatable = TRUE - property_weights = list("extended" = 1) - -/datum/dynamic_ruleset/event/anomaly_pyroclastic - name = "Anomaly: Pyroclastic" - config_tag = "anomaly_pyroclastic" - typepath = /datum/round_event/anomaly/anomaly_pyro - weight = 2 - repeatable_weight_decrease = 1 - cost = 5 - enemy_roles = list("Chief Engineer","Station Engineer","Atmospheric Technician","Research Director","Scientist","Captain","Cyborg") - required_enemies = list(1,1,1,1,1,1,1,1,1,1) - requirements = list(10,10,10,10,10,10,10,10,10,10) - high_population_requirement = 10 - repeatable = TRUE - property_weights = list("extended" = 1) - -/datum/dynamic_ruleset/event/anomaly_vortex - name = "Anomaly: Vortex" - config_tag = "anomaly_vortex" - typepath = /datum/round_event/anomaly/anomaly_vortex - weight = 2 - repeatable_weight_decrease = 1 - cost = 5 - enemy_roles = list("Chief Engineer","Station Engineer","Atmospheric Technician","Research Director","Scientist","Captain","Cyborg") - required_enemies = list(1,1,1,1,1,1,1,1,1,1) - requirements = list(10,10,10,10,10,10,10,10,10,10) - high_population_requirement = 10 - repeatable = TRUE - property_weights = list("extended" = 1) - -////////////////////////////////////////////// -// // -// WOW THAT'S A LOT OF EVENTS // -// // -////////////////////////////////////////////// - -/datum/dynamic_ruleset/event/brand_intelligence - name = "Brand Intelligence" - config_tag = "brand_intelligence" - typepath = /datum/round_event/brand_intelligence - weight = 1 - repeatable_weight_decrease = 1 - cost = 2 - enemy_roles = list("Chief Engineer","Station Engineer","Atmospheric Technician","Research Director","Scientist","Captain","Cyborg") - required_enemies = list(1,1,1,1,0,0,0,0,0,0) - requirements = list(10,10,10,10,10,10,10,10,10,10) - high_population_requirement = 10 - repeatable = TRUE - property_weights = list("extended" = -1, "chaos" = 1) - -/datum/dynamic_ruleset/event/carp_migration - name = "Carp Migration" - config_tag = "carp_migration" - typepath = /datum/round_event/carp_migration - weight = 7 - repeatable_weight_decrease = 3 - cost = 4 - requirements = list(10,10,10,10,10,10,10,10,10,10) - high_population_requirement = 10 - earliest_start = 10 MINUTES - repeatable = TRUE - property_weights = list("extended" = 1) - -/datum/dynamic_ruleset/event/communications_blackout - name = "Communications Blackout" - config_tag = "communications_blackout" - typepath = /datum/round_event/communications_blackout - cost = 4 - weight = 2 - repeatable_weight_decrease = 3 - enemy_roles = list("Chief Engineer","Station Engineer") - required_enemies = list(1,1,1,0,0,0,0,0,0,0) - requirements = list(5,5,5,5,5,5,5,5,5,5) - high_population_requirement = 5 - repeatable = TRUE - property_weights = list("extended" = 1, "chaos" = 1) - -/datum/dynamic_ruleset/event/processor_overload - name = "Processor Overload" - config_tag = "processor_overload" - typepath = /datum/round_event/processor_overload - cost = 4 - weight = 2 - repeatable_weight_decrease = 3 - enemy_roles = list("Chief Engineer","Station Engineer") - required_enemies = list(1,1,1,0,0,0,0,0,0,0) - requirements = list(5,5,5,5,5,5,5,5,5,5) - high_population_requirement = 5 - repeatable = TRUE - property_weights = list("extended" = 1, "chaos" = 1) - always_max_weight = TRUE - -/datum/dynamic_ruleset/event/space_dust - name = "Minor Space Dust" - config_tag = "space_dust" - typepath = /datum/round_event/space_dust - cost = 2 - weight = 2 - repeatable_weight_decrease = 1 - enemy_roles = list("Chief Engineer","Station Engineer") - required_enemies = list(1,1,1,0,0,0,0,0,0,0) - requirements = list(5,5,5,5,5,5,5,5,5,5) - high_population_requirement = 5 - repeatable = TRUE - earliest_start = 0 MINUTES - property_weights = list("extended" = 1) - always_max_weight = TRUE - -/datum/dynamic_ruleset/event/major_dust - name = "Major Space Dust" - config_tag = "major_dust" - typepath = /datum/round_event/meteor_wave/major_dust - cost = 4 - weight = 2 - repeatable_weight_decrease = 1 - enemy_roles = list("Chief Engineer","Station Engineer") - required_enemies = list(2,2,2,2,2,2,2,2,2,2) - requirements = list(10,10,10,10,10,10,10,10,10,10) - high_population_requirement = 10 - repeatable = TRUE - property_weights = list("extended" = 1) - -/datum/dynamic_ruleset/event/electrical_storm - name = "Electrical Storm" - config_tag = "electrical_storm" - typepath = /datum/round_event/electrical_storm - cost = 1 - weight = 2 - repeatable_weight_decrease = 1 - enemy_roles = list("Chief Engineer","Station Engineer") - required_enemies = list(1,1,1,0,0,0,0,0,0,0) - requirements = list(5,5,5,5,5,5,5,5,5,5) - high_population_requirement = 5 - repeatable = TRUE - property_weights = list("extended" = 1) - -/datum/dynamic_ruleset/event/heart_attack - name = "Random Heart Attack" - config_tag = "heart_attack" - typepath = /datum/round_event/heart_attack - cost = 3 - weight = 2 - repeatable_weight_decrease = 1 - enemy_roles = list("Medical Doctor","Chief Medical Officer") - required_enemies = list(2,2,2,2,2,2,2,2,2,2) - requirements = list(101,101,101,5,5,5,5,5,5,5) - high_population_requirement = 5 - repeatable = TRUE - property_weights = list("extended" = 1) - always_max_weight = TRUE - -/datum/dynamic_ruleset/event/radiation_storm - name = "Radiation Storm" - config_tag = "radiation_storm" - typepath = /datum/round_event/radiation_storm - cost = 3 - weight = 1 - enemy_roles = list("Chemist","Chief Medical Officer","Geneticist","Medical Doctor","AI","Captain") - required_enemies = list(1,1,1,1,1,1,1,1,1,1) - requirements = list(5,5,5,5,5,5,5,5,5,5) - high_population_requirement = 5 - property_weights = list("extended" = 1,"chaos" = 1) - -/datum/dynamic_ruleset/event/portal_storm_syndicate - name = "Portal Storm" - config_tag = "portal_storm" - typepath = /datum/round_event/portal_storm/syndicate_shocktroop - cost = 10 - weight = 1 - enemy_roles = list("Head of Security","Security Officer","AI","Captain","Shaft Miner") - required_enemies = list(2,2,2,2,2,2,2,2,2,2) - requirements = list(101,101,101,30,30,30,30,30,30,30) - high_population_requirement = 30 - earliest_start = 30 MINUTES - property_weights = list("teamwork" = 1,"chaos" = 1, "extended" = -1) - -/datum/dynamic_ruleset/event/wormholes - name = "Wormholes" - config_tag = "wormhole" - typepath = /datum/round_event/wormholes - cost = 3 - weight = 4 - enemy_roles = list("AI","Medical Doctor","Station Engineer","Head of Personnel","Captain") - required_enemies = list(2,2,2,2,2,2,2,2,2,2) - requirements = list(5,5,5,5,5,5,5,5,5,5) - high_population_requirement = 5 - property_weights = list("extended" = 1) - -/datum/dynamic_ruleset/event/swarmers - name = "Swarmers" - config_tag = "swarmer" - typepath = /datum/round_event/spawn_swarmer - cost = 10 - weight = 1 - earliest_start = 30 MINUTES - enemy_roles = list("AI","Security Officer","Head of Security","Captain","Station Engineer","Atmos Technician","Chief Engineer") - required_enemies = list(4,4,4,4,3,3,2,2,1,1) - requirements = list(101,101,101,101,101,101,101,101,101,101) - high_population_requirement = 5 - property_weights = list("extended" = -2) - -/datum/dynamic_ruleset/event/sentient_disease - name = "Sentient Disease" - config_tag = "sentient_disease" - typepath = /datum/round_event/ghost_role/sentient_disease - enemy_roles = list("Virologist","Chief Medical Officer","Captain","Chemist") - required_enemies = list(2,1,1,1,0,0,0,0,0,0) - required_candidates = 1 - weight = 4 - cost = 5 - requirements = list(30,30,20,20,15,10,10,10,10,5) // yes, it can even happen in "extended"! - property_weights = list("story_potential" = 1, "extended" = 1, "valid" = -2) - high_population_requirement = 5 - -/datum/dynamic_ruleset/event/revenant - name = "Revenant" - config_tag = "revenant" - typepath = /datum/round_event/ghost_role/revenant - enemy_roles = list("Chief Engineer","Station Engineer","Captain","Chaplain","AI") - required_enemies = list(2,1,1,1,0,0,0,0,0,0) - required_candidates = 1 - weight = 4 - cost = 5 - requirements = list(30,30,30,30,20,15,15,15,15,15) - high_population_requirement = 15 - property_weights = list("story_potential" = -2, "extended" = -1) diff --git a/code/game/gamemodes/dynamic/dynamic_storytellers.dm b/code/game/gamemodes/dynamic/dynamic_storytellers.dm index dd281c456f..ed6cb0ba88 100644 --- a/code/game/gamemodes/dynamic/dynamic_storytellers.dm +++ b/code/game/gamemodes/dynamic/dynamic_storytellers.dm @@ -39,9 +39,6 @@ Property weights are added to the config weight of the ruleset. They are: var/midround_injection_cooldown_middle = 0.5*(GLOB.dynamic_first_midround_delay_min + GLOB.dynamic_first_midround_delay_max) mode.midround_injection_cooldown = round(clamp(EXP_DISTRIBUTION(midround_injection_cooldown_middle), GLOB.dynamic_first_midround_delay_min, GLOB.dynamic_first_midround_delay_max)) + world.time - var/event_injection_cooldown_middle = 0.5*(GLOB.dynamic_event_delay_max + GLOB.dynamic_event_delay_min) - mode.event_injection_cooldown = (round(clamp(EXP_DISTRIBUTION(event_injection_cooldown_middle), GLOB.dynamic_event_delay_min, GLOB.dynamic_event_delay_max)) + world.time) - /datum/dynamic_storyteller/proc/calculate_threat() var/threat = 0 for(var/datum/antagonist/A in GLOB.antagonists) @@ -99,10 +96,6 @@ Property weights are added to the config weight of the ruleset. They are: var/midround_injection_cooldown_middle = 0.5*(GLOB.dynamic_midround_delay_max + GLOB.dynamic_midround_delay_min) return round(clamp(EXP_DISTRIBUTION(midround_injection_cooldown_middle), GLOB.dynamic_midround_delay_min, GLOB.dynamic_midround_delay_max)) -/datum/dynamic_storyteller/proc/get_event_cooldown() - var/event_injection_cooldown_middle = 0.5*(GLOB.dynamic_event_delay_max + GLOB.dynamic_event_delay_min) - return round(clamp(EXP_DISTRIBUTION(event_injection_cooldown_middle), GLOB.dynamic_event_delay_min, GLOB.dynamic_event_delay_max)) - /datum/dynamic_storyteller/proc/get_latejoin_cooldown() var/latejoin_injection_cooldown_middle = 0.5*(GLOB.dynamic_latejoin_delay_max + GLOB.dynamic_latejoin_delay_min) return round(clamp(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), GLOB.dynamic_latejoin_delay_min, GLOB.dynamic_latejoin_delay_max)) @@ -195,20 +188,6 @@ Property weights are added to the config weight of the ruleset. They are: drafted_rules[rule] = calced_weight return drafted_rules -/datum/dynamic_storyteller/proc/event_draft() - var/list/drafted_rules = list() - for(var/datum/dynamic_ruleset/event/rule in mode.events) - if(rule.acceptable(mode.current_players[CURRENT_LIVING_PLAYERS].len, mode.threat_level) && (mode.threat_level + 20 - mode.threat) >= rule.cost && rule.ready()) - var/property_weight = 0 - for(var/property in property_weights) - if(property in rule.property_weights) - property_weight += rule.property_weights[property] * property_weights[property] - var/calced_weight = (rule.get_weight() + property_weight) * rule.weight_mult - if(calced_weight > 0) - drafted_rules[rule] = calced_weight - return drafted_rules - - /datum/dynamic_storyteller/chaotic name = "Chaotic" config_tag = "chaotic" @@ -271,9 +250,6 @@ Property weights are added to the config weight of the ruleset. They are: /datum/dynamic_storyteller/random/get_midround_cooldown() return rand(GLOB.dynamic_midround_delay_min/2, GLOB.dynamic_midround_delay_max*2) -/datum/dynamic_storyteller/random/get_event_cooldown() - return rand(GLOB.dynamic_event_delay_min/2, GLOB.dynamic_event_delay_max*2) - /datum/dynamic_storyteller/random/get_latejoin_cooldown() return rand(GLOB.dynamic_latejoin_delay_min/2, GLOB.dynamic_latejoin_delay_max*2) @@ -319,13 +295,6 @@ Property weights are added to the config weight of the ruleset. They are: drafted_rules[rule] = 1 return drafted_rules -/datum/dynamic_storyteller/random/event_draft() - var/list/drafted_rules = list() - for(var/datum/dynamic_ruleset/event/rule in mode.events) - if(rule.acceptable(mode.current_players[CURRENT_LIVING_PLAYERS].len, mode.threat_level) && rule.ready()) - drafted_rules[rule] = 1 - return drafted_rules - /datum/dynamic_storyteller/story name = "Story" config_tag = "story" @@ -365,7 +334,7 @@ Property weights are added to the config weight of the ruleset. They are: /datum/dynamic_storyteller/no_antag name = "Extended" config_tag = "semiextended" - desc = "No standard antags. Threatening events may still spawn." + desc = "No standard antags." curve_centre = -5 curve_width = 0.5 flags = NO_ASSASSIN | FORCE_IF_WON @@ -377,15 +346,3 @@ Property weights are added to the config weight of the ruleset. They are: /datum/dynamic_storyteller/no_antag/get_injection_chance(dry_run) return 0 - -/datum/dynamic_storyteller/extended - name = "Super Extended" - config_tag = "extended" - desc = "No antags. No dangerous events." - curve_centre = -20 - weight = 0 - curve_width = 0.5 - -/datum/dynamic_storyteller/extended/on_start() - ..() - GLOB.dynamic_forced_extended = TRUE diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index cfb4c9a120..795508320b 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -112,7 +112,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event var/turf/T = get_turf(loc) ram_turf(T) - if(prob(10) && !isspaceturf(T))//randomly takes a 'hit' from ramming + if(prob(10) && !isspaceturf(T) && !istype(T, /turf/closed/mineral) && !istype(T, /turf/open/floor/plating/asteroid))//randomly takes a 'hit' from ramming get_hit() /obj/effect/meteor/Destroy() @@ -136,7 +136,8 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event if(A) ram_turf(get_turf(A)) playsound(src.loc, meteorsound, 40, 1) - get_hit() + if(!istype(A, /turf/closed/mineral) && !istype(A, /turf/open/floor/plating/asteroid)) + get_hit() /obj/effect/meteor/proc/ram_turf(turf/T) //first bust whatever is in the turf diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 2b7411d03f..b82d932e6d 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -551,4 +551,4 @@ Class Procs: AM.pixel_y = -8 + (round( . / 3)*8) /obj/machinery/rust_heretic_act() - take_damage(500, BRUTE, "melee", 1) + take_damage(500, BRUTE, "melee", 1) diff --git a/code/game/machinery/computer/arcade/minesweeper.dm b/code/game/machinery/computer/arcade/minesweeper.dm index ad325455ad..a9c9b5dfd9 100644 --- a/code/game/machinery/computer/arcade/minesweeper.dm +++ b/code/game/machinery/computer/arcade/minesweeper.dm @@ -178,9 +178,12 @@ table[y1][x1] += 10 if(href_list["same_board"]) //Reset the board... kinda if(game_status != MINESWEEPER_GAME_PLAYING) + mine_sound = TRUE game_status = MINESWEEPER_GAME_PLAYING if(table[y1][x1] >= 10) //If revealed, become unrevealed! - playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) + if(mine_sound) + playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) + mine_sound = FALSE table[y1][x1] -= 10 if(table[y1][x1] > 10 && !reset_board) safe_squares_revealed += 1 diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm index a8fa31d5fb..0b89b117c4 100644 --- a/code/game/machinery/mass_driver.dm +++ b/code/game/machinery/mass_driver.dm @@ -38,3 +38,14 @@ if(stat & (BROKEN|NOPOWER)) return drive() + +/obj/machinery/mass_driver/pressure_plate + name = "pressure plated mass driver" + var/drive_delay = 10 + +/obj/machinery/mass_driver/pressure_plate/Crossed(atom/movable/O) + . = ..() + if(isliving(O)) + var/mob/living/L = O + to_chat(L, "You feel something click beneath you!") + addtimer(CALLBACK(src, .proc/drive), drive_delay) \ No newline at end of file diff --git a/code/game/objects/effects/anomalies.dm b/code/game/objects/effects/anomalies.dm index 871fe838d7..7e3a5205de 100644 --- a/code/game/objects/effects/anomalies.dm +++ b/code/game/objects/effects/anomalies.dm @@ -17,11 +17,15 @@ var/countdown_colour var/obj/effect/countdown/anomaly/countdown -/obj/effect/anomaly/Initialize(mapload, new_lifespan) + /// chance we drop a core when neutralized + var/core_drop_chance = 100 + +/obj/effect/anomaly/Initialize(mapload, new_lifespan, core_drop_chance = 100) . = ..() GLOB.poi_list |= src START_PROCESSING(SSobj, src) impact_area = get_area(src) + src.core_drop_chance = core_drop_chance if (!impact_area) return INITIALIZE_HINT_QDEL @@ -54,6 +58,8 @@ GLOB.poi_list.Remove(src) STOP_PROCESSING(SSobj, src) qdel(countdown) + if(aSignal) + QDEL_NULL(aSignal) return ..() /obj/effect/anomaly/proc/anomalyEffect() @@ -70,12 +76,12 @@ /obj/effect/anomaly/proc/anomalyNeutralize() new /obj/effect/particle_effect/smoke/bad(loc) - for(var/atom/movable/O in src) - O.forceMove(drop_location()) + if(prob(core_drop_chance)) + aSignal.forceMove(drop_location()) + aSignal = null qdel(src) - /obj/effect/anomaly/attackby(obj/item/I, mob/user, params) if(I.tool_behaviour == TOOL_ANALYZER) //revert if runtimed to_chat(user, "Analyzing... [src]'s unstable field is fluctuating along frequency [format_frequency(aSignal.frequency)], code [aSignal.code].") diff --git a/code/game/objects/effects/decals/decal.dm b/code/game/objects/effects/decals/decal.dm index b280851888..5f312f2bf3 100644 --- a/code/game/objects/effects/decals/decal.dm +++ b/code/game/objects/effects/decals/decal.dm @@ -46,4 +46,5 @@ var/turf/T = loc if(!istype(T)) //you know this will happen somehow CRASH("Turf decal initialized in an object/nullspace") - T.AddElement(/datum/element/decal, icon, icon_state, dir, CLEAN_GOD, color, null, null, alpha) + var/turn_dir = 180 - dir2angle(T.dir) //Turning a dir by 0 results in a roulette of random dirs. + T.AddElement(/datum/element/decal, icon, icon_state, turn_dir ? turn(dir, turn_dir) : dir, CLEAN_GOD, color, null, null, alpha) diff --git a/code/game/objects/items/charter.dm b/code/game/objects/items/charter.dm index 5ed719ff94..9b658bc5f1 100644 --- a/code/game/objects/items/charter.dm +++ b/code/game/objects/items/charter.dm @@ -13,6 +13,7 @@ var/ignores_timeout = FALSE var/response_timer_id = null var/approval_time = 600 + var/allow_unicode = FALSE var/static/regex/standard_station_regex @@ -48,6 +49,9 @@ if(!new_name) return + if(!allow_unicode && (length(new_name) != length_char(new_name))) + to_chat(user, "Unicode is not allowed. Adminhelp if you want to use it so badly.") + return log_game("[key_name(user)] has proposed to name the station as \ [new_name]") diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index 37d19783b5..8e59e91e38 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -390,7 +390,7 @@ /obj/item/circuitboard/machine/thermomachine/examine() . = ..() - . += "It is set to layer [pipe_layer]." + . += "It is set to layer [pipe_layer]. Use a Multitool on the circuit to change this." /obj/item/circuitboard/machine/thermomachine/heater name = "Heater (Machine Board)" @@ -1146,3 +1146,8 @@ build_path = /obj/machinery/atmospherics/components/unary/shuttle/heater req_components = list(/obj/item/stock_parts/micro_laser = 2, /obj/item/stock_parts/matter_bin = 1) + +/obj/item/circuitboard/machine/explosive_compressor + name = "Explosive Compressor (Machine Board)" + build_path = /obj/machinery/research/explosive_compressor + req_components = list(/obj/item/stock_parts/matter_bin = 3) diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index 767f8fc395..6396a4fe3d 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -394,8 +394,6 @@ to_chat(user, "[src] are recharging!") return - user.stop_pulling() //User has hands full, and we don't care about anyone else pulling on it, their problem. CLEAR!! - if(user.a_intent == INTENT_DISARM) do_disarm(M, user) return @@ -447,8 +445,7 @@ if(do_after(user, isnull(defib?.disarm_shock_time)? disarm_shock_time : defib.disarm_shock_time, target = M)) M.visible_message("[user] zaps [M] with [src]!", \ "[user] zaps [M] with [src]!") - M.adjustStaminaLoss(50) - M.DefaultCombatKnockdown(100) + M.DefaultCombatKnockdown(140) M.updatehealth() //forces health update before next life tick playsound(src, 'sound/machines/defib_zap.ogg', 50, 1, -1) M.emote("gasp") diff --git a/code/game/objects/items/devices/portable_chem_mixer.dm b/code/game/objects/items/devices/portable_chem_mixer.dm index 25ecef5955..3e1b20cfc2 100644 --- a/code/game/objects/items/devices/portable_chem_mixer.dm +++ b/code/game/objects/items/devices/portable_chem_mixer.dm @@ -113,8 +113,7 @@ if (loc != user) return ..() if(SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED)) - ui_interact(user) - return + INVOKE_ASYNC(src, /datum.proc/ui_interact, user) /obj/item/storage/portable_chem_mixer/attack_self(mob/user) if(loc == user) diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index 32d9c02a27..8b0d46be44 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -289,3 +289,9 @@ . = TRUE update_icon() + +/** + * Returns if this is ready to be detonated. Checks if both tanks are in place. + */ +/obj/item/transfer_valve/proc/ready() + return tank_one && tank_two diff --git a/code/game/objects/items/dualsaber.dm b/code/game/objects/items/dualsaber.dm index cf5c3d4fc5..6cf6a524de 100644 --- a/code/game/objects/items/dualsaber.dm +++ b/code/game/objects/items/dualsaber.dm @@ -26,6 +26,7 @@ wound_bonus = -110 bare_wound_bonus = 20 block_parry_data = /datum/block_parry_data/dual_esword + block_chance = 60 var/hacked = FALSE /// Can this reflect all energy projectiles? var/can_reflect = TRUE @@ -38,7 +39,8 @@ var/wielded = FALSE // track wielded status on item var/slowdown_wielded = 0 -/datum/block_parry_data/dual_esword +/datum/block_parry_data/dual_esword // please run at the man going apeshit with his funny doublesword + can_block_directions = BLOCK_DIR_NORTH | BLOCK_DIR_NORTHEAST | BLOCK_DIR_NORTHWEST | BLOCK_DIR_WEST | BLOCK_DIR_EAST block_damage_absorption = 2 block_damage_multiplier = 0.15 block_damage_multiplier_override = list( @@ -50,10 +52,10 @@ block_lock_sprinting = TRUE // no attacking while blocking block_lock_attacking = TRUE - block_projectile_mitigation = 75 + block_projectile_mitigation = 85 // more efficient vs projectiles block_stamina_efficiency_override = list( - TEXT_ATTACK_TYPE_PROJECTILE = 4 + TEXT_ATTACK_TYPE_PROJECTILE = 6 ) parry_time_windup = 0 diff --git a/code/game/objects/items/miscellaneous.dm b/code/game/objects/items/miscellaneous.dm index 6f1aec287b..7e14fb9d35 100644 --- a/code/game/objects/items/miscellaneous.dm +++ b/code/game/objects/items/miscellaneous.dm @@ -255,7 +255,7 @@ /obj/item/choice_beacon/box/plushie/generate_display_names() var/list/plushie_list = list() //plushie set 1: just subtypes of /obj/item/toy/plush - var/list/plushies_set_one = subtypesof(/obj/item/toy/plush) - list(/obj/item/toy/plush/narplush, /obj/item/toy/plush/awakenedplushie, /obj/item/toy/plush/random_snowflake, /obj/item/toy/plush/random) //don't allow these special ones (you can still get narplush/hugbox) + var/list/plushies_set_one = subtypesof(/obj/item/toy/plush) - list(/obj/item/toy/plush/narplush, /obj/item/toy/plush/awakenedplushie, /obj/item/toy/plush/random_snowflake, /obj/item/toy/plush/plushling, /obj/item/toy/plush/random) //don't allow these special ones (you can still get narplush/hugbox) for(var/V in plushies_set_one) var/atom/A = V plushie_list[initial(A.name)] = A @@ -272,4 +272,3 @@ icon_state = "skub" w_class = WEIGHT_CLASS_BULKY attack_verb = list("skubbed") - diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm index a3da49ed89..9a8f1214f0 100644 --- a/code/game/objects/items/plushes.dm +++ b/code/game/objects/items/plushes.dm @@ -167,7 +167,7 @@ return log_game("[key_name(user)] activated a hidden grenade in [src].") grenade.preprime(user, msg = FALSE, volume = 10) - SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT,"plushpet", /datum/mood_event/plushpet) + SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT,"plushpet", /datum/mood_event/plushpet) else to_chat(user, "You try to pet [src], but it has no stuffing. Aww...") SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT,"plush_nostuffing", /datum/mood_event/plush_nostuffing) @@ -688,18 +688,6 @@ GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths()) icon_state = "scrubpuppy" item_state = "scrubpuppy" -/obj/item/toy/plush/borgplushie/meddrake - name = "MediDrake Plushie" - desc = "An adorable stuffed toy of a Medidrake." - icon_state = "meddrake" - item_state = "meddrake" - -/obj/item/toy/plush/borgplushie/secdrake - name = "SecDrake Plushie" - desc = "An adorable stuffed toy of a Secdrake." - icon_state = "secdrake" - item_state = "secdrake" - /obj/item/toy/plush/aiplush name = "AI plushie" desc = "A little stuffed toy AI core... it appears to be malfunctioning." @@ -766,8 +754,8 @@ GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths()) attack_verb = list("headbutt", "scritched", "bit") squeak_override = list('modular_citadel/sound/voice/nya.ogg' = 1) can_random_spawn = FALSE - - + + /obj/item/toy/plush/hairball name = "Hairball" desc = "A bundle of undigested fibers and scales. Yuck." @@ -777,3 +765,78 @@ GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths()) squeak_override = list('sound/misc/splort.ogg'=1) attack_verb = list("sploshed", "splorted", "slushed") can_random_spawn = FALSE + +/obj/item/toy/plush/plushling + name = "peculiar plushie" + desc = "An adorable stuffed toy- wait, did it just move?" + can_random_spawn = FALSE + var/absorb_cooldown = 100 //ticks cooldown between absorbs + var/next_absorb = 0 //When can it absorb another plushie + var/check_interval = 20 + var/next_check = 0 + +//Overrides parent proc +/obj/item/toy/plush/plushling/attack_self(mob/user) + if(!user) //hmmmmm + return + to_chat(user, "You try to pet the plushie, but recoil as it bites your hand instead! OW!") + SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT,"plush_bite", /datum/mood_event/plush_bite) + var/mob/living/carbon/human/H = user + if(!H) + return //Type safety. + H.apply_damage(5, BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) + addtimer(CALLBACK(H, /mob/living/carbon/human.proc/dropItemToGround, src, TRUE), 1) + +/obj/item/toy/plush/plushling/New() + var/initial_state = pick("plushie_lizard", "plushie_snake", "plushie_slime", "fox") + icon_state = initial_state + item_state = initial_state + START_PROCESSING(SSobj, src) + . = ..() + +/obj/item/toy/plush/plushling/Destroy() + STOP_PROCESSING(SSobj, src) + . = ..() + +/obj/item/toy/plush/plushling/process() + if(world.time < next_absorb || world.time < next_check) + return + next_check = world.time + check_interval + var/obj/item/toy/plush/target + for(var/obj/item/toy/plush/possible_target in loc) //First, it tries to get anything in its same location, be it a tile or a backpack + if(possible_target == src || istype(possible_target, /obj/item/toy/plush/plushling)) + continue + target = possible_target + break + if(!target) + if(!isturf(loc)) + return + for(var/obj/item/toy/plush/P in oview(1, src)) //If that doesn't work, it hunts for plushies adjacent to its own tile + if(istype(P, /obj/item/toy/plush/plushling)) //These do not hunt their own kind + continue + src.throw_at(P, 1, 2) + visible_message("[src] leaps at [P]!") + break + return + if(istype(target, /obj/item/toy/plush/plushling)) //These do not consume their own. + return + next_absorb = world.time + absorb_cooldown + plushie_absorb(target) + +/obj/item/toy/plush/plushling/proc/plushie_absorb(obj/item/toy/plush/victim) + if(!victim) + return + visible_message("[src] gruesomely mutilliates [victim], leaving nothing more than dust!") + name = victim.name + desc = victim.desc + " Wait, did it just move..?" + icon_state = victim.icon_state + item_state = victim.item_state + squeak_override = victim.squeak_override + attack_verb = victim.attack_verb + new /obj/effect/decal/cleanable/ash(get_turf(victim)) + qdel(victim) + +/obj/item/toy/plush/plushling/love(obj/item/toy/plush/Kisser, mob/living/user) //You shouldn't have come here, poor plush. + if(!Kisser) + return + plushie_absorb(Kisser) diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 7ba2196184..a96b0104f1 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -269,8 +269,8 @@ to_chat(user, "[M] is at full health.") return FALSE user.visible_message("[user] applies \the [src] on [M].", "You apply \the [src] on [M].") - return heal_carbon(M, user, heal_brute, heal_burn) - + M.heal_bodypart_damage(heal_brute) + return TRUE to_chat(user, "You can't heal [M] with \the [src]!") /obj/item/stack/medical/ointment diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index 7692278ba3..426958b99a 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -117,6 +117,7 @@ GLOBAL_LIST_INIT(diamond_recipes, list ( \ new/datum/stack_recipe("Captain Statue", /obj/structure/statue/diamond/captain, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("AI Hologram Statue", /obj/structure/statue/diamond/ai1, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("AI Core Statue", /obj/structure/statue/diamond/ai2, 5, one_per_turf = 1, on_floor = 1), \ +// new/datum/stack_recipe("diamond brick", /obj/item/ingot/diamond, 6, time = 100), \ not yet )) /obj/item/stack/sheet/mineral/diamond/get_main_recipes() @@ -145,6 +146,7 @@ GLOBAL_LIST_INIT(uranium_recipes, list ( \ new/datum/stack_recipe("uranium tile", /obj/item/stack/tile/mineral/uranium, 1, 4, 20), \ new/datum/stack_recipe("Nuke Statue", /obj/structure/statue/uranium/nuke, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("Engineer Statue", /obj/structure/statue/uranium/eng, 5, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("uranium ingot", /obj/item/ingot/uranium, 6, time = 100), \ )) /obj/item/stack/sheet/mineral/uranium/get_main_recipes() @@ -177,6 +179,7 @@ GLOBAL_LIST_INIT(plasma_recipes, list ( \ new/datum/stack_recipe("plasma door", /obj/structure/mineral_door/transparent/plasma, 10, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("plasma tile", /obj/item/stack/tile/mineral/plasma, 1, 4, 20), \ new/datum/stack_recipe("Scientist Statue", /obj/structure/statue/plasma/scientist, 5, one_per_turf = 1, on_floor = 1), \ +// new/datum/stack_recipe("plasma ingot", /obj/item/ingot/plasma, 6, time = 100), \ no )) /obj/item/stack/sheet/mineral/plasma/get_main_recipes() @@ -221,6 +224,7 @@ GLOBAL_LIST_INIT(gold_recipes, list ( \ new/datum/stack_recipe("RD Statue", /obj/structure/statue/gold/rd, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("Simple Crown", /obj/item/clothing/head/crown, 5), \ new/datum/stack_recipe("CMO Statue", /obj/structure/statue/gold/cmo, 5, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("gold ingot", /obj/item/ingot/gold, 6, time = 100), \ )) /obj/item/stack/sheet/mineral/gold/get_main_recipes() @@ -252,6 +256,7 @@ GLOBAL_LIST_INIT(silver_recipes, list ( \ new/datum/stack_recipe("Sec Officer Statue", /obj/structure/statue/silver/sec, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("Sec Borg Statue", /obj/structure/statue/silver/secborg, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("Med Borg Statue", /obj/structure/statue/silver/medborg, 5, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("silver ingot", /obj/item/ingot/silver, 6, time = 100), \ )) /obj/item/stack/sheet/mineral/silver/get_main_recipes() @@ -278,6 +283,7 @@ GLOBAL_LIST_INIT(silver_recipes, list ( \ GLOBAL_LIST_INIT(bananium_recipes, list ( \ new/datum/stack_recipe("bananium tile", /obj/item/stack/tile/mineral/bananium, 1, 4, 20), \ new/datum/stack_recipe("Clown Statue", /obj/structure/statue/bananium/clown, 5, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("hilarious ingot", /obj/item/ingot/bananium, 6, time = 100), \ )) /obj/item/stack/sheet/mineral/bananium/get_main_recipes() @@ -306,6 +312,7 @@ GLOBAL_LIST_INIT(bananium_recipes, list ( \ GLOBAL_LIST_INIT(titanium_recipes, list ( \ new/datum/stack_recipe("titanium tile", /obj/item/stack/tile/mineral/titanium, 1, 4, 20), \ + new/datum/stack_recipe("titanic ingot", /obj/item/ingot/titanium, 6, time = 100), \ )) /obj/item/stack/sheet/mineral/titanium/get_main_recipes() @@ -353,6 +360,7 @@ GLOBAL_LIST_INIT(plastitanium_recipes, list ( \ */ GLOBAL_LIST_INIT(adamantine_recipes, list( new /datum/stack_recipe("incomplete servant golem shell", /obj/item/golem_shell/servant, req_amount=1, res_amount=1), + new/datum/stack_recipe("adamant ingot", /obj/item/ingot/adamantine, 6, time = 100), \ )) /obj/item/stack/sheet/mineral/adamantine diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 645051b7c2..c3028c2fd5 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -121,6 +121,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ new/datum/stack_recipe("iron door", /obj/structure/mineral_door/iron, 20, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("pestle", /obj/item/pestle, 1, time = 50), \ new/datum/stack_recipe("floodlight frame", /obj/structure/floodlight_frame, 5, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("iron ingot", /obj/item/ingot/iron, 6, time = 100), \ )) /obj/item/stack/sheet/metal @@ -556,6 +557,9 @@ GLOBAL_LIST_INIT(runed_metal_recipes, list ( \ new/datum/stack_recipe("forge", /obj/structure/destructible/cult/forge, 3, time = 40, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("archives", /obj/structure/destructible/cult/tome, 3, time = 40, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("altar", /obj/structure/destructible/cult/talisman, 3, time = 40, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("anvil", /obj/structure/anvil/obtainable/narsie, 4, time = 40, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("runic ingot", /obj/item/ingot/cult, 2, time = 100), \ + new/datum/stack_recipe("rune smith's hammer", /obj/item/melee/smith/hammer/narsie, 6), \ )) /obj/item/stack/sheet/runed_metal @@ -618,6 +622,8 @@ GLOBAL_LIST_INIT(brass_recipes, list ( \ new/datum/stack_recipe("brass bar stool", /obj/structure/chair/stool/bar/brass, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("brass stool", /obj/structure/chair/stool/brass, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("brass table frame", /obj/structure/table_frame/brass, 1, time = 5, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("brass anvil", /obj/structure/anvil/obtainable/ratvar, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("brass furnace", /obj/structure/furnace/infinite/ratvar, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ null, \ new/datum/stack_recipe("sender - pressure sensor", /obj/structure/destructible/clockwork/trap/trigger/pressure_sensor, 2, time = 20, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("sender - mech sensor", /obj/structure/destructible/clockwork/trap/trigger/pressure_sensor/mech, 2, time = 20, one_per_turf = TRUE, on_floor = TRUE), \ @@ -629,6 +635,8 @@ GLOBAL_LIST_INIT(brass_recipes, list ( \ new/datum/stack_recipe("receiver - power nullifier", /obj/structure/destructible/clockwork/trap/power_nullifier, 5, time = 20, one_per_turf = TRUE, on_floor = TRUE, placement_checks = STACK_CHECK_CARDINALS), \ null, \ new/datum/stack_recipe("brass flask", /obj/item/reagent_containers/food/drinks/bottle/holyoil/empty), \ + new/datum/stack_recipe("brass smith's hammer", /obj/item/melee/smith/hammer/ratvar, 6), \ + new/datum/stack_recipe("brass ingot", /obj/item/ingot/ratvar, 6, time = 100), \ )) /obj/item/stack/tile/brass @@ -684,7 +692,10 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \ new/datum/stack_recipe("bronze chair", /obj/structure/chair/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("bronze bar stool", /obj/structure/chair/stool/bar/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("bronze stool", /obj/structure/chair/stool/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ - new /datum/stack_recipe("bronze floor tiles", /obj/item/stack/tile/bronze, 1, 4, 20), \ + new/datum/stack_recipe("bronze anvil",/obj/structure/anvil/obtainable/bronze, 20, time = 110, one_per_turf = TRUE, on_floor = TRUE), \ + null, + new/datum/stack_recipe("bronze ingot", /obj/item/ingot/bronze, 6, time = 100), \ + new/datum/stack_recipe("bronze floor tiles", /obj/item/stack/tile/bronze, 1, 4, 20), \ )) /obj/item/stack/sheet/bronze diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 0001494fdd..590df34cde 100755 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -815,3 +815,18 @@ attack_verb = list("bashed", "slashes", "prods", "pokes") fitting_swords = list(/obj/item/melee/rapier) starting_sword = /obj/item/melee/rapier + +/obj/item/storage/belt/sabre/twin + name = "twin sheath" + desc = "Two sheaths. One is capable of holding a katana (or bokken) and the other a wakizashi. You could put two wakizashis in if you really wanted to. Now you can really roleplay as a samurai." + icon_state = "twinsheath" + item_state = "quiver" //this'll do. + w_class = WEIGHT_CLASS_BULKY + fitting_swords = list(/obj/item/melee/smith/wakizashi, /obj/item/melee/smith/twohand/katana, /obj/item/melee/bokken) + starting_sword = null + +/obj/item/storage/belt/sabre/twin/ComponentInitialize() + . = ..() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.max_items = 2 + STR.max_w_class = WEIGHT_CLASS_BULKY + WEIGHT_CLASS_NORMAL //katana and waki. diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 653e95c21e..3f2dc2506a 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -237,6 +237,11 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 resistance_flags = FIRE_PROOF total_mass = TOTAL_MASS_MEDIEVAL_WEAPON +/obj/item/katana/lavaland + desc = "Woefully underpowered in Lavaland." + block_chance = 30 + force = 25 //Like a fireaxe but one handed and can block! + /obj/item/katana/cursed slot_flags = null diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index bcdf509fbe..3de28b38e8 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -204,9 +204,6 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e /obj/proc/acid_processing() . = 1 if(!(resistance_flags & ACID_PROOF)) - for(var/armour_value in armor) - if(armour_value != "acid" && armour_value != "fire") - armor = armor.modifyAllRatings(0 - round(sqrt(acid_level)*0.1)) if(prob(33)) playsound(loc, 'sound/items/welder.ogg', 150, 1) take_damage(min(1 + round(sqrt(acid_level)*0.3), 300), BURN, "acid", 0) diff --git a/code/game/objects/structures/lavaland/necropolis_tendril.dm b/code/game/objects/structures/lavaland/necropolis_tendril.dm index 2911babd83..edc4f0c91f 100644 --- a/code/game/objects/structures/lavaland/necropolis_tendril.dm +++ b/code/game/objects/structures/lavaland/necropolis_tendril.dm @@ -10,6 +10,7 @@ max_mobs = 3 max_integrity = 250 mob_types = list(/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/tendril) + var/loot_type = /obj/structure/closet/crate/necropolis/tendril/all move_resist=INFINITY // just killing it tears a massive hole in the ground, let's not move it anchored = TRUE @@ -41,7 +42,7 @@ GLOBAL_LIST_INIT(tendrils, list()) /obj/structure/spawner/lavaland/deconstruct(disassembled) new /obj/effect/collapse(loc) - new /obj/structure/closet/crate/necropolis/tendril(loc) + new loot_type(loc) return ..() diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 758f824727..877d236e84 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -13,7 +13,7 @@ var/icon_regular_floor = "floor" //used to remember what icon the tile should have by default var/icon_plating = "plating" - thermal_conductivity = 0.040 + thermal_conductivity = 0.004 heat_capacity = 10000 intact = 1 var/broken = 0 diff --git a/code/game/turfs/simulated/floor/reinf_floor.dm b/code/game/turfs/simulated/floor/reinf_floor.dm index 03045674e4..42b4707b50 100644 --- a/code/game/turfs/simulated/floor/reinf_floor.dm +++ b/code/game/turfs/simulated/floor/reinf_floor.dm @@ -3,7 +3,7 @@ name = "reinforced floor" desc = "Extremely sturdy." icon_state = "engine" - thermal_conductivity = 0.025 + thermal_conductivity = 0.0025 heat_capacity = INFINITY floor_tile = /obj/item/stack/rods footstep = FOOTSTEP_PLATING diff --git a/code/game/turfs/simulated/wall/mineral_walls.dm b/code/game/turfs/simulated/wall/mineral_walls.dm index ed48c24462..5d928f377e 100644 --- a/code/game/turfs/simulated/wall/mineral_walls.dm +++ b/code/game/turfs/simulated/wall/mineral_walls.dm @@ -90,7 +90,7 @@ icon = 'icons/turf/walls/plasma_wall.dmi' icon_state = "plasma" sheet_type = /obj/item/stack/sheet/mineral/plasma - thermal_conductivity = 0.04 + thermal_conductivity = 0.004 canSmoothWith = list(/turf/closed/wall/mineral/plasma, /obj/structure/falsewall/plasma) /turf/closed/wall/mineral/plasma/attackby(obj/item/W, mob/user, params) diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 9ff4f668a4..402ab36947 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -138,7 +138,7 @@ if(prob(hardness)) playsound(src, 'sound/effects/meteorimpact.ogg', 100, TRUE) user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ), forced = "hulk") - hulk_recoil(arm, user) + //hulk_recoil(arm, user) // citadel edit - no, hulks are already subject to stamina combat dismantle_wall(1) else diff --git a/code/game/world.dm b/code/game/world.dm index 2d174c86e5..121d51136d 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -11,6 +11,11 @@ GLOBAL_LIST(topic_status_cache) /world/New() if (fexists(EXTOOLS)) call(EXTOOLS, "maptick_initialize")() + #ifdef EXTOOLS_LOGGING + call(EXTOOLS, "init_logging")() + else + CRASH("[EXTOOLS] does not exist!") + #endif enable_debugger() #ifdef REFERENCE_TRACKING enable_reference_tracking() @@ -274,6 +279,7 @@ GLOBAL_LIST(topic_status_cache) GM.__gasmixture_unregister() num_deleted++ log_world("Deallocated [num_deleted] gas mixtures") + shutdown_logging() // makes sure the thread is closed before end, else we terminate ..() /world/proc/update_status() diff --git a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm index 1fcffff810..5af2a49b1b 100644 --- a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm +++ b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm @@ -138,7 +138,7 @@ if(owner.current.gender == MALE) if(prob(10)) // Gender override bloodsucker_reputation = pick("King of the Damned", "Blood King", "Emperor of Blades", "Sinlord", "God-King") - else + else if(owner.current.gender == FEMALE) if(prob(10)) // Gender override bloodsucker_reputation = pick("Queen of the Damned", "Blood Queen", "Empress of Blades", "Sinlady", "God-Queen") @@ -341,10 +341,12 @@ //This handles the application of antag huds/special abilities /datum/antagonist/bloodsucker/apply_innate_effects(mob/living/mob_override) + RegisterSignal(owner.current,COMSIG_LIVING_BIOLOGICAL_LIFE,.proc/LifeTick) return //This handles the removal of antag huds/special abilities /datum/antagonist/bloodsucker/remove_innate_effects(mob/living/mob_override) + UnregisterSignal(owner.current,COMSIG_LIVING_BIOLOGICAL_LIFE) return //Assign default team and creates one for one of a kind team antagonists diff --git a/code/modules/antagonists/bloodsucker/powers/brawn.dm b/code/modules/antagonists/bloodsucker/powers/brawn.dm index cf0393ff3a..5444cccd3f 100644 --- a/code/modules/antagonists/bloodsucker/powers/brawn.dm +++ b/code/modules/antagonists/bloodsucker/powers/brawn.dm @@ -1,7 +1,7 @@ /datum/action/bloodsucker/targeted/brawn - name = "Brawn"//"Cellular Emporium" + name = "Brawn" desc = "Snap restraints with ease, or deal terrible damage with your bare hands." button_icon_state = "power_strength" bloodcost = 10 @@ -107,8 +107,6 @@ if(user_C.handcuffed) var/obj/O = user_C.get_item_by_slot(SLOT_HANDCUFFED) if(istype(O)) - //user_C.visible_message("[user_C] attempts to remove [O]!", \ - // "You snap [O] like it's nothing!") user_C.clear_cuffs(O,TRUE) playsound(get_turf(usr), 'sound/effects/grillehit.ogg', 80, 1, -1) return TRUE @@ -128,8 +126,6 @@ if(user_C.legcuffed) var/obj/O = user_C.get_item_by_slot(SLOT_LEGCUFFED) if(istype(O)) - //user_C.visible_message("[user_C] attempts to remove [O]!", \ - // "You snap [O] like it's nothing!") user_C.clear_cuffs(O,TRUE) playsound(get_turf(usr), 'sound/effects/grillehit.ogg', 80, 1, -1) return TRUE diff --git a/code/modules/antagonists/bloodsucker/powers/feed.dm b/code/modules/antagonists/bloodsucker/powers/feed.dm index caca020b32..81ebdbe4e2 100644 --- a/code/modules/antagonists/bloodsucker/powers/feed.dm +++ b/code/modules/antagonists/bloodsucker/powers/feed.dm @@ -165,8 +165,8 @@ // Broadcast Message if(amSilent) //if (!iscarbon(target)) - // user.visible_message("[user] shifts [target] closer to [user.p_their()] mouth.", \ - // "You secretly slip your fangs into [target]'s flesh.", \ + // user.visible_message("[user] shifts [target] closer to [user.p_their()] mouth.", + // "You secretly slip your fangs into [target]'s flesh.", // vision_distance = 2, ignored_mobs=target) // Only people who AREN'T the target will notice this action. //else var/deadmessage = target.stat == DEAD ? "" : " [target.p_they(TRUE)] looks dazed, and will not remember this." diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index d06ebe9d9d..242538a1e5 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -94,6 +94,7 @@ B.decoy_override = FALSE remove_changeling_powers() owner.special_role = null + owner.current.hud_used?.lingchemdisplay?.invisibility = INVISIBILITY_ABSTRACT . = ..() /datum/antagonist/changeling/proc/remove_clownmut() @@ -225,6 +226,8 @@ else //not dead? no chem/geneticdamage caps. chem_charges = min(max(0, chem_charges + chem_recharge_rate - chem_recharge_slowdown), chem_storage) geneticdamage = max(0, geneticdamage-1) + owner.current.hud_used?.lingchemdisplay?.invisibility = 0 + owner.current.hud_used?.lingchemdisplay?.maptext = "
[round(chem_charges)]
" /datum/antagonist/changeling/proc/get_dna(dna_owner) @@ -357,10 +360,12 @@ B.organ_flags &= ~ORGAN_VITAL B.decoy_override = TRUE update_changeling_icons_added() + RegisterSignal(owner.current,COMSIG_LIVING_BIOLOGICAL_LIFE,.proc/regenerate) return /datum/antagonist/changeling/remove_innate_effects() update_changeling_icons_removed() + UnregisterSignal(owner.current,COMSIG_LIVING_BIOLOGICAL_LIFE) return diff --git a/code/modules/antagonists/cult/cult_structures.dm b/code/modules/antagonists/cult/cult_structures.dm index 5803941f36..a388621c92 100644 --- a/code/modules/antagonists/cult/cult_structures.dm +++ b/code/modules/antagonists/cult/cult_structures.dm @@ -174,7 +174,14 @@ new reward(get_turf(src)) to_chat(user, "You work the forge as dark knowledge guides your hands, creating the [choice]!") - +/obj/structure/destructible/cult/forge/attackby(obj/item/I, mob/user) + if(!iscultist(user)) + to_chat(user, "The heat radiating from [src] pushes you back.") + return + if(istype(I, /obj/item/ingot)) + var/obj/item/ingot/notsword = I + to_chat(user, "You heat the [notsword] in the [src].") + notsword.workability = "shapeable" /obj/structure/destructible/cult/pylon name = "pylon" diff --git a/code/modules/antagonists/disease/disease_event.dm b/code/modules/antagonists/disease/disease_event.dm index 4365fd7538..385cee998b 100644 --- a/code/modules/antagonists/disease/disease_event.dm +++ b/code/modules/antagonists/disease/disease_event.dm @@ -3,7 +3,6 @@ name = "Spawn Sentient Disease" typepath = /datum/round_event/ghost_role/sentient_disease weight = 7 - gamemode_blacklist = list("dynamic") max_occurrences = 1 min_players = 5 diff --git a/code/modules/antagonists/eldritch_cult/eldritch_antag.dm b/code/modules/antagonists/eldritch_cult/eldritch_antag.dm index 79dfbdd7c3..81bc090460 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_antag.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_antag.dm @@ -30,6 +30,7 @@ /datum/antagonist/heretic/on_gain() var/mob/living/current = owner.current + owner.teach_crafting_recipe(/datum/crafting_recipe/heretic/codex) if(ishuman(current)) forge_primary_objectives() gain_knowledge(/datum/eldritch_knowledge/spell/basic) @@ -41,7 +42,6 @@ START_PROCESSING(SSprocessing,src) if(give_equipment) equip_cultist() - owner.teach_crafting_recipe(/datum/crafting_recipe/heretic/codex) return ..() /datum/antagonist/heretic/on_removal() @@ -111,17 +111,12 @@ P.find_target(owners,assasination) protection += P.target objectives += P - var/datum/objective/sacrifice_ecult/SE = new SE.owner = owner SE.update_explanation_text() objectives += SE - var/datum/objective/escape/escape_objective = new - escape_objective.owner = owner - objectives += escape_objective - /datum/antagonist/heretic/apply_innate_effects(mob/living/mob_override) . = ..() var/mob/living/current = owner.current diff --git a/code/modules/antagonists/eldritch_cult/eldritch_effects.dm b/code/modules/antagonists/eldritch_cult/eldritch_effects.dm index 899e588bda..99794024f1 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_effects.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_effects.dm @@ -20,9 +20,11 @@ if(!is_in_use) INVOKE_ASYNC(src, .proc/activate , user) -/obj/effect/eldritch/attacked_by(obj/item/I, mob/living/user) +/obj/effect/eldritch/attackby(obj/item/I, mob/living/user) . = ..() - if(istype(I,/obj/item/nullrod)) + if(istype(I, /obj/item/storage/book/bible) || istype(I, /obj/item/nullrod)) + user.say("BEGONE FOUL MAGICKS!!", forced = "bible") + to_chat(user, "You disrupt the magic of [src] with [I].") qdel(src) /obj/effect/eldritch/proc/activate(mob/living/user) diff --git a/code/modules/antagonists/eldritch_cult/eldritch_items.dm b/code/modules/antagonists/eldritch_cult/eldritch_items.dm index 4dab6d789d..2052a2fbb3 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_items.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_items.dm @@ -16,16 +16,19 @@ return var/dist = get_dist(user.loc,target.loc) var/dir = get_dir(user.loc,target.loc) - - switch(dist) - if(0 to 15) - to_chat(user,"[target.real_name] is near you. They are to the [dir2text(dir)] of you!") - if(16 to 31) - to_chat(user,"[target.real_name] is somewhere in your vicinty. They are to the [dir2text(dir)] of you!") - if(32 to 127) - to_chat(user,"[target.real_name] is far away from you. They are to the [dir2text(dir)] of you!") - else - to_chat(user,"[target.real_name] is beyond our reach.") + + if(user.z != target.z) + to_chat(user,"[target.real_name] is beyond our reach.") + else + switch(dist) + if(0 to 15) + to_chat(user,"[target.real_name] is near you. They are to the [dir2text(dir)] of you!") + if(16 to 31) + to_chat(user,"[target.real_name] is somewhere in your vicinty. They are to the [dir2text(dir)] of you!") + if(32 to 127) + to_chat(user,"[target.real_name] is far away from you. They are to the [dir2text(dir)] of you!") + else + to_chat(user,"[target.real_name] is beyond our reach.") if(target.stat == DEAD) to_chat(user,"[target.real_name] is dead. Bring them onto a transmutation rune!") @@ -86,8 +89,8 @@ desc = "A crescent blade born from a fleshwarped creature. Keenly aware, it seeks to spread to others the excruciations it has endured from dead origins." icon_state = "flesh_blade" item_state = "flesh_blade" - wound_bonus = 5 - bare_wound_bonus = 15 + wound_bonus = 10 + bare_wound_bonus = 20 /obj/item/clothing/neck/eldritch_amulet name = "warm eldritch medallion" diff --git a/code/modules/antagonists/eldritch_cult/eldritch_knowledge.dm b/code/modules/antagonists/eldritch_cult/eldritch_knowledge.dm index 065844bedf..27868a3e3e 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_knowledge.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_knowledge.dm @@ -224,7 +224,7 @@ name = "Break of Dawn" desc = "Starts your journey in the mansus. Allows you to select a target using a living heart on a transmutation rune." gain_text = "Gates of Mansus open up to your mind." - next_knowledge = list(/datum/eldritch_knowledge/base_rust,/datum/eldritch_knowledge/base_ash,/datum/eldritch_knowledge/base_flesh) + next_knowledge = list(/datum/eldritch_knowledge/base_rust,/datum/eldritch_knowledge/base_ash,/datum/eldritch_knowledge/base_flesh,/datum/eldritch_knowledge/spell/silence) cost = 0 spell_to_add = /obj/effect/proc_holder/spell/targeted/touch/mansus_grasp required_atoms = list(/obj/item/living_heart) @@ -301,3 +301,11 @@ required_atoms = list(/obj/item/shard,/obj/item/stack/rods) result_atoms = list(/obj/item/melee/sickly_blade) route = "Start" + +/datum/eldritch_knowledge/spell/silence + name = "Silence" + desc = "Allows you to use the power of the Mansus to force an individual's tongue to be held down for up to twenty seconds. They'll notice quickly, however." + gain_text = "They must hold their tongues, for they do not understand." + cost = 1 + spell_to_add = /obj/effect/proc_holder/spell/pointed/trigger/mute/eldritch + route = PATH_SIDE diff --git a/code/modules/antagonists/eldritch_cult/eldritch_magic.dm b/code/modules/antagonists/eldritch_cult/eldritch_magic.dm index d84a997e28..799667999e 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_magic.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_magic.dm @@ -43,8 +43,9 @@ /obj/item/melee/touch_attack/mansus_fist name = "Mansus Grasp" desc = "A sinister looking aura that distorts the flow of reality around it. Causes knockdown, major stamina damage aswell as some Brute. It gains additional beneficial effects with certain knowledges you can research." - icon_state = "disintegrate" - item_state = "disintegrate" + icon = 'icons/obj/eldritch.dmi' + icon_state = "mansus_grasp" + item_state = "mansus" catchphrase = "T'IESA SIE'KTI VISATA" /obj/item/melee/touch_attack/mansus_fist/afterattack(atom/target, mob/user, proximity_flag, click_parameters) @@ -118,6 +119,7 @@ /obj/item/melee/touch_attack/blood_siphon name = "Blood Siphon" desc = "A sinister looking aura that distorts the flow of reality around it." + color = RUNE_COLOR_RED icon_state = "disintegrate" item_state = "disintegrate" catchphrase = "SUN'AI'KINI'MAS" @@ -260,41 +262,82 @@ /obj/effect/proc_holder/spell/pointed/cleave/long charge_max = 650 -/obj/effect/proc_holder/spell/pointed/touch/mad_touch +/obj/effect/proc_holder/spell/targeted/touch/mad_touch name = "Touch of Madness" - desc = "Touch spell that drains your enemies sanity." - school = "transmutation" - charge_max = 150 + desc = "Touch spell that allows you to force the knowledge of the mansus upon your foes." + hand_path = /obj/item/melee/touch_attack/mad_touch + school = "evocation" + charge_max = 1800 clothes_req = FALSE - invocation_type = "none" - range = 2 action_icon = 'icons/mob/actions/actions_ecult.dmi' action_icon_state = "mad_touch" action_background_icon_state = "bg_ecult" -/obj/effect/proc_holder/spell/pointed/touch/mad_touch/can_target(atom/target, mob/user, silent) - . = ..() - if(!.) - return FALSE - if(!istype(target,/mob/living/carbon/human)) - if(!silent) - to_chat(user, "You are unable to touch [target]!") - return FALSE - return TRUE +/obj/item/melee/touch_attack/mad_touch + name = "Touch of Madness" + desc = "A sinister looking aura that shatters your enemies minds." + icon = 'icons/obj/eldritch.dmi' + icon_state = "mad_touch" + item_state = "madness" + catchphrase = "SUNA'IKINTI PROTA" -/obj/effect/proc_holder/spell/pointed/touch/mad_touch/cast(list/targets, mob/user) - . = ..() - for(var/mob/living/carbon/target in targets) - if(ishuman(targets)) - var/mob/living/carbon/human/tar = target - if(tar.anti_magic_check()) - tar.visible_message("Spell bounces off of [target]!","The spell bounces off of you!") - return - if(target.mind && !target.mind.has_antag_datum(/datum/antagonist/heretic)) - to_chat(user,"[target.name] has been cursed!") - SEND_SIGNAL(target, COMSIG_ADD_MOOD_EVENT, "gates_of_mansus", /datum/mood_event/gates_of_mansus) +/obj/item/melee/touch_attack/mad_touch/afterattack(atom/target, mob/user, proximity_flag, click_parameters) -/obj/effect/proc_holder/spell/pointed/ash_final + if(!proximity_flag || target == user) + return + if(ishuman(target)) + var/mob/living/carbon/human/tar = target + if(tar.anti_magic_check()) + tar.visible_message("Spell bounces off of [target]!","The spell bounces off of you!") + return ..() + + if(iscarbon(target)) + playsound(user, 'sound/effects/curseattack.ogg', 75, TRUE) + var/mob/living/carbon/C = target + C.adjustOrganLoss(ORGAN_SLOT_BRAIN,35) + C.DefaultCombatKnockdown(50, override_stamdmg = 0) + C.gain_trauma(/datum/brain_trauma/mild/phobia) + to_chat(user,"[target.name] has been cursed!") + SEND_SIGNAL(target, COMSIG_ADD_MOOD_EVENT, "gates_of_mansus", /datum/mood_event/gates_of_mansus) + return ..() + +/obj/effect/proc_holder/spell/targeted/touch/grasp_of_decay + name = "Grasp of Decay" + desc = "A sinister looking touch that rots your foes from the inside out for twenty seconds." + hand_path = /obj/item/melee/touch_attack/grasp_of_decay + school = "evocation" + charge_max = 1200 + clothes_req = FALSE + action_icon = 'icons/mob/actions/actions_ecult.dmi' + action_icon_state = "mansus_grasp" + action_background_icon_state = "bg_ecult" + +/obj/item/melee/touch_attack/grasp_of_decay + name = "Grasp of Decay" + desc = "A sinister looking aura that rots your foes from the inside out." + icon = 'icons/obj/eldritch.dmi' + icon_state = "mansus_grasp" + item_state = "mansus" + catchphrase = "SKILI'EDUONIS" + +/obj/item/melee/touch_attack/grasp_of_decay/afterattack(atom/target, mob/user, proximity_flag, click_parameters) + + if(!proximity_flag || target == user) + return + if(ishuman(target)) + var/mob/living/carbon/human/tar = target + if(tar.anti_magic_check()) + tar.visible_message("Spell bounces off of [target]!","The spell bounces off of you!") + return ..() + + if(iscarbon(target)) + playsound(user, 'sound/effects/curseattack.ogg', 75, TRUE) + var/mob/living/carbon/C = target + C.DefaultCombatKnockdown(50, override_stamdmg = 0) + C.apply_status_effect(/datum/status_effect/corrosion_curse/lesser) + return ..() + +/obj/effect/proc_holder/spell/pointed/nightwatchers_rite name = "Nightwatcher's Rite" desc = "Powerful spell that releases 5 streams of fire away from you." school = "transmutation" @@ -307,7 +350,7 @@ action_icon_state = "flames" action_background_icon_state = "bg_ecult" -/obj/effect/proc_holder/spell/pointed/ash_final/cast(list/targets, mob/user) +/obj/effect/proc_holder/spell/pointed/nightwatchers_rite/cast(list/targets, mob/user) for(var/X in targets) var/T T = line_target(-25, range, X, user) @@ -322,11 +365,12 @@ INVOKE_ASYNC(src, .proc/fire_line, user,T) return ..() -/obj/effect/proc_holder/spell/pointed/ash_final/proc/line_target(offset, range, atom/at , atom/user) +/obj/effect/proc_holder/spell/pointed/nightwatchers_rite/proc/line_target(offset, range, atom/at , atom/user) if(!at) return var/angle = ATAN2(at.x - user.x, at.y - user.y) + offset var/turf/T = get_turf(user) + playsound(user,'sound/magic/fireball.ogg', 200, 1) for(var/i in 1 to range) var/turf/check = locate(user.x + cos(angle) * i, user.y + sin(angle) * i, user.z) if(!check) @@ -334,7 +378,7 @@ T = check return (getline(user, T) - get_turf(user)) -/obj/effect/proc_holder/spell/pointed/ash_final/proc/fire_line(atom/source, list/turfs) +/obj/effect/proc_holder/spell/pointed/nightwatchers_rite/proc/fire_line(atom/source, list/turfs) var/list/hit_list = list() for(var/turf/T in turfs) if(istype(T, /turf/closed)) @@ -347,8 +391,8 @@ if(L in hit_list || L == source) continue hit_list += L - L.adjustFireLoss(20) - to_chat(L, "You're hit by [source]'s fire breath!") + L.adjustFireLoss(15) + to_chat(L, "You're hit by a blast of fire!") new /obj/effect/hotspot(T) T.hotspot_expose(700,50,1) @@ -368,7 +412,7 @@ possible_shapes = list(/mob/living/simple_animal/mouse,\ /mob/living/simple_animal/pet/dog/corgi,\ /mob/living/simple_animal/hostile/carp,\ - /mob/living/simple_animal/bot/secbot, \ + /mob/living/simple_animal/bot/secbot,\ /mob/living/simple_animal/pet/fox,\ /mob/living/simple_animal/pet/cat ) @@ -430,7 +474,7 @@ action_background_icon_state = "bg_ecult" range = -1 include_user = TRUE - charge_max = 700 + charge_max = 1200 action_icon = 'icons/mob/actions/actions_ecult.dmi' action_icon_state = "fire_ring" ///how long it lasts @@ -595,6 +639,39 @@ invocation = "AK'LIS" action_background_icon_state = "bg_ecult" +/obj/effect/proc_holder/spell/pointed/trigger/mute/eldritch + name = "Silence" + desc = "Using the power of the mansus, silences a selected unbeliever for twenty seconds." + school = "transmutation" + charge_max = 1800 + clothes_req = FALSE + invocation = "VIS'TIEK TAVO'LIZUVIS" + invocation_type = "whisper" + message = "It feels as if your tongue is being held down by an unseen force!" + starting_spells = list("/obj/effect/proc_holder/spell/targeted/genetic/mute") + ranged_mousepointer = 'icons/effects/mouse_pointers/mute_target.dmi' + action_background_icon_state = "bg_ecult" + action_icon = 'icons/mob/actions/actions_ecult.dmi' + action_icon_state = "mute" + active_msg = "You prepare to silence a target..." + +/obj/effect/proc_holder/spell/targeted/genetic/mute + mutations = list(MUT_MUTE) + duration = 200 + charge_max = 1200 // needs to be higher than the duration or it'll be permanent + sound = 'sound/magic/blind.ogg' + +/obj/effect/proc_holder/spell/pointed/trigger/mute/can_target(atom/target, mob/user, silent) + . = ..() + if(!.) + return FALSE + if(!isliving(target)) + if(!silent) + to_chat(user, "You can only silence living beings!") + return FALSE + return TRUE + + /obj/effect/temp_visual/dir_setting/entropic icon = 'icons/effects/160x160.dmi' icon_state = "entropic_plume" diff --git a/code/modules/antagonists/eldritch_cult/knowledge/ash_lore.dm b/code/modules/antagonists/eldritch_cult/knowledge/ash_lore.dm index 8efd9837a9..425052de2a 100644 --- a/code/modules/antagonists/eldritch_cult/knowledge/ash_lore.dm +++ b/code/modules/antagonists/eldritch_cult/knowledge/ash_lore.dm @@ -95,7 +95,30 @@ desc = "Drains nearby alive people that are engulfed in flames. It heals 10 of each damage type per person. If a person is in critical condition it finishes them off." cost = 1 spell_to_add = /obj/effect/proc_holder/spell/targeted/fiery_rebirth - next_knowledge = list(/datum/eldritch_knowledge/spell/cleave,/datum/eldritch_knowledge/summon/ashy,/datum/eldritch_knowledge/final/ash_final) + next_knowledge = list(/datum/eldritch_knowledge/spell/cleave,/datum/eldritch_knowledge/summon/ashy,/datum/eldritch_knowledge/flame_immunity) + route = PATH_ASH + +/datum/eldritch_knowledge/flame_immunity + name = "Nightwatcher's Blessing" + gain_text = "The True Light will destroy and make something anew of any individual. If only they accepted it." + desc = "Becoming one with the ash, you become immune to fire and heat, allowing you to thrive in a more extreme environment.." + cost = 2 + next_knowledge = list(/datum/eldritch_knowledge/spell/nightwatchers_rite) + route = PATH_ASH + var/list/trait_list = list(TRAIT_RESISTHEAT,TRAIT_NOFIRE) + +/datum/eldritch_knowledge/flame_immunity/on_gain(mob/living/user) + to_chat(user, "[gain_text]") + for(var/X in trait_list) + ADD_TRAIT(user,X,MAGIC_TRAIT) + +/datum/eldritch_knowledge/spell/nightwatchers_rite + name = "Nightwatcher's Rite" + gain_text = "When the Glory of the Lantern scorches and sears their skin, nothing will protect them from the ashes." + desc = "Fire off five streams of fire from your hand, each setting ablaze targets hit and scorching them upon contact." + cost = 2 + spell_to_add = /obj/effect/proc_holder/spell/pointed/nightwatchers_rite + next_knowledge = list(/datum/eldritch_knowledge/final/ash_final) route = PATH_ASH /datum/eldritch_knowledge/ash_blade_upgrade @@ -167,7 +190,7 @@ required_atoms = list(/mob/living/carbon/human) cost = 5 route = PATH_ASH - var/list/trait_list = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_BOMBIMMUNE) + var/list/trait_list = list(TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_BOMBIMMUNE) /datum/eldritch_knowledge/final/ash_final/on_finished_recipe(mob/living/user, list/atoms, loc) priority_announce("$^@&#*$^@(#&$(@&#^$&#^@# Fear the blaze, for Ashbringer [user.real_name] has come! $^@&#*$^@(#&$(@&#^$&#^@#","#$^@&#*$^@(#&$(@&#^$&#^@#", 'sound/announcer/classic/spanomalies.ogg') diff --git a/code/modules/antagonists/eldritch_cult/knowledge/flesh_lore.dm b/code/modules/antagonists/eldritch_cult/knowledge/flesh_lore.dm index 9684e1fa0c..5e32cf1b4e 100644 --- a/code/modules/antagonists/eldritch_cult/knowledge/flesh_lore.dm +++ b/code/modules/antagonists/eldritch_cult/knowledge/flesh_lore.dm @@ -70,7 +70,7 @@ desc = "Empowers your Mansus Grasp to be able to create a single ghoul out of a dead player. You cannot raise the same person twice. Ghouls have only 50 HP and look like husks." cost = 1 next_knowledge = list(/datum/eldritch_knowledge/flesh_ghoul) - var/ghoul_amt = 6 + var/ghoul_amt = 4 var/list/spooky_scaries route = PATH_FLESH @@ -177,7 +177,7 @@ cost = 1 required_atoms = list(/obj/item/kitchen/knife,/obj/item/reagent_containers/food/snacks/grown/poppy,/obj/item/pen,/obj/item/paper) mob_to_summon = /mob/living/simple_animal/hostile/eldritch/stalker - next_knowledge = list(/datum/eldritch_knowledge/summon/ashy,/datum/eldritch_knowledge/summon/rusty,/datum/eldritch_knowledge/final/flesh_final) + next_knowledge = list(/datum/eldritch_knowledge/summon/ashy,/datum/eldritch_knowledge/summon/rusty,/datum/eldritch_knowledge/flesh_blade_upgrade_2) route = PATH_FLESH /datum/eldritch_knowledge/summon/ashy @@ -250,3 +250,28 @@ carbon_user.gib() return ..() + +/datum/eldritch_knowledge/flesh_blade_upgrade_2 + name = "Remembrance" + gain_text = "Pain isn't something easily forgotten." + desc = "Your blade remembers more, and remembers how easily bones broke just as its flesh did, guaranteeing dislocated, or broken bones." + cost = 2 + next_knowledge = list(/datum/eldritch_knowledge/spell/touch_of_madness) + route = PATH_FLESH + +/datum/eldritch_knowledge/flesh_blade_upgrade_2/on_eldritch_blade(target,user,proximity_flag,click_parameters) + . = ..() + if(iscarbon(target)) + var/mob/living/carbon/carbon_target = target + var/obj/item/bodypart/bodypart = pick(carbon_target.bodyparts) + var/datum/wound/blunt/moderate/moderate_wound = new + moderate_wound.apply_wound(bodypart) + +/datum/eldritch_knowledge/spell/touch_of_madness + name = "Touch of Madness" + gain_text = "The ignorant mind that inhabits their feeble bodies will crumble when they acknowledge - willingly or not, the truth." + desc = "By forcing the knowledge of the Mansus upon my foes, I can show them things that would drive any normal man insane." + cost = 2 + spell_to_add = /obj/effect/proc_holder/spell/targeted/touch/mad_touch + next_knowledge = list(/datum/eldritch_knowledge/final/flesh_final) + route = PATH_FLESH diff --git a/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm b/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm index 74b3753b69..f5c54dd7bf 100644 --- a/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm +++ b/code/modules/antagonists/eldritch_cult/knowledge/rust_lore.dm @@ -27,8 +27,13 @@ if(E) E.on_effect() H.adjustOrganLoss(pick(ORGAN_SLOT_BRAIN,ORGAN_SLOT_EARS,ORGAN_SLOT_EYES,ORGAN_SLOT_LIVER,ORGAN_SLOT_LUNGS,ORGAN_SLOT_STOMACH,ORGAN_SLOT_HEART),25) + else + for(var/X in user.mind.spell_list) + if(!istype(X,/obj/effect/proc_holder/spell/targeted/touch/mansus_grasp)) + continue + var/obj/effect/proc_holder/spell/targeted/touch/mansus_grasp/MG = X + MG.charge_counter = min(round(MG.charge_counter + MG.charge_max * 0.75),MG.charge_max) target.rust_heretic_act() - target.emp_act(EMP_HEAVY) return TRUE /datum/eldritch_knowledge/spell/area_conversion @@ -43,7 +48,7 @@ /datum/eldritch_knowledge/spell/rust_wave name = "Patron's Reach" desc = "You can now send a bolt of rust that corrupts the immediate area, and poisons the first target hit." - gain_text = "Messengers of hope fear the rustbringer." + gain_text = "Messengers of hope fear the Rustbringer." cost = 1 spell_to_add = /obj/effect/proc_holder/spell/aimed/rust_wave route = PATH_RUST @@ -92,19 +97,20 @@ banned_knowledge = list(/datum/eldritch_knowledge/ash_blade_upgrade,/datum/eldritch_knowledge/flesh_blade_upgrade) route = PATH_RUST -/datum/eldritch_knowledge/rust_blade_upgrade/on_eldritch_blade(target,user,proximity_flag,click_parameters) +/datum/eldritch_knowledge/rust_blade_upgrade/on_eldritch_blade(mob/target,user,proximity_flag,click_parameters) . = ..() - if(iscarbon(target)) - var/mob/living/carbon/carbon_target = target - carbon_target.reagents.add_reagent(/datum/reagent/eldritch, 5) + if(!IS_HERETIC(target)) + if(iscarbon(target)) + var/mob/living/carbon/carbon_target = target + carbon_target.reagents.add_reagent(/datum/reagent/eldritch, 5) /datum/eldritch_knowledge/spell/entropic_plume name = "Entropic Plume" desc = "You can now send a befuddling plume that blinds, poisons and makes enemies strike each other, while also converting the immediate area into rust." - gain_text = "Messengers of hope fear the rustbringer." + gain_text = "If they knew, the truth would turn them against eachother." cost = 1 spell_to_add = /obj/effect/proc_holder/spell/cone/staggered/entropic_plume - next_knowledge = list(/datum/eldritch_knowledge/final/rust_final,/datum/eldritch_knowledge/spell/cleave,/datum/eldritch_knowledge/summon/rusty) + next_knowledge = list(/datum/eldritch_knowledge/rust_fist_upgrade,/datum/eldritch_knowledge/spell/cleave,/datum/eldritch_knowledge/summon/rusty) route = PATH_RUST /datum/eldritch_knowledge/armor @@ -119,12 +125,38 @@ /datum/eldritch_knowledge/essence name = "Priest's Ritual" desc = "You can now transmute a tank of water into a bottle of eldritch fluid." - gain_text = "This is an old recipe, i got it from an owl." + gain_text = "This is an old recipe, I got it from an owl." cost = 1 next_knowledge = list(/datum/eldritch_knowledge/rust_regen,/datum/eldritch_knowledge/spell/ashen_shift) required_atoms = list(/obj/structure/reagent_dispensers/watertank) result_atoms = list(/obj/item/reagent_containers/glass/beaker/eldritch) +/datum/eldritch_knowledge/rust_fist_upgrade + name = "Vile Grip" + desc = "Empowers your Mansus Grasp further, sickening your foes and making them vomit, while also strengthening the rate at which your hand decays objects." + gain_text = "A sickly diseased touch that was, yet, so welcoming." + cost = 2 + next_knowledge = list(/datum/eldritch_knowledge/spell/grasp_of_decay) + var/rust_force = 750 + var/static/list/blacklisted_turfs = typecacheof(list(/turf/closed,/turf/open/space,/turf/open/lava,/turf/open/chasm,/turf/open/floor/plating/rust)) + route = PATH_RUST + +/datum/eldritch_knowledge/rust_fist_upgrade/on_mansus_grasp(atom/target, mob/user, proximity_flag, click_parameters) + . = ..() + if(ishuman(target)) + var/mob/living/carbon/human/H = target + H.set_disgust(75) + return TRUE + +/datum/eldritch_knowledge/spell/grasp_of_decay + name = "Grasp of Decay" + desc = "Applying your knowledge of rust to the human body, a knowledge that could decay your foes from the inside out, resulting in organ failure, vomiting, or eventual death through peeling flesh." + gain_text = "Decay, similar to Rust, yet so much more terribly uninviting." + cost = 2 + spell_to_add = /obj/effect/proc_holder/spell/targeted/touch/grasp_of_decay + next_knowledge = list(/datum/eldritch_knowledge/final/rust_final) + route = PATH_RUST + /datum/eldritch_knowledge/final/rust_final name = "Rustbringer's Oath" desc = "Bring three corpses onto a transmutation rune. After you finish the ritual, rust will now automatically spread from the rune. Your healing on rust is also tripled, while you become more resilient overall." diff --git a/code/modules/antagonists/revenant/revenant_spawn_event.dm b/code/modules/antagonists/revenant/revenant_spawn_event.dm index 7bb7f1aa76..cb534b6613 100644 --- a/code/modules/antagonists/revenant/revenant_spawn_event.dm +++ b/code/modules/antagonists/revenant/revenant_spawn_event.dm @@ -4,7 +4,6 @@ name = "Spawn Revenant" // Did you mean 'griefghost'? typepath = /datum/round_event/ghost_role/revenant weight = 7 - gamemode_blacklist = list("dynamic") max_occurrences = 1 min_players = 5 diff --git a/code/modules/antagonists/swarmer/swarmer_event.dm b/code/modules/antagonists/swarmer/swarmer_event.dm index c626799a53..43ac07cba9 100644 --- a/code/modules/antagonists/swarmer/swarmer_event.dm +++ b/code/modules/antagonists/swarmer/swarmer_event.dm @@ -5,7 +5,6 @@ max_occurrences = 1 //Only once okay fam earliest_start = 30 MINUTES min_players = 35 - gamemode_blacklist = list("dynamic") /datum/round_event/spawn_swarmer diff --git a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm index 8e9a54a69a..149b869649 100644 --- a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm +++ b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm @@ -13,7 +13,9 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( /obj/machinery/syndicatebomb/badmin/clown, /obj/machinery/syndicatebomb/empty, /obj/machinery/syndicatebomb/self_destruct, - /obj/machinery/syndicatebomb/training + /obj/machinery/syndicatebomb/training, + /obj/machinery/gravity_generator, + /obj/machinery/gravity_generator/main ))) //The malf AI action subtype. All malf actions are subtypes of this. diff --git a/code/modules/arousal/arousal.dm b/code/modules/arousal/arousal.dm index 249c899f07..99683f1688 100644 --- a/code/modules/arousal/arousal.dm +++ b/code/modules/arousal/arousal.dm @@ -68,7 +68,7 @@ R.reaction(turfing ? target : target.loc, TOUCH, 1, 0) if(!turfing) R.trans_to(target, R.total_volume * (spill ? G.fluid_transfer_factor : 1)) - G.time_since_last_orgasm = 0 + G.last_orgasmed = world.time R.clear_reagents() /mob/living/carbon/human/proc/mob_climax_outside(obj/item/organ/genital/G, mb_time = 30) //This is used for forced orgasms and other hands-free climaxes diff --git a/code/modules/arousal/genitals.dm b/code/modules/arousal/genitals.dm index 8f88076af9..65eeca75fe 100644 --- a/code/modules/arousal/genitals.dm +++ b/code/modules/arousal/genitals.dm @@ -16,7 +16,7 @@ var/fluid_efficiency = 1 var/fluid_rate = CUM_RATE var/fluid_mult = 1 - var/time_since_last_orgasm = 500 + var/last_orgasmed = 0 var/aroused_state = FALSE //Boolean used in icon_state strings var/obj/item/organ/genital/linked_organ var/linked_organ_slot //used for linking an apparatus' organ to its other half on update_link(). @@ -24,10 +24,6 @@ /obj/item/organ/genital/Initialize(mapload, do_update = TRUE) . = ..() - if(fluid_id) - create_reagents(fluid_max_volume, NONE, NO_REAGENTS_VALUE) - if(CHECK_BITFIELD(genital_flags, GENITAL_FUID_PRODUCTION)) - reagents.add_reagent(fluid_id, fluid_max_volume) if(do_update) update() @@ -140,8 +136,6 @@ /obj/item/organ/genital/proc/modify_size(modifier, min = -INFINITY, max = INFINITY) fluid_max_volume += modifier*2.5 fluid_rate += modifier/10 - if(reagents) - reagents.maximum_volume = fluid_max_volume return /obj/item/organ/genital/proc/update_size() @@ -151,18 +145,14 @@ if(!owner || owner.stat == DEAD) aroused_state = FALSE -/obj/item/organ/genital/on_life() - . = ..() - if(!reagents || !.) - return - reagents.maximum_volume = fluid_max_volume - if(fluid_id && CHECK_BITFIELD(genital_flags, GENITAL_FUID_PRODUCTION)) - time_since_last_orgasm++ - /obj/item/organ/genital/proc/generate_fluid(datum/reagents/R) - var/amount = clamp(fluid_rate * time_since_last_orgasm * fluid_mult,0,fluid_max_volume) + var/amount = clamp((fluid_rate * ((world.time - last_orgasmed) / SSmobs.wait) * fluid_mult),0,fluid_max_volume) R.clear_reagents() - R.add_reagent(fluid_id,amount) + R.maximum_volume = fluid_max_volume + if(fluid_id) + R.add_reagent(fluid_id,amount) + else if(linked_organ?.fluid_id) + R.add_reagent(linked_organ.fluid_id,amount) return TRUE /obj/item/organ/genital/proc/update_link() diff --git a/code/modules/asset_cache/asset_cache_item.dm b/code/modules/asset_cache/asset_cache_item.dm index 41cee06db1..72d976bf11 100644 --- a/code/modules/asset_cache/asset_cache_item.dm +++ b/code/modules/asset_cache/asset_cache_item.dm @@ -24,12 +24,10 @@ /datum/asset_cache_item/New(name, file) if (!isfile(file)) file = fcopy_rsc(file) - hash = md5(file) + + hash = md5asfile(file) //icons sent to the rsc sometimes md5 incorrectly if (!hash) - hash = md5(fcopy_rsc(file)) - if (!hash) - CRASH("invalid asset sent to asset cache") - debug_world_log("asset cache unexpected success of second fcopy_rsc") + CRASH("invalid asset sent to asset cache") src.name = name var/extstart = findlasttext(name, ".") if (extstart) diff --git a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm index 2b43319904..0c6ca13e86 100644 --- a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm +++ b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm @@ -1,6 +1,6 @@ /turf //used for temperature calculations - var/thermal_conductivity = 0.05 + var/thermal_conductivity = 0.005 var/heat_capacity = 1 var/temperature_archived @@ -270,7 +270,7 @@ /turf/proc/super_conduct() var/conductivity_directions = conductivity_directions() - + archive() if(conductivity_directions) //Conduct with tiles around me for(var/direction in GLOB.cardinals) @@ -331,6 +331,7 @@ var/heat = thermal_conductivity*delta_temperature* \ (heat_capacity*HEAT_CAPACITY_VACUUM/(heat_capacity+HEAT_CAPACITY_VACUUM)) temperature -= heat/heat_capacity + temperature = max(temperature,T0C) //otherwise we just sorta get stuck at super cold temps forever /turf/open/proc/temperature_share_open_to_solid(turf/sharer) sharer.temperature = air.temperature_share(null, sharer.thermal_conductivity, sharer.temperature, sharer.heat_capacity) @@ -344,3 +345,5 @@ temperature -= heat/heat_capacity sharer.temperature += heat/sharer.heat_capacity + temperature = max(temperature,T0C) + sharer.temperature = max(sharer.temperature,T0C) diff --git a/code/modules/atmospherics/gasmixtures/gas_mixture.dm b/code/modules/atmospherics/gasmixtures/gas_mixture.dm index e86b249be6..e498ff05c9 100644 --- a/code/modules/atmospherics/gasmixtures/gas_mixture.dm +++ b/code/modules/atmospherics/gasmixtures/gas_mixture.dm @@ -188,7 +188,7 @@ GLOBAL_LIST_INIT(meta_gas_fusions, meta_gas_fusion_list()) //Performs air sharing calculations between two gas_mixtures assuming only 1 boundary length //Returns: amount of gas exchanged (+ if sharer received) -/datum/gas_mixture/proc/temperature_share(datum/gas_mixture/sharer, conduction_coefficient) +/datum/gas_mixture/proc/temperature_share(datum/gas_mixture/sharer, conduction_coefficient,temperature=null,heat_capacity=null) //Performs temperature sharing calculations (via conduction) between two gas_mixtures assuming only 1 boundary length //Returns: new temperature of the sharer diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm index c0f66be7de..bb65bdcaa4 100644 --- a/code/modules/atmospherics/gasmixtures/reactions.dm +++ b/code/modules/atmospherics/gasmixtures/reactions.dm @@ -40,6 +40,9 @@ /datum/gas_reaction/proc/react(datum/gas_mixture/air, atom/location) return NO_REACTION +/datum/gas_reaction/proc/test() + return list("success" = TRUE) + /datum/gas_reaction/nobliumsupression priority = INFINITY name = "Hyper-Noblium Reaction Suppression" @@ -70,6 +73,8 @@ air.adjust_moles(/datum/gas/water_vapor,-MOLES_GAS_VISIBLE) . = REACTING +// no test cause it's entirely based on location + //tritium combustion: combustion of oxygen and tritium (treated as hydrocarbons). creates hotspots. exothermic /datum/gas_reaction/tritfire priority = -1 //fire should ALWAYS be last, but tritium fires happen before plasma fires @@ -126,6 +131,18 @@ return cached_results["fire"] ? REACTING : NO_REACTION +/datum/gas_reaction/tritfire/test() + var/datum/gas_mixture/G = new + G.set_moles(/datum/gas/tritium,50) + G.set_moles(/datum/gas/oxygen,50) + G.set_temperature(500) + var/result = G.react() + if(result != REACTING) + return list("success" = FALSE, "message" = "Reaction didn't go at all!") + if(!G.reaction_results["fire"]) + return list("success" = FALSE, "message" = "Trit fires aren't setting fire results correctly!") + return ..() + //plasma combustion: combustion of oxygen and plasma (treated as hydrocarbons). creates hotspots. exothermic /datum/gas_reaction/plasmafire priority = -2 //fire should ALWAYS be last, but plasma fires happen after tritium fires @@ -198,6 +215,28 @@ return cached_results["fire"] ? REACTING : NO_REACTION +/datum/gas_reaction/plasmafire/test() + var/datum/gas_mixture/G = new + G.set_moles(/datum/gas/plasma,50) + G.set_moles(/datum/gas/oxygen,50) + G.set_volume(1000) + G.set_temperature(500) + var/result = G.react() + if(result != REACTING) + return list("success" = FALSE, "message" = "Reaction didn't go at all!") + if(!G.reaction_results["fire"]) + return list("success" = FALSE, "message" = "Plasma fires aren't setting fire results correctly!") + if(!G.get_moles(/datum/gas/carbon_dioxide)) + return list("success" = FALSE, "message" = "Plasma fires aren't making CO2!") + G.clear() + G.set_moles(/datum/gas/plasma,10) + G.set_moles(/datum/gas/oxygen,1000) + G.set_temperature(500) + result = G.react() + if(!G.get_moles(/datum/gas/tritium)) + return list("success" = FALSE, "message" = "Plasma fires aren't making trit!") + return ..() + //fusion: a terrible idea that was fun but broken. Now reworked to be less broken and more interesting. Again (and again, and again). Again! //Fusion Rework Counter: Please increment this if you make a major overhaul to this system again. //6 reworks @@ -282,6 +321,31 @@ air.set_temperature(clamp(((air.return_temperature()*old_heat_capacity + reaction_energy)/new_heat_capacity),TCMB,INFINITY)) return REACTING +/datum/gas_reaction/fusion/test() + var/datum/gas_mixture/G = new + G.set_moles(/datum/gas/carbon_dioxide,300) + G.set_moles(/datum/gas/plasma,1000) + G.set_moles(/datum/gas/tritium,100.61) + G.set_moles(/datum/gas/nitryl,1) + G.set_temperature(15000) + G.set_volume(1000) + var/result = G.react() + if(result != REACTING) + return list("success" = FALSE, "message" = "Reaction didn't go at all!") + if(abs(G.analyzer_results["fusion"] - 3) > 0.0000001) + var/instability = G.analyzer_results["fusion"] + return list("success" = FALSE, "message" = "Fusion is not calculating analyzer results correctly, should be 3.000000045, is instead [instability]") + if(abs(G.get_moles(/datum/gas/plasma) - 850.616) > 0.5) + var/plas = G.get_moles(/datum/gas/plasma) + return list("success" = FALSE, "message" = "Fusion is not calculating plasma correctly, should be 850.616, is instead [plas]") + if(abs(G.get_moles(/datum/gas/carbon_dioxide) - 1699.384) > 0.5) + var/co2 = G.get_moles(/datum/gas/carbon_dioxide) + return list("success" = FALSE, "message" = "Fusion is not calculating co2 correctly, should be 1699.384, is instead [co2]") + if(abs(G.return_temperature() - 27600) > 200) // calculating this manually sucks dude + var/temp = G.return_temperature() + return list("success" = FALSE, "message" = "Fusion is not calculating temperature correctly, should be around 27600, is instead [temp]") + return ..() + /datum/gas_reaction/nitrylformation //The formation of nitryl. Endothermic. Requires N2O as a catalyst. priority = 3 name = "Nitryl formation" @@ -313,6 +377,20 @@ air.set_temperature(max(((temperature*old_heat_capacity - energy_used)/new_heat_capacity),TCMB)) return REACTING +/datum/gas_reaction/nitrylformation/test() + var/datum/gas_mixture/G = new + G.set_moles(/datum/gas/oxygen,30) + G.set_moles(/datum/gas/nitrogen,30) + G.set_moles(/datum/gas/nitrous_oxide,10) + G.set_volume(1000) + G.set_temperature(150000) + var/result = G.react() + if(result != REACTING) + return list("success" = FALSE, "message" = "Reaction didn't go at all!") + if(!G.get_moles(/datum/gas/nitryl) < 0.8) + return list("success" = FALSE, "message" = "Nitryl isn't being generated correctly!") + return ..() + /datum/gas_reaction/bzformation //Formation of BZ by combining plasma and tritium at low pressures. Exothermic. priority = 4 name = "BZ Gas formation" @@ -348,6 +426,19 @@ air.set_temperature(max(((temperature*old_heat_capacity + energy_released)/new_heat_capacity),TCMB)) return REACTING +/datum/gas_reaction/bzformation/test() + var/datum/gas_mixture/G = new + G.set_moles(/datum/gas/plasma,15) + G.set_moles(/datum/gas/nitrous_oxide,15) + G.set_volume(1000) + G.set_temperature(10) + var/result = G.react() + if(result != REACTING) + return list("success" = FALSE, "message" = "Reaction didn't go at all!") + if(!G.get_moles(/datum/gas/bz) < 4) // efficiency is 4.0643 and bz generation == efficiency + return list("success" = FALSE, "message" = "Nitryl isn't being generated correctly!") + return ..() + /datum/gas_reaction/stimformation //Stimulum formation follows a strange pattern of how effective it will be at a given temperature, having some multiple peaks and some large dropoffs. Exo and endo thermic. priority = 5 name = "Stimulum formation" @@ -380,6 +471,23 @@ air.set_temperature(max(((air.return_temperature()*old_heat_capacity + stim_energy_change)/new_heat_capacity),TCMB)) return REACTING +/datum/gas_reaction/stimformation/test() + //above mentioned "strange pattern" is a basic quintic polynomial, it's fine, can calculate it manually + var/datum/gas_mixture/G = new + G.set_moles(/datum/gas/bz,30) + G.set_moles(/datum/gas/plasma,1000) + G.set_moles(/datum/gas/tritium,1000) + G.set_moles(/datum/gas/nitryl,1000) + G.set_volume(1000) + G.set_temperature(12998000) // yeah, really + + var/result = G.react() + if(result != REACTING) + return list("success" = FALSE, "message" = "Reaction didn't go at all!") + if(!G.get_moles(/datum/gas/stimulum) < 900) + return list("success" = FALSE, "message" = "Stimulum isn't being generated correctly!") + return ..() + /datum/gas_reaction/nobliumformation //Hyper-Noblium formation is extrememly endothermic, but requires high temperatures to start. Due to its high mass, hyper-nobelium uses large amounts of nitrogen and tritium. BZ can be used as a catalyst to make it less endothermic. priority = 6 name = "Hyper-Noblium condensation" @@ -408,6 +516,19 @@ if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) air.set_temperature(max(((air.return_temperature()*old_heat_capacity - energy_taken)/new_heat_capacity),TCMB)) +/datum/gas_reaction/nobliumformation/test() + var/datum/gas_mixture/G = new + G.set_moles(/datum/gas/nitrogen,100) + G.set_moles(/datum/gas/tritium,500) + G.set_volume(1000) + G.set_temperature(5000000) // yeah, really + var/result = G.react() + if(result != REACTING) + return list("success" = FALSE, "message" = "Reaction didn't go at all!") + if(abs(G.thermal_energy() - 23000000000) > 1000000) // god i hate floating points + return list("success" = FALSE, "message" = "Hyper-nob formation isn't removing the right amount of heat! Should be 23,000,000,000, is instead [G.thermal_energy()]") + return ..() + /datum/gas_reaction/miaster //dry heat sterilization: clears out pathogens in the air priority = -10 //after all the heating from fires etc. is done @@ -433,3 +554,20 @@ //Possibly burning a bit of organic matter through maillard reaction, so a *tiny* bit more heat would be understandable air.set_temperature(air.return_temperature() + cleaned_air * 0.002) SSresearch.science_tech.add_point_type(TECHWEB_POINT_TYPE_DEFAULT, cleaned_air*MIASMA_RESEARCH_AMOUNT)//Turns out the burning of miasma is kinda interesting to scientists + +/datum/gas_reaction/miaster/test() + var/datum/gas_mixture/G = new + G.set_moles(/datum/gas/miasma,1) + G.set_volume(1000) + G.set_temperature(450) + var/result = G.react() + if(result != REACTING) + return list("success" = FALSE, "message" = "Reaction didn't go at all!") + G.clear() + G.set_moles(/datum/gas/miasma,1) + G.set_temperature(450) + G.set_moles(/datum/gas/water_vapor,0.5) + result = G.react() + if(result != NO_REACTION) + return list("success" = FALSE, "message" = "Miasma sterilization not stopping due to water vapor correctly!") + return ..() diff --git a/code/modules/cargo/packs/goodies.dm b/code/modules/cargo/packs/goodies.dm index 5d07e85bac..423d2fc743 100644 --- a/code/modules/cargo/packs/goodies.dm +++ b/code/modules/cargo/packs/goodies.dm @@ -52,8 +52,8 @@ cost = 300 contains = list(/obj/item/storage/toolbox/mechanical) -/datum/supply_pack/goody/electrical_toolbox // mostly just to water down coupon probability - name = "Mechanical Toolbox" +/datum/supply_pack/goody/electrical_toolbox + name = "Electrical Toolbox" desc = "A fully stocked electrical toolbox, for when you're too lazy to just print them out." cost = 300 contains = list(/obj/item/storage/toolbox/electrical) diff --git a/code/modules/cargo/packs/misc.dm b/code/modules/cargo/packs/misc.dm index c6728831eb..394b86bb81 100644 --- a/code/modules/cargo/packs/misc.dm +++ b/code/modules/cargo/packs/misc.dm @@ -13,6 +13,13 @@ //////////////////// Paperwork and Writing Supplies ////////////////////////// ////////////////////////////////////////////////////////////////////////////// + +/datum/supply_pack/misc/anvil + name = "Anvil Crate" + desc = "An anvil in a crate, we had to dig this out of the old warehouse. It's got wheels on it so you can move it." + cost = 7500 + contains = list(/obj/structure/anvil/obtainable/basic) + /datum/supply_pack/misc/artsupply name = "Art Supplies" desc = "Make some happy little accidents with six canvasses, two easels, two boxes of crayons, and a rainbow crayon!" diff --git a/code/modules/cargo/packs/science.dm b/code/modules/cargo/packs/science.dm index fd6fee362d..125bfe2034 100644 --- a/code/modules/cargo/packs/science.dm +++ b/code/modules/cargo/packs/science.dm @@ -192,3 +192,49 @@ crate_type = /obj/structure/closet/crate/secure/science dangerous = TRUE +//////// RAW ANOMALY CORES + +/datum/supply_pack/science/raw_flux_anomaly + name = "Raw Flux Anomaly" + desc = "The raw core of a flux anomaly, ready to be implosion-compressed into a powerful artifact." + cost = 5000 + access = ACCESS_TOX + contains = list(/obj/item/raw_anomaly_core/flux) + crate_name = "raw flux anomaly" + crate_type = /obj/structure/closet/crate/secure/science + +/datum/supply_pack/science/raw_grav_anomaly + name = "Raw Gravitational Anomaly" + desc = "The raw core of a gravitational anomaly, ready to be implosion-compressed into a powerful artifact." + cost = 5000 + access = ACCESS_TOX + contains = list(/obj/item/raw_anomaly_core/grav) + crate_name = "raw pyro anomaly" + crate_type = /obj/structure/closet/crate/secure/science + +/datum/supply_pack/science/raw_vortex_anomaly + name = "Raw Vortex Anomaly" + desc = "The raw core of a vortex anomaly, ready to be implosion-compressed into a powerful artifact." + cost = 5000 + access = ACCESS_TOX + contains = list(/obj/item/raw_anomaly_core/vortex) + crate_name = "raw vortex anomaly" + crate_type = /obj/structure/closet/crate/secure/science + +/datum/supply_pack/science/raw_bluespace_anomaly + name = "Raw Bluespace Anomaly" + desc = "The raw core of a bluespace anomaly, ready to be implosion-compressed into a powerful artifact." + cost = 5000 + access = ACCESS_TOX + contains = list(/obj/item/raw_anomaly_core/bluespace) + crate_name = "raw bluespace anomaly" + crate_type = /obj/structure/closet/crate/secure/science + +/datum/supply_pack/science/raw_pyro_anomaly + name = "Raw Pyro Anomaly" + desc = "The raw core of a pyro anomaly, ready to be implosion-compressed into a powerful artifact." + cost = 5000 + access = ACCESS_TOX + contains = list(/obj/item/raw_anomaly_core/pyro) + crate_name = "raw pyro anomaly" + crate_type = /obj/structure/closet/crate/secure/science diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 51e027522c..cff3040926 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -163,6 +163,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) ) var/custom_speech_verb = "default" //if your say_mod is to be something other than your races var/custom_tongue = "default" //if your tongue is to be something other than your races + var/modified_limbs = list() //prosthetic/amputated limbs var/chosen_limb_id //body sprite selected to load for the users limbs, null means default, is sanitized when loaded /// Security record note section @@ -429,12 +430,19 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Gender:[gender == MALE ? "Male" : (gender == FEMALE ? "Female" : (gender == PLURAL ? "Non-binary" : "Object"))]
" if(gender != NEUTER && pref_species.sexes) dat += "Body Model:[features["body_model"] == MALE ? "Masculine" : "Feminine"]
" + dat += "Limb Modification:
" + dat += "Modify Limbs
" + for(var/modification in modified_limbs) + if(modified_limbs[modification][1] == LOADOUT_LIMB_PROSTHETIC) + dat += "[modification]: [modified_limbs[modification][2]]
" + else + dat += "[modification]: [modified_limbs[modification][1]]
" + dat += "
" dat += "Species:[pref_species.name]
" dat += "Custom Species Name:[custom_species ? custom_species : "None"]
" dat += "Random Body:Randomize!
" dat += "Always Random Body:[be_random_body ? "Yes" : "No"]
" dat += "
Cycle background:[bgstate]
" - var/use_skintones = pref_species.use_skintones if(use_skintones) dat += APPEARANCE_CATEGORY_COLUMN @@ -1235,6 +1243,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) for(var/V in all_quirks) var/datum/quirk/T = SSquirks.quirks[V] bal -= initial(T.value) + for(var/modification in modified_limbs) + if(modified_limbs[modification][1] == LOADOUT_LIMB_PROSTHETIC) + return bal + 1 //max 1 point regardless of how many prosthetics return bal /datum/preferences/proc/GetPositiveQuirkCount() @@ -1492,6 +1503,29 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("cycle_bg") bgstate = next_list_item(bgstate, bgstate_options) + if("modify_limbs") + var/limb_type = input(user, "Choose the limb to modify:", "Character Preference") as null|anything in LOADOUT_ALLOWED_LIMB_TARGETS + if(limb_type) + var/modification_type = input(user, "Choose the modification to the limb:", "Character Preference") as null|anything in LOADOUT_LIMBS + if(modification_type) + if(modification_type == LOADOUT_LIMB_PROSTHETIC) + var/prosthetic_type = input(user, "Choose the type of prosthetic", "Character Preference") as null|anything in (list("prosthetic") + GLOB.prosthetic_limb_types) + if(prosthetic_type) + var/number_of_prosthetics = 0 + for(var/modification in modified_limbs) + if(modified_limbs[modification][1] == LOADOUT_LIMB_PROSTHETIC) + number_of_prosthetics += 1 + if(number_of_prosthetics >= MAXIMUM_LOADOUT_PROSTHETICS && !(limb_type in modified_limbs && modified_limbs[limb_type][1] == LOADOUT_LIMB_PROSTHETIC)) + to_chat(user, "You can only have up to two prosthetic limbs!") + else + //save the actual prosthetic data + modified_limbs[limb_type] = list(modification_type, prosthetic_type) + else + if(modification_type == LOADOUT_LIMB_NORMAL) + modified_limbs -= limb_type + else + modified_limbs[limb_type] = list(modification_type) + if("underwear") var/new_underwear = input(user, "Choose your character's underwear:", "Character Preference") as null|anything in GLOB.underwear_list if(new_underwear) @@ -2478,7 +2512,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) ShowChoices(user) return 1 -/datum/preferences/proc/copy_to(mob/living/carbon/human/character, icon_updates = 1, roundstart_checks = TRUE) +/datum/preferences/proc/copy_to(mob/living/carbon/human/character, icon_updates = 1, roundstart_checks = TRUE, initial_spawn = FALSE) if(be_random_name) real_name = pref_species.random_name(gender) @@ -2573,6 +2607,35 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(custom_speech_verb != "default") character.dna.species.say_mod = custom_speech_verb + //limb stuff, only done when initially spawning in + if(initial_spawn) + //delete any existing prosthetic limbs to make sure no remnant prosthetics are left over + for(var/obj/item/bodypart/part in character.bodyparts) + if(part.status == BODYPART_ROBOTIC) + qdel(part) + character.regenerate_limbs() //regenerate limbs so now you only have normal limbs + for(var/modified_limb in modified_limbs) + var/modification = modified_limbs[modified_limb][1] + var/obj/item/bodypart/old_part = character.get_bodypart(modified_limb) + if(modification == LOADOUT_LIMB_PROSTHETIC) + var/obj/item/bodypart/new_limb + switch(modified_limb) + if(BODY_ZONE_L_ARM) + new_limb = new/obj/item/bodypart/l_arm/robot/surplus(character) + if(BODY_ZONE_R_ARM) + new_limb = new/obj/item/bodypart/r_arm/robot/surplus(character) + if(BODY_ZONE_L_LEG) + new_limb = new/obj/item/bodypart/l_leg/robot/surplus(character) + if(BODY_ZONE_R_LEG) + new_limb = new/obj/item/bodypart/r_leg/robot/surplus(character) + var/prosthetic_type = modified_limbs[modified_limb][2] + if(prosthetic_type != "prosthetic") //lets just leave the old sprites as they are + new_limb.icon = file("icons/mob/augmentation/cosmetic_prosthetic/[prosthetic_type].dmi") + new_limb.replace_limb(character) + qdel(old_part) + + if(length(modified_limbs)) + character.regenerate_icons() SEND_SIGNAL(character, COMSIG_HUMAN_PREFS_COPIED_TO, src, icon_updates, roundstart_checks) @@ -2581,6 +2644,18 @@ GLOBAL_LIST_EMPTY(preferences_datums) character.update_body() character.update_hair() +/datum/preferences/proc/post_copy_to(mob/living/carbon/human/character) + //if no legs, and not a paraplegic or a slime, give them a free wheelchair + if(modified_limbs[BODY_ZONE_L_LEG] == LOADOUT_LIMB_AMPUTATED && modified_limbs[BODY_ZONE_R_LEG] == LOADOUT_LIMB_AMPUTATED && !character.has_quirk(/datum/quirk/paraplegic) && !isjellyperson(character)) + if(character.buckled) + character.buckled.unbuckle_mob(character) + var/turf/T = get_turf(character) + var/obj/structure/chair/spawn_chair = locate() in T + var/obj/vehicle/ridden/wheelchair/wheels = new(T) + if(spawn_chair) // Makes spawning on the arrivals shuttle more consistent looking + wheels.setDir(spawn_chair.dir) + wheels.buckle_mob(character) + /datum/preferences/proc/get_default_name(name_id) switch(name_id) if("human") diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 8591d77e50..5856a7b6e1 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -514,6 +514,12 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["scars3"] >> scars_list["3"] S["scars4"] >> scars_list["4"] S["scars5"] >> scars_list["5"] + var/limbmodstr + S["modified_limbs"] >> limbmodstr + if(length(limbmodstr)) + modified_limbs = safe_json_decode(limbmodstr) + else + modified_limbs = list() S["chosen_limb_id"] >> chosen_limb_id S["hide_ckey"] >> hide_ckey //saved per-character @@ -845,8 +851,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["feature_ooc_notes"], features["ooc_notes"]) - WRITE_FILE(S["chosen_limb_id"], chosen_limb_id) - //Custom names for(var/custom_name_id in GLOB.preferences_custom_names) var/savefile_slot_name = custom_name_id + "_name" //TODO remove this @@ -874,6 +878,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["scars3"] , scars_list["3"]) WRITE_FILE(S["scars4"] , scars_list["4"]) WRITE_FILE(S["scars5"] , scars_list["5"]) + if(islist(modified_limbs)) + WRITE_FILE(S["modified_limbs"] , safe_json_encode(modified_limbs)) + WRITE_FILE(S["chosen_limb_id"], chosen_limb_id) //gear loadout diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm index 632d59187f..f496468371 100644 --- a/code/modules/clothing/suits/toggles.dm +++ b/code/modules/clothing/suits/toggles.dm @@ -5,9 +5,9 @@ var/obj/item/clothing/head/hooded/hood var/hoodtype = /obj/item/clothing/head/hooded/winterhood //so the chaplain hoodie or other hoodies can override this -/obj/item/clothing/suit/hooded/New() +/obj/item/clothing/suit/hooded/Initialize() + . = ..() hood = MakeHelmet() - ..() /obj/item/clothing/suit/hooded/Destroy() . = ..() @@ -48,7 +48,7 @@ /obj/item/clothing/suit/hooded/update_icon_state() icon_state = "[initial(icon_state)]" - if(ishuman(hood.loc)) + if(ishuman(hood?.loc)) var/mob/living/carbon/human/H = hood.loc if(H.head == hood) icon_state += "_t" @@ -131,8 +131,8 @@ //Hardsuit toggle code /obj/item/clothing/suit/space/hardsuit/Initialize() - helmet = MakeHelmet() . = ..() + helmet = MakeHelmet() /obj/item/clothing/suit/space/hardsuit/Destroy() if(helmet) diff --git a/code/modules/clothing/under/costume.dm b/code/modules/clothing/under/costume.dm index 18cd104ff8..f8292738ee 100644 --- a/code/modules/clothing/under/costume.dm +++ b/code/modules/clothing/under/costume.dm @@ -267,7 +267,7 @@ mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON|USE_TAUR_CLIP_MASK /obj/item/clothing/under/costume/christmas/croptop/green - name = "green feminine christmas suit" + name = "green croptop christmas suit" desc = "A simple green christmas suit. Smells minty!" icon_state = "christmasfemaleg" item_state = "christmasfemaleg" diff --git a/code/modules/events/anomaly_bluespace.dm b/code/modules/events/anomaly_bluespace.dm index 395b3b88a5..7f0dedaab6 100644 --- a/code/modules/events/anomaly_bluespace.dm +++ b/code/modules/events/anomaly_bluespace.dm @@ -4,7 +4,6 @@ max_occurrences = 1 weight = 5 - gamemode_blacklist = list("dynamic") /datum/round_event/anomaly/anomaly_bluespace startWhen = 3 diff --git a/code/modules/events/anomaly_flux.dm b/code/modules/events/anomaly_flux.dm index a9a7ed50b9..8047976330 100644 --- a/code/modules/events/anomaly_flux.dm +++ b/code/modules/events/anomaly_flux.dm @@ -5,7 +5,6 @@ min_players = 10 max_occurrences = 5 weight = 20 - gamemode_blacklist = list("dynamic") /datum/round_event/anomaly/anomaly_flux startWhen = 10 diff --git a/code/modules/events/anomaly_grav.dm b/code/modules/events/anomaly_grav.dm index cabd7face8..7d2bb33889 100644 --- a/code/modules/events/anomaly_grav.dm +++ b/code/modules/events/anomaly_grav.dm @@ -4,7 +4,6 @@ max_occurrences = 5 weight = 20 - gamemode_blacklist = list("dynamic") /datum/round_event/anomaly/anomaly_grav diff --git a/code/modules/events/anomaly_pyro.dm b/code/modules/events/anomaly_pyro.dm index 8c8fbd6d36..350c8fc946 100644 --- a/code/modules/events/anomaly_pyro.dm +++ b/code/modules/events/anomaly_pyro.dm @@ -4,7 +4,6 @@ max_occurrences = 5 weight = 20 - gamemode_blacklist = list("dynamic") /datum/round_event/anomaly/anomaly_pyro startWhen = 3 diff --git a/code/modules/events/anomaly_vortex.dm b/code/modules/events/anomaly_vortex.dm index 96d084873d..e2a4ceadf3 100644 --- a/code/modules/events/anomaly_vortex.dm +++ b/code/modules/events/anomaly_vortex.dm @@ -5,7 +5,6 @@ min_players = 20 max_occurrences = 2 weight = 5 - gamemode_blacklist = list("dynamic") /datum/round_event/anomaly/anomaly_vortex startWhen = 10 diff --git a/code/modules/events/brain_trauma.dm b/code/modules/events/brain_trauma.dm index 0a07e2a693..75c514774c 100644 --- a/code/modules/events/brain_trauma.dm +++ b/code/modules/events/brain_trauma.dm @@ -3,6 +3,13 @@ typepath = /datum/round_event/brain_trauma weight = 25 +/datum/round_event_control/brain_trauma/canSpawnEvent(var/players_amt, var/gamemode) + var/list/enemy_roles = list("Medical Doctor","Chief Medical Officer","Paramedic") + for (var/mob/M in GLOB.alive_mob_list) + if(M.stat != DEAD && (M.mind?.assigned_role in enemy_roles)) + return TRUE + return FALSE + /datum/round_event/brain_trauma fakeable = FALSE @@ -16,18 +23,19 @@ continue if(HAS_TRAIT(H,TRAIT_EXEMPT_HEALTH_EVENTS)) continue + if(!is_station_level(H.z)) + continue traumatize(H) break /datum/round_event/brain_trauma/proc/traumatize(mob/living/carbon/human/H) var/resistance = pick( 65;TRAUMA_RESILIENCE_BASIC, - 30;TRAUMA_RESILIENCE_SURGERY, - 5;TRAUMA_RESILIENCE_LOBOTOMY) + 35;TRAUMA_RESILIENCE_SURGERY) var/trauma_type = pickweight(list( - BRAIN_TRAUMA_MILD = 60, - BRAIN_TRAUMA_SEVERE = 30, + BRAIN_TRAUMA_MILD = 80, + BRAIN_TRAUMA_SEVERE = 10, BRAIN_TRAUMA_SPECIAL = 10 )) diff --git a/code/modules/events/brand_intelligence.dm b/code/modules/events/brand_intelligence.dm index 1c88e68377..f0e4bd4a53 100644 --- a/code/modules/events/brand_intelligence.dm +++ b/code/modules/events/brand_intelligence.dm @@ -5,7 +5,6 @@ min_players = 15 max_occurrences = 1 - gamemode_blacklist = list("dynamic") /datum/round_event/brand_intelligence announceWhen = 21 diff --git a/code/modules/events/carp_migration.dm b/code/modules/events/carp_migration.dm index 2c553fc8a7..d08e6267a0 100644 --- a/code/modules/events/carp_migration.dm +++ b/code/modules/events/carp_migration.dm @@ -5,7 +5,6 @@ min_players = 2 earliest_start = 10 MINUTES max_occurrences = 6 - gamemode_blacklist = list("dynamic") /datum/round_event/carp_migration announceWhen = 3 diff --git a/code/modules/events/communications_blackout.dm b/code/modules/events/communications_blackout.dm index 45fa1c8a01..cb62e0df22 100644 --- a/code/modules/events/communications_blackout.dm +++ b/code/modules/events/communications_blackout.dm @@ -2,7 +2,6 @@ name = "Communications Blackout" typepath = /datum/round_event/communications_blackout weight = 30 - gamemode_blacklist = list("dynamic") /datum/round_event/communications_blackout announceWhen = 1 diff --git a/code/modules/events/dust.dm b/code/modules/events/dust.dm index 860685c787..eb7edcafbf 100644 --- a/code/modules/events/dust.dm +++ b/code/modules/events/dust.dm @@ -5,7 +5,6 @@ max_occurrences = 1000 earliest_start = 0 MINUTES alert_observers = FALSE - gamemode_blacklist = list("dynamic") /datum/round_event/space_dust startWhen = 1 @@ -29,4 +28,4 @@ fakeable = FALSE /datum/round_event/sandstorm/tick() - spawn_meteors(10, GLOB.meteorsC) \ No newline at end of file + spawn_meteors(10, GLOB.meteorsC) diff --git a/code/modules/events/electrical_storm.dm b/code/modules/events/electrical_storm.dm index 5e5e318e3c..b850b4db62 100644 --- a/code/modules/events/electrical_storm.dm +++ b/code/modules/events/electrical_storm.dm @@ -5,7 +5,6 @@ min_players = 5 weight = 40 alert_observers = FALSE - gamemode_blacklist = list("dynamic") /datum/round_event/electrical_storm var/lightsoutAmount = 1 diff --git a/code/modules/events/heart_attack.dm b/code/modules/events/heart_attack.dm index b3bc571a4a..8c33e69107 100644 --- a/code/modules/events/heart_attack.dm +++ b/code/modules/events/heart_attack.dm @@ -4,7 +4,6 @@ weight = 20 max_occurrences = 2 min_players = 40 // To avoid shafting lowpop - gamemode_blacklist = list("dynamic") /datum/round_event/heart_attack/start() var/list/heart_attack_contestants = list() @@ -20,4 +19,4 @@ var/mob/living/carbon/human/winner = pickweight(heart_attack_contestants) var/datum/disease/D = new /datum/disease/heart_failure() winner.ForceContractDisease(D, FALSE, TRUE) - announce_to_ghosts(winner) \ No newline at end of file + announce_to_ghosts(winner) diff --git a/code/modules/events/ion_storm.dm b/code/modules/events/ion_storm.dm index b15e9d1f99..c75aff0c4a 100644 --- a/code/modules/events/ion_storm.dm +++ b/code/modules/events/ion_storm.dm @@ -3,7 +3,6 @@ /datum/round_event_control/ion_storm name = "Ion Storm" typepath = /datum/round_event/ion_storm - gamemode_blacklist = list("dynamic") weight = 15 min_players = 2 diff --git a/code/modules/events/major_dust.dm b/code/modules/events/major_dust.dm index c594d7b3c0..d7d8f1aec8 100644 --- a/code/modules/events/major_dust.dm +++ b/code/modules/events/major_dust.dm @@ -2,7 +2,6 @@ name = "Major Space Dust" typepath = /datum/round_event/meteor_wave/major_dust weight = 8 - gamemode_blacklist = list("dynamic") /datum/round_event/meteor_wave/major_dust wave_name = "space dust" diff --git a/code/modules/events/meteor_wave.dm b/code/modules/events/meteor_wave.dm index 7763f9950d..e69af1df13 100644 --- a/code/modules/events/meteor_wave.dm +++ b/code/modules/events/meteor_wave.dm @@ -10,7 +10,6 @@ min_players = 15 max_occurrences = 3 earliest_start = 25 MINUTES - gamemode_blacklist = list("dynamic") /datum/round_event/meteor_wave startWhen = 6 @@ -23,7 +22,7 @@ /datum/round_event/meteor_wave/setup() announceWhen = 1 - startWhen = rand(90, 180) // Apparently it is by 2 seconds, so 90 is actually 180 seconds, and 180 is 360 seconds. So this is 3-6 minutes + startWhen = 150 // 5 minutes if(GLOB.singularity_counter) startWhen *= 1 - min(GLOB.singularity_counter * SINGULO_BEACON_DISTURBANCE, SINGULO_BEACON_MAX_DISTURBANCE) endWhen = startWhen + 60 diff --git a/code/modules/events/nightmare.dm b/code/modules/events/nightmare.dm index 6e5512a617..698f5130f1 100644 --- a/code/modules/events/nightmare.dm +++ b/code/modules/events/nightmare.dm @@ -2,7 +2,6 @@ name = "Spawn Nightmare" typepath = /datum/round_event/ghost_role/nightmare max_occurrences = 1 - gamemode_blacklist = list("dynamic") min_players = 20 /datum/round_event/ghost_role/nightmare diff --git a/code/modules/events/pirates.dm b/code/modules/events/pirates.dm index 9ab5e8d517..4cbfb8ae9a 100644 --- a/code/modules/events/pirates.dm +++ b/code/modules/events/pirates.dm @@ -5,7 +5,7 @@ max_occurrences = 1 min_players = 10 earliest_start = 30 MINUTES - gamemode_blacklist = list("nuclear","dynamic") + gamemode_blacklist = list("nuclear") /datum/round_event_control/pirates/preRunEvent() if (!SSmapping.empty_space) diff --git a/code/modules/events/portal_storm.dm b/code/modules/events/portal_storm.dm index 457b5bd4ec..5ef30d0030 100644 --- a/code/modules/events/portal_storm.dm +++ b/code/modules/events/portal_storm.dm @@ -4,7 +4,6 @@ weight = 2 min_players = 15 earliest_start = 30 MINUTES - gamemode_blacklist = list("dynamic") /datum/round_event/portal_storm/syndicate_shocktroop boss_types = list(/mob/living/simple_animal/hostile/syndicate/melee/space/stormtrooper = 2) diff --git a/code/modules/events/processor_overload.dm b/code/modules/events/processor_overload.dm index 22e475a8ef..6bedce6b4b 100644 --- a/code/modules/events/processor_overload.dm +++ b/code/modules/events/processor_overload.dm @@ -3,7 +3,6 @@ typepath = /datum/round_event/processor_overload weight = 15 min_players = 20 - gamemode_blacklist = list("dynamic") /datum/round_event/processor_overload announceWhen = 1 diff --git a/code/modules/events/radiation_storm.dm b/code/modules/events/radiation_storm.dm index 0a5bedb464..36e16bb2c9 100644 --- a/code/modules/events/radiation_storm.dm +++ b/code/modules/events/radiation_storm.dm @@ -2,7 +2,6 @@ name = "Radiation Storm" typepath = /datum/round_event/radiation_storm max_occurrences = 1 - gamemode_blacklist = list("dynamic") /datum/round_event/radiation_storm diff --git a/code/modules/events/spider_infestation.dm b/code/modules/events/spider_infestation.dm index d1c327e0f7..23ce6ce730 100644 --- a/code/modules/events/spider_infestation.dm +++ b/code/modules/events/spider_infestation.dm @@ -2,7 +2,6 @@ name = "Spider Infestation" typepath = /datum/round_event/spider_infestation weight = 5 - gamemode_blacklist = list("dynamic") max_occurrences = 1 min_players = 15 diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm index dc672cec45..cd7b23a577 100644 --- a/code/modules/events/vent_clog.dm +++ b/code/modules/events/vent_clog.dm @@ -3,7 +3,6 @@ typepath = /datum/round_event/vent_clog weight = 10 max_occurrences = 3 - gamemode_blacklist = list("dynamic") min_players = 25 /datum/round_event/vent_clog diff --git a/code/modules/events/wormholes.dm b/code/modules/events/wormholes.dm index 1b4716b407..0920c9ccb6 100644 --- a/code/modules/events/wormholes.dm +++ b/code/modules/events/wormholes.dm @@ -4,7 +4,6 @@ max_occurrences = 3 weight = 2 min_players = 2 - gamemode_blacklist = list("dynamic") /datum/round_event/wormholes diff --git a/code/modules/food_and_drinks/food/snacks_cake.dm b/code/modules/food_and_drinks/food/snacks_cake.dm index 1117dbc3d3..be07826a7f 100644 --- a/code/modules/food_and_drinks/food/snacks_cake.dm +++ b/code/modules/food_and_drinks/food/snacks_cake.dm @@ -133,7 +133,7 @@ slices_num = 5 bonus_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 10) tastes = list("cake" = 5, "sweetness" = 2, "unbearable sourness" = 2) - foodtype = GRAIN | DAIRY | FRUIT | SUGAR + foodtype = GRAIN | DAIRY | FRUIT | SUGAR | ANTITOXIC /obj/item/reagent_containers/food/snacks/cakeslice/lime name = "lime cake slice" @@ -141,7 +141,7 @@ icon_state = "limecake_slice" filling_color = "#00FF00" tastes = list("cake" = 5, "sweetness" = 2, "unbearable sourness" = 2) - foodtype = GRAIN | DAIRY | FRUIT | SUGAR + foodtype = GRAIN | DAIRY | FRUIT | SUGAR | ANTITOXIC /obj/item/reagent_containers/food/snacks/store/cake/lemon name = "lemon cake" diff --git a/code/modules/food_and_drinks/food/snacks_frozen.dm b/code/modules/food_and_drinks/food/snacks_frozen.dm index 39c9c6c04f..32a89dbd58 100644 --- a/code/modules/food_and_drinks/food/snacks_frozen.dm +++ b/code/modules/food_and_drinks/food/snacks_frozen.dm @@ -103,7 +103,7 @@ icon_state = "lime_sc" list_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/limejuice = 5) tastes = list("ice" = 1, "water" = 1, "limes" = 5) - foodtype = FRUIT + foodtype = FRUIT | ANTITOXIC /obj/item/reagent_containers/food/snacks/snowcones/lemon name = "lemon snowcone" @@ -191,7 +191,7 @@ icon_state = "fruitsalad_sc" list_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/lemonjuice = 5, /datum/reagent/consumable/limejuice = 5, /datum/reagent/consumable/orangejuice = 5) tastes = list("ice" = 1, "water" = 1, "oranges" = 5, "limes" = 5, "lemons" = 5, "citrus" = 5, "salad" = 5) - foodtype = FRUIT + foodtype = FRUIT | ANTITOXIC /obj/item/reagent_containers/food/snacks/snowcones/pineapple name = "pineapple snowcone" diff --git a/code/modules/food_and_drinks/food/snacks_other.dm b/code/modules/food_and_drinks/food/snacks_other.dm index e0697cecea..b771a90907 100644 --- a/code/modules/food_and_drinks/food/snacks_other.dm +++ b/code/modules/food_and_drinks/food/snacks_other.dm @@ -232,7 +232,7 @@ list_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/toxin = 1, /datum/reagent/iron = 10, /datum/reagent/consumable/sugar = 5, /datum/reagent/medicine/omnizine = 2) //lollipop, but vitamins = toxins filling_color = "#00800" tastes = list("cobwebs" = 1, "sugar" = 2) - foodtype = JUNKFOOD | SUGAR + foodtype = JUNKFOOD | SUGAR | ANTITOXIC /obj/item/reagent_containers/food/snacks/tobiko name = "tobiko" @@ -451,7 +451,7 @@ var/mutable_appearance/head var/headcolor = rgb(0, 0, 0) tastes = list("candy" = 1) - foodtype = JUNKFOOD | SUGAR + foodtype = JUNKFOOD | SUGAR | ANTITOXIC /obj/item/reagent_containers/food/snacks/lollipop/Initialize() . = ..() @@ -756,4 +756,4 @@ bitesize = 2 name = "hot-cross bun" desc = "The Cross represents the Assistants that died for your sins." - icon_state = "hotcrossbun" \ No newline at end of file + icon_state = "hotcrossbun" diff --git a/code/modules/food_and_drinks/food/snacks_pastry.dm b/code/modules/food_and_drinks/food/snacks_pastry.dm index d65907daea..13a46395ea 100644 --- a/code/modules/food_and_drinks/food/snacks_pastry.dm +++ b/code/modules/food_and_drinks/food/snacks_pastry.dm @@ -509,7 +509,7 @@ list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/medicine/omnizine = 3) cooked_type = null tastes = list("meat" = 2, "dough" = 2, "laziness" = 1) - foodtype = GRAIN + foodtype = GRAIN | ANTITOXIC /obj/item/reagent_containers/food/snacks/dankpocket name = "\improper Dank-pocket" @@ -556,9 +556,11 @@ name = "exceptional plump helmet biscuit" desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump helmet biscuit!" bonus_reagents = list(/datum/reagent/medicine/omnizine = 5, /datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1) + foodtype += ANTITOXIC . = ..() if(fey) reagents.add_reagent(/datum/reagent/medicine/omnizine, 5) + foodtype += ANTITOXIC /obj/item/reagent_containers/food/snacks/cracker name = "cracker" diff --git a/code/modules/food_and_drinks/food/snacks_pie.dm b/code/modules/food_and_drinks/food/snacks_pie.dm index 81805f5529..24522503c1 100644 --- a/code/modules/food_and_drinks/food/snacks_pie.dm +++ b/code/modules/food_and_drinks/food/snacks_pie.dm @@ -171,8 +171,10 @@ name = "exceptional plump pie" desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump pie!" bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/medicine/omnizine = 5, /datum/reagent/consumable/nutriment/vitamin = 4) + foodtype += ANTITOXIC if(fey) reagents.add_reagent(/datum/reagent/medicine/omnizine, 5) + foodtype += ANTITOXIC /obj/item/reagent_containers/food/snacks/pie/xemeatpie diff --git a/code/modules/food_and_drinks/food/snacks_pizza.dm b/code/modules/food_and_drinks/food/snacks_pizza.dm index f30c182963..75cf8ffb82 100644 --- a/code/modules/food_and_drinks/food/snacks_pizza.dm +++ b/code/modules/food_and_drinks/food/snacks_pizza.dm @@ -109,7 +109,7 @@ bonus_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/nutriment/vitamin = 5) list_reagents = list(/datum/reagent/consumable/nutriment = 25, /datum/reagent/consumable/tomatojuice = 6, /datum/reagent/medicine/omnizine = 10, /datum/reagent/consumable/nutriment/vitamin = 5) tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "meat" = 1, "laziness" = 1) - foodtype = GRAIN | VEGETABLES | DAIRY | MEAT | JUNKFOOD + foodtype = GRAIN | VEGETABLES | DAIRY | MEAT | JUNKFOOD | ANTITOXIC /obj/item/reagent_containers/food/snacks/pizzaslice/donkpocket name = "donkpocket pizza slice" @@ -117,7 +117,7 @@ icon_state = "donkpocketpizzaslice" filling_color = "#FFA500" tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "meat" = 1, "laziness" = 1) - foodtype = GRAIN | VEGETABLES | DAIRY | MEAT | JUNKFOOD + foodtype = GRAIN | VEGETABLES | DAIRY | MEAT | JUNKFOOD | ANTITOXIC /obj/item/reagent_containers/food/snacks/pizza/dank name = "dank pizza" @@ -127,7 +127,7 @@ bonus_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/vitamin = 6) list_reagents = list(/datum/reagent/consumable/nutriment = 25, /datum/reagent/consumable/doctor_delight = 5, /datum/reagent/consumable/tomatojuice = 6, /datum/reagent/consumable/nutriment/vitamin = 5) tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "meat" = 1) - foodtype = GRAIN | VEGETABLES | FRUIT | DAIRY + foodtype = GRAIN | VEGETABLES | FRUIT | DAIRY | ANTITOXIC /obj/item/reagent_containers/food/snacks/pizzaslice/dank name = "dank pizza slice" @@ -135,7 +135,7 @@ icon_state = "dankpizzaslice" filling_color = "#2E8B57" tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "meat" = 1) - foodtype = GRAIN | VEGETABLES | FRUIT | DAIRY + foodtype = GRAIN | VEGETABLES | FRUIT | DAIRY | ANTITOXIC /obj/item/reagent_containers/food/snacks/pizza/sassysage name = "sassysage pizza" @@ -187,6 +187,7 @@ slice_path = /obj/item/reagent_containers/food/snacks/pizzaslice/arnold bonus_reagents = list(/datum/reagent/consumable/nutriment = 30, /datum/reagent/consumable/nutriment/vitamin = 6, /datum/reagent/iron = 10, /datum/reagent/medicine/omnizine = 30) tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "pepperoni" = 2, "9 millimeter bullets" = 2) + /obj/item/reagent_containers/food/snacks/proc/try_break_off(mob/living/M, mob/living/user) //maybe i give you a pizza maybe i break off your arm var/obj/item/bodypart/l_arm = user.get_bodypart(BODY_ZONE_L_ARM) @@ -244,4 +245,4 @@ icon_state = "meatpizzaslice" filling_color = "#A52A2A" tastes = list("cardboard" = 1, "tomato" = 1, "cheese" = 1, "pepperoni" = 2) - foodtype = GRAIN | VEGETABLES | DAIRY | MEAT \ No newline at end of file + foodtype = GRAIN | VEGETABLES | DAIRY | MEAT diff --git a/code/modules/food_and_drinks/food/snacks_salad.dm b/code/modules/food_and_drinks/food/snacks_salad.dm index be7c3d25da..8c6eecb829 100644 --- a/code/modules/food_and_drinks/food/snacks_salad.dm +++ b/code/modules/food_and_drinks/food/snacks_salad.dm @@ -20,7 +20,7 @@ bonus_reagents = list(/datum/reagent/medicine/omnizine = 2, /datum/reagent/consumable/nutriment/vitamin = 6) list_reagents = list(/datum/reagent/consumable/nutriment = 8, /datum/reagent/medicine/omnizine = 8, /datum/reagent/consumable/nutriment/vitamin = 6) tastes = list("leaves" = 1) - foodtype = VEGETABLES + foodtype = VEGETABLES | ANTITOXIC /obj/item/reagent_containers/food/snacks/salad/herbsalad name = "herb salad" @@ -38,7 +38,7 @@ bonus_reagents = list(/datum/reagent/consumable/doctor_delight = 5, /datum/reagent/consumable/nutriment/vitamin = 4) list_reagents = list(/datum/reagent/consumable/nutriment = 8, /datum/reagent/consumable/doctor_delight = 5, /datum/reagent/consumable/nutriment/vitamin = 2) tastes = list("leaves" = 1, "potato" = 1, "meat" = 1, "valids" = 1) - foodtype = VEGETABLES | MEAT | FRIED | JUNKFOOD | FRUIT + foodtype = VEGETABLES | MEAT | FRIED | JUNKFOOD | FRUIT | ANTITOXIC /obj/item/reagent_containers/food/snacks/salad/oatmeal name = "oatmeal" @@ -133,7 +133,7 @@ trash = /obj/item/reagent_containers/glass/bowl list_reagents = list(/datum/reagent/consumable/nutriment = 7, /datum/reagent/consumable/nutriment/vitamin = 5, /datum/reagent/medicine/earthsblood = 3, /datum/reagent/medicine/omnizine = 5, /datum/reagent/drug/happiness = 2) tastes = list("hope" = 1) - foodtype = VEGETABLES + foodtype = VEGETABLES | ANTITOXIC /obj/item/reagent_containers/food/snacks/salad/gumbo name = "black eyed gumbo" diff --git a/code/modules/food_and_drinks/food/snacks_soup.dm b/code/modules/food_and_drinks/food/snacks_soup.dm index ffafcc6b1e..eea7cdb87d 100644 --- a/code/modules/food_and_drinks/food/snacks_soup.dm +++ b/code/modules/food_and_drinks/food/snacks_soup.dm @@ -89,7 +89,7 @@ icon_state = "nettlesoup" bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/medicine/omnizine = 5, /datum/reagent/consumable/nutriment/vitamin = 5) tastes = list("nettles" = 1) - foodtype = VEGETABLES + foodtype = VEGETABLES | ANTITOXIC /obj/item/reagent_containers/food/snacks/soup/mystery name = "mystery soup" diff --git a/code/modules/food_and_drinks/food/snacks_vend.dm b/code/modules/food_and_drinks/food/snacks_vend.dm index b4c7c89b74..4e8687fc23 100644 --- a/code/modules/food_and_drinks/food/snacks_vend.dm +++ b/code/modules/food_and_drinks/food/snacks_vend.dm @@ -89,7 +89,7 @@ list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/doctor_delight = 5) filling_color = "#F5F5DC" tastes = list("sweetness" = 3, "cake" = 1) - foodtype = GRAIN | FRUIT | VEGETABLES + foodtype = GRAIN | FRUIT | VEGETABLES | ANTITOXIC custom_price = PRICE_CHEAP /obj/item/reagent_containers/food/snacks/energybar diff --git a/code/modules/hydroponics/grown/ambrosia.dm b/code/modules/hydroponics/grown/ambrosia.dm index e84025208a..b8480a1901 100644 --- a/code/modules/hydroponics/grown/ambrosia.dm +++ b/code/modules/hydroponics/grown/ambrosia.dm @@ -49,6 +49,7 @@ seed = /obj/item/seeds/ambrosia/deus name = "ambrosia deus branch" desc = "Eating this makes you feel immortal!" + foodtype = VEGETABLES | ANTITOXIC icon_state = "ambrosiadeus" filling_color = "#008B8B" wine_power = 50 diff --git a/code/modules/hydroponics/grown/cannabis.dm b/code/modules/hydroponics/grown/cannabis.dm index 6525ac42d4..e4fe7fcdbc 100644 --- a/code/modules/hydroponics/grown/cannabis.dm +++ b/code/modules/hydroponics/grown/cannabis.dm @@ -104,6 +104,7 @@ seed = /obj/item/seeds/cannabis/death name = "death cannabis leaf" desc = "Looks a bit dark. Oh well." + foodtype = VEGETABLES | TOXIC icon_state = "blackcannabis" wine_power = 40 @@ -111,6 +112,7 @@ seed = /obj/item/seeds/cannabis/white name = "white cannabis leaf" desc = "It feels smooth and nice to the touch." + foodtype = VEGETABLES | ANTITOXIC icon_state = "whitecannabis" wine_power = 10 diff --git a/code/modules/hydroponics/grown/citrus.dm b/code/modules/hydroponics/grown/citrus.dm index d130d50aa5..e199c2c6b1 100644 --- a/code/modules/hydroponics/grown/citrus.dm +++ b/code/modules/hydroponics/grown/citrus.dm @@ -29,6 +29,7 @@ seed = /obj/item/seeds/lime name = "lime" desc = "It's so sour, your face will twist." + foodtype = FRUIT | ANTITOXIC icon_state = "lime" filling_color = "#00FF00" juice_results = list(/datum/reagent/consumable/limejuice = 0) diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index 1238b37919..0feceaf1a8 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -80,6 +80,9 @@ if(mind_traits) for(var/t in mind_traits) ADD_TRAIT(H.mind, t, JOB_TRAIT) + if(/datum/quirk/paraplegic in blacklisted_quirks) + H.regenerate_limbs() //if you can't be a paraplegic, attempt to regenerate limbs to stop amputated limb selection + H.set_resting(FALSE, TRUE) //they probably shouldn't be on the floor because they had no legs then suddenly had legs /datum/job/proc/announce(mob/living/carbon/human/H) if(head_announce) diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index 80ce2522ff..a4d88158e2 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -22,7 +22,7 @@ max_integrity = 200 armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 0) var/state = 0 - var/list/allowed_books = list(/obj/item/book, /obj/item/spellbook, /obj/item/storage/book) //Things allowed in the bookcase + var/list/allowed_books = list(/obj/item/book, /obj/item/spellbook, /obj/item/storage/book, /obj/item/gun/magic/wand/book) //Things allowed in the bookcase /obj/structure/bookcase/examine(mob/user) . = ..() @@ -192,7 +192,7 @@ desc = "Crack it open, inhale the musk of its pages, and learn something new." throw_speed = 1 throw_range = 5 - w_class = WEIGHT_CLASS_NORMAL //upped to three because books are, y'know, pretty big. (and you could hide them inside eachother recursively forever) + w_class = WEIGHT_CLASS_NORMAL //upped to three because books are, y'know, pretty big. (and you could hide them inside eachother recursively forever) attack_verb = list("bashed", "whacked", "educated") resistance_flags = FLAMMABLE var/dat //Actual page content diff --git a/code/modules/mining/equipment/mineral_scanner.dm b/code/modules/mining/equipment/mineral_scanner.dm index 9ccb7c0efc..b2cd840468 100644 --- a/code/modules/mining/equipment/mineral_scanner.dm +++ b/code/modules/mining/equipment/mineral_scanner.dm @@ -12,13 +12,14 @@ slot_flags = ITEM_SLOT_BELT var/cooldown = 35 var/current_cooldown = 0 + var/range = 7 /obj/item/mining_scanner/attack_self(mob/user) if(!user.client) return if(current_cooldown <= world.time) current_cooldown = world.time + cooldown - mineral_scan_pulse(get_turf(user)) + mineral_scan_pulse(get_turf(user), range) //Debug item to identify all ore spread quickly /obj/item/mining_scanner/admin diff --git a/code/modules/mining/equipment/mining_tools.dm b/code/modules/mining/equipment/mining_tools.dm index 27259ce812..31ee37c3b0 100644 --- a/code/modules/mining/equipment/mining_tools.dm +++ b/code/modules/mining/equipment/mining_tools.dm @@ -66,6 +66,16 @@ force = 19 custom_materials = list(/datum/material/diamond=4000) +/obj/item/pickaxe/rosegold + name = "rose gold pickaxe" + icon_state = "rgpickaxe" + item_state = "rgpickaxe" + toolspeed = 0.1 + desc = "A pickaxe with a light rose gold head and some red glowing runes. Extremely robust at cracking rock walls and digging up dirt." + force = 19 + custom_materials = list(/datum/material/gold=4000) + digrange = 3 + /obj/item/pickaxe/plasteel name = "plasteel-tipped pickaxe" icon_state = "titaxe" diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 819b005b43..82492052a9 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -7,78 +7,199 @@ icon_state = "necrocrate" resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF +/obj/structure/closet/crate/necropolis/tendril/random + name = "necropolis crate" + desc = "A chest for a chest, a head for a head." + +/obj/structure/closet/crate/necropolis/tendril/random/PopulateContents() + var/loot = rand(1,3) + switch(loot) + if(1) + new /obj/structure/closet/crate/necropolis/tendril/magic(src) + if(2) + new /obj/structure/closet/crate/necropolis/tendril/weapon_armor(src) + if(3) + new /obj/structure/closet/crate/necropolis/tendril/misc(src) + /obj/structure/closet/crate/necropolis/tendril desc = "It's watching you suspiciously." -/obj/structure/closet/crate/necropolis/tendril/PopulateContents() +/obj/structure/closet/crate/necropolis/tendril/magic + name = "relic necropolis chest" + +/obj/structure/closet/crate/necropolis/tendril/weapon_armor + name = "armament necropolis chest" + +/obj/structure/closet/crate/necropolis/tendril/misc + +/obj/structure/closet/crate/necropolis/tendril/all + desc = "It's watching you suspiciously." + +/obj/structure/closet/crate/necropolis/tendril/magic/PopulateContents() + var/loot = rand(1,10) + switch(loot) + if(1) + new /obj/item/soulstone/anybody(src) + if(2) + new /obj/item/rod_of_asclepius(src) + if(3) + new /obj/item/organ/heart/cursed/wizard(src) + if(4) + new /obj/item/book/granter/spell/summonitem(src) + if(5) + new /obj/item/borg/upgrade/modkit/lifesteal(src) + new /obj/item/bedsheet/cult(src) + if(6) + new /obj/item/clothing/neck/necklace/memento_mori(src) + if(7) + new /obj/item/warp_cube/red(src) + if(8) + new /obj/item/immortality_talisman(src) + if(9) + new /obj/item/gun/magic/wand/book/healing(src) + if(10) + new /obj/item/reagent_containers/glass/bottle/ichor/red(src) + new /obj/item/reagent_containers/glass/bottle/ichor/blue(src) + new /obj/item/reagent_containers/glass/bottle/ichor/green(src) + +/obj/structure/closet/crate/necropolis/tendril/weapon_armor/PopulateContents() + var/loot = rand(1,11) + switch(loot) + if(1) + new /obj/item/clothing/suit/space/hardsuit/cult(src) + if(2) + new /obj/item/katana/lavaland(src) + if(3) + if(prob(50)) + new /obj/item/disk/design_disk/modkit_disc/resonator_blast(src) + else + new /obj/item/disk/design_disk/modkit_disc/rapid_repeater(src) + if(4) + new /obj/item/clothing/suit/space/hardsuit/ert/paranormal/beserker/old(src) + if(5) + new /obj/item/nullrod/scythe/talking(src) + if(6) + new /obj/item/nullrod/armblade(src) + if(7) + new /obj/item/reagent_containers/food/drinks/bottle/holywater/hell(src) + new /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor/old(src) + if(8) + new /obj/item/grenade/clusterbuster/inferno(src) + if(9) + new /obj/item/gun/magic/wand/book/shock(src) + if(10) + new /obj/item/gun/magic/wand/book/page(src) + if(11) + new /obj/item/gun/magic/wand/book/spark(src) + +/obj/structure/closet/crate/necropolis/tendril/misc/PopulateContents() + var/loot = rand(1,14) + switch(loot) + if(1) + new /obj/item/shared_storage/red(src) + if(2) + new /obj/item/reagent_containers/glass/bottle/potion/flight(src) + if(3) + new /obj/item/ship_in_a_bottle(src) + if(4) + new /obj/item/voodoo(src) + if(5) + new /obj/item/book_of_babel(src) + if(6) + new /obj/item/jacobs_ladder(src) + if(7) + if(prob(50)) + new /obj/item/disk/design_disk/modkit_disc/mob_and_turf_aoe(src) + else + new /obj/item/disk/design_disk/modkit_disc/bounty(src) + if(8) + new /obj/item/wisp_lantern(src) + if(9) + new /obj/item/pickaxe/rosegold(src) + if(10) + new /obj/item/bedsheet/cosmos(src) + new /obj/item/melee/skateboard/hoverboard(src) + if(11) + new /obj/item/disk/tech_disk/illegal(src) + if(12) + new /obj/item/clothing/suit/space/hardsuit/cult(src) + if(13) + new /obj/item/katana/lavaland(src) + if(14) + if(prob(50)) + new /obj/item/disk/design_disk/modkit_disc/resonator_blast(src) + else + new /obj/item/disk/design_disk/modkit_disc/rapid_repeater(src) + +/obj/structure/closet/crate/necropolis/tendril/all/PopulateContents() var/loot = rand(1,29) switch(loot) if(1) new /obj/item/shared_storage/red(src) if(2) - new /obj/item/clothing/suit/space/hardsuit/cult(src) - if(3) - new /obj/item/soulstone/anybody(src) - if(4) - new /obj/item/katana/cursed(src) - if(5) - new /obj/item/clothing/glasses/godeye(src) - if(6) new /obj/item/reagent_containers/glass/bottle/potion/flight(src) - if(7) - new /obj/item/pickaxe/diamond(src) - if(8) - if(prob(50)) - new /obj/item/disk/design_disk/modkit_disc/resonator_blast(src) - else - new /obj/item/disk/design_disk/modkit_disc/rapid_repeater(src) - if(9) - new /obj/item/rod_of_asclepius(src) - if(10) - new /obj/item/organ/heart/cursed/wizard(src) - if(11) + if(3) new /obj/item/ship_in_a_bottle(src) - if(12) - new /obj/item/clothing/suit/space/hardsuit/ert/paranormal/beserker/old(src) - if(13) + if(4) + new /obj/item/voodoo(src) + if(5) + new /obj/item/book_of_babel(src) + if(6) new /obj/item/jacobs_ladder(src) - if(14) - new /obj/item/nullrod/scythe/talking(src) - if(15) - new /obj/item/nullrod/armblade(src) - if(16) - new /obj/item/guardiancreator(src) - if(17) + if(7) if(prob(50)) new /obj/item/disk/design_disk/modkit_disc/mob_and_turf_aoe(src) else new /obj/item/disk/design_disk/modkit_disc/bounty(src) - if(18) - new /obj/item/warp_cube/red(src) - if(19) + if(8) new /obj/item/wisp_lantern(src) - if(20) - new /obj/item/immortality_talisman(src) - if(21) - new /obj/item/gun/magic/hook(src) - if(22) - new /obj/item/voodoo(src) - if(23) - new /obj/item/grenade/clusterbuster/inferno(src) - if(24) + if(9) + new /obj/item/pickaxe/rosegold(src) + if(10) + new /obj/item/bedsheet/cosmos(src) + new /obj/item/melee/skateboard/hoverboard(src) + if(11) + new /obj/item/disk/tech_disk/illegal(src) + if(12) + new /obj/item/clothing/suit/space/hardsuit/ert/paranormal/beserker/old(src) + if(13) + new /obj/item/nullrod/scythe/talking(src) + if(14) + new /obj/item/nullrod/armblade(src) + if(15) new /obj/item/reagent_containers/food/drinks/bottle/holywater/hell(src) new /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor/old(src) - if(25) + if(16) + new /obj/item/grenade/clusterbuster/inferno(src) + if(17) + new /obj/item/gun/magic/wand/book/shock(src) + if(18) + new /obj/item/gun/magic/wand/book/page(src) + if(19) + new /obj/item/gun/magic/wand/book/spark(src) + if(20) + new /obj/item/soulstone/anybody(src) + if(21) + new /obj/item/rod_of_asclepius(src) + if(22) + new /obj/item/organ/heart/cursed/wizard(src) + if(23) new /obj/item/book/granter/spell/summonitem(src) - if(26) - new /obj/item/book_of_babel(src) - if(27) + if(24) new /obj/item/borg/upgrade/modkit/lifesteal(src) new /obj/item/bedsheet/cult(src) - if(28) + if(25) new /obj/item/clothing/neck/necklace/memento_mori(src) + if(26) + new /obj/item/warp_cube/red(src) + if(27) + new /obj/item/immortality_talisman(src) + if(28) + new /obj/item/gun/magic/wand/book/healing(src) if(29) - new /obj/item/disk/tech_disk/illegal(src) + new /obj/item/reagent_containers/glass/bottle/ichor/red(src) + new /obj/item/reagent_containers/glass/bottle/ichor/blue(src) + new /obj/item/reagent_containers/glass/bottle/ichor/green(src) //KA modkit design discs /obj/item/disk/design_disk/modkit_disc @@ -744,7 +865,7 @@ new /obj/item/lava_staff(src) if(3) new /obj/item/book/granter/spell/sacredflame(src) - new /obj/item/gun/magic/wand/fireball(src) + new /obj/item/gun/magic/hook(src) if(4) new /obj/item/dragons_blood(src) @@ -983,7 +1104,7 @@ if(2) new /obj/item/gun/ballistic/revolver/doublebarrel/super(src) if(3) - new /obj/item/gun/magic/staff/spellblade(src) + new /obj/item/guardiancreator(src) /obj/structure/closet/crate/necropolis/bubblegum/crusher name = "bloody bubblegum chest" @@ -1072,6 +1193,7 @@ var/random_crystal = pick(choices) new random_crystal(src) new /obj/item/organ/vocal_cords/colossus(src) + new /obj/item/clothing/glasses/godeye(src) /obj/structure/closet/crate/necropolis/colossus/crusher name = "angelic colossus chest" diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 962e0f9a8f..1fdf3102a9 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -415,6 +415,8 @@ give_magic(humanc) if(GLOB.curse_of_madness_triggered) give_madness(humanc, GLOB.curse_of_madness_triggered) + if(humanc.client) + humanc.client.prefs.post_copy_to(humanc) GLOB.joined_player_list += character.ckey GLOB.latejoiners += character @@ -568,7 +570,7 @@ client.prefs.scars_list["[cur_scar_index]"] = valid_scars client.prefs.save_character() - client.prefs.copy_to(H) + client.prefs.copy_to(H, initial_spawn = TRUE) H.dna.update_dna_identity() if(mind) if(transfer_after) diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm index 9a0d9f9242..b77fae68c8 100644 --- a/code/modules/mob/dead/new_player/preferences_setup.dm +++ b/code/modules/mob/dead/new_player/preferences_setup.dm @@ -41,7 +41,7 @@ var/mob/living/carbon/human/dummy/mannequin = generate_or_wait_for_human_dummy(DUMMY_HUMAN_SLOT_PREFERENCES) // Apply the Dummy's preview background first so we properly layer everything else on top of it. mannequin.add_overlay(mutable_appearance('modular_citadel/icons/ui/backgrounds.dmi', bgstate, layer = SPACE_LAYER)) - copy_to(mannequin) + copy_to(mannequin, initial_spawn = TRUE) if(previewJob && equip_job) mannequin.job = previewJob.title diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm index d63686691d..0a2434055f 100644 --- a/code/modules/mob/living/carbon/alien/life.dm +++ b/code/modules/mob/living/carbon/alien/life.dm @@ -40,9 +40,6 @@ if(move_delay_add > 0) move_delay_add = max(0, move_delay_add - rand(1, 2)) -/mob/living/carbon/alien/handle_changeling() - return - /mob/living/carbon/alien/handle_fire()//Aliens on fire code if(..()) return diff --git a/code/modules/mob/living/carbon/human/dummy.dm b/code/modules/mob/living/carbon/human/dummy.dm index 2f5c94b784..ed1ba3852f 100644 --- a/code/modules/mob/living/carbon/human/dummy.dm +++ b/code/modules/mob/living/carbon/human/dummy.dm @@ -18,6 +18,9 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy) /mob/living/carbon/human/dummy/Life() return +/mob/living/carbon/human/dummy/update_mobility() + return + /mob/living/carbon/human/dummy/proc/wipe_state() delete_equipment() icon_render_key = null diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index ed509f900a..fa9df8dd48 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1379,6 +1379,9 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) var/obj/item/bodypart/affecting = target.get_bodypart(ran_zone(user.zone_selected)) + if(!affecting) //Maybe the bodypart is missing? Or things just went wrong.. + affecting = target.get_bodypart(BODY_ZONE_CHEST) //target chest instead, as failsafe. Or hugbox? You decide. + var/miss_chance = 100//calculate the odds that a punch misses entirely. considers stamina and brute damage of the puncher. punches miss by default to prevent weird cases if(attackchain_flags & ATTACK_IS_PARRY_COUNTERATTACK) miss_chance = 0 @@ -1594,6 +1597,10 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) /datum/species/proc/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H, attackchain_flags = NONE, damage_multiplier = 1) var/totitemdamage = H.pre_attacked_by(I, user) * damage_multiplier + + if(!affecting) //Something went wrong. Maybe the limb is missing? + affecting = H.get_bodypart(BODY_ZONE_CHEST) //If the limb is missing, or something went terribly wrong, just hit the chest instead + // Allows you to put in item-specific reactions based on species if(user != H) var/list/block_return = list() @@ -1605,8 +1612,6 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) return 0 var/hit_area - if(!affecting) //Something went wrong. Maybe the limb is missing? - affecting = H.bodyparts[1] hit_area = affecting.name var/def_zone = affecting.body_zone @@ -1956,19 +1961,19 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) H.adjust_bodytemperature(natural*(1/(thermal_protection+1)) + min(thermal_protection * (loc_temp - H.bodytemperature) / BODYTEMP_HEAT_DIVISOR, BODYTEMP_HEATING_MAX)) switch((loc_temp - H.bodytemperature)*thermal_protection) if(-INFINITY to -50) - H.throw_alert("temp", /obj/screen/alert/cold, 3) + H.throw_alert("tempfeel", /obj/screen/alert/cold, 3) if(-50 to -35) - H.throw_alert("temp", /obj/screen/alert/cold, 2) + H.throw_alert("tempfeel", /obj/screen/alert/cold, 2) if(-35 to -20) - H.throw_alert("temp", /obj/screen/alert/cold, 1) + H.throw_alert("tempfeel", /obj/screen/alert/cold, 1) if(-20 to 0) //This is the sweet spot where air is considered normal - H.clear_alert("temp") + H.clear_alert("tempfeel") if(0 to 15) //When the air around you matches your body's temperature, you'll start to feel warm. - H.throw_alert("temp", /obj/screen/alert/hot, 1) + H.throw_alert("tempfeel", /obj/screen/alert/hot, 1) if(15 to 30) - H.throw_alert("temp", /obj/screen/alert/hot, 2) + H.throw_alert("tempfeel", /obj/screen/alert/hot, 2) if(30 to INFINITY) - H.throw_alert("temp", /obj/screen/alert/hot, 3) + H.throw_alert("tempfeel", /obj/screen/alert/hot, 3) // +/- 50 degrees from 310K is the 'safe' zone, where no damage is dealt. if(H.bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT && !HAS_TRAIT(H, TRAIT_RESISTHEAT)) @@ -1986,6 +1991,14 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) else firemodifier = min(firemodifier, 0) burn_damage = max(log(2-firemodifier,(H.bodytemperature-BODYTEMP_NORMAL))-5,0) // this can go below 5 at log 2.5 + if (burn_damage) + switch(burn_damage) + if(0 to 2) + H.throw_alert("temp", /obj/screen/alert/sweat, 1) + if(2 to 4) + H.throw_alert("temp", /obj/screen/alert/sweat, 2) + else + H.throw_alert("temp", /obj/screen/alert/sweat, 3) burn_damage = burn_damage * heatmod * H.physiology.heat_mod if (H.stat < UNCONSCIOUS && (prob(burn_damage) * 10) / 4) //40% for level 3 damage on humans H.emote("scream") @@ -1998,14 +2011,18 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) H.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/cold, multiplicative_slowdown = ((BODYTEMP_COLD_DAMAGE_LIMIT - H.bodytemperature) / COLD_SLOWDOWN_FACTOR)) switch(H.bodytemperature) if(200 to BODYTEMP_COLD_DAMAGE_LIMIT) + H.throw_alert("temp", /obj/screen/alert/shiver, 1) H.apply_damage(COLD_DAMAGE_LEVEL_1*coldmod*H.physiology.cold_mod, BURN) if(120 to 200) + H.throw_alert("temp", /obj/screen/alert/shiver, 2) H.apply_damage(COLD_DAMAGE_LEVEL_2*coldmod*H.physiology.cold_mod, BURN) else + H.throw_alert("temp", /obj/screen/alert/shiver, 3) H.apply_damage(COLD_DAMAGE_LEVEL_3*coldmod*H.physiology.cold_mod, BURN) else H.remove_movespeed_modifier(/datum/movespeed_modifier/cold) + H.clear_alert("temp") SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "cold") SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "hot") diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 49c55f70b3..43f5ca5526 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -18,7 +18,8 @@ var/datum/action/innate/regenerate_limbs/regenerate_limbs var/datum/action/innate/slime_change/slime_change //CIT CHANGE liked_food = TOXIC | MEAT - toxic_food = null + disliked_food = null + toxic_food = ANTITOXIC coldmod = 6 // = 3x cold damage heatmod = 0.5 // = 1/4x heat damage burnmod = 0.5 // = 1/2x generic burn damage diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index e29c6b9ffe..8f181d47fd 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -1,8 +1,4 @@ /mob/living/carbon/BiologicalLife(seconds, times_fired) - //Updates the number of stored chemicals for powers - handle_changeling() - //Handles the unique mentabolism of bloodsuckers, look at /datum/antagonist/bloodsucker/proc/LifeTick() - handle_bloodsucker() //Reagent processing needs to come before breathing, to prevent edge cases. handle_organs() . = ..() // if . is false, we are dead. @@ -410,25 +406,7 @@ for(var/thing in all_wounds) var/datum/wound/W = thing if(W.processes) // meh - W.handle_process() - -//todo generalize this and move hud out -/mob/living/carbon/proc/handle_changeling() - if(mind && hud_used && hud_used.lingchemdisplay) - var/datum/antagonist/changeling/changeling = mind.has_antag_datum(/datum/antagonist/changeling) - if(changeling) - changeling.regenerate() - hud_used.lingchemdisplay.invisibility = 0 - hud_used.lingchemdisplay.maptext = "
[round(changeling.chem_charges)]
" - else - hud_used.lingchemdisplay.invisibility = INVISIBILITY_ABSTRACT - - -/mob/living/carbon/proc/handle_bloodsucker() - if(mind && AmBloodsucker(src)) - var/datum/antagonist/bloodsucker/B = mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) - B.LifeTick() - + W.handle_process() /mob/living/carbon/handle_mutations_and_radiation() if(dna && dna.temporary_mutations.len) diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 89321082c9..9de75702db 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -43,6 +43,7 @@ * Returns TRUE or FALSE based on if we were interrupted. This is used by overridden variants to check if they should stop. */ /mob/living/proc/BiologicalLife(seconds, times_fired) + SEND_SIGNAL(src,COMSIG_LIVING_BIOLOGICAL_LIFE, seconds, times_fired) handle_diseases()// DEAD check is in the proc itself; we want it to spread even if the mob is dead, but to handle its disease-y properties only if you're not. handle_wounds() @@ -78,6 +79,7 @@ * Returns TRUE or FALSE based on if we were interrupted. This is used by overridden variants to check if they should stop. */ /mob/living/proc/PhysicalLife(seconds, times_fired) + SEND_SIGNAL(src,COMSIG_LIVING_PHYSICAL_LIFE, seconds, times_fired) if(digitalinvis) handle_diginvis() //AI becomes unable to see mob diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index d7da3155e7..7ce1c1e7cc 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -23,6 +23,7 @@ a_intent = INTENT_HARM //so we always get pushed instead of trying to swap sight = SEE_TURFS | SEE_MOBS | SEE_OBJS see_in_dark = 8 + deathsound = 'sound/voice/scream/android_scream.ogg' hud_type = /datum/hud/ai med_hud = DATA_HUD_MEDICAL_BASIC sec_hud = DATA_HUD_SECURITY_BASIC diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 6b58988c31..7c4125fbc6 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -361,8 +361,7 @@ "Sleek" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "sleekmed"), "Marina" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "marinamed"), "Eyebot" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "eyebotmed"), - "Heavy" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "heavymed"), - "Drake" = image(icon = 'icons/mob/cyborg/drakemech.dmi', icon_state = "drakemedbox") + "Heavy" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "heavymed") ) var/list/L = list("Medihound" = "medihound", "Medihound Dark" = "medihounddark", "Vale" = "valemed") for(var/a in L) @@ -423,13 +422,6 @@ moduleselect_icon = "medihound" moduleselect_alternate_icon = 'modular_citadel/icons/ui/screen_cyborg.dmi' dogborg = TRUE - if("Drake") - cyborg_base_icon = "drakemed" - cyborg_icon_override = 'icons/mob/cyborg/drakemech.dmi' - sleeper_overlay = "drakemedsleeper" - moduleselect_icon = "medihound" - moduleselect_alternate_icon = 'modular_citadel/icons/ui/screen_cyborg.dmi' - dogborg = TRUE else return FALSE return ..() @@ -486,8 +478,7 @@ "Can" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "caneng"), "Marina" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "marinaeng"), "Spider" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "spidereng"), - "Heavy" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "heavyeng"), - "Drake" = image(icon = 'icons/mob/cyborg/drakemech.dmi', icon_state = "drakeengbox") + "Heavy" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "heavyeng") ) var/list/L = list("Pup Dozer" = "pupdozer", "Vale" = "valeeng") for(var/a in L) @@ -545,11 +536,6 @@ cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' sleeper_overlay = "alinasleeper" dogborg = TRUE - if("Drake") - cyborg_base_icon = "drakeeng" - cyborg_icon_override = 'icons/mob/cyborg/drakemech.dmi' - sleeper_overlay = "drakesecsleeper" - dogborg = TRUE else return FALSE return ..() @@ -588,8 +574,7 @@ "Can" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "cansec"), "Marina" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "marinasec"), "Spider" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "spidersec"), - "Heavy" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "heavysec"), - "Drake" = image(icon = 'icons/mob/cyborg/drakemech.dmi', icon_state = "drakesecbox") + "Heavy" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "heavysec") ) var/list/L = list("K9" = "k9", "Vale" = "valesec", "K9 Dark" = "k9dark") for(var/a in L) @@ -645,11 +630,6 @@ sleeper_overlay = "valesecsleeper" cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' dogborg = TRUE - if("Drake") - cyborg_base_icon = "drakesec" - cyborg_icon_override = 'icons/mob/cyborg/drakemech.dmi' - sleeper_overlay = "drakesecsleeper" - dogborg = TRUE else return FALSE return ..() @@ -693,8 +673,7 @@ var/static/list/peace_icons = sortList(list( "Default" = image(icon = 'icons/mob/robots.dmi', icon_state = "peace"), "Borgi" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "borgi"), - "Spider" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "whitespider"), - "Drake" = image(icon = 'icons/mob/cyborg/drakemech.dmi', icon_state = "drakepeacebox") + "Spider" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "whitespider") )) var/peace_borg_icon = show_radial_menu(R, R , peace_icons, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE) switch(peace_borg_icon) @@ -710,11 +689,6 @@ hat_offset = INFINITY cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi' has_snowflake_deadsprite = TRUE - if("Drake") - cyborg_base_icon = "drakepeace" - cyborg_icon_override = 'icons/mob/cyborg/drakemech.dmi' - sleeper_overlay = "drakepeacesleeper" - dogborg = TRUE else return FALSE return ..() @@ -853,8 +827,7 @@ "(Janitor) Marina" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "marinajan"), "(Janitor) Sleek" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "sleekjan"), "(Janitor) Can" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "canjan"), - "(Janitor) Heavy" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "heavyjan"), - "(Janitor) Drake" = image(icon = 'icons/mob/cyborg/drakemech.dmi', icon_state = "drakejanitbox") + "(Janitor) Heavy" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "heavyjan") ) var/list/L = list("(Service) DarkK9" = "k50", "(Service) Vale" = "valeserv", "(Service) ValeDark" = "valeservdark", "(Janitor) Scrubpuppy" = "scrubpup") @@ -926,11 +899,6 @@ cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' sleeper_overlay = "jsleeper" dogborg = TRUE - if("(Janitor) Drake") - cyborg_base_icon = "drakejanit" - cyborg_icon_override = 'icons/mob/cyborg/drakemech.dmi' - sleeper_overlay = "drakesecsleeper" - dogborg = TRUE else return FALSE return ..() @@ -976,8 +944,7 @@ "Sleek" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "sleekmin"), "Marina" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "marinamin"), "Can" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "canmin"), - "Heavy" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "heavymin"), - "Drake" = image(icon = 'icons/mob/cyborg/drakemech.dmi', icon_state = "drakeminebox") + "Heavy" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "heavymin") ) var/list/L = list("Blade" = "blade", "Vale" = "valemine") for(var/a in L) @@ -1021,11 +988,6 @@ cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' sleeper_overlay = "valeminesleeper" dogborg = TRUE - if("Drake") - cyborg_base_icon = "drakemine" - cyborg_icon_override = 'icons/mob/cyborg/drakemech.dmi' - sleeper_overlay = "drakeminesleeper" - dogborg = TRUE else return FALSE return ..() diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index c6aee397e4..944b909463 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -13,6 +13,7 @@ mob_biotypes = MOB_ROBOTIC rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE speech_span = SPAN_ROBOT + deathsound = 'sound/voice/borg_deathsound.ogg' flags_1 = PREVENT_CONTENTS_EXPLOSION_1 | HEAR_1 vore_flags = NO_VORE diff --git a/code/modules/mob/living/simple_animal/astral.dm b/code/modules/mob/living/simple_animal/astral.dm index f79a2b5b3e..ec2180ccb3 100644 --- a/code/modules/mob/living/simple_animal/astral.dm +++ b/code/modules/mob/living/simple_animal/astral.dm @@ -24,6 +24,7 @@ incorporeal_move = 1 alpha = 50 speak_emote = list("echos") + rad_flags = RAD_NO_CONTAMINATE movement_type = FLYING var/pseudo_death = FALSE var/posses_safe = FALSE diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm index 795184bad5..3de4c8b41b 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm @@ -141,7 +141,7 @@ Difficulty: Medium loot = list(/obj/item/staff/storm) elimination = 0 else if(prob(20)) - loot = list(/obj/structure/closet/crate/necropolis/tendril) + loot = list(/obj/structure/closet/crate/necropolis/tendril/random) //This one spawns a chest that could be any of the three types ..() /obj/item/gps/internal/legion diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm index e3edd171c0..e347056924 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm @@ -25,6 +25,7 @@ var/list/attack_action_types = list() var/can_talk = FALSE var/obj/loot_drop = null + var/crate_type = /obj/structure/closet/crate/necropolis/tendril var/owner //Gives player-controlled variants the ability to swap attacks @@ -182,7 +183,7 @@ While using this makes the system rely on OnFire, it still gives options for tim activator = null -obj/structure/elite_tumor/proc/spawn_elite(var/mob/dead/observer/elitemind) +/obj/structure/elite_tumor/proc/spawn_elite(var/mob/dead/observer/elitemind) var/selectedspawn = pick(potentialspawns) mychild = new selectedspawn(loc) visible_message("[mychild] emerges from [src]!") @@ -193,7 +194,7 @@ obj/structure/elite_tumor/proc/spawn_elite(var/mob/dead/observer/elitemind) icon_state = "tumor_popped" INVOKE_ASYNC(src, .proc/arena_checks) -obj/structure/elite_tumor/proc/return_elite() +/obj/structure/elite_tumor/proc/return_elite() mychild.forceMove(loc) visible_message("[mychild] emerges from [src]!") playsound(loc,'sound/effects/phasein.ogg', 200, 0, 50, TRUE, TRUE) @@ -271,11 +272,11 @@ obj/structure/elite_tumor/proc/return_elite() visible_message("[mychild] suddenly reappears above [src]!") playsound(loc,'sound/effects/phasein.ogg', 200, 0, 50, TRUE, TRUE) -obj/structure/elite_tumor/proc/onEliteLoss() +/obj/structure/elite_tumor/proc/onEliteLoss() playsound(loc,'sound/effects/tendril_destroyed.ogg', 200, 0, 50, TRUE, TRUE) visible_message("[src] begins to convulse violently before beginning to dissipate.") visible_message("As [src] closes, something is forced up from down below.") - var/obj/structure/closet/crate/necropolis/tendril/lootbox = new /obj/structure/closet/crate/necropolis/tendril(loc) + var/obj/structure/closet/crate/necropolis/tendril/lootbox = new mychild.crate_type(loc) if(!boosted) mychild = null activator = null @@ -290,7 +291,7 @@ obj/structure/elite_tumor/proc/onEliteLoss() activator = null qdel(src) -obj/structure/elite_tumor/proc/onEliteWon() +/obj/structure/elite_tumor/proc/onEliteWon() activity = TUMOR_PASSIVE activator = null mychild.revive(full_heal = TRUE, admin_revive = TRUE) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm index d9f3cfba3d..4e8f4f6160 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm @@ -40,6 +40,7 @@ mouse_opacity = MOUSE_OPACITY_ICON deathmessage = "explodes into gore!" loot_drop = /obj/item/crusher_trophy/broodmother_tongue + crate_type = /obj/structure/closet/crate/necropolis/tendril/weapon_armor attack_action_types = list(/datum/action/innate/elite_attack/tentacle_patch, /datum/action/innate/elite_attack/spawn_children, diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm index fce5b636e4..032bc2d60d 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm @@ -38,7 +38,7 @@ deathsound = 'sound/magic/demon_dies.ogg' deathmessage = "begins to shudder as it becomes transparent..." loot_drop = /obj/item/clothing/neck/cloak/herald_cloak - + crate_type = /obj/structure/closet/crate/necropolis/tendril/magic can_talk = 1 attack_action_types = list(/datum/action/innate/elite_attack/herald_trishot, diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm index 15ed0135fe..6c13bb903e 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm @@ -38,7 +38,7 @@ deathsound = 'sound/magic/curse.ogg' deathmessage = "'s arms reach out before it falls apart onto the floor, lifeless." loot_drop = /obj/item/crusher_trophy/legionnaire_spine - + crate_type = /obj/structure/closet/crate/necropolis/tendril/misc attack_action_types = list(/datum/action/innate/elite_attack/legionnaire_charge, /datum/action/innate/elite_attack/head_detach, /datum/action/innate/elite_attack/bonfire_teleport, diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm index 7995e4d20f..b3300a86bb 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm @@ -38,7 +38,7 @@ deathsound = 'sound/magic/repulse.ogg' deathmessage = "'s lights flicker, before its top part falls down." loot_drop = /obj/item/clothing/accessory/pandora_hope - + crate_type = /obj/structure/closet/crate/necropolis/tendril/magic attack_action_types = list(/datum/action/innate/elite_attack/singular_shot, /datum/action/innate/elite_attack/magic_box, /datum/action/innate/elite_attack/pandora_teleport, @@ -190,4 +190,4 @@ /obj/item/clothing/accessory/pandora_hope/on_uniform_dropped(obj/item/clothing/under/U, user) var/mob/living/L = user if(L && L.mind) - SEND_SIGNAL(L, COMSIG_CLEAR_MOOD_EVENT, "hope_lavaland") + SEND_SIGNAL(L, COMSIG_CLEAR_MOOD_EVENT, "hope_lavaland") \ No newline at end of file diff --git a/code/modules/paperwork/ticketmachine.dm b/code/modules/paperwork/ticketmachine.dm index 19f2d42c50..0e553ced35 100644 --- a/code/modules/paperwork/ticketmachine.dm +++ b/code/modules/paperwork/ticketmachine.dm @@ -162,6 +162,9 @@ /obj/machinery/ticket_machine/attack_hand(mob/living/carbon/user) . = ..() + INVOKE_ASYNC(src, .proc/attempt_ticket, user) + +/obj/machinery/ticket_machine/proc/attempt_ticket(mob/living/carbon/user) if(!ready) to_chat(user,"You press the button, but nothing happens...") return @@ -195,7 +198,7 @@ /obj/item/ticket_machine_ticket name = "Ticket" - desc = "A ticket which shows your place in the Head of Personnel's line. Made from Nanotrasen patented NanoPaper�. Though solid, its form seems to shimmer slightly. Feels (and burns) just like the real thing." + desc = "A ticket which shows your place in the Head of Personnel's line. Made from Nanotrasen patented NanoPaper®. Though solid, its form seems to shimmer slightly. Feels (and burns) just like the real thing." icon = 'icons/obj/bureaucracy.dmi' icon_state = "ticket" maptext_x = 7 diff --git a/code/modules/plumbing/plumbers/pill_press.dm b/code/modules/plumbing/plumbers/pill_press.dm index 56510fac87..88f56f111d 100644 --- a/code/modules/plumbing/plumbers/pill_press.dm +++ b/code/modules/plumbing/plumbers/pill_press.dm @@ -42,7 +42,7 @@ for (var/x in 1 to PILL_STYLE_COUNT) var/list/SL = list() SL["id"] = x - SL["htmltag"] = assets.icon_tag("pill[x]") + SL["class_name"] = assets.icon_class_name("pill[x]") pill_styles += list(SL) diff --git a/code/modules/pool/pool_controller.dm b/code/modules/pool/pool_controller.dm index c9bc6be3e5..17faa7a3e3 100644 --- a/code/modules/pool/pool_controller.dm +++ b/code/modules/pool/pool_controller.dm @@ -210,7 +210,7 @@ for(var/datum/reagent/R in reagents.reagent_list) if(R.reagent_state == SOLID) R.reagent_state = LIQUID - if(!swimee.reagents.has_reagent(POOL_NO_OVERDOSE_MEDICINE_MAX)) + if(!swimee.reagents.has_reagent(R.type,POOL_NO_OVERDOSE_MEDICINE_MAX)) swimee.reagents.add_reagent(R.type, 0.5) //osmosis reagents.reaction(swimee, VAPOR, 0.03) //3 percent. Need to find a way to prevent this from stacking chems at some point like the above. for(var/obj/objects in W) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index fd8f900552..e3fdbd3654 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -639,7 +639,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) if(produces_gas) env.merge(removed) air_update_turf() - + /********* END CITADEL CHANGES *********/ @@ -985,6 +985,13 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) layer = ABOVE_MOB_LAYER moveable = TRUE +/obj/machinery/power/supermatter_crystal/shard/examine(mob/user) + . = ..() + if(anchored) + . += "[src] is anchored to the floor." + else + . += "[src] is unanchored, but can be bolted down." + /obj/machinery/power/supermatter_crystal/shard/engine name = "anchored supermatter shard" is_main_engine = TRUE @@ -1026,12 +1033,12 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) if(L) switch(type) if(FLUX_ANOMALY) - var/obj/effect/anomaly/flux/A = new(L, 300, FALSE) + var/obj/effect/anomaly/flux/A = new(L, 300, SUPERMATTER_ANOMALY_DROP_CHANCE) A.explosive = FALSE if(GRAVITATIONAL_ANOMALY) - new /obj/effect/anomaly/grav(L, 250, FALSE) + new /obj/effect/anomaly/grav(L, 250, SUPERMATTER_ANOMALY_DROP_CHANCE) if(PYRO_ANOMALY) - new /obj/effect/anomaly/pyro(L, 200, FALSE) + new /obj/effect/anomaly/pyro(L, 200, SUPERMATTER_ANOMALY_DROP_CHANCE) /obj/machinery/power/supermatter_crystal/proc/supermatter_zap(atom/zapstart = src, range = 5, zap_str = 4000, zap_flags = ZAP_SUPERMATTER_FLAGS, list/targets_hit = list()) if(QDELETED(zapstart)) diff --git a/code/modules/projectiles/ammunition/special/magic.dm b/code/modules/projectiles/ammunition/special/magic.dm index cc039c5f2b..8380bf82e9 100644 --- a/code/modules/projectiles/ammunition/special/magic.dm +++ b/code/modules/projectiles/ammunition/special/magic.dm @@ -43,3 +43,17 @@ /obj/item/ammo_casing/magic/locker projectile_type = /obj/item/projectile/magic/locker + +//Spell book ammo casing +/obj/item/ammo_casing/magic/book + projectile_type = /obj/item/projectile/magic/spellcard/book + +/obj/item/ammo_casing/magic/book/spark + projectile_type = /obj/item/projectile/magic/spellcard/book/spark + +/obj/item/ammo_casing/magic/book/heal + projectile_type = /obj/item/projectile/magic/spellcard/book/heal + harmful = FALSE + +/obj/item/ammo_casing/magic/book/shock + projectile_type = /obj/item/projectile/magic/spellcard/book/shock diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm index 78ca6e9280..9ea030da99 100644 --- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm +++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm @@ -20,7 +20,6 @@ var/caliber var/multiload = 1 var/start_empty = 0 - var/load_delay = 0 //how long do we take to load (deciseconds) var/list/bullet_cost var/list/base_cost// override this one as well if you override bullet_cost @@ -76,19 +75,12 @@ return 1 /obj/item/ammo_box/attackby(obj/item/A, mob/user, params, silent = FALSE, replace_spent = 0) - if(INTERACTING_WITH(user, src) || INTERACTING_WITH(user, A)) - to_chat(user, "You're already doing that!") - return FALSE var/num_loaded = 0 if(!can_load(user)) return if(istype(A, /obj/item/ammo_box)) var/obj/item/ammo_box/AM = A for(var/obj/item/ammo_casing/AC in AM.stored_ammo) - if(load_delay || AM.load_delay) - var/loadtime = max(AM.load_delay, load_delay) - if(!do_after(user, loadtime, target = src)) - return FALSE var/did_load = give_round(AC, replace_spent) if(did_load) AM.stored_ammo -= AC diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm index 8cd49bdf16..70058801f8 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm @@ -156,8 +156,6 @@ max_ammo = 4 var/pixeloffsetx = 4 start_empty = TRUE - multiload = FALSE - load_delay = 6 //6ds /obj/item/ammo_box/shotgun/update_overlays() . = ..() diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index 1aefa51a51..fa8099a257 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -53,8 +53,6 @@ ..() if (istype(A, /obj/item/ammo_box/magazine)) var/obj/item/ammo_box/magazine/AM = A - if(AM.load_delay && !do_after(user, AM.load_delay, target = src)) - return FALSE if (!magazine && istype(AM, mag_type)) if(user.transferItemToLoc(AM, src)) magazine = AM diff --git a/code/modules/projectiles/guns/ballistic/magweapon.dm b/code/modules/projectiles/guns/ballistic/magweapon.dm index 4e27a73300..c01a2fb74a 100644 --- a/code/modules/projectiles/guns/ballistic/magweapon.dm +++ b/code/modules/projectiles/guns/ballistic/magweapon.dm @@ -51,11 +51,6 @@ cell.use(shot.energy_cost) . = ..() -/obj/item/gun/ballistic/automatic/magrifle/emp_act(severity) - . = ..() - if(!(. & EMP_PROTECT_CONTENTS)) - cell.use(round(cell.charge / severity)) - /obj/item/gun/ballistic/automatic/magrifle/get_cell() return cell diff --git a/code/modules/projectiles/guns/magic/spell_book.dm b/code/modules/projectiles/guns/magic/spell_book.dm new file mode 100644 index 0000000000..752a6ae5ac --- /dev/null +++ b/code/modules/projectiles/guns/magic/spell_book.dm @@ -0,0 +1,66 @@ +/obj/item/gun/magic/wand/book + name = "blank spellbook" + desc = "It's not just a book, it's a SPELL book!" + ammo_type = /obj/item/ammo_casing/magic + icon = 'icons/obj/library.dmi' + icon_state = "book" + w_class = WEIGHT_CLASS_NORMAL + charges = 10 //We start with max pages + max_charges = 10 + variable_charges = FALSE + +/obj/item/gun/magic/wand/book/zap_self(mob/living/user) + to_chat(user, "The book has [charges] pages\s remaining.") + +/obj/item/gun/magic/wand/book/attackby(obj/item/S, mob/living/user, params) + if(!istype(S, /obj/item/paper)) + return ..() + if(charges < max_charges) + charges++ + recharge_newshot() + to_chat(user, "You add a new page to [src].") + qdel(S) + update_icon() + process() + else + to_chat(user, "The [src] has no more room for pages!") + +////////////////////// +//Spell Book - SPARK// +////////////////////// + +/obj/item/gun/magic/wand/book/spark + name = "Spell Book of Spark" + desc = "A spell book that fires burn pages to set the target ablaze!" + ammo_type = /obj/item/ammo_casing/magic/book/spark + icon_state = "spellbook_spark" + +////////////////////// +//Spell Book - PAGE/// +////////////////////// + +/obj/item/gun/magic/wand/book/page + name = "Spell Book of Throw" + desc = "A spell book that throws pages at its target!" + ammo_type = /obj/item/ammo_casing/magic/book + icon_state = "spellbook_page" + +////////////////////// +//Spell Book - SHOCK// +////////////////////// + +/obj/item/gun/magic/wand/book/shock + name = "Spell Book of Shock" + desc = "A spell book that uses its pages to capture energy in the air and send it in a bolt at its target!" + ammo_type = /obj/item/ammo_casing/magic/book/shock + icon_state = "spellbook_shock" + +//////////////////////// +//Spell Book - HEALING// +//////////////////////// + +/obj/item/gun/magic/wand/book/healing + name = "Spell Book of Mending" + desc = "A spell book that uses its pages to heal and repair the target! The back of the book lists what it works on, and it seems to only be of flesh and of metal beings..." + ammo_type = /obj/item/ammo_casing/magic/book/heal + icon_state = "spellbook_healing" diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 99a0bedc4d..4e81c5aeb6 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -460,6 +460,7 @@ return TRUE //Bullets don't drift in space /obj/item/projectile/process(wait) + set waitfor = FALSE if(!loc || !fired || !trajectory) fired = FALSE return PROCESS_KILL diff --git a/code/modules/projectiles/projectile/magic/spellcard.dm b/code/modules/projectiles/projectile/magic/spellcard.dm index 1b8f326573..5015a97e78 100644 --- a/code/modules/projectiles/projectile/magic/spellcard.dm +++ b/code/modules/projectiles/projectile/magic/spellcard.dm @@ -4,3 +4,60 @@ icon_state = "spellcard" damage_type = BURN damage = 2 + +/obj/item/projectile/magic/spellcard/book + nodamage = FALSE + name = "enchanted page" + desc = "A piece of paper enchanted to give it extreme durability and stiffness, along with a very hot burn to anyone unfortunate enough to get hit by a charged one." + icon_state = "spellcard" + damage_type = BURN + damage = 12 + flag = "magic" + +/obj/item/projectile/magic/spellcard/book/spark + damage = 4 + var/fire_stacks = 4 + +/obj/item/projectile/magic/spellcard/book/spark/on_hit(atom/target, blocked = FALSE) + . = ..() + var/mob/living/carbon/M = target + if(ismob(target)) + if(M.anti_magic_check()) + M.visible_message("[src] vanishes on contact with [target]!") + return BULLET_ACT_BLOCK + + if(iscarbon(target)) + M.adjust_fire_stacks(fire_stacks) + M.IgniteMob() + return + else + damage = 20 //If we are a simplemob we deal 5x damage + +/obj/item/projectile/magic/spellcard/book/shock + damage = 0 + stamina = 11 + stutter = 5 + jitter = 20 + knockdown = 10 + +/obj/item/projectile/magic/spellcard/book/heal + damage = 0 + nodamage = TRUE + +/obj/item/projectile/magic/spellcard/book/heal/on_hit(atom/target, blocked = FALSE) + . = ..() + var/mob/living/carbon/M = target + if(ismob(target)) + if(M.anti_magic_check()) + M.visible_message("[src] vanishes on contact with [target]!") + return BULLET_ACT_BLOCK + if(iscarbon(target)) + M.visible_message("[src] mends [target]!") + M.adjustBruteLoss(-5) //HEALS + M.adjustOxyLoss(-5) + M.adjustBruteLoss(-5) + M.adjustFireLoss(-5) + M.adjustToxLoss(-5, TRUE) //heals TOXINLOVERs + M.adjustCloneLoss(-5) + M.adjustStaminaLoss(-5) + return diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index 4034759c72..289b92f06d 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -2280,6 +2280,7 @@ All effects don't start immediately, but rather get worse over time; the rate is quality = RACE_DRINK else C.adjust_disgust(disgust) + return ..() /datum/reagent/consumable/ethanol/species_drink/coldscales name = "Coldscales" @@ -2289,7 +2290,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "coldscales" glass_name = "glass of Coldscales" glass_desc = "A soft green drink that looks inviting!" - species_required = "lizard" /datum/reagent/consumable/ethanol/species_drink/oil_drum @@ -2301,7 +2301,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "oil_drum" glass_name = "Drum of oil" glass_desc = "A gray can of booze and oil..." - species_required = "robot" /datum/reagent/consumable/ethanol/species_drink/nord_king @@ -2312,7 +2311,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "nord_king" glass_name = "Keg of Nord King" glass_desc = "A dripping keg of red mead." - species_required = "basic" /datum/reagent/consumable/ethanol/species_drink/velvet_kiss @@ -2324,7 +2322,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "velvet_kiss" glass_name = "glass of Velvet Kiss" glass_desc = "Red and white drink for the upper classes or undead." - species_required = "undead" /datum/reagent/consumable/ethanol/species_drink/abduction_fruit @@ -2336,7 +2333,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "abduction_fruit" glass_name = "glass of Abduction Fruit" glass_desc = "Mixed fruits that were never meant to be mixed..." - species_required = "alien" /datum/reagent/consumable/ethanol/species_drink/bug_zapper @@ -2348,7 +2344,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "bug_zapper" glass_name = "glass of Bug Zapper" glass_desc = "An odd mix of copper, lemon juice and power meant for non-human consumption." - species_required = "bug" /datum/reagent/consumable/ethanol/species_drink/mush_crush @@ -2360,7 +2355,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "mush_crush" glass_name = "glass of Mush Crush" glass_desc = "Popular among people that want to grow their own food rather than drink the soil." - species_required = "plant" /datum/reagent/consumable/ethanol/species_drink/darkbrew @@ -2372,7 +2366,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "darkbrew" glass_name = "glass of Darkbrew" glass_desc = "A pitch black drink that's commonly confused with a type of coffee." - species_required = "shadow" /datum/reagent/consumable/ethanol/species_drink/hollow_bone @@ -2384,7 +2377,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "hollow_bone" glass_name = "skull of Hollow Bone" glass_desc = "Mixing of milk and bone hurting juice for the enjoyment of rather skinny people." - species_required = "skeleton" /datum/reagent/consumable/ethanol/species_drink/frisky_kitty @@ -2396,7 +2388,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "frisky_kitty" glass_name = "cup of Drisky Kitty" glass_desc = "Warm milk and some catnip." - species_required = "furry" /datum/reagent/consumable/ethanol/species_drink/jell_wyrm @@ -2408,7 +2399,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "jell_wyrm" glass_name = "glass of Jell Wyrm" glass_desc = "A bubbly drink that is rather inviting to those that don't know who it's meant for." - species_required = "jelly" /datum/reagent/consumable/ethanol/species_drink/laval_spit //Yes Laval @@ -2420,7 +2410,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "laval_spit" glass_name = "glass of Laval Spit" glass_desc = "Piping hot drink for those who can stomach the heat of lava." - species_required = "golem" /////////////// diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 5c01fd8cf6..86f8b341d9 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -2220,6 +2220,7 @@ color = "#f7685e" metabolization_rate = REAGENTS_METABOLISM * 0.25 + /datum/reagent/wittel name = "Wittel" description = "An extremely rare metallic-white substance only found on demon-class planets." @@ -2281,6 +2282,7 @@ /datum/reagent/gravitum/on_mob_end_metabolize(mob/living/L) L.RemoveElement(/datum/element/forced_gravity, 0) + //body bluids /datum/reagent/consumable/semen name = "Semen" @@ -2457,3 +2459,56 @@ datum/reagent/eldritch return ..() +/datum/reagent/red_ichor + name = "Red Ichor" + can_synth = FALSE + description = "A unknown red liquid, linked to healing of most moral wounds." + color = "#c10000" + metabolization_rate = REAGENTS_METABOLISM * 2.5 + +/datum/reagent/red_ichor/on_mob_life(mob/living/carbon/M) + M.adjustBruteLoss(-50) + M.adjustOxyLoss(-50) + M.adjustBruteLoss(-50) + M.adjustFireLoss(-50) + M.adjustToxLoss(-50, TRUE) //heals TOXINLOVERs + M.adjustCloneLoss(-50) + M.adjustStaminaLoss(-50) + ..() + +/datum/reagent/green_ichor + name = "Green Ichor" + can_synth = FALSE + description = "A unknown green liquid, linked to healing of most internal wounds." + color = "#158c00" + metabolization_rate = REAGENTS_METABOLISM * 2.5 + +/datum/reagent/green_ichor/on_mob_life(mob/living/carbon/M) + M.adjustOrganLoss(ORGAN_SLOT_LUNGS, -100) + M.adjustOrganLoss(ORGAN_SLOT_HEART, -100) + M.adjustOrganLoss(ORGAN_SLOT_LIVER, -100) + M.adjustOrganLoss(ORGAN_SLOT_EARS, -100) + M.adjustOrganLoss(ORGAN_SLOT_STOMACH, -100) + M.adjustOrganLoss(ORGAN_SLOT_TONGUE, -100) + M.adjustOrganLoss(ORGAN_SLOT_EYES, -100) + ..() + +/datum/reagent/blue_ichor + name = "Blue Ichor" + can_synth = FALSE + description = "A unknown blue liquid, linked to healing the mind." + color = "#0914e0" + metabolization_rate = REAGENTS_METABOLISM * 2.5 + +/datum/reagent/blue_ichor/on_mob_life(mob/living/carbon/M) + M.adjustOrganLoss(ORGAN_SLOT_BRAIN, -100) + M.cure_all_traumas(TRAUMA_RESILIENCE_MAGIC) + M.hallucination = 0 + M.dizziness = 0 + M.disgust = 0 + M.drowsyness = 0 + M.stuttering = 0 + M.confused = 0 + M.SetSleeping(0, 0) + ..() + diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index b71584982c..be631513bd 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -70,7 +70,6 @@ return /obj/item/reagent_containers/attack(mob/living/M, mob/living/user, attackchain_flags = NONE, damage_multiplier = 1) - . = ..() if(user.a_intent == INTENT_HARM) return ..() diff --git a/code/modules/reagents/reagent_containers/bottle.dm b/code/modules/reagents/reagent_containers/bottle.dm index 20abcf847f..2cd0a76a4b 100644 --- a/code/modules/reagents/reagent_containers/bottle.dm +++ b/code/modules/reagents/reagent_containers/bottle.dm @@ -416,3 +416,20 @@ /obj/item/reagent_containers/glass/bottle/bromine name = "bromine bottle" list_reagents = list(/datum/reagent/bromine = 30) + +//Ichors +/obj/item/reagent_containers/glass/bottle/ichor + possible_transfer_amounts = list(1) + volume = 1 + +/obj/item/reagent_containers/glass/bottle/ichor/red + name = "healing potion" + list_reagents = list(/datum/reagent/red_ichor = 1) + +/obj/item/reagent_containers/glass/bottle/ichor/blue + name = "blue potion" + list_reagents = list(/datum/reagent/blue_ichor = 1) + +/obj/item/reagent_containers/glass/bottle/ichor/green + name = "green potion" + list_reagents = list(/datum/reagent/green_ichor = 1) \ No newline at end of file diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm index c8da9ab5e3..b106005a15 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -263,7 +263,7 @@ . = ..() if(.) return - for(var/obj/item/I in src_object) + for(var/obj/item/I in src_object.contents()) if(user.active_storage != src_object) if(I.on_found(user)) return diff --git a/code/modules/research/anomaly/explosive_compressor.dm b/code/modules/research/anomaly/explosive_compressor.dm new file mode 100644 index 0000000000..23983e31dc --- /dev/null +++ b/code/modules/research/anomaly/explosive_compressor.dm @@ -0,0 +1,152 @@ +#define MAX_RADIUS_REQUIRED 8000 //tritbomb +#define MIN_RADIUS_REQUIRED 20 //maxcap +/** + * # Explosive compressor machines + * + * The explosive compressor machine used in anomaly core production. + * + * Uses the standard toxins/tank explosion scaling to compress raw anomaly cores into completed ones. The required explosion radius increases as more cores of that type are created. + */ +/obj/machinery/research/explosive_compressor + name = "implosion compressor" + desc = "An advanced machine capable of implosion-compressing raw anomaly cores into finished artifacts." + icon = 'icons/obj/machines/research.dmi' + icon_state = "explosive_compressor" + density = TRUE + circuit = /obj/item/circuitboard/machine/explosive_compressor + + /// The raw core inserted in the machine. + var/obj/item/raw_anomaly_core/inserted_core + /// The TTV inserted in the machine. + var/obj/item/transfer_valve/inserted_bomb + /// The last time we did say_requirements(), because someone will inevitably click spam this. + var/last_requirements_say = 0 + +/obj/machinery/research/explosive_compressor/examine(mob/user) + . = ..() + . += "Ctrl-Click to remove an inserted core." + . += "Click with an empty hand to gather information about the required radius of an inserted core. Insert a ready TTV to start the implosion process if a core is inserted." + +/obj/machinery/research/explosive_compressor/attack_hand(mob/living/user) + . = ..() + if(.) + return + if(!inserted_core) + to_chat(user, "There is no core inserted.") + return + if(last_requirements_say + 3 SECONDS > world.time) + return + last_requirements_say = world.time + say_requirements(inserted_core) + +/obj/machinery/research/explosive_compressor/CtrlClick(mob/living/user) + . = ..() + if(!istype(user) || !user.Adjacent(src) || !(user.mobility_flags & MOBILITY_USE)) + return + if(!inserted_core) + to_chat(user, "There is no core inserted.") + return + inserted_core.forceMove(get_turf(user)) + to_chat(user, "You remove [inserted_core] from [src].") + user.put_in_hands(inserted_core) + inserted_core = null + +/** + * Says (no, literally) the data of required explosive power for a certain anomaly type. + */ +/obj/machinery/research/explosive_compressor/proc/say_requirements(obj/item/raw_anomaly_core/C) + var/required = get_required_radius(C.anomaly_type) + if(isnull(required)) + say("Unfortunately, due to diminishing supplies of condensed anomalous matter, [C] and any cores of its type are no longer of a sufficient quality level to be compressed into a working core.") + else + say("[C] requires a minimum of a theoretical radius of [required] to successfully implode into a charged anomaly core.") + +/** + * Determines how much explosive power (last value, so light impact theoretical radius) is required to make a certain anomaly type. + * + * Returns null if the max amount has already been reached. + * + * Arguments: + * * anomaly_type - anomaly type define + */ +/obj/machinery/research/explosive_compressor/proc/get_required_radius(anomaly_type) + var/already_made = SSresearch.created_anomaly_types[anomaly_type] + var/hard_limit = SSresearch.anomaly_hard_limit_by_type[anomaly_type] + if(already_made >= hard_limit) + return //return null + // my crappy autoscale formula + // linear scaling. + var/radius_span = MAX_RADIUS_REQUIRED - MIN_RADIUS_REQUIRED + var/radius_increase_per_core = radius_span / hard_limit + var/radius = clamp(round(MIN_RADIUS_REQUIRED + radius_increase_per_core * already_made, 1), MIN_RADIUS_REQUIRED, MAX_RADIUS_REQUIRED) + return radius + +/obj/machinery/research/explosive_compressor/attackby(obj/item/I, mob/living/user, params) + if(default_unfasten_wrench(user, I)) + return + if(default_deconstruction_screwdriver(user, "explosive_compressor", "explosive_compressor", I)) + return + if(default_deconstruction_crowbar(I)) + return + . = ..() + if(istype(I, /obj/item/raw_anomaly_core)) + if(inserted_core) + to_chat(user, "There is already a core in [src].") + return + if(!user.transferItemToLoc(I, src)) + to_chat(user, "[I] is stuck to your hand.") + return + inserted_core = I + to_chat(user, "You insert [I] into [src].") + return + if(istype(I, /obj/item/transfer_valve)) + // If they don't have a bomb core inserted, don't let them insert this. If they do, insert and do implosion. + if(!inserted_core) + to_chat(user, "There is no core inserted in [src]. What would be the point of detonating an implosion without a core?") + return + var/obj/item/transfer_valve/valve = I + if(!valve.ready()) + to_chat(user, "[valve] is incomplete.") + return + if(!user.transferItemToLoc(I, src)) + to_chat(user, "[I] is stuck to your hand.") + return + inserted_bomb = I + to_chat(user, "You insert [I] and press the start button.") + do_implosion() + +/** + * The ""explosion"" proc. + */ +/obj/machinery/research/explosive_compressor/proc/do_implosion() + var/required_radius = get_required_radius(inserted_core.anomaly_type) + // By now, we should be sure that we have a core, a TTV, and that the TTV has both tanks in place. + var/datum/gas_mixture/mix1 = inserted_bomb.tank_one.air_contents + var/datum/gas_mixture/mix2 = inserted_bomb.tank_two.air_contents + // Snowflaked tank explosion + var/datum/gas_mixture/mix = new(70) // Standard tank volume, 70L + mix.merge(mix1) + mix.merge(mix2) + mix.react() + if(mix.return_pressure() < TANK_FRAGMENT_PRESSURE) + // They failed so miserably we're going to give them their bomb back. + inserted_bomb.forceMove(drop_location()) + inserted_bomb = null + inserted_core.forceMove(drop_location()) + inserted_core = null + say("Transfer valve resulted in negligible explosive power. Items ejected.") + return + mix.react() // build more pressure + var/pressure = mix.return_pressure() + var/range = (pressure - TANK_FRAGMENT_PRESSURE) / TANK_FRAGMENT_SCALE + QDEL_NULL(inserted_bomb) // bomb goes poof + if(range < required_radius) + inserted_bomb.forceMove(src) + say("Resultant detonation failed to produce enough implosive power to compress [inserted_core]. Core ejected.") + return + inserted_core.create_core(drop_location(), TRUE, TRUE) + inserted_core = null + say("Success. Resultant detonation has theoretical range of [range]. Required radius was [required_radius]. Core production complete.") + +#undef MAX_RADIUS_REQUIRED +#undef MIN_RADIUS_REQUIRED diff --git a/code/modules/research/anomaly/raw_anomaly.dm b/code/modules/research/anomaly/raw_anomaly.dm new file mode 100644 index 0000000000..2342edd28f --- /dev/null +++ b/code/modules/research/anomaly/raw_anomaly.dm @@ -0,0 +1,73 @@ +/** + * # Raw Anomaly Cores + * + * The current precursor to anomaly cores, these are manufactured into 'finished' anomaly cores for use in research, items, and more. + * + * The current amounts created is stored in SSresearch.created_anomaly_types[ANOMALY_CORE_TYPE_DEFINE] = amount + * The hard limits are in code/__DEFINES/anomalies.dm + */ +/obj/item/raw_anomaly_core + name = "raw anomaly core" + desc = "You shouldn't be seeing this. Someone screwed up." + icon = 'icons/obj/assemblies/new_assemblies.dmi' + icon_state = "broken_state" + + /// Anomaly type + var/anomaly_type + +/obj/item/raw_anomaly_core/bluespace + name = "raw bluespace core" + desc = "The raw core of a bluespace anomaly, glowing and full of potential." + anomaly_type = /obj/item/assembly/signaler/anomaly/bluespace + icon_state = "rawcore_bluespace" + +/obj/item/raw_anomaly_core/vortex + name = "raw vortex core" + desc = "The raw core of a vortex anomaly. Feels heavy to the touch." + anomaly_type = /obj/item/assembly/signaler/anomaly/vortex + icon_state = "rawcore_vortex" + +/obj/item/raw_anomaly_core/grav + name = "raw gravity core" + desc = "The raw core of a gravity anomaly. The air seems attracted to it." + anomaly_type = /obj/item/assembly/signaler/anomaly/grav + icon_state = "rawcore_grav" + +/obj/item/raw_anomaly_core/pyro + desc = "The raw core of a pyro anomaly. It is warm to the touch." + name = "raw pyro core" + anomaly_type = /obj/item/assembly/signaler/anomaly/pyro + icon_state = "rawcore_pyro" + +/obj/item/raw_anomaly_core/flux + name = "raw flux core" + desc = "The raw core of a flux anomaly, faintly crackling with energy." + anomaly_type = /obj/item/assembly/signaler/anomaly/flux + icon_state = "rawcore_flux" + +/obj/item/raw_anomaly_core/random + name = "random raw core" + desc = "You should not see this!" + icon_state = "rawcore_bluespace" + +/obj/item/raw_anomaly_core/random/Initialize(mapload) + . = ..() + var/path = pick(subtypesof(/obj/item/raw_anomaly_core)) + new path(loc) + return INITIALIZE_HINT_QDEL + +/** + * Created the resulting core after being "made" into it. + * + * Arguments: + * * newloc - Where the new core will be created + * * del_self - should we qdel(src) + * * count_towards_limit - should we increment the amount of created cores on SSresearch + */ +/obj/item/raw_anomaly_core/proc/create_core(newloc, del_self = FALSE, count_towards_limit = FALSE) + . = new anomaly_type(newloc) + if(count_towards_limit) + var/existing = SSresearch.created_anomaly_types[anomaly_type] || 0 + SSresearch.created_anomaly_types[anomaly_type] = existing + 1 + if(del_self) + qdel(src) diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm index 1b608060ce..75e862778a 100644 --- a/code/modules/research/designs/misc_designs.dm +++ b/code/modules/research/designs/misc_designs.dm @@ -469,7 +469,7 @@ build_type = PROTOLATHE materials = list(/datum/material/iron = 5000, /datum/material/glass = 1000, /datum/material/gold = 1000, /datum/material/silver = 1000) build_path = /obj/item/holosign_creator/engineering - category = list("Equipment") + category = list("Tool Designs") departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING /datum/design/holosignatmos @@ -479,7 +479,7 @@ build_type = PROTOLATHE materials = list(/datum/material/iron = 5000, /datum/material/glass = 1000, /datum/material/gold = 1000, /datum/material/silver = 1000) build_path = /obj/item/holosign_creator/atmos - category = list("Equipment") + category = list("Tool Designs") departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING /datum/design/holosignfirelock @@ -489,7 +489,7 @@ build_type = PROTOLATHE materials = list(/datum/material/iron = 5000, /datum/material/glass = 1000, /datum/material/gold = 1000, /datum/material/silver = 1000) build_path = /obj/item/holosign_creator/firelock - category = list("Equipment") + category = list("Tool Designs") departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING /datum/design/holosigncombifan @@ -499,7 +499,7 @@ build_type = PROTOLATHE materials = list(/datum/material/iron = 7500, /datum/material/glass = 2500, /datum/material/silver = 2500, /datum/material/gold = 2500, /datum/material/titanium = 1750) build_path = /obj/item/holosign_creator/combifan - category = list("Equipment") + category = list("Tool Designs") departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING /datum/design/forcefield_projector @@ -509,7 +509,7 @@ build_type = PROTOLATHE materials = list(/datum/material/iron = 2500, /datum/material/glass = 1000) build_path = /obj/item/forcefield_projector - category = list("Equipment") + category = list("Tool Designs") departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING /datum/design/holobarrier_med diff --git a/code/modules/ruins/spaceruin_code/hilbertshotel.dm b/code/modules/ruins/spaceruin_code/hilbertshotel.dm index d97eae5766..4859fcfca0 100644 --- a/code/modules/ruins/spaceruin_code/hilbertshotel.dm +++ b/code/modules/ruins/spaceruin_code/hilbertshotel.dm @@ -183,6 +183,13 @@ GLOBAL_VAR_INIT(hhmysteryRoomNumber, 1337) . = ..() promptAndCheckIn(user) +/obj/item/hilbertshotel/ghostdojo/linkTurfs(datum/turf_reservation/currentReservation, currentRoomnumber) + . = ..() + var/area/hilbertshotel/currentArea = get_area(locate(currentReservation.bottom_left_coords[1], currentReservation.bottom_left_coords[2], currentReservation.bottom_left_coords[3])) + for(var/turf/closed/indestructible/hoteldoor/door in currentArea) + door.parentSphere = src + door.desc = "The door to this hotel room. Strange, this door doesnt even seem openable. The doorknob, however, seems to buzz with unusual energy...
Alt-Click to look through the peephole." + //Template Stuff /datum/map_template/hilbertshotel name = "Hilbert's Hotel Room" diff --git a/code/modules/shielding/helpers.dm b/code/modules/shielding/helpers.dm new file mode 100644 index 0000000000..8995cc3b03 --- /dev/null +++ b/code/modules/shielding/helpers.dm @@ -0,0 +1,65 @@ +//////// HELPER FILE FOR SHIELDING ///////// + +// HULL SHIELD GENERATION HELPERS +/** + * Gets hull exterior adjacent tiles of a certain area + * Area method. + * EXPENSIVE. + * If the area itself is already considered exterior, it'll find all tiles inside it that's next to an interior area. + */ +/proc/hull_shielding_get_tiles_around_area(area/instance, check_tick = FALSE) + var/list/cache = list() + var/area/A + if(instance.considered_hull_exterior) + for(var/turf/potential in instance) + for(var/turf/looking in orange(1, potential)) + A = looking.loc + if(!A.considered_hull_exterior) + cache[potential] = TRUE // we're the exterior area, grab the one that's reaching out + if(check_tick) + CHECK_TICK + else + for(var/turf/potential in instance) + for(var/turf/looking in orange(1, potential)) + A = looking.loc + if(A.considered_hull_exterior) + cache[looking] = TRUE // we're not the exterior area, grab the one that's being reached to + if(check_tick) + CHECK_TICK + . = list() + for(var/i in cache) + . += i // strip assoc value + +/** + * Gets hull adjacent exterior tiles of an entire zlevel + * EXPENSIVE. + * Gets the tiles in the exterior area touching to a non-exterior area + */ +/proc/hull_shielding_get_tiles_in_z(zlevel, check_tick = FALSE, recurse = FALSE, list/outlist = list(), list/scanned_zlevels = list()) + . = outlist + if(zlevel in scanned_zlevels) + return + scanned_zlevels |= zlevel + if(recurse) + var/up = SSmapping.level_trait(zlevel, ZTRAIT_UP) + var/down = SSmapping.level_trait(zlevel, ZTRAIT_DOWN) + if(isnum(up) && (up != 0)) + hull_shielding_get_tiles_in_z(up, check_tick, recurse, outlist, scanned_zlevels) + if(isnum(down) && (down != 0)) + hull_shielding_get_tiles_in_z(down, check_tick, recurse, outlist, scanned_zlevels) + // sigh. why. + var/turf/potential + var/area/p_area + var/area/l_area + for(var/x in 1 to world.maxx) + for(var/y in 1 to world.maxy) + if(check_tick) + CHECK_TICK + potential = locate(x, y, zlevel) + p_area = potential.loc + if(!p_area.considered_hull_exterior) + continue + for(var/turf/looking in orange(1, potential)) + l_area = looking.loc + if(!l_area.considered_hull_exterior) + outlist += potential diff --git a/code/modules/smithing/anvil.dm b/code/modules/smithing/anvil.dm new file mode 100644 index 0000000000..19d48119e6 --- /dev/null +++ b/code/modules/smithing/anvil.dm @@ -0,0 +1,315 @@ +#define WORKPIECE_PRESENT 1 +#define WORKPIECE_INPROGRESS 2 +#define WORKPIECE_FINISHED 3 +#define WORKPIECE_SLAG 5 + +#define RECIPE_SMALLPICK "dbp" //draw bend punch +#define RECIPE_LARGEPICK "ddbp" //draw draw bend punch +#define RECIPE_SHOVEL "dfup" //draw fold upset punch +#define RECIPE_HAMMER "sfp" //shrink fold punch + + +#define RECIPE_SMALLKNIFE "sdd" //shrink draw draw +#define RECIPE_SHORTSWORD "dff" //draw fold fold +#define RECIPE_WAKI "dfsf" //draw fold shrink fold +#define RECIPE_SCIMITAR "dfb" //draw fold bend +#define RECIPE_SABRE "ddsf" //draw draw shrink fold +#define RECIPE_RAPIER "sdfd" //shrink draw fold draw +#define RECIPE_BROADSWORD "dfuf" //draw fold upset fold +#define RECIPE_ZWEIHANDER "udfsf" //upset draw fold shrink fold +#define RECIPE_KATANA "fffff" //fold fold fold fold fold + + +#define RECIPE_SCYTHE "bdf" //bend draw fold +#define RECIPE_COGHEAD "bsf" //bend shrink fold. + + +#define RECIPE_JAVELIN "dbf" //draw bend fold +#define RECIPE_HALBERD "duffp" //draw upset fold fold punch +#define RECIPE_GLAIVE "usfp" //upset shrink fold punch +#define RECIPE_PIKE "ddbf" //draw draw bend fold + +/obj/structure/anvil + name = "anvil" + desc = "Base class of anvil. This shouldn't exist, but is useable." + icon = 'icons/obj/smith.dmi' + icon_state = "anvil" + density = TRUE + anchored = TRUE + var/workpiece_state = FALSE + var/datum/material/workpiece_material + var/anvilquality = 0 + var/currentquality = 0 //lolman? what the fuck do these vars do? + var/currentsteps = 0 //even i don't know + var/outrightfailchance = 1 //todo: document this shit + var/stepsdone = "" + var/rng = FALSE + var/debug = FALSE //vv this if you want an artifact + var/artifactrolled = FALSE + var/itemqualitymax = 20 + var/list/smithrecipes = list(RECIPE_HAMMER = /obj/item/smithing/hammerhead, + RECIPE_SCYTHE = /obj/item/smithing/scytheblade, + RECIPE_SHOVEL = /obj/item/smithing/shovelhead, + RECIPE_COGHEAD = /obj/item/smithing/cogheadclubhead, + RECIPE_JAVELIN = /obj/item/smithing/javelinhead, + RECIPE_LARGEPICK = /obj/item/smithing/pickaxehead, + RECIPE_SMALLPICK = /obj/item/smithing/prospectingpickhead, + RECIPE_SHORTSWORD = /obj/item/smithing/shortswordblade, + RECIPE_SCIMITAR = /obj/item/smithing/scimitarblade, + RECIPE_WAKI = /obj/item/smithing/wakiblade, + RECIPE_RAPIER = /obj/item/smithing/rapierblade, + RECIPE_SABRE = /obj/item/smithing/sabreblade, + RECIPE_SMALLKNIFE = /obj/item/smithing/knifeblade, + RECIPE_BROADSWORD = /obj/item/smithing/broadblade, + RECIPE_ZWEIHANDER = /obj/item/smithing/zweiblade, + RECIPE_KATANA = /obj/item/smithing/katanablade, + RECIPE_HALBERD = /obj/item/smithing/halberdhead, + RECIPE_GLAIVE = /obj/item/smithing/glaivehead, + RECIPE_PIKE = /obj/item/smithing/pikehead) + +/obj/structure/anvil/Initialize() + ..() + currentquality = anvilquality + +/obj/structure/anvil/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/ingot)) + var/obj/item/ingot/notsword = I + if(workpiece_state) + to_chat(user, "There's already a workpiece! Finish it or take it off.") + return FALSE + if(notsword.workability == "shapeable") + workpiece_state = WORKPIECE_PRESENT + workpiece_material = notsword.custom_materials + to_chat(user, "You place the [notsword] on the [src].") + currentquality = anvilquality + var/skillmod = 0 + if(user.mind.skill_holder) + skillmod = user.mind.get_skill_level(/datum/skill/level/dorfy/blacksmithing)/2 + currentquality += skillmod + qdel(notsword) + else + to_chat(user, "The ingot isn't workable yet!") + return FALSE + return + else if(istype(I, /obj/item/melee/smith/hammer)) + var/obj/item/melee/smith/hammer/hammertime = I + if(workpiece_state == WORKPIECE_PRESENT || workpiece_state == WORKPIECE_INPROGRESS) + do_shaping(user, hammertime.qualitymod) + return + else + to_chat(user, "You can't work an empty anvil!") + return FALSE + return ..() + +/obj/structure/anvil/wrench_act(mob/living/user, obj/item/I) + ..() + default_unfasten_wrench(user, I, 5) + return TRUE + + +/obj/structure/anvil/proc/do_shaping(mob/user, var/qualitychange) + currentquality += qualitychange + var/list/shapingsteps = list("weak hit", "strong hit", "heavy hit", "fold", "draw", "shrink", "bend", "punch", "upset") //weak/strong/heavy hit affect strength. All the other steps shape. + workpiece_state = WORKPIECE_INPROGRESS + var/stepdone = input(user, "How would you like to work the metal?") in shapingsteps + var/steptime = 50 + if(user.mind.skill_holder) + var/skillmod = user.mind.get_skill_level(/datum/skill/level/dorfy/blacksmithing)/10 + 1 + steptime = 50 / skillmod + playsound(src, 'sound/effects/clang2.ogg',40, 2) + if(!do_after(user, steptime, target = src)) + return FALSE + switch(stepdone) + if("weak hit") + currentsteps += 1 + outrightfailchance += 5 + currentquality += 1 + if("strong hit") + currentsteps += 2 + outrightfailchance += 9.5 + currentquality += 2 + if("heavy hit") + currentsteps += 3 + outrightfailchance += 12.5 + currentquality += 3 + if("fold") + stepsdone += "f" + currentsteps += 1 + currentquality -= 1 + if("draw") + stepsdone += "d" + currentsteps += 1 + currentquality -= 1 + if("shrink") + stepsdone += "s" + currentsteps += 1 + currentquality -= 1 + if("bend") + stepsdone += "b" + currentsteps += 1 + currentquality -= 1 + if("punch") + stepsdone += "p" + currentsteps += 1 + currentquality -= 1 + if("upset") + stepsdone += "u" + currentsteps += 1 + currentquality -= 1 + user.visible_message("[user] works the metal on the anvil with their hammer with a loud clang!", \ + "You [stepdone] the metal with a loud clang!") + playsound(src, 'sound/effects/clang2.ogg',40, 2) + addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, src, 'sound/effects/clang2.ogg', 40, 2), 15) + if(length(stepsdone) >= 3) + tryfinish(user) + +/obj/structure/anvil/proc/tryfinish(mob/user) + var/artifactchance = 0 + if(!artifactrolled) + artifactchance = (1+(user.mind.get_skill_level(/datum/skill/level/dorfy/blacksmithing)/4))/2500 + artifactrolled = TRUE + var/artifact = max(prob(artifactchance), debug) + var/finalfailchance = outrightfailchance + if(user.mind.skill_holder) + var/skillmod = user.mind.get_skill_level(/datum/skill/level/dorfy/blacksmithing)/10 + 1 + finalfailchance = max(0, finalfailchance / skillmod) //lv 2 gives 20% less to fail, 3 30%, etc + if((currentsteps > 10 || (rng && prob(finalfailchance))) && !artifact) + to_chat(user, "You overwork the metal, causing it to turn into useless slag!") + var/turf/T = get_turf(user) + workpiece_state = FALSE + new /obj/item/stack/ore/slag(T) + currentquality = anvilquality + stepsdone = "" + currentsteps = 0 + outrightfailchance = 1 + artifactrolled = FALSE + if(user.mind.skill_holder) + user.mind.auto_gain_experience(/datum/skill/level/dorfy/blacksmithing, 25, 400, silent = FALSE) + for(var/i in smithrecipes) + if(i == stepsdone) + var/turf/T = get_turf(user) + var/obj/item/smithing/create = smithrecipes[stepsdone] + var/obj/item/smithing/finisheditem = new create(T) + to_chat(user, "You finish your [finisheditem]!") + if(artifact) + to_chat(user, "It is an artifact, a creation whose legacy shall live on forevermore.") //todo: SSblackbox + currentquality = max(currentquality, 2) + finisheditem.quality = currentquality * 3//this is insane i know it's 1/2500 for most of the time and 0.8% at best + finisheditem.artifact = TRUE + else + finisheditem.quality = min(currentquality, itemqualitymax) + switch(finisheditem.quality) + if(-1000 to -8) + finisheditem.desc = "It looks to be the most awfully made object you've ever seen." + if(-8) + finisheditem.desc = "It looks to be the second most awfully made object you've ever seen." + if(-8 to 0) + finisheditem.desc = "It looks to be barely passable as... whatever it's trying to pass for." + if(0) + finisheditem.desc = "It looks to be totally average." + if(0 to INFINITY) + finisheditem.desc = "It looks to be better than average." + workpiece_state = FALSE + finisheditem.set_custom_materials(workpiece_material) + currentquality = anvilquality + stepsdone = "" + currentsteps = 0 + outrightfailchance = 1 + artifactrolled = FALSE + if(user.mind.skill_holder) + user.mind.auto_gain_experience(/datum/skill/level/dorfy/blacksmithing, 50, 10000000, silent = FALSE) + break + +/obj/structure/anvil/debugsuper + name = "super ultra epic anvil of debugging." + desc = "WOW. A DEBUG ITEM STRUCTURE. EPIC." + icon_state = "anvil" + anvilquality = 10 + itemqualitymax = 9001 + outrightfailchance = 0 + +/obj/structure/anvil/obtainable + name = "anvil" + desc = "Base class of anvil. This shouldn't exist, but is useable." + anvilquality = 0 + outrightfailchance = 5 + rng = TRUE + +/obj/structure/anvil/obtainable/table + name = "table anvil" + desc = "A slightly reinforced table. Good luck." + icon_state = "tablevil" + anvilquality = -2 + itemqualitymax = 0 + + +/obj/structure/anvil/obtainable/table/do_shaping(mob/user, var/qualitychange) + if(prob(5)) + to_chat(user, "The [src] breaks under the strain!") + take_damage(max_integrity) + return FALSE + else + ..() + +/obj/structure/anvil/obtainable/bronze + name = "slab of bronze" + desc = "A big block of bronze. Useable as an anvil." + custom_materials = list(/datum/material/bronze=8000) + icon_state = "ratvaranvil" + anvilquality = -0.5 + itemqualitymax = 2 + +/obj/structure/anvil/obtainable/sandstone + name = "sandstone brick anvil" + desc = "A big block of sandstone. Useable as an anvil." + custom_materials = list(/datum/material/sandstone=8000) + icon_state = "sandvil" + anvilquality = -1 + itemqualitymax = 2 + +/obj/structure/anvil/obtainable/basalt + name = "basalt brick anvil" + desc = "A big block of basalt. Useable as an anvil, better than sandstone. Igneous!" + icon_state = "sandvilnoir" + anvilquality = -0.5 + itemqualitymax = 4 + +/obj/structure/anvil/obtainable/basic + name = "anvil" + desc = "An anvil. It's got wheels bolted to the bottom." + anvilquality = 0 + itemqualitymax = 6 + +/obj/structure/anvil/obtainable/ratvar + name = "brass anvil" + desc = "A big block of what appears to be brass. Useable as an anvil, if whatever's holding the brass together lets you." + custom_materials = list(/datum/material/bronze=8000) + icon_state = "ratvaranvil" + anvilquality = 1 + itemqualitymax = 8 + +/obj/structure/anvil/obtainable/ratvar/attackby(obj/item/I, mob/user) + if(is_servant_of_ratvar(user)) + return ..() + else + to_chat(user, "KNPXWN, QNJCQNW!") //rot13 then rot22 if anyone wants to decode + +/obj/structure/anvil/obtainable/narsie + name = "runic anvil" + desc = "An anvil made of a strange, runic metal." + custom_materials = list(/datum/material/runedmetal=8000) + icon = 'icons/obj/smith.dmi' + icon_state = "evil" + anvilquality = 1 + itemqualitymax = 8 + +/obj/structure/anvil/obtainable/narsie/attackby(obj/item/I, mob/user) + if(iscultist(user)) + return ..() + else + to_chat(user, "That is not yours to use!") + +#undef WORKPIECE_PRESENT +#undef WORKPIECE_INPROGRESS +#undef WORKPIECE_FINISHED +#undef WORKPIECE_SLAG diff --git a/code/modules/smithing/finished_items.dm b/code/modules/smithing/finished_items.dm new file mode 100644 index 0000000000..5db6b09452 --- /dev/null +++ b/code/modules/smithing/finished_items.dm @@ -0,0 +1,329 @@ + +/obj/item/melee/smith + name = "base class obj/item/melee/smith" //tin. handles overlay and quality and shit. + desc = "cringe" + icon = 'icons/obj/smith.dmi' + icon_state = "claymore" + item_state = "claymore" + material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS + total_mass = TOTAL_MASS_MEDIEVAL_WEAPON //yeah ok + slot_flags = ITEM_SLOT_BELT + w_class = WEIGHT_CLASS_NORMAL + force = 6 + lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' + var/quality + var/overlay_state = "stick" + var/mutable_appearance/overlay + var/wielded_mult = 1 + var/wield_force = 15 + +/obj/item/melee/smith/Initialize() + ..() + if(desc == "cringe") + desc = "A handmade [name]." + overlay = mutable_appearance(icon, overlay_state) + overlay.appearance_flags = RESET_COLOR + add_overlay(overlay) + if(force < 0) + force = 0 + + +/obj/item/melee/smith/twohand + item_flags = NEEDS_PERMIT //it's a bigass sword/spear. beepsky is going to give you shit for it. + sharpness = SHARP_EDGED + material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS + force = 10 + wielded_mult = 1.75 + w_class = WEIGHT_CLASS_BULKY + +/obj/item/melee/smith/twohand/ComponentInitialize() + . = ..() + AddComponent(/datum/component/butchering, 100, 70) //decent in a pinch, but pretty bad. + AddElement(/datum/element/sword_point) + + + +/////////////////////////// +// Mining // +/////////////////////////// +/obj/item/mining_scanner/prospector + name = "prospector's pickaxe" + desc = "A pickaxe that can sound rocks to find mineral deposits and stop gibtonite detonations." + material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS + icon = 'icons/obj/smith.dmi' + icon_state = "minipick" //todo:sprite + sharpness = SHARP_POINTY//it doesnt have a blade it has a point + +/obj/item/mining_scanner/prospector/Initialize() + ..() + var/mutable_appearance/overlay + desc = "A handmade [name]." + overlay = mutable_appearance(icon, "minihandle") + overlay.appearance_flags = RESET_COLOR + add_overlay(overlay) + if(force < 0) + force = 0 + +/obj/item/pickaxe/smithed + name = "pickaxe" + desc = "A pickaxe." + material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS + icon = 'icons/obj/smith.dmi' + icon_state = "pickaxe" + sharpness = SHARP_POINTY + +/obj/item/pickaxe/smithed/Initialize() + ..() + desc = "A handmade [name]." + var/mutable_appearance/overlay + overlay = mutable_appearance(icon, "stick") + overlay.appearance_flags = RESET_COLOR + add_overlay(overlay) + if(force < 0) + force = 0 + +/obj/item/pickaxe/smithed/attack_self(mob/user) + to_chat(user, "Tool does not have a configureable dig range.") + +/obj/item/shovel/smithed + name = "shovel" + desc = "A shovel." + icon = 'icons/obj/smith.dmi' + material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS + icon_state = "shovel" + sharpness = SHARP_EDGED //it cuts through the earth + +/obj/item/shovel/smithed/Initialize() + ..() + desc = "A handmade [name]." + var/mutable_appearance/overlay + overlay = mutable_appearance(icon, "shovelhandle") + overlay.appearance_flags = RESET_COLOR + add_overlay(overlay) + if(force < 0) + force = 0 + + +/////////////////////////// +// Spears // +/////////////////////////// + + +/obj/item/melee/smith/twohand/halberd + name = "halberd" + icon_state = "halberd" + w_class = WEIGHT_CLASS_HUGE + overlay_state = "spearhandle" + slot_flags = ITEM_SLOT_BACK + wielded_mult = 2.5 + +/obj/item/melee/smith/twohand/halberd/ComponentInitialize() + . = ..() + AddComponent(/datum/component/jousting) + +/obj/item/melee/smith/twohand/javelin + name = "javelin" + icon_state = "javelin" + overlay_state = "longhandle" + wielded_mult = 1.5 + slot_flags = ITEM_SLOT_BACK + sharpness = SHARP_POINTY + + +/obj/item/melee/smith/twohand/javelin/ComponentInitialize() + . = ..() + AddComponent(/datum/component/jousting) + +/obj/item/melee/smith/twohand/glaive + name = "glaive" + icon_state = "glaive" + overlay_state = "longhandle" + slot_flags = ITEM_SLOT_BACK + wielded_mult = 2 + +/obj/item/melee/smith/twohand/glaive/ComponentInitialize() + . = ..() + AddComponent(/datum/component/jousting) + + +/obj/item/melee/smith/twohand/pike + name = "pike" + icon_state = "pike" + w_class = WEIGHT_CLASS_HUGE + overlay_state = "longhandle" + reach = 2 //yeah ok + slot_flags = ITEM_SLOT_BACK + sharpness = SHARP_POINTY + +////////////////////////// +// Other Melee // +/////////////////////////// + + +/obj/item/melee/smith/hammer//blacksmithing, not warhammer. + name = "hammer" + icon_state = "hammer" + overlay_state = "hammerhandle" + var/qualitymod = 0 + +/obj/item/scythe/smithed //we need to inherit scythecode, but that's about it. + material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS + + +/obj/item/melee/smith/cogheadclub + name = "coghead club" + icon_state = "coghead" + item_flags = NEEDS_PERMIT + overlay_state = "stick" + +/obj/item/melee/smith/shortsword + name = "gladius" + force = 9 + item_flags = NEEDS_PERMIT + sharpness = SHARP_EDGED + icon_state = "gladius" + overlay_state = "gladiushilt" + +/obj/item/melee/smith/shortsword/scimitar + name = "scimitar" + sharpness = SHARP_EDGED + icon_state = "scimitar" + overlay_state = "scimitarhilt" + +/obj/item/melee/smith/wakizashi + name = "wakizashi" + sharpness = SHARP_EDGED + force = 7 + item_flags = NEEDS_PERMIT | ITEM_CAN_PARRY + obj_flags = UNIQUE_RENAME + icon_state = "waki" + overlay_state = "wakihilt" + block_parry_data = /datum/block_parry_data/waki + +/datum/block_parry_data/waki //like longbokken but worse reflect + parry_stamina_cost = 6 + parry_time_windup = 0 + parry_time_active = 15 //decent window + parry_time_spindown = 0 + parry_time_perfect = 2 + parry_time_perfect_leeway = 0.75 + parry_imperfect_falloff_percent = 7.5 + parry_efficiency_to_counterattack = 100 + parry_efficiency_considered_successful = 80 + parry_efficiency_perfect = 120 + parry_failed_stagger_duration = 3 SECONDS + parry_data = list(PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 1.9) + +/obj/item/melee/smith/twohand/broadsword + name = "broadsword" + icon_state = "broadsword" + overlay_state = "broadhilt" + wielded_mult = 1.8 + +/obj/item/melee/smith/twohand/zweihander + name = "zweihander" + icon_state = "zwei" + overlay_state = "zweihilt" + total_mass = TOTAL_MASS_MEDIEVAL_WEAPON * 2 + force = 4 + wielded_mult = 3 //affected more by quality. a -1 is 25% less damage, a +1 is 25% more. These bonuses are tripled when wielded. + +/obj/item/melee/smith/twohand/katana + name = "katana" + icon_state = "katana" + overlay_state = "katanahilt" + force = 7 + wielded_mult = 2 + item_flags = ITEM_CAN_PARRY | NEEDS_PERMIT //want to name your katana "DEMON BLADE" or some shit? go ahead, idiot. + obj_flags = UNIQUE_RENAME + block_parry_data = /datum/block_parry_data/captain_saber //todo + +/obj/item/melee/smith/sabre + name = "sabre" + icon_state = "sabre" + sharpness = SHARP_EDGED + overlay_state = "sabrehilt" + armour_penetration = 15 + force = 9 + hitsound = 'sound/weapons/rapierhit.ogg' + item_flags = NEEDS_PERMIT | ITEM_CAN_PARRY + block_parry_data = /datum/block_parry_data/captain_saber //yeah this is fine i guess + +/obj/item/melee/smith/sabre/rapier + name = "rapier" + icon_state = "rapier" + sharpness = SHARP_EDGED + overlay_state = "rapierhilt" + force = 6 //less force, stronger parry + sharpness = SHARP_POINTY + armour_penetration = 30 + block_parry_data = /datum/block_parry_data/smithrapier + +/datum/block_parry_data/smithrapier //parry into riposte. i am pretty sure this is going to be nearly fucking impossible to land. + parry_stamina_cost = 12 //dont miss + parry_time_active = 4 + parry_time_perfect = 2 + parry_time_perfect_leeway = 2 + parry_failed_stagger_duration = 3 SECONDS + parry_failed_clickcd_duration = 3 SECONDS + parry_time_windup = 0 + parry_time_spindown = 0 + parry_imperfect_falloff_percent = 0 + parry_efficiency_to_counterattack = 100 + parry_efficiency_considered_successful = 120 + parry_efficiency_perfect = 120 + parry_data = list(PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 4) + +//unique hammers +/obj/item/melee/smith/hammer/toolbox + name = "toolbox hammer" + desc = "A metal filled toolbox on a stick. Useable as a really shitty hammer." + w_class = WEIGHT_CLASS_BULKY + icon_state = "toolbox" + overlay_state = "hammerhandle" + qualitymod = -2 + +/obj/item/melee/smith/hammer/narsie + name = "runemetal hammer" + custom_materials = list(/datum/material/runedmetal = 12000) + desc = "A metal hammer inscribed with geometeric runes." + qualitymod = 1 + +/obj/item/melee/smith/hammer/narsie/attack(mob/living/target, mob/living/carbon/human/user) + if(!iscultist(user)) + user.DefaultCombatKnockdown(100) + user.dropItemToGround(src, TRUE) + user.visible_message("A powerful force shoves [user] away from [target]!", \ + "\"You shouldn't be touching tools that aren't yours.\"") + if(ishuman(user)) + var/mob/living/carbon/human/H = user + H.apply_damage(rand(force/2, force), BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) + else + user.adjustBruteLoss(rand(force/2,force)) + return + ..() + +/obj/item/melee/smith/hammer/ratvar + name = "brass hammer" + custom_materials = list(/datum/material/bronze = 12000) + desc = "A brass hammer inscribed with... writing? You can't read it." + qualitymod = 1 + +/obj/item/melee/smith/hammer/ratvar/attack(mob/living/target, mob/living/carbon/human/user) + if(!is_servant_of_ratvar(user)) + user.DefaultCombatKnockdown(100) + user.dropItemToGround(src, TRUE) + user.visible_message("A powerful force shoves [user] away from [target]!", "\"You shouldn't be touching tools that aren't yours.\"") + if(ishuman(user)) + var/mob/living/carbon/human/H = user + H.apply_damage(rand(force/2, force), BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) + else + user.adjustBruteLoss(rand(force/2,force)) + return + ..() + +/obj/item/melee/smith/hammer/debug + name = "debugging hammer" + desc = "A DEBUGGING HAMMER!! EPIC!!." + qualitymod = 10 diff --git a/code/modules/smithing/furnace.dm b/code/modules/smithing/furnace.dm new file mode 100644 index 0000000000..ee1d6a1b93 --- /dev/null +++ b/code/modules/smithing/furnace.dm @@ -0,0 +1,75 @@ +/obj/structure/furnace + name = "furnace" + desc = "A furnace." + icon = 'icons/obj/smith.dmi' + icon_state = "furnace0" + density = TRUE + anchored = TRUE + var/debug = FALSE //debugging only + var/working = TRUE + var/fueluse = 1 + + +/obj/structure/furnace/Initialize() + ..() + create_reagents(250, TRANSPARENT) + START_PROCESSING(SSobj, src) + +/obj/structure/furnace/Destroy() + ..() + STOP_PROCESSING(SSobj, src) + +/obj/structure/furnace/process() + if(debug) + reagents.add_reagent(/datum/reagent/fuel, 1) + return TRUE + if(reagents.remove_reagent(/datum/reagent/fuel, fueluse)) + working = TRUE + if(icon_state == "furnace0") + icon_state = "furnace1" + else + working = FALSE + icon_state = "furnace0" + +/obj/structure/furnace/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/ingot)) + var/obj/item/ingot/notsword = I + if(working) + to_chat(user, "You heat the [notsword] in the [src].") + notsword.workability = "shapeable" + else + to_chat(user, "The furnace isn't working!.") + else + ..() + +/obj/structure/furnace/wrench_act(mob/living/user, obj/item/I) + ..() + default_unfasten_wrench(user, I, 5) + return TRUE + +/obj/structure/furnace/attackby(obj/item/W, mob/user, params) + if(W.reagents) + W.reagents.trans_to(src, 250) + else + return ..() + +/obj/structure/furnace/plunger_act(obj/item/plunger/P, mob/living/user, reinforced) + to_chat(user, "You start furiously plunging [name].") + if(do_after(user, 30, target = src)) + to_chat(user, "You finish plunging the [name].") + reagents.reaction(get_turf(src), TOUCH) //splash on the floor + reagents.clear_reagents() + +/obj/structure/furnace/infinite + name = "fuelless furnace" + debug = TRUE + icon_state = "ratfurnace" + + +/obj/structure/furnace/infinite/ratvar + name = "brass furnace" + desc = "A brass furnace. Powered by... something, but seems otherwise safe." //todo:sprites they're safe for noncultists because you're just putting ingots in them. also there';s a reason to steal them ig + +/obj/structure/furnace/infinite/narsie + name = "rune furnace" + desc = "A runed furnace. Powered by... something, but seems otherwise safe." diff --git a/code/modules/smithing/smithed_items.dm b/code/modules/smithing/smithed_items.dm new file mode 100644 index 0000000000..6d10d33a75 --- /dev/null +++ b/code/modules/smithing/smithed_items.dm @@ -0,0 +1,419 @@ +/obj/item/basaltblock + name = "basalt block" + desc = "A block of basalt." + icon = 'icons/obj/smith.dmi' + icon_state = "sandvilnoir" + + +/obj/item/smithing + name = "base class /obj/item/smithing" + icon = 'icons/obj/smith.dmi' + icon_state = "unfinished" + material_flags = MATERIAL_COLOR | MATERIAL_ADD_PREFIX + var/quality = 0 //quality. Changed by the smithing process. + var/obj/item/finishingitem = /obj/item/stick //What this item needs to be hit by to create finalitem + var/obj/item/finalitem + var/artifact = FALSE + +/obj/item/ingot + name = "ingot" + icon = 'icons/obj/smith.dmi' + icon_state = "ingot" + material_flags = MATERIAL_COLOR | MATERIAL_ADD_PREFIX + var/workability = 0 + + +/obj/item/ingot/on_attack_hand(mob/user) + var/mob/living/carbon/human/H + if(workability != "shapeable") + return ..() + var/prot = 0 + if(ishuman(user)) + H = user + if(H.gloves) + var/obj/item/clothing/gloves/G = H.gloves + if(G.max_heat_protection_temperature) + prot = (G.max_heat_protection_temperature > 360) + else + prot = 1 + if(prot > 0 || HAS_TRAIT(user, TRAIT_RESISTHEAT) || HAS_TRAIT(user, TRAIT_RESISTHEATHANDS)) + to_chat(user, "You pick up the [src].") + return ..() + else + to_chat(user, "You try to move the [src], but you burn your hand on it!") + if(H) + var/obj/item/bodypart/affecting = H.get_bodypart("[(user.active_hand_index % 2 == 0) ? "r" : "l" ]_arm") + if(affecting && affecting.receive_damage( 0, 5 )) // 5 burn damage + H.update_damage_overlays() + +/obj/item/ingot/iron + custom_materials = list(/datum/material/iron=12000) + +/obj/item/ingot/diamond + custom_materials = list(/datum/material/diamond=12000) //yeah ok + +/obj/item/ingot/uranium + custom_materials = list(/datum/material/uranium=12000) + +/obj/item/ingot/plasma + custom_materials = list(/datum/material/plasma=12000)//yeah ok + +/obj/item/ingot/gold + custom_materials = list(/datum/material/gold=12000) + +/obj/item/ingot/silver + custom_materials = list(/datum/material/silver=12000) + +/obj/item/ingot/bananium + custom_materials = list(/datum/material/bananium=12000) + +/obj/item/ingot/titanium + custom_materials = list(/datum/material/titanium=12000) + +/obj/item/ingot/adamantine + custom_materials = list(/datum/material/adamantine=12000) + +/obj/item/ingot/cult + custom_materials = list(/datum/material/runedmetal=12000) + +/obj/item/ingot/bronze + custom_materials = list(/datum/material/bronze=12000) + +/obj/item/ingot/ratvar + custom_materials = list(/datum/material/brass=12000) + desc = "On closer inspection, what appears to be wholly-unsuitable-for-smithing brass is actually primarily replicant alloy. Nezbere must have switched it while you weren't looking." + + +/obj/item/smithing/attackby(obj/item/I, mob/user) + if(istype(I, finishingitem)) + qdel(I) + startfinish() + else + return ..() + +/obj/item/smithing/proc/startfinish() + dofinish() + +/obj/item/smithing/proc/dofinish() + var/qualname + switch(quality) + if(-1000 to -5) + qualname = "awful" + if(-1000 to -2) + qualname = "shoddy" + if(-1000 to -1) + qualname = "poor" + if(-1 to 1) + qualname = "normal" + if(10 to INFINITY) + qualname = "legendary" + if(7.5 to 10) + qualname = "masterwork" + if(5.5 to 7.5) + qualname = "excellent" + if(3.5 to 5.5) + qualname = "good" + if(0 to 3.5) + qualname = "above-average" + var/datum/material/mat = custom_materials[1] + finalitem.set_custom_materials(custom_materials) + mat = mat.name + if(artifact) + dwarfyartifact(finalitem, mat) + else + finalitem.name = "[qualname] [mat] [initial(finalitem.name)]" + finalitem.desc = "A [qualname] [initial(finalitem.name)]. Its quality is [quality]." + finalitem.forceMove(get_turf(src)) + qdel(src) + + +/obj/item/smithing/proc/dwarfyartifact(var/obj/item/finalitem, var/mat) + var/finaldesc = "A [initial(finalitem.name)] made of [mat], all craftsmanship is of the highest quality. It " + switch(pick(1,2,3,4,5)) + if(1) + finaldesc += "is encrusted with [pick("","synthetic ","multi-faceted ","magical ","sparkling ") + pick("rubies","emeralds","jade","opals","lapiz lazuli")]." + if(2) + finaldesc += "is laced with studs of [pick("gold","silver","aluminium","titanium")]." + if(3) + finaldesc += "is encircled with bands of [pick("durasteel","metallic hydrogen","ferritic-alloy","plasteel","duranium")]." + if(4) + finaldesc += "menaces with spikes of [pick("ytterbium","uranium","white pearl","black steel")]." + if(5) + finaldesc += "is encrusted with [pick("","synthetic ","multi-faceted ","magical ","sparkling ") + pick("rubies","emeralds","jade","opals","lapis lazuli")],laced with studs of [pick("gold","silver","aluminium","titanium")], encircled with bands of [pick("durasteel","metallic hydrogen","ferritic-alloy","plasteel","duranium")] and menaces with spikes of [pick("ytterbium","uranium","white pearl","black steel")]." + finalitem.desc = finaldesc + finalitem.name = pick("Delersibnir", "Nekolangrir", "Zanoreshik","Öntakrítin", "Nogzatan", "Vunomam", "Nazushagsaldôbar", "Sergeb", "Zafaldastot", "Vudnis", "Dostust", "Shotom", "Mugshith", "Angzak", "Oltud", "Deleratîs", "Nökornomal") //one of these is literally BLOOD POOL CREATE.iirc its Nazushagsaldôbar. + +/obj/item/smithing/hammerhead + name = "smithed hammer head" + finalitem = /obj/item/melee/smith/hammer + icon_state = "hammer" + +/obj/item/smithing/hammerhead/startfinish() + var/obj/item/melee/smith/hammer/finalforreal = new /obj/item/melee/smith/hammer(src) + finalforreal.force += quality/2 + finalforreal.qualitymod = quality/4 + finalitem = finalforreal + ..() + + + +/obj/item/smithing/scytheblade + name = "smithed scythe head" + finalitem = /obj/item/scythe/smithed + icon_state = "scythe" + +/obj/item/smithing/scytheblade/startfinish() + finalitem = new /obj/item/scythe/smithed(src) + finalitem.force += quality + ..() + +/obj/item/smithing/shovelhead + name = "smithed shovel head" + finalitem = /obj/item/shovel/smithed + icon_state = "shovel" + +/obj/item/smithing/shovelhead/startfinish() + finalitem = new /obj/item/shovel/smithed(src) + finalitem.force += quality/2 + if(quality > 0) + finalitem.toolspeed = max(0.05,(1-(quality/10))) + else + finalitem.toolspeed *= max(1, (quality * -1)) + ..() + +/obj/item/smithing/cogheadclubhead + name = "smithed coghead club head" + finalitem = /obj/item/melee/smith/cogheadclub + icon_state = "coghead" + +/obj/item/smithing/cogheadclubhead/startfinish() + finalitem = new /obj/item/melee/smith/cogheadclub(src) + finalitem.force += quality + ..() + +/obj/item/smithing/javelinhead + name = "smithed javelin head" + finalitem = /obj/item/melee/smith/twohand/javelin + icon_state = "javelin" + +/obj/item/smithing/javelinhead/startfinish() + var/obj/item/melee/smith/twohand/javelin/finalforreal = new /obj/item/melee/smith/twohand/javelin(src) + finalforreal.force += quality + finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult + finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]") + finalforreal.throwforce = finalforreal.force*2 + finalitem = finalforreal + ..() + +/obj/item/smithing/pikehead + name = "smithed pike head" + finalitem = /obj/item/melee/smith/twohand/pike + icon_state = "pike" + +/obj/item/smithing/pikehead/startfinish() + var/obj/item/melee/smith/twohand/pike/finalforreal = new /obj/item/melee/smith/twohand/pike(src) + finalforreal.force += quality + finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult + finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]") + finalforreal.throwforce = finalforreal.force/10 //its a pike not a javelin + finalitem = finalforreal + ..() + +/obj/item/smithing/pickaxehead + name = "smithed pickaxe head" + finalitem = /obj/item/pickaxe/smithed + icon_state = "pickaxe" + +/obj/item/smithing/pickaxehead/startfinish() + var/obj/item/pickaxe/smithed/finalforreal = new /obj/item/pickaxe/smithed(src) + finalforreal.force += quality/2 + if(quality > 0) + finalforreal.toolspeed = max(0.05,(1-(quality/10))) + else + finalforreal.toolspeed *= max(1, (quality * -1)) + switch(quality) + if(10 to INFINITY) + finalforreal.digrange = 4 + if(5 to 9) + finalforreal.digrange = 3 + if(3,4) + finalforreal.digrange = 2 + else + finalforreal.digrange = 1 + finalitem = finalforreal + ..() + + +/obj/item/smithing/prospectingpickhead + name = "smithed prospector's pickaxe head" + finalitem = /obj/item/mining_scanner/prospector + icon_state = "minipick" + +/obj/item/smithing/prospectingpickhead/startfinish() + var/obj/item/mining_scanner/prospector/finalforreal = new /obj/item/mining_scanner/prospector(src) + finalforreal.range = 2 + quality + if(quality) + finalforreal.cooldown = 100/quality + finalitem = finalforreal + ..() + + +/obj/item/smithing/shortswordblade + name = "smithed gladius blade" + finishingitem = /obj/item/swordhandle + finalitem = /obj/item/melee/smith/shortsword + icon_state = "gladius" + +/obj/item/smithing/shortswordblade/startfinish() + finalitem = new /obj/item/melee/smith/shortsword(src) + finalitem.force += quality + ..() + +/obj/item/smithing/scimitarblade + name = "smithed scimitar blade" + finishingitem = /obj/item/swordhandle + finalitem = /obj/item/melee/smith/shortsword/scimitar + icon_state = "scimitar" + +/obj/item/smithing/scimitarblade/startfinish() + finalitem = new /obj/item/melee/smith/shortsword/scimitar(src) + finalitem.force += quality + ..() + +/obj/item/smithing/wakiblade + name = "smithed wakizashi blade" + finishingitem = /obj/item/swordhandle + finalitem = /obj/item/melee/smith/wakizashi + icon_state = "waki" + +/obj/item/smithing/wakiblade/startfinish() + finalitem = new /obj/item/melee/smith/wakizashi(src) + finalitem.force += quality + ..() + +/obj/item/smithing/sabreblade + name = "smithed sabre blade" + finishingitem = /obj/item/swordhandle + finalitem = /obj/item/melee/smith/sabre + icon_state = "sabre" + +/obj/item/smithing/sabreblade/startfinish() + finalitem = new /obj/item/melee/smith/sabre(src) + finalitem.force += quality + ..() + +/obj/item/smithing/rapierblade + name = "smithed rapier blade" + finishingitem = /obj/item/swordhandle + finalitem = /obj/item/melee/smith/sabre/rapier + icon_state = "rapier" + +/obj/item/smithing/rapierblade/startfinish() + finalitem = new /obj/item/melee/smith/sabre/rapier(src) + finalitem.force += quality + ..() + +/obj/item/smithing/knifeblade + name = "smithed knife blade" + finishingitem = /obj/item/swordhandle + finalitem = /obj/item/kitchen/knife + icon_state = "dagger" + +/obj/item/smithing/knifeblade/startfinish() + finalitem = new /obj/item/kitchen/knife(src) + finalitem.force = 4 + quality/2 + finalitem.icon = 'icons/obj/smith.dmi' + finalitem.icon_state = "dagger" + finalitem.name = "dagger" + finalitem.desc = "A dagger." + var/mutable_appearance/overlay = mutable_appearance('icons/obj/smith.dmi', "daggerhilt") + overlay.appearance_flags = RESET_COLOR + finalitem.add_overlay(overlay) + if(finalitem.force < 0) + finalitem.force = 0 + finalitem.material_flags = MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS + ..() + +/obj/item/smithing/broadblade + name = "smithed broadsword blade" + finishingitem = /obj/item/swordhandle + finalitem = /obj/item/melee/smith/twohand/broadsword + icon_state = "broadsword" + +/obj/item/smithing/broadblade/startfinish() + var/obj/item/melee/smith/twohand/broadsword/finalforreal = new /obj/item/melee/smith/twohand/broadsword(src) + finalforreal.force += quality + finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult + finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]") + finalitem = finalforreal + ..() + +/obj/item/smithing/zweiblade + name = "smithed zweihander blade" + finishingitem = /obj/item/swordhandle + finalitem = /obj/item/melee/smith/twohand/zweihander + icon_state = "zwei" + +/obj/item/smithing/zweiblade/startfinish() + var/obj/item/melee/smith/twohand/zweihander/finalforreal = new /obj/item/melee/smith/twohand/zweihander(src) + finalforreal.force += quality + finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult + finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]") + finalitem = finalforreal + ..() + +/obj/item/smithing/halberdhead + name = "smithed halberd head" + finalitem = /obj/item/melee/smith/twohand/halberd + icon_state = "halberd" + +/obj/item/smithing/halberdhead/startfinish() + var/obj/item/melee/smith/twohand/halberd/finalforreal = new /obj/item/melee/smith/twohand/halberd(src) + finalforreal.force += quality + finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult + finalforreal.throwforce = finalforreal.force/3 + finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]") + finalitem = finalforreal + ..() + +/obj/item/smithing/glaivehead + name = "smithed glaive head" + finalitem = /obj/item/melee/smith/twohand/glaive + icon_state = "glaive" + +/obj/item/smithing/glaivehead/startfinish() + var/obj/item/melee/smith/twohand/glaive/finalforreal = new /obj/item/melee/smith/twohand/glaive(src) + finalforreal.force += quality + finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult + finalforreal.throwforce = finalforreal.force + finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]") + finalitem = finalforreal + ..() + +/obj/item/smithing/katanablade + name = "smithed katana blade" + finishingitem = /obj/item/swordhandle + finalitem = /obj/item/melee/smith/twohand/katana + icon_state = "katana" + + +/obj/item/smithing/katanablade/startfinish() + var/obj/item/melee/smith/twohand/katana/finalforreal = new /obj/item/melee/smith/twohand/katana(src) + finalforreal.force += quality + finalforreal.wield_force = finalforreal.force*finalforreal.wielded_mult + finalforreal.AddComponent(/datum/component/two_handed, force_unwielded=finalforreal.force, force_wielded=finalforreal.wield_force, icon_wielded="[icon_state]") + finalitem = finalforreal + ..() + +/obj/item/stick + name = "wooden rod" + desc = "It's a rod, suitable for use of a handle of a tool. Also could serve as a weapon, in a pinch." + icon = 'icons/obj/smith.dmi' + icon_state = "stick" + force = 7 + +/obj/item/swordhandle + name = "sword handle" + desc = "It's a crudlely shaped wooden sword hilt." + icon = 'icons/obj/smith.dmi' + icon_state = "shorthilt" diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm index 9172ce00bc..f23a03da5b 100644 --- a/code/modules/surgery/organs/eyes.dm +++ b/code/modules/surgery/organs/eyes.dm @@ -265,10 +265,6 @@ var/C = input(owner, "Select Color", "Select color", "#ffffff") as color|null if(!C || QDELETED(src) || QDELETED(user) || QDELETED(owner) || owner != user) return - var/list/hsv = ReadHSV(RGBtoHSV(C)) - if(hsv[2] > 125) - to_chat(user, "A color that saturated? Surely not!") - return var/range = input(user, "Enter range (0 - [max_light_beam_distance])", "Range Select", 0) as null|num if(!isnum(range)) return @@ -276,14 +272,24 @@ set_distance(clamp(range, 0, max_light_beam_distance)) assume_rgb(C) +#define MAX_SATURATION 192 +#define MAX_LIGHTNESS 256 + /obj/item/organ/eyes/robotic/glow/proc/assume_rgb(newcolor) - current_color_string = newcolor - eye_color = RGB2EYECOLORSTRING(current_color_string) + eye_color = RGB2EYECOLORSTRING(newcolor) + var/list/hsv = ReadHSV(RGBtoHSV(newcolor)) + hsv[2] = clamp(hsv[2], 0, MAX_SATURATION) + hsv[3] = clamp(hsv[3], 0, MAX_LIGHTNESS) + var/new_hsv = hsv(hsv[1], hsv[2], hsv[3]) + current_color_string = HSVtoRGB(new_hsv) sync_light_effects() cycle_mob_overlay() if(!QDELETED(owner) && ishuman(owner)) //Other carbon mobs don't have eye color. owner.dna.species.handle_body(owner) +#undef MAX_SATURATION +#undef MAX_LIGHTNESS + /obj/item/organ/eyes/robotic/glow/proc/cycle_mob_overlay() remove_mob_overlay() mob_overlay.color = current_color_string diff --git a/code/modules/surgery/organs/tongue.dm b/code/modules/surgery/organs/tongue.dm index 33d143d400..929b42f96d 100644 --- a/code/modules/surgery/organs/tongue.dm +++ b/code/modules/surgery/organs/tongue.dm @@ -12,7 +12,7 @@ var/taste_sensitivity = 15 // lower is more sensitive. maxHealth = TONGUE_MAX_HEALTH var/list/initial_accents //the ones the tongue starts with, not what it currently has - var/list/accents //done in order of priority (please always apply abductor accent and stuttering last) + var/list/accents = list() //done in order of priority (please always apply abductor accent and stuttering last) var/static/list/languages_possible_base = typecacheof(list( /datum/language/common, /datum/language/draconic, @@ -31,6 +31,8 @@ /obj/item/organ/tongue/Initialize(mapload) . = ..() + for(var/accent in initial_accents) + accents += new accent low_threshold_passed = "Your [name] feels a little sore." low_threshold_cleared = "Your [name] soreness has subsided." high_threshold_passed = "Your [name] is really starting to hurt." @@ -38,16 +40,14 @@ now_failing = "Your [name] feels like it's about to fall out!." now_fixed = "The excruciating pain of your [name] has subsided." languages_possible = languages_possible_base - for(var/accent in initial_accents) - initial_accents += new accent -/obj/item/organ/tongue/proc/handle_speech(datum/source, list/speech_args) //this wont proc unless there's initial_accents - for(var/datum/accent/speech_modifier in initial_accents) +/obj/item/organ/tongue/proc/handle_speech(datum/source, list/speech_args) //this wont proc unless there's initial_accents on the tongue + for(var/datum/accent/speech_modifier in accents) speech_args = speech_modifier.modify_speech(speech_args, source, owner) /obj/item/organ/tongue/applyOrganDamage(d, maximum = maxHealth) . = ..() - if (damage >= maxHealth) + if(damage >= maxHealth) to_chat(owner, "Your tongue is singed beyond recognition, and disintegrates!") SSblackbox.record_feedback("tally", "fermi_chem", 1, "Tongues lost to Fermi") qdel(src) @@ -56,7 +56,7 @@ ..() if(say_mod && M.dna && M.dna.species) M.dna.species.say_mod = say_mod - if(initial_accents) + if(length(initial_accents) || length(accents)) RegisterSignal(M, COMSIG_MOB_SAY, .proc/handle_speech) M.UnregisterSignal(M, COMSIG_MOB_SAY) @@ -163,11 +163,11 @@ maxHealth = 75 //Take brute damage instead var/chattering = FALSE var/phomeme_type = "sans" - var/list/phomeme_types = list(/datum/accent/bone/sans, /datum/accent/bone/papyrus) + var/list/phomeme_types = list(/datum/accent/span/sans, /datum/accent/span/papyrus) /obj/item/organ/tongue/bone/Initialize() - . = ..() initial_accents += pick(phomeme_types) + . = ..() /obj/item/organ/tongue/bone/applyOrganDamage(var/d, var/maximum = maxHealth) if(d < 0) @@ -197,7 +197,7 @@ icon_state = "tonguerobot" say_mod = "states" attack_verb = list("beeped", "booped") - initial_accents = list(/datum/accent/robot) + initial_accents = list(/datum/accent/span/robot) taste_sensitivity = 25 // not as good as an organic tongue maxHealth = 100 //RoboTongue! var/electronics_magic = TRUE @@ -205,9 +205,6 @@ /obj/item/organ/tongue/robot/could_speak_language(language) return ..() || electronics_magic -/obj/item/organ/tongue/robot/handle_speech(datum/source, list/speech_args) - ..() - /obj/item/organ/tongue/fluffy name = "fluffy tongue" desc = "OwO what's this?" @@ -220,6 +217,7 @@ name = "cybernetic tongue" desc = "A state of the art robotic tongue that can detect the pH of anything drank." icon_state = "tonguecybernetic" + initial_accents = list(/datum/accent/span/robot) taste_sensitivity = 10 maxHealth = 60 //It's robotic! organ_flags = ORGAN_SYNTHETIC @@ -231,10 +229,6 @@ var/errormessage = list("Runtime in tongue.dm, line 39: Undefined operation \"zapzap ow my tongue\"", "afhsjifksahgjkaslfhashfjsak", "-1.#IND", "Graham's number", "inside you all along", "awaiting at least 1 approving review before merging this taste request") owner.say("The pH is appropriately [pick(errormessage)].", forced = "EMPed synthetic tongue") -/obj/item/organ/tongue/cybernetic/handle_speech(datum/source, list/speech_args) - speech_args[SPEECH_SPANS] |= SPAN_ROBOT - ..() - /obj/item/organ/tongue/robot/ipc name = "positronic voicebox" say_mod = "beeps" diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index c4ded65e9c..0f1004221c 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -10,6 +10,12 @@ tool_behaviour = TOOL_RETRACTOR toolspeed = 1 +/obj/item/retractor/attack(mob/living/L, mob/user) + if(user.a_intent == INTENT_HELP) + to_chat(user, "You refrain from hitting [L] with [src], as you are in help intent.") + return + return ..() + /obj/item/retractor/advanced name = "mechanical pinches" desc = "An agglomerate of rods and gears." @@ -55,6 +61,12 @@ tool_behaviour = TOOL_HEMOSTAT toolspeed = 1 +/obj/item/hemostat/attack(mob/living/L, mob/user) + if(user.a_intent == INTENT_HELP) + to_chat(user, "You refrain from hitting [L] with [src], as you are in help intent.") + return + return ..() + /obj/item/hemostat/augment name = "hemostat" desc = "Tiny servos power a pair of pincers to stop bleeding." @@ -79,6 +91,12 @@ tool_behaviour = TOOL_CAUTERY toolspeed = 1 +/obj/item/cautery/attack(mob/living/L, mob/user) + if(user.a_intent == INTENT_HELP) + to_chat(user, "You refrain from hitting [L] with [src], as you are in help intent.") + return + return ..() + /obj/item/cautery/augment name = "cautery" desc = "A heated element that cauterizes wounds." @@ -107,6 +125,12 @@ tool_behaviour = TOOL_DRILL toolspeed = 1 +/obj/item/surgicaldrill/attack(mob/living/L, mob/user) + if(user.a_intent == INTENT_HELP) + to_chat(user, "You refrain from hitting [L] with [src], as you are in help intent.") + return + return ..() + /obj/item/surgicaldrill/advanced name = "searing tool" desc = "It projects a high power laser used for medical application." @@ -172,6 +196,12 @@ . = ..() AddComponent(/datum/component/butchering, 80 * toolspeed, 100, 0) +/obj/item/scalpel/attack(mob/living/L, mob/user) + if(user.a_intent == INTENT_HELP) + to_chat(user, "You refrain from hitting [L] with [src], as you are in help intent.") + return + return ..() + /obj/item/scalpel/advanced name = "laser scalpel" desc = "An advanced scalpel which uses laser technology to cut." @@ -255,6 +285,11 @@ . = ..() AddComponent(/datum/component/butchering, 40 * toolspeed, 100, 5, 'sound/weapons/circsawhit.ogg') //saws are very accurate and fast at butchering +/obj/item/circular_saw/attack(mob/living/L, mob/user) + if(user.a_intent == INTENT_HELP) + to_chat(user, "You refrain from hitting [L] with [src], as you are in help intent.") + return + return ..() /obj/item/circular_saw/augment name = "circular saw" @@ -392,3 +427,9 @@ attack_verb = list("corrected", "properly set") tool_behaviour = TOOL_BONESET toolspeed = 1 + +/obj/item/bonesetter/attack(mob/living/L, mob/user) + if(user.a_intent == INTENT_HELP) + to_chat(user, "You refrain from hitting [L] with [src], as you are in help intent.") + return + return ..() diff --git a/code/modules/unit_tests/character_saving.dm b/code/modules/unit_tests/character_saving.dm index 6c83d4142a..bdcb0f0276 100644 --- a/code/modules/unit_tests/character_saving.dm +++ b/code/modules/unit_tests/character_saving.dm @@ -11,4 +11,4 @@ if(P.features["ooc_notes"] != "Bar") Fail("OOC text is failing to save.") catch(var/exception/e) - Fail("Failed to save and load character due to exception [e.name]") + Fail("Failed to save and load character due to exception [e.file]:[e.line], [e.name]") diff --git a/code/modules/unit_tests/reactions.dm b/code/modules/unit_tests/reactions.dm new file mode 100644 index 0000000000..66d9b49099 --- /dev/null +++ b/code/modules/unit_tests/reactions.dm @@ -0,0 +1,6 @@ +/datum/unit_test/reactions/Run() + for(var/datum/gas_reaction/G in SSair.gas_reactions) + var/test_info = G.test() + if(!test_info["success"]) + var/message = test_info["message"] + Fail("Gas reaction [G.name] is failing its unit test with the following message: [message]") diff --git a/code/modules/uplink/uplink_items/uplink_dangerous.dm b/code/modules/uplink/uplink_items/uplink_dangerous.dm index 58cb43996d..898b716775 100644 --- a/code/modules/uplink/uplink_items/uplink_dangerous.dm +++ b/code/modules/uplink/uplink_items/uplink_dangerous.dm @@ -20,6 +20,7 @@ desc = "A sleek box containing a brutally simple Syndicate revolver that fires .357 Magnum rounds and has 7 chambers, and an extra speedloader." item = /obj/item/storage/box/syndie_kit/revolver cost = 13 + player_minimum = 15 surplus = 50 exclude_modes = list(/datum/game_mode/nuclear/clown_ops, /datum/game_mode/traitor/internal_affairs) diff --git a/html/changelog.html b/html/changelog.html index 864b5d19b0..b4f5d509a8 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,6 +50,196 @@ -->
+

20 September 2020

+

DeltaFire15 updated:

+
    +
  • Sutures work on simplemobs again.
  • +
  • Attacking dismembered bodyparts now targets the chest instead, for weapons aswell as unarmed attacks.
  • +
+

MrJWhit updated:

+
    +
  • New sprites for chess pieces! You can craft them in-game with metal sheets.
  • +
+

silicons updated:

+
    +
  • hulks can smash again (walls no longer break their hands)
  • +
  • acid no longer degrades armor
  • +
+ +

17 September 2020

+

DeltaFire15 updated:

+
    +
  • Failing the plushmium reaction can now create peculiar plushies, depending on reaction volume.
  • +
  • The mood-buff from petting a plushie now works properly again.
  • +
  • Fixed wacky necropolis loot chest behavior
  • +
+

EmeraldSundisk updated:

+
    +
  • Adds the Research Director's office to Omega Station
  • +
  • Adds 2 new solar arrays (and control rooms)
  • +
  • Adds some action figures that weren't there previously
  • +
  • The CMO's office now has a light switch
  • +
  • Slight readjustments to impacted areas
  • +
  • Readjusts the toxins air supply line to (ideally) be easier to service
  • +
  • Department camera consoles should now be able to actually check appropriate cameras
  • +
  • Xenobiology can now be locked down (by the Research Director)
  • +
+

MrJWhit updated:

+
    +
  • Adds a brain damage line
  • +
+

Putnam3145 updated:

+
    +
  • Your balls finally feel full, again.
  • +
+

timothyteakettle updated:

+
    +
  • due to changes in policy, and several lawsuits, Nanotrasen has been forced to allow disabled people to sign up
  • +
+ +

16 September 2020

+

timothyteakettle updated:

+
    +
  • fixed an icon path
  • +
+ +

12 September 2020

+

BlueWildrose updated:

+
    +
  • The Polychromic winter coat's hoodie will now polychrome, alongside any other new polychromic items with toggleable headwear.
  • +
  • Minesweeper will no longer blow up the player's ears when they select "Play on the same board"
  • +
  • Slimepeople will find warm donk pockets among other toxin healing items even more repulsive, as they are anti-toxic.
  • +
  • Slimepeople are now neutral to gross foods.
  • +
+

DeltaFire15 updated:

+
    +
  • AIs can no longer qdel() the gravity generator
  • +
+

Putnam3145 updated:

+
    +
  • Added some unit tests for reactions.
  • +
  • replaced handle_changeling and handle_bloodsucker with signal registration
  • +
+

Sonic121x updated:

+
    +
  • Fixed pill button on chemical press
  • +
+

TheObserver-sys updated:

+
    +
  • Brass now has a proper datum. Aspiring Forgetenders rejoice!
  • +
+

Trilbyspaceclone updated:

+
    +
  • Race based drinks will no longer stay inside your blood for ever.
  • +
+

Tupinambis updated:

+
    +
  • Redid Cogstation atmos pipes to make it less cluttered.
  • +
  • Removed a few doors from the main hallway to mitigate chokepoint issues
  • +
  • All belt hell conveyers are now on by default, so that belt hell actually works.
  • +
  • IDs for poddoors and belts and the like. Everything is now properly hooked and should work as expected (except for the pressure triggered mass drivers)
  • +
  • addresses most if not all roundstart active turfs.
  • +
  • Issue where wires were connected to the SMES improperly, and SMES were not properly precharged, resulting in power failure earlier than intended.
  • +
  • various rogue turfs and wirings.
  • +
  • security office APC being hooked to maintenance for some reason.
  • +
  • TEG is now directly wired to the SMES.
  • +
  • adds a subtype of mass drivers that is triggered by things being on it. TODO: Make these mass drivers trigger poddoors, to make belt hell fully functional.
  • +
+

lolman360 updated:

+
    +
  • glaives now work again
  • +
+

zeroisthebiggay updated:

+
    +
  • Revolver is now poplocked down to fifteen people.
  • +
+ +

11 September 2020

+

Putnam3145 updated:

+
    +
  • Superconducting turfs now can't go below 0 celsius.
  • +
+ +

09 September 2020

+

Putnam3145 updated:

+
    +
  • Made superconductivity work for the first time literally ever.
  • +
+

timothyteakettle updated:

+
    +
  • accents work better
  • +
+ +

08 September 2020

+

Ghommie updated:

+
    +
  • fixed names of the Electrical Toolbox goodie pack and green croptop christmas suit.
  • +
  • Fixed turf visuals for real. Original PR by AnturK on tgstation.
  • +
+

KeRSedChaplain updated:

+
    +
  • added borg_deathsound.ogg and android_scream.ogg
  • +
+

silicons updated:

+
    +
  • meteor waves now have a static 5 minute timer.
  • +
+ +

07 September 2020

+

DeltaFire15 updated:

+
    +
  • fixed a typo causing a span not to show.
  • +
+

Putnam for debugging ammo loading! Thx!! updated:

+
    +
  • Removed spell blade, diamond picaxe, and fire wand from lava land loot tables
  • +
  • Each mini boss now has its own type of crate.
  • +
  • Each spike has its own type of crate that it pulls its now smaller loot table from
  • +
  • Moved god eye from spike loot table to hard spawn collosses fight
  • +
  • Moved holoparasight from spike loot table to bubble gum
  • +
  • Moved magic meat hook from spike loot table to drake
  • +
  • 2 more crates to Arena Shuttle as well as 4-4-4 of each new type of chest
  • +
  • Replaced the diamond pick loot with a better one
  • +
  • Replaced the cursted katana with a non cursted verson that deals half the damage and has less block!
  • +
  • Three new potions, blue heals the mind like a mama potion, Green heals the soul aka the organs! Lastly Red heals the body, by 100 damage of each main types. Best not to waste them!
  • +
  • Four more "wands" Spellbooks! These fun little guys shoot out its own pages to do the affect, one will set the target on fire like a bullet, one will harm them a bit, one will heal the target a small bit - How nice! Last one will give them a few statis affects like a taser bolt but without as much power or tasing affect
  • +
+ +

06 September 2020

+

Putnam3145 updated:

+
    +
  • Dynamic no longer pushes events.
  • +
  • Made spontaneous brain trauma a good deal less annoying.
  • +
+

lolman360, NecromancerAnne updated:

+
    +
  • The ancient art of blacksmithing, now in pixels.
  • +
  • cool swords and shit (thanks anne)
  • +
+

raspy-on-osu updated:

+
    +
  • thermomachine examine text
  • +
+ +

05 September 2020

+

Bhijn updated:

+
    +
  • Readded the old method of temperature notifications in the form of a new pair of shivering/sweating notifications.
  • +
+

Putnam3145 updated:

+
    +
  • Hilbert hotel flavor text for one particular snowflake hotel changed.
  • +
  • admins can now actually reduce threat level in dynamic
  • +
  • Made owo.ogg smaller.
  • +
  • Character saving unit test is now more verbose on failure.
  • +
  • Added an extools proc hook alternative to rust_g logging.
  • +
+

raspy-on-osu updated:

+
    +
  • supermatter shard examine text
  • +
  • protolathe item categories
  • +
+

04 September 2020

timothyteakettle updated:

    @@ -1169,280 +1359,6 @@
  • Service borgs now have synthesizers instead of a violin and guitar.
  • borg RSF
- -

19 July 2020

-

Arturlang updated:

-
    -
  • TGUI 3.0 and enables all the UIs, plus the smart asset cache, and all the things required for them
  • -
-

EmeraldSundisk updated:

-
    -
  • Adds a pool to Delta Station
  • -
  • Adds light fixtures to specified areas
  • -
  • Relocates objects in impacted areas of Delta's starboard maintenance
  • -
-

MrJWhit updated:

-
    -
  • Adds a small light next to the kitchen counter
  • -
-

Putnam3145 updated:

-
    -
  • Pen uplinks no longer broken
  • -
-

TheObserver-sys updated:

-
    -
  • Adds a new reaction: Slime Extractification. Take 30u Slime Jelly, 5u Frost Oil, and 5u plasma to generate a fresh grey slime extract.
  • -
-

Yakumo Chen updated:

-
    -
  • Hierophant club now checks for friendly fire by default.
  • -
-

b1tt3r1n0 updated:

-
    -
  • Added the updated circle game
  • -
-

silicons updated:

-
    -
  • Unarmed parry is now a thing.
  • -
-

timothyteakettle updated:

-
    -
  • plushies in the loadout have been replaced with a box that lets you choose one instead
  • -
  • wrestling should no longer have the ability to permanently rotate people
  • -
  • you can now select to wear a snail shell as your backpack in the customization menu
  • -
-

zeroisthebiggay updated:

-
    -
  • martial arts twenty minpop
  • -
  • records
  • -
- -

17 July 2020

-

ShizCalev, Fikou updated:

-
    -
  • Added some sanity checking for varedit values.
  • -
  • Fixed an exploit involving coins and mints that could crash the server.
  • -
  • Fixed an exploit that would allow you to destroy round-critical / indestructible items with folders.
  • -
  • Swarmers can no longer cut power lines by deconstructing catwalks underneath them.
  • -
  • Fixed a scenario that allowed infinite resource generation via ore machines.
  • -
  • you can no longer inject html in ahelps
  • -
  • you cant either, jannies
  • -
-

timothyteakettle updated:

-
    -
  • fixes a small pickle related issue
  • -
  • recent culinary and scientific advancements have brought forth new pickle related technologies
  • -
- -

16 July 2020

-

DeltaFire15 updated:

-
    -
  • Fixes a zeolite runtime caused by a missing check.
  • -
-

Sneakyrat6 updated:

-
    -
  • Fixes being able to meta people real name with OOC Notes
  • -
-

timothyteakettle updated:

-
    -
  • travelling traders from another dimension can now visit the station in search of something specific, and reward you for giving it to them
  • -
  • small error with pet carrier logic fixed and also making sure simple mobs are catered for properly inside bluespace jars
  • -
  • fixes coin related issue
  • -
- -

15 July 2020

-

Sonic121x updated:

-
    -
  • Paramedic jumpsuit
  • -
- -

14 July 2020

-

silicons updated:

-
    -
  • chemical reactions now are sorted by priority first and temperature second.
  • -
  • sec and medical records have been added to character setup.
  • -
  • circuit reagent heaters are now sanitized for temperature from 2.7 to 1000.
  • -
-

timothyteakettle updated:

-
    -
  • ports a money bag exploit
  • -
- -

13 July 2020

-

Linzolle updated:

-
    -
  • you can no longer vore and digest people regardless of vore preferences
  • -
-

Owai-Seek updated:

-
    -
  • Trashbags can now hold most shoes, and organs.
  • -
  • You can no longer nest nuke disks or hold brains in the trash.
  • -
- -

12 July 2020

-

DeltaFire15 updated:

-
    -
  • Sentinels compromise now heals augmented bodyparts.
  • -
-

EmeraldSundisk updated:

-
    -
  • Adds turnstiles to CogStation's security wing
  • -
  • Readds robotics to the Corpse Disposal Network
  • -
  • Readds chemistry's ability to send items directly to the experimentation lab
  • -
  • Visual renovation and slight adjustments to CogStation's robotics lab
  • -
  • Slight visual adjustments elsewhere (the library)
  • -
  • CogStation's mail and disposal pipes are once again complete
  • -
  • CogStation's robotics lab now has spawners, lights, and other room essentials
  • -
-

HeroWithYay updated:

-
    -
  • Added Telecrystal Dust
  • -
  • Telecrystals can be sold at cargo
  • -
-

LetterN updated:

-
    -
  • Added d[thing] emojis
  • -
  • bye xss
  • -
-

MrJWhit updated:

-
    -
  • Removes northern tunnel to the monastery on Pubby
  • -
-

Yakumo Chen updated:

-
    -
  • Adds a wedding crate to cargo full of wedding attire.
  • -
-

kappa-sama updated:

-
    -
  • wisdom cow is half as common and is wise enough to lag the server 66% less
  • -
-

silicons updated:

-
    -
  • policy configuration added, plus support hooks for assisting enforcement of clone memory disorder. logging: added logging of revival by defib, cloning, strangereagent, and revival surgery
  • -
  • You can now "audibly emote" by having ! at the start of a sentence.
  • -
-

timothyteakettle updated:

-
    -
  • due to recent biological advancements, you can now make eye contact with people.
  • -
-

zeroisthebiggay updated:

-
    -
  • a singular stray pixel
  • -
- -

11 July 2020

-

Putnam3145 updated:

-
    -
  • Gas mixtures now live entirely in a DLL.
  • -
- -

10 July 2020

-

Chiirno updated:

-
    -
  • Gave jellypeople a unique brain object /obj/item/organ/brain/jelly
  • -
  • added an icon for jellypeople brains.
  • -
-

EmeraldSundisk updated:

-
    -
  • Adds a pool to PubbyStation
  • -
  • Slight adjustments to the surrounding area as to fit said pool
  • -
-

Sneakyrat6 updated:

-
    -
  • Fixes hair falling out of hoodies.
  • -
-

TheObserver-sys updated:

-
    -
  • Actually adds the juice reagent to make laugh peas donuts.
  • -
- -

09 July 2020

-

timothyteakettle updated:

-
    -
  • bluespace tray added, allowing twice as many items as the regular tray, printable at the service lathe, researched through science
  • -
  • bluespace jar added, a kind of pet carrier that allows human sized mobs inside, and smashes when thrown, researched and printed through science
  • -
- -

08 July 2020

-

DeltaFire15 updated:

-
    -
  • The kill-once objective now works properly.
  • -
-

EmeraldSundisk updated:

-
    -
  • CogStation now has an apothecary
  • -
  • Removes an outdated note on sleepers
  • -
  • Readjusts CogStation's chemistry lab
  • -
  • Slight area designation adjustments for Robotics
  • -
  • The arrivals plaque should be readable now
  • -
-

Owai-Seek updated:

-
    -
  • Margarine, Chili Cheese Fries.
  • -
  • Egg Wraps are now categorized under egg foods.
  • -
  • Tuna Sandwich crafting/sprite is now visible.
  • -
  • Icons for chicken, cooked chicken, steak, grilled carp, corndogs
  • -
  • Icons for chili cheese fries, margarine, BLT sandwich
  • -
  • (Unused) icons for raw meatballs, and lard
  • -
- -

07 July 2020

-

KasparoVy updated:

-
    -
  • Fixes misaligned south-facing silver legwraps sprite.
  • -
-

Owai-Seek updated:

-
    -
  • Bee Balm is now visible.
  • -
-

Weblure updated:

-
    -
  • Fixed the slowdown formula for small character sprites; you guys don't use custom sprite sizes so just ignore these changes.
  • -
  • Fixed the "Move it to the threshold" button; it now does what it says.
  • -
  • Reworded some text to be clearer.
  • -
- -

05 July 2020

-

Ghommie updated:

-
    -
  • You can now actually gain wiring experience from using cable coils.
  • -
  • Opening the View Skill Panel shouldn't trigger messages about insufficient admin priviledges anymore.
  • -
-

Yakumo Chen, kappa-sama updated:

-
    -
  • Removes improvised handguns
  • -
  • removed handsaws, improvised gun barrels (you can use atmos pipes again)
  • -
  • Guncrafting is less time and resource intensive
  • -
  • Item names in guncrafting are user-friendly.
  • -
-

kappa-sama updated:

-
    -
  • cloth string to replace durathread string
  • -
  • durathread string
  • -
  • All bows and arrows have had crafting times significantly reduced, coming out at up to 6 times faster crafting speeds. Improvised bows no longer require durathread; instead, they use cloth materials.
  • -
-

silicons updated:

-
    -
  • active blocking now has a toggle keybind
  • -
  • auto bunker override verb has been added
  • -
  • shields take 2.5 stam instead of 3.5 stam per second to maintain block
  • -
  • Cybernetic implant shields will auto-extend and be used to block if the user has no item to block with
  • -
-

timothyteakettle updated:

-
    -
  • cooking oil is now far less lethal, requiring a higher volume of the reagent to deal more damage
  • -
- -

04 July 2020

-

Sonic121x updated:

-
    -
  • crushed Soldry sodacan
  • -
  • digitigrade version of chief medical officer's turtleneck and captain's female formal outfit.
  • -
-

silicons updated:

-
    -
  • blood_DNA["color"] is now a single variable instead of a list
  • -
GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 134fadc0c5..8e0fb21e2d 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -27215,3 +27215,142 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. 2020-09-04: timothyteakettle: - bugfix: ipcs can speak +2020-09-05: + Bhijn: + - rscadd: Readded the old method of temperature notifications in the form of a new + pair of shivering/sweating notifications. + Putnam3145: + - tweak: Hilbert hotel flavor text for one particular snowflake hotel changed. + - admin: admins can now actually reduce threat level in dynamic + - tweak: Made owo.ogg smaller. + - tweak: Character saving unit test is now more verbose on failure. + - refactor: Added an extools proc hook alternative to rust_g logging. + raspy-on-osu: + - tweak: supermatter shard examine text + - tweak: protolathe item categories +2020-09-06: + Putnam3145: + - rscdel: Dynamic no longer pushes events. + - balance: Made spontaneous brain trauma a good deal less annoying. + lolman360, NecromancerAnne: + - rscadd: The ancient art of blacksmithing, now in pixels. + - imageadd: cool swords and shit (thanks anne) + raspy-on-osu: + - tweak: thermomachine examine text +2020-09-07: + DeltaFire15: + - spellcheck: fixed a typo causing a span not to show. + Putnam for debugging ammo loading! Thx!!: + - rscdel: Removed spell blade, diamond picaxe, and fire wand from lava land loot + tables + - tweak: Each mini boss now has its own type of crate. + - tweak: Each spike has its own type of crate that it pulls its now smaller loot + table from + - balance: Moved god eye from spike loot table to hard spawn collosses fight + - balance: Moved holoparasight from spike loot table to bubble gum + - balance: Moved magic meat hook from spike loot table to drake + - rscadd: 2 more crates to Arena Shuttle as well as 4-4-4 of each new type of chest + - balance: Replaced the diamond pick loot with a better one + - tweak: Replaced the cursted katana with a non cursted verson that deals half the + damage and has less block! + - rscadd: Three new potions, blue heals the mind like a mama potion, Green heals + the soul aka the organs! Lastly Red heals the body, by 100 damage of each main + types. Best not to waste them! + - rscadd: Four more "wands" Spellbooks! These fun little guys shoot out its own + pages to do the affect, one will set the target on fire like a bullet, one will + harm them a bit, one will heal the target a small bit - How nice! Last one will + give them a few statis affects like a taser bolt but without as much power or + tasing affect +2020-09-08: + Ghommie: + - spellcheck: fixed names of the Electrical Toolbox goodie pack and green croptop + christmas suit. + - bugfix: Fixed turf visuals for real. Original PR by AnturK on tgstation. + KeRSedChaplain: + - soundadd: added borg_deathsound.ogg and android_scream.ogg + silicons: + - balance: meteor waves now have a static 5 minute timer. +2020-09-09: + Putnam3145: + - bugfix: Made superconductivity work for the first time literally ever. + timothyteakettle: + - bugfix: accents work better +2020-09-11: + Putnam3145: + - balance: Superconducting turfs now can't go below 0 celsius. +2020-09-12: + BlueWildrose: + - bugfix: The Polychromic winter coat's hoodie will now polychrome, alongside any + other new polychromic items with toggleable headwear. + - bugfix: Minesweeper will no longer blow up the player's ears when they select + "Play on the same board" + - rscadd: Slimepeople will find warm donk pockets among other toxin healing items + even more repulsive, as they are anti-toxic. + - tweak: Slimepeople are now neutral to gross foods. + DeltaFire15: + - balance: AIs can no longer qdel() the gravity generator + Putnam3145: + - code_imp: Added some unit tests for reactions. + - refactor: replaced handle_changeling and handle_bloodsucker with signal registration + Sonic121x: + - bugfix: Fixed pill button on chemical press + TheObserver-sys: + - rscadd: Brass now has a proper datum. Aspiring Forgetenders rejoice! + Trilbyspaceclone: + - bugfix: Race based drinks will no longer stay inside your blood for ever. + Tupinambis: + - tweak: Redid Cogstation atmos pipes to make it less cluttered. + - tweak: Removed a few doors from the main hallway to mitigate chokepoint issues + - bugfix: All belt hell conveyers are now on by default, so that belt hell actually + works. + - bugfix: IDs for poddoors and belts and the like. Everything is now properly hooked + and should work as expected (except for the pressure triggered mass drivers) + - bugfix: addresses most if not all roundstart active turfs. + - bugfix: Issue where wires were connected to the SMES improperly, and SMES were + not properly precharged, resulting in power failure earlier than intended. + - bugfix: various rogue turfs and wirings. + - bugfix: security office APC being hooked to maintenance for some reason. + - bugfix: TEG is now directly wired to the SMES. + - code_imp: 'adds a subtype of mass drivers that is triggered by things being on + it. TODO: Make these mass drivers trigger poddoors, to make belt hell fully + functional.' + lolman360: + - bugfix: glaives now work again + zeroisthebiggay: + - balance: Revolver is now poplocked down to fifteen people. +2020-09-16: + timothyteakettle: + - tweak: fixed an icon path +2020-09-17: + DeltaFire15: + - rscadd: Failing the plushmium reaction can now create peculiar plushies, depending + on reaction volume. + - bugfix: The mood-buff from petting a plushie now works properly again. + - bugfix: Fixed wacky necropolis loot chest behavior + EmeraldSundisk: + - rscadd: Adds the Research Director's office to Omega Station + - rscadd: Adds 2 new solar arrays (and control rooms) + - rscadd: Adds some action figures that weren't there previously + - rscadd: The CMO's office now has a light switch + - tweak: Slight readjustments to impacted areas + - tweak: Readjusts the toxins air supply line to (ideally) be easier to service + - bugfix: Department camera consoles should now be able to actually check appropriate + cameras + - bugfix: Xenobiology can now be locked down (by the Research Director) + MrJWhit: + - rscadd: Adds a brain damage line + Putnam3145: + - bugfix: Your balls finally feel full, again. + timothyteakettle: + - rscadd: due to changes in policy, and several lawsuits, Nanotrasen has been forced + to allow disabled people to sign up +2020-09-20: + DeltaFire15: + - bugfix: Sutures work on simplemobs again. + - bugfix: Attacking dismembered bodyparts now targets the chest instead, for weapons + aswell as unarmed attacks. + MrJWhit: + - rscadd: New sprites for chess pieces! You can craft them in-game with metal sheets. + silicons: + - balance: hulks can smash again (walls no longer break their hands) + - rscdel: acid no longer degrades armor diff --git a/icons/effects/mouse_pointers/mute_target.dmi b/icons/effects/mouse_pointers/mute_target.dmi new file mode 100644 index 0000000000..8e3c278d3b Binary files /dev/null and b/icons/effects/mouse_pointers/mute_target.dmi differ diff --git a/icons/mob/actions/actions_ecult.dmi b/icons/mob/actions/actions_ecult.dmi index 0a130f006e..d083206454 100644 Binary files a/icons/mob/actions/actions_ecult.dmi and b/icons/mob/actions/actions_ecult.dmi differ diff --git a/icons/mob/augmentation/cosmetic_prosthetic/bishop.dmi b/icons/mob/augmentation/cosmetic_prosthetic/bishop.dmi new file mode 100644 index 0000000000..8641ef2d3c Binary files /dev/null and b/icons/mob/augmentation/cosmetic_prosthetic/bishop.dmi differ diff --git a/icons/mob/augmentation/cosmetic_prosthetic/cybersolutions.dmi b/icons/mob/augmentation/cosmetic_prosthetic/cybersolutions.dmi new file mode 100644 index 0000000000..eeed0d0c01 Binary files /dev/null and b/icons/mob/augmentation/cosmetic_prosthetic/cybersolutions.dmi differ diff --git a/icons/mob/augmentation/cosmetic_prosthetic/grayson.dmi b/icons/mob/augmentation/cosmetic_prosthetic/grayson.dmi new file mode 100644 index 0000000000..9ed6c5f06f Binary files /dev/null and b/icons/mob/augmentation/cosmetic_prosthetic/grayson.dmi differ diff --git a/icons/mob/augmentation/cosmetic_prosthetic/hephaestus.dmi b/icons/mob/augmentation/cosmetic_prosthetic/hephaestus.dmi new file mode 100644 index 0000000000..4bb6b72fd0 Binary files /dev/null and b/icons/mob/augmentation/cosmetic_prosthetic/hephaestus.dmi differ diff --git a/icons/mob/augmentation/cosmetic_prosthetic/nanotrasen.dmi b/icons/mob/augmentation/cosmetic_prosthetic/nanotrasen.dmi new file mode 100644 index 0000000000..18c7738ba3 Binary files /dev/null and b/icons/mob/augmentation/cosmetic_prosthetic/nanotrasen.dmi differ diff --git a/icons/mob/augmentation/cosmetic_prosthetic/talon.dmi b/icons/mob/augmentation/cosmetic_prosthetic/talon.dmi new file mode 100644 index 0000000000..9e4b93fb54 Binary files /dev/null and b/icons/mob/augmentation/cosmetic_prosthetic/talon.dmi differ diff --git a/icons/mob/augmentation/cosmetic_prosthetic/ward.dmi b/icons/mob/augmentation/cosmetic_prosthetic/ward.dmi new file mode 100644 index 0000000000..b2622ef6a1 Binary files /dev/null and b/icons/mob/augmentation/cosmetic_prosthetic/ward.dmi differ diff --git a/icons/mob/augmentation/cosmetic_prosthetic/xion.dmi b/icons/mob/augmentation/cosmetic_prosthetic/xion.dmi new file mode 100644 index 0000000000..823205742a Binary files /dev/null and b/icons/mob/augmentation/cosmetic_prosthetic/xion.dmi differ diff --git a/icons/mob/clothing/custom_w.dmi b/icons/mob/clothing/custom_w.dmi index 7452d63134..418db3f9e9 100644 Binary files a/icons/mob/clothing/custom_w.dmi and b/icons/mob/clothing/custom_w.dmi differ diff --git a/icons/mob/cyborg/Drakeborg-licensing.txt b/icons/mob/cyborg/Drakeborg-licensing.txt deleted file mode 100644 index f2d3ca925c..0000000000 --- a/icons/mob/cyborg/Drakeborg-licensing.txt +++ /dev/null @@ -1,69 +0,0 @@ -Drakeborg & drakeplushies are created by deviantart.com/mizartz - -https://creativecommons.org/licenses/by-nc-sa/3.0/ -Attribution-NonCommercial-ShareAlike 3.0 Unported - -CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE. -License -THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. - -BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. - -1. Definitions - -"Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. -"Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(g) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. -"Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. -"License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, Noncommercial, ShareAlike. -"Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. -"Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. -"Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. -"You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. -"Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. -"Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. -2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. - -3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: - -to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; -to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; -to Distribute and Publicly Perform the Work including as incorporated in Collections; and, -to Distribute and Publicly Perform Adaptations. -The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights described in Section 4(e). - -4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: - -You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(d), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(d), as requested. -You may Distribute or Publicly Perform an Adaptation only under: (i) the terms of this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-NonCommercial-ShareAlike 3.0 US) ("Applicable License"). You must include a copy of, or the URI, for Applicable License with every copy of each Adaptation You Distribute or Publicly Perform. You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License. You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License. -You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in con-nection with the exchange of copyrighted works. -If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and, (iv) consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(d) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. -For the avoidance of doubt: - -Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; -Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(c) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and, -Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(c). -Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. -5. Representations, Warranties and Disclaimer - -UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING AND TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO THIS EXCLUSION MAY NOT APPLY TO YOU. - -6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -7. Termination - -This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. -Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. -8. Miscellaneous - -Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. -Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. -If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. -No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. -This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. -The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. -Creative Commons Notice -Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor. - -Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, Creative Commons does not authorize the use by either party of the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time. For the avoidance of doubt, this trademark restriction does not form part of this License. - -Creative Commons may be contacted at https://creativecommons.org/. \ No newline at end of file diff --git a/icons/mob/cyborg/drakemech.dmi b/icons/mob/cyborg/drakemech.dmi deleted file mode 100644 index 6a4845d983..0000000000 Binary files a/icons/mob/cyborg/drakemech.dmi and /dev/null differ diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi index 315ca5e924..0a82845910 100644 Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi index 6af883f2e8..abfbb18f84 100644 Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi index 4ced910193..e64c037cf8 100644 Binary files a/icons/mob/screen_alert.dmi and b/icons/mob/screen_alert.dmi differ diff --git a/icons/obj/chess.dmi b/icons/obj/chess.dmi index 09d9c766fd..ec9415eab4 100644 Binary files a/icons/obj/chess.dmi and b/icons/obj/chess.dmi differ diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi index c106bd12fc..1a98872463 100644 Binary files a/icons/obj/clothing/belts.dmi and b/icons/obj/clothing/belts.dmi differ diff --git a/icons/obj/custom.dmi b/icons/obj/custom.dmi index 9067a4beca..f15adfa85a 100644 Binary files a/icons/obj/custom.dmi and b/icons/obj/custom.dmi differ diff --git a/icons/obj/eldritch.dmi b/icons/obj/eldritch.dmi index 50c2913708..294deda628 100644 Binary files a/icons/obj/eldritch.dmi and b/icons/obj/eldritch.dmi differ diff --git a/icons/obj/library.dmi b/icons/obj/library.dmi index 727d69b1e3..6e14c4c6ca 100644 Binary files a/icons/obj/library.dmi and b/icons/obj/library.dmi differ diff --git a/icons/obj/license.txt b/icons/obj/license.txt deleted file mode 100644 index 2e27ba80f2..0000000000 --- a/icons/obj/license.txt +++ /dev/null @@ -1,3 +0,0 @@ -icons/obj/plushies.dmi's icon state of secdrake and meddrake by Mizartz. It has been licensed under the CC BY-NC-SA 3.0 license. - -CC BY-NC-SA 3.0 https://creativecommons.org/licenses/by-nc-sa/3.0/ \ No newline at end of file diff --git a/icons/obj/mining.dmi b/icons/obj/mining.dmi index e7063b71db..400c5bdfa0 100644 Binary files a/icons/obj/mining.dmi and b/icons/obj/mining.dmi differ diff --git a/icons/obj/plushes.dmi b/icons/obj/plushes.dmi index ac0c338016..11d02a46cc 100644 Binary files a/icons/obj/plushes.dmi and b/icons/obj/plushes.dmi differ diff --git a/icons/obj/smith.dmi b/icons/obj/smith.dmi new file mode 100644 index 0000000000..a40b9a2b19 Binary files /dev/null and b/icons/obj/smith.dmi differ diff --git a/libbyond-extools.so b/libbyond-extools.so index 8e17f952f2..052a8cb037 100644 Binary files a/libbyond-extools.so and b/libbyond-extools.so differ diff --git a/modular_citadel/code/modules/client/loadout/__donator.dm b/modular_citadel/code/modules/client/loadout/__donator.dm index 478fb41a23..5add1e3f87 100644 --- a/modular_citadel/code/modules/client/loadout/__donator.dm +++ b/modular_citadel/code/modules/client/loadout/__donator.dm @@ -510,3 +510,9 @@ slot = SLOT_IN_BACKPACK path = /obj/item/bedsheet/cosmos ckeywhitelist = list("grunnyyy") + +/datum/gear/donator/hisakaki + name = "halo" + slot = SLOT_HEAD + path = /obj/item/clothing/head/halo + ckeywhitelist = list("hisakaki") diff --git a/modular_citadel/code/modules/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm index 374312a26a..9de4cb235b 100644 --- a/modular_citadel/code/modules/custom_loadout/custom_items.dm +++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm @@ -550,3 +550,11 @@ desc = "A fancy cloak embroidered with polychromatic thread in a pattern that reminds one of the wielders of unlimited power." icon_state = "polyce" poly_colors = list("#808080", "#8CC6FF", "#FF3535") + +/obj/item/clothing/head/halo + name = "transdimensional halo" + desc = "An oddly shaped halo that magically hovers above the head." + icon_state = "halo" + item_state = "halo" + icon = 'icons/obj/custom.dmi' + mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi' \ No newline at end of file diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm index 39ba69bd61..0cee2fc5cd 100644 --- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm +++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm @@ -253,6 +253,7 @@ holder.remove_reagent(type, cached_volume) holder.add_reagent(/datum/reagent/fermi/PEsmaller, cached_volume) +/* /datum/chemical_reaction/fermi/astral name = "Astrogen" id = /datum/reagent/fermi/astral @@ -274,7 +275,7 @@ FermiChem = TRUE FermiExplode = TRUE PurityMin = 0.25 - +*/ /datum/chemical_reaction/fermi/enthrall //check this name = "MKUltra" @@ -500,7 +501,10 @@ PurityMin = 0.6 /datum/chemical_reaction/fermi/plushmium/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH) - new /obj/item/toy/plush/random(get_turf(my_atom)) + if(volume < 20) //It creates a normal plush at low volume.. at higher amounts, things get slightly more interesting. + new /obj/item/toy/plush/random(get_turf(my_atom)) + else + new /obj/item/toy/plush/plushling(get_turf(my_atom)) my_atom.visible_message("The reaction suddenly zaps, creating a plushie!") my_atom.reagents.clear_reagents() diff --git a/modular_citadel/icons/mob/widerobot.dmi b/modular_citadel/icons/mob/widerobot.dmi index 29eb35c715..50c29bb75f 100644 Binary files a/modular_citadel/icons/mob/widerobot.dmi and b/modular_citadel/icons/mob/widerobot.dmi differ diff --git a/sound/voice/borg_deathsound.ogg b/sound/voice/borg_deathsound.ogg new file mode 100644 index 0000000000..bb11022abe Binary files /dev/null and b/sound/voice/borg_deathsound.ogg differ diff --git a/sound/voice/medbot/owo.ogg b/sound/voice/medbot/owo.ogg index 0fdaa9d483..5eeb502c88 100644 Binary files a/sound/voice/medbot/owo.ogg and b/sound/voice/medbot/owo.ogg differ diff --git a/sound/voice/scream/android_scream.ogg b/sound/voice/scream/android_scream.ogg new file mode 100644 index 0000000000..d3f179a84a Binary files /dev/null and b/sound/voice/scream/android_scream.ogg differ diff --git a/strings/traumas.json b/strings/traumas.json index f8fed95c98..e5048d41b2 100644 --- a/strings/traumas.json +++ b/strings/traumas.json @@ -132,7 +132,8 @@ "@pick(semicolon)My balls finally feel full, again.", "@pick(semicolon)Assaltign a sec osficer aren't crime if ur @pick(roles)", ";SEC I SPILED MU JICE HELELPH HELPJ JLEP HELP", - "@pick(semicolon) atmos is chemistyr is radation fast air is FASTER cheemsitry and FASTER RADIATION AND FASTER DEATH!!!" + "@pick(semicolon) atmos is chemistyr is radation fast air is FASTER cheemsitry and FASTER RADIATION AND FASTER DEATH!!!", + "@pick(semicolon) FUC'KING MuNKEY WAch TALKN SHIT" ], "mutations": [ diff --git a/tgstation.dme b/tgstation.dme index a7fbeb6307..c781c9893a 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -17,6 +17,7 @@ #include "_maps\_basemap.dm" #include "code\_compile_options.dm" #include "code\world.dm" +#include "code\__DEFINES\_extools.dm" #include "code\__DEFINES\_globals.dm" #include "code\__DEFINES\_protect.dm" #include "code\__DEFINES\_tick.dm" @@ -141,12 +142,14 @@ #include "code\__DEFINES\mapping\maploader.dm" #include "code\__DEFINES\material\worth.dm" #include "code\__DEFINES\mobs\slowdowns.dm" +#include "code\__DEFINES\research\anomalies.dm" #include "code\__DEFINES\research\stock_parts.dm" #include "code\__DEFINES\skills\defines.dm" #include "code\__DEFINES\skills\helpers.dm" #include "code\__DEFINES\storage\_storage.dm" #include "code\__DEFINES\storage\volumetrics.dm" #include "code\__HELPERS\_cit_helpers.dm" +#include "code\__HELPERS\_extools_api.dm" #include "code\__HELPERS\_lists.dm" #include "code\__HELPERS\_logging.dm" #include "code\__HELPERS\_string_lists.dm" @@ -648,6 +651,7 @@ #include "code\datums\skills\_skill.dm" #include "code\datums\skills\_skill_holder.dm" #include "code\datums\skills\_skill_modifier.dm" +#include "code\datums\skills\blacksmithing.dm" #include "code\datums\skills\engineering.dm" #include "code\datums\skills\medical.dm" #include "code\datums\skills\modifiers\job.dm" @@ -737,7 +741,6 @@ #include "code\game\gamemodes\devil\devil agent\devil_agent.dm" #include "code\game\gamemodes\dynamic\dynamic.dm" #include "code\game\gamemodes\dynamic\dynamic_rulesets.dm" -#include "code\game\gamemodes\dynamic\dynamic_rulesets_events.dm" #include "code\game\gamemodes\dynamic\dynamic_rulesets_latejoin.dm" #include "code\game\gamemodes\dynamic\dynamic_rulesets_midround.dm" #include "code\game\gamemodes\dynamic\dynamic_rulesets_roundstart.dm" @@ -3025,6 +3028,7 @@ #include "code\modules\projectiles\guns\energy\pulse.dm" #include "code\modules\projectiles\guns\energy\special.dm" #include "code\modules\projectiles\guns\energy\stun.dm" +#include "code\modules\projectiles\guns\magic\spell_book.dm" #include "code\modules\projectiles\guns\magic\staff.dm" #include "code\modules\projectiles\guns\magic\wand.dm" #include "code\modules\projectiles\guns\misc\beam_rifle.dm" @@ -3143,6 +3147,8 @@ #include "code\modules\research\server.dm" #include "code\modules\research\stock_parts.dm" #include "code\modules\research\anomaly\anomaly_core.dm" +#include "code\modules\research\anomaly\explosive_compressor.dm" +#include "code\modules\research\anomaly\raw_anomaly.dm" #include "code\modules\research\designs\AI_module_designs.dm" #include "code\modules\research\designs\autobotter_designs.dm" #include "code\modules\research\designs\autoylathe_designs.dm" @@ -3283,6 +3289,7 @@ #include "code\modules\ruins\spaceruin_code\whiteshipruin_box.dm" #include "code\modules\security_levels\keycard_authentication.dm" #include "code\modules\security_levels\security_levels.dm" +#include "code\modules\shielding\helpers.dm" #include "code\modules\shuttle\arrivals.dm" #include "code\modules\shuttle\assault_pod.dm" #include "code\modules\shuttle\computer.dm" @@ -3309,6 +3316,10 @@ #include "code\modules\shuttle\shuttle_creation\shuttle_creator_eye.dm" #include "code\modules\shuttle\shuttle_creation\shuttle_creator_overlay.dm" #include "code\modules\shuttle\shuttle_creation\shuttle_upgrades.dm" +#include "code\modules\smithing\anvil.dm" +#include "code\modules\smithing\finished_items.dm" +#include "code\modules\smithing\furnace.dm" +#include "code\modules\smithing\smithed_items.dm" #include "code\modules\spells\spell.dm" #include "code\modules\spells\spell_types\aimed.dm" #include "code\modules\spells\spell_types\area_teleport.dm"